@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3
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 +161 -1
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -2
- package/dist/AspectRatio/AspectRatio.d.ts +24 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +23 -4
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +58 -19
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +8 -4
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
- package/dist/Banner/Banner.d.ts +49 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +62 -20
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +17 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +26 -7
- package/dist/Calendar/Calendar.d.ts +7 -3
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -23
- package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
- package/dist/Calendar/getInitialFocusDate.js +62 -0
- package/dist/Calendar/styles.d.ts +5 -14
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -15
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -3
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +3 -3
- package/dist/Chat/ChatMessageList.d.ts +22 -3
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +6 -3
- package/dist/Chat/ChatTokenizedText.d.ts +2 -0
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +11 -6
- package/dist/Chat/useChatComposerTokens.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +10 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +3 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -3
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -2
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +82 -23
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +406 -12
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.d.ts +21 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +110 -58
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +3 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +6 -3
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +19 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +74 -26
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -19
- package/dist/Layer/LayerDepthContext.d.ts +52 -0
- package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
- package/dist/Layer/LayerDepthContext.js +66 -0
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/index.d.ts +3 -0
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +4 -0
- package/dist/Layer/layerStack.d.ts +98 -0
- package/dist/Layer/layerStack.d.ts.map +1 -0
- package/dist/Layer/layerStack.js +306 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +128 -8
- package/dist/Layer/useLayerDismissal.d.ts +93 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
- package/dist/Layer/useLayerDismissal.js +91 -0
- package/dist/Lightbox/Lightbox.d.ts +1 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +103 -81
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/parser.d.ts +38 -1
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +182 -32
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MobileNav/MobileNav.d.ts +6 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +61 -36
- package/dist/MultiSelector/MultiSelector.d.ts +32 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +73 -15
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +9 -5
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +54 -104
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -2
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -2
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +3 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +1 -9
- package/dist/Popover/usePopover.d.ts +7 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +40 -21
- package/dist/PowerSearch/PowerSearch.d.ts +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +19 -6
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +14 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +12 -3
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +91 -18
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +4 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +37 -5
- package/dist/Spinner/Spinner.d.ts +3 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +130 -78
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts +140 -0
- package/dist/Stepper/Step.d.ts.map +1 -0
- package/dist/Stepper/Step.js +1045 -0
- package/dist/Stepper/StepStatus.d.ts +24 -0
- package/dist/Stepper/StepStatus.d.ts.map +1 -0
- package/dist/Stepper/StepStatus.js +1 -0
- package/dist/Stepper/Stepper.d.ts +93 -0
- package/dist/Stepper/Stepper.d.ts.map +1 -0
- package/dist/Stepper/Stepper.js +184 -0
- package/dist/Stepper/StepperContext.d.ts +41 -0
- package/dist/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/Stepper/StepperContext.js +34 -0
- package/dist/Stepper/index.d.ts +8 -0
- package/dist/Stepper/index.d.ts.map +1 -0
- package/dist/Stepper/index.js +7 -0
- package/dist/Stepper/stepper.stylex.d.ts +15 -0
- package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
- package/dist/Stepper/stepper.stylex.js +20 -0
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -3
- package/dist/TabList/Tab.d.ts +15 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +32 -7
- package/dist/TabList/TabList.d.ts +46 -7
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +353 -23
- package/dist/TabList/TabListContext.d.ts +11 -1
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +11 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.d.ts.map +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +10 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/TableRow.d.ts +16 -5
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +16 -5
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +43 -5
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Table/types.d.ts +22 -4
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -0
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +6 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +3 -2
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +15 -21
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +22 -7
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +71 -18
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -9
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +7 -4
- package/dist/Tokenizer/Tokenizer.d.ts +14 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +33 -21
- package/dist/Tooltip/Tooltip.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +5 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +39 -24
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +31 -11
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +22 -7
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +119 -37
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +5 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +113 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -4
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +60 -95
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -18
- package/dist/hooks/useMergedRefs.d.ts +18 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/utils/groupItems.d.ts +5 -1
- package/dist/utils/groupItems.d.ts.map +1 -1
- package/dist/utils/groupItems.js +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +10 -1
- package/dist/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/af-ZA.json +6 -6
- package/locales/ar-SA.json +6 -6
- package/locales/ca-ES.json +5 -5
- package/locales/cs-CZ.json +6 -6
- package/locales/da-DK.json +6 -6
- package/locales/de-DE.json +6 -6
- package/locales/el-GR.json +6 -6
- package/locales/en.json +163 -11
- package/locales/es-ES.json +5 -5
- package/locales/fi-FI.json +6 -6
- package/locales/fr-FR.json +6 -6
- package/locales/he-IL.json +6 -6
- package/locales/hu-HU.json +6 -6
- package/locales/it-IT.json +6 -6
- package/locales/ja-JP.json +6 -6
- package/locales/ko-KR.json +6 -6
- package/locales/nl-NL.json +6 -6
- package/locales/no-NO.json +6 -6
- package/locales/pl-PL.json +6 -6
- package/locales/pseudo.json +114 -0
- package/locales/pt-BR.json +6 -6
- package/locales/pt-PT.json +6 -6
- package/locales/ro-RO.json +6 -6
- package/locales/ru-RU.json +6 -6
- package/locales/sr-SP.json +6 -6
- package/locales/sv-SE.json +6 -6
- package/locales/tr-TR.json +6 -6
- package/locales/uk-UA.json +6 -6
- package/locales/vi-VN.json +6 -6
- package/locales/zh-CN.json +6 -6
- package/locales/zh-TW.json +6 -6
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AppShell/AppShell.tsx +3 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
- package/src/AspectRatio/AspectRatio.test.tsx +57 -10
- package/src/AspectRatio/AspectRatio.tsx +40 -1
- package/src/Avatar/Avatar.doc.mjs +14 -3
- package/src/Avatar/Avatar.test.tsx +97 -0
- package/src/Avatar/Avatar.tsx +125 -52
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +15 -6
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
- package/src/Banner/Banner.doc.mjs +22 -11
- package/src/Banner/Banner.test.tsx +177 -25
- package/src/Banner/Banner.tsx +93 -27
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +17 -4
- package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +24 -1
- package/src/Button/Button.test.tsx +32 -4
- package/src/Button/Button.tsx +12 -5
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +7 -6
- package/src/Calendar/Calendar.test.tsx +143 -0
- package/src/Calendar/Calendar.tsx +30 -26
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.tsx +3 -2
- package/src/Chat/ChatComposerInput.tsx +5 -1
- package/src/Chat/ChatLayout.tsx +3 -2
- package/src/Chat/ChatMessageList.doc.mjs +9 -1
- package/src/Chat/ChatMessageList.test.tsx +46 -0
- package/src/Chat/ChatMessageList.tsx +28 -4
- package/src/Chat/ChatTokenizedText.tsx +17 -10
- package/src/Chat/useChatComposerTokens.ts +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +8 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
- package/src/ComplexSelector/ComplexSelector.tsx +1 -3
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.tsx +55 -2
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +108 -24
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
- package/src/DateRangeInput/DateRangeInput.tsx +4 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
- package/src/DateTimeInput/DateTimeInput.tsx +556 -24
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +429 -2
- package/src/Dialog/Dialog.tsx +133 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
- package/src/Field/Field.doc.mjs +13 -2
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -3
- package/src/HoverCard/HoverCard.doc.mjs +13 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +143 -3
- package/src/HoverCard/useHoverCard.tsx +104 -33
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.tsx +2 -19
- package/src/Layer/LayerDepthContext.tsx +62 -0
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/index.ts +9 -0
- package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
- package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
- package/src/Layer/layerStack.ts +362 -0
- package/src/Layer/useLayer.test.tsx +324 -15
- package/src/Layer/useLayer.tsx +164 -8
- package/src/Layer/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/incremental.test.ts +16 -2
- package/src/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +96 -1
- package/src/Markdown/parser.test.ts +178 -2
- package/src/Markdown/parser.ts +253 -32
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
- package/src/MultiSelector/MultiSelector.test.tsx +311 -0
- package/src/MultiSelector/MultiSelector.tsx +151 -15
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +9 -5
- package/src/NumberInput/NumberInput.doc.mjs +31 -7
- package/src/NumberInput/NumberInput.test.tsx +436 -8
- package/src/NumberInput/NumberInput.tsx +62 -114
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.test.tsx +14 -0
- package/src/Popover/Popover.tsx +1 -9
- package/src/Popover/usePopover.tsx +57 -32
- package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
- package/src/PowerSearch/PowerSearch.test.tsx +240 -1
- package/src/PowerSearch/PowerSearch.tsx +34 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
- package/src/PowerSearch/types.ts +2 -0
- package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
- package/src/PowerSearch/usePowerSearchSource.ts +13 -3
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +346 -1
- package/src/Selector/Selector.tsx +148 -21
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavHeading.tsx +12 -12
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +55 -3
- package/src/Spinner/Spinner.test.tsx +147 -1
- package/src/Spinner/Spinner.tsx +120 -101
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +98 -0
- package/src/Stepper/Step.tsx +1638 -0
- package/src/Stepper/StepStatus.ts +26 -0
- package/src/Stepper/Stepper.doc.mjs +370 -0
- package/src/Stepper/Stepper.test.tsx +1024 -0
- package/src/Stepper/Stepper.tsx +258 -0
- package/src/Stepper/StepperContext.ts +71 -0
- package/src/Stepper/index.ts +18 -0
- package/src/Stepper/stepper.stylex.ts +19 -0
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +6 -2
- package/src/TabList/Tab.doc.mjs +13 -1
- package/src/TabList/Tab.tsx +67 -7
- package/src/TabList/TabList.doc.mjs +22 -6
- package/src/TabList/TabList.test.tsx +559 -0
- package/src/TabList/TabList.tsx +490 -22
- package/src/TabList/TabListContext.ts +13 -2
- package/src/TabList/TabMenu.tsx +3 -2
- package/src/TabList/index.ts +6 -2
- package/src/Table/BaseTable.tsx +12 -4
- package/src/Table/Table.doc.mjs +9 -2
- package/src/Table/Table.test.tsx +132 -14
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +40 -0
- package/src/Table/TableFooter.doc.mjs +40 -0
- package/src/Table/TableHeader.doc.mjs +40 -0
- package/src/Table/TableRow.tsx +16 -5
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
- package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
- package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/types.ts +22 -4
- package/src/Table/useBaseTablePlugins.ts +5 -0
- package/src/Table/useTableGroupedRows.doc.mjs +5 -4
- package/src/Table/useTablePagination.doc.mjs +7 -0
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +31 -0
- package/src/Text/Text.test.tsx +67 -1
- package/src/Text/Text.tsx +6 -3
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +37 -24
- package/src/TextInput/TextInput.doc.mjs +10 -0
- package/src/TextInput/TextInput.tsx +3 -2
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timestamp/Timestamp.test.tsx +58 -0
- package/src/Timestamp/Timestamp.tsx +12 -10
- package/src/Toast/Toast.doc.mjs +26 -12
- package/src/Toast/Toast.tsx +28 -4
- package/src/Toast/ToastViewport.test.tsx +536 -8
- package/src/Toast/ToastViewport.tsx +81 -12
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +15 -10
- package/src/Token/TokenLink.tsx +14 -5
- package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +53 -24
- package/src/Toolbar/Toolbar.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.test.tsx +32 -0
- package/src/Tooltip/Tooltip.tsx +5 -0
- package/src/Tooltip/useTooltip.tsx +47 -24
- package/src/TopNav/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -5
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -7
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
- package/src/Typeahead/BaseTypeahead.tsx +181 -39
- package/src/Typeahead/Typeahead.doc.mjs +11 -0
- package/src/Typeahead/Typeahead.test.tsx +203 -0
- package/src/Typeahead/Typeahead.tsx +12 -2
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useFocusTrap.test.tsx +14 -0
- package/src/hooks/useFocusTrap.ts +62 -111
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.ts +3 -18
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -0
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +1 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/derivedVarRegistry.test.ts +26 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/utils/groupItems.ts +12 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/sharedResizeObserver.ts +10 -2
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
package/src/TabList/index.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
export {TabList} from './TabList';
|
|
15
|
-
export type {TabListProps} from './TabList';
|
|
15
|
+
export type {TabListProps, TabListOverflow} from './TabList';
|
|
16
16
|
|
|
17
17
|
export {Tab} from './Tab';
|
|
18
18
|
export type {TabProps} from './Tab';
|
|
@@ -21,4 +21,8 @@ export {TabMenu} from './TabMenu';
|
|
|
21
21
|
export type {TabMenuProps, TabMenuOption} from './TabMenu';
|
|
22
22
|
|
|
23
23
|
export {useTabListContext} from './TabListContext';
|
|
24
|
-
export type {
|
|
24
|
+
export type {
|
|
25
|
+
TabListSize,
|
|
26
|
+
TabListLayout,
|
|
27
|
+
TabListPattern,
|
|
28
|
+
} from './TabListContext';
|
package/src/Table/BaseTable.tsx
CHANGED
|
@@ -183,9 +183,12 @@ function TableRowInner<T extends Record<string, unknown>>({
|
|
|
183
183
|
);
|
|
184
184
|
|
|
185
185
|
const isDefaultRenderer = !col.renderCell;
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
let rawContent: ReactNode = null;
|
|
187
|
+
if (!cellRenderProps.isContentSuppressed) {
|
|
188
|
+
rawContent = isDefaultRenderer
|
|
189
|
+
? defaultCellRenderer(item, col.key)
|
|
190
|
+
: (col.renderCell?.(item) ?? null);
|
|
191
|
+
}
|
|
189
192
|
|
|
190
193
|
// In truncate mode, wrap default-rendered string content in
|
|
191
194
|
// <Text maxLines={1}> for smart tooltips that only appear
|
|
@@ -525,7 +528,12 @@ function BaseTableInner<T extends Record<string, unknown>>({
|
|
|
525
528
|
{...(ariaRowCount != null ? {'aria-rowcount': ariaRowCount} : null)}
|
|
526
529
|
{...tableRenderProps.htmlProps}
|
|
527
530
|
{...mergeProps(
|
|
528
|
-
themeProps('
|
|
531
|
+
themeProps('table', undefined, {
|
|
532
|
+
// `base-table` was a second root on the same <table> element that
|
|
533
|
+
// `table` names; themes styling it keep working until the next
|
|
534
|
+
// major.
|
|
535
|
+
legacyNames: ['base-table'],
|
|
536
|
+
}),
|
|
529
537
|
stylex.props(...tableRenderProps.xstyle, xstyle),
|
|
530
538
|
[tableRenderProps.htmlProps.className, className]
|
|
531
539
|
.filter(Boolean)
|
package/src/Table/Table.doc.mjs
CHANGED
|
@@ -24,7 +24,6 @@ export const docs = {
|
|
|
24
24
|
},
|
|
25
25
|
theming: {
|
|
26
26
|
targets: [
|
|
27
|
-
{className: 'astryx-base-table'},
|
|
28
27
|
{className: 'astryx-table'},
|
|
29
28
|
{className: 'astryx-table-scroll-wrapper'},
|
|
30
29
|
{className: 'astryx-table-header'},
|
|
@@ -33,6 +32,9 @@ export const docs = {
|
|
|
33
32
|
{className: 'astryx-table-row'},
|
|
34
33
|
{className: 'astryx-table-cell', visualProps: ['density']},
|
|
35
34
|
{className: 'astryx-table-header-cell', visualProps: ['density']},
|
|
35
|
+
// Still emitted beside the names above, so themes written against
|
|
36
|
+
// them keep working. Drop in the next major.
|
|
37
|
+
{className: 'astryx-base-table', deprecatedFor: 'table'},
|
|
36
38
|
],
|
|
37
39
|
},
|
|
38
40
|
description: 'Styled, data-driven table with density, dividers, hover highlight, striped rows, and named plugin support. T must extend Record<string, unknown>.',
|
|
@@ -107,7 +109,7 @@ export const docs = {
|
|
|
107
109
|
{
|
|
108
110
|
name: 'children',
|
|
109
111
|
type: 'ReactNode',
|
|
110
|
-
description: 'Children mode:
|
|
112
|
+
description: 'Children mode: compose the table yourself from TableHeader / TableBody / TableFooter, each holding TableRow and TableCell, instead of using data-driven rendering. The children are passed straight to the <table>, so the section is yours to supply. A TableRow placed directly in Table emits <table><tr>, which is invalid HTML and mismatches on hydration (the parser inserts an implied <tbody> for server-rendered markup; React does not on the client). Data-driven mode renders the sections for you.',
|
|
111
113
|
},
|
|
112
114
|
{
|
|
113
115
|
name: 'xstyle',
|
|
@@ -116,6 +118,9 @@ export const docs = {
|
|
|
116
118
|
},
|
|
117
119
|
],
|
|
118
120
|
components: [
|
|
121
|
+
{name: 'TableHeader'},
|
|
122
|
+
{name: 'TableBody'},
|
|
123
|
+
{name: 'TableFooter'},
|
|
119
124
|
{name: 'TableRow'},
|
|
120
125
|
{name: 'TableCell'},
|
|
121
126
|
{name: 'TableHeaderCell'},
|
|
@@ -135,6 +140,7 @@ export const docs = {
|
|
|
135
140
|
bestPractices: [
|
|
136
141
|
{ guidance: true, description: 'Use density and divider variants to match the information density and scanning needs of your data.' },
|
|
137
142
|
{ guidance: true, description: 'Compose rich cell content with Astryx components like Badge, StatusDot, and Avatar via renderCell.' },
|
|
143
|
+
{ guidance: true, description: 'In children mode, put every row inside TableHeader, TableBody, or TableFooter. <table> cannot contain a <tr> directly: the HTML parser inserts an implied <tbody> for server-rendered markup and React does not on the client, so unwrapped rows mismatch on hydration.' },
|
|
138
144
|
{ guidance: true, description: 'Set explicit width on every column using proportional() or pixel(). proportional(1) gives equal flex distribution with a 120px minimum that prevents columns from collapsing on narrow viewports. Omitting width skips the minimum.' },
|
|
139
145
|
{ guidance: true, description: 'Use the data-driven API from React Server Components: proportional(), pixel(), and column definitions without function props are server-safe. Columns using renderCell (or any function prop) need the table wrapped in a "use client" component, since functions cannot cross the server-client boundary.' },
|
|
140
146
|
{ guidance: false, description: 'Use a table for data without consistent columns. Use a list or card layout for heterogeneous content.' },
|
|
@@ -183,6 +189,7 @@ export const docsDense = {
|
|
|
183
189
|
bestPractices: [
|
|
184
190
|
{ guidance: true, description: 'Use density and divider variants to match the information density and scanning needs of your data.' },
|
|
185
191
|
{ guidance: true, description: 'Compose rich cell content with Astryx components like Badge, StatusDot, and Avatar via renderCell.' },
|
|
192
|
+
{ guidance: true, description: 'Children mode: wrap rows in TableHeader/TableBody/TableFooter. <table> cannot hold a <tr> directly; the parser adds an implied <tbody> for SSR markup, React does not on the client, so unwrapped rows mismatch on hydration.' },
|
|
186
193
|
{ guidance: true, description: 'Set explicit width on every column via proportional() or pixel(). proportional(1) = equal flex w/ 120px min preventing collapse on narrow viewports. Omitting width skips the minimum.' },
|
|
187
194
|
{ guidance: true, description: 'Data-driven API is RSC-safe: proportional(), pixel(), column defs w/o function props work in Server Components. renderCell (any function prop) requires a "use client" wrapper.' },
|
|
188
195
|
{ guidance: false, description: 'Use a table for data without consistent columns. Use a list or card layout for heterogeneous content.' },
|
package/src/Table/Table.test.tsx
CHANGED
|
@@ -369,9 +369,11 @@ describe('BaseTable', () => {
|
|
|
369
369
|
it('renders children mode instead of data', () => {
|
|
370
370
|
render(
|
|
371
371
|
<BaseTable>
|
|
372
|
-
<
|
|
373
|
-
<
|
|
374
|
-
|
|
372
|
+
<tbody>
|
|
373
|
+
<tr>
|
|
374
|
+
<td>Manual cell</td>
|
|
375
|
+
</tr>
|
|
376
|
+
</tbody>
|
|
375
377
|
</BaseTable>,
|
|
376
378
|
);
|
|
377
379
|
expect(screen.getByText('Manual cell')).toBeInTheDocument();
|
|
@@ -380,9 +382,11 @@ describe('BaseTable', () => {
|
|
|
380
382
|
it('does not render thead in children mode without columns', () => {
|
|
381
383
|
const {container} = render(
|
|
382
384
|
<BaseTable>
|
|
383
|
-
<
|
|
384
|
-
<
|
|
385
|
-
|
|
385
|
+
<tbody>
|
|
386
|
+
<tr>
|
|
387
|
+
<td>Content</td>
|
|
388
|
+
</tr>
|
|
389
|
+
</tbody>
|
|
386
390
|
</BaseTable>,
|
|
387
391
|
);
|
|
388
392
|
expect(container.querySelector('thead')).toBeNull();
|
|
@@ -602,6 +606,41 @@ describe('BaseTable', () => {
|
|
|
602
606
|
expect(calls[0]).toEqual({col: 'name', name: 'Alice'});
|
|
603
607
|
});
|
|
604
608
|
|
|
609
|
+
it('isContentSuppressed renders an empty cell and never calls the column renderer', () => {
|
|
610
|
+
const rendered: string[] = [];
|
|
611
|
+
const withRenderer: TableColumn<User>[] = [
|
|
612
|
+
{
|
|
613
|
+
key: 'name',
|
|
614
|
+
header: 'Name',
|
|
615
|
+
renderCell: item => {
|
|
616
|
+
rendered.push(item.name);
|
|
617
|
+
return <b>{item.name}</b>;
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
];
|
|
621
|
+
const plugin: TablePlugin<User> = {
|
|
622
|
+
transformBodyCell: (props, _column, item) =>
|
|
623
|
+
item.name === 'Bob' ? {...props, isContentSuppressed: true} : props,
|
|
624
|
+
};
|
|
625
|
+
render(
|
|
626
|
+
<BaseTable data={users} columns={withRenderer} plugins={[plugin]} />,
|
|
627
|
+
);
|
|
628
|
+
expect(rendered).toEqual(['Alice', 'Charlie']);
|
|
629
|
+
const cells = screen.getAllByRole('cell');
|
|
630
|
+
expect(cells[1]).toBeEmptyDOMElement();
|
|
631
|
+
expect(cells[0]).toHaveTextContent('Alice');
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
it('isContentSuppressed also suppresses the default renderer', () => {
|
|
635
|
+
const plugin: TablePlugin<User> = {
|
|
636
|
+
transformBodyCell: props => ({...props, isContentSuppressed: true}),
|
|
637
|
+
};
|
|
638
|
+
render(<BaseTable data={users} columns={columns} plugins={[plugin]} />);
|
|
639
|
+
for (const cell of screen.getAllByRole('cell')) {
|
|
640
|
+
expect(cell).toBeEmptyDOMElement();
|
|
641
|
+
}
|
|
642
|
+
});
|
|
643
|
+
|
|
605
644
|
it('composes multiple plugins sequentially', () => {
|
|
606
645
|
const plugin1: TablePlugin<User> = {
|
|
607
646
|
transformTable: props => ({
|
|
@@ -988,14 +1027,16 @@ describe('Table', () => {
|
|
|
988
1027
|
it('renders children mode with TableRow and TableCell', () => {
|
|
989
1028
|
render(
|
|
990
1029
|
<Table density="balanced" dividers="rows">
|
|
991
|
-
<
|
|
992
|
-
<
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
<
|
|
997
|
-
|
|
998
|
-
|
|
1030
|
+
<TableBody>
|
|
1031
|
+
<TableRow>
|
|
1032
|
+
<TableCell>Streamed A</TableCell>
|
|
1033
|
+
<TableCell>Streamed B</TableCell>
|
|
1034
|
+
</TableRow>
|
|
1035
|
+
<TableRow>
|
|
1036
|
+
<TableCell>Streamed C</TableCell>
|
|
1037
|
+
<TableCell>Streamed D</TableCell>
|
|
1038
|
+
</TableRow>
|
|
1039
|
+
</TableBody>
|
|
999
1040
|
</Table>,
|
|
1000
1041
|
);
|
|
1001
1042
|
expect(screen.getByText('Streamed A')).toBeInTheDocument();
|
|
@@ -1004,6 +1045,83 @@ describe('Table', () => {
|
|
|
1004
1045
|
expect(screen.getAllByRole('cell')).toHaveLength(4);
|
|
1005
1046
|
});
|
|
1006
1047
|
|
|
1048
|
+
// Children mode hands the children straight to <table> — it does not wrap
|
|
1049
|
+
// them the way the data-driven path does. That is deliberate (it is what
|
|
1050
|
+
// makes the section components composable), but it was never written down,
|
|
1051
|
+
// and a caller who skipped the section shipped `<table><tr>` (#5277).
|
|
1052
|
+
it("children mode renders no tbody of its own — the section is the caller's", () => {
|
|
1053
|
+
const {container} = render(
|
|
1054
|
+
<Table density="balanced">
|
|
1055
|
+
{/* The unwrapped shape is the subject of this test, not a mistake. */}
|
|
1056
|
+
{/* eslint-disable-next-line @astryx/require-table-section */}
|
|
1057
|
+
<TableRow>
|
|
1058
|
+
<TableCell>Unwrapped</TableCell>
|
|
1059
|
+
</TableRow>
|
|
1060
|
+
</Table>,
|
|
1061
|
+
);
|
|
1062
|
+
const table = container.querySelector('table');
|
|
1063
|
+
expect(table?.querySelector('tbody')).toBeNull();
|
|
1064
|
+
expect(Array.from(table?.children ?? []).map(el => el.tagName)).toContain(
|
|
1065
|
+
'TR',
|
|
1066
|
+
);
|
|
1067
|
+
});
|
|
1068
|
+
|
|
1069
|
+
// Columns do not bring a thead with them in children mode — BaseTable's
|
|
1070
|
+
// `children ? children : <>...</>` short-circuits the whole data-driven
|
|
1071
|
+
// branch, header included. The header is TableHeader's job here.
|
|
1072
|
+
it('children mode renders no thead even when columns are supplied', () => {
|
|
1073
|
+
const {container} = render(
|
|
1074
|
+
<Table columns={columns}>
|
|
1075
|
+
<TableBody>
|
|
1076
|
+
<TableRow>
|
|
1077
|
+
<TableCell>Only body</TableCell>
|
|
1078
|
+
</TableRow>
|
|
1079
|
+
</TableBody>
|
|
1080
|
+
</Table>,
|
|
1081
|
+
);
|
|
1082
|
+
expect(container.querySelector('thead')).toBeNull();
|
|
1083
|
+
expect(container.querySelector('tbody > tr')).not.toBeNull();
|
|
1084
|
+
});
|
|
1085
|
+
|
|
1086
|
+
it('children mode renders the thead TableHeader supplies', () => {
|
|
1087
|
+
const {container} = render(
|
|
1088
|
+
<Table columns={columns}>
|
|
1089
|
+
<TableHeader>
|
|
1090
|
+
<TableRow isHeaderRow>
|
|
1091
|
+
<TableCell>H</TableCell>
|
|
1092
|
+
</TableRow>
|
|
1093
|
+
</TableHeader>
|
|
1094
|
+
<TableBody>
|
|
1095
|
+
<TableRow>
|
|
1096
|
+
<TableCell>B</TableCell>
|
|
1097
|
+
</TableRow>
|
|
1098
|
+
</TableBody>
|
|
1099
|
+
</Table>,
|
|
1100
|
+
);
|
|
1101
|
+
const table = container.querySelector('table');
|
|
1102
|
+
expect(Array.from(table?.children ?? []).map(el => el.tagName)).toEqual([
|
|
1103
|
+
'THEAD',
|
|
1104
|
+
'TBODY',
|
|
1105
|
+
]);
|
|
1106
|
+
});
|
|
1107
|
+
|
|
1108
|
+
it('children mode puts the rows in the tbody TableBody renders', () => {
|
|
1109
|
+
const {container} = render(
|
|
1110
|
+
<Table density="balanced">
|
|
1111
|
+
<TableBody>
|
|
1112
|
+
<TableRow>
|
|
1113
|
+
<TableCell>Wrapped</TableCell>
|
|
1114
|
+
</TableRow>
|
|
1115
|
+
</TableBody>
|
|
1116
|
+
</Table>,
|
|
1117
|
+
);
|
|
1118
|
+
const table = container.querySelector('table');
|
|
1119
|
+
expect(
|
|
1120
|
+
Array.from(table?.children ?? []).map(el => el.tagName),
|
|
1121
|
+
).not.toContain('TR');
|
|
1122
|
+
expect(table?.querySelector('tbody > tr')).not.toBeNull();
|
|
1123
|
+
});
|
|
1124
|
+
|
|
1007
1125
|
it('passes through idKey string to base table', () => {
|
|
1008
1126
|
render(<Table data={users} columns={columns} idKey="email" />);
|
|
1009
1127
|
expect(screen.getAllByRole('row')).toHaveLength(4);
|
package/src/Table/Table.tsx
CHANGED
|
@@ -186,16 +186,11 @@ function buildTableStylePlugin<
|
|
|
186
186
|
>(): TablePlugin<T> {
|
|
187
187
|
return {
|
|
188
188
|
transformTable(props: TableRenderProps): TableRenderProps {
|
|
189
|
-
|
|
190
|
-
|
|
189
|
+
// The `astryx-table` class itself comes from BaseTable, which renders
|
|
190
|
+
// the <table> element and now names it `table` (with `base-table` as its
|
|
191
|
+
// legacy name). Adding it here too would put the token on twice.
|
|
191
192
|
return {
|
|
192
193
|
...props,
|
|
193
|
-
htmlProps: {
|
|
194
|
-
...props.htmlProps,
|
|
195
|
-
className: existingClass
|
|
196
|
-
? `${existingClass} ${tableClass}`
|
|
197
|
-
: tableClass,
|
|
198
|
-
},
|
|
199
194
|
xstyle: [...props.xstyle, tableStyles.base],
|
|
200
195
|
};
|
|
201
196
|
},
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
4
|
+
|
|
5
|
+
export const docs = {
|
|
6
|
+
name: 'TableBody',
|
|
7
|
+
subComponentOf: 'Table',
|
|
8
|
+
displayName: 'Table Body',
|
|
9
|
+
isHiddenFromOverview: true,
|
|
10
|
+
description:
|
|
11
|
+
'<tbody> wrapper for children mode. Holds the data rows. A row must sit inside a section: <table> cannot contain a <tr> directly, because the HTML parser inserts an implied <tbody> when it parses server-rendered markup and React does not when it renders on the client, so rows written straight into Table mismatch on hydration. The data-driven data={...} mode renders this element itself; in children mode it is yours to supply.',
|
|
12
|
+
props: [
|
|
13
|
+
{
|
|
14
|
+
name: 'children',
|
|
15
|
+
type: 'ReactNode',
|
|
16
|
+
description: 'The <tbody> rows.',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'xstyle',
|
|
21
|
+
type: 'StyleXStyles',
|
|
22
|
+
description:
|
|
23
|
+
'StyleX styles for layout customization. Must be a stylex.create() value: not an inline style object like style={{}}.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
theming: {
|
|
27
|
+
targets: [{className: 'astryx-table-body'}],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const docsDense = {
|
|
32
|
+
name: 'TableBody',
|
|
33
|
+
isHiddenFromOverview: true,
|
|
34
|
+
displayName: 'Table Body',
|
|
35
|
+
description: '<tbody> wrapper for children mode; holds the data rows; children mode does not add one for you',
|
|
36
|
+
propDescriptions: {
|
|
37
|
+
children: 'The <tbody> rows.',
|
|
38
|
+
xstyle: 'StyleX styles for layout customization',
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
4
|
+
|
|
5
|
+
export const docs = {
|
|
6
|
+
name: 'TableFooter',
|
|
7
|
+
subComponentOf: 'Table',
|
|
8
|
+
displayName: 'Table Footer',
|
|
9
|
+
isHiddenFromOverview: true,
|
|
10
|
+
description:
|
|
11
|
+
'<tfoot> wrapper for children mode. Holds summary or total rows beneath the body. A row must sit inside a section: <table> cannot contain a <tr> directly, because the HTML parser inserts an implied <tbody> when it parses server-rendered markup and React does not when it renders on the client, so the two trees mismatch on hydration. Children mode only: the data-driven data={...} path renders a header and a body, never a footer.',
|
|
12
|
+
props: [
|
|
13
|
+
{
|
|
14
|
+
name: 'children',
|
|
15
|
+
type: 'ReactNode',
|
|
16
|
+
description: 'The <tfoot> rows.',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'xstyle',
|
|
21
|
+
type: 'StyleXStyles',
|
|
22
|
+
description:
|
|
23
|
+
'StyleX styles for layout customization. Must be a stylex.create() value: not an inline style object like style={{}}.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
theming: {
|
|
27
|
+
targets: [{className: 'astryx-table-footer'}],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const docsDense = {
|
|
32
|
+
name: 'TableFooter',
|
|
33
|
+
isHiddenFromOverview: true,
|
|
34
|
+
displayName: 'Table Footer',
|
|
35
|
+
description: '<tfoot> wrapper for children mode; holds summary rows',
|
|
36
|
+
propDescriptions: {
|
|
37
|
+
children: 'The <tfoot> rows.',
|
|
38
|
+
xstyle: 'StyleX styles for layout customization',
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').ComponentDoc} */
|
|
4
|
+
|
|
5
|
+
export const docs = {
|
|
6
|
+
name: 'TableHeader',
|
|
7
|
+
subComponentOf: 'Table',
|
|
8
|
+
displayName: 'Table Header',
|
|
9
|
+
isHiddenFromOverview: true,
|
|
10
|
+
description:
|
|
11
|
+
'<thead> wrapper for children mode. Holds the header row, whose cells are TableHeaderCell. A row must sit inside a section: <table> cannot contain a <tr> directly, because the HTML parser inserts an implied <tbody> when it parses server-rendered markup and React does not when it renders on the client, so the two trees mismatch on hydration. The data-driven data={...} mode renders this element itself whenever columns are supplied; in children mode it is yours to supply.',
|
|
12
|
+
props: [
|
|
13
|
+
{
|
|
14
|
+
name: 'children',
|
|
15
|
+
type: 'ReactNode',
|
|
16
|
+
description: 'The <thead> rows.',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'xstyle',
|
|
21
|
+
type: 'StyleXStyles',
|
|
22
|
+
description:
|
|
23
|
+
'StyleX styles for layout customization. Must be a stylex.create() value: not an inline style object like style={{}}.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
theming: {
|
|
27
|
+
targets: [{className: 'astryx-table-header'}],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const docsDense = {
|
|
32
|
+
name: 'TableHeader',
|
|
33
|
+
isHiddenFromOverview: true,
|
|
34
|
+
displayName: 'Table Header',
|
|
35
|
+
description: '<thead> wrapper for children mode; holds the header row',
|
|
36
|
+
propDescriptions: {
|
|
37
|
+
children: 'The <thead> rows.',
|
|
38
|
+
xstyle: 'StyleX styles for layout customization',
|
|
39
|
+
},
|
|
40
|
+
};
|
package/src/Table/TableRow.tsx
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* @file TableRow.tsx
|
|
7
7
|
* @input React, StyleX, TableContext, theme tokens
|
|
8
8
|
* @output Exports TableRow component, TableRowProps
|
|
9
|
-
* @position Sub-component; used inside Table
|
|
9
|
+
* @position Sub-component; used inside a Table section (TableHeader /
|
|
10
|
+
* TableBody / TableFooter) in children mode
|
|
10
11
|
*
|
|
11
12
|
* SYNC: When modified, update:
|
|
12
13
|
* - /packages/core/src/Table/Table.doc.mjs
|
|
@@ -105,13 +106,23 @@ const stripedHoverRowStyles = stylex.create({
|
|
|
105
106
|
* When used inside `<Table>`, inherits styling from the table context
|
|
106
107
|
* (striped, hover, divider overrides). When used standalone, renders a plain `<tr>`.
|
|
107
108
|
*
|
|
109
|
+
* Rows go inside a section — `<TableBody>`, `<TableHeader>`, or
|
|
110
|
+
* `<TableFooter>`. `<table>` cannot contain a `<tr>` directly: the HTML parser
|
|
111
|
+
* inserts an implied `<tbody>` when it parses server-rendered markup and React
|
|
112
|
+
* does not when it renders on the client, so the two trees mismatch on
|
|
113
|
+
* hydration. Children mode passes children straight through, so the section is
|
|
114
|
+
* the caller's to supply — the data-driven `data={...}` mode renders it for
|
|
115
|
+
* you.
|
|
116
|
+
*
|
|
108
117
|
* @example
|
|
109
118
|
* ```
|
|
110
119
|
* <Table>
|
|
111
|
-
* <
|
|
112
|
-
* <
|
|
113
|
-
*
|
|
114
|
-
*
|
|
120
|
+
* <TableBody>
|
|
121
|
+
* <TableRow>
|
|
122
|
+
* <TableCell>Alice</TableCell>
|
|
123
|
+
* <TableCell>30</TableCell>
|
|
124
|
+
* </TableRow>
|
|
125
|
+
* </TableBody>
|
|
115
126
|
* </Table>
|
|
116
127
|
* ```
|
|
117
128
|
*/
|
|
@@ -142,12 +142,15 @@ function FilterTable({
|
|
|
142
142
|
});
|
|
143
143
|
|
|
144
144
|
return (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
145
|
+
<>
|
|
146
|
+
<Table
|
|
147
|
+
data={testData}
|
|
148
|
+
columns={columns}
|
|
149
|
+
idKey="id"
|
|
150
|
+
plugins={{filter: filterPlugin}}
|
|
151
|
+
/>
|
|
152
|
+
<output data-testid="filters">{JSON.stringify(filters)}</output>
|
|
153
|
+
</>
|
|
151
154
|
);
|
|
152
155
|
}
|
|
153
156
|
|
|
@@ -210,6 +213,41 @@ describe('useTableFiltering', () => {
|
|
|
210
213
|
await user.type(textInputs[0], 'Alice');
|
|
211
214
|
expect(textInputs[0]).toHaveValue('Alice');
|
|
212
215
|
});
|
|
216
|
+
|
|
217
|
+
it('updates a number filter while typing', async () => {
|
|
218
|
+
const user = userEvent.setup();
|
|
219
|
+
render(<FilterTable variant="inline" />);
|
|
220
|
+
const input = screen.getByRole('spinbutton', {name: 'Filter Age'});
|
|
221
|
+
|
|
222
|
+
await user.type(input, '30');
|
|
223
|
+
|
|
224
|
+
expect(screen.getByTestId('filters')).toHaveTextContent('{"age":30}');
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('restores the pre-edit number filter when an invalid draft blurs', async () => {
|
|
228
|
+
const user = userEvent.setup();
|
|
229
|
+
render(<FilterTable variant="inline" />);
|
|
230
|
+
const input = screen.getByRole('spinbutton', {name: 'Filter Age'});
|
|
231
|
+
|
|
232
|
+
await user.type(input, '3·');
|
|
233
|
+
expect(screen.getByTestId('filters')).toHaveTextContent('{"age":3}');
|
|
234
|
+
await user.tab();
|
|
235
|
+
|
|
236
|
+
expect(screen.getByTestId('filters')).toHaveTextContent('{}');
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('restores the pre-edit number filter when Enter rejects a draft', async () => {
|
|
240
|
+
const user = userEvent.setup();
|
|
241
|
+
render(<FilterTable variant="inline" />);
|
|
242
|
+
const input = screen.getByRole('spinbutton', {name: 'Filter Age'});
|
|
243
|
+
|
|
244
|
+
await user.type(input, '3·');
|
|
245
|
+
await user.keyboard('{Enter}');
|
|
246
|
+
|
|
247
|
+
expect(input).toHaveValue('3·');
|
|
248
|
+
expect(input).toHaveAttribute('aria-invalid', 'true');
|
|
249
|
+
expect(screen.getByTestId('filters')).toHaveTextContent('{}');
|
|
250
|
+
});
|
|
213
251
|
});
|
|
214
252
|
|
|
215
253
|
describe('field reference forms', () => {
|