@dashforge/tw 1.1.0 → 1.2.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 +134 -1
- package/README.md +45 -0
- package/dist/index.esm.js +3986 -477
- package/dist/src/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/src/components/Accordion/accordion.types.d.ts +7 -0
- package/dist/src/components/Accordion/accordion.types.d.ts.map +1 -1
- package/dist/src/components/Alert/Alert.d.ts +1 -1
- package/dist/src/components/Alert/Alert.d.ts.map +1 -1
- package/dist/src/components/Alert/alert.types.d.ts +17 -0
- package/dist/src/components/Alert/alert.types.d.ts.map +1 -1
- package/dist/src/components/AppShell/AppShell.d.ts.map +1 -1
- package/dist/src/components/AppShell/appShell.types.d.ts +7 -0
- package/dist/src/components/AppShell/appShell.types.d.ts.map +1 -1
- package/dist/src/components/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/src/components/Autocomplete/autocomplete.types.d.ts +47 -1
- package/dist/src/components/Autocomplete/autocomplete.types.d.ts.map +1 -1
- package/dist/src/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/src/components/Avatar/avatar.types.d.ts +17 -1
- package/dist/src/components/Avatar/avatar.types.d.ts.map +1 -1
- package/dist/src/components/Badge/Badge.d.ts.map +1 -1
- package/dist/src/components/Badge/badge.types.d.ts +27 -2
- package/dist/src/components/Badge/badge.types.d.ts.map +1 -1
- package/dist/src/components/Box/Box.d.ts.map +1 -1
- package/dist/src/components/Box/box.types.d.ts +64 -1
- package/dist/src/components/Box/box.types.d.ts.map +1 -1
- package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts +26 -1
- package/dist/src/components/Breadcrumbs/breadcrumbs.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 +53 -1
- package/dist/src/components/Button/button.types.d.ts.map +1 -1
- package/dist/src/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/src/components/Calendar/calendar.types.d.ts +16 -0
- package/dist/src/components/Calendar/calendar.types.d.ts.map +1 -1
- package/dist/src/components/Card/Card.d.ts.map +1 -1
- package/dist/src/components/Card/card.types.d.ts +17 -0
- package/dist/src/components/Card/card.types.d.ts.map +1 -1
- package/dist/src/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/src/components/Checkbox/checkbox.types.d.ts +19 -1
- package/dist/src/components/Checkbox/checkbox.types.d.ts.map +1 -1
- package/dist/src/components/Chip/Chip.d.ts.map +1 -1
- package/dist/src/components/Chip/chip.types.d.ts +40 -1
- package/dist/src/components/Chip/chip.types.d.ts.map +1 -1
- package/dist/src/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
- package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts +30 -2
- package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -1
- package/dist/src/components/Container/Container.d.ts.map +1 -1
- package/dist/src/components/Container/container.types.d.ts +29 -1
- package/dist/src/components/Container/container.types.d.ts.map +1 -1
- package/dist/src/components/DataGrid/DataGrid.d.ts +1 -1
- package/dist/src/components/DataGrid/DataGrid.d.ts.map +1 -1
- package/dist/src/components/DataGrid/dataGrid.types.d.ts +124 -10
- package/dist/src/components/DataGrid/dataGrid.types.d.ts.map +1 -1
- package/dist/src/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/src/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/src/components/DatePicker/datePicker.types.d.ts +18 -0
- package/dist/src/components/DatePicker/datePicker.types.d.ts.map +1 -1
- package/dist/src/components/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/dist/src/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts +18 -0
- package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts.map +1 -1
- package/dist/src/components/DateTimePicker/DateTimePicker.d.ts +1 -1
- package/dist/src/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
- package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts +20 -0
- package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -1
- package/dist/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/src/components/Dialog/dialog.types.d.ts +25 -1
- package/dist/src/components/Dialog/dialog.types.d.ts.map +1 -1
- package/dist/src/components/Divider/Divider.d.ts.map +1 -1
- package/dist/src/components/Divider/divider.types.d.ts +37 -1
- package/dist/src/components/Divider/divider.types.d.ts.map +1 -1
- package/dist/src/components/Drawer/Drawer.d.ts +21 -0
- package/dist/src/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/src/components/Drawer/drawer.types.d.ts +311 -0
- package/dist/src/components/Drawer/drawer.types.d.ts.map +1 -0
- package/dist/src/components/Drawer/drawer.variants.d.ts +177 -0
- package/dist/src/components/Drawer/drawer.variants.d.ts.map +1 -0
- package/dist/src/components/Grid/Grid.d.ts.map +1 -1
- package/dist/src/components/Grid/grid.types.d.ts +16 -0
- package/dist/src/components/Grid/grid.types.d.ts.map +1 -1
- package/dist/src/components/IconButton/IconButton.d.ts.map +1 -1
- package/dist/src/components/IconButton/iconButton.types.d.ts +40 -1
- package/dist/src/components/IconButton/iconButton.types.d.ts.map +1 -1
- package/dist/src/components/LeftNav/LeftNav.d.ts.map +1 -1
- package/dist/src/components/LeftNav/leftNav.types.d.ts +26 -6
- package/dist/src/components/LeftNav/leftNav.types.d.ts.map +1 -1
- package/dist/src/components/Link/Link.d.ts +15 -0
- package/dist/src/components/Link/Link.d.ts.map +1 -0
- package/dist/src/components/Link/link.types.d.ts +169 -0
- package/dist/src/components/Link/link.types.d.ts.map +1 -0
- package/dist/src/components/Link/link.variants.d.ts +107 -0
- package/dist/src/components/Link/link.variants.d.ts.map +1 -0
- package/dist/src/components/Menu/Menu.d.ts +1 -1
- package/dist/src/components/Menu/Menu.d.ts.map +1 -1
- package/dist/src/components/Menu/menu.types.d.ts +20 -0
- package/dist/src/components/Menu/menu.types.d.ts.map +1 -1
- package/dist/src/components/NumberField/NumberField.d.ts.map +1 -1
- package/dist/src/components/NumberField/numberField.types.d.ts +47 -1
- package/dist/src/components/NumberField/numberField.types.d.ts.map +1 -1
- package/dist/src/components/OTPField/OTPField.d.ts.map +1 -1
- package/dist/src/components/OTPField/otpField.types.d.ts +35 -1
- package/dist/src/components/OTPField/otpField.types.d.ts.map +1 -1
- package/dist/src/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/src/components/Pagination/pagination.types.d.ts +26 -1
- package/dist/src/components/Pagination/pagination.types.d.ts.map +1 -1
- package/dist/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/src/components/Popover/popover.types.d.ts +29 -0
- package/dist/src/components/Popover/popover.types.d.ts.map +1 -1
- package/dist/src/components/Progress/Progress.d.ts +20 -0
- package/dist/src/components/Progress/Progress.d.ts.map +1 -0
- package/dist/src/components/Progress/progress.types.d.ts +200 -0
- package/dist/src/components/Progress/progress.types.d.ts.map +1 -0
- package/dist/src/components/Progress/progress.variants.d.ts +224 -0
- package/dist/src/components/Progress/progress.variants.d.ts.map +1 -0
- package/dist/src/components/RadioGroup/RadioGroup.d.ts.map +1 -1
- package/dist/src/components/RadioGroup/radioGroup.types.d.ts +25 -1
- package/dist/src/components/RadioGroup/radioGroup.types.d.ts.map +1 -1
- package/dist/src/components/Select/Select.d.ts +14 -0
- package/dist/src/components/Select/Select.d.ts.map +1 -0
- package/dist/src/components/Select/select.types.d.ts +272 -0
- package/dist/src/components/Select/select.types.d.ts.map +1 -0
- package/dist/src/components/Select/select.variants.d.ts +204 -0
- package/dist/src/components/Select/select.variants.d.ts.map +1 -0
- package/dist/src/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/src/components/Skeleton/skeleton.types.d.ts +25 -1
- package/dist/src/components/Skeleton/skeleton.types.d.ts.map +1 -1
- package/dist/src/components/Slider/Slider.d.ts +15 -0
- package/dist/src/components/Slider/Slider.d.ts.map +1 -0
- package/dist/src/components/Slider/slider.types.d.ts +268 -0
- package/dist/src/components/Slider/slider.types.d.ts.map +1 -0
- package/dist/src/components/Slider/slider.variants.d.ts +313 -0
- package/dist/src/components/Slider/slider.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 +29 -5
- package/dist/src/components/Snackbar/snackbar.types.d.ts.map +1 -1
- package/dist/src/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/src/components/Spinner/spinner.types.d.ts +22 -2
- package/dist/src/components/Spinner/spinner.types.d.ts.map +1 -1
- package/dist/src/components/Stack/Stack.d.ts.map +1 -1
- package/dist/src/components/Stack/stack.types.d.ts +53 -2
- package/dist/src/components/Stack/stack.types.d.ts.map +1 -1
- package/dist/src/components/Stack/stack.variants.d.ts +23 -0
- package/dist/src/components/Stack/stack.variants.d.ts.map +1 -1
- package/dist/src/components/Stepper/Step.d.ts +30 -0
- package/dist/src/components/Stepper/Step.d.ts.map +1 -0
- package/dist/src/components/Stepper/Stepper.d.ts +15 -0
- package/dist/src/components/Stepper/Stepper.d.ts.map +1 -0
- package/dist/src/components/Stepper/StepperContext.d.ts +8 -0
- package/dist/src/components/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/src/components/Stepper/stepper.types.d.ts +358 -0
- package/dist/src/components/Stepper/stepper.types.d.ts.map +1 -0
- package/dist/src/components/Stepper/stepper.variants.d.ts +253 -0
- package/dist/src/components/Stepper/stepper.variants.d.ts.map +1 -0
- package/dist/src/components/Stepper/useStep.d.ts +53 -0
- package/dist/src/components/Stepper/useStep.d.ts.map +1 -0
- package/dist/src/components/Switch/Switch.d.ts.map +1 -1
- package/dist/src/components/Switch/switch.types.d.ts +44 -1
- package/dist/src/components/Switch/switch.types.d.ts.map +1 -1
- package/dist/src/components/Table/Table.d.ts +1 -1
- package/dist/src/components/Table/Table.d.ts.map +1 -1
- package/dist/src/components/Table/table.types.d.ts +103 -8
- package/dist/src/components/Table/table.types.d.ts.map +1 -1
- package/dist/src/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/src/components/Tabs/tabs.types.d.ts +26 -1
- package/dist/src/components/Tabs/tabs.types.d.ts.map +1 -1
- package/dist/src/components/TextField/TextField.d.ts.map +1 -1
- package/dist/src/components/TextField/textField.types.d.ts +30 -1
- package/dist/src/components/TextField/textField.types.d.ts.map +1 -1
- package/dist/src/components/Textarea/Textarea.d.ts.map +1 -1
- package/dist/src/components/Textarea/textarea.types.d.ts +51 -1
- package/dist/src/components/Textarea/textarea.types.d.ts.map +1 -1
- package/dist/src/components/TimePicker/TimePicker.d.ts +1 -1
- package/dist/src/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/src/components/TimePicker/timePicker.types.d.ts +18 -0
- package/dist/src/components/TimePicker/timePicker.types.d.ts.map +1 -1
- package/dist/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/src/components/Tooltip/tooltip.types.d.ts +30 -0
- package/dist/src/components/Tooltip/tooltip.types.d.ts.map +1 -1
- package/dist/src/components/TopBar/TopBar.d.ts.map +1 -1
- package/dist/src/components/TopBar/topBar.types.d.ts +25 -1
- package/dist/src/components/TopBar/topBar.types.d.ts.map +1 -1
- package/dist/src/components/Typography/Typography.d.ts.map +1 -1
- package/dist/src/components/Typography/typography.types.d.ts +47 -1
- package/dist/src/components/Typography/typography.types.d.ts.map +1 -1
- package/dist/src/components/Typography/typography.variants.d.ts +2 -2
- package/dist/src/components/Typography/typography.variants.d.ts.map +1 -1
- package/dist/src/hooks/useStandaloneFieldWarning.d.ts +38 -0
- package/dist/src/hooks/useStandaloneFieldWarning.d.ts.map +1 -0
- package/dist/src/index.d.ts +62 -42
- package/dist/src/index.d.ts.map +1 -1
- package/package.json +11 -5
- package/.swcrc +0 -29
- package/A11Y.md +0 -130
- package/CONSUMER-VALIDATION.md +0 -130
- package/COVERAGE.md +0 -63
- package/PARITY.md +0 -481
- package/PERFORMANCE.md +0 -227
- package/REFINEMENT-NOTES.md +0 -50
- package/THEME-AUDIT.md +0 -174
- package/dashforge-tw-1.0.0.tgz +0 -0
- 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/Alert/Alert.test.tsx +0 -302
- package/src/components/Alert/Alert.tsx +0 -186
- package/src/components/Alert/alert.types.ts +0 -144
- package/src/components/Alert/alert.variants.ts +0 -71
- 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/Avatar/Avatar.test.tsx +0 -287
- package/src/components/Avatar/Avatar.tsx +0 -304
- package/src/components/Avatar/avatar.types.ts +0 -205
- package/src/components/Avatar/avatar.variants.ts +0 -194
- package/src/components/Badge/Badge.test.tsx +0 -385
- package/src/components/Badge/Badge.tsx +0 -174
- package/src/components/Badge/badge.types.ts +0 -154
- package/src/components/Badge/badge.variants.ts +0 -161
- package/src/components/Box/Box.test.tsx +0 -391
- package/src/components/Box/Box.tsx +0 -112
- package/src/components/Box/box.types.ts +0 -116
- 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 -204
- package/src/components/Button/Button.tsx +0 -151
- package/src/components/Button/button.types.ts +0 -110
- 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/Card/Card.test.tsx +0 -291
- package/src/components/Card/Card.tsx +0 -241
- package/src/components/Card/card.types.ts +0 -132
- 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/Chip/Chip.test.tsx +0 -316
- package/src/components/Chip/Chip.tsx +0 -224
- package/src/components/Chip/chip.types.ts +0 -128
- package/src/components/Chip/chip.variants.ts +0 -173
- 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/IconButton/IconButton.test.tsx +0 -367
- package/src/components/IconButton/IconButton.tsx +0 -159
- package/src/components/IconButton/iconButton.types.ts +0 -106
- package/src/components/IconButton/iconButton.variants.ts +0 -31
- 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/Menu/Menu.test.tsx +0 -408
- package/src/components/Menu/Menu.tsx +0 -335
- package/src/components/Menu/menu.types.ts +0 -221
- package/src/components/Menu/menu.variants.ts +0 -132
- 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 -316
- package/src/components/Snackbar/snackbar.types.ts +0 -127
- package/src/components/Snackbar/snackbar.variants.ts +0 -81
- package/src/components/Spinner/Spinner.test.tsx +0 -199
- package/src/components/Spinner/Spinner.tsx +0 -158
- package/src/components/Spinner/spinner.types.ts +0 -113
- package/src/components/Spinner/spinner.variants.ts +0 -83
- 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 -37
- 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/severity/index.ts +0 -33
- package/src/components/_shared/severity/severity.types.ts +0 -50
- package/src/components/_shared/severity/severityIcons.tsx +0 -104
- package/src/components/_shared/severity/severityVariants.test.ts +0 -136
- package/src/components/_shared/severity/severityVariants.ts +0 -115
- 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 -550
- 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,198 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import type { Engine } from '@dashforge/ui-core';
|
|
3
|
-
import type { AccessRequirement } from '@dashforge/rbac';
|
|
4
|
-
import type { AutocompleteVariants } from './autocomplete.variants.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Default `{ value, label, disabled? }` option shape.
|
|
8
|
-
*
|
|
9
|
-
* The simplest shape and the one used by the component when no
|
|
10
|
-
* `getOptionValue` / `getOptionLabel` props are provided. For richer
|
|
11
|
-
* option shapes (e.g., `{ id, name, country, ... }`) make the component
|
|
12
|
-
* generic by passing `<TOption>` and providing the accessors:
|
|
13
|
-
*
|
|
14
|
-
* ```tsx
|
|
15
|
-
* type User = { id: string; name: string; admin?: boolean };
|
|
16
|
-
*
|
|
17
|
-
* <Autocomplete<User>
|
|
18
|
-
* name="owner"
|
|
19
|
-
* options={users}
|
|
20
|
-
* getOptionValue={(u) => u.id}
|
|
21
|
-
* getOptionLabel={(u) => u.name}
|
|
22
|
-
* getOptionDisabled={(u) => !u.admin}
|
|
23
|
-
* />
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export interface AutocompleteOption {
|
|
27
|
-
/** Value persisted on the form. */
|
|
28
|
-
value: string;
|
|
29
|
-
/** Display label (string or any React node). */
|
|
30
|
-
label: ReactNode;
|
|
31
|
-
/** Per-option explicit disable. */
|
|
32
|
-
disabled?: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface AutocompleteSlotProps {
|
|
36
|
-
root?: { className?: string };
|
|
37
|
-
label?: { className?: string };
|
|
38
|
-
requiredMark?: { className?: string };
|
|
39
|
-
inputWrapper?: { className?: string };
|
|
40
|
-
input?: { className?: string };
|
|
41
|
-
trigger?: { className?: string };
|
|
42
|
-
clearButton?: { className?: string };
|
|
43
|
-
popover?: { className?: string };
|
|
44
|
-
listBox?: { className?: string };
|
|
45
|
-
listItem?: { className?: string };
|
|
46
|
-
emptyState?: { className?: string };
|
|
47
|
-
helperText?: { className?: string };
|
|
48
|
-
errorText?: { className?: string };
|
|
49
|
-
/** Wrapper around the chip list (multi-select only). */
|
|
50
|
-
chipsList?: { className?: string };
|
|
51
|
-
/** Individual chip displayed in multi-select. */
|
|
52
|
-
chip?: { className?: string };
|
|
53
|
-
/** `×` button on a chip. */
|
|
54
|
-
chipRemove?: { className?: string };
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Union of the value shapes `<Autocomplete>` accepts.
|
|
59
|
-
*
|
|
60
|
-
* - **Single-select (default)**: `string | null`
|
|
61
|
-
* - **Multi-select** (`multiple` prop): `string[] | null`
|
|
62
|
-
*
|
|
63
|
-
* `null` means "no selection" in both modes — a multi-select with no
|
|
64
|
-
* picks emits an empty array on first commit, then keeps emitting arrays.
|
|
65
|
-
*/
|
|
66
|
-
export type AutocompleteValue = string | string[] | null;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Props for `<Autocomplete>`.
|
|
70
|
-
*
|
|
71
|
-
* Bridge-integrated single-select combobox with full ARIA combobox
|
|
72
|
-
* a11y, keyboard navigation, and Form Closure v1 error gating.
|
|
73
|
-
*
|
|
74
|
-
* Mirrors the MUI-side `@dashforge/ui/Autocomplete` at the bridge
|
|
75
|
-
* level — same `name` / `rules` / `visibleWhen` / `access` semantics,
|
|
76
|
-
* same StrictMode-safe unregister-on-unmount.
|
|
77
|
-
*
|
|
78
|
-
* @typeParam TOption Shape of an option. Defaults to
|
|
79
|
-
* `AutocompleteOption` (`{ value, label, disabled? }`).
|
|
80
|
-
* Pass `<TOption>` + `getOptionValue` / `getOptionLabel`
|
|
81
|
-
* for arbitrary domain types.
|
|
82
|
-
*/
|
|
83
|
-
export interface AutocompleteProps<TOption = AutocompleteOption>
|
|
84
|
-
extends AutocompleteVariants {
|
|
85
|
-
name: string;
|
|
86
|
-
rules?: unknown;
|
|
87
|
-
options: TOption[];
|
|
88
|
-
label?: ReactNode;
|
|
89
|
-
helperText?: ReactNode;
|
|
90
|
-
required?: boolean;
|
|
91
|
-
error?: boolean;
|
|
92
|
-
disabled?: boolean;
|
|
93
|
-
/** Placeholder shown when the input is empty. */
|
|
94
|
-
placeholder?: string;
|
|
95
|
-
/** Engine predicate — field not rendered when it returns `false`. */
|
|
96
|
-
visibleWhen?: (engine: Engine) => boolean;
|
|
97
|
-
/** RBAC access requirement. */
|
|
98
|
-
access?: AccessRequirement;
|
|
99
|
-
/** Root className shortcut. */
|
|
100
|
-
sx?: string;
|
|
101
|
-
/** Per-slot className overrides. */
|
|
102
|
-
slotProps?: AutocompleteSlotProps;
|
|
103
|
-
/** Controlled value (form mode reads from the bridge if omitted). */
|
|
104
|
-
value?: AutocompleteValue;
|
|
105
|
-
/** Default value for uncontrolled mode (no-op in form mode). */
|
|
106
|
-
defaultValue?: AutocompleteValue;
|
|
107
|
-
/** Fires when the user picks an option (after bridge update in form mode). */
|
|
108
|
-
onValueChange?: (value: AutocompleteValue) => void;
|
|
109
|
-
/** Fallback text when no option matches the typed filter. */
|
|
110
|
-
emptyMessage?: string;
|
|
111
|
-
|
|
112
|
-
// ───── F5-A-bis: multi-select ─────
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Multi-select mode. When `true`:
|
|
116
|
-
*
|
|
117
|
-
* - `value` / `defaultValue` accept `string[]` (or `null`).
|
|
118
|
-
* - Picks are toggled rather than replaced; the popover stays open.
|
|
119
|
-
* - Selected items render as chips inside the input wrapper.
|
|
120
|
-
* - Backspace at the start of an empty input removes the last chip.
|
|
121
|
-
* - The clear button (`×`) clears the entire selection.
|
|
122
|
-
*/
|
|
123
|
-
multiple?: boolean;
|
|
124
|
-
|
|
125
|
-
// ───── F5-A-bis: free-solo ─────
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Allow committing arbitrary strings (not just option values).
|
|
129
|
-
*
|
|
130
|
-
* When `true`:
|
|
131
|
-
* - **Enter** commits the typed text as the value when no option
|
|
132
|
-
* row is highlighted (or no rows match the filter).
|
|
133
|
-
* - **Blur** commits the typed text the same way, unless the text
|
|
134
|
-
* exactly matches an existing option's label (in which case the
|
|
135
|
-
* option's value snaps in).
|
|
136
|
-
* - In multi mode, each free-solo commit adds a new chip whose key
|
|
137
|
-
* and label are the typed string.
|
|
138
|
-
*
|
|
139
|
-
* Free-solo is independent of `multiple` — works in both modes.
|
|
140
|
-
*/
|
|
141
|
-
freeSolo?: boolean;
|
|
142
|
-
|
|
143
|
-
// ───── F5-A-bis: async runtime options ─────
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Async option loader. Called (debounced by `loadDebounceMs`) every
|
|
147
|
-
* time the user types in the input. Results replace the static
|
|
148
|
-
* `options` prop while the user is actively filtering.
|
|
149
|
-
*
|
|
150
|
-
* Return a promise that resolves with the new option list. Reject /
|
|
151
|
-
* throw to surface a generic empty state.
|
|
152
|
-
*
|
|
153
|
-
* @example
|
|
154
|
-
* ```tsx
|
|
155
|
-
* <Autocomplete
|
|
156
|
-
* name="user"
|
|
157
|
-
* options={[]}
|
|
158
|
-
* loadOptions={async (q) => {
|
|
159
|
-
* const res = await fetch(`/api/users?q=${q}`);
|
|
160
|
-
* return res.ok ? res.json() : [];
|
|
161
|
-
* }}
|
|
162
|
-
* />
|
|
163
|
-
* ```
|
|
164
|
-
*/
|
|
165
|
-
loadOptions?: (query: string) => Promise<TOption[]>;
|
|
166
|
-
/**
|
|
167
|
-
* Debounce window (ms) for `loadOptions`. The loader fires after the
|
|
168
|
-
* user stops typing for this long.
|
|
169
|
-
* @default 250
|
|
170
|
-
*/
|
|
171
|
-
loadDebounceMs?: number;
|
|
172
|
-
/** Text displayed in the popover while a fetch is in flight. */
|
|
173
|
-
loadingMessage?: ReactNode;
|
|
174
|
-
|
|
175
|
-
// ───── Generic option accessors (F5-A-bis) ─────
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Extract the persistable value (string) from an option.
|
|
179
|
-
* @default `(o) => (o as AutocompleteOption).value`
|
|
180
|
-
*/
|
|
181
|
-
getOptionValue?: (option: TOption) => string;
|
|
182
|
-
/**
|
|
183
|
-
* Extract the display label from an option.
|
|
184
|
-
* @default `(o) => (o as AutocompleteOption).label`
|
|
185
|
-
*/
|
|
186
|
-
getOptionLabel?: (option: TOption) => ReactNode;
|
|
187
|
-
/**
|
|
188
|
-
* Per-option disabled flag.
|
|
189
|
-
* @default `(o) => Boolean((o as AutocompleteOption).disabled)`
|
|
190
|
-
*/
|
|
191
|
-
getOptionDisabled?: (option: TOption) => boolean;
|
|
192
|
-
/**
|
|
193
|
-
* Unique React key for an option. Defaults to `getOptionValue`.
|
|
194
|
-
* Override if your `value` strings can collide across distinct
|
|
195
|
-
* option records (rare).
|
|
196
|
-
*/
|
|
197
|
-
getOptionKey?: (option: TOption) => string;
|
|
198
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { tv, type VariantProps } from 'tailwind-variants';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Tailwind-variants recipe for `<Autocomplete>` with slots.
|
|
5
|
-
*
|
|
6
|
-
* Slots:
|
|
7
|
-
* - `root` — outer wrapper (label + combobox + helper/error)
|
|
8
|
-
* - `label` — text label above the input
|
|
9
|
-
* - `requiredMark` — red `*` for required fields
|
|
10
|
-
* - `inputWrapper` — surface holding the input + clear/trigger buttons
|
|
11
|
-
* - `input` — the typeable text input
|
|
12
|
-
* - `trigger` — caret / chevron button that opens the popover
|
|
13
|
-
* - `clearButton` — `×` button to clear the current selection
|
|
14
|
-
* - `popover` — floating panel containing the option list
|
|
15
|
-
* - `listBox` — list element wrapping the options
|
|
16
|
-
* - `listItem` — single option row
|
|
17
|
-
* - `emptyState` — fallback when no options match the filter
|
|
18
|
-
* - `helperText` — descriptive line below the input
|
|
19
|
-
* - `errorText` — semantic counterpart for error mode
|
|
20
|
-
* - `chipsList` — wrapper around selected chips (multi-select only)
|
|
21
|
-
* - `chip` — individual selected chip
|
|
22
|
-
* - `chipRemove` — `×` button on a chip
|
|
23
|
-
*/
|
|
24
|
-
export const autocompleteVariants = tv({
|
|
25
|
-
slots: {
|
|
26
|
-
root: 'flex',
|
|
27
|
-
label: 'block text-sm font-medium text-neutral-900 mb-1',
|
|
28
|
-
requiredMark: 'text-danger-500 ml-0.5',
|
|
29
|
-
inputWrapper: [
|
|
30
|
-
'relative flex items-center',
|
|
31
|
-
'rounded-md border bg-neutral-50',
|
|
32
|
-
'border-neutral-300',
|
|
33
|
-
'transition-colors',
|
|
34
|
-
'focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500/30',
|
|
35
|
-
],
|
|
36
|
-
input: [
|
|
37
|
-
'block w-full bg-transparent outline-none',
|
|
38
|
-
'text-neutral-900 placeholder:text-neutral-400',
|
|
39
|
-
'disabled:cursor-not-allowed disabled:opacity-60',
|
|
40
|
-
'read-only:cursor-default',
|
|
41
|
-
],
|
|
42
|
-
trigger: [
|
|
43
|
-
'flex items-center justify-center shrink-0 px-2',
|
|
44
|
-
'text-neutral-600 hover:text-neutral-900',
|
|
45
|
-
'disabled:cursor-not-allowed disabled:opacity-40',
|
|
46
|
-
'transition-colors',
|
|
47
|
-
// Chevron flip on open — targets the SVG child via the aria-
|
|
48
|
-
// expanded state on the button itself (set by React). Smooth
|
|
49
|
-
// rotate gated on prefers-reduced-motion (WCAG 2.3.3); the
|
|
50
|
-
// 180° state still applies, just without the animated tween.
|
|
51
|
-
'[&[aria-expanded=true]>svg]:rotate-180',
|
|
52
|
-
'[&>svg]:transition-transform [&>svg]:duration-150 motion-reduce:[&>svg]:transition-none',
|
|
53
|
-
],
|
|
54
|
-
clearButton: [
|
|
55
|
-
'flex items-center justify-center shrink-0 px-2',
|
|
56
|
-
'text-neutral-500 hover:text-neutral-900',
|
|
57
|
-
'transition-colors',
|
|
58
|
-
],
|
|
59
|
-
popover: [
|
|
60
|
-
'z-50 mt-1 max-h-64 overflow-auto',
|
|
61
|
-
'rounded-md border bg-neutral-50 border-neutral-300 shadow-lg',
|
|
62
|
-
'min-w-[var(--trigger-width)]',
|
|
63
|
-
],
|
|
64
|
-
listBox: 'outline-none py-1 list-none pl-0 m-0',
|
|
65
|
-
listItem: [
|
|
66
|
-
'cursor-pointer select-none px-3 py-2 text-sm text-neutral-900',
|
|
67
|
-
'outline-none',
|
|
68
|
-
'data-[focused]:bg-primary-50 data-[focused]:text-primary-900',
|
|
69
|
-
'data-[selected]:bg-primary-100 data-[selected]:text-primary-900 data-[selected]:font-medium',
|
|
70
|
-
'data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed',
|
|
71
|
-
],
|
|
72
|
-
emptyState: 'px-3 py-2 text-sm text-neutral-500',
|
|
73
|
-
helperText: 'mt-1 text-sm text-neutral-600',
|
|
74
|
-
errorText: 'mt-1 text-sm text-danger-600',
|
|
75
|
-
chipsList: 'flex flex-wrap items-center gap-1 px-1 py-1',
|
|
76
|
-
chip: [
|
|
77
|
-
'inline-flex items-center gap-1 shrink-0',
|
|
78
|
-
'rounded-md bg-primary-100 text-primary-900',
|
|
79
|
-
'px-2 py-0.5 text-xs font-medium',
|
|
80
|
-
'border border-primary-200',
|
|
81
|
-
],
|
|
82
|
-
chipRemove: [
|
|
83
|
-
'inline-flex items-center justify-center',
|
|
84
|
-
'rounded-sm w-4 h-4 text-primary-700',
|
|
85
|
-
'hover:bg-primary-200 hover:text-primary-900',
|
|
86
|
-
'transition-colors',
|
|
87
|
-
],
|
|
88
|
-
},
|
|
89
|
-
variants: {
|
|
90
|
-
size: {
|
|
91
|
-
sm: {
|
|
92
|
-
inputWrapper: 'h-8',
|
|
93
|
-
input: 'text-sm px-2',
|
|
94
|
-
trigger: 'h-8 text-xs',
|
|
95
|
-
clearButton: 'h-8',
|
|
96
|
-
},
|
|
97
|
-
md: {
|
|
98
|
-
inputWrapper: 'h-10',
|
|
99
|
-
input: 'text-base px-3',
|
|
100
|
-
trigger: 'h-10 text-sm',
|
|
101
|
-
clearButton: 'h-10',
|
|
102
|
-
},
|
|
103
|
-
lg: {
|
|
104
|
-
inputWrapper: 'h-12',
|
|
105
|
-
input: 'text-lg px-4',
|
|
106
|
-
trigger: 'h-12 text-base',
|
|
107
|
-
clearButton: 'h-12',
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
layout: {
|
|
111
|
-
stacked: { root: 'flex-col' },
|
|
112
|
-
inline: { root: 'flex-row items-start gap-3', label: 'mb-0 pt-2 whitespace-nowrap shrink-0' },
|
|
113
|
-
},
|
|
114
|
-
error: {
|
|
115
|
-
true: {
|
|
116
|
-
inputWrapper:
|
|
117
|
-
'border-danger-500 focus-within:border-danger-500 focus-within:ring-danger-500/30',
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
fullWidth: {
|
|
121
|
-
true: {
|
|
122
|
-
root: 'w-full',
|
|
123
|
-
inputWrapper: 'w-full',
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
disabled: {
|
|
127
|
-
true: {
|
|
128
|
-
inputWrapper: 'opacity-60 cursor-not-allowed bg-neutral-200',
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
defaultVariants: {
|
|
133
|
-
size: 'md',
|
|
134
|
-
layout: 'stacked',
|
|
135
|
-
error: false,
|
|
136
|
-
fullWidth: false,
|
|
137
|
-
disabled: false,
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
export type AutocompleteVariants = VariantProps<typeof autocompleteVariants>;
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
// @vitest-environment jsdom
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
4
|
-
import { fireEvent, render, screen, cleanup } from '@testing-library/react';
|
|
5
|
-
import { Avatar, AvatarGroup } from './Avatar.js';
|
|
6
|
-
|
|
7
|
-
void React;
|
|
8
|
-
afterEach(() => cleanup());
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Unit tests for the Avatar family. Covers:
|
|
12
|
-
* - Image rendering (src + alt)
|
|
13
|
-
* - Auto-initials from name (1 word, 2 words, edge cases)
|
|
14
|
-
* - Fallback chain (src fail → initials → custom icon → generic)
|
|
15
|
-
* - Shape ↔ radius interaction (radius wins when both set)
|
|
16
|
-
* - Size axis (5 enum values map to spacing classes)
|
|
17
|
-
* - Color × tone resolution (soft default vs explicit tone)
|
|
18
|
-
* - AvatarGroup slicing + overflow indicator + size inheritance
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
describe('<Avatar>', () => {
|
|
22
|
-
describe('image rendering', () => {
|
|
23
|
-
it('renders an <img> when src is set', () => {
|
|
24
|
-
const { container } = render(
|
|
25
|
-
<Avatar src="/avatar.png" alt="Maya" />
|
|
26
|
-
);
|
|
27
|
-
expect(container.querySelector('img')).toBeTruthy();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('applies the alt attribute', () => {
|
|
31
|
-
render(<Avatar src="/x.png" alt="Maya Rodriguez" />);
|
|
32
|
-
const img = screen.getByRole('img', { name: /maya rodriguez/i });
|
|
33
|
-
expect(img).toBeTruthy();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('falls back to initials when the image fails to load', () => {
|
|
37
|
-
const { container } = render(<Avatar src="/broken.png" name="Maya Rodriguez" />);
|
|
38
|
-
const img = container.querySelector('img')!;
|
|
39
|
-
fireEvent.error(img);
|
|
40
|
-
// After onError the img is gone, initials shown.
|
|
41
|
-
expect(container.querySelector('img')).toBeNull();
|
|
42
|
-
expect(screen.getByText('MR')).toBeTruthy();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
describe('auto-initials from name', () => {
|
|
47
|
-
it('extracts MR from "Maya Rodriguez"', () => {
|
|
48
|
-
render(<Avatar name="Maya Rodriguez" />);
|
|
49
|
-
expect(screen.getByText('MR')).toBeTruthy();
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('extracts C from single-word name "Cher"', () => {
|
|
53
|
-
render(<Avatar name="Cher" />);
|
|
54
|
-
expect(screen.getByText('C')).toBeTruthy();
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('uppercases the initials', () => {
|
|
58
|
-
render(<Avatar name="maya rodriguez" />);
|
|
59
|
-
expect(screen.getByText('MR')).toBeTruthy();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('handles extra whitespace', () => {
|
|
63
|
-
render(<Avatar name=" Maya Rodriguez " />);
|
|
64
|
-
expect(screen.getByText('MR')).toBeTruthy();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('renders a generic icon when name is empty', () => {
|
|
68
|
-
const { container } = render(<Avatar name="" />);
|
|
69
|
-
expect(container.querySelector('svg')).toBeTruthy();
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('renders a generic icon when name is omitted entirely', () => {
|
|
73
|
-
const { container } = render(<Avatar />);
|
|
74
|
-
expect(container.querySelector('svg')).toBeTruthy();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('renders fallbackIcon over the generic icon when set', () => {
|
|
78
|
-
render(<Avatar fallbackIcon={<span data-testid="custom-icon">★</span>} />);
|
|
79
|
-
expect(screen.getByTestId('custom-icon')).toBeTruthy();
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('initials win over fallbackIcon when name is present', () => {
|
|
83
|
-
render(
|
|
84
|
-
<Avatar
|
|
85
|
-
name="Maya Rodriguez"
|
|
86
|
-
fallbackIcon={<span data-testid="custom-icon">★</span>}
|
|
87
|
-
/>
|
|
88
|
-
);
|
|
89
|
-
expect(screen.getByText('MR')).toBeTruthy();
|
|
90
|
-
expect(screen.queryByTestId('custom-icon')).toBeNull();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
describe('shape ↔ radius', () => {
|
|
95
|
-
it('default shape=circle → rounded-full', () => {
|
|
96
|
-
const { container } = render(<Avatar name="x" />);
|
|
97
|
-
const root = container.firstElementChild!;
|
|
98
|
-
expect(root.className).toContain('rounded-full');
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('shape="rounded" → rounded-lg', () => {
|
|
102
|
-
const { container } = render(<Avatar name="x" shape="rounded" />);
|
|
103
|
-
const root = container.firstElementChild!;
|
|
104
|
-
expect(root.className).toContain('rounded-lg');
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('shape="square" → rounded-none', () => {
|
|
108
|
-
const { container } = render(<Avatar name="x" shape="square" />);
|
|
109
|
-
const root = container.firstElementChild!;
|
|
110
|
-
expect(root.className).toContain('rounded-none');
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('explicit radius wins over shape', () => {
|
|
114
|
-
const { container } = render(
|
|
115
|
-
<Avatar name="x" shape="circle" radius="md" />
|
|
116
|
-
);
|
|
117
|
-
const root = container.firstElementChild!;
|
|
118
|
-
expect(root.className).toContain('rounded-md');
|
|
119
|
-
expect(root.className).not.toContain('rounded-full');
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
describe('size axis', () => {
|
|
124
|
-
it.each([
|
|
125
|
-
['xs', 'w-5'],
|
|
126
|
-
['sm', 'w-7'],
|
|
127
|
-
['md', 'w-9'],
|
|
128
|
-
['lg', 'w-12'],
|
|
129
|
-
['xl', 'w-16'],
|
|
130
|
-
] as const)('size=%s → %s', (size, expected) => {
|
|
131
|
-
const { container } = render(<Avatar name="x" size={size} />);
|
|
132
|
-
const root = container.firstElementChild!;
|
|
133
|
-
expect(root.className).toContain(expected);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
describe('color × tone resolution', () => {
|
|
138
|
-
it('default color=neutral + no tone → bg-neutral-100', () => {
|
|
139
|
-
const { container } = render(<Avatar name="x" />);
|
|
140
|
-
const root = container.firstElementChild!;
|
|
141
|
-
expect(root.className).toContain('bg-neutral-100');
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('color=primary + no tone → soft default bg-primary-100', () => {
|
|
145
|
-
const { container } = render(<Avatar name="x" color="primary" />);
|
|
146
|
-
const root = container.firstElementChild!;
|
|
147
|
-
expect(root.className).toContain('bg-primary-100');
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('color=success + tone=500 → bg-success-500 text-success-50', () => {
|
|
151
|
-
const { container } = render(<Avatar name="x" color="success" tone={500} />);
|
|
152
|
-
const root = container.firstElementChild!;
|
|
153
|
-
expect(root.className).toContain('bg-success-500');
|
|
154
|
-
expect(root.className).toContain('text-success-50');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('color=danger + tone=700 → bg-danger-700 text-danger-50', () => {
|
|
158
|
-
const { container } = render(<Avatar name="x" color="danger" tone={700} />);
|
|
159
|
-
const root = container.firstElementChild!;
|
|
160
|
-
expect(root.className).toContain('bg-danger-700');
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('color=warning + tone=50 → bg-warning-50 text-warning-900 (dark text)', () => {
|
|
164
|
-
const { container } = render(<Avatar name="x" color="warning" tone={50} />);
|
|
165
|
-
const root = container.firstElementChild!;
|
|
166
|
-
expect(root.className).toContain('bg-warning-50');
|
|
167
|
-
expect(root.className).toContain('text-warning-900');
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('color classes are NOT applied when image loads', () => {
|
|
171
|
-
const { container } = render(<Avatar src="/x.png" alt="x" color="primary" />);
|
|
172
|
-
const root = container.firstElementChild!;
|
|
173
|
-
// Image surface — no fallback bg paint underneath (transparent
|
|
174
|
-
// PNGs would peek through otherwise).
|
|
175
|
-
expect(root.className).not.toContain('bg-primary-100');
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
describe('overrides', () => {
|
|
180
|
-
it('appends sx to the root', () => {
|
|
181
|
-
const { container } = render(<Avatar name="x" sx="ring-4 ring-purple-500" />);
|
|
182
|
-
const root = container.firstElementChild!;
|
|
183
|
-
expect(root.className).toContain('ring-purple-500');
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it('appends className to the root', () => {
|
|
187
|
-
const { container } = render(<Avatar name="x" className="my-custom" />);
|
|
188
|
-
const root = container.firstElementChild!;
|
|
189
|
-
expect(root.className).toContain('my-custom');
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
describe('<AvatarGroup>', () => {
|
|
195
|
-
it('renders all children when total ≤ max', () => {
|
|
196
|
-
const { container } = render(
|
|
197
|
-
<AvatarGroup max={5}>
|
|
198
|
-
<Avatar name="A" />
|
|
199
|
-
<Avatar name="B" />
|
|
200
|
-
<Avatar name="C" />
|
|
201
|
-
</AvatarGroup>
|
|
202
|
-
);
|
|
203
|
-
// 3 avatars rendered, no overflow indicator
|
|
204
|
-
const avatars = container.querySelectorAll('[role="img"]');
|
|
205
|
-
expect(avatars.length).toBe(3);
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it('slices to max and renders overflow indicator', () => {
|
|
209
|
-
const { container } = render(
|
|
210
|
-
<AvatarGroup max={3}>
|
|
211
|
-
<Avatar name="A" />
|
|
212
|
-
<Avatar name="B" />
|
|
213
|
-
<Avatar name="C" />
|
|
214
|
-
<Avatar name="D" />
|
|
215
|
-
<Avatar name="E" />
|
|
216
|
-
</AvatarGroup>
|
|
217
|
-
);
|
|
218
|
-
// 3 visible + 1 overflow indicator
|
|
219
|
-
const avatars = container.querySelectorAll('[role="img"]');
|
|
220
|
-
expect(avatars.length).toBe(4);
|
|
221
|
-
expect(screen.getByText('+2')).toBeTruthy();
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it('default max=4 — 5th avatar collapses', () => {
|
|
225
|
-
render(
|
|
226
|
-
<AvatarGroup>
|
|
227
|
-
<Avatar name="A" />
|
|
228
|
-
<Avatar name="B" />
|
|
229
|
-
<Avatar name="C" />
|
|
230
|
-
<Avatar name="D" />
|
|
231
|
-
<Avatar name="E" />
|
|
232
|
-
</AvatarGroup>
|
|
233
|
-
);
|
|
234
|
-
expect(screen.getByText('+1')).toBeTruthy();
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it('applies negative spacing class to the wrapper', () => {
|
|
238
|
-
const { container } = render(
|
|
239
|
-
<AvatarGroup spacing="md">
|
|
240
|
-
<Avatar name="A" />
|
|
241
|
-
<Avatar name="B" />
|
|
242
|
-
</AvatarGroup>
|
|
243
|
-
);
|
|
244
|
-
const wrapper = container.firstElementChild!;
|
|
245
|
-
expect(wrapper.className).toContain('-space-x-3');
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
it('propagates size to children when they do not override', () => {
|
|
249
|
-
const { container } = render(
|
|
250
|
-
<AvatarGroup size="xl">
|
|
251
|
-
<Avatar name="A" />
|
|
252
|
-
<Avatar name="B" size="sm" />
|
|
253
|
-
</AvatarGroup>
|
|
254
|
-
);
|
|
255
|
-
const avatars = container.querySelectorAll('[role="img"]');
|
|
256
|
-
// First child inherits xl
|
|
257
|
-
expect(avatars[0]!.className).toContain('w-16');
|
|
258
|
-
// Second child preserves sm
|
|
259
|
-
expect(avatars[1]!.className).toContain('w-7');
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
it('applies ring-2 halo when withRing=true (default)', () => {
|
|
263
|
-
const { container } = render(
|
|
264
|
-
<AvatarGroup>
|
|
265
|
-
<Avatar name="A" />
|
|
266
|
-
<Avatar name="B" />
|
|
267
|
-
</AvatarGroup>
|
|
268
|
-
);
|
|
269
|
-
const avatars = container.querySelectorAll('[role="img"]');
|
|
270
|
-
expect(avatars[0]!.className).toContain('ring-2');
|
|
271
|
-
// Ring uses the auto-inverting neutral-50 token (NOT
|
|
272
|
-
// `ring-white dark:ring-neutral-N` — that would violate the
|
|
273
|
-
// theme-identity rule for the neutral palette).
|
|
274
|
-
expect(avatars[0]!.className).toContain('ring-neutral-50');
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it('omits ring when withRing=false', () => {
|
|
278
|
-
const { container } = render(
|
|
279
|
-
<AvatarGroup withRing={false}>
|
|
280
|
-
<Avatar name="A" />
|
|
281
|
-
<Avatar name="B" />
|
|
282
|
-
</AvatarGroup>
|
|
283
|
-
);
|
|
284
|
-
const avatars = container.querySelectorAll('[role="img"]');
|
|
285
|
-
expect(avatars[0]!.className).not.toContain('ring-2');
|
|
286
|
-
});
|
|
287
|
-
});
|