diff --git a/biome.json b/biome.json index 0dec793be..847b1dc0b 100644 --- a/biome.json +++ b/biome.json @@ -26,13 +26,8 @@ "style": { "noDescendingSpecificity": "off" }, - "complexity": { - "noImportantStyles": "off" - }, "suspicious": { - "noArrayIndexKey": "off", - "noExplicitAny": "off", - "noImplicitAnyLet": "off" + "noExplicitAny": "off" }, "performance": { "noImgElement": "off" diff --git a/docker/middleware.ts b/docker/middleware.ts index 4b189df89..3fd7f20e3 100644 --- a/docker/middleware.ts +++ b/docker/middleware.ts @@ -1,4 +1,4 @@ -import { type NextRequest, NextResponse } from 'next/server'; +import { NextRequest, NextResponse } from 'next/server'; export const config = { matcher: '/:path*', diff --git a/package.json b/package.json index 306e10f37..d8ca9cfd3 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 --write" + "check": "biome check --apply" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,json,css}": [ - "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true" + "npm run format" ] }, "cacheDirectories": [ @@ -89,6 +89,7 @@ "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", @@ -140,6 +141,8 @@ "@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 5db0535d2..92a8bd32e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@clickhouse/client': specifier: ^1.12.0 - version: 1.14.0 + version: 1.12.1 '@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.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 17.0.0(@types/react@19.2.2)(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.6)(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.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': specifier: ^0.4.1 - 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)) + 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)) '@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.10(react@19.2.0) + version: 5.90.5(react@19.2.0) '@umami/react-zen': specifier: ^0.210.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)) + 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)) '@umami/redis-client': specifier: ^0.29.0 version: 0.29.0 bcryptjs: specifier: ^3.0.2 - version: 3.0.3 + version: 3.0.2 chalk: specifier: ^5.6.2 version: 5.6.2 @@ -94,7 +94,10 @@ importers: version: 17.2.3 esbuild: specifier: ^0.25.11 - version: 0.25.12 + version: 0.25.11 + eslint-plugin-promise: + specifier: ^6.1.1 + version: 6.6.0(eslint@8.57.1) fs-extra: specifier: ^11.3.2 version: 11.3.2 @@ -115,7 +118,7 @@ importers: version: 2.0.0 isbot: specifier: ^5.1.31 - version: 5.1.32 + version: 5.1.31 jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 @@ -130,7 +133,7 @@ importers: version: 0.543.0(react@19.2.0) maxmind: specifier: ^5.0.0 - version: 5.0.1 + version: 5.0.0 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) @@ -148,7 +151,7 @@ importers: version: 8.16.3 prisma: specifier: ^7.0.0 - 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) + 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) pure-rand: specifier: ^7.0.1 version: 7.0.1 @@ -196,53 +199,59 @@ importers: version: 4.1.12 zustand: specifier: ^5.0.8 - 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)) + 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)) devDependencies: '@biomejs/biome': specifier: ^2.3.6 - version: 2.3.7 + version: 2.3.6 '@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.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)) + 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)) '@netlify/plugin-nextjs': specifier: ^5.14.4 - version: 5.14.7 + version: 5.14.4 '@rollup/plugin-alias': specifier: ^5.0.0 - version: 5.1.1(rollup@4.53.3) + version: 5.1.1(rollup@4.52.5) '@rollup/plugin-commonjs': specifier: ^25.0.4 - version: 25.0.8(rollup@4.53.3) + version: 25.0.8(rollup@4.52.5) '@rollup/plugin-json': specifier: ^6.0.0 - version: 6.1.0(rollup@4.53.3) + version: 6.1.0(rollup@4.52.5) '@rollup/plugin-node-resolve': specifier: ^15.2.0 - version: 15.3.1(rollup@4.53.3) + version: 15.3.1(rollup@4.52.5) '@rollup/plugin-replace': specifier: ^5.0.2 - version: 5.0.7(rollup@4.53.3) + version: 5.0.7(rollup@4.52.5) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.3) + version: 0.4.4(rollup@4.52.5) '@rollup/plugin-typescript': specifier: ^12.3.0 - version: 12.3.0(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3) + version: 12.3.0(rollup@4.52.5)(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.10.1 + version: 24.9.2 '@types/react': specifier: ^19.2.2 - version: 19.2.6 + version: 19.2.2 '@types/react-dom': specifier: ^19.2.2 - version: 19.2.3(@types/react@19.2.6) + version: 19.2.2(@types/react@19.2.2) '@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 @@ -254,16 +263,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.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)) + 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)) husky: specifier: ^9.1.7 version: 9.1.7 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + version: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) lint-staged: specifier: ^16.2.6 - version: 16.2.7 + version: 16.2.6 postcss: specifier: ^8.5.6 version: 8.5.6 @@ -281,25 +290,25 @@ importers: version: 2.4.2 rollup: specifier: ^4.52.5 - version: 4.53.3 + version: 4.52.5 rollup-plugin-copy: specifier: ^3.4.0 version: 3.5.0 rollup-plugin-delete: specifier: ^3.0.1 - version: 3.0.1(rollup@4.53.3) + version: 3.0.1(rollup@4.52.5) rollup-plugin-dts: specifier: ^6.2.3 - version: 6.2.3(rollup@4.53.3)(typescript@5.9.3) + version: 6.2.3(rollup@4.52.5)(typescript@5.9.3) rollup-plugin-node-externals: specifier: ^8.1.1 - version: 8.1.2(rollup@4.53.3) + version: 8.1.1(rollup@4.52.5) rollup-plugin-peer-deps-external: specifier: ^2.2.4 - version: 2.2.4(rollup@4.53.3) + version: 2.2.4(rollup@4.52.5) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) stylelint: specifier: ^15.10.1 version: 15.11.0(typescript@5.9.3) @@ -317,13 +326,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.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) + 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) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) + version: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) tsup: specifier: ^8.5.0 - version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.0(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 @@ -505,55 +514,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@2.3.7': - resolution: {integrity: sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==} + '@biomejs/biome@2.3.6': + resolution: {integrity: sha512-oqUhWyU6tae0MFsr/7iLe++QWRg+6jtUhlx9/0GmCWDYFFrK366sBLamNM7D9Y+c7YSynUFKr8lpEp1r6Sk7eA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.3.7': - resolution: {integrity: sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==} + '@biomejs/cli-darwin-arm64@2.3.6': + resolution: {integrity: sha512-P4JWE5d8UayBxYe197QJwyW4ZHp0B+zvRIGCusOm1WbxmlhpAQA1zEqQuunHgSIzvyEEp4TVxiKGXNFZPg7r9Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.3.7': - resolution: {integrity: sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==} + '@biomejs/cli-darwin-x64@2.3.6': + resolution: {integrity: sha512-I4rTebj+F/L9K93IU7yTFs8nQ6EhaCOivxduRha4w4WEZK80yoZ8OAdR1F33m4yJ/NfUuTUbP/Wjs+vKjlCoWA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.3.7': - resolution: {integrity: sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==} + '@biomejs/cli-linux-arm64-musl@2.3.6': + resolution: {integrity: sha512-oK1NpIXIixbJ/4Tcx40cwiieqah6rRUtMGOHDeK2ToT7yUFVEvXUGRKqH0O4hqZ9tW8TcXNZKfgRH6xrsjVtGg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.3.7': - resolution: {integrity: sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==} + '@biomejs/cli-linux-arm64@2.3.6': + resolution: {integrity: sha512-JjYy83eVBnvuINZiqyFO7xx72v8Srh4hsgaacSBCjC22DwM6+ZvnX1/fj8/SBiLuUOfZ8YhU2pfq2Dzakeyg1A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.3.7': - resolution: {integrity: sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==} + '@biomejs/cli-linux-x64-musl@2.3.6': + resolution: {integrity: sha512-QvxB8GHQeaO4FCtwJpJjCgJkbHBbWxRHUxQlod+xeaYE6gtJdSkYkuxdKAQUZEOIsec+PeaDAhW9xjzYbwmOFA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.3.7': - resolution: {integrity: sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==} + '@biomejs/cli-linux-x64@2.3.6': + resolution: {integrity: sha512-ZjPXzy5yN9wusIoX+8Zp4p6cL8r0NzJCXg/4r1KLVveIPXd2jKVlqZ6ZyzEq385WwU3OX5KOwQYLQsOc788waQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.3.7': - resolution: {integrity: sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==} + '@biomejs/cli-win32-arm64@2.3.6': + resolution: {integrity: sha512-YM7hLHpwjdt8R7+O2zS1Vo2cKgqEeptiXB1tWW1rgjN5LlpZovBVKtg7zfwfRrFx3i08aNZThYpTcowpTlczug==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.3.7': - resolution: {integrity: sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==} + '@biomejs/cli-win32-x64@2.3.6': + resolution: {integrity: sha512-psgNEYgMAobY5h+QHRBVR9xvg2KocFuBKm6axZWB/aD12NWhQjiVFQUjV6wMXhlH4iT0Q9c3yK5JFRiDC/rzHA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -570,11 +579,11 @@ packages: '@chevrotain/utils@10.5.0': resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} - '@clickhouse/client-common@1.14.0': - resolution: {integrity: sha512-CyUcv2iCkZ1A++vmOSufYRpHR3aAWVfbrWed7ATzf0yyx/BW/2SEqlL07vBpSRa3BIkQe/DSOHVv8JkWZpUOwQ==} + '@clickhouse/client-common@1.12.1': + resolution: {integrity: sha512-ccw1N6hB4+MyaAHIaWBwGZ6O2GgMlO99FlMj0B0UEGfjxM9v5dYVYql6FpP19rMwrVAroYs/IgX2vyZEBvzQLg==} - '@clickhouse/client@1.14.0': - resolution: {integrity: sha512-co2spjR7wZoZ3Ck0H/jv76bpiuO3oJHtOmq9/gxFiod2DcT9NFg01u/hXcG8MJFnEJuMB6e3vGqS6IOnLwHqRw==} + '@clickhouse/client@1.12.1': + resolution: {integrity: sha512-7ORY85rphRazqHzImNXMrh4vsaPrpetFoTWpZYueCO2bbO6PXYDXp/GQ4DgxnGIqbWB/Di1Ai+Xuwq2o7DJ36A==} engines: {node: '>=16'} '@colors/colors@1.5.0': @@ -921,317 +930,183 @@ packages: '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@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==} + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@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==} + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@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==} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@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==} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@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==} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@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==} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@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==} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@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==} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@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==} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@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==} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@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==} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@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==} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@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==} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@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==} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@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==} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@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==} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@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==} + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@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==} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@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==} + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@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==} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@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==} + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@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==} + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@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==} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@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==} + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@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==} + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} - 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} '@fontsource/inter@5.2.8': resolution: {integrity: sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==} @@ -1315,6 +1190,19 @@ 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'} @@ -1722,8 +1610,8 @@ packages: resolution: {integrity: sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==} engines: {node: '>=16'} - '@netlify/plugin-nextjs@5.14.7': - resolution: {integrity: sha512-RJRPGIlaY3M4KA6GxpOlynCPUKCVbtkHwg4ccHhoSVrHgysW3nqw1pX+FBvlBexrUl1JO2zuDFh4enRal9BpAw==} + '@netlify/plugin-nextjs@5.14.4': + resolution: {integrity: sha512-HnMHG0tksVoS2E6ImcX9o/EcVH1dckb8ZL1FyghKRsEPYCo+20hQ6zncd5EEOW7K22UN+n1EprCROWUmsbhYMg==} engines: {node: '>=18.0.0'} '@next/env@15.5.3': @@ -2652,113 +2540,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.53.3': - resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.3': - resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.3': - resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.3': - resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.3': - resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.3': - resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': - resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.3': - resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.3': - resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.3': - resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.3': - resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.3': - resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.3': - resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.3': - resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.3': - resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.3': - resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.3': - resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.3': - resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.3': - resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.3': - resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.3': - resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.3': - resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} cpu: [x64] os: [win32] @@ -2872,11 +2760,11 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tanstack/query-core@5.90.10': - resolution: {integrity: sha512-EhZVFu9rl7GfRNuJLJ3Y7wtbTnENsvzp+YpcAV7kCYiXni1v8qZh++lpw4ch4rrwC0u/EZRnBHIehzCGzwXDSQ==} + '@tanstack/query-core@5.90.5': + resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} - '@tanstack/react-query@5.90.10': - resolution: {integrity: sha512-BKLss9Y8PQ9IUjPYQiv3/Zmlx92uxffUOX8ZZNoQlCIZBJPT5M+GOMQj7xislvVQ6l1BstBjcX0XB/aHfFYVNw==} + '@tanstack/react-query@5.90.5': + resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} peerDependencies: react: ^18 || ^19 @@ -2960,22 +2848,22 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@24.9.2': + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + '@types/react-dom@19.2.2': + resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} peerDependencies: '@types/react': ^19.2.0 '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} - '@types/react@19.2.6': - resolution: {integrity: sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==} + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3005,12 +2893,74 @@ 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==} @@ -3040,6 +2990,11 @@ 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'} @@ -3229,8 +3184,8 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - bcryptjs@3.0.3: - resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} + bcryptjs@3.0.2: + resolution: {integrity: sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==} hasBin: true blob-util@2.0.2: @@ -3482,8 +3437,8 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} commander@2.20.3: @@ -3669,8 +3624,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.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} currently-unhandled@0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -3792,6 +3747,9 @@ 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'} @@ -3864,6 +3822,10 @@ 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==} @@ -3979,13 +3941,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - 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==} + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} hasBin: true @@ -4001,17 +3958,65 @@ 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==} @@ -4079,6 +4084,9 @@ 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==} @@ -4112,6 +4120,10 @@ 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'} @@ -4265,6 +4277,14 @@ 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 @@ -4290,6 +4310,10 @@ 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'} @@ -4319,6 +4343,9 @@ 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'} @@ -4699,8 +4726,8 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbot@5.1.32: - resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==} + isbot@5.1.31: + resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} engines: {node: '>=18'} isexe@2.0.0: @@ -4908,6 +4935,10 @@ 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==} @@ -4934,6 +4965,9 @@ 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'} @@ -5001,6 +5035,10 @@ 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==} @@ -5015,8 +5053,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} + lint-staged@16.2.6: + resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} engines: {node: '>=20.17'} hasBin: true @@ -5094,6 +5132,9 @@ 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==} @@ -5192,8 +5233,8 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - maxmind@5.0.1: - resolution: {integrity: sha512-hYxQxvHkBUlyF34f7IlQOb60rytezCi2oZ8H/BtZpcoodXTlcK1eLgf7kY2TofHqBC3o+Hqtvde9kS72gFQSDw==} + maxmind@5.0.0: + resolution: {integrity: sha512-ndhnbeQWKuiBU17BJ6cybUnvcyvNXaK+1VM5n9/I7+TIqAYFLDvX1DSoVfE1hgvZfudvAU9Ts1CW5sxYq/M8dA==} engines: {node: '>=12', npm: '>=6'} mdn-data@2.0.14: @@ -5471,6 +5512,10 @@ 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==} @@ -6127,6 +6172,10 @@ 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'} @@ -6448,8 +6497,8 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup-plugin-node-externals@8.1.2: - resolution: {integrity: sha512-EuB6/lolkMLK16gvibUjikERq5fCRVIGwD2xue/CrM8D0pz5GXD2V6N8IrgxegwbcUoKkUFI8VYCEEv8MMvgpA==} + rollup-plugin-node-externals@8.1.1: + resolution: {integrity: sha512-MEWJmXMGjo5E7o9hgAmma6XLCdU9gTVRcaaCubugTJdoJD3A91qxtxiukT9k2PeUdogtCaNehV3pvJUWrRNtwg==} engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} peerDependencies: rollup: ^4.0.0 @@ -6468,8 +6517,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.53.3: - resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6649,9 +6698,10 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} + 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 spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6886,6 +6936,9 @@ 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==} @@ -6905,8 +6958,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-lru@11.4.5: - resolution: {integrity: sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==} + tiny-lru@11.3.4: + resolution: {integrity: sha512-UxWEfRKpFCabAf6fkTNdlfSw/RDUJ/4C6i1aLZaDnGF82PERHyYhz5CMCVYXtLt34LbqgfpJ2bjmgGKgxuF/6A==} engines: {node: '>=12'} tinyexec@0.3.2: @@ -6946,6 +6999,9 @@ 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 @@ -6958,6 +7014,12 @@ 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==} @@ -7005,8 +7067,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.5.1: - resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7030,6 +7092,10 @@ 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'} @@ -7038,6 +7104,10 @@ 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'} @@ -7201,6 +7271,12 @@ 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'} @@ -7226,6 +7302,10 @@ 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==} @@ -7535,39 +7615,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@2.3.7': + '@biomejs/biome@2.3.6': optionalDependencies: - '@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-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-arm64@2.3.6': optional: true - '@biomejs/cli-darwin-x64@2.3.7': + '@biomejs/cli-darwin-x64@2.3.6': optional: true - '@biomejs/cli-linux-arm64-musl@2.3.7': + '@biomejs/cli-linux-arm64-musl@2.3.6': optional: true - '@biomejs/cli-linux-arm64@2.3.7': + '@biomejs/cli-linux-arm64@2.3.6': optional: true - '@biomejs/cli-linux-x64-musl@2.3.7': + '@biomejs/cli-linux-x64-musl@2.3.6': optional: true - '@biomejs/cli-linux-x64@2.3.7': + '@biomejs/cli-linux-x64@2.3.6': optional: true - '@biomejs/cli-win32-arm64@2.3.7': + '@biomejs/cli-win32-arm64@2.3.6': optional: true - '@biomejs/cli-win32-x64@2.3.7': + '@biomejs/cli-win32-x64@2.3.6': optional: true '@chevrotain/cst-dts-gen@10.5.0': @@ -7585,11 +7665,11 @@ snapshots: '@chevrotain/utils@10.5.0': {} - '@clickhouse/client-common@1.14.0': {} + '@clickhouse/client-common@1.12.1': {} - '@clickhouse/client@1.14.0': + '@clickhouse/client@1.12.1': dependencies: - '@clickhouse/client-common': 1.14.0 + '@clickhouse/client-common': 1.12.1 '@colors/colors@1.5.0': optional: true @@ -7901,170 +7981,117 @@ snapshots: '@epic-web/invariant@1.0.0': {} - '@esbuild/aix-ppc64@0.25.12': + '@esbuild/aix-ppc64@0.25.11': optional: true - '@esbuild/aix-ppc64@0.27.0': + '@esbuild/android-arm64@0.25.11': optional: true - '@esbuild/android-arm64@0.25.12': + '@esbuild/android-arm@0.25.11': optional: true - '@esbuild/android-arm64@0.27.0': + '@esbuild/android-x64@0.25.11': optional: true - '@esbuild/android-arm@0.25.12': + '@esbuild/darwin-arm64@0.25.11': optional: true - '@esbuild/android-arm@0.27.0': + '@esbuild/darwin-x64@0.25.11': optional: true - '@esbuild/android-x64@0.25.12': + '@esbuild/freebsd-arm64@0.25.11': optional: true - '@esbuild/android-x64@0.27.0': + '@esbuild/freebsd-x64@0.25.11': optional: true - '@esbuild/darwin-arm64@0.25.12': + '@esbuild/linux-arm64@0.25.11': optional: true - '@esbuild/darwin-arm64@0.27.0': + '@esbuild/linux-arm@0.25.11': optional: true - '@esbuild/darwin-x64@0.25.12': + '@esbuild/linux-ia32@0.25.11': optional: true - '@esbuild/darwin-x64@0.27.0': + '@esbuild/linux-loong64@0.25.11': optional: true - '@esbuild/freebsd-arm64@0.25.12': + '@esbuild/linux-mips64el@0.25.11': optional: true - '@esbuild/freebsd-arm64@0.27.0': + '@esbuild/linux-ppc64@0.25.11': optional: true - '@esbuild/freebsd-x64@0.25.12': + '@esbuild/linux-riscv64@0.25.11': optional: true - '@esbuild/freebsd-x64@0.27.0': + '@esbuild/linux-s390x@0.25.11': optional: true - '@esbuild/linux-arm64@0.25.12': + '@esbuild/linux-x64@0.25.11': optional: true - '@esbuild/linux-arm64@0.27.0': + '@esbuild/netbsd-arm64@0.25.11': optional: true - '@esbuild/linux-arm@0.25.12': + '@esbuild/netbsd-x64@0.25.11': optional: true - '@esbuild/linux-arm@0.27.0': + '@esbuild/openbsd-arm64@0.25.11': optional: true - '@esbuild/linux-ia32@0.25.12': + '@esbuild/openbsd-x64@0.25.11': optional: true - '@esbuild/linux-ia32@0.27.0': + '@esbuild/openharmony-arm64@0.25.11': optional: true - '@esbuild/linux-loong64@0.25.12': + '@esbuild/sunos-x64@0.25.11': optional: true - '@esbuild/linux-loong64@0.27.0': + '@esbuild/win32-arm64@0.25.11': optional: true - '@esbuild/linux-mips64el@0.25.12': + '@esbuild/win32-ia32@0.25.11': optional: true - '@esbuild/linux-mips64el@0.27.0': + '@esbuild/win32-x64@0.25.11': optional: true - '@esbuild/linux-ppc64@0.25.12': - 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.27.0': - optional: true + '@eslint-community/regexpp@4.12.1': {} - '@esbuild/linux-riscv64@0.25.12': - optional: true + '@eslint-community/regexpp@4.12.2': {} - '@esbuild/linux-riscv64@0.27.0': - 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-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 + '@eslint/js@8.57.1': {} '@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.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/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))': 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.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)) '@types/estree': 0.0.50 '@types/fs-extra': 9.0.13 '@types/json-stable-stringify': 1.2.0 @@ -8151,15 +8178,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.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@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))': 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.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-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))': + '@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))': dependencies: '@formatjs/icu-messageformat-parser': 2.1.0 '@types/node': 14.18.63 @@ -8167,9 +8194,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.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-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) - '@hello-pangea/dnd@17.0.0(@types/react@19.2.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@hello-pangea/dnd@17.0.0(@types/react@19.2.2)(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 @@ -8177,7 +8204,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.6)(react@19.2.0)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.0)(redux@5.0.1) redux: 5.0.1 use-memo-one: 1.1.3(react@19.2.0) transitivePeerDependencies: @@ -8187,6 +8214,18 @@ 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 @@ -8415,27 +8454,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 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.10.1)(typescript@5.9.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@24.9.2)(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.10.1 + '@types/node': 24.9.2 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.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + 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-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8462,7 +8501,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8484,7 +8523,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8502,7 +8541,7 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-regex-util: 30.0.1 '@jest/reporters@29.7.0': @@ -8513,7 +8552,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.30 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8587,7 +8626,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 24.9.2 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8597,7 +8636,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 24.9.2 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8632,7 +8671,7 @@ snapshots: chevrotain: 10.5.0 lilconfig: 2.1.0 - '@netlify/plugin-nextjs@5.14.7': {} + '@netlify/plugin-nextjs@5.14.4': {} '@next/env@15.5.3': {} @@ -8711,11 +8750,11 @@ snapshots: '@prisma/client-runtime-utils@7.0.0': {} - '@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/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)': dependencies: '@prisma/client-runtime-utils': 7.0.0 optionalDependencies: - 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) + 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/config@7.0.0': @@ -8766,9 +8805,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.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@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))': dependencies: - '@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/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/fetch-engine@7.0.0': dependencies: @@ -8786,9 +8825,9 @@ snapshots: '@prisma/query-plan-executor@6.18.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)': + '@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)': dependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.2 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -9923,133 +9962,133 @@ snapshots: dependencies: '@redis/client': 1.6.1 - '@rollup/plugin-alias@5.1.1(rollup@4.53.3)': + '@rollup/plugin-alias@5.1.1(rollup@4.52.5)': optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/plugin-commonjs@25.0.8(rollup@4.53.3)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.52.5)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.53.3) + '@rollup/pluginutils': 5.2.0(rollup@4.52.5) 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.53.3 + rollup: 4.52.5 - '@rollup/plugin-json@6.1.0(rollup@4.53.3)': + '@rollup/plugin-json@6.1.0(rollup@4.52.5)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.53.3) + '@rollup/pluginutils': 5.2.0(rollup@4.52.5) optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.53.3)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.52.5)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.53.3) + '@rollup/pluginutils': 5.2.0(rollup@4.52.5) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/plugin-replace@5.0.7(rollup@4.53.3)': + '@rollup/plugin-replace@5.0.7(rollup@4.52.5)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.53.3) + '@rollup/pluginutils': 5.2.0(rollup@4.52.5) magic-string: 0.30.17 optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/plugin-terser@0.4.4(rollup@4.53.3)': + '@rollup/plugin-terser@0.4.4(rollup@4.52.5)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.43.1 optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/plugin-typescript@12.3.0(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.53.3) + '@rollup/pluginutils': 5.2.0(rollup@4.52.5) resolve: 1.22.10 typescript: 5.9.3 optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 tslib: 2.8.1 - '@rollup/pluginutils@5.2.0(rollup@4.53.3)': + '@rollup/pluginutils@5.2.0(rollup@4.52.5)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.53.3 + rollup: 4.52.5 - '@rollup/rollup-android-arm-eabi@4.53.3': + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true - '@rollup/rollup-android-arm64@4.53.3': + '@rollup/rollup-android-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-arm64@4.53.3': + '@rollup/rollup-darwin-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-x64@4.53.3': + '@rollup/rollup-darwin-x64@4.52.5': optional: true - '@rollup/rollup-freebsd-arm64@4.53.3': + '@rollup/rollup-freebsd-arm64@4.52.5': optional: true - '@rollup/rollup-freebsd-x64@4.53.3': + '@rollup/rollup-freebsd-x64@4.52.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.3': + '@rollup/rollup-linux-arm-musleabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.3': + '@rollup/rollup-linux-arm64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.3': + '@rollup/rollup-linux-arm64-musl@4.52.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.3': + '@rollup/rollup-linux-loong64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.3': + '@rollup/rollup-linux-ppc64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.3': + '@rollup/rollup-linux-riscv64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.3': + '@rollup/rollup-linux-riscv64-musl@4.52.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.3': + '@rollup/rollup-linux-s390x-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.3': + '@rollup/rollup-linux-x64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-musl@4.53.3': + '@rollup/rollup-linux-x64-musl@4.52.5': optional: true - '@rollup/rollup-openharmony-arm64@4.53.3': + '@rollup/rollup-openharmony-arm64@4.52.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.3': + '@rollup/rollup-win32-arm64-msvc@4.52.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.3': + '@rollup/rollup-win32-ia32-msvc@4.52.5': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.3': + '@rollup/rollup-win32-x64-gnu@4.52.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.3': + '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true '@sinclair/typebox@0.27.8': {} @@ -10177,11 +10216,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/query-core@5.90.10': {} + '@tanstack/query-core@5.90.5': {} - '@tanstack/react-query@5.90.10(react@19.2.0)': + '@tanstack/react-query@5.90.5(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.10 + '@tanstack/query-core': 5.90.5 react: 19.2.0 '@trysound/sax@0.2.0': {} @@ -10221,24 +10260,24 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.10.1 + '@types/node': 24.9.2 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 - '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.6)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.2)': dependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.2 hoist-non-react-statics: 3.3.2 '@types/istanbul-lib-coverage@2.0.6': {} @@ -10270,23 +10309,23 @@ snapshots: '@types/node@14.18.63': {} - '@types/node@24.10.1': + '@types/node@24.9.2': dependencies: undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} - '@types/react-dom@19.2.3(@types/react@19.2.6)': + '@types/react-dom@19.2.2(@types/react@19.2.2)': dependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.2 '@types/react-window@1.8.8': dependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.2 - '@types/react@19.2.6': + '@types/react@19.2.2': dependencies: - csstype: 3.2.3 + csstype: 3.1.3 '@types/resolve@1.20.2': {} @@ -10310,10 +10349,103 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 optional: true - '@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))': + '@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))': dependencies: '@fontsource/jetbrains-mono': 5.2.8 '@internationalized/date': 3.10.0 @@ -10330,7 +10462,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.6)(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.2)(immer@10.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) transitivePeerDependencies: - '@babel/core' - '@opentelemetry/api' @@ -10349,6 +10481,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@ungap/structured-clone@1.3.0': {} + '@vue/compiler-core@3.5.18': dependencies: '@babel/parser': 7.28.3 @@ -10393,7 +10527,7 @@ snapshots: '@vue/reactivity': 3.5.18 '@vue/runtime-core': 3.5.18 '@vue/shared': 3.5.18 - csstype: 3.2.3 + csstype: 3.1.3 '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.9.3))': dependencies: @@ -10403,6 +10537,10 @@ 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 @@ -10566,12 +10704,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.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)): + 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)): 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.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': 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)) '@types/babel__core': 7.20.5 '@types/fs-extra': 9.0.13 '@types/schema-utils': 2.4.0 @@ -10617,7 +10755,7 @@ snapshots: dependencies: tweetnacl: 0.14.5 - bcryptjs@3.0.3: {} + bcryptjs@3.0.2: {} blob-util@2.0.2: {} @@ -10664,9 +10802,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.27.0): + bundle-require@5.1.0(esbuild@0.25.11): dependencies: - esbuild: 0.27.0 + esbuild: 0.25.11 load-tsconfig: 0.2.5 c12@3.1.0: @@ -10868,7 +11006,7 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@14.0.2: {} + commander@14.0.1: {} commander@2.20.3: {} @@ -10918,13 +11056,13 @@ snapshots: optionalDependencies: 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)): + create-jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(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.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + 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-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11073,7 +11211,7 @@ snapshots: dependencies: css-tree: 2.2.1 - csstype@3.2.3: {} + csstype@3.1.3: {} currently-unhandled@0.4.1: dependencies: @@ -11230,6 +11368,8 @@ snapshots: dedent@1.6.0: {} + deep-is@0.1.4: {} + deepmerge-ts@7.1.5: {} deepmerge@4.3.1: {} @@ -11296,6 +11436,10 @@ 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 @@ -11470,63 +11614,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.12: + esbuild@0.25.11: optionalDependencies: - '@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 + '@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 escalade@3.2.0: {} @@ -11534,12 +11649,88 @@ 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: {} @@ -11597,10 +11788,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.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)): + 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)): 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.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)) + 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)) flat: 5.0.2 glob: 7.2.3 js-yaml: 3.14.1 @@ -11646,6 +11837,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@2.0.6: {} + fast-uri@3.0.6: {} fastest-levenshtein@1.0.16: {} @@ -11675,6 +11868,10 @@ 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 @@ -11697,7 +11894,7 @@ snapshots: dependencies: magic-string: 0.30.18 mlly: 1.8.0 - rollup: 4.53.3 + rollup: 4.52.5 flat-cache@3.2.0: dependencies: @@ -11852,6 +12049,19 @@ 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 @@ -11892,6 +12102,10 @@ 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 @@ -11934,6 +12148,8 @@ snapshots: grammex@3.1.11: {} + graphemer@1.4.0: {} + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -12253,7 +12469,7 @@ snapshots: isarray@2.0.5: {} - isbot@5.1.32: {} + isbot@5.1.31: {} isexe@2.0.0: {} @@ -12318,7 +12534,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 co: 4.6.0 dedent: 1.6.0 @@ -12338,16 +12554,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): + jest-cli@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.9.2)(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.10.1)(ts-node@10.9.2(@types/node@24.10.1)(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)) exit: 0.1.2 import-local: 3.2.0 - 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-config: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -12357,7 +12573,7 @@ snapshots: - supports-color - ts-node - 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-config@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): dependencies: '@babel/core': 7.28.3 '@jest/test-sequencer': 29.7.0 @@ -12382,8 +12598,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.10.1 - ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) + '@types/node': 24.9.2 + ts-node: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12419,7 +12635,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12429,7 +12645,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 24.10.1 + '@types/node': 24.9.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12487,13 +12703,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-util: 29.7.0 jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-util: 30.0.5 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12530,7 +12746,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12558,7 +12774,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -12604,7 +12820,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12613,7 +12829,7 @@ snapshots: jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.10.1 + '@types/node': 24.9.2 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 @@ -12632,7 +12848,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 24.9.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12641,17 +12857,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 24.9.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): + jest@29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest-cli: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12673,6 +12889,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsbn@0.1.1: {} jsesc@3.1.0: {} @@ -12689,6 +12909,8 @@ 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 @@ -12770,6 +12992,11 @@ 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 @@ -12780,9 +13007,9 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.7: + lint-staged@16.2.6: dependencies: - commander: 14.0.2 + commander: 14.0.1 listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 @@ -12862,6 +13089,8 @@ snapshots: lodash.pick@4.4.0: {} + lodash.sortby@4.7.0: {} + lodash.truncate@4.4.2: {} lodash.uniq@4.5.0: {} @@ -12955,10 +13184,10 @@ snapshots: mathml-tag-names@2.1.3: {} - maxmind@5.0.1: + maxmind@5.0.0: dependencies: mmdb-lib: 3.0.1 - tiny-lru: 11.4.5 + tiny-lru: 11.3.4 mdn-data@2.0.14: {} @@ -13254,6 +13483,15 @@ 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: @@ -13557,13 +13795,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.10.1)(typescript@5.9.3)): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.9.2)(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.10.1)(typescript@5.9.3) + ts-node: 10.9.2(@types/node@24.9.2)(typescript@5.9.3) postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: @@ -13864,6 +14102,8 @@ snapshots: postgres@3.4.7: {} + prelude-ls@1.2.1: {} + prettier@2.8.8: {} pretty-bytes@5.6.0: {} @@ -13880,12 +14120,12 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - 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): + 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): 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.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.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) mysql2: 3.15.3 postgres: 3.4.7 optionalDependencies: @@ -14057,8 +14297,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.6) - '@types/react': 19.2.6 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.2) + '@types/react': 19.2.2 hoist-non-react-statics: 3.3.2 intl-messageformat: 10.7.18 react: 19.2.0 @@ -14070,13 +14310,13 @@ snapshots: react-is@18.3.1: {} - react-redux@9.2.0(@types/react@19.2.6)(react@19.2.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.2)(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.6 + '@types/react': 19.2.2 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): @@ -14288,28 +14528,28 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-delete@3.0.1(rollup@4.53.3): + rollup-plugin-delete@3.0.1(rollup@4.52.5): dependencies: del: 8.0.0 - rollup: 4.53.3 + rollup: 4.52.5 - rollup-plugin-dts@6.2.3(rollup@4.53.3)(typescript@5.9.3): + rollup-plugin-dts@6.2.3(rollup@4.52.5)(typescript@5.9.3): dependencies: magic-string: 0.30.18 - rollup: 4.53.3 + rollup: 4.52.5 typescript: 5.9.3 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-node-externals@8.1.2(rollup@4.53.3): + rollup-plugin-node-externals@8.1.1(rollup@4.52.5): dependencies: - rollup: 4.53.3 + rollup: 4.52.5 - rollup-plugin-peer-deps-external@2.2.4(rollup@4.53.3): + rollup-plugin-peer-deps-external@2.2.4(rollup@4.52.5): dependencies: - rollup: 4.53.3 + rollup: 4.52.5 - rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.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)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -14318,7 +14558,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.10.1)(typescript@5.9.3)) + 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-modules: 4.3.1(postcss@8.5.6) promise.series: 0.2.0 resolve: 1.22.10 @@ -14332,32 +14572,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.53.3: + rollup@4.52.5: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@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 + '@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 fsevents: 2.3.3 run-parallel@1.2.0: @@ -14604,7 +14844,9 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.6: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 spdx-correct@3.2.0: dependencies: @@ -14835,7 +15077,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.5.0 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 @@ -14914,6 +15156,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-table@0.2.0: {} + thenby@1.3.4: {} thenify-all@1.6.0: @@ -14930,7 +15174,7 @@ snapshots: tiny-invariant@1.3.3: {} - tiny-lru@11.4.5: {} + tiny-lru@11.3.4: {} tinyexec@0.3.2: {} @@ -14963,20 +15207,28 @@ 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.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-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): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + jest: 29.7.0(@types/node@24.9.2)(ts-node@10.9.2(@types/node@24.9.2)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -14989,17 +15241,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.12 + esbuild: 0.25.11 jest-util: 30.0.5 - ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3): + ts-node@10.9.2(@types/node@24.9.2)(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.10.1 + '@types/node': 24.9.2 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -15012,21 +15264,21 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): + tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.27.0) + bundle-require: 5.1.0(esbuild@0.25.11) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.27.0 + esbuild: 0.25.11 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.53.3 - source-map: 0.7.6 + rollup: 4.52.5 + source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 @@ -15046,10 +15298,16 @@ 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: {} @@ -15200,6 +15458,14 @@ 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 @@ -15249,6 +15515,8 @@ snapshots: dependencies: isexe: 2.0.0 + word-wrap@1.2.5: {} + wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -15349,9 +15617,9 @@ snapshots: zod@4.1.12: {} - 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)): + 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)): optionalDependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.2 immer: 10.2.0 react: 19.2.0 use-sync-external-store: 1.6.0(react@19.2.0) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 66932e338..e6a49d888 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -6,7 +6,6 @@ generator client { datasource db { provider = "postgresql" - relationMode = "prisma" } model User { diff --git a/scripts/build-geo.js b/scripts/build-geo.js index a83caa6c0..749025114 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 tar from 'tar'; import zlib from 'zlib'; +import tar from 'tar'; 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 68374f6f5..09577699d 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 937fb22f0..2bc91c763 100644 --- a/scripts/download-country-names.js +++ b/scripts/download-country-names.js @@ -1,9 +1,8 @@ /* eslint-disable no-console */ - -import path from 'node:path'; -import chalk from 'chalk'; import fs from 'fs-extra'; +import path from 'node:path'; import https from 'https'; +import chalk from 'chalk'; 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 d3db6016b..4daa7b797 100644 --- a/scripts/download-language-names.js +++ b/scripts/download-language-names.js @@ -1,9 +1,8 @@ /* eslint-disable no-console */ - -import path from 'node:path'; -import chalk from 'chalk'; import fs from 'fs-extra'; +import path from 'node:path'; import https from 'https'; +import chalk from 'chalk'; 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 95c390eeb..ad18d82d6 100644 --- a/scripts/format-lang.js +++ b/scripts/format-lang.js @@ -1,6 +1,6 @@ import path from 'node:path'; -import del from 'del'; import fs from 'fs-extra'; +import del from 'del'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); diff --git a/scripts/merge-messages.js b/scripts/merge-messages.js index 29abc539d..9e846af57 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 { createRequire } from 'module'; import prettier from 'prettier'; +import { createRequire } from 'module'; 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 79d6faa5c..9959fe855 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 { POST } from '@/app/api/send/route'; -import type { Pixel } from '@/generated/prisma/client'; -import redis from '@/lib/redis'; 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'; 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 24089bdb2..80c5bb47a 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 aaa25846c..a19449606 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 1ecb58dbc..32e3e3978 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 { - Row, Sidebar, - SidebarHeader, - SidebarItem, - type SidebarProps, SidebarSection, + SidebarItem, + SidebarHeader, + Row, + SidebarProps, ThemeButton, } from '@umami/react-zen'; -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 { Globe, LinkIcon, Grid2x2, PanelLeft } from '@/components/icons'; +import { Logo } from '@/components/svg'; +import { useMessages, useNavigation, useGlobalState } from '@/components/hooks'; import { NavButton } from '@/components/input/NavButton'; import { PanelButton } from '@/components/input/PanelButton'; -import { Logo } from '@/components/svg'; +import { LanguageButton } from '@/components/input/LanguageButton'; export function SideNav(props: SidebarProps) { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/TopNav.tsx b/src/app/(main)/TopNav.tsx index d410097ae..71f38d2b8 100644 --- a/src/app/(main)/TopNav.tsx +++ b/src/app/(main)/TopNav.tsx @@ -1,4 +1,4 @@ -import { Row, ThemeButton } from '@umami/react-zen'; +import { ThemeButton, Row } 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 ef441d0bb..81e2ca3af 100644 --- a/src/app/(main)/UpdateNotice.tsx +++ b/src/app/(main)/UpdateNotice.tsx @@ -1,10 +1,10 @@ -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 { useEffect, useCallback, useState } from 'react'; +import { Button, AlertBanner, Column, Row } from '@umami/react-zen'; import { setItem } from '@/lib/storage'; -import { checkVersion, useVersion } from '@/store/version'; +import { useVersion, checkVersion } from '@/store/version'; +import { REPO_URL, VERSION_CHECK } from '@/lib/constants'; +import { useMessages } from '@/components/hooks'; +import { usePathname } from 'next/navigation'; 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 56561a8e1..3cc5aed39 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 34cdd0b65..634fc6588 100644 --- a/src/app/(main)/admin/layout.tsx +++ b/src/app/(main)/admin/layout.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 7da8531a1..53e182487 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 41e6f4afb..736c7b5fe 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 9f2abd5cd..e54532583 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 104766ad6..95a0acb84 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 987f02b36..fb0fd3428 100644 --- a/src/app/(main)/admin/teams/page.tsx +++ b/src/app/(main)/admin/teams/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 052508280..80337b197 100644 --- a/src/app/(main)/admin/users/UserAddButton.tsx +++ b/src/app/(main)/admin/users/UserAddButton.tsx @@ -1,7 +1,7 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; +import { Button, Icon, Text, Modal, DialogTrigger, Dialog, useToast } from '@umami/react-zen'; +import { UserAddForm } from './UserAddForm'; 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 6c365510c..fe7828c60 100644 --- a/src/app/(main)/admin/users/UserAddForm.tsx +++ b/src/app/(main)/admin/users/UserAddForm.tsx @@ -1,13 +1,13 @@ import { - Button, - Form, - FormButtons, - FormField, - FormSubmitButton, - ListItem, - PasswordField, Select, + ListItem, + Form, + FormField, + FormButtons, + FormSubmitButton, TextField, + PasswordField, + Button, } 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 ee8f2c19c..f3789884b 100644 --- a/src/app/(main)/admin/users/UserDeleteButton.tsx +++ b/src/app/(main)/admin/users/UserDeleteButton.tsx @@ -1,5 +1,5 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; -import { useLoginQuery, useMessages } from '@/components/hooks'; +import { Button, Icon, Modal, DialogTrigger, Dialog, Text } from '@umami/react-zen'; +import { useMessages, useLoginQuery } 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 8467bd238..ae72cfed6 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 7e1b0f48b..3e492b345 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 { PageHeader } from '@/components/common/PageHeader'; -import { Panel } from '@/components/common/Panel'; import { useMessages } from '@/components/hooks'; import { UserAddButton } from './UserAddButton'; -import { UsersDataTable } from './UsersDataTable'; +import { PageHeader } from '@/components/common/PageHeader'; +import { Panel } from '@/components/common/Panel'; 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 9c10f3e79..6b365691c 100644 --- a/src/app/(main)/admin/users/UsersTable.tsx +++ b/src/app/(main)/admin/users/UsersTable.tsx @@ -1,12 +1,13 @@ -import { DataColumn, DataTable, 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 { Row, Text, Icon, DataTable, DataColumn, MenuItem, Modal } 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 { DateDistance } from '@/components/common/DateDistance'; 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 30c86862a..142adaa66 100644 --- a/src/app/(main)/admin/users/[userId]/UserEditForm.tsx +++ b/src/app/(main)/admin/users/[userId]/UserEditForm.tsx @@ -1,12 +1,12 @@ import { - Form, - FormButtons, - FormField, - FormSubmitButton, - ListItem, - PasswordField, Select, + ListItem, + Form, + FormField, + FormButtons, TextField, + FormSubmitButton, + PasswordField, } 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 1f82897e5..aeaca0b23 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 5e0f8d109..0ae658558 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 ea01915a7..82dba512f 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 { createContext, type ReactNode } from 'react'; +import { User } from '@/generated/prisma/client'; 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 3f17f3e16..3d699ebe5 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, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; +import { Column, Tabs, Tab, TabList, TabPanel } from '@umami/react-zen'; import { UserEditForm } from './UserEditForm'; +import { useMessages } from '@/components/hooks'; 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 eeb173e75..dae83660a 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 16c9f366c..e573b14e3 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 96e69eb57..7cfd48879 100644 --- a/src/app/(main)/admin/users/page.tsx +++ b/src/app/(main)/admin/users/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 1c2ac9218..f66c5eb71 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 cfda59572..b8d76a9bc 100644 --- a/src/app/(main)/admin/websites/AdminWebsitesTable.tsx +++ b/src/app/(main)/admin/websites/AdminWebsitesTable.tsx @@ -1,11 +1,12 @@ -import { DataColumn, DataTable, Dialog, Icon, MenuItem, Modal, Row, Text } from '@umami/react-zen'; -import Link from 'next/link'; import { useState } from 'react'; -import { WebsiteDeleteForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm'; -import { DateDistance } from '@/components/common/DateDistance'; +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, Trash, Users } from '@/components/icons'; +import { Edit } from '@/components/icons'; import { MenuButton } from '@/components/input/MenuButton'; +import { DateDistance } from '@/components/common/DateDistance'; +import { WebsiteDeleteForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm'; 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 557adbd94..e1c922768 100644 --- a/src/app/(main)/admin/websites/[websiteId]/page.tsx +++ b/src/app/(main)/admin/websites/[websiteId]/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 d6da9f637..85eb029a2 100644 --- a/src/app/(main)/admin/websites/page.tsx +++ b/src/app/(main)/admin/websites/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 f9f80f4d7..7c98ed167 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 6471b21e4..8e7b764c7 100644 --- a/src/app/(main)/boards/BoardAddForm.tsx +++ b/src/app/(main)/boards/BoardAddForm.tsx @@ -1,5 +1,5 @@ -import { Button, Form, FormField, FormSubmitButton, Row, TextField } from '@umami/react-zen'; -import { useMessages, useUpdateQuery } from '@/components/hooks'; +import { Form, FormField, FormSubmitButton, Row, TextField, Button } from '@umami/react-zen'; +import { useUpdateQuery, useMessages } 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 fa5eb64a3..adf0e02bf 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 { PageBody } from '@/components/common/PageBody'; import { PageHeader } from '@/components/common/PageHeader'; +import { PageBody } from '@/components/common/PageBody'; 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 2cb076a5e..d11f6a2ab 100644 --- a/src/app/(main)/boards/[boardId]/page.tsx +++ b/src/app/(main)/boards/[boardId]/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 e8ca66244..5e3c80341 100644 --- a/src/app/(main)/boards/page.tsx +++ b/src/app/(main)/boards/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 56cc49523..e44ea95d6 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, Column, Grid, Heading } from '@umami/react-zen'; +import { Button, Grid, Column, Heading } from '@umami/react-zen'; import Link from 'next/link'; import Script from 'next/script'; -import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; -import { PageBody } from '@/components/common/PageBody'; -import { PageHeader } from '@/components/common/PageHeader'; import { Panel } from '@/components/common/Panel'; -import { useWebsiteQuery } from '@/components/hooks'; +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 { PageHeader } from '@/components/common/PageHeader'; 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 28b816152..7f507e415 100644 --- a/src/app/(main)/console/[websiteId]/page.tsx +++ b/src/app/(main)/console/[websiteId]/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 c2c7e75f0..c05e411d6 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 4b79b598f..e934e6ada 100644 --- a/src/app/(main)/dashboard/page.tsx +++ b/src/app/(main)/dashboard/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 98fca4ab4..558a9cd3f 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 4276895d0..d0c4e3619 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 { DialogButton } from '@/components/input/DialogButton'; import { LinkEditForm } from './LinkEditForm'; +import { DialogButton } from '@/components/input/DialogButton'; 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 78f85f891..aa044a363 100644 --- a/src/app/(main)/links/LinkDeleteButton.tsx +++ b/src/app/(main)/links/LinkDeleteButton.tsx @@ -1,8 +1,8 @@ -import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { useDeleteQuery, useMessages } from '@/components/hooks'; import { Trash } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; +import { ConfirmationForm } from '@/components/common/ConfirmationForm'; import { messages } from '@/components/messages'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { DialogButton } from '@/components/input/DialogButton'; export function LinkDeleteButton({ linkId, diff --git a/src/app/(main)/links/LinkEditButton.tsx b/src/app/(main)/links/LinkEditButton.tsx index 4d8587966..a93852b69 100644 --- a/src/app/(main)/links/LinkEditButton.tsx +++ b/src/app/(main)/links/LinkEditButton.tsx @@ -1,7 +1,7 @@ -import { useMessages } from '@/components/hooks'; import { Edit } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; import { LinkEditForm } from './LinkEditForm'; +import { useMessages } from '@/components/hooks'; +import { DialogButton } from '@/components/input/DialogButton'; 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 6c10c7f0a..36a114552 100644 --- a/src/app/(main)/links/LinkEditForm.tsx +++ b/src/app/(main)/links/LinkEditForm.tsx @@ -1,21 +1,22 @@ +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 { useEffect, useState } from 'react'; -import { useConfig, useLinkQuery, useMessages } from '@/components/hooks'; -import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { useConfig, useLinkQuery } from '@/components/hooks'; +import { useMessages } from '@/components/hooks'; import { RefreshCw } from '@/components/icons'; -import { LINKS_URL } from '@/lib/constants'; import { getRandomChars } from '@/lib/generate'; +import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { LINKS_URL } from '@/lib/constants'; 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 c29e13cf9..de97cdcf5 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 { createContext, type ReactNode } from 'react'; +import { Link } from '@/generated/prisma/client'; 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 0b3d660bb..043cd768e 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 a6e4c7c4e..e94bccf83 100644 --- a/src/app/(main)/links/LinksPage.tsx +++ b/src/app/(main)/links/LinksPage.tsx @@ -1,11 +1,11 @@ 'use client'; -import { Column } from '@umami/react-zen'; -import { LinksDataTable } from '@/app/(main)/links/LinksDataTable'; import { PageBody } from '@/components/common/PageBody'; +import { Column } from '@umami/react-zen'; import { PageHeader } from '@/components/common/PageHeader'; -import { Panel } from '@/components/common/Panel'; -import { useMessages, useNavigation } from '@/components/hooks'; import { LinkAddButton } from './LinkAddButton'; +import { useMessages, useNavigation } from '@/components/hooks'; +import { LinksDataTable } from '@/app/(main)/links/LinksDataTable'; +import { Panel } from '@/components/common/Panel'; export function LinksPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/links/LinksTable.tsx b/src/app/(main)/links/LinksTable.tsx index 2ce4ba497..5df15b787 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 { useMessages, useNavigation, useSlug } from '@/components/hooks'; -import { LinkDeleteButton } from './LinkDeleteButton'; import { LinkEditButton } from './LinkEditButton'; +import { LinkDeleteButton } from './LinkDeleteButton'; 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 1d1147a82..4e43c7607 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 { ExportButton } from '@/components/input/ExportButton'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { ExportButton } from '@/components/input/ExportButton'; export function LinkControls({ linkId: websiteId, diff --git a/src/app/(main)/links/[linkId]/LinkHeader.tsx b/src/app/(main)/links/[linkId]/LinkHeader.tsx index b7c70f076..ba1de3ee2 100644 --- a/src/app/(main)/links/[linkId]/LinkHeader.tsx +++ b/src/app/(main)/links/[linkId]/LinkHeader.tsx @@ -1,8 +1,8 @@ -import { Icon, Text } from '@umami/react-zen'; -import { LinkButton } from '@/components/common/LinkButton'; -import { PageHeader } from '@/components/common/PageHeader'; 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'; 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 1fe8c45fa..43c14050f 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 ddacf08fc..b4377e5cd 100644 --- a/src/app/(main)/links/[linkId]/LinkPage.tsx +++ b/src/app/(main)/links/[linkId]/LinkPage.tsx @@ -1,14 +1,14 @@ 'use client'; -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 { 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 { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; 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 f33525e70..ed43f5488 100644 --- a/src/app/(main)/links/[linkId]/LinkPanels.tsx +++ b/src/app/(main)/links/[linkId]/LinkPanels.tsx @@ -1,9 +1,9 @@ -import { Grid, Heading, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; +import { Grid, Tabs, Tab, TabList, TabPanel, Heading } from '@umami/react-zen'; import { GridRow } from '@/components/common/GridRow'; import { Panel } from '@/components/common/Panel'; -import { useMessages } from '@/components/hooks'; -import { MetricsTable } from '@/components/metrics/MetricsTable'; import { WorldMap } from '@/components/metrics/WorldMap'; +import { MetricsTable } from '@/components/metrics/MetricsTable'; +import { useMessages } from '@/components/hooks'; 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 4317ada23..ae3b2c9a9 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 24c9c18e3..ed89c727e 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 1573b9e0f..8c89c795c 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 { DialogButton } from '@/components/input/DialogButton'; import { PixelEditForm } from './PixelEditForm'; +import { DialogButton } from '@/components/input/DialogButton'; 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 436dba5c4..977ce5efc 100644 --- a/src/app/(main)/pixels/PixelDeleteButton.tsx +++ b/src/app/(main)/pixels/PixelDeleteButton.tsx @@ -1,8 +1,8 @@ -import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; import { Trash } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; +import { ConfirmationForm } from '@/components/common/ConfirmationForm'; import { messages } from '@/components/messages'; +import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; +import { DialogButton } from '@/components/input/DialogButton'; export function PixelDeleteButton({ pixelId, diff --git a/src/app/(main)/pixels/PixelEditButton.tsx b/src/app/(main)/pixels/PixelEditButton.tsx index 3c5924da4..d8627bb95 100644 --- a/src/app/(main)/pixels/PixelEditButton.tsx +++ b/src/app/(main)/pixels/PixelEditButton.tsx @@ -1,7 +1,7 @@ -import { useMessages } from '@/components/hooks'; import { Edit } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; import { PixelEditForm } from './PixelEditForm'; +import { useMessages } from '@/components/hooks'; +import { DialogButton } from '@/components/input/DialogButton'; 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 aedd3a3b6..a3a4f0c80 100644 --- a/src/app/(main)/pixels/PixelEditForm.tsx +++ b/src/app/(main)/pixels/PixelEditForm.tsx @@ -1,21 +1,22 @@ import { - Button, - Column, Form, FormField, FormSubmitButton, - Icon, - Label, - Loading, Row, TextField, + Button, + Label, + Column, + Icon, + Loading, } from '@umami/react-zen'; -import { useEffect, useState } from 'react'; -import { useConfig, useMessages, usePixelQuery } from '@/components/hooks'; -import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { useConfig, usePixelQuery } from '@/components/hooks'; +import { useMessages } from '@/components/hooks'; import { RefreshCw } from '@/components/icons'; -import { PIXELS_URL } from '@/lib/constants'; import { getRandomChars } from '@/lib/generate'; +import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; +import { useEffect, useState } from 'react'; +import { PIXELS_URL } from '@/lib/constants'; const generateId = () => getRandomChars(9); diff --git a/src/app/(main)/pixels/PixelProvider.tsx b/src/app/(main)/pixels/PixelProvider.tsx index 9e929d8c3..3ba4c5e5c 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 { createContext, type ReactNode } from 'react'; +import { Pixel } from '@/generated/prisma/client'; 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 51b8c5a0b..6a1eb982b 100644 --- a/src/app/(main)/pixels/PixelsDataTable.tsx +++ b/src/app/(main)/pixels/PixelsDataTable.tsx @@ -1,6 +1,6 @@ -import { DataGrid } from '@/components/common/DataGrid'; -import { useNavigation, usePixelsQuery } from '@/components/hooks'; +import { usePixelsQuery, useNavigation } from '@/components/hooks'; import { PixelsTable } from './PixelsTable'; +import { DataGrid } from '@/components/common/DataGrid'; export function PixelsDataTable() { const { teamId } = useNavigation(); diff --git a/src/app/(main)/pixels/PixelsPage.tsx b/src/app/(main)/pixels/PixelsPage.tsx index 4f6acefe5..0733d5b11 100644 --- a/src/app/(main)/pixels/PixelsPage.tsx +++ b/src/app/(main)/pixels/PixelsPage.tsx @@ -1,11 +1,11 @@ 'use client'; -import { Column } from '@umami/react-zen'; import { PageBody } from '@/components/common/PageBody'; +import { Column } from '@umami/react-zen'; import { PageHeader } from '@/components/common/PageHeader'; -import { Panel } from '@/components/common/Panel'; -import { useMessages, useNavigation } from '@/components/hooks'; import { PixelAddButton } from './PixelAddButton'; +import { useMessages, useNavigation } from '@/components/hooks'; import { PixelsDataTable } from './PixelsDataTable'; +import { Panel } from '@/components/common/Panel'; export function PixelsPage() { const { formatMessage, labels } = useMessages(); diff --git a/src/app/(main)/pixels/PixelsTable.tsx b/src/app/(main)/pixels/PixelsTable.tsx index 48f2121ba..4edbb1cf4 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 { DateDistance } from '@/components/common/DateDistance'; -import { ExternalLink } from '@/components/common/ExternalLink'; +import { DataTable, DataColumn, Row, DataTableProps } from '@umami/react-zen'; import { useMessages, useNavigation, useSlug } from '@/components/hooks'; -import { PixelDeleteButton } from './PixelDeleteButton'; +import { DateDistance } from '@/components/common/DateDistance'; import { PixelEditButton } from './PixelEditButton'; +import { PixelDeleteButton } from './PixelDeleteButton'; +import { ExternalLink } from '@/components/common/ExternalLink'; 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 55dcd5764..33f49222b 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 { ExportButton } from '@/components/input/ExportButton'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { ExportButton } from '@/components/input/ExportButton'; export function PixelControls({ pixelId: websiteId, diff --git a/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx b/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx index 8171aaf17..a49729910 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelHeader.tsx @@ -1,8 +1,8 @@ -import { Icon, Text } from '@umami/react-zen'; -import { LinkButton } from '@/components/common/LinkButton'; +import { usePixel, useMessages, useSlug } from '@/components/hooks'; import { PageHeader } from '@/components/common/PageHeader'; -import { useMessages, usePixel, useSlug } from '@/components/hooks'; +import { Icon, Text } from '@umami/react-zen'; import { ExternalLink, Grid2x2 } from '@/components/icons'; +import { LinkButton } from '@/components/common/LinkButton'; 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 c9dcd357c..0305df7f3 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 7a4ae9d79..46cfe3381 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelPage.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelPage.tsx @@ -1,14 +1,14 @@ 'use client'; -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 { 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 { ExpandedViewModal } from '@/app/(main)/websites/[websiteId]/ExpandedViewModal'; 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 9cc24c923..d3adc1a3a 100644 --- a/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx +++ b/src/app/(main)/pixels/[pixelId]/PixelPanels.tsx @@ -1,9 +1,9 @@ -import { Grid, Heading, Tab, TabList, TabPanel, Tabs } from '@umami/react-zen'; +import { Grid, Tabs, Tab, TabList, TabPanel, Heading } from '@umami/react-zen'; import { GridRow } from '@/components/common/GridRow'; import { Panel } from '@/components/common/Panel'; -import { useMessages } from '@/components/hooks'; -import { MetricsTable } from '@/components/metrics/MetricsTable'; import { WorldMap } from '@/components/metrics/WorldMap'; +import { MetricsTable } from '@/components/metrics/MetricsTable'; +import { useMessages } from '@/components/hooks'; 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 d1db92f3d..85456d29e 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 cc240cd24..4573b0655 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 adfaaa4f6..fc7b11e75 100644 --- a/src/app/(main)/settings/SettingsLayout.tsx +++ b/src/app/(main)/settings/SettingsLayout.tsx @@ -1,7 +1,7 @@ 'use client'; -import { Column, Grid } from '@umami/react-zen'; -import type { ReactNode } from 'react'; import { PageBody } from '@/components/common/PageBody'; +import { Column, Grid } from '@umami/react-zen'; +import { ReactNode } from 'react'; 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 e8dfb30d7..c934d596c 100644 --- a/src/app/(main)/settings/layout.tsx +++ b/src/app/(main)/settings/layout.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 3f5e6647f..c0e8221e8 100644 --- a/src/app/(main)/settings/preferences/DateRangeSetting.tsx +++ b/src/app/(main)/settings/preferences/DateRangeSetting.tsx @@ -1,9 +1,9 @@ -import { Button, Row } from '@umami/react-zen'; import { useState } from 'react'; -import { useMessages } from '@/components/hooks'; import { DateFilter } from '@/components/input/DateFilter'; +import { Button, Row } from '@umami/react-zen'; +import { useMessages } from '@/components/hooks'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; -import { getItem, setItem } from '@/lib/storage'; +import { setItem, getItem } 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 00a2d74f0..0bcaa6ba8 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 a2890ce90..9192a905a 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 61e26694f..4ddd3511a 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 { PageBody } from '@/components/common/PageBody'; -import { PageHeader } from '@/components/common/PageHeader'; -import { Panel } from '@/components/common/Panel'; 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'; 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 03bd6a6e4..d0c4fb288 100644 --- a/src/app/(main)/settings/preferences/ThemeSetting.tsx +++ b/src/app/(main)/settings/preferences/ThemeSetting.tsx @@ -1,5 +1,5 @@ -import { Button, Icon, Row, useTheme } from '@umami/react-zen'; -import { Moon, Sun } from '@/components/icons'; +import { Row, Button, Icon, useTheme } from '@umami/react-zen'; +import { Sun, Moon } 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 cf20b20da..68d8fadb0 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 { useMessages, useTimezone } from '@/components/hooks'; +import { Row, Select, ListItem, Button } from '@umami/react-zen'; +import { useTimezone, useMessages } 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 dd16870e1..bc1398f38 100644 --- a/src/app/(main)/settings/preferences/page.tsx +++ b/src/app/(main)/settings/preferences/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 6ce8ef842..885e4d660 100644 --- a/src/app/(main)/settings/profile/PasswordChangeButton.tsx +++ b/src/app/(main)/settings/profile/PasswordChangeButton.tsx @@ -1,7 +1,7 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; -import { LockKeyhole } from '@/components/icons'; +import { Button, Icon, Text, useToast, DialogTrigger, Dialog, Modal } from '@umami/react-zen'; import { PasswordEditForm } from './PasswordEditForm'; +import { LockKeyhole } from '@/components/icons'; +import { useMessages } from '@/components/hooks'; 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 6f782e44b..2c27a2d51 100644 --- a/src/app/(main)/settings/profile/PasswordEditForm.tsx +++ b/src/app/(main)/settings/profile/PasswordEditForm.tsx @@ -1,10 +1,10 @@ import { - Button, Form, - FormButtons, FormField, - FormSubmitButton, + FormButtons, PasswordField, + Button, + FormSubmitButton, } 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 f03499a37..dab836dee 100644 --- a/src/app/(main)/settings/profile/ProfilePage.tsx +++ b/src/app/(main)/settings/profile/ProfilePage.tsx @@ -1,10 +1,10 @@ 'use client'; -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 { useMessages } from '@/components/hooks'; 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'; 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 fae73a53f..156bf28e2 100644 --- a/src/app/(main)/settings/profile/ProfileSettings.tsx +++ b/src/app/(main)/settings/profile/ProfileSettings.tsx @@ -1,4 +1,4 @@ -import { Column, Label, Row } from '@umami/react-zen'; +import { Row, Column, Label } 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 6060b91f6..ad2b9bcc1 100644 --- a/src/app/(main)/settings/profile/page.tsx +++ b/src/app/(main)/settings/profile/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 dc3e3bc85..9d5c8acd2 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 9539625f8..8ad2b694b 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 { TeamSettings } from '@/app/(main)/teams/[teamId]/TeamSettings'; import { TeamProvider } from '@/app/(main)/teams/TeamProvider'; +import { TeamSettings } from '@/app/(main)/teams/[teamId]/TeamSettings'; 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 58a380bc2..5a9aaacb8 100644 --- a/src/app/(main)/settings/teams/[teamId]/page.tsx +++ b/src/app/(main)/settings/teams/[teamId]/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 a0913f45a..dd3bdade6 100644 --- a/src/app/(main)/settings/teams/page.tsx +++ b/src/app/(main)/settings/teams/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 5009ec6c6..c1812ed07 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 53b4cd9c7..0dc7bcc14 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 { Column } from '@umami/react-zen'; +import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; import { WebsiteSettings } from '@/app/(main)/websites/[websiteId]/settings/WebsiteSettings'; import { WebsiteSettingsHeader } from '@/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader'; -import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; +import { Column } from '@umami/react-zen'; 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 9adfc915e..a65a5a9fb 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 19c14fd66..cc8f886af 100644 --- a/src/app/(main)/settings/websites/page.tsx +++ b/src/app/(main)/settings/websites/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 c95259f47..87a6a4fd6 100644 --- a/src/app/(main)/teams/TeamAddForm.tsx +++ b/src/app/(main)/teams/TeamAddForm.tsx @@ -1,3 +1,4 @@ +import { useMessages, useUpdateQuery } from '@/components/hooks'; import { Button, Form, @@ -6,7 +7,6 @@ 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 697807889..0c896747e 100644 --- a/src/app/(main)/teams/TeamJoinForm.tsx +++ b/src/app/(main)/teams/TeamJoinForm.tsx @@ -1,10 +1,10 @@ import { - Button, Form, - FormButtons, FormField, - FormSubmitButton, + FormButtons, TextField, + Button, + FormSubmitButton, } 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 2cca76f86..6e455d7dd 100644 --- a/src/app/(main)/teams/TeamLeaveButton.tsx +++ b/src/app/(main)/teams/TeamLeaveButton.tsx @@ -1,6 +1,6 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; -import { useRouter } from 'next/navigation'; import { useLoginQuery, useMessages, useModified } from '@/components/hooks'; +import { useRouter } from 'next/navigation'; +import { Button, Icon, Modal, DialogTrigger, Dialog, Text } from '@umami/react-zen'; 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 b3dcaf585..1c7846b8d 100644 --- a/src/app/(main)/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/teams/TeamLeaveForm.tsx @@ -1,5 +1,5 @@ -import { ConfirmationForm } from '@/components/common/ConfirmationForm'; import { useDeleteQuery, useMessages, useModified } from '@/components/hooks'; +import { ConfirmationForm } from '@/components/common/ConfirmationForm'; export function TeamLeaveForm({ teamId, diff --git a/src/app/(main)/teams/TeamProvider.tsx b/src/app/(main)/teams/TeamProvider.tsx index cea416142..d4d319865 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 type { Team } from '@/generated/prisma/client'; +import { 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 578a273a1..911c3b2b0 100644 --- a/src/app/(main)/teams/TeamsAddButton.tsx +++ b/src/app/(main)/teams/TeamsAddButton.tsx @@ -1,8 +1,8 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; -import { useMessages, useModified } from '@/components/hooks'; +import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen'; import { Plus } from '@/components/icons'; -import { messages } from '@/components/messages'; +import { useMessages, useModified } from '@/components/hooks'; import { TeamAddForm } from './TeamAddForm'; +import { messages } from '@/components/messages'; 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 cdce7b936..4bc939b12 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 579ba5957..c45bc85cf 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 { useLoginQuery, useMessages } from '@/components/hooks'; import { ROLES } from '@/lib/constants'; -import { TeamsAddButton } from './TeamsAddButton'; +import { useLoginQuery, useMessages } from '@/components/hooks'; import { TeamsJoinButton } from './TeamsJoinButton'; +import { TeamsAddButton } from './TeamsAddButton'; export function TeamsHeader({ allowCreate = true, diff --git a/src/app/(main)/teams/TeamsJoinButton.tsx b/src/app/(main)/teams/TeamsJoinButton.tsx index 017211e2f..742954970 100644 --- a/src/app/(main)/teams/TeamsJoinButton.tsx +++ b/src/app/(main)/teams/TeamsJoinButton.tsx @@ -1,6 +1,6 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text, useToast } from '@umami/react-zen'; -import { useMessages, useModified } from '@/components/hooks'; +import { Button, Icon, Modal, DialogTrigger, Dialog, Text, useToast } from '@umami/react-zen'; import { UserPlus } from '@/components/icons'; +import { useMessages, useModified } from '@/components/hooks'; import { TeamJoinForm } from './TeamJoinForm'; export function TeamsJoinButton() { diff --git a/src/app/(main)/teams/TeamsPage.tsx b/src/app/(main)/teams/TeamsPage.tsx index 5b11bcf83..3b0f57ea4 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 { PageBody } from '@/components/common/PageBody'; +import { Column } from '@umami/react-zen'; import { Panel } from '@/components/common/Panel'; +import { PageBody } from '@/components/common/PageBody'; export function TeamsPage() { return ( diff --git a/src/app/(main)/teams/TeamsTable.tsx b/src/app/(main)/teams/TeamsTable.tsx index 754f0b2b1..b5f112331 100644 --- a/src/app/(main)/teams/TeamsTable.tsx +++ b/src/app/(main)/teams/TeamsTable.tsx @@ -1,7 +1,7 @@ -import { DataColumn, DataTable, type DataTableProps } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { DataColumn, DataTable, DataTableProps } from '@umami/react-zen'; 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 74e038f6a..eb05d362b 100644 --- a/src/app/(main)/teams/[teamId]/TeamEditForm.tsx +++ b/src/app/(main)/teams/[teamId]/TeamEditForm.tsx @@ -1,16 +1,16 @@ import { - Button, Form, - FormButtons, FormField, + FormButtons, FormSubmitButton, + TextField, + Button, 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 88cbad9ee..6c0fe46e0 100644 --- a/src/app/(main)/teams/[teamId]/TeamManage.tsx +++ b/src/app/(main)/teams/[teamId]/TeamManage.tsx @@ -1,7 +1,7 @@ -import { Button, Dialog, DialogTrigger, Modal } from '@umami/react-zen'; -import { useRouter } from 'next/navigation'; -import { ActionForm } from '@/components/common/ActionForm'; import { useMessages, useModified } from '@/components/hooks'; +import { useRouter } from 'next/navigation'; +import { Button, Modal, DialogTrigger, Dialog } from '@umami/react-zen'; +import { ActionForm } from '@/components/common/ActionForm'; 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 f75b6d18e..eb24d2aaf 100644 --- a/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx +++ b/src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx @@ -1,8 +1,8 @@ -import { useToast } from '@umami/react-zen'; import { useMessages, useModified } from '@/components/hooks'; -import { Edit } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; +import { useToast } from '@umami/react-zen'; import { TeamMemberEditForm } from './TeamMemberEditForm'; +import { DialogButton } from '@/components/input/DialogButton'; +import { Edit } from '@/components/icons'; export function TeamMemberEditButton({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx b/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx index 4826746fd..76f0800f1 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, - FormSubmitButton, ListItem, - Select, + FormSubmitButton, } 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 4d3e8e91e..4ea83540a 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 52c0fe38f..d5f993104 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 { useTeamMembersQuery } from '@/components/hooks'; import { TeamMembersTable } from './TeamMembersTable'; +import { useTeamMembersQuery } from '@/components/hooks'; export function TeamMembersDataTable({ teamId, diff --git a/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/teams/[teamId]/TeamMembersTable.tsx index 8414908c1..8d06360d5 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 { TeamMemberEditButton } from './TeamMemberEditButton'; import { TeamMemberRemoveButton } from './TeamMemberRemoveButton'; +import { TeamMemberEditButton } from './TeamMemberEditButton'; export function TeamMembersTable({ data = [], diff --git a/src/app/(main)/teams/[teamId]/TeamSettings.tsx b/src/app/(main)/teams/[teamId]/TeamSettings.tsx index 3ddbe000b..7ddd3b2fc 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 f2b4ecea0..c3a68c57f 100644 --- a/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx +++ b/src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx @@ -1,5 +1,5 @@ -import { Icon, LoadingButton, Text } from '@umami/react-zen'; import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { Icon, LoadingButton, Text } from '@umami/react-zen'; 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 10f565432..b9542eef1 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 7344f1509..ce3538955 100644 --- a/src/app/(main)/teams/page.tsx +++ b/src/app/(main)/teams/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 76710abbd..db0349cf2 100644 --- a/src/app/(main)/websites/WebsiteAddButton.tsx +++ b/src/app/(main)/websites/WebsiteAddButton.tsx @@ -1,8 +1,8 @@ -import { useToast } from '@umami/react-zen'; import { useMessages, useModified } from '@/components/hooks'; +import { useToast } from '@umami/react-zen'; import { Plus } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; import { WebsiteAddForm } from './WebsiteAddForm'; +import { DialogButton } from '@/components/input/DialogButton'; 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 df17ad5a6..b8ff7b459 100644 --- a/src/app/(main)/websites/WebsiteAddForm.tsx +++ b/src/app/(main)/websites/WebsiteAddForm.tsx @@ -1,6 +1,7 @@ -import { Button, Form, FormField, FormSubmitButton, Row, TextField } from '@umami/react-zen'; -import { useMessages, useUpdateQuery } from '@/components/hooks'; +import { Form, FormField, FormSubmitButton, Row, TextField, Button } from '@umami/react-zen'; +import { 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 75e8a3582..4129cdd3c 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 { createContext, type ReactNode } from 'react'; +import { Website } from '@/generated/prisma/client'; 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 2203262b8..93b1a7c79 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 889b6025f..86231a984 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 31de7047c..313dccc7d 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 { useMessages, useNavigation } from '@/components/hooks'; -import { WebsiteAddButton } from './WebsiteAddButton'; -import { WebsitesDataTable } from './WebsitesDataTable'; +import { PageBody } from '@/components/common/PageBody'; export function WebsitesPage() { const { teamId } = useNavigation(); diff --git a/src/app/(main)/websites/WebsitesTable.tsx b/src/app/(main)/websites/WebsitesTable.tsx index 70648ed78..c2f7e0d46 100644 --- a/src/app/(main)/websites/WebsitesTable.tsx +++ b/src/app/(main)/websites/WebsitesTable.tsx @@ -1,5 +1,5 @@ -import { DataColumn, DataTable, type DataTableProps, Icon } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Icon, DataTable, DataColumn, DataTableProps } from '@umami/react-zen'; 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 264923a61..f014bbbea 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 { 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 { Grid, Column } from '@umami/react-zen'; import { useMessages, useResultQuery } from '@/components/hooks'; +import { Panel } from '@/components/common/Panel'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { ListTable } from '@/components/metrics/ListTable'; import { MetricCard } from '@/components/metrics/MetricCard'; import { MetricsBar } from '@/components/metrics/MetricsBar'; -import { percentFilter } from '@/lib/filters'; +import { SectionHeader } from '@/components/common/SectionHeader'; import { formatLongNumber } from '@/lib/format'; +import { percentFilter } from '@/lib/filters'; export interface AttributionProps { websiteId: string; @@ -97,28 +97,34 @@ 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 48611c46e..9fe9012bc 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 1368d4bcc..ec75c58c6 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 type { Metadata } from 'next'; +import { 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 4532d9728..cd5b5d718 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 { Column, DataColumn, DataTable, Text } from '@umami/react-zen'; +import { Text, DataTable, DataColumn, Column } from '@umami/react-zen'; +import { useMessages, useResultQuery, useFormat, useFields } from '@/components/hooks'; 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 fdead9fbf..e1bb67119 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 28e33682a..bbf69a5b5 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 { Button, Column, Grid, List, ListItem } from '@umami/react-zen'; -import { useState } from 'react'; +import { Column, List, ListItem, Grid, Button } from '@umami/react-zen'; import { useFields, useMessages } from '@/components/hooks'; +import { useState } from 'react'; 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 841d86350..89295b3d0 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 type { Metadata } from 'next'; +import { 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 e336a3db6..5e266dd6c 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 { Box, Column, Dialog, Grid, Icon, ProgressBar, Row, Text } from '@umami/react-zen'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Grid, Column, Row, Text, Icon, ProgressBar, Dialog, Box } from '@umami/react-zen'; import { useMessages, useResultQuery } from '@/components/hooks'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; import { File, User } from '@/components/icons'; -import { ReportEditButton } from '@/components/input/ReportEditButton'; -import { ChangeLabel } from '@/components/metrics/ChangeLabel'; import { Lightning } from '@/components/svg'; import { formatLongNumber } from '@/lib/format'; +import { ReportEditButton } from '@/components/input/ReportEditButton'; +import { ChangeLabel } from '@/components/metrics/ChangeLabel'; 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 29b548032..7e776737e 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, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; +import { Button, DialogTrigger, Dialog, Icon, Text, Modal } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; -import { Plus } from '@/components/icons'; import { FunnelEditForm } from './FunnelEditForm'; +import { Plus } from '@/components/icons'; 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 5d950ea66..13712f2ad 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, - FormSubmitButton, - Grid, - Icon, - Loading, - Row, - Text, TextField, + Grid, + FormButtons, + FormSubmitButton, + Button, + Text, + Icon, + Row, + Loading, + Column, } from '@umami/react-zen'; import { useMessages, useReportQuery, useUpdateQuery } from '@/components/hooks'; -import { Plus, X } from '@/components/icons'; +import { X, Plus } 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 57bce52f8..c155662ff 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 { Column, Grid } from '@umami/react-zen'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { Panel } from '@/components/common/Panel'; +import { Grid, Column } from '@umami/react-zen'; import { SectionHeader } from '@/components/common/SectionHeader'; -import { useDateRange, useReportsQuery } from '@/components/hooks'; import { Funnel } from './Funnel'; import { FunnelAddButton } from './FunnelAddButton'; +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'; 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 2fdcf3b7b..0209b8062 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 type { Metadata } from 'next'; +import { 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 b6c4a11d6..dead3cab0 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 { Column, Dialog, Grid, Icon, ProgressBar, Row, Text } from '@umami/react-zen'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Grid, Row, Column, Text, Icon, ProgressBar, Dialog } from '@umami/react-zen'; +import { ReportEditButton } from '@/components/input/ReportEditButton'; 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 c85b79c54..c75d72b02 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, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; +import { Button, DialogTrigger, Dialog, Icon, Text, Modal } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; -import { Plus } from '@/components/icons'; import { GoalEditForm } from './GoalEditForm'; +import { Plus } from '@/components/icons'; 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 7f68047c3..394cdec90 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 { - Button, - Column, Form, - FormButtons, FormField, - FormSubmitButton, - Grid, - Label, - Loading, TextField, + Grid, + FormButtons, + FormSubmitButton, + Button, + Loading, + Column, + Label, } from '@umami/react-zen'; import { useMessages, useReportQuery, useUpdateQuery } from '@/components/hooks'; -import { ActionSelect } from '@/components/input/ActionSelect'; import { LookupField } from '@/components/input/LookupField'; +import { ActionSelect } from '@/components/input/ActionSelect'; 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 ff7b49fbd..29961110b 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 { Column, Grid } from '@umami/react-zen'; -import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { Panel } from '@/components/common/Panel'; +import { Grid, Column } from '@umami/react-zen'; import { SectionHeader } from '@/components/common/SectionHeader'; -import { useDateRange, useReportsQuery } from '@/components/hooks'; import { Goal } from './Goal'; import { GoalAddButton } from './GoalAddButton'; +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'; 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 b1ab691a0..e59b2c7c7 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 type { Metadata } from 'next'; +import { 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 3327a425a..d897a76a0 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 { Column, Focusable, Icon, Row, Text, Tooltip, TooltipTrigger } from '@umami/react-zen'; -import classNames from 'classnames'; import { useMemo, useState } from 'react'; +import { TooltipTrigger, Tooltip, Focusable, Icon, Text, Row, Column } from '@umami/react-zen'; import { firstBy } from 'thenby'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import classNames from 'classnames'; 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 14b8341df..269279625 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 { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; -import { Panel } from '@/components/common/Panel'; +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'; 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 f6062a61d..c055dacd6 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 type { Metadata } from 'next'; +import { 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 fdd8a146b..a8cff4577 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 { 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 { ReactNode } from 'react'; +import { Grid, Row, Column, Text, Icon } from '@umami/react-zen'; 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 0ec6e95ed..348cfb33d 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 { endOfMonth, startOfMonth } from 'date-fns'; +import { Retention } from './Retention'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { useDateRange } from '@/components/hooks'; -import { Retention } from './Retention'; +import { endOfMonth, startOfMonth } from 'date-fns'; 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 2fbbc0ac3..41713860b 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 type { Metadata } from 'next'; +import { 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 0e782a164..a5d3b1011 100644 --- a/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx +++ b/src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx @@ -1,7 +1,3 @@ -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'; @@ -15,6 +11,10 @@ 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 3e429c187..ed5120620 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 fba10f155..4bc563318 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 type { Metadata } from 'next'; +import { 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 1399174a1..2bf887546 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 0d2a73292..30b9bff22 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 8b8fd6af3..d51592cc1 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 type { Metadata } from 'next'; +import { 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 36638121d..cd6239296 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 { useMobile, useNavigation } from '@/components/hooks'; +import { useNavigation, useMobile } 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 b2ea2a83e..b949e60fc 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 6223dbc0b..9757a974a 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx @@ -1,9 +1,9 @@ -import { Column, Grid, Row } from '@umami/react-zen'; -import { ExportButton } from '@/components/input/ExportButton'; +import { Column, Row, Grid } from '@umami/react-zen'; +import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; -import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; -import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import { ExportButton } from '@/components/input/ExportButton'; export function WebsiteControls({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx index 29c3954f2..63e8f4134 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx @@ -1,24 +1,24 @@ -import { SideMenu } from '@/components/common/SideMenu'; import { useMessages, useNavigation } from '@/components/hooks'; +import { SideMenu } from '@/components/common/SideMenu'; import { - AppWindow, - Cpu, + LogOut, + LogIn, + Search, + Type, + SquareSlash, + Share2, + Megaphone, Earth, Globe, Landmark, - Languages, - Laptop, - LogIn, - LogOut, MapPin, - Megaphone, + AppWindow, + Laptop, + Languages, 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 2c670df1e..448027b6e 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx @@ -1,8 +1,8 @@ -import { Column, Grid, Row } from '@umami/react-zen'; -import { WebsiteExpandedMenu } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedMenu'; +import { Grid, Column, Row } from '@umami/react-zen'; import { useMessages, useNavigation } from '@/components/hooks'; -import { MobileMenuButton } from '@/components/input/MobileMenuButton'; import { MetricsExpandedTable } from '@/components/metrics/MetricsExpandedTable'; +import { WebsiteExpandedMenu } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedMenu'; +import { MobileMenuButton } from '@/components/input/MobileMenuButton'; export function WebsiteExpandedView({ websiteId, diff --git a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx index 7db229126..73eb96b2b 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx @@ -1,12 +1,12 @@ -import { Icon, Row, Text } from '@umami/react-zen'; -import { WebsiteShareForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteShareForm'; -import { Favicon } from '@/components/common/Favicon'; -import { LinkButton } from '@/components/common/LinkButton'; +import { Icon, Text, Row } from '@umami/react-zen'; 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 { Share, Edit } from '@/components/icons'; +import { Favicon } from '@/components/common/Favicon'; import { ActiveUsers } from '@/components/metrics/ActiveUsers'; +import { WebsiteShareForm } from '@/app/(main)/websites/[websiteId]/settings/WebsiteShareForm'; +import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; +import { LinkButton } from '@/components/common/LinkButton'; +import { DialogButton } from '@/components/input/DialogButton'; 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 7260a7ea6..c92bbd9c8 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 301895341..03c72008b 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 6c91ba6dd..7522c8ec0 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 { formatLongNumber, formatShortTime } from '@/lib/format'; +import { formatShortTime, formatLongNumber } from '@/lib/format'; +import { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; 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 ad05b7065..0fb6d5652 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx @@ -1,18 +1,18 @@ -import { Column, Text } from '@umami/react-zen'; -import { SideMenu } from '@/components/common/SideMenu'; -import { useMessages, useNavigation } from '@/components/hooks'; +import { Text, Column } from '@umami/react-zen'; import { - AlignEndHorizontal, - ChartPie, - Clock, Eye, + User, + Clock, Sheet, Tag, - User, + ChartPie, 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 f587e1121..bf8afe98f 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 a91d562e2..db52573db 100644 --- a/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsitePanels.tsx @@ -1,4 +1,3 @@ -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'; @@ -6,6 +5,7 @@ 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 ac978a238..04db76f12 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx @@ -1,6 +1,6 @@ -import { Icon, Row, Tab, TabList, Tabs, Text } from '@umami/react-zen'; +import { Tabs, TabList, Tab, Icon, Text, Row } from '@umami/react-zen'; import { useMessages, useNavigation, useWebsite } from '@/components/hooks'; -import { ChartPie, Clock, Eye, User } from '@/components/icons'; +import { Clock, Eye, User, ChartPie } 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 94d62ff2a..7571bf620 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx @@ -1,8 +1,8 @@ -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'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { ConfirmationForm } from '@/components/common/ConfirmationForm'; +import { DialogButton } from '@/components/input/DialogButton'; 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 07990712a..aea022094 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 { Edit } from '@/components/icons'; +import { Filter } from '@/lib/types'; 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 c7550352e..2c1ed1038 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, - Grid, + TextField, Label, Loading, - TextField, + Column, + Grid, } 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 6734384e3..5944d4152 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx @@ -1,7 +1,7 @@ -import { DataGrid } from '@/components/common/DataGrid'; -import { useWebsiteCohortsQuery } from '@/components/hooks'; import { CohortAddButton } from './CohortAddButton'; +import { useWebsiteCohortsQuery } from '@/components/hooks'; import { CohortsTable } from './CohortsTable'; +import { DataGrid } from '@/components/common/DataGrid'; 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 14f366e59..211e25263 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 5c7ac03fa..f9a412559 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx @@ -1,10 +1,10 @@ -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 { 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 Link from 'next/link'; 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 9946f6026..a9519c2cd 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/page.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 bca8d2447..4c5b7b932 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 { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; +import { CompareTables } from './CompareTables'; import { WebsiteControls } from '@/app/(main)/websites/[websiteId]/WebsiteControls'; import { WebsiteMetricsBar } from '@/app/(main)/websites/[websiteId]/WebsiteMetricsBar'; import { Panel } from '@/components/common/Panel'; -import { CompareTables } from './CompareTables'; +import { WebsiteChart } from '@/app/(main)/websites/[websiteId]/WebsiteChart'; 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 13c05160a..2c67b76a9 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 ( - !Number.isNaN(change) && ( + !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 1b2899b29..2b2cf5b14 100644 --- a/src/app/(main)/websites/[websiteId]/compare/page.tsx +++ b/src/app/(main)/websites/[websiteId]/compare/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 c3b1325db..41a8cfc2d 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 { PieChart } from '@/components/charts/PieChart'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Select, ListItem, Grid, Column } from '@umami/react-zen'; import { useEventDataPropertiesQuery, useEventDataValuesQuery, useMessages, } from '@/components/hooks'; -import { ListTable } from '@/components/metrics/ListTable'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { PieChart } from '@/components/charts/PieChart'; import { CHART_COLORS } from '@/lib/constants'; +import { ListTable } from '@/components/metrics/ListTable'; 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 f686b3fd4..805f1252f 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx @@ -1,8 +1,9 @@ -import { type ReactNode, useState } from 'react'; -import { DataGrid } from '@/components/common/DataGrid'; +import { useState } from 'react'; import { useMessages, useWebsiteEventsQuery } from '@/components/hooks'; -import { FilterButtons } from '@/components/input/FilterButtons'; import { EventsTable } from './EventsTable'; +import { DataGrid } from '@/components/common/DataGrid'; +import { ReactNode } from 'react'; +import { FilterButtons } from '@/components/input/FilterButtons'; 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 a7ed399ce..2712c985e 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 55ec04037..780891b57 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 { 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 { TabList, Tab, Tabs, TabPanel, Column } from '@umami/react-zen'; import { MetricsTable } from '@/components/metrics/MetricsTable'; -import { getItem, setItem } from '@/lib/storage'; -import { EventProperties } from './EventProperties'; +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 { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; 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 7fb2eb41f..ea0edde1b 100644 --- a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx @@ -1,24 +1,24 @@ import { - Button, - DataColumn, DataTable, - type DataTableProps, + DataColumn, + Row, + Text, + DataTableProps, + IconLabel, + Button, Dialog, DialogTrigger, Icon, - IconLabel, Popover, - Row, - Text, } from '@umami/react-zen'; -import Link from 'next/link'; +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 { 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 d77ba3bdc..d68d727d5 100644 --- a/src/app/(main)/websites/[websiteId]/events/page.tsx +++ b/src/app/(main)/websites/[websiteId]/events/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 67595e9d1..8a3ab2a43 100644 --- a/src/app/(main)/websites/[websiteId]/layout.tsx +++ b/src/app/(main)/websites/[websiteId]/layout.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 d4889c5dc..9755e6d01 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 6e2495b53..c4ee9c023 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx @@ -1,8 +1,8 @@ -import { IconLabel } from '@umami/react-zen'; import { useCallback } from 'react'; -import { TypeIcon } from '@/components/common/TypeIcon'; -import { useCountryNames, useLocale, useMessages } from '@/components/hooks'; +import { IconLabel } from '@umami/react-zen'; import { ListTable } from '@/components/metrics/ListTable'; +import { useLocale, useCountryNames, useMessages } from '@/components/hooks'; +import { TypeIcon } from '@/components/common/TypeIcon'; 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 2b9d881ee..cdd67e7a4 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx @@ -1,5 +1,5 @@ -import { useMessages } from '@/components/hooks'; import { MetricCard } from '@/components/metrics/MetricCard'; +import { useMessages } from '@/components/hooks'; 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 10763618b..3dec340f2 100644 --- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx +++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx @@ -1,11 +1,10 @@ -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 { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; +import { SearchField, Text, Column, Row, IconLabel, Heading } from '@umami/react-zen'; +import Link from 'next/link'; 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, @@ -16,9 +15,10 @@ 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 6220c6957..0f9fa358b 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 { Grid } from '@umami/react-zen'; import { firstBy } from 'thenby'; +import { Grid } from '@umami/react-zen'; 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 { percentFilter } from '@/lib/filters'; -import { RealtimeCountries } from './RealtimeCountries'; -import { RealtimeHeader } from './RealtimeHeader'; +import { useMobile, useRealtimeQuery } from '@/components/hooks'; import { RealtimeLog } from './RealtimeLog'; +import { RealtimeHeader } from './RealtimeHeader'; 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 1f90ad831..91c6b4d88 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 { useMessages, useWebsite } from '@/components/hooks'; -import { ListTable } from '@/components/metrics/ListTable'; import { percentFilter } from '@/lib/filters'; +import { ListTable } from '@/components/metrics/ListTable'; +import { useMessages, useWebsite } from '@/components/hooks'; 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 9fd4477b7..85326cd09 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 { useMessages, useWebsite } from '@/components/hooks'; -import { ListTable } from '@/components/metrics/ListTable'; import { percentFilter } from '@/lib/filters'; +import { ListTable } from '@/components/metrics/ListTable'; +import { useMessages, useWebsite } from '@/components/hooks'; 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 1552196c7..c1bdd4c51 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 7b70fee6a..052d3185b 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 { DialogButton } from '@/components/input/DialogButton'; import { SegmentEditForm } from './SegmentEditForm'; +import { DialogButton } from '@/components/input/DialogButton'; 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 bb52a2209..35ef83bb3 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx @@ -1,8 +1,8 @@ -import { ConfirmationForm } from '@/components/common/ConfirmationForm'; -import { useDeleteQuery, useMessages } from '@/components/hooks'; import { Trash } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; +import { ConfirmationForm } from '@/components/common/ConfirmationForm'; import { messages } from '@/components/messages'; +import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { DialogButton } from '@/components/input/DialogButton'; 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 5c56cf1ea..6d422c95b 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx @@ -1,8 +1,8 @@ -import { useMessages } from '@/components/hooks'; import { Edit } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; -import type { Filter } from '@/lib/types'; +import { useMessages } from '@/components/hooks'; import { SegmentEditForm } from './SegmentEditForm'; +import { Filter } from '@/lib/types'; +import { DialogButton } from '@/components/input/DialogButton'; 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 c3529d97c..26b973529 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, - Label, - Loading, TextField, + Loading, + Label, } from '@umami/react-zen'; -import { useMessages, useUpdateQuery, useWebsiteSegmentQuery } from '@/components/hooks'; import { FieldFilters } from '@/components/input/FieldFilters'; +import { useMessages, useUpdateQuery, useWebsiteSegmentQuery } from '@/components/hooks'; 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 c1ba82ebb..d98bad028 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx @@ -1,7 +1,7 @@ -import { DataGrid } from '@/components/common/DataGrid'; -import { useWebsiteSegmentsQuery } from '@/components/hooks'; import { SegmentAddButton } from './SegmentAddButton'; +import { useWebsiteSegmentsQuery } from '@/components/hooks'; import { SegmentsTable } from './SegmentsTable'; +import { DataGrid } from '@/components/common/DataGrid'; 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 cbe7a1c1f..9f2d8097c 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 4dbe51146..573572aac 100644 --- a/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx @@ -1,9 +1,9 @@ -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 { 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 Link from 'next/link'; 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 0d3faacbf..9f406b16b 100644 --- a/src/app/(main)/websites/[websiteId]/segments/page.tsx +++ b/src/app/(main)/websites/[websiteId]/segments/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 cbb281083..7bcf1b760 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx @@ -1,21 +1,21 @@ -import { - Button, - Column, - Dialog, - DialogTrigger, - Heading, - Icon, - Popover, - Row, - StatusLight, - Text, -} from '@umami/react-zen'; import { isSameDay } from 'date-fns'; +import { + Icon, + StatusLight, + Column, + Row, + Heading, + Text, + Button, + DialogTrigger, + Popover, + Dialog, +} from '@umami/react-zen'; import { LoadingPanel } from '@/components/common/LoadingPanel'; -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'; +import { useMessages, useMobile, useSessionActivityQuery, useTimezone } from '@/components/hooks'; +import { EventData } from '@/components/metrics/EventData'; 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 7c82c17ad..849e0b7db 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx @@ -1,8 +1,8 @@ -import { Box, Column, Label, Row, Text } from '@umami/react-zen'; -import { Empty } from '@/components/common/Empty'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Text, Column, Row, Label, Box } from '@umami/react-zen'; import { useSessionDataQuery } from '@/components/hooks'; +import { Empty } from '@/components/common/Empty'; import { DATA_TYPES } from '@/lib/constants'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; 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 f15e6ee51..e968daba1 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx @@ -1,9 +1,9 @@ -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 { ReactNode } from 'react'; +import { Icon, Grid, Column, Row, Label } from '@umami/react-zen'; import { useFormat, useLocale, useMessages, useRegionNames } from '@/components/hooks'; -import { Calendar, KeyRound, Landmark, MapPin } from '@/components/icons'; +import { TypeIcon } from '@/components/common/TypeIcon'; +import { KeyRound, Calendar, MapPin, Landmark } from '@/components/icons'; +import { DateDistance } from '@/components/common/DateDistance'; 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 d6580388c..6c34b97b8 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx @@ -1,4 +1,4 @@ -import { Column, Dialog, Modal, type ModalProps } from '@umami/react-zen'; +import { Dialog, Modal, ModalProps, Column } 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 6624d439d..e83c7957f 100644 --- a/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx +++ b/src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx @@ -1,15 +1,14 @@ import { - Button, - Column, - Icon, - Row, - Tab, - TabList, - TabPanel, - Tabs, TextField, + Row, + Column, + Tabs, + TabList, + Tab, + TabPanel, + Button, + Icon, } 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'; @@ -17,6 +16,7 @@ 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 1693d0570..e66302ad6 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 { PieChart } from '@/components/charts/PieChart'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Select, ListItem, Grid, Column } from '@umami/react-zen'; import { useMessages, useSessionDataPropertiesQuery, useSessionDataValuesQuery, } from '@/components/hooks'; -import { ListTable } from '@/components/metrics/ListTable'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { PieChart } from '@/components/charts/PieChart'; import { CHART_COLORS } from '@/lib/constants'; +import { ListTable } from '@/components/metrics/ListTable'; 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 b1b9f658a..53b35b214 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 c8317a2be..b959f0dac 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 8e9d2f218..8a096aa78 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 { 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 { 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 { SessionModal } from '@/app/(main)/websites/[websiteId]/sessions/SessionModal'; 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 5d3bb374e..ab4977ea2 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 { Avatar } from '@/components/common/Avatar'; -import { DateDistance } from '@/components/common/DateDistance'; -import { TypeIcon } from '@/components/common/TypeIcon'; +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'; 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 221ab71cc..7bf8216bf 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 21cd61370..1c1863859 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, Column, Dialog, DialogTrigger, Modal } from '@umami/react-zen'; -import { ActionForm } from '@/components/common/ActionForm'; +import { Button, Modal, DialogTrigger, Dialog, Column } from '@umami/react-zen'; import { useLoginQuery, useMessages, useModified, - useNavigation, useUserTeamsQuery, + useNavigation, } 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 2fc027687..780aab74e 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx @@ -1,5 +1,5 @@ -import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; import { useDeleteQuery, useMessages } from '@/components/hooks'; +import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; 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 4ae819ee5..c7cb3d89f 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx @@ -1,4 +1,4 @@ -import { Form, FormButtons, FormField, FormSubmitButton, TextField } from '@umami/react-zen'; +import { FormSubmitButton, Form, FormField, FormButtons, 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 d791bc965..43583c3e2 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx @@ -1,5 +1,5 @@ -import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; import { useMessages, useUpdateQuery } from '@/components/hooks'; +import { TypeConfirmationForm } from '@/components/common/TypeConfirmationForm'; 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 3970cdbdb..a50aceeea 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 { WebsiteData } from './WebsiteData'; -import { WebsiteEditForm } from './WebsiteEditForm'; import { WebsiteShareForm } from './WebsiteShareForm'; import { WebsiteTrackingCode } from './WebsiteTrackingCode'; +import { WebsiteData } from './WebsiteData'; +import { WebsiteEditForm } from './WebsiteEditForm'; +import { Panel } from '@/components/common/Panel'; 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 99977a0be..216142ec9 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 { ArrowLeft, Globe } from '@/components/icons'; +import { IconLabel, Row } from '@umami/react-zen'; 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 56c6f436f..f89d25fdd 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, - IconLabel, + Column, Label, Row, - Switch, - TextField, + IconLabel, } from '@umami/react-zen'; -import { RefreshCcw } from 'lucide-react'; import { useState } from 'react'; -import { useConfig, useMessages, useUpdateQuery } from '@/components/hooks'; import { getRandomChars } from '@/lib/generate'; +import { useMessages, useUpdateQuery, useConfig } from '@/components/hooks'; +import { RefreshCcw } from 'lucide-react'; 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 d24f9485d..bdc49c759 100644 --- a/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx @@ -1,5 +1,5 @@ -import { Column, Label, Text, TextField } from '@umami/react-zen'; -import { useConfig, useMessages } from '@/components/hooks'; +import { TextField, Text, Column, Label } from '@umami/react-zen'; +import { useMessages, useConfig } 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 8af4f05c2..f16ab93c0 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 a26d14f72..a3aed621b 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 cefaf8096..c3e54be69 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 ae1a00073..b8898e884 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 09b2ef98d..8d6d81bfc 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 7c2b2fed0..2c312a918 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 { saveAuth } from '@/lib/auth'; -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'; +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'; 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 bba3dde30..fc8fb9bf3 100644 --- a/src/app/api/auth/sso/route.ts +++ b/src/app/api/auth/sso/route.ts @@ -1,7 +1,7 @@ -import { saveAuth } from '@/lib/auth'; import redis from '@/lib/redis'; -import { parseRequest } from '@/lib/request'; import { json } from '@/lib/response'; +import { parseRequest } from '@/lib/request'; +import { saveAuth } from '@/lib/auth'; 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 92f572c43..512f39c96 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 { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; -import { canDeleteLink, canUpdateLink, canViewLink } from '@/permissions'; +import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; 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 a639888bd..2d1e70ea3 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 24c737053..51812910d 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 { badRequest, json } from '@/lib/response'; +import { json, badRequest } 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 555bf3003..3fa5b4195 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 9ec39c78d..06d5daaa6 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 ecaf1fdf6..2f547c04f 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 { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; -import { canDeletePixel, canUpdatePixel, canViewPixel } from '@/permissions'; +import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; 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 8baae4f3e..2302c4246 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 32b7a16c1..eaa0bbd8c 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 bd7d86dc7..4c5003773 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 { canViewWebsite } from '@/permissions'; -import { type AttributionParameters, getAttribution } from '@/queries/sql/reports/getAttribution'; +import { 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 3c5931458..8d96cf5d6 100644 --- a/src/app/api/reports/breakdown/route.ts +++ b/src/app/api/reports/breakdown/route.ts @@ -1,8 +1,8 @@ -import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { reportResultSchema } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; -import { type BreakdownParameters, getBreakdown } from '@/queries/sql'; +import { unauthorized, json } from '@/lib/response'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { BreakdownParameters, getBreakdown } from '@/queries/sql'; +import { reportResultSchema } from '@/lib/schema'; 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 c13f6f1c8..2ba4b8627 100644 --- a/src/app/api/reports/funnel/route.ts +++ b/src/app/api/reports/funnel/route.ts @@ -1,8 +1,8 @@ -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'; +import { unauthorized, json } from '@/lib/response'; +import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; +import { FunnelParameters, getFunnel } from '@/queries/sql'; +import { reportResultSchema } from '@/lib/schema'; 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 3bd0415d6..f9848fa7e 100644 --- a/src/app/api/reports/goal/route.ts +++ b/src/app/api/reports/goal/route.ts @@ -1,8 +1,8 @@ -import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { reportResultSchema } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; -import { type GoalParameters, getGoal } from '@/queries/sql/reports/getGoal'; +import { unauthorized, json } from '@/lib/response'; +import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; +import { getGoal, GoalParameters } from '@/queries/sql/reports/getGoal'; +import { reportResultSchema } from '@/lib/schema'; 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 29e853196..d4e5e18d6 100644 --- a/src/app/api/reports/journey/route.ts +++ b/src/app/api/reports/journey/route.ts @@ -1,8 +1,8 @@ -import { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { reportResultSchema } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; +import { unauthorized, json } from '@/lib/response'; +import { getQueryFilters, parseRequest } from '@/lib/request'; import { getJourney } from '@/queries/sql'; +import { reportResultSchema } from '@/lib/schema'; 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 d1a7d698b..69d61c0e3 100644 --- a/src/app/api/reports/retention/route.ts +++ b/src/app/api/reports/retention/route.ts @@ -1,8 +1,8 @@ -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'; +import { unauthorized, json } from '@/lib/response'; +import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; +import { getRetention, RetentionParameters } from '@/queries/sql'; +import { reportResultSchema } from '@/lib/schema'; 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 6a556612b..75930adcb 100644 --- a/src/app/api/reports/revenue/route.ts +++ b/src/app/api/reports/revenue/route.ts @@ -1,8 +1,8 @@ -import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { reportResultSchema } from '@/lib/schema'; import { canViewWebsite } from '@/permissions'; -import { getRevenue, type RevenuParameters } from '@/queries/sql/reports/getRevenue'; +import { unauthorized, json } from '@/lib/response'; +import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request'; +import { reportResultSchema } from '@/lib/schema'; +import { getRevenue, 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 b0a413543..123a7e66a 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 { parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; import { pagingParams, reportSchema, reportTypeParam } from '@/lib/schema'; -import { canUpdateWebsite, canViewWebsite } from '@/permissions'; -import { createReport, getReports } from '@/queries/prisma'; +import { parseRequest } from '@/lib/request'; +import { canViewWebsite, canUpdateWebsite } from '@/permissions'; +import { unauthorized, json } from '@/lib/response'; +import { getReports, createReport } 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 577fdab79..ef0ff5fea 100644 --- a/src/app/api/reports/utm/route.ts +++ b/src/app/api/reports/utm/route.ts @@ -1,9 +1,9 @@ -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'; +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'; 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 d1a7b90ba..2c2085bfb 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -1,18 +1,18 @@ -import { startOfHour, startOfMonth } from 'date-fns'; -import { isbot } from 'isbot'; -import { serializeError } from 'serialize-error'; import { z } from 'zod'; +import { isbot } from 'isbot'; +import { startOfHour, startOfMonth } from 'date-fns'; import clickhouse from '@/lib/clickhouse'; -import { COLLECTION_TYPE, EVENT_TYPE } from '@/lib/constants'; -import { hash, secret, uuid } from '@/lib/crypto'; +import { parseRequest } from '@/lib/request'; +import { badRequest, json, forbidden, serverError } from '@/lib/response'; +import { fetchWebsite } from '@/lib/load'; import { getClientInfo, hasBlockedIp } from '@/lib/detect'; import { createToken, parseToken } from '@/lib/jwt'; -import { fetchWebsite } from '@/lib/load'; -import { parseRequest } from '@/lib/request'; -import { badRequest, forbidden, json, serverError } from '@/lib/response'; +import { secret, uuid, hash } from '@/lib/crypto'; +import { COLLECTION_TYPE, EVENT_TYPE } from '@/lib/constants'; 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(Date.now() / 1000); + const now = Math.floor(new Date().getTime() / 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 bef87c4fb..9b2960a1d 100644 --- a/src/app/api/share/[shareId]/route.ts +++ b/src/app/api/share/[shareId]/route.ts @@ -1,9 +1,9 @@ -import { secret } from '@/lib/crypto'; -import { createToken } from '@/lib/jwt'; import { json, notFound } from '@/lib/response'; +import { createToken } from '@/lib/jwt'; +import { secret } from '@/lib/crypto'; 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 41e139b33..39ac769ee 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { pagingParams, searchParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; import { canViewTeam } from '@/permissions'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { pagingParams, searchParams } from '@/lib/schema'; 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 daac2040d..bacb66680 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { pagingParams, searchParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; import { canViewTeam } from '@/permissions'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { pagingParams, searchParams } from '@/lib/schema'; 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 c334b2af0..de3e3143c 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 { parseRequest } from '@/lib/request'; -import { json, notFound, ok, unauthorized } from '@/lib/response'; +import { unauthorized, json, notFound, ok } from '@/lib/response'; import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/permissions'; +import { parseRequest } from '@/lib/request'; 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 d09af9da6..7e3c154b3 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 { z } from 'zod'; +import { canDeleteTeamUser, canUpdateTeam } from '@/permissions'; import { parseRequest } from '@/lib/request'; import { badRequest, json, ok, unauthorized } from '@/lib/response'; -import { teamRoleParam } from '@/lib/schema'; -import { canDeleteTeamUser, canUpdateTeam } from '@/permissions'; import { deleteTeamUser, getTeamUser, updateTeamUser } from '@/queries/prisma'; +import { z } from 'zod'; +import { teamRoleParam } from '@/lib/schema'; 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 c1297636e..6f97ac29c 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 05c6d8045..a51076dc4 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { pagingParams, searchParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; import { canViewTeam } from '@/permissions'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { pagingParams, searchParams } from '@/lib/schema'; 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 3ce0913f7..e6bfb8712 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 { ROLES } from '@/lib/constants'; +import { json, badRequest, notFound } from '@/lib/response'; import { parseRequest } from '@/lib/request'; -import { badRequest, json, notFound } from '@/lib/response'; +import { ROLES } from '@/lib/constants'; 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 53ef59239..2b9985ba4 100644 --- a/src/app/api/teams/route.ts +++ b/src/app/api/teams/route.ts @@ -1,11 +1,11 @@ import { z } from 'zod'; -import { uuid } from '@/lib/crypto'; import { getRandomChars } from '@/lib/generate'; -import { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { pagingParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; import { canCreateTeam } from '@/permissions'; +import { uuid } from '@/lib/crypto'; +import { getQueryFilters, parseRequest } from '@/lib/request'; import { createTeam, getUserTeams } from '@/queries/prisma'; +import { pagingParams } from '@/lib/schema'; 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 aade8aa8d..c15b4b71b 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 7a834a3f1..c2c34342a 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 1107d8e16..1c2285baf 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; +import { unauthorized, json } from '@/lib/response'; import { pagingParams, searchParams } from '@/lib/schema'; +import { getQueryFilters, parseRequest } from '@/lib/request'; 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 dbb114cf7..1e7ed9eb2 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 { badRequest, json, unauthorized } from '@/lib/response'; -import { canCreateUser } from '@/permissions'; +import { unauthorized, json, badRequest } from '@/lib/response'; 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 233b97e50..f0abd4c3e 100644 --- a/src/app/api/websites/[websiteId]/active/route.ts +++ b/src/app/api/websites/[websiteId]/active/route.ts @@ -1,7 +1,7 @@ -import { parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; +import { json, unauthorized } from '@/lib/response'; import { getActiveVisitors } from '@/queries/sql'; +import { parseRequest } from '@/lib/request'; 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 14a241fd9..312daad68 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 54afab214..1dea78963 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 { json, unauthorized } from '@/lib/response'; +import { unauthorized, json } 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 eb6ee6ed8..2420f0fac 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 { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 bce6a977c..cfee49679 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 { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 52d15cfbd..df513e5a4 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 042e989a4..bb482e2cd 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 { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 12e8f2dc0..2921af9fe 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 { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 74ec3ece4..6dbdea7d8 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 977e9c813..a579991b3 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { filterParams, timezoneParam, unitParam } from '@/lib/schema'; +import { parseRequest, getQueryFilters } from '@/lib/request'; +import { unauthorized, json } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; +import { filterParams, timezoneParam, unitParam } from '@/lib/schema'; 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 eec81c6d4..fbf250e65 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 { json, unauthorized } from '@/lib/response'; -import { dateRangeParams, pagingParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 d52c17736..703cf5ee7 100644 --- a/src/app/api/websites/[websiteId]/metrics/expanded/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/expanded/route.ts @@ -1,4 +1,3 @@ -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'; @@ -10,6 +9,7 @@ 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 12784adbe..3bfeaa6a4 100644 --- a/src/app/api/websites/[websiteId]/metrics/route.ts +++ b/src/app/api/websites/[websiteId]/metrics/route.ts @@ -1,4 +1,3 @@ -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'; @@ -10,6 +9,7 @@ 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 af59bce46..939fa7f4c 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 { 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 { getQueryFilters, parseRequest } from '@/lib/request'; +import { dateRangeParams, filterParams } from '@/lib/schema'; +import { getCompareDate } from '@/lib/date'; +import { unauthorized, json } from '@/lib/response'; 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 93e7ab468..22851f445 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 e0be5a53e..c5ac3dffe 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 b4c0e7e88..4c1477079 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 { badRequest, json, ok, serverError, unauthorized } from '@/lib/response'; -import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions'; +import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response'; 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 b51f783bf..0aa36e702 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 { z } from 'zod'; +import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions'; 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 45927656c..26afd99ea 100644 --- a/src/app/api/websites/[websiteId]/segments/route.ts +++ b/src/app/api/websites/[websiteId]/segments/route.ts @@ -1,10 +1,10 @@ -import { z } from 'zod'; +import { canUpdateWebsite, canViewWebsite } from '@/permissions'; import { uuid } from '@/lib/crypto'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; -import { anyObjectParam, searchParams, segmentTypeParam } from '@/lib/schema'; -import { canUpdateWebsite, canViewWebsite } from '@/permissions'; +import { segmentTypeParam, searchParams, anyObjectParam } from '@/lib/schema'; 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 2d8db1535..64328ce56 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 { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; 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 7d06870ac..75464ba4b 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 { z } from 'zod'; +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 { getSessionDataValues } from '@/queries/sql'; +import { z } from 'zod'; +import { filterParams } from '@/lib/schema'; 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 41b766d03..f68a9cc32 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; +import { parseRequest, getQueryFilters } from '@/lib/request'; +import { unauthorized, json } 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 6b5c2418a..ca108d76a 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 { parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; +import { unauthorized, json } 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 109166370..3001b8570 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 { parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; +import { unauthorized, json } 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 ed4757a1c..340774b21 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 { json, unauthorized } from '@/lib/response'; -import { dateRangeParams, filterParams, pagingParams, searchParams } from '@/lib/schema'; +import { unauthorized, json } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; +import { dateRangeParams, filterParams, pagingParams, searchParams } from '@/lib/schema'; 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 459830edf..8179bdb23 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 { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { filterParams } from '@/lib/schema'; +import { parseRequest, getQueryFilters } from '@/lib/request'; +import { unauthorized, json } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; +import { filterParams } from '@/lib/schema'; 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 b9ccf3ef0..f3d17f946 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 07c8b9699..8fcb01325 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 { getCompareDate } from '@/lib/date'; -import { getQueryFilters, parseRequest } from '@/lib/request'; -import { json, unauthorized } from '@/lib/response'; -import { dateRangeParams, filterParams } from '@/lib/schema'; +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'; 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 df2fed20d..8ae7a9272 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 172325e3f..35983d04e 100644 --- a/src/app/api/websites/[websiteId]/values/route.ts +++ b/src/app/api/websites/[websiteId]/values/route.ts @@ -1,11 +1,11 @@ -import { z } from 'zod'; +import { canViewWebsite } from '@/permissions'; 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 { dateRangeParams, fieldsParam, searchParams } from '@/lib/schema'; -import { canViewWebsite } from '@/permissions'; -import { getWebsiteSegments } from '@/queries/prisma'; import { getValues } from '@/queries/sql'; +import { getWebsiteSegments } from '@/queries/prisma'; +import { z } from 'zod'; +import { dateRangeParams, fieldsParam, searchParams } from '@/lib/schema'; export async function GET( request: Request, diff --git a/src/app/api/websites/route.ts b/src/app/api/websites/route.ts index e2b26c108..994e22bd7 100644 --- a/src/app/api/websites/route.ts +++ b/src/app/api/websites/route.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -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 { json, unauthorized } from '@/lib/response'; +import { uuid } from '@/lib/crypto'; +import { getQueryFilters, parseRequest } from '@/lib/request'; +import { pagingParams, searchParams } from '@/lib/schema'; 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 afcbfc604..745f6461c 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 63711795e..b151b94ea 100644 --- a/src/app/login/LoginForm.tsx +++ b/src/app/login/LoginForm.tsx @@ -1,19 +1,19 @@ import { - Column, Form, FormButtons, FormField, FormSubmitButton, - Heading, - Icon, - PasswordField, TextField, + PasswordField, + Icon, + Column, + Heading, } from '@umami/react-zen'; import { useRouter } from 'next/navigation'; import { useMessages, useUpdateQuery } from '@/components/hooks'; -import { Logo } from '@/components/svg'; -import { setClientAuthToken } from '@/lib/client'; import { setUser } from '@/store/app'; +import { setClientAuthToken } from '@/lib/client'; +import { Logo } from '@/components/svg'; export function LoginForm() { const { formatMessage, labels, getErrorMessage } = useMessages(); diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index ea27735ac..8abf7a4e0 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { 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 33e1615d2..d66d62a98 100644 --- a/src/app/logout/LogoutPage.tsx +++ b/src/app/logout/LogoutPage.tsx @@ -1,9 +1,9 @@ 'use client'; -import { useRouter } from 'next/navigation'; import { useEffect } from 'react'; +import { useRouter } from 'next/navigation'; import { useApi } from '@/components/hooks'; -import { removeClientAuthToken } from '@/lib/client'; import { setUser } from '@/store/app'; +import { removeClientAuthToken } from '@/lib/client'; export function LogoutPage() { const router = useRouter(); diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx index 20952788a..0617c2e2d 100644 --- a/src/app/logout/page.tsx +++ b/src/app/logout/page.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next'; +import { Metadata } from 'next'; import { LogoutPage } from './LogoutPage'; export default function () { diff --git a/src/app/page.tsx b/src/app/page.tsx index 38eda1dea..8bf748f9b 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,8 +1,8 @@ 'use client'; -import { redirect } from 'next/navigation'; import { useEffect } from 'react'; -import { LAST_TEAM_CONFIG } from '@/lib/constants'; +import { redirect } from 'next/navigation'; import { getItem, removeItem } from '@/lib/storage'; +import { LAST_TEAM_CONFIG } from '@/lib/constants'; export default function RootPage() { useEffect(() => { diff --git a/src/app/share/[...shareId]/Header.tsx b/src/app/share/[...shareId]/Header.tsx index d7b7dcb42..ef4fe5eac 100644 --- a/src/app/share/[...shareId]/Header.tsx +++ b/src/app/share/[...shareId]/Header.tsx @@ -1,4 +1,4 @@ -import { Icon, Row, Text, ThemeButton } from '@umami/react-zen'; +import { Row, Icon, 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 55d3ee9f1..f33798a1c 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 { 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 { WebsitePage } from '@/app/(main)/websites/[websiteId]/WebsitePage'; import { useShareTokenQuery } from '@/components/hooks'; -import { Footer } from './Footer'; +import { PageBody } from '@/components/common/PageBody'; import { Header } from './Header'; +import { Footer } from './Footer'; +import { WebsiteHeader } from '@/app/(main)/websites/[websiteId]/WebsiteHeader'; export function SharePage({ shareId }) { const { shareToken, isLoading } = useShareTokenQuery(shareId); diff --git a/src/app/sso/SSOPage.tsx b/src/app/sso/SSOPage.tsx index 3cc950938..ec04c0901 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 7bfc72d21..3f3efd3be 100644 --- a/src/components/charts/BarChart.tsx +++ b/src/components/charts/BarChart.tsx @@ -1,11 +1,11 @@ -import { useTheme } from '@umami/react-zen'; import { useMemo, useState } from 'react'; -import { Chart, type ChartProps } from '@/components/charts/Chart'; +import { useTheme } from '@umami/react-zen'; 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 { DATE_FORMATS, formatDate } from '@/lib/date'; +import { formatDate, DATE_FORMATS } from '@/lib/date'; import { formatLongCurrency, formatLongNumber } from '@/lib/format'; const dateFormats = { @@ -52,7 +52,7 @@ export function BarChart({ const chartOptions: any = useMemo(() => { return { - __id: Date.now(), + __id: new Date().getTime(), scales: { x: { type: XAxisType, diff --git a/src/components/charts/BubbleChart.tsx b/src/components/charts/BubbleChart.tsx index bf487ac05..91c47b590 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 b6ae9d794..b68e45a05 100644 --- a/src/components/charts/Chart.tsx +++ b/src/components/charts/Chart.tsx @@ -1,11 +1,6 @@ -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 { 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 { 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 95ba2a2b4..e93d669eb 100644 --- a/src/components/charts/ChartTooltip.tsx +++ b/src/components/charts/ChartTooltip.tsx @@ -1,5 +1,5 @@ -import { Column, FloatingTooltip, Row, StatusLight } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Column, Row, StatusLight, FloatingTooltip } from '@umami/react-zen'; export function ChartTooltip({ title, diff --git a/src/components/charts/PieChart.tsx b/src/components/charts/PieChart.tsx index 2470fe77e..f9a9ea52b 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 c6f44e802..d97064757 100644 --- a/src/components/common/ActionForm.tsx +++ b/src/components/common/ActionForm.tsx @@ -1,4 +1,4 @@ -import { Column, Row, Text } from '@umami/react-zen'; +import { Row, Column, 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 f9948971a..04a28c5bb 100644 --- a/src/components/common/AnimatedDiv.tsx +++ b/src/components/common/AnimatedDiv.tsx @@ -1,3 +1,3 @@ -import { type AnimatedComponent, animated } from '@react-spring/web'; +import { animated, AnimatedComponent } 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 9b198b30c..f8ed7c948 100644 --- a/src/components/common/Avatar.tsx +++ b/src/components/common/Avatar.tsx @@ -1,6 +1,6 @@ -import { lorelei } from '@dicebear/collection'; -import { createAvatar } from '@dicebear/core'; import { useMemo } from 'react'; +import { createAvatar } from '@dicebear/core'; +import { lorelei } from '@dicebear/collection'; import { getColor, getPastel } from '@/lib/colors'; const lib = lorelei; diff --git a/src/components/common/ConfirmationForm.tsx b/src/components/common/ConfirmationForm.tsx index b909ef58a..ce82b54f0 100644 --- a/src/components/common/ConfirmationForm.tsx +++ b/src/components/common/ConfirmationForm.tsx @@ -1,5 +1,5 @@ -import { Box, Button, Form, FormButtons, FormSubmitButton } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Box, Button, FormSubmitButton, Form, FormButtons } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; export interface ConfirmationFormProps { diff --git a/src/components/common/DataGrid.tsx b/src/components/common/DataGrid.tsx index 7e07b8dcd..4d09135f0 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 { Empty } from '@/components/common/Empty'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; -import { Pager } from '@/components/common/Pager'; +import { SearchField, Row, Column } from '@umami/react-zen'; +import { UseQueryResult } from '@tanstack/react-query'; import { useMessages, useMobile, useNavigation } from '@/components/hooks'; -import type { PageResult } from '@/lib/types'; +import { Pager } from '@/components/common/Pager'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { PageResult } from '@/lib/types'; +import { Empty } from '@/components/common/Empty'; const DEFAULT_SEARCH_DELAY = 600; diff --git a/src/components/common/DateDisplay.tsx b/src/components/common/DateDisplay.tsx index 0bece8aed..ea94d7273 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 64492e043..16f6cb902 100644 --- a/src/components/common/EmptyPlaceholder.tsx +++ b/src/components/common/EmptyPlaceholder.tsx @@ -1,5 +1,5 @@ -import { Column, Icon, Text } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Icon, Text, Column } from '@umami/react-zen'; export interface EmptyPlaceholderProps { title?: string; diff --git a/src/components/common/ErrorBoundary.tsx b/src/components/common/ErrorBoundary.tsx index 4c0c82ed3..acb979ed2 100644 --- a/src/components/common/ErrorBoundary.tsx +++ b/src/components/common/ErrorBoundary.tsx @@ -1,6 +1,6 @@ -import { Button, Column } from '@umami/react-zen'; -import type { ErrorInfo, ReactNode } from 'react'; +import { ErrorInfo, ReactNode } from 'react'; import { ErrorBoundary as Boundary } from 'react-error-boundary'; +import { Button, Column } from '@umami/react-zen'; 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 3c3015131..6bf9003cc 100644 --- a/src/components/common/ErrorMessage.tsx +++ b/src/components/common/ErrorMessage.tsx @@ -1,4 +1,4 @@ -import { Icon, Row, Text } from '@umami/react-zen'; +import { Icon, Text, Row } 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 6b6dbb998..330e972a1 100644 --- a/src/components/common/ExternalLink.tsx +++ b/src/components/common/ExternalLink.tsx @@ -1,5 +1,5 @@ -import { Icon, Row, Text } from '@umami/react-zen'; import Link from 'next/link'; +import { Icon, Row, Text } from '@umami/react-zen'; 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 d719a37e8..69e225b9e 100644 --- a/src/components/common/FilterLink.tsx +++ b/src/components/common/FilterLink.tsx @@ -1,6 +1,6 @@ -import { Icon, Row, Text } from '@umami/react-zen'; +import { HTMLAttributes, ReactNode, useState } from 'react'; import Link from 'next/link'; -import { type HTMLAttributes, type ReactNode, useState } from 'react'; +import { Icon, Row, Text } from '@umami/react-zen'; 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 04002648c..c1ff59eb0 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 { Empty } from '@/components/common/Empty'; +import { Grid, Column, TextField, Label, Select, Icon, Button, ListItem } from '@umami/react-zen'; 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 682970e8e..251f77626 100644 --- a/src/components/common/LinkButton.tsx +++ b/src/components/common/LinkButton.tsx @@ -1,6 +1,6 @@ -import { Button, type ButtonProps } from '@umami/react-zen'; +import { ReactNode } from 'react'; import Link from 'next/link'; -import type { ReactNode } from 'react'; +import { Button, ButtonProps } from '@umami/react-zen'; 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 fb37e1408..c781bd905 100644 --- a/src/components/common/LoadingPanel.tsx +++ b/src/components/common/LoadingPanel.tsx @@ -1,7 +1,7 @@ -import { Column, type ColumnProps, Loading } from '@umami/react-zen'; -import type { ReactNode } from 'react'; -import { Empty } from '@/components/common/Empty'; +import { ReactNode } from 'react'; +import { Loading, Column, type ColumnProps } from '@umami/react-zen'; import { ErrorMessage } from '@/components/common/ErrorMessage'; +import { Empty } from '@/components/common/Empty'; export interface LoadingPanelProps extends ColumnProps { data?: any; diff --git a/src/components/common/PageBody.tsx b/src/components/common/PageBody.tsx index f07e589ba..a05224f0f 100644 --- a/src/components/common/PageBody.tsx +++ b/src/components/common/PageBody.tsx @@ -1,6 +1,6 @@ 'use client'; -import { AlertBanner, Column, type ColumnProps, Loading } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { AlertBanner, Loading, Column, ColumnProps } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; const DEFAULT_WIDTH = '1320px'; diff --git a/src/components/common/PageHeader.tsx b/src/components/common/PageHeader.tsx index b46051508..12b1a6442 100644 --- a/src/components/common/PageHeader.tsx +++ b/src/components/common/PageHeader.tsx @@ -1,5 +1,5 @@ -import { Column, Grid, Heading, Icon, Row, Text } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Heading, Icon, Row, Text, Column, Grid } from '@umami/react-zen'; export function PageHeader({ title, diff --git a/src/components/common/Panel.tsx b/src/components/common/Panel.tsx index bb667465f..da901d419 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, - Heading, - Icon, Row, - Tooltip, + Icon, + Button, TooltipTrigger, + Tooltip, + Heading, } from '@umami/react-zen'; -import { useState } from 'react'; -import { useMessages } from '@/components/hooks'; import { Maximize, X } from '@/components/icons'; +import { useMessages } from '@/components/hooks'; export interface PanelProps extends ColumnProps { title?: string; diff --git a/src/components/common/SectionHeader.tsx b/src/components/common/SectionHeader.tsx index 5b911efb4..baaaa8b91 100644 --- a/src/components/common/SectionHeader.tsx +++ b/src/components/common/SectionHeader.tsx @@ -1,5 +1,5 @@ -import { Heading, Icon, Row, type RowProps, Text } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Heading, Icon, Row, Text, RowProps } from '@umami/react-zen'; export function SectionHeader({ title, diff --git a/src/components/common/SideMenu.tsx b/src/components/common/SideMenu.tsx index bdd249521..429ec3369 100644 --- a/src/components/common/SideMenu.tsx +++ b/src/components/common/SideMenu.tsx @@ -1,12 +1,12 @@ import { - Column, Heading, - IconLabel, NavMenu, - NavMenuGroup, NavMenuItem, - type NavMenuProps, Row, + Column, + NavMenuGroup, + NavMenuProps, + IconLabel, } from '@umami/react-zen'; import Link from 'next/link'; @@ -72,7 +72,6 @@ export function SideMenu({ ); } - return null; })} diff --git a/src/components/common/TypeConfirmationForm.tsx b/src/components/common/TypeConfirmationForm.tsx index 1121fa7d6..a28dd3c15 100644 --- a/src/components/common/TypeConfirmationForm.tsx +++ b/src/components/common/TypeConfirmationForm.tsx @@ -3,8 +3,8 @@ import { Form, FormButtons, FormField, - FormSubmitButton, TextField, + FormSubmitButton, } from '@umami/react-zen'; import { useMessages } from '@/components/hooks'; diff --git a/src/components/common/TypeIcon.tsx b/src/components/common/TypeIcon.tsx index 8894b3a97..af2ce5d85 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 8766bbb64..765b9f59b 100644 --- a/src/components/hooks/context/useLink.ts +++ b/src/components/hooks/context/useLink.ts @@ -1,5 +1,5 @@ -import { useContext } from 'react'; import { LinkContext } from '@/app/(main)/links/LinkProvider'; +import { useContext } from 'react'; export function useLink() { return useContext(LinkContext); diff --git a/src/components/hooks/context/usePixel.ts b/src/components/hooks/context/usePixel.ts index 69cad6f59..bb129c31c 100644 --- a/src/components/hooks/context/usePixel.ts +++ b/src/components/hooks/context/usePixel.ts @@ -1,5 +1,5 @@ -import { useContext } from 'react'; import { PixelContext } from '@/app/(main)/pixels/PixelProvider'; +import { useContext } from 'react'; export function usePixel() { return useContext(PixelContext); diff --git a/src/components/hooks/context/useTeam.ts b/src/components/hooks/context/useTeam.ts index 95ff4bee4..11b23daf5 100644 --- a/src/components/hooks/context/useTeam.ts +++ b/src/components/hooks/context/useTeam.ts @@ -1,5 +1,5 @@ -import { useContext } from 'react'; import { TeamContext } from '@/app/(main)/teams/TeamProvider'; +import { useContext } from 'react'; export function useTeam() { return useContext(TeamContext); diff --git a/src/components/hooks/context/useUser.ts b/src/components/hooks/context/useUser.ts index fa97ea9df..dfdf67f11 100644 --- a/src/components/hooks/context/useUser.ts +++ b/src/components/hooks/context/useUser.ts @@ -1,5 +1,5 @@ -import { useContext } from 'react'; import { UserContext } from '@/app/(main)/admin/users/[userId]/UserProvider'; +import { useContext } from 'react'; export function useUser() { return useContext(UserContext); diff --git a/src/components/hooks/context/useWebsite.ts b/src/components/hooks/context/useWebsite.ts index 3d4be27f4..eb731875a 100644 --- a/src/components/hooks/context/useWebsite.ts +++ b/src/components/hooks/context/useWebsite.ts @@ -1,5 +1,5 @@ -import { useContext } from 'react'; import { WebsiteContext } from '@/app/(main)/websites/WebsiteProvider'; +import { useContext } from 'react'; export function useWebsite() { return useContext(WebsiteContext); diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts index e8e5c135e..04c3e37db 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/useTeamsQuery'; export * from './queries/useTeamWebsitesQuery'; +export * from './queries/useTeamsQuery'; 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/useWebsiteStatsQuery'; -export * from './queries/useWebsitesQuery'; -export * from './queries/useWebsiteValuesQuery'; export * from './queries/useWeeklyTrafficQuery'; +export * from './queries/useWebsiteStatsQuery'; +export * from './queries/useWebsiteValuesQuery'; +export * from './queries/useWebsitesQuery'; // Regular hooks export * from './useApi'; diff --git a/src/components/hooks/queries/useActiveUsersQuery.ts b/src/components/hooks/queries/useActiveUsersQuery.ts index 42867c19d..d0538dc7a 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 84b7eec7d..32b5cd466 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 1401989f3..26a825e3c 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 dfa6e9295..74dd58ef2 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 2ccbd634d..5e21081ac 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 6529e1426..18bb6b2e0 100644 --- a/src/components/hooks/queries/useEventDataValuesQuery.ts +++ b/src/components/hooks/queries/useEventDataValuesQuery.ts @@ -1,4 +1,4 @@ -import type { ReactQueryOptions } from '@/lib/types'; +import { 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 ebf945fbe..93de47dc3 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 { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; +import { ReactQueryOptions } from '@/lib/types'; 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 a64b7844f..e800621a3 100644 --- a/src/components/hooks/queries/useLoginQuery.ts +++ b/src/components/hooks/queries/useLoginQuery.ts @@ -1,4 +1,4 @@ -import { setUser, useApp } from '@/store/app'; +import { useApp, setUser } 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 c431179bb..466b13d06 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 { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; +import { ReactQueryOptions } from '@/lib/types'; 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 1a5bd1c53..9e20da049 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 ba1bdd4d5..fed150140 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 { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; +import { ReactQueryOptions } from '@/lib/types'; 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 c6fce1289..7b7a7bd18 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 ac651bb96..975c728ae 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 d5e180bbe..7df35938a 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; export function useSessionDataValuesQuery( websiteId: string, diff --git a/src/components/hooks/queries/useShareTokenQuery.ts b/src/components/hooks/queries/useShareTokenQuery.ts index dbad3dcd7..122dc4849 100644 --- a/src/components/hooks/queries/useShareTokenQuery.ts +++ b/src/components/hooks/queries/useShareTokenQuery.ts @@ -1,4 +1,4 @@ -import { setShareToken, useApp } from '@/store/app'; +import { useApp, setShareToken } 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 6f6f815c1..87956ed05 100644 --- a/src/components/hooks/queries/useTeamMembersQuery.ts +++ b/src/components/hooks/queries/useTeamMembersQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; 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 c076a6aa3..1ba1a6eab 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 ffe601bf2..892cc848e 100644 --- a/src/components/hooks/queries/useTeamWebsitesQuery.ts +++ b/src/components/hooks/queries/useTeamWebsitesQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; 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 f1a09f4da..6a0ecc34f 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 07e23f08b..2f3a15ca4 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 f98eaffbc..c63127000 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 { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; +import { ReactQueryOptions } from '@/lib/types'; 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 d87900bab..03e66ce00 100644 --- a/src/components/hooks/queries/useUsersQuery.ts +++ b/src/components/hooks/queries/useUsersQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; export function useUsersQuery() { const { get } = useApi(); diff --git a/src/components/hooks/queries/useWebsiteCohortQuery.ts b/src/components/hooks/queries/useWebsiteCohortQuery.ts index 975766e91..50ac76b38 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 e0cbf4ce9..d1032fa2e 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 fc4dad5b1..9d89be524 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; 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 6c1d112dd..5db852785 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 b2e90199f..89f95ada0 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; export type WebsiteExpandedMetricsData = { name: string; diff --git a/src/components/hooks/queries/useWebsiteMetricsQuery.ts b/src/components/hooks/queries/useWebsiteMetricsQuery.ts index 67c5e4d47..a5ec7ac99 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 b35c8200c..6f471bab0 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 { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; +import { ReactQueryOptions } from '@/lib/types'; 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 b9a5533d9..044b2bacb 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 1923fbd86..075616222 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 8d3af9631..1da72fc2a 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 bac9fc90e..82a7c05f0 100644 --- a/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts +++ b/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts @@ -1,6 +1,6 @@ import { useApi } from '../useApi'; -import { useDateParameters } from '../useDateParameters'; import { useFilterParameters } from '../useFilterParameters'; +import { useDateParameters } from '../useDateParameters'; 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 e9a0c48ca..64304b1b9 100644 --- a/src/components/hooks/queries/useWebsiteStatsQuery.ts +++ b/src/components/hooks/queries/useWebsiteStatsQuery.ts @@ -1,7 +1,7 @@ -import type { UseQueryOptions } from '@tanstack/react-query'; -import { useDateParameters } from '@/components/hooks/useDateParameters'; +import { UseQueryOptions } from '@tanstack/react-query'; 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 1e097369e..7320e08c7 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 a7b661864..819b42a9a 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 { useModified } from '../useModified'; import { usePagedQuery } from '../usePagedQuery'; +import { useModified } from '../useModified'; +import { ReactQueryOptions } from '@/lib/types'; 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 a76ebb3db..273347382 100644 --- a/src/components/hooks/queries/useWeeklyTrafficQuery.ts +++ b/src/components/hooks/queries/useWeeklyTrafficQuery.ts @@ -1,7 +1,7 @@ -import { useFilterParameters } from '@/components/hooks/useFilterParameters'; import { useApi } from '../useApi'; -import { useDateParameters } from '../useDateParameters'; import { useModified } from '../useModified'; +import { useDateParameters } from '../useDateParameters'; +import { useFilterParameters } from '@/components/hooks/useFilterParameters'; 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 35cabd529..994163ade 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 { type FetchResponse, httpDelete, httpGet, httpPost, httpPut } from '@/lib/fetch'; +import { httpGet, httpPost, httpPut, httpDelete, FetchResponse } 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 c1cdcaf67..643b9cbc7 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 1ec9fc138..45019ebfa 100644 --- a/src/components/hooks/useCountryNames.ts +++ b/src/components/hooks/useCountryNames.ts @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useState, useEffect } 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 755f36eeb..7d3884334 100644 --- a/src/components/hooks/useDateRange.ts +++ b/src/components/hooks/useDateRange.ts @@ -1,8 +1,8 @@ -import { useMemo } from 'react'; -import { useLocale } from '@/components/hooks/useLocale'; import { useNavigation } from '@/components/hooks/useNavigation'; -import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; +import { useMemo } from 'react'; import { getCompareDate, getOffsetDateRange, parseDateRange } from '@/lib/date'; +import { useLocale } from '@/components/hooks/useLocale'; +import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; 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 cc1d30892..f05ad7690 100644 --- a/src/components/hooks/useEscapeKey.ts +++ b/src/components/hooks/useEscapeKey.ts @@ -1,4 +1,4 @@ -import { type KeyboardEvent, useCallback, useEffect } from 'react'; +import { useEffect, useCallback, KeyboardEvent } 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 850e2afb1..6115c1bf3 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 896fa0769..039959cda 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 regions from '../../../public/iso-3166-2.json'; +import { useLocale } from './useLocale'; import { useCountryNames } from './useCountryNames'; import { useLanguageNames } from './useLanguageNames'; -import { useLocale } from './useLocale'; -import { useMessages } from './useMessages'; +import regions from '../../../public/iso-3166-2.json'; export function useFormat() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/hooks/useLanguageNames.ts b/src/components/hooks/useLanguageNames.ts index 0cc03d7c1..6b79ac52a 100644 --- a/src/components/hooks/useLanguageNames.ts +++ b/src/components/hooks/useLanguageNames.ts @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useState, useEffect } 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 3eb669e16..8d96fdde9 100644 --- a/src/components/hooks/useLocale.ts +++ b/src/components/hooks/useLocale.ts @@ -1,11 +1,11 @@ import { useEffect } from 'react'; -import { LOCALE_CONFIG } from '@/lib/constants'; import { httpGet } from '@/lib/fetch'; -import { getDateLocale, getTextDirection } from '@/lib/lang'; import { setItem } from '@/lib/storage'; -import { setLocale, useApp } from '@/store/app'; -import enUS from '../../../public/intl/country/en-US.json'; +import { LOCALE_CONFIG } from '@/lib/constants'; +import { getDateLocale, getTextDirection } from '@/lib/lang'; +import { useApp, setLocale } from '@/store/app'; import { useForceUpdate } from './useForceUpdate'; +import enUS from '../../../public/intl/country/en-US.json'; const messages = { 'en-US': enUS, diff --git a/src/components/hooks/useMessages.ts b/src/components/hooks/useMessages.ts index 19f12d9a4..42bbeb01e 100644 --- a/src/components/hooks/useMessages.ts +++ b/src/components/hooks/useMessages.ts @@ -1,5 +1,5 @@ -import { FormattedMessage, type MessageDescriptor, useIntl } from 'react-intl'; -import { labels, messages } from '@/components/messages'; +import { useIntl, FormattedMessage, type MessageDescriptor } from 'react-intl'; +import { messages, labels } 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 0a18ac7b2..1b7250602 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 c818de643..726c7b22a 100644 --- a/src/components/hooks/usePagedQuery.ts +++ b/src/components/hooks/usePagedQuery.ts @@ -1,7 +1,7 @@ -import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; -import type { PageResult } from '@/lib/types'; +import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'; 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 57dcc416c..746bd97e7 100644 --- a/src/components/hooks/useRegionNames.ts +++ b/src/components/hooks/useRegionNames.ts @@ -1,5 +1,5 @@ -import regions from '../../../public/iso-3166-2.json'; import { useCountryNames } from './useCountryNames'; +import regions from '../../../public/iso-3166-2.json'; export function useRegionNames(locale: string) { const { countryNames } = useCountryNames(locale); diff --git a/src/components/hooks/useSticky.ts b/src/components/hooks/useSticky.ts index ef9fb36f3..8e6722adf 100644 --- a/src/components/hooks/useSticky.ts +++ b/src/components/hooks/useSticky.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useState, useEffect, useRef } 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 ef2553902..22a34194c 100644 --- a/src/components/hooks/useTimezone.ts +++ b/src/components/hooks/useTimezone.ts @@ -1,9 +1,9 @@ -import { formatInTimeZone, utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'; -import { TIMEZONE_CONFIG, TIMEZONE_LEGACY } from '@/lib/constants'; -import { getTimezone } from '@/lib/date'; import { setItem } from '@/lib/storage'; -import { setTimezone, useApp } from '@/store/app'; +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'; 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 616ee3471..3de118d21 100644 --- a/src/components/input/ActionSelect.tsx +++ b/src/components/input/ActionSelect.tsx @@ -1,4 +1,4 @@ -import { ListItem, Select } from '@umami/react-zen'; +import { Select, ListItem } 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 2b6045b45..be0cec7d1 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 2e175298d..f72ea281b 100644 --- a/src/components/input/DateFilter.tsx +++ b/src/components/input/DateFilter.tsx @@ -1,9 +1,9 @@ -import { Dialog, ListItem, ListSeparator, Modal, Select, type SelectProps } from '@umami/react-zen'; +import { useState, Key, Fragment } from 'react'; +import { Modal, Select, ListItem, ListSeparator, Dialog, SelectProps } from '@umami/react-zen'; import { endOfYear } from 'date-fns'; -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 { useMessages, useMobile } from '@/components/hooks'; +import { DateDisplay } from '@/components/common/DateDisplay'; 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 7527226d0..a3a49252a 100644 --- a/src/components/input/DialogButton.tsx +++ b/src/components/input/DialogButton.tsx @@ -1,13 +1,13 @@ +import { CSSProperties, ReactNode } from 'react'; import { Button, - type ButtonProps, - Dialog, - type DialogProps, - DialogTrigger, - IconLabel, + ButtonProps, Modal, + Dialog, + DialogTrigger, + DialogProps, + IconLabel, } 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 5df3305d4..9fd46c0b0 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 { useMessages } from '@/components/hooks'; +import { Button, Icon, TooltipTrigger, Tooltip } from '@umami/react-zen'; import { Download } from '@/components/icons'; +import { useMessages } from '@/components/hooks'; export function DownloadButton({ filename = 'data', diff --git a/src/components/input/ExportButton.tsx b/src/components/input/ExportButton.tsx index 7b65a57bc..15fb21240 100644 --- a/src/components/input/ExportButton.tsx +++ b/src/components/input/ExportButton.tsx @@ -1,10 +1,10 @@ -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 { Icon, Tooltip, TooltipTrigger, LoadingButton } from '@umami/react-zen'; +import { Download } from '@/components/icons'; +import { useMessages, useApi } from '@/components/hooks'; +import { useSearchParams } from 'next/navigation'; 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 2174068fc..e61b9cc7f 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 { - Button, - Column, Grid, - Icon, + Column, List, ListItem, + Row, + Button, + Popover, + MenuTrigger, Menu, MenuItem, - MenuTrigger, - Popover, - Row, + Icon, } 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 5a52e5666..b81f77e30 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 { - useFilters, - useFormat, - useMessages, useNavigation, + useMessages, + useFormat, + useFilters, useWebsiteSegmentQuery, } from '@/components/hooks'; -import { Bookmark, X } from '@/components/icons'; +import { X, Bookmark } 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 ff37fb197..4340ad971 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 44f43844a..c69c69e5c 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 ac43dcb6b..6d43f11a5 100644 --- a/src/components/input/LanguageButton.tsx +++ b/src/components/input/LanguageButton.tsx @@ -1,7 +1,7 @@ -import { Button, Dialog, Grid, Icon, MenuTrigger, Popover, Text } from '@umami/react-zen'; -import { Globe } from 'lucide-react'; -import { useLocale } from '@/components/hooks'; +import { Icon, Button, MenuTrigger, Popover, Grid, Text, Dialog } from '@umami/react-zen'; import { languages } from '@/lib/lang'; +import { useLocale } from '@/components/hooks'; +import { Globe } from 'lucide-react'; export function LanguageButton() { const { locale, saveLocale } = useLocale(); diff --git a/src/components/input/LookupField.tsx b/src/components/input/LookupField.tsx index c1d419f74..06b5006a3 100644 --- a/src/components/input/LookupField.tsx +++ b/src/components/input/LookupField.tsx @@ -1,6 +1,6 @@ -import { ComboBox, type ComboBoxProps, ListItem, Loading, useDebounce } from '@umami/react-zen'; +import { SetStateAction, useMemo, useState } from 'react'; import { endOfDay, subMonths } from 'date-fns'; -import { type SetStateAction, useMemo, useState } from 'react'; +import { ComboBox, ListItem, Loading, useDebounce, ComboBoxProps } from '@umami/react-zen'; 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 bac307fef..b861577c7 100644 --- a/src/components/input/MenuButton.tsx +++ b/src/components/input/MenuButton.tsx @@ -1,5 +1,5 @@ -import { Button, DialogTrigger, Icon, Menu, Popover } from '@umami/react-zen'; -import type { Key, ReactNode } from 'react'; +import { ReactNode, Key } from 'react'; +import { DialogTrigger, Button, Menu, Popover, Icon } from '@umami/react-zen'; import { Ellipsis } from '@/components/icons'; export function MenuButton({ diff --git a/src/components/input/MobileMenuButton.tsx b/src/components/input/MobileMenuButton.tsx index 5e59cbbbe..bd32272dd 100644 --- a/src/components/input/MobileMenuButton.tsx +++ b/src/components/input/MobileMenuButton.tsx @@ -1,4 +1,4 @@ -import { Button, Dialog, type DialogProps, DialogTrigger, Icon, Modal } from '@umami/react-zen'; +import { Dialog, DialogTrigger, Button, Icon, Modal, DialogProps } 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 241634edf..efaf6a5ef 100644 --- a/src/components/input/MonthSelect.tsx +++ b/src/components/input/MonthSelect.tsx @@ -1,4 +1,4 @@ -import { ListItem, Row, Select } from '@umami/react-zen'; +import { Row, Select, ListItem } 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 7ea966cc9..b57c2ecdc 100644 --- a/src/components/input/NavButton.tsx +++ b/src/components/input/NavButton.tsx @@ -1,19 +1,18 @@ import { - Column, + Text, Icon, - IconLabel, Menu, MenuItem, + MenuTrigger, MenuSection, MenuSeparator, - MenuTrigger, - Popover, - Pressable, - Row, SubmenuTrigger, - Text, + Popover, + Row, + Column, + Pressable, + IconLabel, } from '@umami/react-zen'; -import { ArrowRight } from 'lucide-react'; import { useConfig, useLoginQuery, @@ -34,6 +33,7 @@ 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 500c40c4f..2f7687419 100644 --- a/src/components/input/PanelButton.tsx +++ b/src/components/input/PanelButton.tsx @@ -1,6 +1,6 @@ -import { Button, type ButtonProps, Icon } from '@umami/react-zen'; -import { useGlobalState } from '@/components/hooks'; +import { Button, Icon, ButtonProps } from '@umami/react-zen'; import { PanelLeft } from '@/components/icons'; +import { useGlobalState } from '@/components/hooks'; 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 710a7faeb..03092fe5a 100644 --- a/src/components/input/PreferencesButton.tsx +++ b/src/components/input/PreferencesButton.tsx @@ -1,9 +1,9 @@ -import { Button, Column, DialogTrigger, Icon, Label, Popover } from '@umami/react-zen'; -import { DateRangeSetting } from '@/app/(main)/settings/preferences/DateRangeSetting'; +import { Button, Icon, DialogTrigger, Popover, Column, Label } from '@umami/react-zen'; import { TimezoneSetting } from '@/app/(main)/settings/preferences/TimezoneSetting'; -import { Panel } from '@/components/common/Panel'; -import { useMessages } from '@/components/hooks'; +import { DateRangeSetting } from '@/app/(main)/settings/preferences/DateRangeSetting'; import { Settings } from '@/components/icons'; +import { useMessages } from '@/components/hooks'; +import { Panel } from '@/components/common/Panel'; export function PreferencesButton() { const { formatMessage, labels } = useMessages(); diff --git a/src/components/input/ProfileButton.tsx b/src/components/input/ProfileButton.tsx index 505cd8889..03f14d071 100644 --- a/src/components/input/ProfileButton.tsx +++ b/src/components/input/ProfileButton.tsx @@ -1,18 +1,18 @@ +import { Fragment } from 'react'; import { - Button, Icon, - Menu, - MenuItem, - MenuSection, - MenuSeparator, + Button, MenuTrigger, Popover, - Row, + Menu, + MenuItem, + MenuSeparator, + MenuSection, Text, + Row, } from '@umami/react-zen'; -import { Fragment } from 'react'; -import { useLoginQuery, useMessages, useNavigation } from '@/components/hooks'; -import { LockKeyhole, LogOut, UserCircle } from '@/components/icons'; +import { useMessages, useLoginQuery, useNavigation } from '@/components/hooks'; +import { LogOut, UserCircle, LockKeyhole } 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 b52f830eb..29b719864 100644 --- a/src/components/input/RefreshButton.tsx +++ b/src/components/input/RefreshButton.tsx @@ -1,7 +1,8 @@ -import { Icon, LoadingButton, Tooltip, TooltipTrigger } from '@umami/react-zen'; -import { useDateRange, useMessages } from '@/components/hooks'; -import { RefreshCw } from '@/components/icons'; +import { LoadingButton, Icon, Tooltip, TooltipTrigger } from '@umami/react-zen'; import { setWebsiteDateRange } from '@/store/websites'; +import { useDateRange } from '@/components/hooks'; +import { RefreshCw } from '@/components/icons'; +import { useMessages } from '@/components/hooks'; export function RefreshButton({ websiteId, diff --git a/src/components/input/ReportEditButton.tsx b/src/components/input/ReportEditButton.tsx index b333077ac..8f0c7a3cc 100644 --- a/src/components/input/ReportEditButton.tsx +++ b/src/components/input/ReportEditButton.tsx @@ -1,3 +1,6 @@ +import { ReactNode, useState } from 'react'; +import { useMessages } from '@/components/hooks'; +import { useDeleteQuery } from '@/components/hooks/queries/useDeleteQuery'; import { AlertDialog, Button, @@ -7,12 +10,9 @@ import { MenuTrigger, Modal, Popover, - Row, Text, + Row, } 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 f03a1dead..d0906d676 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 { Empty } from '@/components/common/Empty'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useWebsiteSegmentsQuery } from '@/components/hooks'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Empty } from '@/components/common/Empty'; import { ChartPie, UserPlus } from '@/components/icons'; export interface SegmentFiltersProps { diff --git a/src/components/input/SegmentSaveButton.tsx b/src/components/input/SegmentSaveButton.tsx index 5f6cac10d..f6cee0e1e 100644 --- a/src/components/input/SegmentSaveButton.tsx +++ b/src/components/input/SegmentSaveButton.tsx @@ -1,7 +1,7 @@ -import { Button, Dialog, DialogTrigger, Icon, Modal, Text } from '@umami/react-zen'; -import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; +import { Button, DialogTrigger, Modal, Text, Icon, Dialog } from '@umami/react-zen'; 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 bd51fb532..23ad91d31 100644 --- a/src/components/input/SettingsButton.tsx +++ b/src/components/input/SettingsButton.tsx @@ -1,23 +1,23 @@ +import { Key } from 'react'; import { - Button, Icon, - Menu, - MenuItem, - MenuSection, - MenuSeparator, + Button, MenuTrigger, Popover, + Menu, + MenuItem, + MenuSeparator, + MenuSection, } from '@umami/react-zen'; -import type { Key } from 'react'; -import { useConfig, useLoginQuery, useMessages, useNavigation } from '@/components/hooks'; +import { useMessages, useLoginQuery, useNavigation, useConfig } from '@/components/hooks'; import { - BookText, - ExternalLink, - LifeBuoy, - LockKeyhole, LogOut, + LockKeyhole, Settings, UserCircle, + LifeBuoy, + BookText, + ExternalLink, } from '@/components/icons'; import { DOCS_URL } from '@/lib/constants'; diff --git a/src/components/input/WebsiteDateFilter.tsx b/src/components/input/WebsiteDateFilter.tsx index beb6f3711..dbe41f324 100644 --- a/src/components/input/WebsiteDateFilter.tsx +++ b/src/components/input/WebsiteDateFilter.tsx @@ -1,8 +1,8 @@ -import { Button, Icon, ListItem, Row, Select, Text } from '@umami/react-zen'; -import { isAfter } from 'date-fns'; import { useCallback, useMemo } from 'react'; -import { useDateRange, useDateRangeQuery, useMessages, useNavigation } from '@/components/hooks'; +import { Button, Icon, Row, Text, Select, ListItem } from '@umami/react-zen'; +import { isAfter } from 'date-fns'; import { ChevronRight } from '@/components/icons'; +import { useDateRange, useDateRangeQuery, useMessages, useNavigation } from '@/components/hooks'; import { getDateRangeValue } from '@/lib/date'; import { DateFilter } from './DateFilter'; diff --git a/src/components/input/WebsiteFilterButton.tsx b/src/components/input/WebsiteFilterButton.tsx index 7db850a19..25f81af41 100644 --- a/src/components/input/WebsiteFilterButton.tsx +++ b/src/components/input/WebsiteFilterButton.tsx @@ -1,7 +1,7 @@ -import { useMessages, useNavigation } from '@/components/hooks'; import { ListFilter } from '@/components/icons'; -import { DialogButton } from '@/components/input/DialogButton'; import { FilterEditForm } from '@/components/input/FilterEditForm'; +import { DialogButton } from '@/components/input/DialogButton'; +import { useMessages, useNavigation } from '@/components/hooks'; import { filtersArrayToObject } from '@/lib/params'; export function WebsiteFilterButton({ diff --git a/src/components/input/WebsiteSelect.tsx b/src/components/input/WebsiteSelect.tsx index 8d81eb9a0..29ae040b0 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 { Empty } from '@/components/common/Empty'; +import { Select, SelectProps, ListItem, Text, Row } from '@umami/react-zen'; import { - useLoginQuery, - useMessages, useUserWebsitesQuery, + useMessages, + useLoginQuery, 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 a7f6e6044..0627020eb 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 { useActyiveUsersQuery, useMessages } from '@/components/hooks'; +import { Text, StatusLight } from '@umami/react-zen'; +import { useMessages, useActyiveUsersQuery } from '@/components/hooks'; export function ActiveUsers({ websiteId, diff --git a/src/components/metrics/ChangeLabel.tsx b/src/components/metrics/ChangeLabel.tsx index 192f0ff21..8ac413551 100644 --- a/src/components/metrics/ChangeLabel.tsx +++ b/src/components/metrics/ChangeLabel.tsx @@ -1,5 +1,5 @@ -import { Icon, Row, type RowProps, Text } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { Icon, Text, Row, RowProps } from '@umami/react-zen'; +import { 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 || Number.isNaN(value); + const neutral = value === 0 || isNaN(value); const good = reverseColors ? negative : positive; const style = diff --git a/src/components/metrics/DatePickerForm.tsx b/src/components/metrics/DatePickerForm.tsx index 59d170937..8094e30a7 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 48d21c573..cc11dea27 100644 --- a/src/components/metrics/EventData.tsx +++ b/src/components/metrics/EventData.tsx @@ -1,6 +1,6 @@ -import { Column, Grid, Label, Text } from '@umami/react-zen'; -import { LoadingPanel } from '@/components/common/LoadingPanel'; +import { Grid, Column, Text, Label } from '@umami/react-zen'; import { useEventDataQuery } from '@/components/hooks'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; 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 3a53ba9a6..03ed6e298 100644 --- a/src/components/metrics/EventsChart.tsx +++ b/src/components/metrics/EventsChart.tsx @@ -1,6 +1,4 @@ -import { colord } from 'colord'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { BarChart, type BarChartProps } from '@/components/charts/BarChart'; +import { BarChart, BarChartProps } from '@/components/charts/BarChart'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { useDateRange, @@ -11,6 +9,8 @@ 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 63231919d..341ed647c 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 f233bfe7e..e76e01745 100644 --- a/src/components/metrics/ListTable.tsx +++ b/src/components/metrics/ListTable.tsx @@ -1,7 +1,7 @@ -import { config, useSpring } from '@react-spring/web'; -import { Column, Grid, Row, Text } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { 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: !Number.isNaN(value) ? value : 0, + y: !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 d15bcf135..4b3577e8d 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 { Column, Text } from '@umami/react-zen'; +import { formatNumber } from '@/lib/format'; 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 31c331f5f..c755516c7 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 850c6bc9a..403cd2c27 100644 --- a/src/components/metrics/MetricsBar.tsx +++ b/src/components/metrics/MetricsBar.tsx @@ -1,5 +1,5 @@ -import { Grid, type GridProps } from '@umami/react-zen'; -import type { ReactNode } from 'react'; +import { ReactNode } from 'react'; +import { Grid, GridProps } from '@umami/react-zen'; export interface MetricsBarProps extends GridProps { children?: ReactNode; diff --git a/src/components/metrics/MetricsExpandedTable.tsx b/src/components/metrics/MetricsExpandedTable.tsx index f24c952de..d35e61d09 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 e99bd2166..48b06f0b8 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, type ListTableProps } from './ListTable'; +import { ListTable, 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 b83f8dc3a..8e713bb0e 100644 --- a/src/components/metrics/PageviewsChart.tsx +++ b/src/components/metrics/PageviewsChart.tsx @@ -1,6 +1,6 @@ -import { useTheme } from '@umami/react-zen'; import { useCallback, useMemo } from 'react'; -import { BarChart, type BarChartProps } from '@/components/charts/BarChart'; +import { useTheme } from '@umami/react-zen'; +import { BarChart, 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: Date.now(), + __id: new Date().getTime(), datasets: [ { type: 'bar', diff --git a/src/components/metrics/RealtimeChart.tsx b/src/components/metrics/RealtimeChart.tsx index a43dcb429..a71c03c36 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 { useTimezone } from '@/components/hooks'; -import { DEFAULT_ANIMATION_DURATION, REALTIME_RANGE } from '@/lib/constants'; -import type { RealtimeData } from '@/lib/types'; +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'; export interface RealtimeChartProps { data: RealtimeData; diff --git a/src/components/metrics/WeeklyTraffic.tsx b/src/components/metrics/WeeklyTraffic.tsx index 90e47c636..82d1c1c1f 100644 --- a/src/components/metrics/WeeklyTraffic.tsx +++ b/src/components/metrics/WeeklyTraffic.tsx @@ -1,8 +1,9 @@ -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 { Row, Grid, Text } from '@umami/react-zen'; +import { format, startOfDay, addHours } from 'date-fns'; import { useLocale, useMessages, useWeeklyTrafficQuery } from '@/components/hooks'; +import { LoadingPanel } from '@/components/common/LoadingPanel'; 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 3c8fadb80..b0936c0dc 100644 --- a/src/components/metrics/WorldMap.tsx +++ b/src/components/metrics/WorldMap.tsx @@ -1,17 +1,17 @@ -import { Column, type ColumnProps, FloatingTooltip, useTheme } from '@umami/react-zen'; -import { colord } from 'colord'; -import { useMemo, useState } from 'react'; +import { FloatingTooltip, Column, useTheme, ColumnProps } from '@umami/react-zen'; +import { useState, useMemo } from 'react'; import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simple-maps'; +import { colord } from 'colord'; +import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants'; import { + useWebsiteMetricsQuery, useCountryNames, useLocale, useMessages, - useWebsiteMetricsQuery, } from '@/components/hooks'; -import { getThemeColors } from '@/lib/colors'; -import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants'; -import { percentFilter } from '@/lib/filters'; import { formatLongNumber } from '@/lib/format'; +import { percentFilter } from '@/lib/filters'; +import { getThemeColors } from '@/lib/colors'; export interface WorldMapProps extends ColumnProps { websiteId?: string; diff --git a/src/components/svg/AddUser.tsx b/src/components/svg/AddUser.tsx index d1eb50956..1e8b298bf 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 1ce88f724..c9464f0f8 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 23b1e76b5..4a42189aa 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 089f61fe2..a1606b0d9 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 dfb848a9c..df9783106 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 935a2f7a8..239b30b7f 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 3434461a3..fef3f55f5 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 5696244fd..ca2780403 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 a0f472e57..8cdb792b8 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 34af943a9..8deaa9588 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 63cf47d7b..05a243787 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 385017d40..5586c1244 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 8d86170e2..9a16b5c4e 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 0fd7d165f..b1b658dcd 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 2b62eb9e0..8f588cf01 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 eb9fdf5bb..79fa813c2 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 15941a99f..32860aa75 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 7538ba442..c49b1b3f0 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 d19e98ea0..e82c60eff 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 04c389f6e..af032d422 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 b5489668a..27c73fe30 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 d075a9385..97a4afca3 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 61880f5cc..26370988f 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 0196d850f..2a12f3936 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 20a18a49f..8e11c7cbd 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) => ( { expect(getIpAddress(new Headers({ 'x-forwarded-for': IP }))).toEqual(IP); }); +test('getIpAddress: CloudFlare header is lower priority than standard header', () => { + expect(getIpAddress(new Headers({ 'cf-connecting-ip': BAD_IP, 'x-forwarded-for': IP }))).toEqual( + IP, + ); +}); + test('getIpAddress: No header', () => { expect(getIpAddress(new Headers())).toEqual(null); }); diff --git a/src/lib/auth.ts b/src/lib/auth.ts index ba6d8b09f..890e535f4 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -3,8 +3,8 @@ import { ROLE_PERMISSIONS, ROLES, SHARE_TOKEN_HEADER } from '@/lib/constants'; import { secret } from '@/lib/crypto'; import { getRandomChars } from '@/lib/generate'; import { createSecureToken, parseSecureToken, parseToken } from '@/lib/jwt'; -import redis from '@/lib/redis'; import { ensureArray } from '@/lib/utils'; +import redis from '@/lib/redis'; import { getUser } from '@/queries/prisma/user'; const log = debug('umami:auth'); diff --git a/src/lib/client.ts b/src/lib/client.ts index e176215e6..795e7780c 100644 --- a/src/lib/client.ts +++ b/src/lib/client.ts @@ -1,4 +1,4 @@ -import { getItem, removeItem, setItem } from '@/lib/storage'; +import { getItem, setItem, removeItem } from '@/lib/storage'; import { AUTH_TOKEN } from './constants'; export function getClientAuthToken() { diff --git a/src/lib/crypto.ts b/src/lib/crypto.ts index 9911ef7f0..f9387460b 100644 --- a/src/lib/crypto.ts +++ b/src/lib/crypto.ts @@ -1,4 +1,4 @@ -import crypto from 'node:crypto'; +import crypto from 'crypto'; import { v4, v5 } from 'uuid'; const ALGORITHM = 'aes-256-gcm'; diff --git a/src/lib/data.ts b/src/lib/data.ts index fe69edf04..4739ae76b 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -1,5 +1,5 @@ import { DATA_TYPE, DATETIME_REGEX } from './constants'; -import type { DynamicDataType } from './types'; +import { DynamicDataType } from './types'; export function flattenJSON( eventData: Record, diff --git a/src/lib/date.ts b/src/lib/date.ts index 3c1fd1b7d..f0f54de41 100644 --- a/src/lib/date.ts +++ b/src/lib/date.ts @@ -1,3 +1,5 @@ +import { getDateLocale } from '@/lib/lang'; +import { DateRange } from '@/lib/types'; import { addDays, addHours, @@ -38,8 +40,6 @@ 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 && Number.isNaN(date.getTime()); + return date instanceof Date && isNaN(date.getTime()); } diff --git a/src/lib/db.ts b/src/lib/db.ts index 7b6e8368b..72a18c062 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?.split(':')[0]; + const type = url && url.split(':')[0]; if (type === 'postgres') { return POSTGRESQL; diff --git a/src/lib/detect.ts b/src/lib/detect.ts index f33012958..c5528465d 100644 --- a/src/lib/detect.ts +++ b/src/lib/detect.ts @@ -1,11 +1,11 @@ import path from 'node:path'; -import { browserName, detectOS } from 'detect-browser'; -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 { browserName, detectOS } from 'detect-browser'; +import isLocalhost from 'is-localhost-ip'; +import ipaddr from 'ipaddr.js'; +import maxmind from 'maxmind'; import { safeDecodeURIComponent } from '@/lib/url'; +import { stripPort, getIpAddress } from '@/lib/ip'; const MAXMIND = 'maxmind'; @@ -145,8 +145,6 @@ export function hasBlockedIp(clientIp: string) { return true; } } - - return false; }); } diff --git a/src/lib/format.ts b/src/lib/format.ts index 52fd3048d..e5319b2af 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 1d60e1f28..a81f3d4bc 100644 --- a/src/lib/kafka.ts +++ b/src/lib/kafka.ts @@ -1,8 +1,8 @@ -import type * as tls from 'node:tls'; -import debug from 'debug'; -import { Kafka, logLevel, type Producer, type RecordMetadata, type SASLOptions } from 'kafkajs'; import { serializeError } from 'serialize-error'; +import debug from 'debug'; +import { Kafka, Producer, RecordMetadata, SASLOptions, logLevel } from 'kafkajs'; 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 f874640c4..96acc3698 100644 --- a/src/lib/lang.ts +++ b/src/lib/lang.ts @@ -1,24 +1,23 @@ import { arSA, be, - bg, bn, + bg, bs, - ca, cs, + sk, da, de, el, - enGB, enUS, + enGB, es, - faIR, fi, fr, + faIR, he, hi, hr, - hu, id, it, ja, @@ -34,17 +33,18 @@ 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 d4d6c3c75..a831bc163 100644 --- a/src/lib/load.ts +++ b/src/lib/load.ts @@ -1,4 +1,4 @@ -import type { Session, Website } from '@/generated/prisma/client'; +import { Website, Session } 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 ab2d58663..7f383a2ef 100644 --- a/src/lib/params.ts +++ b/src/lib/params.ts @@ -1,5 +1,5 @@ import { FILTER_COLUMNS, OPERATORS } from '@/lib/constants'; -import type { Filter, QueryFilters, QueryOptions } from '@/lib/types'; +import { 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 668cdf1fb..decc1d6f8 100644 --- a/src/lib/react.ts +++ b/src/lib/react.ts @@ -1,16 +1,16 @@ import { Children, cloneElement, - type FC, + FC, Fragment, isValidElement, - type ReactElement, - type ReactNode, + ReactElement, + 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 42c449048..32db8e951 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: () => undefined | undefined; + let error: () => void | undefined; let auth = null; if (schema) { diff --git a/src/lib/schema.ts b/src/lib/schema.ts index 38f7339a1..24ef99c3d 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 e727c87a3..e5d4ecc5f 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,6 +1,6 @@ -import type { UseQueryOptions } from '@tanstack/react-query'; -import type { DATA_TYPE, OPERATORS, ROLES } from './constants'; -import type { TIME_UNIT } from './date'; +import { UseQueryOptions } from '@tanstack/react-query'; +import { DATA_TYPE, ROLES, OPERATORS } from './constants'; +import { TIME_UNIT } from './date'; export type ObjectValues = T[keyof T]; diff --git a/src/permissions/index.ts b/src/permissions/index.ts index a70808e69..d0f6b53de 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 './user'; export * from './website'; +export * from './user'; diff --git a/src/permissions/link.ts b/src/permissions/link.ts index c027a0b6c..8a10d5124 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 2131874f1..95bf02282 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 01b547694..d7270ed30 100644 --- a/src/permissions/report.ts +++ b/src/permissions/report.ts @@ -1,5 +1,5 @@ -import type { Report } from '@/generated/prisma/client'; -import type { Auth } from '@/lib/types'; +import { Auth } from '@/lib/types'; +import { Report } from '@/generated/prisma/client'; 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 0f07c1a4f..a62eff2e4 100644 --- a/src/permissions/team.ts +++ b/src/permissions/team.ts @@ -1,7 +1,7 @@ -import { hasPermission } from '@/lib/auth'; +import { Auth } from '@/lib/types'; import { PERMISSIONS } from '@/lib/constants'; -import type { Auth } from '@/lib/types'; import { getTeamUser } from '@/queries/prisma'; +import { hasPermission } from '@/lib/auth'; export async function canViewTeam({ user }: Auth, teamId: string) { if (user.isAdmin) { diff --git a/src/permissions/user.ts b/src/permissions/user.ts index 2ed8f276e..c9a9a5f5d 100644 --- a/src/permissions/user.ts +++ b/src/permissions/user.ts @@ -1,4 +1,4 @@ -import type { Auth } from '@/lib/types'; +import { 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 97952eed9..8bd81517a 100644 --- a/src/permissions/website.ts +++ b/src/permissions/website.ts @@ -1,6 +1,6 @@ -import { hasPermission } from '@/lib/auth'; +import { Auth } from '@/lib/types'; import { PERMISSIONS } from '@/lib/constants'; -import type { Auth } from '@/lib/types'; +import { hasPermission } from '@/lib/auth'; 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 9b971dec4..95e202b04 100644 --- a/src/queries/prisma/link.ts +++ b/src/queries/prisma/link.ts @@ -1,6 +1,6 @@ -import type { Prisma } from '@/generated/prisma/client'; +import { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 4a5b755c8..c612864d3 100644 --- a/src/queries/prisma/report.ts +++ b/src/queries/prisma/report.ts @@ -1,7 +1,6 @@ import { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; - +import { 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 3a17d2735..f5507a4bb 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 type { QueryFilters } from '@/lib/types'; +import { Prisma } from '@/generated/prisma/client'; +import { 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 5987c1d7b..64ae0ec88 100644 --- a/src/queries/prisma/team.ts +++ b/src/queries/prisma/team.ts @@ -1,9 +1,8 @@ -import { Prisma, type Team } from '@/generated/prisma/client'; -import { ROLES } from '@/lib/constants'; import { uuid } from '@/lib/crypto'; +import { Prisma, Team } from '@/generated/prisma/client'; +import { ROLES } from '@/lib/constants'; import prisma from '@/lib/prisma'; -import type { PageResult, QueryFilters } from '@/lib/types'; - +import { 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 2210deeb5..d7c3807ca 100644 --- a/src/queries/prisma/teamUser.ts +++ b/src/queries/prisma/teamUser.ts @@ -1,8 +1,7 @@ -import { Prisma } from '@/generated/prisma/client'; import { uuid } from '@/lib/crypto'; +import { Prisma } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; - +import { 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 14376fc26..c599e3866 100644 --- a/src/queries/prisma/user.ts +++ b/src/queries/prisma/user.ts @@ -1,9 +1,8 @@ import { Prisma } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; -import { getRandomChars } from '@/lib/generate'; import prisma from '@/lib/prisma'; -import type { QueryFilters, Role } from '@/lib/types'; - +import { Role, QueryFilters } from '@/lib/types'; +import { getRandomChars } from '@/lib/generate'; import UserFindManyArgs = Prisma.UserFindManyArgs; export interface GetUserOptions { diff --git a/src/queries/prisma/website.ts b/src/queries/prisma/website.ts index d6ba6d381..cc5f2e6f4 100644 --- a/src/queries/prisma/website.ts +++ b/src/queries/prisma/website.ts @@ -1,8 +1,8 @@ -import type { Prisma } from '@/generated/prisma/client'; -import { ROLES } from '@/lib/constants'; -import prisma from '@/lib/prisma'; +import { Prisma } from '@/generated/prisma/client'; import redis from '@/lib/redis'; -import type { QueryFilters } from '@/lib/types'; +import prisma from '@/lib/prisma'; +import { QueryFilters } from '@/lib/types'; +import { ROLES } from '@/lib/constants'; 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 f12c95ca0..269258a8d 100644 --- a/src/queries/sql/events/getEventData.ts +++ b/src/queries/sql/events/getEventData.ts @@ -1,7 +1,7 @@ -import type { EventData } from '@/generated/prisma/client'; +import { EventData } from '@/generated/prisma/client'; +import prisma from '@/lib/prisma'; 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 6c8f12c19..0d856371d 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 prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 933776909..42c46cd12 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 type { QueryFilters } from '@/lib/types'; +import { 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 82c078f8d..7a618fd2e 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 prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 89e135828..28e2f4d03 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 prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 50613a7a5..c72f5b3e6 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, notImplemented, PRISMA, runQuery } from '@/lib/db'; -import type { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db'; +import { 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 0426e646e..e1975e2e4 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 prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 f03a347df..fb200c4ae 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 type { QueryFilters } from '@/lib/types'; +import { 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 500c67e94..75e7574cb 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 type { QueryFilters } from '@/lib/types'; +import { 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 81d12a0ff..baa6f700d 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 type { QueryFilters } from '@/lib/types'; +import { 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 40f5a9682..0bd0a5f3a 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, notImplemented, PRISMA, runQuery } from '@/lib/db'; -import type { QueryFilters } from '@/lib/types'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from '@/lib/db'; +import { 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 f11d3ff13..fec9be367 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 type { QueryFilters } from '@/lib/types'; +import { 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 7313fe472..c8a9cbe9f 100644 --- a/src/queries/sql/events/saveEvent.ts +++ b/src/queries/sql/events/saveEvent.ts @@ -1,7 +1,7 @@ -import clickhouse from '@/lib/clickhouse'; -import { EVENT_NAME_LENGTH, PAGE_TITLE_LENGTH, URL_LENGTH } from '@/lib/constants'; 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 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 b8b0e02fc..0fb869376 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 { flattenJSON, getStringValue } from '@/lib/data'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import { flattenJSON, getStringValue } from '@/lib/data'; +import clickhouse from '@/lib/clickhouse'; import kafka from '@/lib/kafka'; import prisma from '@/lib/prisma'; -import type { DynamicData } from '@/lib/types'; +import { DynamicData } from '@/lib/types'; export interface SaveEventDataArgs { websiteId: string; diff --git a/src/queries/sql/getActiveVisitors.ts b/src/queries/sql/getActiveVisitors.ts index d763c12ec..20327424d 100644 --- a/src/queries/sql/getActiveVisitors.ts +++ b/src/queries/sql/getActiveVisitors.ts @@ -1,7 +1,7 @@ import { subMinutes } from 'date-fns'; -import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; const FUNCTION_NAME = 'getActiveVisitors'; diff --git a/src/queries/sql/getChannelExpandedMetrics.ts b/src/queries/sql/getChannelExpandedMetrics.ts index 33640d599..5ce884ad0 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 type { QueryFilters } from '@/lib/types'; +import { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getChannelExpandedMetrics'; diff --git a/src/queries/sql/getChannelMetrics.ts b/src/queries/sql/getChannelMetrics.ts index 78e4142ef..a608ec5ef 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 type { QueryFilters } from '@/lib/types'; +import { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getChannelMetrics'; diff --git a/src/queries/sql/getRealtimeActivity.ts b/src/queries/sql/getRealtimeActivity.ts index 075b65e2e..d7aa06e93 100644 --- a/src/queries/sql/getRealtimeActivity.ts +++ b/src/queries/sql/getRealtimeActivity.ts @@ -1,7 +1,7 @@ -import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; +import { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getRealtimeActivity'; diff --git a/src/queries/sql/getRealtimeData.ts b/src/queries/sql/getRealtimeData.ts index 4b97cb055..58384a545 100644 --- a/src/queries/sql/getRealtimeData.ts +++ b/src/queries/sql/getRealtimeData.ts @@ -1,4 +1,4 @@ -import type { QueryFilters } from '@/lib/types'; +import { 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 cc6bb7d2d..6251fe3b8 100644 --- a/src/queries/sql/getValues.ts +++ b/src/queries/sql/getValues.ts @@ -1,7 +1,7 @@ -import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; +import { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getValues'; diff --git a/src/queries/sql/getWebsiteDateRange.ts b/src/queries/sql/getWebsiteDateRange.ts index d6333ad52..58d8ab25e 100644 --- a/src/queries/sql/getWebsiteDateRange.ts +++ b/src/queries/sql/getWebsiteDateRange.ts @@ -1,7 +1,7 @@ -import clickhouse from '@/lib/clickhouse'; -import { DEFAULT_RESET_DATE } from '@/lib/constants'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from '@/lib/db'; +import { DEFAULT_RESET_DATE } from '@/lib/constants'; export async function getWebsiteDateRange(...args: [websiteId: string]) { return runQuery({ diff --git a/src/queries/sql/getWebsiteStats.ts b/src/queries/sql/getWebsiteStats.ts index 69068394d..4a4bef78b 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 type { QueryFilters } from '@/lib/types'; +import { QueryFilters } from '@/lib/types'; const FUNCTION_NAME = 'getWebsiteStats'; diff --git a/src/queries/sql/getWeeklyTraffic.ts b/src/queries/sql/getWeeklyTraffic.ts index 7bbe78a7a..ea2029935 100644 --- a/src/queries/sql/getWeeklyTraffic.ts +++ b/src/queries/sql/getWeeklyTraffic.ts @@ -1,8 +1,8 @@ -import clickhouse from '@/lib/clickhouse'; -import { EVENT_COLUMNS } from '@/lib/constants'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; +import { QueryFilters } from '@/lib/types'; +import { EVENT_COLUMNS } from '@/lib/constants'; const FUNCTION_NAME = 'getWeeklyTraffic'; diff --git a/src/queries/sql/index.ts b/src/queries/sql/index.ts index 1573bdefd..682ac6d27 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/getEventDataValues'; -export * from './events/getEventExpandedMetrics'; export * from './events/getEventMetrics'; +export * from './events/getEventExpandedMetrics'; export * from './events/getEventStats'; -export * from './events/getEventUsage'; export * from './events/getWebsiteEvents'; +export * from './events/getEventUsage'; 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 './getChannelExpandedMetrics'; export * from './getChannelMetrics'; +export * from './getChannelExpandedMetrics'; 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 938b28acd..2e234ab17 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 type { QueryFilters } from '@/lib/types'; +import { 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 9d4f62782..0a92e6afd 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 type { QueryFilters } from '@/lib/types'; +import { 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 251d5b142..a6619e87d 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 type { QueryFilters } from '@/lib/types'; +import { 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 1d040781d..9277bbf7b 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 type { QueryFilters } from '@/lib/types'; +import { 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 51773d864..6cea68f3f 100644 --- a/src/queries/sql/reports/getBreakdown.ts +++ b/src/queries/sql/reports/getBreakdown.ts @@ -1,8 +1,8 @@ -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 type { QueryFilters } from '@/lib/types'; +import clickhouse from '@/lib/clickhouse'; +import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from '@/lib/constants'; +import { 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 4840123fe..ada5eeb2d 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 type { QueryFilters } from '@/lib/types'; +import { 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 7e790ff48..702c160ab 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 type { QueryFilters } from '@/lib/types'; +import { 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 283e0fad4..51e0d16f0 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 type { QueryFilters } from '@/lib/types'; +import { 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 87b55e03d..d99098c00 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 type { QueryFilters } from '@/lib/types'; +import { 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 f5e3ec82f..5771bdef0 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 type { QueryFilters } from '@/lib/types'; +import { 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 4d43eb45b..5dee7a7b0 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 type { QueryFilters } from '@/lib/types'; +import { 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 8d07a5540..b5106a541 100644 --- a/src/queries/sql/sessions/createSession.ts +++ b/src/queries/sql/sessions/createSession.ts @@ -1,4 +1,4 @@ -import type { Prisma } from '@/generated/prisma/client'; +import { 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 af31fca6a..3dd4fa9d8 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 type { QueryFilters } from '@/lib/types'; +import { 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 8f1e49332..09679fc82 100644 --- a/src/queries/sql/sessions/getSessionData.ts +++ b/src/queries/sql/sessions/getSessionData.ts @@ -1,6 +1,6 @@ -import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; const FUNCTION_NAME = 'getSessionData'; diff --git a/src/queries/sql/sessions/getSessionDataProperties.ts b/src/queries/sql/sessions/getSessionDataProperties.ts index 9b429f9b9..96cc17bf6 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 type { QueryFilters } from '@/lib/types'; +import { 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 5790141c5..0093575d8 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 prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 85c129391..1d2111377 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 type { QueryFilters } from '@/lib/types'; +import { 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 c519bdd0d..7133332b5 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 type { QueryFilters } from '@/lib/types'; +import { 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 fd457720c..ea93b2263 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 type { QueryFilters } from '@/lib/types'; +import { 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 3c1608713..36c48c204 100644 --- a/src/queries/sql/sessions/getWebsiteSession.ts +++ b/src/queries/sql/sessions/getWebsiteSession.ts @@ -1,6 +1,6 @@ -import clickhouse from '@/lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; import prisma from '@/lib/prisma'; +import clickhouse from '@/lib/clickhouse'; +import { runQuery, PRISMA, CLICKHOUSE } from '@/lib/db'; const FUNCTION_NAME = 'getWebsiteSession'; diff --git a/src/queries/sql/sessions/getWebsiteSessionStats.ts b/src/queries/sql/sessions/getWebsiteSessionStats.ts index a12e6c614..2e824f0d0 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 type { QueryFilters } from '@/lib/types'; +import { 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 df640d6d8..5ebd1740b 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 { EVENT_COLUMNS } from '@/lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from '@/lib/db'; +import { EVENT_COLUMNS } from '@/lib/constants'; import prisma from '@/lib/prisma'; -import type { QueryFilters } from '@/lib/types'; +import { 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 740931777..cffe8e6e5 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 prisma from '@/lib/prisma'; -import type { DynamicData } from '@/lib/types'; +import clickhouse from '@/lib/clickhouse'; export interface SaveSessionDataArgs { websiteId: string; diff --git a/src/store/app.ts b/src/store/app.ts index bb54e5650..9ed3641c3 100644 --- a/src/store/app.ts +++ b/src/store/app.ts @@ -8,8 +8,8 @@ import { THEME_CONFIG, TIMEZONE_CONFIG, } from '@/lib/constants'; -import { getTimezone } from '@/lib/date'; import { getItem } from '@/lib/storage'; +import { getTimezone } from '@/lib/date'; const initialState = { locale: getItem(LOCALE_CONFIG) || process.env.defaultLocale || DEFAULT_LOCALE, diff --git a/src/store/version.ts b/src/store/version.ts index 95367afd7..c62924194 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 { create } from 'zustand'; -import { CURRENT_VERSION, UPDATES_URL, VERSION_CHECK } from '@/lib/constants'; +import { CURRENT_VERSION, VERSION_CHECK, UPDATES_URL } from '@/lib/constants'; import { getItem } from '@/lib/storage'; const initialState = { diff --git a/src/store/websites.ts b/src/store/websites.ts index 4ddcab05f..fe5c1f926 100644 --- a/src/store/websites.ts +++ b/src/store/websites.ts @@ -1,6 +1,6 @@ -import { produce } from 'immer'; import { create } from 'zustand'; -import type { DateRange } from '@/lib/types'; +import { produce } from 'immer'; +import { DateRange } from '@/lib/types'; const store = create(() => ({})); diff --git a/src/tracker/index.d.ts b/src/tracker/index.d.ts index 32fbee97f..05497da20 100644 --- a/src/tracker/index.d.ts +++ b/src/tracker/index.d.ts @@ -148,6 +148,6 @@ export type UmamiTracker = { }; }; -export interface Window { +interface Window { umami: UmamiTracker; } diff --git a/src/tracker/index.js b/src/tracker/index.js index ad3648aca..a9966198a 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?.getItem('umami.disabled') || + (localStorage && 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 */ } };