@astryxdesign/core 0.1.4 → 0.1.5-canary.76e6697
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 +141 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +20 -18
- package/dist/AlertDialog/useImperativeAlertDialog.d.ts +0 -2
- package/dist/AlertDialog/useImperativeAlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/useImperativeAlertDialog.js +3 -5
- package/dist/AppShell/AppShell.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +55 -53
- package/dist/AspectRatio/AspectRatio.d.ts +48 -10
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +33 -12
- 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 +28 -26
- package/dist/Avatar/AvatarStatusDot.js +6 -6
- package/dist/AvatarGroup/AvatarGroup.js +6 -6
- package/dist/AvatarGroup/AvatarGroupOverflow.js +7 -7
- package/dist/Badge/Badge.js +3 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -25
- package/dist/Blockquote/Blockquote.js +7 -7
- package/dist/Breadcrumbs/BreadcrumbItem.js +17 -17
- package/dist/Breadcrumbs/Breadcrumbs.js +7 -7
- package/dist/Button/Button.js +19 -19
- package/dist/ButtonGroup/ButtonGroup.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +68 -48
- 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 +4 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +18 -10
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +24 -21
- 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 +27 -15
- package/dist/Chat/ChatDictationButton.d.ts +1 -1
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +13 -11
- package/dist/Chat/ChatLayout.js +17 -17
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +12 -10
- package/dist/Chat/ChatMessage.js +12 -12
- package/dist/Chat/ChatMessageBubble.js +7 -7
- package/dist/Chat/ChatMessageList.js +14 -14
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +14 -12
- package/dist/Chat/ChatPastedTextToken.js +13 -13
- package/dist/Chat/ChatSendButton.js +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +17 -17
- package/dist/Chat/ChatTokenizedText.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +24 -15
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +81 -74
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.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 +25 -23
- package/dist/CheckboxList/CheckboxList.js +9 -9
- package/dist/CheckboxList/CheckboxListItem.d.ts +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +8 -6
- package/dist/Citation/Citation.js +10 -10
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +32 -9
- package/dist/Code/Code.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +88 -52
- package/dist/Collapsible/Collapsible.d.ts +9 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +109 -22
- package/dist/Collapsible/CollapsibleGroup.d.ts +37 -7
- package/dist/Collapsible/CollapsibleGroup.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroup.js +64 -12
- package/dist/Collapsible/CollapsibleGroupContext.d.ts +24 -0
- package/dist/Collapsible/CollapsibleGroupContext.d.ts.map +1 -1
- package/dist/Collapsible/CollapsibleGroupContext.js +26 -3
- package/dist/Collapsible/index.d.ts +1 -0
- package/dist/Collapsible/index.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.d.ts +4 -1
- package/dist/Collapsible/useCollapsible.d.ts.map +1 -1
- package/dist/Collapsible/useCollapsible.js +20 -6
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +36 -34
- package/dist/CommandPalette/CommandPaletteEmpty.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 +7 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +76 -43
- package/dist/DateInput/DateInput.js +18 -18
- package/dist/DateRangeInput/DateRangeInput.js +21 -21
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +30 -26
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -9
- package/dist/Dialog/DialogHeader.js +16 -16
- package/dist/Dialog/useImperativeDialog.js +3 -3
- package/dist/Divider/Divider.js +7 -7
- package/dist/DropdownMenu/DropdownMenu.js +10 -10
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -17
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/renderDropdownItems.js +10 -10
- package/dist/EmptyState/EmptyState.js +9 -9
- package/dist/Field/Field.js +17 -17
- package/dist/Field/FieldLabel.js +15 -15
- package/dist/Field/InputClearButton.js +5 -5
- package/dist/FieldStatus/FieldStatus.js +3 -3
- package/dist/FileInput/FileInput.js +29 -29
- package/dist/FormLayout/FormLayout.js +5 -5
- package/dist/Grid/Grid.d.ts +4 -3
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +29 -12
- package/dist/Grid/GridSpan.js +3 -3
- package/dist/HStack/HStack.js +3 -3
- package/dist/Heading/Heading.js +10 -10
- package/dist/HoverCard/HoverCard.js +9 -9
- package/dist/HoverCard/useHoverCard.d.ts +5 -1
- 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 +16 -12
- package/dist/Icon/defaultIcons.js +116 -116
- package/dist/IconButton/IconButton.js +3 -3
- package/dist/InputGroup/InputGroup.js +11 -11
- package/dist/InputGroup/InputGroupText.js +3 -3
- package/dist/Item/Item.js +18 -18
- package/dist/Kbd/Kbd.js +5 -5
- package/dist/Layer/LayerProvider.js +7 -7
- package/dist/Layer/useLayer.d.ts +29 -2
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +44 -31
- package/dist/Layout/Layout.js +21 -21
- package/dist/Layout/LayoutContent.js +3 -3
- package/dist/Layout/LayoutFooter.js +5 -5
- package/dist/Layout/LayoutHeader.js +5 -5
- package/dist/Layout/LayoutPanel.js +3 -3
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +55 -31
- package/dist/Lightbox/useLightbox.d.ts +0 -1
- package/dist/Lightbox/useLightbox.d.ts.map +1 -1
- package/dist/Lightbox/useLightbox.js +3 -4
- package/dist/Link/Link.d.ts +0 -2
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +15 -17
- 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.d.ts +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +26 -23
- 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 +48 -32
- package/dist/Outline/Outline.js +15 -15
- package/dist/OverflowList/OverflowList.js +8 -8
- package/dist/Overlay/Overlay.js +3 -3
- package/dist/Overlay/OverlayScrim.js +5 -5
- package/dist/Overlay/useOverlay.d.ts +0 -3
- package/dist/Overlay/useOverlay.d.ts.map +1 -1
- package/dist/Overlay/useOverlay.js +3 -6
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +125 -72
- package/dist/Popover/Popover.js +16 -16
- package/dist/Popover/usePopover.js +7 -7
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +110 -92
- package/dist/PowerSearch/PowerSearchEditPopover.js +84 -84
- package/dist/PowerSearch/PowerSearchFilterEditor.js +3 -3
- package/dist/PowerSearch/PowerSearchToken.js +5 -5
- package/dist/PowerSearch/PowerSearchValueEditor.js +54 -54
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +25 -18
- package/dist/RadioList/RadioList.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 +24 -21
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +28 -10
- package/dist/Section/Section.js +5 -5
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +32 -10
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +18 -12
- package/dist/SelectableCard/SelectableCard.js +5 -5
- package/dist/Selector/Selector.js +46 -46
- package/dist/Selector/SelectorOption.js +3 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +38 -34
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +8 -6
- package/dist/SideNav/SideNavHeading.js +87 -87
- package/dist/SideNav/SideNavItem.js +42 -42
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/SideNavSection.d.ts.map +1 -1
- package/dist/SideNav/SideNavSection.js +18 -16
- package/dist/Skeleton/Skeleton.js +3 -3
- package/dist/Slider/Slider.js +23 -23
- package/dist/Spinner/Spinner.js +9 -9
- package/dist/StatusDot/StatusDot.js +5 -5
- package/dist/Switch/Switch.d.ts +8 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +34 -29
- package/dist/TabList/Tab.js +18 -18
- package/dist/TabList/TabList.js +5 -5
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +57 -30
- package/dist/TabList/tab.markers.stylex.d.ts +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +50 -39
- package/dist/Table/Table.js +7 -7
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableBody.d.ts.map +1 -1
- package/dist/Table/TableBody.js +9 -5
- package/dist/Table/TableCell.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 +9 -5
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts.map +1 -1
- package/dist/Table/TableHeader.js +9 -5
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/TableRow.js +5 -5
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +14 -11
- package/dist/Table/plugins/filtering/useTableFiltering.js +71 -71
- package/dist/Table/plugins/groupedRows/index.d.ts +3 -0
- package/dist/Table/plugins/groupedRows/index.d.ts.map +1 -0
- package/dist/Table/plugins/groupedRows/index.js +3 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +78 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +250 -0
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +5 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +7 -7
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +23 -23
- package/dist/Table/plugins/selection/useTableSelection.js +18 -18
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.js +11 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +17 -17
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +8 -4
- package/dist/Table/tableContextMenu.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 +3 -2
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +30 -29
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +26 -21
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +37 -26
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -17
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +23 -11
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +44 -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 +36 -34
- package/dist/Toolbar/Toolbar.js +18 -18
- package/dist/Tooltip/Tooltip.js +11 -11
- package/dist/Tooltip/useTooltip.d.ts +5 -1
- 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 +25 -14
- package/dist/TopNav/TopNavMegaMenuItem.js +16 -16
- package/dist/TopNav/TopNavMenu.js +32 -32
- package/dist/TreeList/TreeList.js +8 -8
- package/dist/TreeList/TreeListBranches.js +11 -11
- package/dist/TreeList/TreeListItem.js +30 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +23 -20
- package/dist/Typeahead/Typeahead.js +12 -12
- package/dist/Typeahead/TypeaheadItem.js +10 -10
- package/dist/VStack/VStack.js +3 -3
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +0 -3
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +0 -3
- package/dist/astryx.css +7 -0
- package/dist/astryx.umd.js +63 -63
- package/dist/astryx.umd.js.map +4 -4
- package/dist/docs-types.d.ts +8 -2
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.d.ts +1 -1
- package/dist/hooks/focusableSelector.d.ts.map +1 -1
- package/dist/hooks/focusableSelector.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +38 -1
- package/dist/hooks/useHotkeys.d.ts +51 -0
- package/dist/hooks/useHotkeys.d.ts.map +1 -0
- package/dist/hooks/useHotkeys.js +160 -0
- package/dist/hooks/useInteractiveRole.d.ts +6 -2
- package/dist/hooks/useInteractiveRole.d.ts.map +1 -1
- package/dist/hooks/useInteractiveRole.js +6 -2
- package/dist/hooks/useKeyboardHint.js +9 -9
- package/dist/hooks/useStreamingText.d.ts +3 -1
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +14 -5
- package/dist/theme/MediaTheme.js +3 -3
- package/dist/theme/Theme.js +7 -7
- package/dist/theme/defineTheme.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +10 -3
- package/dist/theme/hct.d.ts +0 -15
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +9 -9
- package/dist/theme/syntax/SyntaxTheme.js +5 -5
- package/dist/theme/tokens.d.ts +10 -2
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +220 -4
- package/dist/theme/useTheme.d.ts +3 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +73 -6
- package/dist/utils/color.d.ts +42 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/color.js +150 -0
- package/dist/utils/composeEventHandlers.d.ts +30 -0
- package/dist/utils/composeEventHandlers.d.ts.map +1 -0
- package/dist/utils/composeEventHandlers.js +40 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +8 -5
- package/package.json +4 -4
- package/src/AlertDialog/AlertDialog.doc.mjs +4 -0
- package/src/AlertDialog/AlertDialog.tsx +2 -0
- package/src/AlertDialog/useImperativeAlertDialog.tsx +0 -2
- package/src/AppShell/AppShell.tsx +2 -0
- package/src/AspectRatio/AspectRatio.doc.mjs +28 -1
- package/src/AspectRatio/AspectRatio.test.tsx +142 -1
- package/src/AspectRatio/AspectRatio.tsx +70 -10
- package/src/AspectRatio/index.ts +5 -1
- package/src/Avatar/Avatar.doc.mjs +11 -0
- package/src/Avatar/Avatar.test.tsx +32 -1
- package/src/Avatar/Avatar.tsx +14 -22
- package/src/Avatar/AvatarStatusDot.tsx +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +1 -0
- package/src/AvatarGroup/AvatarGroup.tsx +2 -2
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -2
- package/src/Banner/Banner.doc.mjs +8 -0
- package/src/Banner/Banner.test.tsx +38 -0
- package/src/Banner/Banner.tsx +8 -1
- package/src/Calendar/Calendar.doc.mjs +1 -1
- package/src/Calendar/Calendar.test.tsx +122 -17
- package/src/Calendar/Calendar.tsx +26 -5
- package/src/Calendar/dayCellUtils.ts +3 -1
- package/src/Calendar/styles.ts +12 -2
- package/src/Card/Card.doc.mjs +1 -1
- package/src/Card/Card.tsx +16 -6
- package/src/Carousel/Carousel.doc.mjs +12 -12
- package/src/Carousel/Carousel.test.tsx +13 -0
- package/src/Carousel/Carousel.tsx +4 -2
- package/src/Chat/Chat.doc.mjs +1 -1
- package/src/Chat/ChatComposerInput.test.tsx +27 -1
- package/src/Chat/ChatComposerInput.tsx +20 -15
- package/src/Chat/ChatDictationButton.test.tsx +43 -0
- package/src/Chat/ChatDictationButton.tsx +4 -4
- package/src/Chat/ChatLayoutScrollButton.test.tsx +33 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +3 -1
- package/src/Chat/ChatMessageMetadata.test.tsx +32 -0
- package/src/Chat/ChatMessageMetadata.tsx +4 -6
- package/src/Chat/ChatSystemMessage.test.tsx +26 -11
- package/src/Chat/ChatSystemMessage.tsx +7 -7
- package/src/Chat/ChatTokenizedText.test.tsx +29 -16
- package/src/Chat/ChatTokenizedText.tsx +15 -8
- package/src/Chat/ChatToolCalls.test.tsx +55 -0
- package/src/Chat/ChatToolCalls.tsx +10 -12
- package/src/Chat/index.ts +1 -4
- package/src/Chat/useTriggerMenu.tsx +1 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -3
- package/src/CheckboxInput/CheckboxInput.test.tsx +71 -4
- package/src/CheckboxInput/CheckboxInput.tsx +2 -0
- package/src/CheckboxList/CheckboxList.test.tsx +19 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/Citation/Citation.doc.mjs +5 -0
- package/src/ClickableCard/ClickableCard.tsx +45 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +7 -2
- package/src/CodeBlock/CodeBlock.test.tsx +122 -3
- package/src/CodeBlock/CodeBlock.tsx +62 -4
- package/src/Collapsible/Collapsible.doc.mjs +8 -4
- package/src/Collapsible/Collapsible.test.tsx +403 -0
- package/src/Collapsible/Collapsible.tsx +85 -10
- package/src/Collapsible/CollapsibleGroup.doc.mjs +27 -3
- package/src/Collapsible/CollapsibleGroup.test.tsx +314 -0
- package/src/Collapsible/CollapsibleGroup.tsx +97 -9
- package/src/Collapsible/CollapsibleGroupContext.tsx +34 -2
- package/src/Collapsible/index.ts +1 -0
- package/src/Collapsible/useCollapsible.ts +20 -6
- package/src/CommandPalette/CommandPalette.doc.mjs +5 -0
- package/src/CommandPalette/CommandPalette.tsx +5 -3
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +5 -0
- package/src/CommandPalette/CommandPaletteGroup.doc.mjs +10 -0
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteItem.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteList.doc.mjs +9 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +15 -0
- package/src/ContextMenu/ContextMenu.test.tsx +87 -0
- package/src/ContextMenu/ContextMenu.tsx +87 -28
- package/src/ContextMenu/ContextMenuItem.doc.mjs +6 -0
- package/src/DateInput/DateInput.test.tsx +11 -20
- package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -6
- package/src/DateRangeInput/DateRangeInput.test.tsx +31 -44
- package/src/DateTimeInput/DateTimeInput.doc.mjs +3 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +118 -16
- package/src/DateTimeInput/DateTimeInput.tsx +8 -2
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +4 -0
- package/src/Dialog/DialogHeader.doc.mjs +45 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -1
- package/src/DropdownMenu/DropdownMenu.test.tsx +22 -2
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -17
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/Field/Field.test.tsx +1 -4
- package/src/Field/FieldLabel.test.tsx +2 -2
- package/src/FieldStatus/FieldStatus.test.tsx +282 -0
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -3
- package/src/Grid/Grid.test.tsx +43 -18
- package/src/Grid/Grid.tsx +26 -9
- package/src/HoverCard/HoverCard.doc.mjs +6 -6
- package/src/HoverCard/useHoverCard.doc.mjs +5 -5
- package/src/HoverCard/useHoverCard.tsx +9 -2
- package/src/Icon/Icon.test.tsx +41 -29
- package/src/Icon/Icon.tsx +6 -2
- package/src/InputGroup/InputGroup.doc.mjs +1 -0
- package/src/InputGroup/InputGroup.tsx +2 -2
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +185 -0
- package/src/Item/Item.tsx +1 -1
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +221 -2
- package/src/Layer/useLayer.tsx +69 -30
- package/src/Layout/Layout.test.tsx +285 -0
- package/src/Layout/LayoutContent.doc.mjs +12 -0
- package/src/Layout/LayoutPanel.doc.mjs +40 -0
- package/src/Layout/LayoutSlots.test.tsx +364 -0
- package/src/Lightbox/Lightbox.doc.mjs +5 -0
- package/src/Lightbox/Lightbox.test.tsx +123 -2
- package/src/Lightbox/Lightbox.tsx +29 -1
- package/src/Lightbox/useLightbox.tsx +0 -1
- package/src/Link/Link.tsx +0 -2
- package/src/Markdown/Markdown.tsx +9 -7
- package/src/Markdown/parser.perf.test.ts +34 -12
- package/src/MobileNav/MobileNav.test.tsx +56 -0
- package/src/MobileNav/MobileNav.tsx +13 -8
- package/src/NavMenu/NavMenu.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +48 -3
- package/src/NumberInput/NumberInput.tsx +32 -15
- package/src/Outline/Outline.doc.mjs +2 -0
- package/src/Outline/parseOutlineFromMarkdown.test.ts +80 -0
- package/src/OverflowList/OverflowList.test.tsx +416 -0
- package/src/Overlay/Overlay.doc.mjs +6 -0
- package/src/Overlay/Overlay.test.tsx +356 -0
- package/src/Overlay/useOverlay.tsx +0 -3
- package/src/Pagination/Pagination.test.tsx +162 -0
- package/src/Pagination/Pagination.tsx +80 -26
- package/src/Popover/Popover.doc.mjs +6 -6
- package/src/Popover/Popover.test.tsx +65 -0
- package/src/Popover/usePopover.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearch.test.tsx +109 -1
- package/src/PowerSearch/PowerSearch.tsx +37 -16
- package/src/ProgressBar/ProgressBar.doc.mjs +2 -0
- package/src/ProgressBar/ProgressBar.test.tsx +30 -0
- package/src/ProgressBar/ProgressBar.tsx +12 -5
- package/src/RadioList/RadioList.test.tsx +19 -0
- package/src/RadioList/RadioListItem.tsx +9 -4
- package/src/Resizable/ResizeHandle.test.tsx +218 -0
- package/src/Resizable/ResizeHandle.tsx +22 -4
- package/src/SegmentedControl/SegmentedControl.doc.mjs +1 -1
- package/src/SegmentedControl/SegmentedControl.test.tsx +192 -0
- package/src/SegmentedControl/SegmentedControl.tsx +27 -5
- package/src/SegmentedControl/SegmentedControlItem.tsx +9 -4
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.test.tsx +27 -1
- package/src/SideNav/SideNav.doc.mjs +7 -1
- package/src/SideNav/SideNav.test.tsx +66 -0
- package/src/SideNav/SideNav.tsx +6 -2
- package/src/SideNav/SideNavCollapseButton.tsx +4 -3
- package/src/SideNav/SideNavSection.tsx +6 -4
- package/src/SizeContext/SizeContext.test.tsx +226 -0
- package/src/Switch/Switch.doc.mjs +7 -7
- package/src/Switch/Switch.test.tsx +102 -3
- package/src/Switch/Switch.tsx +20 -7
- package/src/TabList/TabList.test.tsx +185 -1
- package/src/TabList/TabMenu.tsx +45 -9
- package/src/Table/BaseTable.tsx +13 -2
- package/src/Table/Table.doc.mjs +6 -1
- package/src/Table/Table.test.tsx +87 -0
- package/src/Table/TableBody.tsx +15 -2
- package/src/Table/TableFooter.tsx +15 -2
- package/src/Table/TableHeader.tsx +15 -2
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +13 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +3 -1
- package/src/Table/plugins/groupedRows/index.ts +7 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +231 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +349 -0
- package/src/Table/plugins/pagination/paginateData.ts +5 -1
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +13 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +1 -1
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +23 -0
- package/src/Table/plugins/selection/useTableSelectionState.tsx +11 -6
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +35 -1
- package/src/Table/plugins/sortable/useTableSortableState.tsx +8 -4
- package/src/Table/useTableGroupedRows.doc.mjs +71 -0
- package/src/TextArea/TextArea.test.tsx +3 -3
- package/src/TextInput/TextInput.test.tsx +3 -3
- package/src/Thumbnail/Thumbnail.test.tsx +36 -2
- package/src/Thumbnail/Thumbnail.tsx +4 -2
- package/src/TimeInput/TimeInput.test.tsx +37 -0
- package/src/TimeInput/TimeInput.tsx +11 -1
- package/src/Timestamp/Timestamp.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +52 -0
- package/src/Timestamp/Timestamp.tsx +30 -16
- package/src/Toast/Toast.tsx +11 -3
- package/src/Toast/ToastViewport.test.tsx +64 -0
- package/src/Toast/ToastViewport.tsx +12 -0
- package/src/Toast/useToast.test.tsx +258 -0
- package/src/Toast/useToast.tsx +41 -0
- package/src/ToggleButton/ToggleButton.doc.mjs +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +54 -0
- package/src/Tokenizer/Tokenizer.tsx +5 -4
- package/src/Tooltip/Tooltip.doc.mjs +6 -6
- package/src/Tooltip/useTooltip.doc.mjs +5 -5
- package/src/Tooltip/useTooltip.tsx +12 -2
- package/src/TopNav/TopNav.doc.mjs +1 -1
- package/src/TopNav/TopNav.test.tsx +23 -7
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +9 -2
- package/src/TreeList/TreeList.doc.mjs +2 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +19 -0
- package/src/Typeahead/BaseTypeahead.tsx +5 -2
- package/src/Typeahead/Typeahead.doc.mjs +1 -1
- package/src/Typeahead/Typeahead.test.tsx +45 -1
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -3
- package/src/__tests__/TestIcon.tsx +26 -0
- package/src/__tests__/fastRoleQueries.ts +66 -0
- package/src/docPropReferences.test.ts +178 -0
- package/src/docs-types.ts +9 -1
- package/src/hooks/focusableSelector.ts +1 -1
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useFocusTrap.doc.mjs +4 -2
- package/src/hooks/useFocusTrap.test.tsx +149 -1
- package/src/hooks/useFocusTrap.ts +50 -1
- package/src/hooks/useHotkeys.doc.mjs +52 -0
- package/src/hooks/useHotkeys.test.ts +245 -0
- package/src/hooks/useHotkeys.ts +203 -0
- package/src/hooks/useInteractiveRole.ts +12 -4
- package/src/hooks/useStreamingText.test.ts +54 -19
- package/src/hooks/useStreamingText.ts +16 -5
- package/src/hooks/useTreeFocus.test.tsx +1 -3
- package/src/reset.css +29 -0
- package/src/theme/SyntaxTheme.doc.mjs +4 -4
- package/src/theme/defineTheme.ts +4 -13
- package/src/theme/derivedVarRegistry.test.ts +2 -2
- package/src/theme/expandColorScale.test.ts +29 -0
- package/src/theme/expandColorScale.ts +11 -6
- package/src/theme/hct.ts +9 -17
- package/src/theme/themingTargets.test.ts +353 -0
- package/src/theme/tokens.test.ts +182 -9
- package/src/theme/tokens.ts +239 -4
- package/src/theme/useTheme.test.tsx +126 -2
- package/src/theme/useTheme.ts +87 -6
- package/src/utils/color.test.ts +133 -0
- package/src/utils/color.ts +148 -0
- package/src/utils/composeEventHandlers.test.ts +71 -0
- package/src/utils/composeEventHandlers.ts +44 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/mergeProps.test.ts +166 -0
- package/src/utils/sharedResizeObserver.test.ts +2 -2
- package/src/utils/timeParser.test.ts +13 -0
- package/src/utils/timeParser.ts +8 -5
- package/dist/Carousel/carousel.markers.stylex.d.ts +0 -7
- package/dist/Carousel/carousel.markers.stylex.d.ts.map +0 -1
- package/dist/Carousel/carousel.markers.stylex.js +0 -12
- package/src/Carousel/carousel.markers.stylex.ts +0 -10
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
13
|
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
+
// getButton/queryButton instead of getByRole('button', {name}): the closed
|
|
16
|
+
// popover keeps a two-month Calendar (~85 role=button nodes) mounted, which
|
|
17
|
+
// made every role+name query compute ~85 accessible names through jsdom's
|
|
18
|
+
// slow getComputedStyle (~450ms per query). See fastRoleQueries.ts.
|
|
19
|
+
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
15
20
|
import {DateRangeInput} from './DateRangeInput';
|
|
16
21
|
import type {DateRange} from './DateRangeInput';
|
|
17
22
|
|
|
@@ -53,7 +58,7 @@ describe('DateRangeInput', () => {
|
|
|
53
58
|
hasClear={false}
|
|
54
59
|
/>,
|
|
55
60
|
);
|
|
56
|
-
const trigger =
|
|
61
|
+
const trigger = getButton(/Range:/);
|
|
57
62
|
expect(trigger.textContent).toMatch(/Mar/);
|
|
58
63
|
expect(trigger.textContent).toMatch(/15/);
|
|
59
64
|
expect(trigger.textContent).toMatch(/22/);
|
|
@@ -93,13 +98,13 @@ describe('DateRangeInput', () => {
|
|
|
93
98
|
onChange={() => {}}
|
|
94
99
|
/>,
|
|
95
100
|
);
|
|
96
|
-
const trigger =
|
|
101
|
+
const trigger = getButton(/Range/);
|
|
97
102
|
expect(trigger).toHaveAttribute('aria-required', 'true');
|
|
98
103
|
});
|
|
99
104
|
|
|
100
105
|
it('does not set aria-required when isRequired is false', () => {
|
|
101
106
|
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
102
|
-
const trigger =
|
|
107
|
+
const trigger = getButton(/Range/);
|
|
103
108
|
expect(trigger).not.toHaveAttribute('aria-required');
|
|
104
109
|
});
|
|
105
110
|
|
|
@@ -112,25 +117,25 @@ describe('DateRangeInput', () => {
|
|
|
112
117
|
onChange={() => {}}
|
|
113
118
|
/>,
|
|
114
119
|
);
|
|
115
|
-
const trigger =
|
|
120
|
+
const trigger = getButton(/Range/);
|
|
116
121
|
expect(trigger).toBeDisabled();
|
|
117
122
|
});
|
|
118
123
|
|
|
119
124
|
it('is not disabled by default', () => {
|
|
120
125
|
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
121
|
-
const trigger =
|
|
126
|
+
const trigger = getButton(/Range/);
|
|
122
127
|
expect(trigger).not.toBeDisabled();
|
|
123
128
|
});
|
|
124
129
|
|
|
125
130
|
it('trigger has aria-haspopup="dialog"', () => {
|
|
126
131
|
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
127
|
-
const trigger =
|
|
132
|
+
const trigger = getButton(/Range/);
|
|
128
133
|
expect(trigger).toHaveAttribute('aria-haspopup', 'dialog');
|
|
129
134
|
});
|
|
130
135
|
|
|
131
136
|
it('trigger has aria-expanded=false by default', () => {
|
|
132
137
|
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
133
|
-
const trigger =
|
|
138
|
+
const trigger = getButton(/Range/);
|
|
134
139
|
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
135
140
|
});
|
|
136
141
|
|
|
@@ -143,7 +148,7 @@ describe('DateRangeInput', () => {
|
|
|
143
148
|
status={{type: 'error', message: 'Required'}}
|
|
144
149
|
/>,
|
|
145
150
|
);
|
|
146
|
-
const trigger =
|
|
151
|
+
const trigger = getButton(/Range/);
|
|
147
152
|
expect(trigger).toHaveAttribute('aria-invalid', 'true');
|
|
148
153
|
});
|
|
149
154
|
|
|
@@ -156,7 +161,7 @@ describe('DateRangeInput', () => {
|
|
|
156
161
|
status={{type: 'warning', message: 'Watch out'}}
|
|
157
162
|
/>,
|
|
158
163
|
);
|
|
159
|
-
const trigger =
|
|
164
|
+
const trigger = getButton(/Range/);
|
|
160
165
|
expect(trigger).not.toHaveAttribute('aria-invalid');
|
|
161
166
|
});
|
|
162
167
|
|
|
@@ -181,7 +186,7 @@ describe('DateRangeInput', () => {
|
|
|
181
186
|
status={{type: 'error', message: 'Please select dates'}}
|
|
182
187
|
/>,
|
|
183
188
|
);
|
|
184
|
-
const trigger =
|
|
189
|
+
const trigger = getButton(/Range/);
|
|
185
190
|
const describedBy = trigger.getAttribute('aria-describedby')!;
|
|
186
191
|
const ids = describedBy.split(' ');
|
|
187
192
|
const found = ids.some(id => {
|
|
@@ -193,9 +198,7 @@ describe('DateRangeInput', () => {
|
|
|
193
198
|
|
|
194
199
|
it('calendar icon button is present', () => {
|
|
195
200
|
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
196
|
-
expect(
|
|
197
|
-
screen.getByRole('button', {name: 'Open calendar'}),
|
|
198
|
-
).toBeInTheDocument();
|
|
201
|
+
expect(getButton('Open calendar')).toBeInTheDocument();
|
|
199
202
|
});
|
|
200
203
|
|
|
201
204
|
it('calendar icon button is disabled when isDisabled', () => {
|
|
@@ -207,7 +210,7 @@ describe('DateRangeInput', () => {
|
|
|
207
210
|
onChange={() => {}}
|
|
208
211
|
/>,
|
|
209
212
|
);
|
|
210
|
-
expect(
|
|
213
|
+
expect(getButton('Open calendar')).toBeDisabled();
|
|
211
214
|
});
|
|
212
215
|
|
|
213
216
|
it('renders with size="lg"', () => {
|
|
@@ -236,9 +239,7 @@ describe('DateRangeInput', () => {
|
|
|
236
239
|
hasClear
|
|
237
240
|
/>,
|
|
238
241
|
);
|
|
239
|
-
expect(
|
|
240
|
-
screen.getByRole('button', {name: 'Clear Range'}),
|
|
241
|
-
).toBeInTheDocument();
|
|
242
|
+
expect(getButton('Clear Range')).toBeInTheDocument();
|
|
242
243
|
});
|
|
243
244
|
|
|
244
245
|
it('does not show clear button when value is null', () => {
|
|
@@ -250,9 +251,7 @@ describe('DateRangeInput', () => {
|
|
|
250
251
|
hasClear
|
|
251
252
|
/>,
|
|
252
253
|
);
|
|
253
|
-
expect(
|
|
254
|
-
screen.queryByRole('button', {name: 'Clear Range'}),
|
|
255
|
-
).not.toBeInTheDocument();
|
|
254
|
+
expect(queryButton('Clear Range')).not.toBeInTheDocument();
|
|
256
255
|
});
|
|
257
256
|
|
|
258
257
|
it('does not show clear button when hasClear is false', () => {
|
|
@@ -268,9 +267,7 @@ describe('DateRangeInput', () => {
|
|
|
268
267
|
hasClear={false}
|
|
269
268
|
/>,
|
|
270
269
|
);
|
|
271
|
-
expect(
|
|
272
|
-
screen.queryByRole('button', {name: 'Clear Range'}),
|
|
273
|
-
).not.toBeInTheDocument();
|
|
270
|
+
expect(queryButton('Clear Range')).not.toBeInTheDocument();
|
|
274
271
|
});
|
|
275
272
|
|
|
276
273
|
it('does not show clear button when disabled', () => {
|
|
@@ -287,9 +284,7 @@ describe('DateRangeInput', () => {
|
|
|
287
284
|
isDisabled
|
|
288
285
|
/>,
|
|
289
286
|
);
|
|
290
|
-
expect(
|
|
291
|
-
screen.queryByRole('button', {name: 'Clear Range'}),
|
|
292
|
-
).not.toBeInTheDocument();
|
|
287
|
+
expect(queryButton('Clear Range')).not.toBeInTheDocument();
|
|
293
288
|
});
|
|
294
289
|
|
|
295
290
|
it('calls onChange with null when clear is clicked', () => {
|
|
@@ -306,7 +301,7 @@ describe('DateRangeInput', () => {
|
|
|
306
301
|
hasClear
|
|
307
302
|
/>,
|
|
308
303
|
);
|
|
309
|
-
fireEvent.click(
|
|
304
|
+
fireEvent.click(getButton('Clear Range'));
|
|
310
305
|
expect(onChange).toHaveBeenCalledWith(null);
|
|
311
306
|
});
|
|
312
307
|
});
|
|
@@ -346,9 +341,7 @@ describe('DateRangeInput', () => {
|
|
|
346
341
|
expect(
|
|
347
342
|
screen.getByRole('group', {name: 'Preset date ranges', hidden: true}),
|
|
348
343
|
).toBeInTheDocument();
|
|
349
|
-
expect(
|
|
350
|
-
screen.getByRole('button', {name: 'Last 7 days', hidden: true}),
|
|
351
|
-
).toBeInTheDocument();
|
|
344
|
+
expect(getButton('Last 7 days')).toBeInTheDocument();
|
|
352
345
|
});
|
|
353
346
|
|
|
354
347
|
it('marks the applied preset with aria-current, not aria-selected', () => {
|
|
@@ -360,16 +353,10 @@ describe('DateRangeInput', () => {
|
|
|
360
353
|
presets={presets}
|
|
361
354
|
/>,
|
|
362
355
|
);
|
|
363
|
-
const active =
|
|
364
|
-
name: 'Last 7 days',
|
|
365
|
-
hidden: true,
|
|
366
|
-
});
|
|
356
|
+
const active = getButton('Last 7 days');
|
|
367
357
|
expect(active).toHaveAttribute('aria-current', 'true');
|
|
368
358
|
expect(active).not.toHaveAttribute('aria-selected');
|
|
369
|
-
const inactive =
|
|
370
|
-
name: 'This month',
|
|
371
|
-
hidden: true,
|
|
372
|
-
});
|
|
359
|
+
const inactive = getButton('This month');
|
|
373
360
|
expect(inactive).not.toHaveAttribute('aria-current');
|
|
374
361
|
});
|
|
375
362
|
});
|
|
@@ -405,7 +392,7 @@ describe('DateRangeInput', () => {
|
|
|
405
392
|
it('shows the reason tooltip on hover when disabled with a reason', async () => {
|
|
406
393
|
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
407
394
|
|
|
408
|
-
const trigger =
|
|
395
|
+
const trigger = getButton(/Range:/);
|
|
409
396
|
const container = trigger.parentElement as HTMLElement;
|
|
410
397
|
const tooltip = screen.getByRole('tooltip', h);
|
|
411
398
|
expect(tooltip).toHaveTextContent('You need the Editor role');
|
|
@@ -427,7 +414,7 @@ describe('DateRangeInput', () => {
|
|
|
427
414
|
|
|
428
415
|
const tooltip = screen.getByRole('tooltip', h);
|
|
429
416
|
await user.tab();
|
|
430
|
-
expect(
|
|
417
|
+
expect(getButton(/Range:/)).toHaveFocus();
|
|
431
418
|
await waitFor(() => {
|
|
432
419
|
expect(tooltip).toHaveAttribute('popover-open');
|
|
433
420
|
});
|
|
@@ -452,14 +439,14 @@ describe('DateRangeInput', () => {
|
|
|
452
439
|
|
|
453
440
|
it('keeps the trigger focusable via aria-disabled when a reason is provided', () => {
|
|
454
441
|
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
455
|
-
const trigger =
|
|
442
|
+
const trigger = getButton(/Range:/);
|
|
456
443
|
expect(trigger).not.toBeDisabled();
|
|
457
444
|
expect(trigger).toHaveAttribute('aria-disabled', 'true');
|
|
458
445
|
});
|
|
459
446
|
|
|
460
447
|
it('links the reason tooltip from the trigger via aria-describedby', () => {
|
|
461
448
|
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
462
|
-
const trigger =
|
|
449
|
+
const trigger = getButton(/Range:/);
|
|
463
450
|
const tooltip = screen.getByRole('tooltip', h);
|
|
464
451
|
expect(trigger.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
465
452
|
});
|
|
@@ -468,7 +455,7 @@ describe('DateRangeInput', () => {
|
|
|
468
455
|
const user = userEvent.setup();
|
|
469
456
|
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
470
457
|
|
|
471
|
-
const trigger =
|
|
458
|
+
const trigger = getButton(/Range:/);
|
|
472
459
|
await user.click(trigger);
|
|
473
460
|
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
474
461
|
|
|
@@ -478,7 +465,7 @@ describe('DateRangeInput', () => {
|
|
|
478
465
|
|
|
479
466
|
it('remains natively disabled when disabled without a reason', () => {
|
|
480
467
|
renderDisabled();
|
|
481
|
-
const trigger =
|
|
468
|
+
const trigger = getButton(/Range:/);
|
|
482
469
|
expect(trigger).toBeDisabled();
|
|
483
470
|
expect(trigger).not.toHaveAttribute('aria-disabled');
|
|
484
471
|
});
|
|
@@ -118,7 +118,7 @@ export const docs = {
|
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
120
|
name: 'timeIncrement',
|
|
121
|
-
type: '
|
|
121
|
+
type: '1 | 5 | 10 | 15 | 30',
|
|
122
122
|
description:
|
|
123
123
|
'Minutes to add or subtract when using arrow keys in the time input.',
|
|
124
124
|
default: '1',
|
|
@@ -413,7 +413,7 @@ export const docsZh = {
|
|
|
413
413
|
},
|
|
414
414
|
{
|
|
415
415
|
name: 'timeIncrement',
|
|
416
|
-
type: '
|
|
416
|
+
type: '1 | 5 | 10 | 15 | 30',
|
|
417
417
|
description: '在时间输入中按箭头键时增减的分钟数。',
|
|
418
418
|
default: '1',
|
|
419
419
|
},
|
|
@@ -469,6 +469,7 @@ export const docsZh = {
|
|
|
469
469
|
description:
|
|
470
470
|
'用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。',
|
|
471
471
|
},
|
|
472
|
+
|
|
472
473
|
],
|
|
473
474
|
theming: {
|
|
474
475
|
targets: [
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
13
|
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
+
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
15
16
|
import {DateTimeInput} from './DateTimeInput';
|
|
16
17
|
import type {ISODateTimeString} from './DateTimeInput';
|
|
17
18
|
|
|
@@ -186,14 +187,14 @@ describe('DateTimeInput', () => {
|
|
|
186
187
|
|
|
187
188
|
it('calendar button is focusable and clickable', () => {
|
|
188
189
|
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
189
|
-
const button =
|
|
190
|
+
const button = getButton('Open calendar');
|
|
190
191
|
expect(button).toBeInTheDocument();
|
|
191
192
|
expect(button).not.toBeDisabled();
|
|
192
193
|
});
|
|
193
194
|
|
|
194
195
|
it('calendar button is disabled when isDisabled is true', () => {
|
|
195
196
|
render(<DateTimeInput label="Meeting" isDisabled onChange={() => {}} />);
|
|
196
|
-
const button =
|
|
197
|
+
const button = getButton('Open calendar');
|
|
197
198
|
expect(button).toBeDisabled();
|
|
198
199
|
});
|
|
199
200
|
|
|
@@ -201,7 +202,7 @@ describe('DateTimeInput', () => {
|
|
|
201
202
|
render(<DateTimeInput label="Meeting" isLoading onChange={() => {}} />);
|
|
202
203
|
expect(screen.getByRole('combobox')).toBeDisabled();
|
|
203
204
|
expect(screen.getByLabelText('Meeting time')).toBeDisabled();
|
|
204
|
-
expect(
|
|
205
|
+
expect(getButton('Open calendar')).toBeDisabled();
|
|
205
206
|
});
|
|
206
207
|
|
|
207
208
|
it('sets aria-busy when isLoading is true', () => {
|
|
@@ -214,6 +215,21 @@ describe('DateTimeInput', () => {
|
|
|
214
215
|
expect(screen.getByRole('combobox')).not.toHaveAttribute('aria-busy');
|
|
215
216
|
});
|
|
216
217
|
|
|
218
|
+
it('sets aria-busy on the time input when isLoading is true', () => {
|
|
219
|
+
render(<DateTimeInput label="Meeting" isLoading onChange={() => {}} />);
|
|
220
|
+
expect(screen.getByLabelText('Meeting time')).toHaveAttribute(
|
|
221
|
+
'aria-busy',
|
|
222
|
+
'true',
|
|
223
|
+
);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('does not set aria-busy on the time input when not loading', () => {
|
|
227
|
+
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
228
|
+
expect(screen.getByLabelText('Meeting time')).not.toHaveAttribute(
|
|
229
|
+
'aria-busy',
|
|
230
|
+
);
|
|
231
|
+
});
|
|
232
|
+
|
|
217
233
|
it('renders status icon for error status', () => {
|
|
218
234
|
render(
|
|
219
235
|
<DateTimeInput
|
|
@@ -270,6 +286,61 @@ describe('DateTimeInput', () => {
|
|
|
270
286
|
expect(found).toBe(true);
|
|
271
287
|
});
|
|
272
288
|
|
|
289
|
+
it('links the description to the time input via aria-describedby', () => {
|
|
290
|
+
render(
|
|
291
|
+
<DateTimeInput
|
|
292
|
+
label="Meeting"
|
|
293
|
+
description="Pick the meeting datetime"
|
|
294
|
+
onChange={() => {}}
|
|
295
|
+
/>,
|
|
296
|
+
);
|
|
297
|
+
// The description covers both halves of the field, so the time input must
|
|
298
|
+
// carry it too — a screen-reader user tabbing into the time half should
|
|
299
|
+
// not lose the field's description.
|
|
300
|
+
const timeInput = screen.getByLabelText('Meeting time');
|
|
301
|
+
const describedBy = timeInput.getAttribute('aria-describedby')!;
|
|
302
|
+
const ids = describedBy.split(' ');
|
|
303
|
+
const found = ids.some(id =>
|
|
304
|
+
document
|
|
305
|
+
.getElementById(id)
|
|
306
|
+
?.textContent?.includes('Pick the meeting datetime'),
|
|
307
|
+
);
|
|
308
|
+
expect(found).toBe(true);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it('links the status message to the time input via aria-describedby', () => {
|
|
312
|
+
render(
|
|
313
|
+
<DateTimeInput
|
|
314
|
+
label="Meeting"
|
|
315
|
+
onChange={() => {}}
|
|
316
|
+
status={{type: 'error', message: 'Invalid datetime'}}
|
|
317
|
+
/>,
|
|
318
|
+
);
|
|
319
|
+
const timeInput = screen.getByLabelText('Meeting time');
|
|
320
|
+
const describedBy = timeInput.getAttribute('aria-describedby')!;
|
|
321
|
+
const ids = describedBy.split(' ');
|
|
322
|
+
const found = ids.some(id =>
|
|
323
|
+
document.getElementById(id)?.textContent?.includes('Invalid datetime'),
|
|
324
|
+
);
|
|
325
|
+
expect(found).toBe(true);
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('links the disabled reason to the time input via aria-describedby', () => {
|
|
329
|
+
HTMLElement.prototype.showPopover = vi.fn();
|
|
330
|
+
HTMLElement.prototype.hidePopover = vi.fn();
|
|
331
|
+
render(
|
|
332
|
+
<DateTimeInput
|
|
333
|
+
label="When"
|
|
334
|
+
onChange={() => {}}
|
|
335
|
+
isDisabled
|
|
336
|
+
disabledMessage="You need the Editor role"
|
|
337
|
+
/>,
|
|
338
|
+
);
|
|
339
|
+
const timeInput = screen.getByLabelText('When time');
|
|
340
|
+
const tooltip = screen.getByRole('tooltip', {hidden: true});
|
|
341
|
+
expect(timeInput.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
342
|
+
});
|
|
343
|
+
|
|
273
344
|
it('handles Escape keydown on date input without error', () => {
|
|
274
345
|
render(<DateTimeInput label="Meeting" onChange={() => {}} />);
|
|
275
346
|
const input = screen.getByRole('combobox');
|
|
@@ -363,16 +434,12 @@ describe('DateTimeInput', () => {
|
|
|
363
434
|
hasClear
|
|
364
435
|
/>,
|
|
365
436
|
);
|
|
366
|
-
expect(
|
|
367
|
-
screen.getByRole('button', {name: 'Clear Meeting'}),
|
|
368
|
-
).toBeInTheDocument();
|
|
437
|
+
expect(getButton('Clear Meeting')).toBeInTheDocument();
|
|
369
438
|
});
|
|
370
439
|
|
|
371
440
|
it('does not show clear button when value is undefined', () => {
|
|
372
441
|
render(<DateTimeInput label="Meeting" onChange={() => {}} hasClear />);
|
|
373
|
-
expect(
|
|
374
|
-
screen.queryByRole('button', {name: 'Clear Meeting'}),
|
|
375
|
-
).not.toBeInTheDocument();
|
|
442
|
+
expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
|
|
376
443
|
});
|
|
377
444
|
|
|
378
445
|
it('does not show clear button when hasClear is false', () => {
|
|
@@ -383,9 +450,7 @@ describe('DateTimeInput', () => {
|
|
|
383
450
|
onChange={() => {}}
|
|
384
451
|
/>,
|
|
385
452
|
);
|
|
386
|
-
expect(
|
|
387
|
-
screen.queryByRole('button', {name: 'Clear Meeting'}),
|
|
388
|
-
).not.toBeInTheDocument();
|
|
453
|
+
expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
|
|
389
454
|
});
|
|
390
455
|
|
|
391
456
|
it('does not show clear button when disabled', () => {
|
|
@@ -398,9 +463,7 @@ describe('DateTimeInput', () => {
|
|
|
398
463
|
isDisabled
|
|
399
464
|
/>,
|
|
400
465
|
);
|
|
401
|
-
expect(
|
|
402
|
-
screen.queryByRole('button', {name: 'Clear Meeting'}),
|
|
403
|
-
).not.toBeInTheDocument();
|
|
466
|
+
expect(queryButton('Clear Meeting')).not.toBeInTheDocument();
|
|
404
467
|
});
|
|
405
468
|
|
|
406
469
|
it('calls onChange with undefined when clear is clicked', () => {
|
|
@@ -413,7 +476,7 @@ describe('DateTimeInput', () => {
|
|
|
413
476
|
hasClear
|
|
414
477
|
/>,
|
|
415
478
|
);
|
|
416
|
-
fireEvent.click(
|
|
479
|
+
fireEvent.click(getButton('Clear Meeting'));
|
|
417
480
|
expect(onChange).toHaveBeenCalledWith(undefined);
|
|
418
481
|
});
|
|
419
482
|
});
|
|
@@ -677,4 +740,43 @@ describe('DateTimeInput', () => {
|
|
|
677
740
|
expect(timeInput).toHaveAttribute('placeholder', 'Select a time');
|
|
678
741
|
});
|
|
679
742
|
});
|
|
743
|
+
|
|
744
|
+
describe('timeIncrement', () => {
|
|
745
|
+
it('steps the time by timeIncrement minutes on ArrowUp', () => {
|
|
746
|
+
const onChange = vi.fn();
|
|
747
|
+
render(
|
|
748
|
+
<DateTimeInput
|
|
749
|
+
label="Meeting"
|
|
750
|
+
value={'2026-03-15T14:30' as ISODateTimeString}
|
|
751
|
+
timeIncrement={15}
|
|
752
|
+
onChange={onChange}
|
|
753
|
+
/>,
|
|
754
|
+
);
|
|
755
|
+
|
|
756
|
+
const timeInput = screen.getByLabelText('Meeting time');
|
|
757
|
+
fireEvent.keyDown(timeInput, {key: 'ArrowUp'});
|
|
758
|
+
|
|
759
|
+
// 14:30 + 15min increment = 14:45
|
|
760
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
761
|
+
expect(onChange.mock.calls[0][0]).toContain('14:45');
|
|
762
|
+
});
|
|
763
|
+
|
|
764
|
+
it('defaults to a 1-minute increment', () => {
|
|
765
|
+
const onChange = vi.fn();
|
|
766
|
+
render(
|
|
767
|
+
<DateTimeInput
|
|
768
|
+
label="Meeting"
|
|
769
|
+
value={'2026-03-15T14:30' as ISODateTimeString}
|
|
770
|
+
onChange={onChange}
|
|
771
|
+
/>,
|
|
772
|
+
);
|
|
773
|
+
|
|
774
|
+
const timeInput = screen.getByLabelText('Meeting time');
|
|
775
|
+
fireEvent.keyDown(timeInput, {key: 'ArrowUp'});
|
|
776
|
+
|
|
777
|
+
// 14:30 + default 1min = 14:31
|
|
778
|
+
expect(onChange).toHaveBeenCalledTimes(1);
|
|
779
|
+
expect(onChange.mock.calls[0][0]).toContain('14:31');
|
|
780
|
+
});
|
|
781
|
+
});
|
|
680
782
|
});
|
|
@@ -86,6 +86,9 @@ export type DateTimeInputHourFormat = '12h' | '24h';
|
|
|
86
86
|
|
|
87
87
|
export type DateTimeInputSize = 'sm' | 'md' | 'lg';
|
|
88
88
|
|
|
89
|
+
/** Supported minute increments for arrow-key stepping of the time field. */
|
|
90
|
+
export type DateTimeInputTimeIncrement = 1 | 5 | 10 | 15 | 30;
|
|
91
|
+
|
|
89
92
|
export type {
|
|
90
93
|
InputStatus as DateTimeInputStatus,
|
|
91
94
|
InputStatusType as DateTimeInputStatusType,
|
|
@@ -287,10 +290,11 @@ export interface DateTimeInputProps extends Omit<
|
|
|
287
290
|
hourFormat?: DateTimeInputHourFormat;
|
|
288
291
|
|
|
289
292
|
/**
|
|
290
|
-
*
|
|
293
|
+
* Minutes added or subtracted when stepping the time field with the arrow
|
|
294
|
+
* keys. Constrained to a set of sensible increments.
|
|
291
295
|
* @default 1
|
|
292
296
|
*/
|
|
293
|
-
timeIncrement?:
|
|
297
|
+
timeIncrement?: DateTimeInputTimeIncrement;
|
|
294
298
|
|
|
295
299
|
/**
|
|
296
300
|
* Whether to show a clear button when a value is set.
|
|
@@ -987,10 +991,12 @@ export function DateTimeInput({
|
|
|
987
991
|
aria-disabled={showsDisabledMessage ? 'true' : undefined}
|
|
988
992
|
readOnly={showsDisabledMessage || undefined}
|
|
989
993
|
aria-label={timeLabel ?? `${label} time`}
|
|
994
|
+
aria-describedby={ariaDescribedBy}
|
|
990
995
|
aria-required={isRequired === true ? 'true' : undefined}
|
|
991
996
|
aria-invalid={
|
|
992
997
|
status?.type === 'error' || !isTimeInputValid ? 'true' : undefined
|
|
993
998
|
}
|
|
999
|
+
aria-busy={isBusy || undefined}
|
|
994
1000
|
{...stylex.props(
|
|
995
1001
|
styles.input,
|
|
996
1002
|
isEffectivelyDisabled && styles.inputDisabled,
|
|
@@ -8,6 +8,10 @@ export const docs = {
|
|
|
8
8
|
group: 'Dialog',
|
|
9
9
|
category: 'Overlay',
|
|
10
10
|
keywords: ["dialog","modal","popup","overlay","lightbox","alert","confirm","prompt","backdrop","focus trap","imperative"],
|
|
11
|
+
// Intentionally a contained isInline preview, not playground.overlay: the
|
|
12
|
+
// component stays visible on load and knobs stay live, whereas a real
|
|
13
|
+
// showModal() overlay makes the page inert — see PlaygroundConfig.overlay
|
|
14
|
+
// in docs-types.ts (#3657).
|
|
11
15
|
playground: {
|
|
12
16
|
defaults: {
|
|
13
17
|
isOpen: true,
|
|
@@ -65,6 +65,51 @@ export const docs = {
|
|
|
65
65
|
default: 'true',
|
|
66
66
|
},
|
|
67
67
|
],
|
|
68
|
+
playground: {
|
|
69
|
+
defaults: {
|
|
70
|
+
title: 'Delete file?',
|
|
71
|
+
subtitle: 'This action cannot be undone.',
|
|
72
|
+
hasDivider: true,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
examples: [
|
|
76
|
+
{
|
|
77
|
+
label: 'Basic',
|
|
78
|
+
code: `
|
|
79
|
+
import {DialogHeader} from '@astryxdesign/core/Dialog';
|
|
80
|
+
|
|
81
|
+
<DialogHeader title="Delete file?" subtitle="This action cannot be undone." />;
|
|
82
|
+
`,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
label: 'With close button',
|
|
86
|
+
code: `
|
|
87
|
+
import {useState} from 'react';
|
|
88
|
+
import {DialogHeader} from '@astryxdesign/core/Dialog';
|
|
89
|
+
|
|
90
|
+
function Header() {
|
|
91
|
+
const [, setIsOpen] = useState(true);
|
|
92
|
+
|
|
93
|
+
// Passing onOpenChange renders a close button that calls it with false.
|
|
94
|
+
return <DialogHeader title="Settings" onOpenChange={setIsOpen} />;
|
|
95
|
+
}
|
|
96
|
+
`,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
label: 'With start and end content',
|
|
100
|
+
code: `
|
|
101
|
+
import {DialogHeader} from '@astryxdesign/core/Dialog';
|
|
102
|
+
import {Icon} from '@astryxdesign/core/Icon';
|
|
103
|
+
import {Badge} from '@astryxdesign/core/Badge';
|
|
104
|
+
|
|
105
|
+
<DialogHeader
|
|
106
|
+
title="Notifications"
|
|
107
|
+
startContent={<Icon icon="chevronLeft" size="sm" />}
|
|
108
|
+
endContent={<Badge label="3" />}
|
|
109
|
+
/>;
|
|
110
|
+
`,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
68
113
|
};
|
|
69
114
|
|
|
70
115
|
export const docsZh = {
|
|
@@ -11,7 +11,7 @@ export const docs = {
|
|
|
11
11
|
theming: {
|
|
12
12
|
targets: [
|
|
13
13
|
{className: 'astryx-dropdown-menu'},
|
|
14
|
-
{className: 'astryx-dropdown-menu-item'},
|
|
14
|
+
{className: 'astryx-dropdown-menu-item', visualProps: ['size']},
|
|
15
15
|
],
|
|
16
16
|
vars: [
|
|
17
17
|
{name: '--_dropdown-menu-radius', description: 'Border radius of the menu popup', default: 'var(--radius-element)', private: true},
|
|
@@ -89,7 +89,7 @@ describe('DropdownMenu', () => {
|
|
|
89
89
|
.getByRole('menu', {hidden: true})
|
|
90
90
|
.closest('[popover]');
|
|
91
91
|
expect(popover?.getAttribute('style')).toContain(
|
|
92
|
-
'position-area:
|
|
92
|
+
'position-area: self-block-end span-self-inline-end',
|
|
93
93
|
);
|
|
94
94
|
});
|
|
95
95
|
|
|
@@ -105,7 +105,27 @@ describe('DropdownMenu', () => {
|
|
|
105
105
|
.getByRole('menu', {hidden: true})
|
|
106
106
|
.closest('[popover]');
|
|
107
107
|
expect(popover?.getAttribute('style')).toContain(
|
|
108
|
-
'position-area:
|
|
108
|
+
'position-area: self-block-start span-self-inline-end',
|
|
109
|
+
);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('emits the direction-independent logical mapping under an RTL ancestor (#3389)', async () => {
|
|
113
|
+
// The self-* position-area keywords resolve against the popover's own
|
|
114
|
+
// inherited direction in the browser, so RTL emits the same string as
|
|
115
|
+
// LTR and the mirroring is pure CSS. jsdom can't verify the geometry —
|
|
116
|
+
// the DropdownMenu RTL Storybook story is the visual proof surface.
|
|
117
|
+
const user = userEvent.setup();
|
|
118
|
+
const {container} = render(
|
|
119
|
+
<div style={{direction: 'rtl'}}>
|
|
120
|
+
<DropdownMenu button={{label: 'Actions'}} items={[{label: 'Item 1'}]} />
|
|
121
|
+
</div>,
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
await user.click(screen.getByRole('button', {name: /Actions/}));
|
|
125
|
+
|
|
126
|
+
const popover = container.querySelector('[popover]');
|
|
127
|
+
expect(popover?.getAttribute('style')).toContain(
|
|
128
|
+
'position-area: self-block-end span-self-inline-end',
|
|
109
129
|
);
|
|
110
130
|
});
|
|
111
131
|
|