Fix lint
This commit is contained in:
parent
bafe29086a
commit
374a1ec4b8
116 changed files with 653 additions and 589 deletions
|
|
@ -12,7 +12,7 @@ repos:
|
||||||
entry: just typecheck
|
entry: just typecheck
|
||||||
language: python
|
language: python
|
||||||
pass_filenames: false
|
pass_filenames: false
|
||||||
files: \.ts*
|
files: ^ui/.*\.(ts|tsx)$
|
||||||
- id: test-ui
|
- id: test-ui
|
||||||
name: Test Frontend
|
name: Test Frontend
|
||||||
entry: just test-frontend
|
entry: just test-frontend
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
import globals from "globals";
|
|
||||||
import pluginJs from "@eslint/js";
|
|
||||||
import tseslint from "typescript-eslint";
|
|
||||||
import pluginReact from "eslint-plugin-react";
|
|
||||||
|
|
||||||
/** @type {import('eslint').Linter.Config[]} */
|
|
||||||
export default [
|
|
||||||
{ files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] },
|
|
||||||
{ languageOptions: { globals: globals.browser } },
|
|
||||||
pluginJs.configs.recommended,
|
|
||||||
...tseslint.configs.recommended,
|
|
||||||
pluginReact.configs.flat.recommended,
|
|
||||||
{
|
|
||||||
rules: {
|
|
||||||
"react/react-in-jsx-scope": "off",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
@ -6,16 +6,18 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
"typecheck": "npx tsgo --build .",
|
"typecheck": "npx tsgo --build .",
|
||||||
"lint": "eslint .",
|
"lint": "biome check .",
|
||||||
|
"lint:fix": "biome check --write .",
|
||||||
|
"format": "biome format --write .",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"build:staging": "tsc -b && vite build --mode staging",
|
"build:staging": "tsc -b && vite build --mode staging",
|
||||||
"build:prod": "tsc -b && vite build --mode production",
|
"build:prod": "tsc -b && vite build --mode production",
|
||||||
"deploy:staging": "pnpm run build:staging && wrangler deploy",
|
"deploy:staging": "pnpm run build:staging && wrangler deploy",
|
||||||
"deploy:prod": "pnpm run build:prod && wrangler deploy",
|
"deploy:prod": "pnpm run build:prod && wrangler deploy",
|
||||||
"cf-typegen": "wrangler types",
|
"cf-typegen": "wrangler types",
|
||||||
"test": "vitest run --mode dev",
|
"test": "vitest run --mode dev --passWithNoTests",
|
||||||
"test:watch": "vitest watch",
|
"test:watch": "vitest watch --passWithNoTests",
|
||||||
"test:coverage": "vitest run --coverage"
|
"test:coverage": "vitest run --coverage --passWithNoTests"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.2.5",
|
"@biomejs/biome": "2.2.5",
|
||||||
|
|
@ -42,6 +44,7 @@
|
||||||
"eslint": "^9.22.0",
|
"eslint": "^9.22.0",
|
||||||
"eslint-plugin-react": "^7.37.4",
|
"eslint-plugin-react": "^7.37.4",
|
||||||
"globals": "^16.0.0",
|
"globals": "^16.0.0",
|
||||||
|
"happy-dom": "^20.0.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-environment-jsdom": "^29.7.0",
|
"jest-environment-jsdom": "^29.7.0",
|
||||||
"lucide-react": "^0.460.0",
|
"lucide-react": "^0.460.0",
|
||||||
|
|
@ -58,7 +61,7 @@
|
||||||
"typescript-eslint": "^8.26.1",
|
"typescript-eslint": "^8.26.1",
|
||||||
"vite": "^6.2.2",
|
"vite": "^6.2.2",
|
||||||
"vite-tsconfig-paths": "^5.1.4",
|
"vite-tsconfig-paths": "^5.1.4",
|
||||||
"vitest": "^3.1.1",
|
"vitest": "^3.2.4",
|
||||||
"wrangler": "^4.24.3"
|
"wrangler": "^4.24.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,9 @@ importers:
|
||||||
globals:
|
globals:
|
||||||
specifier: ^16.0.0
|
specifier: ^16.0.0
|
||||||
version: 16.0.0
|
version: 16.0.0
|
||||||
|
happy-dom:
|
||||||
|
specifier: ^20.0.0
|
||||||
|
version: 20.0.0
|
||||||
jest:
|
jest:
|
||||||
specifier: ^29.7.0
|
specifier: ^29.7.0
|
||||||
version: 29.7.0(@types/node@22.13.10)
|
version: 29.7.0(@types/node@22.13.10)
|
||||||
|
|
@ -193,8 +196,8 @@ importers:
|
||||||
specifier: ^5.1.4
|
specifier: ^5.1.4
|
||||||
version: 5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))
|
version: 5.1.4(typescript@5.7.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^3.1.1
|
specifier: ^3.2.4
|
||||||
version: 3.1.1(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)
|
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@20.0.0)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)
|
||||||
wrangler:
|
wrangler:
|
||||||
specifier: ^4.24.3
|
specifier: ^4.24.3
|
||||||
version: 4.24.3
|
version: 4.24.3
|
||||||
|
|
@ -2065,12 +2068,18 @@ packages:
|
||||||
'@types/babel__traverse@7.20.6':
|
'@types/babel__traverse@7.20.6':
|
||||||
resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
|
resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
|
||||||
|
|
||||||
|
'@types/chai@5.2.2':
|
||||||
|
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
|
||||||
|
|
||||||
'@types/cookie@0.6.0':
|
'@types/cookie@0.6.0':
|
||||||
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
|
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
|
||||||
|
|
||||||
'@types/debug@4.1.12':
|
'@types/debug@4.1.12':
|
||||||
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
|
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
|
||||||
|
|
||||||
|
'@types/deep-eql@4.0.2':
|
||||||
|
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
|
||||||
|
|
||||||
'@types/estree-jsx@1.0.5':
|
'@types/estree-jsx@1.0.5':
|
||||||
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
|
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
|
||||||
|
|
||||||
|
|
@ -2122,6 +2131,9 @@ packages:
|
||||||
'@types/ms@2.1.0':
|
'@types/ms@2.1.0':
|
||||||
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
||||||
|
|
||||||
|
'@types/node@20.19.20':
|
||||||
|
resolution: {integrity: sha512-2Q7WS25j4pS1cS8yw3d6buNCVJukOTeQ39bAnwR6sOJbaxvyCGebzTMypDFN82CxBLnl+lSWVdCCWbRY6y9yZQ==}
|
||||||
|
|
||||||
'@types/node@22.13.10':
|
'@types/node@22.13.10':
|
||||||
resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
|
resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
|
||||||
|
|
||||||
|
|
@ -2160,6 +2172,9 @@ packages:
|
||||||
'@types/unist@3.0.3':
|
'@types/unist@3.0.3':
|
||||||
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
||||||
|
|
||||||
|
'@types/whatwg-mimetype@3.0.2':
|
||||||
|
resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
|
||||||
|
|
||||||
'@types/ws@8.18.0':
|
'@types/ws@8.18.0':
|
||||||
resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==}
|
resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==}
|
||||||
|
|
||||||
|
|
@ -2331,34 +2346,34 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vite: ^4.2.0 || ^5.0.0 || ^6.0.0
|
vite: ^4.2.0 || ^5.0.0 || ^6.0.0
|
||||||
|
|
||||||
'@vitest/expect@3.1.1':
|
'@vitest/expect@3.2.4':
|
||||||
resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==}
|
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
|
||||||
|
|
||||||
'@vitest/mocker@3.1.1':
|
'@vitest/mocker@3.2.4':
|
||||||
resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==}
|
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
msw: ^2.4.9
|
msw: ^2.4.9
|
||||||
vite: ^5.0.0 || ^6.0.0
|
vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
msw:
|
msw:
|
||||||
optional: true
|
optional: true
|
||||||
vite:
|
vite:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@vitest/pretty-format@3.1.1':
|
'@vitest/pretty-format@3.2.4':
|
||||||
resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==}
|
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
|
||||||
|
|
||||||
'@vitest/runner@3.1.1':
|
'@vitest/runner@3.2.4':
|
||||||
resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==}
|
resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
|
||||||
|
|
||||||
'@vitest/snapshot@3.1.1':
|
'@vitest/snapshot@3.2.4':
|
||||||
resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==}
|
resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
|
||||||
|
|
||||||
'@vitest/spy@3.1.1':
|
'@vitest/spy@3.2.4':
|
||||||
resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==}
|
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
|
||||||
|
|
||||||
'@vitest/utils@3.1.1':
|
'@vitest/utils@3.2.4':
|
||||||
resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==}
|
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
|
||||||
|
|
||||||
abab@2.0.6:
|
abab@2.0.6:
|
||||||
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
|
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
|
||||||
|
|
@ -2778,6 +2793,15 @@ packages:
|
||||||
supports-color:
|
supports-color:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
debug@4.4.3:
|
||||||
|
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
|
||||||
|
engines: {node: '>=6.0'}
|
||||||
|
peerDependencies:
|
||||||
|
supports-color: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
supports-color:
|
||||||
|
optional: true
|
||||||
|
|
||||||
decimal.js@10.5.0:
|
decimal.js@10.5.0:
|
||||||
resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
|
resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
|
||||||
|
|
||||||
|
|
@ -2926,8 +2950,8 @@ packages:
|
||||||
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
|
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
es-module-lexer@1.6.0:
|
es-module-lexer@1.7.0:
|
||||||
resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
|
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
|
||||||
|
|
||||||
es-object-atoms@1.1.1:
|
es-object-atoms@1.1.1:
|
||||||
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
|
||||||
|
|
@ -3239,6 +3263,10 @@ packages:
|
||||||
graphemer@1.4.0:
|
graphemer@1.4.0:
|
||||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
||||||
|
|
||||||
|
happy-dom@20.0.0:
|
||||||
|
resolution: {integrity: sha512-GkWnwIFxVGCf2raNrxImLo397RdGhLapj5cT3R2PT7FwL62Ze1DROhzmYW7+J3p9105DYMVenEejEbnq5wA37w==}
|
||||||
|
engines: {node: '>=20.0.0'}
|
||||||
|
|
||||||
has-bigints@1.1.0:
|
has-bigints@1.1.0:
|
||||||
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
|
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
@ -3718,6 +3746,9 @@ packages:
|
||||||
js-tokens@4.0.0:
|
js-tokens@4.0.0:
|
||||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||||
|
|
||||||
|
js-tokens@9.0.1:
|
||||||
|
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
|
||||||
|
|
||||||
js-yaml@3.14.1:
|
js-yaml@3.14.1:
|
||||||
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
|
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
@ -3943,6 +3974,9 @@ packages:
|
||||||
loupe@3.1.3:
|
loupe@3.1.3:
|
||||||
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
|
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
|
||||||
|
|
||||||
|
loupe@3.2.1:
|
||||||
|
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
|
||||||
|
|
||||||
lru-cache@5.1.1:
|
lru-cache@5.1.1:
|
||||||
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
|
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
|
||||||
|
|
||||||
|
|
@ -4852,6 +4886,9 @@ packages:
|
||||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
strip-literal@3.1.0:
|
||||||
|
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
|
||||||
|
|
||||||
style-to-js@1.1.17:
|
style-to-js@1.1.17:
|
||||||
resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==}
|
resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==}
|
||||||
|
|
||||||
|
|
@ -4916,16 +4953,16 @@ packages:
|
||||||
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
|
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
|
|
||||||
tinypool@1.0.2:
|
tinypool@1.1.1:
|
||||||
resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
|
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
|
||||||
engines: {node: ^18.0.0 || >=20.0.0}
|
engines: {node: ^18.0.0 || >=20.0.0}
|
||||||
|
|
||||||
tinyrainbow@2.0.0:
|
tinyrainbow@2.0.0:
|
||||||
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
|
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
|
|
||||||
tinyspy@3.0.2:
|
tinyspy@4.0.4:
|
||||||
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
|
resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
|
|
||||||
tmpl@1.0.5:
|
tmpl@1.0.5:
|
||||||
|
|
@ -5036,6 +5073,9 @@ packages:
|
||||||
undici-types@6.20.0:
|
undici-types@6.20.0:
|
||||||
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
|
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
|
||||||
|
|
||||||
|
undici-types@6.21.0:
|
||||||
|
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
||||||
|
|
||||||
undici@5.29.0:
|
undici@5.29.0:
|
||||||
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
|
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
|
||||||
engines: {node: '>=14.0'}
|
engines: {node: '>=14.0'}
|
||||||
|
|
@ -5153,8 +5193,8 @@ packages:
|
||||||
vfile@6.0.3:
|
vfile@6.0.3:
|
||||||
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
|
||||||
|
|
||||||
vite-node@3.1.1:
|
vite-node@3.2.4:
|
||||||
resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==}
|
resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
|
||||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
|
@ -5206,16 +5246,16 @@ packages:
|
||||||
yaml:
|
yaml:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
vitest@3.1.1:
|
vitest@3.2.4:
|
||||||
resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==}
|
resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
|
||||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@edge-runtime/vm': '*'
|
'@edge-runtime/vm': '*'
|
||||||
'@types/debug': ^4.1.12
|
'@types/debug': ^4.1.12
|
||||||
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
|
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
|
||||||
'@vitest/browser': 3.1.1
|
'@vitest/browser': 3.2.4
|
||||||
'@vitest/ui': 3.1.1
|
'@vitest/ui': 3.2.4
|
||||||
happy-dom: '*'
|
happy-dom: '*'
|
||||||
jsdom: '*'
|
jsdom: '*'
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
|
|
@ -7625,12 +7665,18 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/types': 7.26.8
|
'@babel/types': 7.26.8
|
||||||
|
|
||||||
|
'@types/chai@5.2.2':
|
||||||
|
dependencies:
|
||||||
|
'@types/deep-eql': 4.0.2
|
||||||
|
|
||||||
'@types/cookie@0.6.0': {}
|
'@types/cookie@0.6.0': {}
|
||||||
|
|
||||||
'@types/debug@4.1.12':
|
'@types/debug@4.1.12':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/ms': 2.1.0
|
'@types/ms': 2.1.0
|
||||||
|
|
||||||
|
'@types/deep-eql@4.0.2': {}
|
||||||
|
|
||||||
'@types/estree-jsx@1.0.5':
|
'@types/estree-jsx@1.0.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.6
|
'@types/estree': 1.0.6
|
||||||
|
|
@ -7693,6 +7739,10 @@ snapshots:
|
||||||
|
|
||||||
'@types/ms@2.1.0': {}
|
'@types/ms@2.1.0': {}
|
||||||
|
|
||||||
|
'@types/node@20.19.20':
|
||||||
|
dependencies:
|
||||||
|
undici-types: 6.21.0
|
||||||
|
|
||||||
'@types/node@22.13.10':
|
'@types/node@22.13.10':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 6.20.0
|
undici-types: 6.20.0
|
||||||
|
|
@ -7732,6 +7782,8 @@ snapshots:
|
||||||
|
|
||||||
'@types/unist@3.0.3': {}
|
'@types/unist@3.0.3': {}
|
||||||
|
|
||||||
|
'@types/whatwg-mimetype@3.0.2': {}
|
||||||
|
|
||||||
'@types/ws@8.18.0':
|
'@types/ws@8.18.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 22.13.10
|
'@types/node': 22.13.10
|
||||||
|
|
@ -7951,44 +8003,46 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@vitest/expect@3.1.1':
|
'@vitest/expect@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.1.1
|
'@types/chai': 5.2.2
|
||||||
'@vitest/utils': 3.1.1
|
'@vitest/spy': 3.2.4
|
||||||
|
'@vitest/utils': 3.2.4
|
||||||
chai: 5.2.0
|
chai: 5.2.0
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
|
|
||||||
'@vitest/mocker@3.1.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))':
|
'@vitest/mocker@3.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.1.1
|
'@vitest/spy': 3.2.4
|
||||||
estree-walker: 3.0.3
|
estree-walker: 3.0.3
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
||||||
|
|
||||||
'@vitest/pretty-format@3.1.1':
|
'@vitest/pretty-format@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
|
|
||||||
'@vitest/runner@3.1.1':
|
'@vitest/runner@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/utils': 3.1.1
|
'@vitest/utils': 3.2.4
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
strip-literal: 3.1.0
|
||||||
|
|
||||||
'@vitest/snapshot@3.1.1':
|
'@vitest/snapshot@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/pretty-format': 3.1.1
|
'@vitest/pretty-format': 3.2.4
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
|
||||||
'@vitest/spy@3.1.1':
|
'@vitest/spy@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
tinyspy: 3.0.2
|
tinyspy: 4.0.4
|
||||||
|
|
||||||
'@vitest/utils@3.1.1':
|
'@vitest/utils@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/pretty-format': 3.1.1
|
'@vitest/pretty-format': 3.2.4
|
||||||
loupe: 3.1.3
|
loupe: 3.2.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
|
|
||||||
abab@2.0.6: {}
|
abab@2.0.6: {}
|
||||||
|
|
@ -8444,6 +8498,10 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
|
||||||
|
debug@4.4.3:
|
||||||
|
dependencies:
|
||||||
|
ms: 2.1.3
|
||||||
|
|
||||||
decimal.js@10.5.0: {}
|
decimal.js@10.5.0: {}
|
||||||
|
|
||||||
decode-named-character-reference@1.2.0:
|
decode-named-character-reference@1.2.0:
|
||||||
|
|
@ -8639,7 +8697,7 @@ snapshots:
|
||||||
iterator.prototype: 1.1.5
|
iterator.prototype: 1.1.5
|
||||||
safe-array-concat: 1.1.3
|
safe-array-concat: 1.1.3
|
||||||
|
|
||||||
es-module-lexer@1.6.0: {}
|
es-module-lexer@1.7.0: {}
|
||||||
|
|
||||||
es-object-atoms@1.1.1:
|
es-object-atoms@1.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -9036,6 +9094,12 @@ snapshots:
|
||||||
|
|
||||||
graphemer@1.4.0: {}
|
graphemer@1.4.0: {}
|
||||||
|
|
||||||
|
happy-dom@20.0.0:
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 20.19.20
|
||||||
|
'@types/whatwg-mimetype': 3.0.2
|
||||||
|
whatwg-mimetype: 3.0.0
|
||||||
|
|
||||||
has-bigints@1.1.0: {}
|
has-bigints@1.1.0: {}
|
||||||
|
|
||||||
has-flag@4.0.0: {}
|
has-flag@4.0.0: {}
|
||||||
|
|
@ -9741,6 +9805,8 @@ snapshots:
|
||||||
|
|
||||||
js-tokens@4.0.0: {}
|
js-tokens@4.0.0: {}
|
||||||
|
|
||||||
|
js-tokens@9.0.1: {}
|
||||||
|
|
||||||
js-yaml@3.14.1:
|
js-yaml@3.14.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
argparse: 1.0.10
|
argparse: 1.0.10
|
||||||
|
|
@ -9963,6 +10029,8 @@ snapshots:
|
||||||
|
|
||||||
loupe@3.1.3: {}
|
loupe@3.1.3: {}
|
||||||
|
|
||||||
|
loupe@3.2.1: {}
|
||||||
|
|
||||||
lru-cache@5.1.1:
|
lru-cache@5.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
yallist: 3.1.1
|
yallist: 3.1.1
|
||||||
|
|
@ -11307,6 +11375,10 @@ snapshots:
|
||||||
|
|
||||||
strip-json-comments@3.1.1: {}
|
strip-json-comments@3.1.1: {}
|
||||||
|
|
||||||
|
strip-literal@3.1.0:
|
||||||
|
dependencies:
|
||||||
|
js-tokens: 9.0.1
|
||||||
|
|
||||||
style-to-js@1.1.17:
|
style-to-js@1.1.17:
|
||||||
dependencies:
|
dependencies:
|
||||||
style-to-object: 1.0.9
|
style-to-object: 1.0.9
|
||||||
|
|
@ -11364,11 +11436,11 @@ snapshots:
|
||||||
fdir: 6.4.6(picomatch@4.0.2)
|
fdir: 6.4.6(picomatch@4.0.2)
|
||||||
picomatch: 4.0.2
|
picomatch: 4.0.2
|
||||||
|
|
||||||
tinypool@1.0.2: {}
|
tinypool@1.1.1: {}
|
||||||
|
|
||||||
tinyrainbow@2.0.0: {}
|
tinyrainbow@2.0.0: {}
|
||||||
|
|
||||||
tinyspy@3.0.2: {}
|
tinyspy@4.0.4: {}
|
||||||
|
|
||||||
tmpl@1.0.5: {}
|
tmpl@1.0.5: {}
|
||||||
|
|
||||||
|
|
@ -11478,6 +11550,8 @@ snapshots:
|
||||||
|
|
||||||
undici-types@6.20.0: {}
|
undici-types@6.20.0: {}
|
||||||
|
|
||||||
|
undici-types@6.21.0: {}
|
||||||
|
|
||||||
undici@5.29.0:
|
undici@5.29.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@fastify/busboy': 2.1.1
|
'@fastify/busboy': 2.1.1
|
||||||
|
|
@ -11639,11 +11713,11 @@ snapshots:
|
||||||
'@types/unist': 3.0.3
|
'@types/unist': 3.0.3
|
||||||
vfile-message: 4.0.2
|
vfile-message: 4.0.2
|
||||||
|
|
||||||
vite-node@3.1.1(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2):
|
vite-node@3.2.4(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
cac: 6.7.14
|
cac: 6.7.14
|
||||||
debug: 4.4.0
|
debug: 4.4.3
|
||||||
es-module-lexer: 1.6.0
|
es-module-lexer: 1.7.0
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
|
@ -11682,31 +11756,35 @@ snapshots:
|
||||||
jiti: 2.4.2
|
jiti: 2.4.2
|
||||||
lightningcss: 1.29.2
|
lightningcss: 1.29.2
|
||||||
|
|
||||||
vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2):
|
vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.13.10)(happy-dom@20.0.0)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/expect': 3.1.1
|
'@types/chai': 5.2.2
|
||||||
'@vitest/mocker': 3.1.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))
|
'@vitest/expect': 3.2.4
|
||||||
'@vitest/pretty-format': 3.1.1
|
'@vitest/mocker': 3.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2))
|
||||||
'@vitest/runner': 3.1.1
|
'@vitest/pretty-format': 3.2.4
|
||||||
'@vitest/snapshot': 3.1.1
|
'@vitest/runner': 3.2.4
|
||||||
'@vitest/spy': 3.1.1
|
'@vitest/snapshot': 3.2.4
|
||||||
'@vitest/utils': 3.1.1
|
'@vitest/spy': 3.2.4
|
||||||
|
'@vitest/utils': 3.2.4
|
||||||
chai: 5.2.0
|
chai: 5.2.0
|
||||||
debug: 4.4.0
|
debug: 4.4.3
|
||||||
expect-type: 1.2.1
|
expect-type: 1.2.1
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
picomatch: 4.0.2
|
||||||
std-env: 3.9.0
|
std-env: 3.9.0
|
||||||
tinybench: 2.9.0
|
tinybench: 2.9.0
|
||||||
tinyexec: 0.3.2
|
tinyexec: 0.3.2
|
||||||
tinypool: 1.0.2
|
tinyglobby: 0.2.14
|
||||||
|
tinypool: 1.1.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
||||||
vite-node: 3.1.1(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite-node: 3.2.4(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)
|
||||||
why-is-node-running: 2.3.0
|
why-is-node-running: 2.3.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/debug': 4.1.12
|
'@types/debug': 4.1.12
|
||||||
'@types/node': 22.13.10
|
'@types/node': 22.13.10
|
||||||
|
happy-dom: 20.0.0
|
||||||
jsdom: 20.0.3
|
jsdom: 20.0.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- jiti
|
- jiti
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { BrowserRouter as Router, useRoutes } from "react-router-dom";
|
|
||||||
import { ThemeProvider } from "@ui/contexts/ThemeContext";
|
|
||||||
import { SessionProvider } from "@ui/contexts/SessionContext";
|
import { SessionProvider } from "@ui/contexts/SessionContext";
|
||||||
import { AllCommunityModule, ModuleRegistry } from "ag-grid-community";
|
import { ThemeProvider } from "@ui/contexts/ThemeContext";
|
||||||
import { UserStoreProvider } from "@ui/providers/UserStoreProvider";
|
|
||||||
import { DatadogRumProvider } from "@ui/providers/DatadogRumProvider";
|
|
||||||
import { routes } from "@ui/lib/routes";
|
import { routes } from "@ui/lib/routes";
|
||||||
|
import { DatadogRumProvider } from "@ui/providers/DatadogRumProvider";
|
||||||
|
import { UserStoreProvider } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { AllCommunityModule, ModuleRegistry } from "ag-grid-community";
|
||||||
|
import { BrowserRouter as Router, useRoutes } from "react-router-dom";
|
||||||
|
|
||||||
// Register all Community features
|
// Register all Community features
|
||||||
ModuleRegistry.registerModules([AllCommunityModule]);
|
ModuleRegistry.registerModules([AllCommunityModule]);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { useSession } from "../contexts/SessionContext";
|
|
||||||
import { Navigate, Outlet, useSearchParams } from "react-router-dom";
|
import { Navigate, Outlet, useSearchParams } from "react-router-dom";
|
||||||
import { match } from "ts-pattern";
|
import { match } from "ts-pattern";
|
||||||
|
import { useSession } from "../contexts/SessionContext";
|
||||||
import { LoadingSpinner } from "./LoadingSpinner";
|
import { LoadingSpinner } from "./LoadingSpinner";
|
||||||
|
|
||||||
export const AuthenticationGateway = () => {
|
export const AuthenticationGateway = () => {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { screen, waitFor } from "@testing-library/react";
|
import { screen, waitFor } from "@testing-library/react";
|
||||||
import { AuthenticationGateway } from "@ui/components/AuthenticationGateway";
|
import { AuthenticationGateway } from "@ui/components/AuthenticationGateway";
|
||||||
import { Routes, Route } from "react-router-dom";
|
|
||||||
import { SessionTestProvider } from "@ui/contexts/SessionContext";
|
import { SessionTestProvider } from "@ui/contexts/SessionContext";
|
||||||
import { renderWithRouter } from "@ui/utils/testHelpers";
|
import { renderWithRouter } from "@ui/utils/testHelpers";
|
||||||
|
import { Route, Routes } from "react-router-dom";
|
||||||
|
|
||||||
describe("PublicRoute", () => {
|
describe("PublicRoute", () => {
|
||||||
it("shows loading state initially", () => {
|
it("shows loading state initially", () => {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
import { useState } from "react";
|
|
||||||
import { Switch } from "@ui/ui-library/switch";
|
|
||||||
import { Text } from "@ui/ui-library/text";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { MinusIcon, PlusIcon, CopyIcon } from "@ui/ui-library/icons";
|
import { CopyIcon, MinusIcon, PlusIcon } from "@ui/ui-library/icons";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
|
import { Switch } from "@ui/ui-library/switch";
|
||||||
|
import { Text } from "@ui/ui-library/text";
|
||||||
import { useTimePicker } from "@ui/ui-library/time-picker";
|
import { useTimePicker } from "@ui/ui-library/time-picker";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
interface TimeRange {
|
interface TimeRange {
|
||||||
start: string;
|
start: string;
|
||||||
end: string;
|
end: string;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { render, screen, fireEvent } from "@testing-library/react";
|
import { fireEvent, render, screen } from "@testing-library/react";
|
||||||
import { LoginWithGoogle } from "./LoginWithGoogle";
|
import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle";
|
||||||
import { useLoginGoogle } from "../../hooks/auth";
|
import { useLoginGoogle } from "@ui/hooks/auth";
|
||||||
import { vi } from "vitest";
|
import { vi } from "vitest";
|
||||||
|
|
||||||
vi.mock("../../hooks/auth", () => ({
|
vi.mock("../../hooks/auth", () => ({
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
|
import { ChannelBadge } from "@ui/components/ChannelBadge";
|
||||||
import { UserTablo } from "@ui/types/tablos.types";
|
import { UserTablo } from "@ui/types/tablos.types";
|
||||||
import { Badge } from "@ui/ui-library/badge";
|
import { Badge } from "@ui/ui-library/badge";
|
||||||
import { ReactNode } from "react";
|
import { ReactNode } from "react";
|
||||||
import { Channel } from "stream-chat";
|
import { Channel } from "stream-chat";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { ChannelBadge } from "@ui/components/ChannelBadge";
|
|
||||||
|
|
||||||
interface ChannelPreviewProps {
|
interface ChannelPreviewProps {
|
||||||
channel: Channel;
|
channel: Channel;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { useState } from "react";
|
|
||||||
import { ImageColorPicker } from "./ImageColorPicker";
|
|
||||||
import { ClickOutside } from "./ClickOutside";
|
|
||||||
import { StatusPicker } from "./StatusPicker";
|
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { ClickOutside } from "./ClickOutside";
|
||||||
|
import { ImageColorPicker } from "./ImageColorPicker";
|
||||||
|
import { StatusPicker } from "./StatusPicker";
|
||||||
|
|
||||||
type Tablo = Database["public"]["Tables"]["tablos"]["Row"];
|
type Tablo = Database["public"]["Tables"]["tablos"]["Row"];
|
||||||
type StatusType = "todo" | "in_progress" | "done";
|
type StatusType = "todo" | "in_progress" | "done";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
import { UserTablo } from "@ui/types/tablos.types";
|
||||||
import { ChannelHeader, useChannelStateContext } from "stream-chat-react";
|
import { ChannelHeader, useChannelStateContext } from "stream-chat-react";
|
||||||
import { ChannelBadge } from "./ChannelBadge";
|
import { ChannelBadge } from "./ChannelBadge";
|
||||||
import { UserTablo } from "@ui/types/tablos.types";
|
|
||||||
|
|
||||||
interface CustomChannelHeaderProps {
|
interface CustomChannelHeaderProps {
|
||||||
tablos: UserTablo[];
|
tablos: UserTablo[];
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { ClickOutside } from "./ClickOutside";
|
|
||||||
import { UserTablo } from "@ui/types/tablos.types";
|
import { UserTablo } from "@ui/types/tablos.types";
|
||||||
|
import { ClickOutside } from "./ClickOutside";
|
||||||
|
|
||||||
interface DeleteTabloModalProps {
|
interface DeleteTabloModalProps {
|
||||||
tablo: UserTablo | null;
|
tablo: UserTablo | null;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { EventAndTablo } from "@ui/types/events.types";
|
import { EventAndTablo } from "@ui/types/events.types";
|
||||||
import { DialogBody } from "@ui/ui-library/dialog";
|
|
||||||
import { Text, Strong } from "@ui/ui-library/text";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { DialogBody } from "@ui/ui-library/dialog";
|
||||||
|
import { Strong, Text } from "@ui/ui-library/text";
|
||||||
import { CalendarIcon, User } from "lucide-react";
|
import { CalendarIcon, User } from "lucide-react";
|
||||||
import { CustomModal } from "./CustomModal";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { CustomModal } from "./CustomModal";
|
||||||
|
|
||||||
interface EventDetailsModalProps {
|
interface EventDetailsModalProps {
|
||||||
event: EventAndTablo | null;
|
event: EventAndTablo | null;
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
import { Event, EventInsert } from "@ui/types/events.types";
|
import { getLocalTimeZone, parseDate, today } from "@internationalized/date";
|
||||||
import { useState, useEffect } from "react";
|
|
||||||
import { useTablosList } from "@ui/hooks/tablos";
|
|
||||||
import { useCreateEvents, useEvent, useUpdateEvent } from "@ui/hooks/events";
|
import { useCreateEvents, useEvent, useUpdateEvent } from "@ui/hooks/events";
|
||||||
|
import { useTablosList } from "@ui/hooks/tablos";
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { Event, EventInsert } from "@ui/types/events.types";
|
||||||
|
import { DatePicker, DatePickerButton } from "@ui/ui-library/date-picker";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { useTimePicker } from "@ui/ui-library/time-picker";
|
import { useTimePicker } from "@ui/ui-library/time-picker";
|
||||||
import { DatePicker, DatePickerButton } from "@ui/ui-library/date-picker";
|
import { useEffect, useState } from "react";
|
||||||
import { Group } from "react-aria-components";
|
import { Group } from "react-aria-components";
|
||||||
import { getLocalTimeZone, parseDate, today } from "@internationalized/date";
|
|
||||||
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
|
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
|
||||||
|
|
||||||
export const EventModal = ({ mode }: { mode: "create" | "edit" }) => {
|
export const EventModal = ({ mode }: { mode: "create" | "edit" }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
import { EventTypeConfig } from "@ui/hooks/event-types";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { CustomModal } from "./CustomModal";
|
import { Description, Input, Label, TextArea, TextField } from "@ui/ui-library/field";
|
||||||
import { Label, TextField, TextArea, Description, Input } from "@ui/ui-library/field";
|
|
||||||
import { NumberField, NumberInput } from "@ui/ui-library/number-field";
|
import { NumberField, NumberInput } from "@ui/ui-library/number-field";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
|
|
@ -9,7 +9,7 @@ import {
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
SelectPopover,
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { EventTypeConfig } from "@ui/hooks/event-types";
|
import { CustomModal } from "./CustomModal";
|
||||||
|
|
||||||
export function EventTypeModal({
|
export function EventTypeModal({
|
||||||
isModalOpen,
|
isModalOpen,
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
import { useState, useRef } from "react";
|
|
||||||
import { useTablosList, useCreateTablo } from "@ui/hooks/tablos";
|
|
||||||
import { useCreateEvents } from "@ui/hooks/events";
|
import { useCreateEvents } from "@ui/hooks/events";
|
||||||
|
import { useCreateTablo, useTablosList } from "@ui/hooks/tablos";
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { EventInsert } from "@ui/types/events.types";
|
||||||
|
import { CreateTablo } from "@ui/types/tablos.types";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { parseICSFile, ParsedICSEvent } from "@ui/utils/helpers";
|
|
||||||
import { EventInsert } from "@ui/types/events.types";
|
|
||||||
import { CreateTablo } from "@ui/types/tablos.types";
|
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { ParsedICSEvent, parseICSFile } from "@ui/utils/helpers";
|
||||||
|
import { useRef, useState } from "react";
|
||||||
|
|
||||||
interface ImportICSModalProps {
|
interface ImportICSModalProps {
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { render, screen, fireEvent } from "@testing-library/react";
|
import { fireEvent, render, screen } from "@testing-library/react";
|
||||||
import { Layout } from "@ui/components/Layout";
|
import { Layout } from "@ui/components/Layout";
|
||||||
import { SessionProvider } from "@ui/contexts/SessionContext";
|
import { SessionProvider } from "@ui/contexts/SessionContext";
|
||||||
import { renderWithProviders } from "@ui/utils/testHelpers";
|
import { renderWithProviders } from "@ui/utils/testHelpers";
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
|
import { MenuIcon } from "lucide-react";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { SideNavigation } from "./NavigationBar";
|
import { Outlet } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Button } from "../ui-library/button";
|
import { Button } from "../ui-library/button";
|
||||||
import { Icon } from "../ui-library/icon";
|
import { Icon } from "../ui-library/icon";
|
||||||
import { MenuIcon } from "lucide-react";
|
import { SideNavigation } from "./NavigationBar";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { Outlet } from "react-router-dom";
|
|
||||||
|
|
||||||
export function Layout() {
|
export function Layout() {
|
||||||
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { screen, fireEvent } from "@testing-library/react";
|
import { fireEvent, screen } from "@testing-library/react";
|
||||||
import { SideNavigation, MainNavigation, UserMenuPopover } from "@ui/components/NavigationBar";
|
import { MainNavigation, SideNavigation, UserMenuPopover } from "@ui/components/NavigationBar";
|
||||||
import { renderWithProviders } from "@ui/utils/testHelpers";
|
import { renderWithProviders } from "@ui/utils/testHelpers";
|
||||||
|
|
||||||
describe("NavigationBar", () => {
|
describe("NavigationBar", () => {
|
||||||
describe("SideNavigation", () => {
|
describe("SideNavigation", () => {
|
||||||
it("renders the side navigation with correct initial state", () => {
|
it("renders the side navigation with correct initial state", () => {
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,37 @@
|
||||||
import { twMerge } from "tailwind-merge";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { Avatar, AvatarBadge } from "@ui/ui-library/avatar";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { Dialog } from "@ui/ui-library/dialog";
|
||||||
|
import { Disclosure, DisclosureControl, DisclosurePanel } from "@ui/ui-library/disclosure";
|
||||||
|
import { Icon } from "@ui/ui-library/icon";
|
||||||
|
import { AvailableIcon } from "@ui/ui-library/icons";
|
||||||
|
import { Link } from "@ui/ui-library/link";
|
||||||
|
import { Popover } from "@ui/ui-library/popover";
|
||||||
|
import { Text } from "@ui/ui-library/text";
|
||||||
|
import { isProd, isStaging } from "@ui/utils/helpers";
|
||||||
|
import { getXtabloIcon } from "@ui/utils/iconHelpers";
|
||||||
import {
|
import {
|
||||||
SendIcon,
|
CalendarCheckIcon,
|
||||||
|
CalendarIcon,
|
||||||
ChevronRightIcon,
|
ChevronRightIcon,
|
||||||
ConstructionIcon,
|
ConstructionIcon,
|
||||||
PlusIcon,
|
|
||||||
MinusIcon,
|
|
||||||
ReceiptTextIcon,
|
|
||||||
Grid2X2Icon,
|
Grid2X2Icon,
|
||||||
NotebookPenIcon,
|
|
||||||
MessageCircleIcon,
|
|
||||||
SquareKanban,
|
|
||||||
Kanban,
|
Kanban,
|
||||||
CalendarIcon,
|
|
||||||
CalendarCheckIcon,
|
|
||||||
ListCheckIcon,
|
ListCheckIcon,
|
||||||
|
MessageCircleIcon,
|
||||||
|
MinusIcon,
|
||||||
|
NotebookPenIcon,
|
||||||
|
PlusIcon,
|
||||||
|
ReceiptTextIcon,
|
||||||
|
SendIcon,
|
||||||
|
SquareKanban,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
import { useRef, useState } from "react";
|
||||||
|
import { LinkProps, Separator } from "react-aria-components";
|
||||||
import { Link as RouterLink, useLocation } from "react-router-dom";
|
import { Link as RouterLink, useLocation } from "react-router-dom";
|
||||||
import { Separator } from "react-aria-components";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Link } from "@ui/ui-library/link";
|
|
||||||
import { Icon } from "@ui/ui-library/icon";
|
|
||||||
import { Avatar, AvatarBadge } from "@ui/ui-library/avatar";
|
|
||||||
import { Dialog } from "@ui/ui-library/dialog";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { DisclosurePanel, DisclosureControl, Disclosure } from "@ui/ui-library/disclosure";
|
|
||||||
import { LinkProps } from "react-aria-components";
|
|
||||||
import { Popover } from "@ui/ui-library/popover";
|
|
||||||
import { AvailableIcon } from "@ui/ui-library/icons";
|
|
||||||
import { useState, useRef } from "react";
|
|
||||||
import { getXtabloIcon } from "@ui/utils/iconHelpers";
|
|
||||||
import { ThemeSwitcher } from "./ThemeSwitcher";
|
|
||||||
import { Text } from "@ui/ui-library/text";
|
|
||||||
import { SignOutButton } from "./SignOutButton";
|
import { SignOutButton } from "./SignOutButton";
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { ThemeSwitcher } from "./ThemeSwitcher";
|
||||||
import { isProd, isStaging } from "@ui/utils/helpers";
|
|
||||||
|
|
||||||
type NavLinkItem = {
|
type NavLinkItem = {
|
||||||
isActive?: boolean;
|
isActive?: boolean;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import { screen, waitFor } from "@testing-library/react";
|
||||||
import { ProtectedRoute } from "@ui/components/ProtectedRoute";
|
import { ProtectedRoute } from "@ui/components/ProtectedRoute";
|
||||||
import { SessionTestProvider } from "@ui/contexts/SessionContext";
|
import { SessionTestProvider } from "@ui/contexts/SessionContext";
|
||||||
import { renderWithRouter } from "@ui/utils/testHelpers";
|
import { renderWithRouter } from "@ui/utils/testHelpers";
|
||||||
import { Routes, Route } from "react-router-dom";
|
import { Route, Routes } from "react-router-dom";
|
||||||
|
|
||||||
describe("ProtectedRoute", () => {
|
describe("ProtectedRoute", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { Navigate, Outlet } from "react-router-dom";
|
import { Navigate, Outlet } from "react-router-dom";
|
||||||
import { match } from "ts-pattern";
|
import { match } from "ts-pattern";
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
|
||||||
import { LoadingSpinner } from "./LoadingSpinner";
|
import { LoadingSpinner } from "./LoadingSpinner";
|
||||||
|
|
||||||
interface ProtectedRouteProps {
|
interface ProtectedRouteProps {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from "react";
|
|
||||||
import { DeleteDevisModalButton } from "@ui/components/devis/DeleteDevisModal";
|
import { DeleteDevisModalButton } from "@ui/components/devis/DeleteDevisModal";
|
||||||
import { ViewDevisModalButton } from "@ui/components/devis/ViewDevisModal";
|
import { ViewDevisModalButton } from "@ui/components/devis/ViewDevisModal";
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { Download } from "lucide-react";
|
import { Download } from "lucide-react";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
type Devis = Database["public"]["Tables"]["devis"]["Row"];
|
type Devis = Database["public"]["Tables"]["devis"]["Row"];
|
||||||
interface RowActionMenuProps {
|
interface RowActionMenuProps {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { screen, fireEvent } from "@testing-library/react";
|
import { UseMutationResult } from "@tanstack/react-query";
|
||||||
|
import { fireEvent, screen } from "@testing-library/react";
|
||||||
import { SignOutButton } from "@ui/components/SignOutButton";
|
import { SignOutButton } from "@ui/components/SignOutButton";
|
||||||
import * as AuthHooks from "@ui/hooks/auth";
|
import * as AuthHooks from "@ui/hooks/auth";
|
||||||
import { UseMutationResult } from "@tanstack/react-query";
|
|
||||||
import { vi } from "vitest";
|
|
||||||
import { renderWithRouter } from "@ui/utils/testHelpers";
|
import { renderWithRouter } from "@ui/utils/testHelpers";
|
||||||
|
import { vi } from "vitest";
|
||||||
|
|
||||||
// Create a mock mutation result
|
// Create a mock mutation result
|
||||||
const createMockMutationResult = (
|
const createMockMutationResult = (
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Button } from "../ui-library/button";
|
import { AlertCircleIcon, CheckCircleIcon, LogOutIcon } from "lucide-react";
|
||||||
import { useLogout } from "../hooks/auth";
|
|
||||||
import { LogOutIcon, AlertCircleIcon, CheckCircleIcon } from "lucide-react";
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { useLogout } from "../hooks/auth";
|
||||||
|
import { Button } from "../ui-library/button";
|
||||||
import { toast } from "../ui-library/toast/toast-queue";
|
import { toast } from "../ui-library/toast/toast-queue";
|
||||||
|
|
||||||
export const SignOutButton = () => {
|
export const SignOutButton = () => {
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
import { ClickOutside } from "./ClickOutside";
|
|
||||||
import { useState, useEffect, useRef } from "react";
|
|
||||||
import { ImageColorPicker } from "./ImageColorPicker";
|
|
||||||
import { StatusPicker } from "./StatusPicker";
|
|
||||||
import { useInviteUser } from "@ui/hooks/invite";
|
import { useInviteUser } from "@ui/hooks/invite";
|
||||||
import { TabloUpdate, UserTablo } from "@ui/types/tablos.types";
|
|
||||||
import { useTabloMembers } from "@ui/hooks/tablos";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
|
||||||
import {
|
import {
|
||||||
useTabloFileNames,
|
|
||||||
useCreateTabloFile,
|
useCreateTabloFile,
|
||||||
useDeleteTabloFile,
|
useDeleteTabloFile,
|
||||||
useDownloadTabloFile,
|
useDownloadTabloFile,
|
||||||
|
useTabloFileNames,
|
||||||
} from "@ui/hooks/tablo_data";
|
} from "@ui/hooks/tablo_data";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { useTabloMembers } from "@ui/hooks/tablos";
|
||||||
import { FileTrigger } from "@ui/ui-library/file-trigger";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { TabloUpdate, UserTablo } from "@ui/types/tablos.types";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { Trash2Icon, DownloadIcon } from "lucide-react";
|
import { FileTrigger } from "@ui/ui-library/file-trigger";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { DownloadIcon, Trash2Icon } from "lucide-react";
|
||||||
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { ClickOutside } from "./ClickOutside";
|
||||||
|
import { ImageColorPicker } from "./ImageColorPicker";
|
||||||
|
import { StatusPicker } from "./StatusPicker";
|
||||||
|
|
||||||
type StatusType = "todo" | "in_progress" | "done";
|
type StatusType = "todo" | "in_progress" | "done";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { useState } from "react";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { ArrowLeft, ArrowRight, HelpCircle, X } from "lucide-react";
|
||||||
|
import React, { useState } from "react";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { X, ArrowRight, ArrowLeft, HelpCircle } from "lucide-react";
|
|
||||||
|
|
||||||
interface TutorialStep {
|
interface TutorialStep {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { render, screen, fireEvent } from "@testing-library/react";
|
import { fireEvent, render, screen } from "@testing-library/react";
|
||||||
import { ThemeSwitcher } from "@ui/components/ThemeSwitcher";
|
import { ThemeSwitcher } from "@ui/components/ThemeSwitcher";
|
||||||
import * as ThemeContext from "@ui/contexts/ThemeContext";
|
import * as ThemeContext from "@ui/contexts/ThemeContext";
|
||||||
import { vi } from "vitest";
|
import { vi } from "vitest";
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { ToggleButtonGroup, ToggleButton } from "../ui-library/button";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { useTheme } from "@ui/contexts/ThemeContext";
|
import { useTheme } from "@ui/contexts/ThemeContext";
|
||||||
import { Text } from "@ui/ui-library/text";
|
import { Text } from "@ui/ui-library/text";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { ToggleButton, ToggleButtonGroup } from "../ui-library/button";
|
||||||
|
|
||||||
const translation = {
|
const translation = {
|
||||||
light: "Clair",
|
light: "Clair",
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import { useState } from "react";
|
|
||||||
import { useTablosList } from "@ui/hooks/tablos";
|
import { useTablosList } from "@ui/hooks/tablos";
|
||||||
import { useGenerateWebcalToken } from "@ui/hooks/webcal";
|
import { useGenerateWebcalToken } from "@ui/hooks/webcal";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
interface WebcalModalProps {
|
interface WebcalModalProps {
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
import { CalendarDate } from "@internationalized/date";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { DateField, DateInput } from "@ui/ui-library/date-field";
|
||||||
import {
|
import {
|
||||||
Dialog,
|
Dialog,
|
||||||
DialogBody,
|
DialogBody,
|
||||||
|
|
@ -6,16 +8,12 @@ import {
|
||||||
DialogFooter,
|
DialogFooter,
|
||||||
DialogHeader,
|
DialogHeader,
|
||||||
} from "@ui/ui-library/dialog";
|
} from "@ui/ui-library/dialog";
|
||||||
import { Modal } from "@ui/ui-library/modal";
|
import { FieldError, Input, Label, TextArea, TextField } from "@ui/ui-library/field";
|
||||||
import { PlusIcon } from "lucide-react";
|
|
||||||
import { Form } from "@ui/ui-library/form";
|
import { Form } from "@ui/ui-library/form";
|
||||||
import { DateField, DateInput } from "@ui/ui-library/date-field";
|
import { Modal } from "@ui/ui-library/modal";
|
||||||
import { FieldError, Input, Label } from "@ui/ui-library/field";
|
import { calculateTax, calculateTotal } from "@ui/utils/helpers";
|
||||||
import { TextField, TextArea } from "@ui/ui-library/field";
|
import { PlusIcon } from "lucide-react";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { CalendarDate } from "@internationalized/date";
|
|
||||||
import { calculateTotal } from "@ui/utils/helpers";
|
|
||||||
import { calculateTax } from "@ui/utils/helpers";
|
|
||||||
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const defaultFormData = {
|
const defaultFormData = {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { DialogBody, DialogFooter } from "@ui/ui-library/dialog";
|
import {
|
||||||
|
Dialog,
|
||||||
import { DialogCloseButton } from "@ui/ui-library/dialog";
|
DialogBody,
|
||||||
import { DialogHeader } from "@ui/ui-library/dialog";
|
DialogCloseButton,
|
||||||
import { Dialog } from "@ui/ui-library/dialog";
|
DialogFooter,
|
||||||
import { TrashIcon } from "lucide-react";
|
DialogHeader,
|
||||||
|
} from "@ui/ui-library/dialog";
|
||||||
import { Modal } from "@ui/ui-library/modal";
|
import { Modal } from "@ui/ui-library/modal";
|
||||||
|
import { TrashIcon } from "lucide-react";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
|
||||||
export const DeleteDevisModalButton = ({
|
export const DeleteDevisModalButton = ({
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { DialogBody, DialogFooter } from "@ui/ui-library/dialog";
|
import {
|
||||||
|
Dialog,
|
||||||
import { DialogCloseButton } from "@ui/ui-library/dialog";
|
DialogBody,
|
||||||
|
DialogCloseButton,
|
||||||
import { Dialog, DialogHeader } from "@ui/ui-library/dialog";
|
DialogFooter,
|
||||||
import { EyeIcon } from "lucide-react";
|
DialogHeader,
|
||||||
|
} from "@ui/ui-library/dialog";
|
||||||
import { Modal } from "@ui/ui-library/modal";
|
import { Modal } from "@ui/ui-library/modal";
|
||||||
|
import { EyeIcon } from "lucide-react";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
|
||||||
type Devis = Database["public"]["Tables"]["devis"]["Row"];
|
type Devis = Database["public"]["Tables"]["devis"]["Row"];
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import { getXtabloIcon } from "@ui/utils/iconHelpers";
|
import { getXtabloIcon } from "@ui/utils/iconHelpers";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function Header() {
|
export function Header() {
|
||||||
const logo = getXtabloIcon();
|
const logo = getXtabloIcon();
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
import React, { useState, useCallback } from "react";
|
|
||||||
import { Plus, Filter } from "lucide-react";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { Icon } from "@ui/ui-library/icon";
|
|
||||||
import { SearchField } from "@ui/ui-library/search-field";
|
|
||||||
import { SearchInput } from "@ui/ui-library/search-field";
|
|
||||||
import {
|
import {
|
||||||
KanbanBoard as KanbanBoardType,
|
KanbanBoard as KanbanBoardType,
|
||||||
KanbanTask,
|
|
||||||
KanbanFilters as KanbanFiltersType,
|
KanbanFilters as KanbanFiltersType,
|
||||||
|
KanbanTask,
|
||||||
} from "@ui/types/kanban.types";
|
} from "@ui/types/kanban.types";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { Icon } from "@ui/ui-library/icon";
|
||||||
|
import { SearchField, SearchInput } from "@ui/ui-library/search-field";
|
||||||
|
import { Filter, Plus } from "lucide-react";
|
||||||
|
import React, { useCallback, useState } from "react";
|
||||||
|
|
||||||
interface KanbanBoardProps {
|
interface KanbanBoardProps {
|
||||||
board: KanbanBoardType;
|
board: KanbanBoardType;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { createContext, useContext, useEffect, useState } from "react";
|
|
||||||
import { Session, User } from "@supabase/supabase-js";
|
import { Session, User } from "@supabase/supabase-js";
|
||||||
import { supabase } from "@ui/hooks/auth";
|
import { supabase } from "@ui/hooks/auth";
|
||||||
|
import { createContext, useContext, useEffect, useState } from "react";
|
||||||
|
|
||||||
const SessionContext = createContext<{
|
const SessionContext = createContext<{
|
||||||
session: Session | null;
|
session: Session | null;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { createContext, useContext, useState, useEffect, ReactNode } from "react";
|
import { createContext, ReactNode, useContext, useEffect, useState } from "react";
|
||||||
|
|
||||||
type Theme = "dark" | "light" | "system";
|
type Theme = "dark" | "light" | "system";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
|
import { createClient, Session, User as SupabaseUser } from "@supabase/supabase-js";
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useMutation } from "@tanstack/react-query";
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { match } from "ts-pattern";
|
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
|
||||||
import { User as SupabaseUser, Session, createClient } from "@supabase/supabase-js";
|
|
||||||
import { api, queryClient } from "@ui/lib/api";
|
import { api, queryClient } from "@ui/lib/api";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { match } from "ts-pattern";
|
||||||
|
|
||||||
export type User = SupabaseUser & {
|
export type User = SupabaseUser & {
|
||||||
user_metadata: {
|
user_metadata: {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
import { queryClient } from "@ui/lib/api";
|
|
||||||
import { supabase } from "@ui/hooks/auth";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { useEffect, useState } from "react";
|
import { supabase } from "@ui/hooks/auth";
|
||||||
|
import { queryClient } from "@ui/lib/api";
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export type TimeRange = {
|
export type TimeRange = {
|
||||||
start: string;
|
start: string;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { Channel, StreamChat } from "stream-chat";
|
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
|
import { Channel, StreamChat } from "stream-chat";
|
||||||
|
|
||||||
export const useChannelFromUrl = (client: StreamChat) => {
|
export const useChannelFromUrl = (client: StreamChat) => {
|
||||||
const [channel, setChannel] = useState<Channel | null>(null);
|
const [channel, setChannel] = useState<Channel | null>(null);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
import { supabase } from "./auth";
|
import { supabase } from "./auth";
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
|
||||||
|
|
||||||
type Devis = Database["public"]["Tables"]["devis"];
|
type Devis = Database["public"]["Tables"]["devis"];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
import { supabase } from "./auth";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { Database } from "@ui/types/database.types";
|
|
||||||
import { queryClient } from "@ui/lib/api";
|
import { queryClient } from "@ui/lib/api";
|
||||||
|
import { Database } from "@ui/types/database.types";
|
||||||
import { useMemo } from "react";
|
import { useMemo } from "react";
|
||||||
|
import { supabase } from "./auth";
|
||||||
|
|
||||||
export type EventTypeData = {
|
export type EventTypeData = {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { supabase } from "./auth";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
|
||||||
import { Event, EventAndTablo, EventInsert, EventUpdate } from "@ui/types/events.types";
|
import { Event, EventAndTablo, EventInsert, EventUpdate } from "@ui/types/events.types";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { supabase } from "./auth";
|
||||||
|
|
||||||
// Fetch events for a specific tablo
|
// Fetch events for a specific tablo
|
||||||
export const useEventsByTablo = (tabloId: string | null) => {
|
export const useEventsByTablo = (tabloId: string | null) => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useMutation } from "@tanstack/react-query";
|
||||||
import { supabase } from "./auth";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
|
||||||
import { FeedbackData } from "@ui/pages/feedback";
|
import { FeedbackData } from "@ui/pages/feedback";
|
||||||
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { supabase } from "./auth";
|
||||||
|
|
||||||
// Create new feedback
|
// Create new feedback
|
||||||
export const useCreateFeedback = () => {
|
export const useCreateFeedback = () => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useMutation } from "@tanstack/react-query";
|
||||||
import { api } from "@ui/lib/api";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
|
import { api } from "@ui/lib/api";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
|
||||||
// Invite user by email
|
// Invite user by email
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useMutation } from "@tanstack/react-query";
|
||||||
import { supabase } from "./auth";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { supabase } from "./auth";
|
||||||
|
|
||||||
export interface SupportTicketData {
|
export interface SupportTicketData {
|
||||||
issue_type: "bug" | "performance" | "security" | "feature_request" | "account" | "other";
|
issue_type: "bug" | "performance" | "security" | "feature_request" | "account" | "other";
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { Database } from "@ui/types/database.types";
|
|
||||||
import { supabase } from "./auth";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { api } from "@ui/lib/api";
|
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
|
||||||
import { RemoveNullFromObject } from "@ui/types/removeNull";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
|
||||||
import { CreateTablo } from "@ui/types/tablos.types";
|
|
||||||
import { EventInsertInTablo } from "@ui/types/events.types";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { invalidatePublicSlots } from "@ui/hooks/public";
|
import { invalidatePublicSlots } from "@ui/hooks/public";
|
||||||
|
import { api } from "@ui/lib/api";
|
||||||
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { Database } from "@ui/types/database.types";
|
||||||
|
import { EventInsertInTablo } from "@ui/types/events.types";
|
||||||
|
import { RemoveNullFromObject } from "@ui/types/removeNull";
|
||||||
|
import { CreateTablo } from "@ui/types/tablos.types";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { supabase } from "./auth";
|
||||||
|
|
||||||
type Tablo = Database["public"]["Tables"]["tablos"];
|
type Tablo = Database["public"]["Tables"]["tablos"];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useMutation } from "@tanstack/react-query";
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
|
||||||
import { api } from "@ui/lib/api";
|
import { api } from "@ui/lib/api";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
|
||||||
export interface WebcalToken {
|
export interface WebcalToken {
|
||||||
token: string;
|
token: string;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import axios from "axios";
|
|
||||||
import { QueryClient } from "@tanstack/react-query";
|
import { QueryClient } from "@tanstack/react-query";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
// Create axios instance with default config
|
// Create axios instance with default config
|
||||||
export const api = axios.create({
|
export const api = axios.create({
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,28 @@
|
||||||
import { RouteObject } from "react-router-dom";
|
|
||||||
import { ProtectedRoute } from "@ui/components/ProtectedRoute";
|
|
||||||
import { Layout } from "@ui/components/Layout";
|
|
||||||
import { TabloPage } from "@ui/pages/tablo";
|
|
||||||
import { DevisPage } from "@ui/pages/devis";
|
|
||||||
import { FacturesPage } from "@ui/pages/factures";
|
|
||||||
import { PlanningPage } from "@ui/pages/planning";
|
|
||||||
import { NotFoundPage } from "@ui/pages/NotFoundPage";
|
|
||||||
import { JoinPage } from "@ui/pages/join";
|
|
||||||
import { OAuthSigninPage } from "@ui/pages/oauth-signin";
|
|
||||||
import { LandingPage } from "@ui/pages/landing";
|
|
||||||
import { LoginPage } from "@ui/pages/login";
|
|
||||||
import { SignUpPage } from "@ui/pages/signup";
|
|
||||||
import { ResetPasswordPage } from "@ui/pages/reset-password";
|
|
||||||
import { AuthenticationGateway } from "@ui/components/AuthenticationGateway";
|
import { AuthenticationGateway } from "@ui/components/AuthenticationGateway";
|
||||||
import ChatProvider from "@ui/providers/ChatProvider";
|
|
||||||
import { EventModal } from "@ui/components/EventModal";
|
import { EventModal } from "@ui/components/EventModal";
|
||||||
import { ChantiersPage } from "@ui/pages/chantiers";
|
import { Layout } from "@ui/components/Layout";
|
||||||
import { ChatPage } from "@ui/pages/chat";
|
import { ProtectedRoute } from "@ui/components/ProtectedRoute";
|
||||||
import { FeedbackPage } from "@ui/pages/feedback";
|
|
||||||
import { SupportPage } from "@ui/pages/support";
|
|
||||||
import { AvailabilitiesPage } from "@ui/pages/availabilities";
|
import { AvailabilitiesPage } from "@ui/pages/availabilities";
|
||||||
import { BookingsPage } from "@ui/pages/bookings";
|
import { BookingsPage } from "@ui/pages/bookings";
|
||||||
|
import { ChantiersPage } from "@ui/pages/chantiers";
|
||||||
|
import { ChatPage } from "@ui/pages/chat";
|
||||||
|
import { DevisPage } from "@ui/pages/devis";
|
||||||
import { EventTypesPage } from "@ui/pages/event-types-page";
|
import { EventTypesPage } from "@ui/pages/event-types-page";
|
||||||
|
import { FacturesPage } from "@ui/pages/factures";
|
||||||
|
import { FeedbackPage } from "@ui/pages/feedback";
|
||||||
|
import { JoinPage } from "@ui/pages/join";
|
||||||
|
import { LandingPage } from "@ui/pages/landing";
|
||||||
|
import { LoginPage } from "@ui/pages/login";
|
||||||
|
import { NotFoundPage } from "@ui/pages/NotFoundPage";
|
||||||
|
import { OAuthSigninPage } from "@ui/pages/oauth-signin";
|
||||||
import { PublicBookingPage } from "@ui/pages/PublicBookingPage";
|
import { PublicBookingPage } from "@ui/pages/PublicBookingPage";
|
||||||
|
import { PlanningPage } from "@ui/pages/planning";
|
||||||
|
import { ResetPasswordPage } from "@ui/pages/reset-password";
|
||||||
|
import { SignUpPage } from "@ui/pages/signup";
|
||||||
|
import { SupportPage } from "@ui/pages/support";
|
||||||
|
import { TabloPage } from "@ui/pages/tablo";
|
||||||
|
import ChatProvider from "@ui/providers/ChatProvider";
|
||||||
|
import { RouteObject } from "react-router-dom";
|
||||||
|
|
||||||
export const routes: RouteObject[] = [
|
export const routes: RouteObject[] = [
|
||||||
// Protected routes
|
// Protected routes
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
|
import { QueryClientProvider } from "@tanstack/react-query";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
import { App } from "./App";
|
import { App } from "./App";
|
||||||
import { QueryClientProvider } from "@tanstack/react-query";
|
|
||||||
import { queryClient } from "./lib/api";
|
import { queryClient } from "./lib/api";
|
||||||
import { GlobalToastRegion } from "./ui-library/toast/toast-region";
|
import { GlobalToastRegion } from "./ui-library/toast/toast-region";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export const NotFoundPage = () => {
|
export const NotFoundPage = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,28 @@
|
||||||
import { useParams } from "react-router-dom";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
|
||||||
import { Strong, Text } from "@ui/ui-library/text";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { CustomModal } from "@ui/components/CustomModal";
|
import { CustomModal } from "@ui/components/CustomModal";
|
||||||
import { TextField, Label, Input, FieldError } from "@ui/ui-library/field";
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { useTheme } from "@ui/contexts/ThemeContext";
|
import { useTheme } from "@ui/contexts/ThemeContext";
|
||||||
|
import { useSignUpWithoutPassword } from "@ui/hooks/auth";
|
||||||
|
import { TimeSlot, usePublicSlots } from "@ui/hooks/public";
|
||||||
|
import { useCreateTabloWithOwner } from "@ui/hooks/tablos";
|
||||||
import { useMaybeUser } from "@ui/providers/UserStoreProvider";
|
import { useMaybeUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { EventInsertInTablo } from "@ui/types/events.types";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { FieldError, Input, Label, TextField } from "@ui/ui-library/field";
|
||||||
|
import { Strong, Text } from "@ui/ui-library/text";
|
||||||
import {
|
import {
|
||||||
CalendarIcon,
|
CalendarIcon,
|
||||||
ClockIcon,
|
|
||||||
MapPinIcon,
|
|
||||||
UserIcon,
|
|
||||||
ChevronLeftIcon,
|
ChevronLeftIcon,
|
||||||
ChevronRightIcon,
|
ChevronRightIcon,
|
||||||
SunIcon,
|
ClockIcon,
|
||||||
MoonIcon,
|
MapPinIcon,
|
||||||
MonitorIcon,
|
MonitorIcon,
|
||||||
|
MoonIcon,
|
||||||
|
SunIcon,
|
||||||
|
UserIcon,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { usePublicSlots, TimeSlot } from "@ui/hooks/public";
|
import { useState } from "react";
|
||||||
import { useSignUpWithoutPassword } from "@ui/hooks/auth";
|
import { useParams } from "react-router-dom";
|
||||||
import { useCreateTabloWithOwner } from "@ui/hooks/tablos";
|
|
||||||
import { EventInsertInTablo } from "@ui/types/events.types";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
|
||||||
|
|
||||||
export function PublicBookingPage() {
|
export function PublicBookingPage() {
|
||||||
const { user_info, event_type_standard_name } = useParams<{
|
const { user_info, event_type_standard_name } = useParams<{
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
import { Strong, Text } from "@ui/ui-library/text";
|
import { DateValue, getLocalTimeZone, today } from "@internationalized/date";
|
||||||
import { AvailabilityCard } from "@ui/components/AvailabilityCard";
|
import { AvailabilityCard } from "@ui/components/AvailabilityCard";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { AvailabilityVisualization } from "@ui/components/AvailabilityVisualization";
|
||||||
|
import { CustomModal } from "@ui/components/CustomModal";
|
||||||
import {
|
import {
|
||||||
DEFAULT_AVAILABILITIES,
|
DEFAULT_AVAILABILITIES,
|
||||||
Exception,
|
Exception,
|
||||||
useAvailabilities,
|
useAvailabilities,
|
||||||
WeeklyAvailability,
|
WeeklyAvailability,
|
||||||
} from "@ui/hooks/availabilities";
|
} from "@ui/hooks/availabilities";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { useState } from "react";
|
|
||||||
import { Checkbox } from "@ui/ui-library/checkbox";
|
import { Checkbox } from "@ui/ui-library/checkbox";
|
||||||
import { PlusIcon } from "@ui/ui-library/icons";
|
|
||||||
import { AvailabilityVisualization } from "@ui/components/AvailabilityVisualization";
|
|
||||||
import { SaveIcon } from "lucide-react";
|
|
||||||
import { DatePicker, DatePickerInput } from "@ui/ui-library/date-picker";
|
import { DatePicker, DatePickerInput } from "@ui/ui-library/date-picker";
|
||||||
import { Label } from "@ui/ui-library/field";
|
import { Label } from "@ui/ui-library/field";
|
||||||
import { DateValue, getLocalTimeZone, today } from "@internationalized/date";
|
import { PlusIcon } from "@ui/ui-library/icons";
|
||||||
import { RadioGroup, Radios, Radio } from "@ui/ui-library/radio-group";
|
import { Radio, RadioGroup, Radios } from "@ui/ui-library/radio-group";
|
||||||
import { CustomModal } from "@ui/components/CustomModal";
|
import { Strong, Text } from "@ui/ui-library/text";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { SaveIcon } from "lucide-react";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
const DAYS_OF_WEEK = [0, 1, 2, 3, 4, 5, 6];
|
const DAYS_OF_WEEK = [0, 1, 2, 3, 4, 5, 6];
|
||||||
const DAYS_OF_WEEK_DISPLAY = [
|
const DAYS_OF_WEEK_DISPLAY = [
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,13 @@
|
||||||
import { useState, useMemo, useEffect } from "react";
|
import { EventDetailsModal } from "@ui/components/EventDetailsModal";
|
||||||
import { useParams, useNavigate } from "react-router-dom";
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
import { Text, Strong } from "@ui/ui-library/text";
|
import { useEventsByTablo } from "@ui/hooks/events";
|
||||||
|
import { useGetAllTabloAccess, useTablosList } from "@ui/hooks/tablos";
|
||||||
|
import { EventAndTablo } from "@ui/types/events.types";
|
||||||
|
import { Badge } from "@ui/ui-library/badge";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { Input } from "@ui/ui-library/field";
|
||||||
|
import { CalendarIcon } from "@ui/ui-library/icons/outline/calendar";
|
||||||
|
import { Radio, RadioGroup, Radios } from "@ui/ui-library/radio-group";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
|
|
@ -11,19 +17,12 @@ import {
|
||||||
SelectPopover,
|
SelectPopover,
|
||||||
StatusIcon,
|
StatusIcon,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { Input } from "@ui/ui-library/field";
|
import { Strong, Text } from "@ui/ui-library/text";
|
||||||
import { SearchIcon } from "lucide-react";
|
|
||||||
import { CalendarIcon } from "@ui/ui-library/icons/outline/calendar";
|
|
||||||
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
||||||
import { useEventsByTablo } from "@ui/hooks/events";
|
|
||||||
import { useTablosList, useGetAllTabloAccess } from "@ui/hooks/tablos";
|
|
||||||
import { EventAndTablo } from "@ui/types/events.types";
|
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
|
||||||
import { EventDetailsModal } from "@ui/components/EventDetailsModal";
|
|
||||||
import { RadioGroup, Radios, Radio } from "@ui/ui-library/radio-group";
|
|
||||||
import { Badge } from "@ui/ui-library/badge";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { getTextColorFromTabloColor } from "@ui/utils/helpers";
|
import { getTextColorFromTabloColor } from "@ui/utils/helpers";
|
||||||
|
import { ChevronLeft, ChevronRight, SearchIcon } from "lucide-react";
|
||||||
|
import { useEffect, useMemo, useState } from "react";
|
||||||
|
import { useNavigate, useParams } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
type BookingStatus = "all" | "upcoming" | "past";
|
type BookingStatus = "all" | "upcoming" | "past";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
import {
|
|
||||||
ChannelList,
|
|
||||||
MessageList,
|
|
||||||
MessageInput,
|
|
||||||
Window,
|
|
||||||
Channel,
|
|
||||||
useChatContext,
|
|
||||||
} from "stream-chat-react";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
|
||||||
import { ChannelPreview } from "@ui/components/ChannelPreview";
|
import { ChannelPreview } from "@ui/components/ChannelPreview";
|
||||||
|
import { CustomChannelHeader } from "@ui/components/CustomChannelHeader";
|
||||||
import { useChannelFromUrl } from "@ui/hooks/channel";
|
import { useChannelFromUrl } from "@ui/hooks/channel";
|
||||||
import { useTablosList } from "@ui/hooks/tablos";
|
import { useTablosList } from "@ui/hooks/tablos";
|
||||||
import { CustomChannelHeader } from "@ui/components/CustomChannelHeader";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import {
|
||||||
|
Channel,
|
||||||
|
ChannelList,
|
||||||
|
MessageInput,
|
||||||
|
MessageList,
|
||||||
|
useChatContext,
|
||||||
|
Window,
|
||||||
|
} from "stream-chat-react";
|
||||||
|
|
||||||
export function ChatPage() {
|
export function ChatPage() {
|
||||||
const user = useUser();
|
const user = useUser();
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import { screen, waitFor, within } from "@testing-library/react";
|
import { screen, waitFor, within } from "@testing-library/react";
|
||||||
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
||||||
import { DevisPage } from "@ui/pages/devis";
|
|
||||||
import { useDevisList, useCreateDevis, useDeleteDevis, useUpdateDevis } from "@ui/hooks/devis";
|
|
||||||
import userEvent from "@testing-library/user-event";
|
import userEvent from "@testing-library/user-event";
|
||||||
|
import { useCreateDevis, useDeleteDevis, useDevisList, useUpdateDevis } from "@ui/hooks/devis";
|
||||||
|
import { DevisPage } from "@ui/pages/devis";
|
||||||
import { renderWithProviders, waitForGridToBeInTheDOM } from "@ui/utils/testHelpers";
|
import { renderWithProviders, waitForGridToBeInTheDOM } from "@ui/utils/testHelpers";
|
||||||
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
|
||||||
// Mock the hooks
|
// Mock the hooks
|
||||||
vi.mock("@ui/hooks/devis");
|
vi.mock("@ui/hooks/devis");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
import { NotebookPenIcon } from "lucide-react";
|
|
||||||
import { AllCommunityModule, ColDef, ModuleRegistry, themeQuartz } from "ag-grid-community";
|
|
||||||
import { AgGridReact } from "ag-grid-react";
|
|
||||||
import { useDevisList, useCreateDevis, useDeleteDevis, useUpdateDevis } from "@ui/hooks/devis";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { Database } from "@ui/types/database.types";
|
|
||||||
import { CalendarDate, DateValue } from "@internationalized/date";
|
import { CalendarDate, DateValue } from "@internationalized/date";
|
||||||
import { RowActionMenu } from "@ui/components/RowActionMenu";
|
|
||||||
import { CustomLoadingOverlay } from "@ui/components/CustomLoadingOverlay";
|
import { CustomLoadingOverlay } from "@ui/components/CustomLoadingOverlay";
|
||||||
|
import { CreateDevisModal } from "@ui/components/devis/CreateDevisModal";
|
||||||
|
import { ViewDevisModal } from "@ui/components/devis/ViewDevisModal";
|
||||||
|
import { RowActionMenu } from "@ui/components/RowActionMenu";
|
||||||
|
import { useCreateDevis, useDeleteDevis, useDevisList, useUpdateDevis } from "@ui/hooks/devis";
|
||||||
|
import { Database } from "@ui/types/database.types";
|
||||||
|
import { Badge, BadgeColor } from "@ui/ui-library/badge";
|
||||||
import {
|
import {
|
||||||
EmptyState,
|
EmptyState,
|
||||||
EmptyStateActions,
|
EmptyStateActions,
|
||||||
|
|
@ -14,14 +13,18 @@ import {
|
||||||
EmptyStateHeading,
|
EmptyStateHeading,
|
||||||
EmptyStateIcon,
|
EmptyStateIcon,
|
||||||
} from "@ui/ui-library/empty-state";
|
} from "@ui/ui-library/empty-state";
|
||||||
import { CreateDevisModal } from "@ui/components/devis/CreateDevisModal";
|
import {
|
||||||
import { calculateTotal, calculateTax, exportDevisToPdf, statusToText } from "@ui/utils/helpers";
|
Select,
|
||||||
import { ViewDevisModal } from "@ui/components/devis/ViewDevisModal";
|
SelectButton,
|
||||||
import { Badge, BadgeColor } from "@ui/ui-library/badge";
|
SelectListBox,
|
||||||
import { Select, SelectButton } from "@ui/ui-library/select";
|
SelectListItem,
|
||||||
import { SelectListBox } from "@ui/ui-library/select";
|
SelectPopover,
|
||||||
import { SelectPopover } from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { SelectListItem } from "@ui/ui-library/select";
|
import { calculateTax, calculateTotal, exportDevisToPdf, statusToText } from "@ui/utils/helpers";
|
||||||
|
import { AllCommunityModule, ColDef, ModuleRegistry, themeQuartz } from "ag-grid-community";
|
||||||
|
import { AgGridReact } from "ag-grid-react";
|
||||||
|
import { NotebookPenIcon } from "lucide-react";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
ModuleRegistry.registerModules([AllCommunityModule]);
|
ModuleRegistry.registerModules([AllCommunityModule]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import { useState } from "react";
|
|
||||||
import { Strong, Text } from "@ui/ui-library/text";
|
|
||||||
import { Button, ToggleButton } from "@ui/ui-library/button";
|
|
||||||
import { PlusIcon, EditIcon, TrashIcon, CheckIcon, XIcon, ExternalLinkIcon } from "lucide-react";
|
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
|
||||||
import { EventTypeModal } from "@ui/components/EventTypeModal";
|
import { EventTypeModal } from "@ui/components/EventTypeModal";
|
||||||
import { EventTypeConfig, useEventTypes } from "@ui/hooks/event-types";
|
import { EventTypeConfig, useEventTypes } from "@ui/hooks/event-types";
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
|
import { Button, ToggleButton } from "@ui/ui-library/button";
|
||||||
import { CopyButton } from "@ui/ui-library/clipboard";
|
import { CopyButton } from "@ui/ui-library/clipboard";
|
||||||
|
import { Strong, Text } from "@ui/ui-library/text";
|
||||||
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { CheckIcon, EditIcon, ExternalLinkIcon, PlusIcon, TrashIcon, XIcon } from "lucide-react";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export function EventTypesPage() {
|
export function EventTypesPage() {
|
||||||
const user = useUser();
|
const user = useUser();
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import React, { useState } from "react";
|
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { Form } from "@ui/ui-library/form";
|
|
||||||
import { TextField, Label, TextArea, Description } from "@ui/ui-library/field";
|
|
||||||
import { Text } from "@ui/ui-library/text";
|
|
||||||
import { Separator } from "react-aria-components";
|
|
||||||
import { SendIcon, ArrowLeftIcon } from "lucide-react";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { useCreateFeedback } from "@ui/hooks/feedback";
|
import { useCreateFeedback } from "@ui/hooks/feedback";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { Description, Label, TextArea, TextField } from "@ui/ui-library/field";
|
||||||
|
import { Form } from "@ui/ui-library/form";
|
||||||
|
import { Text } from "@ui/ui-library/text";
|
||||||
|
import { ArrowLeftIcon, SendIcon } from "lucide-react";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { Separator } from "react-aria-components";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export interface FeedbackData {
|
export interface FeedbackData {
|
||||||
fd_type: "bug" | "feature" | "improvement" | "other";
|
fd_type: "bug" | "feature" | "improvement" | "other";
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useParams, useNavigate, useSearchParams } from "react-router-dom";
|
|
||||||
import { useUser } from "@ui/providers/UserStoreProvider";
|
|
||||||
import { useJoinTablo } from "@ui/hooks/invite";
|
import { useJoinTablo } from "@ui/hooks/invite";
|
||||||
|
import { useUser } from "@ui/providers/UserStoreProvider";
|
||||||
import { toast } from "@ui/ui-library/toast/toast-queue";
|
import { toast } from "@ui/ui-library/toast/toast-queue";
|
||||||
|
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
|
||||||
|
|
||||||
export const JoinPage = () => {
|
export const JoinPage = () => {
|
||||||
const { tablo_name } = useParams<{ tablo_name: string }>();
|
const { tablo_name } = useParams<{ tablo_name: string }>();
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
import React, { useState, useEffect } from "react";
|
|
||||||
import { useParams } from "react-router-dom";
|
|
||||||
import { KanbanBoard } from "@ui/components/kanban/KanbanBoard";
|
import { KanbanBoard } from "@ui/components/kanban/KanbanBoard";
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
import { useTablosList } from "@ui/hooks/tablos";
|
import { useTablosList } from "@ui/hooks/tablos";
|
||||||
import {
|
import {
|
||||||
KanbanBoard as KanbanBoardType,
|
KanbanBoard as KanbanBoardType,
|
||||||
KanbanTask,
|
|
||||||
KanbanColumn,
|
KanbanColumn,
|
||||||
|
KanbanTask,
|
||||||
TaskStatus,
|
TaskStatus,
|
||||||
} from "@ui/types/kanban.types";
|
} from "@ui/types/kanban.types";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import { useParams } from "react-router-dom";
|
||||||
|
|
||||||
// Mock data for demonstration
|
// Mock data for demonstration
|
||||||
const createMockKanbanBoard = (tabloId: string, tabloName: string): KanbanBoardType => {
|
const createMockKanbanBoard = (tabloId: string, tabloName: string): KanbanBoardType => {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
|
|
||||||
import logo from "../assets/icon.jpg";
|
|
||||||
import { Header } from "@ui/components/header";
|
import { Header } from "@ui/components/header";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import logo from "../assets/icon.jpg";
|
||||||
|
|
||||||
export const LandingPage = () => {
|
export const LandingPage = () => {
|
||||||
window.location.href = "https://www.xtablo.com";
|
window.location.href = "https://www.xtablo.com";
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { Label, Input, TextField, FieldError } from "@ui/ui-library/field";
|
|
||||||
import { useLoginEmail } from "@ui/hooks/auth";
|
|
||||||
import { Form } from "@ui/ui-library/form";
|
|
||||||
import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle";
|
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import { useTheme } from "@ui/contexts/ThemeContext";
|
|
||||||
import { SunIcon, MoonIcon, MonitorIcon } from "lucide-react";
|
|
||||||
import { AnimatedBackground } from "@ui/components/AnimatedBackground";
|
import { AnimatedBackground } from "@ui/components/AnimatedBackground";
|
||||||
|
import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle";
|
||||||
|
import { useTheme } from "@ui/contexts/ThemeContext";
|
||||||
|
import { useLoginEmail } from "@ui/hooks/auth";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { FieldError, Input, Label, TextField } from "@ui/ui-library/field";
|
||||||
|
import { Form } from "@ui/ui-library/form";
|
||||||
|
import { MonitorIcon, MoonIcon, SunIcon } from "lucide-react";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function LoginPage() {
|
export function LoginPage() {
|
||||||
const redirectUrl = localStorage.getItem("redirectUrl");
|
const redirectUrl = localStorage.getItem("redirectUrl");
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useEffect } from "react";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { useSignUpToStream } from "@ui/hooks/auth";
|
import { useSignUpToStream } from "@ui/hooks/auth";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
export const OAuthSigninPage = () => {
|
export const OAuthSigninPage = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
import { useState, useEffect } from "react";
|
import { ImportICSModal } from "@ui/components/ImportICSModal";
|
||||||
|
import { WebcalModal } from "@ui/components/WebcalModal";
|
||||||
|
import { useDeleteEvent, useEventsByTablo } from "@ui/hooks/events";
|
||||||
import { useGetAllTabloAccess, useTablosList } from "@ui/hooks/tablos";
|
import { useGetAllTabloAccess, useTablosList } from "@ui/hooks/tablos";
|
||||||
import { useEventsByTablo, useDeleteEvent } from "@ui/hooks/events";
|
import { EventAndTablo } from "@ui/types/events.types";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { Outlet, useNavigate, useParams } from "react-router-dom";
|
import { downloadICSFile, generateICSFromEvents } from "@ui/utils/helpers";
|
||||||
import { generateICSFromEvents, downloadICSFile } from "@ui/utils/helpers";
|
|
||||||
import { ImportICSModal } from "@ui/components/ImportICSModal";
|
|
||||||
import { WebcalModal } from "@ui/components/WebcalModal";
|
|
||||||
import { FolderInputIcon, PlusIcon } from "lucide-react";
|
import { FolderInputIcon, PlusIcon } from "lucide-react";
|
||||||
import { EventAndTablo } from "@ui/types/events.types";
|
import { useEffect, useState } from "react";
|
||||||
|
import { Outlet, useNavigate, useParams } from "react-router-dom";
|
||||||
|
|
||||||
type ViewType = "month" | "week" | "day";
|
type ViewType = "month" | "week" | "day";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { FieldError, Input, Label, TextField } from "@ui/ui-library/field";
|
||||||
import { Link, useNavigate } from "react-router-dom";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { Label, Input, TextField, FieldError } from "@ui/ui-library/field";
|
|
||||||
import { Form } from "@ui/ui-library/form";
|
import { Form } from "@ui/ui-library/form";
|
||||||
import { Text } from "@ui/ui-library/text";
|
import { Text } from "@ui/ui-library/text";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { Link, useNavigate } from "react-router-dom";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function ResetPasswordPage() {
|
export function ResetPasswordPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { AnimatedBackground } from "@ui/components/AnimatedBackground";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle";
|
||||||
import { Link, useNavigate } from "react-router-dom";
|
import { useTheme } from "@ui/contexts/ThemeContext";
|
||||||
import { useState } from "react";
|
|
||||||
import { Label, Input, TextField, FieldError } from "@ui/ui-library/field";
|
|
||||||
import { useSignUp } from "@ui/hooks/auth";
|
import { useSignUp } from "@ui/hooks/auth";
|
||||||
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { FieldError, Input, Label, TextField } from "@ui/ui-library/field";
|
||||||
import { Form } from "@ui/ui-library/form";
|
import { Form } from "@ui/ui-library/form";
|
||||||
import { Text } from "@ui/ui-library/text";
|
import { Text } from "@ui/ui-library/text";
|
||||||
import { LoginWithGoogle } from "@ui/components/BrandButtons/LoginWithGoogle";
|
import { MonitorIcon, MoonIcon, SunIcon } from "lucide-react";
|
||||||
import { AnimatedBackground } from "@ui/components/AnimatedBackground";
|
import { useState } from "react";
|
||||||
import { useTheme } from "@ui/contexts/ThemeContext";
|
import { Link, useNavigate } from "react-router-dom";
|
||||||
import { SunIcon, MoonIcon, MonitorIcon } from "lucide-react";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function SignUpPage() {
|
export function SignUpPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import React, { useState } from "react";
|
import { SupportTicketData, useCreateSupportTicket } from "@ui/hooks/support";
|
||||||
import { Button } from "@ui/ui-library/button";
|
import { Button } from "@ui/ui-library/button";
|
||||||
|
import { Description, Label, TextArea, TextField } from "@ui/ui-library/field";
|
||||||
import { Form } from "@ui/ui-library/form";
|
import { Form } from "@ui/ui-library/form";
|
||||||
import { TextField, Label, TextArea, Description } from "@ui/ui-library/field";
|
|
||||||
import { Text } from "@ui/ui-library/text";
|
import { Text } from "@ui/ui-library/text";
|
||||||
|
import { ArrowLeftIcon, SendIcon } from "lucide-react";
|
||||||
|
import React, { useState } from "react";
|
||||||
import { Separator } from "react-aria-components";
|
import { Separator } from "react-aria-components";
|
||||||
import { SendIcon, ArrowLeftIcon } from "lucide-react";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import { useCreateSupportTicket, SupportTicketData } from "@ui/hooks/support";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function SupportPage() {
|
export function SupportPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
import { CreateTabloModal } from "@ui/components/CreateTabloModal";
|
import { CreateTabloModal } from "@ui/components/CreateTabloModal";
|
||||||
import { TabloModal } from "@ui/components/TabloModal";
|
|
||||||
import { DeleteTabloModal } from "@ui/components/DeleteTabloModal";
|
import { DeleteTabloModal } from "@ui/components/DeleteTabloModal";
|
||||||
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
|
import { TabloModal } from "@ui/components/TabloModal";
|
||||||
import { TabloTutorial } from "@ui/components/TabloTutorial";
|
import { TabloTutorial } from "@ui/components/TabloTutorial";
|
||||||
|
import { useCreateTablo, useDeleteTablo, useTablosList, useUpdateTablo } from "@ui/hooks/tablos";
|
||||||
|
import { TabloInsert, TabloUpdate, UserTablo } from "@ui/types/tablos.types";
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
SelectButton,
|
SelectButton,
|
||||||
SelectPopover,
|
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItem,
|
SelectListItem,
|
||||||
|
SelectPopover,
|
||||||
} from "@ui/ui-library/select";
|
} from "@ui/ui-library/select";
|
||||||
import { useState, useEffect } from "react";
|
|
||||||
import { useTablosList, useCreateTablo, useUpdateTablo, useDeleteTablo } from "@ui/hooks/tablos";
|
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
|
||||||
import { TabloInsert, TabloUpdate, UserTablo } from "@ui/types/tablos.types";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { HelpCircle } from "lucide-react";
|
import { HelpCircle } from "lucide-react";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
type FilterOption = {
|
type FilterOption = {
|
||||||
id: "all" | "todo" | "in_progress" | "done";
|
id: "all" | "todo" | "in_progress" | "done";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
import { Chat, useCreateChatClient } from "stream-chat-react";
|
import { Chat, useCreateChatClient } from "stream-chat-react";
|
||||||
import { useUser } from "./UserStoreProvider";
|
import { useUser } from "./UserStoreProvider";
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
|
||||||
|
|
||||||
export default function ChatProvider({ children }: { children: React.ReactNode }) {
|
export default function ChatProvider({ children }: { children: React.ReactNode }) {
|
||||||
const apiKey = import.meta.env.VITE_STREAM_CHAT_API_KEY as string;
|
const apiKey = import.meta.env.VITE_STREAM_CHAT_API_KEY as string;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { createStore, StoreApi, useStore } from "zustand";
|
|
||||||
import React from "react";
|
|
||||||
import { useQuery } from "@tanstack/react-query";
|
import { useQuery } from "@tanstack/react-query";
|
||||||
import { Tables } from "@ui/types/database.types";
|
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
||||||
import { useSession } from "@ui/contexts/SessionContext";
|
import { useSession } from "@ui/contexts/SessionContext";
|
||||||
import { api } from "@ui/lib/api";
|
import { api } from "@ui/lib/api";
|
||||||
import { LoadingSpinner } from "@ui/components/LoadingSpinner";
|
import { Tables } from "@ui/types/database.types";
|
||||||
|
import React from "react";
|
||||||
|
import { createStore, StoreApi, useStore } from "zustand";
|
||||||
|
|
||||||
export type User = Tables<"profiles"> & {
|
export type User = Tables<"profiles"> & {
|
||||||
streamToken: string | null;
|
streamToken: string | null;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { Database } from "@ui/types/database.types";
|
import { Database } from "@ui/types/database.types";
|
||||||
import { RemoveNullFromObject } from "@ui/types/removeNull";
|
|
||||||
import { EventInsertInTablo } from "@ui/types/events.types";
|
import { EventInsertInTablo } from "@ui/types/events.types";
|
||||||
|
import { RemoveNullFromObject } from "@ui/types/removeNull";
|
||||||
|
|
||||||
export type UserTablo = RemoveNullFromObject<
|
export type UserTablo = RemoveNullFromObject<
|
||||||
Database["public"]["Views"]["user_tablos"]["Row"],
|
Database["public"]["Views"]["user_tablos"]["Row"],
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { FallbackAvatarProps, getFallbackAvatarDataUrl } from "./initials";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { useImageLoadingStatus } from "./hooks/use-image-loading-status";
|
import { useImageLoadingStatus } from "./hooks/use-image-loading-status";
|
||||||
|
import { FallbackAvatarProps, getFallbackAvatarDataUrl } from "./initials";
|
||||||
|
|
||||||
const AvatarContext = React.createContext<{
|
const AvatarContext = React.createContext<{
|
||||||
badgeId: string;
|
badgeId: string;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
export type { BadgeColor } from "./badge.styles";
|
|
||||||
|
|
||||||
export { getBadgeStyles } from "./badge.styles";
|
|
||||||
|
|
||||||
export { Badge } from "./badge";
|
export { Badge } from "./badge";
|
||||||
|
export type { BadgeColor } from "./badge.styles";
|
||||||
|
export { getBadgeStyles } from "./badge.styles";
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import {
|
import {
|
||||||
Breadcrumb as RACBreadcrumb,
|
|
||||||
Breadcrumbs as RACBreadcrumbs,
|
|
||||||
BreadcrumbProps as RACBreadcrumbProps,
|
|
||||||
BreadcrumbsProps as RACBreadcrumbsProps,
|
|
||||||
LinkProps,
|
|
||||||
composeRenderProps,
|
composeRenderProps,
|
||||||
|
LinkProps,
|
||||||
|
Breadcrumb as RACBreadcrumb,
|
||||||
|
BreadcrumbProps as RACBreadcrumbProps,
|
||||||
|
Breadcrumbs as RACBreadcrumbs,
|
||||||
|
BreadcrumbsProps as RACBreadcrumbsProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Link } from "./link";
|
|
||||||
import { ChevronRightIcon } from "./icons";
|
import { ChevronRightIcon } from "./icons";
|
||||||
|
import { Link } from "./link";
|
||||||
|
|
||||||
export function Breadcrumbs<T extends object>({ className, ...props }: RACBreadcrumbsProps<T>) {
|
export function Breadcrumbs<T extends object>({ className, ...props }: RACBreadcrumbsProps<T>) {
|
||||||
return <RACBreadcrumbs {...props} className={twMerge("flex gap-1", className)} />;
|
return <RACBreadcrumbs {...props} className={twMerge("flex gap-1", className)} />;
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
composeRenderProps,
|
||||||
Button as RACButton,
|
Button as RACButton,
|
||||||
ButtonProps as RACButtonProps,
|
ButtonProps as RACButtonProps,
|
||||||
ToggleButton as RACToggleButton,
|
ToggleButton as RACToggleButton,
|
||||||
ToggleButtonProps as RACToggleButtonProps,
|
|
||||||
ToggleButtonGroup as RACToggleButtonGroup,
|
ToggleButtonGroup as RACToggleButtonGroup,
|
||||||
|
ToggleButtonProps as RACToggleButtonProps,
|
||||||
ToggleButtonGroupProps,
|
ToggleButtonGroupProps,
|
||||||
composeRenderProps,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { AsChildProps, Slot } from "./slot";
|
|
||||||
import { SpinnerIcon } from "./icons";
|
import { SpinnerIcon } from "./icons";
|
||||||
import { NonFousableTooltipTarget, TooltipTrigger, Tooltip } from "./tooltip";
|
import { AsChildProps, Slot } from "./slot";
|
||||||
|
import { NonFousableTooltipTarget, Tooltip, TooltipTrigger } from "./tooltip";
|
||||||
|
|
||||||
type Color = "accent" | "success" | "destructive";
|
type Color = "accent" | "success" | "destructive";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,27 @@
|
||||||
|
import { CalendarDate, getLocalTimeZone, isToday } from "@internationalized/date";
|
||||||
|
import { useDateFormatter } from "@react-aria/i18n";
|
||||||
|
import { CalendarState } from "@react-stately/calendar";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
Heading,
|
|
||||||
Calendar as RACCalendar,
|
|
||||||
CalendarGridHeader as RACCalendarGridHeader,
|
|
||||||
CalendarProps as RACCalendarProps,
|
|
||||||
CalendarCell,
|
CalendarCell,
|
||||||
CalendarGrid,
|
CalendarGrid,
|
||||||
CalendarGridBody,
|
CalendarGridBody,
|
||||||
CalendarHeaderCell,
|
CalendarHeaderCell,
|
||||||
|
CalendarStateContext,
|
||||||
|
composeRenderProps,
|
||||||
DateValue,
|
DateValue,
|
||||||
|
Heading,
|
||||||
|
Calendar as RACCalendar,
|
||||||
|
CalendarGridHeader as RACCalendarGridHeader,
|
||||||
|
CalendarProps as RACCalendarProps,
|
||||||
Text,
|
Text,
|
||||||
useLocale,
|
useLocale,
|
||||||
composeRenderProps,
|
|
||||||
CalendarStateContext,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { Button, ButtonGroup } from "./button";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { ChevronLeftIcon, ChevronRightIcon } from "./icons";
|
import { Button, ButtonGroup } from "./button";
|
||||||
import { CalendarDate, getLocalTimeZone, isToday } from "@internationalized/date";
|
|
||||||
import { CalendarState } from "@react-stately/calendar";
|
|
||||||
import { useDateFormatter } from "@react-aria/i18n";
|
|
||||||
import { NativeSelect, NativeSelectField } from "./native-select";
|
|
||||||
import { Label } from "./field";
|
import { Label } from "./field";
|
||||||
|
import { ChevronLeftIcon, ChevronRightIcon } from "./icons";
|
||||||
|
import { NativeSelect, NativeSelectField } from "./native-select";
|
||||||
|
|
||||||
export type YearRange = number | [yearsBefore: number, yearsAfter: number];
|
export type YearRange = number | [yearsBefore: number, yearsAfter: number];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,10 @@ import {
|
||||||
CheckboxGroupProps as RACCheckboxGroupProps,
|
CheckboxGroupProps as RACCheckboxGroupProps,
|
||||||
CheckboxProps as RACCheckboxProps,
|
CheckboxProps as RACCheckboxProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { groupBox } from "./utils";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { DescriptionContext, DescriptionProvider } from "./field";
|
import { DescriptionContext, DescriptionProvider } from "./field";
|
||||||
import { CheckIcon, MinusIcon } from "./icons";
|
import { CheckIcon, MinusIcon } from "./icons";
|
||||||
|
import { groupBox } from "./utils";
|
||||||
|
|
||||||
export interface CheckboxGroupProps extends Omit<RACCheckboxGroupProps, "children"> {
|
export interface CheckboxGroupProps extends Omit<RACCheckboxGroupProps, "children"> {
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Button, ButtonProps } from "./button";
|
import { Button, ButtonProps } from "./button";
|
||||||
import { useCopyToClipboard } from "./hooks/use-clipboard";
|
import { useCopyToClipboard } from "./hooks/use-clipboard";
|
||||||
import { TooltipTrigger, Tooltip } from "./tooltip";
|
|
||||||
import { CheckIcon, CopyIcon } from "./icons";
|
import { CheckIcon, CopyIcon } from "./icons";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { Tooltip, TooltipTrigger } from "./tooltip";
|
||||||
|
|
||||||
export type ClipboardProps = {
|
export type ClipboardProps = {
|
||||||
timeout?: number;
|
timeout?: number;
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,16 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
ComboBoxStateContext,
|
||||||
|
composeRenderProps,
|
||||||
|
Group,
|
||||||
|
GroupProps,
|
||||||
ComboBox as RACComboBox,
|
ComboBox as RACComboBox,
|
||||||
ComboBoxProps as RACComboBoxProps,
|
ComboBoxProps as RACComboBoxProps,
|
||||||
ComboBoxStateContext,
|
|
||||||
GroupProps,
|
|
||||||
Group,
|
|
||||||
composeRenderProps,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { ButtonProps, Button } from "./button";
|
|
||||||
import { inputField } from "./utils";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { Button, ButtonProps } from "./button";
|
||||||
|
import { Input } from "./field";
|
||||||
|
import { ChevronDownIcon, XIcon } from "./icons";
|
||||||
import {
|
import {
|
||||||
SelectListBox,
|
SelectListBox,
|
||||||
SelectListItemDescription,
|
SelectListItemDescription,
|
||||||
|
|
@ -17,8 +18,7 @@ import {
|
||||||
SelectPopover,
|
SelectPopover,
|
||||||
SelectSection,
|
SelectSection,
|
||||||
} from "./select";
|
} from "./select";
|
||||||
import { Input } from "./field";
|
import { inputField } from "./utils";
|
||||||
import { ChevronDownIcon, XIcon } from "./icons";
|
|
||||||
|
|
||||||
export function ComboBox(props: RACComboBoxProps<object>) {
|
export function ComboBox(props: RACComboBoxProps<object>) {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import {
|
import {
|
||||||
|
composeRenderProps,
|
||||||
|
DateSegment,
|
||||||
|
DateValue,
|
||||||
DateField as RACDateField,
|
DateField as RACDateField,
|
||||||
DateFieldProps as RACDateFieldProps,
|
DateFieldProps as RACDateFieldProps,
|
||||||
DateInput as RACDateInput,
|
DateInput as RACDateInput,
|
||||||
DateInputProps as RACDateInputProps,
|
DateInputProps as RACDateInputProps,
|
||||||
DateSegment,
|
|
||||||
DateValue,
|
|
||||||
composeRenderProps,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { inputField } from "./utils";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { inputField } from "./utils";
|
||||||
|
|
||||||
export interface DateFieldProps<T extends DateValue> extends RACDateFieldProps<T> {}
|
export interface DateFieldProps<T extends DateValue> extends RACDateFieldProps<T> {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
composeRenderProps,
|
||||||
|
DatePickerStateContext,
|
||||||
|
DateValue,
|
||||||
|
Group,
|
||||||
DatePicker as RACDatePicker,
|
DatePicker as RACDatePicker,
|
||||||
DatePickerProps as RACDatePickerProps,
|
DatePickerProps as RACDatePickerProps,
|
||||||
DateValue,
|
|
||||||
DatePickerStateContext,
|
|
||||||
useLocale,
|
useLocale,
|
||||||
Group,
|
|
||||||
composeRenderProps,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Button } from "./button";
|
import { Button } from "./button";
|
||||||
import { Calendar, YearRange } from "./calendar";
|
import { Calendar, YearRange } from "./calendar";
|
||||||
import { DateInput, DateInputProps } from "./date-field";
|
import { DateInput, DateInputProps } from "./date-field";
|
||||||
import { Dialog } from "./dialog";
|
import { Dialog } from "./dialog";
|
||||||
|
import { CalendarIcon } from "./icons/outline/calendar";
|
||||||
import { Popover } from "./popover";
|
import { Popover } from "./popover";
|
||||||
import { inputField } from "./utils";
|
import { inputField } from "./utils";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { CalendarIcon } from "./icons/outline/calendar";
|
|
||||||
|
|
||||||
export interface DatePickerProps<T extends DateValue> extends RACDatePickerProps<T> {}
|
export interface DatePickerProps<T extends DateValue> extends RACDatePickerProps<T> {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,17 +4,17 @@ import {
|
||||||
DateRangePickerProps as AriaDateRangePickerProps,
|
DateRangePickerProps as AriaDateRangePickerProps,
|
||||||
DateRangePickerStateContext,
|
DateRangePickerStateContext,
|
||||||
DateValue,
|
DateValue,
|
||||||
useLocale,
|
|
||||||
Group,
|
Group,
|
||||||
|
useLocale,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Button } from "./button";
|
import { Button } from "./button";
|
||||||
import { DateInput } from "./date-field";
|
import { DateInput } from "./date-field";
|
||||||
import { Dialog } from "./dialog";
|
import { Dialog } from "./dialog";
|
||||||
|
import { CalendarIcon } from "./icons";
|
||||||
import { Popover } from "./popover";
|
import { Popover } from "./popover";
|
||||||
import { RangeCalendar } from "./range-calendar";
|
import { RangeCalendar } from "./range-calendar";
|
||||||
import { composeTailwindRenderProps, inputField } from "./utils";
|
import { composeTailwindRenderProps, inputField } from "./utils";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { CalendarIcon } from "./icons";
|
|
||||||
|
|
||||||
export interface DateRangePickerProps<T extends DateValue> extends AriaDateRangePickerProps<T> {}
|
export interface DateRangePickerProps<T extends DateValue> extends AriaDateRangePickerProps<T> {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
DialogProps as RACDialogProps,
|
|
||||||
Dialog as RACDialog,
|
|
||||||
composeRenderProps,
|
composeRenderProps,
|
||||||
|
Dialog as RACDialog,
|
||||||
|
DialogProps as RACDialogProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import React from "react";
|
|
||||||
import { BaseHeadingProps, Heading } from "./heading";
|
|
||||||
import { Button, ButtonProps } from "./button";
|
import { Button, ButtonProps } from "./button";
|
||||||
import { Text } from "./text";
|
import { BaseHeadingProps, Heading } from "./heading";
|
||||||
import { XIcon } from "./icons";
|
import { XIcon } from "./icons";
|
||||||
|
import { Text } from "./text";
|
||||||
|
|
||||||
export { DialogTrigger } from "react-aria-components";
|
export { DialogTrigger } from "react-aria-components";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { TextProps } from "react-aria-components";
|
import { TextProps } from "react-aria-components";
|
||||||
import { Text } from "./text";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Heading, HeadingProps } from "./heading";
|
import { Heading, HeadingProps } from "./heading";
|
||||||
|
import { Text } from "./text";
|
||||||
|
|
||||||
export function EmptyState({ className, ...props }: React.JSX.IntrinsicElements["div"]) {
|
export function EmptyState({ className, ...props }: React.JSX.IntrinsicElements["div"]) {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
composeRenderProps,
|
||||||
FieldErrorProps,
|
FieldErrorProps,
|
||||||
|
GroupContext,
|
||||||
InputProps,
|
InputProps,
|
||||||
|
LabelContext,
|
||||||
LabelProps,
|
LabelProps,
|
||||||
FieldError as RACFieldError,
|
FieldError as RACFieldError,
|
||||||
Input as RACInput,
|
Input as RACInput,
|
||||||
Label as RACLabel,
|
Label as RACLabel,
|
||||||
TextProps,
|
Text as RACText,
|
||||||
LabelContext,
|
|
||||||
GroupContext,
|
|
||||||
TextFieldProps as RACTextFieldProps,
|
|
||||||
TextField as RACTextField,
|
|
||||||
TextArea as RACTextArea,
|
TextArea as RACTextArea,
|
||||||
TextAreaProps as RACTextAreaProps,
|
TextAreaProps as RACTextAreaProps,
|
||||||
Text as RACText,
|
TextField as RACTextField,
|
||||||
composeRenderProps,
|
TextFieldProps as RACTextFieldProps,
|
||||||
|
TextProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { DisplayLevel, displayLevels, inputField } from "./utils";
|
|
||||||
import { Text } from "./text";
|
import { Text } from "./text";
|
||||||
|
import { DisplayLevel, displayLevels, inputField } from "./utils";
|
||||||
|
|
||||||
// https://react-spectrum.adobe.com/react-aria/Group.html#advanced-customization
|
// https://react-spectrum.adobe.com/react-aria/Group.html#advanced-customization
|
||||||
export function LabeledGroup({
|
export function LabeledGroup({
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ import {
|
||||||
GridListItemProps,
|
GridListItemProps,
|
||||||
GridListProps,
|
GridListProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Checkbox } from "./checkbox";
|
import { Checkbox } from "./checkbox";
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
|
|
||||||
export function GridList<T extends object>({ children, ...props }: GridListProps<T>) {
|
export function GridList<T extends object>({ children, ...props }: GridListProps<T>) {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
import React from "react";
|
|
||||||
import {
|
import {
|
||||||
useFloating,
|
|
||||||
autoUpdate,
|
autoUpdate,
|
||||||
offset,
|
|
||||||
flip,
|
|
||||||
shift,
|
|
||||||
useDismiss,
|
|
||||||
useRole,
|
|
||||||
useInteractions,
|
|
||||||
FloatingFocusManager,
|
FloatingFocusManager,
|
||||||
useHover,
|
flip,
|
||||||
safePolygon,
|
offset,
|
||||||
Placement,
|
Placement,
|
||||||
ReferenceType,
|
ReferenceType,
|
||||||
|
safePolygon,
|
||||||
|
shift,
|
||||||
|
useDismiss,
|
||||||
|
useFloating,
|
||||||
|
useHover,
|
||||||
|
useInteractions,
|
||||||
|
useRole,
|
||||||
} from "@floating-ui/react";
|
} from "@floating-ui/react";
|
||||||
import { Heading, HeadingProps } from "./heading";
|
import React from "react";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { Heading, HeadingProps } from "./heading";
|
||||||
|
|
||||||
interface PopoverOptions {
|
interface PopoverOptions {
|
||||||
placement?: Placement;
|
placement?: Placement;
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
composeRenderProps,
|
||||||
|
ListBoxItemProps,
|
||||||
ListBox as RACListBox,
|
ListBox as RACListBox,
|
||||||
ListBoxItem as RACListBoxItem,
|
ListBoxItem as RACListBoxItem,
|
||||||
ListBoxProps as RACListBoxProps,
|
ListBoxProps as RACListBoxProps,
|
||||||
ListBoxItemProps,
|
|
||||||
composeRenderProps,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
|
|
||||||
export interface ListBoxProps<T> extends Omit<RACListBoxProps<T>, "layout" | "orientation"> {}
|
export interface ListBoxProps<T> extends Omit<RACListBoxProps<T>, "layout" | "orientation"> {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,22 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
Collection,
|
||||||
|
composeRenderProps,
|
||||||
|
Header,
|
||||||
Menu as RACMenu,
|
Menu as RACMenu,
|
||||||
MenuItem as RACMenuItem,
|
MenuItem as RACMenuItem,
|
||||||
MenuProps as RACMenuProps,
|
|
||||||
MenuItemProps as RACMenuItemProps,
|
MenuItemProps as RACMenuItemProps,
|
||||||
composeRenderProps,
|
MenuProps as RACMenuProps,
|
||||||
Separator,
|
|
||||||
Header,
|
|
||||||
MenuSectionProps as RACMenuSectionProps,
|
|
||||||
MenuSection as RACMenuSection,
|
MenuSection as RACMenuSection,
|
||||||
Collection,
|
MenuSectionProps as RACMenuSectionProps,
|
||||||
|
Separator,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Popover, PopoverProps } from "./popover";
|
|
||||||
import { Button, ButtonProps } from "./button";
|
import { Button, ButtonProps } from "./button";
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
|
||||||
import { Small } from "./text";
|
|
||||||
import { CheckIcon, ChevronDownIcon, ChevronRightIcon } from "./icons";
|
import { CheckIcon, ChevronDownIcon, ChevronRightIcon } from "./icons";
|
||||||
|
import { Popover, PopoverProps } from "./popover";
|
||||||
|
import { Small } from "./text";
|
||||||
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
|
|
||||||
export { MenuTrigger, SubmenuTrigger } from "react-aria-components";
|
export { MenuTrigger, SubmenuTrigger } from "react-aria-components";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
Modal as RACModal,
|
||||||
ModalOverlay as RACModalOverlay,
|
ModalOverlay as RACModalOverlay,
|
||||||
ModalOverlayProps as RACModalOverlayProps,
|
ModalOverlayProps as RACModalOverlayProps,
|
||||||
Modal as RACModal,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
|
import { useFilter } from "react-aria";
|
||||||
import {
|
import {
|
||||||
ComboBox,
|
ComboBox,
|
||||||
ComboBoxProps as RACComboBoxProps,
|
|
||||||
Key,
|
|
||||||
ListBoxItemProps,
|
|
||||||
composeRenderProps,
|
composeRenderProps,
|
||||||
GroupProps,
|
|
||||||
LabelContext,
|
|
||||||
Group,
|
Group,
|
||||||
|
GroupProps,
|
||||||
|
Key,
|
||||||
|
LabelContext,
|
||||||
|
ListBoxItemProps,
|
||||||
|
ComboBoxProps as RACComboBoxProps,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { useListData, ListData } from "react-stately";
|
import { ListData, useListData } from "react-stately";
|
||||||
import { useFilter } from "react-aria";
|
|
||||||
import { DescriptionProvider, LabeledGroup, Input, DescriptionContext } from "./field";
|
|
||||||
import { Popover } from "./popover";
|
|
||||||
import { ListBox, ListBoxItem } from "./list-box";
|
|
||||||
import { Button } from "./button";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { Button } from "./button";
|
||||||
|
import { DescriptionContext, DescriptionProvider, Input, LabeledGroup } from "./field";
|
||||||
|
import { ListBox, ListBoxItem } from "./list-box";
|
||||||
|
import { Popover } from "./popover";
|
||||||
import { TagGroup, TagList } from "./tag-group";
|
import { TagGroup, TagList } from "./tag-group";
|
||||||
import { composeTailwindRenderProps, inputField } from "./utils";
|
import { composeTailwindRenderProps, inputField } from "./utils";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { useFocusRing } from "react-aria";
|
import { useFocusRing } from "react-aria";
|
||||||
import { twMerge } from "tailwind-merge";
|
|
||||||
import { inputField } from "./utils";
|
|
||||||
import { DescriptionContext, DescriptionProvider } from "./field";
|
|
||||||
import { LabelContext } from "react-aria-components";
|
import { LabelContext } from "react-aria-components";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
import { DescriptionContext, DescriptionProvider } from "./field";
|
||||||
|
import { inputField } from "./utils";
|
||||||
|
|
||||||
export function NativeSelectField({ className, ...props }: React.JSX.IntrinsicElements["div"]) {
|
export function NativeSelectField({ className, ...props }: React.JSX.IntrinsicElements["div"]) {
|
||||||
const labelId = React.useId();
|
const labelId = React.useId();
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import {
|
import {
|
||||||
|
Group,
|
||||||
|
InputProps,
|
||||||
NumberField as RACNumberField,
|
NumberField as RACNumberField,
|
||||||
NumberFieldProps as RACNumberFieldProps,
|
NumberFieldProps as RACNumberFieldProps,
|
||||||
InputProps,
|
|
||||||
Group,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { Input } from "./field";
|
|
||||||
import { composeTailwindRenderProps, inputField } from "./utils";
|
|
||||||
import { Button } from "./button";
|
import { Button } from "./button";
|
||||||
import { Separator } from "./separator";
|
import { Input } from "./field";
|
||||||
import { MinusIcon, PlusIcon } from "./icons";
|
import { MinusIcon, PlusIcon } from "./icons";
|
||||||
|
import { Separator } from "./separator";
|
||||||
|
import { composeTailwindRenderProps, inputField } from "./utils";
|
||||||
|
|
||||||
export interface NumberFieldProps extends RACNumberFieldProps {}
|
export interface NumberFieldProps extends RACNumberFieldProps {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
|
import { LinkProps } from "react-aria-components";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { Button } from "./button";
|
import { Button } from "./button";
|
||||||
import { Link } from "./link";
|
|
||||||
import { LinkProps } from "react-aria-components";
|
|
||||||
import { ChevronLeftIcon, ChevronRightIcon } from "./icons";
|
import { ChevronLeftIcon, ChevronRightIcon } from "./icons";
|
||||||
|
import { Link } from "./link";
|
||||||
|
|
||||||
export function Pagination({
|
export function Pagination({
|
||||||
className,
|
className,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { InputProps, Group } from "react-aria-components";
|
import { Group, InputProps } from "react-aria-components";
|
||||||
import { Input } from "./field";
|
|
||||||
import { ToggleButton } from "./button";
|
import { ToggleButton } from "./button";
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
import { Input } from "./field";
|
||||||
import { EyeIcon, EyeOffIcon } from "./icons";
|
import { EyeIcon, EyeOffIcon } from "./icons";
|
||||||
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
|
|
||||||
export function PasswordInput({ className, ...props }: InputProps) {
|
export function PasswordInput({ className, ...props }: InputProps) {
|
||||||
const [isPasswordVisible, setIsPasswordVisible] = React.useState(false);
|
const [isPasswordVisible, setIsPasswordVisible] = React.useState(false);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
PopoverContext,
|
||||||
Popover as RACPopover,
|
Popover as RACPopover,
|
||||||
PopoverProps as RACPopoverProps,
|
PopoverProps as RACPopoverProps,
|
||||||
useSlottedContext,
|
useSlottedContext,
|
||||||
PopoverContext,
|
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import React from "react";
|
|
||||||
import { composeTailwindRenderProps } from "./utils";
|
import { composeTailwindRenderProps } from "./utils";
|
||||||
|
|
||||||
export interface PopoverProps extends Omit<RACPopoverProps, "children"> {
|
export interface PopoverProps extends Omit<RACPopoverProps, "children"> {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
|
import { getLocalTimeZone, isToday } from "@internationalized/date";
|
||||||
import {
|
import {
|
||||||
RangeCalendar as RACRangeCalendar,
|
|
||||||
RangeCalendarProps as RACRangeCalendarProps,
|
|
||||||
CalendarCell,
|
CalendarCell,
|
||||||
CalendarGrid,
|
CalendarGrid,
|
||||||
CalendarGridBody,
|
CalendarGridBody,
|
||||||
DateValue,
|
|
||||||
Text,
|
|
||||||
composeRenderProps,
|
composeRenderProps,
|
||||||
|
DateValue,
|
||||||
|
RangeCalendar as RACRangeCalendar,
|
||||||
|
RangeCalendarProps as RACRangeCalendarProps,
|
||||||
|
Text,
|
||||||
} from "react-aria-components";
|
} from "react-aria-components";
|
||||||
import { CalendarGridHeader, CalendarHeader } from "./calendar";
|
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
import { getLocalTimeZone, isToday } from "@internationalized/date";
|
import { CalendarGridHeader, CalendarHeader } from "./calendar";
|
||||||
|
|
||||||
export interface RangeCalendarProps<T extends DateValue>
|
export interface RangeCalendarProps<T extends DateValue>
|
||||||
extends Omit<RACRangeCalendarProps<T>, "visibleDuration"> {
|
extends Omit<RACRangeCalendarProps<T>, "visibleDuration"> {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue