From 3f13447e1fb29cb87a4beacdf454522dfea9ea3d Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Thu, 21 Mar 2024 02:00:23 +0800 Subject: [PATCH] refactor: new layout and new router --- pnpm-lock.yaml | 518 ++++++++++++++--------- src/client/App.tsx | 41 +- src/client/components/CommonList.tsx | 84 ++++ src/client/components/ui/badge.tsx | 36 ++ src/client/components/ui/scroll-area.tsx | 46 ++ src/client/components/ui/tabs.tsx | 53 +++ src/client/package.json | 7 +- src/client/pages/LayoutV2.tsx | 22 +- src/client/routeTree.gen.ts | 83 ++++ src/client/routes/__root.tsx | 20 + src/client/routes/index.tsx | 15 + src/client/routes/login.tsx | 101 +++++ src/client/routes/register.tsx | 71 ++++ src/client/routes/website.tsx | 71 ++++ src/client/routes/website/$websiteId.tsx | 13 + src/client/tailwind.config.ts | 3 +- src/client/utils/route.ts | 15 + src/client/vite.config.ts | 9 +- 18 files changed, 976 insertions(+), 232 deletions(-) create mode 100644 src/client/components/CommonList.tsx create mode 100644 src/client/components/ui/badge.tsx create mode 100644 src/client/components/ui/scroll-area.tsx create mode 100644 src/client/components/ui/tabs.tsx create mode 100644 src/client/routeTree.gen.ts create mode 100644 src/client/routes/__root.tsx create mode 100644 src/client/routes/index.tsx create mode 100644 src/client/routes/login.tsx create mode 100644 src/client/routes/register.tsx create mode 100644 src/client/routes/website.tsx create mode 100644 src/client/routes/website/$websiteId.tsx create mode 100644 src/client/utils/route.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07c8bb0..cb2041d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,9 @@ importers: '@radix-ui/react-menubar': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^2.0.0 version: 2.0.0(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) @@ -108,18 +111,27 @@ importers: '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.7 version: 1.0.7(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': specifier: 4.33.0 version: 4.33.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-router': + specifier: ^1.20.5 + version: 1.20.5(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-table': specifier: ^8.13.2 version: 8.13.2(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-virtual': specifier: ^3.0.2 version: 3.0.2(react-dom@18.2.0)(react@18.2.0) + '@tanstack/router-devtools': + specifier: ^1.20.5 + version: 1.20.5(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0) '@tianji/shared': specifier: workspace:^ version: link:../shared @@ -238,6 +250,9 @@ importers: '@i18next-toolkit/cli': specifier: ^1.1.0 version: 1.1.0(typescript@5.2.2) + '@tanstack/router-vite-plugin': + specifier: ^1.20.5 + version: 1.20.5 '@types/leaflet': specifier: ^1.9.8 version: 1.9.8 @@ -278,11 +293,11 @@ importers: specifier: ^0.8.0 version: 0.8.0(typescript@5.2.2) tailwindcss: - specifier: ^3.3.5 - version: 3.3.5(ts-node@10.9.1) + specifier: ^3.4.1 + version: 3.4.1(ts-node@10.9.1) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.3.5) + version: 1.0.7(tailwindcss@3.4.1) vite: specifier: ^5.0.12 version: 5.0.12(@types/node@18.17.12)(less@4.2.0) @@ -745,8 +760,8 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@ampproject/remapping@2.3.0: @@ -1868,7 +1883,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.21 jsesc: 2.5.2 dev: false @@ -4696,9 +4711,9 @@ packages: resolution: {integrity: sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==} engines: {node: '>=16.14'} dependencies: - cssnano-preset-advanced: 5.3.10(postcss@8.4.33) - postcss: 8.4.33 - postcss-sort-media-queries: 4.4.1(postcss@8.4.33) + cssnano-preset-advanced: 5.3.10(postcss@8.4.35) + postcss: 8.4.35 + postcss-sort-media-queries: 4.4.1(postcss@8.4.35) tslib: 2.6.2 dev: false @@ -5349,7 +5364,7 @@ packages: infima: 0.2.0-alpha.43 lodash: 4.17.21 nprogress: 0.2.0 - postcss: 8.4.33 + postcss: 8.4.35 prism-react-renderer: 1.3.5(react@17.0.2) prismjs: 1.29.0 react: 17.0.2 @@ -6332,14 +6347,6 @@ packages: '@types/yargs': 17.0.32 chalk: 4.1.2 - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.21 - /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -6352,10 +6359,6 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} @@ -7590,6 +7593,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: @@ -7667,6 +7699,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.21)(react@18.2.0) + '@types/react': 18.2.21 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: @@ -8386,6 +8446,11 @@ packages: defer-to-connect: 2.0.1 dev: true + /@tanstack/history@1.15.13: + resolution: {integrity: sha512-ToaeMtK5S4YaxCywAlYexc7KPFN0esjyTZ4vXzJhXEWAkro9iHgh7m/4ozPJb7oTo65WkHWX0W9GjcZbInSD8w==} + engines: {node: '>=12'} + dev: false + /@tanstack/query-core@4.33.0: resolution: {integrity: sha512-qYu73ptvnzRh6se2nyBIDHGBQvPY1XXl3yR769B7B6mIDD7s+EZhdlWHQ67JI6UOTFRaI7wupnTnwJ3gE0Mr/g==} dev: false @@ -8408,6 +8473,33 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false + /@tanstack/react-router@1.20.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rWXgpGDXlVSLupIeYF5UCvW7TEpjWwPJiMOV6FxjxKHEV9gGDrlMg9PlJOAzuklgkmHn5daBjFMY/n3pjI89gw==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + '@tanstack/history': 1.15.13 + '@tanstack/react-store': 0.2.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + dev: false + + /@tanstack/react-store@0.2.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-tEbMCQjbeVw9KOP/202LfqZMSNAVi6zYkkp1kBom8nFuMx/965Hzes3+6G6b/comCwVxoJU8Gg9IrcF8yRPthw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + '@tanstack/store': 0.1.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /@tanstack/react-table@8.13.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-b6mR3mYkjRtJ443QZh9sc7CvGTce81J35F/XMr0OoWbx0KIM7TTTdyNP2XKObvkLpYnLpCrYDwI3CZnLezWvpg==} engines: {node: '>=12'} @@ -8431,6 +8523,42 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@tanstack/router-devtools@1.20.5(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-8RQWOMLw6IscPc3uoGeDAqRgOSZvbIEP5SYECC7IcyxKqa6IItuhsmybHxmAjIaWgCv2glYc8plbCCUMzipJbQ==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + '@tanstack/react-router': 1.20.5(react-dom@18.2.0)(react@18.2.0) + clsx: 2.1.0 + date-fns: 2.30.0 + goober: 2.1.14(csstype@3.1.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - csstype + dev: false + + /@tanstack/router-generator@1.20.5: + resolution: {integrity: sha512-rE0C4dvDMx/lT1mZghORQGCy1GCqwWcTBrO3ZuEHnswzVxBwKMZvFOw/7h5IZ3DkC2rkGXZaRM1JccgwvQDnvA==} + engines: {node: '>=12'} + dependencies: + prettier: 3.2.5 + zod: 3.22.4 + dev: true + + /@tanstack/router-vite-plugin@1.20.5: + resolution: {integrity: sha512-Opdw3y8MgaSI6KdUcI4k4PLYHhuB9Pn4RDxvLR0oVhzE9/n+bcK/aAz7U460cGR4ZR12cwcoZ0Dq56y8COUJQQ==} + engines: {node: '>=12'} + dependencies: + '@tanstack/router-generator': 1.20.5 + dev: true + + /@tanstack/store@0.1.3: + resolution: {integrity: sha512-GnolmC8Fr4mvsHE1fGQmR3Nm0eBO3KnZjDU0a+P3TeQNM/dDscFGxtA7p31NplQNW3KwBw4t1RVFmz0VeKLxcw==} + dev: false + /@tanstack/table-core@8.13.2: resolution: {integrity: sha512-/2saD1lWBUV6/uNAwrsg2tw58uvMJ07bO2F1IWMxjFRkJiXKQRuc3Oq2aufeobD3873+4oIM/DRySIw7+QsPPw==} engines: {node: '>=12'} @@ -10953,7 +11081,6 @@ packages: picocolors: 1.0.0 postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /autoprefixer@10.4.18(postcss@8.4.35): resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} @@ -11713,7 +11840,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -12632,6 +12758,7 @@ packages: postcss: ^8.0.9 dependencies: postcss: 8.4.33 + dev: false /css-declaration-sorter@6.4.1(postcss@8.4.35): resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} @@ -12640,7 +12767,6 @@ packages: postcss: ^8.0.9 dependencies: postcss: 8.4.35 - dev: true /css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} @@ -12677,12 +12803,12 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.33) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.33) - postcss-modules-scope: 3.1.0(postcss@8.4.33) - postcss-modules-values: 4.0.0(postcss@8.4.33) + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.35) + postcss-modules-scope: 3.1.0(postcss@8.4.35) + postcss-modules-values: 4.0.0(postcss@8.4.35) postcss-value-parser: 4.2.0 semver: 7.6.0 webpack: 5.89.0 @@ -12714,9 +12840,9 @@ packages: optional: true dependencies: clean-css: 5.3.3 - cssnano: 5.1.15(postcss@8.4.33) + cssnano: 5.1.15(postcss@8.4.35) jest-worker: 29.7.0 - postcss: 8.4.33 + postcss: 8.4.35 schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 @@ -12749,9 +12875,9 @@ packages: optional: true dependencies: clean-css: 5.3.3 - cssnano: 5.1.15(postcss@8.4.33) + cssnano: 5.1.15(postcss@8.4.35) jest-worker: 29.7.0 - postcss: 8.4.33 + postcss: 8.4.35 schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 @@ -12800,21 +12926,6 @@ packages: engines: {node: '>=4'} hasBin: true - /cssnano-preset-advanced@5.3.10(postcss@8.4.33): - resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - autoprefixer: 10.4.16(postcss@8.4.33) - cssnano-preset-default: 5.2.14(postcss@8.4.33) - postcss: 8.4.33 - postcss-discard-unused: 5.1.0(postcss@8.4.33) - postcss-merge-idents: 5.1.1(postcss@8.4.33) - postcss-reduce-idents: 5.2.0(postcss@8.4.33) - postcss-zindex: 5.1.0(postcss@8.4.33) - dev: false - /cssnano-preset-advanced@5.3.10(postcss@8.4.35): resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} engines: {node: ^10 || ^12 || >=14.0} @@ -12828,7 +12939,6 @@ packages: postcss-merge-idents: 5.1.1(postcss@8.4.35) postcss-reduce-idents: 5.2.0(postcss@8.4.35) postcss-zindex: 5.1.0(postcss@8.4.35) - dev: true /cssnano-preset-default@5.2.14(postcss@8.4.33): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -12866,6 +12976,7 @@ packages: postcss-reduce-transforms: 5.1.0(postcss@8.4.33) postcss-svgo: 5.1.0(postcss@8.4.33) postcss-unique-selectors: 5.1.1(postcss@8.4.33) + dev: false /cssnano-preset-default@5.2.14(postcss@8.4.35): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -12903,7 +13014,6 @@ packages: postcss-reduce-transforms: 5.1.0(postcss@8.4.35) postcss-svgo: 5.1.0(postcss@8.4.35) postcss-unique-selectors: 5.1.1(postcss@8.4.35) - dev: true /cssnano-utils@3.1.0(postcss@8.4.33): resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} @@ -12912,6 +13022,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /cssnano-utils@3.1.0(postcss@8.4.35): resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} @@ -12920,7 +13031,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /cssnano@5.1.15(postcss@8.4.33): resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} @@ -12932,6 +13042,7 @@ packages: lilconfig: 2.1.0 postcss: 8.4.33 yaml: 1.10.2 + dev: false /cssnano@5.1.15(postcss@8.4.35): resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} @@ -12943,7 +13054,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.35 yaml: 1.10.2 - dev: true /csso@4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} @@ -13099,7 +13209,6 @@ packages: engines: {node: '>=0.11'} dependencies: '@babel/runtime': 7.24.0 - dev: true /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} @@ -14636,7 +14745,7 @@ packages: '@babel/code-frame': 7.23.5 '@types/json-schema': 7.0.15 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.6.0 cosmiconfig: 6.0.0 deepmerge: 4.3.1 fs-extra: 9.1.0 @@ -14667,7 +14776,7 @@ packages: '@babel/code-frame': 7.23.5 '@types/json-schema': 7.0.15 chalk: 4.1.2 - chokidar: 3.5.3 + chokidar: 3.6.0 cosmiconfig: 6.0.0 deepmerge: 4.3.1 fs-extra: 9.1.0 @@ -15148,6 +15257,14 @@ packages: unicorn-magic: 0.1.0 dev: true + /goober@2.1.14(csstype@3.1.3): + resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} + peerDependencies: + csstype: ^3.0.10 + dependencies: + csstype: 3.1.3 + dev: false + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -15550,7 +15667,7 @@ packages: '@babel/runtime': 7.24.0 loose-envify: 1.4.0 resolve-pathname: 3.0.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 value-equal: 1.0.1 @@ -15888,15 +16005,6 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.33): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.33 - dev: false - /icss-utils@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -15904,7 +16012,6 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.35 - dev: true /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -19475,8 +19582,9 @@ packages: postcss: ^8.2.2 dependencies: postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 + dev: false /postcss-calc@8.2.4(postcss@8.4.35): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} @@ -19484,9 +19592,8 @@ packages: postcss: ^8.2.2 dependencies: postcss: 8.4.35 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 - dev: true /postcss-colormin@5.3.1(postcss@8.4.33): resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} @@ -19499,6 +19606,7 @@ packages: colord: 2.9.3 postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-colormin@5.3.1(postcss@8.4.35): resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} @@ -19511,7 +19619,6 @@ packages: colord: 2.9.3 postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-convert-values@5.1.3(postcss@8.4.33): resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} @@ -19522,6 +19629,7 @@ packages: browserslist: 4.23.0 postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-convert-values@5.1.3(postcss@8.4.35): resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} @@ -19532,7 +19640,6 @@ packages: browserslist: 4.23.0 postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-discard-comments@5.1.2(postcss@8.4.33): resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} @@ -19541,6 +19648,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /postcss-discard-comments@5.1.2(postcss@8.4.35): resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} @@ -19549,7 +19657,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /postcss-discard-duplicates@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} @@ -19558,6 +19665,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /postcss-discard-duplicates@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} @@ -19566,7 +19674,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /postcss-discard-empty@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} @@ -19575,6 +19682,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /postcss-discard-empty@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} @@ -19583,7 +19691,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /postcss-discard-overridden@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} @@ -19592,6 +19699,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /postcss-discard-overridden@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} @@ -19600,17 +19708,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true - - /postcss-discard-unused@5.1.0(postcss@8.4.33): - resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.0.13 - dev: false /postcss-discard-unused@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} @@ -19619,8 +19716,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - postcss-selector-parser: 6.0.13 - dev: true + postcss-selector-parser: 6.0.15 /postcss-import@15.1.0(postcss@8.4.33): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -19634,6 +19730,18 @@ packages: resolve: 1.22.8 dev: true + /postcss-import@15.1.0(postcss@8.4.35): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + /postcss-js@4.0.1(postcss@8.4.33): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -19644,6 +19752,16 @@ packages: postcss: 8.4.33 dev: true + /postcss-js@4.0.1(postcss@8.4.35): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.35 + dev: true + /postcss-load-config@4.0.1(postcss@8.4.33)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} @@ -19658,6 +19776,24 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.33 + ts-node: 10.9.1(@types/node@18.17.12)(typescript@5.3.3) + yaml: 2.3.2 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.35)(ts-node@10.9.1): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.35 ts-node: 10.9.1(@types/node@18.17.12)(typescript@5.2.2) yaml: 2.3.2 dev: true @@ -19694,17 +19830,6 @@ packages: - typescript dev: true - /postcss-merge-idents@5.1.1(postcss@8.4.33): - resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - dev: false - /postcss-merge-idents@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} engines: {node: ^10 || ^12 || >=14.0} @@ -19714,7 +19839,6 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-merge-longhand@5.1.7(postcss@8.4.33): resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} @@ -19725,6 +19849,7 @@ packages: postcss: 8.4.33 postcss-value-parser: 4.2.0 stylehacks: 5.1.1(postcss@8.4.33) + dev: false /postcss-merge-longhand@5.1.7(postcss@8.4.35): resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} @@ -19735,7 +19860,6 @@ packages: postcss: 8.4.35 postcss-value-parser: 4.2.0 stylehacks: 5.1.1(postcss@8.4.35) - dev: true /postcss-merge-rules@5.1.4(postcss@8.4.33): resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} @@ -19747,7 +19871,8 @@ packages: caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.33) postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 + dev: false /postcss-merge-rules@5.1.4(postcss@8.4.35): resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} @@ -19759,8 +19884,7 @@ packages: caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 - postcss-selector-parser: 6.0.13 - dev: true + postcss-selector-parser: 6.0.15 /postcss-minify-font-values@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} @@ -19770,6 +19894,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-minify-font-values@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} @@ -19779,7 +19904,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-minify-gradients@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} @@ -19791,6 +19915,7 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.33) postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-minify-gradients@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} @@ -19802,7 +19927,6 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-minify-params@5.1.4(postcss@8.4.33): resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} @@ -19814,6 +19938,7 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.33) postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-minify-params@5.1.4(postcss@8.4.35): resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} @@ -19825,7 +19950,6 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-minify-selectors@5.2.1(postcss@8.4.33): resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} @@ -19834,7 +19958,8 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 + dev: false /postcss-minify-selectors@5.2.1(postcss@8.4.35): resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} @@ -19843,17 +19968,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-modules-extract-imports@3.0.0(postcss@8.4.33): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.33 - dev: false + postcss-selector-parser: 6.0.15 /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} @@ -19862,17 +19977,16 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.35 - dev: true - /postcss-modules-local-by-default@4.0.3(postcss@8.4.33): + /postcss-modules-local-by-default@4.0.3(postcss@8.4.35): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 dev: false @@ -19888,14 +20002,14 @@ packages: postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.0(postcss@8.4.33): + /postcss-modules-scope@3.1.0(postcss@8.4.35): resolution: {integrity: sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 dev: false /postcss-modules-scope@3.1.1(postcss@8.4.35): @@ -19908,16 +20022,6 @@ packages: postcss-selector-parser: 6.0.15 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.33): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.33) - postcss: 8.4.33 - dev: false - /postcss-modules-values@4.0.0(postcss@8.4.35): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} @@ -19926,7 +20030,6 @@ packages: dependencies: icss-utils: 5.1.0(postcss@8.4.35) postcss: 8.4.35 - dev: true /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -19935,7 +20038,17 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.35): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 dev: true /postcss-normalize-charset@5.1.0(postcss@8.4.33): @@ -19945,6 +20058,7 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 + dev: false /postcss-normalize-charset@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} @@ -19953,7 +20067,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /postcss-normalize-display-values@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} @@ -19963,6 +20076,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-display-values@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} @@ -19972,7 +20086,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-positions@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} @@ -19982,6 +20095,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-positions@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} @@ -19991,7 +20105,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-repeat-style@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} @@ -20001,6 +20114,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-repeat-style@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} @@ -20010,7 +20124,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-string@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} @@ -20020,6 +20133,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-string@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} @@ -20029,7 +20143,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-timing-functions@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} @@ -20039,6 +20152,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-timing-functions@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} @@ -20048,7 +20162,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-unicode@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} @@ -20059,6 +20172,7 @@ packages: browserslist: 4.23.0 postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-unicode@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} @@ -20069,7 +20183,6 @@ packages: browserslist: 4.23.0 postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-url@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} @@ -20080,6 +20193,7 @@ packages: normalize-url: 6.1.0 postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-url@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} @@ -20090,7 +20204,6 @@ packages: normalize-url: 6.1.0 postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-normalize-whitespace@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} @@ -20100,6 +20213,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-normalize-whitespace@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} @@ -20109,7 +20223,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-ordered-values@5.1.3(postcss@8.4.33): resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} @@ -20120,6 +20233,7 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.33) postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-ordered-values@5.1.3(postcss@8.4.35): resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} @@ -20130,17 +20244,6 @@ packages: cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true - - /postcss-reduce-idents@5.2.0(postcss@8.4.33): - resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.33 - postcss-value-parser: 4.2.0 - dev: false /postcss-reduce-idents@5.2.0(postcss@8.4.35): resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} @@ -20150,7 +20253,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-reduce-initial@5.1.2(postcss@8.4.33): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} @@ -20161,6 +20263,7 @@ packages: browserslist: 4.23.0 caniuse-api: 3.0.0 postcss: 8.4.33 + dev: false /postcss-reduce-initial@5.1.2(postcss@8.4.35): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} @@ -20171,7 +20274,6 @@ packages: browserslist: 4.23.0 caniuse-api: 3.0.0 postcss: 8.4.35 - dev: true /postcss-reduce-transforms@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} @@ -20181,6 +20283,7 @@ packages: dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 + dev: false /postcss-reduce-transforms@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} @@ -20190,7 +20293,6 @@ packages: dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - dev: true /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} @@ -20198,6 +20300,7 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: true /postcss-selector-parser@6.0.15: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} @@ -20205,17 +20308,6 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - - /postcss-sort-media-queries@4.4.1(postcss@8.4.33): - resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.4.16 - dependencies: - postcss: 8.4.33 - sort-css-media-queries: 2.1.0 - dev: false /postcss-sort-media-queries@4.4.1(postcss@8.4.35): resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} @@ -20225,7 +20317,6 @@ packages: dependencies: postcss: 8.4.35 sort-css-media-queries: 2.1.0 - dev: true /postcss-svgo@5.1.0(postcss@8.4.33): resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} @@ -20236,6 +20327,7 @@ packages: postcss: 8.4.33 postcss-value-parser: 4.2.0 svgo: 2.8.0 + dev: false /postcss-svgo@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} @@ -20246,7 +20338,6 @@ packages: postcss: 8.4.35 postcss-value-parser: 4.2.0 svgo: 2.8.0 - dev: true /postcss-unique-selectors@5.1.1(postcss@8.4.33): resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} @@ -20255,7 +20346,8 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 + dev: false /postcss-unique-selectors@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} @@ -20264,21 +20356,11 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - postcss-selector-parser: 6.0.13 - dev: true + postcss-selector-parser: 6.0.15 /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss-zindex@5.1.0(postcss@8.4.33): - resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.33 - dev: false - /postcss-zindex@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} engines: {node: ^10 || ^12 || >=14.0} @@ -20286,7 +20368,6 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.35 - dev: true /postcss@7.0.39: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} @@ -20320,7 +20401,6 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /postman-code-generators@1.8.0: resolution: {integrity: sha512-o+5dBxHdoMrL6tO6EV1APvF60HpA8+NmTua6sKciP61Op0drbIuBNScdGc1/jdbiSn8StCpJQtMg21dkJHHC7w==} @@ -22434,7 +22514,7 @@ packages: prop-types: 15.8.1 react: 17.0.2 react-router: 5.3.4(react@17.0.2) - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 /react-router-dom@6.15.0(react-dom@18.2.0)(react@18.2.0): @@ -22463,7 +22543,7 @@ packages: prop-types: 15.8.1 react: 17.0.2 react-is: 16.13.1 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 tiny-warning: 1.0.3 /react-router@6.15.0(react@18.2.0): @@ -23247,7 +23327,7 @@ packages: dependencies: find-up: 5.0.0 picocolors: 1.0.0 - postcss: 8.4.33 + postcss: 8.4.35 strip-json-comments: 3.1.1 dev: false @@ -24283,7 +24363,8 @@ packages: dependencies: browserslist: 4.23.0 postcss: 8.4.33 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 + dev: false /stylehacks@5.1.1(postcss@8.4.35): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} @@ -24293,8 +24374,7 @@ packages: dependencies: browserslist: 4.23.0 postcss: 8.4.35 - postcss-selector-parser: 6.0.13 - dev: true + postcss-selector-parser: 6.0.15 /stylis@4.3.0: resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} @@ -24305,7 +24385,7 @@ packages: engines: {node: '>=8'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -24445,12 +24525,12 @@ packages: '@babel/runtime': 7.24.0 dev: false - /tailwindcss-animate@1.0.7(tailwindcss@3.3.5): + /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.3.5(ts-node@10.9.1) + tailwindcss: 3.4.1(ts-node@10.9.1) dev: true /tailwindcss@3.3.5(ts-node@10.9.1): @@ -24484,6 +24564,37 @@ packages: - ts-node dev: true + /tailwindcss@3.4.1(ts-node@10.9.1): + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.1(postcss@8.4.35)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.35) + postcss-selector-parser: 6.0.15 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -24744,12 +24855,8 @@ packages: resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} dev: false - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: true /tiny-lru@11.2.5: resolution: {integrity: sha512-JpqM0K33lG6iQGKiigcwuURAKZlq6rHXfrgeL4/I8/REoyJTGU+tEMszvT/oTRVHG2OiylhGDjqPp1jWMlr3bw==} @@ -25050,7 +25157,6 @@ packages: typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /ts-pattern@4.3.0: resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} @@ -26230,7 +26336,7 @@ packages: '@types/ws': 8.5.10 ansi-html-community: 0.0.8 bonjour-service: 1.2.1 - chokidar: 3.5.3 + chokidar: 3.6.0 colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 @@ -26281,7 +26387,7 @@ packages: '@types/ws': 8.5.10 ansi-html-community: 0.0.8 bonjour-service: 1.2.1 - chokidar: 3.5.3 + chokidar: 3.6.0 colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 diff --git a/src/client/App.tsx b/src/client/App.tsx index 3f5f2ab..d76be2c 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -21,6 +21,22 @@ import { StatusPage } from './pages/Status'; import { TelemetryPage } from './pages/Telemetry'; import { LayoutV2 } from './pages/LayoutV2'; import { isDev } from './utils/env'; +import { RouterProvider, createRouter } from '@tanstack/react-router'; +import { routeTree } from './routeTree.gen'; + +const router = createRouter({ + routeTree, + context: { + userInfo: undefined, + }, +}); + +// Register the router instance for type safety +declare module '@tanstack/react-router' { + interface Register { + router: typeof router; + } +} export const AppRoutes: React.FC = React.memo(() => { const { info: userInfo } = useUserStore(); @@ -64,21 +80,26 @@ export const App: React.FC = React.memo(() => { const colorScheme = useColorSchema(); const algorithm = colorScheme === 'dark' ? theme.darkAlgorithm : theme.defaultAlgorithm; + const { info: userInfo } = useUserStore(); return (
- - rootRef.current!} - > - - - - - + rootRef.current!} + > + + {isDev ? ( + + ) : ( + + + + )} + +
diff --git a/src/client/components/CommonList.tsx b/src/client/components/CommonList.tsx new file mode 100644 index 0000000..8033123 --- /dev/null +++ b/src/client/components/CommonList.tsx @@ -0,0 +1,84 @@ +import React, { ComponentProps } from 'react'; +import { ScrollArea } from './ui/scroll-area'; +import { cn } from '@/utils/style'; +import { Badge } from './ui/badge'; +import { useNavigate, useRouterState } from '@tanstack/react-router'; + +export interface CommonListItem { + id: string; + title: string; + content: React.ReactNode; + tags: string[]; + href: string; +} + +interface CommonListProps { + items: CommonListItem[]; +} +export const CommonList: React.FC = React.memo((props) => { + const { location } = useRouterState(); + const navigate = useNavigate(); + + return ( + +
+ {props.items.map((item) => { + const isSelected = item.href === location.pathname; + + return ( + + ); + })} +
+
+ ); +}); +CommonList.displayName = 'CommonList'; + +/** + * TODO + */ +function getBadgeVariantFromLabel( + label: string +): ComponentProps['variant'] { + if (['work'].includes(label.toLowerCase())) { + return 'default'; + } + + if (['personal'].includes(label.toLowerCase())) { + return 'outline'; + } + + return 'secondary'; +} diff --git a/src/client/components/ui/badge.tsx b/src/client/components/ui/badge.tsx new file mode 100644 index 0000000..f0e79ed --- /dev/null +++ b/src/client/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/utils/style" + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/src/client/components/ui/scroll-area.tsx b/src/client/components/ui/scroll-area.tsx new file mode 100644 index 0000000..77eae04 --- /dev/null +++ b/src/client/components/ui/scroll-area.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" + +import { cn } from "@/utils/style" + +const ScrollArea = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + {children} + + + + +)) +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName + +const ScrollBar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName + +export { ScrollArea, ScrollBar } diff --git a/src/client/components/ui/tabs.tsx b/src/client/components/ui/tabs.tsx new file mode 100644 index 0000000..5248a62 --- /dev/null +++ b/src/client/components/ui/tabs.tsx @@ -0,0 +1,53 @@ +import * as React from 'react'; +import * as TabsPrimitive from '@radix-ui/react-tabs'; + +import { cn } from '@/utils/style'; + +const Tabs = TabsPrimitive.Root; + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsList.displayName = TabsPrimitive.List.displayName; + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsContent.displayName = TabsPrimitive.Content.displayName; + +export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/src/client/package.json b/src/client/package.json index dda6457..5ca3681 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -27,13 +27,17 @@ "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-menubar": "^1.0.4", + "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-query": "4.33.0", + "@tanstack/react-router": "^1.20.5", "@tanstack/react-table": "^8.13.2", "@tanstack/react-virtual": "^3.0.2", + "@tanstack/router-devtools": "^1.20.5", "@tianji/shared": "workspace:^", "@trpc/client": "^10.45.0", "@trpc/react-query": "^10.45.0", @@ -75,6 +79,7 @@ }, "devDependencies": { "@i18next-toolkit/cli": "^1.1.0", + "@tanstack/router-vite-plugin": "^1.20.5", "@types/leaflet": "^1.9.8", "@types/loadable__component": "^5.13.8", "@types/lodash-es": "^4.17.12", @@ -88,7 +93,7 @@ "less": "^4.2.0", "postcss": "^8.4.31", "shadcn-ui": "^0.8.0", - "tailwindcss": "^3.3.5", + "tailwindcss": "^3.4.1", "tailwindcss-animate": "^1.0.7", "vite": "^5.0.12", "vitest": "^1.2.1" diff --git a/src/client/pages/LayoutV2.tsx b/src/client/pages/LayoutV2.tsx index 2b86e6e..7083024 100644 --- a/src/client/pages/LayoutV2.tsx +++ b/src/client/pages/LayoutV2.tsx @@ -1,19 +1,9 @@ import * as React from 'react'; import { - LuAlertCircle, - LuArchive, LuAreaChart, - LuFile, LuFilePieChart, - LuInbox, - LuMessagesSquare, LuMonitorDot, - LuMoreVertical, - LuSend, LuServer, - LuShoppingCart, - LuTrash2, - LuUsers2, LuWifi, } from 'react-icons/lu'; import { TooltipProvider } from '@/components/ui/tooltip'; @@ -33,10 +23,14 @@ import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { useUserInfo } from '@/store/user'; import { Button } from '@/components/ui/button'; import { UserConfig } from './Layout/UserConfig'; +import { Outlet } from '@tanstack/react-router'; +import { CommonList, CommonListItem } from '@/components/CommonList'; const defaultLayout: [number, number, number] = [265, 440, 655]; -export const LayoutV2: React.FC = React.memo(() => { +export const LayoutV2: React.FC<{ + list: React.ReactNode; +}> = React.memo((props) => { const [layout = defaultLayout, setLayout] = useLocalStorageState( 'react-resizable-panels:layout', { defaultValue: defaultLayout } @@ -127,11 +121,13 @@ export const LayoutV2: React.FC = React.memo(() => { -
1
+
{props.list}
-
2
+
+ +
diff --git a/src/client/routeTree.gen.ts b/src/client/routeTree.gen.ts new file mode 100644 index 0000000..578bb95 --- /dev/null +++ b/src/client/routeTree.gen.ts @@ -0,0 +1,83 @@ +/* prettier-ignore-start */ + +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file is auto-generated by TanStack Router + +// Import Routes + +import { Route as rootRoute } from './routes/__root' +import { Route as WebsiteImport } from './routes/website' +import { Route as RegisterImport } from './routes/register' +import { Route as LoginImport } from './routes/login' +import { Route as IndexImport } from './routes/index' +import { Route as WebsiteWebsiteIdImport } from './routes/website/$websiteId' + +// Create/Update Routes + +const WebsiteRoute = WebsiteImport.update({ + path: '/website', + getParentRoute: () => rootRoute, +} as any) + +const RegisterRoute = RegisterImport.update({ + path: '/register', + getParentRoute: () => rootRoute, +} as any) + +const LoginRoute = LoginImport.update({ + path: '/login', + getParentRoute: () => rootRoute, +} as any) + +const IndexRoute = IndexImport.update({ + path: '/', + getParentRoute: () => rootRoute, +} as any) + +const WebsiteWebsiteIdRoute = WebsiteWebsiteIdImport.update({ + path: '/$websiteId', + getParentRoute: () => WebsiteRoute, +} as any) + +// Populate the FileRoutesByPath interface + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/': { + preLoaderRoute: typeof IndexImport + parentRoute: typeof rootRoute + } + '/login': { + preLoaderRoute: typeof LoginImport + parentRoute: typeof rootRoute + } + '/register': { + preLoaderRoute: typeof RegisterImport + parentRoute: typeof rootRoute + } + '/website': { + preLoaderRoute: typeof WebsiteImport + parentRoute: typeof rootRoute + } + '/website/$websiteId': { + preLoaderRoute: typeof WebsiteWebsiteIdImport + parentRoute: typeof WebsiteImport + } + } +} + +// Create and export the route tree + +export const routeTree = rootRoute.addChildren([ + IndexRoute, + LoginRoute, + RegisterRoute, + WebsiteRoute.addChildren([WebsiteWebsiteIdRoute]), +]) + +/* prettier-ignore-end */ diff --git a/src/client/routes/__root.tsx b/src/client/routes/__root.tsx new file mode 100644 index 0000000..0324e36 --- /dev/null +++ b/src/client/routes/__root.tsx @@ -0,0 +1,20 @@ +import { createRootRouteWithContext, Outlet } from '@tanstack/react-router'; +import { TanStackRouterDevtools } from '@tanstack/router-devtools'; + +interface RouterContext { + // The ReturnType of your useAuth hook or the value of your AuthContext + userInfo: any; +} + +const defaultLayout: [number, number, number] = [265, 440, 655]; + +export const Route = createRootRouteWithContext()({ + component: () => { + return ( + <> + + + + ); + }, +}); diff --git a/src/client/routes/index.tsx b/src/client/routes/index.tsx new file mode 100644 index 0000000..efd7dc9 --- /dev/null +++ b/src/client/routes/index.tsx @@ -0,0 +1,15 @@ +import { routeAuthBeforeLoad } from '@/utils/route'; +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/')({ + beforeLoad: routeAuthBeforeLoad, + component: Index, +}); + +function Index() { + return ( +
+

Welcome Home!

+
+ ); +} diff --git a/src/client/routes/login.tsx b/src/client/routes/login.tsx new file mode 100644 index 0000000..9c4d0de --- /dev/null +++ b/src/client/routes/login.tsx @@ -0,0 +1,101 @@ +import { + createFileRoute, + getRouteApi, + useNavigate, +} from '@tanstack/react-router'; +import { useRequest } from '@/hooks/useRequest'; +import { setJWT } from '@/api/auth'; +import { useGlobalConfig } from '@/hooks/useConfig'; +import { trpc } from '@/api/trpc'; +import { Button, Form, Input, Typography } from 'antd'; +import { useTranslation } from '@i18next-toolkit/react'; +import { setUserInfo } from '@/store/user'; +import { z } from 'zod'; + +export const Route = createFileRoute('/login')({ + validateSearch: z.object({ + // redirect: z.string().catch('/'), + redirect: z.string().optional(), + }), + component: LoginComponent, +}); + +const routeApi = getRouteApi('/login'); + +function LoginComponent() { + const navigate = useNavigate(); + const { t } = useTranslation(); + const loginMutation = trpc.user.login.useMutation(); + const search = routeApi.useSearch(); + + const [{ loading }, handleLogin] = useRequest(async (values: any) => { + const res = await loginMutation.mutateAsync({ + username: values.username, + password: values.password, + }); + + setJWT(res.token); + setUserInfo(res.info); + navigate({ + to: search.redirect ?? '/dashboard', + }); + }); + const { allowRegister } = useGlobalConfig(); + + return ( +
+
+
+ +
+ + Tianji + +
+ + + + + + + + + + + {allowRegister && ( + + + + )} +
+
+
+ ); +} diff --git a/src/client/routes/register.tsx b/src/client/routes/register.tsx new file mode 100644 index 0000000..90671aa --- /dev/null +++ b/src/client/routes/register.tsx @@ -0,0 +1,71 @@ +import { Button, Form, Input, Typography } from 'antd'; +import React from 'react'; +import { useNavigate } from 'react-router'; +import { useRequest } from '../hooks/useRequest'; +import { trpc } from '../api/trpc'; +import { setJWT } from '../api/auth'; +import { setUserInfo } from '../store/user'; +import { useTranslation } from '@i18next-toolkit/react'; +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/register')({ + component: RegisterComponent, +}); + +function RegisterComponent() { + const { t } = useTranslation(); + const navigate = useNavigate(); + + const mutation = trpc.user.register.useMutation(); + + const [{ loading }, handleRegister] = useRequest(async (values: any) => { + const res = await mutation.mutateAsync({ + username: values.username, + password: values.password, + }); + setJWT(res.token); + setUserInfo(res.info); + + navigate('/dashboard'); + }); + + return ( +
+
+
+ +
+ + {t('Register Account')} + +
+ + + + + + + + + +
+
+
+ ); +} diff --git a/src/client/routes/website.tsx b/src/client/routes/website.tsx new file mode 100644 index 0000000..0dfae2a --- /dev/null +++ b/src/client/routes/website.tsx @@ -0,0 +1,71 @@ +import { trpc } from '@/api/trpc'; +import { CommonList } from '@/components/CommonList'; +import { Input } from '@/components/ui/input'; +import { Separator } from '@/components/ui/separator'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { LayoutV2 } from '@/pages/LayoutV2'; +import { useCurrentWorkspaceId } from '@/store/user'; +import { routeAuthBeforeLoad } from '@/utils/route'; +import { createFileRoute } from '@tanstack/react-router'; +import { LuSearch } from 'react-icons/lu'; + +export const Route = createFileRoute('/website')({ + beforeLoad: routeAuthBeforeLoad, + component: WebsiteComponent, +}); + +function WebsiteComponent() { + const workspaceId = useCurrentWorkspaceId(); + const { data = [] } = trpc.website.all.useQuery({ + workspaceId, + }); + + const items = data.map((item) => ({ + id: item.id, + title: item.name, + content: item.domain, + tags: [], + href: `/website/${item.id}`, + })); + + return ( + +
+

Website

+ + + All mail + + + Unread + + +
+ +
+
+
+ + +
+
+
+ + + + + + + + } + /> + ); +} diff --git a/src/client/routes/website/$websiteId.tsx b/src/client/routes/website/$websiteId.tsx new file mode 100644 index 0000000..4e5f7e3 --- /dev/null +++ b/src/client/routes/website/$websiteId.tsx @@ -0,0 +1,13 @@ +import { routeAuthBeforeLoad } from '@/utils/route'; +import { createFileRoute, getRouteApi } from '@tanstack/react-router'; + +export const Route = createFileRoute('/website/$websiteId')({ + beforeLoad: routeAuthBeforeLoad, + component: WebsiteDetailComponent, +}); + +function WebsiteDetailComponent() { + const params = Route.useParams<{ websiteId: string }>(); + + return
website: {params.websiteId}
; +} diff --git a/src/client/tailwind.config.ts b/src/client/tailwind.config.ts index ad2f078..da5d16e 100644 --- a/src/client/tailwind.config.ts +++ b/src/client/tailwind.config.ts @@ -11,6 +11,7 @@ module.exports = { './index.html', './components/**/*.{js,jsx,ts,tsx}', './pages/**/*.{js,jsx,ts,tsx}', + './routes/**/*.{js,jsx,ts,tsx}', ], }, theme: { @@ -84,7 +85,7 @@ module.exports = { }, darkMode: 'class', corePlugins: { - preflight: false, + preflight: true, }, plugins: [animate], } satisfies Config; diff --git a/src/client/utils/route.ts b/src/client/utils/route.ts new file mode 100644 index 0000000..16631e6 --- /dev/null +++ b/src/client/utils/route.ts @@ -0,0 +1,15 @@ +import { FileBaseRouteOptions, redirect } from '@tanstack/react-router'; + +export const routeAuthBeforeLoad: FileBaseRouteOptions['beforeLoad'] = ({ + context, + location, +}) => { + if (!(context as any).userInfo) { + throw redirect({ + to: '/login', + search: { + redirect: location.href, + }, + }); + } +}; diff --git a/src/client/vite.config.ts b/src/client/vite.config.ts index 2507e25..87afcbf 100644 --- a/src/client/vite.config.ts +++ b/src/client/vite.config.ts @@ -1,11 +1,18 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { resolve } from 'path'; +import { TanStackRouterVite } from '@tanstack/router-vite-plugin'; // https://vitejs.dev/config/ export default defineConfig({ root: __dirname, - plugins: [react()], + plugins: [ + react(), + TanStackRouterVite({ + routesDirectory: './routes', + generatedRouteTree: './routeTree.gen.ts', + }), + ], build: { outDir: '../server/public', },