@dashforge/tw 0.1.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.swcrc +29 -0
- package/CHANGELOG.md +131 -0
- package/LICENSE +21 -0
- package/README.md +244 -0
- package/dist/components/AppShell/AppShell.d.ts +32 -0
- package/dist/components/AppShell/AppShell.d.ts.map +1 -0
- package/dist/components/AppShell/appShell.types.d.ts +62 -0
- package/dist/components/AppShell/appShell.types.d.ts.map +1 -0
- package/dist/components/AppShell/appShell.variants.d.ts +65 -0
- package/dist/components/AppShell/appShell.variants.d.ts.map +1 -0
- package/dist/components/Autocomplete/Autocomplete.d.ts +32 -0
- package/dist/components/Autocomplete/Autocomplete.d.ts.map +1 -0
- package/dist/components/Autocomplete/autocomplete.types.d.ts +214 -0
- package/dist/components/Autocomplete/autocomplete.types.d.ts.map +1 -0
- package/dist/components/Autocomplete/autocomplete.variants.d.ts +214 -0
- package/dist/components/Autocomplete/autocomplete.variants.d.ts.map +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +23 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts +98 -0
- package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts.map +1 -0
- package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts +85 -0
- package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +44 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/button.types.d.ts +66 -0
- package/dist/components/Button/button.types.d.ts.map +1 -0
- package/dist/components/Button/button.variants.d.ts +104 -0
- package/dist/components/Button/button.variants.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +31 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/checkbox.types.d.ts +86 -0
- package/dist/components/Checkbox/checkbox.types.d.ts.map +1 -0
- package/dist/components/Checkbox/checkbox.variants.d.ts +109 -0
- package/dist/components/Checkbox/checkbox.variants.d.ts.map +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +38 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ConfirmDialog/confirmDialog.types.d.ts +80 -0
- package/dist/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -0
- package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts +90 -0
- package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts.map +1 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +49 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts +95 -0
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -0
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts +165 -0
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts.map +1 -0
- package/dist/components/LeftNav/LeftNav.d.ts +34 -0
- package/dist/components/LeftNav/LeftNav.d.ts.map +1 -0
- package/dist/components/LeftNav/leftNav.types.d.ts +136 -0
- package/dist/components/LeftNav/leftNav.types.d.ts.map +1 -0
- package/dist/components/LeftNav/leftNav.variants.d.ts +143 -0
- package/dist/components/LeftNav/leftNav.variants.d.ts.map +1 -0
- package/dist/components/NumberField/NumberField.d.ts +18 -0
- package/dist/components/NumberField/NumberField.d.ts.map +1 -0
- package/dist/components/NumberField/numberField.types.d.ts +79 -0
- package/dist/components/NumberField/numberField.types.d.ts.map +1 -0
- package/dist/components/NumberField/numberField.variants.d.ts +169 -0
- package/dist/components/NumberField/numberField.variants.d.ts.map +1 -0
- package/dist/components/OTPField/OTPField.d.ts +25 -0
- package/dist/components/OTPField/OTPField.d.ts.map +1 -0
- package/dist/components/OTPField/otpField.types.d.ts +74 -0
- package/dist/components/OTPField/otpField.types.d.ts.map +1 -0
- package/dist/components/OTPField/otpField.variants.d.ts +105 -0
- package/dist/components/OTPField/otpField.variants.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +35 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup/radioGroup.types.d.ts +103 -0
- package/dist/components/RadioGroup/radioGroup.types.d.ts.map +1 -0
- package/dist/components/RadioGroup/radioGroup.variants.d.ts +166 -0
- package/dist/components/RadioGroup/radioGroup.variants.d.ts.map +1 -0
- package/dist/components/Snackbar/Snackbar.d.ts +37 -0
- package/dist/components/Snackbar/Snackbar.d.ts.map +1 -0
- package/dist/components/Snackbar/snackbar.types.d.ts +86 -0
- package/dist/components/Snackbar/snackbar.types.d.ts.map +1 -0
- package/dist/components/Snackbar/snackbar.variants.d.ts +153 -0
- package/dist/components/Snackbar/snackbar.variants.d.ts.map +1 -0
- package/dist/components/Switch/Switch.d.ts +15 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/switch.types.d.ts +47 -0
- package/dist/components/Switch/switch.types.d.ts.map +1 -0
- package/dist/components/Switch/switch.variants.d.ts +105 -0
- package/dist/components/Switch/switch.variants.d.ts.map +1 -0
- package/dist/components/TextField/TextField.d.ts +25 -0
- package/dist/components/TextField/TextField.d.ts.map +1 -0
- package/dist/components/TextField/textField.types.d.ts +72 -0
- package/dist/components/TextField/textField.types.d.ts.map +1 -0
- package/dist/components/TextField/textField.variants.d.ts +160 -0
- package/dist/components/TextField/textField.variants.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +16 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/textarea.types.d.ts +63 -0
- package/dist/components/Textarea/textarea.types.d.ts.map +1 -0
- package/dist/components/Textarea/textarea.variants.d.ts +197 -0
- package/dist/components/Textarea/textarea.variants.d.ts.map +1 -0
- package/dist/components/TopBar/TopBar.d.ts +33 -0
- package/dist/components/TopBar/TopBar.d.ts.map +1 -0
- package/dist/components/TopBar/topBar.types.d.ts +49 -0
- package/dist/components/TopBar/topBar.types.d.ts.map +1 -0
- package/dist/components/TopBar/topBar.variants.d.ts +79 -0
- package/dist/components/TopBar/topBar.variants.d.ts.map +1 -0
- package/dist/components/_shared/resolveValidationState.d.ts +42 -0
- package/dist/components/_shared/resolveValidationState.d.ts.map +1 -0
- package/dist/hooks/useAccessState.d.ts +37 -0
- package/dist/hooks/useAccessState.d.ts.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +4958 -0
- package/dist/src/components/AppShell/AppShell.d.ts +32 -0
- package/dist/src/components/AppShell/AppShell.d.ts.map +1 -0
- package/dist/src/components/AppShell/appShell.types.d.ts +62 -0
- package/dist/src/components/AppShell/appShell.types.d.ts.map +1 -0
- package/dist/src/components/AppShell/appShell.variants.d.ts +65 -0
- package/dist/src/components/AppShell/appShell.variants.d.ts.map +1 -0
- package/dist/src/components/Autocomplete/Autocomplete.d.ts +32 -0
- package/dist/src/components/Autocomplete/Autocomplete.d.ts.map +1 -0
- package/dist/src/components/Autocomplete/autocomplete.types.d.ts +214 -0
- package/dist/src/components/Autocomplete/autocomplete.types.d.ts.map +1 -0
- package/dist/src/components/Autocomplete/autocomplete.variants.d.ts +214 -0
- package/dist/src/components/Autocomplete/autocomplete.variants.d.ts.map +1 -0
- package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts +23 -0
- package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts +98 -0
- package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts.map +1 -0
- package/dist/src/components/Breadcrumbs/breadcrumbs.variants.d.ts +85 -0
- package/dist/src/components/Breadcrumbs/breadcrumbs.variants.d.ts.map +1 -0
- package/dist/src/components/Button/Button.d.ts +44 -0
- package/dist/src/components/Button/Button.d.ts.map +1 -0
- package/dist/src/components/Button/button.types.d.ts +66 -0
- package/dist/src/components/Button/button.types.d.ts.map +1 -0
- package/dist/src/components/Button/button.variants.d.ts +104 -0
- package/dist/src/components/Button/button.variants.d.ts.map +1 -0
- package/dist/src/components/Checkbox/Checkbox.d.ts +31 -0
- package/dist/src/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/src/components/Checkbox/checkbox.types.d.ts +86 -0
- package/dist/src/components/Checkbox/checkbox.types.d.ts.map +1 -0
- package/dist/src/components/Checkbox/checkbox.variants.d.ts +109 -0
- package/dist/src/components/Checkbox/checkbox.variants.d.ts.map +1 -0
- package/dist/src/components/ConfirmDialog/ConfirmDialog.d.ts +38 -0
- package/dist/src/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts +80 -0
- package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -0
- package/dist/src/components/ConfirmDialog/confirmDialog.variants.d.ts +90 -0
- package/dist/src/components/ConfirmDialog/confirmDialog.variants.d.ts.map +1 -0
- package/dist/src/components/DateTimePicker/DateTimePicker.d.ts +49 -0
- package/dist/src/components/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts +95 -0
- package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -0
- package/dist/src/components/DateTimePicker/dateTimePicker.variants.d.ts +165 -0
- package/dist/src/components/DateTimePicker/dateTimePicker.variants.d.ts.map +1 -0
- package/dist/src/components/LeftNav/LeftNav.d.ts +34 -0
- package/dist/src/components/LeftNav/LeftNav.d.ts.map +1 -0
- package/dist/src/components/LeftNav/leftNav.types.d.ts +136 -0
- package/dist/src/components/LeftNav/leftNav.types.d.ts.map +1 -0
- package/dist/src/components/LeftNav/leftNav.variants.d.ts +143 -0
- package/dist/src/components/LeftNav/leftNav.variants.d.ts.map +1 -0
- package/dist/src/components/NumberField/NumberField.d.ts +18 -0
- package/dist/src/components/NumberField/NumberField.d.ts.map +1 -0
- package/dist/src/components/NumberField/numberField.types.d.ts +79 -0
- package/dist/src/components/NumberField/numberField.types.d.ts.map +1 -0
- package/dist/src/components/NumberField/numberField.variants.d.ts +169 -0
- package/dist/src/components/NumberField/numberField.variants.d.ts.map +1 -0
- package/dist/src/components/OTPField/OTPField.d.ts +25 -0
- package/dist/src/components/OTPField/OTPField.d.ts.map +1 -0
- package/dist/src/components/OTPField/otpField.types.d.ts +74 -0
- package/dist/src/components/OTPField/otpField.types.d.ts.map +1 -0
- package/dist/src/components/OTPField/otpField.variants.d.ts +105 -0
- package/dist/src/components/OTPField/otpField.variants.d.ts.map +1 -0
- package/dist/src/components/RadioGroup/RadioGroup.d.ts +35 -0
- package/dist/src/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/src/components/RadioGroup/radioGroup.types.d.ts +103 -0
- package/dist/src/components/RadioGroup/radioGroup.types.d.ts.map +1 -0
- package/dist/src/components/RadioGroup/radioGroup.variants.d.ts +166 -0
- package/dist/src/components/RadioGroup/radioGroup.variants.d.ts.map +1 -0
- package/dist/src/components/Snackbar/Snackbar.d.ts +37 -0
- package/dist/src/components/Snackbar/Snackbar.d.ts.map +1 -0
- package/dist/src/components/Snackbar/snackbar.types.d.ts +86 -0
- package/dist/src/components/Snackbar/snackbar.types.d.ts.map +1 -0
- package/dist/src/components/Snackbar/snackbar.variants.d.ts +153 -0
- package/dist/src/components/Snackbar/snackbar.variants.d.ts.map +1 -0
- package/dist/src/components/Switch/Switch.d.ts +15 -0
- package/dist/src/components/Switch/Switch.d.ts.map +1 -0
- package/dist/src/components/Switch/switch.types.d.ts +47 -0
- package/dist/src/components/Switch/switch.types.d.ts.map +1 -0
- package/dist/src/components/Switch/switch.variants.d.ts +105 -0
- package/dist/src/components/Switch/switch.variants.d.ts.map +1 -0
- package/dist/src/components/TextField/TextField.d.ts +25 -0
- package/dist/src/components/TextField/TextField.d.ts.map +1 -0
- package/dist/src/components/TextField/textField.types.d.ts +72 -0
- package/dist/src/components/TextField/textField.types.d.ts.map +1 -0
- package/dist/src/components/TextField/textField.variants.d.ts +160 -0
- package/dist/src/components/TextField/textField.variants.d.ts.map +1 -0
- package/dist/src/components/Textarea/Textarea.d.ts +16 -0
- package/dist/src/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/src/components/Textarea/textarea.types.d.ts +63 -0
- package/dist/src/components/Textarea/textarea.types.d.ts.map +1 -0
- package/dist/src/components/Textarea/textarea.variants.d.ts +197 -0
- package/dist/src/components/Textarea/textarea.variants.d.ts.map +1 -0
- package/dist/src/components/TopBar/TopBar.d.ts +33 -0
- package/dist/src/components/TopBar/TopBar.d.ts.map +1 -0
- package/dist/src/components/TopBar/topBar.types.d.ts +49 -0
- package/dist/src/components/TopBar/topBar.types.d.ts.map +1 -0
- package/dist/src/components/TopBar/topBar.variants.d.ts +79 -0
- package/dist/src/components/TopBar/topBar.variants.d.ts.map +1 -0
- package/dist/src/components/_shared/resolveValidationState.d.ts +42 -0
- package/dist/src/components/_shared/resolveValidationState.d.ts.map +1 -0
- package/dist/src/hooks/useAccessState.d.ts +37 -0
- package/dist/src/hooks/useAccessState.d.ts.map +1 -0
- package/dist/src/index.d.ts +82 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/utils/cn.d.ts +26 -0
- package/dist/src/utils/cn.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/utils/cn.d.ts +26 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/eslint.config.mjs +47 -0
- package/package.json +37 -0
- package/project.json +15 -0
- package/rollup.config.cjs +16 -0
- package/src/components/AppShell/AppShell.test.tsx +223 -0
- package/src/components/AppShell/AppShell.tsx +114 -0
- package/src/components/AppShell/appShell.types.ts +49 -0
- package/src/components/AppShell/appShell.variants.ts +48 -0
- package/src/components/Autocomplete/Autocomplete.perf.test.tsx +225 -0
- package/src/components/Autocomplete/Autocomplete.test.tsx +556 -0
- package/src/components/Autocomplete/Autocomplete.tsx +996 -0
- package/src/components/Autocomplete/autocomplete.types.ts +198 -0
- package/src/components/Autocomplete/autocomplete.variants.ts +135 -0
- package/src/components/Breadcrumbs/Breadcrumbs.perf.test.tsx +125 -0
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +231 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +203 -0
- package/src/components/Breadcrumbs/breadcrumbs.types.ts +87 -0
- package/src/components/Breadcrumbs/breadcrumbs.variants.ts +49 -0
- package/src/components/Button/Button.test.tsx +183 -0
- package/src/components/Button/Button.tsx +139 -0
- package/src/components/Button/button.types.ts +74 -0
- package/src/components/Button/button.variants.ts +159 -0
- package/src/components/Checkbox/Checkbox.test.tsx +146 -0
- package/src/components/Checkbox/Checkbox.tsx +228 -0
- package/src/components/Checkbox/checkbox.types.ts +88 -0
- package/src/components/Checkbox/checkbox.variants.ts +68 -0
- package/src/components/ConfirmDialog/ConfirmDialog.perf.test.tsx +172 -0
- package/src/components/ConfirmDialog/ConfirmDialog.test.tsx +311 -0
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +252 -0
- package/src/components/ConfirmDialog/confirmDialog.types.ts +70 -0
- package/src/components/ConfirmDialog/confirmDialog.variants.ts +76 -0
- package/src/components/DateTimePicker/DateTimePicker.perf.test.tsx +153 -0
- package/src/components/DateTimePicker/DateTimePicker.test.tsx +204 -0
- package/src/components/DateTimePicker/DateTimePicker.tsx +319 -0
- package/src/components/DateTimePicker/dateTimePicker.types.ts +83 -0
- package/src/components/DateTimePicker/dateTimePicker.variants.ts +84 -0
- package/src/components/LeftNav/LeftNav.perf.test.tsx +172 -0
- package/src/components/LeftNav/LeftNav.test.tsx +302 -0
- package/src/components/LeftNav/LeftNav.tsx +330 -0
- package/src/components/LeftNav/leftNav.types.ts +120 -0
- package/src/components/LeftNav/leftNav.variants.ts +96 -0
- package/src/components/NumberField/NumberField.test.tsx +83 -0
- package/src/components/NumberField/NumberField.tsx +293 -0
- package/src/components/NumberField/numberField.types.ts +72 -0
- package/src/components/NumberField/numberField.variants.ts +94 -0
- package/src/components/OTPField/OTPField.test.tsx +121 -0
- package/src/components/OTPField/OTPField.tsx +250 -0
- package/src/components/OTPField/otpField.types.ts +58 -0
- package/src/components/OTPField/otpField.variants.ts +72 -0
- package/src/components/RadioGroup/RadioGroup.test.tsx +140 -0
- package/src/components/RadioGroup/RadioGroup.tsx +261 -0
- package/src/components/RadioGroup/radioGroup.types.ts +85 -0
- package/src/components/RadioGroup/radioGroup.variants.ts +87 -0
- package/src/components/Snackbar/Snackbar.perf.test.tsx +144 -0
- package/src/components/Snackbar/Snackbar.test.tsx +327 -0
- package/src/components/Snackbar/Snackbar.tsx +298 -0
- package/src/components/Snackbar/snackbar.types.ts +83 -0
- package/src/components/Snackbar/snackbar.variants.ts +72 -0
- package/src/components/Switch/Switch.test.tsx +131 -0
- package/src/components/Switch/Switch.tsx +158 -0
- package/src/components/Switch/switch.types.ts +36 -0
- package/src/components/Switch/switch.variants.ts +65 -0
- package/src/components/TextField/TextField.test.tsx +194 -0
- package/src/components/TextField/TextField.tsx +216 -0
- package/src/components/TextField/textField.types.ts +70 -0
- package/src/components/TextField/textField.variants.ts +87 -0
- package/src/components/Textarea/Textarea.test.tsx +75 -0
- package/src/components/Textarea/Textarea.tsx +190 -0
- package/src/components/Textarea/textarea.types.ts +60 -0
- package/src/components/Textarea/textarea.variants.ts +85 -0
- package/src/components/TopBar/TopBar.test.tsx +129 -0
- package/src/components/TopBar/TopBar.tsx +66 -0
- package/src/components/TopBar/topBar.types.ts +42 -0
- package/src/components/TopBar/topBar.variants.ts +38 -0
- package/src/components/_shared/resolveValidationState.ts +60 -0
- package/src/hooks/useAccessState.spec.tsx +161 -0
- package/src/hooks/useAccessState.ts +81 -0
- package/src/index.ts +191 -0
- package/src/utils/cn.spec.ts +16 -0
- package/src/utils/cn.ts +29 -0
- package/tsconfig.json +13 -0
- package/tsconfig.lib.json +55 -0
- package/tsconfig.spec.json +34 -0
- package/vite.config.ts +25 -0
- package/vitest.config.mts +22 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dashforge/tw
|
|
3
|
+
*
|
|
4
|
+
* Tailwind-rendered UI components for the Dashforge ecosystem.
|
|
5
|
+
*
|
|
6
|
+
* Architectural contract (plan v2 — 2026-05-15):
|
|
7
|
+
* - **Props-driven**: each Tailwind utility that matters for the public
|
|
8
|
+
* API becomes a typed prop. `sx` + `slotProps` are escape hatches.
|
|
9
|
+
* - **Tokens as source of truth**: components reference colors /
|
|
10
|
+
* spacing / radius / fontSize through `@dashforge/tw-tokens` via the
|
|
11
|
+
* `dashforgePreset()` from `@dashforge/tw-theme`.
|
|
12
|
+
* - **Shared bridge with MUI side**: both ecosystems consume
|
|
13
|
+
* `@dashforge/forms` + `@dashforge/ui-core` + `@dashforge/rbac`.
|
|
14
|
+
* No styling code is shared.
|
|
15
|
+
* - **Variant API**: `tailwind-variants` (TV) with `slots` +
|
|
16
|
+
* `compoundVariants`.
|
|
17
|
+
*
|
|
18
|
+
* F3 surface (tier-1, this release):
|
|
19
|
+
* - `<Button>` (action, RBAC only, `asChild` polymorphism)
|
|
20
|
+
* - `<TextField>` (bridge-integrated, 7 slots)
|
|
21
|
+
* - `<Checkbox>` (bridge-integrated, Radix Checkbox primitive)
|
|
22
|
+
* - `<Switch>` (bridge-integrated, Radix Switch primitive)
|
|
23
|
+
*
|
|
24
|
+
* @module @dashforge/tw
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
// ───── Components ─────
|
|
28
|
+
export { Button } from './components/Button/Button.js';
|
|
29
|
+
export type { ButtonProps } from './components/Button/button.types.js';
|
|
30
|
+
export { buttonVariants } from './components/Button/button.variants.js';
|
|
31
|
+
|
|
32
|
+
export { TextField } from './components/TextField/TextField.js';
|
|
33
|
+
export type {
|
|
34
|
+
TextFieldProps,
|
|
35
|
+
TextFieldSlotProps,
|
|
36
|
+
} from './components/TextField/textField.types.js';
|
|
37
|
+
export { textFieldVariants } from './components/TextField/textField.variants.js';
|
|
38
|
+
|
|
39
|
+
export { Checkbox } from './components/Checkbox/Checkbox.js';
|
|
40
|
+
export type {
|
|
41
|
+
CheckboxProps,
|
|
42
|
+
CheckboxSlotProps,
|
|
43
|
+
} from './components/Checkbox/checkbox.types.js';
|
|
44
|
+
export { checkboxVariants } from './components/Checkbox/checkbox.variants.js';
|
|
45
|
+
|
|
46
|
+
export { Switch } from './components/Switch/Switch.js';
|
|
47
|
+
export type {
|
|
48
|
+
SwitchProps,
|
|
49
|
+
SwitchSlotProps,
|
|
50
|
+
} from './components/Switch/switch.types.js';
|
|
51
|
+
export { switchVariants } from './components/Switch/switch.variants.js';
|
|
52
|
+
|
|
53
|
+
// F4 tier-2: bridge-integrated multi-choice + multi-line input
|
|
54
|
+
|
|
55
|
+
export { RadioGroup } from './components/RadioGroup/RadioGroup.js';
|
|
56
|
+
export type {
|
|
57
|
+
RadioGroupProps,
|
|
58
|
+
RadioGroupOption,
|
|
59
|
+
RadioGroupSlotProps,
|
|
60
|
+
} from './components/RadioGroup/radioGroup.types.js';
|
|
61
|
+
export { radioGroupVariants } from './components/RadioGroup/radioGroup.variants.js';
|
|
62
|
+
|
|
63
|
+
export { Textarea } from './components/Textarea/Textarea.js';
|
|
64
|
+
export type {
|
|
65
|
+
TextareaProps,
|
|
66
|
+
TextareaSlotProps,
|
|
67
|
+
} from './components/Textarea/textarea.types.js';
|
|
68
|
+
export { textareaVariants } from './components/Textarea/textarea.variants.js';
|
|
69
|
+
|
|
70
|
+
// F4-B tier-2 final: numeric input + segmented OTP
|
|
71
|
+
|
|
72
|
+
export { NumberField } from './components/NumberField/NumberField.js';
|
|
73
|
+
export type {
|
|
74
|
+
NumberFieldProps,
|
|
75
|
+
NumberFieldSlotProps,
|
|
76
|
+
} from './components/NumberField/numberField.types.js';
|
|
77
|
+
export { numberFieldVariants } from './components/NumberField/numberField.variants.js';
|
|
78
|
+
|
|
79
|
+
export { OTPField } from './components/OTPField/OTPField.js';
|
|
80
|
+
export type {
|
|
81
|
+
OTPFieldProps,
|
|
82
|
+
OTPFieldSlotProps,
|
|
83
|
+
OTPFieldMode,
|
|
84
|
+
} from './components/OTPField/otpField.types.js';
|
|
85
|
+
export { otpFieldVariants } from './components/OTPField/otpField.variants.js';
|
|
86
|
+
|
|
87
|
+
// F5-A tier-3: AAA-grade single-select combobox via React Aria
|
|
88
|
+
|
|
89
|
+
export { Autocomplete } from './components/Autocomplete/Autocomplete.js';
|
|
90
|
+
export type {
|
|
91
|
+
AutocompleteProps,
|
|
92
|
+
AutocompleteOption,
|
|
93
|
+
AutocompleteSlotProps,
|
|
94
|
+
AutocompleteValue,
|
|
95
|
+
} from './components/Autocomplete/autocomplete.types.js';
|
|
96
|
+
export { autocompleteVariants } from './components/Autocomplete/autocomplete.variants.js';
|
|
97
|
+
|
|
98
|
+
// F5-B tier-3: native HTML5 date / time / datetime picker, bridge-integrated.
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
DateTimePicker,
|
|
102
|
+
isoToInputValue,
|
|
103
|
+
} from './components/DateTimePicker/DateTimePicker.js';
|
|
104
|
+
export type {
|
|
105
|
+
DateTimePickerProps,
|
|
106
|
+
DateTimePickerMode,
|
|
107
|
+
DateTimePickerSlotProps,
|
|
108
|
+
} from './components/DateTimePicker/dateTimePicker.types.js';
|
|
109
|
+
export { dateTimePickerVariants } from './components/DateTimePicker/dateTimePicker.variants.js';
|
|
110
|
+
|
|
111
|
+
// F6 layout: router-agnostic navigation primitives.
|
|
112
|
+
|
|
113
|
+
export { Breadcrumbs } from './components/Breadcrumbs/Breadcrumbs.js';
|
|
114
|
+
export type {
|
|
115
|
+
BreadcrumbsProps,
|
|
116
|
+
BreadcrumbItem,
|
|
117
|
+
BreadcrumbsSlotProps,
|
|
118
|
+
BreadcrumbLinkComponent,
|
|
119
|
+
} from './components/Breadcrumbs/breadcrumbs.types.js';
|
|
120
|
+
export { breadcrumbsVariants } from './components/Breadcrumbs/breadcrumbs.variants.js';
|
|
121
|
+
|
|
122
|
+
export { LeftNav } from './components/LeftNav/LeftNav.js';
|
|
123
|
+
export type {
|
|
124
|
+
LeftNavProps,
|
|
125
|
+
LeftNavNode,
|
|
126
|
+
LeftNavItem,
|
|
127
|
+
LeftNavGroup,
|
|
128
|
+
LeftNavSlotProps,
|
|
129
|
+
LeftNavLinkComponent,
|
|
130
|
+
} from './components/LeftNav/leftNav.types.js';
|
|
131
|
+
export { leftNavVariants } from './components/LeftNav/leftNav.variants.js';
|
|
132
|
+
|
|
133
|
+
export { TopBar } from './components/TopBar/TopBar.js';
|
|
134
|
+
export type {
|
|
135
|
+
TopBarProps,
|
|
136
|
+
TopBarSlotProps,
|
|
137
|
+
} from './components/TopBar/topBar.types.js';
|
|
138
|
+
export { topBarVariants } from './components/TopBar/topBar.variants.js';
|
|
139
|
+
|
|
140
|
+
export { AppShell } from './components/AppShell/AppShell.js';
|
|
141
|
+
export type {
|
|
142
|
+
AppShellProps,
|
|
143
|
+
AppShellSlotProps,
|
|
144
|
+
} from './components/AppShell/appShell.types.js';
|
|
145
|
+
export { appShellVariants } from './components/AppShell/appShell.variants.js';
|
|
146
|
+
|
|
147
|
+
// F7 providers: imperative dialogs + transient notifications.
|
|
148
|
+
|
|
149
|
+
export {
|
|
150
|
+
ConfirmDialogProvider,
|
|
151
|
+
useConfirm,
|
|
152
|
+
} from './components/ConfirmDialog/ConfirmDialog.js';
|
|
153
|
+
export type {
|
|
154
|
+
ConfirmDialogProviderProps,
|
|
155
|
+
ConfirmDialogSlotProps,
|
|
156
|
+
ConfirmFn,
|
|
157
|
+
ConfirmOptions,
|
|
158
|
+
ConfirmSeverity,
|
|
159
|
+
} from './components/ConfirmDialog/confirmDialog.types.js';
|
|
160
|
+
export { confirmDialogVariants } from './components/ConfirmDialog/confirmDialog.variants.js';
|
|
161
|
+
|
|
162
|
+
export {
|
|
163
|
+
SnackbarProvider,
|
|
164
|
+
useSnackbar,
|
|
165
|
+
} from './components/Snackbar/Snackbar.js';
|
|
166
|
+
export type {
|
|
167
|
+
SnackbarProviderProps,
|
|
168
|
+
SnackbarApi,
|
|
169
|
+
SnackbarOptions,
|
|
170
|
+
SnackbarRecord,
|
|
171
|
+
SnackbarSeverity,
|
|
172
|
+
SnackbarPosition,
|
|
173
|
+
SnackbarSlotProps,
|
|
174
|
+
} from './components/Snackbar/snackbar.types.js';
|
|
175
|
+
export { snackbarVariants } from './components/Snackbar/snackbar.variants.js';
|
|
176
|
+
|
|
177
|
+
// ───── Hooks ─────
|
|
178
|
+
export { useAccessState } from './hooks/useAccessState.js';
|
|
179
|
+
|
|
180
|
+
// ───── Utilities ─────
|
|
181
|
+
export { cn } from './utils/cn.js';
|
|
182
|
+
|
|
183
|
+
// Re-export tailwind-variants for consumers building app-level variants
|
|
184
|
+
// against the same canonical version used by the library.
|
|
185
|
+
export { tv } from 'tailwind-variants';
|
|
186
|
+
export type { VariantProps } from 'tailwind-variants';
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Package version (synced with `package.json` at publish time).
|
|
190
|
+
*/
|
|
191
|
+
export const VERSION = '0.1.0-beta';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { cn } from './cn.js';
|
|
3
|
+
|
|
4
|
+
describe('cn (clsx wrapper)', () => {
|
|
5
|
+
it('joins truthy class values', () => {
|
|
6
|
+
expect(cn('a', 'b')).toBe('a b');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it('drops falsy values', () => {
|
|
10
|
+
expect(cn('a', false, null, undefined, '', 'b')).toBe('a b');
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('flattens conditional objects', () => {
|
|
14
|
+
expect(cn('a', { b: true, c: false }, 'd')).toBe('a b d');
|
|
15
|
+
});
|
|
16
|
+
});
|
package/src/utils/cn.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import clsx, { type ClassValue } from 'clsx';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* className composition helper for Dashforge TW components.
|
|
6
|
+
*
|
|
7
|
+
* Wraps `clsx` (for boolean / object / array compaction) with
|
|
8
|
+
* `tailwind-merge` (for last-wins conflict resolution between
|
|
9
|
+
* conflicting Tailwind utilities). This is the override contract
|
|
10
|
+
* that powers `sx` and `slotProps`:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* cn(buttonVariants({ variant: 'solid', color: 'primary' }), sx)
|
|
14
|
+
* // sx="bg-red-500" beats the variant's `bg-primary-500`.
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Without `tailwind-merge`, Tailwind's stylesheet output order decides
|
|
18
|
+
* who wins, which is unpredictable for consumers and breaks the
|
|
19
|
+
* documented "override always wins" semantics.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <button className={cn('px-4 py-2', isPrimary && 'bg-primary-500')}>
|
|
24
|
+
* cn(['inline-flex', { 'opacity-50': disabled }], extra);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function cn(...inputs: ClassValue[]): string {
|
|
28
|
+
return twMerge(clsx(inputs));
|
|
29
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"rootDir": "src",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
|
|
8
|
+
"emitDeclarationOnly": true,
|
|
9
|
+
"forceConsistentCasingInFileNames": true,
|
|
10
|
+
"jsx": "react-jsx",
|
|
11
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
12
|
+
"types": ["node"]
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
|
15
|
+
// No `references` block intentional — without it, the TS bundler
|
|
16
|
+
// resolver picks up the workspace `src/index.ts` of each peer
|
|
17
|
+
// through the path mapping in `tsconfig.base.json`, which is the
|
|
18
|
+
// canonical source-of-truth. With references, TS preferred each
|
|
19
|
+
// dep's `dist/index.d.ts` wrapper (`export * from "./src/index"`)
|
|
20
|
+
// and the chain ambient-re-export through that wrapper silently
|
|
21
|
+
// dropped re-exports under `bundler` module resolution. The build
|
|
22
|
+
// chain still runs the deps' `build` targets before this one via
|
|
23
|
+
// `dependsOn: ["typecheck", "^build"]` so `nx` order is preserved.
|
|
24
|
+
"exclude": [
|
|
25
|
+
"vite.config.ts",
|
|
26
|
+
"vite.config.mts",
|
|
27
|
+
"vitest.config.ts",
|
|
28
|
+
"vitest.config.mts",
|
|
29
|
+
"src/**/*.test.ts",
|
|
30
|
+
"src/**/*.spec.ts",
|
|
31
|
+
"src/**/*.test.tsx",
|
|
32
|
+
"src/**/*.spec.tsx",
|
|
33
|
+
"src/**/*.test.js",
|
|
34
|
+
"src/**/*.spec.js",
|
|
35
|
+
"src/**/*.test.jsx",
|
|
36
|
+
"src/**/*.spec.jsx"
|
|
37
|
+
],
|
|
38
|
+
"references": [
|
|
39
|
+
{
|
|
40
|
+
"path": "../ui-core/tsconfig.lib.json"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"path": "../tw-tokens/tsconfig.lib.json"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "../tw-theme/tsconfig.lib.json"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "../rbac/tsconfig.lib.json"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"path": "../forms/tsconfig.lib.json"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "./out-tsc/vitest",
|
|
5
|
+
"types": [
|
|
6
|
+
"vitest/globals",
|
|
7
|
+
"vitest/importMeta",
|
|
8
|
+
"vite/client",
|
|
9
|
+
"node",
|
|
10
|
+
"vitest"
|
|
11
|
+
],
|
|
12
|
+
"forceConsistentCasingInFileNames": true
|
|
13
|
+
},
|
|
14
|
+
"include": [
|
|
15
|
+
"vite.config.ts",
|
|
16
|
+
"vite.config.mts",
|
|
17
|
+
"vitest.config.ts",
|
|
18
|
+
"vitest.config.mts",
|
|
19
|
+
"src/**/*.test.ts",
|
|
20
|
+
"src/**/*.spec.ts",
|
|
21
|
+
"src/**/*.test.tsx",
|
|
22
|
+
"src/**/*.spec.tsx",
|
|
23
|
+
"src/**/*.test.js",
|
|
24
|
+
"src/**/*.spec.js",
|
|
25
|
+
"src/**/*.test.jsx",
|
|
26
|
+
"src/**/*.spec.jsx",
|
|
27
|
+
"src/**/*.d.ts"
|
|
28
|
+
],
|
|
29
|
+
"references": [
|
|
30
|
+
{
|
|
31
|
+
"path": "./tsconfig.lib.json"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types='vitest' />
|
|
2
|
+
import { defineConfig } from 'vite';
|
|
3
|
+
import react from '@vitejs/plugin-react';
|
|
4
|
+
|
|
5
|
+
export default defineConfig(() => ({
|
|
6
|
+
root: import.meta.dirname,
|
|
7
|
+
cacheDir: '../../../node_modules/.vite/libs/dashforge/tw',
|
|
8
|
+
plugins: [react()],
|
|
9
|
+
// Uncomment this if you are using workers.
|
|
10
|
+
// worker: {
|
|
11
|
+
// plugins: [],
|
|
12
|
+
// },
|
|
13
|
+
test: {
|
|
14
|
+
name: '@dashforge/tw',
|
|
15
|
+
watch: false,
|
|
16
|
+
globals: true,
|
|
17
|
+
environment: 'node',
|
|
18
|
+
include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
|
19
|
+
reporters: ['default'],
|
|
20
|
+
coverage: {
|
|
21
|
+
reportsDirectory: './test-output/vitest/coverage',
|
|
22
|
+
provider: 'v8' as const,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
|
|
4
|
+
export default defineConfig(() => ({
|
|
5
|
+
root: __dirname,
|
|
6
|
+
cacheDir: '../../../node_modules/.vite/libs/dashforge/tw',
|
|
7
|
+
plugins: [react()],
|
|
8
|
+
test: {
|
|
9
|
+
name: '@dashforge/tw',
|
|
10
|
+
watch: false,
|
|
11
|
+
globals: true,
|
|
12
|
+
// Default 'node'. Specs that mount React opt in via the
|
|
13
|
+
// `// @vitest-environment jsdom` magic comment at file top.
|
|
14
|
+
environment: 'node',
|
|
15
|
+
include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
|
16
|
+
reporters: ['default'],
|
|
17
|
+
coverage: {
|
|
18
|
+
reportsDirectory: './test-output/vitest/coverage',
|
|
19
|
+
provider: 'v8' as const,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
}));
|