diff --git a/apps/docs/.storybook/main.js b/apps/docs/.storybook/main.js index dc2c3e52..21cd4300 100644 --- a/apps/docs/.storybook/main.js +++ b/apps/docs/.storybook/main.js @@ -24,6 +24,7 @@ const config = { '@storybook/addon-designs', '@chromatic-com/storybook', '@storybook/addon-vitest', + 'storybook-addon-pseudo-states', ], framework: { name: '@storybook/react-vite', diff --git a/apps/docs/.storybook/preview-head.html b/apps/docs/.storybook/preview-head.html index 8cb4c58b..0aec40a1 100644 --- a/apps/docs/.storybook/preview-head.html +++ b/apps/docs/.storybook/preview-head.html @@ -1,3 +1,9 @@ + + diff --git a/apps/docs/package.json b/apps/docs/package.json index 95dec48d..9d4cfab5 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -46,6 +46,7 @@ "remark-gfm": "^4.0.1", "serve": "^14.2.1", "storybook": "^10.4.6", + "storybook-addon-pseudo-states": "~10.4.6", "vite": "8.2.1", "vitest": "^4.1.11" } diff --git a/packages/typescript-config/vite.config.extend.ts b/packages/typescript-config/vite.config.extend.ts index 709af170..171a5f18 100644 --- a/packages/typescript-config/vite.config.extend.ts +++ b/packages/typescript-config/vite.config.extend.ts @@ -28,6 +28,7 @@ export const externalPatterns = [ '@tanstack/react-virtual', '@tanstack/react-table', /@radix-ui\/.*$/, + /^@base-ui\/react(\/.*)?$/, /^@signozhq\/.*$/, '@chenglou/pretext', 'copy-text-to-clipboard', diff --git a/packages/ui/package.json b/packages/ui/package.json index dc76691e..5f79df21 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -424,6 +424,7 @@ "type-check": "tsgo --noEmit" }, "dependencies": { + "@base-ui/react": "1.7.0", "@chenglou/pretext": "^0.0.8", "@radix-ui/react-checkbox": "^1.3.9", "@radix-ui/react-dialog": "^1.1.21", @@ -460,6 +461,7 @@ "@repo/typescript-config": "workspace:*", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", + "@testing-library/user-event": "^14.6.1", "@types/node": "25.9.4", "@types/react": "^18.2.61", "@vitejs/plugin-react": "^6.1.1", diff --git a/packages/ui/vitest.config.ts b/packages/ui/vitest.config.ts index 65bfea5b..02ebd1cc 100644 --- a/packages/ui/vitest.config.ts +++ b/packages/ui/vitest.config.ts @@ -20,5 +20,10 @@ export default defineConfig({ include: ['src/**/*.test.{ts,tsx}'], setupFiles: ['./vitest.setup.ts'], globals: true, + typecheck: { + enabled: true, + include: ['src/**/*.test-d.{ts,tsx}'], + tsconfig: './tsconfig.json', + }, }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 907efb80..1c0e7273 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,6 +205,9 @@ importers: storybook: specifier: ^10.4.6 version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.28)(react@18.3.1) + storybook-addon-pseudo-states: + specifier: ~10.4.6 + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.28)(react@18.3.1)) vite: specifier: 8.2.1 version: 8.2.1(@types/node@25.6.2)(esbuild@0.25.0)(jiti@2.7.0)(sass-embedded@1.97.3)(sass@1.78.0)(yaml@2.9.0) @@ -248,6 +251,9 @@ importers: packages/ui: dependencies: + '@base-ui/react': + specifier: 1.7.0 + version: 1.7.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chenglou/pretext': specifier: ^0.0.8 version: 0.0.8 @@ -360,6 +366,9 @@ importers: '@testing-library/react': specifier: ^16.0.1 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@10.4.1) '@types/node': specifier: 25.6.2 version: 25.6.2 @@ -480,6 +489,33 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@base-ui/react@1.7.0': + resolution: {integrity: sha512-j+8QjX44C32jrXD/qyEAGpFr70FRpGL2CY61mQd9nBPWN737CK0xxD1ceJ055rW4RtdvFDT1e7otzdlfxvsYug==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + + '@base-ui/utils@0.3.2': + resolution: {integrity: sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -4561,6 +4597,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + reselect@5.3.0: + resolution: {integrity: sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4810,6 +4849,11 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + storybook-addon-pseudo-states@10.4.6: + resolution: {integrity: sha512-yP6GgUTj2uju34ZLKzrFJz9uS+9Nn6uH3Wprei5x/KS6CSbLOuXf3pBhAfi+ur2y4Qm3l/thGyHYVcoACCbgIg==} + peerDependencies: + storybook: ^10.4.6 + storybook@10.4.6: resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==} hasBin: true @@ -5441,6 +5485,31 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@base-ui/react@1.7.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.29.7 + '@base-ui/utils': 0.3.2(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.12 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@date-fns/tz': 1.4.1 + '@types/react': 18.3.28 + date-fns: 4.1.0 + + '@base-ui/utils@0.3.2(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.12 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + reselect: 5.3.0 + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.28 + '@bcoe/v8-coverage@1.0.2': {} '@blazediff/core@1.9.1': {} @@ -9344,6 +9413,8 @@ snapshots: require-from-string@2.0.2: {} + reselect@5.3.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -9581,6 +9652,10 @@ snapshots: std-env@4.1.0: {} + storybook-addon-pseudo-states@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.28)(react@18.3.1)): + dependencies: + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.28)(react@18.3.1) + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.28)(react@18.3.1): dependencies: '@storybook/global': 5.0.0