@astryxdesign/core 0.1.3 → 0.1.4-canary.01e5b29
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 +51 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +20 -18
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -3
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +55 -53
- package/dist/AspectRatio/AspectRatio.js +5 -5
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +27 -25
- package/dist/Avatar/AvatarStatusDot.js +5 -5
- package/dist/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.js +5 -5
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -25
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +47 -26
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +108 -64
- package/dist/Calendar/dayCellUtils.d.ts +67 -5
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/dayCellUtils.js +139 -18
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +2 -2
- package/dist/Card/Card.d.ts +4 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +18 -10
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +20 -19
- package/dist/Center/Center.js +3 -3
- package/dist/Chat/ChatComposer.js +23 -23
- package/dist/Chat/ChatComposerDrawer.js +14 -14
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +27 -15
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +13 -11
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +12 -10
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +14 -12
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +24 -15
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +81 -74
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +6 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +32 -24
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +8 -6
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +32 -9
- package/dist/Code/Code.d.ts +15 -1
- package/dist/Code/Code.d.ts.map +1 -1
- package/dist/Code/Code.js +35 -5
- package/dist/Code/index.d.ts +1 -1
- package/dist/Code/index.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +88 -52
- package/dist/CodeBlock/index.d.ts +1 -1
- package/dist/CodeBlock/index.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.d.ts +9 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +110 -22
- package/dist/Collapsible/CollapsibleGroup.d.ts +39 -7
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +73 -12
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +31 -0
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +33 -3
- package/dist/Collapsible/index.d.ts +1 -0
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +4 -1
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +20 -6
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +36 -34
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +27 -7
- package/dist/CommandPalette/CommandPaletteFooter.js +16 -16
- package/dist/CommandPalette/CommandPaletteGroup.js +5 -5
- package/dist/CommandPalette/CommandPaletteInput.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/CommandPalette/CommandPaletteList.js +3 -3
- package/dist/ContextMenu/ContextMenu.d.ts +9 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +16 -11
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +23 -23
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -7
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +30 -26
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.d.ts +0 -22
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -17
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +4 -3
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +29 -12
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +16 -12
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.js +5 -5
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +55 -31
- package/dist/Lightbox/useLightbox.js +3 -3
- package/dist/Link/Link.js +15 -15
- package/dist/Link/LinkProvider.js +3 -3
- package/dist/Link/useLinkify.js +3 -3
- package/dist/List/List.js +11 -11
- package/dist/List/ListItem.js +11 -11
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +102 -102
- package/dist/Markdown/parser.d.ts +7 -0
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +300 -6
- package/dist/MetadataList/MetadataList.js +10 -10
- package/dist/MetadataList/MetadataListItem.js +15 -15
- package/dist/MobileNav/MobileNav.js +15 -15
- package/dist/MobileNav/MobileNavToggle.js +5 -5
- package/dist/MoreMenu/MoreMenu.js +3 -3
- package/dist/MultiSelector/MultiSelector.d.ts +7 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +64 -55
- package/dist/NavIcon/NavIcon.js +3 -3
- package/dist/NavMenu/NavHeadingMenu.js +5 -5
- package/dist/NavMenu/NavHeadingMenuItem.js +8 -8
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +48 -32
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.js +3 -3
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +125 -72
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +110 -92
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +25 -18
- package/dist/RadioList/RadioList.d.ts +7 -1
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +10 -8
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +30 -22
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +28 -10
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +32 -10
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.d.ts +6 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +54 -45
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +38 -34
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +8 -6
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +18 -16
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.d.ts +6 -0
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +31 -22
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +10 -10
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +13 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +41 -30
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +57 -30
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +51 -39
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +9 -5
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +76 -7
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +9 -5
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +9 -5
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +5 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- 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/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +11 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +8 -4
- package/dist/Table/tableContextMenu.d.ts +5 -1
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +19 -12
- package/dist/Text/Text.d.ts +1 -1
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +14 -13
- package/dist/Text/text.stylex.d.ts +35 -0
- package/dist/Text/text.stylex.d.ts.map +1 -1
- package/dist/Text/text.stylex.js +52 -1
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +3 -2
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +30 -29
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +26 -21
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +37 -26
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -17
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +23 -11
- package/dist/Toast/useToast.js +4 -4
- package/dist/ToggleButton/ToggleButton.js +12 -12
- package/dist/ToggleButton/ToggleButtonGroup.js +5 -5
- package/dist/Token/Token.js +21 -21
- package/dist/Tokenizer/Tokenizer.d.ts +6 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +38 -29
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.js +3 -3
- package/dist/TopNav/TopNav.js +32 -32
- package/dist/TopNav/TopNavHeading.js +67 -67
- package/dist/TopNav/TopNavItem.js +5 -5
- package/dist/TopNav/TopNavMegaMenu.js +30 -30
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +25 -14
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +23 -20
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/astryx.css +23 -0
- package/dist/astryx.umd.js +60 -58
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +13 -1
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +38 -1
- package/dist/hooks/useHotkeys.d.ts +51 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -0
- package/dist/hooks/useHotkeys.js +160 -0
- package/dist/hooks/useInteractiveRole.d.ts +6 -2
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +6 -2
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +3 -1
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +14 -5
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +10 -3
- package/dist/theme/hct.d.ts +0 -15
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +10 -2
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +220 -4
- package/dist/utils/color.d.ts +42 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/color.js +150 -0
- package/dist/utils/composeEventHandlers.d.ts +30 -0
- package/dist/utils/composeEventHandlers.d.ts.map +1 -0
- package/dist/utils/composeEventHandlers.js +40 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +8 -5
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.tsx +2 -0
- package/src/AppShell/AppShell.tsx +2 -0
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -1
- package/src/Avatar/Avatar.doc.mjs +13 -2
- package/src/Avatar/Avatar.test.tsx +32 -1
- package/src/Avatar/Avatar.tsx +12 -20
- package/src/Banner/Banner.doc.mjs +8 -0
- package/src/Banner/Banner.test.tsx +38 -0
- package/src/Banner/Banner.tsx +8 -1
- package/src/Button/Button.tsx +39 -6
- package/src/ButtonGroup/ButtonGroup.doc.mjs +1 -1
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +201 -17
- package/src/Calendar/Calendar.tsx +79 -26
- package/src/Calendar/dayCellUtils.test.ts +306 -1
- package/src/Calendar/dayCellUtils.ts +206 -13
- package/src/Calendar/styles.ts +12 -2
- package/src/Card/Card.doc.mjs +1 -1
- package/src/Card/Card.tsx +16 -6
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +13 -0
- package/src/Carousel/Carousel.tsx +1 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +24 -0
- package/src/Chat/ChatComposerInput.tsx +17 -1
- package/src/Chat/ChatDictationButton.test.tsx +43 -0
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
- package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
- package/src/Chat/ChatMessageMetadata.tsx +4 -6
- package/src/Chat/ChatSystemMessage.test.tsx +26 -11
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +29 -16
- package/src/Chat/ChatTokenizedText.tsx +15 -8
- package/src/Chat/ChatToolCalls.test.tsx +55 -0
- package/src/Chat/ChatToolCalls.tsx +10 -12
- package/src/Chat/index.ts +1 -4
- package/src/Chat/useChatNewMessages.test.tsx +4 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +12 -4
- package/src/CheckboxInput/CheckboxInput.test.tsx +103 -0
- package/src/CheckboxInput/CheckboxInput.tsx +13 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
- package/src/CheckboxList/CheckboxList.test.tsx +19 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/Citation/Citation.doc.mjs +5 -0
- package/src/ClickableCard/ClickableCard.tsx +45 -2
- package/src/Code/Code.test.tsx +54 -0
- package/src/Code/Code.tsx +48 -4
- package/src/Code/index.ts +1 -1
- package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
- package/src/CodeBlock/CodeBlock.test.tsx +122 -3
- package/src/CodeBlock/CodeBlock.tsx +62 -4
- package/src/CodeBlock/index.ts +1 -1
- package/src/Collapsible/Collapsible.doc.mjs +8 -4
- package/src/Collapsible/Collapsible.test.tsx +405 -0
- package/src/Collapsible/Collapsible.tsx +86 -10
- package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
- package/src/Collapsible/CollapsibleGroup.test.tsx +318 -0
- package/src/Collapsible/CollapsibleGroup.tsx +107 -9
- package/src/Collapsible/CollapsibleGroupContext.tsx +42 -2
- package/src/Collapsible/index.ts +4 -0
- package/src/Collapsible/useCollapsible.ts +20 -6
- package/src/CommandPalette/CommandPalette.tsx +5 -3
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
- package/src/CommandPalette/CommandPaletteEmpty.tsx +15 -1
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
- package/src/ContextMenu/ContextMenu.test.tsx +15 -0
- package/src/ContextMenu/ContextMenu.tsx +19 -1
- package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
- package/src/DateInput/DateInput.doc.mjs +6 -1
- package/src/DateInput/DateInput.test.tsx +11 -20
- package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
- package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
- package/src/DateRangeInput/DateRangeInput.tsx +2 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +4 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
- package/src/DateTimeInput/DateTimeInput.tsx +9 -8
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/DialogHeader.doc.mjs +45 -0
- package/src/Divider/Divider.tsx +1 -23
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +5 -3
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/Field/Field.doc.mjs +1 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FieldStatus/FieldStatus.test.tsx +282 -0
- package/src/FileInput/FileInput.doc.mjs +1 -1
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
- package/src/Grid/Grid.doc.mjs +3 -3
- package/src/Grid/Grid.test.tsx +43 -18
- package/src/Grid/Grid.tsx +26 -9
- package/src/Icon/Icon.test.tsx +41 -29
- package/src/Icon/Icon.tsx +6 -2
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
- package/src/Item/Item.tsx +1 -1
- package/src/Layout/Layout.test.tsx +285 -0
- package/src/Layout/LayoutContent.doc.mjs +12 -0
- package/src/Layout/LayoutPanel.doc.mjs +40 -0
- package/src/Layout/LayoutSlots.test.tsx +364 -0
- package/src/Layout/__tests__/edgeCompensation.test.tsx +72 -0
- package/src/Lightbox/Lightbox.doc.mjs +5 -0
- package/src/Lightbox/Lightbox.test.tsx +123 -2
- package/src/Lightbox/Lightbox.tsx +29 -1
- package/src/Markdown/Markdown.test.tsx +23 -0
- package/src/Markdown/Markdown.tsx +9 -7
- package/src/Markdown/incremental.test.ts +36 -0
- package/src/Markdown/parser.perf.test.ts +34 -12
- package/src/Markdown/parser.test.ts +210 -0
- package/src/Markdown/parser.ts +301 -6
- package/src/MobileNav/MobileNav.doc.mjs +20 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +14 -1
- package/src/MultiSelector/MultiSelector.test.tsx +33 -0
- package/src/MultiSelector/MultiSelector.tsx +20 -0
- package/src/NavMenu/NavMenu.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +48 -3
- package/src/NumberInput/NumberInput.tsx +32 -15
- package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
- package/src/OverflowList/OverflowList.test.tsx +416 -0
- package/src/Overlay/Overlay.doc.mjs +6 -0
- package/src/Overlay/Overlay.test.tsx +356 -0
- package/src/Pagination/Pagination.test.tsx +162 -0
- package/src/Pagination/Pagination.tsx +80 -26
- package/src/Popover/Popover.test.tsx +65 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +4 -4
- package/src/PowerSearch/PowerSearch.test.tsx +109 -1
- package/src/PowerSearch/PowerSearch.tsx +37 -16
- package/src/ProgressBar/ProgressBar.test.tsx +30 -0
- package/src/ProgressBar/ProgressBar.tsx +12 -5
- package/src/RadioList/RadioList.doc.mjs +7 -1
- package/src/RadioList/RadioList.test.tsx +65 -0
- package/src/RadioList/RadioList.tsx +10 -1
- package/src/RadioList/RadioListItem.tsx +13 -4
- package/src/Resizable/ResizeHandle.test.tsx +218 -0
- package/src/Resizable/ResizeHandle.tsx +22 -4
- package/src/Section/Section.test.tsx +4 -10
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
- package/src/SegmentedControl/SegmentedControl.tsx +27 -5
- package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +12 -1
- package/src/Selector/Selector.test.tsx +30 -0
- package/src/Selector/Selector.tsx +18 -0
- package/src/SideNav/SideNav.doc.mjs +7 -1
- package/src/SideNav/SideNav.test.tsx +66 -0
- package/src/SideNav/SideNav.tsx +6 -2
- package/src/SideNav/SideNavCollapseButton.tsx +4 -3
- package/src/SideNav/SideNavSection.tsx +6 -4
- package/src/SizeContext/SizeContext.test.tsx +226 -0
- package/src/Slider/Slider.doc.mjs +14 -2
- package/src/Slider/Slider.test.tsx +30 -0
- package/src/Slider/Slider.tsx +20 -0
- package/src/Spinner/Spinner.tsx +1 -0
- package/src/Switch/Switch.doc.mjs +21 -9
- package/src/Switch/Switch.test.tsx +137 -0
- package/src/Switch/Switch.tsx +32 -7
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +185 -1
- package/src/TabList/TabMenu.tsx +45 -9
- package/src/Table/BaseTable.tsx +16 -3
- package/src/Table/Table.test.tsx +87 -0
- package/src/Table/TableBody.tsx +15 -2
- package/src/Table/TableCell.tsx +87 -8
- package/src/Table/TableFooter.tsx +15 -2
- package/src/Table/TableHeader.tsx +15 -2
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
- package/src/Table/plugins/pagination/paginateData.ts +5 -1
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
- 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/selection/useTableSelectionState.test.tsx +23 -0
- package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
- package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
- package/src/Table/tableContextMenu.test.tsx +27 -3
- package/src/Table/tableContextMenu.tsx +20 -2
- package/src/Table/useTablePagination.doc.mjs +4 -1
- package/src/Table/useTableRowExpansion.doc.mjs +80 -0
- package/src/Table/useTableSortable.doc.mjs +4 -1
- package/src/Text/Text.doc.mjs +2 -2
- package/src/Text/Text.test.tsx +11 -0
- package/src/Text/Text.tsx +4 -2
- package/src/Text/text.stylex.ts +41 -0
- package/src/TextArea/TextArea.doc.mjs +1 -1
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.doc.mjs +1 -1
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +36 -2
- package/src/Thumbnail/Thumbnail.tsx +4 -2
- package/src/TimeInput/TimeInput.doc.mjs +11 -6
- package/src/TimeInput/TimeInput.test.tsx +37 -0
- package/src/TimeInput/TimeInput.tsx +11 -1
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +52 -0
- package/src/Timestamp/Timestamp.tsx +30 -16
- package/src/Toast/Toast.tsx +11 -3
- package/src/Toast/ToastViewport.test.tsx +64 -0
- package/src/Toast/ToastViewport.tsx +12 -0
- package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -4
- package/src/Tokenizer/Tokenizer.test.tsx +33 -0
- package/src/Tokenizer/Tokenizer.tsx +19 -0
- package/src/Toolbar/Toolbar.test.tsx +1 -1
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +18 -0
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
- package/src/Typeahead/BaseTypeahead.tsx +5 -2
- package/src/Typeahead/Typeahead.doc.mjs +7 -2
- package/src/Typeahead/Typeahead.test.tsx +45 -1
- package/src/__tests__/TestIcon.tsx +26 -0
- package/src/__tests__/fastRoleQueries.ts +66 -0
- package/src/docPropReferences.test.ts +178 -0
- package/src/docs-types.ts +14 -0
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useFocusTrap.doc.mjs +4 -2
- package/src/hooks/useFocusTrap.test.tsx +149 -1
- package/src/hooks/useFocusTrap.ts +50 -1
- package/src/hooks/useHotkeys.doc.mjs +52 -0
- package/src/hooks/useHotkeys.test.ts +245 -0
- package/src/hooks/useHotkeys.ts +203 -0
- package/src/hooks/useInteractiveRole.ts +12 -4
- package/src/hooks/useKeyboardHint.doc.mjs +6 -6
- package/src/hooks/useStreamingText.test.ts +54 -19
- package/src/hooks/useStreamingText.ts +16 -5
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +4 -13
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +29 -0
- package/src/theme/expandColorScale.ts +11 -6
- package/src/theme/hct.ts +9 -17
- package/src/theme/tokens.test.ts +182 -9
- package/src/theme/tokens.ts +239 -4
- package/src/theme/useTheme.test.tsx +20 -0
- package/src/utils/color.test.ts +133 -0
- package/src/utils/color.ts +148 -0
- package/src/utils/composeEventHandlers.test.ts +71 -0
- package/src/utils/composeEventHandlers.ts +44 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/mergeProps.test.ts +166 -0
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +13 -0
- package/src/utils/timeParser.ts +8 -5
|
@@ -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 { jsxDEV as _jsxDEV } from "react/jsx-dev-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__*/_jsxDEV("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__*/_jsxDEV("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__*/_jsxDEV(Icon, {
|
|
220
|
+
icon: "chevronRight",
|
|
221
|
+
size: "xsm"
|
|
222
|
+
}, void 0, false)
|
|
223
|
+
}, void 0, false)
|
|
224
|
+
}, void 0, false);
|
|
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__*/_jsxDEV(ExpansionChevron, {
|
|
265
|
+
isExpanded: isExpanded,
|
|
266
|
+
onToggle: () => onToggle(key),
|
|
267
|
+
ariaLabel: isExpanded ? 'Collapse row' : 'Expand row'
|
|
268
|
+
}, void 0, false);
|
|
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__*/_jsxDEV(ExpansionChevron, {
|
|
299
|
+
isExpanded: isExpanded,
|
|
300
|
+
onToggle: () => onToggle(key),
|
|
301
|
+
ariaLabel: isExpanded ? 'Collapse row' : 'Expand row'
|
|
302
|
+
}, void 0, false) : /*#__PURE__*/_jsxDEV("span", {
|
|
303
|
+
...{
|
|
304
|
+
className: "x1rg5ohu xvy4d1p xxk0z11 x2lah0s"
|
|
305
|
+
}
|
|
306
|
+
}, void 0, false);
|
|
307
|
+
return /*#__PURE__*/_jsxDEV("div", {
|
|
308
|
+
...stylex.props(expansionStyles.indentedCell, indent > 0 && expansionStyles.indent(indent)),
|
|
309
|
+
children: [chevron, originalContent]
|
|
310
|
+
}, void 0, true);
|
|
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__*/_jsxDEV("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__*/_jsxDEV("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__*/_jsxDEV(Icon, {
|
|
343
|
+
icon: "chevronRight",
|
|
344
|
+
size: "xsm"
|
|
345
|
+
}, void 0, false)
|
|
346
|
+
}, void 0, false)
|
|
347
|
+
}, void 0, false)
|
|
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__*/_jsxDEV(Icon, {
|
|
371
|
+
icon: isExpanded ? 'chevronDown' : 'chevronRight',
|
|
372
|
+
size: "xsm",
|
|
373
|
+
"aria-hidden": true
|
|
374
|
+
}, void 0, false),
|
|
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
|
+
}
|
|
@@ -50,7 +50,7 @@ import { pixel } from "../../columnUtils.js";
|
|
|
50
50
|
* changes independently. Row styling is handled by per-row ref callbacks
|
|
51
51
|
* that subscribe to this store — the store itself holds no DOM references.
|
|
52
52
|
*/
|
|
53
|
-
import {
|
|
53
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
54
54
|
function createSelectionStore(configRef) {
|
|
55
55
|
const listeners = new Set();
|
|
56
56
|
return {
|
|
@@ -108,9 +108,9 @@ function SelectAllCheckbox() {
|
|
|
108
108
|
if (!store) {
|
|
109
109
|
return null;
|
|
110
110
|
}
|
|
111
|
-
return /*#__PURE__*/
|
|
111
|
+
return /*#__PURE__*/_jsxDEV(SelectAllCheckboxInner, {
|
|
112
112
|
store: store
|
|
113
|
-
});
|
|
113
|
+
}, void 0, false);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
@@ -142,7 +142,7 @@ function SelectAllCheckboxInner({
|
|
|
142
142
|
const state = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
|
|
143
143
|
const allSelected = state === SELECT_ALL;
|
|
144
144
|
const indeterminate = state === SELECT_INDETERMINATE;
|
|
145
|
-
return /*#__PURE__*/
|
|
145
|
+
return /*#__PURE__*/_jsxDEV(CheckboxInput, {
|
|
146
146
|
label: "Select all rows",
|
|
147
147
|
isLabelHidden: true,
|
|
148
148
|
value: allSelected ? true : indeterminate ? 'indeterminate' : false,
|
|
@@ -150,7 +150,7 @@ function SelectAllCheckboxInner({
|
|
|
150
150
|
isAllSelected: !allSelected
|
|
151
151
|
}),
|
|
152
152
|
size: "sm"
|
|
153
|
-
});
|
|
153
|
+
}, void 0, false);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/**
|
|
@@ -164,10 +164,10 @@ function SelectionCellContent({
|
|
|
164
164
|
if (!store) {
|
|
165
165
|
return null;
|
|
166
166
|
}
|
|
167
|
-
return /*#__PURE__*/
|
|
167
|
+
return /*#__PURE__*/_jsxDEV(SelectionCellContentInner, {
|
|
168
168
|
store: store,
|
|
169
169
|
item: item
|
|
170
|
-
});
|
|
170
|
+
}, void 0, false);
|
|
171
171
|
}
|
|
172
172
|
function SelectionCellContentInner({
|
|
173
173
|
store,
|
|
@@ -180,7 +180,7 @@ function SelectionCellContentInner({
|
|
|
180
180
|
if (!selectable) {
|
|
181
181
|
return null;
|
|
182
182
|
}
|
|
183
|
-
return /*#__PURE__*/
|
|
183
|
+
return /*#__PURE__*/_jsxDEV(CheckboxInput, {
|
|
184
184
|
label: "Select row",
|
|
185
185
|
isLabelHidden: true,
|
|
186
186
|
value: isSelected,
|
|
@@ -190,7 +190,7 @@ function SelectionCellContentInner({
|
|
|
190
190
|
}),
|
|
191
191
|
isDisabled: !enabled,
|
|
192
192
|
size: "sm"
|
|
193
|
-
});
|
|
193
|
+
}, void 0, false);
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
// =============================================================================
|
|
@@ -228,29 +228,29 @@ export function useTableSelection(config) {
|
|
|
228
228
|
// component so each row's checkbox re-renders independently.
|
|
229
229
|
const selectionColumn = useMemo(() => ({
|
|
230
230
|
key: SELECTION_COLUMN_KEY,
|
|
231
|
-
header: /*#__PURE__*/
|
|
231
|
+
header: /*#__PURE__*/_jsxDEV("div", {
|
|
232
232
|
...{
|
|
233
233
|
className: "x78zum5 x6s0dn4 xl56j7k"
|
|
234
234
|
},
|
|
235
|
-
children: /*#__PURE__*/
|
|
236
|
-
}),
|
|
235
|
+
children: /*#__PURE__*/_jsxDEV(SelectAllCheckbox, {}, void 0, false)
|
|
236
|
+
}, void 0, false),
|
|
237
237
|
width: SELECTION_COLUMN_WIDTH,
|
|
238
238
|
resizable: false,
|
|
239
|
-
renderCell: item => /*#__PURE__*/
|
|
239
|
+
renderCell: item => /*#__PURE__*/_jsxDEV("div", {
|
|
240
240
|
...{
|
|
241
241
|
className: "x78zum5 x6s0dn4 xl56j7k"
|
|
242
242
|
},
|
|
243
|
-
children: /*#__PURE__*/
|
|
243
|
+
children: /*#__PURE__*/_jsxDEV(SelectionCellContent, {
|
|
244
244
|
item: item
|
|
245
|
-
})
|
|
246
|
-
})
|
|
245
|
+
}, void 0, false)
|
|
246
|
+
}, void 0, false)
|
|
247
247
|
}), []);
|
|
248
248
|
return useMemo(() => ({
|
|
249
249
|
transformTableContext(children) {
|
|
250
|
-
return /*#__PURE__*/
|
|
250
|
+
return /*#__PURE__*/_jsxDEV(SelectionStoreContext, {
|
|
251
251
|
value: store,
|
|
252
252
|
children: children
|
|
253
|
-
});
|
|
253
|
+
}, void 0, false);
|
|
254
254
|
},
|
|
255
255
|
transformColumns(columns) {
|
|
256
256
|
return [selectionColumn, ...columns];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSelectionState.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/selection/useTableSelectionState.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAMjE,MAAM,WAAW,4BAA4B,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;;OAGG;IACH,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IAClD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC;;;OAGG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,4BAA4B,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC,iDAAiD;IACjD,eAAe,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;CAC7C;AAQD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC,GACtC,4BAA4B,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useTableSelectionState.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/selection/useTableSelectionState.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAMjE,MAAM,WAAW,4BAA4B,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;;OAGG;IACH,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IAClD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC;;;OAGG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,4BAA4B,CAC3C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC,iDAAiD;IACjD,eAAe,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;CAC7C;AAQD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC,GACtC,4BAA4B,CAAC,CAAC,CAAC,CAiIjC"}
|
|
@@ -60,7 +60,17 @@ export function useTableSelectionState(config) {
|
|
|
60
60
|
// All IDs that *would* be selected if select-all is checked
|
|
61
61
|
// (all actionable items + any frozen selected items)
|
|
62
62
|
const allSelectableIDs = useMemo(() => new Set([...selectedKeys, ...selectableIDs]), [selectedKeys, selectableIDs]);
|
|
63
|
-
const getAllSelected = useCallback(() =>
|
|
63
|
+
const getAllSelected = useCallback(() => {
|
|
64
|
+
// Require at least one actionable row: with zero visible selectable
|
|
65
|
+
// rows (e.g. a filter with no matches while a selection exists), the
|
|
66
|
+
// union-based size comparison would read any non-empty selection as
|
|
67
|
+
// "all selected" — a checked header checkbox over an empty table that
|
|
68
|
+
// deselect-all can't clear, since the invisible keys count as frozen.
|
|
69
|
+
if (selectableIDs.size === 0) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return allSelectableIDs.size === selectedKeys.size;
|
|
73
|
+
}, [allSelectableIDs, selectableIDs, selectedKeys]);
|
|
64
74
|
|
|
65
75
|
// Use refs to keep onSelectAll stable
|
|
66
76
|
const frozenSelectedIDsRef = useRef(frozenSelectedIDs);
|
|
@@ -66,7 +66,7 @@ import { resolveContextActions } from "../../tableContextMenu.js";
|
|
|
66
66
|
* <Table plugins={{ sort: sortPlugin }} columns={columns} data={data} />
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
|
-
import {
|
|
69
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime"; // =============================================================================
|
|
70
70
|
// Styles
|
|
71
71
|
// =============================================================================
|
|
72
72
|
// =============================================================================
|
|
@@ -177,16 +177,16 @@ function SortHeaderButton({
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
};
|
|
180
|
-
return /*#__PURE__*/
|
|
180
|
+
return /*#__PURE__*/_jsxDEV("button", {
|
|
181
181
|
type: "button",
|
|
182
182
|
...{
|
|
183
183
|
className: "x78zum5 x6s0dn4 xzye2dw x1717udv x1ghz6dp x1ypdohk xln7xf2 x1heor9g xh8yej3 x5yr21d x16tdsg8 x1a2a7pz x17nn4n9 x1hl8ikr xx3sua9"
|
|
184
184
|
},
|
|
185
185
|
"aria-label": ariaLabel,
|
|
186
186
|
onClick: handleClick,
|
|
187
|
-
children: [/*#__PURE__*/
|
|
187
|
+
children: [/*#__PURE__*/_jsxDEV("span", {
|
|
188
188
|
children: children
|
|
189
|
-
}), /*#__PURE__*/
|
|
189
|
+
}, void 0, false), /*#__PURE__*/_jsxDEV("span", {
|
|
190
190
|
...{
|
|
191
191
|
0: {
|
|
192
192
|
className: "x3nfvp2 x3onkmb xof6bs x25t5g8"
|
|
@@ -195,19 +195,19 @@ function SortHeaderButton({
|
|
|
195
195
|
className: "x3nfvp2"
|
|
196
196
|
}
|
|
197
197
|
}[!!(direction != null) << 0],
|
|
198
|
-
children: /*#__PURE__*/
|
|
198
|
+
children: /*#__PURE__*/_jsxDEV(Icon, {
|
|
199
199
|
icon: iconName,
|
|
200
200
|
size: "xsm",
|
|
201
201
|
color: direction != null ? 'accent' : 'secondary'
|
|
202
|
-
})
|
|
203
|
-
}), rank != null && /*#__PURE__*/
|
|
202
|
+
}, void 0, false)
|
|
203
|
+
}, void 0, false), rank != null && /*#__PURE__*/_jsxDEV("span", {
|
|
204
204
|
...{
|
|
205
205
|
className: "x1k6wstc xo5v014 xqwr325"
|
|
206
206
|
},
|
|
207
207
|
"aria-hidden": "true",
|
|
208
208
|
children: rank
|
|
209
|
-
})]
|
|
210
|
-
});
|
|
209
|
+
}, void 0, false)]
|
|
210
|
+
}, void 0, true);
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
// =============================================================================
|
|
@@ -258,11 +258,11 @@ export function useTableSortable(config) {
|
|
|
258
258
|
id: 'sort-asc',
|
|
259
259
|
group: 'sort',
|
|
260
260
|
label: 'Sort ascending',
|
|
261
|
-
icon: /*#__PURE__*/
|
|
261
|
+
icon: /*#__PURE__*/_jsxDEV(Icon, {
|
|
262
262
|
icon: "arrowUp",
|
|
263
263
|
size: "xsm",
|
|
264
264
|
"aria-hidden": true
|
|
265
|
-
}),
|
|
265
|
+
}, void 0, false),
|
|
266
266
|
checked: dir === 'ascending',
|
|
267
267
|
onSelect: () => c.onSortChange([{
|
|
268
268
|
sortKey: sortKey,
|
|
@@ -272,11 +272,11 @@ export function useTableSortable(config) {
|
|
|
272
272
|
id: 'sort-desc',
|
|
273
273
|
group: 'sort',
|
|
274
274
|
label: 'Sort descending',
|
|
275
|
-
icon: /*#__PURE__*/
|
|
275
|
+
icon: /*#__PURE__*/_jsxDEV(Icon, {
|
|
276
276
|
icon: "arrowDown",
|
|
277
277
|
size: "xsm",
|
|
278
278
|
"aria-hidden": true
|
|
279
|
-
}),
|
|
279
|
+
}, void 0, false),
|
|
280
280
|
checked: dir === 'descending',
|
|
281
281
|
onSelect: () => c.onSortChange([{
|
|
282
282
|
sortKey: sortKey,
|
|
@@ -288,11 +288,11 @@ export function useTableSortable(config) {
|
|
|
288
288
|
id: 'sort-clear',
|
|
289
289
|
group: 'sort-clear',
|
|
290
290
|
label: 'Clear sort',
|
|
291
|
-
icon: /*#__PURE__*/
|
|
291
|
+
icon: /*#__PURE__*/_jsxDEV(Icon, {
|
|
292
292
|
icon: "close",
|
|
293
293
|
size: "xsm",
|
|
294
294
|
"aria-hidden": true
|
|
295
|
-
}),
|
|
295
|
+
}, void 0, false),
|
|
296
296
|
onSelect: () => c.onSortChange(c.sort.filter(e => e.sortKey !== sortKey))
|
|
297
297
|
});
|
|
298
298
|
}
|
|
@@ -310,11 +310,11 @@ export function useTableSortable(config) {
|
|
|
310
310
|
'aria-sort': entry.direction
|
|
311
311
|
} : {})
|
|
312
312
|
},
|
|
313
|
-
content: /*#__PURE__*/
|
|
313
|
+
content: /*#__PURE__*/_jsxDEV(SortHeaderButton, {
|
|
314
314
|
column: column,
|
|
315
315
|
configRef: configRef,
|
|
316
316
|
children: props.content
|
|
317
|
-
}),
|
|
317
|
+
}, void 0, false),
|
|
318
318
|
contextMenuActions: () => [...resolveContextActions(priorActions), ...getSortActions()]
|
|
319
319
|
};
|
|
320
320
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSortableState.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortableState.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAM5B;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAqB5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC;;;OAGG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV;;;;OAIG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEvC;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAExD;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAMD,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC,8FAA8F;IAC9F,UAAU,EAAE,CAAC,EAAE,CAAC;IAEhB,0BAA0B;IAC1B,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/B,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAE7C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"useTableSortableState.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortableState.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAM5B;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAqB5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC;;;OAGG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV;;;;OAIG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEvC;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAExD;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAMD,MAAM,WAAW,2BAA2B,CAC1C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC,8FAA8F;IAC9F,UAAU,EAAE,CAAC,EAAE,CAAC;IAEhB,0BAA0B;IAC1B,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/B,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAE7C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CAC/B;AA8ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAEhC,MAAM,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC,GAC/C,2BAA2B,CAAC,CAAC,EAAE,QAAQ,CAAC,CAsD1C"}
|
|
@@ -72,14 +72,18 @@ function defaultCompare(a, b, sortKey) {
|
|
|
72
72
|
const aVal = a[sortKey];
|
|
73
73
|
const bVal = b[sortKey];
|
|
74
74
|
|
|
75
|
-
// null/undefined sort to the end
|
|
76
|
-
|
|
75
|
+
// null/undefined/NaN sort to the end. NaN must not reach the numeric fast
|
|
76
|
+
// path: a NaN comparator result reads as "equal" to Array.sort, which makes
|
|
77
|
+
// the comparator inconsistent and corrupts the order of the other rows.
|
|
78
|
+
const aMissing = aVal == null || typeof aVal === 'number' && Number.isNaN(aVal);
|
|
79
|
+
const bMissing = bVal == null || typeof bVal === 'number' && Number.isNaN(bVal);
|
|
80
|
+
if (aMissing && bMissing) {
|
|
77
81
|
return 0;
|
|
78
82
|
}
|
|
79
|
-
if (
|
|
83
|
+
if (aMissing) {
|
|
80
84
|
return 1;
|
|
81
85
|
}
|
|
82
|
-
if (
|
|
86
|
+
if (bMissing) {
|
|
83
87
|
return -1;
|
|
84
88
|
}
|
|
85
89
|
|