From 4a7102435f31e841ee235e7209b816cb17d7e4b7 Mon Sep 17 00:00:00 2001 From: No767 <73260931+No767@users.noreply.github.com> Date: Wed, 8 Jul 2026 02:34:51 -0700 Subject: [PATCH 1/6] done --- package.json | 57 +- pnpm-lock.yaml | 843 ++++++--- src/components/app/dashboard-events.tsx | 2 +- src/components/app/media-lightbox.tsx | 113 ++ src/components/ui/data-table.tsx | 118 ++ src/components/ui/label.tsx | 20 + src/components/ui/pagination.tsx | 130 ++ src/components/ui/table.tsx | 114 ++ src/components/ui/textarea.tsx | 18 + src/index.css | 8 +- src/lib/dashboard-mocks.ts | 591 ++++++ src/routeTree.gen.ts | 44 + src/routes/dashboard/events.tsx | 4 +- src/routes/dashboard/manage/projects.tsx | 1598 +++++++++++++++++ .../manage/projects_.$projectId.gallery.tsx | 432 +++++ src/routes/dashboard/projects.tsx | 1082 ++++++++++- src/routes/dashboard/route.tsx | 30 +- vite.config.ts | 6 +- 18 files changed, 4867 insertions(+), 343 deletions(-) create mode 100644 src/components/app/media-lightbox.tsx create mode 100644 src/components/ui/data-table.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/pagination.tsx create mode 100644 src/components/ui/table.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/lib/dashboard-mocks.ts create mode 100644 src/routes/dashboard/manage/projects.tsx create mode 100644 src/routes/dashboard/manage/projects_.$projectId.gallery.tsx diff --git a/package.json b/package.json index 68641eed..fe3f49e0 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,10 @@ "preview": "vite preview" }, "dependencies": { - "@base-ui/react": "^1.5.0", + "@base-ui/react": "^1.6.0", + "@dnd-kit/dom": "^0.5.0", + "@dnd-kit/helpers": "^0.5.0", + "@dnd-kit/react": "^0.5.0", "@fontsource-variable/raleway": "^5.2.8", "@icons-pack/react-simple-icons": "^13.13.0", "@schedule-x/calendar": "^4.6.0", @@ -18,52 +21,56 @@ "@schedule-x/scroll-controller": "^4.6.0", "@schedule-x/theme-shadcn": "^4.6.0", "@tanstack/react-form": "^1.33.0", - "@tanstack/react-query": "^5.101.0", - "@tanstack/react-router": "^1.170.15", - "axios": "^1.18.0", + "@tanstack/react-query": "^5.101.2", + "@tanstack/react-router": "^1.170.17", + "@tanstack/react-table": "^8.21.3", + "axios": "^1.18.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "embla-carousel-react": "^8.6.0", - "lucide-react": "^1.17.0", + "hash-wasm": "^4.12.0", + "lucide-react": "^1.23.0", "next-themes": "^0.4.6", "react": "^19.2.7", "react-dom": "^19.2.7", + "react-dropzone": "^15.0.0", "sonner": "^2.0.7", "tailwind-merge": "^3.6.0", - "temporal-polyfill": "^1.0.0", + "temporal-polyfill": "^1.0.1", "zod": "^4.4.3" }, "devDependencies": { "@rolldown/plugin-babel": "^0.2.3", - "@tailwindcss/vite": "^4.3.0", - "@tanstack/eslint-plugin-query": "^5.101.0", + "@tailwindcss/vite": "^4.3.2", + "@tanstack/eslint-plugin-query": "^5.101.2", "@tanstack/eslint-plugin-router": "^1.162.0", - "@tanstack/router-plugin": "^1.168.18", + "@tanstack/router-plugin": "^1.168.19", "@types/babel__core": "^7.20.5", - "@types/node": "^25.9.3", + "@types/node": "^25.9.4", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", + "@vitejs/plugin-react": "^6.0.3", "babel-plugin-react-compiler": "^1.0.0", - "eslint": "^10.4.0", - "eslint-plugin-better-tailwindcss": "^4.6.0", - "eslint-plugin-oxlint": "^1.70.0", + "eslint": "^10.6.0", + "eslint-plugin-better-tailwindcss": "^4.6.1", + "eslint-plugin-oxlint": "^1.72.0", "eslint-plugin-perfectionist": "^5.9.1", - "eslint-plugin-react-dom": "^5.9.0", + "eslint-plugin-react-dom": "^5.10.4", "eslint-plugin-react-hooks": "^7.1.1", - "eslint-plugin-react-jsx": "^5.9.0", - "eslint-plugin-react-naming-convention": "^5.9.0", - "eslint-plugin-react-x": "^5.9.0", - "globals": "^17.6.0", + "eslint-plugin-react-jsx": "^5.10.4", + "eslint-plugin-react-naming-convention": "^5.10.4", + "eslint-plugin-react-x": "^5.10.4", + "eslint-plugin-sonarjs": "^4.1.0", + "globals": "^17.7.0", "oxfmt": "^0.57.0", - "oxlint": "^1.70.0", + "oxlint": "^1.72.0", "oxlint-tsgolint": "^0.24.0", "react-scan": "^0.5.7", - "shadcn": "^4.11.0", - "tailwindcss": "^4.3.0", + "shadcn": "^4.13.0", + "tailwindcss": "^4.3.2", "tw-animate-css": "^1.4.0", - "typescript": "^6.0.2", - "typescript-eslint": "^8.61.1", - "vite": "^8.0.16" + "typescript": "^6.0.3", + "typescript-eslint": "^8.62.1", + "vite": "^8.1.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0152abd..ac272b6a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,17 @@ importers: .: dependencies: '@base-ui/react': - specifier: ^1.5.0 + specifier: ^1.6.0 version: 1.6.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@dnd-kit/dom': + specifier: ^0.5.0 + version: 0.5.0 + '@dnd-kit/helpers': + specifier: ^0.5.0 + version: 0.5.0 + '@dnd-kit/react': + specifier: ^0.5.0 + version: 0.5.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@fontsource-variable/raleway': specifier: ^5.2.8 version: 5.2.8 @@ -19,16 +28,16 @@ importers: version: 13.13.0(react@19.2.7) '@schedule-x/calendar': specifier: ^4.6.0 - version: 4.6.0(@preact/signals@2.9.2(preact@10.29.3))(preact@10.29.3)(temporal-polyfill@1.0.1) + version: 4.6.0(@preact/signals@2.9.2(preact@10.29.4))(preact@10.29.4)(temporal-polyfill@1.0.1) '@schedule-x/calendar-controls': specifier: ^4.6.0 version: 4.6.0 '@schedule-x/react': specifier: ^4.1.0 - version: 4.1.0(@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.3))(preact@10.29.3)(temporal-polyfill@1.0.1))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 4.1.0(@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.4))(preact@10.29.4)(temporal-polyfill@1.0.1))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@schedule-x/scroll-controller': specifier: ^4.6.0 - version: 4.6.0(@preact/signals@2.9.2(preact@10.29.3)) + version: 4.6.0(@preact/signals@2.9.2(preact@10.29.4)) '@schedule-x/theme-shadcn': specifier: ^4.6.0 version: 4.6.0 @@ -36,13 +45,16 @@ importers: specifier: ^1.33.0 version: 1.33.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-query': - specifier: ^5.101.0 + specifier: ^5.101.2 version: 5.101.2(react@19.2.7) '@tanstack/react-router': - specifier: ^1.170.15 + specifier: ^1.170.17 version: 1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/react-table': + specifier: ^8.21.3 + version: 8.21.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) axios: - specifier: ^1.18.0 + specifier: ^1.18.1 version: 1.18.1 class-variance-authority: specifier: ^0.7.1 @@ -53,8 +65,11 @@ importers: embla-carousel-react: specifier: ^8.6.0 version: 8.6.0(react@19.2.7) + hash-wasm: + specifier: ^4.12.0 + version: 4.12.0 lucide-react: - specifier: ^1.17.0 + specifier: ^1.23.0 version: 1.23.0(react@19.2.7) next-themes: specifier: ^0.4.6 @@ -65,6 +80,9 @@ importers: react-dom: specifier: ^19.2.7 version: 19.2.7(react@19.2.7) + react-dropzone: + specifier: ^15.0.0 + version: 15.0.0(react@19.2.7) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -72,7 +90,7 @@ importers: specifier: ^3.6.0 version: 3.6.0 temporal-polyfill: - specifier: ^1.0.0 + specifier: ^1.0.1 version: 1.0.1 zod: specifier: ^4.4.3 @@ -82,22 +100,22 @@ importers: specifier: ^0.2.3 version: 0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) '@tailwindcss/vite': - specifier: ^4.3.0 + specifier: ^4.3.2 version: 4.3.2(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) '@tanstack/eslint-plugin-query': - specifier: ^5.101.0 + specifier: ^5.101.2 version: 5.101.2(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@tanstack/eslint-plugin-router': specifier: ^1.162.0 version: 1.162.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@tanstack/router-plugin': - specifier: ^1.168.18 + specifier: ^1.168.19 version: 1.168.19(@tanstack/react-router@1.170.17(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 '@types/node': - specifier: ^25.9.3 + specifier: ^25.9.4 version: 25.9.4 '@types/react': specifier: ^19.2.17 @@ -106,70 +124,73 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': - specifier: ^6.0.2 + specifier: ^6.0.3 version: 6.0.3(@rolldown/plugin-babel@0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)))(babel-plugin-react-compiler@1.0.0)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 eslint: - specifier: ^10.4.0 + specifier: ^10.6.0 version: 10.6.0(jiti@2.7.0) eslint-plugin-better-tailwindcss: - specifier: ^4.6.0 - version: 4.6.0(eslint@10.6.0(jiti@2.7.0))(oxlint@1.72.0(oxlint-tsgolint@0.24.0))(tailwindcss@4.3.2)(typescript@6.0.3) + specifier: ^4.6.1 + version: 4.6.1(eslint@10.6.0(jiti@2.7.0))(oxlint@1.72.0(oxlint-tsgolint@0.24.0))(tailwindcss@4.3.2)(typescript@6.0.3) eslint-plugin-oxlint: - specifier: ^1.70.0 + specifier: ^1.72.0 version: 1.72.0(oxlint@1.72.0(oxlint-tsgolint@0.24.0)) eslint-plugin-perfectionist: specifier: ^5.9.1 version: 5.9.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-react-dom: - specifier: ^5.9.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^5.10.4 + version: 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-react-hooks: specifier: ^7.1.1 version: 7.1.1(eslint@10.6.0(jiti@2.7.0)) eslint-plugin-react-jsx: - specifier: ^5.9.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^5.10.4 + version: 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-react-naming-convention: - specifier: ^5.9.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^5.10.4 + version: 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-react-x: - specifier: ^5.9.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^5.10.4 + version: 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + eslint-plugin-sonarjs: + specifier: ^4.1.0 + version: 4.1.0(eslint@10.6.0(jiti@2.7.0)) globals: - specifier: ^17.6.0 + specifier: ^17.7.0 version: 17.7.0 oxfmt: specifier: ^0.57.0 version: 0.57.0 oxlint: - specifier: ^1.70.0 + specifier: ^1.72.0 version: 1.72.0(oxlint-tsgolint@0.24.0) oxlint-tsgolint: specifier: ^0.24.0 version: 0.24.0 react-scan: specifier: ^0.5.7 - version: 0.5.7(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) + version: 0.5.7(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) shadcn: - specifier: ^4.11.0 - version: 4.12.0(typescript@6.0.3) + specifier: ^4.13.0 + version: 4.13.0(typescript@6.0.3) tailwindcss: - specifier: ^4.3.0 + specifier: ^4.3.2 version: 4.3.2 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 typescript: - specifier: ^6.0.2 + specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.61.1 + specifier: ^8.62.1 version: 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) vite: - specifier: ^8.0.16 + specifier: ^8.1.3 version: 8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0) packages: @@ -345,6 +366,30 @@ packages: '@types/react': optional: true + '@dnd-kit/abstract@0.5.0': + resolution: {integrity: sha512-hi13iMJgjPX/KDYVKg5VeDIhmYiV6buc9bAX+tCLYf4QdyYjPbsXjn2sPo6m7fQ6SGJBEFgHJ2PemeKDUbwBaA==} + + '@dnd-kit/collision@0.5.0': + resolution: {integrity: sha512-xUqRn3lS7oqLkT0AnnHS/STh/Czvwe1UapZFYiLbsUGxopMsQd4teaPCzPouOThoMdGEe+dHWjfqJl6t9iG4mQ==} + + '@dnd-kit/dom@0.5.0': + resolution: {integrity: sha512-f2xFJp5SYQ8EW/Fbtaa8iBb66hpkWc7qa8vU826KW11/tb44sH+AisZnGtwOOTWTQ0GraqBDr5ixTErww+eKXw==} + + '@dnd-kit/geometry@0.5.0': + resolution: {integrity: sha512-ubHQS1CiSDH8ssYH2xG5BnpwPSFP1tStXXjug7/Ba6qnQdu/EUH47l6QXKIksQnnanfVfDf0aGeevRxgZlj28A==} + + '@dnd-kit/helpers@0.5.0': + resolution: {integrity: sha512-i4y+51/icSw+OHMr/su19qhnmNhAzh8PnBwXvapFYTd+64oodIyJRiRkB+hhfxAfnur7RYSW8qacDTrXjg2XOg==} + + '@dnd-kit/react@0.5.0': + resolution: {integrity: sha512-abQPLI8lmfVE+v/n+pqy5WFxrw6T2Yg0UQZsL78dp5DKci7dKTVDjvLWqvass+XTFtzJmsZEjk1NdqE6xG8Jiw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@dnd-kit/state@0.5.0': + resolution: {integrity: sha512-y7XbabQqjF58Lk8YmDQuR8l6QjN+Kh4qlGEjUvHuIeasLk1QP+9L5diXS98VMxQIivyMmUtX2//f+3N7qPJX4w==} + '@dotenvx/dotenvx@1.75.1': resolution: {integrity: sha512-/BITOC9dmS/edY2zQwZNicQ059O6RKabtQfyEafV0nGtfYRNHYy1DIPiYVcov40+tob9hfmBnbR963dS+EQ1DQ==} hasBin: true @@ -380,43 +425,43 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@5.10.0': - resolution: {integrity: sha512-8AZj8ZkRIwLnsy9dA7A9aJJp0rjURKa18/rZU7I37akXVpRBpQAui3+Z7IfbSH5t5B3y3vIM96kpYfc5RiYXYw==} + '@eslint-react/ast@5.10.4': + resolution: {integrity: sha512-FcxjL+TjzJeH+FnHRjahLEh5OccKIbPQwujxzribXMkkuHYOI44sLXtcOhslERiSU8DikOdnZzBNrhiujW9zwQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/core@5.10.0': - resolution: {integrity: sha512-brqXjHlQV9WD337ksz8u9g4z70czWTeLBA74cdPvZ32IlYuIYTIPu/R5j8MXLQhaTAJmC6+H3RN+EjgrTfFvRw==} + '@eslint-react/core@5.10.4': + resolution: {integrity: sha512-bxBgTtAx0VbZSWUP+TKqw80Z2vBX9aQ0v5XDOvx4juIgy9gIfND4DqFo6CIJ4SkmH0ZdzqiCBwmhbETHgXumnQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/eslint@5.10.0': - resolution: {integrity: sha512-iHoMYyLdrzQJcZESTJ9xa56CzrKR0gmJyQB6KAz95b0zjKY9VCpKufnZ6ZlPQ33p2IGQq8A30uk3KLULYCgGNw==} + '@eslint-react/eslint@5.10.4': + resolution: {integrity: sha512-/PHUvYVpRZRvWVT15HySdCySxZ2d6KmlBV4VomhmQocvb6n/haRJ4SVTqSy0I+CV327TBFnaHw1hUdMw7zROxw==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/jsx@5.10.0': - resolution: {integrity: sha512-jrZNSItx/OFVFNyax2sU2QXjxAfDazKGOLt3bWdjpU7Vz46LkdPwW1MfgK9qB74KiGq7uZRtpjqzaTF4atzsvg==} + '@eslint-react/jsx@5.10.4': + resolution: {integrity: sha512-XK374cpduryK3+/zDCWegF+c1ilLF8T0a1lCC5J9Z/56uGf7n/bEASyTyBLsnkJlxX/8+b9sYXT+lqnOAAyoNg==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/shared@5.10.0': - resolution: {integrity: sha512-FNaKRqoNANfVlrXi/uuFPIs9S9yO4WLgKTAFOc3V1xNa9hRtRkKkii+cQqwlYDBuHlMIw9UMQoImnyO4AWiDDg==} + '@eslint-react/shared@5.10.4': + resolution: {integrity: sha512-gPWtJ4IYAwa3rAyRBh0Lkw6dWXSPLCzlQVttMyb4JFFcIYSnlPkiHv/MIpa24F8Mp40AapqOaX57JXJSgZ3eSQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - '@eslint-react/var@5.10.0': - resolution: {integrity: sha512-hApDw4o1xzc+4sDXJ/IWuUpG46FjgdX4bH15/VIT+qM4oxIta9aWuxn4WrcXDhEzkL4y75WRAVD0CugZg6Ww2g==} + '@eslint-react/var@5.10.4': + resolution: {integrity: sha512-fXqXn6tlvp/eJFDuqhWilaMifwLDcY1fMT9/q5PZJb7N9Row7oJ6tHy9zPTBhle0jAU+QprhK0irHGTlUqlN8Q==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' @@ -551,8 +596,8 @@ packages: resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@2.8.0': - resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==} + '@opentelemetry/core@2.9.0': + resolution: {integrity: sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -563,14 +608,20 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/resources@2.8.0': - resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==} + '@opentelemetry/resources@2.9.0': + resolution: {integrity: sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.9.0': + resolution: {integrity: sha512-cp9zmTl62R8PJrpvFcmc8N2JQU/xfa0S+61q511Nji+QxCfZ8Ifvg7H27G8cANe4crg4RTrWsVvanHiXjSp6ag==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.8.0': - resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==} + '@opentelemetry/sdk-trace@2.9.0': + resolution: {integrity: sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -842,106 +893,106 @@ packages: '@oxc-project/types@0.138.0': resolution: {integrity: sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==} - '@oxc-resolver/binding-android-arm-eabi@11.22.0': - resolution: {integrity: sha512-il+0FB7BBUfuQaE0Lgd9zlgSjzu88ErN8vr4hintuTt1qRDcPtmzLyurail1gJZpJ1ljo7zA0cid/a/PaWMyZg==} + '@oxc-resolver/binding-android-arm-eabi@11.23.0': + resolution: {integrity: sha512-8IJyWRLVAyhTfe9/TIEbQqSQnl5rUqYJrUOS6Dkr+Mq9FGHMxDGeiEmwkBqCvDP5KckpPh/GYSgbag66O6JsCw==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.22.0': - resolution: {integrity: sha512-rWCyvcoiMxb5JRsGMXI22DFAlsddZHOTBWp/zz48E85Yh/KWQRFko18Gf5xsRdcN0pz65VFnJoisz/B2LWoaGg==} + '@oxc-resolver/binding-android-arm64@11.23.0': + resolution: {integrity: sha512-pprVojnNhHxupwTT2gdeUlkxll6XEvWWBk3oVicOSNVWQC99OBnDhMQDoirqnzrE1bScQSMS2JgPpqdlrhz/Fg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.22.0': - resolution: {integrity: sha512-eDx1up8xhb6OH58RfcADHAKWQY3yatNAbrOF2QEqDN2ml0DsOlHBNgj7E5NB3kU62yam2VEYnFTMO8meOYEe1w==} + '@oxc-resolver/binding-darwin-arm64@11.23.0': + resolution: {integrity: sha512-mbIrWIMAJeytyee36OyUP5XH92TP7FaKaQ2m5AjokKy7STgjrhRt7SMXqpqLjhGm6Xn721Xmsg6H3Rtd9YQETw==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.22.0': - resolution: {integrity: sha512-4YUMAsVqqQGzkq7eDWEZXUvzm1L7eZFd4jghnoDv76fPF2IisedcBjkJY3iwcAlWQNtZLgc5Od/cL0Z2ogEwaQ==} + '@oxc-resolver/binding-darwin-x64@11.23.0': + resolution: {integrity: sha512-UnIphmZ1LazUCr9DXWaKYWtKDefPMbgLsywaoYxRqVCNHhq4MM6d2q1Nz1i9Vzxt5i+cE2nRUYpAUHr/lijNYA==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.22.0': - resolution: {integrity: sha512-I7qjjmCzrqPme94B9b9deHID6YiggKQRy3s9mTjnUuYlpgDx5YgC1G00W2S/Cchrjz5I8VOik17/3uO4joPULw==} + '@oxc-resolver/binding-freebsd-x64@11.23.0': + resolution: {integrity: sha512-aaZ/cSEYFkSxgS2hOrobT6RQcsWNviOX8dW6CEkVx2/UYkAf9MeHbjl3W0usWV53rVV//ndBdn2nb1y7jsu4lw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.22.0': - resolution: {integrity: sha512-VsI6Vnsyg9O5jLv+bkYP15yHv924i63fLbROZAZfwAAUJ611FF8OE4aCX2KzsG70yRlcn4n7Zh0fyHT5L4myGA==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': + resolution: {integrity: sha512-IoJLvO5SjLSVMaq83BNTrPCb1FppvoJc1IhZ5CoUVl3PykUBku7D+LK1j0GSurhJcIc6zfjghsvaZNpq5ev6Mg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.22.0': - resolution: {integrity: sha512-Imedx3sbderR0w8HHZ+vH7PqrY7eL3H7cj666Yrg+erelaRCVzXlJjQD5w0vNk+RtGDqhmnP5R18WIowFCI+uA==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': + resolution: {integrity: sha512-vskFpwg44T/LFsfjSCnVZ5ygcuqzPC1yUzVEiKa8BgHAQz0+QLQQW3EGWLPVi8EXFghzjR4EtgPBtOhCjU4jdw==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.22.0': - resolution: {integrity: sha512-a9L5IxPBpiSXcvEPGNWOpD5pKbcE0VgC5smcaYn0t/oMaJxHwejrJ1qRoXZLj767HAo+nq9FNEpZ9WFW91lP8g==} + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': + resolution: {integrity: sha512-//TcHVhrChyw5RYtgts6WO7KcWq9387c1Z5Zvhqpk/ktAbyaRYgBZrpSY1GDCFq50ASt6B6jhh+JxB1rB45IAg==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.22.0': - resolution: {integrity: sha512-4AFo9hX0AbA/o7qWrsrAHbRGsZpthcUEZiuMHlxqZsR4JNgvFmeuLtMXUV+KPHWo+gfefFmiQ0UdUx8GPBCrXQ==} + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': + resolution: {integrity: sha512-ZFqlwiTf7CXLLSGyAR9tYiO33LiaeIEXW+xm42d8mnUGpDgPltyrCGYtQezyMMEXvjhOgCz1X+i7sbDTJEx+bg==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.22.0': - resolution: {integrity: sha512-QVPpxFDkLxWAnfAqN0DA1TH4agOPL1bxg7dwUZ7goQKU5IfaPoL/ZcPClMol4+Dwb30g2nPNxbr0BPyFmcVV3A==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': + resolution: {integrity: sha512-oZ5LeN5+H1R19dRjTAxKrxQguH+AsemHcnthEfFxf4OjmBSty2doHLeSmMunKy3zpTHJQ3lh3Af+dNS+W6dYeA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.22.0': - resolution: {integrity: sha512-saQJeKGMCrtW5DH8uY9N9pPE4/8Hs+DpZ4hJg1+SzvISSKhTf3V6/jOROxluU14ftz5KNd8G/NXRgj9vTS0Emg==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': + resolution: {integrity: sha512-O4ciFDyX5ebQd0qkb1bjAIg8IEfiLT03GbSeylwlwlUMK9KwBWaALwrxSbc0Msaz4U6iPj+T9eRXpD5mxBfmvA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.22.0': - resolution: {integrity: sha512-/p6aCGRKot+Je44l+WoL+zkizRXY4ApQcvRXlLw8lRM305tmmEqNtAyekDLMCzn8DUt81lS3ZsiUpdn0bL533A==} + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': + resolution: {integrity: sha512-P3o8Y9kISYjcxadmbO+94ThRwLhwGuDAbA7dcdd4+YLpfeF+mmobz8fXf4NmSdfSqjyRSkceJDBRZha9NVYkiQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.22.0': - resolution: {integrity: sha512-ZYfI5CG/W1C+HXDWkJ5+JPjiuwVQw6HBD1jUTneAzJVWImRDjstQPKmixCa1fTkthCM1OCkn2D8fdX+q37kMXQ==} + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': + resolution: {integrity: sha512-oj03m1E3RmTFczKhcKJDzHaEDKJnPIsDcQFVxBJsSdXGSuIPdt5TvcM332FfMQgzI6yDJqyl4InrnFfXrmUTKQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.22.0': - resolution: {integrity: sha512-IR2juRKWbR6TmFZTn6plHFm5iXWD8Szw/fGeKhaGWzwTPN/Oq4CCV6ZVp8Bq8ih2easVh7Mwom2A5CGkB+QVxg==} + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': + resolution: {integrity: sha512-BqJxbSC8FdP7mSuSpRePTGHm0hXWV+dfz//f7SjsteZncLaBgWTBmi/OZNv7sX6CyG/Pt/eJkPorP+DkMOhMwQ==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.22.0': - resolution: {integrity: sha512-TCE/wgDr3EaxQrwQrU9MbRK35cFsYAVwMT2Du0lbyjmlaXV03uPLnCKIDDmxUPyQUdPgZirM+k26GDR3LNs+hw==} + '@oxc-resolver/binding-linux-x64-musl@11.23.0': + resolution: {integrity: sha512-utmw+VmUrW4K8LI5/6jhg4aGYKJHOIjQ9syYOOA6pF3w7haKu4r4enTe2U0C04/HbUvkq/Zif43xFsKW1Pnq9w==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.22.0': - resolution: {integrity: sha512-uhNpwQzWnYVBZ6ZZomIQN2X/jUDLp3HYjLSVbdsZqA4hNpYSFENSF8JV6I6gdvvV9TLQr1rC/viDsxhvE/5/Ww==} + '@oxc-resolver/binding-openharmony-arm64@11.23.0': + resolution: {integrity: sha512-V6lbRrthHa4TbvsLjPtg+EkXT1tRY+s4I8rYLXUfiHlZzGx3sLv1EH9CEOOevjvUYHLsbe/gqCIc73XnQfPb9A==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.22.0': - resolution: {integrity: sha512-nn8NCiQhh3rgwrGMf8msky7MjPd0W8Vwmo7oZr5cs7TOJby2IRMZYPPgb+NTz8vVG6VjjjcLPriIMxHE1aAx1A==} + '@oxc-resolver/binding-wasm32-wasi@11.23.0': + resolution: {integrity: sha512-gRoOxQPdnAmIAjxcuQNBxfihvx+wjTaQM/9/eP12xwnGNawOG/+Zz9RHN4WNSxT45b5CrscK4NB8aPh+oZQXAQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.22.0': - resolution: {integrity: sha512-kHx9KiAKQKeSW/yVmt5tUa7oAHUd9OsoB5fdpQjSBDaKtHSQpPIXxNJ1E9q8cnaxS9NNWANR6w3osEHBD+5lSg==} + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': + resolution: {integrity: sha512-CgTGMYsJVe1eUiCdJTpGw21svXw79ITsemN1h0hcNkiswasDbN5MoibSLY+gRMWP5syfEz5iffrjZnwEP8xeUA==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.22.0': - resolution: {integrity: sha512-gZKq7BTQBdAmvFYGQfqkuz3zeoytmAkluFjajToSkWUTed0DsJ3GdCoXpPdpGSElBLLIeAgKM3ju6XdPvKOr0A==} + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': + resolution: {integrity: sha512-gUGJpr+Rn6zMxm5juApV0K3U845i8t47o8k+rbO0BHbi4PoJIfSPeQmrE2dgohQm2g5k6iviNFyXCGqvmaYUpw==} cpu: [x64] os: [win32] @@ -1353,8 +1404,8 @@ packages: peerDependencies: preact: '>= 10.25.0 || >=11.0.0-0' - '@react-grab/cli@0.1.47': - resolution: {integrity: sha512-Cc7d8mSwvoV8gpeTQbE8dMPdeXIyO6w+yIhzgi3jY06i03WLNhb/6jIxNBNF1cVRI7ujnFQXZA66BbnBNTpBSw==} + '@react-grab/cli@0.1.48': + resolution: {integrity: sha512-KXRZFN0b78BeVa4Tq1FC9kiXPpC5lS4pQp/mvQ1azy9dZUJ3zfc7Ei84+yvGh+WoYdceMCFxXfBp6qhU/G056g==} hasBin: true '@rolldown/binding-android-arm64@1.1.4': @@ -1718,6 +1769,13 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + '@tanstack/router-core@1.171.14': resolution: {integrity: sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g==} engines: {node: '>=20.19'} @@ -1757,6 +1815,10 @@ packages: '@tanstack/store@0.9.3': resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} + '@tanstack/virtual-file-routes@1.162.0': resolution: {integrity: sha512-uhOeFyxLcU41HzvrxsGpiWdcMbScY1EDgbZ5K7DVRMYInbLYWAC0EA/kx9wXAoSM8q82bUG2hRl8+EAjE6XAbA==} engines: {node: '>=20.19'} @@ -1883,11 +1945,6 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1973,6 +2030,10 @@ packages: atomically@2.1.1: resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + attr-accept@2.2.5: + resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} + engines: {node: '>=4'} + axios@1.18.1: resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} @@ -1986,13 +2047,13 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.40: - resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} + baseline-browser-mapping@2.10.42: + resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} engines: {node: '>=6.0.0'} hasBin: true - bippy@0.5.42: - resolution: {integrity: sha512-K3tpfO9uGQB2k/Vi5P6jgfrnXvO/FAQNUE2tqKjQmT0a93fJCysMGLgJmRKzYYfybAoOtwWwmKm0vw/uXE0hMw==} + bippy@0.5.43: + resolution: {integrity: sha512-Tvu7b1M7+d8b9/YHaCeODEsi2CgbuoBql+dWSBrNnCuqJ1gMUeY3i0r+319hvjjl5GVBP6FFWxrKnq3fhZER0w==} peerDependencies: react: '>=17.0.1' @@ -2013,6 +2074,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -2213,8 +2278,8 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - deslop-js@0.5.8: - resolution: {integrity: sha512-Vq9D2x4dAIW24zcH55DTrl3/vi13UNKfXgw0yj7ULTssZ6KOdw/oyBHtlvE94KFC9yYEhgFTrGjaqqZKvV9pwA==} + deslop-js@0.7.1: + resolution: {integrity: sha512-HsEoRI/bzuD0o2OVczYz42SXTCl5of3ax6eiojZbC/7gJsPNxxjPRvBysP88LXsHujYrIGJnGtFRnHwCmKWuxQ==} detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} @@ -2243,8 +2308,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.384: - resolution: {integrity: sha512-g6KAKY1vkYsADvSPWvdJsuYT0ixdcu6lUtD9P/wJKGBEDlZVXh2AX42j1mPqqaQPDluWjara9ziQ7xqAeXCt5A==} + electron-to-chromium@1.5.387: + resolution: {integrity: sha512-TaxwufTFDufvPEoXdhwVrA3UdFWBeWGkYoJ1K8ldF1xe6gKfth6iRNS5lTQ5JPNOHdGQm8PT1QYKUqFLCiUefQ==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -2319,8 +2384,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-plugin-better-tailwindcss@4.6.0: - resolution: {integrity: sha512-Xeh/6KzLeays6jXSqTKx6iCdJL1qo5ant/mAabbz7dJqADYebKUUPR2zXp1xuiqqJ3HIm+MN+Ql2m4Jp0BxkMQ==} + eslint-plugin-better-tailwindcss@4.6.1: + resolution: {integrity: sha512-Lr8mPyuaZ+dS6ATuJaPwcOFOpOUsRBs5TXyOPqiTzLy0SvK4+0G6usbklCuQn4QabwFtNKdSXwl2WxOIPvu0lQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=23.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 @@ -2343,8 +2408,8 @@ packages: peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-react-dom@5.10.0: - resolution: {integrity: sha512-GE47tO78o0I+XqT0Et07BnTRI9x5bCRA1tRDraTc7CEjUTCu0FHyTjAYr0ZMwdrLSJib0OXjirD7GDp2MM7lYA==} + eslint-plugin-react-dom@5.10.4: + resolution: {integrity: sha512-+r4knNhpjjvPEitRWF6j3aiQjxHYcr93QnPFChgt7pChIuifEgIgYeeCj9qwgWk3rGt9YrsESe7s1d9q8iae3w==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' @@ -2356,27 +2421,32 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 - eslint-plugin-react-jsx@5.10.0: - resolution: {integrity: sha512-L0jKCE9zBzFqUt0zAJGga4VyUM8wEgBMenApllXCHCTxCUW7w9dqgl3p73qgYT5xa4oHJDXTDGyAzKO7p/kgeQ==} + eslint-plugin-react-jsx@5.10.4: + resolution: {integrity: sha512-XVQs2v9pekKzvO2FUtqVLPdmq+UNLal1YPS3rWwcCYney41GzT2SA7lzQ/t9sRkoclQf/DTE7jqQiUHN7RBoDA==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-naming-convention@5.10.0: - resolution: {integrity: sha512-RsXF/F/3nUtYylmpIRTggPEmw7qRPZItqNLt04AV84rqNY0/S5fVm0dqn39VoBbW+B8v23O1Ve8pvk0aib1N2g==} + eslint-plugin-react-naming-convention@5.10.4: + resolution: {integrity: sha512-prEXjlQM7s6xql23g4AETipAyhY3Fu9h4SbGS3LtRBhwBu+oB0MR1ksiZ2LK7jQr3jMb7ZgL7L5oYzbU/i5ZzQ==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' - eslint-plugin-react-x@5.10.0: - resolution: {integrity: sha512-ekvV8vYLp62dO3558ArIp+7oQLvd0jOJPvoxomzNBOJmiekFaVJifxaCxkcRB1l6yI4Rs2b9lnm5M+/YDTzoSQ==} + eslint-plugin-react-x@5.10.4: + resolution: {integrity: sha512-Lslxif5p0rKviGUdxPc7KIsNkEwkaZGoqFcTi4/ji6Ht1NylJkcV80p4dU6ZLgdaIAaQD2QG/m3i4QuoxLXfFA==} engines: {node: '>=22.0.0'} peerDependencies: eslint: '*' typescript: '*' + eslint-plugin-sonarjs@4.1.0: + resolution: {integrity: sha512-rh+FlVz0yfd2RNIb6WqSkuGh0addX/Qi5scwQ5FphXDFrM6fZKcxP1+attJ78yUKcyYfiu6MTaISPpAFPzqRJw==} + peerDependencies: + eslint: ^8.0.0 || ^9.0.0 || ^10.0.0 + eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2493,6 +2563,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-selector@2.1.2: + resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} + engines: {node: '>= 12'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2549,6 +2623,9 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + fuzzysort@3.1.0: resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} @@ -2611,6 +2688,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash-wasm@4.12.0: + resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} + hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -2641,8 +2721,8 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} ignore@5.3.2: @@ -2657,8 +2737,8 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-in-the-middle@3.2.0: - resolution: {integrity: sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==} + import-in-the-middle@3.3.0: + resolution: {integrity: sha512-v4+k+PLt4z6g2ydEcXhfinTJxfgKJDWOW0v0GZNA5n2qToHFObpH4nGLhJdwnXnX4T14oREx/M62dS9GkpmSbQ==} engines: {node: '>=18'} imurmurhash@0.1.4: @@ -2819,6 +2899,10 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + jsx-ast-utils-x@0.1.0: + resolution: {integrity: sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2919,6 +3003,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -2927,6 +3014,10 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3101,8 +3192,8 @@ packages: resolution: {integrity: sha512-/DaPStu0s2zzNSRRniKyTPM6Z/o+DapOp2JYNKDL8AsgaBGPK2IdZyB87SQjVH+xeQPz+Qr9mrjglfkYgtbVRA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.22.0: - resolution: {integrity: sha512-F3VuQRlu5uaMN9ffo2ufEa8D/SKykx1a2KaLtBa2JEmbtulRaTZKwQrrLsNLGfvBeLW8M/J0CE47KN3s0VdcmQ==} + oxc-resolver@11.23.0: + resolution: {integrity: sha512-f0+l598CJMOLnYPXsXxttJALH0ljtivdRMKtvHhxRuWa5FYmw5+qODARl8oYjMC/brpzKcrpdORsOBrTqhBZ9A==} oxfmt@0.57.0: resolution: {integrity: sha512-ZB7Bi+rGDSqmVIo9jwcLyFgjxXvQhDdU+jx+ZrVy6VRiVXK2+CHc4hO3J4dUQjHe7V0ymHB+MDuv5z+NhK07HA==} @@ -3117,8 +3208,8 @@ packages: vite-plus: optional: true - oxlint-plugin-react-doctor@0.5.8: - resolution: {integrity: sha512-L0jveKAMbqF1qAqA2Ksu8aH0/Q8FDQxLwXmHYgALa2XlsxEUuamJ+1Da2MhPWJ2ahn+ekFbnWK20qixxD+fw6A==} + oxlint-plugin-react-doctor@0.7.1: + resolution: {integrity: sha512-fvARsCESDZYvDIlhuB/JlDeUhTOLHYstoDJCKm0pzh4HQQJVVV6gcrQajBjYo/hdHC1ukl7btKTK3rk4uZwuew==} engines: {node: ^20.19.0 || >=22.13.0} oxlint-tsgolint@0.24.0: @@ -3219,8 +3310,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pkce-challenge@5.0.1: @@ -3243,8 +3334,8 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} - preact@10.29.3: - resolution: {integrity: sha512-D9NL1GAnJZhc3RndVs4gDdxEeU9TcHgywMrhhOsnpdlvFjdbx0gAsLUnH6JEhlJH5giL7Tx5biWPUSEXE/HPzw==} + preact@10.29.4: + resolution: {integrity: sha512-GMpwh9+NJ8tSmqwIaVyFRQkiKfBEzQ+k7r7tle4W+kaJ+7wJiB9hFz9BixAomMtenPPSBfM4bZhXozGxhf0uFQ==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -3263,6 +3354,9 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -3290,8 +3384,8 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - react-doctor@0.5.8: - resolution: {integrity: sha512-gDXDQ+48KeFq2jkVgsUhQ67oQ+kUMdnIaA+YeS9VXXZFXSg9wxY5dDxurEpILSh8RwO06W8p6uCnTR+wn5B/GA==} + react-doctor@0.7.1: + resolution: {integrity: sha512-Gmty7Enyrh6GPlz6Paq+UoL2O7YkTzNeHdflbqdp6fspX1UbUem5ejPyIUgo1jf77D6kB+INqsi2K+Mk/K8uBQ==} engines: {node: ^20.19.0 || >=22.13.0} hasBin: true @@ -3300,8 +3394,14 @@ packages: peerDependencies: react: ^19.2.7 - react-grab@0.1.47: - resolution: {integrity: sha512-1GNy24KMJ4CY1IxorYO9mydItGi0L1HkQB19uYU3t0BMsJB0K+D/QYiaBz+rugRynyY8LzmXIuOcon1TykLlCg==} + react-dropzone@15.0.0: + resolution: {integrity: sha512-lGjYV/EoqEjEWPnmiSvH4v5IoIAwQM2W4Z1C0Q/Pw2xD0eVzKPS359BQTUMum+1fa0kH2nrKjuavmTPOGhpLPg==} + engines: {node: '>= 10.13'} + peerDependencies: + react: '>= 16.8 || 18.0.0' + + react-grab@0.1.48: + resolution: {integrity: sha512-p3WnmK9LLvXE/c4ITPLlXcP1fkXo2VFEQqK94tIfcHIWKNdqdhYYFyNVioO50HR+uyHIwT63Z4txZDqJlVcD/Q==} hasBin: true peerDependencies: react: '>=17.0.0' @@ -3309,6 +3409,9 @@ packages: react: optional: true + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-scan@0.5.7: resolution: {integrity: sha512-KRlq734yN6q/f2CZmZi9CWHuiqSzoLhPFLtcJOL6XM4lR54myyFcY81pG9QOwj+eBC1hIHm5n+Ntbtqiilu8Rg==} hasBin: true @@ -3332,6 +3435,14 @@ packages: resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} engines: {node: '>= 4'} + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -3377,6 +3488,10 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + semifies@1.0.0: resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==} @@ -3410,8 +3525,8 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shadcn@4.12.0: - resolution: {integrity: sha512-o781ieQziCnXH2FKsEqxp1fnbHdbgAPO9inTSPeZ59hQfsZXuMGp3ul8oFSV5KQS4nbUK9b+DrDE6C7OvfKKQQ==} + shadcn@4.13.0: + resolution: {integrity: sha512-5fuJ4jI/GcPeA/iTL4cJivCZuYQGXz/N3bIzyd+Gd/FM6xUCy2MxGG+LaDQuw2cjNy9zGPSFPTEmI048UwPTZA==} engines: {node: '>=20.18.1'} hasBin: true @@ -3524,8 +3639,8 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - systeminformation@5.31.11: - resolution: {integrity: sha512-I6O7iaUj23AXRgCPDDnvi3xHvdOLp4+1YMbF+X194lJwY1NeWojgHJPhslVKcmTtrLTguRk3QJK+xEdTiI3P0w==} + systeminformation@5.31.12: + resolution: {integrity: sha512-qnTtO5wHrKeKE/MvQ6iIt6XAV+5fgt/kPIQf27DYgjVQQuHUfWkV4Gu6k04ZpEzAMuyQ3ZsovY7Ivhp+E9JyWw==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -3615,8 +3730,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@5.7.0: - resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} + type-fest@5.8.0: + resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} type-is@2.1.0: @@ -3630,6 +3745,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -4088,6 +4208,50 @@ snapshots: optionalDependencies: '@types/react': 19.2.17 + '@dnd-kit/abstract@0.5.0': + dependencies: + '@dnd-kit/geometry': 0.5.0 + '@dnd-kit/state': 0.5.0 + tslib: 2.8.1 + + '@dnd-kit/collision@0.5.0': + dependencies: + '@dnd-kit/abstract': 0.5.0 + '@dnd-kit/geometry': 0.5.0 + tslib: 2.8.1 + + '@dnd-kit/dom@0.5.0': + dependencies: + '@dnd-kit/abstract': 0.5.0 + '@dnd-kit/collision': 0.5.0 + '@dnd-kit/geometry': 0.5.0 + '@dnd-kit/state': 0.5.0 + tslib: 2.8.1 + + '@dnd-kit/geometry@0.5.0': + dependencies: + '@dnd-kit/state': 0.5.0 + tslib: 2.8.1 + + '@dnd-kit/helpers@0.5.0': + dependencies: + '@dnd-kit/abstract': 0.5.0 + tslib: 2.8.1 + + '@dnd-kit/react@0.5.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@dnd-kit/abstract': 0.5.0 + '@dnd-kit/dom': 0.5.0 + '@dnd-kit/state': 0.5.0 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + tslib: 2.8.1 + + '@dnd-kit/state@0.5.0': + dependencies: + '@preact/signals-core': 1.14.3 + tslib: 2.8.1 + '@dotenvx/dotenvx@1.75.1': dependencies: '@dotenvx/primitives': 0.8.0 @@ -4097,12 +4261,12 @@ snapshots: enquirer: 2.4.1 env-paths: 2.2.1 execa: 5.1.1 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) ignore: 5.3.2 object-treeify: 1.1.33 open: 8.4.2 - picomatch: 4.0.4 - systeminformation: 5.31.11 + picomatch: 4.0.5 + systeminformation: 5.31.12 undici: 7.28.0 which: 4.0.0 yocto-spinner: 1.2.0 @@ -4148,7 +4312,7 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/ast@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.62.1 '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3) @@ -4159,13 +4323,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-react/core@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/core@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/jsx': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/shared': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/var': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/shared': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/var': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) @@ -4175,7 +4339,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-react/eslint@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/eslint@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) @@ -4183,12 +4347,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-react/jsx@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/jsx@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/shared': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/var': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/shared': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/var': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) @@ -4197,9 +4361,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-react/shared@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/shared@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) ts-pattern: 5.9.0 @@ -4208,10 +4372,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-react/var@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@eslint-react/var@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) @@ -4367,7 +4531,7 @@ snapshots: '@opentelemetry/api@1.9.1': {} - '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.41.1 @@ -4376,22 +4540,30 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.214.0 - import-in-the-middle: 3.2.0 + import-in-the-middle: 3.3.0 require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color - '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + + '@opentelemetry/sdk-trace@2.9.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.41.1 '@opentelemetry/semantic-conventions@1.41.1': {} @@ -4530,65 +4702,65 @@ snapshots: '@oxc-project/types@0.138.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.22.0': + '@oxc-resolver/binding-android-arm-eabi@11.23.0': optional: true - '@oxc-resolver/binding-android-arm64@11.22.0': + '@oxc-resolver/binding-android-arm64@11.23.0': optional: true - '@oxc-resolver/binding-darwin-arm64@11.22.0': + '@oxc-resolver/binding-darwin-arm64@11.23.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.22.0': + '@oxc-resolver/binding-darwin-x64@11.23.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.22.0': + '@oxc-resolver/binding-freebsd-x64@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.22.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.22.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.22.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.22.0': + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.22.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.22.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.22.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.22.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.22.0': + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.22.0': + '@oxc-resolver/binding-linux-x64-musl@11.23.0': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.22.0': + '@oxc-resolver/binding-openharmony-arm64@11.23.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.22.0': + '@oxc-resolver/binding-wasm32-wasi@11.23.0': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.22.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.22.0': + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': optional: true '@oxfmt/binding-android-arm-eabi@0.57.0': @@ -4784,12 +4956,12 @@ snapshots: '@preact/signals-core@1.14.3': {} - '@preact/signals@2.9.2(preact@10.29.3)': + '@preact/signals@2.9.2(preact@10.29.4)': dependencies: '@preact/signals-core': 1.14.3 - preact: 10.29.3 + preact: 10.29.4 - '@react-grab/cli@0.1.47': + '@react-grab/cli@0.1.48': dependencies: agent-install: 0.0.6 commander: 14.0.3 @@ -4852,7 +5024,7 @@ snapshots: '@rolldown/plugin-babel@0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 - picomatch: 4.0.4 + picomatch: 4.0.5 rolldown: 1.1.4 optionalDependencies: '@babel/runtime': 7.29.7 @@ -4864,25 +5036,25 @@ snapshots: dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 '@schedule-x/calendar-controls@4.6.0': {} - '@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.3))(preact@10.29.3)(temporal-polyfill@1.0.1)': + '@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.4))(preact@10.29.4)(temporal-polyfill@1.0.1)': dependencies: - '@preact/signals': 2.9.2(preact@10.29.3) - preact: 10.29.3 + '@preact/signals': 2.9.2(preact@10.29.4) + preact: 10.29.4 temporal-polyfill: 1.0.1 - '@schedule-x/react@4.1.0(@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.3))(preact@10.29.3)(temporal-polyfill@1.0.1))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@schedule-x/react@4.1.0(@schedule-x/calendar@4.6.0(@preact/signals@2.9.2(preact@10.29.4))(preact@10.29.4)(temporal-polyfill@1.0.1))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@schedule-x/calendar': 4.6.0(@preact/signals@2.9.2(preact@10.29.3))(preact@10.29.3)(temporal-polyfill@1.0.1) + '@schedule-x/calendar': 4.6.0(@preact/signals@2.9.2(preact@10.29.4))(preact@10.29.4)(temporal-polyfill@1.0.1) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@schedule-x/scroll-controller@4.6.0(@preact/signals@2.9.2(preact@10.29.3))': + '@schedule-x/scroll-controller@4.6.0(@preact/signals@2.9.2(preact@10.29.4))': dependencies: - '@preact/signals': 2.9.2(preact@10.29.3) + '@preact/signals': 2.9.2(preact@10.29.4) '@schedule-x/theme-shadcn@4.6.0': {} @@ -4892,40 +5064,40 @@ snapshots: '@sentry/core@10.63.0': {} - '@sentry/node-core@10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))': + '@sentry/node-core@10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))': dependencies: '@sentry/conventions': 0.12.0 '@sentry/core': 10.63.0 - '@sentry/opentelemetry': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) - import-in-the-middle: 3.2.0 + '@sentry/opentelemetry': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1)) + import-in-the-middle: 3.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.1) - '@sentry/node@10.63.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))': + '@sentry/node@10.63.0(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.41.1 '@sentry/conventions': 0.12.0 '@sentry/core': 10.63.0 - '@sentry/node-core': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) - '@sentry/opentelemetry': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) + '@sentry/node-core': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1)) + '@sentry/opentelemetry': 10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1)) '@sentry/server-utils': 10.63.0 - import-in-the-middle: 3.2.0 + import-in-the-middle: 3.3.0 transitivePeerDependencies: - '@opentelemetry/core' - '@opentelemetry/exporter-trace-otlp-http' - supports-color - '@sentry/opentelemetry@10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))': + '@sentry/opentelemetry@10.63.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.1) '@sentry/conventions': 0.12.0 '@sentry/core': 10.63.0 @@ -5077,6 +5249,12 @@ snapshots: react-dom: 19.2.7(react@19.2.7) use-sync-external-store: 1.6.0(react@19.2.7) + '@tanstack/react-table@8.21.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@tanstack/table-core': 8.21.3 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + '@tanstack/router-core@1.171.14': dependencies: '@tanstack/history': 1.162.0 @@ -5138,6 +5316,8 @@ snapshots: '@tanstack/store@0.9.3': {} + '@tanstack/table-core@8.21.3': {} + '@tanstack/virtual-file-routes@1.162.0': {} '@ts-morph/common@0.27.0': @@ -5300,10 +5480,6 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.17.0): - dependencies: - acorn: 8.17.0 - acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -5385,6 +5561,8 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 + attr-accept@2.2.5: {} + axios@1.18.1: dependencies: follow-redirects: 1.16.0 @@ -5410,9 +5588,9 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.40: {} + baseline-browser-mapping@2.10.42: {} - bippy@0.5.42(react@19.2.7): + bippy@0.5.43(react@19.2.7): dependencies: react: 19.2.7 @@ -5422,7 +5600,7 @@ snapshots: content-type: 2.0.0 debug: 4.4.3 http-errors: 2.0.1 - iconv-lite: 0.7.2 + iconv-lite: 0.7.3 on-finished: 2.4.1 qs: 6.15.3 raw-body: 3.0.2 @@ -5440,12 +5618,14 @@ snapshots: browserslist@4.28.4: dependencies: - baseline-browser-mapping: 2.10.40 + baseline-browser-mapping: 2.10.42 caniuse-lite: 1.0.30001800 - electron-to-chromium: 1.5.384 + electron-to-chromium: 1.5.387 node-releases: 2.0.50 update-browserslist-db: 1.2.3(browserslist@4.28.4) + builtin-modules@3.3.0: {} + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -5609,14 +5789,14 @@ snapshots: depd@2.0.0: {} - deslop-js@0.5.8: + deslop-js@0.7.1: dependencies: '@oxc-project/types': 0.132.0 fast-glob: 3.3.3 minimatch: 10.2.5 oxc-parser: 0.132.0 - oxc-resolver: 11.22.0 - typescript: 6.0.3 + oxc-resolver: 11.23.0 + typescript: 5.9.3 detect-libc@2.1.2: {} @@ -5624,7 +5804,7 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.7.0 + type-fest: 5.8.0 dot-prop@6.0.1: dependencies: @@ -5640,7 +5820,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.384: {} + electron-to-chromium@1.5.387: {} embla-carousel-react@8.6.0(react@19.2.7): dependencies: @@ -5704,7 +5884,7 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-better-tailwindcss@4.6.0(eslint@10.6.0(jiti@2.7.0))(oxlint@1.72.0(oxlint-tsgolint@0.24.0))(tailwindcss@4.3.2)(typescript@6.0.3): + eslint-plugin-better-tailwindcss@4.6.1(eslint@10.6.0(jiti@2.7.0))(oxlint@1.72.0(oxlint-tsgolint@0.24.0))(tailwindcss@4.3.2)(typescript@6.0.3): dependencies: '@eslint/css-tree': 4.0.4 '@valibot/to-json-schema': 1.7.1(valibot@1.4.2(typescript@6.0.3)) @@ -5736,12 +5916,12 @@ snapshots: - supports-color - typescript - eslint-plugin-react-dom@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-react-dom@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/jsx': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/shared': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/shared': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) compare-versions: 6.1.1 @@ -5761,13 +5941,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-jsx@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-react-jsx@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/core': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/jsx': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/shared': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/core': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/shared': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) @@ -5775,12 +5955,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-naming-convention@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-react-naming-convention@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/core': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/var': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/core': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/var': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint: 10.6.0(jiti@2.7.0) @@ -5789,14 +5969,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-x@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-react-x@5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@eslint-react/ast': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/core': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/eslint': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/jsx': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/shared': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@eslint-react/var': 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/ast': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/core': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/eslint': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/jsx': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/shared': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@eslint-react/var': 5.10.4(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/types': 8.62.1 @@ -5811,6 +5991,23 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-sonarjs@4.1.0(eslint@10.6.0(jiti@2.7.0)): + dependencies: + '@eslint-community/regexpp': 4.12.2 + builtin-modules: 3.3.0 + bytes: 3.1.2 + eslint: 10.6.0(jiti@2.7.0) + functional-red-black-tree: 1.0.1 + globals: 17.7.0 + jsx-ast-utils-x: 0.1.0 + lodash.merge: 4.6.2 + minimatch: 10.2.5 + scslre: 0.3.0 + semver: 7.8.5 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + yaml: 2.9.0 + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 @@ -5974,9 +6171,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 figures@6.1.0: dependencies: @@ -5986,6 +6183,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-selector@2.1.2: + dependencies: + tslib: 2.8.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6042,6 +6243,8 @@ snapshots: function-bind@1.1.2: {} + functional-red-black-tree@1.0.1: {} + fuzzysort@3.1.0: {} gensync@1.0.0-beta.2: {} @@ -6097,6 +6300,8 @@ snapshots: dependencies: has-symbols: 1.1.0 + hash-wasm@4.12.0: {} + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -6128,7 +6333,7 @@ snapshots: human-signals@8.0.1: {} - iconv-lite@0.7.2: + iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 @@ -6141,11 +6346,10 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@3.2.0: + import-in-the-middle@3.3.0: dependencies: - acorn: 8.17.0 - acorn-import-attributes: 1.9.5(acorn@8.17.0) cjs-module-lexer: 2.2.0 + es-module-lexer: 2.3.0 module-details-from-path: 1.0.4 imurmurhash@0.1.4: {} @@ -6246,6 +6450,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsx-ast-utils-x@0.1.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -6319,6 +6525,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.merge@4.6.2: {} + log-symbols@6.0.0: dependencies: chalk: 5.6.2 @@ -6329,6 +6537,10 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -6537,27 +6749,27 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.135.0 '@oxc-parser/binding-win32-x64-msvc': 0.135.0 - oxc-resolver@11.22.0: + oxc-resolver@11.23.0: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.22.0 - '@oxc-resolver/binding-android-arm64': 11.22.0 - '@oxc-resolver/binding-darwin-arm64': 11.22.0 - '@oxc-resolver/binding-darwin-x64': 11.22.0 - '@oxc-resolver/binding-freebsd-x64': 11.22.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.22.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.22.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.22.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.22.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.22.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.22.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.22.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.22.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.22.0 - '@oxc-resolver/binding-linux-x64-musl': 11.22.0 - '@oxc-resolver/binding-openharmony-arm64': 11.22.0 - '@oxc-resolver/binding-wasm32-wasi': 11.22.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.22.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.22.0 + '@oxc-resolver/binding-android-arm-eabi': 11.23.0 + '@oxc-resolver/binding-android-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-x64': 11.23.0 + '@oxc-resolver/binding-freebsd-x64': 11.23.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.23.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.23.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-musl': 11.23.0 + '@oxc-resolver/binding-openharmony-arm64': 11.23.0 + '@oxc-resolver/binding-wasm32-wasi': 11.23.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.23.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.23.0 oxfmt@0.57.0: dependencies: @@ -6583,7 +6795,7 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.57.0 '@oxfmt/binding-win32-x64-msvc': 0.57.0 - oxlint-plugin-react-doctor@0.5.8: + oxlint-plugin-react-doctor@0.7.1: dependencies: '@typescript-eslint/types': 8.62.1 eslint-scope: 9.1.2 @@ -6698,7 +6910,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} pkce-challenge@5.0.1: {} @@ -6719,7 +6931,7 @@ snapshots: powershell-utils@0.1.0: {} - preact@10.29.3: {} + preact@10.29.4: {} prelude-ls@1.2.1: {} @@ -6734,6 +6946,12 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -6756,27 +6974,28 @@ snapshots: dependencies: bytes: 3.1.2 http-errors: 2.0.1 - iconv-lite: 0.7.2 + iconv-lite: 0.7.3 unpipe: 1.0.0 - react-doctor@0.5.8(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0): + react-doctor@0.7.1(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0): dependencies: '@babel/code-frame': 7.29.7 - '@sentry/node': 10.63.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)) + '@sentry/node': 10.63.0(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1)) agent-install: 0.0.5 conf: 15.1.0 confbox: 0.2.4 - deslop-js: 0.5.8 + deslop-js: 0.7.1 eslint-plugin-react-hooks: 7.1.1(eslint@10.6.0(jiti@2.7.0)) jiti: 2.7.0 magicast: 0.5.3 oxlint: 1.66.0(oxlint-tsgolint@0.24.0) - oxlint-plugin-react-doctor: 0.5.8 + oxlint-plugin-react-doctor: 0.7.1 prompts: 2.4.2 - typescript: 6.0.3 + typescript: 5.9.3 vscode-languageserver: 9.0.1 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + yaml: 2.9.0 transitivePeerDependencies: - '@opentelemetry/core' - '@opentelemetry/exporter-trace-otlp-http' @@ -6789,28 +7008,37 @@ snapshots: react: 19.2.7 scheduler: 0.27.0 - react-grab@0.1.47(react@19.2.7): + react-dropzone@15.0.0(react@19.2.7): + dependencies: + attr-accept: 2.2.5 + file-selector: 2.1.2 + prop-types: 15.8.1 + react: 19.2.7 + + react-grab@0.1.48(react@19.2.7): dependencies: - '@react-grab/cli': 0.1.47 - bippy: 0.5.42(react@19.2.7) + '@react-grab/cli': 0.1.48 + bippy: 0.5.43(react@19.2.7) optionalDependencies: react: 19.2.7 - react-scan@0.5.7(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)): + react-is@16.13.1: {} + + react-scan@0.5.7(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7 '@babel/types': 7.29.7 - '@preact/signals': 2.9.2(preact@10.29.3) + '@preact/signals': 2.9.2(preact@10.29.4) '@rollup/pluginutils': 5.4.0 - bippy: 0.5.42(react@19.2.7) + bippy: 0.5.43(react@19.2.7) commander: 14.0.3 picocolors: 1.1.1 - preact: 10.29.3 + preact: 10.29.4 prompts: 2.4.2 react: 19.2.7 - react-doctor: 0.5.8(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0) + react-doctor: 0.7.1(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))(eslint@10.6.0(jiti@2.7.0))(oxlint-tsgolint@0.24.0) react-dom: 19.2.7(react@19.2.7) - react-grab: 0.1.47(react@19.2.7) + react-grab: 0.1.48(react@19.2.7) optionalDependencies: unplugin: 3.3.0(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: @@ -6840,6 +7068,15 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + refa@0.12.1: + dependencies: + '@eslint-community/regexpp': 4.12.2 + + regexp-ast-analysis@0.7.1: + dependencies: + '@eslint-community/regexpp': 4.12.2 + refa: 0.12.1 + require-from-string@2.0.2: {} require-in-the-middle@8.0.1: @@ -6901,6 +7138,12 @@ snapshots: scheduler@0.27.0: {} + scslre@0.3.0: + dependencies: + '@eslint-community/regexpp': 4.12.2 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + semifies@1.0.0: {} semver@6.3.1: {} @@ -6940,7 +7183,7 @@ snapshots: setprototypeof@1.2.0: {} - shadcn@4.12.0(typescript@6.0.3): + shadcn@4.13.0(typescript@6.0.3): dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 @@ -7082,7 +7325,7 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 - systeminformation@5.31.11: {} + systeminformation@5.31.12: {} tagged-tag@1.0.0: {} @@ -7109,8 +7352,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinypool@2.1.0: {} @@ -7152,7 +7395,7 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@5.7.0: + type-fest@5.8.0: dependencies: tagged-tag: 1.0.0 @@ -7173,6 +7416,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.9.3: {} + typescript@6.0.3: {} uint8array-extras@1.5.0: {} @@ -7190,7 +7435,7 @@ snapshots: unplugin@3.3.0(rolldown@1.1.4)(vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: rolldown: 1.1.4 @@ -7223,7 +7468,7 @@ snapshots: vite@8.1.3(@types/node@25.9.4)(jiti@2.7.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 + picomatch: 4.0.5 postcss: 8.5.16 rolldown: 1.1.4 tinyglobby: 0.2.17 diff --git a/src/components/app/dashboard-events.tsx b/src/components/app/dashboard-events.tsx index 58f0726f..b47977a4 100644 --- a/src/components/app/dashboard-events.tsx +++ b/src/components/app/dashboard-events.tsx @@ -281,7 +281,7 @@ function EventThumbnail({ event, className }: Readonly) { interface EventActionsProps extends EventCallbacks { event: DashboardEvent; now: Date; - size?: ComponentProps["size"]; + size?: NonNullable["size"]>; } function EventActions({ event, now, onRsvp, onCheckin, size = "sm" }: Readonly) { diff --git a/src/components/app/media-lightbox.tsx b/src/components/app/media-lightbox.tsx new file mode 100644 index 00000000..a7e0b000 --- /dev/null +++ b/src/components/app/media-lightbox.tsx @@ -0,0 +1,113 @@ +import { ArrowLeft, ArrowRight, ExternalLink, Maximize, X } from "lucide-react"; +import { + type KeyboardEvent, + type MouseEvent, + type RefCallback, + useCallback, + useState, +} from "react"; + +import { Button } from "@/components/ui/button"; +import { type MediaRecord } from "@/routes/dashboard/projects"; + +interface MediaLightboxProps { + items: MediaRecord[]; + index: number | undefined; + srcFor: (item: MediaRecord) => string; + onIndexChange: (index: number) => void; + onClose: () => void; +} + +const LIGHTBOX_BUTTON_CLASS = "size-9 rounded-full text-white hover:bg-white/15"; + +export function MediaLightbox({ + items, + index, + srcFor, + onIndexChange, + onClose, +}: MediaLightboxProps) { + const current = index === undefined ? undefined : items[index]; + + // This is actually correct + // oxlint-disable-next-line no-null + const [container, setContainer] = useState(null); + + const showPrev = useCallback(() => { + if (index !== undefined) onIndexChange((index - 1 + items.length) % items.length); + }, [index, items.length, onIndexChange]); + const showNext = useCallback(() => { + if (index !== undefined) onIndexChange((index + 1) % items.length); + }, [index, items.length, onIndexChange]); + const openOriginal = useCallback(() => { + if (current) globalThis.open(current.url, "_blank", "noopener,noreferrer"); + }, [current]); + const toggleFullscreen = useCallback(() => { + if (document.fullscreenElement) void document.exitFullscreen(); + else void container?.requestFullscreen(); + }, [container]); + const focusBackdrop = useCallback>((node) => { + node?.focus(); + }, []); + const keepFocus = useCallback((event: MouseEvent) => { + event.preventDefault(); + }, []); + + const onLightboxKey = useCallback( + (event: KeyboardEvent) => { + if (event.key === "Escape") { + event.stopPropagation(); + onClose(); + } else if (event.key === "ArrowLeft") showPrev(); + else if (event.key === "ArrowRight") showNext(); + }, + [onClose, showPrev, showNext], + ); + + const controls = [ + { title: "Close", onClick: onClose, icon: }, + { title: "Open original", onClick: openOriginal, icon: }, + { title: "Fullscreen", onClick: toggleFullscreen, icon: }, + { title: "Previous", onClick: showPrev, icon: }, + { title: "Next", onClick: showNext, icon: }, + ]; + + return ( + current && ( +
+ + ))} +
+ + ) + ); +} diff --git a/src/components/ui/data-table.tsx b/src/components/ui/data-table.tsx new file mode 100644 index 00000000..4a5bfcb8 --- /dev/null +++ b/src/components/ui/data-table.tsx @@ -0,0 +1,118 @@ +import { + type ColumnDef, + flexRender, + getCoreRowModel, + getSortedRowModel, + type Row, + type RowData, + type SortingState, + type TableMeta, + useReactTable, +} from "@tanstack/react-table"; +import { memo, useState } from "react"; + +// Per-column class hook so a table can drive responsive column visibility +// (container-query classes like `hidden @lg:table-cell`) without the generic +// DataTable having to know its columns. Applied to both the head and body cell. +declare module "@tanstack/react-table" { + interface ColumnMeta { + className?: string; + } +} + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; + +interface DataTableProps { + columns: ColumnDef[]; + data: TData[]; + meta?: TableMeta; +} + +// TanStack's `flexRender(cell, cell.getContext())` hands every cell a fresh context +// object each render (table/column/row/getValue/renderValue), so the React Compiler's +// reference-equality memoization never bails a cell out — one table render re-renders +// all cells (and their Base UI dropdown menus). This boundary bails on the *semantic* +// keys instead: `row.original` is referentially stable for unchanged rows (React Query +// structural sharing), and `meta` only changes when the shared invite list does, so a +// mutation re-renders just the row(s) whose data actually changed. +function DataTableRowImpl({ + row, +}: Readonly<{ row: Row; meta: TableMeta | undefined }>) { + return ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + ); +} + +const DataTableRow = memo( + DataTableRowImpl, + (prev, next) => prev.row.original === next.row.original && prev.meta === next.meta, +) as typeof DataTableRowImpl; + +export function DataTable({ + columns, + data, + meta, +}: Readonly>) { + const [sorting, setSorting] = useState([]); + + const table = useReactTable({ + data, + columns, + meta, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + onSortingChange: setSorting, + state: { sorting }, + }); + + return ( + // `@container` so columns hide/show against the card's own width (which the + // dashboard sidebar shrinks), not the viewport — a viewport `md:` breakpoint + // would keep columns while the open sidebar squeezes the table into a scroll. +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + {header.isPlaceholder + ? undefined + : flexRender(header.column.columnDef.header, header.getContext())} + + ))} + + ))} + + + {table.getRowModel().rows.length > 0 ? ( + table + .getRowModel() + .rows.map((row) => ( + + )) + ) : ( + + + No results. + + + )} + +
+
+ ); +} \ No newline at end of file diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx new file mode 100644 index 00000000..74da65c3 --- /dev/null +++ b/src/components/ui/label.tsx @@ -0,0 +1,20 @@ +"use client" + +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Label({ className, ...props }: React.ComponentProps<"label">) { + return ( +