@astryxdesign/core 0.1.4-canary.fd7ab46 → 0.1.4
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/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +18 -20
- 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 +53 -55
- package/dist/AspectRatio/AspectRatio.d.ts +10 -48
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +12 -33
- package/dist/AspectRatio/index.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +25 -27
- 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 +25 -32
- 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.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +48 -68
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- 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 +2 -4
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +10 -18
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +21 -24
- package/dist/Carousel/carousel.markers.stylex.d.ts +7 -0
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +1 -0
- package/dist/Carousel/carousel.markers.stylex.js +12 -0
- 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 +1 -1
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +15 -27
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +11 -13
- 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 +10 -12
- 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 +12 -14
- 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 +15 -24
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +74 -81
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -15
- package/dist/CheckboxInput/CheckboxInput.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +23 -25
- 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 +6 -8
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +9 -32
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +1 -10
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +52 -88
- package/dist/Collapsible/Collapsible.d.ts +3 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +22 -110
- package/dist/Collapsible/CollapsibleGroup.d.ts +7 -39
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +12 -73
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +0 -31
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +3 -33
- package/dist/Collapsible/index.d.ts +0 -1
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +1 -4
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +6 -20
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +34 -36
- package/dist/CommandPalette/CommandPaletteEmpty.js +3 -3
- 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 +2 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +43 -76
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +2 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +26 -30
- 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.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +17 -2
- 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 +3 -4
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +12 -29
- 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.d.ts +1 -5
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +12 -16
- 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.d.ts +2 -29
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +31 -44
- 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 +31 -55
- 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/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.js +56 -56
- 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 +32 -48
- 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 +72 -125
- 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 +92 -110
- 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 +18 -25
- package/dist/RadioList/RadioList.js +7 -7
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +21 -24
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +10 -28
- 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 +10 -32
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +12 -18
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +34 -38
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +6 -8
- 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 +16 -18
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +4 -8
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +29 -34
- 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 +30 -57
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +39 -50
- 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 +5 -9
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts.map +1 -1
- package/dist/Table/TableFooter.js +5 -9
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +5 -9
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -14
- 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 +1 -5
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +22 -22
- 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 +1 -11
- 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 +4 -8
- package/dist/Table/tableContextMenu.js +9 -9
- package/dist/Text/Text.js +10 -10
- package/dist/TextArea/TextArea.js +14 -14
- package/dist/TextInput/TextInput.js +15 -15
- package/dist/Thumbnail/Thumbnail.d.ts +2 -3
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +29 -30
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -26
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +26 -37
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +17 -25
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +11 -23
- 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.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +34 -36
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +1 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- 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 +14 -25
- 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 +20 -23
- 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 +0 -7
- package/dist/astryx.umd.js +60 -60
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +2 -8
- 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 +0 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/useFocusTrap.d.ts +0 -3
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +1 -38
- package/dist/hooks/useInteractiveRole.d.ts +2 -6
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +2 -6
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +1 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +5 -14
- 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 +3 -10
- package/dist/theme/hct.d.ts +15 -0
- 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 +2 -10
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +4 -220
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -8
- package/package.json +3 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +0 -4
- package/src/AlertDialog/AlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +0 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +1 -28
- package/src/AspectRatio/AspectRatio.test.tsx +1 -142
- package/src/AspectRatio/AspectRatio.tsx +10 -70
- package/src/AspectRatio/index.ts +1 -5
- package/src/Avatar/Avatar.doc.mjs +0 -11
- package/src/Avatar/Avatar.test.tsx +1 -32
- package/src/Avatar/Avatar.tsx +20 -12
- package/src/Banner/Banner.doc.mjs +0 -8
- package/src/Banner/Banner.test.tsx +0 -38
- package/src/Banner/Banner.tsx +1 -8
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +17 -122
- package/src/Calendar/Calendar.tsx +5 -26
- package/src/Calendar/dayCellUtils.ts +1 -3
- package/src/Calendar/styles.ts +2 -12
- package/src/Card/Card.tsx +6 -16
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +0 -13
- package/src/Carousel/Carousel.tsx +2 -4
- package/src/Carousel/carousel.markers.stylex.ts +10 -0
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +1 -27
- package/src/Chat/ChatComposerInput.tsx +15 -20
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.tsx +1 -3
- package/src/Chat/ChatMessageMetadata.tsx +6 -4
- package/src/Chat/ChatSystemMessage.test.tsx +11 -26
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +16 -29
- package/src/Chat/ChatTokenizedText.tsx +8 -15
- package/src/Chat/ChatToolCalls.test.tsx +0 -55
- package/src/Chat/ChatToolCalls.tsx +12 -10
- package/src/Chat/index.ts +4 -1
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +4 -71
- package/src/CheckboxInput/CheckboxInput.tsx +0 -2
- package/src/CheckboxList/CheckboxList.test.tsx +0 -19
- package/src/CheckboxList/CheckboxListItem.tsx +2 -11
- package/src/Citation/Citation.doc.mjs +0 -5
- package/src/ClickableCard/ClickableCard.tsx +2 -45
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -7
- package/src/CodeBlock/CodeBlock.test.tsx +3 -122
- package/src/CodeBlock/CodeBlock.tsx +4 -62
- package/src/Collapsible/Collapsible.doc.mjs +4 -8
- package/src/Collapsible/Collapsible.tsx +10 -86
- package/src/Collapsible/CollapsibleGroup.doc.mjs +3 -27
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -318
- package/src/Collapsible/CollapsibleGroup.tsx +9 -107
- package/src/Collapsible/CollapsibleGroupContext.tsx +2 -42
- package/src/Collapsible/index.ts +0 -4
- package/src/Collapsible/useCollapsible.ts +6 -20
- package/src/CommandPalette/CommandPalette.doc.mjs +0 -4
- package/src/CommandPalette/CommandPalette.tsx +3 -5
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +0 -5
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +0 -10
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +0 -6
- package/src/CommandPalette/CommandPaletteList.doc.mjs +0 -9
- package/src/ContextMenu/ContextMenu.doc.mjs +0 -15
- package/src/ContextMenu/ContextMenu.test.tsx +0 -87
- package/src/ContextMenu/ContextMenu.tsx +28 -87
- package/src/ContextMenu/ContextMenuItem.doc.mjs +0 -6
- package/src/DateInput/DateInput.test.tsx +20 -11
- package/src/DateRangeInput/DateRangeInput.test.tsx +44 -31
- package/src/DateTimeInput/DateTimeInput.doc.mjs +2 -3
- package/src/DateTimeInput/DateTimeInput.test.tsx +16 -118
- package/src/DateTimeInput/DateTimeInput.tsx +2 -8
- package/src/DateTimeInput/index.ts +0 -1
- package/src/Dialog/Dialog.doc.mjs +0 -4
- package/src/Dialog/DialogHeader.doc.mjs +0 -45
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +2 -22
- package/src/DropdownMenu/DropdownMenuItem.tsx +17 -5
- package/src/Field/Field.test.tsx +4 -1
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -0
- package/src/Grid/Grid.test.tsx +18 -43
- package/src/Grid/Grid.tsx +9 -26
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +2 -9
- package/src/Icon/Icon.test.tsx +29 -41
- package/src/Icon/Icon.tsx +2 -6
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +2 -221
- package/src/Layer/useLayer.tsx +30 -69
- package/src/Layout/LayoutContent.doc.mjs +0 -12
- package/src/Layout/LayoutPanel.doc.mjs +0 -40
- package/src/Lightbox/Lightbox.doc.mjs +0 -5
- package/src/Lightbox/Lightbox.test.tsx +2 -123
- package/src/Lightbox/Lightbox.tsx +1 -29
- package/src/Markdown/Markdown.tsx +7 -9
- package/src/Markdown/parser.perf.test.ts +12 -34
- package/src/NavMenu/NavMenu.doc.mjs +0 -15
- package/src/NumberInput/NumberInput.test.tsx +3 -48
- package/src/NumberInput/NumberInput.tsx +15 -32
- package/src/Overlay/Overlay.doc.mjs +0 -6
- package/src/Pagination/Pagination.test.tsx +0 -162
- package/src/Pagination/Pagination.tsx +26 -80
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +0 -65
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +1 -109
- package/src/PowerSearch/PowerSearch.tsx +16 -37
- package/src/ProgressBar/ProgressBar.test.tsx +0 -30
- package/src/ProgressBar/ProgressBar.tsx +5 -12
- package/src/RadioList/RadioList.test.tsx +0 -19
- package/src/RadioList/RadioListItem.tsx +4 -9
- package/src/Resizable/ResizeHandle.tsx +4 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -192
- package/src/SegmentedControl/SegmentedControl.tsx +5 -27
- package/src/SegmentedControl/SegmentedControlItem.tsx +4 -9
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +1 -27
- package/src/SideNav/SideNav.doc.mjs +1 -7
- package/src/SideNav/SideNav.test.tsx +0 -66
- package/src/SideNav/SideNav.tsx +2 -6
- package/src/SideNav/SideNavCollapseButton.tsx +3 -4
- package/src/SideNav/SideNavSection.tsx +4 -6
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +3 -102
- package/src/Switch/Switch.tsx +7 -20
- package/src/TabList/TabList.test.tsx +1 -185
- package/src/TabList/TabMenu.tsx +9 -45
- package/src/Table/BaseTable.tsx +2 -13
- package/src/Table/Table.test.tsx +0 -87
- package/src/Table/TableBody.tsx +2 -15
- package/src/Table/TableFooter.tsx +2 -15
- package/src/Table/TableHeader.tsx +2 -15
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -13
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +1 -3
- package/src/Table/plugins/pagination/paginateData.ts +1 -5
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -13
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -23
- package/src/Table/plugins/selection/useTableSelectionState.tsx +6 -11
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +1 -35
- package/src/Table/plugins/sortable/useTableSortableState.tsx +4 -8
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +2 -36
- package/src/Thumbnail/Thumbnail.tsx +2 -4
- package/src/TimeInput/TimeInput.test.tsx +0 -37
- package/src/TimeInput/TimeInput.tsx +1 -11
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +0 -52
- package/src/Timestamp/Timestamp.tsx +16 -30
- package/src/Toast/Toast.tsx +3 -11
- package/src/Toast/ToastViewport.test.tsx +0 -64
- package/src/Toast/ToastViewport.tsx +0 -12
- package/src/ToggleButton/ToggleButton.doc.mjs +0 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +0 -54
- package/src/Tokenizer/Tokenizer.tsx +4 -5
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +2 -12
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +7 -23
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +2 -9
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +0 -19
- package/src/Typeahead/BaseTypeahead.tsx +2 -5
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +1 -45
- package/src/docs-types.ts +1 -9
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +0 -3
- package/src/hooks/useFocusTrap.doc.mjs +2 -4
- package/src/hooks/useFocusTrap.test.tsx +1 -149
- package/src/hooks/useFocusTrap.ts +1 -50
- package/src/hooks/useInteractiveRole.ts +4 -12
- package/src/hooks/useStreamingText.test.ts +19 -54
- package/src/hooks/useStreamingText.ts +5 -16
- package/src/hooks/useTreeFocus.test.tsx +3 -1
- package/src/reset.css +0 -29
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +13 -4
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +0 -29
- package/src/theme/expandColorScale.ts +6 -11
- package/src/theme/hct.ts +17 -9
- package/src/theme/tokens.test.ts +9 -182
- package/src/theme/tokens.ts +4 -239
- package/src/theme/useTheme.test.tsx +0 -20
- package/src/utils/index.ts +0 -4
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +0 -13
- package/src/utils/timeParser.ts +5 -8
- package/dist/hooks/useHotkeys.d.ts +0 -51
- package/dist/hooks/useHotkeys.d.ts.map +0 -1
- package/dist/hooks/useHotkeys.js +0 -160
- package/dist/utils/color.d.ts +0 -42
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/color.js +0 -150
- package/dist/utils/composeEventHandlers.d.ts +0 -30
- package/dist/utils/composeEventHandlers.d.ts.map +0 -1
- package/dist/utils/composeEventHandlers.js +0 -40
- package/src/Chat/ChatDictationButton.test.tsx +0 -43
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -33
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -32
- package/src/Collapsible/Collapsible.test.tsx +0 -405
- package/src/FieldStatus/FieldStatus.test.tsx +0 -282
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Layout/Layout.test.tsx +0 -285
- package/src/Layout/LayoutSlots.test.tsx +0 -364
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -80
- package/src/OverflowList/OverflowList.test.tsx +0 -416
- package/src/Overlay/Overlay.test.tsx +0 -356
- package/src/Resizable/ResizeHandle.test.tsx +0 -218
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/docPropReferences.test.ts +0 -178
- package/src/hooks/useHotkeys.doc.mjs +0 -52
- package/src/hooks/useHotkeys.test.ts +0 -245
- package/src/hooks/useHotkeys.ts +0 -203
- package/src/utils/color.test.ts +0 -133
- package/src/utils/color.ts +0 -148
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/composeEventHandlers.ts +0 -44
- package/src/utils/mergeProps.test.ts +0 -166
|
@@ -470,84 +470,11 @@ describe('Switch', () => {
|
|
|
470
470
|
expect(screen.getByRole('switch')).toBeDisabled();
|
|
471
471
|
});
|
|
472
472
|
});
|
|
473
|
-
describe('labelSpacing', () => {
|
|
474
|
-
const getField = (container: HTMLElement) =>
|
|
475
|
-
container.querySelector<HTMLElement>('.astryx-switch-field')!;
|
|
476
|
-
|
|
477
|
-
it('omits the data attribute for the default hug spacing', () => {
|
|
478
|
-
const {container} = render(
|
|
479
|
-
<Switch label="Notify" value={false} onChange={() => {}} />,
|
|
480
|
-
);
|
|
481
|
-
expect(getField(container)).not.toHaveAttribute('data-label-spacing');
|
|
482
|
-
});
|
|
483
|
-
|
|
484
|
-
it('reflects spread spacing as a data attribute and variant class', () => {
|
|
485
|
-
const {container} = render(
|
|
486
|
-
<Switch
|
|
487
|
-
label="Notify"
|
|
488
|
-
value={false}
|
|
489
|
-
onChange={() => {}}
|
|
490
|
-
labelSpacing="spread"
|
|
491
|
-
/>,
|
|
492
|
-
);
|
|
493
|
-
expect(getField(container)).toHaveAttribute(
|
|
494
|
-
'data-label-spacing',
|
|
495
|
-
'spread',
|
|
496
|
-
);
|
|
497
|
-
expect(getField(container).className).toContain('spread');
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
it('renders explicit hug the same as the default', () => {
|
|
501
|
-
const {container: implicit} = render(
|
|
502
|
-
<Switch label="Notify" value={false} onChange={() => {}} />,
|
|
503
|
-
);
|
|
504
|
-
const {container: explicit} = render(
|
|
505
|
-
<Switch
|
|
506
|
-
label="Notify"
|
|
507
|
-
value={false}
|
|
508
|
-
onChange={() => {}}
|
|
509
|
-
labelSpacing="hug"
|
|
510
|
-
/>,
|
|
511
|
-
);
|
|
512
|
-
expect(getField(explicit)).not.toHaveAttribute('data-label-spacing');
|
|
513
|
-
expect(getField(explicit).className).toBe(getField(implicit).className);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
it("treats the deprecated 'default' value as an alias for hug", () => {
|
|
517
|
-
const {container: hug} = render(
|
|
518
|
-
<Switch
|
|
519
|
-
label="Notify"
|
|
520
|
-
value={false}
|
|
521
|
-
onChange={() => {}}
|
|
522
|
-
labelSpacing="hug"
|
|
523
|
-
/>,
|
|
524
|
-
);
|
|
525
|
-
const {container: deprecated} = render(
|
|
526
|
-
<Switch
|
|
527
|
-
label="Notify"
|
|
528
|
-
value={false}
|
|
529
|
-
onChange={() => {}}
|
|
530
|
-
labelSpacing="default"
|
|
531
|
-
/>,
|
|
532
|
-
);
|
|
533
|
-
expect(getField(deprecated)).not.toHaveAttribute('data-label-spacing');
|
|
534
|
-
expect(getField(deprecated).className).toBe(getField(hug).className);
|
|
535
|
-
// The switch row keeps the hug layout, not the spread justification.
|
|
536
|
-
expect(getField(deprecated).firstElementChild?.className).toBe(
|
|
537
|
-
getField(hug).firstElementChild?.className,
|
|
538
|
-
);
|
|
539
|
-
});
|
|
540
|
-
});
|
|
541
473
|
describe('form participation', () => {
|
|
542
474
|
it('submits under htmlName when on', () => {
|
|
543
475
|
const {container} = render(
|
|
544
476
|
<form>
|
|
545
|
-
<Switch
|
|
546
|
-
label="Notify"
|
|
547
|
-
htmlName="notify"
|
|
548
|
-
value={true}
|
|
549
|
-
onChange={() => {}}
|
|
550
|
-
/>
|
|
477
|
+
<Switch label="Notify" htmlName="notify" value={true} onChange={() => {}} />
|
|
551
478
|
</form>,
|
|
552
479
|
);
|
|
553
480
|
const data = new FormData(container.querySelector('form')!);
|
|
@@ -567,20 +494,13 @@ describe('Switch', () => {
|
|
|
567
494
|
/>
|
|
568
495
|
</form>,
|
|
569
496
|
);
|
|
570
|
-
expect([
|
|
571
|
-
...new FormData(container.querySelector('form')!).keys(),
|
|
572
|
-
]).toEqual([]);
|
|
497
|
+
expect([...new FormData(container.querySelector('form')!).keys()]).toEqual([]);
|
|
573
498
|
});
|
|
574
499
|
|
|
575
500
|
it('submits nothing when off or when htmlName is omitted', () => {
|
|
576
501
|
const {container} = render(
|
|
577
502
|
<form>
|
|
578
|
-
<Switch
|
|
579
|
-
label="Off"
|
|
580
|
-
htmlName="off"
|
|
581
|
-
value={false}
|
|
582
|
-
onChange={() => {}}
|
|
583
|
-
/>
|
|
503
|
+
<Switch label="Off" htmlName="off" value={false} onChange={() => {}} />
|
|
584
504
|
<Switch label="Unnamed" value={true} onChange={() => {}} />
|
|
585
505
|
</form>,
|
|
586
506
|
);
|
|
@@ -588,23 +508,4 @@ describe('Switch', () => {
|
|
|
588
508
|
expect([...data.keys()]).toEqual([]);
|
|
589
509
|
});
|
|
590
510
|
});
|
|
591
|
-
|
|
592
|
-
describe('rest forwarding', () => {
|
|
593
|
-
it('forwards data-testid, id, and aria-* to the root element', () => {
|
|
594
|
-
const {container} = render(
|
|
595
|
-
<Switch
|
|
596
|
-
label="Notifications"
|
|
597
|
-
value={false}
|
|
598
|
-
onChange={() => {}}
|
|
599
|
-
data-testid="my-switch"
|
|
600
|
-
id="switch-1"
|
|
601
|
-
aria-label="Toggle notifications"
|
|
602
|
-
/>,
|
|
603
|
-
);
|
|
604
|
-
const root = container.querySelector('[data-testid="my-switch"]');
|
|
605
|
-
expect(root).not.toBeNull();
|
|
606
|
-
expect(root).toHaveAttribute('id', 'switch-1');
|
|
607
|
-
expect(root).toHaveAttribute('aria-label', 'Toggle notifications');
|
|
608
|
-
});
|
|
609
|
-
});
|
|
610
511
|
});
|
package/src/Switch/Switch.tsx
CHANGED
|
@@ -185,11 +185,7 @@ const styles = stylex.create({
|
|
|
185
185
|
|
|
186
186
|
export type SwitchLabelPosition = 'start' | 'end';
|
|
187
187
|
|
|
188
|
-
export type SwitchLabelSpacing =
|
|
189
|
-
| 'hug'
|
|
190
|
-
| 'spread'
|
|
191
|
-
/** @deprecated Use `'hug'` instead. */
|
|
192
|
-
| 'default';
|
|
188
|
+
export type SwitchLabelSpacing = 'default' | 'spread';
|
|
193
189
|
|
|
194
190
|
export interface SwitchProps extends Omit<BaseProps, 'onChange'> {
|
|
195
191
|
/** Ref forwarded to the root element */
|
|
@@ -301,11 +297,9 @@ export interface SwitchProps extends Omit<BaseProps, 'onChange'> {
|
|
|
301
297
|
labelPosition?: SwitchLabelPosition;
|
|
302
298
|
/**
|
|
303
299
|
* Spacing behavior between label and switch.
|
|
304
|
-
* - '
|
|
300
|
+
* - 'default': Label and switch are positioned next to each other
|
|
305
301
|
* - 'spread': Label and switch are pushed to opposite ends
|
|
306
|
-
*
|
|
307
|
-
* 'default' is a deprecated alias for 'hug'.
|
|
308
|
-
* @default 'hug'
|
|
302
|
+
* @default 'default'
|
|
309
303
|
*/
|
|
310
304
|
labelSpacing?: SwitchLabelSpacing;
|
|
311
305
|
/**
|
|
@@ -356,14 +350,13 @@ export function Switch({
|
|
|
356
350
|
labelIcon,
|
|
357
351
|
labelTooltip,
|
|
358
352
|
labelPosition = 'end',
|
|
359
|
-
labelSpacing = '
|
|
353
|
+
labelSpacing = 'default',
|
|
360
354
|
status,
|
|
361
355
|
width,
|
|
362
356
|
xstyle,
|
|
363
357
|
className,
|
|
364
358
|
style,
|
|
365
359
|
ref,
|
|
366
|
-
...rest
|
|
367
360
|
}: SwitchProps) {
|
|
368
361
|
const id = useId();
|
|
369
362
|
const descriptionID = useId();
|
|
@@ -375,10 +368,6 @@ export function Switch({
|
|
|
375
368
|
|
|
376
369
|
const isOn = optimisticValue === true;
|
|
377
370
|
|
|
378
|
-
// 'default' is a deprecated alias for 'hug' (#2889).
|
|
379
|
-
const resolvedLabelSpacing: SwitchLabelSpacing =
|
|
380
|
-
labelSpacing === 'default' ? 'hug' : labelSpacing;
|
|
381
|
-
|
|
382
371
|
// Disabled-reason tooltip. Disabled controls swallow pointer events, so the
|
|
383
372
|
// tooltip listeners attach to the switch row (which already exists) and the
|
|
384
373
|
// native checkbox stays perceivable via aria-disabled instead of the disabled
|
|
@@ -498,14 +487,12 @@ export function Switch({
|
|
|
498
487
|
{...mergeProps(
|
|
499
488
|
themeProps('switch-field', {
|
|
500
489
|
labelPosition: labelPosition !== 'end' ? labelPosition : undefined,
|
|
501
|
-
labelSpacing:
|
|
502
|
-
resolvedLabelSpacing !== 'hug' ? resolvedLabelSpacing : undefined,
|
|
490
|
+
labelSpacing: labelSpacing !== 'default' ? labelSpacing : undefined,
|
|
503
491
|
}),
|
|
504
492
|
stylex.props(width != null && dynamicWidthStyles.width(width), xstyle),
|
|
505
493
|
className,
|
|
506
494
|
style,
|
|
507
|
-
)}
|
|
508
|
-
{...rest}>
|
|
495
|
+
)}>
|
|
509
496
|
<div
|
|
510
497
|
ref={el => {
|
|
511
498
|
// Interaction (hover/focus) listeners for the disabled-message
|
|
@@ -518,7 +505,7 @@ export function Switch({
|
|
|
518
505
|
}}
|
|
519
506
|
{...stylex.props(
|
|
520
507
|
styles.container,
|
|
521
|
-
|
|
508
|
+
labelSpacing === 'spread' && styles.containerSpread,
|
|
522
509
|
!isDisabled && switchScope,
|
|
523
510
|
)}>
|
|
524
511
|
{' '}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi, beforeAll, afterAll} from 'vitest';
|
|
13
|
-
import {render, screen
|
|
13
|
+
import {render, screen} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
15
|
import {TabList} from './TabList';
|
|
16
16
|
import {Tab} from './Tab';
|
|
@@ -702,187 +702,3 @@ describe('TabMenu', () => {
|
|
|
702
702
|
expect(reportsItem).not.toHaveAttribute('aria-current');
|
|
703
703
|
});
|
|
704
704
|
});
|
|
705
|
-
|
|
706
|
-
describe('TabMenu keyboard navigation (roving tabindex)', () => {
|
|
707
|
-
const menuOptions = [
|
|
708
|
-
{value: 'analytics', label: 'Analytics'},
|
|
709
|
-
{value: 'reports', label: 'Reports'},
|
|
710
|
-
];
|
|
711
|
-
|
|
712
|
-
it('exposes the overflow menu as a single Tab stop (one item tabbable, rest -1)', async () => {
|
|
713
|
-
const user = userEvent.setup();
|
|
714
|
-
render(
|
|
715
|
-
<TabList value="home" onChange={() => {}}>
|
|
716
|
-
<Tab value="home" label="Home" />
|
|
717
|
-
<TabMenu label="More" options={menuOptions} />
|
|
718
|
-
</TabList>,
|
|
719
|
-
);
|
|
720
|
-
|
|
721
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
722
|
-
|
|
723
|
-
const analytics = screen.getByRole('menuitem', {
|
|
724
|
-
name: 'Analytics',
|
|
725
|
-
hidden: true,
|
|
726
|
-
});
|
|
727
|
-
const reports = screen.getByRole('menuitem', {
|
|
728
|
-
name: 'Reports',
|
|
729
|
-
hidden: true,
|
|
730
|
-
});
|
|
731
|
-
|
|
732
|
-
// Exactly one menu item is in the Tab sequence; arrow keys reach the rest.
|
|
733
|
-
expect(analytics).toHaveAttribute('tabindex', '0');
|
|
734
|
-
expect(reports).toHaveAttribute('tabindex', '-1');
|
|
735
|
-
|
|
736
|
-
const tabbable = [analytics, reports].filter(
|
|
737
|
-
el => el.getAttribute('tabindex') === '0',
|
|
738
|
-
);
|
|
739
|
-
expect(tabbable).toHaveLength(1);
|
|
740
|
-
});
|
|
741
|
-
|
|
742
|
-
it('moves focus between items with ArrowDown and ArrowUp', async () => {
|
|
743
|
-
const user = userEvent.setup();
|
|
744
|
-
render(
|
|
745
|
-
<TabList value="home" onChange={() => {}}>
|
|
746
|
-
<Tab value="home" label="Home" />
|
|
747
|
-
<TabMenu label="More" options={menuOptions} />
|
|
748
|
-
</TabList>,
|
|
749
|
-
);
|
|
750
|
-
|
|
751
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
752
|
-
const menu = screen.getByRole('menu', {hidden: true});
|
|
753
|
-
const analytics = screen.getByRole('menuitem', {
|
|
754
|
-
name: 'Analytics',
|
|
755
|
-
hidden: true,
|
|
756
|
-
});
|
|
757
|
-
const reports = screen.getByRole('menuitem', {
|
|
758
|
-
name: 'Reports',
|
|
759
|
-
hidden: true,
|
|
760
|
-
});
|
|
761
|
-
|
|
762
|
-
fireEvent.keyDown(menu, {key: 'ArrowDown'});
|
|
763
|
-
expect(analytics).toHaveFocus();
|
|
764
|
-
|
|
765
|
-
fireEvent.keyDown(menu, {key: 'ArrowDown'});
|
|
766
|
-
expect(reports).toHaveFocus();
|
|
767
|
-
|
|
768
|
-
fireEvent.keyDown(menu, {key: 'ArrowUp'});
|
|
769
|
-
expect(analytics).toHaveFocus();
|
|
770
|
-
});
|
|
771
|
-
|
|
772
|
-
it('moves the roving tab stop with arrow navigation', async () => {
|
|
773
|
-
const user = userEvent.setup();
|
|
774
|
-
render(
|
|
775
|
-
<TabList value="home" onChange={() => {}}>
|
|
776
|
-
<Tab value="home" label="Home" />
|
|
777
|
-
<TabMenu label="More" options={menuOptions} />
|
|
778
|
-
</TabList>,
|
|
779
|
-
);
|
|
780
|
-
|
|
781
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
782
|
-
const menu = screen.getByRole('menu', {hidden: true});
|
|
783
|
-
const analytics = screen.getByRole('menuitem', {
|
|
784
|
-
name: 'Analytics',
|
|
785
|
-
hidden: true,
|
|
786
|
-
});
|
|
787
|
-
const reports = screen.getByRole('menuitem', {
|
|
788
|
-
name: 'Reports',
|
|
789
|
-
hidden: true,
|
|
790
|
-
});
|
|
791
|
-
|
|
792
|
-
fireEvent.keyDown(menu, {key: 'ArrowDown'}); // focus analytics
|
|
793
|
-
fireEvent.keyDown(menu, {key: 'ArrowDown'}); // focus reports
|
|
794
|
-
|
|
795
|
-
// The tab stop follows focus, so it is still a single stop after moving.
|
|
796
|
-
expect(reports).toHaveAttribute('tabindex', '0');
|
|
797
|
-
expect(analytics).toHaveAttribute('tabindex', '-1');
|
|
798
|
-
});
|
|
799
|
-
|
|
800
|
-
it('jumps to first and last item with Home and End', async () => {
|
|
801
|
-
const user = userEvent.setup();
|
|
802
|
-
const options = [
|
|
803
|
-
{value: 'analytics', label: 'Analytics'},
|
|
804
|
-
{value: 'reports', label: 'Reports'},
|
|
805
|
-
{value: 'exports', label: 'Exports'},
|
|
806
|
-
];
|
|
807
|
-
render(
|
|
808
|
-
<TabList value="home" onChange={() => {}}>
|
|
809
|
-
<Tab value="home" label="Home" />
|
|
810
|
-
<TabMenu label="More" options={options} />
|
|
811
|
-
</TabList>,
|
|
812
|
-
);
|
|
813
|
-
|
|
814
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
815
|
-
const menu = screen.getByRole('menu', {hidden: true});
|
|
816
|
-
const analytics = screen.getByRole('menuitem', {
|
|
817
|
-
name: 'Analytics',
|
|
818
|
-
hidden: true,
|
|
819
|
-
});
|
|
820
|
-
const exports = screen.getByRole('menuitem', {
|
|
821
|
-
name: 'Exports',
|
|
822
|
-
hidden: true,
|
|
823
|
-
});
|
|
824
|
-
|
|
825
|
-
fireEvent.keyDown(menu, {key: 'End'});
|
|
826
|
-
expect(exports).toHaveFocus();
|
|
827
|
-
|
|
828
|
-
fireEvent.keyDown(menu, {key: 'Home'});
|
|
829
|
-
expect(analytics).toHaveFocus();
|
|
830
|
-
});
|
|
831
|
-
|
|
832
|
-
it('selects an item with Enter and calls onChange', async () => {
|
|
833
|
-
const user = userEvent.setup();
|
|
834
|
-
const handleChange = vi.fn();
|
|
835
|
-
render(
|
|
836
|
-
<TabList value="home" onChange={handleChange}>
|
|
837
|
-
<Tab value="home" label="Home" />
|
|
838
|
-
<TabMenu label="More" options={menuOptions} />
|
|
839
|
-
</TabList>,
|
|
840
|
-
);
|
|
841
|
-
|
|
842
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
843
|
-
const analytics = screen.getByRole('menuitem', {
|
|
844
|
-
name: 'Analytics',
|
|
845
|
-
hidden: true,
|
|
846
|
-
});
|
|
847
|
-
analytics.focus();
|
|
848
|
-
fireEvent.keyDown(analytics, {key: 'Enter'});
|
|
849
|
-
|
|
850
|
-
expect(handleChange).toHaveBeenCalledWith('analytics');
|
|
851
|
-
});
|
|
852
|
-
|
|
853
|
-
it('closes the menu when Tab is pressed inside it (APG menu-button)', async () => {
|
|
854
|
-
const user = userEvent.setup();
|
|
855
|
-
render(
|
|
856
|
-
<TabList value="home" onChange={() => {}}>
|
|
857
|
-
<Tab value="home" label="Home" />
|
|
858
|
-
<TabMenu label="More" options={menuOptions} />
|
|
859
|
-
</TabList>,
|
|
860
|
-
);
|
|
861
|
-
|
|
862
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
863
|
-
const menu = screen.getByRole('menu', {hidden: true});
|
|
864
|
-
|
|
865
|
-
const hidePopover = vi.mocked(HTMLElement.prototype.hidePopover);
|
|
866
|
-
hidePopover.mockClear();
|
|
867
|
-
fireEvent.keyDown(menu, {key: 'Tab'});
|
|
868
|
-
expect(hidePopover).toHaveBeenCalled();
|
|
869
|
-
});
|
|
870
|
-
|
|
871
|
-
it('closes the menu when Escape is pressed', async () => {
|
|
872
|
-
const user = userEvent.setup();
|
|
873
|
-
render(
|
|
874
|
-
<TabList value="home" onChange={() => {}}>
|
|
875
|
-
<Tab value="home" label="Home" />
|
|
876
|
-
<TabMenu label="More" options={menuOptions} />
|
|
877
|
-
</TabList>,
|
|
878
|
-
);
|
|
879
|
-
|
|
880
|
-
await user.click(screen.getByRole('button', {name: /More/}));
|
|
881
|
-
const menu = screen.getByRole('menu', {hidden: true});
|
|
882
|
-
|
|
883
|
-
const hidePopover = vi.mocked(HTMLElement.prototype.hidePopover);
|
|
884
|
-
hidePopover.mockClear();
|
|
885
|
-
fireEvent.keyDown(menu, {key: 'Escape'});
|
|
886
|
-
expect(hidePopover).toHaveBeenCalled();
|
|
887
|
-
});
|
|
888
|
-
});
|
package/src/TabList/TabMenu.tsx
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - /packages/cli/templates/blocks/components/TabList/ (showcase blocks)
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import React, {useCallback, useId,
|
|
19
|
+
import React, {useCallback, useId, type ReactNode} from 'react';
|
|
20
20
|
import * as stylex from '@stylexjs/stylex';
|
|
21
21
|
import {Icon} from '../Icon';
|
|
22
22
|
import {renderIconSlot, type IconType} from '../Icon';
|
|
@@ -262,7 +262,6 @@ export function TabMenu({
|
|
|
262
262
|
}: TabMenuProps) {
|
|
263
263
|
const tabListCtx = useTabListContext();
|
|
264
264
|
const menuId = useId();
|
|
265
|
-
const buttonRef = useRef<HTMLButtonElement>(null);
|
|
266
265
|
|
|
267
266
|
const popover = usePopover({
|
|
268
267
|
hasLightDismiss: true,
|
|
@@ -271,50 +270,20 @@ export function TabMenu({
|
|
|
271
270
|
// The popup's own role="menu" is the exposed semantics; a modal dialog
|
|
272
271
|
// wrapper would announce an unnamed dialog around the menu.
|
|
273
272
|
role: 'none',
|
|
274
|
-
// Return focus to the trigger when the menu closes (Escape, Tab, select,
|
|
275
|
-
// or light dismiss) so keyboard focus is never dropped to <body>.
|
|
276
|
-
onHide: useCallback(() => {
|
|
277
|
-
buttonRef.current?.focus();
|
|
278
|
-
}, []),
|
|
279
273
|
});
|
|
280
274
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
listRef,
|
|
286
|
-
handleKeyDown: handleListKeyDown,
|
|
287
|
-
handleFocus,
|
|
288
|
-
focusFirst,
|
|
289
|
-
} = useListFocus<HTMLDivElement>({
|
|
290
|
-
hasRovingTabIndex: true,
|
|
291
|
-
onEscape: () => popover.hide(),
|
|
292
|
-
});
|
|
275
|
+
const {listRef, handleKeyDown: handleListKeyDown} =
|
|
276
|
+
useListFocus<HTMLDivElement>({
|
|
277
|
+
onEscape: () => popover.hide(),
|
|
278
|
+
});
|
|
293
279
|
|
|
294
280
|
const handleToggle = useCallback(() => {
|
|
295
281
|
if (popover.isOpen) {
|
|
296
282
|
popover.hide();
|
|
297
283
|
} else {
|
|
298
284
|
popover.show();
|
|
299
|
-
// Move focus into the menu on open so arrow navigation works and the
|
|
300
|
-
// roving tab stop lands on a real item (APG menu-button focus-on-open).
|
|
301
|
-
requestAnimationFrame(() => focusFirst());
|
|
302
285
|
}
|
|
303
|
-
}, [popover
|
|
304
|
-
|
|
305
|
-
const handleMenuKeyDown = useCallback(
|
|
306
|
-
(e: React.KeyboardEvent) => {
|
|
307
|
-
// APG menu-button: Tab leaves the menu rather than walking its items.
|
|
308
|
-
// Close and let onHide return focus to the trigger, from which the
|
|
309
|
-
// browser's default Tab continues to the next element.
|
|
310
|
-
if (e.key === 'Tab') {
|
|
311
|
-
popover.hide();
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
handleListKeyDown(e);
|
|
315
|
-
},
|
|
316
|
-
[handleListKeyDown, popover],
|
|
317
|
-
);
|
|
286
|
+
}, [popover]);
|
|
318
287
|
|
|
319
288
|
const selectedOption = options.find(o => o.value === tabListCtx.value);
|
|
320
289
|
const triggerLabel = selectedOption?.label ?? label;
|
|
@@ -330,11 +299,7 @@ export function TabMenu({
|
|
|
330
299
|
[tabListCtx, popover],
|
|
331
300
|
);
|
|
332
301
|
|
|
333
|
-
const setButtonRef = mergeRefs<HTMLButtonElement>(
|
|
334
|
-
popover.triggerRef,
|
|
335
|
-
buttonRef,
|
|
336
|
-
ref,
|
|
337
|
-
);
|
|
302
|
+
const setButtonRef = mergeRefs<HTMLButtonElement>(popover.triggerRef, ref);
|
|
338
303
|
|
|
339
304
|
return (
|
|
340
305
|
<>
|
|
@@ -392,8 +357,7 @@ export function TabMenu({
|
|
|
392
357
|
id={menuId}
|
|
393
358
|
role="menu"
|
|
394
359
|
aria-label={label}
|
|
395
|
-
onKeyDown={
|
|
396
|
-
onFocus={handleFocus}
|
|
360
|
+
onKeyDown={handleListKeyDown}
|
|
397
361
|
{...mergeProps(
|
|
398
362
|
themeProps('tab-menu-dropdown'),
|
|
399
363
|
stylex.props(styles.dropdown),
|
|
@@ -407,7 +371,7 @@ export function TabMenu({
|
|
|
407
371
|
<div
|
|
408
372
|
key={option.value}
|
|
409
373
|
role="menuitem"
|
|
410
|
-
tabIndex={
|
|
374
|
+
tabIndex={0}
|
|
411
375
|
aria-current={isSelected ? 'true' : undefined}
|
|
412
376
|
onClick={() => handleSelect(option.value)}
|
|
413
377
|
onKeyDown={e => {
|
package/src/Table/BaseTable.tsx
CHANGED
|
@@ -279,18 +279,11 @@ function areRowPropsEqual<T extends Record<string, unknown>>(
|
|
|
279
279
|
return true;
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
// Different object reference - compare values
|
|
283
|
-
// one-level shallow compare: nested fields rely on reference identity.
|
|
282
|
+
// Different object reference - compare values
|
|
284
283
|
const prevItem = prevProps.item;
|
|
285
284
|
const nextItem = nextProps.item;
|
|
286
285
|
const keys = Object.keys(nextItem);
|
|
287
286
|
|
|
288
|
-
// A key deleted from nextItem would never be visited by the loop below,
|
|
289
|
-
// and the row would keep rendering the removed field's stale value.
|
|
290
|
-
if (Object.keys(prevItem).length !== keys.length) {
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
287
|
for (const key of keys) {
|
|
295
288
|
if (prevItem[key] !== nextItem[key]) {
|
|
296
289
|
return false;
|
|
@@ -372,13 +365,9 @@ function BaseTableInner<T extends Record<string, unknown>>({
|
|
|
372
365
|
const headerCells = resolvedColumns.map((col, columnIndex) => {
|
|
373
366
|
const headerContent = col.header ?? col.key;
|
|
374
367
|
|
|
375
|
-
// Build initial htmlProps with column alignment if specified
|
|
376
|
-
// `scope: 'col'` is the default so every column header associates its
|
|
377
|
-
// data cells with the correct column for screen readers; a plugin's
|
|
378
|
-
// transformHeaderCell can override it via htmlProps.scope.
|
|
368
|
+
// Build initial htmlProps with column alignment if specified
|
|
379
369
|
const initialHeaderHtmlProps: Record<string, unknown> = {
|
|
380
370
|
'data-column-key': col.key,
|
|
381
|
-
scope: 'col',
|
|
382
371
|
};
|
|
383
372
|
if (col.align) {
|
|
384
373
|
initialHeaderHtmlProps.style = {textAlign: col.align};
|
package/src/Table/Table.test.tsx
CHANGED
|
@@ -15,9 +15,6 @@ import {BaseTable} from './BaseTable';
|
|
|
15
15
|
import {Table} from './Table';
|
|
16
16
|
import {TableRow} from './TableRow';
|
|
17
17
|
import {TableCell} from './TableCell';
|
|
18
|
-
import {TableHeader} from './TableHeader';
|
|
19
|
-
import {TableBody} from './TableBody';
|
|
20
|
-
import {TableFooter} from './TableFooter';
|
|
21
18
|
import {
|
|
22
19
|
proportional,
|
|
23
20
|
pixel,
|
|
@@ -232,34 +229,6 @@ describe('BaseTable', () => {
|
|
|
232
229
|
expect(headers[2]).toHaveTextContent('Email');
|
|
233
230
|
});
|
|
234
231
|
|
|
235
|
-
it('renders every column header with scope="col"', () => {
|
|
236
|
-
render(<BaseTable data={users} columns={columns} />);
|
|
237
|
-
const headers = screen.getAllByRole('columnheader');
|
|
238
|
-
expect(headers).toHaveLength(3);
|
|
239
|
-
for (const header of headers) {
|
|
240
|
-
expect(header).toHaveAttribute('scope', 'col');
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it('lets a consumer override scope via header html props', () => {
|
|
245
|
-
// A `<th scope="row">` maps to the `rowheader` role, so query the DOM
|
|
246
|
-
// directly to assert the attribute regardless of the resolved ARIA role.
|
|
247
|
-
const plugin: TablePlugin<User> = {
|
|
248
|
-
transformHeaderCell: (props, column) =>
|
|
249
|
-
column.key === 'name'
|
|
250
|
-
? {...props, htmlProps: {...props.htmlProps, scope: 'row'}}
|
|
251
|
-
: props,
|
|
252
|
-
};
|
|
253
|
-
const {container} = render(
|
|
254
|
-
<BaseTable data={users} columns={columns} plugins={[plugin]} />,
|
|
255
|
-
);
|
|
256
|
-
const headerCells = container.querySelectorAll('thead th');
|
|
257
|
-
// columns fixture order: name, age, email — plugin overrides name → 'row'
|
|
258
|
-
expect(headerCells[0]).toHaveAttribute('scope', 'row');
|
|
259
|
-
expect(headerCells[1]).toHaveAttribute('scope', 'col');
|
|
260
|
-
expect(headerCells[2]).toHaveAttribute('scope', 'col');
|
|
261
|
-
});
|
|
262
|
-
|
|
263
232
|
it('renders data cells', () => {
|
|
264
233
|
render(<BaseTable data={users} columns={columns} />);
|
|
265
234
|
const cells = screen.getAllByRole('cell');
|
|
@@ -648,29 +617,6 @@ describe('BaseTable', () => {
|
|
|
648
617
|
// =============================================================================
|
|
649
618
|
|
|
650
619
|
describe('Table', () => {
|
|
651
|
-
it('clears a cell when the field is removed from the row object (#3595)', () => {
|
|
652
|
-
const cols: TableColumn<Record<string, unknown>>[] = [
|
|
653
|
-
{key: 'name', header: 'Name'},
|
|
654
|
-
{key: 'status', header: 'Status'},
|
|
655
|
-
];
|
|
656
|
-
const {rerender} = render(
|
|
657
|
-
<Table
|
|
658
|
-
data={[{id: '1', name: 'Alice', status: 'active'}]}
|
|
659
|
-
columns={cols}
|
|
660
|
-
idKey="id"
|
|
661
|
-
/>,
|
|
662
|
-
);
|
|
663
|
-
expect(screen.getByText('active')).toBeInTheDocument();
|
|
664
|
-
|
|
665
|
-
// Clearing a field by omitting it (optimistic update / server response)
|
|
666
|
-
// must re-render the row — the memo previously only compared the keys of
|
|
667
|
-
// the NEW item, so the deleted field's stale value kept rendering.
|
|
668
|
-
rerender(
|
|
669
|
-
<Table data={[{id: '1', name: 'Alice'}]} columns={cols} idKey="id" />,
|
|
670
|
-
);
|
|
671
|
-
expect(screen.queryByText('active')).not.toBeInTheDocument();
|
|
672
|
-
});
|
|
673
|
-
|
|
674
620
|
it('renders a table with correct structure', () => {
|
|
675
621
|
render(<Table data={users} columns={columns} />);
|
|
676
622
|
expect(screen.getByRole('table')).toBeInTheDocument();
|
|
@@ -1286,37 +1232,4 @@ describe('emptyState', () => {
|
|
|
1286
1232
|
expect(screen.getByText('Name')).toBeInTheDocument();
|
|
1287
1233
|
expect(screen.getByText('Age')).toBeInTheDocument();
|
|
1288
1234
|
});
|
|
1289
|
-
|
|
1290
|
-
describe('table section rest forwarding', () => {
|
|
1291
|
-
it('forwards data-testid and id to the tbody, thead, and tfoot', () => {
|
|
1292
|
-
const {container} = render(
|
|
1293
|
-
<table>
|
|
1294
|
-
<TableHeader data-testid="thead" id="head-1">
|
|
1295
|
-
<tr>
|
|
1296
|
-
<th>H</th>
|
|
1297
|
-
</tr>
|
|
1298
|
-
</TableHeader>
|
|
1299
|
-
<TableBody data-testid="tbody" id="body-1">
|
|
1300
|
-
<tr>
|
|
1301
|
-
<td>B</td>
|
|
1302
|
-
</tr>
|
|
1303
|
-
</TableBody>
|
|
1304
|
-
<TableFooter data-testid="tfoot" id="foot-1">
|
|
1305
|
-
<tr>
|
|
1306
|
-
<td>F</td>
|
|
1307
|
-
</tr>
|
|
1308
|
-
</TableFooter>
|
|
1309
|
-
</table>,
|
|
1310
|
-
);
|
|
1311
|
-
const thead = container.querySelector('thead')!;
|
|
1312
|
-
const tbody = container.querySelector('tbody')!;
|
|
1313
|
-
const tfoot = container.querySelector('tfoot')!;
|
|
1314
|
-
expect(thead).toHaveAttribute('data-testid', 'thead');
|
|
1315
|
-
expect(thead).toHaveAttribute('id', 'head-1');
|
|
1316
|
-
expect(tbody).toHaveAttribute('data-testid', 'tbody');
|
|
1317
|
-
expect(tbody).toHaveAttribute('id', 'body-1');
|
|
1318
|
-
expect(tfoot).toHaveAttribute('data-testid', 'tfoot');
|
|
1319
|
-
expect(tfoot).toHaveAttribute('id', 'foot-1');
|
|
1320
|
-
});
|
|
1321
|
-
});
|
|
1322
1235
|
});
|
package/src/Table/TableBody.tsx
CHANGED
|
@@ -13,24 +13,11 @@ export interface TableBodyProps extends BaseProps<HTMLTableSectionElement> {
|
|
|
13
13
|
children: ReactNode;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export function TableBody({
|
|
17
|
-
ref,
|
|
18
|
-
children,
|
|
19
|
-
xstyle,
|
|
20
|
-
className,
|
|
21
|
-
style,
|
|
22
|
-
...rest
|
|
23
|
-
}: TableBodyProps) {
|
|
16
|
+
export function TableBody({ref, children, xstyle}: TableBodyProps) {
|
|
24
17
|
return (
|
|
25
18
|
<tbody
|
|
26
19
|
ref={ref}
|
|
27
|
-
{...mergeProps(
|
|
28
|
-
themeProps('table-body'),
|
|
29
|
-
stylex.props(xstyle),
|
|
30
|
-
className,
|
|
31
|
-
style,
|
|
32
|
-
)}
|
|
33
|
-
{...rest}>
|
|
20
|
+
{...mergeProps(themeProps('table-body'), stylex.props(xstyle))}>
|
|
34
21
|
{children}
|
|
35
22
|
</tbody>
|
|
36
23
|
);
|