@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +161 -1
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -2
- package/dist/AspectRatio/AspectRatio.d.ts +24 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +23 -4
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +58 -19
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +8 -4
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
- package/dist/Banner/Banner.d.ts +49 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +62 -20
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +17 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +26 -7
- package/dist/Calendar/Calendar.d.ts +7 -3
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -23
- package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
- package/dist/Calendar/getInitialFocusDate.js +62 -0
- package/dist/Calendar/styles.d.ts +5 -14
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -15
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -3
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +3 -3
- package/dist/Chat/ChatMessageList.d.ts +22 -3
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +6 -3
- package/dist/Chat/ChatTokenizedText.d.ts +2 -0
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +11 -6
- package/dist/Chat/useChatComposerTokens.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +10 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +3 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -3
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -2
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +82 -23
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +406 -12
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.d.ts +21 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +110 -58
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +3 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +6 -3
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +19 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +74 -26
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -19
- package/dist/Layer/LayerDepthContext.d.ts +52 -0
- package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
- package/dist/Layer/LayerDepthContext.js +66 -0
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/index.d.ts +3 -0
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +4 -0
- package/dist/Layer/layerStack.d.ts +98 -0
- package/dist/Layer/layerStack.d.ts.map +1 -0
- package/dist/Layer/layerStack.js +306 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +128 -8
- package/dist/Layer/useLayerDismissal.d.ts +93 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
- package/dist/Layer/useLayerDismissal.js +91 -0
- package/dist/Lightbox/Lightbox.d.ts +1 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +103 -81
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/parser.d.ts +38 -1
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +182 -32
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MobileNav/MobileNav.d.ts +6 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +61 -36
- package/dist/MultiSelector/MultiSelector.d.ts +32 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +73 -15
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +9 -5
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +54 -104
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -2
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -2
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +3 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +1 -9
- package/dist/Popover/usePopover.d.ts +7 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +40 -21
- package/dist/PowerSearch/PowerSearch.d.ts +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +19 -6
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +14 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +12 -3
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +91 -18
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +4 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +37 -5
- package/dist/Spinner/Spinner.d.ts +3 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +130 -78
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts +140 -0
- package/dist/Stepper/Step.d.ts.map +1 -0
- package/dist/Stepper/Step.js +1045 -0
- package/dist/Stepper/StepStatus.d.ts +24 -0
- package/dist/Stepper/StepStatus.d.ts.map +1 -0
- package/dist/Stepper/StepStatus.js +1 -0
- package/dist/Stepper/Stepper.d.ts +93 -0
- package/dist/Stepper/Stepper.d.ts.map +1 -0
- package/dist/Stepper/Stepper.js +184 -0
- package/dist/Stepper/StepperContext.d.ts +41 -0
- package/dist/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/Stepper/StepperContext.js +34 -0
- package/dist/Stepper/index.d.ts +8 -0
- package/dist/Stepper/index.d.ts.map +1 -0
- package/dist/Stepper/index.js +7 -0
- package/dist/Stepper/stepper.stylex.d.ts +15 -0
- package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
- package/dist/Stepper/stepper.stylex.js +20 -0
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -3
- package/dist/TabList/Tab.d.ts +15 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +32 -7
- package/dist/TabList/TabList.d.ts +46 -7
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +353 -23
- package/dist/TabList/TabListContext.d.ts +11 -1
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +11 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.d.ts.map +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +10 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/TableRow.d.ts +16 -5
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +16 -5
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +43 -5
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Table/types.d.ts +22 -4
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -0
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +6 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +3 -2
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +15 -21
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +22 -7
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +71 -18
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -9
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +7 -4
- package/dist/Tokenizer/Tokenizer.d.ts +14 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +33 -21
- package/dist/Tooltip/Tooltip.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +5 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +39 -24
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +31 -11
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +22 -7
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +119 -37
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +5 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +113 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -4
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +60 -95
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -18
- package/dist/hooks/useMergedRefs.d.ts +18 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/utils/groupItems.d.ts +5 -1
- package/dist/utils/groupItems.d.ts.map +1 -1
- package/dist/utils/groupItems.js +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +10 -1
- package/dist/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/af-ZA.json +6 -6
- package/locales/ar-SA.json +6 -6
- package/locales/ca-ES.json +5 -5
- package/locales/cs-CZ.json +6 -6
- package/locales/da-DK.json +6 -6
- package/locales/de-DE.json +6 -6
- package/locales/el-GR.json +6 -6
- package/locales/en.json +163 -11
- package/locales/es-ES.json +5 -5
- package/locales/fi-FI.json +6 -6
- package/locales/fr-FR.json +6 -6
- package/locales/he-IL.json +6 -6
- package/locales/hu-HU.json +6 -6
- package/locales/it-IT.json +6 -6
- package/locales/ja-JP.json +6 -6
- package/locales/ko-KR.json +6 -6
- package/locales/nl-NL.json +6 -6
- package/locales/no-NO.json +6 -6
- package/locales/pl-PL.json +6 -6
- package/locales/pseudo.json +114 -0
- package/locales/pt-BR.json +6 -6
- package/locales/pt-PT.json +6 -6
- package/locales/ro-RO.json +6 -6
- package/locales/ru-RU.json +6 -6
- package/locales/sr-SP.json +6 -6
- package/locales/sv-SE.json +6 -6
- package/locales/tr-TR.json +6 -6
- package/locales/uk-UA.json +6 -6
- package/locales/vi-VN.json +6 -6
- package/locales/zh-CN.json +6 -6
- package/locales/zh-TW.json +6 -6
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AppShell/AppShell.tsx +3 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
- package/src/AspectRatio/AspectRatio.test.tsx +57 -10
- package/src/AspectRatio/AspectRatio.tsx +40 -1
- package/src/Avatar/Avatar.doc.mjs +14 -3
- package/src/Avatar/Avatar.test.tsx +97 -0
- package/src/Avatar/Avatar.tsx +125 -52
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +15 -6
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
- package/src/Banner/Banner.doc.mjs +22 -11
- package/src/Banner/Banner.test.tsx +177 -25
- package/src/Banner/Banner.tsx +93 -27
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +17 -4
- package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +24 -1
- package/src/Button/Button.test.tsx +32 -4
- package/src/Button/Button.tsx +12 -5
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +7 -6
- package/src/Calendar/Calendar.test.tsx +143 -0
- package/src/Calendar/Calendar.tsx +30 -26
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.tsx +3 -2
- package/src/Chat/ChatComposerInput.tsx +5 -1
- package/src/Chat/ChatLayout.tsx +3 -2
- package/src/Chat/ChatMessageList.doc.mjs +9 -1
- package/src/Chat/ChatMessageList.test.tsx +46 -0
- package/src/Chat/ChatMessageList.tsx +28 -4
- package/src/Chat/ChatTokenizedText.tsx +17 -10
- package/src/Chat/useChatComposerTokens.ts +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +8 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
- package/src/ComplexSelector/ComplexSelector.tsx +1 -3
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.tsx +55 -2
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +108 -24
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
- package/src/DateRangeInput/DateRangeInput.tsx +4 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
- package/src/DateTimeInput/DateTimeInput.tsx +556 -24
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +429 -2
- package/src/Dialog/Dialog.tsx +133 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
- package/src/Field/Field.doc.mjs +13 -2
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -3
- package/src/HoverCard/HoverCard.doc.mjs +13 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +143 -3
- package/src/HoverCard/useHoverCard.tsx +104 -33
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.tsx +2 -19
- package/src/Layer/LayerDepthContext.tsx +62 -0
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/index.ts +9 -0
- package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
- package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
- package/src/Layer/layerStack.ts +362 -0
- package/src/Layer/useLayer.test.tsx +324 -15
- package/src/Layer/useLayer.tsx +164 -8
- package/src/Layer/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/incremental.test.ts +16 -2
- package/src/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +96 -1
- package/src/Markdown/parser.test.ts +178 -2
- package/src/Markdown/parser.ts +253 -32
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
- package/src/MultiSelector/MultiSelector.test.tsx +311 -0
- package/src/MultiSelector/MultiSelector.tsx +151 -15
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +9 -5
- package/src/NumberInput/NumberInput.doc.mjs +31 -7
- package/src/NumberInput/NumberInput.test.tsx +436 -8
- package/src/NumberInput/NumberInput.tsx +62 -114
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.test.tsx +14 -0
- package/src/Popover/Popover.tsx +1 -9
- package/src/Popover/usePopover.tsx +57 -32
- package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
- package/src/PowerSearch/PowerSearch.test.tsx +240 -1
- package/src/PowerSearch/PowerSearch.tsx +34 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
- package/src/PowerSearch/types.ts +2 -0
- package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
- package/src/PowerSearch/usePowerSearchSource.ts +13 -3
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +346 -1
- package/src/Selector/Selector.tsx +148 -21
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavHeading.tsx +12 -12
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +55 -3
- package/src/Spinner/Spinner.test.tsx +147 -1
- package/src/Spinner/Spinner.tsx +120 -101
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +98 -0
- package/src/Stepper/Step.tsx +1638 -0
- package/src/Stepper/StepStatus.ts +26 -0
- package/src/Stepper/Stepper.doc.mjs +370 -0
- package/src/Stepper/Stepper.test.tsx +1024 -0
- package/src/Stepper/Stepper.tsx +258 -0
- package/src/Stepper/StepperContext.ts +71 -0
- package/src/Stepper/index.ts +18 -0
- package/src/Stepper/stepper.stylex.ts +19 -0
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +6 -2
- package/src/TabList/Tab.doc.mjs +13 -1
- package/src/TabList/Tab.tsx +67 -7
- package/src/TabList/TabList.doc.mjs +22 -6
- package/src/TabList/TabList.test.tsx +559 -0
- package/src/TabList/TabList.tsx +490 -22
- package/src/TabList/TabListContext.ts +13 -2
- package/src/TabList/TabMenu.tsx +3 -2
- package/src/TabList/index.ts +6 -2
- package/src/Table/BaseTable.tsx +12 -4
- package/src/Table/Table.doc.mjs +9 -2
- package/src/Table/Table.test.tsx +132 -14
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +40 -0
- package/src/Table/TableFooter.doc.mjs +40 -0
- package/src/Table/TableHeader.doc.mjs +40 -0
- package/src/Table/TableRow.tsx +16 -5
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
- package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
- package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/types.ts +22 -4
- package/src/Table/useBaseTablePlugins.ts +5 -0
- package/src/Table/useTableGroupedRows.doc.mjs +5 -4
- package/src/Table/useTablePagination.doc.mjs +7 -0
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +31 -0
- package/src/Text/Text.test.tsx +67 -1
- package/src/Text/Text.tsx +6 -3
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +37 -24
- package/src/TextInput/TextInput.doc.mjs +10 -0
- package/src/TextInput/TextInput.tsx +3 -2
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timestamp/Timestamp.test.tsx +58 -0
- package/src/Timestamp/Timestamp.tsx +12 -10
- package/src/Toast/Toast.doc.mjs +26 -12
- package/src/Toast/Toast.tsx +28 -4
- package/src/Toast/ToastViewport.test.tsx +536 -8
- package/src/Toast/ToastViewport.tsx +81 -12
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +15 -10
- package/src/Token/TokenLink.tsx +14 -5
- package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +53 -24
- package/src/Toolbar/Toolbar.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.test.tsx +32 -0
- package/src/Tooltip/Tooltip.tsx +5 -0
- package/src/Tooltip/useTooltip.tsx +47 -24
- package/src/TopNav/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -5
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -7
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
- package/src/Typeahead/BaseTypeahead.tsx +181 -39
- package/src/Typeahead/Typeahead.doc.mjs +11 -0
- package/src/Typeahead/Typeahead.test.tsx +203 -0
- package/src/Typeahead/Typeahead.tsx +12 -2
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useFocusTrap.test.tsx +14 -0
- package/src/hooks/useFocusTrap.ts +62 -111
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.ts +3 -18
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -0
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +1 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/derivedVarRegistry.test.ts +26 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/utils/groupItems.ts +12 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/sharedResizeObserver.ts +10 -2
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
|
@@ -334,6 +334,106 @@ describe('BottomSheet', () => {
|
|
|
334
334
|
expect(onOpenChange).toHaveBeenCalledWith(false);
|
|
335
335
|
});
|
|
336
336
|
|
|
337
|
+
it('ignores Escape while an IME composition is active', () => {
|
|
338
|
+
const onOpenChange = vi.fn();
|
|
339
|
+
render(
|
|
340
|
+
<BottomSheet isOpen onOpenChange={onOpenChange} label="Filters">
|
|
341
|
+
<input aria-label="Search" />
|
|
342
|
+
</BottomSheet>,
|
|
343
|
+
);
|
|
344
|
+
const dialog = screen.getByRole('dialog');
|
|
345
|
+
|
|
346
|
+
fireEvent.keyDown(dialog, {key: 'Escape', isComposing: true});
|
|
347
|
+
fireEvent.keyDown(dialog, {key: 'Escape', keyCode: 229});
|
|
348
|
+
|
|
349
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
it('claims the composing Escape so no native close request follows', () => {
|
|
353
|
+
const onOpenChange = vi.fn();
|
|
354
|
+
render(
|
|
355
|
+
<BottomSheet isOpen onOpenChange={onOpenChange} label="Filters">
|
|
356
|
+
<input aria-label="Search" />
|
|
357
|
+
</BottomSheet>,
|
|
358
|
+
);
|
|
359
|
+
const dialog = screen.getByRole('dialog');
|
|
360
|
+
|
|
361
|
+
// An unclaimed Escape lets the browser raise its own close request, which
|
|
362
|
+
// arrives as `cancel` and dismisses the sheet on the same keypress. The
|
|
363
|
+
// guard has to swallow the composing Escape, not merely skip dismissal.
|
|
364
|
+
const wasNotClaimed = fireEvent.keyDown(dialog, {
|
|
365
|
+
key: 'Escape',
|
|
366
|
+
isComposing: true,
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
expect(wasNotClaimed).toBe(false);
|
|
370
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('keeps a form sheet open when Escape cancels a field composition', () => {
|
|
374
|
+
const onOpenChange = vi.fn();
|
|
375
|
+
render(
|
|
376
|
+
<BottomSheet
|
|
377
|
+
isOpen
|
|
378
|
+
purpose="form"
|
|
379
|
+
onOpenChange={onOpenChange}
|
|
380
|
+
label="Edit profile">
|
|
381
|
+
<input aria-label="Name" />
|
|
382
|
+
</BottomSheet>,
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
// The reported path: the keydown starts at the composing field and bubbles
|
|
386
|
+
// to the sheet's <dialog>, so the guard has to survive the trip.
|
|
387
|
+
fireEvent.keyDown(screen.getByRole('textbox', {name: 'Name'}), {
|
|
388
|
+
key: 'Escape',
|
|
389
|
+
isComposing: true,
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
it('still dismisses on the Escape after a composition is cancelled', () => {
|
|
396
|
+
const onOpenChange = vi.fn();
|
|
397
|
+
render(
|
|
398
|
+
<BottomSheet isOpen onOpenChange={onOpenChange} label="Filters">
|
|
399
|
+
<input aria-label="Search" />
|
|
400
|
+
</BottomSheet>,
|
|
401
|
+
);
|
|
402
|
+
const dialog = screen.getByRole('dialog');
|
|
403
|
+
|
|
404
|
+
fireEvent.keyDown(dialog, {key: 'Escape', isComposing: true});
|
|
405
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
406
|
+
|
|
407
|
+
fireEvent.keyDown(dialog, {key: 'Escape'});
|
|
408
|
+
|
|
409
|
+
expect(onOpenChange).toHaveBeenCalledWith(false);
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
it('leaves the IME the composition keys that are not Escape', () => {
|
|
413
|
+
const onOpenChange = vi.fn();
|
|
414
|
+
render(
|
|
415
|
+
<BottomSheet isOpen onOpenChange={onOpenChange} label="Filters">
|
|
416
|
+
<input aria-label="Search" />
|
|
417
|
+
</BottomSheet>,
|
|
418
|
+
);
|
|
419
|
+
const dialog = screen.getByRole('dialog');
|
|
420
|
+
|
|
421
|
+
// Enter commits a candidate and the arrows walk the candidate window. The
|
|
422
|
+
// sheet must claim neither, or the IME loses keys it owns.
|
|
423
|
+
const enterUnclaimed = fireEvent.keyDown(dialog, {
|
|
424
|
+
key: 'Enter',
|
|
425
|
+
isComposing: true,
|
|
426
|
+
});
|
|
427
|
+
const arrowUnclaimed = fireEvent.keyDown(dialog, {
|
|
428
|
+
key: 'ArrowDown',
|
|
429
|
+
isComposing: true,
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
expect(enterUnclaimed).toBe(true);
|
|
433
|
+
expect(arrowUnclaimed).toBe(true);
|
|
434
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
435
|
+
});
|
|
436
|
+
|
|
337
437
|
it('requests close when the scrim (dialog element itself) is clicked', () => {
|
|
338
438
|
const onOpenChange = vi.fn();
|
|
339
439
|
render(
|
|
@@ -474,6 +574,29 @@ describe('BottomSheet', () => {
|
|
|
474
574
|
expect(onOpenChange).toHaveBeenCalledWith(false);
|
|
475
575
|
});
|
|
476
576
|
|
|
577
|
+
it('ignores Escape while an IME composition is active', () => {
|
|
578
|
+
const onOpenChange = vi.fn();
|
|
579
|
+
render(
|
|
580
|
+
<BottomSheet
|
|
581
|
+
isOpen
|
|
582
|
+
hasScrim={false}
|
|
583
|
+
onOpenChange={onOpenChange}
|
|
584
|
+
label="Filters">
|
|
585
|
+
<input aria-label="Search" />
|
|
586
|
+
</BottomSheet>,
|
|
587
|
+
);
|
|
588
|
+
|
|
589
|
+
// Escape is this sheet's only keyboard route out — there is no native
|
|
590
|
+
// close request behind it — so the guard is all that stands between a
|
|
591
|
+
// composing CJK user and a dismissed sheet.
|
|
592
|
+
fireEvent.keyDown(screen.getByRole('dialog'), {
|
|
593
|
+
key: 'Escape',
|
|
594
|
+
isComposing: true,
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
598
|
+
});
|
|
599
|
+
|
|
477
600
|
it('still dismisses on a downward swipe past the threshold', () => {
|
|
478
601
|
const onOpenChange = vi.fn();
|
|
479
602
|
render(
|
|
@@ -38,7 +38,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
38
38
|
import type {BaseProps} from '../BaseProps';
|
|
39
39
|
import type {DialogPurpose} from '../Dialog';
|
|
40
40
|
import {colorVars, durationVars, easeVars} from '../theme/tokens.stylex';
|
|
41
|
-
import {useDevWarning, useScrollLock} from '../hooks';
|
|
41
|
+
import {isImeKeyEvent, useDevWarning, useScrollLock} from '../hooks';
|
|
42
42
|
import {
|
|
43
43
|
BottomSheetPanel,
|
|
44
44
|
type BottomSheetPanelMotion,
|
|
@@ -314,6 +314,9 @@ function StandaloneBottomSheet({
|
|
|
314
314
|
|
|
315
315
|
const handleCancel = useCallback(
|
|
316
316
|
(event: React.SyntheticEvent<HTMLDialogElement>) => {
|
|
317
|
+
// No IME guard here: `cancel` is a plain Event carrying no composition
|
|
318
|
+
// state, and handleKeyDown claims a composing Escape before the browser
|
|
319
|
+
// can raise the close request that would arrive here.
|
|
317
320
|
event.preventDefault();
|
|
318
321
|
dismissOnEscape();
|
|
319
322
|
},
|
|
@@ -321,10 +324,20 @@ function StandaloneBottomSheet({
|
|
|
321
324
|
);
|
|
322
325
|
const handleKeyDown = useCallback(
|
|
323
326
|
(event: React.KeyboardEvent<HTMLDialogElement>) => {
|
|
324
|
-
if (event.key
|
|
325
|
-
|
|
326
|
-
dismissOnEscape();
|
|
327
|
+
if (event.key !== 'Escape') {
|
|
328
|
+
return;
|
|
327
329
|
}
|
|
330
|
+
// Claim the key before reading it: an unclaimed Escape lets the browser
|
|
331
|
+
// raise its own close request, which lands on handleCancel and dismisses
|
|
332
|
+
// on the same keypress.
|
|
333
|
+
event.preventDefault();
|
|
334
|
+
// An IME fires this keydown to cancel an in-progress composition, ahead
|
|
335
|
+
// of compositionend. It is a composition cancel, not a dismissal command
|
|
336
|
+
// — see utils/ime; Dialog and BottomSheetSwitcher guard the same way.
|
|
337
|
+
if (isImeKeyEvent(event.nativeEvent)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
dismissOnEscape();
|
|
328
341
|
},
|
|
329
342
|
[dismissOnEscape],
|
|
330
343
|
);
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
useFocusTrap,
|
|
52
52
|
useScrollLock,
|
|
53
53
|
} from '../hooks';
|
|
54
|
-
import {composeEventHandlers, mergeProps
|
|
54
|
+
import {composeEventHandlers, mergeProps} from '../utils';
|
|
55
55
|
import {BottomSheetEdgeTint} from './BottomSheetEdgeTint';
|
|
56
56
|
import {
|
|
57
57
|
BottomSheetSwitcherContext,
|
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
type BottomSheetSwitcherTransitionEvent,
|
|
61
61
|
} from './BottomSheetSwitcherContext';
|
|
62
62
|
|
|
63
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
63
64
|
const styles = stylex.create({
|
|
64
65
|
dialog: {
|
|
65
66
|
position: 'fixed',
|
|
@@ -621,7 +622,7 @@ export function BottomSheetSwitcher({
|
|
|
621
622
|
<dialog
|
|
622
623
|
{...props}
|
|
623
624
|
{...dialogPresentationProps}
|
|
624
|
-
ref={
|
|
625
|
+
ref={useMergedRefs(ref, dialogRef, containerRef)}
|
|
625
626
|
aria-label={ariaLabel}
|
|
626
627
|
aria-modal={isModal ? 'true' : undefined}
|
|
627
628
|
onCancel={composeEventHandlers(onCancel, handleCancel)}
|
|
@@ -38,11 +38,12 @@ import {
|
|
|
38
38
|
spacingVars,
|
|
39
39
|
typeScaleVars,
|
|
40
40
|
radiusVars,
|
|
41
|
+
fontWeightVars,
|
|
41
42
|
} from '../theme/tokens.stylex';
|
|
42
43
|
import {BreadcrumbContext, type BreadcrumbsVariant} from './Breadcrumbs';
|
|
43
44
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
44
45
|
import type {LinkComponentType} from '../Link/types';
|
|
45
|
-
import {mergeProps
|
|
46
|
+
import {mergeProps} from '../utils';
|
|
46
47
|
import type {BaseProps} from '../BaseProps';
|
|
47
48
|
import {themeProps} from '../utils/themeProps';
|
|
48
49
|
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
@@ -64,6 +65,7 @@ import {
|
|
|
64
65
|
} from '../DropdownMenu/menuItemRoles';
|
|
65
66
|
import type {DropdownMenuOption} from '../DropdownMenu/DropdownMenu';
|
|
66
67
|
|
|
68
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
67
69
|
// =============================================================================
|
|
68
70
|
// Props
|
|
69
71
|
// =============================================================================
|
|
@@ -186,7 +188,7 @@ const itemStyles = stylex.create({
|
|
|
186
188
|
color: colorVars['--color-text-secondary'],
|
|
187
189
|
},
|
|
188
190
|
current: {
|
|
189
|
-
fontWeight: '
|
|
191
|
+
fontWeight: fontWeightVars['--font-weight-semibold'],
|
|
190
192
|
},
|
|
191
193
|
defaultCurrent: {
|
|
192
194
|
color: colorVars['--color-text-primary'],
|
|
@@ -346,6 +348,8 @@ export function BreadcrumbItem({
|
|
|
346
348
|
}
|
|
347
349
|
});
|
|
348
350
|
|
|
351
|
+
const mergedItemRef = useMergedRefs(ref, liRef);
|
|
352
|
+
|
|
349
353
|
const content = (
|
|
350
354
|
<>
|
|
351
355
|
{startIcon && <span {...stylex.props(itemStyles.icon)}>{startIcon}</span>}
|
|
@@ -356,7 +360,7 @@ export function BreadcrumbItem({
|
|
|
356
360
|
if (isCurrent) {
|
|
357
361
|
return (
|
|
358
362
|
<li
|
|
359
|
-
ref={
|
|
363
|
+
ref={mergedItemRef}
|
|
360
364
|
{...mergeProps(
|
|
361
365
|
themeProps('breadcrumb-item', {variant: ctx.variant}),
|
|
362
366
|
stylex.props(
|
|
@@ -405,7 +409,7 @@ export function BreadcrumbItem({
|
|
|
405
409
|
// The effect handles adding aria-current for auto-last detection.
|
|
406
410
|
return (
|
|
407
411
|
<li
|
|
408
|
-
ref={
|
|
412
|
+
ref={mergedItemRef}
|
|
409
413
|
{...mergeProps(
|
|
410
414
|
themeProps('breadcrumb-item', {variant: ctx.variant}),
|
|
411
415
|
stylex.props(
|
|
@@ -615,7 +619,7 @@ function BreadcrumbMenuTrigger({
|
|
|
615
619
|
return (
|
|
616
620
|
<>
|
|
617
621
|
<button
|
|
618
|
-
ref={
|
|
622
|
+
ref={useMergedRefs(
|
|
619
623
|
ref as React.Ref<HTMLButtonElement>,
|
|
620
624
|
buttonRef,
|
|
621
625
|
popover.triggerRef,
|
|
@@ -150,6 +150,28 @@ export const docs = {
|
|
|
150
150
|
description:
|
|
151
151
|
'Async click handler. Shows loading state while the returned promise is pending.',
|
|
152
152
|
},
|
|
153
|
+
{
|
|
154
|
+
name: 'href',
|
|
155
|
+
type: 'string',
|
|
156
|
+
description:
|
|
157
|
+
'When provided, renders the button as a link element (<a> or custom link component).',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'as',
|
|
161
|
+
type: 'ComponentType',
|
|
162
|
+
description:
|
|
163
|
+
'Custom link component to use when href is provided (e.g. Next.js Link).',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'target',
|
|
167
|
+
type: 'string',
|
|
168
|
+
description: 'HTML target attribute when rendered as a link (e.g. "_blank").',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'rel',
|
|
172
|
+
type: 'string',
|
|
173
|
+
description: 'HTML rel attribute when rendered as a link (e.g. "noopener noreferrer").',
|
|
174
|
+
},
|
|
153
175
|
],
|
|
154
176
|
playground: {
|
|
155
177
|
defaults: {
|
|
@@ -159,7 +181,7 @@ export const docs = {
|
|
|
159
181
|
},
|
|
160
182
|
theming: {
|
|
161
183
|
targets: [
|
|
162
|
-
{className: 'astryx-button', visualProps: ['size', 'variant']},
|
|
184
|
+
{className: 'astryx-button', visualProps: ['size', 'variant', 'elevation']},
|
|
163
185
|
],
|
|
164
186
|
vars: [
|
|
165
187
|
{name: '--_button-radius', description: 'Border radius', default: 'var(--radius-element)', private: true},
|
|
@@ -240,6 +262,7 @@ export const docsZh = {
|
|
|
240
262
|
visualProps: [
|
|
241
263
|
'size',
|
|
242
264
|
'variant',
|
|
265
|
+
'elevation',
|
|
243
266
|
],
|
|
244
267
|
},
|
|
245
268
|
],
|
|
@@ -151,6 +151,19 @@ describe('Button', () => {
|
|
|
151
151
|
expect(ref).toHaveBeenCalledWith(expect.any(HTMLButtonElement));
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
+
it('keeps its merged ref attached across unrelated rerenders', () => {
|
|
155
|
+
const ref = vi.fn();
|
|
156
|
+
const {rerender} = render(<Button label="Test" ref={ref} />);
|
|
157
|
+
const button = screen.getByRole('button');
|
|
158
|
+
expect(ref).toHaveBeenLastCalledWith(button);
|
|
159
|
+
ref.mockClear();
|
|
160
|
+
|
|
161
|
+
rerender(<Button label="Test" variant="primary" ref={ref} />);
|
|
162
|
+
|
|
163
|
+
expect(ref).not.toHaveBeenCalled();
|
|
164
|
+
expect(screen.getByRole('button')).toBe(button);
|
|
165
|
+
});
|
|
166
|
+
|
|
154
167
|
// endContent tests
|
|
155
168
|
it('renders endContent after label', () => {
|
|
156
169
|
render(
|
|
@@ -463,6 +476,21 @@ describe('Button', () => {
|
|
|
463
476
|
});
|
|
464
477
|
|
|
465
478
|
describe('elevation', () => {
|
|
479
|
+
it('reflects each elevation level as a theme attribute', () => {
|
|
480
|
+
const attrFor = (elevation: 'none' | 'low' | 'med' | 'high') => {
|
|
481
|
+
const {container} = render(
|
|
482
|
+
<Button label="Save" elevation={elevation} />,
|
|
483
|
+
);
|
|
484
|
+
return container
|
|
485
|
+
.querySelector('button')!
|
|
486
|
+
.getAttribute('data-elevation');
|
|
487
|
+
};
|
|
488
|
+
expect(attrFor('none')).toBe('none');
|
|
489
|
+
expect(attrFor('low')).toBe('low');
|
|
490
|
+
expect(attrFor('med')).toBe('med');
|
|
491
|
+
expect(attrFor('high')).toBe('high');
|
|
492
|
+
});
|
|
493
|
+
|
|
466
494
|
it('renders a distinct class for each elevation level', () => {
|
|
467
495
|
const classFor = (elevation: 'none' | 'low' | 'med' | 'high') => {
|
|
468
496
|
const {container} = render(
|
|
@@ -480,13 +508,13 @@ describe('Button', () => {
|
|
|
480
508
|
});
|
|
481
509
|
|
|
482
510
|
it('defaults to flat (elevation none)', () => {
|
|
483
|
-
const {container
|
|
511
|
+
const {container} = render(<Button label="Save" />);
|
|
512
|
+
const button = container.querySelector('button')!;
|
|
513
|
+
expect(button).toHaveAttribute('data-elevation', 'none');
|
|
484
514
|
const {container: none} = render(
|
|
485
515
|
<Button label="Save" elevation="none" />,
|
|
486
516
|
);
|
|
487
|
-
expect(
|
|
488
|
-
none.querySelector('button')!.className,
|
|
489
|
-
);
|
|
517
|
+
expect(button.className).toBe(none.querySelector('button')!.className);
|
|
490
518
|
});
|
|
491
519
|
});
|
|
492
520
|
|
package/src/Button/Button.tsx
CHANGED
|
@@ -42,7 +42,8 @@ import {VisuallyHidden} from '../VisuallyHidden';
|
|
|
42
42
|
import {EDGE_COMP_ATTR} from '../Layout/edgeCompensation.stylex';
|
|
43
43
|
import {useSize} from '../SizeContext/SizeContext';
|
|
44
44
|
import {useButtonGroup} from '../ButtonGroup/ButtonGroupContext';
|
|
45
|
-
import {mergeProps
|
|
45
|
+
import {mergeProps} from '../utils';
|
|
46
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
46
47
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
47
48
|
import type {LinkComponentType} from '../Link/types';
|
|
48
49
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -688,7 +689,13 @@ export function Button({
|
|
|
688
689
|
);
|
|
689
690
|
|
|
690
691
|
const sharedMergedProps = mergeProps(
|
|
691
|
-
|
|
692
|
+
// Inside a group the group owns the surface's elevation, so the button
|
|
693
|
+
// reflects the tier it actually paints rather than the prop it was handed.
|
|
694
|
+
themeProps('button', {
|
|
695
|
+
variant,
|
|
696
|
+
size,
|
|
697
|
+
elevation: buttonGroup ? 'none' : elevation,
|
|
698
|
+
}),
|
|
692
699
|
sharedStylexProps,
|
|
693
700
|
className,
|
|
694
701
|
style,
|
|
@@ -757,9 +764,9 @@ export function Button({
|
|
|
757
764
|
: null;
|
|
758
765
|
|
|
759
766
|
// Merge the consumer ref with the tooltip hook's trigger ref so both point at
|
|
760
|
-
// the same element.
|
|
761
|
-
// tooltip side when no tooltip is set.
|
|
762
|
-
const mergedButtonRef =
|
|
767
|
+
// the same element. useMergedRefs tolerates undefined, so this is a no-op for
|
|
768
|
+
// the tooltip side when no tooltip is set.
|
|
769
|
+
const mergedButtonRef = useMergedRefs(
|
|
763
770
|
ref,
|
|
764
771
|
tooltip != null ? tooltipHook.ref : undefined,
|
|
765
772
|
);
|
|
@@ -15,7 +15,7 @@ export const docs = {
|
|
|
15
15
|
},
|
|
16
16
|
theming: {
|
|
17
17
|
targets: [
|
|
18
|
-
{className: 'astryx-button-group', visualProps: ['size', 'orientation']},
|
|
18
|
+
{className: 'astryx-button-group', visualProps: ['size', 'orientation', 'elevation']},
|
|
19
19
|
],
|
|
20
20
|
},
|
|
21
21
|
components: [
|
|
@@ -46,6 +46,9 @@ export const docs = {
|
|
|
46
46
|
{guidance: false, description: "Don't mix wildly different actions. A Save button next to a Delete button in the same group is confusing."},
|
|
47
47
|
{guidance: false, description: "Don't use ButtonGroup for navigation. Use SegmentedControl or TabList for switching between views."},
|
|
48
48
|
{guidance: false, description: "Don't nest ButtonGroups. If you need multiple groups, place them side by side with a gap."},
|
|
49
|
+
{guidance: true, description: 'Name the group for what its buttons act on. The label is the group\'s accessible name and a screen reader reads it before each member.'},
|
|
50
|
+
{guidance: true, description: 'Keep the group a single Tab stop. Arrow keys move between members along the orientation, Home/End jump to the ends, and disabled members are skipped. This is the WAI-ARIA APG roving tabindex technique: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex'},
|
|
51
|
+
{guidance: false, description: "Don't disable the group to show that an action is in flight. A disabled member drops focus, so a keyboard user loses their place; leave the group enabled and show progress on the button that started the work."},
|
|
49
52
|
],
|
|
50
53
|
anatomy: [
|
|
51
54
|
{name: 'Button', required: true, description: 'One or more Button or IconButton children that form the connected group.'},
|
|
@@ -84,6 +87,9 @@ export const docsZh = {
|
|
|
84
87
|
{guidance: false, description: '不要混合差异很大的操作,将保存按钮和删除按钮放在同一组中会令人困惑。'},
|
|
85
88
|
{guidance: false, description: '不要使用 ButtonGroup 进行导航,使用 SegmentedControl 或 TabList 切换视图。'},
|
|
86
89
|
{guidance: false, description: '不要嵌套 ButtonGroup。如需多个组,请并排放置并留有间隔。'},
|
|
90
|
+
{guidance: true, description: '按钮组的标签应说明这些按钮作用于什么。该标签是按钮组的无障碍名称,屏幕阅读器会在每个成员之前朗读它。'},
|
|
91
|
+
{guidance: true, description: '按钮组是单个 Tab 停靠点。方向键沿排列方向在成员间移动焦点,Home/End 跳到首尾,禁用成员会被跳过——即 WAI-ARIA APG 的 roving tabindex 技术。'},
|
|
92
|
+
{guidance: false, description: '不要用禁用整个按钮组来表示操作进行中。禁用的成员会失去焦点,键盘用户会丢失位置;请保持按钮组可用,并在发起操作的按钮上显示进度。'},
|
|
87
93
|
],
|
|
88
94
|
anatomy: [
|
|
89
95
|
{name: '按钮', required: true, description: '一个或多个 Button 或 IconButton 子元素,形成连接的组。'},
|
|
@@ -105,6 +111,9 @@ export const docsDense = {
|
|
|
105
111
|
{guidance: false, description: "Don't mix unrelated actions in one group."},
|
|
106
112
|
{guidance: false, description: "Don't use for navigation. Use SegmentedControl or TabList."},
|
|
107
113
|
{guidance: false, description: "Don't nest ButtonGroups."},
|
|
114
|
+
{guidance: true, description: 'Label the group for what its buttons act on; it is the accessible name.'},
|
|
115
|
+
{guidance: true, description: 'Single Tab stop; arrows move between members, Home/End to ends, disabled skipped (APG roving tabindex).'},
|
|
116
|
+
{guidance: false, description: "Don't disable the group for an in-flight action; a disabled member drops focus."},
|
|
108
117
|
],
|
|
109
118
|
},
|
|
110
119
|
components: [
|