diff --git a/biome.json b/biome.json index 847b1dc0..0dec793b 100644 --- a/biome.json +++ b/biome.json @@ -26,8 +26,13 @@ "style": { "noDescendingSpecificity": "off" }, + "complexity": { + "noImportantStyles": "off" + }, "suspicious": { - "noExplicitAny": "off" + "noArrayIndexKey": "off", + "noExplicitAny": "off", + "noImplicitAnyLet": "off" }, "performance": { "noImgElement": "off" diff --git a/docker/middleware.ts b/docker/middleware.ts index 3fd7f20e..4b189df8 100644 --- a/docker/middleware.ts +++ b/docker/middleware.ts @@ -1,4 +1,4 @@ -import { NextRequest, NextResponse } from 'next/server'; +import { type NextRequest, NextResponse } from 'next/server'; export const config = { matcher: '/:path*', diff --git a/package.json b/package.json index d8ca9cfd..306e10f3 100644 --- a/package.json +++ b/package.json @@ -49,11 +49,11 @@ "cypress-run": "cypress run cypress run", "lint": "biome lint .", "format": "biome format --write .", - "check": "biome check --apply" + "check": "biome check --write" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json,css}": [ - "npm run format" + "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true" ] }, "cacheDirectories": [ @@ -89,7 +89,6 @@ "detect-browser": "^5.2.0", "dotenv": "^17.2.3", "esbuild": "^0.25.11", - "eslint-plugin-promise": "^6.1.1", "fs-extra": "^11.3.2", "immer": "^10.2.0", "ipaddr.js": "^2.0.1", @@ -141,8 +140,6 @@ "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "@types/react-window": "^1.8.8", - "@typescript-eslint/eslint-plugin": "^8.46.2", - "@typescript-eslint/parser": "^8.46.2", "babel-plugin-react-compiler": "19.1.0-rc.2", "cross-env": "^10.1.0", "cypress": "^13.6.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92a8bd32..5db0535d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@clickhouse/client': specifier: ^1.12.0 - version: 1.12.1 + version: 1.14.0 '@date-fns/utc': specifier: ^1.2.0 version: 1.2.0 @@ -25,16 +25,16 @@ importers: version: 5.2.8 '@hello-pangea/dnd': specifier: ^17.0.0 - version: 17.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 17.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@prisma/adapter-pg': specifier: ^7.0.0 version: 7.0.0 '@prisma/client': specifier: ^7.0.0 - version: 7.0.0(prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) + version: 7.0.0(prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) '@prisma/extension-read-replicas': specifier: ^0.4.1 - version: 0.4.1(@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3)) + version: 0.4.1(@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3)) '@react-spring/web': specifier: ^10.0.3 version: 10.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -43,16 +43,16 @@ importers: version: 8.1.0(typescript@5.9.3) '@tanstack/react-query': specifier: ^5.90.5 - version: 5.90.5(react@19.2.0) + version: 5.90.10(react@19.2.0) '@umami/react-zen': specifier: ^0.210.0 - version: 0.210.0(@babel/core@7.28.3)(@types/react@19.2.2)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + version: 0.210.0(@babel/core@7.28.3)(@types/react@19.2.6)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) '@umami/redis-client': specifier: ^0.29.0 version: 0.29.0 bcryptjs: specifier: ^3.0.2 - version: 3.0.2 + version: 3.0.3 chalk: specifier: ^5.6.2 version: 5.6.2 @@ -94,10 +94,7 @@ importers: version: 17.2.3 esbuild: specifier: ^0.25.11 - version: 0.25.11 - eslint-plugin-promise: - specifier: ^6.1.1 - version: 6.6.0(eslint@8.57.1) + version: 0.25.12 fs-extra: specifier: ^11.3.2 version: 11.3.2 @@ -118,7 +115,7 @@ importers: version: 2.0.0 isbot: specifier: ^5.1.31 - version: 5.1.31 + version: 5.1.32 jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 @@ -133,7 +130,7 @@ importers: version: 0.543.0(react@19.2.0) maxmind: specifier: ^5.0.0 - version: 5.0.0 + version: 5.0.1 next: specifier: 15.5.3 version: 15.5.3(@babel/core@7.28.3)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -151,7 +148,7 @@ importers: version: 8.16.3 prisma: specifier: ^7.0.0 - version: 7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) pure-rand: specifier: ^7.0.1 version: 7.0.1 @@ -199,59 +196,53 @@ importers: version: 4.1.12 zustand: specifier: ^5.0.8 - version: 5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + version: 5.0.8(@types/react@19.2.6)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) devDependencies: '@biomejs/biome': specifier: ^2.3.6 - version: 2.3.6 + version: 2.3.7 '@formatjs/cli': specifier: ^4.2.29 - version: 4.8.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)) + version: 4.8.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)) '@netlify/plugin-nextjs': specifier: ^5.14.4 - version: 5.14.4 + version: 5.14.7 '@rollup/plugin-alias': specifier: ^5.0.0 - version: 5.1.1(rollup@4.52.5) + version: 5.1.1(rollup@4.53.3) '@rollup/plugin-commonjs': specifier: ^25.0.4 - version: 25.0.8(rollup@4.52.5) + version: 25.0.8(rollup@4.53.3) '@rollup/plugin-json': specifier: ^6.0.0 - version: 6.1.0(rollup@4.52.5) + version: 6.1.0(rollup@4.53.3) '@rollup/plugin-node-resolve': specifier: ^15.2.0 - version: 15.3.1(rollup@4.52.5) + version: 15.3.1(rollup@4.53.3) '@rollup/plugin-replace': specifier: ^5.0.2 - version: 5.0.7(rollup@4.52.5) + version: 5.0.7(rollup@4.53.3) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.52.5) + version: 0.4.4(rollup@4.53.3) '@rollup/plugin-typescript': specifier: ^12.3.0 - version: 12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3) + version: 12.3.0(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3) '@types/jest': specifier: ^30.0.0 version: 30.0.0 '@types/node': specifier: ^24.9.2 - version: 24.9.2 + version: 24.10.1 '@types/react': specifier: ^19.2.2 - version: 19.2.2 + version: 19.2.6 '@types/react-dom': specifier: ^19.2.2 - version: 19.2.2(@types/react@19.2.2) + version: 19.2.3(@types/react@19.2.6) '@types/react-window': specifier: ^1.8.8 version: 1.8.8 - '@typescript-eslint/eslint-plugin': - specifier: ^8.46.2 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.46.2 - version: 8.46.2(eslint@8.57.1)(typescript@5.9.3) babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 @@ -263,16 +254,16 @@ importers: version: 13.17.0 extract-react-intl-messages: specifier: ^4.1.1 - version: 4.1.1(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)) + version: 4.1.1(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)) husky: specifier: ^9.1.7 version: 9.1.7 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + version: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) lint-staged: specifier: ^16.2.6 - version: 16.2.6 + version: 16.2.7 postcss: specifier: ^8.5.6 version: 8.5.6 @@ -290,25 +281,25 @@ importers: version: 2.4.2 rollup: specifier: ^4.52.5 - version: 4.52.5 + version: 4.53.3 rollup-plugin-copy: specifier: ^3.4.0 version: 3.5.0 rollup-plugin-delete: specifier: ^3.0.1 - version: 3.0.1(rollup@4.52.5) + version: 3.0.1(rollup@4.53.3) rollup-plugin-dts: specifier: ^6.2.3 - version: 6.2.3(rollup@4.52.5)(typescript@5.9.3) + version: 6.2.3(rollup@4.53.3)(typescript@5.9.3) rollup-plugin-node-externals: specifier: ^8.1.1 - version: 8.1.1(rollup@4.52.5) + version: 8.1.2(rollup@4.53.3) rollup-plugin-peer-deps-external: specifier: ^2.2.4 - version: 2.2.4(rollup@4.52.5) + version: 2.2.4(rollup@4.53.3) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) stylelint: specifier: ^15.10.1 version: 15.11.0(typescript@5.9.3) @@ -326,13 +317,13 @@ importers: version: 6.2.1 ts-jest: specifier: ^29.4.5 - version: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) + version: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) tsup: specifier: ^8.5.0 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -514,55 +505,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@2.3.6': - resolution: {integrity: sha512-oqUhWyU6tae0MFsr/7iLe++QWRg+6jtUhlx9/0GmCWDYFFrK366sBLamNM7D9Y+c7YSynUFKr8lpEp1r6Sk7eA==} + '@biomejs/biome@2.3.7': + resolution: {integrity: sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.3.6': - resolution: {integrity: sha512-P4JWE5d8UayBxYe197QJwyW4ZHp0B+zvRIGCusOm1WbxmlhpAQA1zEqQuunHgSIzvyEEp4TVxiKGXNFZPg7r9Q==} + '@biomejs/cli-darwin-arm64@2.3.7': + resolution: {integrity: sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.3.6': - resolution: {integrity: sha512-I4rTebj+F/L9K93IU7yTFs8nQ6EhaCOivxduRha4w4WEZK80yoZ8OAdR1F33m4yJ/NfUuTUbP/Wjs+vKjlCoWA==} + '@biomejs/cli-darwin-x64@2.3.7': + resolution: {integrity: sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.3.6': - resolution: {integrity: sha512-oK1NpIXIixbJ/4Tcx40cwiieqah6rRUtMGOHDeK2ToT7yUFVEvXUGRKqH0O4hqZ9tW8TcXNZKfgRH6xrsjVtGg==} + '@biomejs/cli-linux-arm64-musl@2.3.7': + resolution: {integrity: sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.3.6': - resolution: {integrity: sha512-JjYy83eVBnvuINZiqyFO7xx72v8Srh4hsgaacSBCjC22DwM6+ZvnX1/fj8/SBiLuUOfZ8YhU2pfq2Dzakeyg1A==} + '@biomejs/cli-linux-arm64@2.3.7': + resolution: {integrity: sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.3.6': - resolution: {integrity: sha512-QvxB8GHQeaO4FCtwJpJjCgJkbHBbWxRHUxQlod+xeaYE6gtJdSkYkuxdKAQUZEOIsec+PeaDAhW9xjzYbwmOFA==} + '@biomejs/cli-linux-x64-musl@2.3.7': + resolution: {integrity: sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.3.6': - resolution: {integrity: sha512-ZjPXzy5yN9wusIoX+8Zp4p6cL8r0NzJCXg/4r1KLVveIPXd2jKVlqZ6ZyzEq385WwU3OX5KOwQYLQsOc788waQ==} + '@biomejs/cli-linux-x64@2.3.7': + resolution: {integrity: sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.3.6': - resolution: {integrity: sha512-YM7hLHpwjdt8R7+O2zS1Vo2cKgqEeptiXB1tWW1rgjN5LlpZovBVKtg7zfwfRrFx3i08aNZThYpTcowpTlczug==} + '@biomejs/cli-win32-arm64@2.3.7': + resolution: {integrity: sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.3.6': - resolution: {integrity: sha512-psgNEYgMAobY5h+QHRBVR9xvg2KocFuBKm6axZWB/aD12NWhQjiVFQUjV6wMXhlH4iT0Q9c3yK5JFRiDC/rzHA==} + '@biomejs/cli-win32-x64@2.3.7': + resolution: {integrity: sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -579,11 +570,11 @@ packages: '@chevrotain/utils@10.5.0': resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} - '@clickhouse/client-common@1.12.1': - resolution: {integrity: sha512-ccw1N6hB4+MyaAHIaWBwGZ6O2GgMlO99FlMj0B0UEGfjxM9v5dYVYql6FpP19rMwrVAroYs/IgX2vyZEBvzQLg==} + '@clickhouse/client-common@1.14.0': + resolution: {integrity: sha512-CyUcv2iCkZ1A++vmOSufYRpHR3aAWVfbrWed7ATzf0yyx/BW/2SEqlL07vBpSRa3BIkQe/DSOHVv8JkWZpUOwQ==} - '@clickhouse/client@1.12.1': - resolution: {integrity: sha512-7ORY85rphRazqHzImNXMrh4vsaPrpetFoTWpZYueCO2bbO6PXYDXp/GQ4DgxnGIqbWB/Di1Ai+Xuwq2o7DJ36A==} + '@clickhouse/client@1.14.0': + resolution: {integrity: sha512-co2spjR7wZoZ3Ck0H/jv76bpiuO3oJHtOmq9/gxFiod2DcT9NFg01u/hXcG8MJFnEJuMB6e3vGqS6IOnLwHqRw==} engines: {node: '>=16'} '@colors/colors@1.5.0': @@ -930,183 +921,317 @@ packages: '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + '@esbuild/aix-ppc64@0.27.0': + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + '@esbuild/android-arm64@0.27.0': + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + '@esbuild/android-arm@0.27.0': + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + '@esbuild/android-x64@0.27.0': + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + '@esbuild/darwin-arm64@0.27.0': + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + '@esbuild/darwin-x64@0.27.0': + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + '@esbuild/freebsd-arm64@0.27.0': + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + '@esbuild/freebsd-x64@0.27.0': + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + '@esbuild/linux-arm64@0.27.0': + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + '@esbuild/linux-arm@0.27.0': + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + '@esbuild/linux-ia32@0.27.0': + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + '@esbuild/linux-loong64@0.27.0': + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-mips64el@0.27.0': + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + '@esbuild/linux-ppc64@0.27.0': + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + '@esbuild/linux-riscv64@0.27.0': + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + '@esbuild/linux-s390x@0.27.0': + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + '@esbuild/linux-x64@0.27.0': + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + '@esbuild/netbsd-arm64@0.27.0': + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + '@esbuild/netbsd-x64@0.27.0': + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + '@esbuild/openbsd-arm64@0.27.0': + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + '@esbuild/openbsd-x64@0.27.0': + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + '@esbuild/openharmony-arm64@0.27.0': + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + '@esbuild/sunos-x64@0.27.0': + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + '@esbuild/win32-arm64@0.27.0': + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + '@esbuild/win32-ia32@0.27.0': + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@esbuild/win32-x64@0.27.0': + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] '@fontsource/inter@5.2.8': resolution: {integrity: sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==} @@ -1190,19 +1315,6 @@ packages: peerDependencies: hono: ^4 - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@img/colour@1.0.0': resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} @@ -1610,8 +1722,8 @@ packages: resolution: {integrity: sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==} engines: {node: '>=16'} - '@netlify/plugin-nextjs@5.14.4': - resolution: {integrity: sha512-HnMHG0tksVoS2E6ImcX9o/EcVH1dckb8ZL1FyghKRsEPYCo+20hQ6zncd5EEOW7K22UN+n1EprCROWUmsbhYMg==} + '@netlify/plugin-nextjs@5.14.7': + resolution: {integrity: sha512-RJRPGIlaY3M4KA6GxpOlynCPUKCVbtkHwg4ccHhoSVrHgysW3nqw1pX+FBvlBexrUl1JO2zuDFh4enRal9BpAw==} engines: {node: '>=18.0.0'} '@next/env@15.5.3': @@ -2540,113 +2652,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.5': - resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.5': - resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.5': - resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.5': - resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.5': - resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.5': - resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.5': - resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.5': - resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.5': - resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.5': - resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.5': - resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.5': - resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -2760,11 +2872,11 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tanstack/query-core@5.90.5': - resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} + '@tanstack/query-core@5.90.10': + resolution: {integrity: sha512-EhZVFu9rl7GfRNuJLJ3Y7wtbTnENsvzp+YpcAV7kCYiXni1v8qZh++lpw4ch4rrwC0u/EZRnBHIehzCGzwXDSQ==} - '@tanstack/react-query@5.90.5': - resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} + '@tanstack/react-query@5.90.10': + resolution: {integrity: sha512-BKLss9Y8PQ9IUjPYQiv3/Zmlx92uxffUOX8ZZNoQlCIZBJPT5M+GOMQj7xislvVQ6l1BstBjcX0XB/aHfFYVNw==} peerDependencies: react: ^18 || ^19 @@ -2848,22 +2960,22 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - '@types/node@24.9.2': - resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/react-dom@19.2.2': - resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/react@19.2.6': + resolution: {integrity: sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -2893,74 +3005,12 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.46.2': - resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.46.2 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.46.2': - resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.46.2': - resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.46.2': - resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.46.2': - resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.46.2': - resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.46.2': - resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.46.2': - resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.46.2': - resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.46.2': - resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@umami/react-zen@0.210.0': resolution: {integrity: sha512-nQ8EfrSleuXMPBVabr6rDoH2VS0ca41A3V2OCQbG4HqgLJ5+Mj8gHT/aLqUz5EKNBAmMy0/XxPNAgsHwwoxrCQ==} '@umami/redis-client@0.29.0': resolution: {integrity: sha512-Jaqh++jskqDB7ny75pfC02OvKp1JTS4asGDsFrRL3qy8sxL3PAl9+/mybCJe4/6vWrXDJKqpgkSfUDJq2bFjyw==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vue/compiler-core@3.5.18': resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} @@ -2990,11 +3040,6 @@ packages: '@vue/shared@3.5.18': resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -3184,8 +3229,8 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - bcryptjs@3.0.2: - resolution: {integrity: sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==} + bcryptjs@3.0.3: + resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} hasBin: true blob-util@2.0.2: @@ -3437,8 +3482,8 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} commander@2.20.3: @@ -3624,8 +3669,8 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} currently-unhandled@0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -3747,9 +3792,6 @@ packages: babel-plugin-macros: optional: true - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge-ts@7.1.5: resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} engines: {node: '>=16.0.0'} @@ -3822,10 +3864,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} @@ -3941,8 +3979,13 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.0: + resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} engines: {node: '>=18'} hasBin: true @@ -3958,65 +4001,17 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-plugin-promise@6.6.0: - resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - estree-walker@0.6.1: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} @@ -4084,9 +4079,6 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} @@ -4120,10 +4112,6 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@7.0.2: resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} engines: {node: '>=12.0.0'} @@ -4277,14 +4265,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true @@ -4310,10 +4290,6 @@ packages: resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} engines: {node: '>=6'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -4343,9 +4319,6 @@ packages: grammex@3.1.11: resolution: {integrity: sha512-HNwLkgRg9SqTAd1N3Uh/MnKwTBTzwBxTOPbXQ8pb0tpwydjk90k4zRE8JUn9fMUiRwKtXFZ1TWFmms3dZHN+Fg==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4726,8 +4699,8 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbot@5.1.31: - resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} + isbot@5.1.32: + resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==} engines: {node: '>=18'} isexe@2.0.0: @@ -4935,10 +4908,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -4965,9 +4934,6 @@ packages: json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.3.0: resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} engines: {node: '>= 0.4'} @@ -5035,10 +5001,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -5053,8 +5015,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.6: - resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} hasBin: true @@ -5132,9 +5094,6 @@ packages: resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} deprecated: This package is deprecated. Use destructuring assignment syntax instead. - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -5233,8 +5192,8 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - maxmind@5.0.0: - resolution: {integrity: sha512-ndhnbeQWKuiBU17BJ6cybUnvcyvNXaK+1VM5n9/I7+TIqAYFLDvX1DSoVfE1hgvZfudvAU9Ts1CW5sxYq/M8dA==} + maxmind@5.0.1: + resolution: {integrity: sha512-hYxQxvHkBUlyF34f7IlQOb60rytezCi2oZ8H/BtZpcoodXTlcK1eLgf7kY2TofHqBC3o+Hqtvde9kS72gFQSDw==} engines: {node: '>=12', npm: '>=6'} mdn-data@2.0.14: @@ -5512,10 +5471,6 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} @@ -6172,10 +6127,6 @@ packages: resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} engines: {node: '>=12'} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -6497,8 +6448,8 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup-plugin-node-externals@8.1.1: - resolution: {integrity: sha512-MEWJmXMGjo5E7o9hgAmma6XLCdU9gTVRcaaCubugTJdoJD3A91qxtxiukT9k2PeUdogtCaNehV3pvJUWrRNtwg==} + rollup-plugin-node-externals@8.1.2: + resolution: {integrity: sha512-EuB6/lolkMLK16gvibUjikERq5fCRVIGwD2xue/CrM8D0pz5GXD2V6N8IrgxegwbcUoKkUFI8VYCEEv8MMvgpA==} engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} peerDependencies: rollup: ^4.0.0 @@ -6517,8 +6468,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.52.5: - resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6698,10 +6649,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6936,9 +6886,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} @@ -6958,8 +6905,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-lru@11.3.4: - resolution: {integrity: sha512-UxWEfRKpFCabAf6fkTNdlfSw/RDUJ/4C6i1aLZaDnGF82PERHyYhz5CMCVYXtLt34LbqgfpJ2bjmgGKgxuF/6A==} + tiny-lru@11.4.5: + resolution: {integrity: sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==} engines: {node: '>=12'} tinyexec@0.3.2: @@ -6999,9 +6946,6 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -7014,12 +6958,6 @@ packages: resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} engines: {node: '>=12'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -7067,8 +7005,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.5.0: - resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + tsup@8.5.1: + resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7092,10 +7030,6 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -7104,10 +7038,6 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -7271,12 +7201,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -7302,10 +7226,6 @@ packages: engines: {node: '>= 8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -7615,39 +7535,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@2.3.6': + '@biomejs/biome@2.3.7': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.3.6 - '@biomejs/cli-darwin-x64': 2.3.6 - '@biomejs/cli-linux-arm64': 2.3.6 - '@biomejs/cli-linux-arm64-musl': 2.3.6 - '@biomejs/cli-linux-x64': 2.3.6 - '@biomejs/cli-linux-x64-musl': 2.3.6 - '@biomejs/cli-win32-arm64': 2.3.6 - '@biomejs/cli-win32-x64': 2.3.6 + '@biomejs/cli-darwin-arm64': 2.3.7 + '@biomejs/cli-darwin-x64': 2.3.7 + '@biomejs/cli-linux-arm64': 2.3.7 + '@biomejs/cli-linux-arm64-musl': 2.3.7 + '@biomejs/cli-linux-x64': 2.3.7 + '@biomejs/cli-linux-x64-musl': 2.3.7 + '@biomejs/cli-win32-arm64': 2.3.7 + '@biomejs/cli-win32-x64': 2.3.7 - '@biomejs/cli-darwin-arm64@2.3.6': + '@biomejs/cli-darwin-arm64@2.3.7': optional: true - '@biomejs/cli-darwin-x64@2.3.6': + '@biomejs/cli-darwin-x64@2.3.7': optional: true - '@biomejs/cli-linux-arm64-musl@2.3.6': + '@biomejs/cli-linux-arm64-musl@2.3.7': optional: true - '@biomejs/cli-linux-arm64@2.3.6': + '@biomejs/cli-linux-arm64@2.3.7': optional: true - '@biomejs/cli-linux-x64-musl@2.3.6': + '@biomejs/cli-linux-x64-musl@2.3.7': optional: true - '@biomejs/cli-linux-x64@2.3.6': + '@biomejs/cli-linux-x64@2.3.7': optional: true - '@biomejs/cli-win32-arm64@2.3.6': + '@biomejs/cli-win32-arm64@2.3.7': optional: true - '@biomejs/cli-win32-x64@2.3.6': + '@biomejs/cli-win32-x64@2.3.7': optional: true '@chevrotain/cst-dts-gen@10.5.0': @@ -7665,11 +7585,11 @@ snapshots: '@chevrotain/utils@10.5.0': {} - '@clickhouse/client-common@1.12.1': {} + '@clickhouse/client-common@1.14.0': {} - '@clickhouse/client@1.12.1': + '@clickhouse/client@1.14.0': dependencies: - '@clickhouse/client-common': 1.12.1 + '@clickhouse/client-common': 1.14.0 '@colors/colors@1.5.0': optional: true @@ -7981,117 +7901,170 @@ snapshots: '@epic-web/invariant@1.0.0': {} - '@esbuild/aix-ppc64@0.25.11': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.11': + '@esbuild/aix-ppc64@0.27.0': optional: true - '@esbuild/android-arm@0.25.11': + '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-x64@0.25.11': + '@esbuild/android-arm64@0.27.0': optional: true - '@esbuild/darwin-arm64@0.25.11': + '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.11': + '@esbuild/android-arm@0.27.0': optional: true - '@esbuild/freebsd-arm64@0.25.11': + '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.11': + '@esbuild/android-x64@0.27.0': optional: true - '@esbuild/linux-arm64@0.25.11': + '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.11': + '@esbuild/darwin-arm64@0.27.0': optional: true - '@esbuild/linux-ia32@0.25.11': + '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.11': + '@esbuild/darwin-x64@0.27.0': optional: true - '@esbuild/linux-mips64el@0.25.11': + '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.11': + '@esbuild/freebsd-arm64@0.27.0': optional: true - '@esbuild/linux-riscv64@0.25.11': + '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.11': + '@esbuild/freebsd-x64@0.27.0': optional: true - '@esbuild/linux-x64@0.25.11': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.11': + '@esbuild/linux-arm64@0.27.0': optional: true - '@esbuild/netbsd-x64@0.25.11': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.11': + '@esbuild/linux-arm@0.27.0': optional: true - '@esbuild/openbsd-x64@0.25.11': + '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.11': + '@esbuild/linux-ia32@0.27.0': optional: true - '@esbuild/sunos-x64@0.25.11': + '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.11': + '@esbuild/linux-loong64@0.27.0': optional: true - '@esbuild/win32-ia32@0.25.11': + '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/win32-x64@0.25.11': + '@esbuild/linux-mips64el@0.27.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 + '@esbuild/linux-ppc64@0.25.12': + optional: true - '@eslint-community/regexpp@4.12.1': {} + '@esbuild/linux-ppc64@0.27.0': + optional: true - '@eslint-community/regexpp@4.12.2': {} + '@esbuild/linux-riscv64@0.25.12': + optional: true - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.3(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@esbuild/linux-riscv64@0.27.0': + optional: true - '@eslint/js@8.57.1': {} + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.0': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.0': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.0': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.0': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.0': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.0': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.0': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.0': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.0': + optional: true '@fontsource/inter@5.2.8': {} '@fontsource/jetbrains-mono@5.2.8': {} - '@formatjs/cli@4.8.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3))': + '@formatjs/cli@4.8.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3))': dependencies: '@formatjs/icu-messageformat-parser': 2.1.0 - '@formatjs/ts-transformer': 3.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)) + '@formatjs/ts-transformer': 3.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)) '@types/estree': 0.0.50 '@types/fs-extra': 9.0.13 '@types/json-stable-stringify': 1.2.0 @@ -8178,15 +8151,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@formatjs/ts-transformer@2.13.0(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3))': + '@formatjs/ts-transformer@2.13.0(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3))': dependencies: intl-messageformat-parser: 6.1.2 tslib: 2.8.1 typescript: 4.9.5 optionalDependencies: - ts-jest: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3) + ts-jest: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3) - '@formatjs/ts-transformer@3.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3))': + '@formatjs/ts-transformer@3.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3))': dependencies: '@formatjs/icu-messageformat-parser': 2.1.0 '@types/node': 14.18.63 @@ -8194,9 +8167,9 @@ snapshots: tslib: 2.8.1 typescript: 4.9.5 optionalDependencies: - ts-jest: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3) + ts-jest: 29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3) - '@hello-pangea/dnd@17.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@hello-pangea/dnd@17.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@babel/runtime': 7.28.3 css-box-model: 1.2.1 @@ -8204,7 +8177,7 @@ snapshots: raf-schd: 4.0.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.6)(react@19.2.0)(redux@5.0.1) redux: 5.0.1 use-memo-one: 1.1.3(react@19.2.0) transitivePeerDependencies: @@ -8214,18 +8187,6 @@ snapshots: dependencies: hono: 4.7.10 - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@img/colour@1.0.0': optional: true @@ -8454,27 +8415,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8501,7 +8462,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8523,7 +8484,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8541,7 +8502,7 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-regex-util: 30.0.1 '@jest/reporters@29.7.0': @@ -8552,7 +8513,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.30 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8626,7 +8587,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.9.2 + '@types/node': 24.10.1 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8636,7 +8597,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.9.2 + '@types/node': 24.10.1 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8671,7 +8632,7 @@ snapshots: chevrotain: 10.5.0 lilconfig: 2.1.0 - '@netlify/plugin-nextjs@5.14.4': {} + '@netlify/plugin-nextjs@5.14.7': {} '@next/env@15.5.3': {} @@ -8750,11 +8711,11 @@ snapshots: '@prisma/client-runtime-utils@7.0.0': {} - '@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3)': + '@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@prisma/client-runtime-utils': 7.0.0 optionalDependencies: - prisma: 7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + prisma: 7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) typescript: 5.9.3 '@prisma/config@7.0.0': @@ -8805,9 +8766,9 @@ snapshots: '@prisma/fetch-engine': 7.0.0 '@prisma/get-platform': 7.0.0 - '@prisma/extension-read-replicas@0.4.1(@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))': + '@prisma/extension-read-replicas@0.4.1(@prisma/client@7.0.0(prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))': dependencies: - '@prisma/client': 7.0.0(prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) + '@prisma/client': 7.0.0(prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) '@prisma/fetch-engine@7.0.0': dependencies: @@ -8825,9 +8786,9 @@ snapshots: '@prisma/query-plan-executor@6.18.0': {} - '@prisma/studio-core-licensed@0.8.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@prisma/studio-core-licensed@0.8.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -9962,133 +9923,133 @@ snapshots: dependencies: '@redis/client': 1.6.1 - '@rollup/plugin-alias@5.1.1(rollup@4.52.5)': + '@rollup/plugin-alias@5.1.1(rollup@4.53.3)': optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-commonjs@25.0.8(rollup@4.52.5)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.17 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-json@6.1.0(rollup@4.52.5)': + '@rollup/plugin-json@6.1.0(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.52.5)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-replace@5.0.7(rollup@4.52.5)': + '@rollup/plugin-replace@5.0.7(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) magic-string: 0.30.17 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-terser@0.4.4(rollup@4.52.5)': + '@rollup/plugin-terser@0.4.4(rollup@4.53.3)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.43.1 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-typescript@12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@12.3.0(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) resolve: 1.22.10 typescript: 5.9.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 tslib: 2.8.1 - '@rollup/pluginutils@5.2.0(rollup@4.52.5)': + '@rollup/pluginutils@5.2.0(rollup@4.53.3)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/rollup-android-arm-eabi@4.52.5': + '@rollup/rollup-android-arm-eabi@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.52.5': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.52.5': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.52.5': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.52.5': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.52.5': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.5': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.5': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.5': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.5': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.5': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.5': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.5': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.5': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.5': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.52.5': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-openharmony-arm64@4.52.5': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.5': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.5': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.5': + '@rollup/rollup-win32-x64-gnu@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.5': + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@sinclair/typebox@0.27.8': {} @@ -10216,11 +10177,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/query-core@5.90.5': {} + '@tanstack/query-core@5.90.10': {} - '@tanstack/react-query@5.90.5(react@19.2.0)': + '@tanstack/react-query@5.90.10(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.5 + '@tanstack/query-core': 5.90.10 react: 19.2.0 '@trysound/sax@0.2.0': {} @@ -10260,24 +10221,24 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.9.2 + '@types/node': 24.10.1 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 - '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.2)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.6)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 hoist-non-react-statics: 3.3.2 '@types/istanbul-lib-coverage@2.0.6': {} @@ -10309,23 +10270,23 @@ snapshots: '@types/node@14.18.63': {} - '@types/node@24.9.2': + '@types/node@24.10.1': dependencies: undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} - '@types/react-dom@19.2.2(@types/react@19.2.2)': + '@types/react-dom@19.2.3(@types/react@19.2.6)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 '@types/react-window@1.8.8': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 - '@types/react@19.2.2': + '@types/react@19.2.6': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/resolve@1.20.2': {} @@ -10349,103 +10310,10 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 optional: true - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/type-utils': 8.46.2(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.2 - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - - '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.46.2(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@8.57.1)(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.46.2': {} - - '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.46.2(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.46.2': - dependencies: - '@typescript-eslint/types': 8.46.2 - eslint-visitor-keys: 4.2.1 - - '@umami/react-zen@0.210.0(@babel/core@7.28.3)(@types/react@19.2.2)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.2.0)(use-sync-external-store@1.6.0(react@19.2.0))': + '@umami/react-zen@0.210.0(@babel/core@7.28.3)(@types/react@19.2.6)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.2.0)(use-sync-external-store@1.6.0(react@19.2.0))': dependencies: '@fontsource/jetbrains-mono': 5.2.8 '@internationalized/date': 3.10.0 @@ -10462,7 +10330,7 @@ snapshots: react-hook-form: 7.66.1(react@19.2.0) react-icons: 5.5.0(react@19.2.0) thenby: 1.3.4 - zustand: 5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) + zustand: 5.0.8(@types/react@19.2.6)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) transitivePeerDependencies: - '@babel/core' - '@opentelemetry/api' @@ -10481,8 +10349,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@ungap/structured-clone@1.3.0': {} - '@vue/compiler-core@3.5.18': dependencies: '@babel/parser': 7.28.3 @@ -10527,7 +10393,7 @@ snapshots: '@vue/reactivity': 3.5.18 '@vue/runtime-core': 3.5.18 '@vue/shared': 3.5.18 - csstype: 3.1.3 + csstype: 3.2.3 '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.9.3))': dependencies: @@ -10537,10 +10403,6 @@ snapshots: '@vue/shared@3.5.18': {} - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-walk@8.3.4: dependencies: acorn: 8.15.0 @@ -10704,12 +10566,12 @@ snapshots: dependencies: '@babel/types': 7.28.2 - babel-plugin-react-intl@7.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)): + babel-plugin-react-intl@7.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)): dependencies: '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.28.2 - '@formatjs/ts-transformer': 2.13.0(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)) + '@formatjs/ts-transformer': 2.13.0(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)) '@types/babel__core': 7.20.5 '@types/fs-extra': 9.0.13 '@types/schema-utils': 2.4.0 @@ -10755,7 +10617,7 @@ snapshots: dependencies: tweetnacl: 0.14.5 - bcryptjs@3.0.2: {} + bcryptjs@3.0.3: {} blob-util@2.0.2: {} @@ -10802,9 +10664,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.11): + bundle-require@5.1.0(esbuild@0.27.0): dependencies: - esbuild: 0.25.11 + esbuild: 0.27.0 load-tsconfig: 0.2.5 c12@3.1.0: @@ -11006,7 +10868,7 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@14.0.1: {} + commander@14.0.2: {} commander@2.20.3: {} @@ -11056,13 +10918,13 @@ snapshots: optionalDependencies: typescript: 5.9.3 - create-jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + create-jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11211,7 +11073,7 @@ snapshots: dependencies: css-tree: 2.2.1 - csstype@3.1.3: {} + csstype@3.2.3: {} currently-unhandled@0.4.1: dependencies: @@ -11368,8 +11230,6 @@ snapshots: dedent@1.6.0: {} - deep-is@0.1.4: {} - deepmerge-ts@7.1.5: {} deepmerge@4.3.1: {} @@ -11436,10 +11296,6 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@1.4.1: dependencies: domelementtype: 2.3.0 @@ -11614,34 +11470,63 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.11: + esbuild@0.25.12: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.0 + '@esbuild/android-arm': 0.27.0 + '@esbuild/android-arm64': 0.27.0 + '@esbuild/android-x64': 0.27.0 + '@esbuild/darwin-arm64': 0.27.0 + '@esbuild/darwin-x64': 0.27.0 + '@esbuild/freebsd-arm64': 0.27.0 + '@esbuild/freebsd-x64': 0.27.0 + '@esbuild/linux-arm': 0.27.0 + '@esbuild/linux-arm64': 0.27.0 + '@esbuild/linux-ia32': 0.27.0 + '@esbuild/linux-loong64': 0.27.0 + '@esbuild/linux-mips64el': 0.27.0 + '@esbuild/linux-ppc64': 0.27.0 + '@esbuild/linux-riscv64': 0.27.0 + '@esbuild/linux-s390x': 0.27.0 + '@esbuild/linux-x64': 0.27.0 + '@esbuild/netbsd-arm64': 0.27.0 + '@esbuild/netbsd-x64': 0.27.0 + '@esbuild/openbsd-arm64': 0.27.0 + '@esbuild/openbsd-x64': 0.27.0 + '@esbuild/openharmony-arm64': 0.27.0 + '@esbuild/sunos-x64': 0.27.0 + '@esbuild/win32-arm64': 0.27.0 + '@esbuild/win32-ia32': 0.27.0 + '@esbuild/win32-x64': 0.27.0 escalade@3.2.0: {} @@ -11649,88 +11534,12 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - - eslint-plugin-promise@6.6.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - estree-walker@0.6.1: {} estree-walker@2.0.2: {} - esutils@2.0.3: {} - eventemitter2@6.4.7: {} eventemitter3@4.0.7: {} @@ -11788,10 +11597,10 @@ snapshots: extend@3.0.2: {} - extract-react-intl-messages@4.1.1(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)): + extract-react-intl-messages@4.1.1(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)): dependencies: '@babel/core': 7.28.3 - babel-plugin-react-intl: 7.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3)) + babel-plugin-react-intl: 7.9.4(ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3)) flat: 5.0.2 glob: 7.2.3 js-yaml: 3.14.1 @@ -11837,8 +11646,6 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - fast-uri@3.0.6: {} fastest-levenshtein@1.0.16: {} @@ -11868,10 +11675,6 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@7.0.2: dependencies: flat-cache: 3.2.0 @@ -11894,7 +11697,7 @@ snapshots: dependencies: magic-string: 0.30.18 mlly: 1.8.0 - rollup: 4.52.5 + rollup: 4.53.3 flat-cache@3.2.0: dependencies: @@ -12049,19 +11852,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glob@10.5.0: dependencies: foreground-child: 3.3.1 @@ -12102,10 +11892,6 @@ snapshots: kind-of: 6.0.3 which: 1.3.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -12148,8 +11934,6 @@ snapshots: grammex@3.1.11: {} - graphemer@1.4.0: {} - handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -12469,7 +12253,7 @@ snapshots: isarray@2.0.5: {} - isbot@5.1.31: {} + isbot@5.1.32: {} isexe@2.0.0: {} @@ -12534,7 +12318,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.6.0 @@ -12554,16 +12338,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + jest-cli@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + create-jest: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -12573,7 +12357,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + jest-config@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: '@babel/core': 7.28.3 '@jest/test-sequencer': 29.7.0 @@ -12598,8 +12382,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.9.2 - ts-node: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) + '@types/node': 24.10.1 + ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12635,7 +12419,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12645,7 +12429,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 24.9.2 + '@types/node': 24.10.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12703,13 +12487,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-util: 29.7.0 jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-util: 30.0.5 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12746,7 +12530,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12774,7 +12558,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -12820,7 +12604,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12829,7 +12613,7 @@ snapshots: jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.9.2 + '@types/node': 24.10.1 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 @@ -12848,7 +12632,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.9.2 + '@types/node': 24.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12857,17 +12641,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 24.9.2 + '@types/node': 24.10.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + jest-cli: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12889,10 +12673,6 @@ snapshots: dependencies: argparse: 2.0.1 - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - jsbn@0.1.1: {} jsesc@3.1.0: {} @@ -12909,8 +12689,6 @@ snapshots: json-schema@0.4.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.3.0: dependencies: call-bind: 1.0.8 @@ -12992,11 +12770,6 @@ snapshots: leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lie@3.3.0: dependencies: immediate: 3.0.6 @@ -13007,9 +12780,9 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.6: + lint-staged@16.2.7: dependencies: - commander: 14.0.1 + commander: 14.0.2 listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 @@ -13089,8 +12862,6 @@ snapshots: lodash.pick@4.4.0: {} - lodash.sortby@4.7.0: {} - lodash.truncate@4.4.2: {} lodash.uniq@4.5.0: {} @@ -13184,10 +12955,10 @@ snapshots: mathml-tag-names@2.1.3: {} - maxmind@5.0.0: + maxmind@5.0.1: dependencies: mmdb-lib: 3.0.1 - tiny-lru: 11.3.4 + tiny-lru: 11.4.5 mdn-data@2.0.14: {} @@ -13483,15 +13254,6 @@ snapshots: dependencies: mimic-function: 5.0.1 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - ospath@1.2.2: {} own-keys@1.0.1: @@ -13795,13 +13557,13 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) + ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: @@ -14102,8 +13864,6 @@ snapshots: postgres@3.4.7: {} - prelude-ls@1.2.1: {} - prettier@2.8.8: {} pretty-bytes@5.6.0: {} @@ -14120,12 +13880,12 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prisma@7.0.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + prisma@7.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@prisma/config': 7.0.0 '@prisma/dev': 0.13.0(typescript@5.9.3) '@prisma/engines': 7.0.0 - '@prisma/studio-core-licensed': 0.8.0(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@prisma/studio-core-licensed': 0.8.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) mysql2: 3.15.3 postgres: 3.4.7 optionalDependencies: @@ -14297,8 +14057,8 @@ snapshots: '@formatjs/ecma402-abstract': 2.3.6 '@formatjs/icu-messageformat-parser': 2.11.4 '@formatjs/intl': 3.1.8(typescript@5.9.3) - '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.2) - '@types/react': 19.2.2 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.6) + '@types/react': 19.2.6 hoist-non-react-statics: 3.3.2 intl-messageformat: 10.7.18 react: 19.2.0 @@ -14310,13 +14070,13 @@ snapshots: react-is@18.3.1: {} - react-redux@9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.6)(react@19.2.0)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.2.0 use-sync-external-store: 1.5.0(react@19.2.0) optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 redux: 5.0.1 react-simple-maps@2.3.0(prop-types@15.8.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -14528,28 +14288,28 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-delete@3.0.1(rollup@4.52.5): + rollup-plugin-delete@3.0.1(rollup@4.53.3): dependencies: del: 8.0.0 - rollup: 4.52.5 + rollup: 4.53.3 - rollup-plugin-dts@6.2.3(rollup@4.52.5)(typescript@5.9.3): + rollup-plugin-dts@6.2.3(rollup@4.53.3)(typescript@5.9.3): dependencies: magic-string: 0.30.18 - rollup: 4.52.5 + rollup: 4.53.3 typescript: 5.9.3 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-node-externals@8.1.1(rollup@4.52.5): + rollup-plugin-node-externals@8.1.2(rollup@4.53.3): dependencies: - rollup: 4.52.5 + rollup: 4.53.3 - rollup-plugin-peer-deps-external@2.2.4(rollup@4.52.5): + rollup-plugin-peer-deps-external@2.2.4(rollup@4.53.3): dependencies: - rollup: 4.52.5 + rollup: 4.53.3 - rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): + rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -14558,7 +14318,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) postcss-modules: 4.3.1(postcss@8.5.6) promise.series: 0.2.0 resolve: 1.22.10 @@ -14572,32 +14332,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.52.5: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.5 - '@rollup/rollup-android-arm64': 4.52.5 - '@rollup/rollup-darwin-arm64': 4.52.5 - '@rollup/rollup-darwin-x64': 4.52.5 - '@rollup/rollup-freebsd-arm64': 4.52.5 - '@rollup/rollup-freebsd-x64': 4.52.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 - '@rollup/rollup-linux-arm-musleabihf': 4.52.5 - '@rollup/rollup-linux-arm64-gnu': 4.52.5 - '@rollup/rollup-linux-arm64-musl': 4.52.5 - '@rollup/rollup-linux-loong64-gnu': 4.52.5 - '@rollup/rollup-linux-ppc64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-musl': 4.52.5 - '@rollup/rollup-linux-s390x-gnu': 4.52.5 - '@rollup/rollup-linux-x64-gnu': 4.52.5 - '@rollup/rollup-linux-x64-musl': 4.52.5 - '@rollup/rollup-openharmony-arm64': 4.52.5 - '@rollup/rollup-win32-arm64-msvc': 4.52.5 - '@rollup/rollup-win32-ia32-msvc': 4.52.5 - '@rollup/rollup-win32-x64-gnu': 4.52.5 - '@rollup/rollup-win32-x64-msvc': 4.52.5 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -14844,9 +14604,7 @@ snapshots: source-map@0.6.1: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 + source-map@0.7.6: {} spdx-correct@3.2.0: dependencies: @@ -15077,7 +14835,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.4.5 + glob: 10.5.0 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 @@ -15156,8 +14914,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thenby@1.3.4: {} thenify-all@1.6.0: @@ -15174,7 +14930,7 @@ snapshots: tiny-invariant@1.3.3: {} - tiny-lru@11.3.4: {} + tiny-lru@11.4.5: {} tinyexec@0.3.2: {} @@ -15207,28 +14963,20 @@ snapshots: dependencies: tldts: 6.1.86 - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - tree-kill@1.2.2: {} trim-newlines@3.0.1: {} trim-newlines@4.1.1: {} - ts-api-utils@2.1.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-interface-checker@0.1.13: {} - ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.11)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.5(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.12)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) + jest: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -15241,17 +14989,17 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 30.0.5 babel-jest: 29.7.0(@babel/core@7.28.3) - esbuild: 0.25.11 + esbuild: 0.25.12 jest-util: 30.0.5 - ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3): + ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.9.2 + '@types/node': 24.10.1 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -15264,21 +15012,21 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.11) + bundle-require: 5.1.0(esbuild@0.27.0) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.25.11 + esbuild: 0.27.0 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.52.5 - source-map: 0.8.0-beta.0 + rollup: 4.53.3 + source-map: 0.7.6 sucrase: 3.35.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 @@ -15298,16 +15046,10 @@ snapshots: tweetnacl@0.14.5: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} type-fest@0.13.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -15458,14 +15200,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - webidl-conversions@4.0.2: {} - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -15515,8 +15249,6 @@ snapshots: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -15617,9 +15349,9 @@ snapshots: zod@4.1.12: {} - zustand@5.0.8(@types/react@19.2.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): + zustand@5.0.8(@types/react@19.2.6)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.6 immer: 10.2.0 react: 19.2.0 use-sync-external-store: 1.6.0(react@19.2.0) diff --git a/scripts/build-geo.js b/scripts/build-geo.js index 74902511..a83caa6c 100644 --- a/scripts/build-geo.js +++ b/scripts/build-geo.js @@ -3,8 +3,8 @@ import 'dotenv/config'; import fs from 'node:fs'; import path from 'node:path'; import https from 'https'; -import zlib from 'zlib'; import tar from 'tar'; +import zlib from 'zlib'; if (process.env.VERCEL && !process.env.BUILD_GEO) { console.log('Vercel environment detected. Skipping geo setup.'); diff --git a/scripts/check-db.js b/scripts/check-db.js index 09577699..68374f6f 100644 --- a/scripts/check-db.js +++ b/scripts/check-db.js @@ -1,10 +1,10 @@ /* eslint-disable no-console */ import 'dotenv/config'; import { execSync } from 'node:child_process'; +import { PrismaPg } from '@prisma/adapter-pg'; import chalk from 'chalk'; import semver from 'semver'; import { PrismaClient } from '../generated/prisma/client.js'; -import { PrismaPg } from '@prisma/adapter-pg'; const MIN_VERSION = '9.4.0'; diff --git a/scripts/download-country-names.js b/scripts/download-country-names.js index 2bc91c76..937fb22f 100644 --- a/scripts/download-country-names.js +++ b/scripts/download-country-names.js @@ -1,8 +1,9 @@ /* eslint-disable no-console */ -import fs from 'fs-extra'; + import path from 'node:path'; -import https from 'https'; import chalk from 'chalk'; +import fs from 'fs-extra'; +import https from 'https'; const src = path.resolve(process.cwd(), 'src/lang'); const dest = path.resolve(process.cwd(), 'public/intl/country'); diff --git a/scripts/download-language-names.js b/scripts/download-language-names.js index 4daa7b79..d3db6016 100644 --- a/scripts/download-language-names.js +++ b/scripts/download-language-names.js @@ -1,8 +1,9 @@ /* eslint-disable no-console */ -import fs from 'fs-extra'; + import path from 'node:path'; -import https from 'https'; import chalk from 'chalk'; +import fs from 'fs-extra'; +import https from 'https'; const src = path.resolve(process.cwd(), 'src/lang'); const dest = path.resolve(process.cwd(), 'public/intl/language'); diff --git a/scripts/format-lang.js b/scripts/format-lang.js index ad18d82d..95c390ee 100644 --- a/scripts/format-lang.js +++ b/scripts/format-lang.js @@ -1,6 +1,6 @@ import path from 'node:path'; -import fs from 'fs-extra'; import del from 'del'; +import fs from 'fs-extra'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); diff --git a/scripts/merge-messages.js b/scripts/merge-messages.js index 9e846af5..29abc539 100644 --- a/scripts/merge-messages.js +++ b/scripts/merge-messages.js @@ -1,8 +1,8 @@ /* eslint-disable no-console */ import fs from 'node:fs'; import path from 'node:path'; -import prettier from 'prettier'; import { createRequire } from 'module'; +import prettier from 'prettier'; const require = createRequire(import.meta.url); diff --git a/src/app/(collect)/p/[slug]/route.ts b/src/app/(collect)/p/[slug]/route.ts index 9959fe85..79d6faa5 100644 --- a/src/app/(collect)/p/[slug]/route.ts +++ b/src/app/(collect)/p/[slug]/route.ts @@ -1,11 +1,11 @@ export const dynamic = 'force-dynamic'; import { NextResponse } from 'next/server'; -import { notFound } from '@/lib/response'; -import redis from '@/lib/redis'; -import { findPixel } from '@/queries/prisma'; -import { Pixel } from '@/generated/prisma/client'; import { POST } from '@/app/api/send/route'; +import type { Pixel } from '@/generated/prisma/client'; +import redis from '@/lib/redis'; +import { notFound } from '@/lib/response'; +import { findPixel } from '@/queries/prisma'; const image = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw', 'base64'); diff --git a/src/app/(collect)/q/[slug]/route.ts b/src/app/(collect)/q/[slug]/route.ts index 80c5bb47..24089bdb 100644 --- a/src/app/(collect)/q/[slug]/route.ts +++ b/src/app/(collect)/q/[slug]/route.ts @@ -1,11 +1,11 @@ export const dynamic = 'force-dynamic'; import { NextResponse } from 'next/server'; +import { POST } from '@/app/api/send/route'; +import type { Link } from '@/generated/prisma/client'; +import redis from '@/lib/redis'; import { notFound } from '@/lib/response'; import { findLink } from '@/queries/prisma'; -import { POST } from '@/app/api/send/route'; -import { Link } from '@/generated/prisma/client'; -import redis from '@/lib/redis'; export async function GET(request: Request, { params }: { params: Promise<{ slug: string }> }) { const { slug } = await params; diff --git a/src/app/(main)/MobileNav.tsx b/src/app/(main)/MobileNav.tsx index a1944960..aaa25846 100644 --- a/src/app/(main)/MobileNav.tsx +++ b/src/app/(main)/MobileNav.tsx @@ -1,11 +1,11 @@ +import { Grid, IconLabel, NavMenu, NavMenuItem, Row, Text } from '@umami/react-zen'; +import Link from 'next/link'; import { WebsiteNav } from '@/app/(main)/websites/[websiteId]/WebsiteNav'; import { useMessages, useNavigation } from '@/components/hooks'; import { Globe, Grid2x2, LinkIcon } from '@/components/icons'; import { MobileMenuButton } from '@/components/input/MobileMenuButton'; import { NavButton } from '@/components/input/NavButton'; import { Logo } from '@/components/svg'; -import { Grid, IconLabel, NavMenu, NavMenuItem, Row, Text } from '@umami/react-zen'; -import Link from 'next/link'; import { AdminNav } from './admin/AdminNav'; import { SettingsNav } from './settings/SettingsNav'; diff --git a/src/app/(main)/SideNav.tsx b/src/app/(main)/SideNav.tsx index 32e3e397..1ecb58db 100644 --- a/src/app/(main)/SideNav.tsx +++ b/src/app/(main)/SideNav.tsx @@ -1,20 +1,20 @@ -import { Key } from 'react'; -import Link from 'next/link'; import { - Sidebar, - SidebarSection, - SidebarItem, - SidebarHeader, Row, - SidebarProps, + Sidebar, + SidebarHeader, + SidebarItem, + type SidebarProps, + SidebarSection, ThemeButton, } from '@umami/react-zen'; -import { Globe, LinkIcon, Grid2x2, PanelLeft } from '@/components/icons'; -import { Logo } from '@/components/svg'; -import { useMessages, useNavigation, useGlobalState } from '@/components/hooks'; +import Link from 'next/link'; +import type { Key } from 'react'; +import { useGlobalState, useMessages, useNavigation } from '@/components/hooks'; +import { Globe, Grid2x2, LinkIcon, PanelLeft } from '@/components/icons'; +import { LanguageButton } from '@/components/input/LanguageButton'; import { NavButton } from '@/components/input/NavButton'; import { PanelButton } from '@/components/input/PanelButton'; -import { LanguageButton } from '@/components/input/LanguageButton'; +import { Logo } from '@/components/svg'; export function SideNav(props: SidebarProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/TopNav.tsx b/src/app/(main)/TopNav.tsx index 71f38d2b..d410097a 100644 --- a/src/app/(main)/TopNav.tsx +++ b/src/app/(main)/TopNav.tsx @@ -1,4 +1,4 @@ -import { ThemeButton, Row } from '@umami/react-zen'; +import { Row, ThemeButton } from '@umami/react-zen'; import { LanguageButton } from '@/components/input/LanguageButton'; import { ProfileButton } from '@/components/input/ProfileButton'; diff --git a/src/app/(main)/UpdateNotice.tsx b/src/app/(main)/UpdateNotice.tsx index 81e2ca3a..ef441d0b 100644 --- a/src/app/(main)/UpdateNotice.tsx +++ b/src/app/(main)/UpdateNotice.tsx @@ -1,10 +1,10 @@ -import { useEffect, useCallback, useState } from 'react'; -import { Button, AlertBanner, Column, Row } from '@umami/react-zen'; -import { setItem } from '@/lib/storage'; -import { useVersion, checkVersion } from '@/store/version'; -import { REPO_URL, VERSION_CHECK } from '@/lib/constants'; -import { useMessages } from '@/components/hooks'; +import { AlertBanner, Button, Column, Row } from '@umami/react-zen'; import { usePathname } from 'next/navigation'; +import { useCallback, useEffect, useState } from 'react'; +import { useMessages } from '@/components/hooks'; +import { REPO_URL, VERSION_CHECK } from '@/lib/constants'; +import { setItem } from '@/lib/storage'; +import { checkVersion, useVersion } from '@/store/version'; export function UpdateNotice({ user, config }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/admin/AdminLayout.tsx b/src/app/(main)/admin/AdminLayout.tsx index 3cc5aed3..56561a8e 100644 --- a/src/app/(main)/admin/AdminLayout.tsx +++ b/src/app/(main)/admin/AdminLayout.tsx @@ -1,8 +1,8 @@ 'use client'; +import { Column, Grid } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { PageBody } from '@/components/common/PageBody'; import { useLoginQuery } from '@/components/hooks'; -import { Column, Grid } from '@umami/react-zen'; -import { ReactNode } from 'react'; import { AdminNav } from './AdminNav'; export function AdminLayout({ children }: { children: ReactNode }) { diff --git a/src/app/(main)/admin/layout.tsx b/src/app/(main)/admin/layout.tsx index 634fc658..34cdd0b6 100644 --- a/src/app/(main)/admin/layout.tsx +++ b/src/app/(main)/admin/layout.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { AdminLayout } from './AdminLayout'; export default function ({ children }) { diff --git a/src/app/(main)/admin/teams/AdminTeamsDataTable.tsx b/src/app/(main)/admin/teams/AdminTeamsDataTable.tsx index 53e18248..7da8531a 100644 --- a/src/app/(main)/admin/teams/AdminTeamsDataTable.tsx +++ b/src/app/(main)/admin/teams/AdminTeamsDataTable.tsx @@ -1,7 +1,7 @@ +import type { ReactNode } from 'react'; import { DataGrid } from '@/components/common/DataGrid'; import { useTeamsQuery } from '@/components/hooks'; import { AdminTeamsTable } from './AdminTeamsTable'; -import { ReactNode } from 'react'; export function AdminTeamsDataTable({ showActions, diff --git a/src/app/(main)/admin/teams/AdminTeamsPage.tsx b/src/app/(main)/admin/teams/AdminTeamsPage.tsx index 736c7b5f..41e6f4af 100644 --- a/src/app/(main)/admin/teams/AdminTeamsPage.tsx +++ b/src/app/(main)/admin/teams/AdminTeamsPage.tsx @@ -1,9 +1,9 @@ 'use client'; -import { AdminTeamsDataTable } from './AdminTeamsDataTable'; import { Column } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { AdminTeamsDataTable } from './AdminTeamsDataTable'; export function AdminTeamsPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/admin/teams/AdminTeamsTable.tsx b/src/app/(main)/admin/teams/AdminTeamsTable.tsx index e5453258..9f2abd5c 100644 --- a/src/app/(main)/admin/teams/AdminTeamsTable.tsx +++ b/src/app/(main)/admin/teams/AdminTeamsTable.tsx @@ -1,11 +1,11 @@ +import { DataColumn, DataTable, Dialog, Icon, MenuItem, Modal, Row, Text } from '@umami/react-zen'; +import Link from 'next/link'; +import { useState } from 'react'; import { DateDistance } from '@/components/common/DateDistance'; import { useMessages } from '@/components/hooks'; import { Edit, Trash } from '@/components/icons'; import { MenuButton } from '@/components/input/MenuButton'; -import { DataColumn, DataTable, Dialog, Icon, MenuItem, Modal, Row, Text } from '@umami/react-zen'; import { TeamDeleteForm } from '../../teams/[teamId]/TeamDeleteForm'; -import Link from 'next/link'; -import { useState } from 'react'; export function AdminTeamsTable({ data = [], diff --git a/src/app/(main)/admin/teams/[teamId]/page.tsx b/src/app/(main)/admin/teams/[teamId]/page.tsx index 95a0acb8..104766ad 100644 --- a/src/app/(main)/admin/teams/[teamId]/page.tsx +++ b/src/app/(main)/admin/teams/[teamId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { AdminTeamPage } from './AdminTeamPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ teamId: string }> }) { const { teamId } = await params; diff --git a/src/app/(main)/admin/teams/page.tsx b/src/app/(main)/admin/teams/page.tsx index fb0fd342..987f02b3 100644 --- a/src/app/(main)/admin/teams/page.tsx +++ b/src/app/(main)/admin/teams/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { AdminTeamsPage } from './AdminTeamsPage'; export default function () { diff --git a/src/app/(main)/admin/users/UserAddButton.tsx b/src/app/(main)/admin/users/UserAddButton.tsx index 80337b19..05250828 100644 --- a/src/app/(main)/admin/users/UserAddButton.tsx +++ b/src/app/(main)/admin/users/UserAddButton.tsx @@ -1,7 +1,7 @@ -import { Button, Icon, Text, Modal, DialogTrigger, Dialog, useToast } from '@umami/react-zen'; -import { UserAddForm } from './UserAddForm'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; import { useMessages, useModified } from '@/components/hooks'; import { Plus } from '@/components/icons'; +import { UserAddForm } from './UserAddForm'; export function UserAddButton({ onSave }: { onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/admin/users/UserAddForm.tsx b/src/app/(main)/admin/users/UserAddForm.tsx index fe7828c6..6c365510 100644 --- a/src/app/(main)/admin/users/UserAddForm.tsx +++ b/src/app/(main)/admin/users/UserAddForm.tsx @@ -1,13 +1,13 @@ import { - Select, - ListItem, - Form, - FormField, - FormButtons, - FormSubmitButton, - TextField, - PasswordField, Button, + Form, + FormButtons, + FormField, + FormSubmitButton, + ListItem, + PasswordField, + Select, + TextField, } from '@umami/react-zen'; import { useMessages, useUpdateQuery } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; diff --git a/src/app/(main)/admin/users/UserDeleteButton.tsx b/src/app/(main)/admin/users/UserDeleteButton.tsx index f3789884..ee8f2c19 100644 --- a/src/app/(main)/admin/users/UserDeleteButton.tsx +++ b/src/app/(main)/admin/users/UserDeleteButton.tsx @@ -1,5 +1,5 @@ -import { Button, Icon, Modal, DialogTrigger, Dialog, Text } from '@umami/react-zen'; -import { useMessages, useLoginQuery } from '@/components/hooks'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; +import { useLoginQuery, useMessages } from '@/components/hooks'; import { Trash } from '@/components/icons'; import { UserDeleteForm } from './UserDeleteForm'; diff --git a/src/app/(main)/admin/users/UsersDataTable.tsx b/src/app/(main)/admin/users/UsersDataTable.tsx index ae72cfed..8467bd23 100644 --- a/src/app/(main)/admin/users/UsersDataTable.tsx +++ b/src/app/(main)/admin/users/UsersDataTable.tsx @@ -1,7 +1,7 @@ +import type { ReactNode } from 'react'; import { DataGrid } from '@/components/common/DataGrid'; import { useUsersQuery } from '@/components/hooks'; import { UsersTable } from './UsersTable'; -import { ReactNode } from 'react'; export function UsersDataTable({ showActions }: { showActions?: boolean; children?: ReactNode }) { const queryResult = useUsersQuery(); diff --git a/src/app/(main)/admin/users/UsersPage.tsx b/src/app/(main)/admin/users/UsersPage.tsx index 3e492b34..7e1b0f48 100644 --- a/src/app/(main)/admin/users/UsersPage.tsx +++ b/src/app/(main)/admin/users/UsersPage.tsx @@ -1,10 +1,10 @@ 'use client'; -import { UsersDataTable } from './UsersDataTable'; import { Column } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; -import { UserAddButton } from './UserAddButton'; import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { UserAddButton } from './UserAddButton'; +import { UsersDataTable } from './UsersDataTable'; export function UsersPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/admin/users/UsersTable.tsx b/src/app/(main)/admin/users/UsersTable.tsx index 6b365691..9c10f3e7 100644 --- a/src/app/(main)/admin/users/UsersTable.tsx +++ b/src/app/(main)/admin/users/UsersTable.tsx @@ -1,13 +1,12 @@ -import { useState } from 'react'; -import { Row, Text, Icon, DataTable, DataColumn, MenuItem, Modal } from '@umami/react-zen'; +import { DataColumn, DataTable, Icon, MenuItem, Modal, Row, Text } from '@umami/react-zen'; import Link from 'next/link'; -import { ROLES } from '@/lib/constants'; -import { Trash } from '@/components/icons'; -import { useMessages } from '@/components/hooks'; -import { Edit } from '@/components/icons'; -import { MenuButton } from '@/components/input/MenuButton'; -import { UserDeleteForm } from './UserDeleteForm'; +import { useState } from 'react'; import { DateDistance } from '@/components/common/DateDistance'; +import { useMessages } from '@/components/hooks'; +import { Edit, Trash } from '@/components/icons'; +import { MenuButton } from '@/components/input/MenuButton'; +import { ROLES } from '@/lib/constants'; +import { UserDeleteForm } from './UserDeleteForm'; export function UsersTable({ data = [], diff --git a/src/app/(main)/admin/users/[userId]/UserEditForm.tsx b/src/app/(main)/admin/users/[userId]/UserEditForm.tsx index 142adaa6..30c86862 100644 --- a/src/app/(main)/admin/users/[userId]/UserEditForm.tsx +++ b/src/app/(main)/admin/users/[userId]/UserEditForm.tsx @@ -1,12 +1,12 @@ import { - Select, - ListItem, Form, - FormField, FormButtons, - TextField, + FormField, FormSubmitButton, + ListItem, PasswordField, + Select, + TextField, } from '@umami/react-zen'; import { useLoginQuery, useMessages, useUpdateQuery, useUser } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; @@ -30,7 +30,7 @@ export function UserEditForm({ userId, onSave }: { userId: string; onSave?: () = }; return ( -
+ diff --git a/src/app/(main)/admin/users/[userId]/UserHeader.tsx b/src/app/(main)/admin/users/[userId]/UserHeader.tsx index aeaca0b2..1f82897e 100644 --- a/src/app/(main)/admin/users/[userId]/UserHeader.tsx +++ b/src/app/(main)/admin/users/[userId]/UserHeader.tsx @@ -1,6 +1,6 @@ -import { User } from '@/components/icons'; import { PageHeader } from '@/components/common/PageHeader'; import { useUser } from '@/components/hooks'; +import { User } from '@/components/icons'; export function UserHeader() { const user = useUser(); diff --git a/src/app/(main)/admin/users/[userId]/UserPage.tsx b/src/app/(main)/admin/users/[userId]/UserPage.tsx index 0ae65855..5e0f8d10 100644 --- a/src/app/(main)/admin/users/[userId]/UserPage.tsx +++ b/src/app/(main)/admin/users/[userId]/UserPage.tsx @@ -1,9 +1,9 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { UserSettings } from './UserSettings'; -import { UserProvider } from './UserProvider'; import { UserHeader } from '@/app/(main)/admin/users/[userId]/UserHeader'; import { Panel } from '@/components/common/Panel'; +import { UserProvider } from './UserProvider'; +import { UserSettings } from './UserSettings'; export function UserPage({ userId }: { userId: string }) { return ( diff --git a/src/app/(main)/admin/users/[userId]/UserProvider.tsx b/src/app/(main)/admin/users/[userId]/UserProvider.tsx index 82dba512..ea01915a 100644 --- a/src/app/(main)/admin/users/[userId]/UserProvider.tsx +++ b/src/app/(main)/admin/users/[userId]/UserProvider.tsx @@ -1,7 +1,7 @@ -import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; -import { User } from '@/generated/prisma/client'; +import { createContext, type ReactNode } from 'react'; import { useUserQuery } from '@/components/hooks/queries/useUserQuery'; +import type { User } from '@/generated/prisma/client'; export const UserContext = createContext(null); diff --git a/src/app/(main)/admin/users/[userId]/UserSettings.tsx b/src/app/(main)/admin/users/[userId]/UserSettings.tsx index 3d699ebe..3f17f3e1 100644 --- a/src/app/(main)/admin/users/[userId]/UserSettings.tsx +++ b/src/app/(main)/admin/users/[userId]/UserSettings.tsx @@ -1,6 +1,6 @@ -import { Column, Tabs, Tab, TabList, TabPanel } from '@umami/react-zen'; -import { UserEditForm } from './UserEditForm'; +import { Column, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; +import { UserEditForm } from './UserEditForm'; import { UserWebsites } from './UserWebsites'; export function UserSettings({ userId }: { userId: string }) { diff --git a/src/app/(main)/admin/users/[userId]/UserWebsites.tsx b/src/app/(main)/admin/users/[userId]/UserWebsites.tsx index dae83660..eeb173e7 100644 --- a/src/app/(main)/admin/users/[userId]/UserWebsites.tsx +++ b/src/app/(main)/admin/users/[userId]/UserWebsites.tsx @@ -1,6 +1,6 @@ +import { WebsitesTable } from '@/app/(main)/websites/WebsitesTable'; import { DataGrid } from '@/components/common/DataGrid'; import { useUserWebsitesQuery } from '@/components/hooks'; -import { WebsitesTable } from '@/app/(main)/websites/WebsitesTable'; export function UserWebsites({ userId }) { const queryResult = useUserWebsitesQuery({ userId }); diff --git a/src/app/(main)/admin/users/[userId]/page.tsx b/src/app/(main)/admin/users/[userId]/page.tsx index e573b14e..16c9f366 100644 --- a/src/app/(main)/admin/users/[userId]/page.tsx +++ b/src/app/(main)/admin/users/[userId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { UserPage } from './UserPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ userId: string }> }) { const { userId } = await params; diff --git a/src/app/(main)/admin/users/page.tsx b/src/app/(main)/admin/users/page.tsx index 7cfd4887..96e69eb5 100644 --- a/src/app/(main)/admin/users/page.tsx +++ b/src/app/(main)/admin/users/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { UsersPage } from './UsersPage'; export default function () { diff --git a/src/app/(main)/admin/websites/AdminWebsitesPage.tsx b/src/app/(main)/admin/websites/AdminWebsitesPage.tsx index f66c5eb7..1c2ac921 100644 --- a/src/app/(main)/admin/websites/AdminWebsitesPage.tsx +++ b/src/app/(main)/admin/websites/AdminWebsitesPage.tsx @@ -1,9 +1,9 @@ 'use client'; -import { AdminWebsitesDataTable } from './AdminWebsitesDataTable'; import { Column } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { AdminWebsitesDataTable } from './AdminWebsitesDataTable'; export function AdminWebsitesPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/admin/websites/AdminWebsitesTable.tsx b/src/app/(main)/admin/websites/AdminWebsitesTable.tsx index b8d76a9b..cfda5957 100644 --- a/src/app/(main)/admin/websites/AdminWebsitesTable.tsx +++ b/src/app/(main)/admin/websites/AdminWebsitesTable.tsx @@ -1,12 +1,11 @@ -import { useState } from 'react'; +import { DataColumn, DataTable, Dialog, Icon, MenuItem, Modal, Row, Text } from '@umami/react-zen'; import Link from 'next/link'; -import { Row, Text, Icon, DataTable, DataColumn, MenuItem, Modal, Dialog } from '@umami/react-zen'; -import { Trash, Users } from '@/components/icons'; -import { useMessages } from '@/components/hooks'; -import { Edit } from '@/components/icons'; -import { MenuButton } from '@/components/input/MenuButton'; -import { DateDistance } from '@/components/common/DateDistance'; +import { useState } from 'react'; import { WebsiteDeleteForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm'; +import { DateDistance } from '@/components/common/DateDistance'; +import { useMessages } from '@/components/hooks'; +import { Edit, Trash, Users } from '@/components/icons'; +import { MenuButton } from '@/components/input/MenuButton'; export function AdminWebsitesTable({ data = [] }: { data: any[] }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/admin/websites/[websiteId]/page.tsx b/src/app/(main)/admin/websites/[websiteId]/page.tsx index e1c92276..557adbd9 100644 --- a/src/app/(main)/admin/websites/[websiteId]/page.tsx +++ b/src/app/(main)/admin/websites/[websiteId]/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { WebsiteSettingsPage } from '@/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/admin/websites/page.tsx b/src/app/(main)/admin/websites/page.tsx index 85eb029a..d6da9f63 100644 --- a/src/app/(main)/admin/websites/page.tsx +++ b/src/app/(main)/admin/websites/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { AdminWebsitesPage } from './AdminWebsitesPage'; export default function () { diff --git a/src/app/(main)/boards/BoardAddButton.tsx b/src/app/(main)/boards/BoardAddButton.tsx index 7c98ed16..f9f80f4d 100644 --- a/src/app/(main)/boards/BoardAddButton.tsx +++ b/src/app/(main)/boards/BoardAddButton.tsx @@ -1,5 +1,5 @@ +import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; import { useMessages, useModified, useNavigation } from '@/components/hooks'; -import { Button, Icon, Modal, Dialog, DialogTrigger, Text, useToast } from '@umami/react-zen'; import { Plus } from '@/components/icons'; import { BoardAddForm } from './BoardAddForm'; diff --git a/src/app/(main)/boards/BoardAddForm.tsx b/src/app/(main)/boards/BoardAddForm.tsx index 8e7b764c..6471b21e 100644 --- a/src/app/(main)/boards/BoardAddForm.tsx +++ b/src/app/(main)/boards/BoardAddForm.tsx @@ -1,5 +1,5 @@ -import { Form, FormField, FormSubmitButton, Row, TextField, Button } from '@umami/react-zen'; -import { useUpdateQuery, useMessages } from '@/components/hooks'; +import { Button, Form, FormField, FormSubmitButton, Row, TextField } from '@umami/react-zen'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; import { DOMAIN_REGEX } from '@/lib/constants'; export function BoardAddForm({ diff --git a/src/app/(main)/boards/BoardsPage.tsx b/src/app/(main)/boards/BoardsPage.tsx index adf0e02b..fa5eb64a 100644 --- a/src/app/(main)/boards/BoardsPage.tsx +++ b/src/app/(main)/boards/BoardsPage.tsx @@ -1,7 +1,7 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { PageHeader } from '@/components/common/PageHeader'; import { PageBody } from '@/components/common/PageBody'; +import { PageHeader } from '@/components/common/PageHeader'; import { BoardAddButton } from './BoardAddButton'; export function BoardsPage() { diff --git a/src/app/(main)/boards/[boardId]/page.tsx b/src/app/(main)/boards/[boardId]/page.tsx index d11f6a2a..2cb076a5 100644 --- a/src/app/(main)/boards/[boardId]/page.tsx +++ b/src/app/(main)/boards/[boardId]/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { Board } from './Board'; export default async function ({ params }: { params: Promise<{ boardId: string }> }) { diff --git a/src/app/(main)/boards/page.tsx b/src/app/(main)/boards/page.tsx index 5e3c8034..e8ca6624 100644 --- a/src/app/(main)/boards/page.tsx +++ b/src/app/(main)/boards/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { BoardsPage } from './BoardsPage'; export default function () { diff --git a/src/app/(main)/console/[websiteId]/TestConsolePage.tsx b/src/app/(main)/console/[websiteId]/TestConsolePage.tsx index e44ea95d..56cc4952 100644 --- a/src/app/(main)/console/[websiteId]/TestConsolePage.tsx +++ b/src/app/(main)/console/[websiteId]/TestConsolePage.tsx @@ -1,25 +1,25 @@ 'use client'; -import { Button, Grid, Column, Heading } from '@umami/react-zen'; +import { Button, Column, Grid, Heading } from '@umami/react-zen'; import Link from 'next/link'; import Script from 'next/script'; -import { Panel } from '@/components/common/Panel'; -import { PageBody } from '@/components/common/PageBody'; -import { EventsChart } from '@/components/metrics/EventsChart'; import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; -import { useWebsiteQuery } from '@/components/hooks'; +import { PageBody } from '@/components/common/PageBody'; import { PageHeader } from '@/components/common/PageHeader'; +import { Panel } from '@/components/common/Panel'; +import { useWebsiteQuery } from '@/components/hooks'; +import { EventsChart } from '@/components/metrics/EventsChart'; export function TestConsolePage({ websiteId }: { websiteId: string }) { const { data } = useWebsiteQuery(websiteId); function handleRunScript() { - window['umami'].track(props => ({ + window.umami.track(props => ({ ...props, url: '/page-view', referrer: 'https://www.google.com', })); - window['umami'].track('track-event-no-data'); - window['umami'].track('track-event-with-data', { + window.umami.track('track-event-no-data'); + window.umami.track('track-event-with-data', { test: 'test-data', boolean: true, booleanError: 'true', @@ -40,32 +40,32 @@ export function TestConsolePage({ websiteId }: { websiteId: string }) { } function handleRunRevenue() { - window['umami'].track(props => ({ + window.umami.track(props => ({ ...props, url: '/checkout-cart', referrer: 'https://www.google.com', })); - window['umami'].track('checkout-cart', { + window.umami.track('checkout-cart', { revenue: parseFloat((Math.random() * 1000).toFixed(2)), currency: 'USD', }); - window['umami'].track('affiliate-link', { + window.umami.track('affiliate-link', { revenue: parseFloat((Math.random() * 1000).toFixed(2)), currency: 'USD', }); - window['umami'].track('promotion-link', { + window.umami.track('promotion-link', { revenue: parseFloat((Math.random() * 1000).toFixed(2)), currency: 'USD', }); - window['umami'].track('checkout-cart', { + window.umami.track('checkout-cart', { revenue: parseFloat((Math.random() * 1000).toFixed(2)), currency: 'EUR', }); - window['umami'].track('promotion-link', { + window.umami.track('promotion-link', { revenue: parseFloat((Math.random() * 1000).toFixed(2)), currency: 'EUR', }); - window['umami'].track('affiliate-link', { + window.umami.track('affiliate-link', { item1: { productIdentity: 'ABC424', revenue: parseFloat((Math.random() * 10000).toFixed(2)), @@ -80,7 +80,7 @@ export function TestConsolePage({ websiteId }: { websiteId: string }) { } function handleRunIdentify() { - window['umami'].identify({ + window.umami.identify({ userId: 123, name: 'brian', number: Math.random() * 100, diff --git a/src/app/(main)/console/[websiteId]/page.tsx b/src/app/(main)/console/[websiteId]/page.tsx index 7f507e41..28b81615 100644 --- a/src/app/(main)/console/[websiteId]/page.tsx +++ b/src/app/(main)/console/[websiteId]/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { TestConsolePage } from './TestConsolePage'; async function getEnabled() { diff --git a/src/app/(main)/dashboard/DashboardPage.tsx b/src/app/(main)/dashboard/DashboardPage.tsx index c05e411d..c2c7e75f 100644 --- a/src/app/(main)/dashboard/DashboardPage.tsx +++ b/src/app/(main)/dashboard/DashboardPage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; +import { PageBody } from '@/components/common/PageBody'; import { PageHeader } from '@/components/common/PageHeader'; import { useMessages } from '@/components/hooks'; -import { PageBody } from '@/components/common/PageBody'; export function DashboardPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/dashboard/page.tsx b/src/app/(main)/dashboard/page.tsx index e934e6ad..4b79b598 100644 --- a/src/app/(main)/dashboard/page.tsx +++ b/src/app/(main)/dashboard/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { DashboardPage } from './DashboardPage'; export default async function () { diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx index 558a9cd3..98fca4ab 100644 --- a/src/app/(main)/layout.tsx +++ b/src/app/(main)/layout.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { Suspense } from 'react'; -import { Metadata } from 'next'; import { App } from './App'; export default function ({ children }) { diff --git a/src/app/(main)/links/LinkAddButton.tsx b/src/app/(main)/links/LinkAddButton.tsx index d0c4e361..4276895d 100644 --- a/src/app/(main)/links/LinkAddButton.tsx +++ b/src/app/(main)/links/LinkAddButton.tsx @@ -1,7 +1,7 @@ import { useMessages } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { LinkEditForm } from './LinkEditForm'; import { DialogButton } from '@/components/input/DialogButton'; +import { LinkEditForm } from './LinkEditForm'; export function LinkAddButton({ teamId }: { teamId?: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/LinkDeleteButton.tsx b/src/app/(main)/links/LinkDeleteButton.tsx index aa044a36..78f85f89 100644 --- a/src/app/(main)/links/LinkDeleteButton.tsx +++ b/src/app/(main)/links/LinkDeleteButton.tsx @@ -1,8 +1,8 @@ -import { Trash } from '@/components/icons'; import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { messages } from '@/components/messages'; import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { Trash } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { messages } from '@/components/messages'; export function LinkDeleteButton({ linkId, diff --git a/src/app/(main)/links/LinkEditButton.tsx b/src/app/(main)/links/LinkEditButton.tsx index a93852b6..4d858796 100644 --- a/src/app/(main)/links/LinkEditButton.tsx +++ b/src/app/(main)/links/LinkEditButton.tsx @@ -1,7 +1,7 @@ -import { Edit } from '@/components/icons'; -import { LinkEditForm } from './LinkEditForm'; import { useMessages } from '@/components/hooks'; +import { Edit } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { LinkEditForm } from './LinkEditForm'; export function LinkEditButton({ linkId }: { linkId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/LinkEditForm.tsx b/src/app/(main)/links/LinkEditForm.tsx index 36a11455..6c10c7f0 100644 --- a/src/app/(main)/links/LinkEditForm.tsx +++ b/src/app/(main)/links/LinkEditForm.tsx @@ -1,22 +1,21 @@ -import { useState, useEffect } from 'react'; import { + Button, + Column, Form, FormField, FormSubmitButton, + Icon, + Label, + Loading, Row, TextField, - Button, - Label, - Column, - Icon, - Loading, } from '@umami/react-zen'; -import { useConfig, useLinkQuery } from '@/components/hooks'; -import { useMessages } from '@/components/hooks'; -import { RefreshCw } from '@/components/icons'; -import { getRandomChars } from '@/lib/generate'; +import { useEffect, useState } from 'react'; +import { useConfig, useLinkQuery, useMessages } from '@/components/hooks'; import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { RefreshCw } from '@/components/icons'; import { LINKS_URL } from '@/lib/constants'; +import { getRandomChars } from '@/lib/generate'; import { isValidUrl } from '@/lib/url'; const generateId = () => getRandomChars(9); diff --git a/src/app/(main)/links/LinkProvider.tsx b/src/app/(main)/links/LinkProvider.tsx index de97cdcf..c29e13cf 100644 --- a/src/app/(main)/links/LinkProvider.tsx +++ b/src/app/(main)/links/LinkProvider.tsx @@ -1,8 +1,8 @@ 'use client'; -import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; -import { Link } from '@/generated/prisma/client'; +import { createContext, type ReactNode } from 'react'; import { useLinkQuery } from '@/components/hooks/queries/useLinkQuery'; +import type { Link } from '@/generated/prisma/client'; export const LinkContext = createContext(null); diff --git a/src/app/(main)/links/LinksDataTable.tsx b/src/app/(main)/links/LinksDataTable.tsx index 043cd768..0b3d660b 100644 --- a/src/app/(main)/links/LinksDataTable.tsx +++ b/src/app/(main)/links/LinksDataTable.tsx @@ -1,6 +1,6 @@ +import { DataGrid } from '@/components/common/DataGrid'; import { useLinksQuery, useNavigation } from '@/components/hooks'; import { LinksTable } from './LinksTable'; -import { DataGrid } from '@/components/common/DataGrid'; export function LinksDataTable() { const { teamId } = useNavigation(); diff --git a/src/app/(main)/links/LinksPage.tsx b/src/app/(main)/links/LinksPage.tsx index e94bccf8..a6e4c7c4 100644 --- a/src/app/(main)/links/LinksPage.tsx +++ b/src/app/(main)/links/LinksPage.tsx @@ -1,11 +1,11 @@ 'use client'; -import { PageBody } from '@/components/common/PageBody'; import { Column } from '@umami/react-zen'; -import { PageHeader } from '@/components/common/PageHeader'; -import { LinkAddButton } from './LinkAddButton'; -import { useMessages, useNavigation } from '@/components/hooks'; import { LinksDataTable } from '@/app/(main)/links/LinksDataTable'; +import { PageBody } from '@/components/common/PageBody'; +import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; +import { useMessages, useNavigation } from '@/components/hooks'; +import { LinkAddButton } from './LinkAddButton'; export function LinksPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/LinksTable.tsx b/src/app/(main)/links/LinksTable.tsx index 5df15b78..2ce4ba49 100644 --- a/src/app/(main)/links/LinksTable.tsx +++ b/src/app/(main)/links/LinksTable.tsx @@ -1,10 +1,10 @@ +import { DataColumn, DataTable, type DataTableProps, Row } from '@umami/react-zen'; import Link from 'next/link'; -import { DataTable, DataColumn, Row, DataTableProps } from '@umami/react-zen'; -import { useMessages, useNavigation, useSlug } from '@/components/hooks'; import { DateDistance } from '@/components/common/DateDistance'; import { ExternalLink } from '@/components/common/ExternalLink'; -import { LinkEditButton } from './LinkEditButton'; +import { useMessages, useNavigation, useSlug } from '@/components/hooks'; import { LinkDeleteButton } from './LinkDeleteButton'; +import { LinkEditButton } from './LinkEditButton'; export function LinksTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/[linkId]/LinkControls.tsx b/src/app/(main)/links/[linkId]/LinkControls.tsx index 4e43c760..1d1147a8 100644 --- a/src/app/(main)/links/[linkId]/LinkControls.tsx +++ b/src/app/(main)/links/[linkId]/LinkControls.tsx @@ -1,9 +1,9 @@ import { Column, Row } from '@umami/react-zen'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { ExportButton } from '@/components/input/ExportButton'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { ExportButton } from '@/components/input/ExportButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; export function LinkControls({ linkId: websiteId, diff --git a/src/app/(main)/links/[linkId]/LinkHeader.tsx b/src/app/(main)/links/[linkId]/LinkHeader.tsx index ba1de3ee..b7c70f07 100644 --- a/src/app/(main)/links/[linkId]/LinkHeader.tsx +++ b/src/app/(main)/links/[linkId]/LinkHeader.tsx @@ -1,8 +1,8 @@ -import { useLink, useMessages, useSlug } from '@/components/hooks'; -import { PageHeader } from '@/components/common/PageHeader'; import { Icon, Text } from '@umami/react-zen'; -import { ExternalLink, Link } from '@/components/icons'; import { LinkButton } from '@/components/common/LinkButton'; +import { PageHeader } from '@/components/common/PageHeader'; +import { useLink, useMessages, useSlug } from '@/components/hooks'; +import { ExternalLink, Link } from '@/components/icons'; export function LinkHeader() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/[linkId]/LinkMetricsBar.tsx b/src/app/(main)/links/[linkId]/LinkMetricsBar.tsx index 43c14050..1fe8c45f 100644 --- a/src/app/(main)/links/[linkId]/LinkMetricsBar.tsx +++ b/src/app/(main)/links/[linkId]/LinkMetricsBar.tsx @@ -1,9 +1,9 @@ +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, useMessages } from '@/components/hooks'; +import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; import { formatLongNumber } from '@/lib/format'; -import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; export function LinkMetricsBar({ linkId, diff --git a/src/app/(main)/links/[linkId]/LinkPage.tsx b/src/app/(main)/links/[linkId]/LinkPage.tsx index b4377e5c..ddacf08f 100644 --- a/src/app/(main)/links/[linkId]/LinkPage.tsx +++ b/src/app/(main)/links/[linkId]/LinkPage.tsx @@ -1,14 +1,14 @@ 'use client'; -import { PageBody } from '@/components/common/PageBody'; -import { LinkProvider } from '@/app/(main)/links/LinkProvider'; -import { LinkHeader } from '@/app/(main)/links/[linkId]/LinkHeader'; -import { Panel } from '@/components/common/Panel'; -import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; -import { LinkMetricsBar } from '@/app/(main)/links/[linkId]/LinkMetricsBar'; -import { LinkControls } from '@/app/(main)/links/[linkId]/LinkControls'; -import { LinkPanels } from '@/app/(main)/links/[linkId]/LinkPanels'; import { Column, Grid } from '@umami/react-zen'; +import { LinkControls } from '@/app/(main)/links/[linkId]/LinkControls'; +import { LinkHeader } from '@/app/(main)/links/[linkId]/LinkHeader'; +import { LinkMetricsBar } from '@/app/(main)/links/[linkId]/LinkMetricsBar'; +import { LinkPanels } from '@/app/(main)/links/[linkId]/LinkPanels'; +import { LinkProvider } from '@/app/(main)/links/LinkProvider'; import { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; +import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; +import { PageBody } from '@/components/common/PageBody'; +import { Panel } from '@/components/common/Panel'; const excludedIds = ['path', 'entry', 'exit', 'title', 'language', 'screen', 'event']; diff --git a/src/app/(main)/links/[linkId]/LinkPanels.tsx b/src/app/(main)/links/[linkId]/LinkPanels.tsx index ed43f548..f33525e7 100644 --- a/src/app/(main)/links/[linkId]/LinkPanels.tsx +++ b/src/app/(main)/links/[linkId]/LinkPanels.tsx @@ -1,9 +1,9 @@ -import { Grid, Tabs, Tab, TabList, TabPanel, Heading } from '@umami/react-zen'; +import { Grid, Heading, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; import { GridRow } from '@/components/common/GridRow'; import { Panel } from '@/components/common/Panel'; -import { WorldMap } from '@/components/metrics/WorldMap'; -import { MetricsTable } from '@/components/metrics/MetricsTable'; import { useMessages } from '@/components/hooks'; +import { MetricsTable } from '@/components/metrics/MetricsTable'; +import { WorldMap } from '@/components/metrics/WorldMap'; export function LinkPanels({ linkId }: { linkId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/[linkId]/page.tsx b/src/app/(main)/links/[linkId]/page.tsx index ae3b2c9a..4317ada2 100644 --- a/src/app/(main)/links/[linkId]/page.tsx +++ b/src/app/(main)/links/[linkId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { LinkPage } from './LinkPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ linkId: string }> }) { const { linkId } = await params; diff --git a/src/app/(main)/links/page.tsx b/src/app/(main)/links/page.tsx index ed89c727..24c9c18e 100644 --- a/src/app/(main)/links/page.tsx +++ b/src/app/(main)/links/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { LinksPage } from './LinksPage'; -import { Metadata } from 'next'; export default function () { return ; diff --git a/src/app/(main)/pixels/PixelAddButton.tsx b/src/app/(main)/pixels/PixelAddButton.tsx index 8c89c795..1573b9e0 100644 --- a/src/app/(main)/pixels/PixelAddButton.tsx +++ b/src/app/(main)/pixels/PixelAddButton.tsx @@ -1,7 +1,7 @@ import { useMessages } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { PixelEditForm } from './PixelEditForm'; import { DialogButton } from '@/components/input/DialogButton'; +import { PixelEditForm } from './PixelEditForm'; export function PixelAddButton({ teamId }: { teamId?: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/PixelDeleteButton.tsx b/src/app/(main)/pixels/PixelDeleteButton.tsx index 977ce5ef..436dba5c 100644 --- a/src/app/(main)/pixels/PixelDeleteButton.tsx +++ b/src/app/(main)/pixels/PixelDeleteButton.tsx @@ -1,8 +1,8 @@ -import { Trash } from '@/components/icons'; import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { messages } from '@/components/messages'; import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; +import { Trash } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { messages } from '@/components/messages'; export function PixelDeleteButton({ pixelId, diff --git a/src/app/(main)/pixels/PixelEditButton.tsx b/src/app/(main)/pixels/PixelEditButton.tsx index d8627bb9..3c5924da 100644 --- a/src/app/(main)/pixels/PixelEditButton.tsx +++ b/src/app/(main)/pixels/PixelEditButton.tsx @@ -1,7 +1,7 @@ -import { Edit } from '@/components/icons'; -import { PixelEditForm } from './PixelEditForm'; import { useMessages } from '@/components/hooks'; +import { Edit } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { PixelEditForm } from './PixelEditForm'; export function PixelEditButton({ pixelId }: { pixelId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/PixelEditForm.tsx b/src/app/(main)/pixels/PixelEditForm.tsx index a3a4f0c8..aedd3a3b 100644 --- a/src/app/(main)/pixels/PixelEditForm.tsx +++ b/src/app/(main)/pixels/PixelEditForm.tsx @@ -1,22 +1,21 @@ import { + Button, + Column, Form, FormField, FormSubmitButton, + Icon, + Label, + Loading, Row, TextField, - Button, - Label, - Column, - Icon, - Loading, } from '@umami/react-zen'; -import { useConfig, usePixelQuery } from '@/components/hooks'; -import { useMessages } from '@/components/hooks'; -import { RefreshCw } from '@/components/icons'; -import { getRandomChars } from '@/lib/generate'; -import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; import { useEffect, useState } from 'react'; +import { useConfig, useMessages, usePixelQuery } from '@/components/hooks'; +import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { RefreshCw } from '@/components/icons'; import { PIXELS_URL } from '@/lib/constants'; +import { getRandomChars } from '@/lib/generate'; const generateId = () => getRandomChars(9); diff --git a/src/app/(main)/pixels/PixelProvider.tsx b/src/app/(main)/pixels/PixelProvider.tsx index 3ba4c5e5..9e929d8c 100644 --- a/src/app/(main)/pixels/PixelProvider.tsx +++ b/src/app/(main)/pixels/PixelProvider.tsx @@ -1,8 +1,8 @@ 'use client'; -import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; -import { Pixel } from '@/generated/prisma/client'; +import { createContext, type ReactNode } from 'react'; import { usePixelQuery } from '@/components/hooks/queries/usePixelQuery'; +import type { Pixel } from '@/generated/prisma/client'; export const PixelContext = createContext(null); diff --git a/src/app/(main)/pixels/PixelsDataTable.tsx b/src/app/(main)/pixels/PixelsDataTable.tsx index 6a1eb982..51b8c5a0 100644 --- a/src/app/(main)/pixels/PixelsDataTable.tsx +++ b/src/app/(main)/pixels/PixelsDataTable.tsx @@ -1,6 +1,6 @@ -import { usePixelsQuery, useNavigation } from '@/components/hooks'; -import { PixelsTable } from './PixelsTable'; import { DataGrid } from '@/components/common/DataGrid'; +import { useNavigation, usePixelsQuery } from '@/components/hooks'; +import { PixelsTable } from './PixelsTable'; export function PixelsDataTable() { const { teamId } = useNavigation(); diff --git a/src/app/(main)/pixels/PixelsPage.tsx b/src/app/(main)/pixels/PixelsPage.tsx index 0733d5b1..4f6acefe 100644 --- a/src/app/(main)/pixels/PixelsPage.tsx +++ b/src/app/(main)/pixels/PixelsPage.tsx @@ -1,11 +1,11 @@ 'use client'; -import { PageBody } from '@/components/common/PageBody'; import { Column } from '@umami/react-zen'; +import { PageBody } from '@/components/common/PageBody'; import { PageHeader } from '@/components/common/PageHeader'; -import { PixelAddButton } from './PixelAddButton'; -import { useMessages, useNavigation } from '@/components/hooks'; -import { PixelsDataTable } from './PixelsDataTable'; import { Panel } from '@/components/common/Panel'; +import { useMessages, useNavigation } from '@/components/hooks'; +import { PixelAddButton } from './PixelAddButton'; +import { PixelsDataTable } from './PixelsDataTable'; export function PixelsPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/PixelsTable.tsx b/src/app/(main)/pixels/PixelsTable.tsx index 4edbb1cf..48f2121b 100644 --- a/src/app/(main)/pixels/PixelsTable.tsx +++ b/src/app/(main)/pixels/PixelsTable.tsx @@ -1,10 +1,10 @@ +import { DataColumn, DataTable, type DataTableProps, Row } from '@umami/react-zen'; import Link from 'next/link'; -import { DataTable, DataColumn, Row, DataTableProps } from '@umami/react-zen'; -import { useMessages, useNavigation, useSlug } from '@/components/hooks'; import { DateDistance } from '@/components/common/DateDistance'; -import { PixelEditButton } from './PixelEditButton'; -import { PixelDeleteButton } from './PixelDeleteButton'; import { ExternalLink } from '@/components/common/ExternalLink'; +import { useMessages, useNavigation, useSlug } from '@/components/hooks'; +import { PixelDeleteButton } from './PixelDeleteButton'; +import { PixelEditButton } from './PixelEditButton'; export function PixelsTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/[pixelId]/PixelControls.tsx b/src/app/(main)/pixels/[pixelId]/PixelControls.tsx index 33f49222..55dcd576 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelControls.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelControls.tsx @@ -1,9 +1,9 @@ import { Column, Row } from '@umami/react-zen'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { ExportButton } from '@/components/input/ExportButton'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { ExportButton } from '@/components/input/ExportButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; export function PixelControls({ pixelId: websiteId, diff --git a/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx b/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx index a4972991..8171aaf1 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx @@ -1,8 +1,8 @@ -import { usePixel, useMessages, useSlug } from '@/components/hooks'; -import { PageHeader } from '@/components/common/PageHeader'; import { Icon, Text } from '@umami/react-zen'; -import { ExternalLink, Grid2x2 } from '@/components/icons'; import { LinkButton } from '@/components/common/LinkButton'; +import { PageHeader } from '@/components/common/PageHeader'; +import { useMessages, usePixel, useSlug } from '@/components/hooks'; +import { ExternalLink, Grid2x2 } from '@/components/icons'; export function PixelHeader() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/[pixelId]/PixelMetricsBar.tsx b/src/app/(main)/pixels/[pixelId]/PixelMetricsBar.tsx index 0305df7f..c9dcd357 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelMetricsBar.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelMetricsBar.tsx @@ -1,9 +1,9 @@ +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, useMessages } from '@/components/hooks'; +import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; import { formatLongNumber } from '@/lib/format'; -import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; export function PixelMetricsBar({ pixelId, diff --git a/src/app/(main)/pixels/[pixelId]/PixelPage.tsx b/src/app/(main)/pixels/[pixelId]/PixelPage.tsx index 46cfe338..7a4ae9d7 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelPage.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelPage.tsx @@ -1,14 +1,14 @@ 'use client'; -import { PageBody } from '@/components/common/PageBody'; -import { PixelProvider } from '@/app/(main)/pixels/PixelProvider'; -import { PixelHeader } from '@/app/(main)/pixels/[pixelId]/PixelHeader'; -import { Panel } from '@/components/common/Panel'; -import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; -import { PixelMetricsBar } from '@/app/(main)/pixels/[pixelId]/PixelMetricsBar'; -import { PixelControls } from '@/app/(main)/pixels/[pixelId]/PixelControls'; -import { PixelPanels } from '@/app/(main)/pixels/[pixelId]/PixelPanels'; import { Column, Grid } from '@umami/react-zen'; +import { PixelControls } from '@/app/(main)/pixels/[pixelId]/PixelControls'; +import { PixelHeader } from '@/app/(main)/pixels/[pixelId]/PixelHeader'; +import { PixelMetricsBar } from '@/app/(main)/pixels/[pixelId]/PixelMetricsBar'; +import { PixelPanels } from '@/app/(main)/pixels/[pixelId]/PixelPanels'; +import { PixelProvider } from '@/app/(main)/pixels/PixelProvider'; import { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; +import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; +import { PageBody } from '@/components/common/PageBody'; +import { Panel } from '@/components/common/Panel'; const excludedIds = ['path', 'entry', 'exit', 'title', 'language', 'screen', 'event']; diff --git a/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx b/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx index d3adc1a3..9cc24c92 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx @@ -1,9 +1,9 @@ -import { Grid, Tabs, Tab, TabList, TabPanel, Heading } from '@umami/react-zen'; +import { Grid, Heading, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; import { GridRow } from '@/components/common/GridRow'; import { Panel } from '@/components/common/Panel'; -import { WorldMap } from '@/components/metrics/WorldMap'; -import { MetricsTable } from '@/components/metrics/MetricsTable'; import { useMessages } from '@/components/hooks'; +import { MetricsTable } from '@/components/metrics/MetricsTable'; +import { WorldMap } from '@/components/metrics/WorldMap'; export function PixelPanels({ pixelId }: { pixelId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/[pixelId]/page.tsx b/src/app/(main)/pixels/[pixelId]/page.tsx index 85456d29..d1db92f3 100644 --- a/src/app/(main)/pixels/[pixelId]/page.tsx +++ b/src/app/(main)/pixels/[pixelId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { PixelPage } from './PixelPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: { pixelId: string } }) { const { pixelId } = await params; diff --git a/src/app/(main)/pixels/page.tsx b/src/app/(main)/pixels/page.tsx index 4573b065..cc240cd2 100644 --- a/src/app/(main)/pixels/page.tsx +++ b/src/app/(main)/pixels/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { PixelsPage } from './PixelsPage'; -import { Metadata } from 'next'; export default function () { return ; diff --git a/src/app/(main)/settings/SettingsLayout.tsx b/src/app/(main)/settings/SettingsLayout.tsx index fc7b11e7..adfaaa4f 100644 --- a/src/app/(main)/settings/SettingsLayout.tsx +++ b/src/app/(main)/settings/SettingsLayout.tsx @@ -1,7 +1,7 @@ 'use client'; -import { PageBody } from '@/components/common/PageBody'; import { Column, Grid } from '@umami/react-zen'; -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; +import { PageBody } from '@/components/common/PageBody'; import { SettingsNav } from './SettingsNav'; export function SettingsLayout({ children }: { children: ReactNode }) { diff --git a/src/app/(main)/settings/layout.tsx b/src/app/(main)/settings/layout.tsx index c934d596..e8dfb30d 100644 --- a/src/app/(main)/settings/layout.tsx +++ b/src/app/(main)/settings/layout.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { SettingsLayout } from './SettingsLayout'; export default function ({ children }) { diff --git a/src/app/(main)/settings/preferences/DateRangeSetting.tsx b/src/app/(main)/settings/preferences/DateRangeSetting.tsx index c0e8221e..3f5e6647 100644 --- a/src/app/(main)/settings/preferences/DateRangeSetting.tsx +++ b/src/app/(main)/settings/preferences/DateRangeSetting.tsx @@ -1,9 +1,9 @@ -import { useState } from 'react'; -import { DateFilter } from '@/components/input/DateFilter'; import { Button, Row } from '@umami/react-zen'; +import { useState } from 'react'; import { useMessages } from '@/components/hooks'; +import { DateFilter } from '@/components/input/DateFilter'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; -import { setItem, getItem } from '@/lib/storage'; +import { getItem, setItem } from '@/lib/storage'; export function DateRangeSetting() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/settings/preferences/LanguageSetting.tsx b/src/app/(main)/settings/preferences/LanguageSetting.tsx index 0bcaa6ba..00a2d74f 100644 --- a/src/app/(main)/settings/preferences/LanguageSetting.tsx +++ b/src/app/(main)/settings/preferences/LanguageSetting.tsx @@ -1,5 +1,5 @@ +import { Button, ListItem, Row, Select } from '@umami/react-zen'; import { useState } from 'react'; -import { Button, Select, ListItem, Row } from '@umami/react-zen'; import { useLocale, useMessages } from '@/components/hooks'; import { DEFAULT_LOCALE } from '@/lib/constants'; import { languages } from '@/lib/lang'; diff --git a/src/app/(main)/settings/preferences/PreferenceSettings.tsx b/src/app/(main)/settings/preferences/PreferenceSettings.tsx index 9192a905..a2890ce9 100644 --- a/src/app/(main)/settings/preferences/PreferenceSettings.tsx +++ b/src/app/(main)/settings/preferences/PreferenceSettings.tsx @@ -1,9 +1,9 @@ import { Column, Label } from '@umami/react-zen'; import { useLoginQuery, useMessages } from '@/components/hooks'; -import { TimezoneSetting } from './TimezoneSetting'; import { DateRangeSetting } from './DateRangeSetting'; import { LanguageSetting } from './LanguageSetting'; import { ThemeSetting } from './ThemeSetting'; +import { TimezoneSetting } from './TimezoneSetting'; export function PreferenceSettings() { const { user } = useLoginQuery(); diff --git a/src/app/(main)/settings/preferences/PreferencesPage.tsx b/src/app/(main)/settings/preferences/PreferencesPage.tsx index 4ddd3511..61e26694 100644 --- a/src/app/(main)/settings/preferences/PreferencesPage.tsx +++ b/src/app/(main)/settings/preferences/PreferencesPage.tsx @@ -1,10 +1,10 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; -import { Panel } from '@/components/common/Panel'; -import { PreferenceSettings } from './PreferenceSettings'; -import { PageHeader } from '@/components/common/PageHeader'; import { PageBody } from '@/components/common/PageBody'; +import { PageHeader } from '@/components/common/PageHeader'; +import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { PreferenceSettings } from './PreferenceSettings'; export function PreferencesPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/settings/preferences/ThemeSetting.tsx b/src/app/(main)/settings/preferences/ThemeSetting.tsx index d0c4fb28..03bd6a6e 100644 --- a/src/app/(main)/settings/preferences/ThemeSetting.tsx +++ b/src/app/(main)/settings/preferences/ThemeSetting.tsx @@ -1,5 +1,5 @@ -import { Row, Button, Icon, useTheme } from '@umami/react-zen'; -import { Sun, Moon } from '@/components/icons'; +import { Button, Icon, Row, useTheme } from '@umami/react-zen'; +import { Moon, Sun } from '@/components/icons'; export function ThemeSetting() { const { theme, setTheme } = useTheme(); diff --git a/src/app/(main)/settings/preferences/TimezoneSetting.tsx b/src/app/(main)/settings/preferences/TimezoneSetting.tsx index 68d8fadb..cf20b20d 100644 --- a/src/app/(main)/settings/preferences/TimezoneSetting.tsx +++ b/src/app/(main)/settings/preferences/TimezoneSetting.tsx @@ -1,6 +1,6 @@ +import { Button, ListItem, Row, Select } from '@umami/react-zen'; import { useState } from 'react'; -import { Row, Select, ListItem, Button } from '@umami/react-zen'; -import { useTimezone, useMessages } from '@/components/hooks'; +import { useMessages, useTimezone } from '@/components/hooks'; import { getTimezone } from '@/lib/date'; const timezones = Intl.supportedValuesOf('timeZone'); diff --git a/src/app/(main)/settings/preferences/page.tsx b/src/app/(main)/settings/preferences/page.tsx index bc1398f3..dd16870e 100644 --- a/src/app/(main)/settings/preferences/page.tsx +++ b/src/app/(main)/settings/preferences/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { PreferencesPage } from './PreferencesPage'; export default function () { diff --git a/src/app/(main)/settings/profile/PasswordChangeButton.tsx b/src/app/(main)/settings/profile/PasswordChangeButton.tsx index 885e4d66..6ce8ef84 100644 --- a/src/app/(main)/settings/profile/PasswordChangeButton.tsx +++ b/src/app/(main)/settings/profile/PasswordChangeButton.tsx @@ -1,7 +1,7 @@ -import { Button, Icon, Text, useToast, DialogTrigger, Dialog, Modal } from '@umami/react-zen'; -import { PasswordEditForm } from './PasswordEditForm'; -import { LockKeyhole } from '@/components/icons'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; +import { LockKeyhole } from '@/components/icons'; +import { PasswordEditForm } from './PasswordEditForm'; export function PasswordChangeButton() { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/settings/profile/PasswordEditForm.tsx b/src/app/(main)/settings/profile/PasswordEditForm.tsx index 2c27a2d5..6f782e44 100644 --- a/src/app/(main)/settings/profile/PasswordEditForm.tsx +++ b/src/app/(main)/settings/profile/PasswordEditForm.tsx @@ -1,10 +1,10 @@ import { - Form, - FormField, - FormButtons, - PasswordField, Button, + Form, + FormButtons, + FormField, FormSubmitButton, + PasswordField, } from '@umami/react-zen'; import { useMessages, useUpdateQuery } from '@/components/hooks'; diff --git a/src/app/(main)/settings/profile/ProfilePage.tsx b/src/app/(main)/settings/profile/ProfilePage.tsx index dab836de..f03499a3 100644 --- a/src/app/(main)/settings/profile/ProfilePage.tsx +++ b/src/app/(main)/settings/profile/ProfilePage.tsx @@ -1,10 +1,10 @@ 'use client'; -import { ProfileSettings } from './ProfileSettings'; -import { useMessages } from '@/components/hooks'; -import { Panel } from '@/components/common/Panel'; import { Column } from '@umami/react-zen'; -import { PageHeader } from '@/components/common/PageHeader'; import { PageBody } from '@/components/common/PageBody'; +import { PageHeader } from '@/components/common/PageHeader'; +import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { ProfileSettings } from './ProfileSettings'; export function ProfilePage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/settings/profile/ProfileSettings.tsx b/src/app/(main)/settings/profile/ProfileSettings.tsx index 156bf28e..fae73a53 100644 --- a/src/app/(main)/settings/profile/ProfileSettings.tsx +++ b/src/app/(main)/settings/profile/ProfileSettings.tsx @@ -1,4 +1,4 @@ -import { Row, Column, Label } from '@umami/react-zen'; +import { Column, Label, Row } from '@umami/react-zen'; import { useConfig, useLoginQuery, useMessages } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; import { PasswordChangeButton } from './PasswordChangeButton'; diff --git a/src/app/(main)/settings/profile/page.tsx b/src/app/(main)/settings/profile/page.tsx index ad2b9bcc..6060b91f 100644 --- a/src/app/(main)/settings/profile/page.tsx +++ b/src/app/(main)/settings/profile/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { ProfilePage } from './ProfilePage'; export default function () { diff --git a/src/app/(main)/settings/teams/TeamsSettingsPage.tsx b/src/app/(main)/settings/teams/TeamsSettingsPage.tsx index 9d5c8acd..dc3e3bc8 100644 --- a/src/app/(main)/settings/teams/TeamsSettingsPage.tsx +++ b/src/app/(main)/settings/teams/TeamsSettingsPage.tsx @@ -1,7 +1,7 @@ 'use client'; +import { Column } from '@umami/react-zen'; import { TeamsDataTable } from '@/app/(main)/teams/TeamsDataTable'; import { TeamsHeader } from '@/app/(main)/teams/TeamsHeader'; -import { Column } from '@umami/react-zen'; import { Panel } from '@/components/common/Panel'; export function TeamsSettingsPage() { diff --git a/src/app/(main)/settings/teams/[teamId]/TeamSettingsPage.tsx b/src/app/(main)/settings/teams/[teamId]/TeamSettingsPage.tsx index 8ad2b694..9539625f 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamSettingsPage.tsx +++ b/src/app/(main)/settings/teams/[teamId]/TeamSettingsPage.tsx @@ -1,6 +1,6 @@ 'use client'; -import { TeamProvider } from '@/app/(main)/teams/TeamProvider'; import { TeamSettings } from '@/app/(main)/teams/[teamId]/TeamSettings'; +import { TeamProvider } from '@/app/(main)/teams/TeamProvider'; export function TeamSettingsPage({ teamId }: { teamId: string }) { return ( diff --git a/src/app/(main)/settings/teams/[teamId]/page.tsx b/src/app/(main)/settings/teams/[teamId]/page.tsx index 5a9aaacb..58a380bc 100644 --- a/src/app/(main)/settings/teams/[teamId]/page.tsx +++ b/src/app/(main)/settings/teams/[teamId]/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { TeamSettingsPage } from './TeamSettingsPage'; export default async function ({ params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/(main)/settings/teams/page.tsx b/src/app/(main)/settings/teams/page.tsx index dd3bdade..a0913f45 100644 --- a/src/app/(main)/settings/teams/page.tsx +++ b/src/app/(main)/settings/teams/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { TeamsSettingsPage } from './TeamsSettingsPage'; export default function () { diff --git a/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx b/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx index c1812ed0..5009ec6c 100644 --- a/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx +++ b/src/app/(main)/settings/websites/WebsitesSettingsPage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; import { WebsitesDataTable } from '@/app/(main)/websites/WebsitesDataTable'; import { SectionHeader } from '@/components/common/SectionHeader'; +import { useMessages } from '@/components/hooks'; export function WebsitesSettingsPage({ teamId }: { teamId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx index 0dc7bcc1..53b4cd9c 100644 --- a/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx @@ -1,8 +1,8 @@ 'use client'; -import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; +import { Column } from '@umami/react-zen'; import { WebsiteSettings } from '@/app/(main)/websites/[websiteId]/settings/WebsiteSettings'; import { WebsiteSettingsHeader } from '@/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader'; -import { Column } from '@umami/react-zen'; +import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; export function WebsiteSettingsPage({ websiteId }: { websiteId: string }) { return ( diff --git a/src/app/(main)/settings/websites/[websiteId]/page.tsx b/src/app/(main)/settings/websites/[websiteId]/page.tsx index a65a5a9f..9adfc915 100644 --- a/src/app/(main)/settings/websites/[websiteId]/page.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { WebsiteSettingsPage } from './WebsiteSettingsPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; diff --git a/src/app/(main)/settings/websites/page.tsx b/src/app/(main)/settings/websites/page.tsx index cc8f886a..19c14fd6 100644 --- a/src/app/(main)/settings/websites/page.tsx +++ b/src/app/(main)/settings/websites/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { WebsitesSettingsPage } from './WebsitesSettingsPage'; export default async function ({ params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/(main)/teams/TeamAddForm.tsx b/src/app/(main)/teams/TeamAddForm.tsx index 87a6a4fd..c95259f4 100644 --- a/src/app/(main)/teams/TeamAddForm.tsx +++ b/src/app/(main)/teams/TeamAddForm.tsx @@ -1,4 +1,3 @@ -import { useMessages, useUpdateQuery } from '@/components/hooks'; import { Button, Form, @@ -7,6 +6,7 @@ import { FormSubmitButton, TextField, } from '@umami/react-zen'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; export function TeamAddForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { const { formatMessage, labels, getErrorMessage } = useMessages(); diff --git a/src/app/(main)/teams/TeamJoinForm.tsx b/src/app/(main)/teams/TeamJoinForm.tsx index 0c896747..69780788 100644 --- a/src/app/(main)/teams/TeamJoinForm.tsx +++ b/src/app/(main)/teams/TeamJoinForm.tsx @@ -1,10 +1,10 @@ import { - Form, - FormField, - FormButtons, - TextField, Button, + Form, + FormButtons, + FormField, FormSubmitButton, + TextField, } from '@umami/react-zen'; import { useMessages, useUpdateQuery } from '@/components/hooks'; diff --git a/src/app/(main)/teams/TeamLeaveButton.tsx b/src/app/(main)/teams/TeamLeaveButton.tsx index 6e455d7d..2cca76f8 100644 --- a/src/app/(main)/teams/TeamLeaveButton.tsx +++ b/src/app/(main)/teams/TeamLeaveButton.tsx @@ -1,6 +1,6 @@ -import { useLoginQuery, useMessages, useModified } from '@/components/hooks'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; import { useRouter } from 'next/navigation'; -import { Button, Icon, Modal, DialogTrigger, Dialog, Text } from '@umami/react-zen'; +import { useLoginQuery, useMessages, useModified } from '@/components/hooks'; import { LogOut } from '@/components/icons'; import { TeamLeaveForm } from './TeamLeaveForm'; diff --git a/src/app/(main)/teams/TeamLeaveForm.tsx b/src/app/(main)/teams/TeamLeaveForm.tsx index 1c7846b8..b3dcaf58 100644 --- a/src/app/(main)/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/teams/TeamLeaveForm.tsx @@ -1,5 +1,5 @@ -import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; import { ConfirmationForm } from '@/components/common/ConfirmationForm'; +import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; export function TeamLeaveForm({ teamId, diff --git a/src/app/(main)/teams/TeamProvider.tsx b/src/app/(main)/teams/TeamProvider.tsx index d4d31986..cea41614 100644 --- a/src/app/(main)/teams/TeamProvider.tsx +++ b/src/app/(main)/teams/TeamProvider.tsx @@ -1,8 +1,8 @@ 'use client'; -import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; +import { createContext, type ReactNode } from 'react'; import { useTeamQuery } from '@/components/hooks/queries/useTeamQuery'; -import { Team } from '@/generated/prisma/client'; +import type { Team } from '@/generated/prisma/client'; export const TeamContext = createContext(null); diff --git a/src/app/(main)/teams/TeamsAddButton.tsx b/src/app/(main)/teams/TeamsAddButton.tsx index 911c3b2b..578a273a 100644 --- a/src/app/(main)/teams/TeamsAddButton.tsx +++ b/src/app/(main)/teams/TeamsAddButton.tsx @@ -1,8 +1,8 @@ -import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen'; -import { Plus } from '@/components/icons'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; import { useMessages, useModified } from '@/components/hooks'; -import { TeamAddForm } from './TeamAddForm'; +import { Plus } from '@/components/icons'; import { messages } from '@/components/messages'; +import { TeamAddForm } from './TeamAddForm'; export function TeamsAddButton({ onSave }: { onSave?: () => void }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/teams/TeamsDataTable.tsx b/src/app/(main)/teams/TeamsDataTable.tsx index 4bc939b1..cdce7b93 100644 --- a/src/app/(main)/teams/TeamsDataTable.tsx +++ b/src/app/(main)/teams/TeamsDataTable.tsx @@ -1,6 +1,6 @@ +import Link from 'next/link'; import { DataGrid } from '@/components/common/DataGrid'; import { useLoginQuery, useNavigation, useUserTeamsQuery } from '@/components/hooks'; -import Link from 'next/link'; import { TeamsTable } from './TeamsTable'; export function TeamsDataTable() { diff --git a/src/app/(main)/teams/TeamsHeader.tsx b/src/app/(main)/teams/TeamsHeader.tsx index c45bc85c..579ba595 100644 --- a/src/app/(main)/teams/TeamsHeader.tsx +++ b/src/app/(main)/teams/TeamsHeader.tsx @@ -1,9 +1,9 @@ import { Row } from '@umami/react-zen'; import { PageHeader } from '@/components/common/PageHeader'; -import { ROLES } from '@/lib/constants'; import { useLoginQuery, useMessages } from '@/components/hooks'; -import { TeamsJoinButton } from './TeamsJoinButton'; +import { ROLES } from '@/lib/constants'; import { TeamsAddButton } from './TeamsAddButton'; +import { TeamsJoinButton } from './TeamsJoinButton'; export function TeamsHeader({ allowCreate = true, diff --git a/src/app/(main)/teams/TeamsJoinButton.tsx b/src/app/(main)/teams/TeamsJoinButton.tsx index 74295497..017211e2 100644 --- a/src/app/(main)/teams/TeamsJoinButton.tsx +++ b/src/app/(main)/teams/TeamsJoinButton.tsx @@ -1,6 +1,6 @@ -import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen'; -import { UserPlus } from '@/components/icons'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; import { useMessages, useModified } from '@/components/hooks'; +import { UserPlus } from '@/components/icons'; import { TeamJoinForm } from './TeamJoinForm'; export function TeamsJoinButton() { diff --git a/src/app/(main)/teams/TeamsPage.tsx b/src/app/(main)/teams/TeamsPage.tsx index 3b0f57ea..5b11bcf8 100644 --- a/src/app/(main)/teams/TeamsPage.tsx +++ b/src/app/(main)/teams/TeamsPage.tsx @@ -1,9 +1,9 @@ 'use client'; +import { Column } from '@umami/react-zen'; import { TeamsDataTable } from '@/app/(main)/teams/TeamsDataTable'; import { TeamsHeader } from '@/app/(main)/teams/TeamsHeader'; -import { Column } from '@umami/react-zen'; -import { Panel } from '@/components/common/Panel'; import { PageBody } from '@/components/common/PageBody'; +import { Panel } from '@/components/common/Panel'; export function TeamsPage() { return ( diff --git a/src/app/(main)/teams/TeamsTable.tsx b/src/app/(main)/teams/TeamsTable.tsx index b5f11233..754f0b2b 100644 --- a/src/app/(main)/teams/TeamsTable.tsx +++ b/src/app/(main)/teams/TeamsTable.tsx @@ -1,7 +1,7 @@ -import { DataColumn, DataTable, DataTableProps } from '@umami/react-zen'; +import { DataColumn, DataTable, type DataTableProps } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { useMessages } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; -import { ReactNode } from 'react'; export interface TeamsTableProps extends DataTableProps { renderLink?: (row: any) => ReactNode; diff --git a/src/app/(main)/teams/[teamId]/TeamEditForm.tsx b/src/app/(main)/teams/[teamId]/TeamEditForm.tsx index eb05d362..74e038f6 100644 --- a/src/app/(main)/teams/[teamId]/TeamEditForm.tsx +++ b/src/app/(main)/teams/[teamId]/TeamEditForm.tsx @@ -1,16 +1,16 @@ import { - Form, - FormField, - FormButtons, - FormSubmitButton, - TextField, Button, + Form, + FormButtons, + FormField, + FormSubmitButton, IconLabel, Row, + TextField, } from '@umami/react-zen'; -import { getRandomChars } from '@/lib/generate'; import { useMessages, useTeam, useUpdateQuery } from '@/components/hooks'; import { RefreshCw } from '@/components/icons'; +import { getRandomChars } from '@/lib/generate'; const generateId = () => `team_${getRandomChars(16)}`; diff --git a/src/app/(main)/teams/[teamId]/TeamManage.tsx b/src/app/(main)/teams/[teamId]/TeamManage.tsx index 6c0fe46e..88cbad9e 100644 --- a/src/app/(main)/teams/[teamId]/TeamManage.tsx +++ b/src/app/(main)/teams/[teamId]/TeamManage.tsx @@ -1,7 +1,7 @@ -import { useMessages, useModified } from '@/components/hooks'; +import { Button, Dialog, DialogTrigger, Modal } from '@umami/react-zen'; import { useRouter } from 'next/navigation'; -import { Button, Modal, DialogTrigger, Dialog } from '@umami/react-zen'; import { ActionForm } from '@/components/common/ActionForm'; +import { useMessages, useModified } from '@/components/hooks'; import { TeamDeleteForm } from './TeamDeleteForm'; export function TeamManage({ teamId }: { teamId: string }) { diff --git a/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx b/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx index eb24d2aa..f75b6d18 100644 --- a/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx @@ -1,8 +1,8 @@ -import { useMessages, useModified } from '@/components/hooks'; import { useToast } from '@umami/react-zen'; -import { TeamMemberEditForm } from './TeamMemberEditForm'; -import { DialogButton } from '@/components/input/DialogButton'; +import { useMessages, useModified } from '@/components/hooks'; import { Edit } from '@/components/icons'; +import { DialogButton } from '@/components/input/DialogButton'; +import { TeamMemberEditForm } from './TeamMemberEditForm'; export function TeamMemberEditButton({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx b/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx index 76f0800f..4826746f 100644 --- a/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx @@ -1,14 +1,14 @@ -import { useMessages, useUpdateQuery } from '@/components/hooks'; -import { ROLES } from '@/lib/constants'; import { Button, - Select, Form, FormButtons, FormField, - ListItem, FormSubmitButton, + ListItem, + Select, } from '@umami/react-zen'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; export function TeamMemberEditForm({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMemberRemoveButton.tsx b/src/app/(main)/teams/[teamId]/TeamMemberRemoveButton.tsx index 4ea83540..4d3e8e91 100644 --- a/src/app/(main)/teams/[teamId]/TeamMemberRemoveButton.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMemberRemoveButton.tsx @@ -1,8 +1,8 @@ import { ConfirmationForm } from '@/components/common/ConfirmationForm'; import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; -import { messages } from '@/components/messages'; import { Trash } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { messages } from '@/components/messages'; export function TeamMemberRemoveButton({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMembersDataTable.tsx b/src/app/(main)/teams/[teamId]/TeamMembersDataTable.tsx index d5f99310..52c0fe38 100644 --- a/src/app/(main)/teams/[teamId]/TeamMembersDataTable.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMembersDataTable.tsx @@ -1,6 +1,6 @@ import { DataGrid } from '@/components/common/DataGrid'; -import { TeamMembersTable } from './TeamMembersTable'; import { useTeamMembersQuery } from '@/components/hooks'; +import { TeamMembersTable } from './TeamMembersTable'; export function TeamMembersDataTable({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx index 8d06360d..8414908c 100644 --- a/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx @@ -1,8 +1,8 @@ import { DataColumn, DataTable, Row } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; -import { TeamMemberRemoveButton } from './TeamMemberRemoveButton'; import { TeamMemberEditButton } from './TeamMemberEditButton'; +import { TeamMemberRemoveButton } from './TeamMemberRemoveButton'; export function TeamMembersTable({ data = [], diff --git a/src/app/(main)/teams/[teamId]/TeamSettings.tsx b/src/app/(main)/teams/[teamId]/TeamSettings.tsx index 7ddd3b2f..3ddbe000 100644 --- a/src/app/(main)/teams/[teamId]/TeamSettings.tsx +++ b/src/app/(main)/teams/[teamId]/TeamSettings.tsx @@ -1,13 +1,13 @@ import { Column } from '@umami/react-zen'; -import { useLoginQuery, useNavigation, useTeam } from '@/components/hooks'; -import { ROLES } from '@/lib/constants'; -import { Users } from '@/components/icons'; import { TeamLeaveButton } from '@/app/(main)/teams/TeamLeaveButton'; -import { TeamManage } from './TeamManage'; -import { TeamEditForm } from './TeamEditForm'; -import { TeamMembersDataTable } from './TeamMembersDataTable'; import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; +import { useLoginQuery, useNavigation, useTeam } from '@/components/hooks'; +import { Users } from '@/components/icons'; +import { ROLES } from '@/lib/constants'; +import { TeamEditForm } from './TeamEditForm'; +import { TeamManage } from './TeamManage'; +import { TeamMembersDataTable } from './TeamMembersDataTable'; export function TeamSettings({ teamId }: { teamId: string }) { const team: any = useTeam(); diff --git a/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx b/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx index c3a68c57..f2b4ecea 100644 --- a/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx +++ b/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx @@ -1,5 +1,5 @@ -import { useDeleteQuery, useMessages } from '@/components/hooks'; import { Icon, LoadingButton, Text } from '@umami/react-zen'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; import { X } from '@/components/icons'; export function TeamWebsiteRemoveButton({ teamId, websiteId, onSave }) { diff --git a/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx b/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx index b9542eef..10f56543 100644 --- a/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx +++ b/src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx @@ -1,9 +1,9 @@ import { DataColumn, DataTable, Row } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; import Link from 'next/link'; -import { ROLES } from '@/lib/constants'; import { TeamMemberEditButton } from '@/app/(main)/teams/[teamId]/TeamMemberEditButton'; import { TeamMemberRemoveButton } from '@/app/(main)/teams/[teamId]/TeamMemberRemoveButton'; +import { useMessages } from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; export function TeamWebsitesTable({ teamId, diff --git a/src/app/(main)/teams/page.tsx b/src/app/(main)/teams/page.tsx index ce353895..7344f150 100644 --- a/src/app/(main)/teams/page.tsx +++ b/src/app/(main)/teams/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { TeamsPage } from './TeamsPage'; export default function () { diff --git a/src/app/(main)/websites/WebsiteAddButton.tsx b/src/app/(main)/websites/WebsiteAddButton.tsx index db0349cf..76710abb 100644 --- a/src/app/(main)/websites/WebsiteAddButton.tsx +++ b/src/app/(main)/websites/WebsiteAddButton.tsx @@ -1,8 +1,8 @@ -import { useMessages, useModified } from '@/components/hooks'; import { useToast } from '@umami/react-zen'; +import { useMessages, useModified } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { WebsiteAddForm } from './WebsiteAddForm'; import { DialogButton } from '@/components/input/DialogButton'; +import { WebsiteAddForm } from './WebsiteAddForm'; export function WebsiteAddButton({ teamId, onSave }: { teamId: string; onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/websites/WebsiteAddForm.tsx b/src/app/(main)/websites/WebsiteAddForm.tsx index b8ff7b45..df17ad5a 100644 --- a/src/app/(main)/websites/WebsiteAddForm.tsx +++ b/src/app/(main)/websites/WebsiteAddForm.tsx @@ -1,7 +1,6 @@ -import { Form, FormField, FormSubmitButton, Row, TextField, Button } from '@umami/react-zen'; -import { useUpdateQuery } from '@/components/hooks'; +import { Button, Form, FormField, FormSubmitButton, Row, TextField } from '@umami/react-zen'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; import { DOMAIN_REGEX } from '@/lib/constants'; -import { useMessages } from '@/components/hooks'; export function WebsiteAddForm({ teamId, diff --git a/src/app/(main)/websites/WebsiteProvider.tsx b/src/app/(main)/websites/WebsiteProvider.tsx index 4129cdd3..75e8a358 100644 --- a/src/app/(main)/websites/WebsiteProvider.tsx +++ b/src/app/(main)/websites/WebsiteProvider.tsx @@ -1,8 +1,8 @@ 'use client'; -import { createContext, ReactNode } from 'react'; import { Loading } from '@umami/react-zen'; -import { Website } from '@/generated/prisma/client'; +import { createContext, type ReactNode } from 'react'; import { useWebsiteQuery } from '@/components/hooks/queries/useWebsiteQuery'; +import type { Website } from '@/generated/prisma/client'; export const WebsiteContext = createContext(null); diff --git a/src/app/(main)/websites/WebsitesDataTable.tsx b/src/app/(main)/websites/WebsitesDataTable.tsx index 93b1a7c7..2203262b 100644 --- a/src/app/(main)/websites/WebsitesDataTable.tsx +++ b/src/app/(main)/websites/WebsitesDataTable.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; -import { WebsitesTable } from './WebsitesTable'; import { DataGrid } from '@/components/common/DataGrid'; import { useLoginQuery, useNavigation, useUserWebsitesQuery } from '@/components/hooks'; +import { WebsitesTable } from './WebsitesTable'; export function WebsitesDataTable({ userId, diff --git a/src/app/(main)/websites/WebsitesHeader.tsx b/src/app/(main)/websites/WebsitesHeader.tsx index 86231a98..889b6025 100644 --- a/src/app/(main)/websites/WebsitesHeader.tsx +++ b/src/app/(main)/websites/WebsitesHeader.tsx @@ -1,6 +1,6 @@ +import { PageHeader } from '@/components/common/PageHeader'; import { useMessages, useNavigation } from '@/components/hooks'; import { WebsiteAddButton } from './WebsiteAddButton'; -import { PageHeader } from '@/components/common/PageHeader'; export interface WebsitesHeaderProps { allowCreate?: boolean; diff --git a/src/app/(main)/websites/WebsitesPage.tsx b/src/app/(main)/websites/WebsitesPage.tsx index 313dccc7..31de7047 100644 --- a/src/app/(main)/websites/WebsitesPage.tsx +++ b/src/app/(main)/websites/WebsitesPage.tsx @@ -1,11 +1,11 @@ 'use client'; -import { WebsitesDataTable } from './WebsitesDataTable'; -import { WebsiteAddButton } from './WebsiteAddButton'; -import { useMessages, useNavigation } from '@/components/hooks'; import { Column } from '@umami/react-zen'; +import { PageBody } from '@/components/common/PageBody'; import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; -import { PageBody } from '@/components/common/PageBody'; +import { useMessages, useNavigation } from '@/components/hooks'; +import { WebsiteAddButton } from './WebsiteAddButton'; +import { WebsitesDataTable } from './WebsitesDataTable'; export function WebsitesPage() { const { teamId } = useNavigation(); diff --git a/src/app/(main)/websites/WebsitesTable.tsx b/src/app/(main)/websites/WebsitesTable.tsx index c2f7e0d4..70648ed7 100644 --- a/src/app/(main)/websites/WebsitesTable.tsx +++ b/src/app/(main)/websites/WebsitesTable.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Icon, DataTable, DataColumn, DataTableProps } from '@umami/react-zen'; +import { DataColumn, DataTable, type DataTableProps, Icon } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { LinkButton } from '@/components/common/LinkButton'; import { useMessages, useNavigation } from '@/components/hooks'; import { SquarePen } from '@/components/icons'; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/attribution/Attribution.tsx b/src/app/(main)/websites/[websiteId]/(reports)/attribution/Attribution.tsx index f014bbbe..264923a6 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/attribution/Attribution.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/attribution/Attribution.tsx @@ -1,13 +1,13 @@ -import { Grid, Column } from '@umami/react-zen'; -import { useMessages, useResultQuery } from '@/components/hooks'; -import { Panel } from '@/components/common/Panel'; +import { Column, Grid } from '@umami/react-zen'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Panel } from '@/components/common/Panel'; +import { SectionHeader } from '@/components/common/SectionHeader'; +import { useMessages, useResultQuery } from '@/components/hooks'; import { ListTable } from '@/components/metrics/ListTable'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; -import { SectionHeader } from '@/components/common/SectionHeader'; -import { formatLongNumber } from '@/lib/format'; import { percentFilter } from '@/lib/filters'; +import { formatLongNumber } from '@/lib/format'; export interface AttributionProps { websiteId: string; @@ -97,34 +97,28 @@ export function Attribution({ - + - + - + - + - + - + - + diff --git a/src/app/(main)/websites/[websiteId]/(reports)/attribution/AttributionPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/attribution/AttributionPage.tsx index 9fe9012b..48611c46 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/attribution/AttributionPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/attribution/AttributionPage.tsx @@ -1,9 +1,9 @@ 'use client'; +import { Column, Grid, ListItem, SearchField, Select } from '@umami/react-zen'; import { useState } from 'react'; -import { Column, Grid, Select, ListItem, SearchField } from '@umami/react-zen'; -import { Attribution } from './Attribution'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { useDateRange, useMessages } from '@/components/hooks'; +import { Attribution } from './Attribution'; export function AttributionPage({ websiteId }: { websiteId: string }) { const [model, setModel] = useState('first-click'); diff --git a/src/app/(main)/websites/[websiteId]/(reports)/attribution/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/attribution/page.tsx index ec75c58c..1368d4bc 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/attribution/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/attribution/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { AttributionPage } from './AttributionPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/Breakdown.tsx b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/Breakdown.tsx index cd5b5d71..4532d972 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/Breakdown.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/Breakdown.tsx @@ -1,6 +1,6 @@ -import { Text, DataTable, DataColumn, Column } from '@umami/react-zen'; -import { useMessages, useResultQuery, useFormat, useFields } from '@/components/hooks'; +import { Column, DataColumn, DataTable, Text } from '@umami/react-zen'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useFields, useFormat, useMessages, useResultQuery } from '@/components/hooks'; import { formatShortTime } from '@/lib/format'; export interface BreakdownProps { @@ -54,13 +54,13 @@ export function Breakdown({ websiteId, selectedFields = [], startDate, endDate } align="end" width="120px" > - {row => row?.['visitors']?.toLocaleString()} + {row => row?.visitors?.toLocaleString()} - {row => row?.['visits']?.toLocaleString()} + {row => row?.visits?.toLocaleString()} - {row => row?.['views']?.toLocaleString()} + {row => row?.views?.toLocaleString()} {row => { - const n = (Math.min(row?.['visits'], row?.['bounces']) / row?.['visits']) * 100; - return Math.round(+n) + '%'; + const n = (Math.min(row?.visits, row?.bounces) / row?.visits) * 100; + return `${Math.round(+n)}%`; }} {row => { - const n = row?.['totaltime'] / row?.['visits']; + const n = row?.totaltime / row?.visits; return `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`; }} diff --git a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/BreakdownPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/BreakdownPage.tsx index e1bb6711..fdead9fb 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/BreakdownPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/BreakdownPage.tsx @@ -1,12 +1,12 @@ 'use client'; +import { Column, Row } from '@umami/react-zen'; +import { useState } from 'react'; import { FieldSelectForm } from '@/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { Panel } from '@/components/common/Panel'; import { useDateRange, useMessages } from '@/components/hooks'; import { ListCheck } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; -import { Column, Row } from '@umami/react-zen'; -import { useState } from 'react'; import { Breakdown } from './Breakdown'; export function BreakdownPage({ websiteId }: { websiteId: string }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm.tsx b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm.tsx index bbf69a5b..28e33682 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm.tsx @@ -1,6 +1,6 @@ -import { Column, List, ListItem, Grid, Button } from '@umami/react-zen'; -import { useFields, useMessages } from '@/components/hooks'; +import { Button, Column, Grid, List, ListItem } from '@umami/react-zen'; import { useState } from 'react'; +import { useFields, useMessages } from '@/components/hooks'; export function FieldSelectForm({ selectedFields = [], diff --git a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/page.tsx index 89295b3d..841d8635 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/breakdown/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/breakdown/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { BreakdownPage } from './BreakdownPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/Funnel.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/Funnel.tsx index 5e266dd6..e336a3db 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/Funnel.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/Funnel.tsx @@ -1,11 +1,11 @@ -import { Grid, Column, Row, Text, Icon, ProgressBar, Dialog, Box } from '@umami/react-zen'; -import { useMessages, useResultQuery } from '@/components/hooks'; +import { Box, Column, Dialog, Grid, Icon, ProgressBar, Row, Text } from '@umami/react-zen'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useMessages, useResultQuery } from '@/components/hooks'; import { File, User } from '@/components/icons'; -import { Lightning } from '@/components/svg'; -import { formatLongNumber } from '@/lib/format'; import { ReportEditButton } from '@/components/input/ReportEditButton'; import { ChangeLabel } from '@/components/metrics/ChangeLabel'; +import { Lightning } from '@/components/svg'; +import { formatLongNumber } from '@/lib/format'; import { FunnelEditForm } from './FunnelEditForm'; type FunnelResult = { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelAddButton.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelAddButton.tsx index 7e776737..29b54803 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelAddButton.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelAddButton.tsx @@ -1,7 +1,7 @@ -import { Button, DialogTrigger, Dialog, Icon, Text, Modal } from '@umami/react-zen'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; -import { FunnelEditForm } from './FunnelEditForm'; import { Plus } from '@/components/icons'; +import { FunnelEditForm } from './FunnelEditForm'; export function FunnelAddButton({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx index 13712f2a..5d950ea6 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx @@ -1,20 +1,20 @@ import { + Button, + Column, Form, + FormButtons, FormField, FormFieldArray, - TextField, - Grid, - FormButtons, FormSubmitButton, - Button, - Text, + Grid, Icon, - Row, Loading, - Column, + Row, + Text, + TextField, } from '@umami/react-zen'; import { useMessages, useReportQuery, useUpdateQuery } from '@/components/hooks'; -import { X, Plus } from '@/components/icons'; +import { Plus, X } from '@/components/icons'; import { ActionSelect } from '@/components/input/ActionSelect'; import { LookupField } from '@/components/input/LookupField'; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelsPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelsPage.tsx index c155662f..57bce52f 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelsPage.tsx @@ -1,12 +1,12 @@ 'use client'; -import { Grid, Column } from '@umami/react-zen'; -import { SectionHeader } from '@/components/common/SectionHeader'; -import { Funnel } from './Funnel'; -import { FunnelAddButton } from './FunnelAddButton'; +import { Column, Grid } from '@umami/react-zen'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { useDateRange, useReportsQuery } from '@/components/hooks'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { Panel } from '@/components/common/Panel'; +import { SectionHeader } from '@/components/common/SectionHeader'; +import { useDateRange, useReportsQuery } from '@/components/hooks'; +import { Funnel } from './Funnel'; +import { FunnelAddButton } from './FunnelAddButton'; export function FunnelsPage({ websiteId }: { websiteId: string }) { const { data, isLoading, error } = useReportsQuery({ websiteId, type: 'funnel' }); @@ -23,7 +23,7 @@ export function FunnelsPage({ websiteId }: { websiteId: string }) { {data && ( - {data['data']?.map((report: any) => ( + {data.data?.map((report: any) => ( diff --git a/src/app/(main)/websites/[websiteId]/(reports)/funnels/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/funnels/page.tsx index 0209b806..2fdcf3b7 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/funnels/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/funnels/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { FunnelsPage } from './FunnelsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/goals/Goal.tsx b/src/app/(main)/websites/[websiteId]/(reports)/goals/Goal.tsx index dead3cab..b6c4a11d 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/goals/Goal.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/goals/Goal.tsx @@ -1,9 +1,9 @@ -import { Grid, Row, Column, Text, Icon, ProgressBar, Dialog } from '@umami/react-zen'; -import { ReportEditButton } from '@/components/input/ReportEditButton'; +import { Column, Dialog, Grid, Icon, ProgressBar, Row, Text } from '@umami/react-zen'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages, useResultQuery } from '@/components/hooks'; import { File, User } from '@/components/icons'; +import { ReportEditButton } from '@/components/input/ReportEditButton'; import { Lightning } from '@/components/svg'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; import { formatLongNumber } from '@/lib/format'; import { GoalEditForm } from './GoalEditForm'; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalAddButton.tsx b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalAddButton.tsx index c75d72b0..c85b79c5 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalAddButton.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalAddButton.tsx @@ -1,7 +1,7 @@ -import { Button, DialogTrigger, Dialog, Icon, Text, Modal } from '@umami/react-zen'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; -import { GoalEditForm } from './GoalEditForm'; import { Plus } from '@/components/icons'; +import { GoalEditForm } from './GoalEditForm'; export function GoalAddButton({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalEditForm.tsx b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalEditForm.tsx index 394cdec9..7f68047c 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalEditForm.tsx @@ -1,18 +1,18 @@ import { - Form, - FormField, - TextField, - Grid, - FormButtons, - FormSubmitButton, Button, - Loading, Column, + Form, + FormButtons, + FormField, + FormSubmitButton, + Grid, Label, + Loading, + TextField, } from '@umami/react-zen'; import { useMessages, useReportQuery, useUpdateQuery } from '@/components/hooks'; -import { LookupField } from '@/components/input/LookupField'; import { ActionSelect } from '@/components/input/ActionSelect'; +import { LookupField } from '@/components/input/LookupField'; export function GoalEditForm({ id, diff --git a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalsPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalsPage.tsx index 29961110..ff7b49fb 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/goals/GoalsPage.tsx @@ -1,12 +1,12 @@ 'use client'; -import { Grid, Column } from '@umami/react-zen'; -import { SectionHeader } from '@/components/common/SectionHeader'; -import { Goal } from './Goal'; -import { GoalAddButton } from './GoalAddButton'; +import { Column, Grid } from '@umami/react-zen'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { useDateRange, useReportsQuery } from '@/components/hooks'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { Panel } from '@/components/common/Panel'; +import { SectionHeader } from '@/components/common/SectionHeader'; +import { useDateRange, useReportsQuery } from '@/components/hooks'; +import { Goal } from './Goal'; +import { GoalAddButton } from './GoalAddButton'; export function GoalsPage({ websiteId }: { websiteId: string }) { const { data, isLoading, error } = useReportsQuery({ websiteId, type: 'goal' }); @@ -23,7 +23,7 @@ export function GoalsPage({ websiteId }: { websiteId: string }) { {data && ( - {data['data'].map((report: any) => ( + {data.data.map((report: any) => ( diff --git a/src/app/(main)/websites/[websiteId]/(reports)/goals/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/goals/page.tsx index e59b2c7c..b1ab691a 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/goals/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/goals/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { GoalsPage } from './GoalsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.tsx b/src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.tsx index d897a76a..3327a425 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.tsx @@ -1,13 +1,13 @@ -import { useMemo, useState } from 'react'; -import { TooltipTrigger, Tooltip, Focusable, Icon, Text, Row, Column } from '@umami/react-zen'; -import { firstBy } from 'thenby'; +import { Column, Focusable, Icon, Row, Text, Tooltip, TooltipTrigger } from '@umami/react-zen'; import classNames from 'classnames'; +import { useMemo, useState } from 'react'; +import { firstBy } from 'thenby'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useEscapeKey, useMessages, useResultQuery } from '@/components/hooks'; import { File } from '@/components/icons'; import { Lightning } from '@/components/svg'; import { objectToArray } from '@/lib/data'; import { formatLongNumber } from '@/lib/format'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; import styles from './Journey.module.css'; const NODE_HEIGHT = 60; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/journeys/JourneysPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/journeys/JourneysPage.tsx index 26927962..14b8341d 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/journeys/JourneysPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/journeys/JourneysPage.tsx @@ -1,10 +1,10 @@ 'use client'; +import { Column, Grid, ListItem, SearchField, Select } from '@umami/react-zen'; import { useState } from 'react'; -import { ListItem, Select, Column, Grid, SearchField } from '@umami/react-zen'; -import { useDateRange, useMessages } from '@/components/hooks'; -import { Panel } from '@/components/common/Panel'; -import { Journey } from './Journey'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; +import { Panel } from '@/components/common/Panel'; +import { useDateRange, useMessages } from '@/components/hooks'; +import { Journey } from './Journey'; const JOURNEY_STEPS = [2, 3, 4, 5, 6, 7]; const DEFAULT_STEP = 3; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/journeys/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/journeys/page.tsx index c055dacd..f6062a61 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/journeys/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/journeys/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { JourneysPage } from './JourneysPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/retention/Retention.tsx b/src/app/(main)/websites/[websiteId]/(reports)/retention/Retention.tsx index a8cff457..fdd8a146 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/retention/Retention.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/retention/Retention.tsx @@ -1,11 +1,11 @@ -import { ReactNode } from 'react'; -import { Grid, Row, Column, Text, Icon } from '@umami/react-zen'; +import { Column, Grid, Icon, Row, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Panel } from '@/components/common/Panel'; +import { useLocale, useMessages, useResultQuery } from '@/components/hooks'; import { Users } from '@/components/icons'; -import { useMessages, useLocale, useResultQuery } from '@/components/hooks'; import { formatDate } from '@/lib/date'; import { formatLongNumber } from '@/lib/format'; -import { Panel } from '@/components/common/Panel'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; const DAYS = [1, 2, 3, 4, 5, 6, 7, 14, 21, 28]; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/retention/RetentionPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/retention/RetentionPage.tsx index 348cfb33..0ec6e95e 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/retention/RetentionPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/retention/RetentionPage.tsx @@ -1,9 +1,9 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { Retention } from './Retention'; +import { endOfMonth, startOfMonth } from 'date-fns'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { useDateRange } from '@/components/hooks'; -import { endOfMonth, startOfMonth } from 'date-fns'; +import { Retention } from './Retention'; export function RetentionPage({ websiteId }: { websiteId: string }) { const { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/retention/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/retention/page.tsx index 41713860..2fbbc0ac 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/retention/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/retention/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { RetentionPage } from './RetentionPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx b/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx index a5d3b101..0e782a16 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx @@ -1,3 +1,7 @@ +import { Column, Grid, Row, Text } from '@umami/react-zen'; +import classNames from 'classnames'; +import { colord } from 'colord'; +import { useCallback, useMemo, useState } from 'react'; import { BarChart } from '@/components/charts/BarChart'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { Panel } from '@/components/common/Panel'; @@ -11,10 +15,6 @@ import { renderDateLabels } from '@/lib/charts'; import { CHART_COLORS } from '@/lib/constants'; import { generateTimeSeries } from '@/lib/date'; import { formatLongCurrency, formatLongNumber } from '@/lib/format'; -import { Column, Grid, Row, Text } from '@umami/react-zen'; -import classNames from 'classnames'; -import { colord } from 'colord'; -import { useCallback, useMemo, useState } from 'react'; export interface RevenueProps { websiteId: string; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx index ed512062..3e429c18 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { Revenue } from './Revenue'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { useDateRange } from '@/components/hooks'; +import { Revenue } from './Revenue'; export function RevenuePage({ websiteId }: { websiteId: string }) { const { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/revenue/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/revenue/page.tsx index 4bc56331..fba10f15 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/revenue/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/revenue/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { RevenuePage } from './RevenuePage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/utm/UTM.tsx b/src/app/(main)/websites/[websiteId]/(reports)/utm/UTM.tsx index 2bf88754..1399174a 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/utm/UTM.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/utm/UTM.tsx @@ -1,10 +1,10 @@ +import { Column, Grid, Heading, Text } from '@umami/react-zen'; import { PieChart } from '@/components/charts/PieChart'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { Panel } from '@/components/common/Panel'; import { useMessages, useResultQuery } from '@/components/hooks'; import { ListTable } from '@/components/metrics/ListTable'; import { CHART_COLORS, UTM_PARAMS } from '@/lib/constants'; -import { Column, Grid, Heading, Text } from '@umami/react-zen'; export interface UTMProps { websiteId: string; diff --git a/src/app/(main)/websites/[websiteId]/(reports)/utm/UTMPage.tsx b/src/app/(main)/websites/[websiteId]/(reports)/utm/UTMPage.tsx index 30b9bff2..0d2a7329 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/utm/UTMPage.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/utm/UTMPage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; +import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { useDateRange } from '@/components/hooks'; import { UTM } from './UTM'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; export function UTMPage({ websiteId }: { websiteId: string }) { const { diff --git a/src/app/(main)/websites/[websiteId]/(reports)/utm/page.tsx b/src/app/(main)/websites/[websiteId]/(reports)/utm/page.tsx index d51592cc..8b8fd6af 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/utm/page.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/utm/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { UTMPage } from './UTMPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/ExpandedViewModal.tsx b/src/app/(main)/websites/[websiteId]/ExpandedViewModal.tsx index cd623929..36638121 100644 --- a/src/app/(main)/websites/[websiteId]/ExpandedViewModal.tsx +++ b/src/app/(main)/websites/[websiteId]/ExpandedViewModal.tsx @@ -1,6 +1,6 @@ import { Dialog, Modal } from '@umami/react-zen'; import { WebsiteExpandedView } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedView'; -import { useNavigation, useMobile } from '@/components/hooks'; +import { useMobile, useNavigation } from '@/components/hooks'; export function ExpandedViewModal({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx index b949e60f..b2ea2a83 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx @@ -1,8 +1,8 @@ +import { useMemo } from 'react'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, useTimezone } from '@/components/hooks'; import { useWebsitePageviewsQuery } from '@/components/hooks/queries/useWebsitePageviewsQuery'; import { PageviewsChart } from '@/components/metrics/PageviewsChart'; -import { useMemo } from 'react'; export function WebsiteChart({ websiteId, @@ -28,7 +28,7 @@ export function WebsiteChart({ }; if (compare) { - result['compare'] = { + result.compare = { pageviews: result.pageviews.map(({ x }, i) => ({ x, y: compare.pageviews[i]?.y, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx b/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx index 9757a974..6223dbc0 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx @@ -1,9 +1,9 @@ -import { Column, Row, Grid } from '@umami/react-zen'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { Column, Grid, Row } from '@umami/react-zen'; +import { ExportButton } from '@/components/input/ExportButton'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { ExportButton } from '@/components/input/ExportButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; export function WebsiteControls({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx index 63e8f413..29c3954f 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx @@ -1,24 +1,24 @@ -import { useMessages, useNavigation } from '@/components/hooks'; import { SideMenu } from '@/components/common/SideMenu'; +import { useMessages, useNavigation } from '@/components/hooks'; import { - LogOut, - LogIn, - Search, - Type, - SquareSlash, - Share2, - Megaphone, + AppWindow, + Cpu, Earth, Globe, Landmark, - MapPin, - AppWindow, - Laptop, Languages, + Laptop, + LogIn, + LogOut, + MapPin, + Megaphone, Monitor, - Cpu, Network, + Search, + Share2, + SquareSlash, Tag, + Type, } from '@/components/icons'; import { Lightning } from '@/components/svg'; diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx index 448027b6..2c670df1 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx @@ -1,8 +1,8 @@ -import { Grid, Column, Row } from '@umami/react-zen'; -import { useMessages, useNavigation } from '@/components/hooks'; -import { MetricsExpandedTable } from '@/components/metrics/MetricsExpandedTable'; +import { Column, Grid, Row } from '@umami/react-zen'; import { WebsiteExpandedMenu } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedMenu'; +import { useMessages, useNavigation } from '@/components/hooks'; import { MobileMenuButton } from '@/components/input/MobileMenuButton'; +import { MetricsExpandedTable } from '@/components/metrics/MetricsExpandedTable'; export function WebsiteExpandedView({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx index 73eb96b2..7db22912 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx @@ -1,12 +1,12 @@ -import { Icon, Text, Row } from '@umami/react-zen'; -import { PageHeader } from '@/components/common/PageHeader'; -import { Share, Edit } from '@/components/icons'; -import { Favicon } from '@/components/common/Favicon'; -import { ActiveUsers } from '@/components/metrics/ActiveUsers'; +import { Icon, Row, Text } from '@umami/react-zen'; import { WebsiteShareForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteShareForm'; -import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; +import { Favicon } from '@/components/common/Favicon'; import { LinkButton } from '@/components/common/LinkButton'; +import { PageHeader } from '@/components/common/PageHeader'; +import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; +import { Edit, Share } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { ActiveUsers } from '@/components/metrics/ActiveUsers'; export function WebsiteHeader({ showActions }: { showActions?: boolean }) { const website = useWebsite(); diff --git a/src/app/(main)/websites/[websiteId]/WebsiteLayout.tsx b/src/app/(main)/websites/[websiteId]/WebsiteLayout.tsx index c92bbd9c..7260a7ea 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteLayout.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteLayout.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ReactNode } from 'react'; import { Column, Grid } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; import { PageBody } from '@/components/common/PageBody'; import { WebsiteHeader } from './WebsiteHeader'; diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx index 03c72008..30189534 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx @@ -9,8 +9,8 @@ import { Text, } from '@umami/react-zen'; import { Fragment } from 'react'; -import { More, Share, Edit } from '@/components/icons'; import { useMessages, useNavigation } from '@/components/hooks'; +import { Edit, More, Share } from '@/components/icons'; export function WebsiteMenu({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx index 7522c8ec..6c91ba6d 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx @@ -1,9 +1,9 @@ +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, useMessages } from '@/components/hooks'; +import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; -import { formatShortTime, formatLongNumber } from '@/lib/format'; -import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { formatLongNumber, formatShortTime } from '@/lib/format'; export function WebsiteMetricsBar({ websiteId, @@ -45,7 +45,7 @@ export function WebsiteMetricsBar({ change: (Math.min(visits, bounces) / visits) * 100 - (Math.min(comparison.visits, comparison.bounces) / comparison.visits) * 100, - formatValue: n => Math.round(+n) + '%', + formatValue: n => `${Math.round(+n)}%`, reverseColors: true, }, { diff --git a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx index 0fb6d565..ad05b706 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx @@ -1,18 +1,18 @@ -import { Text, Column } from '@umami/react-zen'; +import { Column, Text } from '@umami/react-zen'; +import { SideMenu } from '@/components/common/SideMenu'; +import { useMessages, useNavigation } from '@/components/hooks'; import { - Eye, - User, + AlignEndHorizontal, + ChartPie, Clock, + Eye, Sheet, Tag, - ChartPie, + User, UserPlus, - AlignEndHorizontal, } from '@/components/icons'; -import { Lightning, Path, Money, Target, Funnel, Magnet, Network } from '@/components/svg'; -import { useMessages, useNavigation } from '@/components/hooks'; -import { SideMenu } from '@/components/common/SideMenu'; import { WebsiteSelect } from '@/components/input/WebsiteSelect'; +import { Funnel, Lightning, Magnet, Money, Network, Path, Target } from '@/components/svg'; export function WebsiteNav({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsitePage.tsx b/src/app/(main)/websites/[websiteId]/WebsitePage.tsx index bf8afe98..f587e112 100644 --- a/src/app/(main)/websites/[websiteId]/WebsitePage.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsitePage.tsx @@ -1,11 +1,11 @@ 'use client'; import { Column } from '@umami/react-zen'; +import { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; import { Panel } from '@/components/common/Panel'; import { WebsiteChart } from './WebsiteChart'; +import { WebsiteControls } from './WebsiteControls'; import { WebsiteMetricsBar } from './WebsiteMetricsBar'; import { WebsitePanels } from './WebsitePanels'; -import { WebsiteControls } from './WebsiteControls'; -import { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; export function WebsitePage({ websiteId }: { websiteId: string }) { return ( diff --git a/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx b/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx index db52573d..a91d562e 100644 --- a/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx @@ -1,3 +1,4 @@ +import { Grid, Heading, Row, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; import { GridRow } from '@/components/common/GridRow'; import { Panel } from '@/components/common/Panel'; import { useMessages, useNavigation } from '@/components/hooks'; @@ -5,7 +6,6 @@ import { EventsChart } from '@/components/metrics/EventsChart'; import { MetricsTable } from '@/components/metrics/MetricsTable'; import { WeeklyTraffic } from '@/components/metrics/WeeklyTraffic'; import { WorldMap } from '@/components/metrics/WorldMap'; -import { Grid, Heading, Row, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; export function WebsitePanels({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx b/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx index 04db76f1..ac978a23 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx @@ -1,6 +1,6 @@ -import { Tabs, TabList, Tab, Icon, Text, Row } from '@umami/react-zen'; +import { Icon, Row, Tab, TabList, Tabs, Text } from '@umami/react-zen'; import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; -import { Clock, Eye, User, ChartPie } from '@/components/icons'; +import { ChartPie, Clock, Eye, User } from '@/components/icons'; import { Lightning } from '@/components/svg'; export function WebsiteTabs() { diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx index 7571bf62..94d62ff2 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx @@ -1,8 +1,8 @@ -import { Trash } from '@/components/icons'; -import { messages } from '@/components/messages'; -import { useDeleteQuery, useMessages } from '@/components/hooks'; import { ConfirmationForm } from '@/components/common/ConfirmationForm'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { Trash } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { messages } from '@/components/messages'; export function CohortDeleteButton({ cohortId, diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditButton.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditButton.tsx index aea02209..07990712 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditButton.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditButton.tsx @@ -1,8 +1,8 @@ -import { Edit } from '@/components/icons'; import { CohortEditForm } from '@/app/(main)/websites/[websiteId]/cohorts/CohortEditForm'; import { useMessages } from '@/components/hooks'; -import { Filter } from '@/lib/types'; +import { Edit } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import type { Filter } from '@/lib/types'; export function CohortEditButton({ cohortId, diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx index 2c1ed103..c7550352 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx @@ -1,20 +1,20 @@ import { Button, + Column, Form, FormButtons, FormField, FormSubmitButton, - TextField, + Grid, Label, Loading, - Column, - Grid, + TextField, } from '@umami/react-zen'; import { useMessages, useUpdateQuery, useWebsiteCohortQuery } from '@/components/hooks'; +import { ActionSelect } from '@/components/input/ActionSelect'; import { DateFilter } from '@/components/input/DateFilter'; import { FieldFilters } from '@/components/input/FieldFilters'; import { LookupField } from '@/components/input/LookupField'; -import { ActionSelect } from '@/components/input/ActionSelect'; export function CohortEditForm({ cohortId, diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx index 5944d415..6734384e 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx @@ -1,7 +1,7 @@ -import { CohortAddButton } from './CohortAddButton'; -import { useWebsiteCohortsQuery } from '@/components/hooks'; -import { CohortsTable } from './CohortsTable'; import { DataGrid } from '@/components/common/DataGrid'; +import { useWebsiteCohortsQuery } from '@/components/hooks'; +import { CohortAddButton } from './CohortAddButton'; +import { CohortsTable } from './CohortsTable'; export function CohortsDataTable({ websiteId }: { websiteId?: string }) { const query = useWebsiteCohortsQuery(websiteId, { type: 'cohort' }); diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortsPage.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortsPage.tsx index 211e2526..14f366e5 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortsPage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { CohortsDataTable } from './CohortsDataTable'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { Panel } from '@/components/common/Panel'; +import { CohortsDataTable } from './CohortsDataTable'; export function CohortsPage({ websiteId }) { return ( diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx index f9a41255..5c7ac03f 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx @@ -1,10 +1,10 @@ -import { DataTable, DataColumn, Row, DataTableProps } from '@umami/react-zen'; -import { useMessages, useNavigation } from '@/components/hooks'; -import { DateDistance } from '@/components/common/DateDistance'; -import { filtersObjectToArray } from '@/lib/params'; -import { CohortEditButton } from '@/app/(main)/websites/[websiteId]/cohorts/CohortEditButton'; -import { CohortDeleteButton } from '@/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton'; +import { DataColumn, DataTable, type DataTableProps, Row } from '@umami/react-zen'; import Link from 'next/link'; +import { CohortDeleteButton } from '@/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton'; +import { CohortEditButton } from '@/app/(main)/websites/[websiteId]/cohorts/CohortEditButton'; +import { DateDistance } from '@/components/common/DateDistance'; +import { useMessages, useNavigation } from '@/components/hooks'; +import { filtersObjectToArray } from '@/lib/params'; export function CohortsTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/cohorts/page.tsx b/src/app/(main)/websites/[websiteId]/cohorts/page.tsx index a9519c2c..9946f602 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/page.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { CohortsPage } from './CohortsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/compare/ComparePage.tsx b/src/app/(main)/websites/[websiteId]/compare/ComparePage.tsx index 4c5b7b93..bca8d244 100644 --- a/src/app/(main)/websites/[websiteId]/compare/ComparePage.tsx +++ b/src/app/(main)/websites/[websiteId]/compare/ComparePage.tsx @@ -1,10 +1,10 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { CompareTables } from './CompareTables'; +import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { WebsiteMetricsBar } from '@/app/(main)/websites/[websiteId]/WebsiteMetricsBar'; import { Panel } from '@/components/common/Panel'; -import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; +import { CompareTables } from './CompareTables'; export function ComparePage({ websiteId }: { websiteId: string }) { return ( diff --git a/src/app/(main)/websites/[websiteId]/compare/CompareTables.tsx b/src/app/(main)/websites/[websiteId]/compare/CompareTables.tsx index 2c67b76a..13c05160 100644 --- a/src/app/(main)/websites/[websiteId]/compare/CompareTables.tsx +++ b/src/app/(main)/websites/[websiteId]/compare/CompareTables.tsx @@ -1,11 +1,11 @@ +import { Column, Grid, Heading, ListItem, Row, Select } from '@umami/react-zen'; +import { useState } from 'react'; import { DateDisplay } from '@/components/common/DateDisplay'; import { Panel } from '@/components/common/Panel'; import { useDateRange, useMessages, useNavigation } from '@/components/hooks'; import { ChangeLabel } from '@/components/metrics/ChangeLabel'; import { MetricsTable } from '@/components/metrics/MetricsTable'; import { formatNumber } from '@/lib/format'; -import { Column, Grid, Heading, ListItem, Row, Select } from '@umami/react-zen'; -import { useState } from 'react'; export function CompareTables({ websiteId }: { websiteId: string }) { const [data, setData] = useState([]); @@ -106,7 +106,7 @@ export function CompareTables({ websiteId }: { websiteId: string }) { const change = Math.abs(((count - prev) / prev) * 100); return ( - !isNaN(change) && ( + !Number.isNaN(change) && ( {formatNumber(change)}% diff --git a/src/app/(main)/websites/[websiteId]/compare/page.tsx b/src/app/(main)/websites/[websiteId]/compare/page.tsx index 2b2cf5b1..1b2899b2 100644 --- a/src/app/(main)/websites/[websiteId]/compare/page.tsx +++ b/src/app/(main)/websites/[websiteId]/compare/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { ComparePage } from './ComparePage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx index 41a8cfc2..c3b1325d 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx @@ -1,14 +1,14 @@ +import { Column, Grid, ListItem, Select } from '@umami/react-zen'; import { useMemo, useState } from 'react'; -import { Select, ListItem, Grid, Column } from '@umami/react-zen'; +import { PieChart } from '@/components/charts/PieChart'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useEventDataPropertiesQuery, useEventDataValuesQuery, useMessages, } from '@/components/hooks'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { PieChart } from '@/components/charts/PieChart'; -import { CHART_COLORS } from '@/lib/constants'; import { ListTable } from '@/components/metrics/ListTable'; +import { CHART_COLORS } from '@/lib/constants'; export function EventProperties({ websiteId }: { websiteId: string }) { const [propertyName, setPropertyName] = useState(''); diff --git a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx index 805f1252..f686b3fd 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx @@ -1,9 +1,8 @@ -import { useState } from 'react'; -import { useMessages, useWebsiteEventsQuery } from '@/components/hooks'; -import { EventsTable } from './EventsTable'; +import { type ReactNode, useState } from 'react'; import { DataGrid } from '@/components/common/DataGrid'; -import { ReactNode } from 'react'; +import { useMessages, useWebsiteEventsQuery } from '@/components/hooks'; import { FilterButtons } from '@/components/input/FilterButtons'; +import { EventsTable } from './EventsTable'; export function EventsDataTable({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx index 2712c985..a7ed399c 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx @@ -1,9 +1,9 @@ +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages } from '@/components/hooks'; import { useWebsiteSessionStatsQuery } from '@/components/hooks/queries/useWebsiteSessionStatsQuery'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; import { formatLongNumber } from '@/lib/format'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; export function EventsMetricsBar({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx index 780891b5..55ec0403 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx @@ -1,15 +1,15 @@ 'use client'; -import { TabList, Tab, Tabs, TabPanel, Column } from '@umami/react-zen'; -import { MetricsTable } from '@/components/metrics/MetricsTable'; -import { useState, Key } from 'react'; -import { EventsDataTable } from './EventsDataTable'; -import { Panel } from '@/components/common/Panel'; -import { EventsChart } from '@/components/metrics/EventsChart'; -import { useMessages } from '@/components/hooks'; -import { EventProperties } from './EventProperties'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { getItem, setItem } from '@/lib/storage'; +import { Column, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; +import { type Key, useState } from 'react'; import { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; +import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; +import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { EventsChart } from '@/components/metrics/EventsChart'; +import { MetricsTable } from '@/components/metrics/MetricsTable'; +import { getItem, setItem } from '@/lib/storage'; +import { EventProperties } from './EventProperties'; +import { EventsDataTable } from './EventsDataTable'; const KEY_NAME = 'umami.events.tab'; diff --git a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx index ea0edde1..7fb2eb41 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx @@ -1,24 +1,24 @@ import { - DataTable, - DataColumn, - Row, - Text, - DataTableProps, - IconLabel, Button, + DataColumn, + DataTable, + type DataTableProps, Dialog, DialogTrigger, Icon, + IconLabel, Popover, + Row, + Text, } from '@umami/react-zen'; -import { useFormat, useMessages, useNavigation } from '@/components/hooks'; -import { Avatar } from '@/components/common/Avatar'; import Link from 'next/link'; -import { Eye, FileText } from '@/components/icons'; -import { Lightning } from '@/components/svg'; +import { Avatar } from '@/components/common/Avatar'; import { DateDistance } from '@/components/common/DateDistance'; import { TypeIcon } from '@/components/common/TypeIcon'; +import { useFormat, useMessages, useNavigation } from '@/components/hooks'; +import { Eye, FileText } from '@/components/icons'; import { EventData } from '@/components/metrics/EventData'; +import { Lightning } from '@/components/svg'; export function EventsTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/events/page.tsx b/src/app/(main)/websites/[websiteId]/events/page.tsx index d68d727d..d77ba3bd 100644 --- a/src/app/(main)/websites/[websiteId]/events/page.tsx +++ b/src/app/(main)/websites/[websiteId]/events/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { EventsPage } from './EventsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/layout.tsx b/src/app/(main)/websites/[websiteId]/layout.tsx index 8a3ab2a4..67595e9d 100644 --- a/src/app/(main)/websites/[websiteId]/layout.tsx +++ b/src/app/(main)/websites/[websiteId]/layout.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { WebsiteLayout } from '@/app/(main)/websites/[websiteId]/WebsiteLayout'; export default async function ({ diff --git a/src/app/(main)/websites/[websiteId]/page.tsx b/src/app/(main)/websites/[websiteId]/page.tsx index 9755e6d0..d4889c5d 100644 --- a/src/app/(main)/websites/[websiteId]/page.tsx +++ b/src/app/(main)/websites/[websiteId]/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { WebsitePage } from './WebsitePage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx index c4ee9c02..6e2495b5 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx @@ -1,8 +1,8 @@ -import { useCallback } from 'react'; import { IconLabel } from '@umami/react-zen'; -import { ListTable } from '@/components/metrics/ListTable'; -import { useLocale, useCountryNames, useMessages } from '@/components/hooks'; +import { useCallback } from 'react'; import { TypeIcon } from '@/components/common/TypeIcon'; +import { useCountryNames, useLocale, useMessages } from '@/components/hooks'; +import { ListTable } from '@/components/metrics/ListTable'; export function RealtimeCountries({ data }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx index cdd67e7a..2b9d881e 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx @@ -1,5 +1,5 @@ -import { MetricCard } from '@/components/metrics/MetricCard'; import { useMessages } from '@/components/hooks'; +import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; export function RealtimeHeader({ data }: { data: any }) { diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx index 3dec340f..10763618 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx @@ -1,10 +1,11 @@ +import { Column, Heading, IconLabel, Row, SearchField, Text } from '@umami/react-zen'; +import Link from 'next/link'; import { useMemo, useState } from 'react'; import { FixedSizeList } from 'react-window'; -import { SearchField, Text, Column, Row, IconLabel, Heading } from '@umami/react-zen'; -import Link from 'next/link'; +import { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; import { useFormat } from '@/components//hooks/useFormat'; +import { Avatar } from '@/components/common/Avatar'; import { Empty } from '@/components/common/Empty'; -import { FilterButtons } from '@/components/input/FilterButtons'; import { useCountryNames, useLocale, @@ -15,10 +16,9 @@ import { useWebsite, } from '@/components/hooks'; import { Eye, User } from '@/components/icons'; +import { FilterButtons } from '@/components/input/FilterButtons'; import { Lightning } from '@/components/svg'; import { BROWSERS, OS_NAMES } from '@/lib/constants'; -import { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; -import { Avatar } from '@/components/common/Avatar'; const TYPE_ALL = 'all'; const TYPE_PAGEVIEW = 'pageview'; diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimePage.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimePage.tsx index 0f9fa358..6220c695 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimePage.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimePage.tsx @@ -1,18 +1,18 @@ 'use client'; -import { firstBy } from 'thenby'; import { Grid } from '@umami/react-zen'; +import { firstBy } from 'thenby'; import { GridRow } from '@/components/common/GridRow'; import { PageBody } from '@/components/common/PageBody'; import { Panel } from '@/components/common/Panel'; +import { useMobile, useRealtimeQuery } from '@/components/hooks'; import { RealtimeChart } from '@/components/metrics/RealtimeChart'; import { WorldMap } from '@/components/metrics/WorldMap'; -import { useMobile, useRealtimeQuery } from '@/components/hooks'; -import { RealtimeLog } from './RealtimeLog'; +import { percentFilter } from '@/lib/filters'; +import { RealtimeCountries } from './RealtimeCountries'; import { RealtimeHeader } from './RealtimeHeader'; +import { RealtimeLog } from './RealtimeLog'; import { RealtimePaths } from './RealtimePaths'; import { RealtimeReferrers } from './RealtimeReferrers'; -import { RealtimeCountries } from './RealtimeCountries'; -import { percentFilter } from '@/lib/filters'; export function RealtimePage({ websiteId }: { websiteId: string }) { const { data, isLoading, error } = useRealtimeQuery(websiteId); diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimePaths.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimePaths.tsx index 91c6b4d8..1f90ad83 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimePaths.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimePaths.tsx @@ -1,7 +1,7 @@ import thenby from 'thenby'; -import { percentFilter } from '@/lib/filters'; -import { ListTable } from '@/components/metrics/ListTable'; import { useMessages, useWebsite } from '@/components/hooks'; +import { ListTable } from '@/components/metrics/ListTable'; +import { percentFilter } from '@/lib/filters'; export function RealtimePaths({ data }: { data: any }) { const website = useWebsite(); diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeReferrers.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeReferrers.tsx index 85326cd0..9fd4477b 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeReferrers.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeReferrers.tsx @@ -1,7 +1,7 @@ import thenby from 'thenby'; -import { percentFilter } from '@/lib/filters'; -import { ListTable } from '@/components/metrics/ListTable'; import { useMessages, useWebsite } from '@/components/hooks'; +import { ListTable } from '@/components/metrics/ListTable'; +import { percentFilter } from '@/lib/filters'; export function RealtimeReferrers({ data }: { data: any }) { const website = useWebsite(); diff --git a/src/app/(main)/websites/[websiteId]/realtime/page.tsx b/src/app/(main)/websites/[websiteId]/realtime/page.tsx index c1bdd4c5..1552196c 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/page.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { RealtimePage } from './RealtimePage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentAddButton.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentAddButton.tsx index 052d3185..7b70fee6 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentAddButton.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentAddButton.tsx @@ -1,7 +1,7 @@ import { useMessages } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { SegmentEditForm } from './SegmentEditForm'; import { DialogButton } from '@/components/input/DialogButton'; +import { SegmentEditForm } from './SegmentEditForm'; export function SegmentAddButton({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx index 35ef83bb..bb52a220 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx @@ -1,8 +1,8 @@ -import { Trash } from '@/components/icons'; import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { messages } from '@/components/messages'; import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { Trash } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import { messages } from '@/components/messages'; export function SegmentDeleteButton({ segmentId, diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx index 6d422c95..5c56cf1e 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx @@ -1,8 +1,8 @@ -import { Edit } from '@/components/icons'; import { useMessages } from '@/components/hooks'; -import { SegmentEditForm } from './SegmentEditForm'; -import { Filter } from '@/lib/types'; +import { Edit } from '@/components/icons'; import { DialogButton } from '@/components/input/DialogButton'; +import type { Filter } from '@/lib/types'; +import { SegmentEditForm } from './SegmentEditForm'; export function SegmentEditButton({ segmentId, diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentEditForm.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentEditForm.tsx index 26b97352..c3529d97 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentEditForm.tsx @@ -4,12 +4,12 @@ import { FormButtons, FormField, FormSubmitButton, - TextField, - Loading, Label, + Loading, + TextField, } from '@umami/react-zen'; -import { FieldFilters } from '@/components/input/FieldFilters'; import { useMessages, useUpdateQuery, useWebsiteSegmentQuery } from '@/components/hooks'; +import { FieldFilters } from '@/components/input/FieldFilters'; import { messages } from '@/components/messages'; export function SegmentEditForm({ diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx index d98bad02..c1ba82eb 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx @@ -1,7 +1,7 @@ -import { SegmentAddButton } from './SegmentAddButton'; -import { useWebsiteSegmentsQuery } from '@/components/hooks'; -import { SegmentsTable } from './SegmentsTable'; import { DataGrid } from '@/components/common/DataGrid'; +import { useWebsiteSegmentsQuery } from '@/components/hooks'; +import { SegmentAddButton } from './SegmentAddButton'; +import { SegmentsTable } from './SegmentsTable'; export function SegmentsDataTable({ websiteId }: { websiteId?: string }) { const query = useWebsiteSegmentsQuery(websiteId, { type: 'segment' }); diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentsPage.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentsPage.tsx index 9f2d8097..cbe7a1c1 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentsPage.tsx @@ -1,8 +1,8 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { SegmentsDataTable } from './SegmentsDataTable'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { Panel } from '@/components/common/Panel'; +import { SegmentsDataTable } from './SegmentsDataTable'; export function SegmentsPage({ websiteId }) { return ( diff --git a/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx b/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx index 573572aa..4dbe5114 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx @@ -1,9 +1,9 @@ -import { DataTable, DataColumn, Row, DataTableProps } from '@umami/react-zen'; -import { useMessages, useNavigation } from '@/components/hooks'; -import { DateDistance } from '@/components/common/DateDistance'; -import { SegmentEditButton } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditButton'; -import { SegmentDeleteButton } from '@/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton'; +import { DataColumn, DataTable, type DataTableProps, Row } from '@umami/react-zen'; import Link from 'next/link'; +import { SegmentDeleteButton } from '@/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton'; +import { SegmentEditButton } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditButton'; +import { DateDistance } from '@/components/common/DateDistance'; +import { useMessages, useNavigation } from '@/components/hooks'; export function SegmentsTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/segments/page.tsx b/src/app/(main)/websites/[websiteId]/segments/page.tsx index 9f406b16..0d3faacb 100644 --- a/src/app/(main)/websites/[websiteId]/segments/page.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { SegmentsPage } from './SegmentsPage'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx index 7bcf1b76..cbb28108 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx @@ -1,21 +1,21 @@ -import { isSameDay } from 'date-fns'; import { - Icon, - StatusLight, - Column, - Row, - Heading, - Text, Button, - DialogTrigger, - Popover, + Column, Dialog, + DialogTrigger, + Heading, + Icon, + Popover, + Row, + StatusLight, + Text, } from '@umami/react-zen'; +import { isSameDay } from 'date-fns'; import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { Eye, FileText } from '@/components/icons'; -import { Lightning } from '@/components/svg'; import { useMessages, useMobile, useSessionActivityQuery, useTimezone } from '@/components/hooks'; +import { Eye, FileText } from '@/components/icons'; import { EventData } from '@/components/metrics/EventData'; +import { Lightning } from '@/components/svg'; export function SessionActivity({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx index 849e0b7d..7c82c17a 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx @@ -1,8 +1,8 @@ -import { Text, Column, Row, Label, Box } from '@umami/react-zen'; -import { useSessionDataQuery } from '@/components/hooks'; +import { Box, Column, Label, Row, Text } from '@umami/react-zen'; import { Empty } from '@/components/common/Empty'; -import { DATA_TYPES } from '@/lib/constants'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useSessionDataQuery } from '@/components/hooks'; +import { DATA_TYPES } from '@/lib/constants'; export function SessionData({ websiteId, sessionId }: { websiteId: string; sessionId: string }) { const { data, isLoading, error } = useSessionDataQuery(websiteId, sessionId); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx index e968daba..f15e6ee5 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx @@ -1,9 +1,9 @@ -import { ReactNode } from 'react'; -import { Icon, Grid, Column, Row, Label } from '@umami/react-zen'; -import { useFormat, useLocale, useMessages, useRegionNames } from '@/components/hooks'; -import { TypeIcon } from '@/components/common/TypeIcon'; -import { KeyRound, Calendar, MapPin, Landmark } from '@/components/icons'; +import { Column, Grid, Icon, Label, Row } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { DateDistance } from '@/components/common/DateDistance'; +import { TypeIcon } from '@/components/common/TypeIcon'; +import { useFormat, useLocale, useMessages, useRegionNames } from '@/components/hooks'; +import { Calendar, KeyRound, Landmark, MapPin } from '@/components/icons'; export function SessionInfo({ data }) { const { locale } = useLocale(); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx index 6c34b97b..d6580388 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx @@ -1,4 +1,4 @@ -import { Dialog, Modal, ModalProps, Column } from '@umami/react-zen'; +import { Column, Dialog, Modal, type ModalProps } from '@umami/react-zen'; import { SessionProfile } from '@/app/(main)/websites/[websiteId]/sessions/SessionProfile'; import { useNavigation } from '@/components/hooks'; diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx index e83c7957..6624d439 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx @@ -1,14 +1,15 @@ import { - TextField, - Row, - Column, - Tabs, - TabList, - Tab, - TabPanel, Button, + Column, Icon, + Row, + Tab, + TabList, + TabPanel, + Tabs, + TextField, } from '@umami/react-zen'; +import { X } from 'lucide-react'; import { Avatar } from '@/components/common/Avatar'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages, useWebsiteSessionQuery } from '@/components/hooks'; @@ -16,7 +17,6 @@ import { SessionActivity } from './SessionActivity'; import { SessionData } from './SessionData'; import { SessionInfo } from './SessionInfo'; import { SessionStats } from './SessionStats'; -import { X } from 'lucide-react'; export function SessionProfile({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx index e66302ad..1693d057 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx @@ -1,14 +1,14 @@ +import { Column, Grid, ListItem, Select } from '@umami/react-zen'; import { useMemo, useState } from 'react'; -import { Select, ListItem, Grid, Column } from '@umami/react-zen'; +import { PieChart } from '@/components/charts/PieChart'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages, useSessionDataPropertiesQuery, useSessionDataValuesQuery, } from '@/components/hooks'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { PieChart } from '@/components/charts/PieChart'; -import { CHART_COLORS } from '@/lib/constants'; import { ListTable } from '@/components/metrics/ListTable'; +import { CHART_COLORS } from '@/lib/constants'; export function SessionProperties({ websiteId }: { websiteId: string }) { const [propertyName, setPropertyName] = useState(''); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx index 53b35b21..b1b9f658 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx @@ -1,6 +1,6 @@ +import { DataGrid } from '@/components/common/DataGrid'; import { useWebsiteSessionsQuery } from '@/components/hooks'; import { SessionsTable } from './SessionsTable'; -import { DataGrid } from '@/components/common/DataGrid'; export function SessionsDataTable({ websiteId }: { websiteId?: string; teamId?: string }) { const queryResult = useWebsiteSessionsQuery(websiteId); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx index b959f0da..c8317a2b 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx @@ -1,9 +1,9 @@ +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages } from '@/components/hooks'; import { useWebsiteSessionStatsQuery } from '@/components/hooks/queries/useWebsiteSessionStatsQuery'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; import { formatLongNumber } from '@/lib/format'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; export function SessionsMetricsBar({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx index 8a096aa7..8e9d2f21 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx @@ -1,13 +1,13 @@ 'use client'; -import { Key, useState } from 'react'; -import { TabList, Tab, Tabs, TabPanel, Column } from '@umami/react-zen'; -import { SessionsDataTable } from './SessionsDataTable'; -import { SessionProperties } from './SessionProperties'; -import { useMessages } from '@/components/hooks'; -import { Panel } from '@/components/common/Panel'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { getItem, setItem } from '@/lib/storage'; +import { Column, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; +import { type Key, useState } from 'react'; import { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; +import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; +import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { getItem, setItem } from '@/lib/storage'; +import { SessionProperties } from './SessionProperties'; +import { SessionsDataTable } from './SessionsDataTable'; const KEY_NAME = 'umami.sessions.tab'; diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx index ab4977ea..5d3bb374 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx @@ -1,9 +1,9 @@ +import { DataColumn, DataTable, type DataTableProps } from '@umami/react-zen'; import Link from 'next/link'; -import { DataColumn, DataTable, DataTableProps } from '@umami/react-zen'; -import { useFormat, useMessages, useNavigation } from '@/components/hooks'; import { Avatar } from '@/components/common/Avatar'; -import { TypeIcon } from '@/components/common/TypeIcon'; import { DateDistance } from '@/components/common/DateDistance'; +import { TypeIcon } from '@/components/common/TypeIcon'; +import { useFormat, useMessages, useNavigation } from '@/components/hooks'; export function SessionsTable(props: DataTableProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/sessions/page.tsx b/src/app/(main)/websites/[websiteId]/sessions/page.tsx index 7bf8216b..221ab71c 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/page.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { SessionsPage } from './SessionsPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteData.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteData.tsx index 1c186385..21cd6137 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteData.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteData.tsx @@ -1,16 +1,16 @@ -import { Button, Modal, DialogTrigger, Dialog, Column } from '@umami/react-zen'; +import { Button, Column, Dialog, DialogTrigger, Modal } from '@umami/react-zen'; +import { ActionForm } from '@/components/common/ActionForm'; import { useLoginQuery, useMessages, useModified, - useUserTeamsQuery, useNavigation, + useUserTeamsQuery, } from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; import { WebsiteDeleteForm } from './WebsiteDeleteForm'; import { WebsiteResetForm } from './WebsiteResetForm'; import { WebsiteTransferForm } from './WebsiteTransferForm'; -import { ActionForm } from '@/components/common/ActionForm'; -import { ROLES } from '@/lib/constants'; export function WebsiteData({ websiteId, onSave }: { websiteId: string; onSave?: () => void }) { const { formatMessage, labels, messages } = useMessages(); diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx index 780aab74..2fc02768 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx @@ -1,5 +1,5 @@ -import { useDeleteQuery, useMessages } from '@/components/hooks'; import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; const CONFIRM_VALUE = 'DELETE'; diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx index c7cb3d89..4ae819ee 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx @@ -1,4 +1,4 @@ -import { FormSubmitButton, Form, FormField, FormButtons, TextField } from '@umami/react-zen'; +import { Form, FormButtons, FormField, FormSubmitButton, TextField } from '@umami/react-zen'; import { useMessages, useUpdateQuery, useWebsite } from '@/components/hooks'; import { DOMAIN_REGEX } from '@/lib/constants'; diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx index 43583c3e..d791bc96 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx @@ -1,5 +1,5 @@ -import { useMessages, useUpdateQuery } from '@/components/hooks'; import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; const CONFIRM_VALUE = 'RESET'; diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteSettings.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteSettings.tsx index a50aceee..3970cdbd 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteSettings.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteSettings.tsx @@ -1,10 +1,10 @@ import { Column } from '@umami/react-zen'; +import { Panel } from '@/components/common/Panel'; import { useWebsite } from '@/components/hooks'; -import { WebsiteShareForm } from './WebsiteShareForm'; -import { WebsiteTrackingCode } from './WebsiteTrackingCode'; import { WebsiteData } from './WebsiteData'; import { WebsiteEditForm } from './WebsiteEditForm'; -import { Panel } from '@/components/common/Panel'; +import { WebsiteShareForm } from './WebsiteShareForm'; +import { WebsiteTrackingCode } from './WebsiteTrackingCode'; export function WebsiteSettings({ websiteId }: { websiteId: string; openExternal?: boolean }) { const website = useWebsite(); diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader.tsx index 216142ec..99977a0b 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader.tsx @@ -1,8 +1,8 @@ +import { IconLabel, Row } from '@umami/react-zen'; import Link from 'next/link'; import { PageHeader } from '@/components/common/PageHeader'; -import { Globe, ArrowLeft } from '@/components/icons'; import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; -import { IconLabel, Row } from '@umami/react-zen'; +import { ArrowLeft, Globe } from '@/components/icons'; export function WebsiteSettingsHeader() { const website = useWebsite(); diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx index f89d25fd..56c6f436 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx @@ -1,19 +1,19 @@ import { + Button, + Column, Form, FormButtons, - TextField, - Button, - Switch, FormSubmitButton, - Column, + IconLabel, Label, Row, - IconLabel, + Switch, + TextField, } from '@umami/react-zen'; -import { useState } from 'react'; -import { getRandomChars } from '@/lib/generate'; -import { useMessages, useUpdateQuery, useConfig } from '@/components/hooks'; import { RefreshCcw } from 'lucide-react'; +import { useState } from 'react'; +import { useConfig, useMessages, useUpdateQuery } from '@/components/hooks'; +import { getRandomChars } from '@/lib/generate'; const generateId = () => getRandomChars(16); diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx index bdc49c75..d24f9485 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx @@ -1,5 +1,5 @@ -import { TextField, Text, Column, Label } from '@umami/react-zen'; -import { useMessages, useConfig } from '@/components/hooks'; +import { Column, Label, Text, TextField } from '@umami/react-zen'; +import { useConfig, useMessages } from '@/components/hooks'; const SCRIPT_NAME = 'script.js'; diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx index f16ab93c..8af4f05c 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx @@ -1,15 +1,15 @@ -import { Key, useState } from 'react'; import { Button, Form, FormButtons, FormField, FormSubmitButton, + ListItem, Loading, Select, - ListItem, Text, } from '@umami/react-zen'; +import { type Key, useState } from 'react'; import { useLoginQuery, useMessages, diff --git a/src/app/(main)/websites/[websiteId]/settings/page.tsx b/src/app/(main)/websites/[websiteId]/settings/page.tsx index a3aed621..a26d14f7 100644 --- a/src/app/(main)/websites/[websiteId]/settings/page.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { SettingsPage } from './SettingsPage'; -import { Metadata } from 'next'; export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { const { websiteId } = await params; diff --git a/src/app/(main)/websites/page.tsx b/src/app/(main)/websites/page.tsx index c3e54be6..cefaf809 100644 --- a/src/app/(main)/websites/page.tsx +++ b/src/app/(main)/websites/page.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { WebsitesPage } from './WebsitesPage'; -import { Metadata } from 'next'; export default function () { return ; diff --git a/src/app/Providers.tsx b/src/app/Providers.tsx index b8898e88..ae1a0007 100644 --- a/src/app/Providers.tsx +++ b/src/app/Providers.tsx @@ -1,9 +1,9 @@ 'use client'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { RouterProvider, ZenProvider } from '@umami/react-zen'; +import { useRouter } from 'next/navigation'; import { useEffect } from 'react'; import { IntlProvider } from 'react-intl'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ZenProvider, RouterProvider } from '@umami/react-zen'; -import { useRouter } from 'next/navigation'; import { ErrorBoundary } from '@/components/common/ErrorBoundary'; import { useLocale } from '@/components/hooks'; import 'chartjs-adapter-date-fns'; diff --git a/src/app/api/admin/websites/route.ts b/src/app/api/admin/websites/route.ts index 8d6d81bf..09b2ef98 100644 --- a/src/app/api/admin/websites/route.ts +++ b/src/app/api/admin/websites/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; +import { ROLES } from '@/lib/constants'; import { parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; import { canViewAllWebsites } from '@/permissions'; import { getWebsites } from '@/queries/prisma/website'; -import { ROLES } from '@/lib/constants'; export async function GET(request: Request) { const schema = z.object({ diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts index 2c312a91..7c2b2fed 100644 --- a/src/app/api/auth/login/route.ts +++ b/src/app/api/auth/login/route.ts @@ -1,13 +1,13 @@ import { z } from 'zod'; -import { createSecureToken } from '@/lib/jwt'; -import redis from '@/lib/redis'; -import { getUserByUsername } from '@/queries/prisma'; -import { json, unauthorized } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; import { saveAuth } from '@/lib/auth'; -import { checkPassword } from '@/lib/password'; -import { secret } from '@/lib/crypto'; import { ROLES } from '@/lib/constants'; +import { secret } from '@/lib/crypto'; +import { createSecureToken } from '@/lib/jwt'; +import { checkPassword } from '@/lib/password'; +import redis from '@/lib/redis'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { getUserByUsername } from '@/queries/prisma'; export async function POST(request: Request) { const schema = z.object({ diff --git a/src/app/api/auth/sso/route.ts b/src/app/api/auth/sso/route.ts index fc8fb9bf..bba3dde3 100644 --- a/src/app/api/auth/sso/route.ts +++ b/src/app/api/auth/sso/route.ts @@ -1,7 +1,7 @@ -import redis from '@/lib/redis'; -import { json } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; import { saveAuth } from '@/lib/auth'; +import redis from '@/lib/redis'; +import { parseRequest } from '@/lib/request'; +import { json } from '@/lib/response'; export async function POST(request: Request) { const { auth, error } = await parseRequest(request); diff --git a/src/app/api/links/[linkId]/route.ts b/src/app/api/links/[linkId]/route.ts index 512f39c9..92f572c4 100644 --- a/src/app/api/links/[linkId]/route.ts +++ b/src/app/api/links/[linkId]/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { canUpdateLink, canDeleteLink, canViewLink } from '@/permissions'; import { parseRequest } from '@/lib/request'; -import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; +import { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; +import { canDeleteLink, canUpdateLink, canViewLink } from '@/permissions'; import { deleteLink, getLink, updateLink } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ linkId: string }> }) { diff --git a/src/app/api/links/route.ts b/src/app/api/links/route.ts index 2d1e70ea..a639888b 100644 --- a/src/app/api/links/route.ts +++ b/src/app/api/links/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; -import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; -import { json, unauthorized } from '@/lib/response'; import { uuid } from '@/lib/crypto'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; import { createLink, getUserLinks } from '@/queries/prisma'; export async function GET(request: Request) { diff --git a/src/app/api/me/password/route.ts b/src/app/api/me/password/route.ts index 51812910..24c73705 100644 --- a/src/app/api/me/password/route.ts +++ b/src/app/api/me/password/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; import { checkPassword, hashPassword } from '@/lib/password'; import { parseRequest } from '@/lib/request'; -import { json, badRequest } from '@/lib/response'; +import { badRequest, json } from '@/lib/response'; import { getUser, updateUser } from '@/queries/prisma/user'; export async function POST(request: Request) { diff --git a/src/app/api/me/teams/route.ts b/src/app/api/me/teams/route.ts index 3fa5b419..555bf300 100644 --- a/src/app/api/me/teams/route.ts +++ b/src/app/api/me/teams/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json } from '@/lib/response'; import { pagingParams } from '@/lib/schema'; import { getUserTeams } from '@/queries/prisma'; -import { json } from '@/lib/response'; -import { getQueryFilters, parseRequest } from '@/lib/request'; export async function GET(request: Request) { const schema = z.object({ diff --git a/src/app/api/me/websites/route.ts b/src/app/api/me/websites/route.ts index 06d5daaa..9ec39c78 100644 --- a/src/app/api/me/websites/route.ts +++ b/src/app/api/me/websites/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json } from '@/lib/response'; import { pagingParams } from '@/lib/schema'; import { getAllUserWebsitesIncludingTeamOwner, getUserWebsites } from '@/queries/prisma'; -import { json } from '@/lib/response'; -import { parseRequest, getQueryFilters } from '@/lib/request'; export async function GET(request: Request) { const schema = z.object({ diff --git a/src/app/api/pixels/[pixelId]/route.ts b/src/app/api/pixels/[pixelId]/route.ts index 2f547c04..ecaf1fdf 100644 --- a/src/app/api/pixels/[pixelId]/route.ts +++ b/src/app/api/pixels/[pixelId]/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { canUpdatePixel, canDeletePixel, canViewPixel } from '@/permissions'; import { parseRequest } from '@/lib/request'; -import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; +import { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; +import { canDeletePixel, canUpdatePixel, canViewPixel } from '@/permissions'; import { deletePixel, getPixel, updatePixel } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ pixelId: string }> }) { diff --git a/src/app/api/pixels/route.ts b/src/app/api/pixels/route.ts index 2302c424..8baae4f3 100644 --- a/src/app/api/pixels/route.ts +++ b/src/app/api/pixels/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; -import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; -import { json, unauthorized } from '@/lib/response'; import { uuid } from '@/lib/crypto'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; import { createPixel, getUserPixels } from '@/queries/prisma'; export async function GET(request: Request) { diff --git a/src/app/api/realtime/[websiteId]/route.ts b/src/app/api/realtime/[websiteId]/route.ts index eaa0bbd8..32b7a16c 100644 --- a/src/app/api/realtime/[websiteId]/route.ts +++ b/src/app/api/realtime/[websiteId]/route.ts @@ -1,9 +1,9 @@ +import { startOfMinute, subMinutes } from 'date-fns'; import { REALTIME_RANGE } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getRealtimeData } from '@/queries/sql'; -import { startOfMinute, subMinutes } from 'date-fns'; export async function GET( request: Request, diff --git a/src/app/api/reports/attribution/route.ts b/src/app/api/reports/attribution/route.ts index 4c500377..bd7d86dc 100644 --- a/src/app/api/reports/attribution/route.ts +++ b/src/app/api/reports/attribution/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; -import { AttributionParameters, getAttribution } from '@/queries/sql/reports/getAttribution'; +import { canViewWebsite } from '@/permissions'; +import { type AttributionParameters, getAttribution } from '@/queries/sql/reports/getAttribution'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/breakdown/route.ts b/src/app/api/reports/breakdown/route.ts index 8d96cf5d..3c593145 100644 --- a/src/app/api/reports/breakdown/route.ts +++ b/src/app/api/reports/breakdown/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { BreakdownParameters, getBreakdown } from '@/queries/sql'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { type BreakdownParameters, getBreakdown } from '@/queries/sql'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/funnel/route.ts b/src/app/api/reports/funnel/route.ts index 2ba4b862..c13f6f1c 100644 --- a/src/app/api/reports/funnel/route.ts +++ b/src/app/api/reports/funnel/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; -import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; -import { FunnelParameters, getFunnel } from '@/queries/sql'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { type FunnelParameters, getFunnel } from '@/queries/sql'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/goal/route.ts b/src/app/api/reports/goal/route.ts index f9848fa7..3bd0415d 100644 --- a/src/app/api/reports/goal/route.ts +++ b/src/app/api/reports/goal/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { getGoal, GoalParameters } from '@/queries/sql/reports/getGoal'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { type GoalParameters, getGoal } from '@/queries/sql/reports/getGoal'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/journey/route.ts b/src/app/api/reports/journey/route.ts index d4e5e18d..29e85319 100644 --- a/src/app/api/reports/journey/route.ts +++ b/src/app/api/reports/journey/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { getJourney } from '@/queries/sql'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getJourney } from '@/queries/sql'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/retention/route.ts b/src/app/api/reports/retention/route.ts index 69d61c0e..d1a7d698 100644 --- a/src/app/api/reports/retention/route.ts +++ b/src/app/api/reports/retention/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; -import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; -import { getRetention, RetentionParameters } from '@/queries/sql'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getRetention, type RetentionParameters } from '@/queries/sql'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/revenue/route.ts b/src/app/api/reports/revenue/route.ts index 75930adc..6a556612 100644 --- a/src/app/api/reports/revenue/route.ts +++ b/src/app/api/reports/revenue/route.ts @@ -1,8 +1,8 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; -import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { reportResultSchema } from '@/lib/schema'; -import { getRevenue, RevenuParameters } from '@/queries/sql/reports/getRevenue'; +import { canViewWebsite } from '@/permissions'; +import { getRevenue, type RevenuParameters } from '@/queries/sql/reports/getRevenue'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/reports/route.ts b/src/app/api/reports/route.ts index 123a7e66..b0a41354 100644 --- a/src/app/api/reports/route.ts +++ b/src/app/api/reports/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; import { uuid } from '@/lib/crypto'; -import { pagingParams, reportSchema, reportTypeParam } from '@/lib/schema'; import { parseRequest } from '@/lib/request'; -import { canViewWebsite, canUpdateWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; -import { getReports, createReport } from '@/queries/prisma'; +import { json, unauthorized } from '@/lib/response'; +import { pagingParams, reportSchema, reportTypeParam } from '@/lib/schema'; +import { canUpdateWebsite, canViewWebsite } from '@/permissions'; +import { createReport, getReports } from '@/queries/prisma'; export async function GET(request: Request) { const schema = z.object({ diff --git a/src/app/api/reports/utm/route.ts b/src/app/api/reports/utm/route.ts index ef0ff5fe..577fdab7 100644 --- a/src/app/api/reports/utm/route.ts +++ b/src/app/api/reports/utm/route.ts @@ -1,9 +1,9 @@ -import { canViewWebsite } from '@/permissions'; -import { unauthorized, json } from '@/lib/response'; -import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { getUTM, UTMParameters } from '@/queries/sql'; -import { reportResultSchema } from '@/lib/schema'; import { UTM_PARAMS } from '@/lib/constants'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { reportResultSchema } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getUTM, type UTMParameters } from '@/queries/sql'; export async function POST(request: Request) { const { auth, body, error } = await parseRequest(request, reportResultSchema); diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts index 2c2085bf..d1a7b90b 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -1,18 +1,18 @@ -import { z } from 'zod'; -import { isbot } from 'isbot'; import { startOfHour, startOfMonth } from 'date-fns'; +import { isbot } from 'isbot'; +import { serializeError } from 'serialize-error'; +import { z } from 'zod'; import clickhouse from '@/lib/clickhouse'; -import { parseRequest } from '@/lib/request'; -import { badRequest, json, forbidden, serverError } from '@/lib/response'; -import { fetchWebsite } from '@/lib/load'; +import { COLLECTION_TYPE, EVENT_TYPE } from '@/lib/constants'; +import { hash, secret, uuid } from '@/lib/crypto'; import { getClientInfo, hasBlockedIp } from '@/lib/detect'; import { createToken, parseToken } from '@/lib/jwt'; -import { secret, uuid, hash } from '@/lib/crypto'; -import { COLLECTION_TYPE, EVENT_TYPE } from '@/lib/constants'; +import { fetchWebsite } from '@/lib/load'; +import { parseRequest } from '@/lib/request'; +import { badRequest, forbidden, json, serverError } from '@/lib/response'; import { anyObjectParam, urlOrPathParam } from '@/lib/schema'; import { safeDecodeURI, safeDecodeURIComponent } from '@/lib/url'; import { createSession, saveEvent, saveSessionData } from '@/queries/sql'; -import { serializeError } from 'serialize-error'; interface Cache { websiteId: string; @@ -125,7 +125,7 @@ export async function POST(request: Request) { } const createdAt = timestamp ? new Date(timestamp * 1000) : new Date(); - const now = Math.floor(new Date().getTime() / 1000); + const now = Math.floor(Date.now() / 1000); const sessionSalt = hash(startOfMonth(createdAt).toUTCString()); const visitSalt = hash(startOfHour(createdAt).toUTCString()); diff --git a/src/app/api/share/[shareId]/route.ts b/src/app/api/share/[shareId]/route.ts index 9b2960a1..bef87c4f 100644 --- a/src/app/api/share/[shareId]/route.ts +++ b/src/app/api/share/[shareId]/route.ts @@ -1,9 +1,9 @@ -import { json, notFound } from '@/lib/response'; -import { createToken } from '@/lib/jwt'; import { secret } from '@/lib/crypto'; +import { createToken } from '@/lib/jwt'; +import { json, notFound } from '@/lib/response'; import { getSharedWebsite } from '@/queries/prisma'; -export async function GET(request: Request, { params }: { params: Promise<{ shareId: string }> }) { +export async function GET(_request: Request, { params }: { params: Promise<{ shareId: string }> }) { const { shareId } = await params; const website = await getSharedWebsite(shareId); diff --git a/src/app/api/teams/[teamId]/links/route.ts b/src/app/api/teams/[teamId]/links/route.ts index 39ac769e..41e139b3 100644 --- a/src/app/api/teams/[teamId]/links/route.ts +++ b/src/app/api/teams/[teamId]/links/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { unauthorized, json } from '@/lib/response'; -import { canViewTeam } from '@/permissions'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canViewTeam } from '@/permissions'; import { getTeamLinks } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/api/teams/[teamId]/pixels/route.ts b/src/app/api/teams/[teamId]/pixels/route.ts index bacb6668..daac2040 100644 --- a/src/app/api/teams/[teamId]/pixels/route.ts +++ b/src/app/api/teams/[teamId]/pixels/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { unauthorized, json } from '@/lib/response'; -import { canViewTeam } from '@/permissions'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canViewTeam } from '@/permissions'; import { getTeamPixels } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/api/teams/[teamId]/route.ts b/src/app/api/teams/[teamId]/route.ts index de3e3143..c334b2af 100644 --- a/src/app/api/teams/[teamId]/route.ts +++ b/src/app/api/teams/[teamId]/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { unauthorized, json, notFound, ok } from '@/lib/response'; -import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/permissions'; import { parseRequest } from '@/lib/request'; +import { json, notFound, ok, unauthorized } from '@/lib/response'; +import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/permissions'; import { deleteTeam, getTeam, updateTeam } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/api/teams/[teamId]/users/[userId]/route.ts b/src/app/api/teams/[teamId]/users/[userId]/route.ts index 7e3c154b..d09af9da 100644 --- a/src/app/api/teams/[teamId]/users/[userId]/route.ts +++ b/src/app/api/teams/[teamId]/users/[userId]/route.ts @@ -1,9 +1,9 @@ -import { canDeleteTeamUser, canUpdateTeam } from '@/permissions'; +import { z } from 'zod'; import { parseRequest } from '@/lib/request'; import { badRequest, json, ok, unauthorized } from '@/lib/response'; -import { deleteTeamUser, getTeamUser, updateTeamUser } from '@/queries/prisma'; -import { z } from 'zod'; import { teamRoleParam } from '@/lib/schema'; +import { canDeleteTeamUser, canUpdateTeam } from '@/permissions'; +import { deleteTeamUser, getTeamUser, updateTeamUser } from '@/queries/prisma'; export async function GET( request: Request, diff --git a/src/app/api/teams/[teamId]/users/route.ts b/src/app/api/teams/[teamId]/users/route.ts index 6f97ac29..c1297636 100644 --- a/src/app/api/teams/[teamId]/users/route.ts +++ b/src/app/api/teams/[teamId]/users/route.ts @@ -1,9 +1,9 @@ +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams, teamRoleParam } from '@/lib/schema'; import { canUpdateTeam, canViewTeam } from '@/permissions'; import { createTeamUser, getTeamUser, getTeamUsers } from '@/queries/prisma'; -import { z } from 'zod'; export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) { const schema = z.object({ diff --git a/src/app/api/teams/[teamId]/websites/route.ts b/src/app/api/teams/[teamId]/websites/route.ts index a51076dc..05c6d804 100644 --- a/src/app/api/teams/[teamId]/websites/route.ts +++ b/src/app/api/teams/[teamId]/websites/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { unauthorized, json } from '@/lib/response'; -import { canViewTeam } from '@/permissions'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canViewTeam } from '@/permissions'; import { getTeamWebsites } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ teamId: string }> }) { diff --git a/src/app/api/teams/join/route.ts b/src/app/api/teams/join/route.ts index e6bfb871..3ce0913f 100644 --- a/src/app/api/teams/join/route.ts +++ b/src/app/api/teams/join/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { json, badRequest, notFound } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; import { ROLES } from '@/lib/constants'; +import { parseRequest } from '@/lib/request'; +import { badRequest, json, notFound } from '@/lib/response'; import { createTeamUser, findTeam, getTeamUser } from '@/queries/prisma'; export async function POST(request: Request) { diff --git a/src/app/api/teams/route.ts b/src/app/api/teams/route.ts index 2b9985ba..53ef5923 100644 --- a/src/app/api/teams/route.ts +++ b/src/app/api/teams/route.ts @@ -1,11 +1,11 @@ import { z } from 'zod'; -import { getRandomChars } from '@/lib/generate'; -import { unauthorized, json } from '@/lib/response'; -import { canCreateTeam } from '@/permissions'; import { uuid } from '@/lib/crypto'; +import { getRandomChars } from '@/lib/generate'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { createTeam, getUserTeams } from '@/queries/prisma'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams } from '@/lib/schema'; +import { canCreateTeam } from '@/permissions'; +import { createTeam, getUserTeams } from '@/queries/prisma'; export async function GET(request: Request) { const schema = z.object({ diff --git a/src/app/api/users/[userId]/route.ts b/src/app/api/users/[userId]/route.ts index c15b4b71..aade8aa8 100644 --- a/src/app/api/users/[userId]/route.ts +++ b/src/app/api/users/[userId]/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { canUpdateUser, canViewUser, canDeleteUser } from '@/permissions'; -import { getUser, getUserByUsername, updateUser, deleteUser } from '@/queries/prisma'; -import { json, unauthorized, badRequest, ok } from '@/lib/response'; import { hashPassword } from '@/lib/password'; import { parseRequest } from '@/lib/request'; +import { badRequest, json, ok, unauthorized } from '@/lib/response'; import { userRoleParam } from '@/lib/schema'; +import { canDeleteUser, canUpdateUser, canViewUser } from '@/permissions'; +import { deleteUser, getUser, getUserByUsername, updateUser } from '@/queries/prisma'; export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) { const { auth, error } = await parseRequest(request); diff --git a/src/app/api/users/[userId]/teams/route.ts b/src/app/api/users/[userId]/teams/route.ts index c2c34342..7a834a3f 100644 --- a/src/app/api/users/[userId]/teams/route.ts +++ b/src/app/api/users/[userId]/teams/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams } from '@/lib/schema'; import { getUserTeams } from '@/queries/prisma'; -import { unauthorized, json } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) { const schema = z.object({ diff --git a/src/app/api/users/[userId]/websites/route.ts b/src/app/api/users/[userId]/websites/route.ts index 1c2285ba..1107d8e1 100644 --- a/src/app/api/users/[userId]/websites/route.ts +++ b/src/app/api/users/[userId]/websites/route.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -import { unauthorized, json } from '@/lib/response'; -import { pagingParams, searchParams } from '@/lib/schema'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { pagingParams, searchParams } from '@/lib/schema'; import { getAllUserWebsitesIncludingTeamOwner, getUserWebsites } from '@/queries/prisma/website'; export async function GET(request: Request, { params }: { params: Promise<{ userId: string }> }) { diff --git a/src/app/api/users/route.ts b/src/app/api/users/route.ts index 1e7ed9eb..dbb114cf 100644 --- a/src/app/api/users/route.ts +++ b/src/app/api/users/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { hashPassword } from '@/lib/password'; -import { canCreateUser } from '@/permissions'; import { ROLES } from '@/lib/constants'; import { uuid } from '@/lib/crypto'; +import { hashPassword } from '@/lib/password'; import { parseRequest } from '@/lib/request'; -import { unauthorized, json, badRequest } from '@/lib/response'; +import { badRequest, json, unauthorized } from '@/lib/response'; +import { canCreateUser } from '@/permissions'; import { createUser, getUserByUsername } from '@/queries/prisma'; export async function POST(request: Request) { diff --git a/src/app/api/websites/[websiteId]/active/route.ts b/src/app/api/websites/[websiteId]/active/route.ts index f0abd4c3..233b97e5 100644 --- a/src/app/api/websites/[websiteId]/active/route.ts +++ b/src/app/api/websites/[websiteId]/active/route.ts @@ -1,7 +1,7 @@ -import { canViewWebsite } from '@/permissions'; -import { json, unauthorized } from '@/lib/response'; -import { getActiveVisitors } from '@/queries/sql'; import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { canViewWebsite } from '@/permissions'; +import { getActiveVisitors } from '@/queries/sql'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/daterange/route.ts b/src/app/api/websites/[websiteId]/daterange/route.ts index 312daad6..14a241fd 100644 --- a/src/app/api/websites/[websiteId]/daterange/route.ts +++ b/src/app/api/websites/[websiteId]/daterange/route.ts @@ -1,7 +1,7 @@ +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getWebsiteDateRange } from '@/queries/sql'; -import { json, unauthorized } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/event-data/[eventId]/route.ts b/src/app/api/websites/[websiteId]/event-data/[eventId]/route.ts index 1dea7896..54afab21 100644 --- a/src/app/api/websites/[websiteId]/event-data/[eventId]/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/[eventId]/route.ts @@ -1,5 +1,5 @@ import { parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getEventData } from '@/queries/sql/events/getEventData'; diff --git a/src/app/api/websites/[websiteId]/event-data/events/route.ts b/src/app/api/websites/[websiteId]/event-data/events/route.ts index 2420f0fa..eb6ee6ed 100644 --- a/src/app/api/websites/[websiteId]/event-data/events/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/events/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getEventDataEvents } from '@/queries/sql/events/getEventDataEvents'; -import { filterParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/event-data/fields/route.ts b/src/app/api/websites/[websiteId]/event-data/fields/route.ts index cfee4967..bce6a977 100644 --- a/src/app/api/websites/[websiteId]/event-data/fields/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/fields/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getEventDataFields } from '@/queries/sql'; -import { filterParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/event-data/properties/route.ts b/src/app/api/websites/[websiteId]/event-data/properties/route.ts index df513e5a..52d15cfb 100644 --- a/src/app/api/websites/[websiteId]/event-data/properties/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/properties/route.ts @@ -1,9 +1,9 @@ +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getEventDataProperties } from '@/queries/sql'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/event-data/stats/route.ts b/src/app/api/websites/[websiteId]/event-data/stats/route.ts index bb482e2c..042e989a 100644 --- a/src/app/api/websites/[websiteId]/event-data/stats/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/stats/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getEventDataStats } from '@/queries/sql'; -import { filterParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/event-data/values/route.ts b/src/app/api/websites/[websiteId]/event-data/values/route.ts index 2921af9f..12e8f2dc 100644 --- a/src/app/api/websites/[websiteId]/event-data/values/route.ts +++ b/src/app/api/websites/[websiteId]/event-data/values/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getEventDataValues } from '@/queries/sql'; -import { filterParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/events/route.ts b/src/app/api/websites/[websiteId]/events/route.ts index 6dbdea7d..74ec3ece 100644 --- a/src/app/api/websites/[websiteId]/events/route.ts +++ b/src/app/api/websites/[websiteId]/events/route.ts @@ -1,9 +1,9 @@ +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { filterParams, pagingParams, searchParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getWebsiteEvents } from '@/queries/sql'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/events/series/route.ts b/src/app/api/websites/[websiteId]/events/series/route.ts index a579991b..977e9c81 100644 --- a/src/app/api/websites/[websiteId]/events/series/route.ts +++ b/src/app/api/websites/[websiteId]/events/series/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { parseRequest, getQueryFilters } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; -import { canViewWebsite } from '@/permissions'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { filterParams, timezoneParam, unitParam } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getEventStats } from '@/queries/sql'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/export/route.ts b/src/app/api/websites/[websiteId]/export/route.ts index fbf250e6..eec81c6d 100644 --- a/src/app/api/websites/[websiteId]/export/route.ts +++ b/src/app/api/websites/[websiteId]/export/route.ts @@ -1,10 +1,10 @@ -import { z } from 'zod'; import JSZip from 'jszip'; import Papa from 'papaparse'; +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { dateRangeParams, pagingParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; -import { pagingParams, dateRangeParams } from '@/lib/schema'; import { getEventMetrics, getPageviewMetrics, getSessionMetrics } from '@/queries/sql'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/metrics/expanded/route.ts b/src/app/api/websites/[websiteId]/metrics/expanded/route.ts index 703cf5ee..d52c1773 100644 --- a/src/app/api/websites/[websiteId]/metrics/expanded/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/expanded/route.ts @@ -1,3 +1,4 @@ +import { z } from 'zod'; import { EVENT_COLUMNS, EVENT_TYPE, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; @@ -9,7 +10,6 @@ import { getPageviewExpandedMetrics, getSessionExpandedMetrics, } from '@/queries/sql'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/metrics/route.ts b/src/app/api/websites/[websiteId]/metrics/route.ts index 3bfeaa6a..12784adb 100644 --- a/src/app/api/websites/[websiteId]/metrics/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/route.ts @@ -1,3 +1,4 @@ +import { z } from 'zod'; import { EVENT_COLUMNS, EVENT_TYPE, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; @@ -9,7 +10,6 @@ import { getPageviewMetrics, getSessionMetrics, } from '@/queries/sql'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/pageviews/route.ts b/src/app/api/websites/[websiteId]/pageviews/route.ts index 939fa7f4..af59bce4 100644 --- a/src/app/api/websites/[websiteId]/pageviews/route.ts +++ b/src/app/api/websites/[websiteId]/pageviews/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; -import { canViewWebsite } from '@/permissions'; -import { getQueryFilters, parseRequest } from '@/lib/request'; -import { dateRangeParams, filterParams } from '@/lib/schema'; import { getCompareDate } from '@/lib/date'; -import { unauthorized, json } from '@/lib/response'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { dateRangeParams, filterParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getPageviewStats, getSessionStats } from '@/queries/sql'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/reports/route.ts b/src/app/api/websites/[websiteId]/reports/route.ts index 22851f44..93e7ab46 100644 --- a/src/app/api/websites/[websiteId]/reports/route.ts +++ b/src/app/api/websites/[websiteId]/reports/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams, pagingParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getReports } from '@/queries/prisma'; -import { filterParams, pagingParams } from '@/lib/schema'; -import { parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/reset/route.ts b/src/app/api/websites/[websiteId]/reset/route.ts index c5ac3dff..e0be5a53 100644 --- a/src/app/api/websites/[websiteId]/reset/route.ts +++ b/src/app/api/websites/[websiteId]/reset/route.ts @@ -1,7 +1,7 @@ +import { parseRequest } from '@/lib/request'; +import { ok, unauthorized } from '@/lib/response'; import { canUpdateWebsite } from '@/permissions'; import { resetWebsite } from '@/queries/prisma'; -import { unauthorized, ok } from '@/lib/response'; -import { parseRequest } from '@/lib/request'; export async function POST( request: Request, diff --git a/src/app/api/websites/[websiteId]/route.ts b/src/app/api/websites/[websiteId]/route.ts index 4c147707..b4c0e7e8 100644 --- a/src/app/api/websites/[websiteId]/route.ts +++ b/src/app/api/websites/[websiteId]/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { canUpdateWebsite, canDeleteWebsite, canViewWebsite } from '@/permissions'; import { SHARE_ID_REGEX } from '@/lib/constants'; import { parseRequest } from '@/lib/request'; -import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; +import { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; +import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions'; import { deleteWebsite, getWebsite, updateWebsite } from '@/queries/prisma'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts b/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts index 0aa36e70..b51f783b 100644 --- a/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts +++ b/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts @@ -1,9 +1,9 @@ -import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions'; +import { z } from 'zod'; import { parseRequest } from '@/lib/request'; import { json, notFound, ok, unauthorized } from '@/lib/response'; import { anyObjectParam, segmentTypeParam } from '@/lib/schema'; +import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions'; import { deleteSegment, getSegment, updateSegment } from '@/queries/prisma'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/segments/route.ts b/src/app/api/websites/[websiteId]/segments/route.ts index 26afd99e..45927656 100644 --- a/src/app/api/websites/[websiteId]/segments/route.ts +++ b/src/app/api/websites/[websiteId]/segments/route.ts @@ -1,10 +1,10 @@ -import { canUpdateWebsite, canViewWebsite } from '@/permissions'; +import { z } from 'zod'; import { uuid } from '@/lib/crypto'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; -import { segmentTypeParam, searchParams, anyObjectParam } from '@/lib/schema'; +import { anyObjectParam, searchParams, segmentTypeParam } from '@/lib/schema'; +import { canUpdateWebsite, canViewWebsite } from '@/permissions'; import { createSegment, getWebsiteSegments } from '@/queries/prisma'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/session-data/properties/route.ts b/src/app/api/websites/[websiteId]/session-data/properties/route.ts index 64328ce5..2d8db153 100644 --- a/src/app/api/websites/[websiteId]/session-data/properties/route.ts +++ b/src/app/api/websites/[websiteId]/session-data/properties/route.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { json, unauthorized } from '@/lib/response'; +import { filterParams } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getSessionDataProperties } from '@/queries/sql'; -import { filterParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/session-data/values/route.ts b/src/app/api/websites/[websiteId]/session-data/values/route.ts index 75464ba4..7d06870a 100644 --- a/src/app/api/websites/[websiteId]/session-data/values/route.ts +++ b/src/app/api/websites/[websiteId]/session-data/values/route.ts @@ -1,9 +1,9 @@ -import { canViewWebsite } from '@/permissions'; +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; -import { getSessionDataValues } from '@/queries/sql'; -import { z } from 'zod'; import { filterParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getSessionDataValues } from '@/queries/sql'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts index f68a9cc3..41b766d0 100644 --- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/activity/route.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -import { parseRequest, getQueryFilters } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getSessionActivity } from '@/queries/sql'; diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts index ca108d76..6b5c2418 100644 --- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/properties/route.ts @@ -1,7 +1,7 @@ -import { unauthorized, json } from '@/lib/response'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getSessionData } from '@/queries/sql'; -import { parseRequest } from '@/lib/request'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts b/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts index 3001b857..10916637 100644 --- a/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/[sessionId]/route.ts @@ -1,7 +1,7 @@ -import { unauthorized, json } from '@/lib/response'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; import { getWebsiteSession } from '@/queries/sql'; -import { parseRequest } from '@/lib/request'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/sessions/route.ts b/src/app/api/websites/[websiteId]/sessions/route.ts index 340774b2..ed4757a1 100644 --- a/src/app/api/websites/[websiteId]/sessions/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; -import { canViewWebsite } from '@/permissions'; +import { json, unauthorized } from '@/lib/response'; import { dateRangeParams, filterParams, pagingParams, searchParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getWebsiteSessions } from '@/queries/sql'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/sessions/stats/route.ts b/src/app/api/websites/[websiteId]/sessions/stats/route.ts index 8179bdb2..459830ed 100644 --- a/src/app/api/websites/[websiteId]/sessions/stats/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/stats/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; -import { parseRequest, getQueryFilters } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; -import { canViewWebsite } from '@/permissions'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { filterParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; import { getWebsiteSessionStats } from '@/queries/sql'; export async function GET( diff --git a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts index f3d17f94..b9ccf3ef 100644 --- a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts @@ -1,9 +1,9 @@ +import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { filterParams, timezoneParam } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; import { getWeeklyTraffic } from '@/queries/sql'; -import { z } from 'zod'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/stats/route.ts b/src/app/api/websites/[websiteId]/stats/route.ts index 8fcb0132..07c8b969 100644 --- a/src/app/api/websites/[websiteId]/stats/route.ts +++ b/src/app/api/websites/[websiteId]/stats/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { parseRequest, getQueryFilters } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; -import { canViewWebsite } from '@/permissions'; -import { dateRangeParams, filterParams } from '@/lib/schema'; -import { getWebsiteStats } from '@/queries/sql'; import { getCompareDate } from '@/lib/date'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { dateRangeParams, filterParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getWebsiteStats } from '@/queries/sql'; export async function GET( request: Request, diff --git a/src/app/api/websites/[websiteId]/transfer/route.ts b/src/app/api/websites/[websiteId]/transfer/route.ts index 8ae7a927..df2fed20 100644 --- a/src/app/api/websites/[websiteId]/transfer/route.ts +++ b/src/app/api/websites/[websiteId]/transfer/route.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; +import { parseRequest } from '@/lib/request'; +import { badRequest, json, unauthorized } from '@/lib/response'; import { canTransferWebsiteToTeam, canTransferWebsiteToUser } from '@/permissions'; import { updateWebsite } from '@/queries/prisma'; -import { parseRequest } from '@/lib/request'; -import { badRequest, unauthorized, json } from '@/lib/response'; export async function POST( request: Request, diff --git a/src/app/api/websites/[websiteId]/values/route.ts b/src/app/api/websites/[websiteId]/values/route.ts index 35983d04..172325e3 100644 --- a/src/app/api/websites/[websiteId]/values/route.ts +++ b/src/app/api/websites/[websiteId]/values/route.ts @@ -1,11 +1,11 @@ -import { canViewWebsite } from '@/permissions'; +import { z } from 'zod'; import { EVENT_COLUMNS, FILTER_COLUMNS, SEGMENT_TYPES, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; -import { getValues } from '@/queries/sql'; -import { getWebsiteSegments } from '@/queries/prisma'; -import { z } from 'zod'; import { dateRangeParams, fieldsParam, searchParams } from '@/lib/schema'; +import { canViewWebsite } from '@/permissions'; +import { getWebsiteSegments } from '@/queries/prisma'; +import { getValues } from '@/queries/sql'; export async function GET( request: Request, diff --git a/src/app/api/websites/route.ts b/src/app/api/websites/route.ts index 994e22bd..e2b26c10 100644 --- a/src/app/api/websites/route.ts +++ b/src/app/api/websites/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import redis from '@/lib/redis'; -import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; -import { json, unauthorized } from '@/lib/response'; import { uuid } from '@/lib/crypto'; +import redis from '@/lib/redis'; import { getQueryFilters, parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions'; import { createWebsite, getWebsiteCount } from '@/queries/prisma'; import { getAllUserWebsitesIncludingTeamOwner, getUserWebsites } from '@/queries/prisma/website'; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 745f6461..afcbfc60 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,5 @@ +import type { Metadata } from 'next'; import { Suspense } from 'react'; -import { Metadata } from 'next'; import { Providers } from './Providers'; import '@fontsource/inter/300.css'; import '@fontsource/inter/400.css'; diff --git a/src/app/login/LoginForm.tsx b/src/app/login/LoginForm.tsx index b151b94e..63711795 100644 --- a/src/app/login/LoginForm.tsx +++ b/src/app/login/LoginForm.tsx @@ -1,19 +1,19 @@ import { + Column, Form, FormButtons, FormField, FormSubmitButton, - TextField, - PasswordField, - Icon, - Column, Heading, + Icon, + PasswordField, + TextField, } from '@umami/react-zen'; import { useRouter } from 'next/navigation'; import { useMessages, useUpdateQuery } from '@/components/hooks'; -import { setUser } from '@/store/app'; -import { setClientAuthToken } from '@/lib/client'; import { Logo } from '@/components/svg'; +import { setClientAuthToken } from '@/lib/client'; +import { setUser } from '@/store/app'; export function LoginForm() { const { formatMessage, labels, getErrorMessage } = useMessages(); diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 8abf7a4e..ea27735a 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { LoginPage } from './LoginPage'; export default async function () { diff --git a/src/app/logout/LogoutPage.tsx b/src/app/logout/LogoutPage.tsx index d66d62a9..33e1615d 100644 --- a/src/app/logout/LogoutPage.tsx +++ b/src/app/logout/LogoutPage.tsx @@ -1,9 +1,9 @@ 'use client'; -import { useEffect } from 'react'; import { useRouter } from 'next/navigation'; +import { useEffect } from 'react'; import { useApi } from '@/components/hooks'; -import { setUser } from '@/store/app'; import { removeClientAuthToken } from '@/lib/client'; +import { setUser } from '@/store/app'; export function LogoutPage() { const router = useRouter(); diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx index 0617c2e2..20952788 100644 --- a/src/app/logout/page.tsx +++ b/src/app/logout/page.tsx @@ -1,4 +1,4 @@ -import { Metadata } from 'next'; +import type { Metadata } from 'next'; import { LogoutPage } from './LogoutPage'; export default function () { diff --git a/src/app/page.tsx b/src/app/page.tsx index 8bf748f9..38eda1de 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useEffect } from 'react'; import { redirect } from 'next/navigation'; -import { getItem, removeItem } from '@/lib/storage'; +import { useEffect } from 'react'; import { LAST_TEAM_CONFIG } from '@/lib/constants'; +import { getItem, removeItem } from '@/lib/storage'; export default function RootPage() { useEffect(() => { diff --git a/src/app/share/[...shareId]/Header.tsx b/src/app/share/[...shareId]/Header.tsx index ef4fe5ea..d7b7dcb4 100644 --- a/src/app/share/[...shareId]/Header.tsx +++ b/src/app/share/[...shareId]/Header.tsx @@ -1,4 +1,4 @@ -import { Row, Icon, Text, ThemeButton } from '@umami/react-zen'; +import { Icon, Row, Text, ThemeButton } from '@umami/react-zen'; import { LanguageButton } from '@/components/input/LanguageButton'; import { PreferencesButton } from '@/components/input/PreferencesButton'; import { Logo } from '@/components/svg'; @@ -6,7 +6,7 @@ import { Logo } from '@/components/svg'; export function Header() { return ( - + diff --git a/src/app/share/[...shareId]/SharePage.tsx b/src/app/share/[...shareId]/SharePage.tsx index f33798a1..55d3ee9f 100644 --- a/src/app/share/[...shareId]/SharePage.tsx +++ b/src/app/share/[...shareId]/SharePage.tsx @@ -1,12 +1,12 @@ 'use client'; import { Column } from '@umami/react-zen'; -import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; -import { WebsitePage } from '@/app/(main)/websites/[websiteId]/WebsitePage'; -import { useShareTokenQuery } from '@/components/hooks'; -import { PageBody } from '@/components/common/PageBody'; -import { Header } from './Header'; -import { Footer } from './Footer'; import { WebsiteHeader } from '@/app/(main)/websites/[websiteId]/WebsiteHeader'; +import { WebsitePage } from '@/app/(main)/websites/[websiteId]/WebsitePage'; +import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; +import { PageBody } from '@/components/common/PageBody'; +import { useShareTokenQuery } from '@/components/hooks'; +import { Footer } from './Footer'; +import { Header } from './Header'; export function SharePage({ shareId }) { const { shareToken, isLoading } = useShareTokenQuery(shareId); diff --git a/src/app/sso/SSOPage.tsx b/src/app/sso/SSOPage.tsx index ec04c090..3cc95093 100644 --- a/src/app/sso/SSOPage.tsx +++ b/src/app/sso/SSOPage.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useEffect } from 'react'; import { Loading } from '@umami/react-zen'; import { useRouter, useSearchParams } from 'next/navigation'; +import { useEffect } from 'react'; import { setClientAuthToken } from '@/lib/client'; export function SSOPage() { diff --git a/src/components/charts/BarChart.tsx b/src/components/charts/BarChart.tsx index 3f3efd3b..7bfc72d2 100644 --- a/src/components/charts/BarChart.tsx +++ b/src/components/charts/BarChart.tsx @@ -1,11 +1,11 @@ -import { useMemo, useState } from 'react'; import { useTheme } from '@umami/react-zen'; +import { useMemo, useState } from 'react'; +import { Chart, type ChartProps } from '@/components/charts/Chart'; import { ChartTooltip } from '@/components/charts/ChartTooltip'; -import { Chart, ChartProps } from '@/components/charts/Chart'; import { useLocale } from '@/components/hooks'; import { renderNumberLabels } from '@/lib/charts'; import { getThemeColors } from '@/lib/colors'; -import { formatDate, DATE_FORMATS } from '@/lib/date'; +import { DATE_FORMATS, formatDate } from '@/lib/date'; import { formatLongCurrency, formatLongNumber } from '@/lib/format'; const dateFormats = { @@ -52,7 +52,7 @@ export function BarChart({ const chartOptions: any = useMemo(() => { return { - __id: new Date().getTime(), + __id: Date.now(), scales: { x: { type: XAxisType, diff --git a/src/components/charts/BubbleChart.tsx b/src/components/charts/BubbleChart.tsx index 91c47b59..bf487ac0 100644 --- a/src/components/charts/BubbleChart.tsx +++ b/src/components/charts/BubbleChart.tsx @@ -1,5 +1,5 @@ -import { Chart, ChartProps } from '@/components/charts/Chart'; import { useState } from 'react'; +import { Chart, type ChartProps } from '@/components/charts/Chart'; import { ChartTooltip } from '@/components/charts/ChartTooltip'; export interface BubbleChartProps extends ChartProps { diff --git a/src/components/charts/Chart.tsx b/src/components/charts/Chart.tsx index b68e45a0..b6ae9d79 100644 --- a/src/components/charts/Chart.tsx +++ b/src/components/charts/Chart.tsx @@ -1,6 +1,11 @@ -import { useState, useRef, useEffect, useMemo } from 'react'; -import { Box, Column, BoxProps } from '@umami/react-zen'; -import ChartJS, { LegendItem, ChartOptions, ChartData, UpdateMode } from 'chart.js/auto'; +import { Box, type BoxProps, Column } from '@umami/react-zen'; +import ChartJS, { + type ChartData, + type ChartOptions, + type LegendItem, + type UpdateMode, +} from 'chart.js/auto'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { Legend } from '@/components/metrics/Legend'; import { DEFAULT_ANIMATION_DURATION } from '@/lib/constants'; diff --git a/src/components/charts/ChartTooltip.tsx b/src/components/charts/ChartTooltip.tsx index e93d669e..95ba2a2b 100644 --- a/src/components/charts/ChartTooltip.tsx +++ b/src/components/charts/ChartTooltip.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Column, Row, StatusLight, FloatingTooltip } from '@umami/react-zen'; +import { Column, FloatingTooltip, Row, StatusLight } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export function ChartTooltip({ title, diff --git a/src/components/charts/PieChart.tsx b/src/components/charts/PieChart.tsx index f9a9ea52..2470fe77 100644 --- a/src/components/charts/PieChart.tsx +++ b/src/components/charts/PieChart.tsx @@ -1,5 +1,5 @@ -import { Chart, ChartProps } from '@/components/charts/Chart'; import { useState } from 'react'; +import { Chart, type ChartProps } from '@/components/charts/Chart'; import { ChartTooltip } from '@/components/charts/ChartTooltip'; export interface PieChartProps extends ChartProps { diff --git a/src/components/common/ActionForm.tsx b/src/components/common/ActionForm.tsx index d9706475..c6f44e80 100644 --- a/src/components/common/ActionForm.tsx +++ b/src/components/common/ActionForm.tsx @@ -1,4 +1,4 @@ -import { Row, Column, Text } from '@umami/react-zen'; +import { Column, Row, Text } from '@umami/react-zen'; export function ActionForm({ label, description, children }) { return ( diff --git a/src/components/common/AnimatedDiv.tsx b/src/components/common/AnimatedDiv.tsx index 04a28c5b..f9948971 100644 --- a/src/components/common/AnimatedDiv.tsx +++ b/src/components/common/AnimatedDiv.tsx @@ -1,3 +1,3 @@ -import { animated, AnimatedComponent } from '@react-spring/web'; +import { type AnimatedComponent, animated } from '@react-spring/web'; export const AnimatedDiv: AnimatedComponent = animated.div; diff --git a/src/components/common/Avatar.tsx b/src/components/common/Avatar.tsx index f8ed7c94..9b198b30 100644 --- a/src/components/common/Avatar.tsx +++ b/src/components/common/Avatar.tsx @@ -1,6 +1,6 @@ -import { useMemo } from 'react'; -import { createAvatar } from '@dicebear/core'; import { lorelei } from '@dicebear/collection'; +import { createAvatar } from '@dicebear/core'; +import { useMemo } from 'react'; import { getColor, getPastel } from '@/lib/colors'; const lib = lorelei; diff --git a/src/components/common/ConfirmationForm.tsx b/src/components/common/ConfirmationForm.tsx index ce82b54f..b909ef58 100644 --- a/src/components/common/ConfirmationForm.tsx +++ b/src/components/common/ConfirmationForm.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Box, Button, FormSubmitButton, Form, FormButtons } from '@umami/react-zen'; +import { Box, Button, Form, FormButtons, FormSubmitButton } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { useMessages } from '@/components/hooks'; export interface ConfirmationFormProps { diff --git a/src/components/common/DataGrid.tsx b/src/components/common/DataGrid.tsx index 4d09135f..7e07b8dc 100644 --- a/src/components/common/DataGrid.tsx +++ b/src/components/common/DataGrid.tsx @@ -1,18 +1,18 @@ +import type { UseQueryResult } from '@tanstack/react-query'; +import { Column, Row, SearchField } from '@umami/react-zen'; import { - ReactNode, - useState, - useCallback, - ReactElement, cloneElement, isValidElement, + type ReactElement, + type ReactNode, + useCallback, + useState, } from 'react'; -import { SearchField, Row, Column } from '@umami/react-zen'; -import { UseQueryResult } from '@tanstack/react-query'; -import { useMessages, useMobile, useNavigation } from '@/components/hooks'; -import { Pager } from '@/components/common/Pager'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { PageResult } from '@/lib/types'; import { Empty } from '@/components/common/Empty'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Pager } from '@/components/common/Pager'; +import { useMessages, useMobile, useNavigation } from '@/components/hooks'; +import type { PageResult } from '@/lib/types'; const DEFAULT_SEARCH_DELAY = 600; diff --git a/src/components/common/DateDisplay.tsx b/src/components/common/DateDisplay.tsx index ea94d727..0bece8ae 100644 --- a/src/components/common/DateDisplay.tsx +++ b/src/components/common/DateDisplay.tsx @@ -15,7 +15,7 @@ export function DateDisplay({ startDate, endDate }) { {isSingleDate ? ( - <>{formatDate(startDate, 'PP', locale)} + formatDate(startDate, 'PP', locale) ) : ( <> {formatDate(startDate, 'PP', locale)} diff --git a/src/components/common/EmptyPlaceholder.tsx b/src/components/common/EmptyPlaceholder.tsx index 16f6cb90..64492e04 100644 --- a/src/components/common/EmptyPlaceholder.tsx +++ b/src/components/common/EmptyPlaceholder.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Icon, Text, Column } from '@umami/react-zen'; +import { Column, Icon, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export interface EmptyPlaceholderProps { title?: string; diff --git a/src/components/common/ErrorBoundary.tsx b/src/components/common/ErrorBoundary.tsx index acb979ed..4c0c82ed 100644 --- a/src/components/common/ErrorBoundary.tsx +++ b/src/components/common/ErrorBoundary.tsx @@ -1,6 +1,6 @@ -import { ErrorInfo, ReactNode } from 'react'; -import { ErrorBoundary as Boundary } from 'react-error-boundary'; import { Button, Column } from '@umami/react-zen'; +import type { ErrorInfo, ReactNode } from 'react'; +import { ErrorBoundary as Boundary } from 'react-error-boundary'; import { useMessages } from '@/components/hooks'; const logError = (error: Error, info: ErrorInfo) => { diff --git a/src/components/common/ErrorMessage.tsx b/src/components/common/ErrorMessage.tsx index 6bf9003c..3c301513 100644 --- a/src/components/common/ErrorMessage.tsx +++ b/src/components/common/ErrorMessage.tsx @@ -1,4 +1,4 @@ -import { Icon, Text, Row } from '@umami/react-zen'; +import { Icon, Row, Text } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; import { AlertTriangle } from '@/components/icons'; diff --git a/src/components/common/ExternalLink.tsx b/src/components/common/ExternalLink.tsx index 330e972a..6b6dbb99 100644 --- a/src/components/common/ExternalLink.tsx +++ b/src/components/common/ExternalLink.tsx @@ -1,5 +1,5 @@ -import Link from 'next/link'; import { Icon, Row, Text } from '@umami/react-zen'; +import Link from 'next/link'; import { ExternalLink as LinkIcon } from '@/components/icons'; export function ExternalLink({ href, children, ...props }) { diff --git a/src/components/common/FilterLink.tsx b/src/components/common/FilterLink.tsx index 69e225b9..d719a37e 100644 --- a/src/components/common/FilterLink.tsx +++ b/src/components/common/FilterLink.tsx @@ -1,6 +1,6 @@ -import { HTMLAttributes, ReactNode, useState } from 'react'; -import Link from 'next/link'; import { Icon, Row, Text } from '@umami/react-zen'; +import Link from 'next/link'; +import { type HTMLAttributes, type ReactNode, useState } from 'react'; import { useMessages, useNavigation } from '@/components/hooks'; import { ExternalLink } from '@/components/icons'; diff --git a/src/components/common/FilterRecord.tsx b/src/components/common/FilterRecord.tsx index c1ff59eb..04002648 100644 --- a/src/components/common/FilterRecord.tsx +++ b/src/components/common/FilterRecord.tsx @@ -1,9 +1,9 @@ +import { Button, Column, Grid, Icon, Label, ListItem, Select, TextField } from '@umami/react-zen'; import { useState } from 'react'; -import { Grid, Column, TextField, Label, Select, Icon, Button, ListItem } from '@umami/react-zen'; +import { Empty } from '@/components/common/Empty'; import { useFilters, useFormat, useWebsiteValuesQuery } from '@/components/hooks'; import { X } from '@/components/icons'; import { isSearchOperator } from '@/lib/params'; -import { Empty } from '@/components/common/Empty'; export interface FilterRecordProps { websiteId: string; diff --git a/src/components/common/LinkButton.tsx b/src/components/common/LinkButton.tsx index 251f7762..682970e8 100644 --- a/src/components/common/LinkButton.tsx +++ b/src/components/common/LinkButton.tsx @@ -1,6 +1,6 @@ -import { ReactNode } from 'react'; +import { Button, type ButtonProps } from '@umami/react-zen'; import Link from 'next/link'; -import { Button, ButtonProps } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { useLocale } from '@/components/hooks'; export interface LinkButtonProps extends ButtonProps { diff --git a/src/components/common/LoadingPanel.tsx b/src/components/common/LoadingPanel.tsx index c781bd90..fb37e140 100644 --- a/src/components/common/LoadingPanel.tsx +++ b/src/components/common/LoadingPanel.tsx @@ -1,7 +1,7 @@ -import { ReactNode } from 'react'; -import { Loading, Column, type ColumnProps } from '@umami/react-zen'; -import { ErrorMessage } from '@/components/common/ErrorMessage'; +import { Column, type ColumnProps, Loading } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { Empty } from '@/components/common/Empty'; +import { ErrorMessage } from '@/components/common/ErrorMessage'; export interface LoadingPanelProps extends ColumnProps { data?: any; diff --git a/src/components/common/PageBody.tsx b/src/components/common/PageBody.tsx index a05224f0..f07e589b 100644 --- a/src/components/common/PageBody.tsx +++ b/src/components/common/PageBody.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ReactNode } from 'react'; -import { AlertBanner, Loading, Column, ColumnProps } from '@umami/react-zen'; +import { AlertBanner, Column, type ColumnProps, Loading } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { useMessages } from '@/components/hooks'; const DEFAULT_WIDTH = '1320px'; diff --git a/src/components/common/PageHeader.tsx b/src/components/common/PageHeader.tsx index 12b1a644..b4605150 100644 --- a/src/components/common/PageHeader.tsx +++ b/src/components/common/PageHeader.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Heading, Icon, Row, Text, Column, Grid } from '@umami/react-zen'; +import { Column, Grid, Heading, Icon, Row, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export function PageHeader({ title, diff --git a/src/components/common/Panel.tsx b/src/components/common/Panel.tsx index da901d41..bb667465 100644 --- a/src/components/common/Panel.tsx +++ b/src/components/common/Panel.tsx @@ -1,16 +1,16 @@ -import { useState } from 'react'; import { + Button, Column, type ColumnProps, - Row, - Icon, - Button, - TooltipTrigger, - Tooltip, Heading, + Icon, + Row, + Tooltip, + TooltipTrigger, } from '@umami/react-zen'; -import { Maximize, X } from '@/components/icons'; +import { useState } from 'react'; import { useMessages } from '@/components/hooks'; +import { Maximize, X } from '@/components/icons'; export interface PanelProps extends ColumnProps { title?: string; diff --git a/src/components/common/SectionHeader.tsx b/src/components/common/SectionHeader.tsx index baaaa8b9..5b911efb 100644 --- a/src/components/common/SectionHeader.tsx +++ b/src/components/common/SectionHeader.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Heading, Icon, Row, Text, RowProps } from '@umami/react-zen'; +import { Heading, Icon, Row, type RowProps, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export function SectionHeader({ title, diff --git a/src/components/common/SideMenu.tsx b/src/components/common/SideMenu.tsx index 429ec336..bdd24952 100644 --- a/src/components/common/SideMenu.tsx +++ b/src/components/common/SideMenu.tsx @@ -1,12 +1,12 @@ import { - Heading, - NavMenu, - NavMenuItem, - Row, Column, - NavMenuGroup, - NavMenuProps, + Heading, IconLabel, + NavMenu, + NavMenuGroup, + NavMenuItem, + type NavMenuProps, + Row, } from '@umami/react-zen'; import Link from 'next/link'; @@ -72,6 +72,7 @@ export function SideMenu({ ); } + return null; })} diff --git a/src/components/common/TypeConfirmationForm.tsx b/src/components/common/TypeConfirmationForm.tsx index a28dd3c1..1121fa7d 100644 --- a/src/components/common/TypeConfirmationForm.tsx +++ b/src/components/common/TypeConfirmationForm.tsx @@ -3,8 +3,8 @@ import { Form, FormButtons, FormField, - TextField, FormSubmitButton, + TextField, } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; diff --git a/src/components/common/TypeIcon.tsx b/src/components/common/TypeIcon.tsx index af2ce5d8..8894b3a9 100644 --- a/src/components/common/TypeIcon.tsx +++ b/src/components/common/TypeIcon.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; import { Row } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export function TypeIcon({ type, diff --git a/src/components/hooks/context/useLink.ts b/src/components/hooks/context/useLink.ts index 765b9f59..8766bbb6 100644 --- a/src/components/hooks/context/useLink.ts +++ b/src/components/hooks/context/useLink.ts @@ -1,5 +1,5 @@ -import { LinkContext } from '@/app/(main)/links/LinkProvider'; import { useContext } from 'react'; +import { LinkContext } from '@/app/(main)/links/LinkProvider'; export function useLink() { return useContext(LinkContext); diff --git a/src/components/hooks/context/usePixel.ts b/src/components/hooks/context/usePixel.ts index bb129c31..69cad6f5 100644 --- a/src/components/hooks/context/usePixel.ts +++ b/src/components/hooks/context/usePixel.ts @@ -1,5 +1,5 @@ -import { PixelContext } from '@/app/(main)/pixels/PixelProvider'; import { useContext } from 'react'; +import { PixelContext } from '@/app/(main)/pixels/PixelProvider'; export function usePixel() { return useContext(PixelContext); diff --git a/src/components/hooks/context/useTeam.ts b/src/components/hooks/context/useTeam.ts index 11b23daf..95ff4bee 100644 --- a/src/components/hooks/context/useTeam.ts +++ b/src/components/hooks/context/useTeam.ts @@ -1,5 +1,5 @@ -import { TeamContext } from '@/app/(main)/teams/TeamProvider'; import { useContext } from 'react'; +import { TeamContext } from '@/app/(main)/teams/TeamProvider'; export function useTeam() { return useContext(TeamContext); diff --git a/src/components/hooks/context/useUser.ts b/src/components/hooks/context/useUser.ts index dfdf67f1..fa97ea9d 100644 --- a/src/components/hooks/context/useUser.ts +++ b/src/components/hooks/context/useUser.ts @@ -1,5 +1,5 @@ -import { UserContext } from '@/app/(main)/admin/users/[userId]/UserProvider'; import { useContext } from 'react'; +import { UserContext } from '@/app/(main)/admin/users/[userId]/UserProvider'; export function useUser() { return useContext(UserContext); diff --git a/src/components/hooks/context/useWebsite.ts b/src/components/hooks/context/useWebsite.ts index eb731875..3d4be27f 100644 --- a/src/components/hooks/context/useWebsite.ts +++ b/src/components/hooks/context/useWebsite.ts @@ -1,5 +1,5 @@ -import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider'; import { useContext } from 'react'; +import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider'; export function useWebsite() { return useContext(WebsiteContext); diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts index 04c3e37d..e8e5c135 100644 --- a/src/components/hooks/index.ts +++ b/src/components/hooks/index.ts @@ -31,13 +31,13 @@ export * from './queries/useSessionDataValuesQuery'; export * from './queries/useShareTokenQuery'; export * from './queries/useTeamMembersQuery'; export * from './queries/useTeamQuery'; -export * from './queries/useTeamWebsitesQuery'; export * from './queries/useTeamsQuery'; +export * from './queries/useTeamWebsitesQuery'; export * from './queries/useUpdateQuery'; export * from './queries/useUserQuery'; +export * from './queries/useUsersQuery'; export * from './queries/useUserTeamsQuery'; export * from './queries/useUserWebsitesQuery'; -export * from './queries/useUsersQuery'; export * from './queries/useWebsiteCohortQuery'; export * from './queries/useWebsiteCohortsQuery'; export * from './queries/useWebsiteEventsQuery'; @@ -51,10 +51,10 @@ export * from './queries/useWebsiteSegmentsQuery'; export * from './queries/useWebsiteSessionQuery'; export * from './queries/useWebsiteSessionStatsQuery'; export * from './queries/useWebsiteSessionsQuery'; -export * from './queries/useWeeklyTrafficQuery'; export * from './queries/useWebsiteStatsQuery'; -export * from './queries/useWebsiteValuesQuery'; export * from './queries/useWebsitesQuery'; +export * from './queries/useWebsiteValuesQuery'; +export * from './queries/useWeeklyTrafficQuery'; // Regular hooks export * from './useApi'; diff --git a/src/components/hooks/queries/useActiveUsersQuery.ts b/src/components/hooks/queries/useActiveUsersQuery.ts index d0538dc7..42867c19 100644 --- a/src/components/hooks/queries/useActiveUsersQuery.ts +++ b/src/components/hooks/queries/useActiveUsersQuery.ts @@ -1,5 +1,5 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { ReactQueryOptions } from '@/lib/types'; export function useActyiveUsersQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useDateRangeQuery.ts b/src/components/hooks/queries/useDateRangeQuery.ts index 32b5cd46..84b7eec7 100644 --- a/src/components/hooks/queries/useDateRangeQuery.ts +++ b/src/components/hooks/queries/useDateRangeQuery.ts @@ -1,5 +1,5 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { ReactQueryOptions } from '@/lib/types'; type DateRange = { startDate?: string; diff --git a/src/components/hooks/queries/useEventDataEventsQuery.ts b/src/components/hooks/queries/useEventDataEventsQuery.ts index 26a825e3..1401989f 100644 --- a/src/components/hooks/queries/useEventDataEventsQuery.ts +++ b/src/components/hooks/queries/useEventDataEventsQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useEventDataEventsQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useEventDataPropertiesQuery.ts b/src/components/hooks/queries/useEventDataPropertiesQuery.ts index 74dd58ef..dfa6e929 100644 --- a/src/components/hooks/queries/useEventDataPropertiesQuery.ts +++ b/src/components/hooks/queries/useEventDataPropertiesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useEventDataPropertiesQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useEventDataQuery.ts b/src/components/hooks/queries/useEventDataQuery.ts index 5e21081a..2ccbd634 100644 --- a/src/components/hooks/queries/useEventDataQuery.ts +++ b/src/components/hooks/queries/useEventDataQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useEventDataQuery(websiteId: string, eventId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useEventDataValuesQuery.ts b/src/components/hooks/queries/useEventDataValuesQuery.ts index 18bb6b2e..6529e142 100644 --- a/src/components/hooks/queries/useEventDataValuesQuery.ts +++ b/src/components/hooks/queries/useEventDataValuesQuery.ts @@ -1,4 +1,4 @@ -import { ReactQueryOptions } from '@/lib/types'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; diff --git a/src/components/hooks/queries/useLinksQuery.ts b/src/components/hooks/queries/useLinksQuery.ts index 93de47dc..ebf945fb 100644 --- a/src/components/hooks/queries/useLinksQuery.ts +++ b/src/components/hooks/queries/useLinksQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; -import { ReactQueryOptions } from '@/lib/types'; +import { usePagedQuery } from '../usePagedQuery'; export function useLinksQuery({ teamId }: { teamId?: string }, options?: ReactQueryOptions) { const { modified } = useModified('links'); diff --git a/src/components/hooks/queries/useLoginQuery.ts b/src/components/hooks/queries/useLoginQuery.ts index e800621a..a64b7844 100644 --- a/src/components/hooks/queries/useLoginQuery.ts +++ b/src/components/hooks/queries/useLoginQuery.ts @@ -1,4 +1,4 @@ -import { useApp, setUser } from '@/store/app'; +import { setUser, useApp } from '@/store/app'; import { useApi } from '../useApi'; const selector = (state: { user: any }) => state.user; diff --git a/src/components/hooks/queries/usePixelsQuery.ts b/src/components/hooks/queries/usePixelsQuery.ts index 466b13d0..c431179b 100644 --- a/src/components/hooks/queries/usePixelsQuery.ts +++ b/src/components/hooks/queries/usePixelsQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; -import { ReactQueryOptions } from '@/lib/types'; +import { usePagedQuery } from '../usePagedQuery'; export function usePixelsQuery({ teamId }: { teamId?: string }, options?: ReactQueryOptions) { const { modified } = useModified('pixels'); diff --git a/src/components/hooks/queries/useRealtimeQuery.ts b/src/components/hooks/queries/useRealtimeQuery.ts index 9e20da04..1a5bd1c5 100644 --- a/src/components/hooks/queries/useRealtimeQuery.ts +++ b/src/components/hooks/queries/useRealtimeQuery.ts @@ -1,6 +1,6 @@ import { REALTIME_INTERVAL } from '@/lib/constants'; +import type { RealtimeData } from '@/lib/types'; import { useApi } from '../useApi'; -import { RealtimeData } from '@/lib/types'; export function useRealtimeQuery(websiteId: string) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useReportsQuery.ts b/src/components/hooks/queries/useReportsQuery.ts index fed15014..ba1bdd4d 100644 --- a/src/components/hooks/queries/useReportsQuery.ts +++ b/src/components/hooks/queries/useReportsQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; -import { ReactQueryOptions } from '@/lib/types'; +import { usePagedQuery } from '../usePagedQuery'; export function useReportsQuery( { websiteId, type }: { websiteId: string; type?: string }, diff --git a/src/components/hooks/queries/useResultQuery.ts b/src/components/hooks/queries/useResultQuery.ts index 7b7a7bd1..c6fce128 100644 --- a/src/components/hooks/queries/useResultQuery.ts +++ b/src/components/hooks/queries/useResultQuery.ts @@ -1,7 +1,7 @@ +import { useDateParameters } from '@/components/hooks/useDateParameters'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useFilterParameters } from '../useFilterParameters'; -import { ReactQueryOptions } from '@/lib/types'; -import { useDateParameters } from '@/components/hooks/useDateParameters'; export function useResultQuery( type: string, diff --git a/src/components/hooks/queries/useSessionDataPropertiesQuery.ts b/src/components/hooks/queries/useSessionDataPropertiesQuery.ts index 975c728a..ac651bb9 100644 --- a/src/components/hooks/queries/useSessionDataPropertiesQuery.ts +++ b/src/components/hooks/queries/useSessionDataPropertiesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useSessionDataPropertiesQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useSessionDataValuesQuery.ts b/src/components/hooks/queries/useSessionDataValuesQuery.ts index 7df35938..d5e180bb 100644 --- a/src/components/hooks/queries/useSessionDataValuesQuery.ts +++ b/src/components/hooks/queries/useSessionDataValuesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useSessionDataValuesQuery( websiteId: string, diff --git a/src/components/hooks/queries/useShareTokenQuery.ts b/src/components/hooks/queries/useShareTokenQuery.ts index 122dc484..dbad3dcd 100644 --- a/src/components/hooks/queries/useShareTokenQuery.ts +++ b/src/components/hooks/queries/useShareTokenQuery.ts @@ -1,4 +1,4 @@ -import { useApp, setShareToken } from '@/store/app'; +import { setShareToken, useApp } from '@/store/app'; import { useApi } from '../useApi'; const selector = (state: { shareToken: string }) => state.shareToken; diff --git a/src/components/hooks/queries/useTeamMembersQuery.ts b/src/components/hooks/queries/useTeamMembersQuery.ts index 87956ed0..6f6f815c 100644 --- a/src/components/hooks/queries/useTeamMembersQuery.ts +++ b/src/components/hooks/queries/useTeamMembersQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; +import { usePagedQuery } from '../usePagedQuery'; export function useTeamMembersQuery(teamId: string) { const { get } = useApi(); diff --git a/src/components/hooks/queries/useTeamQuery.ts b/src/components/hooks/queries/useTeamQuery.ts index 1ba1a6ea..c076a6aa 100644 --- a/src/components/hooks/queries/useTeamQuery.ts +++ b/src/components/hooks/queries/useTeamQuery.ts @@ -1,7 +1,7 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; export function useTeamQuery(teamId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useTeamWebsitesQuery.ts b/src/components/hooks/queries/useTeamWebsitesQuery.ts index 892cc848..ffe601bf 100644 --- a/src/components/hooks/queries/useTeamWebsitesQuery.ts +++ b/src/components/hooks/queries/useTeamWebsitesQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; +import { usePagedQuery } from '../usePagedQuery'; export function useTeamWebsitesQuery(teamId: string) { const { get } = useApi(); diff --git a/src/components/hooks/queries/useTeamsQuery.ts b/src/components/hooks/queries/useTeamsQuery.ts index 6a0ecc34..f1a09f4d 100644 --- a/src/components/hooks/queries/useTeamsQuery.ts +++ b/src/components/hooks/queries/useTeamsQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; -import { ReactQueryOptions } from '@/lib/types'; export function useTeamsQuery(params?: Record, options?: ReactQueryOptions) { const { get } = useApi(); diff --git a/src/components/hooks/queries/useUserQuery.ts b/src/components/hooks/queries/useUserQuery.ts index 2f3a15ca..07e23f08 100644 --- a/src/components/hooks/queries/useUserQuery.ts +++ b/src/components/hooks/queries/useUserQuery.ts @@ -1,7 +1,7 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; export function useUserQuery(userId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useUserWebsitesQuery.ts b/src/components/hooks/queries/useUserWebsitesQuery.ts index c6312700..f98eaffb 100644 --- a/src/components/hooks/queries/useUserWebsitesQuery.ts +++ b/src/components/hooks/queries/useUserWebsitesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; -import { ReactQueryOptions } from '@/lib/types'; +import { usePagedQuery } from '../usePagedQuery'; export function useUserWebsitesQuery( { userId, teamId }: { userId?: string; teamId?: string }, diff --git a/src/components/hooks/queries/useUsersQuery.ts b/src/components/hooks/queries/useUsersQuery.ts index 03e66ce0..d87900ba 100644 --- a/src/components/hooks/queries/useUsersQuery.ts +++ b/src/components/hooks/queries/useUsersQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; +import { usePagedQuery } from '../usePagedQuery'; export function useUsersQuery() { const { get } = useApi(); diff --git a/src/components/hooks/queries/useWebsiteCohortQuery.ts b/src/components/hooks/queries/useWebsiteCohortQuery.ts index 50ac76b3..975766e9 100644 --- a/src/components/hooks/queries/useWebsiteCohortQuery.ts +++ b/src/components/hooks/queries/useWebsiteCohortQuery.ts @@ -1,7 +1,7 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; export function useWebsiteCohortQuery( websiteId: string, diff --git a/src/components/hooks/queries/useWebsiteCohortsQuery.ts b/src/components/hooks/queries/useWebsiteCohortsQuery.ts index d1032fa2..e0cbf4ce 100644 --- a/src/components/hooks/queries/useWebsiteCohortsQuery.ts +++ b/src/components/hooks/queries/useWebsiteCohortsQuery.ts @@ -1,8 +1,8 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import { useFilterParameters } from '@/components/hooks/useFilterParameters'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; -import { useFilterParameters } from '@/components/hooks/useFilterParameters'; export function useWebsiteCohortsQuery( websiteId: string, diff --git a/src/components/hooks/queries/useWebsiteEventsQuery.ts b/src/components/hooks/queries/useWebsiteEventsQuery.ts index 9d89be52..fc4dad5b 100644 --- a/src/components/hooks/queries/useWebsiteEventsQuery.ts +++ b/src/components/hooks/queries/useWebsiteEventsQuery.ts @@ -1,8 +1,8 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; +import { useFilterParameters } from '../useFilterParameters'; import { usePagedQuery } from '../usePagedQuery'; -import { ReactQueryOptions } from '@/lib/types'; const EVENT_TYPES = { views: 1, diff --git a/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts index 5db85278..6c1d112d 100644 --- a/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts +++ b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export function useWebsiteEventsSeriesQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useWebsiteExpandedMetricsQuery.ts b/src/components/hooks/queries/useWebsiteExpandedMetricsQuery.ts index 89f95ada..b2e90199 100644 --- a/src/components/hooks/queries/useWebsiteExpandedMetricsQuery.ts +++ b/src/components/hooks/queries/useWebsiteExpandedMetricsQuery.ts @@ -1,8 +1,8 @@ import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export type WebsiteExpandedMetricsData = { name: string; diff --git a/src/components/hooks/queries/useWebsiteMetricsQuery.ts b/src/components/hooks/queries/useWebsiteMetricsQuery.ts index a5ec7ac9..67c5e4d4 100644 --- a/src/components/hooks/queries/useWebsiteMetricsQuery.ts +++ b/src/components/hooks/queries/useWebsiteMetricsQuery.ts @@ -1,5 +1,5 @@ -import { ReactQueryOptions } from '@/lib/types'; import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; diff --git a/src/components/hooks/queries/useWebsitePageviewsQuery.ts b/src/components/hooks/queries/useWebsitePageviewsQuery.ts index 6f471bab..b35c8200 100644 --- a/src/components/hooks/queries/useWebsitePageviewsQuery.ts +++ b/src/components/hooks/queries/useWebsitePageviewsQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; -import { ReactQueryOptions } from '@/lib/types'; +import { useFilterParameters } from '../useFilterParameters'; export interface WebsitePageviewsData { pageviews: { x: string; y: number }[]; diff --git a/src/components/hooks/queries/useWebsiteQuery.ts b/src/components/hooks/queries/useWebsiteQuery.ts index 044b2bac..b9a5533d 100644 --- a/src/components/hooks/queries/useWebsiteQuery.ts +++ b/src/components/hooks/queries/useWebsiteQuery.ts @@ -1,7 +1,7 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; export function useWebsiteQuery(websiteId: string, options?: ReactQueryOptions) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useWebsiteSegmentQuery.ts b/src/components/hooks/queries/useWebsiteSegmentQuery.ts index 07561622..1923fbd8 100644 --- a/src/components/hooks/queries/useWebsiteSegmentQuery.ts +++ b/src/components/hooks/queries/useWebsiteSegmentQuery.ts @@ -1,7 +1,7 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; export function useWebsiteSegmentQuery( websiteId: string, diff --git a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts index 1da72fc2..8d3af963 100644 --- a/src/components/hooks/queries/useWebsiteSegmentsQuery.ts +++ b/src/components/hooks/queries/useWebsiteSegmentsQuery.ts @@ -1,8 +1,8 @@ +import { keepPreviousData } from '@tanstack/react-query'; +import { useFilterParameters } from '@/components/hooks/useFilterParameters'; +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; import { useModified } from '../useModified'; -import { keepPreviousData } from '@tanstack/react-query'; -import { ReactQueryOptions } from '@/lib/types'; -import { useFilterParameters } from '@/components/hooks/useFilterParameters'; export function useWebsiteSegmentsQuery( websiteId: string, diff --git a/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts b/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts index 82a7c05f..bac9fc90 100644 --- a/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts +++ b/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { useFilterParameters } from '../useFilterParameters'; import { useDateParameters } from '../useDateParameters'; +import { useFilterParameters } from '../useFilterParameters'; export function useWebsiteSessionStatsQuery(websiteId: string, options?: Record) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/queries/useWebsiteStatsQuery.ts b/src/components/hooks/queries/useWebsiteStatsQuery.ts index 64304b1b..e9a0c48c 100644 --- a/src/components/hooks/queries/useWebsiteStatsQuery.ts +++ b/src/components/hooks/queries/useWebsiteStatsQuery.ts @@ -1,7 +1,7 @@ -import { UseQueryOptions } from '@tanstack/react-query'; +import type { UseQueryOptions } from '@tanstack/react-query'; +import { useDateParameters } from '@/components/hooks/useDateParameters'; import { useApi } from '../useApi'; import { useFilterParameters } from '../useFilterParameters'; -import { useDateParameters } from '@/components/hooks/useDateParameters'; export interface WebsiteStatsData { pageviews: number; diff --git a/src/components/hooks/queries/useWebsiteValuesQuery.ts b/src/components/hooks/queries/useWebsiteValuesQuery.ts index 7320e08c..1e097369 100644 --- a/src/components/hooks/queries/useWebsiteValuesQuery.ts +++ b/src/components/hooks/queries/useWebsiteValuesQuery.ts @@ -1,6 +1,6 @@ -import { useApi } from '../useApi'; import { useCountryNames } from '@/components/hooks/useCountryNames'; import { useRegionNames } from '@/components/hooks/useRegionNames'; +import { useApi } from '../useApi'; import { useLocale } from '../useLocale'; export function useWebsiteValuesQuery({ diff --git a/src/components/hooks/queries/useWebsitesQuery.ts b/src/components/hooks/queries/useWebsitesQuery.ts index 819b42a9..a7b66186 100644 --- a/src/components/hooks/queries/useWebsitesQuery.ts +++ b/src/components/hooks/queries/useWebsitesQuery.ts @@ -1,7 +1,7 @@ +import type { ReactQueryOptions } from '@/lib/types'; import { useApi } from '../useApi'; -import { usePagedQuery } from '../usePagedQuery'; import { useModified } from '../useModified'; -import { ReactQueryOptions } from '@/lib/types'; +import { usePagedQuery } from '../usePagedQuery'; export function useWebsitesQuery(params?: Record, options?: ReactQueryOptions) { const { get } = useApi(); diff --git a/src/components/hooks/queries/useWeeklyTrafficQuery.ts b/src/components/hooks/queries/useWeeklyTrafficQuery.ts index 27334738..a76ebb3d 100644 --- a/src/components/hooks/queries/useWeeklyTrafficQuery.ts +++ b/src/components/hooks/queries/useWeeklyTrafficQuery.ts @@ -1,7 +1,7 @@ -import { useApi } from '../useApi'; -import { useModified } from '../useModified'; -import { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '@/components/hooks/useFilterParameters'; +import { useApi } from '../useApi'; +import { useDateParameters } from '../useDateParameters'; +import { useModified } from '../useModified'; export function useWeeklyTrafficQuery(websiteId: string, params?: Record) { const { get, useQuery } = useApi(); diff --git a/src/components/hooks/useApi.ts b/src/components/hooks/useApi.ts index 994163ad..35cabd52 100644 --- a/src/components/hooks/useApi.ts +++ b/src/components/hooks/useApi.ts @@ -1,8 +1,8 @@ +import { useMutation, useQuery } from '@tanstack/react-query'; import { useCallback } from 'react'; -import { useQuery, useMutation } from '@tanstack/react-query'; import { getClientAuthToken } from '@/lib/client'; import { SHARE_TOKEN_HEADER } from '@/lib/constants'; -import { httpGet, httpPost, httpPut, httpDelete, FetchResponse } from '@/lib/fetch'; +import { type FetchResponse, httpDelete, httpGet, httpPost, httpPut } from '@/lib/fetch'; import { useApp } from '@/store/app'; const selector = (state: { shareToken: { token?: string } }) => state.shareToken; diff --git a/src/components/hooks/useConfig.ts b/src/components/hooks/useConfig.ts index 643b9cbc..c1cdcaf6 100644 --- a/src/components/hooks/useConfig.ts +++ b/src/components/hooks/useConfig.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react'; -import { useApp, setConfig } from '@/store/app'; import { useApi } from '@/components/hooks/useApi'; +import { setConfig, useApp } from '@/store/app'; export type Config = { cloudMode: boolean; diff --git a/src/components/hooks/useCountryNames.ts b/src/components/hooks/useCountryNames.ts index 45019ebf..1ec9fc13 100644 --- a/src/components/hooks/useCountryNames.ts +++ b/src/components/hooks/useCountryNames.ts @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useEffect, useState } from 'react'; import { httpGet } from '@/lib/fetch'; import enUS from '../../../public/intl/country/en-US.json'; diff --git a/src/components/hooks/useDateRange.ts b/src/components/hooks/useDateRange.ts index 7d388433..755f36ee 100644 --- a/src/components/hooks/useDateRange.ts +++ b/src/components/hooks/useDateRange.ts @@ -1,8 +1,8 @@ -import { useNavigation } from '@/components/hooks/useNavigation'; import { useMemo } from 'react'; -import { getCompareDate, getOffsetDateRange, parseDateRange } from '@/lib/date'; import { useLocale } from '@/components/hooks/useLocale'; +import { useNavigation } from '@/components/hooks/useNavigation'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; +import { getCompareDate, getOffsetDateRange, parseDateRange } from '@/lib/date'; import { getItem } from '@/lib/storage'; export function useDateRange(options: { ignoreOffset?: boolean; timezone?: string } = {}) { diff --git a/src/components/hooks/useEscapeKey.ts b/src/components/hooks/useEscapeKey.ts index f05ad769..cc1d3089 100644 --- a/src/components/hooks/useEscapeKey.ts +++ b/src/components/hooks/useEscapeKey.ts @@ -1,4 +1,4 @@ -import { useEffect, useCallback, KeyboardEvent } from 'react'; +import { type KeyboardEvent, useCallback, useEffect } from 'react'; export function useEscapeKey(handler: (event: KeyboardEvent) => void) { const escFunction = useCallback((event: KeyboardEvent) => { diff --git a/src/components/hooks/useFilters.ts b/src/components/hooks/useFilters.ts index 6115c1bf..850e2afb 100644 --- a/src/components/hooks/useFilters.ts +++ b/src/components/hooks/useFilters.ts @@ -1,8 +1,8 @@ import { FILTER_COLUMNS, OPERATORS } from '@/lib/constants'; import { safeDecodeURIComponent } from '@/lib/url'; +import { useFields } from './useFields'; import { useMessages } from './useMessages'; import { useNavigation } from './useNavigation'; -import { useFields } from './useFields'; export function useFilters() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/hooks/useFormat.ts b/src/components/hooks/useFormat.ts index 039959cd..896fa076 100644 --- a/src/components/hooks/useFormat.ts +++ b/src/components/hooks/useFormat.ts @@ -1,9 +1,9 @@ -import { useMessages } from './useMessages'; import { BROWSERS, OS_NAMES } from '@/lib/constants'; -import { useLocale } from './useLocale'; +import regions from '../../../public/iso-3166-2.json'; import { useCountryNames } from './useCountryNames'; import { useLanguageNames } from './useLanguageNames'; -import regions from '../../../public/iso-3166-2.json'; +import { useLocale } from './useLocale'; +import { useMessages } from './useMessages'; export function useFormat() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/hooks/useLanguageNames.ts b/src/components/hooks/useLanguageNames.ts index 6b79ac52..0cc03d7c 100644 --- a/src/components/hooks/useLanguageNames.ts +++ b/src/components/hooks/useLanguageNames.ts @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useEffect, useState } from 'react'; import { httpGet } from '@/lib/fetch'; import enUS from '../../../public/intl/language/en-US.json'; diff --git a/src/components/hooks/useLocale.ts b/src/components/hooks/useLocale.ts index 8d96fdde..3eb669e1 100644 --- a/src/components/hooks/useLocale.ts +++ b/src/components/hooks/useLocale.ts @@ -1,11 +1,11 @@ import { useEffect } from 'react'; -import { httpGet } from '@/lib/fetch'; -import { setItem } from '@/lib/storage'; import { LOCALE_CONFIG } from '@/lib/constants'; +import { httpGet } from '@/lib/fetch'; import { getDateLocale, getTextDirection } from '@/lib/lang'; -import { useApp, setLocale } from '@/store/app'; -import { useForceUpdate } from './useForceUpdate'; +import { setItem } from '@/lib/storage'; +import { setLocale, useApp } from '@/store/app'; import enUS from '../../../public/intl/country/en-US.json'; +import { useForceUpdate } from './useForceUpdate'; const messages = { 'en-US': enUS, diff --git a/src/components/hooks/useMessages.ts b/src/components/hooks/useMessages.ts index 42bbeb01..19f12d9a 100644 --- a/src/components/hooks/useMessages.ts +++ b/src/components/hooks/useMessages.ts @@ -1,5 +1,5 @@ -import { useIntl, FormattedMessage, type MessageDescriptor } from 'react-intl'; -import { messages, labels } from '@/components/messages'; +import { FormattedMessage, type MessageDescriptor, useIntl } from 'react-intl'; +import { labels, messages } from '@/components/messages'; type FormatMessage = ( descriptor: MessageDescriptor, @@ -30,9 +30,9 @@ export function useMessages(): UseMessages { return undefined; } - const code = error?.['code']; + const code = error?.code; - return code ? getMessage(code) : error?.['message'] || 'Unknown error'; + return code ? getMessage(code) : error?.message || 'Unknown error'; }; const formatMessage = ( diff --git a/src/components/hooks/useNavigation.ts b/src/components/hooks/useNavigation.ts index 1b725060..0a18ac7b 100644 --- a/src/components/hooks/useNavigation.ts +++ b/src/components/hooks/useNavigation.ts @@ -1,5 +1,5 @@ -import { useState, useEffect } from 'react'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; +import { useEffect, useState } from 'react'; import { buildPath } from '@/lib/url'; export function useNavigation() { diff --git a/src/components/hooks/usePagedQuery.ts b/src/components/hooks/usePagedQuery.ts index 726c7b22..c818de64 100644 --- a/src/components/hooks/usePagedQuery.ts +++ b/src/components/hooks/usePagedQuery.ts @@ -1,7 +1,7 @@ -import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; +import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; +import type { PageResult } from '@/lib/types'; import { useApi } from './useApi'; import { useNavigation } from './useNavigation'; -import { PageResult } from '@/lib/types'; export function usePagedQuery({ queryKey, diff --git a/src/components/hooks/useRegionNames.ts b/src/components/hooks/useRegionNames.ts index 746bd97e..57dcc416 100644 --- a/src/components/hooks/useRegionNames.ts +++ b/src/components/hooks/useRegionNames.ts @@ -1,5 +1,5 @@ -import { useCountryNames } from './useCountryNames'; import regions from '../../../public/iso-3166-2.json'; +import { useCountryNames } from './useCountryNames'; export function useRegionNames(locale: string) { const { countryNames } = useCountryNames(locale); diff --git a/src/components/hooks/useSticky.ts b/src/components/hooks/useSticky.ts index 8e6722ad..ef9fb36f 100644 --- a/src/components/hooks/useSticky.ts +++ b/src/components/hooks/useSticky.ts @@ -1,4 +1,4 @@ -import { useState, useEffect, useRef } from 'react'; +import { useEffect, useRef, useState } from 'react'; export function useSticky({ enabled = true, threshold = 1 }) { const [isSticky, setIsSticky] = useState(false); diff --git a/src/components/hooks/useTimezone.ts b/src/components/hooks/useTimezone.ts index 22a34194..ef255390 100644 --- a/src/components/hooks/useTimezone.ts +++ b/src/components/hooks/useTimezone.ts @@ -1,9 +1,9 @@ -import { setItem } from '@/lib/storage'; +import { formatInTimeZone, utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'; import { TIMEZONE_CONFIG, TIMEZONE_LEGACY } from '@/lib/constants'; -import { formatInTimeZone, zonedTimeToUtc, utcToZonedTime } from 'date-fns-tz'; -import { useApp, setTimezone } from '@/store/app'; -import { useLocale } from './useLocale'; import { getTimezone } from '@/lib/date'; +import { setItem } from '@/lib/storage'; +import { setTimezone, useApp } from '@/store/app'; +import { useLocale } from './useLocale'; const selector = (state: { timezone: string }) => state.timezone; @@ -21,7 +21,7 @@ export function useTimezone() { return formatInTimeZone( /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{3})?Z$/.test(date) ? date - : date.split(' ').join('T') + 'Z', + : `${date.split(' ').join('T')}Z`, timezone, pattern, { locale: dateLocale }, diff --git a/src/components/input/ActionSelect.tsx b/src/components/input/ActionSelect.tsx index 3de118d2..616ee347 100644 --- a/src/components/input/ActionSelect.tsx +++ b/src/components/input/ActionSelect.tsx @@ -1,4 +1,4 @@ -import { Select, ListItem } from '@umami/react-zen'; +import { ListItem, Select } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; export interface ActionSelectProps { diff --git a/src/components/input/CurrencySelect.tsx b/src/components/input/CurrencySelect.tsx index be0cec7d..2b6045b4 100644 --- a/src/components/input/CurrencySelect.tsx +++ b/src/components/input/CurrencySelect.tsx @@ -1,7 +1,7 @@ -import { CURRENCIES } from '@/lib/constants'; import { ListItem, Select } from '@umami/react-zen'; import { useState } from 'react'; import { useMessages } from '@/components/hooks'; +import { CURRENCIES } from '@/lib/constants'; export function CurrencySelect({ value, onChange }) { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/DateFilter.tsx b/src/components/input/DateFilter.tsx index f72ea281..2e175298 100644 --- a/src/components/input/DateFilter.tsx +++ b/src/components/input/DateFilter.tsx @@ -1,9 +1,9 @@ -import { useState, Key, Fragment } from 'react'; -import { Modal, Select, ListItem, ListSeparator, Dialog, SelectProps } from '@umami/react-zen'; +import { Dialog, ListItem, ListSeparator, Modal, Select, type SelectProps } from '@umami/react-zen'; import { endOfYear } from 'date-fns'; -import { DatePickerForm } from '@/components/metrics/DatePickerForm'; -import { useMessages, useMobile } from '@/components/hooks'; +import { Fragment, type Key, useState } from 'react'; import { DateDisplay } from '@/components/common/DateDisplay'; +import { useMessages, useMobile } from '@/components/hooks'; +import { DatePickerForm } from '@/components/metrics/DatePickerForm'; import { parseDateRange } from '@/lib/date'; export interface DateFilterProps extends SelectProps { diff --git a/src/components/input/DialogButton.tsx b/src/components/input/DialogButton.tsx index a3a49252..7527226d 100644 --- a/src/components/input/DialogButton.tsx +++ b/src/components/input/DialogButton.tsx @@ -1,13 +1,13 @@ -import { CSSProperties, ReactNode } from 'react'; import { Button, - ButtonProps, - Modal, + type ButtonProps, Dialog, + type DialogProps, DialogTrigger, - DialogProps, IconLabel, + Modal, } from '@umami/react-zen'; +import type { CSSProperties, ReactNode } from 'react'; import { useMobile } from '@/components/hooks'; export interface DialogButtonProps extends Omit { diff --git a/src/components/input/DownloadButton.tsx b/src/components/input/DownloadButton.tsx index 9fd46c0b..5df3305d 100644 --- a/src/components/input/DownloadButton.tsx +++ b/src/components/input/DownloadButton.tsx @@ -1,7 +1,7 @@ +import { Button, Icon, Tooltip, TooltipTrigger } from '@umami/react-zen'; import Papa from 'papaparse'; -import { Button, Icon, TooltipTrigger, Tooltip } from '@umami/react-zen'; -import { Download } from '@/components/icons'; import { useMessages } from '@/components/hooks'; +import { Download } from '@/components/icons'; export function DownloadButton({ filename = 'data', diff --git a/src/components/input/ExportButton.tsx b/src/components/input/ExportButton.tsx index 15fb2124..7b65a57b 100644 --- a/src/components/input/ExportButton.tsx +++ b/src/components/input/ExportButton.tsx @@ -1,10 +1,10 @@ -import { useState } from 'react'; -import { Icon, Tooltip, TooltipTrigger, LoadingButton } from '@umami/react-zen'; -import { Download } from '@/components/icons'; -import { useMessages, useApi } from '@/components/hooks'; +import { Icon, LoadingButton, Tooltip, TooltipTrigger } from '@umami/react-zen'; import { useSearchParams } from 'next/navigation'; +import { useState } from 'react'; +import { useApi, useMessages } from '@/components/hooks'; import { useDateParameters } from '@/components/hooks/useDateParameters'; import { useFilterParameters } from '@/components/hooks/useFilterParameters'; +import { Download } from '@/components/icons'; export function ExportButton({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/FieldFilters.tsx b/src/components/input/FieldFilters.tsx index e61b9cc7..2174068f 100644 --- a/src/components/input/FieldFilters.tsx +++ b/src/components/input/FieldFilters.tsx @@ -1,22 +1,22 @@ -import { Key } from 'react'; -import { subMonths, endOfDay } from 'date-fns'; import { - Grid, + Button, Column, + Grid, + Icon, List, ListItem, - Row, - Button, - Popover, - MenuTrigger, Menu, MenuItem, - Icon, + MenuTrigger, + Popover, + Row, } from '@umami/react-zen'; +import { endOfDay, subMonths } from 'date-fns'; +import type { Key } from 'react'; +import { Empty } from '@/components/common/Empty'; +import { FilterRecord } from '@/components/common/FilterRecord'; import { useFields, useMessages, useMobile } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { FilterRecord } from '@/components/common/FilterRecord'; -import { Empty } from '@/components/common/Empty'; export interface FieldFiltersProps { websiteId: string; diff --git a/src/components/input/FilterBar.tsx b/src/components/input/FilterBar.tsx index b81f77e3..5a52e566 100644 --- a/src/components/input/FilterBar.tsx +++ b/src/components/input/FilterBar.tsx @@ -1,24 +1,24 @@ import { Button, - Icon, - Text, - Row, - TooltipTrigger, - Tooltip, - Modal, Dialog, DialogTrigger, + Icon, + Modal, + Row, + Text, + Tooltip, + TooltipTrigger, } from '@umami/react-zen'; +import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; import { - useNavigation, - useMessages, - useFormat, useFilters, + useFormat, + useMessages, + useNavigation, useWebsiteSegmentQuery, } from '@/components/hooks'; -import { X, Bookmark } from '@/components/icons'; +import { Bookmark, X } from '@/components/icons'; import { isSearchOperator } from '@/lib/params'; -import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; export function FilterBar({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/FilterButtons.tsx b/src/components/input/FilterButtons.tsx index 4340ad97..ff37fb19 100644 --- a/src/components/input/FilterButtons.tsx +++ b/src/components/input/FilterButtons.tsx @@ -1,5 +1,5 @@ +import { Box, ToggleGroup, ToggleGroupItem } from '@umami/react-zen'; import { useState } from 'react'; -import { ToggleGroup, ToggleGroupItem, Box } from '@umami/react-zen'; export interface FilterButtonsProps { items: { id: string; label: string }[]; diff --git a/src/components/input/FilterEditForm.tsx b/src/components/input/FilterEditForm.tsx index c69c69e5..44f43844 100644 --- a/src/components/input/FilterEditForm.tsx +++ b/src/components/input/FilterEditForm.tsx @@ -1,8 +1,8 @@ +import { Button, Column, Row, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; +import { useState } from 'react'; import { useFilters, useMessages, useMobile, useNavigation } from '@/components/hooks'; import { FieldFilters } from '@/components/input/FieldFilters'; import { SegmentFilters } from '@/components/input/SegmentFilters'; -import { Button, Column, Row, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; -import { useState } from 'react'; export interface FilterEditFormProps { websiteId?: string; diff --git a/src/components/input/LanguageButton.tsx b/src/components/input/LanguageButton.tsx index 6d43f11a..ac43dcb6 100644 --- a/src/components/input/LanguageButton.tsx +++ b/src/components/input/LanguageButton.tsx @@ -1,7 +1,7 @@ -import { Icon, Button, MenuTrigger, Popover, Grid, Text, Dialog } from '@umami/react-zen'; -import { languages } from '@/lib/lang'; -import { useLocale } from '@/components/hooks'; +import { Button, Dialog, Grid, Icon, MenuTrigger, Popover, Text } from '@umami/react-zen'; import { Globe } from 'lucide-react'; +import { useLocale } from '@/components/hooks'; +import { languages } from '@/lib/lang'; export function LanguageButton() { const { locale, saveLocale } = useLocale(); diff --git a/src/components/input/LookupField.tsx b/src/components/input/LookupField.tsx index 06b5006a..c1d419f7 100644 --- a/src/components/input/LookupField.tsx +++ b/src/components/input/LookupField.tsx @@ -1,6 +1,6 @@ -import { SetStateAction, useMemo, useState } from 'react'; +import { ComboBox, type ComboBoxProps, ListItem, Loading, useDebounce } from '@umami/react-zen'; import { endOfDay, subMonths } from 'date-fns'; -import { ComboBox, ListItem, Loading, useDebounce, ComboBoxProps } from '@umami/react-zen'; +import { type SetStateAction, useMemo, useState } from 'react'; import { Empty } from '@/components/common/Empty'; import { useMessages, useWebsiteValuesQuery } from '@/components/hooks'; diff --git a/src/components/input/MenuButton.tsx b/src/components/input/MenuButton.tsx index b861577c..bac307fe 100644 --- a/src/components/input/MenuButton.tsx +++ b/src/components/input/MenuButton.tsx @@ -1,5 +1,5 @@ -import { ReactNode, Key } from 'react'; -import { DialogTrigger, Button, Menu, Popover, Icon } from '@umami/react-zen'; +import { Button, DialogTrigger, Icon, Menu, Popover } from '@umami/react-zen'; +import type { Key, ReactNode } from 'react'; import { Ellipsis } from '@/components/icons'; export function MenuButton({ diff --git a/src/components/input/MobileMenuButton.tsx b/src/components/input/MobileMenuButton.tsx index bd32272d..5e59cbbb 100644 --- a/src/components/input/MobileMenuButton.tsx +++ b/src/components/input/MobileMenuButton.tsx @@ -1,4 +1,4 @@ -import { Dialog, DialogTrigger, Button, Icon, Modal, DialogProps } from '@umami/react-zen'; +import { Button, Dialog, type DialogProps, DialogTrigger, Icon, Modal } from '@umami/react-zen'; import { Menu } from '@/components/icons'; export function MobileMenuButton(props: DialogProps) { diff --git a/src/components/input/MonthSelect.tsx b/src/components/input/MonthSelect.tsx index efaf6a5e..241634ed 100644 --- a/src/components/input/MonthSelect.tsx +++ b/src/components/input/MonthSelect.tsx @@ -1,4 +1,4 @@ -import { Row, Select, ListItem } from '@umami/react-zen'; +import { ListItem, Row, Select } from '@umami/react-zen'; import { useLocale } from '@/components/hooks'; import { formatDate } from '@/lib/date'; diff --git a/src/components/input/NavButton.tsx b/src/components/input/NavButton.tsx index b57c2ecd..7ea966cc 100644 --- a/src/components/input/NavButton.tsx +++ b/src/components/input/NavButton.tsx @@ -1,18 +1,19 @@ import { - Text, + Column, Icon, + IconLabel, Menu, MenuItem, - MenuTrigger, MenuSection, MenuSeparator, - SubmenuTrigger, + MenuTrigger, Popover, - Row, - Column, Pressable, - IconLabel, + Row, + SubmenuTrigger, + Text, } from '@umami/react-zen'; +import { ArrowRight } from 'lucide-react'; import { useConfig, useLoginQuery, @@ -33,7 +34,6 @@ import { } from '@/components/icons'; import { Switch } from '@/components/svg'; import { DOCS_URL } from '@/lib/constants'; -import { ArrowRight } from 'lucide-react'; export interface TeamsButtonProps { showText?: boolean; diff --git a/src/components/input/PanelButton.tsx b/src/components/input/PanelButton.tsx index 2f768741..500c40c4 100644 --- a/src/components/input/PanelButton.tsx +++ b/src/components/input/PanelButton.tsx @@ -1,6 +1,6 @@ -import { Button, Icon, ButtonProps } from '@umami/react-zen'; -import { PanelLeft } from '@/components/icons'; +import { Button, type ButtonProps, Icon } from '@umami/react-zen'; import { useGlobalState } from '@/components/hooks'; +import { PanelLeft } from '@/components/icons'; export function PanelButton(props: ButtonProps) { const [isCollapsed, setIsCollapsed] = useGlobalState('sidenav-collapsed'); diff --git a/src/components/input/PreferencesButton.tsx b/src/components/input/PreferencesButton.tsx index 03092fe5..710a7fae 100644 --- a/src/components/input/PreferencesButton.tsx +++ b/src/components/input/PreferencesButton.tsx @@ -1,9 +1,9 @@ -import { Button, Icon, DialogTrigger, Popover, Column, Label } from '@umami/react-zen'; -import { TimezoneSetting } from '@/app/(main)/settings/preferences/TimezoneSetting'; +import { Button, Column, DialogTrigger, Icon, Label, Popover } from '@umami/react-zen'; import { DateRangeSetting } from '@/app/(main)/settings/preferences/DateRangeSetting'; -import { Settings } from '@/components/icons'; -import { useMessages } from '@/components/hooks'; +import { TimezoneSetting } from '@/app/(main)/settings/preferences/TimezoneSetting'; import { Panel } from '@/components/common/Panel'; +import { useMessages } from '@/components/hooks'; +import { Settings } from '@/components/icons'; export function PreferencesButton() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/ProfileButton.tsx b/src/components/input/ProfileButton.tsx index 03f14d07..505cd888 100644 --- a/src/components/input/ProfileButton.tsx +++ b/src/components/input/ProfileButton.tsx @@ -1,18 +1,18 @@ -import { Fragment } from 'react'; import { - Icon, Button, - MenuTrigger, - Popover, + Icon, Menu, MenuItem, - MenuSeparator, MenuSection, - Text, + MenuSeparator, + MenuTrigger, + Popover, Row, + Text, } from '@umami/react-zen'; -import { useMessages, useLoginQuery, useNavigation } from '@/components/hooks'; -import { LogOut, UserCircle, LockKeyhole } from '@/components/icons'; +import { Fragment } from 'react'; +import { useLoginQuery, useMessages, useNavigation } from '@/components/hooks'; +import { LockKeyhole, LogOut, UserCircle } from '@/components/icons'; export function ProfileButton() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/RefreshButton.tsx b/src/components/input/RefreshButton.tsx index 29b71986..b52f830e 100644 --- a/src/components/input/RefreshButton.tsx +++ b/src/components/input/RefreshButton.tsx @@ -1,8 +1,7 @@ -import { LoadingButton, Icon, Tooltip, TooltipTrigger } from '@umami/react-zen'; -import { setWebsiteDateRange } from '@/store/websites'; -import { useDateRange } from '@/components/hooks'; +import { Icon, LoadingButton, Tooltip, TooltipTrigger } from '@umami/react-zen'; +import { useDateRange, useMessages } from '@/components/hooks'; import { RefreshCw } from '@/components/icons'; -import { useMessages } from '@/components/hooks'; +import { setWebsiteDateRange } from '@/store/websites'; export function RefreshButton({ websiteId, diff --git a/src/components/input/ReportEditButton.tsx b/src/components/input/ReportEditButton.tsx index 8f0c7a3c..b333077a 100644 --- a/src/components/input/ReportEditButton.tsx +++ b/src/components/input/ReportEditButton.tsx @@ -1,6 +1,3 @@ -import { ReactNode, useState } from 'react'; -import { useMessages } from '@/components/hooks'; -import { useDeleteQuery } from '@/components/hooks/queries/useDeleteQuery'; import { AlertDialog, Button, @@ -10,9 +7,12 @@ import { MenuTrigger, Modal, Popover, - Text, Row, + Text, } from '@umami/react-zen'; +import { type ReactNode, useState } from 'react'; +import { useMessages } from '@/components/hooks'; +import { useDeleteQuery } from '@/components/hooks/queries/useDeleteQuery'; import { Edit, MoreHorizontal, Trash } from '@/components/icons'; export function ReportEditButton({ diff --git a/src/components/input/SegmentFilters.tsx b/src/components/input/SegmentFilters.tsx index d0906d67..f03a1dea 100644 --- a/src/components/input/SegmentFilters.tsx +++ b/src/components/input/SegmentFilters.tsx @@ -1,7 +1,7 @@ import { IconLabel, List, ListItem } from '@umami/react-zen'; -import { useWebsiteSegmentsQuery } from '@/components/hooks'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; import { Empty } from '@/components/common/Empty'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useWebsiteSegmentsQuery } from '@/components/hooks'; import { ChartPie, UserPlus } from '@/components/icons'; export interface SegmentFiltersProps { diff --git a/src/components/input/SegmentSaveButton.tsx b/src/components/input/SegmentSaveButton.tsx index f6cee0e1..5f6cac10 100644 --- a/src/components/input/SegmentSaveButton.tsx +++ b/src/components/input/SegmentSaveButton.tsx @@ -1,7 +1,7 @@ -import { Button, DialogTrigger, Modal, Text, Icon, Dialog } from '@umami/react-zen'; +import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; +import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; import { useMessages } from '@/components/hooks'; import { Plus } from '@/components/icons'; -import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; export function SegmentSaveButton({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/SettingsButton.tsx b/src/components/input/SettingsButton.tsx index 23ad91d3..bd51fb53 100644 --- a/src/components/input/SettingsButton.tsx +++ b/src/components/input/SettingsButton.tsx @@ -1,23 +1,23 @@ -import { Key } from 'react'; import { - Icon, Button, - MenuTrigger, - Popover, + Icon, Menu, MenuItem, - MenuSeparator, MenuSection, + MenuSeparator, + MenuTrigger, + Popover, } from '@umami/react-zen'; -import { useMessages, useLoginQuery, useNavigation, useConfig } from '@/components/hooks'; +import type { Key } from 'react'; +import { useConfig, useLoginQuery, useMessages, useNavigation } from '@/components/hooks'; import { - LogOut, - LockKeyhole, - Settings, - UserCircle, - LifeBuoy, BookText, ExternalLink, + LifeBuoy, + LockKeyhole, + LogOut, + Settings, + UserCircle, } from '@/components/icons'; import { DOCS_URL } from '@/lib/constants'; diff --git a/src/components/input/WebsiteDateFilter.tsx b/src/components/input/WebsiteDateFilter.tsx index dbe41f32..beb6f371 100644 --- a/src/components/input/WebsiteDateFilter.tsx +++ b/src/components/input/WebsiteDateFilter.tsx @@ -1,8 +1,8 @@ -import { useCallback, useMemo } from 'react'; -import { Button, Icon, Row, Text, Select, ListItem } from '@umami/react-zen'; +import { Button, Icon, ListItem, Row, Select, Text } from '@umami/react-zen'; import { isAfter } from 'date-fns'; -import { ChevronRight } from '@/components/icons'; +import { useCallback, useMemo } from 'react'; import { useDateRange, useDateRangeQuery, useMessages, useNavigation } from '@/components/hooks'; +import { ChevronRight } from '@/components/icons'; import { getDateRangeValue } from '@/lib/date'; import { DateFilter } from './DateFilter'; diff --git a/src/components/input/WebsiteFilterButton.tsx b/src/components/input/WebsiteFilterButton.tsx index 25f81af4..7db850a1 100644 --- a/src/components/input/WebsiteFilterButton.tsx +++ b/src/components/input/WebsiteFilterButton.tsx @@ -1,7 +1,7 @@ -import { ListFilter } from '@/components/icons'; -import { FilterEditForm } from '@/components/input/FilterEditForm'; -import { DialogButton } from '@/components/input/DialogButton'; import { useMessages, useNavigation } from '@/components/hooks'; +import { ListFilter } from '@/components/icons'; +import { DialogButton } from '@/components/input/DialogButton'; +import { FilterEditForm } from '@/components/input/FilterEditForm'; import { filtersArrayToObject } from '@/lib/params'; export function WebsiteFilterButton({ diff --git a/src/components/input/WebsiteSelect.tsx b/src/components/input/WebsiteSelect.tsx index 29ae040b..8d81eb9a 100644 --- a/src/components/input/WebsiteSelect.tsx +++ b/src/components/input/WebsiteSelect.tsx @@ -1,12 +1,12 @@ +import { ListItem, Row, Select, type SelectProps, Text } from '@umami/react-zen'; import { useState } from 'react'; -import { Select, SelectProps, ListItem, Text, Row } from '@umami/react-zen'; +import { Empty } from '@/components/common/Empty'; import { - useUserWebsitesQuery, - useMessages, useLoginQuery, + useMessages, + useUserWebsitesQuery, useWebsiteQuery, } from '@/components/hooks'; -import { Empty } from '@/components/common/Empty'; export function WebsiteSelect({ websiteId, @@ -28,7 +28,7 @@ export function WebsiteSelect({ { userId: user?.id, teamId }, { search, pageSize: 10, includeTeams }, ); - const listItems: { id: string; name: string }[] = data?.['data'] || []; + const listItems: { id: string; name: string }[] = data?.data || []; const handleSearch = (value: string) => { setSearch(value); diff --git a/src/components/metrics/ActiveUsers.tsx b/src/components/metrics/ActiveUsers.tsx index 0627020e..a7f6e604 100644 --- a/src/components/metrics/ActiveUsers.tsx +++ b/src/components/metrics/ActiveUsers.tsx @@ -1,6 +1,6 @@ +import { StatusLight, Text } from '@umami/react-zen'; import { useMemo } from 'react'; -import { Text, StatusLight } from '@umami/react-zen'; -import { useMessages, useActyiveUsersQuery } from '@/components/hooks'; +import { useActyiveUsersQuery, useMessages } from '@/components/hooks'; export function ActiveUsers({ websiteId, diff --git a/src/components/metrics/ChangeLabel.tsx b/src/components/metrics/ChangeLabel.tsx index 8ac41355..192f0ff2 100644 --- a/src/components/metrics/ChangeLabel.tsx +++ b/src/components/metrics/ChangeLabel.tsx @@ -1,5 +1,5 @@ -import { Icon, Text, Row, RowProps } from '@umami/react-zen'; -import { ReactNode } from 'react'; +import { Icon, Row, type RowProps, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { ArrowRight } from '@/components/icons'; const STYLES = { @@ -33,7 +33,7 @@ export function ChangeLabel({ } & RowProps) { const positive = value >= 0; const negative = value < 0; - const neutral = value === 0 || isNaN(value); + const neutral = value === 0 || Number.isNaN(value); const good = reverseColors ? negative : positive; const style = diff --git a/src/components/metrics/DatePickerForm.tsx b/src/components/metrics/DatePickerForm.tsx index 8094e30a..59d17093 100644 --- a/src/components/metrics/DatePickerForm.tsx +++ b/src/components/metrics/DatePickerForm.tsx @@ -1,6 +1,6 @@ +import { Button, Calendar, Column, Row, ToggleGroup, ToggleGroupItem } from '@umami/react-zen'; +import { endOfDay, isAfter, isBefore, isSameDay, startOfDay } from 'date-fns'; import { useState } from 'react'; -import { Button, Row, Column, Calendar, ToggleGroup, ToggleGroupItem } from '@umami/react-zen'; -import { isAfter, isBefore, isSameDay, startOfDay, endOfDay } from 'date-fns'; import { useMessages } from '@/components/hooks'; const FILTER_DAY = 'filter-day'; diff --git a/src/components/metrics/EventData.tsx b/src/components/metrics/EventData.tsx index cc11dea2..48d21c57 100644 --- a/src/components/metrics/EventData.tsx +++ b/src/components/metrics/EventData.tsx @@ -1,6 +1,6 @@ -import { Grid, Column, Text, Label } from '@umami/react-zen'; -import { useEventDataQuery } from '@/components/hooks'; +import { Column, Grid, Label, Text } from '@umami/react-zen'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useEventDataQuery } from '@/components/hooks'; export function EventData({ websiteId, eventId }: { websiteId: string; eventId: string }) { const { data, isLoading, error } = useEventDataQuery(websiteId, eventId); diff --git a/src/components/metrics/EventsChart.tsx b/src/components/metrics/EventsChart.tsx index 03ed6e29..3a53ba9a 100644 --- a/src/components/metrics/EventsChart.tsx +++ b/src/components/metrics/EventsChart.tsx @@ -1,4 +1,6 @@ -import { BarChart, BarChartProps } from '@/components/charts/BarChart'; +import { colord } from 'colord'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { BarChart, type BarChartProps } from '@/components/charts/BarChart'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, @@ -9,8 +11,6 @@ import { import { renderDateLabels } from '@/lib/charts'; import { CHART_COLORS } from '@/lib/constants'; import { generateTimeSeries } from '@/lib/date'; -import { colord } from 'colord'; -import { useCallback, useEffect, useMemo, useState } from 'react'; export interface EventsChartProps extends BarChartProps { websiteId: string; diff --git a/src/components/metrics/Legend.tsx b/src/components/metrics/Legend.tsx index 341ed647..63231919 100644 --- a/src/components/metrics/Legend.tsx +++ b/src/components/metrics/Legend.tsx @@ -1,6 +1,6 @@ import { Row, StatusLight, Text } from '@umami/react-zen'; +import type { LegendItem } from 'chart.js/auto'; import { colord } from 'colord'; -import { LegendItem } from 'chart.js/auto'; export function Legend({ items = [], diff --git a/src/components/metrics/ListTable.tsx b/src/components/metrics/ListTable.tsx index e76e0174..f233bfe7 100644 --- a/src/components/metrics/ListTable.tsx +++ b/src/components/metrics/ListTable.tsx @@ -1,7 +1,7 @@ -import { ReactNode } from 'react'; +import { config, useSpring } from '@react-spring/web'; +import { Column, Grid, Row, Text } from '@umami/react-zen'; +import type { ReactNode } from 'react'; import { FixedSizeList } from 'react-window'; -import { useSpring, config } from '@react-spring/web'; -import { Grid, Row, Column, Text } from '@umami/react-zen'; import { AnimatedDiv } from '@/components/common/AnimatedDiv'; import { Empty } from '@/components/common/Empty'; import { useMessages, useMobile } from '@/components/hooks'; @@ -105,7 +105,7 @@ const AnimatedRow = ({ }) => { const props = useSpring({ width: percent, - y: !isNaN(value) ? value : 0, + y: !Number.isNaN(value) ? value : 0, from: { width: 0, y: 0 }, config: animate ? config.default : { duration: 0 }, }); diff --git a/src/components/metrics/MetricCard.tsx b/src/components/metrics/MetricCard.tsx index 4b3577e8..d15bcf13 100644 --- a/src/components/metrics/MetricCard.tsx +++ b/src/components/metrics/MetricCard.tsx @@ -1,8 +1,8 @@ -import { Text, Column } from '@umami/react-zen'; import { useSpring } from '@react-spring/web'; -import { formatNumber } from '@/lib/format'; +import { Column, Text } from '@umami/react-zen'; import { AnimatedDiv } from '@/components/common/AnimatedDiv'; import { ChangeLabel } from '@/components/metrics/ChangeLabel'; +import { formatNumber } from '@/lib/format'; export interface MetricCardProps { value: number; diff --git a/src/components/metrics/MetricLabel.tsx b/src/components/metrics/MetricLabel.tsx index c755516c..31c331f5 100644 --- a/src/components/metrics/MetricLabel.tsx +++ b/src/components/metrics/MetricLabel.tsx @@ -1,14 +1,14 @@ import { Row } from '@umami/react-zen'; +import { Favicon } from '@/components/common/Favicon'; +import { FilterLink } from '@/components/common/FilterLink'; +import { TypeIcon } from '@/components/common/TypeIcon'; import { useCountryNames, + useFormat, useLocale, useMessages, useRegionNames, - useFormat, } from '@/components/hooks'; -import { FilterLink } from '@/components/common/FilterLink'; -import { TypeIcon } from '@/components/common/TypeIcon'; -import { Favicon } from '@/components/common/Favicon'; import { GROUPED_DOMAINS } from '@/lib/constants'; export interface MetricLabelProps { diff --git a/src/components/metrics/MetricsBar.tsx b/src/components/metrics/MetricsBar.tsx index 403cd2c2..850c6bc9 100644 --- a/src/components/metrics/MetricsBar.tsx +++ b/src/components/metrics/MetricsBar.tsx @@ -1,5 +1,5 @@ -import { ReactNode } from 'react'; -import { Grid, GridProps } from '@umami/react-zen'; +import { Grid, type GridProps } from '@umami/react-zen'; +import type { ReactNode } from 'react'; export interface MetricsBarProps extends GridProps { children?: ReactNode; diff --git a/src/components/metrics/MetricsExpandedTable.tsx b/src/components/metrics/MetricsExpandedTable.tsx index d35e61d0..f24c952d 100644 --- a/src/components/metrics/MetricsExpandedTable.tsx +++ b/src/components/metrics/MetricsExpandedTable.tsx @@ -1,12 +1,12 @@ -import { ReactNode, useState } from 'react'; import { Button, Column, DataColumn, DataTable, Icon, Row, SearchField } from '@umami/react-zen'; +import { type ReactNode, useState } from 'react'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages, useWebsiteExpandedMetricsQuery } from '@/components/hooks'; import { X } from '@/components/icons'; import { DownloadButton } from '@/components/input/DownloadButton'; -import { formatShortTime } from '@/lib/format'; import { MetricLabel } from '@/components/metrics/MetricLabel'; import { SESSION_COLUMNS } from '@/lib/constants'; +import { formatShortTime } from '@/lib/format'; export interface MetricsExpandedTableProps { websiteId: string; @@ -85,7 +85,7 @@ export function MetricsExpandedTable({ align="end" width="120px" > - {row => row?.['visitors']?.toLocaleString()} + {row => row?.visitors?.toLocaleString()} - {row => row?.['visits']?.toLocaleString()} + {row => row?.visits?.toLocaleString()} - {row => row?.['pageviews']?.toLocaleString()} + {row => row?.pageviews?.toLocaleString()} {showBounceDuration && [ {row => { - const n = (Math.min(row?.['visits'], row?.['bounces']) / row?.['visits']) * 100; - return Math.round(+n) + '%'; + const n = (Math.min(row?.visits, row?.bounces) / row?.visits) * 100; + return `${Math.round(+n)}%`; }} , @@ -125,7 +125,7 @@ export function MetricsExpandedTable({ width="120px" > {row => { - const n = row?.['totaltime'] / row?.['visits']; + const n = row?.totaltime / row?.visits; return `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`; }} , diff --git a/src/components/metrics/MetricsTable.tsx b/src/components/metrics/MetricsTable.tsx index 48b06f0b..e99bd216 100644 --- a/src/components/metrics/MetricsTable.tsx +++ b/src/components/metrics/MetricsTable.tsx @@ -1,12 +1,12 @@ +import { Grid, Icon, Row, Text } from '@umami/react-zen'; import { useEffect, useMemo } from 'react'; -import { Icon, Text, Row, Grid } from '@umami/react-zen'; import { LinkButton } from '@/components/common/LinkButton'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useMessages, useNavigation, useWebsiteMetricsQuery } from '@/components/hooks'; import { Maximize } from '@/components/icons'; import { MetricLabel } from '@/components/metrics/MetricLabel'; import { percentFilter } from '@/lib/filters'; -import { ListTable, ListTableProps } from './ListTable'; +import { ListTable, type ListTableProps } from './ListTable'; export interface MetricsTableProps extends ListTableProps { websiteId: string; diff --git a/src/components/metrics/PageviewsChart.tsx b/src/components/metrics/PageviewsChart.tsx index 8e713bb0..b83f8dc3 100644 --- a/src/components/metrics/PageviewsChart.tsx +++ b/src/components/metrics/PageviewsChart.tsx @@ -1,6 +1,6 @@ -import { useCallback, useMemo } from 'react'; import { useTheme } from '@umami/react-zen'; -import { BarChart, BarChartProps } from '@/components/charts/BarChart'; +import { useCallback, useMemo } from 'react'; +import { BarChart, type BarChartProps } from '@/components/charts/BarChart'; import { useLocale, useMessages } from '@/components/hooks'; import { renderDateLabels } from '@/lib/charts'; import { getThemeColors } from '@/lib/colors'; @@ -28,7 +28,7 @@ export function PageviewsChart({ data, unit, minDate, maxDate, ...props }: Pagev if (!data) return; return { - __id: new Date().getTime(), + __id: Date.now(), datasets: [ { type: 'bar', diff --git a/src/components/metrics/RealtimeChart.tsx b/src/components/metrics/RealtimeChart.tsx index a71c03c3..a43dcb42 100644 --- a/src/components/metrics/RealtimeChart.tsx +++ b/src/components/metrics/RealtimeChart.tsx @@ -1,9 +1,9 @@ +import { isBefore, startOfMinute, subMinutes } from 'date-fns'; import { useMemo, useRef } from 'react'; -import { startOfMinute, subMinutes, isBefore } from 'date-fns'; -import { PageviewsChart } from './PageviewsChart'; -import { DEFAULT_ANIMATION_DURATION, REALTIME_RANGE } from '@/lib/constants'; -import { RealtimeData } from '@/lib/types'; import { useTimezone } from '@/components/hooks'; +import { DEFAULT_ANIMATION_DURATION, REALTIME_RANGE } from '@/lib/constants'; +import type { RealtimeData } from '@/lib/types'; +import { PageviewsChart } from './PageviewsChart'; export interface RealtimeChartProps { data: RealtimeData; diff --git a/src/components/metrics/WeeklyTraffic.tsx b/src/components/metrics/WeeklyTraffic.tsx index 82d1c1c1..90e47c63 100644 --- a/src/components/metrics/WeeklyTraffic.tsx +++ b/src/components/metrics/WeeklyTraffic.tsx @@ -1,9 +1,8 @@ -import { Row, Grid, Text } from '@umami/react-zen'; -import { format, startOfDay, addHours } from 'date-fns'; -import { useLocale, useMessages, useWeeklyTrafficQuery } from '@/components/hooks'; +import { Focusable, Grid, Row, Text, Tooltip, TooltipTrigger } from '@umami/react-zen'; +import { addHours, format, startOfDay } from 'date-fns'; import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { useLocale, useMessages, useWeeklyTrafficQuery } from '@/components/hooks'; import { getDayOfWeekAsDate } from '@/lib/date'; -import { Focusable, Tooltip, TooltipTrigger } from '@umami/react-zen'; export function WeeklyTraffic({ websiteId }: { websiteId: string }) { const { data, isLoading, error } = useWeeklyTrafficQuery(websiteId); diff --git a/src/components/metrics/WorldMap.tsx b/src/components/metrics/WorldMap.tsx index b0936c0d..3c8fadb8 100644 --- a/src/components/metrics/WorldMap.tsx +++ b/src/components/metrics/WorldMap.tsx @@ -1,17 +1,17 @@ -import { FloatingTooltip, Column, useTheme, ColumnProps } from '@umami/react-zen'; -import { useState, useMemo } from 'react'; -import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps'; +import { Column, type ColumnProps, FloatingTooltip, useTheme } from '@umami/react-zen'; import { colord } from 'colord'; -import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants'; +import { useMemo, useState } from 'react'; +import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps'; import { - useWebsiteMetricsQuery, useCountryNames, useLocale, useMessages, + useWebsiteMetricsQuery, } from '@/components/hooks'; -import { formatLongNumber } from '@/lib/format'; -import { percentFilter } from '@/lib/filters'; import { getThemeColors } from '@/lib/colors'; +import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants'; +import { percentFilter } from '@/lib/filters'; +import { formatLongNumber } from '@/lib/format'; export interface WorldMapProps extends ColumnProps { websiteId?: string; diff --git a/src/components/svg/AddUser.tsx b/src/components/svg/AddUser.tsx index 1e8b298b..d1eb5095 100644 --- a/src/components/svg/AddUser.tsx +++ b/src/components/svg/AddUser.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgAddUser = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Bars.tsx b/src/components/svg/Bars.tsx index c9464f0f..1ce88f72 100644 --- a/src/components/svg/Bars.tsx +++ b/src/components/svg/Bars.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgBars = (props: SVGProps) => ( diff --git a/src/components/svg/Bolt.tsx b/src/components/svg/Bolt.tsx index 4a42189a..23b1e76b 100644 --- a/src/components/svg/Bolt.tsx +++ b/src/components/svg/Bolt.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgBolt = (props: SVGProps) => ( diff --git a/src/components/svg/Bookmark.tsx b/src/components/svg/Bookmark.tsx index a1606b0d..089f61fe 100644 --- a/src/components/svg/Bookmark.tsx +++ b/src/components/svg/Bookmark.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgBookmark = (props: SVGProps) => ( diff --git a/src/components/svg/Calendar.tsx b/src/components/svg/Calendar.tsx index df978310..dfb848a9 100644 --- a/src/components/svg/Calendar.tsx +++ b/src/components/svg/Calendar.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgCalendar = (props: SVGProps) => ( diff --git a/src/components/svg/Change.tsx b/src/components/svg/Change.tsx index 239b30b7..935a2f7a 100644 --- a/src/components/svg/Change.tsx +++ b/src/components/svg/Change.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgChange = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Compare.tsx b/src/components/svg/Compare.tsx index fef3f55f..3434461a 100644 --- a/src/components/svg/Compare.tsx +++ b/src/components/svg/Compare.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgCompare = (props: SVGProps) => ( diff --git a/src/components/svg/Dashboard.tsx b/src/components/svg/Dashboard.tsx index ca278040..5696244f 100644 --- a/src/components/svg/Dashboard.tsx +++ b/src/components/svg/Dashboard.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgDashboard = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Expand.tsx b/src/components/svg/Expand.tsx index 8cdb792b..a0f472e5 100644 --- a/src/components/svg/Expand.tsx +++ b/src/components/svg/Expand.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgExpand = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Flag.tsx b/src/components/svg/Flag.tsx index 8deaa958..34af943a 100644 --- a/src/components/svg/Flag.tsx +++ b/src/components/svg/Flag.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgFlag = (props: SVGProps) => ( diff --git a/src/components/svg/Funnel.tsx b/src/components/svg/Funnel.tsx index 05a24378..63cf47d7 100644 --- a/src/components/svg/Funnel.tsx +++ b/src/components/svg/Funnel.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgFunnel = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Globe.tsx b/src/components/svg/Globe.tsx index 5586c124..385017d4 100644 --- a/src/components/svg/Globe.tsx +++ b/src/components/svg/Globe.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgGlobe = (props: SVGProps) => ( diff --git a/src/components/svg/Lightbulb.tsx b/src/components/svg/Lightbulb.tsx index 9a16b5c4..8d86170e 100644 --- a/src/components/svg/Lightbulb.tsx +++ b/src/components/svg/Lightbulb.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgLightbulb = (props: SVGProps) => ( ) => ( ) => ( diff --git a/src/components/svg/Location.tsx b/src/components/svg/Location.tsx index b1b658dc..0fd7d165 100644 --- a/src/components/svg/Location.tsx +++ b/src/components/svg/Location.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgLocation = (props: SVGProps) => ( diff --git a/src/components/svg/Lock.tsx b/src/components/svg/Lock.tsx index 8f588cf0..2b62eb9e 100644 --- a/src/components/svg/Lock.tsx +++ b/src/components/svg/Lock.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgLock = (props: SVGProps) => ( diff --git a/src/components/svg/Logo.tsx b/src/components/svg/Logo.tsx index 79fa813c..eb9fdf5b 100644 --- a/src/components/svg/Logo.tsx +++ b/src/components/svg/Logo.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgLogo = (props: SVGProps) => ( ) => ( ) => ( ) => ( ) => ( diff --git a/src/components/svg/Network.tsx b/src/components/svg/Network.tsx index 32860aa7..15941a99 100644 --- a/src/components/svg/Network.tsx +++ b/src/components/svg/Network.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgNetwork = (props: SVGProps) => ( ) => ( ) => ( diff --git a/src/components/svg/Path.tsx b/src/components/svg/Path.tsx index c49b1b3f..7538ba44 100644 --- a/src/components/svg/Path.tsx +++ b/src/components/svg/Path.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgPath = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Pushpin.tsx b/src/components/svg/Pushpin.tsx index e82c60ef..d19e98ea 100644 --- a/src/components/svg/Pushpin.tsx +++ b/src/components/svg/Pushpin.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgPushpin = (props: SVGProps) => ( diff --git a/src/components/svg/Redo.tsx b/src/components/svg/Redo.tsx index af032d42..04c389f6 100644 --- a/src/components/svg/Redo.tsx +++ b/src/components/svg/Redo.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgRedo = (props: SVGProps) => ( diff --git a/src/components/svg/Reports.tsx b/src/components/svg/Reports.tsx index 27c73fe3..b5489668 100644 --- a/src/components/svg/Reports.tsx +++ b/src/components/svg/Reports.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgReports = (props: SVGProps) => ( diff --git a/src/components/svg/Security.tsx b/src/components/svg/Security.tsx index 97a4afca..d075a938 100644 --- a/src/components/svg/Security.tsx +++ b/src/components/svg/Security.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgSecurity = (props: SVGProps) => ( ) => ( diff --git a/src/components/svg/Sun.tsx b/src/components/svg/Sun.tsx index 26370988..61880f5c 100644 --- a/src/components/svg/Sun.tsx +++ b/src/components/svg/Sun.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgSun = (props: SVGProps) => ( diff --git a/src/components/svg/Switch.tsx b/src/components/svg/Switch.tsx index 2a12f393..0196d850 100644 --- a/src/components/svg/Switch.tsx +++ b/src/components/svg/Switch.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgSwitch = (props: SVGProps) => ( ) => ( ) => ( ) => ( diff --git a/src/components/svg/Website.tsx b/src/components/svg/Website.tsx index 8e11c7cb..20a18a49 100644 --- a/src/components/svg/Website.tsx +++ b/src/components/svg/Website.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import type { SVGProps } from 'react'; + const SvgWebsite = (props: SVGProps) => ( , diff --git a/src/lib/date.ts b/src/lib/date.ts index f0f54de4..3c1fd1b7 100644 --- a/src/lib/date.ts +++ b/src/lib/date.ts @@ -1,5 +1,3 @@ -import { getDateLocale } from '@/lib/lang'; -import { DateRange } from '@/lib/types'; import { addDays, addHours, @@ -40,6 +38,8 @@ import { subYears, } from 'date-fns'; import { utcToZonedTime } from 'date-fns-tz'; +import { getDateLocale } from '@/lib/lang'; +import type { DateRange } from '@/lib/types'; export const TIME_UNIT = { minute: 'minute', @@ -371,5 +371,5 @@ export function getMonthDateRangeValue(date: Date) { } export function isInvalidDate(date: any) { - return date instanceof Date && isNaN(date.getTime()); + return date instanceof Date && Number.isNaN(date.getTime()); } diff --git a/src/lib/db.ts b/src/lib/db.ts index 72a18c06..7b6e8368 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -5,12 +5,12 @@ export const KAFKA = 'kafka'; export const KAFKA_PRODUCER = 'kafka-producer'; // Fixes issue with converting bigint values -BigInt.prototype['toJSON'] = function () { +BigInt.prototype.toJSON = function () { return Number(this); }; export function getDatabaseType(url = process.env.DATABASE_URL) { - const type = url && url.split(':')[0]; + const type = url?.split(':')[0]; if (type === 'postgres') { return POSTGRESQL; diff --git a/src/lib/detect.ts b/src/lib/detect.ts index c5528465..f3301295 100644 --- a/src/lib/detect.ts +++ b/src/lib/detect.ts @@ -1,11 +1,11 @@ import path from 'node:path'; -import { UAParser } from 'ua-parser-js'; import { browserName, detectOS } from 'detect-browser'; -import isLocalhost from 'is-localhost-ip'; import ipaddr from 'ipaddr.js'; +import isLocalhost from 'is-localhost-ip'; import maxmind from 'maxmind'; +import { UAParser } from 'ua-parser-js'; +import { getIpAddress, stripPort } from '@/lib/ip'; import { safeDecodeURIComponent } from '@/lib/url'; -import { stripPort, getIpAddress } from '@/lib/ip'; const MAXMIND = 'maxmind'; @@ -145,6 +145,8 @@ export function hasBlockedIp(clientIp: string) { return true; } } + + return false; }); } diff --git a/src/lib/format.ts b/src/lib/format.ts index e5319b2a..52fd3048 100644 --- a/src/lib/format.ts +++ b/src/lib/format.ts @@ -77,7 +77,7 @@ export function stringToColor(str: string) { let color = '#'; for (let i = 0; i < 3; i++) { const value = (hash >> (i * 8)) & 0xff; - color += ('00' + value.toString(16)).slice(-2); + color += `00${value.toString(16)}`.slice(-2); } return color; } diff --git a/src/lib/kafka.ts b/src/lib/kafka.ts index a81f3d4b..1d60e1f2 100644 --- a/src/lib/kafka.ts +++ b/src/lib/kafka.ts @@ -1,8 +1,8 @@ -import { serializeError } from 'serialize-error'; +import type * as tls from 'node:tls'; import debug from 'debug'; -import { Kafka, Producer, RecordMetadata, SASLOptions, logLevel } from 'kafkajs'; +import { Kafka, logLevel, type Producer, type RecordMetadata, type SASLOptions } from 'kafkajs'; +import { serializeError } from 'serialize-error'; import { KAFKA, KAFKA_PRODUCER } from '@/lib/db'; -import * as tls from 'tls'; const log = debug('umami:kafka'); const CONNECT_TIMEOUT = 5000; diff --git a/src/lib/lang.ts b/src/lib/lang.ts index 96acc369..f874640c 100644 --- a/src/lib/lang.ts +++ b/src/lib/lang.ts @@ -1,23 +1,24 @@ import { arSA, be, - bn, bg, + bn, bs, + ca, cs, - sk, da, de, el, - enUS, enGB, + enUS, es, + faIR, fi, fr, - faIR, he, hi, hr, + hu, id, it, ja, @@ -33,18 +34,17 @@ import { ptBR, ro, ru, + sk, sl, sv, ta, th, tr, uk, + uz, + vi, zhCN, zhTW, - ca, - hu, - vi, - uz, } from 'date-fns/locale'; export const languages = { diff --git a/src/lib/load.ts b/src/lib/load.ts index a831bc16..d4d6c3c7 100644 --- a/src/lib/load.ts +++ b/src/lib/load.ts @@ -1,4 +1,4 @@ -import { Website, Session } from '@/generated/prisma/client'; +import type { Session, Website } from '@/generated/prisma/client'; import redis from '@/lib/redis'; import { getWebsite } from '@/queries/prisma'; import { getWebsiteSession } from '@/queries/sql'; diff --git a/src/lib/params.ts b/src/lib/params.ts index 7f383a2e..ab2d5866 100644 --- a/src/lib/params.ts +++ b/src/lib/params.ts @@ -1,5 +1,5 @@ import { FILTER_COLUMNS, OPERATORS } from '@/lib/constants'; -import { Filter, QueryFilters, QueryOptions } from '@/lib/types'; +import type { Filter, QueryFilters, QueryOptions } from '@/lib/types'; export function parseFilterValue(param: any) { if (typeof param === 'string') { diff --git a/src/lib/react.ts b/src/lib/react.ts index decc1d6f..668cdf1f 100644 --- a/src/lib/react.ts +++ b/src/lib/react.ts @@ -1,16 +1,16 @@ import { Children, cloneElement, - FC, + type FC, Fragment, isValidElement, - ReactElement, - ReactNode, + type ReactElement, + type ReactNode, } from 'react'; export function getFragmentChildren(children: ReactNode) { return (children as ReactElement)?.type === Fragment - ? (children as ReactElement).props['children'] + ? (children as ReactElement).props.children : children; } diff --git a/src/lib/request.ts b/src/lib/request.ts index 32db8e95..42c44904 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -16,7 +16,7 @@ export async function parseRequest( const url = new URL(request.url); let query = Object.fromEntries(url.searchParams); let body = await getJsonBody(request); - let error: () => void | undefined; + let error: () => undefined | undefined; let auth = null; if (schema) { diff --git a/src/lib/schema.ts b/src/lib/schema.ts index 24ef99c3..38f7339a 100644 --- a/src/lib/schema.ts +++ b/src/lib/schema.ts @@ -116,8 +116,8 @@ export const goalReportSchema = z.object({ property: z.string().optional(), }) .refine(data => { - if (data['type'] === 'event' && data['property']) { - return data['operator'] && data['property']; + if (data.type === 'event' && data.property) { + return data.operator && data.property; } return true; }), diff --git a/src/lib/types.ts b/src/lib/types.ts index e5d4ecc5..e727c87a 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,6 +1,6 @@ -import { UseQueryOptions } from '@tanstack/react-query'; -import { DATA_TYPE, ROLES, OPERATORS } from './constants'; -import { TIME_UNIT } from './date'; +import type { UseQueryOptions } from '@tanstack/react-query'; +import type { DATA_TYPE, OPERATORS, ROLES } from './constants'; +import type { TIME_UNIT } from './date'; export type ObjectValues = T[keyof T]; diff --git a/src/permissions/index.ts b/src/permissions/index.ts index d0f6b53d..a70808e6 100644 --- a/src/permissions/index.ts +++ b/src/permissions/index.ts @@ -2,5 +2,5 @@ export * from './link'; export * from './pixel'; export * from './report'; export * from './team'; -export * from './website'; export * from './user'; +export * from './website'; diff --git a/src/permissions/link.ts b/src/permissions/link.ts index 8a10d512..c027a0b6 100644 --- a/src/permissions/link.ts +++ b/src/permissions/link.ts @@ -1,7 +1,7 @@ -import { Auth } from '@/lib/types'; -import { getLink, getTeamUser } from '@/queries/prisma'; import { hasPermission } from '@/lib/auth'; import { PERMISSIONS } from '@/lib/constants'; +import type { Auth } from '@/lib/types'; +import { getLink, getTeamUser } from '@/queries/prisma'; export async function canViewLink({ user }: Auth, linkId: string) { if (user?.isAdmin) { diff --git a/src/permissions/pixel.ts b/src/permissions/pixel.ts index 95bf0228..2131874f 100644 --- a/src/permissions/pixel.ts +++ b/src/permissions/pixel.ts @@ -1,7 +1,7 @@ -import { Auth } from '@/lib/types'; -import { getPixel, getTeamUser } from '@/queries/prisma'; import { hasPermission } from '@/lib/auth'; import { PERMISSIONS } from '@/lib/constants'; +import type { Auth } from '@/lib/types'; +import { getPixel, getTeamUser } from '@/queries/prisma'; export async function canViewPixel({ user }: Auth, pixelId: string) { if (user?.isAdmin) { diff --git a/src/permissions/report.ts b/src/permissions/report.ts index d7270ed3..01b54769 100644 --- a/src/permissions/report.ts +++ b/src/permissions/report.ts @@ -1,5 +1,5 @@ -import { Auth } from '@/lib/types'; -import { Report } from '@/generated/prisma/client'; +import type { Report } from '@/generated/prisma/client'; +import type { Auth } from '@/lib/types'; import { canViewWebsite } from './website'; export async function canViewReport(auth: Auth, report: Report) { @@ -7,7 +7,7 @@ export async function canViewReport(auth: Auth, report: Report) { return true; } - if (auth.user.id == report.userId) { + if (auth.user.id === report.userId) { return true; } @@ -19,7 +19,7 @@ export async function canUpdateReport({ user }: Auth, report: Report) { return true; } - return user.id == report.userId; + return user.id === report.userId; } export async function canDeleteReport(auth: Auth, report: Report) { diff --git a/src/permissions/team.ts b/src/permissions/team.ts index a62eff2e..0f07c1a4 100644 --- a/src/permissions/team.ts +++ b/src/permissions/team.ts @@ -1,7 +1,7 @@ -import { Auth } from '@/lib/types'; -import { PERMISSIONS } from '@/lib/constants'; -import { getTeamUser } from '@/queries/prisma'; import { hasPermission } from '@/lib/auth'; +import { PERMISSIONS } from '@/lib/constants'; +import type { Auth } from '@/lib/types'; +import { getTeamUser } from '@/queries/prisma'; export async function canViewTeam({ user }: Auth, teamId: string) { if (user.isAdmin) { diff --git a/src/permissions/user.ts b/src/permissions/user.ts index c9a9a5f5..2ed8f276 100644 --- a/src/permissions/user.ts +++ b/src/permissions/user.ts @@ -1,4 +1,4 @@ -import { Auth } from '@/lib/types'; +import type { Auth } from '@/lib/types'; export async function canCreateUser({ user }: Auth) { return user.isAdmin; diff --git a/src/permissions/website.ts b/src/permissions/website.ts index 8bd81517..97952eed 100644 --- a/src/permissions/website.ts +++ b/src/permissions/website.ts @@ -1,6 +1,6 @@ -import { Auth } from '@/lib/types'; -import { PERMISSIONS } from '@/lib/constants'; import { hasPermission } from '@/lib/auth'; +import { PERMISSIONS } from '@/lib/constants'; +import type { Auth } from '@/lib/types'; import { getLink, getPixel, getTeamUser, getWebsite } from '@/queries/prisma'; export async function canViewWebsite({ user, shareToken }: Auth, websiteId: string) { diff --git a/src/queries/prisma/link.ts b/src/queries/prisma/link.ts index 95e202b0..9b971dec 100644 --- a/src/queries/prisma/link.ts +++ b/src/queries/prisma/link.ts @@ -1,6 +1,6 @@ -import { Prisma } from '@/generated/prisma/client'; +import type { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export async function findLink(criteria: Prisma.LinkFindUniqueArgs) { return prisma.client.link.findUnique(criteria); diff --git a/src/queries/prisma/report.ts b/src/queries/prisma/report.ts index c612864d..4a5b755c 100644 --- a/src/queries/prisma/report.ts +++ b/src/queries/prisma/report.ts @@ -1,6 +1,7 @@ import { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; + import ReportFindManyArgs = Prisma.ReportFindManyArgs; async function findReport(criteria: Prisma.ReportFindUniqueArgs) { diff --git a/src/queries/prisma/segment.ts b/src/queries/prisma/segment.ts index f5507a4b..3a17d273 100644 --- a/src/queries/prisma/segment.ts +++ b/src/queries/prisma/segment.ts @@ -1,6 +1,6 @@ +import type { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { Prisma } from '@/generated/prisma/client'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; async function findSegment(criteria: Prisma.SegmentFindUniqueArgs) { return prisma.client.segment.findUnique(criteria); diff --git a/src/queries/prisma/team.ts b/src/queries/prisma/team.ts index 64ae0ec8..5987c1d7 100644 --- a/src/queries/prisma/team.ts +++ b/src/queries/prisma/team.ts @@ -1,8 +1,9 @@ -import { uuid } from '@/lib/crypto'; -import { Prisma, Team } from '@/generated/prisma/client'; +import { Prisma, type Team } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; +import { uuid } from '@/lib/crypto'; import prisma from '@/lib/prisma'; -import { PageResult, QueryFilters } from '@/lib/types'; +import type { PageResult, QueryFilters } from '@/lib/types'; + import TeamFindManyArgs = Prisma.TeamFindManyArgs; export async function findTeam(criteria: Prisma.TeamFindUniqueArgs): Promise { diff --git a/src/queries/prisma/teamUser.ts b/src/queries/prisma/teamUser.ts index d7c3807c..2210deeb 100644 --- a/src/queries/prisma/teamUser.ts +++ b/src/queries/prisma/teamUser.ts @@ -1,7 +1,8 @@ -import { uuid } from '@/lib/crypto'; import { Prisma } from '@/generated/prisma/client'; +import { uuid } from '@/lib/crypto'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; + import TeamUserFindManyArgs = Prisma.TeamUserFindManyArgs; export async function findTeamUser(criteria: Prisma.TeamUserFindUniqueArgs) { diff --git a/src/queries/prisma/user.ts b/src/queries/prisma/user.ts index c599e386..14376fc2 100644 --- a/src/queries/prisma/user.ts +++ b/src/queries/prisma/user.ts @@ -1,8 +1,9 @@ import { Prisma } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; -import prisma from '@/lib/prisma'; -import { Role, QueryFilters } from '@/lib/types'; import { getRandomChars } from '@/lib/generate'; +import prisma from '@/lib/prisma'; +import type { QueryFilters, Role } from '@/lib/types'; + import UserFindManyArgs = Prisma.UserFindManyArgs; export interface GetUserOptions { diff --git a/src/queries/prisma/website.ts b/src/queries/prisma/website.ts index cc5f2e6f..d6ba6d38 100644 --- a/src/queries/prisma/website.ts +++ b/src/queries/prisma/website.ts @@ -1,8 +1,8 @@ -import { Prisma } from '@/generated/prisma/client'; -import redis from '@/lib/redis'; -import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { Prisma } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; +import prisma from '@/lib/prisma'; +import redis from '@/lib/redis'; +import type { QueryFilters } from '@/lib/types'; export async function findWebsite(criteria: Prisma.WebsiteFindUniqueArgs) { return prisma.client.website.findUnique(criteria); diff --git a/src/queries/sql/events/getEventData.ts b/src/queries/sql/events/getEventData.ts index 269258a8..f12c95ca 100644 --- a/src/queries/sql/events/getEventData.ts +++ b/src/queries/sql/events/getEventData.ts @@ -1,7 +1,7 @@ -import { EventData } from '@/generated/prisma/client'; -import prisma from '@/lib/prisma'; +import type { EventData } from '@/generated/prisma/client'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; const FUNCTION_NAME = 'getEventData'; diff --git a/src/queries/sql/events/getEventDataEvents.ts b/src/queries/sql/events/getEventDataEvents.ts index 0d856371..6c8f12c1 100644 --- a/src/queries/sql/events/getEventDataEvents.ts +++ b/src/queries/sql/events/getEventDataEvents.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataEvents'; diff --git a/src/queries/sql/events/getEventDataFields.ts b/src/queries/sql/events/getEventDataFields.ts index 42c46cd1..93377690 100644 --- a/src/queries/sql/events/getEventDataFields.ts +++ b/src/queries/sql/events/getEventDataFields.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataFields'; diff --git a/src/queries/sql/events/getEventDataProperties.ts b/src/queries/sql/events/getEventDataProperties.ts index 7a618fd2..82c078f8 100644 --- a/src/queries/sql/events/getEventDataProperties.ts +++ b/src/queries/sql/events/getEventDataProperties.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataProperties'; diff --git a/src/queries/sql/events/getEventDataStats.ts b/src/queries/sql/events/getEventDataStats.ts index 28e2f4d0..89e13582 100644 --- a/src/queries/sql/events/getEventDataStats.ts +++ b/src/queries/sql/events/getEventDataStats.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataStats'; diff --git a/src/queries/sql/events/getEventDataUsage.ts b/src/queries/sql/events/getEventDataUsage.ts index c72f5b3e..50613a7a 100644 --- a/src/queries/sql/events/getEventDataUsage.ts +++ b/src/queries/sql/events/getEventDataUsage.ts @@ -1,6 +1,6 @@ import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, notImplemented, PRISMA, runQuery } from '@/lib/db'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataUsage'; diff --git a/src/queries/sql/events/getEventDataValues.ts b/src/queries/sql/events/getEventDataValues.ts index e1975e2e..0426e646 100644 --- a/src/queries/sql/events/getEventDataValues.ts +++ b/src/queries/sql/events/getEventDataValues.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventDataValues'; diff --git a/src/queries/sql/events/getEventExpandedMetrics.ts b/src/queries/sql/events/getEventExpandedMetrics.ts index fb200c4a..f03a347d 100644 --- a/src/queries/sql/events/getEventExpandedMetrics.ts +++ b/src/queries/sql/events/getEventExpandedMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventExpandedMetrics'; diff --git a/src/queries/sql/events/getEventMetrics.ts b/src/queries/sql/events/getEventMetrics.ts index 75e7574c..500c67e9 100644 --- a/src/queries/sql/events/getEventMetrics.ts +++ b/src/queries/sql/events/getEventMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventMetrics'; diff --git a/src/queries/sql/events/getEventStats.ts b/src/queries/sql/events/getEventStats.ts index baa6f700..81d12a0f 100644 --- a/src/queries/sql/events/getEventStats.ts +++ b/src/queries/sql/events/getEventStats.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventStats'; diff --git a/src/queries/sql/events/getEventUsage.ts b/src/queries/sql/events/getEventUsage.ts index 0bd0a5f3..40f5a968 100644 --- a/src/queries/sql/events/getEventUsage.ts +++ b/src/queries/sql/events/getEventUsage.ts @@ -1,6 +1,6 @@ import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, notImplemented, PRISMA, runQuery } from '@/lib/db'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getEventUsage'; diff --git a/src/queries/sql/events/getWebsiteEvents.ts b/src/queries/sql/events/getWebsiteEvents.ts index fec9be36..f11d3ff1 100644 --- a/src/queries/sql/events/getWebsiteEvents.ts +++ b/src/queries/sql/events/getWebsiteEvents.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWebsiteEvents'; diff --git a/src/queries/sql/events/saveEvent.ts b/src/queries/sql/events/saveEvent.ts index c8a9cbe9..7313fe47 100644 --- a/src/queries/sql/events/saveEvent.ts +++ b/src/queries/sql/events/saveEvent.ts @@ -1,7 +1,7 @@ -import { uuid } from '@/lib/crypto'; -import { EVENT_NAME_LENGTH, URL_LENGTH, PAGE_TITLE_LENGTH } from '@/lib/constants'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import clickhouse from '@/lib/clickhouse'; +import { EVENT_NAME_LENGTH, PAGE_TITLE_LENGTH, URL_LENGTH } from '@/lib/constants'; +import { uuid } from '@/lib/crypto'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import kafka from '@/lib/kafka'; import prisma from '@/lib/prisma'; import { saveEventData } from './saveEventData'; diff --git a/src/queries/sql/events/saveEventData.ts b/src/queries/sql/events/saveEventData.ts index 0fb86937..b8b0e02f 100644 --- a/src/queries/sql/events/saveEventData.ts +++ b/src/queries/sql/events/saveEventData.ts @@ -1,11 +1,11 @@ +import clickhouse from '@/lib/clickhouse'; import { DATA_TYPE } from '@/lib/constants'; import { uuid } from '@/lib/crypto'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import { flattenJSON, getStringValue } from '@/lib/data'; -import clickhouse from '@/lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import kafka from '@/lib/kafka'; import prisma from '@/lib/prisma'; -import { DynamicData } from '@/lib/types'; +import type { DynamicData } from '@/lib/types'; export interface SaveEventDataArgs { websiteId: string; diff --git a/src/queries/sql/getActiveVisitors.ts b/src/queries/sql/getActiveVisitors.ts index 20327424..d763c12e 100644 --- a/src/queries/sql/getActiveVisitors.ts +++ b/src/queries/sql/getActiveVisitors.ts @@ -1,7 +1,7 @@ import { subMinutes } from 'date-fns'; -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; const FUNCTION_NAME = 'getActiveVisitors'; diff --git a/src/queries/sql/getChannelExpandedMetrics.ts b/src/queries/sql/getChannelExpandedMetrics.ts index 5ce884ad..33640d59 100644 --- a/src/queries/sql/getChannelExpandedMetrics.ts +++ b/src/queries/sql/getChannelExpandedMetrics.ts @@ -9,7 +9,7 @@ import { } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getChannelExpandedMetrics'; diff --git a/src/queries/sql/getChannelMetrics.ts b/src/queries/sql/getChannelMetrics.ts index a608ec5e..78e4142e 100644 --- a/src/queries/sql/getChannelMetrics.ts +++ b/src/queries/sql/getChannelMetrics.ts @@ -9,7 +9,7 @@ import { } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getChannelMetrics'; diff --git a/src/queries/sql/getRealtimeActivity.ts b/src/queries/sql/getRealtimeActivity.ts index d7aa06e9..075b65e2 100644 --- a/src/queries/sql/getRealtimeActivity.ts +++ b/src/queries/sql/getRealtimeActivity.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getRealtimeActivity'; diff --git a/src/queries/sql/getRealtimeData.ts b/src/queries/sql/getRealtimeData.ts index 58384a54..4b97cb05 100644 --- a/src/queries/sql/getRealtimeData.ts +++ b/src/queries/sql/getRealtimeData.ts @@ -1,4 +1,4 @@ -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; import { getRealtimeActivity } from '@/queries/sql/getRealtimeActivity'; import { getPageviewStats } from '@/queries/sql/pageviews/getPageviewStats'; import { getSessionStats } from '@/queries/sql/sessions/getSessionStats'; diff --git a/src/queries/sql/getValues.ts b/src/queries/sql/getValues.ts index 6251fe3b..cc6bb7d2 100644 --- a/src/queries/sql/getValues.ts +++ b/src/queries/sql/getValues.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getValues'; diff --git a/src/queries/sql/getWebsiteDateRange.ts b/src/queries/sql/getWebsiteDateRange.ts index 58d8ab25..d6333ad5 100644 --- a/src/queries/sql/getWebsiteDateRange.ts +++ b/src/queries/sql/getWebsiteDateRange.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; import { DEFAULT_RESET_DATE } from '@/lib/constants'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; export async function getWebsiteDateRange(...args: [websiteId: string]) { return runQuery({ diff --git a/src/queries/sql/getWebsiteStats.ts b/src/queries/sql/getWebsiteStats.ts index 4a4bef78..69068394 100644 --- a/src/queries/sql/getWebsiteStats.ts +++ b/src/queries/sql/getWebsiteStats.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWebsiteStats'; diff --git a/src/queries/sql/getWeeklyTraffic.ts b/src/queries/sql/getWeeklyTraffic.ts index ea202993..7bbe78a7 100644 --- a/src/queries/sql/getWeeklyTraffic.ts +++ b/src/queries/sql/getWeeklyTraffic.ts @@ -1,8 +1,8 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; import { EVENT_COLUMNS } from '@/lib/constants'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWeeklyTraffic'; diff --git a/src/queries/sql/index.ts b/src/queries/sql/index.ts index 682ac6d2..1573bdef 100644 --- a/src/queries/sql/index.ts +++ b/src/queries/sql/index.ts @@ -1,41 +1,41 @@ export * from './events/getEventDataEvents'; export * from './events/getEventDataFields'; export * from './events/getEventDataProperties'; -export * from './events/getEventDataValues'; export * from './events/getEventDataStats'; export * from './events/getEventDataUsage'; -export * from './events/getEventMetrics'; +export * from './events/getEventDataValues'; export * from './events/getEventExpandedMetrics'; +export * from './events/getEventMetrics'; export * from './events/getEventStats'; -export * from './events/getWebsiteEvents'; export * from './events/getEventUsage'; +export * from './events/getWebsiteEvents'; export * from './events/saveEvent'; -export * from './reports/getFunnel'; -export * from './reports/getJourney'; -export * from './reports/getRetention'; -export * from './reports/getBreakdown'; -export * from './reports/getUTM'; -export * from './pageviews/getPageviewMetrics'; -export * from './pageviews/getPageviewExpandedMetrics'; -export * from './pageviews/getPageviewStats'; -export * from './sessions/createSession'; -export * from './sessions/getWebsiteSession'; -export * from './sessions/getSessionData'; -export * from './sessions/getSessionDataProperties'; -export * from './sessions/getSessionDataValues'; -export * from './sessions/getSessionMetrics'; -export * from './sessions/getSessionExpandedMetrics'; -export * from './sessions/getWebsiteSessions'; -export * from './sessions/getWebsiteSessionStats'; -export * from './sessions/getSessionActivity'; -export * from './sessions/getSessionStats'; -export * from './sessions/saveSessionData'; export * from './getActiveVisitors'; -export * from './getChannelMetrics'; export * from './getChannelExpandedMetrics'; +export * from './getChannelMetrics'; export * from './getRealtimeActivity'; export * from './getRealtimeData'; export * from './getValues'; export * from './getWebsiteDateRange'; export * from './getWebsiteStats'; export * from './getWeeklyTraffic'; +export * from './pageviews/getPageviewExpandedMetrics'; +export * from './pageviews/getPageviewMetrics'; +export * from './pageviews/getPageviewStats'; +export * from './reports/getBreakdown'; +export * from './reports/getFunnel'; +export * from './reports/getJourney'; +export * from './reports/getRetention'; +export * from './reports/getUTM'; +export * from './sessions/createSession'; +export * from './sessions/getSessionActivity'; +export * from './sessions/getSessionData'; +export * from './sessions/getSessionDataProperties'; +export * from './sessions/getSessionDataValues'; +export * from './sessions/getSessionExpandedMetrics'; +export * from './sessions/getSessionMetrics'; +export * from './sessions/getSessionStats'; +export * from './sessions/getWebsiteSession'; +export * from './sessions/getWebsiteSessionStats'; +export * from './sessions/getWebsiteSessions'; +export * from './sessions/saveSessionData'; diff --git a/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts b/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts index 2e234ab1..938b28ac 100644 --- a/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts +++ b/src/queries/sql/pageviews/getPageviewExpandedMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { FILTER_COLUMNS, GROUPED_DOMAINS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getPageviewExpandedMetrics'; diff --git a/src/queries/sql/pageviews/getPageviewMetrics.ts b/src/queries/sql/pageviews/getPageviewMetrics.ts index 0a92e6af..9d4f6278 100644 --- a/src/queries/sql/pageviews/getPageviewMetrics.ts +++ b/src/queries/sql/pageviews/getPageviewMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getPageviewMetrics'; diff --git a/src/queries/sql/pageviews/getPageviewStats.ts b/src/queries/sql/pageviews/getPageviewStats.ts index a6619e87..251d5b14 100644 --- a/src/queries/sql/pageviews/getPageviewStats.ts +++ b/src/queries/sql/pageviews/getPageviewStats.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getPageviewStats'; diff --git a/src/queries/sql/reports/getAttribution.ts b/src/queries/sql/reports/getAttribution.ts index 9277bbf7..1d040781 100644 --- a/src/queries/sql/reports/getAttribution.ts +++ b/src/queries/sql/reports/getAttribution.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface AttributionParameters { startDate: Date; diff --git a/src/queries/sql/reports/getBreakdown.ts b/src/queries/sql/reports/getBreakdown.ts index 6cea68f3..51773d86 100644 --- a/src/queries/sql/reports/getBreakdown.ts +++ b/src/queries/sql/reports/getBreakdown.ts @@ -1,8 +1,8 @@ -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; -import { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; export interface BreakdownParameters { startDate: Date; diff --git a/src/queries/sql/reports/getFunnel.ts b/src/queries/sql/reports/getFunnel.ts index ada5eeb2..4840123f 100644 --- a/src/queries/sql/reports/getFunnel.ts +++ b/src/queries/sql/reports/getFunnel.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface FunnelParameters { startDate: Date; diff --git a/src/queries/sql/reports/getGoal.ts b/src/queries/sql/reports/getGoal.ts index 702c160a..7e790ff4 100644 --- a/src/queries/sql/reports/getGoal.ts +++ b/src/queries/sql/reports/getGoal.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface GoalParameters { startDate: Date; diff --git a/src/queries/sql/reports/getJourney.ts b/src/queries/sql/reports/getJourney.ts index 51e0d16f..283e0fad 100644 --- a/src/queries/sql/reports/getJourney.ts +++ b/src/queries/sql/reports/getJourney.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface JourneyParameters { startDate: Date; @@ -91,7 +91,7 @@ async function relationalQuery( // create start Step params query if (startStep) { startStepQuery = `and e1 = {{startStep}}`; - params['startStep'] = startStep; + params.startStep = startStep; } // create end Step params query @@ -102,7 +102,7 @@ async function relationalQuery( } endStepQuery += `\nor (e${steps} = {{endStep}}))`; - params['endStep'] = endStep; + params.endStep = endStep; } return { @@ -203,7 +203,7 @@ async function clickhouseQuery( // create start Step params query if (startStep) { startStepQuery = `and e1 = {startStep:String}`; - params['startStep'] = startStep; + params.startStep = startStep; } // create end Step params query @@ -214,7 +214,7 @@ async function clickhouseQuery( } endStepQuery += `\nor (e${steps} = {endStep:String}))`; - params['endStep'] = endStep; + params.endStep = endStep; } return { diff --git a/src/queries/sql/reports/getRetention.ts b/src/queries/sql/reports/getRetention.ts index d99098c0..87b55e03 100644 --- a/src/queries/sql/reports/getRetention.ts +++ b/src/queries/sql/reports/getRetention.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface RetentionParameters { startDate: Date; diff --git a/src/queries/sql/reports/getRevenue.ts b/src/queries/sql/reports/getRevenue.ts index 5771bdef..f5e3ec82 100644 --- a/src/queries/sql/reports/getRevenue.ts +++ b/src/queries/sql/reports/getRevenue.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface RevenuParameters { startDate: Date; diff --git a/src/queries/sql/reports/getUTM.ts b/src/queries/sql/reports/getUTM.ts index 5dee7a7b..4d43eb45 100644 --- a/src/queries/sql/reports/getUTM.ts +++ b/src/queries/sql/reports/getUTM.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_TYPE } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; export interface UTMParameters { column: string; diff --git a/src/queries/sql/sessions/createSession.ts b/src/queries/sql/sessions/createSession.ts index b5106a54..8d07a554 100644 --- a/src/queries/sql/sessions/createSession.ts +++ b/src/queries/sql/sessions/createSession.ts @@ -1,4 +1,4 @@ -import { Prisma } from '@/generated/prisma/client'; +import type { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; const FUNCTION_NAME = 'createSession'; diff --git a/src/queries/sql/sessions/getSessionActivity.ts b/src/queries/sql/sessions/getSessionActivity.ts index 3dd4fa9d..af31fca6 100644 --- a/src/queries/sql/sessions/getSessionActivity.ts +++ b/src/queries/sql/sessions/getSessionActivity.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionActivity'; diff --git a/src/queries/sql/sessions/getSessionData.ts b/src/queries/sql/sessions/getSessionData.ts index 09679fc8..8f1e4933 100644 --- a/src/queries/sql/sessions/getSessionData.ts +++ b/src/queries/sql/sessions/getSessionData.ts @@ -1,6 +1,6 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; const FUNCTION_NAME = 'getSessionData'; diff --git a/src/queries/sql/sessions/getSessionDataProperties.ts b/src/queries/sql/sessions/getSessionDataProperties.ts index 96cc17bf..9b429f9b 100644 --- a/src/queries/sql/sessions/getSessionDataProperties.ts +++ b/src/queries/sql/sessions/getSessionDataProperties.ts @@ -1,7 +1,7 @@ import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionDataProperties'; diff --git a/src/queries/sql/sessions/getSessionDataValues.ts b/src/queries/sql/sessions/getSessionDataValues.ts index 0093575d..5790141c 100644 --- a/src/queries/sql/sessions/getSessionDataValues.ts +++ b/src/queries/sql/sessions/getSessionDataValues.ts @@ -1,7 +1,7 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; -import { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionDataValues'; diff --git a/src/queries/sql/sessions/getSessionExpandedMetrics.ts b/src/queries/sql/sessions/getSessionExpandedMetrics.ts index 1d211137..85c12939 100644 --- a/src/queries/sql/sessions/getSessionExpandedMetrics.ts +++ b/src/queries/sql/sessions/getSessionExpandedMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionExpandedMetrics'; diff --git a/src/queries/sql/sessions/getSessionMetrics.ts b/src/queries/sql/sessions/getSessionMetrics.ts index 7133332b..c519bdd0 100644 --- a/src/queries/sql/sessions/getSessionMetrics.ts +++ b/src/queries/sql/sessions/getSessionMetrics.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionMetrics'; diff --git a/src/queries/sql/sessions/getSessionStats.ts b/src/queries/sql/sessions/getSessionStats.ts index ea93b226..fd457720 100644 --- a/src/queries/sql/sessions/getSessionStats.ts +++ b/src/queries/sql/sessions/getSessionStats.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getSessionStats'; diff --git a/src/queries/sql/sessions/getWebsiteSession.ts b/src/queries/sql/sessions/getWebsiteSession.ts index 36c48c20..3c160871 100644 --- a/src/queries/sql/sessions/getWebsiteSession.ts +++ b/src/queries/sql/sessions/getWebsiteSession.ts @@ -1,6 +1,6 @@ -import prisma from '@/lib/prisma'; import clickhouse from '@/lib/clickhouse'; -import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import prisma from '@/lib/prisma'; const FUNCTION_NAME = 'getWebsiteSession'; diff --git a/src/queries/sql/sessions/getWebsiteSessionStats.ts b/src/queries/sql/sessions/getWebsiteSessionStats.ts index 2e824f0d..a12e6c61 100644 --- a/src/queries/sql/sessions/getWebsiteSessionStats.ts +++ b/src/queries/sql/sessions/getWebsiteSessionStats.ts @@ -2,7 +2,7 @@ import clickhouse from '@/lib/clickhouse'; import { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWebsiteSessionStats'; diff --git a/src/queries/sql/sessions/getWebsiteSessions.ts b/src/queries/sql/sessions/getWebsiteSessions.ts index 5ebd1740..df640d6d 100644 --- a/src/queries/sql/sessions/getWebsiteSessions.ts +++ b/src/queries/sql/sessions/getWebsiteSessions.ts @@ -1,8 +1,8 @@ import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import { EVENT_COLUMNS } from '@/lib/constants'; +import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import type { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWebsiteSessions'; diff --git a/src/queries/sql/sessions/saveSessionData.ts b/src/queries/sql/sessions/saveSessionData.ts index cffe8e6e..74093177 100644 --- a/src/queries/sql/sessions/saveSessionData.ts +++ b/src/queries/sql/sessions/saveSessionData.ts @@ -1,11 +1,11 @@ +import clickhouse from '@/lib/clickhouse'; import { DATA_TYPE } from '@/lib/constants'; import { uuid } from '@/lib/crypto'; import { flattenJSON, getStringValue } from '@/lib/data'; -import prisma from '@/lib/prisma'; -import { DynamicData } from '@/lib/types'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import kafka from '@/lib/kafka'; -import clickhouse from '@/lib/clickhouse'; +import prisma from '@/lib/prisma'; +import type { DynamicData } from '@/lib/types'; export interface SaveSessionDataArgs { websiteId: string; diff --git a/src/store/app.ts b/src/store/app.ts index 9ed3641c..bb54e565 100644 --- a/src/store/app.ts +++ b/src/store/app.ts @@ -8,8 +8,8 @@ import { THEME_CONFIG, TIMEZONE_CONFIG, } from '@/lib/constants'; -import { getItem } from '@/lib/storage'; import { getTimezone } from '@/lib/date'; +import { getItem } from '@/lib/storage'; const initialState = { locale: getItem(LOCALE_CONFIG) || process.env.defaultLocale || DEFAULT_LOCALE, diff --git a/src/store/version.ts b/src/store/version.ts index c6292419..95367afd 100644 --- a/src/store/version.ts +++ b/src/store/version.ts @@ -1,7 +1,7 @@ -import { create } from 'zustand'; import { produce } from 'immer'; import semver from 'semver'; -import { CURRENT_VERSION, VERSION_CHECK, UPDATES_URL } from '@/lib/constants'; +import { create } from 'zustand'; +import { CURRENT_VERSION, UPDATES_URL, VERSION_CHECK } from '@/lib/constants'; import { getItem } from '@/lib/storage'; const initialState = { diff --git a/src/store/websites.ts b/src/store/websites.ts index fe5c1f92..4ddcab05 100644 --- a/src/store/websites.ts +++ b/src/store/websites.ts @@ -1,6 +1,6 @@ -import { create } from 'zustand'; import { produce } from 'immer'; -import { DateRange } from '@/lib/types'; +import { create } from 'zustand'; +import type { DateRange } from '@/lib/types'; const store = create(() => ({})); diff --git a/src/tracker/index.d.ts b/src/tracker/index.d.ts index 05497da2..32fbee97 100644 --- a/src/tracker/index.d.ts +++ b/src/tracker/index.d.ts @@ -148,6 +148,6 @@ export type UmamiTracker = { }; }; -interface Window { +export interface Window { umami: UmamiTracker; } diff --git a/src/tracker/index.js b/src/tracker/index.js index a9966198..ad3648ac 100644 --- a/src/tracker/index.js +++ b/src/tracker/index.js @@ -19,16 +19,16 @@ const _true = 'true'; const attr = currentScript.getAttribute.bind(currentScript); - const website = attr(_data + 'website-id'); - const hostUrl = attr(_data + 'host-url'); - const beforeSend = attr(_data + 'before-send'); - const tag = attr(_data + 'tag') || undefined; - const autoTrack = attr(_data + 'auto-track') !== _false; - const dnt = attr(_data + 'do-not-track') === _true; - const excludeSearch = attr(_data + 'exclude-search') === _true; - const excludeHash = attr(_data + 'exclude-hash') === _true; - const domain = attr(_data + 'domains') || ''; - const credentials = attr(_data + 'fetch-credentials') || 'omit'; + const website = attr(`${_data}website-id`); + const hostUrl = attr(`${_data}host-url`); + const beforeSend = attr(`${_data}before-send`); + const tag = attr(`${_data}tag`) || undefined; + const autoTrack = attr(`${_data}auto-track`) !== _false; + const dnt = attr(`${_data}do-not-track`) === _true; + const excludeSearch = attr(`${_data}exclude-search`) === _true; + const excludeHash = attr(`${_data}exclude-hash`) === _true; + const domain = attr(`${_data}domains`) || ''; + const credentials = attr(`${_data}fetch-credentials`) || 'omit'; const domains = domain.split(',').map(n => n.trim()); const host = @@ -36,7 +36,7 @@ const endpoint = `${host.replace(/\/$/, '')}__COLLECT_API_ENDPOINT__`; const screen = `${width}x${height}`; const eventRegex = /data-umami-event-([\w-_]+)/; - const eventNameAttribute = _data + 'umami-event'; + const eventNameAttribute = `${_data}umami-event`; const delayDuration = 300; /* Helper functions */ @@ -144,7 +144,7 @@ const trackingDisabled = () => disabled || !website || - (localStorage && localStorage.getItem('umami.disabled')) || + localStorage?.getItem('umami.disabled') || (domain && !domains.includes(hostname)) || (dnt && hasDoNotTrack()); @@ -177,7 +177,7 @@ cache = data.cache; } // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (e) { + } catch (_e) { /* no-op */ } };