@dashforge/tw 0.10.0-beta → 1.0.0
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/CHANGELOG.md +35 -12
- package/COVERAGE.md +2 -2
- package/PARITY.md +7 -9
- package/PERFORMANCE.md +3 -4
- package/THEME-AUDIT.md +3 -4
- package/dist/components/Accordion/Accordion.d.ts +21 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion/accordion.types.d.ts +74 -0
- package/dist/components/Accordion/accordion.types.d.ts.map +1 -0
- package/dist/components/Accordion/accordion.variants.d.ts +58 -0
- package/dist/components/Accordion/accordion.variants.d.ts.map +1 -0
- package/dist/components/AppShell/AppShell.d.ts +46 -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/AspectRatio/AspectRatio.d.ts +36 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -0
- package/dist/components/AspectRatio/aspectRatio.types.d.ts +50 -0
- package/dist/components/AspectRatio/aspectRatio.types.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/Box/Box.d.ts +36 -0
- package/dist/components/Box/Box.d.ts.map +1 -0
- package/dist/components/Box/box.types.d.ts +54 -0
- package/dist/components/Box/box.types.d.ts.map +1 -0
- package/dist/components/Box/box.variants.d.ts +402 -0
- package/dist/components/Box/box.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/Calendar/Calendar.d.ts +14 -0
- package/dist/components/Calendar/Calendar.d.ts.map +1 -0
- package/dist/components/Calendar/calendar.types.d.ts +72 -0
- package/dist/components/Calendar/calendar.types.d.ts.map +1 -0
- package/dist/components/Calendar/calendar.variants.d.ts +99 -0
- package/dist/components/Calendar/calendar.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/Container/Container.d.ts +35 -0
- package/dist/components/Container/Container.d.ts.map +1 -0
- package/dist/components/Container/container.types.d.ts +41 -0
- package/dist/components/Container/container.types.d.ts.map +1 -0
- package/dist/components/Container/container.variants.d.ts +93 -0
- package/dist/components/Container/container.variants.d.ts.map +1 -0
- package/dist/components/DataGrid/DataGrid.d.ts +29 -0
- package/dist/components/DataGrid/DataGrid.d.ts.map +1 -0
- package/dist/components/DataGrid/dataGrid.types.d.ts +214 -0
- package/dist/components/DataGrid/dataGrid.types.d.ts.map +1 -0
- package/dist/components/DataGrid/dataGrid.variants.d.ts +222 -0
- package/dist/components/DataGrid/dataGrid.variants.d.ts.map +1 -0
- package/dist/components/DataGrid/filters/ColumnFilters.d.ts +23 -0
- package/dist/components/DataGrid/filters/ColumnFilters.d.ts.map +1 -0
- package/dist/components/DataGrid/reorder/useColumnReorder.d.ts +50 -0
- package/dist/components/DataGrid/reorder/useColumnReorder.d.ts.map +1 -0
- package/dist/components/DataGrid/resize/useColumnResize.d.ts +39 -0
- package/dist/components/DataGrid/resize/useColumnResize.d.ts.map +1 -0
- package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts +44 -0
- package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +14 -0
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker/datePicker.types.d.ts +88 -0
- package/dist/components/DatePicker/datePicker.types.d.ts.map +1 -0
- package/dist/components/DatePicker/datePicker.variants.d.ts +97 -0
- package/dist/components/DatePicker/datePicker.variants.d.ts.map +1 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +13 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
- package/dist/components/DateRangePicker/dateRangePicker.types.d.ts +85 -0
- package/dist/components/DateRangePicker/dateRangePicker.types.d.ts.map +1 -0
- package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts +183 -0
- package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts.map +1 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +13 -0
- package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts +90 -0
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -0
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts +107 -0
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +17 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog/dialog.types.d.ts +75 -0
- package/dist/components/Dialog/dialog.types.d.ts.map +1 -0
- package/dist/components/Dialog/dialog.variants.d.ts +80 -0
- package/dist/components/Dialog/dialog.variants.d.ts.map +1 -0
- package/dist/components/Divider/Divider.d.ts +50 -0
- package/dist/components/Divider/Divider.d.ts.map +1 -0
- package/dist/components/Divider/divider.types.d.ts +47 -0
- package/dist/components/Divider/divider.types.d.ts.map +1 -0
- package/dist/components/Divider/divider.variants.d.ts +129 -0
- package/dist/components/Divider/divider.variants.d.ts.map +1 -0
- package/dist/components/Grid/Grid.d.ts +32 -0
- package/dist/components/Grid/Grid.d.ts.map +1 -0
- package/dist/components/Grid/grid.types.d.ts +103 -0
- package/dist/components/Grid/grid.types.d.ts.map +1 -0
- package/dist/components/Grid/grid.variants.d.ts +453 -0
- package/dist/components/Grid/grid.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/Pagination/Pagination.d.ts +32 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/pagination.helpers.d.ts +23 -0
- package/dist/components/Pagination/pagination.helpers.d.ts.map +1 -0
- package/dist/components/Pagination/pagination.types.d.ts +120 -0
- package/dist/components/Pagination/pagination.types.d.ts.map +1 -0
- package/dist/components/Pagination/pagination.variants.d.ts +150 -0
- package/dist/components/Pagination/pagination.variants.d.ts.map +1 -0
- package/dist/components/Popover/Popover.d.ts +15 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/popover.types.d.ts +45 -0
- package/dist/components/Popover/popover.types.d.ts.map +1 -0
- package/dist/components/Popover/popover.variants.d.ts +34 -0
- package/dist/components/Popover/popover.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/Skeleton/Skeleton.d.ts +23 -0
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton/skeleton.types.d.ts +56 -0
- package/dist/components/Skeleton/skeleton.types.d.ts.map +1 -0
- package/dist/components/Skeleton/skeleton.variants.d.ts +110 -0
- package/dist/components/Skeleton/skeleton.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/Stack/Stack.d.ts +24 -0
- package/dist/components/Stack/Stack.d.ts.map +1 -0
- package/dist/components/Stack/stack.types.d.ts +61 -0
- package/dist/components/Stack/stack.types.d.ts.map +1 -0
- package/dist/components/Stack/stack.variants.d.ts +163 -0
- package/dist/components/Stack/stack.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/Table/Table.d.ts +24 -0
- package/dist/components/Table/Table.d.ts.map +1 -0
- package/dist/components/Table/cells/RenderButton.d.ts +13 -0
- package/dist/components/Table/cells/RenderButton.d.ts.map +1 -0
- package/dist/components/Table/cells/RenderChip.d.ts +80 -0
- package/dist/components/Table/cells/RenderChip.d.ts.map +1 -0
- package/dist/components/Table/cells/RenderText.d.ts +21 -0
- package/dist/components/Table/cells/RenderText.d.ts.map +1 -0
- package/dist/components/Table/cells/RenderTwoLine.d.ts +20 -0
- package/dist/components/Table/cells/RenderTwoLine.d.ts.map +1 -0
- package/dist/components/Table/cells/RowActionsMenu.d.ts +36 -0
- package/dist/components/Table/cells/RowActionsMenu.d.ts.map +1 -0
- package/dist/components/Table/cells/index.d.ts +11 -0
- package/dist/components/Table/cells/index.d.ts.map +1 -0
- package/dist/components/Table/table.types.d.ts +399 -0
- package/dist/components/Table/table.types.d.ts.map +1 -0
- package/dist/components/Table/table.variants.d.ts +285 -0
- package/dist/components/Table/table.variants.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +19 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/tabs.types.d.ts +61 -0
- package/dist/components/Tabs/tabs.types.d.ts.map +1 -0
- package/dist/components/Tabs/tabs.variants.d.ts +82 -0
- package/dist/components/Tabs/tabs.variants.d.ts.map +1 -0
- package/dist/components/Tabs/useTabs.d.ts +55 -0
- package/dist/components/Tabs/useTabs.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 +98 -0
- package/dist/components/TextField/textField.types.d.ts.map +1 -0
- package/dist/components/TextField/textField.variants.d.ts +166 -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/TimePicker/TimePicker.d.ts +12 -0
- package/dist/components/TimePicker/TimePicker.d.ts.map +1 -0
- package/dist/components/TimePicker/timePicker.types.d.ts +80 -0
- package/dist/components/TimePicker/timePicker.types.d.ts.map +1 -0
- package/dist/components/TimePicker/timePicker.variants.d.ts +103 -0
- package/dist/components/TimePicker/timePicker.variants.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +29 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/tooltip.types.d.ts +47 -0
- package/dist/components/Tooltip/tooltip.types.d.ts.map +1 -0
- package/dist/components/Tooltip/tooltip.variants.d.ts +34 -0
- package/dist/components/Tooltip/tooltip.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/Typography/Typography.d.ts +42 -0
- package/dist/components/Typography/Typography.d.ts.map +1 -0
- package/dist/components/Typography/typography.types.d.ts +61 -0
- package/dist/components/Typography/typography.types.d.ts.map +1 -0
- package/dist/components/Typography/typography.variants.d.ts +167 -0
- package/dist/components/Typography/typography.variants.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +42 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts +42 -0
- package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts.map +1 -0
- package/dist/components/_shared/data/getNestedValue.d.ts +20 -0
- package/dist/components/_shared/data/getNestedValue.d.ts.map +1 -0
- package/dist/components/_shared/data/useColumnAutoDetect.d.ts +45 -0
- package/dist/components/_shared/data/useColumnAutoDetect.d.ts.map +1 -0
- package/dist/components/_shared/data/useControllableState.d.ts +23 -0
- package/dist/components/_shared/data/useControllableState.d.ts.map +1 -0
- package/dist/components/_shared/data/useDebouncedValue.d.ts +10 -0
- package/dist/components/_shared/data/useDebouncedValue.d.ts.map +1 -0
- package/dist/components/_shared/data/useTableFilter.d.ts +36 -0
- package/dist/components/_shared/data/useTableFilter.d.ts.map +1 -0
- package/dist/components/_shared/data/useTableSearch.d.ts +23 -0
- package/dist/components/_shared/data/useTableSearch.d.ts.map +1 -0
- package/dist/components/_shared/data/useTableSelection.d.ts +25 -0
- package/dist/components/_shared/data/useTableSelection.d.ts.map +1 -0
- package/dist/components/_shared/data/useTableSort.d.ts +20 -0
- package/dist/components/_shared/data/useTableSort.d.ts.map +1 -0
- package/dist/components/_shared/data/useVirtualizer.d.ts +107 -0
- package/dist/components/_shared/data/useVirtualizer.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 +146 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +133 -24
- package/dist/src/components/Tabs/Tabs.d.ts +8 -4
- package/dist/src/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/src/components/Tabs/tabs.types.d.ts +8 -2
- package/dist/src/components/Tabs/tabs.types.d.ts.map +1 -1
- package/dist/src/components/Tabs/useTabs.d.ts +55 -0
- package/dist/src/components/Tabs/useTabs.d.ts.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- 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/package.json +7 -8
- package/src/components/Tabs/Tabs.test.tsx +85 -14
- package/src/components/Tabs/Tabs.tsx +35 -24
- package/src/components/Tabs/tabs.types.ts +8 -2
- package/src/components/Tabs/useTabs.ts +167 -0
- package/src/components/TextField/TextField.test.tsx +5 -1
- package/src/index.ts +1 -1
- package/vite.config.ts +8 -0
- package/vitest.config.mts +8 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TabsProps } from './tabs.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Dashforge TW `<Tabs>` — declarative tab navigation.
|
|
4
|
+
*
|
|
5
|
+
* Custom clean-room implementation on the headless `useTabs` engine — no
|
|
6
|
+
* runtime UI dependency. Implements the WAI-ARIA APG tabs pattern: arrow-key
|
|
7
|
+
* navigation, automatic activation, roving tabindex, `role="tablist"` +
|
|
8
|
+
* `role="tab"` + `role="tabpanel"`.
|
|
9
|
+
*
|
|
10
|
+
* Two variant axes:
|
|
11
|
+
* - `variant` — `underline` (default) | `pill`
|
|
12
|
+
* - `orientation` — `horizontal` (default) | `vertical`
|
|
13
|
+
*
|
|
14
|
+
* Controlled (`value` + `onValueChange`) or uncontrolled (`defaultValue`).
|
|
15
|
+
* `keepMounted` keeps inactive panels in the DOM (default: only the active
|
|
16
|
+
* panel is mounted).
|
|
17
|
+
*/
|
|
18
|
+
export declare function Tabs(props: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=Tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CAuDpC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { TabsVariants } from './tabs.variants.js';
|
|
3
|
+
export interface TabsSlotProps {
|
|
4
|
+
root?: {
|
|
5
|
+
className?: string;
|
|
6
|
+
};
|
|
7
|
+
list?: {
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
trigger?: {
|
|
11
|
+
className?: string;
|
|
12
|
+
};
|
|
13
|
+
content?: {
|
|
14
|
+
className?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Single tab item — paired `{ value, label, content }`. The `value`
|
|
19
|
+
* is the canonical id (selected via the `value` / `defaultValue`
|
|
20
|
+
* props on the root); the `label` is the trigger button text, and
|
|
21
|
+
* `content` is what renders in the panel when this tab is active.
|
|
22
|
+
*/
|
|
23
|
+
export interface TabItem {
|
|
24
|
+
value: string;
|
|
25
|
+
label: ReactNode;
|
|
26
|
+
/** Tab panel content. */
|
|
27
|
+
content: ReactNode;
|
|
28
|
+
/** Per-tab disabled flag. */
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Props for `<Tabs>`.
|
|
33
|
+
*
|
|
34
|
+
* Custom clean-room implementation — the headless `useTabs` engine, no Radix.
|
|
35
|
+
* Two variant axes:
|
|
36
|
+
* - `variant` — `underline` (default) | `pill`
|
|
37
|
+
* - `orientation` — `horizontal` (default) | `vertical`
|
|
38
|
+
*
|
|
39
|
+
* Supports controlled (`value` + `onValueChange`) and uncontrolled
|
|
40
|
+
* (`defaultValue`) modes — the `value` prop wins when both are set.
|
|
41
|
+
*/
|
|
42
|
+
export interface TabsProps extends TabsVariants {
|
|
43
|
+
/** Tab items array. */
|
|
44
|
+
items: TabItem[];
|
|
45
|
+
/** Controlled active value. */
|
|
46
|
+
value?: string;
|
|
47
|
+
/** Default active value (uncontrolled). Defaults to first item's value. */
|
|
48
|
+
defaultValue?: string;
|
|
49
|
+
/** Fires when the active tab changes. */
|
|
50
|
+
onValueChange?: (value: string) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Keep inactive panels mounted (hidden via the `hidden` attribute).
|
|
53
|
+
* Default `false` — only the active panel is in the DOM.
|
|
54
|
+
*/
|
|
55
|
+
keepMounted?: boolean;
|
|
56
|
+
/** Root className shortcut. */
|
|
57
|
+
sx?: string;
|
|
58
|
+
/** Per-slot overrides. */
|
|
59
|
+
slotProps?: TabsSlotProps;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=tabs.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.types.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/tabs.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,yBAAyB;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,uBAAuB;IACvB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
2
|
+
export declare const tabsVariants: import("tailwind-variants").TVReturnType<{
|
|
3
|
+
variant: {
|
|
4
|
+
underline: {
|
|
5
|
+
list: string;
|
|
6
|
+
trigger: string[];
|
|
7
|
+
};
|
|
8
|
+
pill: {
|
|
9
|
+
list: string;
|
|
10
|
+
trigger: string[];
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
orientation: {
|
|
14
|
+
horizontal: {
|
|
15
|
+
root: string;
|
|
16
|
+
list: string;
|
|
17
|
+
};
|
|
18
|
+
vertical: {
|
|
19
|
+
root: string;
|
|
20
|
+
list: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}, {
|
|
24
|
+
root: string;
|
|
25
|
+
list: string;
|
|
26
|
+
trigger: string[];
|
|
27
|
+
content: string[];
|
|
28
|
+
}, undefined, {
|
|
29
|
+
variant: {
|
|
30
|
+
underline: {
|
|
31
|
+
list: string;
|
|
32
|
+
trigger: string[];
|
|
33
|
+
};
|
|
34
|
+
pill: {
|
|
35
|
+
list: string;
|
|
36
|
+
trigger: string[];
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
orientation: {
|
|
40
|
+
horizontal: {
|
|
41
|
+
root: string;
|
|
42
|
+
list: string;
|
|
43
|
+
};
|
|
44
|
+
vertical: {
|
|
45
|
+
root: string;
|
|
46
|
+
list: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
}, {
|
|
50
|
+
root: string;
|
|
51
|
+
list: string;
|
|
52
|
+
trigger: string[];
|
|
53
|
+
content: string[];
|
|
54
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
55
|
+
variant: {
|
|
56
|
+
underline: {
|
|
57
|
+
list: string;
|
|
58
|
+
trigger: string[];
|
|
59
|
+
};
|
|
60
|
+
pill: {
|
|
61
|
+
list: string;
|
|
62
|
+
trigger: string[];
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
orientation: {
|
|
66
|
+
horizontal: {
|
|
67
|
+
root: string;
|
|
68
|
+
list: string;
|
|
69
|
+
};
|
|
70
|
+
vertical: {
|
|
71
|
+
root: string;
|
|
72
|
+
list: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}, {
|
|
76
|
+
root: string;
|
|
77
|
+
list: string;
|
|
78
|
+
trigger: string[];
|
|
79
|
+
content: string[];
|
|
80
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
81
|
+
export type TabsVariants = VariantProps<typeof tabsVariants>;
|
|
82
|
+
//# sourceMappingURL=tabs.variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.variants.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/tabs.variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAgEvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { KeyboardEvent } from 'react';
|
|
2
|
+
import type { TabItem } from './tabs.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* `useTabs` — the headless tab engine for the Tailwind `<Tabs>`.
|
|
5
|
+
*
|
|
6
|
+
* Pure logic, zero UI: active-value state (controlled / uncontrolled) plus
|
|
7
|
+
* the WAI-ARIA APG keyboard model (arrow keys, Home/End, roving tabindex,
|
|
8
|
+
* automatic activation, disabled-skip, edge wrap). Returns attribute bundles
|
|
9
|
+
* for the `tablist` / `tab` / `tabpanel` roles.
|
|
10
|
+
*
|
|
11
|
+
* Deliberately NOT a shared package: the tab logic is ~90 lines — too thin
|
|
12
|
+
* to justify a published `tabs-core`. The MUI skin keeps its own near-identical
|
|
13
|
+
* copy. Only the public API contract is shared.
|
|
14
|
+
*/
|
|
15
|
+
interface UseTabsOptions {
|
|
16
|
+
items: TabItem[];
|
|
17
|
+
value: string | undefined;
|
|
18
|
+
defaultValue: string | undefined;
|
|
19
|
+
onValueChange: ((value: string) => void) | undefined;
|
|
20
|
+
orientation: 'horizontal' | 'vertical';
|
|
21
|
+
}
|
|
22
|
+
interface TabListAttributes {
|
|
23
|
+
role: 'tablist';
|
|
24
|
+
'aria-orientation': 'horizontal' | 'vertical';
|
|
25
|
+
onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;
|
|
26
|
+
}
|
|
27
|
+
interface TabAttributes {
|
|
28
|
+
role: 'tab';
|
|
29
|
+
id: string;
|
|
30
|
+
'aria-selected': boolean;
|
|
31
|
+
'aria-controls': string;
|
|
32
|
+
tabIndex: number;
|
|
33
|
+
disabled: boolean | undefined;
|
|
34
|
+
'data-state': 'active' | 'inactive';
|
|
35
|
+
onClick: () => void;
|
|
36
|
+
ref: (el: HTMLButtonElement | null) => void;
|
|
37
|
+
}
|
|
38
|
+
interface PanelAttributes {
|
|
39
|
+
role: 'tabpanel';
|
|
40
|
+
id: string;
|
|
41
|
+
'aria-labelledby': string;
|
|
42
|
+
tabIndex: number;
|
|
43
|
+
hidden: boolean;
|
|
44
|
+
'data-state': 'active' | 'inactive';
|
|
45
|
+
}
|
|
46
|
+
export interface UseTabsResult {
|
|
47
|
+
/** The currently active tab value. */
|
|
48
|
+
activeValue: string;
|
|
49
|
+
getTabListProps: () => TabListAttributes;
|
|
50
|
+
getTabProps: (item: TabItem) => TabAttributes;
|
|
51
|
+
getPanelProps: (item: TabItem) => PanelAttributes;
|
|
52
|
+
}
|
|
53
|
+
export declare function useTabs(options: UseTabsOptions): UseTabsResult;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=useTabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/useTabs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,UAAU,cAAc;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;CACxC;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,kBAAkB,EAAE,YAAY,GAAG,UAAU,CAAC;IAC9C,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,GAAG,EAAE,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC7C;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,iBAAiB,CAAC;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,aAAa,CAAC;IAC9C,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,eAAe,CAAC;CACnD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CA2G9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { TextFieldProps } from './textField.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Dashforge TW TextField — bridge-integrated text input.
|
|
4
|
+
*
|
|
5
|
+
* Implementation mirrors `@dashforge/ui/TextField` (MUI) at the bridge
|
|
6
|
+
* level — same `name` / `rules` / `visibleWhen` / `access` semantics,
|
|
7
|
+
* same validation gating, same StrictMode-safe unregister pattern.
|
|
8
|
+
* Renderer differences:
|
|
9
|
+
*
|
|
10
|
+
* - Native `<input>` element wrapped in a TV-styled
|
|
11
|
+
* `<div role-less wrapper>` so the focus ring extends to the entire
|
|
12
|
+
* field (consistent with shadcn-style inputs).
|
|
13
|
+
* - Layout modes: `stacked` (default — label above) and `inline`
|
|
14
|
+
* (label left of input). MUI's `floating` mode is deferred to a
|
|
15
|
+
* follow-up sprint; consumers needing the visual can layer it via
|
|
16
|
+
* `slotProps`.
|
|
17
|
+
* - No Select-integration hook (Select lands in F4 as its own component).
|
|
18
|
+
*
|
|
19
|
+
* **A11y**:
|
|
20
|
+
* - `aria-invalid` is set from the resolved validation state.
|
|
21
|
+
* - `aria-describedby` links the input to the helper/error text node.
|
|
22
|
+
* - Required fields get the native `required` attribute + a visual `*`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function TextField(props: TextFieldProps): import("react/jsx-runtime").JSX.Element | null;
|
|
25
|
+
//# sourceMappingURL=TextField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/TextField.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,kDAoN9C"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import type { AccessRequirement } from '@dashforge/rbac';
|
|
3
|
+
import type { Engine } from '@dashforge/ui-core';
|
|
4
|
+
import type { TextFieldVariants } from './textField.variants.js';
|
|
5
|
+
/**
|
|
6
|
+
* Per-slot overrides for `<TextField>`.
|
|
7
|
+
*
|
|
8
|
+
* Each slot accepts `{ className: string }` (and, for `prefix` /
|
|
9
|
+
* `suffix`, a `children` node) so the override path is extensible —
|
|
10
|
+
* extra fields like `style`, `aria-*`, `data-*` can be added without
|
|
11
|
+
* a breaking change. Mirrors the MUI-side `slotProps` shape.
|
|
12
|
+
*
|
|
13
|
+
* **`prefix` / `suffix`** are inline adornments rendered INSIDE the
|
|
14
|
+
* `inputWrapper`, before / after the `<input>` element. Typical use:
|
|
15
|
+
* currency symbols, units, status icons. Passing only `className`
|
|
16
|
+
* (no `children`) is allowed but renders an empty slot — usually
|
|
17
|
+
* you'll always pair the two.
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <TextField
|
|
21
|
+
* name="price"
|
|
22
|
+
* type="number"
|
|
23
|
+
* slotProps={{
|
|
24
|
+
* prefix: { children: '$' },
|
|
25
|
+
* suffix: { children: 'USD' },
|
|
26
|
+
* }}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export interface TextFieldSlotProps {
|
|
31
|
+
root?: {
|
|
32
|
+
className?: string;
|
|
33
|
+
};
|
|
34
|
+
label?: {
|
|
35
|
+
className?: string;
|
|
36
|
+
};
|
|
37
|
+
requiredMark?: {
|
|
38
|
+
className?: string;
|
|
39
|
+
};
|
|
40
|
+
inputWrapper?: {
|
|
41
|
+
className?: string;
|
|
42
|
+
};
|
|
43
|
+
input?: {
|
|
44
|
+
className?: string;
|
|
45
|
+
};
|
|
46
|
+
helperText?: {
|
|
47
|
+
className?: string;
|
|
48
|
+
};
|
|
49
|
+
errorText?: {
|
|
50
|
+
className?: string;
|
|
51
|
+
};
|
|
52
|
+
prefix?: {
|
|
53
|
+
children?: ReactNode;
|
|
54
|
+
className?: string;
|
|
55
|
+
};
|
|
56
|
+
suffix?: {
|
|
57
|
+
children?: ReactNode;
|
|
58
|
+
className?: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Props for the Dashforge TW `<TextField>`.
|
|
63
|
+
*
|
|
64
|
+
* Extends the native `<input>` attributes (so `placeholder`, `type`,
|
|
65
|
+
* `autoComplete`, `aria-*` etc. all flow through), narrowed in two
|
|
66
|
+
* places:
|
|
67
|
+
*
|
|
68
|
+
* - `size` is omitted because HTML's legacy `size` attribute (number)
|
|
69
|
+
* collides with our variant axis (`'sm' | 'md' | 'lg'`).
|
|
70
|
+
* - `className` is omitted — use `sx` instead (the canonical override
|
|
71
|
+
* path that wins over variant classes via `tailwind-merge`).
|
|
72
|
+
*
|
|
73
|
+
* Plus the variant axes and Dashforge form-bridge wiring (`name`,
|
|
74
|
+
* `rules`, `visibleWhen`, `access`).
|
|
75
|
+
*/
|
|
76
|
+
export interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'className'>, Pick<TextFieldVariants, 'size' | 'layout' | 'fullWidth'> {
|
|
77
|
+
/** Bridge field name (required when used inside `DashFormProvider`). */
|
|
78
|
+
name: string;
|
|
79
|
+
/** Visible label. */
|
|
80
|
+
label?: ReactNode;
|
|
81
|
+
/** Forwarded to the bridge as RHF rules — opaque to this component. */
|
|
82
|
+
rules?: unknown;
|
|
83
|
+
/** Engine predicate. Component returns null when false. */
|
|
84
|
+
visibleWhen?: (engine: Engine) => boolean;
|
|
85
|
+
/** Helper line below the input. */
|
|
86
|
+
helperText?: ReactNode;
|
|
87
|
+
/** Explicit error semaphore. Overrides bridge auto-error. */
|
|
88
|
+
error?: boolean;
|
|
89
|
+
/** Render the asterisk + set the native `required` attribute. */
|
|
90
|
+
required?: boolean;
|
|
91
|
+
/** RBAC requirement. */
|
|
92
|
+
access?: AccessRequirement;
|
|
93
|
+
/** Root-level Tailwind override — wins over variant classes via `cn()`. */
|
|
94
|
+
sx?: string;
|
|
95
|
+
/** Per-slot overrides — see `TextFieldSlotProps`. */
|
|
96
|
+
slotProps?: TextFieldSlotProps;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=textField.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textField.types.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/textField.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,EACvE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1D,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1C,mCAAmC;IACnC,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,wBAAwB;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B,2EAA2E;IAC3E,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,qDAAqD;IACrD,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
2
|
+
/**
|
|
3
|
+
* Tailwind-variants recipe for `<TextField>` with 7 slots.
|
|
4
|
+
*
|
|
5
|
+
* The MUI-side `TextField` supports three layout modes (floating /
|
|
6
|
+
* stacked / inline) plus a Select-integration hook. The TW-side
|
|
7
|
+
* port covers **stacked** + **inline** in F3 (label outside the
|
|
8
|
+
* input wrapper) and ships a CSS-only floating label using
|
|
9
|
+
* Tailwind's `peer` modifier.
|
|
10
|
+
*
|
|
11
|
+
* The Select integration (`__selectAvailableValues` etc.) is
|
|
12
|
+
* deferred to F4 when the dedicated `<Select>` component arrives.
|
|
13
|
+
*/
|
|
14
|
+
export declare const textFieldVariants: import("tailwind-variants").TVReturnType<{
|
|
15
|
+
size: {
|
|
16
|
+
sm: {
|
|
17
|
+
inputWrapper: string;
|
|
18
|
+
input: string;
|
|
19
|
+
};
|
|
20
|
+
md: {
|
|
21
|
+
inputWrapper: string;
|
|
22
|
+
input: string;
|
|
23
|
+
};
|
|
24
|
+
lg: {
|
|
25
|
+
inputWrapper: string;
|
|
26
|
+
input: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
layout: {
|
|
30
|
+
stacked: {
|
|
31
|
+
root: string;
|
|
32
|
+
};
|
|
33
|
+
inline: {
|
|
34
|
+
root: string;
|
|
35
|
+
label: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
error: {
|
|
39
|
+
true: {
|
|
40
|
+
inputWrapper: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
fullWidth: {
|
|
44
|
+
true: {
|
|
45
|
+
root: string;
|
|
46
|
+
inputWrapper: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
disabled: {
|
|
50
|
+
true: {
|
|
51
|
+
inputWrapper: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
}, {
|
|
55
|
+
root: string;
|
|
56
|
+
label: string;
|
|
57
|
+
requiredMark: string;
|
|
58
|
+
inputWrapper: string[];
|
|
59
|
+
input: string[];
|
|
60
|
+
helperText: string;
|
|
61
|
+
errorText: string;
|
|
62
|
+
prefix: string[];
|
|
63
|
+
suffix: string[];
|
|
64
|
+
}, undefined, {
|
|
65
|
+
size: {
|
|
66
|
+
sm: {
|
|
67
|
+
inputWrapper: string;
|
|
68
|
+
input: string;
|
|
69
|
+
};
|
|
70
|
+
md: {
|
|
71
|
+
inputWrapper: string;
|
|
72
|
+
input: string;
|
|
73
|
+
};
|
|
74
|
+
lg: {
|
|
75
|
+
inputWrapper: string;
|
|
76
|
+
input: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
layout: {
|
|
80
|
+
stacked: {
|
|
81
|
+
root: string;
|
|
82
|
+
};
|
|
83
|
+
inline: {
|
|
84
|
+
root: string;
|
|
85
|
+
label: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
error: {
|
|
89
|
+
true: {
|
|
90
|
+
inputWrapper: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
fullWidth: {
|
|
94
|
+
true: {
|
|
95
|
+
root: string;
|
|
96
|
+
inputWrapper: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
disabled: {
|
|
100
|
+
true: {
|
|
101
|
+
inputWrapper: string;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
}, {
|
|
105
|
+
root: string;
|
|
106
|
+
label: string;
|
|
107
|
+
requiredMark: string;
|
|
108
|
+
inputWrapper: string[];
|
|
109
|
+
input: string[];
|
|
110
|
+
helperText: string;
|
|
111
|
+
errorText: string;
|
|
112
|
+
prefix: string[];
|
|
113
|
+
suffix: string[];
|
|
114
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
115
|
+
size: {
|
|
116
|
+
sm: {
|
|
117
|
+
inputWrapper: string;
|
|
118
|
+
input: string;
|
|
119
|
+
};
|
|
120
|
+
md: {
|
|
121
|
+
inputWrapper: string;
|
|
122
|
+
input: string;
|
|
123
|
+
};
|
|
124
|
+
lg: {
|
|
125
|
+
inputWrapper: string;
|
|
126
|
+
input: string;
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
layout: {
|
|
130
|
+
stacked: {
|
|
131
|
+
root: string;
|
|
132
|
+
};
|
|
133
|
+
inline: {
|
|
134
|
+
root: string;
|
|
135
|
+
label: string;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
error: {
|
|
139
|
+
true: {
|
|
140
|
+
inputWrapper: string;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
fullWidth: {
|
|
144
|
+
true: {
|
|
145
|
+
root: string;
|
|
146
|
+
inputWrapper: string;
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
disabled: {
|
|
150
|
+
true: {
|
|
151
|
+
inputWrapper: string;
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
}, {
|
|
155
|
+
root: string;
|
|
156
|
+
label: string;
|
|
157
|
+
requiredMark: string;
|
|
158
|
+
inputWrapper: string[];
|
|
159
|
+
input: string[];
|
|
160
|
+
helperText: string;
|
|
161
|
+
errorText: string;
|
|
162
|
+
prefix: string[];
|
|
163
|
+
suffix: string[];
|
|
164
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
165
|
+
export type TextFieldVariants = VariantProps<typeof textFieldVariants>;
|
|
166
|
+
//# sourceMappingURL=textField.variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textField.variants.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/textField.variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAwF5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TextareaProps } from './textarea.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Dashforge TW Textarea — bridge-integrated multi-line input.
|
|
4
|
+
*
|
|
5
|
+
* Sibling of `<TextField>` (same slot taxonomy, same bridge wiring) but
|
|
6
|
+
* renders a `<textarea>` element instead of a single-line `<input>`.
|
|
7
|
+
*
|
|
8
|
+
* Defaults to `rows={3}` and `resize="vertical"` — both overridable via
|
|
9
|
+
* variant prop or per-instance `rows` attribute.
|
|
10
|
+
*
|
|
11
|
+
* **A11y**: `aria-invalid` from the resolved validation state,
|
|
12
|
+
* `aria-describedby` links to the helper/error text node, required
|
|
13
|
+
* fields get the native `required` attribute + a visual `*`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function Textarea(props: TextareaProps): import("react/jsx-runtime").JSX.Element | null;
|
|
16
|
+
//# sourceMappingURL=Textarea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kDAsK5C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ChangeEventHandler, FocusEventHandler, ReactNode, TextareaHTMLAttributes } from 'react';
|
|
2
|
+
import type { Engine } from '@dashforge/ui-core';
|
|
3
|
+
import type { AccessRequirement } from '@dashforge/rbac';
|
|
4
|
+
import type { TextareaVariants } from './textarea.variants.js';
|
|
5
|
+
export interface TextareaSlotProps {
|
|
6
|
+
root?: {
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
label?: {
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
requiredMark?: {
|
|
13
|
+
className?: string;
|
|
14
|
+
};
|
|
15
|
+
inputWrapper?: {
|
|
16
|
+
className?: string;
|
|
17
|
+
};
|
|
18
|
+
input?: {
|
|
19
|
+
className?: string;
|
|
20
|
+
};
|
|
21
|
+
helperText?: {
|
|
22
|
+
className?: string;
|
|
23
|
+
};
|
|
24
|
+
errorText?: {
|
|
25
|
+
className?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Props for `<Textarea>`.
|
|
30
|
+
*
|
|
31
|
+
* Mirrors `<TextField>` semantics (bridge integration, RBAC, gating)
|
|
32
|
+
* but renders a multi-line `<textarea>` and exposes a `resize` variant
|
|
33
|
+
* (default `'vertical'`). Inherits standard HTMLTextarea attributes
|
|
34
|
+
* (`rows`, `cols`, `maxLength`, etc.) via `TextareaHTMLAttributes`.
|
|
35
|
+
*/
|
|
36
|
+
export interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'name' | 'size' | 'onChange' | 'onBlur' | 'value' | 'defaultValue'>, TextareaVariants {
|
|
37
|
+
name: string;
|
|
38
|
+
rules?: unknown;
|
|
39
|
+
label?: ReactNode;
|
|
40
|
+
helperText?: ReactNode;
|
|
41
|
+
required?: boolean;
|
|
42
|
+
error?: boolean;
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
/** Engine predicate — textarea not rendered when it returns `false`. */
|
|
45
|
+
visibleWhen?: (engine: Engine) => boolean;
|
|
46
|
+
/** RBAC access requirement (combines with explicit `disabled`). */
|
|
47
|
+
access?: AccessRequirement;
|
|
48
|
+
/** Root className shortcut (`cn`'d with the variant root class). */
|
|
49
|
+
sx?: string;
|
|
50
|
+
/** Per-slot className overrides. */
|
|
51
|
+
slotProps?: TextareaSlotProps;
|
|
52
|
+
/** Controlled value (form mode reads from the bridge if omitted). */
|
|
53
|
+
value?: string;
|
|
54
|
+
/** Default value (uncontrolled, standalone mode only). */
|
|
55
|
+
defaultValue?: string;
|
|
56
|
+
/** User-supplied change handler — fires *after* bridge update. */
|
|
57
|
+
onChange?: ChangeEventHandler<HTMLTextAreaElement>;
|
|
58
|
+
/** User-supplied blur handler — fires *after* bridge `onBlur`. */
|
|
59
|
+
onBlur?: FocusEventHandler<HTMLTextAreaElement>;
|
|
60
|
+
/** Minimum visible row count for the textarea. Default: 3. */
|
|
61
|
+
rows?: number;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=textarea.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.types.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/textarea.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,sBAAsB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aACf,SAAQ,IAAI,CACR,sBAAsB,CAAC,mBAAmB,CAAC,EAC3C,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,CACnE,EACD,gBAAgB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,oEAAoE;IACpE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACnD,kEAAkE;IAClE,MAAM,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAChD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|