@astryxdesign/core 0.1.2 → 0.1.3-canary.1e94ba0
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 +165 -0
- package/README.md +12 -12
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +11 -5
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +24 -5
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +31 -12
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +0 -1
- package/dist/Calendar/Calendar.d.ts +5 -4
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +82 -43
- package/dist/Calendar/hooks/index.d.ts +0 -2
- package/dist/Calendar/hooks/index.d.ts.map +1 -1
- package/dist/Calendar/hooks/index.js +1 -2
- package/dist/Calendar/index.d.ts +3 -3
- package/dist/Calendar/index.d.ts.map +1 -1
- package/dist/Calendar/index.js +1 -1
- package/dist/Calendar/styles.d.ts +3 -9
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +3 -11
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +17 -3
- package/dist/Center/Center.d.ts +11 -1
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +9 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +0 -1
- package/dist/Chat/ChatMessageList.d.ts +14 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +2 -0
- package/dist/Chat/useTriggerMenu.d.ts +8 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts +23 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +51 -9
- package/dist/CheckboxList/CheckboxList.d.ts +13 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +39 -9
- package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +0 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +9 -5
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +51 -37
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -5
- package/dist/ContextMenu/ContextMenu.d.ts +12 -5
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +96 -11
- package/dist/DateInput/DateInput.d.ts +23 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +167 -99
- package/dist/DateRangeInput/DateRangeInput.d.ts +23 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +42 -9
- package/dist/DateTimeInput/DateTimeInput.d.ts +35 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +78 -15
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts +1 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +42 -14
- package/dist/Field/Field.d.ts +19 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +4 -0
- package/dist/Field/FieldLabel.d.ts +21 -2
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +41 -26
- package/dist/FileInput/FileInput.d.ts +22 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +56 -10
- package/dist/Grid/Grid.d.ts +11 -1
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +32 -6
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +16 -6
- package/dist/InputGroup/InputGroupContext.d.ts +4 -0
- package/dist/InputGroup/InputGroupContext.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupContext.js +2 -2
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +3 -3
- package/dist/InputGroup/index.d.ts +1 -0
- package/dist/InputGroup/index.d.ts.map +1 -1
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +33 -1
- package/dist/Layer/layerAnimations.stylex.d.ts +4 -0
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +8 -4
- package/dist/Layer/useLayer.d.ts +10 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +64 -9
- package/dist/Layout/Layout.d.ts +4 -11
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +10 -11
- package/dist/Layout/LayoutFooter.d.ts +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.d.ts +2 -2
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.d.ts +2 -2
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.d.ts +51 -0
- package/dist/Layout/padding.stylex.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.js +63 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -2
- package/dist/Link/Link.d.ts +16 -1
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +18 -7
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -0
- package/dist/MoreMenu/MoreMenu.d.ts +1 -7
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +0 -2
- package/dist/MultiSelector/MultiSelector.d.ts +27 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +141 -42
- package/dist/MultiSelector/hooks.d.ts +12 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +14 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +34 -3
- package/dist/NumberInput/NumberInput.d.ts +23 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +62 -12
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +15 -1
- package/dist/Popover/Popover.d.ts +18 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +5 -2
- package/dist/Popover/usePopover.d.ts +38 -3
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +24 -9
- package/dist/PowerSearch/PowerSearch.d.ts +11 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +6 -1
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +3 -5
- package/dist/RadioList/RadioList.d.ts +20 -2
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +105 -9
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +78 -44
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +7 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +13 -2
- package/dist/Selector/Selector.d.ts +24 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +122 -43
- package/dist/Selector/hooks.d.ts +8 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +14 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +2 -0
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +1 -1
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +8 -2
- package/dist/Slider/Slider.d.ts +21 -0
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +36 -9
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +1 -1
- package/dist/Stack/Stack.d.ts +38 -23
- package/dist/Stack/Stack.d.ts.map +1 -1
- package/dist/Stack/Stack.js +25 -1
- package/dist/Stack/StackItem.d.ts +12 -23
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +8 -1
- package/dist/Switch/Switch.d.ts +23 -2
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +41 -11
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +6 -0
- package/dist/TabList/TabList.d.ts +16 -4
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +87 -10
- package/dist/TabList/TabListContext.d.ts +5 -0
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +5 -0
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +6 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +13 -9
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +10 -1
- package/dist/Table/TableCell.d.ts +8 -1
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +79 -10
- package/dist/Table/TableHeaderCell.d.ts +8 -1
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +16 -16
- package/dist/Table/index.d.ts +4 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +3 -2
- package/dist/Table/plugins/pagination/paginateData.d.ts +2 -1
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +8 -3
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +6 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts +3 -0
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/index.js +3 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +90 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +398 -0
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
- package/dist/Table/tableContextMenu.d.ts +37 -0
- package/dist/Table/tableContextMenu.d.ts.map +1 -0
- package/dist/Table/tableContextMenu.js +140 -0
- package/dist/Table/types.d.ts +66 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +22 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +41 -9
- package/dist/TextInput/TextInput.d.ts +23 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +55 -10
- package/dist/TimeInput/TimeInput.d.ts +23 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +147 -76
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +14 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +131 -3
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +26 -4
- package/dist/Toolbar/Toolbar.d.ts +3 -3
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +51 -7
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +56 -9
- package/dist/TopNav/TopNavHeading.d.ts +7 -1
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +8 -0
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +72 -2
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +51 -12
- package/dist/TreeList/treeListItem.markers.stylex.d.ts +16 -0
- package/dist/TreeList/treeListItem.markers.stylex.d.ts.map +1 -0
- package/dist/TreeList/treeListItem.markers.stylex.js +22 -0
- package/dist/Typeahead/BaseTypeahead.d.ts +13 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +69 -6
- package/dist/Typeahead/Typeahead.d.ts +26 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +65 -29
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +61 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/VisuallyHidden/VisuallyHidden.js +65 -0
- package/dist/VisuallyHidden/index.d.ts +11 -0
- package/dist/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/VisuallyHidden/index.js +13 -0
- package/dist/astryx.css +22 -0
- package/dist/astryx.umd.js +54 -54
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/focusableSelector.d.ts +22 -0
- package/dist/hooks/focusableSelector.d.ts.map +1 -0
- package/dist/hooks/focusableSelector.js +24 -0
- package/dist/hooks/index.d.ts +12 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +7 -2
- package/dist/hooks/useAnnounce.d.ts +40 -0
- package/dist/hooks/useAnnounce.d.ts.map +1 -0
- package/dist/hooks/useAnnounce.js +142 -0
- package/dist/hooks/useClickableContainer.d.ts +16 -1
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +16 -4
- package/dist/hooks/useEntryAnimation.d.ts.map +1 -1
- package/dist/hooks/useEntryAnimation.js +4 -4
- package/dist/hooks/useFocusTrap.d.ts +18 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +87 -3
- package/dist/hooks/useGridFocus.d.ts +88 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +261 -62
- package/dist/hooks/useKeyboardHint.d.ts +82 -0
- package/dist/hooks/useKeyboardHint.d.ts.map +1 -0
- package/dist/hooks/useKeyboardHint.js +220 -0
- package/dist/hooks/useListFocus.d.ts +78 -7
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +305 -52
- package/dist/hooks/useLongPress.d.ts +21 -0
- package/dist/hooks/useLongPress.d.ts.map +1 -0
- package/dist/hooks/useLongPress.js +89 -0
- package/dist/hooks/useTreeFocus.d.ts +157 -0
- package/dist/hooks/useTreeFocus.d.ts.map +1 -0
- package/dist/hooks/useTreeFocus.js +337 -0
- package/dist/hooks/useTypeahead.d.ts +63 -0
- package/dist/hooks/useTypeahead.d.ts.map +1 -0
- package/dist/hooks/useTypeahead.js +117 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/utils/dateTypes.d.ts +12 -0
- package/dist/utils/dateTypes.d.ts.map +1 -1
- package/dist/utils/dateTypes.js +41 -1
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/inputAria.d.ts +29 -0
- package/dist/utils/inputAria.d.ts.map +1 -0
- package/dist/utils/inputAria.js +30 -0
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -2
- package/docs.mjs +2 -2
- package/package.json +12 -8
- package/src/Avatar/Avatar.doc.mjs +2 -2
- package/src/Avatar/Avatar.test.tsx +37 -0
- package/src/Avatar/Avatar.tsx +10 -5
- package/src/Breadcrumbs/BreadcrumbItem.tsx +25 -7
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -10
- package/src/Button/Button.tsx +42 -22
- package/src/ButtonGroup/ButtonGroup.test.tsx +9 -9
- package/src/ButtonGroup/ButtonGroup.tsx +0 -1
- package/src/Calendar/Calendar.doc.mjs +4 -4
- package/src/Calendar/Calendar.test.tsx +168 -30
- package/src/Calendar/Calendar.tsx +121 -66
- package/src/Calendar/hooks/index.ts +0 -6
- package/src/Calendar/index.ts +1 -3
- package/src/Calendar/styles.ts +4 -9
- package/src/Carousel/Carousel.doc.mjs +7 -1
- package/src/Carousel/Carousel.test.tsx +20 -0
- package/src/Carousel/Carousel.tsx +16 -1
- package/src/Center/Center.doc.mjs +12 -2
- package/src/Center/Center.tsx +28 -3
- package/src/Chat/ChatComposerInput.test.tsx +26 -7
- package/src/Chat/ChatComposerInput.tsx +0 -1
- package/src/Chat/ChatDictationButton.doc.mjs +1 -1
- package/src/Chat/ChatMessageList.doc.mjs +8 -0
- package/src/Chat/ChatMessageList.test.tsx +18 -0
- package/src/Chat/ChatMessageList.tsx +16 -0
- package/src/Chat/useTriggerMenu.tsx +22 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +10 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +172 -27
- package/src/CheckboxInput/CheckboxInput.tsx +78 -6
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
- package/src/CheckboxList/CheckboxList.test.tsx +192 -26
- package/src/CheckboxList/CheckboxList.tsx +56 -3
- package/src/CheckboxList/CheckboxListContext.tsx +7 -0
- package/src/CheckboxList/CheckboxListItem.tsx +0 -3
- package/src/Citation/Citation.doc.mjs +10 -0
- package/src/Citation/Citation.test.tsx +121 -0
- package/src/Citation/Citation.tsx +15 -3
- package/src/CodeBlock/CodeBlock.test.tsx +115 -0
- package/src/CodeBlock/CodeBlock.tsx +63 -33
- package/src/CommandPalette/CommandPalette.test.tsx +47 -1
- package/src/CommandPalette/CommandPalette.tsx +9 -21
- package/src/ContextMenu/ContextMenu.doc.mjs +4 -4
- package/src/ContextMenu/ContextMenu.test.tsx +155 -1
- package/src/ContextMenu/ContextMenu.tsx +129 -16
- package/src/DateInput/DateInput.doc.mjs +286 -56
- package/src/DateInput/DateInput.test.tsx +248 -2
- package/src/DateInput/DateInput.tsx +196 -100
- package/src/DateRangeInput/DateRangeInput.doc.mjs +251 -46
- package/src/DateRangeInput/DateRangeInput.test.tsx +182 -20
- package/src/DateRangeInput/DateRangeInput.tsx +63 -5
- package/src/DateTimeInput/DateTimeInput.doc.mjs +368 -67
- package/src/DateTimeInput/DateTimeInput.test.tsx +279 -11
- package/src/DateTimeInput/DateTimeInput.tsx +125 -17
- package/src/Dialog/Dialog.doc.mjs +2 -2
- package/src/Dialog/Dialog.tsx +12 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -8
- package/src/DropdownMenu/DropdownMenu.test.tsx +56 -42
- package/src/DropdownMenu/DropdownMenu.tsx +52 -18
- package/src/Field/Field.doc.mjs +59 -18
- package/src/Field/Field.test.tsx +32 -0
- package/src/Field/Field.tsx +23 -5
- package/src/Field/FieldLabel.tsx +55 -17
- package/src/FileInput/FileInput.doc.mjs +17 -0
- package/src/FileInput/FileInput.test.tsx +283 -49
- package/src/FileInput/FileInput.tsx +76 -4
- package/src/Grid/Grid.doc.mjs +17 -4
- package/src/Grid/Grid.test.tsx +43 -30
- package/src/Grid/Grid.tsx +38 -3
- package/src/Icon/Icon.doc.mjs +3 -3
- package/src/InputGroup/InputGroup.doc.mjs +111 -23
- package/src/InputGroup/InputGroup.test.tsx +257 -60
- package/src/InputGroup/InputGroup.tsx +23 -5
- package/src/InputGroup/InputGroupContext.ts +9 -4
- package/src/InputGroup/groupStyles.ts +7 -1
- package/src/InputGroup/index.ts +1 -0
- package/src/Kbd/Kbd.test.tsx +22 -4
- package/src/Kbd/Kbd.tsx +35 -3
- package/src/Layer/layerAnimations.stylex.ts +20 -4
- package/src/Layer/useLayer.doc.mjs +5 -0
- package/src/Layer/useLayer.test.tsx +111 -0
- package/src/Layer/useLayer.tsx +90 -9
- package/src/Layout/Layout.tsx +8 -16
- package/src/Layout/LayoutFooter.doc.mjs +4 -4
- package/src/Layout/LayoutFooter.tsx +3 -3
- package/src/Layout/LayoutHeader.doc.mjs +4 -4
- package/src/Layout/LayoutHeader.tsx +3 -3
- package/src/Layout/LayoutPanel.tsx +3 -3
- package/src/Layout/__tests__/edgeCompensation.test.tsx +72 -0
- package/src/Layout/padding.stylex.ts +52 -0
- package/src/Lightbox/Lightbox.doc.mjs +9 -0
- package/src/Lightbox/Lightbox.test.tsx +53 -5
- package/src/Lightbox/Lightbox.tsx +9 -4
- package/src/Link/Link.doc.mjs +14 -0
- package/src/Link/Link.test.tsx +50 -0
- package/src/Link/Link.tsx +39 -4
- package/src/Markdown/Markdown.test.tsx +11 -0
- package/src/Markdown/Markdown.tsx +7 -0
- package/src/MetadataList/MetadataListItem.doc.mjs +4 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -17
- package/src/MoreMenu/MoreMenu.tsx +0 -9
- package/src/MultiSelector/MultiSelector.doc.mjs +30 -0
- package/src/MultiSelector/MultiSelector.test.tsx +375 -8
- package/src/MultiSelector/MultiSelector.tsx +194 -48
- package/src/MultiSelector/hooks.ts +27 -0
- package/src/NavMenu/NavHeadingMenu.test.tsx +77 -1
- package/src/NavMenu/NavHeadingMenu.tsx +50 -3
- package/src/NumberInput/NumberInput.doc.mjs +17 -0
- package/src/NumberInput/NumberInput.test.tsx +242 -40
- package/src/NumberInput/NumberInput.tsx +89 -11
- package/src/Pagination/Pagination.doc.mjs +3 -3
- package/src/Pagination/Pagination.test.tsx +117 -5
- package/src/Pagination/Pagination.tsx +21 -1
- package/src/Popover/Popover.doc.mjs +26 -0
- package/src/Popover/Popover.test.tsx +121 -0
- package/src/Popover/Popover.tsx +23 -2
- package/src/Popover/usePopover.doc.mjs +9 -3
- package/src/Popover/usePopover.tsx +70 -12
- package/src/PowerSearch/PowerSearch.doc.mjs +15 -0
- package/src/PowerSearch/PowerSearch.test.tsx +97 -1
- package/src/PowerSearch/PowerSearch.tsx +16 -3
- package/src/ProgressBar/ProgressBar.test.tsx +34 -26
- package/src/ProgressBar/ProgressBar.tsx +3 -4
- package/src/RadioList/RadioList.doc.mjs +9 -0
- package/src/RadioList/RadioList.test.tsx +252 -16
- package/src/RadioList/RadioList.tsx +166 -10
- package/src/RadioList/RadioListItem.tsx +14 -2
- package/src/SegmentedControl/SegmentedControl.doc.mjs +9 -0
- package/src/SegmentedControl/SegmentedControl.test.tsx +214 -42
- package/src/SegmentedControl/SegmentedControl.tsx +102 -54
- package/src/SegmentedControl/SegmentedControlContext.ts +7 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +14 -1
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +26 -0
- package/src/Selector/Selector.test.tsx +387 -15
- package/src/Selector/Selector.tsx +175 -67
- package/src/Selector/hooks.ts +23 -0
- package/src/SideNav/SideNav.test.tsx +48 -0
- package/src/SideNav/SideNavHeading.tsx +8 -2
- package/src/SideNav/SideNavItem.tsx +2 -4
- package/src/Skeleton/Skeleton.test.tsx +25 -0
- package/src/Skeleton/Skeleton.tsx +11 -1
- package/src/Slider/Slider.doc.mjs +15 -0
- package/src/Slider/Slider.test.tsx +155 -2
- package/src/Slider/Slider.tsx +53 -5
- package/src/Spinner/Spinner.tsx +7 -1
- package/src/Stack/Stack.doc.mjs +77 -0
- package/src/Stack/Stack.test.tsx +55 -5
- package/src/Stack/Stack.tsx +73 -24
- package/src/Stack/StackItem.test.tsx +23 -0
- package/src/Stack/StackItem.tsx +20 -23
- package/src/Switch/Switch.doc.mjs +15 -0
- package/src/Switch/Switch.test.tsx +162 -27
- package/src/Switch/Switch.tsx +61 -21
- package/src/TabList/Tab.tsx +6 -0
- package/src/TabList/TabList.doc.mjs +6 -0
- package/src/TabList/TabList.test.tsx +251 -0
- package/src/TabList/TabList.tsx +103 -12
- package/src/TabList/TabListContext.ts +7 -3
- package/src/TabList/TabMenu.tsx +6 -3
- package/src/Table/BaseTable.tsx +24 -18
- package/src/Table/Table.doc.mjs +2 -0
- package/src/Table/Table.test.tsx +10 -0
- package/src/Table/Table.tsx +8 -0
- package/src/Table/TableCell.tsx +105 -24
- package/src/Table/TableHeaderCell.tsx +28 -29
- package/src/Table/index.ts +8 -2
- package/src/Table/plugins/pagination/paginateData.ts +10 -3
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +16 -0
- package/src/Table/plugins/pagination/useTablePagination.tsx +8 -1
- package/src/Table/plugins/rowExpansion/index.ts +7 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +155 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +590 -0
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +91 -2
- package/src/Table/plugins/sortable/useTableSortable.tsx +53 -1
- package/src/Table/tableContextMenu.test.tsx +181 -0
- package/src/Table/tableContextMenu.tsx +160 -0
- package/src/Table/types.ts +74 -0
- package/src/Table/useTableColumnResize.doc.mjs +3 -3
- package/src/Table/useTablePagination.doc.mjs +4 -1
- package/src/Table/useTableRowExpansion.doc.mjs +63 -0
- package/src/Table/useTableSortable.doc.mjs +4 -1
- package/src/Table/useTableStickyColumns.doc.mjs +2 -2
- package/src/Text/Text.doc.mjs +18 -18
- package/src/TextArea/TextArea.doc.mjs +17 -0
- package/src/TextArea/TextArea.test.tsx +167 -35
- package/src/TextArea/TextArea.tsx +62 -15
- package/src/TextInput/TextInput.doc.mjs +17 -0
- package/src/TextInput/TextInput.test.tsx +168 -34
- package/src/TextInput/TextInput.tsx +77 -9
- package/src/Thumbnail/Thumbnail.doc.mjs +4 -4
- package/src/TimeInput/TimeInput.doc.mjs +345 -60
- package/src/TimeInput/TimeInput.test.tsx +255 -7
- package/src/TimeInput/TimeInput.tsx +176 -70
- package/src/Timestamp/Timestamp.doc.mjs +19 -19
- package/src/Toast/Toast.tsx +14 -0
- package/src/Toast/ToastViewport.test.tsx +214 -0
- package/src/Toast/ToastViewport.tsx +167 -21
- package/src/Tokenizer/Tokenizer.doc.mjs +29 -14
- package/src/Tokenizer/Tokenizer.test.tsx +105 -1
- package/src/Tokenizer/Tokenizer.tsx +37 -1
- package/src/Toolbar/Toolbar.test.tsx +109 -6
- package/src/Toolbar/Toolbar.tsx +59 -5
- package/src/Tooltip/Tooltip.test.tsx +68 -0
- package/src/Tooltip/useTooltip.tsx +55 -8
- package/src/TopNav/TopNav.test.tsx +50 -0
- package/src/TopNav/TopNavHeading.tsx +17 -1
- package/src/TreeList/TreeList.test.tsx +295 -6
- package/src/TreeList/TreeList.tsx +73 -1
- package/src/TreeList/TreeListItem.tsx +51 -5
- package/src/TreeList/treeListItem.markers.stylex.ts +20 -0
- package/src/Typeahead/BaseTypeahead.tsx +93 -9
- package/src/Typeahead/Typeahead.doc.mjs +141 -30
- package/src/Typeahead/Typeahead.test.tsx +331 -1
- package/src/Typeahead/Typeahead.tsx +105 -33
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +80 -0
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +76 -0
- package/src/VisuallyHidden/VisuallyHidden.tsx +113 -0
- package/src/VisuallyHidden/index.ts +15 -0
- package/src/docs-script.test.mjs +50 -0
- package/src/hooks/focusableSelector.ts +25 -0
- package/src/hooks/index.ts +28 -2
- package/src/hooks/useAnnounce.test.tsx +101 -0
- package/src/hooks/useAnnounce.ts +168 -0
- package/src/hooks/useClickableContainer.ts +16 -4
- package/src/hooks/useEntryAnimation.ts +16 -4
- package/src/hooks/useFocusTrap.test.tsx +132 -0
- package/src/hooks/useFocusTrap.ts +98 -4
- package/src/hooks/useGridFocus.doc.mjs +40 -2
- package/src/hooks/useGridFocus.test.tsx +132 -0
- package/src/hooks/useGridFocus.ts +343 -67
- package/src/hooks/useKeyboardHint.doc.mjs +101 -0
- package/src/hooks/useKeyboardHint.test.tsx +70 -0
- package/src/hooks/useKeyboardHint.tsx +332 -0
- package/src/hooks/useListFocus.doc.mjs +50 -10
- package/src/hooks/useListFocus.test.tsx +375 -0
- package/src/hooks/useListFocus.ts +395 -57
- package/src/hooks/useLongPress.test.tsx +134 -0
- package/src/hooks/useLongPress.ts +119 -0
- package/src/hooks/useTreeFocus.doc.mjs +140 -0
- package/src/hooks/useTreeFocus.test.tsx +214 -0
- package/src/hooks/useTreeFocus.ts +559 -0
- package/src/hooks/useTypeahead.test.tsx +109 -0
- package/src/hooks/useTypeahead.ts +183 -0
- package/src/index.ts +1 -0
- package/src/theme/derivedVarRegistry.test.ts +10 -5
- package/src/utils/dateTypes.test.ts +40 -0
- package/src/utils/dateTypes.ts +40 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/inputAria.test.ts +39 -0
- package/src/utils/inputAria.ts +58 -0
- package/src/utils/timeParser.test.ts +10 -0
- package/src/utils/timeParser.ts +5 -2
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts +0 -57
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts.map +0 -1
- package/dist/Calendar/hooks/useCalendarRovingTabindex.js +0 -96
- package/src/Calendar/hooks/useCalendarRovingTabindex.ts +0 -118
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @param data - Full data array
|
|
17
17
|
* @param page - Current page number (1-based)
|
|
18
|
-
* @param pageSize - Number of items per page
|
|
18
|
+
* @param pageSize - Number of items per page; coerced to a positive integer,
|
|
19
|
+
* non-finite values fall back to 10
|
|
19
20
|
* @returns Slice of data for the current page
|
|
20
21
|
*
|
|
21
22
|
* @example
|
|
@@ -27,6 +28,10 @@
|
|
|
27
28
|
* ```
|
|
28
29
|
*/
|
|
29
30
|
export function paginateData(data, page, pageSize) {
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
// Same coercion as Pagination and useTablePagination: a 0/NaN/negative
|
|
32
|
+
// pageSize would slice every page empty while the pagination chrome still
|
|
33
|
+
// renders page buttons.
|
|
34
|
+
const size = Number.isFinite(pageSize) ? Math.max(1, Math.floor(pageSize)) : 10;
|
|
35
|
+
const start = (page - 1) * size;
|
|
36
|
+
return data.slice(start, start + size);
|
|
32
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTablePagination.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/pagination/useTablePagination.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AA+B7C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,wBAAwB;IAGvC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,sEAAsE;IACtE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAIrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAIlB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAI3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAE1D;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAE/C;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAInC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,wBAAwB,GAC/B,WAAW,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useTablePagination.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/pagination/useTablePagination.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AA+B7C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,wBAAwB;IAGvC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,sEAAsE;IACtE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAIrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAIlB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAI3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAE1D;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAE/C;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAInC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,wBAAwB,GAC/B,WAAW,CAAC,CAAC,CAAC,CAiGhB"}
|
|
@@ -104,7 +104,7 @@ export function useTablePagination(config) {
|
|
|
104
104
|
totalItems,
|
|
105
105
|
totalPages: totalPagesProp,
|
|
106
106
|
hasMore,
|
|
107
|
-
pageSize = 10,
|
|
107
|
+
pageSize: pageSizeConfig = 10,
|
|
108
108
|
onPageSizeChange,
|
|
109
109
|
pageSizeOptions,
|
|
110
110
|
variant = 'pages',
|
|
@@ -113,6 +113,11 @@ export function useTablePagination(config) {
|
|
|
113
113
|
align = 'center',
|
|
114
114
|
label = 'Table pagination'
|
|
115
115
|
} = config;
|
|
116
|
+
|
|
117
|
+
// Same guard as Pagination itself: 0/NaN/negative pageSize would produce an
|
|
118
|
+
// Infinity/NaN totalPages here, which bypasses Pagination's own coercion
|
|
119
|
+
// because it is passed down as the explicit totalPages prop.
|
|
120
|
+
const pageSize = Number.isFinite(pageSizeConfig) ? Math.max(1, Math.floor(pageSizeConfig)) : 10;
|
|
116
121
|
const computedTotalPages = totalPagesProp ?? (totalItems != null ? Math.ceil(totalItems / pageSize) : undefined);
|
|
117
122
|
|
|
118
123
|
// Build Pagination props
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/rowExpansion/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,0BAA0B,EAAC,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { TablePlugin } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for useTableRowExpansion (inherited-columns mode).
|
|
4
|
+
*
|
|
5
|
+
* Child rows use the same columns as their parents, with indentation on the
|
|
6
|
+
* first content column. The consumer provides a **flat** data array (use
|
|
7
|
+
* {@link useTableRowExpansionState} to flatten a tree) and a `getDepth`
|
|
8
|
+
* function so the plugin knows each row's nesting level.
|
|
9
|
+
*/
|
|
10
|
+
export interface UseTableRowExpansionConfig<T extends Record<string, unknown>> {
|
|
11
|
+
/** Set of currently-expanded row keys. */
|
|
12
|
+
expandedKeys: Set<string>;
|
|
13
|
+
/** Called when a row's expansion is toggled. */
|
|
14
|
+
onToggle: (key: string) => void;
|
|
15
|
+
/** Derive a stable unique key from a row item. */
|
|
16
|
+
getRowKey: (item: T) => string;
|
|
17
|
+
/** Return the children of a row (used to determine expandability). */
|
|
18
|
+
getChildren: (item: T) => T[];
|
|
19
|
+
/** Return the depth of a row in the hierarchy (0 = top-level). */
|
|
20
|
+
getDepth?: (item: T) => number;
|
|
21
|
+
/** Optionally control which rows are expandable. @default checks getChildren length */
|
|
22
|
+
getIsItemExpandable?: (item: T) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* When true, clicking anywhere on the row toggles expansion (in addition to
|
|
25
|
+
* the chevron button). @default false — only the chevron triggers expansion.
|
|
26
|
+
*/
|
|
27
|
+
hasRowClickExpansion?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* State of the expand-all toggle in the header. `true` = all expanded,
|
|
30
|
+
* `false` = all collapsed, `'indeterminate'` = mixed. When provided
|
|
31
|
+
* (together with `onToggleExpandAll`), the header cell shows a toggle button.
|
|
32
|
+
*/
|
|
33
|
+
isAllExpanded?: boolean | 'indeterminate';
|
|
34
|
+
/** Called when the expand-all header toggle is clicked. */
|
|
35
|
+
onToggleExpandAll?: (expand: boolean) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Configuration for {@link useTableRowExpansionState}.
|
|
39
|
+
*
|
|
40
|
+
* Mirrors the shape of {@link useTableSelectionState}: you own the
|
|
41
|
+
* `expandedKeys` set (via `useState`), and the hook derives everything the
|
|
42
|
+
* plugin needs — the flattened `data`, per-row depth, expand/collapse
|
|
43
|
+
* handlers, and the expand-all toggle state.
|
|
44
|
+
*/
|
|
45
|
+
export interface UseTableRowExpansionStateConfig<T extends Record<string, unknown>> {
|
|
46
|
+
/** The full, un-flattened tree. */
|
|
47
|
+
baseData: T[];
|
|
48
|
+
/** Return the children of a row. Leaf rows return an empty array. */
|
|
49
|
+
getChildren: (item: T) => T[];
|
|
50
|
+
/** Derive a stable unique key from a row item. */
|
|
51
|
+
getRowKey: (item: T) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Should this row be expandable? Rows that return `false` never show a
|
|
54
|
+
* chevron and are skipped by expand-all. @default rows with children
|
|
55
|
+
*/
|
|
56
|
+
getIsItemExpandable?: (item: T) => boolean;
|
|
57
|
+
/** Controlled set of currently-expanded row keys. */
|
|
58
|
+
expandedKeys: Set<string>;
|
|
59
|
+
/** Setter for the controlled expanded keys. */
|
|
60
|
+
setExpandedKeys: React.Dispatch<React.SetStateAction<Set<string>>>;
|
|
61
|
+
}
|
|
62
|
+
export interface UseTableRowExpansionStateResult<T extends Record<string, unknown>> {
|
|
63
|
+
/** The flattened, currently-visible rows. Pass to `<Table data>`. */
|
|
64
|
+
data: T[];
|
|
65
|
+
/** Ready-to-use config for {@link useTableRowExpansion}. */
|
|
66
|
+
expansionConfig: UseTableRowExpansionConfig<T>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Manages row-expansion state and derives the config for
|
|
70
|
+
* {@link useTableRowExpansion}. This is the recommended entry point — it
|
|
71
|
+
* removes the boilerplate of flattening the tree, tracking depth, and
|
|
72
|
+
* computing the expand-all state.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());
|
|
77
|
+
* const {data, expansionConfig} = useTableRowExpansionState({
|
|
78
|
+
* baseData: tree,
|
|
79
|
+
* getChildren: item => item.children ?? [],
|
|
80
|
+
* getRowKey: item => item.id,
|
|
81
|
+
* expandedKeys,
|
|
82
|
+
* setExpandedKeys,
|
|
83
|
+
* });
|
|
84
|
+
* const expansion = useTableRowExpansion(expansionConfig);
|
|
85
|
+
* <Table data={data} columns={columns} idKey="id" plugins={{expansion}} />;
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function useTableRowExpansionState<T extends Record<string, unknown>>({ baseData, getChildren, getRowKey, getIsItemExpandable, expandedKeys, setExpandedKeys, }: UseTableRowExpansionStateConfig<T>): UseTableRowExpansionStateResult<T>;
|
|
89
|
+
export declare function useTableRowExpansion<T extends Record<string, unknown>>(config: UseTableRowExpansionConfig<T>): TablePlugin<T>;
|
|
90
|
+
//# sourceMappingURL=useTableRowExpansion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableRowExpansion.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/rowExpansion/useTableRowExpansion.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,aAAa,CAAC;AAMrB;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3E,0CAA0C;IAC1C,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kDAAkD;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,sEAAsE;IACtE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAC1C,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,+BAA+B,CAC9C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC,mCAAmC;IACnC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,qEAAqE;IACrE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9B,kDAAkD;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C,qDAAqD;IACrD,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,+CAA+C;IAC/C,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,+BAA+B,CAC9C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC,qEAAqE;IACrE,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,4DAA4D;IAC5D,eAAe,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3E,QAAQ,EACR,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,eAAe,GAChB,EAAE,+BAA+B,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAyHzE;AAuGD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACpC,WAAW,CAAC,CAAC,CAAC,CAwOhB"}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useTableRowExpansion.tsx
|
|
7
|
+
* @input React, StyleX, Icon, Table types
|
|
8
|
+
* @output Exports useTableRowExpansion hook + config/state types
|
|
9
|
+
* @position Row-expansion plugin; consumed by Table via plugins prop
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
12
|
+
* - /packages/core/src/Table/index.ts (exports)
|
|
13
|
+
*/
|
|
14
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
15
|
+
import * as stylex from '@stylexjs/stylex';
|
|
16
|
+
import "../../../theme/tokens.stylex.js";
|
|
17
|
+
import { spacingVars, colorVars, radiusVars } from "../../../theme/tokens.stylex.js";
|
|
18
|
+
import { Icon } from "../../../Icon/index.js";
|
|
19
|
+
import { resolveContextActions } from "../../tableContextMenu.js";
|
|
20
|
+
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Config
|
|
23
|
+
// =============================================================================
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Configuration for useTableRowExpansion (inherited-columns mode).
|
|
27
|
+
*
|
|
28
|
+
* Child rows use the same columns as their parents, with indentation on the
|
|
29
|
+
* first content column. The consumer provides a **flat** data array (use
|
|
30
|
+
* {@link useTableRowExpansionState} to flatten a tree) and a `getDepth`
|
|
31
|
+
* function so the plugin knows each row's nesting level.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Configuration for {@link useTableRowExpansionState}.
|
|
36
|
+
*
|
|
37
|
+
* Mirrors the shape of {@link useTableSelectionState}: you own the
|
|
38
|
+
* `expandedKeys` set (via `useState`), and the hook derives everything the
|
|
39
|
+
* plugin needs — the flattened `data`, per-row depth, expand/collapse
|
|
40
|
+
* handlers, and the expand-all toggle state.
|
|
41
|
+
*/
|
|
42
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
43
|
+
/**
|
|
44
|
+
* Manages row-expansion state and derives the config for
|
|
45
|
+
* {@link useTableRowExpansion}. This is the recommended entry point — it
|
|
46
|
+
* removes the boilerplate of flattening the tree, tracking depth, and
|
|
47
|
+
* computing the expand-all state.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());
|
|
52
|
+
* const {data, expansionConfig} = useTableRowExpansionState({
|
|
53
|
+
* baseData: tree,
|
|
54
|
+
* getChildren: item => item.children ?? [],
|
|
55
|
+
* getRowKey: item => item.id,
|
|
56
|
+
* expandedKeys,
|
|
57
|
+
* setExpandedKeys,
|
|
58
|
+
* });
|
|
59
|
+
* const expansion = useTableRowExpansion(expansionConfig);
|
|
60
|
+
* <Table data={data} columns={columns} idKey="id" plugins={{expansion}} />;
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function useTableRowExpansionState({
|
|
64
|
+
baseData,
|
|
65
|
+
getChildren,
|
|
66
|
+
getRowKey,
|
|
67
|
+
getIsItemExpandable,
|
|
68
|
+
expandedKeys,
|
|
69
|
+
setExpandedKeys
|
|
70
|
+
}) {
|
|
71
|
+
const isExpandable = useCallback(item => getIsItemExpandable ? getIsItemExpandable(item) : getChildren(item).length > 0, [getIsItemExpandable, getChildren]);
|
|
72
|
+
const depthMap = useMemo(() => {
|
|
73
|
+
const map = new Map();
|
|
74
|
+
function walk(items, depth) {
|
|
75
|
+
for (const item of items) {
|
|
76
|
+
const key = getRowKey(item);
|
|
77
|
+
map.set(key, depth);
|
|
78
|
+
if (expandedKeys.has(key)) {
|
|
79
|
+
walk(getChildren(item), depth + 1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
walk(baseData, 0);
|
|
84
|
+
return map;
|
|
85
|
+
}, [baseData, getChildren, getRowKey, expandedKeys]);
|
|
86
|
+
const data = useMemo(() => {
|
|
87
|
+
const result = [];
|
|
88
|
+
function walk(items) {
|
|
89
|
+
for (const item of items) {
|
|
90
|
+
result.push(item);
|
|
91
|
+
const key = getRowKey(item);
|
|
92
|
+
if (expandedKeys.has(key)) {
|
|
93
|
+
walk(getChildren(item));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
walk(baseData);
|
|
98
|
+
return result;
|
|
99
|
+
}, [baseData, getChildren, getRowKey, expandedKeys]);
|
|
100
|
+
|
|
101
|
+
// Every expandable key across the whole tree (drives expand-all).
|
|
102
|
+
const allExpandableKeys = useMemo(() => {
|
|
103
|
+
const keys = [];
|
|
104
|
+
function walk(items) {
|
|
105
|
+
for (const item of items) {
|
|
106
|
+
if (isExpandable(item)) {
|
|
107
|
+
keys.push(getRowKey(item));
|
|
108
|
+
walk(getChildren(item));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
walk(baseData);
|
|
113
|
+
return keys;
|
|
114
|
+
}, [baseData, getChildren, getRowKey, isExpandable]);
|
|
115
|
+
const getDepth = useCallback(item => depthMap.get(getRowKey(item)) ?? 0, [depthMap, getRowKey]);
|
|
116
|
+
const onToggle = useCallback(key => {
|
|
117
|
+
setExpandedKeys(prev => {
|
|
118
|
+
const next = new Set(prev);
|
|
119
|
+
if (next.has(key)) {
|
|
120
|
+
next.delete(key);
|
|
121
|
+
} else {
|
|
122
|
+
next.add(key);
|
|
123
|
+
}
|
|
124
|
+
return next;
|
|
125
|
+
});
|
|
126
|
+
}, [setExpandedKeys]);
|
|
127
|
+
const isAllExpanded = useMemo(() => {
|
|
128
|
+
if (allExpandableKeys.length === 0) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const expandedCount = allExpandableKeys.filter(k => expandedKeys.has(k)).length;
|
|
132
|
+
if (expandedCount === 0) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (expandedCount === allExpandableKeys.length) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return 'indeterminate';
|
|
139
|
+
}, [allExpandableKeys, expandedKeys]);
|
|
140
|
+
const onToggleExpandAll = useCallback(expand => {
|
|
141
|
+
setExpandedKeys(expand ? new Set(allExpandableKeys) : new Set());
|
|
142
|
+
}, [setExpandedKeys, allExpandableKeys]);
|
|
143
|
+
const expansionConfig = useMemo(() => ({
|
|
144
|
+
expandedKeys,
|
|
145
|
+
onToggle,
|
|
146
|
+
getRowKey,
|
|
147
|
+
getChildren,
|
|
148
|
+
getDepth,
|
|
149
|
+
getIsItemExpandable,
|
|
150
|
+
isAllExpanded,
|
|
151
|
+
onToggleExpandAll
|
|
152
|
+
}), [expandedKeys, onToggle, getRowKey, getChildren, getDepth, getIsItemExpandable, isAllExpanded, onToggleExpandAll]);
|
|
153
|
+
return {
|
|
154
|
+
data,
|
|
155
|
+
expansionConfig
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// =============================================================================
|
|
160
|
+
// Styles
|
|
161
|
+
// =============================================================================
|
|
162
|
+
|
|
163
|
+
const EXPANSION_COLUMN_WIDTH = {
|
|
164
|
+
type: 'pixel',
|
|
165
|
+
value: 40
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** Indentation applied per depth level, in pixels. */
|
|
169
|
+
const INDENT_PER_DEPTH = 24;
|
|
170
|
+
const _temp = {
|
|
171
|
+
kZCmMZ: "xnvo3vl",
|
|
172
|
+
"$$css": true
|
|
173
|
+
};
|
|
174
|
+
const expansionStyles = {
|
|
175
|
+
indentedCell: {
|
|
176
|
+
k1xSpc: "x78zum5",
|
|
177
|
+
kGNEyG: "x6s0dn4",
|
|
178
|
+
kOIVth: "xzye2dw",
|
|
179
|
+
$$css: true
|
|
180
|
+
},
|
|
181
|
+
indent: px => [_temp, {
|
|
182
|
+
"--x-paddingInlineStart": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(`${px}px`)
|
|
183
|
+
}],
|
|
184
|
+
clickableRow: {
|
|
185
|
+
kkrTdU: "x1ypdohk",
|
|
186
|
+
$$css: true
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// =============================================================================
|
|
191
|
+
// Chevron
|
|
192
|
+
// =============================================================================
|
|
193
|
+
|
|
194
|
+
function ExpansionChevron({
|
|
195
|
+
isExpanded,
|
|
196
|
+
onToggle,
|
|
197
|
+
ariaLabel
|
|
198
|
+
}) {
|
|
199
|
+
return /*#__PURE__*/_jsx("button", {
|
|
200
|
+
type: "button",
|
|
201
|
+
...{
|
|
202
|
+
className: "x3nfvp2 x6s0dn4 xl56j7k xvy4d1p xxk0z11 xx3sua9 x1ypdohk xv9yike xefglzl xx6bhzk x1717udv x2lah0s x1ilzqfv x1cqbx0l"
|
|
203
|
+
},
|
|
204
|
+
onClick: e => {
|
|
205
|
+
e.stopPropagation();
|
|
206
|
+
onToggle();
|
|
207
|
+
},
|
|
208
|
+
"aria-label": ariaLabel,
|
|
209
|
+
"aria-expanded": isExpanded,
|
|
210
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
211
|
+
...{
|
|
212
|
+
0: {
|
|
213
|
+
className: "x3nfvp2 x11xpdln xx6bhzk"
|
|
214
|
+
},
|
|
215
|
+
1: {
|
|
216
|
+
className: "x3nfvp2 x11xpdln xx6bhzk x1iffjtl"
|
|
217
|
+
}
|
|
218
|
+
}[!!isExpanded << 0],
|
|
219
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
220
|
+
icon: "chevronRight",
|
|
221
|
+
size: "xsm"
|
|
222
|
+
})
|
|
223
|
+
})
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// =============================================================================
|
|
228
|
+
// Hook
|
|
229
|
+
// =============================================================================
|
|
230
|
+
|
|
231
|
+
export function useTableRowExpansion(config) {
|
|
232
|
+
const {
|
|
233
|
+
expandedKeys,
|
|
234
|
+
onToggle,
|
|
235
|
+
getRowKey,
|
|
236
|
+
getChildren,
|
|
237
|
+
getDepth,
|
|
238
|
+
getIsItemExpandable,
|
|
239
|
+
hasRowClickExpansion = false,
|
|
240
|
+
isAllExpanded,
|
|
241
|
+
onToggleExpandAll
|
|
242
|
+
} = config;
|
|
243
|
+
|
|
244
|
+
// Track the first non-plugin column key for indentation.
|
|
245
|
+
const firstUserColumnKeyRef = useRef(null);
|
|
246
|
+
const expansionColumn = useMemo(() => ({
|
|
247
|
+
key: '__expansion',
|
|
248
|
+
header: '',
|
|
249
|
+
width: EXPANSION_COLUMN_WIDTH,
|
|
250
|
+
resizable: false,
|
|
251
|
+
renderCell: item => {
|
|
252
|
+
// Child rows (depth > 0) show their chevron inline in the first user
|
|
253
|
+
// column instead — don't double up here.
|
|
254
|
+
const depth = getDepth ? getDepth(item) : 0;
|
|
255
|
+
if (depth > 0) {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
const key = getRowKey(item);
|
|
259
|
+
const expandable = getIsItemExpandable ? getIsItemExpandable(item) : getChildren(item).length > 0;
|
|
260
|
+
if (!expandable) {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
const isExpanded = expandedKeys.has(key);
|
|
264
|
+
return /*#__PURE__*/_jsx(ExpansionChevron, {
|
|
265
|
+
isExpanded: isExpanded,
|
|
266
|
+
onToggle: () => onToggle(key),
|
|
267
|
+
ariaLabel: isExpanded ? 'Collapse row' : 'Expand row'
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}), [expandedKeys, onToggle, getRowKey, getChildren, getIsItemExpandable, getDepth]);
|
|
271
|
+
return useMemo(() => ({
|
|
272
|
+
transformColumns(columns) {
|
|
273
|
+
// Track the first user column for indentation.
|
|
274
|
+
const firstUserCol = columns.find(c => !c.key.startsWith('__'));
|
|
275
|
+
firstUserColumnKeyRef.current = firstUserCol?.key ?? null;
|
|
276
|
+
|
|
277
|
+
// Wrap the first user column's renderCell to add depth indentation +
|
|
278
|
+
// an inline chevron for child rows. This is the inherited-columns
|
|
279
|
+
// pattern: child rows use the same columns but indent their first
|
|
280
|
+
// content cell.
|
|
281
|
+
const wrappedColumns = columns.map(col => {
|
|
282
|
+
if (col.key !== firstUserColumnKeyRef.current) {
|
|
283
|
+
return col;
|
|
284
|
+
}
|
|
285
|
+
const originalRenderCell = col.renderCell;
|
|
286
|
+
return {
|
|
287
|
+
...col,
|
|
288
|
+
renderCell: item => {
|
|
289
|
+
const depth = getDepth ? getDepth(item) : 0;
|
|
290
|
+
const originalContent = originalRenderCell ? originalRenderCell(item) : String(item[col.key] ?? '');
|
|
291
|
+
if (depth === 0) {
|
|
292
|
+
return originalContent;
|
|
293
|
+
}
|
|
294
|
+
const indent = (depth - 1) * INDENT_PER_DEPTH;
|
|
295
|
+
const key = getRowKey(item);
|
|
296
|
+
const isExpanded = expandedKeys.has(key);
|
|
297
|
+
const expandable = getIsItemExpandable ? getIsItemExpandable(item) : getChildren(item).length > 0;
|
|
298
|
+
const chevron = expandable ? /*#__PURE__*/_jsx(ExpansionChevron, {
|
|
299
|
+
isExpanded: isExpanded,
|
|
300
|
+
onToggle: () => onToggle(key),
|
|
301
|
+
ariaLabel: isExpanded ? 'Collapse row' : 'Expand row'
|
|
302
|
+
}) : /*#__PURE__*/_jsx("span", {
|
|
303
|
+
...{
|
|
304
|
+
className: "x1rg5ohu xvy4d1p xxk0z11 x2lah0s"
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
308
|
+
...stylex.props(expansionStyles.indentedCell, indent > 0 && expansionStyles.indent(indent)),
|
|
309
|
+
children: [chevron, originalContent]
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
});
|
|
314
|
+
return [expansionColumn, ...wrappedColumns];
|
|
315
|
+
},
|
|
316
|
+
transformHeaderCell(props, column) {
|
|
317
|
+
if (column.key !== '__expansion') {
|
|
318
|
+
return props;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Show expand-all toggle when the consumer provides the state + callback.
|
|
322
|
+
if (isAllExpanded !== undefined && onToggleExpandAll) {
|
|
323
|
+
const allExpanded = isAllExpanded === true;
|
|
324
|
+
return {
|
|
325
|
+
...props,
|
|
326
|
+
content: /*#__PURE__*/_jsx("button", {
|
|
327
|
+
type: "button",
|
|
328
|
+
...{
|
|
329
|
+
className: "x3nfvp2 x6s0dn4 xl56j7k xvy4d1p xxk0z11 xx3sua9 x1ypdohk xv9yike xefglzl xx6bhzk x1717udv x2lah0s x1ilzqfv x1cqbx0l"
|
|
330
|
+
},
|
|
331
|
+
onClick: () => onToggleExpandAll(!allExpanded),
|
|
332
|
+
"aria-label": allExpanded ? 'Collapse all rows' : 'Expand all rows',
|
|
333
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
334
|
+
...{
|
|
335
|
+
0: {
|
|
336
|
+
className: "x3nfvp2 x11xpdln xx6bhzk"
|
|
337
|
+
},
|
|
338
|
+
1: {
|
|
339
|
+
className: "x3nfvp2 x11xpdln xx6bhzk x1iffjtl"
|
|
340
|
+
}
|
|
341
|
+
}[!!allExpanded << 0],
|
|
342
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
343
|
+
icon: "chevronRight",
|
|
344
|
+
size: "xsm"
|
|
345
|
+
})
|
|
346
|
+
})
|
|
347
|
+
})
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
...props,
|
|
352
|
+
content: null
|
|
353
|
+
};
|
|
354
|
+
},
|
|
355
|
+
transformBodyCell(props, column, item) {
|
|
356
|
+
// Contribute "Expand/Collapse row" context-menu action on every cell
|
|
357
|
+
// so right-clicking anywhere in the row shows the option.
|
|
358
|
+
const expandable = getIsItemExpandable ? getIsItemExpandable(item) : getChildren(item).length > 0;
|
|
359
|
+
if (!expandable) {
|
|
360
|
+
return props;
|
|
361
|
+
}
|
|
362
|
+
const key = getRowKey(item);
|
|
363
|
+
const isExpanded = expandedKeys.has(key);
|
|
364
|
+
return {
|
|
365
|
+
...props,
|
|
366
|
+
contextMenuActions: () => [...resolveContextActions(props.contextMenuActions), {
|
|
367
|
+
id: 'row-expansion-toggle',
|
|
368
|
+
group: 'row-expansion',
|
|
369
|
+
label: isExpanded ? 'Collapse row' : 'Expand row',
|
|
370
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
|
371
|
+
icon: isExpanded ? 'chevronDown' : 'chevronRight',
|
|
372
|
+
size: "xsm",
|
|
373
|
+
"aria-hidden": true
|
|
374
|
+
}),
|
|
375
|
+
onSelect: () => onToggle(key)
|
|
376
|
+
}]
|
|
377
|
+
};
|
|
378
|
+
},
|
|
379
|
+
transformBodyRow(props, item) {
|
|
380
|
+
if (!hasRowClickExpansion) {
|
|
381
|
+
return props;
|
|
382
|
+
}
|
|
383
|
+
const expandable = getIsItemExpandable ? getIsItemExpandable(item) : getChildren(item).length > 0;
|
|
384
|
+
if (!expandable) {
|
|
385
|
+
return props;
|
|
386
|
+
}
|
|
387
|
+
const key = getRowKey(item);
|
|
388
|
+
return {
|
|
389
|
+
...props,
|
|
390
|
+
htmlProps: {
|
|
391
|
+
...props.htmlProps,
|
|
392
|
+
onClick: () => onToggle(key)
|
|
393
|
+
},
|
|
394
|
+
styles: [...props.styles, expansionStyles.clickableRow]
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}), [expandedKeys, getRowKey, onToggle, getChildren, getDepth, getIsItemExpandable, hasRowClickExpansion, isAllExpanded, onToggleExpandAll, expansionColumn]);
|
|
398
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSortable.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTableSortable.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortable.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAC9D,2EAA2E;IAC3E,OAAO,EAAE,QAAQ,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,IACzD,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;AAM7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IACtE,iEAAiE;IACjE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/B;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAEvD;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAmND;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAyF1D"}
|
|
@@ -17,6 +17,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
17
17
|
import "../../../theme/tokens.stylex.js";
|
|
18
18
|
import { colorVars, spacingVars, radiusVars } from "../../../theme/tokens.stylex.js";
|
|
19
19
|
import { Icon } from "../../../Icon/index.js";
|
|
20
|
+
import { resolveContextActions } from "../../tableContextMenu.js";
|
|
20
21
|
|
|
21
22
|
// =============================================================================
|
|
22
23
|
// Sort Types
|
|
@@ -243,10 +244,64 @@ export function useTableSortable(config) {
|
|
|
243
244
|
if (sortKey == null) {
|
|
244
245
|
return props;
|
|
245
246
|
}
|
|
246
|
-
|
|
247
|
-
// Find sort entry for this column
|
|
248
247
|
const cfg = configRef.current;
|
|
249
248
|
const entry = cfg.sort.find(e => e.sortKey === sortKey);
|
|
249
|
+
|
|
250
|
+
// Context-menu actions are built lazily (only when the menu opens) via
|
|
251
|
+
// a getter, reading the current sort state at call time — so we don't
|
|
252
|
+
// build an action array for every header on every render, and the
|
|
253
|
+
// checked/clear state always reflects the latest sort.
|
|
254
|
+
const getSortActions = () => {
|
|
255
|
+
const c = configRef.current;
|
|
256
|
+
const dir = c.sort.find(e => e.sortKey === sortKey)?.direction ?? null;
|
|
257
|
+
const actions = [{
|
|
258
|
+
id: 'sort-asc',
|
|
259
|
+
group: 'sort',
|
|
260
|
+
label: 'Sort ascending',
|
|
261
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
|
262
|
+
icon: "arrowUp",
|
|
263
|
+
size: "xsm",
|
|
264
|
+
"aria-hidden": true
|
|
265
|
+
}),
|
|
266
|
+
checked: dir === 'ascending',
|
|
267
|
+
onSelect: () => c.onSortChange([{
|
|
268
|
+
sortKey: sortKey,
|
|
269
|
+
direction: 'ascending'
|
|
270
|
+
}])
|
|
271
|
+
}, {
|
|
272
|
+
id: 'sort-desc',
|
|
273
|
+
group: 'sort',
|
|
274
|
+
label: 'Sort descending',
|
|
275
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
|
276
|
+
icon: "arrowDown",
|
|
277
|
+
size: "xsm",
|
|
278
|
+
"aria-hidden": true
|
|
279
|
+
}),
|
|
280
|
+
checked: dir === 'descending',
|
|
281
|
+
onSelect: () => c.onSortChange([{
|
|
282
|
+
sortKey: sortKey,
|
|
283
|
+
direction: 'descending'
|
|
284
|
+
}])
|
|
285
|
+
}];
|
|
286
|
+
if (dir != null) {
|
|
287
|
+
actions.push({
|
|
288
|
+
id: 'sort-clear',
|
|
289
|
+
group: 'sort-clear',
|
|
290
|
+
label: 'Clear sort',
|
|
291
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
|
292
|
+
icon: "close",
|
|
293
|
+
size: "xsm",
|
|
294
|
+
"aria-hidden": true
|
|
295
|
+
}),
|
|
296
|
+
onSelect: () => c.onSortChange(c.sort.filter(e => e.sortKey !== sortKey))
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
return actions;
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// Merge with any actions a prior plugin contributed (array or getter),
|
|
303
|
+
// resolving both lazily at open time.
|
|
304
|
+
const priorActions = props.contextMenuActions;
|
|
250
305
|
return {
|
|
251
306
|
...props,
|
|
252
307
|
htmlProps: {
|
|
@@ -259,7 +314,8 @@ export function useTableSortable(config) {
|
|
|
259
314
|
column: column,
|
|
260
315
|
configRef: configRef,
|
|
261
316
|
children: props.content
|
|
262
|
-
})
|
|
317
|
+
}),
|
|
318
|
+
contextMenuActions: () => [...resolveContextActions(priorActions), ...getSortActions()]
|
|
263
319
|
};
|
|
264
320
|
}
|
|
265
321
|
}), []);
|