@dashforge/tw 1.0.0 → 1.1.1
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 +241 -0
- package/README.md +74 -15
- package/dist/index.d.ts +1 -146
- package/dist/index.esm.js +3127 -748
- package/dist/src/components/Alert/Alert.d.ts +65 -0
- package/dist/src/components/Alert/Alert.d.ts.map +1 -0
- package/dist/src/components/Alert/alert.types.d.ts +130 -0
- package/dist/src/components/Alert/alert.types.d.ts.map +1 -0
- package/dist/src/components/Alert/alert.variants.d.ts +85 -0
- package/dist/src/components/Alert/alert.variants.d.ts.map +1 -0
- package/dist/src/components/Avatar/Avatar.d.ts +48 -0
- package/dist/src/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/src/components/Avatar/avatar.types.d.ts +162 -0
- package/dist/src/components/Avatar/avatar.types.d.ts.map +1 -0
- package/dist/src/components/Avatar/avatar.variants.d.ts +208 -0
- package/dist/src/components/Avatar/avatar.variants.d.ts.map +1 -0
- package/dist/src/components/Badge/Badge.d.ts +63 -0
- package/dist/src/components/Badge/Badge.d.ts.map +1 -0
- package/dist/src/components/Badge/badge.types.d.ts +124 -0
- package/dist/src/components/Badge/badge.types.d.ts.map +1 -0
- package/dist/src/components/Badge/badge.variants.d.ts +262 -0
- package/dist/src/components/Badge/badge.variants.d.ts.map +1 -0
- package/dist/src/components/Box/Box.d.ts.map +1 -1
- package/dist/src/components/Box/box.types.d.ts +53 -0
- package/dist/src/components/Box/box.types.d.ts.map +1 -1
- package/dist/src/components/Button/Button.d.ts.map +1 -1
- package/dist/src/components/Button/button.types.d.ts +35 -0
- package/dist/src/components/Button/button.types.d.ts.map +1 -1
- package/dist/src/components/Card/Card.d.ts +107 -0
- package/dist/src/components/Card/Card.d.ts.map +1 -0
- package/dist/src/components/Card/card.types.d.ts +119 -0
- package/dist/src/components/Card/card.types.d.ts.map +1 -0
- package/dist/src/components/Chip/Chip.d.ts +67 -0
- package/dist/src/components/Chip/Chip.d.ts.map +1 -0
- package/dist/src/components/Chip/chip.types.d.ts +113 -0
- package/dist/src/components/Chip/chip.types.d.ts.map +1 -0
- package/dist/src/components/Chip/chip.variants.d.ts +155 -0
- package/dist/src/components/Chip/chip.variants.d.ts.map +1 -0
- package/dist/src/components/IconButton/IconButton.d.ts +57 -0
- package/dist/src/components/IconButton/IconButton.d.ts.map +1 -0
- package/dist/src/components/IconButton/iconButton.types.d.ts +96 -0
- package/dist/src/components/IconButton/iconButton.types.d.ts.map +1 -0
- package/dist/src/components/IconButton/iconButton.variants.d.ts +26 -0
- package/dist/src/components/IconButton/iconButton.variants.d.ts.map +1 -0
- package/dist/src/components/Menu/Menu.d.ts +118 -0
- package/dist/src/components/Menu/Menu.d.ts.map +1 -0
- package/dist/src/components/Menu/menu.types.d.ts +179 -0
- package/dist/src/components/Menu/menu.types.d.ts.map +1 -0
- package/dist/src/components/Menu/menu.variants.d.ts +129 -0
- package/dist/src/components/Menu/menu.variants.d.ts.map +1 -0
- package/dist/src/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/src/components/Snackbar/snackbar.types.d.ts +40 -3
- package/dist/src/components/Snackbar/snackbar.types.d.ts.map +1 -1
- package/dist/src/components/Snackbar/snackbar.variants.d.ts +12 -57
- package/dist/src/components/Snackbar/snackbar.variants.d.ts.map +1 -1
- package/dist/src/components/Spinner/Spinner.d.ts +44 -0
- package/dist/src/components/Spinner/Spinner.d.ts.map +1 -0
- package/dist/src/components/Spinner/spinner.types.d.ts +89 -0
- package/dist/src/components/Spinner/spinner.types.d.ts.map +1 -0
- package/dist/src/components/Spinner/spinner.variants.d.ts +111 -0
- package/dist/src/components/Spinner/spinner.variants.d.ts.map +1 -0
- package/dist/src/components/Table/cells/RenderChip.d.ts +15 -72
- package/dist/src/components/Table/cells/RenderChip.d.ts.map +1 -1
- package/dist/src/components/_shared/severity/index.d.ts +21 -0
- package/dist/src/components/_shared/severity/index.d.ts.map +1 -0
- package/dist/src/components/_shared/severity/severity.types.d.ts +48 -0
- package/dist/src/components/_shared/severity/severity.types.d.ts.map +1 -0
- package/dist/src/components/_shared/severity/severityIcons.d.ts +45 -0
- package/dist/src/components/_shared/severity/severityIcons.d.ts.map +1 -0
- package/dist/src/components/_shared/severity/severityVariants.d.ts +22 -0
- package/dist/src/components/_shared/severity/severityVariants.d.ts.map +1 -0
- package/dist/src/index.d.ts +27 -2
- package/dist/src/index.d.ts.map +1 -1
- package/package.json +9 -3
- package/.swcrc +0 -29
- package/A11Y.md +0 -130
- package/CONSUMER-VALIDATION.md +0 -130
- package/COVERAGE.md +0 -63
- package/LICENSE +0 -21
- package/PARITY.md +0 -481
- package/PERFORMANCE.md +0 -227
- package/REFINEMENT-NOTES.md +0 -50
- package/THEME-AUDIT.md +0 -174
- package/dist/components/Accordion/Accordion.d.ts +0 -21
- package/dist/components/Accordion/Accordion.d.ts.map +0 -1
- package/dist/components/Accordion/accordion.types.d.ts +0 -74
- package/dist/components/Accordion/accordion.types.d.ts.map +0 -1
- package/dist/components/Accordion/accordion.variants.d.ts +0 -58
- package/dist/components/Accordion/accordion.variants.d.ts.map +0 -1
- package/dist/components/AppShell/AppShell.d.ts +0 -46
- package/dist/components/AppShell/AppShell.d.ts.map +0 -1
- package/dist/components/AppShell/appShell.types.d.ts +0 -62
- package/dist/components/AppShell/appShell.types.d.ts.map +0 -1
- package/dist/components/AppShell/appShell.variants.d.ts +0 -65
- package/dist/components/AppShell/appShell.variants.d.ts.map +0 -1
- package/dist/components/AspectRatio/AspectRatio.d.ts +0 -36
- package/dist/components/AspectRatio/AspectRatio.d.ts.map +0 -1
- package/dist/components/AspectRatio/aspectRatio.types.d.ts +0 -50
- package/dist/components/AspectRatio/aspectRatio.types.d.ts.map +0 -1
- package/dist/components/Autocomplete/Autocomplete.d.ts +0 -32
- package/dist/components/Autocomplete/Autocomplete.d.ts.map +0 -1
- package/dist/components/Autocomplete/autocomplete.types.d.ts +0 -214
- package/dist/components/Autocomplete/autocomplete.types.d.ts.map +0 -1
- package/dist/components/Autocomplete/autocomplete.variants.d.ts +0 -214
- package/dist/components/Autocomplete/autocomplete.variants.d.ts.map +0 -1
- package/dist/components/Box/Box.d.ts +0 -36
- package/dist/components/Box/Box.d.ts.map +0 -1
- package/dist/components/Box/box.types.d.ts +0 -54
- package/dist/components/Box/box.types.d.ts.map +0 -1
- package/dist/components/Box/box.variants.d.ts +0 -402
- package/dist/components/Box/box.variants.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +0 -23
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts +0 -98
- package/dist/components/Breadcrumbs/breadcrumbs.types.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts +0 -85
- package/dist/components/Breadcrumbs/breadcrumbs.variants.d.ts.map +0 -1
- package/dist/components/Button/Button.d.ts +0 -44
- package/dist/components/Button/Button.d.ts.map +0 -1
- package/dist/components/Button/button.types.d.ts +0 -66
- package/dist/components/Button/button.types.d.ts.map +0 -1
- package/dist/components/Button/button.variants.d.ts +0 -104
- package/dist/components/Button/button.variants.d.ts.map +0 -1
- package/dist/components/Calendar/Calendar.d.ts +0 -14
- package/dist/components/Calendar/Calendar.d.ts.map +0 -1
- package/dist/components/Calendar/calendar.types.d.ts +0 -72
- package/dist/components/Calendar/calendar.types.d.ts.map +0 -1
- package/dist/components/Calendar/calendar.variants.d.ts +0 -99
- package/dist/components/Calendar/calendar.variants.d.ts.map +0 -1
- package/dist/components/Checkbox/Checkbox.d.ts +0 -31
- package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
- package/dist/components/Checkbox/checkbox.types.d.ts +0 -86
- package/dist/components/Checkbox/checkbox.types.d.ts.map +0 -1
- package/dist/components/Checkbox/checkbox.variants.d.ts +0 -109
- package/dist/components/Checkbox/checkbox.variants.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +0 -38
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/confirmDialog.types.d.ts +0 -80
- package/dist/components/ConfirmDialog/confirmDialog.types.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts +0 -90
- package/dist/components/ConfirmDialog/confirmDialog.variants.d.ts.map +0 -1
- package/dist/components/Container/Container.d.ts +0 -35
- package/dist/components/Container/Container.d.ts.map +0 -1
- package/dist/components/Container/container.types.d.ts +0 -41
- package/dist/components/Container/container.types.d.ts.map +0 -1
- package/dist/components/Container/container.variants.d.ts +0 -93
- package/dist/components/Container/container.variants.d.ts.map +0 -1
- package/dist/components/DataGrid/DataGrid.d.ts +0 -29
- package/dist/components/DataGrid/DataGrid.d.ts.map +0 -1
- package/dist/components/DataGrid/dataGrid.types.d.ts +0 -214
- package/dist/components/DataGrid/dataGrid.types.d.ts.map +0 -1
- package/dist/components/DataGrid/dataGrid.variants.d.ts +0 -222
- package/dist/components/DataGrid/dataGrid.variants.d.ts.map +0 -1
- package/dist/components/DataGrid/filters/ColumnFilters.d.ts +0 -23
- package/dist/components/DataGrid/filters/ColumnFilters.d.ts.map +0 -1
- package/dist/components/DataGrid/reorder/useColumnReorder.d.ts +0 -50
- package/dist/components/DataGrid/reorder/useColumnReorder.d.ts.map +0 -1
- package/dist/components/DataGrid/resize/useColumnResize.d.ts +0 -39
- package/dist/components/DataGrid/resize/useColumnResize.d.ts.map +0 -1
- package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts +0 -44
- package/dist/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts.map +0 -1
- package/dist/components/DatePicker/DatePicker.d.ts +0 -14
- package/dist/components/DatePicker/DatePicker.d.ts.map +0 -1
- package/dist/components/DatePicker/datePicker.types.d.ts +0 -88
- package/dist/components/DatePicker/datePicker.types.d.ts.map +0 -1
- package/dist/components/DatePicker/datePicker.variants.d.ts +0 -97
- package/dist/components/DatePicker/datePicker.variants.d.ts.map +0 -1
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +0 -13
- package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +0 -1
- package/dist/components/DateRangePicker/dateRangePicker.types.d.ts +0 -85
- package/dist/components/DateRangePicker/dateRangePicker.types.d.ts.map +0 -1
- package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts +0 -183
- package/dist/components/DateRangePicker/dateRangePicker.variants.d.ts.map +0 -1
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +0 -13
- package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +0 -1
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts +0 -90
- package/dist/components/DateTimePicker/dateTimePicker.types.d.ts.map +0 -1
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts +0 -107
- package/dist/components/DateTimePicker/dateTimePicker.variants.d.ts.map +0 -1
- package/dist/components/Dialog/Dialog.d.ts +0 -17
- package/dist/components/Dialog/Dialog.d.ts.map +0 -1
- package/dist/components/Dialog/dialog.types.d.ts +0 -75
- package/dist/components/Dialog/dialog.types.d.ts.map +0 -1
- package/dist/components/Dialog/dialog.variants.d.ts +0 -80
- package/dist/components/Dialog/dialog.variants.d.ts.map +0 -1
- package/dist/components/Divider/Divider.d.ts +0 -50
- package/dist/components/Divider/Divider.d.ts.map +0 -1
- package/dist/components/Divider/divider.types.d.ts +0 -47
- package/dist/components/Divider/divider.types.d.ts.map +0 -1
- package/dist/components/Divider/divider.variants.d.ts +0 -129
- package/dist/components/Divider/divider.variants.d.ts.map +0 -1
- package/dist/components/Grid/Grid.d.ts +0 -32
- package/dist/components/Grid/Grid.d.ts.map +0 -1
- package/dist/components/Grid/grid.types.d.ts +0 -103
- package/dist/components/Grid/grid.types.d.ts.map +0 -1
- package/dist/components/Grid/grid.variants.d.ts +0 -453
- package/dist/components/Grid/grid.variants.d.ts.map +0 -1
- package/dist/components/LeftNav/LeftNav.d.ts +0 -34
- package/dist/components/LeftNav/LeftNav.d.ts.map +0 -1
- package/dist/components/LeftNav/leftNav.types.d.ts +0 -136
- package/dist/components/LeftNav/leftNav.types.d.ts.map +0 -1
- package/dist/components/LeftNav/leftNav.variants.d.ts +0 -143
- package/dist/components/LeftNav/leftNav.variants.d.ts.map +0 -1
- package/dist/components/NumberField/NumberField.d.ts +0 -18
- package/dist/components/NumberField/NumberField.d.ts.map +0 -1
- package/dist/components/NumberField/numberField.types.d.ts +0 -79
- package/dist/components/NumberField/numberField.types.d.ts.map +0 -1
- package/dist/components/NumberField/numberField.variants.d.ts +0 -169
- package/dist/components/NumberField/numberField.variants.d.ts.map +0 -1
- package/dist/components/OTPField/OTPField.d.ts +0 -25
- package/dist/components/OTPField/OTPField.d.ts.map +0 -1
- package/dist/components/OTPField/otpField.types.d.ts +0 -74
- package/dist/components/OTPField/otpField.types.d.ts.map +0 -1
- package/dist/components/OTPField/otpField.variants.d.ts +0 -105
- package/dist/components/OTPField/otpField.variants.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.d.ts +0 -32
- package/dist/components/Pagination/Pagination.d.ts.map +0 -1
- package/dist/components/Pagination/pagination.helpers.d.ts +0 -23
- package/dist/components/Pagination/pagination.helpers.d.ts.map +0 -1
- package/dist/components/Pagination/pagination.types.d.ts +0 -120
- package/dist/components/Pagination/pagination.types.d.ts.map +0 -1
- package/dist/components/Pagination/pagination.variants.d.ts +0 -150
- package/dist/components/Pagination/pagination.variants.d.ts.map +0 -1
- package/dist/components/Popover/Popover.d.ts +0 -15
- package/dist/components/Popover/Popover.d.ts.map +0 -1
- package/dist/components/Popover/popover.types.d.ts +0 -45
- package/dist/components/Popover/popover.types.d.ts.map +0 -1
- package/dist/components/Popover/popover.variants.d.ts +0 -34
- package/dist/components/Popover/popover.variants.d.ts.map +0 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +0 -35
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +0 -1
- package/dist/components/RadioGroup/radioGroup.types.d.ts +0 -103
- package/dist/components/RadioGroup/radioGroup.types.d.ts.map +0 -1
- package/dist/components/RadioGroup/radioGroup.variants.d.ts +0 -166
- package/dist/components/RadioGroup/radioGroup.variants.d.ts.map +0 -1
- package/dist/components/Skeleton/Skeleton.d.ts +0 -23
- package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
- package/dist/components/Skeleton/skeleton.types.d.ts +0 -56
- package/dist/components/Skeleton/skeleton.types.d.ts.map +0 -1
- package/dist/components/Skeleton/skeleton.variants.d.ts +0 -110
- package/dist/components/Skeleton/skeleton.variants.d.ts.map +0 -1
- package/dist/components/Snackbar/Snackbar.d.ts +0 -37
- package/dist/components/Snackbar/Snackbar.d.ts.map +0 -1
- package/dist/components/Snackbar/snackbar.types.d.ts +0 -86
- package/dist/components/Snackbar/snackbar.types.d.ts.map +0 -1
- package/dist/components/Snackbar/snackbar.variants.d.ts +0 -153
- package/dist/components/Snackbar/snackbar.variants.d.ts.map +0 -1
- package/dist/components/Stack/Stack.d.ts +0 -24
- package/dist/components/Stack/Stack.d.ts.map +0 -1
- package/dist/components/Stack/stack.types.d.ts +0 -61
- package/dist/components/Stack/stack.types.d.ts.map +0 -1
- package/dist/components/Stack/stack.variants.d.ts +0 -163
- package/dist/components/Stack/stack.variants.d.ts.map +0 -1
- package/dist/components/Switch/Switch.d.ts +0 -15
- package/dist/components/Switch/Switch.d.ts.map +0 -1
- package/dist/components/Switch/switch.types.d.ts +0 -47
- package/dist/components/Switch/switch.types.d.ts.map +0 -1
- package/dist/components/Switch/switch.variants.d.ts +0 -105
- package/dist/components/Switch/switch.variants.d.ts.map +0 -1
- package/dist/components/Table/Table.d.ts +0 -24
- package/dist/components/Table/Table.d.ts.map +0 -1
- package/dist/components/Table/cells/RenderButton.d.ts +0 -13
- package/dist/components/Table/cells/RenderButton.d.ts.map +0 -1
- package/dist/components/Table/cells/RenderChip.d.ts +0 -80
- package/dist/components/Table/cells/RenderChip.d.ts.map +0 -1
- package/dist/components/Table/cells/RenderText.d.ts +0 -21
- package/dist/components/Table/cells/RenderText.d.ts.map +0 -1
- package/dist/components/Table/cells/RenderTwoLine.d.ts +0 -20
- package/dist/components/Table/cells/RenderTwoLine.d.ts.map +0 -1
- package/dist/components/Table/cells/RowActionsMenu.d.ts +0 -36
- package/dist/components/Table/cells/RowActionsMenu.d.ts.map +0 -1
- package/dist/components/Table/cells/index.d.ts +0 -11
- package/dist/components/Table/cells/index.d.ts.map +0 -1
- package/dist/components/Table/table.types.d.ts +0 -399
- package/dist/components/Table/table.types.d.ts.map +0 -1
- package/dist/components/Table/table.variants.d.ts +0 -285
- package/dist/components/Table/table.variants.d.ts.map +0 -1
- package/dist/components/Tabs/Tabs.d.ts +0 -19
- package/dist/components/Tabs/Tabs.d.ts.map +0 -1
- package/dist/components/Tabs/tabs.types.d.ts +0 -61
- package/dist/components/Tabs/tabs.types.d.ts.map +0 -1
- package/dist/components/Tabs/tabs.variants.d.ts +0 -82
- package/dist/components/Tabs/tabs.variants.d.ts.map +0 -1
- package/dist/components/Tabs/useTabs.d.ts +0 -55
- package/dist/components/Tabs/useTabs.d.ts.map +0 -1
- package/dist/components/TextField/TextField.d.ts +0 -25
- package/dist/components/TextField/TextField.d.ts.map +0 -1
- package/dist/components/TextField/textField.types.d.ts +0 -98
- package/dist/components/TextField/textField.types.d.ts.map +0 -1
- package/dist/components/TextField/textField.variants.d.ts +0 -166
- package/dist/components/TextField/textField.variants.d.ts.map +0 -1
- package/dist/components/Textarea/Textarea.d.ts +0 -16
- package/dist/components/Textarea/Textarea.d.ts.map +0 -1
- package/dist/components/Textarea/textarea.types.d.ts +0 -63
- package/dist/components/Textarea/textarea.types.d.ts.map +0 -1
- package/dist/components/Textarea/textarea.variants.d.ts +0 -197
- package/dist/components/Textarea/textarea.variants.d.ts.map +0 -1
- package/dist/components/TimePicker/TimePicker.d.ts +0 -12
- package/dist/components/TimePicker/TimePicker.d.ts.map +0 -1
- package/dist/components/TimePicker/timePicker.types.d.ts +0 -80
- package/dist/components/TimePicker/timePicker.types.d.ts.map +0 -1
- package/dist/components/TimePicker/timePicker.variants.d.ts +0 -103
- package/dist/components/TimePicker/timePicker.variants.d.ts.map +0 -1
- package/dist/components/Tooltip/Tooltip.d.ts +0 -29
- package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/components/Tooltip/tooltip.types.d.ts +0 -47
- package/dist/components/Tooltip/tooltip.types.d.ts.map +0 -1
- package/dist/components/Tooltip/tooltip.variants.d.ts +0 -34
- package/dist/components/Tooltip/tooltip.variants.d.ts.map +0 -1
- package/dist/components/TopBar/TopBar.d.ts +0 -33
- package/dist/components/TopBar/TopBar.d.ts.map +0 -1
- package/dist/components/TopBar/topBar.types.d.ts +0 -49
- package/dist/components/TopBar/topBar.types.d.ts.map +0 -1
- package/dist/components/TopBar/topBar.variants.d.ts +0 -79
- package/dist/components/TopBar/topBar.variants.d.ts.map +0 -1
- package/dist/components/Typography/Typography.d.ts +0 -42
- package/dist/components/Typography/Typography.d.ts.map +0 -1
- package/dist/components/Typography/typography.types.d.ts +0 -61
- package/dist/components/Typography/typography.types.d.ts.map +0 -1
- package/dist/components/Typography/typography.variants.d.ts +0 -167
- package/dist/components/Typography/typography.variants.d.ts.map +0 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +0 -42
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +0 -1
- package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts +0 -42
- package/dist/components/VisuallyHidden/visuallyHidden.types.d.ts.map +0 -1
- package/dist/components/_shared/data/getNestedValue.d.ts +0 -20
- package/dist/components/_shared/data/getNestedValue.d.ts.map +0 -1
- package/dist/components/_shared/data/useColumnAutoDetect.d.ts +0 -45
- package/dist/components/_shared/data/useColumnAutoDetect.d.ts.map +0 -1
- package/dist/components/_shared/data/useControllableState.d.ts +0 -23
- package/dist/components/_shared/data/useControllableState.d.ts.map +0 -1
- package/dist/components/_shared/data/useDebouncedValue.d.ts +0 -10
- package/dist/components/_shared/data/useDebouncedValue.d.ts.map +0 -1
- package/dist/components/_shared/data/useTableFilter.d.ts +0 -36
- package/dist/components/_shared/data/useTableFilter.d.ts.map +0 -1
- package/dist/components/_shared/data/useTableSearch.d.ts +0 -23
- package/dist/components/_shared/data/useTableSearch.d.ts.map +0 -1
- package/dist/components/_shared/data/useTableSelection.d.ts +0 -25
- package/dist/components/_shared/data/useTableSelection.d.ts.map +0 -1
- package/dist/components/_shared/data/useTableSort.d.ts +0 -20
- package/dist/components/_shared/data/useTableSort.d.ts.map +0 -1
- package/dist/components/_shared/data/useVirtualizer.d.ts +0 -107
- package/dist/components/_shared/data/useVirtualizer.d.ts.map +0 -1
- package/dist/components/_shared/resolveValidationState.d.ts +0 -42
- package/dist/components/_shared/resolveValidationState.d.ts.map +0 -1
- package/dist/hooks/useAccessState.d.ts +0 -37
- package/dist/hooks/useAccessState.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/tsconfig.lib.tsbuildinfo +0 -1
- package/dist/utils/cn.d.ts +0 -26
- package/dist/utils/cn.d.ts.map +0 -1
- package/eslint.config.mjs +0 -62
- package/project.json +0 -15
- package/rollup.config.cjs +0 -16
- package/src/components/Accordion/Accordion.test.tsx +0 -95
- package/src/components/Accordion/Accordion.tsx +0 -97
- package/src/components/Accordion/accordion.types.ts +0 -66
- package/src/components/Accordion/accordion.variants.ts +0 -32
- package/src/components/AppShell/AppShell.test.tsx +0 -223
- package/src/components/AppShell/AppShell.tsx +0 -239
- package/src/components/AppShell/appShell.types.ts +0 -49
- package/src/components/AppShell/appShell.variants.ts +0 -54
- package/src/components/AspectRatio/AspectRatio.test.tsx +0 -173
- package/src/components/AspectRatio/AspectRatio.tsx +0 -73
- package/src/components/AspectRatio/aspectRatio.types.ts +0 -54
- package/src/components/Autocomplete/Autocomplete.perf.test.tsx +0 -225
- package/src/components/Autocomplete/Autocomplete.test.tsx +0 -556
- package/src/components/Autocomplete/Autocomplete.tsx +0 -1069
- package/src/components/Autocomplete/autocomplete.types.ts +0 -198
- package/src/components/Autocomplete/autocomplete.variants.ts +0 -141
- package/src/components/Box/Box.test.tsx +0 -370
- package/src/components/Box/Box.tsx +0 -83
- package/src/components/Box/box.types.ts +0 -61
- package/src/components/Box/box.variants.ts +0 -230
- package/src/components/Breadcrumbs/Breadcrumbs.perf.test.tsx +0 -128
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -203
- package/src/components/Breadcrumbs/breadcrumbs.types.ts +0 -87
- package/src/components/Breadcrumbs/breadcrumbs.variants.ts +0 -54
- package/src/components/Button/Button.test.tsx +0 -183
- package/src/components/Button/Button.tsx +0 -150
- package/src/components/Button/button.types.ts +0 -74
- package/src/components/Button/button.variants.ts +0 -159
- package/src/components/Calendar/Calendar.test.tsx +0 -75
- package/src/components/Calendar/Calendar.tsx +0 -264
- package/src/components/Calendar/calendar.types.ts +0 -65
- package/src/components/Calendar/calendar.variants.ts +0 -64
- package/src/components/Checkbox/Checkbox.test.tsx +0 -146
- package/src/components/Checkbox/Checkbox.tsx +0 -286
- package/src/components/Checkbox/checkbox.types.ts +0 -88
- package/src/components/Checkbox/checkbox.variants.ts +0 -68
- package/src/components/ConfirmDialog/ConfirmDialog.perf.test.tsx +0 -172
- package/src/components/ConfirmDialog/ConfirmDialog.test.tsx +0 -311
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +0 -252
- package/src/components/ConfirmDialog/confirmDialog.types.ts +0 -70
- package/src/components/ConfirmDialog/confirmDialog.variants.ts +0 -76
- package/src/components/Container/Container.test.tsx +0 -209
- package/src/components/Container/Container.tsx +0 -74
- package/src/components/Container/container.types.ts +0 -45
- package/src/components/Container/container.variants.ts +0 -81
- package/src/components/DataGrid/DataGrid.perf.test.tsx +0 -114
- package/src/components/DataGrid/DataGrid.test.tsx +0 -1153
- package/src/components/DataGrid/DataGrid.tsx +0 -1282
- package/src/components/DataGrid/dataGrid.types.ts +0 -238
- package/src/components/DataGrid/dataGrid.variants.ts +0 -152
- package/src/components/DataGrid/filters/ColumnFilters.test.tsx +0 -330
- package/src/components/DataGrid/filters/ColumnFilters.tsx +0 -456
- package/src/components/DataGrid/reorder/useColumnReorder.test.ts +0 -130
- package/src/components/DataGrid/reorder/useColumnReorder.ts +0 -144
- package/src/components/DataGrid/resize/useColumnResize.test.ts +0 -144
- package/src/components/DataGrid/resize/useColumnResize.ts +0 -135
- package/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx +0 -186
- package/src/components/DatePicker/DatePicker.test.tsx +0 -76
- package/src/components/DatePicker/DatePicker.tsx +0 -305
- package/src/components/DatePicker/datePicker.types.ts +0 -77
- package/src/components/DatePicker/datePicker.variants.ts +0 -50
- package/src/components/DateRangePicker/DateRangePicker.test.tsx +0 -92
- package/src/components/DateRangePicker/DateRangePicker.tsx +0 -510
- package/src/components/DateRangePicker/dateRangePicker.types.ts +0 -74
- package/src/components/DateRangePicker/dateRangePicker.variants.ts +0 -101
- package/src/components/DateTimePicker/DateTimePicker.test.tsx +0 -78
- package/src/components/DateTimePicker/DateTimePicker.tsx +0 -347
- package/src/components/DateTimePicker/dateTimePicker.types.ts +0 -79
- package/src/components/DateTimePicker/dateTimePicker.variants.ts +0 -55
- package/src/components/Dialog/Dialog.test.tsx +0 -96
- package/src/components/Dialog/Dialog.tsx +0 -102
- package/src/components/Dialog/dialog.types.ts +0 -62
- package/src/components/Dialog/dialog.variants.ts +0 -66
- package/src/components/Divider/Divider.test.tsx +0 -243
- package/src/components/Divider/Divider.tsx +0 -140
- package/src/components/Divider/divider.types.ts +0 -52
- package/src/components/Divider/divider.variants.ts +0 -116
- package/src/components/Grid/Grid.test.tsx +0 -321
- package/src/components/Grid/Grid.tsx +0 -148
- package/src/components/Grid/grid.types.ts +0 -112
- package/src/components/Grid/grid.variants.ts +0 -133
- package/src/components/LeftNav/LeftNav.perf.test.tsx +0 -172
- package/src/components/LeftNav/LeftNav.test.tsx +0 -302
- package/src/components/LeftNav/LeftNav.tsx +0 -330
- package/src/components/LeftNav/leftNav.types.ts +0 -120
- package/src/components/LeftNav/leftNav.variants.ts +0 -107
- package/src/components/NumberField/NumberField.test.tsx +0 -83
- package/src/components/NumberField/NumberField.tsx +0 -321
- package/src/components/NumberField/numberField.types.ts +0 -72
- package/src/components/NumberField/numberField.variants.ts +0 -94
- package/src/components/OTPField/OTPField.test.tsx +0 -121
- package/src/components/OTPField/OTPField.tsx +0 -250
- package/src/components/OTPField/otpField.types.ts +0 -58
- package/src/components/OTPField/otpField.variants.ts +0 -72
- package/src/components/Pagination/Pagination.test.tsx +0 -314
- package/src/components/Pagination/Pagination.tsx +0 -277
- package/src/components/Pagination/pagination.helpers.ts +0 -102
- package/src/components/Pagination/pagination.types.ts +0 -117
- package/src/components/Pagination/pagination.variants.ts +0 -117
- package/src/components/Popover/Popover.test.tsx +0 -72
- package/src/components/Popover/Popover.tsx +0 -55
- package/src/components/Popover/popover.types.ts +0 -42
- package/src/components/Popover/popover.variants.ts +0 -24
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -140
- package/src/components/RadioGroup/RadioGroup.tsx +0 -283
- package/src/components/RadioGroup/radioGroup.types.ts +0 -85
- package/src/components/RadioGroup/radioGroup.variants.ts +0 -87
- package/src/components/Skeleton/Skeleton.test.tsx +0 -127
- package/src/components/Skeleton/Skeleton.tsx +0 -49
- package/src/components/Skeleton/skeleton.types.ts +0 -59
- package/src/components/Skeleton/skeleton.variants.ts +0 -87
- package/src/components/Snackbar/Snackbar.perf.test.tsx +0 -144
- package/src/components/Snackbar/Snackbar.test.tsx +0 -327
- package/src/components/Snackbar/Snackbar.tsx +0 -298
- package/src/components/Snackbar/snackbar.types.ts +0 -83
- package/src/components/Snackbar/snackbar.variants.ts +0 -74
- package/src/components/Stack/Stack.test.tsx +0 -309
- package/src/components/Stack/Stack.tsx +0 -115
- package/src/components/Stack/stack.types.ts +0 -68
- package/src/components/Stack/stack.variants.ts +0 -80
- package/src/components/Switch/Switch.test.tsx +0 -131
- package/src/components/Switch/Switch.tsx +0 -158
- package/src/components/Switch/switch.types.ts +0 -36
- package/src/components/Switch/switch.variants.ts +0 -70
- package/src/components/Table/Table.perf.test.tsx +0 -81
- package/src/components/Table/Table.test.tsx +0 -674
- package/src/components/Table/Table.tsx +0 -863
- package/src/components/Table/cells/RenderButton.tsx +0 -23
- package/src/components/Table/cells/RenderChip.tsx +0 -100
- package/src/components/Table/cells/RenderText.tsx +0 -37
- package/src/components/Table/cells/RenderTwoLine.tsx +0 -34
- package/src/components/Table/cells/RowActionsMenu.tsx +0 -147
- package/src/components/Table/cells/cells.test.tsx +0 -247
- package/src/components/Table/cells/index.ts +0 -14
- package/src/components/Table/table.types.ts +0 -438
- package/src/components/Table/table.variants.ts +0 -207
- package/src/components/Tabs/Tabs.test.tsx +0 -145
- package/src/components/Tabs/Tabs.tsx +0 -77
- package/src/components/Tabs/tabs.types.ts +0 -55
- package/src/components/Tabs/tabs.variants.ts +0 -69
- package/src/components/Tabs/useTabs.ts +0 -167
- package/src/components/TextField/TextField.test.tsx +0 -198
- package/src/components/TextField/TextField.tsx +0 -245
- package/src/components/TextField/textField.types.ts +0 -90
- package/src/components/TextField/textField.variants.ts +0 -105
- package/src/components/Textarea/Textarea.test.tsx +0 -75
- package/src/components/Textarea/Textarea.tsx +0 -190
- package/src/components/Textarea/textarea.types.ts +0 -60
- package/src/components/Textarea/textarea.variants.ts +0 -85
- package/src/components/TimePicker/TimePicker.test.tsx +0 -65
- package/src/components/TimePicker/TimePicker.tsx +0 -274
- package/src/components/TimePicker/timePicker.types.ts +0 -69
- package/src/components/TimePicker/timePicker.variants.ts +0 -53
- package/src/components/Tooltip/Tooltip.test.tsx +0 -73
- package/src/components/Tooltip/Tooltip.tsx +0 -70
- package/src/components/Tooltip/tooltip.types.ts +0 -44
- package/src/components/Tooltip/tooltip.variants.ts +0 -28
- package/src/components/TopBar/TopBar.test.tsx +0 -129
- package/src/components/TopBar/TopBar.tsx +0 -66
- package/src/components/TopBar/topBar.types.ts +0 -42
- package/src/components/TopBar/topBar.variants.ts +0 -38
- package/src/components/Typography/Typography.test.tsx +0 -247
- package/src/components/Typography/Typography.tsx +0 -112
- package/src/components/Typography/typography.types.ts +0 -65
- package/src/components/Typography/typography.variants.ts +0 -130
- package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +0 -86
- package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -59
- package/src/components/VisuallyHidden/visuallyHidden.types.ts +0 -45
- package/src/components/_shared/data/getNestedValue.test.ts +0 -50
- package/src/components/_shared/data/getNestedValue.ts +0 -32
- package/src/components/_shared/data/useColumnAutoDetect.test.ts +0 -123
- package/src/components/_shared/data/useColumnAutoDetect.ts +0 -100
- package/src/components/_shared/data/useControllableState.ts +0 -48
- package/src/components/_shared/data/useDebouncedValue.ts +0 -24
- package/src/components/_shared/data/useTableFilter.test.ts +0 -166
- package/src/components/_shared/data/useTableFilter.ts +0 -118
- package/src/components/_shared/data/useTableSearch.test.ts +0 -115
- package/src/components/_shared/data/useTableSearch.ts +0 -66
- package/src/components/_shared/data/useTableSelection.test.ts +0 -100
- package/src/components/_shared/data/useTableSelection.ts +0 -100
- package/src/components/_shared/data/useTableSort.test.ts +0 -150
- package/src/components/_shared/data/useTableSort.ts +0 -141
- package/src/components/_shared/data/useVirtualizer.test.ts +0 -158
- package/src/components/_shared/data/useVirtualizer.ts +0 -199
- package/src/components/_shared/resolveValidationState.ts +0 -60
- package/src/components/_shared/themeIdentity.test.ts +0 -113
- package/src/hooks/useAccessState.spec.tsx +0 -161
- package/src/hooks/useAccessState.ts +0 -81
- package/src/index.ts +0 -388
- package/src/utils/cn.spec.ts +0 -16
- package/src/utils/cn.ts +0 -29
- package/test-output/vitest/coverage/base.css +0 -224
- package/test-output/vitest/coverage/block-navigation.js +0 -87
- package/test-output/vitest/coverage/clover.xml +0 -2418
- package/test-output/vitest/coverage/coverage-final.json +0 -89
- package/test-output/vitest/coverage/favicon.png +0 -0
- package/test-output/vitest/coverage/index.html +0 -746
- package/test-output/vitest/coverage/prettify.css +0 -1
- package/test-output/vitest/coverage/prettify.js +0 -2
- package/test-output/vitest/coverage/sort-arrow-sprite.png +0 -0
- package/test-output/vitest/coverage/sorter.js +0 -210
- package/test-output/vitest/coverage/src/components/Accordion/Accordion.tsx.html +0 -376
- package/test-output/vitest/coverage/src/components/Accordion/accordion.variants.ts.html +0 -181
- package/test-output/vitest/coverage/src/components/Accordion/index.html +0 -131
- package/test-output/vitest/coverage/src/components/AppShell/AppShell.tsx.html +0 -802
- package/test-output/vitest/coverage/src/components/AppShell/appShell.variants.ts.html +0 -247
- package/test-output/vitest/coverage/src/components/AppShell/index.html +0 -131
- package/test-output/vitest/coverage/src/components/AspectRatio/AspectRatio.tsx.html +0 -304
- package/test-output/vitest/coverage/src/components/AspectRatio/index.html +0 -116
- package/test-output/vitest/coverage/src/components/Autocomplete/Autocomplete.tsx.html +0 -3292
- package/test-output/vitest/coverage/src/components/Autocomplete/autocomplete.variants.ts.html +0 -508
- package/test-output/vitest/coverage/src/components/Autocomplete/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Box/Box.tsx.html +0 -334
- package/test-output/vitest/coverage/src/components/Box/box.variants.ts.html +0 -775
- package/test-output/vitest/coverage/src/components/Box/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Breadcrumbs/Breadcrumbs.tsx.html +0 -694
- package/test-output/vitest/coverage/src/components/Breadcrumbs/breadcrumbs.variants.ts.html +0 -247
- package/test-output/vitest/coverage/src/components/Breadcrumbs/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Button/Button.tsx.html +0 -535
- package/test-output/vitest/coverage/src/components/Button/button.variants.ts.html +0 -562
- package/test-output/vitest/coverage/src/components/Button/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Checkbox/Checkbox.tsx.html +0 -943
- package/test-output/vitest/coverage/src/components/Checkbox/checkbox.variants.ts.html +0 -289
- package/test-output/vitest/coverage/src/components/Checkbox/index.html +0 -131
- package/test-output/vitest/coverage/src/components/ConfirmDialog/ConfirmDialog.tsx.html +0 -841
- package/test-output/vitest/coverage/src/components/ConfirmDialog/confirmDialog.variants.ts.html +0 -313
- package/test-output/vitest/coverage/src/components/ConfirmDialog/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Container/Container.tsx.html +0 -307
- package/test-output/vitest/coverage/src/components/Container/container.variants.ts.html +0 -328
- package/test-output/vitest/coverage/src/components/Container/index.html +0 -131
- package/test-output/vitest/coverage/src/components/DataGrid/DataGrid.tsx.html +0 -3937
- package/test-output/vitest/coverage/src/components/DataGrid/dataGrid.variants.ts.html +0 -541
- package/test-output/vitest/coverage/src/components/DataGrid/filters/ColumnFilters.tsx.html +0 -1453
- package/test-output/vitest/coverage/src/components/DataGrid/filters/index.html +0 -116
- package/test-output/vitest/coverage/src/components/DataGrid/index.html +0 -131
- package/test-output/vitest/coverage/src/components/DataGrid/reorder/index.html +0 -116
- package/test-output/vitest/coverage/src/components/DataGrid/reorder/useColumnReorder.ts.html +0 -517
- package/test-output/vitest/coverage/src/components/DataGrid/resize/index.html +0 -116
- package/test-output/vitest/coverage/src/components/DataGrid/resize/useColumnResize.ts.html +0 -490
- package/test-output/vitest/coverage/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx.html +0 -592
- package/test-output/vitest/coverage/src/components/DataGrid/visibility/index.html +0 -116
- package/test-output/vitest/coverage/src/components/DateTimePicker/DateTimePicker.tsx.html +0 -1042
- package/test-output/vitest/coverage/src/components/DateTimePicker/dateTimePicker.variants.ts.html +0 -337
- package/test-output/vitest/coverage/src/components/DateTimePicker/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Dialog/Dialog.tsx.html +0 -391
- package/test-output/vitest/coverage/src/components/Dialog/dialog.variants.ts.html +0 -283
- package/test-output/vitest/coverage/src/components/Dialog/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Divider/Divider.tsx.html +0 -505
- package/test-output/vitest/coverage/src/components/Divider/divider.variants.ts.html +0 -433
- package/test-output/vitest/coverage/src/components/Divider/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Grid/Grid.tsx.html +0 -529
- package/test-output/vitest/coverage/src/components/Grid/grid.variants.ts.html +0 -484
- package/test-output/vitest/coverage/src/components/Grid/index.html +0 -131
- package/test-output/vitest/coverage/src/components/LeftNav/LeftNav.tsx.html +0 -1075
- package/test-output/vitest/coverage/src/components/LeftNav/index.html +0 -131
- package/test-output/vitest/coverage/src/components/LeftNav/leftNav.variants.ts.html +0 -406
- package/test-output/vitest/coverage/src/components/NumberField/NumberField.tsx.html +0 -1048
- package/test-output/vitest/coverage/src/components/NumberField/index.html +0 -131
- package/test-output/vitest/coverage/src/components/NumberField/numberField.variants.ts.html +0 -367
- package/test-output/vitest/coverage/src/components/OTPField/OTPField.tsx.html +0 -835
- package/test-output/vitest/coverage/src/components/OTPField/index.html +0 -131
- package/test-output/vitest/coverage/src/components/OTPField/otpField.variants.ts.html +0 -301
- package/test-output/vitest/coverage/src/components/Pagination/Pagination.tsx.html +0 -916
- package/test-output/vitest/coverage/src/components/Pagination/index.html +0 -146
- package/test-output/vitest/coverage/src/components/Pagination/pagination.helpers.ts.html +0 -391
- package/test-output/vitest/coverage/src/components/Pagination/pagination.variants.ts.html +0 -436
- package/test-output/vitest/coverage/src/components/Popover/Popover.tsx.html +0 -250
- package/test-output/vitest/coverage/src/components/Popover/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Popover/popover.variants.ts.html +0 -157
- package/test-output/vitest/coverage/src/components/RadioGroup/RadioGroup.tsx.html +0 -934
- package/test-output/vitest/coverage/src/components/RadioGroup/index.html +0 -131
- package/test-output/vitest/coverage/src/components/RadioGroup/radioGroup.variants.ts.html +0 -346
- package/test-output/vitest/coverage/src/components/Skeleton/Skeleton.tsx.html +0 -232
- package/test-output/vitest/coverage/src/components/Skeleton/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Skeleton/skeleton.variants.ts.html +0 -346
- package/test-output/vitest/coverage/src/components/Snackbar/Snackbar.tsx.html +0 -979
- package/test-output/vitest/coverage/src/components/Snackbar/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Snackbar/snackbar.variants.ts.html +0 -307
- package/test-output/vitest/coverage/src/components/Stack/Stack.tsx.html +0 -430
- package/test-output/vitest/coverage/src/components/Stack/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Stack/stack.variants.ts.html +0 -325
- package/test-output/vitest/coverage/src/components/Switch/Switch.tsx.html +0 -559
- package/test-output/vitest/coverage/src/components/Switch/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Switch/switch.variants.ts.html +0 -295
- package/test-output/vitest/coverage/src/components/Table/Table.tsx.html +0 -2677
- package/test-output/vitest/coverage/src/components/Table/cells/RenderButton.tsx.html +0 -154
- package/test-output/vitest/coverage/src/components/Table/cells/RenderChip.tsx.html +0 -385
- package/test-output/vitest/coverage/src/components/Table/cells/RenderText.tsx.html +0 -196
- package/test-output/vitest/coverage/src/components/Table/cells/RenderTwoLine.tsx.html +0 -187
- package/test-output/vitest/coverage/src/components/Table/cells/RowActionsMenu.tsx.html +0 -526
- package/test-output/vitest/coverage/src/components/Table/cells/index.html +0 -191
- package/test-output/vitest/coverage/src/components/Table/cells/index.ts.html +0 -127
- package/test-output/vitest/coverage/src/components/Table/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Table/table.variants.ts.html +0 -706
- package/test-output/vitest/coverage/src/components/Tabs/Tabs.tsx.html +0 -283
- package/test-output/vitest/coverage/src/components/Tabs/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Tabs/tabs.variants.ts.html +0 -292
- package/test-output/vitest/coverage/src/components/TextField/TextField.tsx.html +0 -820
- package/test-output/vitest/coverage/src/components/TextField/index.html +0 -131
- package/test-output/vitest/coverage/src/components/TextField/textField.variants.ts.html +0 -400
- package/test-output/vitest/coverage/src/components/Textarea/Textarea.tsx.html +0 -655
- package/test-output/vitest/coverage/src/components/Textarea/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Textarea/textarea.variants.ts.html +0 -340
- package/test-output/vitest/coverage/src/components/Tooltip/Tooltip.tsx.html +0 -295
- package/test-output/vitest/coverage/src/components/Tooltip/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Tooltip/tooltip.variants.ts.html +0 -169
- package/test-output/vitest/coverage/src/components/TopBar/TopBar.tsx.html +0 -283
- package/test-output/vitest/coverage/src/components/TopBar/index.html +0 -131
- package/test-output/vitest/coverage/src/components/TopBar/topBar.variants.ts.html +0 -199
- package/test-output/vitest/coverage/src/components/Typography/Typography.tsx.html +0 -421
- package/test-output/vitest/coverage/src/components/Typography/index.html +0 -131
- package/test-output/vitest/coverage/src/components/Typography/typography.variants.ts.html +0 -436
- package/test-output/vitest/coverage/src/components/VisuallyHidden/VisuallyHidden.tsx.html +0 -262
- package/test-output/vitest/coverage/src/components/VisuallyHidden/index.html +0 -116
- package/test-output/vitest/coverage/src/components/_shared/data/getNestedValue.ts.html +0 -181
- package/test-output/vitest/coverage/src/components/_shared/data/index.html +0 -236
- package/test-output/vitest/coverage/src/components/_shared/data/useColumnAutoDetect.ts.html +0 -385
- package/test-output/vitest/coverage/src/components/_shared/data/useControllableState.ts.html +0 -229
- package/test-output/vitest/coverage/src/components/_shared/data/useDebouncedValue.ts.html +0 -157
- package/test-output/vitest/coverage/src/components/_shared/data/useTableFilter.ts.html +0 -439
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSearch.ts.html +0 -283
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSelection.ts.html +0 -385
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSort.ts.html +0 -508
- package/test-output/vitest/coverage/src/components/_shared/data/useVirtualizer.ts.html +0 -682
- package/test-output/vitest/coverage/src/components/_shared/index.html +0 -116
- package/test-output/vitest/coverage/src/components/_shared/resolveValidationState.ts.html +0 -265
- package/test-output/vitest/coverage/src/hooks/index.html +0 -116
- package/test-output/vitest/coverage/src/hooks/useAccessState.ts.html +0 -328
- package/test-output/vitest/coverage/src/index.html +0 -116
- package/test-output/vitest/coverage/src/index.ts.html +0 -1153
- package/test-output/vitest/coverage/src/utils/cn.ts.html +0 -172
- package/test-output/vitest/coverage/src/utils/index.html +0 -116
- package/tsconfig.json +0 -13
- package/tsconfig.lib.json +0 -58
- package/tsconfig.spec.json +0 -34
- package/vite.config.ts +0 -33
- package/vitest.config.mts +0 -29
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Window descriptor — which slice of the row array is currently
|
|
5
|
-
* mounted in DOM, and how much spacer height to render above and
|
|
6
|
-
* below the visible window so the scrollbar size matches the
|
|
7
|
-
* "virtual" total height.
|
|
8
|
-
*/
|
|
9
|
-
export interface VirtualizerWindow {
|
|
10
|
-
/** First row index inside the visible window (inclusive). */
|
|
11
|
-
startIndex: number;
|
|
12
|
-
/** Last row index inside the visible window (inclusive). */
|
|
13
|
-
endIndex: number;
|
|
14
|
-
/** Pixels to render above the visible rows (spacer top). */
|
|
15
|
-
paddingTop: number;
|
|
16
|
-
/** Pixels to render below the visible rows (spacer bottom). */
|
|
17
|
-
paddingBottom: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface UseVirtualizerArgs {
|
|
21
|
-
/** Total number of rows in the underlying data set. */
|
|
22
|
-
totalCount: number;
|
|
23
|
-
/** Fixed row height in pixels. */
|
|
24
|
-
rowHeight: number;
|
|
25
|
-
/**
|
|
26
|
-
* Visible viewport height in pixels. Pass the height of the
|
|
27
|
-
* scroll container.
|
|
28
|
-
*/
|
|
29
|
-
viewportHeight: number;
|
|
30
|
-
/** Current scrollTop of the scroll container. */
|
|
31
|
-
scrollTop: number;
|
|
32
|
-
/**
|
|
33
|
-
* How many extra rows to render above / below the visible window
|
|
34
|
-
* for smoother scrolling (reduces blank-flash on fast scroll).
|
|
35
|
-
* @default 5
|
|
36
|
-
*/
|
|
37
|
-
overscan?: number;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Compute the visible window of rows + the spacer heights given the
|
|
42
|
-
* current scroll position. Pure function — exported for testability.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```ts
|
|
46
|
-
* computeWindow({ totalCount: 1000, rowHeight: 48, viewportHeight: 600,
|
|
47
|
-
* scrollTop: 0, overscan: 5 });
|
|
48
|
-
* // → { startIndex: 0, endIndex: 17, paddingTop: 0, paddingBottom: 47136 }
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
export function computeWindow(args: UseVirtualizerArgs): VirtualizerWindow {
|
|
52
|
-
const { totalCount, rowHeight, viewportHeight, scrollTop, overscan = 5 } = args;
|
|
53
|
-
|
|
54
|
-
if (totalCount <= 0 || rowHeight <= 0 || viewportHeight <= 0) {
|
|
55
|
-
return { startIndex: 0, endIndex: -1, paddingTop: 0, paddingBottom: 0 };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Raw visible range from scrollTop alone.
|
|
59
|
-
const rawStart = Math.floor(scrollTop / rowHeight);
|
|
60
|
-
const rawEnd = Math.ceil((scrollTop + viewportHeight) / rowHeight);
|
|
61
|
-
|
|
62
|
-
// Apply overscan + clamp to [0, totalCount - 1].
|
|
63
|
-
const startIndex = Math.max(0, rawStart - overscan);
|
|
64
|
-
const endIndex = Math.min(totalCount - 1, rawEnd + overscan);
|
|
65
|
-
|
|
66
|
-
const paddingTop = startIndex * rowHeight;
|
|
67
|
-
const paddingBottom = Math.max(0, (totalCount - 1 - endIndex) * rowHeight);
|
|
68
|
-
|
|
69
|
-
return { startIndex, endIndex, paddingTop, paddingBottom };
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* `useVirtualizer` — viewport-based row windowing for `<DataGrid>`.
|
|
74
|
-
*
|
|
75
|
-
* Hand-rolled (no `@tanstack/react-virtual` dep — constraint memorized
|
|
76
|
-
* in `feedback_dashforge_preset_is_identity` companion: "no new
|
|
77
|
-
* external runtime deps"). Uses scroll event + `requestAnimationFrame`
|
|
78
|
-
* debounce + `ResizeObserver` on the container. Fixed row height
|
|
79
|
-
* only in v1 — variable-height with measurement cache deferred to
|
|
80
|
-
* v1-bis.
|
|
81
|
-
*
|
|
82
|
-
* Returns:
|
|
83
|
-
* - `scrollRef`: attach to the scroll container `<div>`.
|
|
84
|
-
* - `window`: which row indices to mount + top/bottom spacer heights
|
|
85
|
-
* to preserve scroll-area size.
|
|
86
|
-
* - `viewportHeight`: current container height (re-measured on
|
|
87
|
-
* `ResizeObserver` ticks).
|
|
88
|
-
*
|
|
89
|
-
* The DataGrid renders `rows.slice(window.startIndex, window.endIndex + 1)`
|
|
90
|
-
* between two spacer `<tr style={{ height: paddingTop }} />` elements
|
|
91
|
-
* (above and below). This preserves `<table>` semantics — screen
|
|
92
|
-
* readers see a continuous structure with `aria-hidden` spacers.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```tsx
|
|
96
|
-
* const { scrollRef, window } = useVirtualizer({
|
|
97
|
-
* totalCount: rows.length,
|
|
98
|
-
* rowHeight: 48,
|
|
99
|
-
* overscan: 5,
|
|
100
|
-
* });
|
|
101
|
-
*
|
|
102
|
-
* return (
|
|
103
|
-
* <div ref={scrollRef} style={{ height: 600, overflow: 'auto' }}>
|
|
104
|
-
* <table>
|
|
105
|
-
* <tbody>
|
|
106
|
-
* <tr aria-hidden="true" style={{ height: window.paddingTop }} />
|
|
107
|
-
* {rows.slice(window.startIndex, window.endIndex + 1).map(...)}
|
|
108
|
-
* <tr aria-hidden="true" style={{ height: window.paddingBottom }} />
|
|
109
|
-
* </tbody>
|
|
110
|
-
* </table>
|
|
111
|
-
* </div>
|
|
112
|
-
* );
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
export function useVirtualizer(args: {
|
|
116
|
-
totalCount: number;
|
|
117
|
-
rowHeight: number;
|
|
118
|
-
overscan?: number;
|
|
119
|
-
/**
|
|
120
|
-
* Initial viewport height — used before the ResizeObserver
|
|
121
|
-
* settles on first paint. Pass an explicit `height` prop value
|
|
122
|
-
* if you have one; otherwise the hook re-measures on layout.
|
|
123
|
-
* @default 400
|
|
124
|
-
*/
|
|
125
|
-
initialViewportHeight?: number;
|
|
126
|
-
}): {
|
|
127
|
-
scrollRef: React.RefObject<HTMLDivElement | null>;
|
|
128
|
-
window: VirtualizerWindow;
|
|
129
|
-
viewportHeight: number;
|
|
130
|
-
} {
|
|
131
|
-
const { totalCount, rowHeight, overscan = 5, initialViewportHeight = 400 } = args;
|
|
132
|
-
|
|
133
|
-
const scrollRef = useRef<HTMLDivElement | null>(null);
|
|
134
|
-
const [scrollTop, setScrollTop] = useState(0);
|
|
135
|
-
const [viewportHeight, setViewportHeight] = useState(initialViewportHeight);
|
|
136
|
-
|
|
137
|
-
// Debounce scroll handler via requestAnimationFrame so we never
|
|
138
|
-
// re-render more than once per paint frame even when the scroll
|
|
139
|
-
// event fires rapidly during fast scrolling.
|
|
140
|
-
const rafIdRef = useRef<number | null>(null);
|
|
141
|
-
const handleScroll = useCallback(() => {
|
|
142
|
-
if (rafIdRef.current != null) return;
|
|
143
|
-
rafIdRef.current = requestAnimationFrame(() => {
|
|
144
|
-
rafIdRef.current = null;
|
|
145
|
-
const el = scrollRef.current;
|
|
146
|
-
if (!el) return;
|
|
147
|
-
setScrollTop(el.scrollTop);
|
|
148
|
-
});
|
|
149
|
-
}, []);
|
|
150
|
-
|
|
151
|
-
// Attach scroll listener.
|
|
152
|
-
useEffect(() => {
|
|
153
|
-
const el = scrollRef.current;
|
|
154
|
-
if (!el) return;
|
|
155
|
-
el.addEventListener('scroll', handleScroll, { passive: true });
|
|
156
|
-
return () => {
|
|
157
|
-
el.removeEventListener('scroll', handleScroll);
|
|
158
|
-
if (rafIdRef.current != null) {
|
|
159
|
-
cancelAnimationFrame(rafIdRef.current);
|
|
160
|
-
rafIdRef.current = null;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
}, [handleScroll]);
|
|
164
|
-
|
|
165
|
-
// Track container viewport height via ResizeObserver — re-virtualize
|
|
166
|
-
// when the container size changes (window resize, sidebar collapse,
|
|
167
|
-
// etc.). Use `useLayoutEffect` so the first measurement happens
|
|
168
|
-
// before paint to avoid a flash of stale window.
|
|
169
|
-
//
|
|
170
|
-
// **Defensive**: only accept measurements > 0. jsdom (test env)
|
|
171
|
-
// returns `clientHeight === 0` for unmounted containers, which would
|
|
172
|
-
// collapse the window to empty. The hook keeps the
|
|
173
|
-
// `initialViewportHeight` fallback in that case.
|
|
174
|
-
useLayoutEffect(() => {
|
|
175
|
-
const el = scrollRef.current;
|
|
176
|
-
if (!el) return;
|
|
177
|
-
if (el.clientHeight > 0) {
|
|
178
|
-
setViewportHeight(el.clientHeight);
|
|
179
|
-
}
|
|
180
|
-
if (typeof ResizeObserver === 'undefined') return;
|
|
181
|
-
const observer = new ResizeObserver((entries) => {
|
|
182
|
-
const entry = entries[0];
|
|
183
|
-
if (!entry || entry.contentRect.height <= 0) return;
|
|
184
|
-
setViewportHeight(entry.contentRect.height);
|
|
185
|
-
});
|
|
186
|
-
observer.observe(el);
|
|
187
|
-
return () => observer.disconnect();
|
|
188
|
-
}, []);
|
|
189
|
-
|
|
190
|
-
const window = computeWindow({
|
|
191
|
-
totalCount,
|
|
192
|
-
rowHeight,
|
|
193
|
-
viewportHeight,
|
|
194
|
-
scrollTop,
|
|
195
|
-
overscan,
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
return { scrollRef, window, viewportHeight };
|
|
199
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import type { DashFormBridge } from '@dashforge/ui-core';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Resolved validation state for a bridge-managed field.
|
|
6
|
-
*
|
|
7
|
-
* Returned by `resolveValidationState`, this is consumed by all form
|
|
8
|
-
* components that surface error + helper text (TextField, Checkbox,
|
|
9
|
-
* Switch, …) to derive their final render state.
|
|
10
|
-
*/
|
|
11
|
-
export interface ValidationState {
|
|
12
|
-
error: boolean;
|
|
13
|
-
helperText: ReactNode;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Compute `error` + `helperText` for a bridge-managed field.
|
|
18
|
-
*
|
|
19
|
-
* **Renderer-agnostic** — copy of the MUI-side
|
|
20
|
-
* `textField.validation.ts`. Promoted to a `_shared/` directory inside
|
|
21
|
-
* `@dashforge/tw` so all form components (TextField + Checkbox +
|
|
22
|
-
* Switch) reuse the same precedence logic without depending on a
|
|
23
|
-
* specific component folder.
|
|
24
|
-
*
|
|
25
|
-
* Precedence rules (matches MUI side byte-for-byte):
|
|
26
|
-
*
|
|
27
|
-
* 1. **Explicit props win.** If the user passed `error` / `helperText`
|
|
28
|
-
* explicitly, those values are used as-is.
|
|
29
|
-
* 2. **Auto values are gated by interaction.** The bridge's error is
|
|
30
|
-
* surfaced only when the field is `touched` OR the form has been
|
|
31
|
-
* submitted at least once (`submitCount > 0`). This prevents the
|
|
32
|
-
* "error spam while typing" anti-pattern.
|
|
33
|
-
* 3. **`error === false` explicitly clears the bridge's error message
|
|
34
|
-
* text.** Useful for forcing a "valid" visual state regardless of
|
|
35
|
-
* bridge state.
|
|
36
|
-
*
|
|
37
|
-
* @param name field name registered with the bridge
|
|
38
|
-
* @param bridge active `DashFormBridge` (guaranteed non-null at
|
|
39
|
-
* call sites by the surrounding `if (bridge)`)
|
|
40
|
-
* @param explicitError `error` prop from the consumer
|
|
41
|
-
* @param explicitHelperText `helperText` prop from the consumer
|
|
42
|
-
*/
|
|
43
|
-
export function resolveValidationState(
|
|
44
|
-
name: string,
|
|
45
|
-
bridge: DashFormBridge,
|
|
46
|
-
explicitError: boolean | undefined,
|
|
47
|
-
explicitHelperText: ReactNode | undefined
|
|
48
|
-
): ValidationState {
|
|
49
|
-
const autoErr = bridge.getError(name) ?? null;
|
|
50
|
-
const autoTouched = bridge.isTouched(name) ?? false;
|
|
51
|
-
const submitCount = bridge.submitCount ?? 0;
|
|
52
|
-
|
|
53
|
-
const allowAutoError = autoTouched || submitCount > 0;
|
|
54
|
-
|
|
55
|
-
const error = explicitError ?? (Boolean(autoErr) && allowAutoError);
|
|
56
|
-
const helperText =
|
|
57
|
-
explicitHelperText ?? (allowAutoError ? autoErr?.message : undefined);
|
|
58
|
-
|
|
59
|
-
return { error, helperText };
|
|
60
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { readFileSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { describe, it, expect } from 'vitest';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Package-level theme-identity regression test.
|
|
7
|
-
*
|
|
8
|
-
* Enforces the Dashforge rule
|
|
9
|
-
* (memory: `feedback_dashforge_preset_is_identity`):
|
|
10
|
-
* the `@dashforge/tw-theme` default preset auto-inverts the neutral
|
|
11
|
-
* palette via a CSS-variable swap (`bg-neutral-50` is light surface
|
|
12
|
-
* in light mode AND dark surface in dark mode — same class, different
|
|
13
|
-
* physical color). Adding a `dark:` Tailwind variant on a
|
|
14
|
-
* `neutral-*` class creates a DOUBLE inversion that breaks dark mode.
|
|
15
|
-
*
|
|
16
|
-
* The Sprint 4.1 Table fix established the rule; Sprint 4.3 applies
|
|
17
|
-
* it to the whole catalog and adds this test as a regression guard.
|
|
18
|
-
*
|
|
19
|
-
* **Allowed exception** (Category B in `THEME-AUDIT.md`): the pattern
|
|
20
|
-
* `bg-white dark:bg-neutral-N` / `fill-white dark:fill-neutral-N` is
|
|
21
|
-
* LEGITIMATE — `bg-white` is hardcoded (no auto-inversion via CSS
|
|
22
|
-
* vars) so a `dark:` counterpart IS needed to get a dark elevated
|
|
23
|
-
* surface in dark mode. The regex below strips these legitimate
|
|
24
|
-
* patterns before scanning for the anti-pattern.
|
|
25
|
-
*
|
|
26
|
-
* Color palettes (`primary` / `secondary` / `success` / `warning` /
|
|
27
|
-
* `danger` / `info`) are EXEMPT from this rule by design — they
|
|
28
|
-
* do not auto-invert, so `dark:` shifts on them are legitimate
|
|
29
|
-
* design choices (tone refinement across modes).
|
|
30
|
-
*/
|
|
31
|
-
const COMPONENTS_DIR = join(__dirname, '..');
|
|
32
|
-
|
|
33
|
-
// The legitimate Category B patterns we allow:
|
|
34
|
-
// 1. `bg-white dark:bg-neutral-N`
|
|
35
|
-
// 2. `fill-white dark:fill-neutral-N`
|
|
36
|
-
// 3. variant-prefixed versions, e.g.
|
|
37
|
-
// `data-[state=active]:bg-white dark:data-[state=active]:bg-neutral-N`
|
|
38
|
-
//
|
|
39
|
-
// Strip these from the source before scanning for the anti-pattern.
|
|
40
|
-
const CATEGORY_B_RE =
|
|
41
|
-
/(?:[\w[\]:-]+:)?(?:bg|fill)-white\s+dark:(?:[\w[\]:-]+:)*(?:bg|fill)-neutral-\d+/g;
|
|
42
|
-
|
|
43
|
-
// Anti-pattern: any `dark:` variant on a `neutral-N` class.
|
|
44
|
-
// Covers `bg`, `text`, `border`, `ring`, `placeholder:text`,
|
|
45
|
-
// `hover:bg`, `focus-visible:bg`, `data-[state=*]:bg`, etc.
|
|
46
|
-
const NEUTRAL_DARK_RE =
|
|
47
|
-
/dark:(?:[\w[\]:-]+:)*(?:bg|text|border|ring|fill|placeholder|focus-visible|hover|focus|data)?-?neutral-\d+/;
|
|
48
|
-
|
|
49
|
-
function walkSourceFiles(dir: string): string[] {
|
|
50
|
-
const entries = readdirSync(dir, { withFileTypes: true });
|
|
51
|
-
const out: string[] = [];
|
|
52
|
-
for (const entry of entries) {
|
|
53
|
-
const full = join(dir, entry.name);
|
|
54
|
-
if (entry.isDirectory()) {
|
|
55
|
-
out.push(...walkSourceFiles(full));
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
if (!entry.isFile()) continue;
|
|
59
|
-
if (entry.name.endsWith('.test.ts')) continue;
|
|
60
|
-
if (entry.name.endsWith('.test.tsx')) continue;
|
|
61
|
-
if (entry.name.endsWith('.spec.ts')) continue;
|
|
62
|
-
if (entry.name.endsWith('.spec.tsx')) continue;
|
|
63
|
-
if (!/\.(ts|tsx)$/.test(entry.name)) continue;
|
|
64
|
-
out.push(full);
|
|
65
|
-
}
|
|
66
|
-
return out;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
describe('Catalog — theme identity rule (no `dark:` on neutral palette)', () => {
|
|
70
|
-
const files = walkSourceFiles(COMPONENTS_DIR);
|
|
71
|
-
|
|
72
|
-
it('finds the catalog source files', () => {
|
|
73
|
-
expect(files.length).toBeGreaterThan(20);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
for (const file of files) {
|
|
77
|
-
const rel = file.replace(COMPONENTS_DIR + '/', '');
|
|
78
|
-
it(`${rel} — no \`dark:*-neutral-N\` anti-pattern`, () => {
|
|
79
|
-
const source = readFileSync(file, 'utf-8');
|
|
80
|
-
const stripped = source
|
|
81
|
-
// 1. Strip legitimate Category B patterns (bg-white / fill-white
|
|
82
|
-
// paired with a `dark:` neutral target — bg-white doesn't
|
|
83
|
-
// auto-invert, so the `dark:` is intentional).
|
|
84
|
-
.replace(CATEGORY_B_RE, '')
|
|
85
|
-
// 2. Strip comments — the regex examples in THEME-AUDIT and
|
|
86
|
-
// this test source itself contain the anti-pattern as text.
|
|
87
|
-
.replace(/\/\/.*$/gm, '')
|
|
88
|
-
.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
89
|
-
|
|
90
|
-
const match = stripped.match(NEUTRAL_DARK_RE);
|
|
91
|
-
if (match) {
|
|
92
|
-
const idx = stripped.indexOf(match[0]);
|
|
93
|
-
const context = stripped.slice(
|
|
94
|
-
Math.max(0, idx - 80),
|
|
95
|
-
idx + match[0].length + 80,
|
|
96
|
-
);
|
|
97
|
-
throw new Error(
|
|
98
|
-
`Found \`dark:*-neutral-N\` anti-pattern in ${rel}:\n` +
|
|
99
|
-
` ...${context.replace(/\s+/g, ' ').trim()}...\n\n` +
|
|
100
|
-
`Rule: dashforgePreset() auto-inverts neutral palette via CSS-var swap. ` +
|
|
101
|
-
`Adding \`dark:bg-neutral-N\` (or similar) creates double inversion ` +
|
|
102
|
-
`and breaks dark mode.\n\n` +
|
|
103
|
-
`Fix: drop the \`dark:\` variant — the base class auto-inverts.\n\n` +
|
|
104
|
-
`Exception: \`bg-white dark:bg-neutral-N\` IS allowed (bg-white doesn't ` +
|
|
105
|
-
`auto-invert, the dark variant is required for proper dark elevation).\n\n` +
|
|
106
|
-
`See: libs/dashforge/tw/THEME-AUDIT.md, ` +
|
|
107
|
-
`memory \`feedback_dashforge_preset_is_identity\`.`,
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
expect(match).toBeNull();
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
// @vitest-environment jsdom
|
|
2
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
3
|
-
import { renderHook } from '@testing-library/react';
|
|
4
|
-
import { RbacProvider } from '@dashforge/rbac';
|
|
5
|
-
import type {
|
|
6
|
-
RbacPolicy,
|
|
7
|
-
Subject,
|
|
8
|
-
AccessRequirement,
|
|
9
|
-
} from '@dashforge/rbac';
|
|
10
|
-
import { useAccessState } from './useAccessState.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* TW-side copy of the MUI useAccessState unit test, kept independent
|
|
14
|
-
* per the isolation contract. The hook contract is identical so the
|
|
15
|
-
* MUI test cases double as the source of truth for behaviour parity.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const FULL_ACCESS_POLICY: RbacPolicy = {
|
|
19
|
-
roles: [
|
|
20
|
-
{
|
|
21
|
-
name: 'admin',
|
|
22
|
-
permissions: [{ resource: '*', action: '*', effect: 'allow' }],
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const READ_ONLY_POLICY: RbacPolicy = {
|
|
28
|
-
roles: [
|
|
29
|
-
{
|
|
30
|
-
name: 'viewer',
|
|
31
|
-
permissions: [
|
|
32
|
-
{ resource: 'document', action: 'read', effect: 'allow' },
|
|
33
|
-
{ resource: 'document', action: 'update', effect: 'deny' },
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const adminSubject: Subject = { id: 'admin-user', roles: ['admin'] };
|
|
40
|
-
const viewerSubject: Subject = { id: 'viewer-user', roles: ['viewer'] };
|
|
41
|
-
|
|
42
|
-
function wrapWithRbac(policy: RbacPolicy, subject: Subject) {
|
|
43
|
-
return function Wrapper({ children }: { children: React.ReactNode }) {
|
|
44
|
-
return (
|
|
45
|
-
<RbacProvider policy={policy} subject={subject}>
|
|
46
|
-
{children}
|
|
47
|
-
</RbacProvider>
|
|
48
|
-
);
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
describe('useAccessState (tw)', () => {
|
|
53
|
-
describe('no access requirement', () => {
|
|
54
|
-
it('returns default full-access state when access is undefined', () => {
|
|
55
|
-
const { result } = renderHook(() => useAccessState(undefined));
|
|
56
|
-
expect(result.current).toEqual({
|
|
57
|
-
visible: true,
|
|
58
|
-
disabled: false,
|
|
59
|
-
readonly: false,
|
|
60
|
-
granted: true,
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('returns stable identity across re-renders', () => {
|
|
65
|
-
const { result, rerender } = renderHook(() => useAccessState(undefined));
|
|
66
|
-
const first = result.current;
|
|
67
|
-
rerender();
|
|
68
|
-
expect(result.current).toBe(first);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
describe('access requirement WITHOUT RbacProvider (fail-safe)', () => {
|
|
73
|
-
let warnSpy: ReturnType<typeof vi.spyOn>;
|
|
74
|
-
beforeEach(() => {
|
|
75
|
-
warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
|
|
76
|
-
});
|
|
77
|
-
afterEach(() => {
|
|
78
|
-
warnSpy.mockRestore();
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('returns DEFAULT_ACCESS_STATE (fails open) when no provider mounted', () => {
|
|
82
|
-
const access: AccessRequirement = { resource: 'doc', action: 'read' };
|
|
83
|
-
const { result } = renderHook(() => useAccessState(access));
|
|
84
|
-
expect(result.current.visible).toBe(true);
|
|
85
|
-
expect(result.current.granted).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('logs a dev-mode warning naming the missing requirement', () => {
|
|
89
|
-
const access: AccessRequirement = { resource: 'doc', action: 'update' };
|
|
90
|
-
renderHook(() => useAccessState(access));
|
|
91
|
-
expect(warnSpy).toHaveBeenCalled();
|
|
92
|
-
const msg = String(warnSpy.mock.calls[0]?.[0] ?? '');
|
|
93
|
-
expect(msg).toContain('No RbacProvider');
|
|
94
|
-
expect(msg).toContain('doc');
|
|
95
|
-
expect(msg).toContain('update');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
describe('access requirement WITH RbacProvider', () => {
|
|
100
|
-
it('grants when policy allows', () => {
|
|
101
|
-
const access: AccessRequirement = { resource: 'document', action: 'read' };
|
|
102
|
-
const { result } = renderHook(() => useAccessState(access), {
|
|
103
|
-
wrapper: wrapWithRbac(FULL_ACCESS_POLICY, adminSubject),
|
|
104
|
-
});
|
|
105
|
-
expect(result.current.granted).toBe(true);
|
|
106
|
-
expect(result.current.visible).toBe(true);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('denies (hide) when policy forbids and onUnauthorized=hide', () => {
|
|
110
|
-
const access: AccessRequirement = {
|
|
111
|
-
resource: 'document',
|
|
112
|
-
action: 'update',
|
|
113
|
-
onUnauthorized: 'hide',
|
|
114
|
-
};
|
|
115
|
-
const { result } = renderHook(() => useAccessState(access), {
|
|
116
|
-
wrapper: wrapWithRbac(READ_ONLY_POLICY, viewerSubject),
|
|
117
|
-
});
|
|
118
|
-
expect(result.current.granted).toBe(false);
|
|
119
|
-
expect(result.current.visible).toBe(false);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('denies (disable) when policy forbids and onUnauthorized=disable', () => {
|
|
123
|
-
const access: AccessRequirement = {
|
|
124
|
-
resource: 'document',
|
|
125
|
-
action: 'update',
|
|
126
|
-
onUnauthorized: 'disable',
|
|
127
|
-
};
|
|
128
|
-
const { result } = renderHook(() => useAccessState(access), {
|
|
129
|
-
wrapper: wrapWithRbac(READ_ONLY_POLICY, viewerSubject),
|
|
130
|
-
});
|
|
131
|
-
expect(result.current.granted).toBe(false);
|
|
132
|
-
expect(result.current.visible).toBe(true);
|
|
133
|
-
expect(result.current.disabled).toBe(true);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('denies (readonly) when policy forbids and onUnauthorized=readonly', () => {
|
|
137
|
-
const access: AccessRequirement = {
|
|
138
|
-
resource: 'document',
|
|
139
|
-
action: 'update',
|
|
140
|
-
onUnauthorized: 'readonly',
|
|
141
|
-
};
|
|
142
|
-
const { result } = renderHook(() => useAccessState(access), {
|
|
143
|
-
wrapper: wrapWithRbac(READ_ONLY_POLICY, viewerSubject),
|
|
144
|
-
});
|
|
145
|
-
expect(result.current.granted).toBe(false);
|
|
146
|
-
expect(result.current.readonly).toBe(true);
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
describe('memoization', () => {
|
|
151
|
-
it('returns identical reference when access reference stays the same', () => {
|
|
152
|
-
const access: AccessRequirement = { resource: 'doc', action: 'read' };
|
|
153
|
-
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
|
|
154
|
-
const { result, rerender } = renderHook(() => useAccessState(access));
|
|
155
|
-
const first = result.current;
|
|
156
|
-
rerender();
|
|
157
|
-
expect(result.current).toBe(first);
|
|
158
|
-
warnSpy.mockRestore();
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
});
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
import { useRbacOptional, resolveAccessState } from '@dashforge/rbac';
|
|
3
|
-
import type { AccessRequirement, AccessState } from '@dashforge/rbac';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Default full-access state. Returned when no access requirement is
|
|
7
|
-
* supplied **or** when no `RbacProvider` is mounted (fail-safe default).
|
|
8
|
-
*
|
|
9
|
-
* @internal
|
|
10
|
-
*/
|
|
11
|
-
const DEFAULT_ACCESS_STATE: AccessState = {
|
|
12
|
-
visible: true,
|
|
13
|
-
disabled: false,
|
|
14
|
-
readonly: false,
|
|
15
|
-
granted: true,
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Hook to resolve RBAC access state for a UI component.
|
|
20
|
-
*
|
|
21
|
-
* **TW-side copy of the MUI implementation** in `@dashforge/ui/src/hooks/useAccessState.ts`.
|
|
22
|
-
* Per the architecture plan v2 (2026-05-15) the two ecosystems share
|
|
23
|
-
* only the bridge layer (`@dashforge/forms` + `@dashforge/ui-core` +
|
|
24
|
-
* `@dashforge/rbac`); UI-side hooks are duplicated intentionally so
|
|
25
|
-
* the MUI and TW ecosystems remain fully isolated.
|
|
26
|
-
*
|
|
27
|
-
* The behaviour is byte-equivalent to the MUI side:
|
|
28
|
-
*
|
|
29
|
-
* - If `access` is undefined → returns `DEFAULT_ACCESS_STATE`.
|
|
30
|
-
* - If `access` is supplied but no `RbacProvider` is mounted → returns
|
|
31
|
-
* `DEFAULT_ACCESS_STATE` and emits a dev-only `console.warn` so the
|
|
32
|
-
* developer notices the missing provider. Failing **open** is the
|
|
33
|
-
* safer default (RBAC silently denying everything would be a hidden
|
|
34
|
-
* regression in development).
|
|
35
|
-
* - Otherwise → evaluates the requirement against the active
|
|
36
|
-
* `rbac.engine` + `rbac.subject` via `resolveAccessState`.
|
|
37
|
-
*
|
|
38
|
-
* The memo dependency list is `[access, rbac]` — a stable RBAC
|
|
39
|
-
* context + identical access requirement re-uses the same result
|
|
40
|
-
* object so downstream `useMemo` / `React.memo` comparisons stay
|
|
41
|
-
* cheap.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```tsx
|
|
45
|
-
* function MyComponent({ access }: { access?: AccessRequirement }) {
|
|
46
|
-
* const accessState = useAccessState(access);
|
|
47
|
-
* if (!accessState.visible) return null;
|
|
48
|
-
* return <input disabled={accessState.disabled} readOnly={accessState.readonly} />;
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export function useAccessState(
|
|
53
|
-
access: AccessRequirement | undefined
|
|
54
|
-
): AccessState {
|
|
55
|
-
// Hooks are called unconditionally to comply with the rules of hooks.
|
|
56
|
-
// `useRbacOptional` returns `null` when no provider is mounted
|
|
57
|
-
// (it does NOT throw — that's intentional, see its doc).
|
|
58
|
-
const rbac = useRbacOptional();
|
|
59
|
-
|
|
60
|
-
return useMemo(() => {
|
|
61
|
-
if (!access) {
|
|
62
|
-
return DEFAULT_ACCESS_STATE;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!rbac) {
|
|
66
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
67
|
-
|
|
68
|
-
console.warn(
|
|
69
|
-
'[useAccessState] No RbacProvider found but access requirement was provided. ' +
|
|
70
|
-
'Defaulting to full access. Wrap your component tree with <RbacProvider> to enable RBAC. ' +
|
|
71
|
-
`Resource: ${access.resource}, Action: ${access.action}`
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
return DEFAULT_ACCESS_STATE;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return resolveAccessState(access, (request) =>
|
|
78
|
-
rbac.engine.can(rbac.subject, request)
|
|
79
|
-
);
|
|
80
|
-
}, [access, rbac]);
|
|
81
|
-
}
|