@astryxdesign/core 0.4.7 → 0.5.0-canary.055e75f
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 +40 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +51 -18
- 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 +3 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +14 -15
- 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 +6 -9
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +6 -6
- 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/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/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/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/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 -2
- 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/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/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/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +9 -4
- 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/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 +63 -11
- 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.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +3 -2
- 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/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +20 -17
- 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 +3 -3
- package/dist/Selector/Selector.d.ts +17 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +81 -14
- 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.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +20 -8
- 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 +19 -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 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +9 -3
- 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.map +1 -1
- package/dist/Timestamp/Timestamp.js +5 -3
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +27 -8
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +2 -2
- package/dist/Tokenizer/Tokenizer.d.ts +3 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +2 -0
- 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.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +4 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +2 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +68 -29
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +3 -2
- package/dist/astryx.css +98 -7
- 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/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- 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/en.json +154 -10
- package/locales/pseudo.json +108 -0
- 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 +13 -11
- package/src/Banner/Banner.test.tsx +102 -15
- package/src/Banner/Banner.tsx +72 -25
- 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 +4 -3
- package/src/Calendar/Calendar.test.tsx +103 -0
- package/src/Calendar/Calendar.tsx +19 -16
- 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 +44 -19
- package/src/Card/Card.tsx +12 -32
- 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/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/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/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/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -2
- 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/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 +62 -14
- 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/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.tsx +9 -4
- 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/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 +277 -0
- package/src/MultiSelector/MultiSelector.tsx +142 -11
- 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.tsx +3 -2
- 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/usePopover.tsx +31 -28
- 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.tsx +3 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +311 -1
- package/src/Selector/Selector.tsx +139 -16
- 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 +17 -8
- 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 +76 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +40 -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 +23 -1
- package/src/Text/Text.tsx +6 -2
- package/src/TextArea/TextArea.doc.mjs +8 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +15 -8
- 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 +18 -0
- package/src/Timestamp/Timestamp.tsx +4 -2
- package/src/Toast/Toast.doc.mjs +6 -0
- package/src/Toast/ToastViewport.tsx +17 -1
- package/src/Token/TokenLink.tsx +2 -2
- package/src/Tokenizer/Tokenizer.doc.mjs +27 -0
- package/src/Tokenizer/Tokenizer.tsx +4 -0
- 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.tsx +3 -2
- package/src/TopNav/TopNavMenu.tsx +4 -3
- package/src/Typeahead/BaseTypeahead.doc.mjs +11 -0
- package/src/Typeahead/BaseTypeahead.tsx +85 -33
- package/src/Typeahead/Typeahead.doc.mjs +5 -0
- package/src/Typeahead/Typeahead.test.tsx +49 -0
- package/src/Typeahead/Typeahead.tsx +3 -2
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- 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/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -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/derivedVarRegistry.test.ts +19 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +37 -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
|
@@ -424,6 +424,11 @@ export type MultiSelectorStatusType = 'warning' | 'error' | 'success';
|
|
|
424
424
|
|
|
425
425
|
export type {MultiSelectorStatus};
|
|
426
426
|
|
|
427
|
+
export interface MultiSelectorSelectedItem {
|
|
428
|
+
value: string;
|
|
429
|
+
label: string;
|
|
430
|
+
}
|
|
431
|
+
|
|
427
432
|
export interface MultiSelectorProps<
|
|
428
433
|
T extends MultiSelectorOptionType = MultiSelectorOptionType,
|
|
429
434
|
> extends Omit<BaseProps, 'onChange' | 'defaultValue'> {
|
|
@@ -599,6 +604,25 @@ export interface MultiSelectorProps<
|
|
|
599
604
|
*/
|
|
600
605
|
searchPlaceholder?: string;
|
|
601
606
|
|
|
607
|
+
/**
|
|
608
|
+
* Content shown in the panel when there are no options to show, and
|
|
609
|
+
* announced in a polite live region when the panel opens. Not shown while
|
|
610
|
+
* `isLoading` — the options have not arrived yet.
|
|
611
|
+
* @default 'No options'
|
|
612
|
+
*/
|
|
613
|
+
emptyText?: ReactNode;
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* Content shown in the panel when a search query matches no options, and
|
|
617
|
+
* announced in a polite live region at the same time.
|
|
618
|
+
*
|
|
619
|
+
* The panel message is `role="presentation"`, so the live region is the only
|
|
620
|
+
* route to assistive tech: a string is announced verbatim, a richer node
|
|
621
|
+
* falls back to the default text since it cannot be spoken.
|
|
622
|
+
* @default 'No results found'
|
|
623
|
+
*/
|
|
624
|
+
emptySearchText?: ReactNode;
|
|
625
|
+
|
|
602
626
|
/**
|
|
603
627
|
* How to display selected items in the trigger.
|
|
604
628
|
* - 'count': "3 selected"
|
|
@@ -608,6 +632,17 @@ export interface MultiSelectorProps<
|
|
|
608
632
|
*/
|
|
609
633
|
triggerDisplay?: 'count' | 'labels' | 'badges';
|
|
610
634
|
|
|
635
|
+
/**
|
|
636
|
+
* Formats the trigger text when triggerDisplay is 'count' or 'labels'.
|
|
637
|
+
* Receives the selected items (value plus resolved label, in selection
|
|
638
|
+
* order) and returns the full trigger text; the count is `items.length`.
|
|
639
|
+
* Not called when nothing is selected — the placeholder shows instead — and
|
|
640
|
+
* not called for triggerDisplay 'badges', which renders Badge elements
|
|
641
|
+
* rather than text.
|
|
642
|
+
* @default items => `${items.length} selected` for 'count', "A, B, C, +N" for 'labels'
|
|
643
|
+
*/
|
|
644
|
+
formatValue?: (items: MultiSelectorSelectedItem[]) => string;
|
|
645
|
+
|
|
611
646
|
/**
|
|
612
647
|
* Maximum number of badges to show before showing "+N".
|
|
613
648
|
* Only used when triggerDisplay is 'badges'.
|
|
@@ -710,7 +745,10 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
710
745
|
selectAllLabel: selectAllLabelFromProps,
|
|
711
746
|
hasSearch = false,
|
|
712
747
|
searchPlaceholder: searchPlaceholderFromProps,
|
|
748
|
+
emptyText: emptyTextFromProps,
|
|
749
|
+
emptySearchText: emptySearchTextFromProps,
|
|
713
750
|
triggerDisplay = 'count',
|
|
751
|
+
formatValue,
|
|
714
752
|
maxBadges = 3,
|
|
715
753
|
renderOption,
|
|
716
754
|
indicatorPosition = 'start',
|
|
@@ -730,6 +768,9 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
730
768
|
selectAllLabelFromProps ?? t('@astryx.multiSelector.selectAll');
|
|
731
769
|
const searchPlaceholder =
|
|
732
770
|
searchPlaceholderFromProps ?? t('@astryx.multiSelector.searchPlaceholder');
|
|
771
|
+
const emptyText = emptyTextFromProps ?? t('@astryx.multiSelector.empty');
|
|
772
|
+
const emptySearchText =
|
|
773
|
+
emptySearchTextFromProps ?? t('@astryx.multiSelector.emptySearchResults');
|
|
733
774
|
const size = useSize(sizeProp, 'md');
|
|
734
775
|
const effectiveStatusVariant =
|
|
735
776
|
variant === 'ghost' && statusVariant === 'attached'
|
|
@@ -804,6 +845,19 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
804
845
|
// Announce selection-count changes politely (comboboxes-7 announce path).
|
|
805
846
|
// Toggling options / select-all previously produced no audible feedback.
|
|
806
847
|
const announce = useAnnounce();
|
|
848
|
+
|
|
849
|
+
// The panel's empty message is role="presentation" and reaches assistive tech
|
|
850
|
+
// only through this live region, so the region has to speak whatever the
|
|
851
|
+
// panel shows. A ReactNode override cannot be spoken; fall back to the
|
|
852
|
+
// catalog copy for that case rather than announcing nothing.
|
|
853
|
+
const emptyAnnouncement =
|
|
854
|
+
typeof emptyText === 'string'
|
|
855
|
+
? emptyText
|
|
856
|
+
: t('@astryx.multiSelector.empty');
|
|
857
|
+
const emptySearchAnnouncement =
|
|
858
|
+
typeof emptySearchText === 'string'
|
|
859
|
+
? emptySearchText
|
|
860
|
+
: t('@astryx.multiSelector.emptySearchResults');
|
|
807
861
|
const announceSelection = useCallback(
|
|
808
862
|
(nextValue: string[]) => {
|
|
809
863
|
const total = selectableItems.length;
|
|
@@ -923,16 +977,54 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
923
977
|
announce('');
|
|
924
978
|
return;
|
|
925
979
|
}
|
|
980
|
+
// While isLoading the panel deliberately shows nothing, so announcing a
|
|
981
|
+
// result would put a claim in the one channel the screen has gone quiet
|
|
982
|
+
// for.
|
|
983
|
+
if (isLoading) {
|
|
984
|
+
announce('');
|
|
985
|
+
return;
|
|
986
|
+
}
|
|
926
987
|
const count = filterOptionsByQuery(selectableItems, nextQuery).length;
|
|
927
988
|
announce(
|
|
928
989
|
count === 0
|
|
929
|
-
?
|
|
990
|
+
? emptySearchAnnouncement
|
|
930
991
|
: t('@astryx.multiSelector.resultCount', {count}),
|
|
931
992
|
);
|
|
932
993
|
},
|
|
933
|
-
[announce, selectableItems, t],
|
|
994
|
+
[announce, isLoading, selectableItems, emptySearchAnnouncement, t],
|
|
934
995
|
);
|
|
935
996
|
|
|
997
|
+
// The panel's empty message is role="presentation", so this region is the
|
|
998
|
+
// only route to assistive tech. It has to watch the STATE rather than the
|
|
999
|
+
// open event: the panel can become empty either on open or when a fetch
|
|
1000
|
+
// lands with nothing in it, and an open-only announcement leaves the second
|
|
1001
|
+
// case silent while the message sits on screen. The ref makes it fire once
|
|
1002
|
+
// per arrival at that state rather than on every re-render.
|
|
1003
|
+
const announcedEmptyRef = useRef<string | null>(null);
|
|
1004
|
+
useEffect(() => {
|
|
1005
|
+
const isPanelEmpty =
|
|
1006
|
+
popover.isOpen &&
|
|
1007
|
+
!isLoading &&
|
|
1008
|
+
searchQuery === '' &&
|
|
1009
|
+
selectableItems.length === 0;
|
|
1010
|
+
if (!isPanelEmpty) {
|
|
1011
|
+
announcedEmptyRef.current = null;
|
|
1012
|
+
return;
|
|
1013
|
+
}
|
|
1014
|
+
if (announcedEmptyRef.current === emptyAnnouncement) {
|
|
1015
|
+
return;
|
|
1016
|
+
}
|
|
1017
|
+
announcedEmptyRef.current = emptyAnnouncement;
|
|
1018
|
+
announce(emptyAnnouncement);
|
|
1019
|
+
}, [
|
|
1020
|
+
popover.isOpen,
|
|
1021
|
+
isLoading,
|
|
1022
|
+
searchQuery,
|
|
1023
|
+
selectableItems.length,
|
|
1024
|
+
emptyAnnouncement,
|
|
1025
|
+
announce,
|
|
1026
|
+
]);
|
|
1027
|
+
|
|
936
1028
|
// Handle toggle
|
|
937
1029
|
// Clear all selected values. Shared by the clear button and the keyboard
|
|
938
1030
|
// Delete/Backspace path so clearing is reachable without a mouse.
|
|
@@ -1107,13 +1199,18 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1107
1199
|
}, [popover.isOpen, highlightedIndex, getItemId]);
|
|
1108
1200
|
|
|
1109
1201
|
// Build trigger display content
|
|
1110
|
-
const
|
|
1202
|
+
const selectedItems = useMemo(() => {
|
|
1111
1203
|
return optimisticValue.map(v => {
|
|
1112
1204
|
const item = selectableItems.find(i => i.value === v);
|
|
1113
|
-
return item?.label ?? v;
|
|
1205
|
+
return {value: v, label: item?.label ?? v};
|
|
1114
1206
|
});
|
|
1115
1207
|
}, [optimisticValue, selectableItems]);
|
|
1116
1208
|
|
|
1209
|
+
const selectedLabels = useMemo(
|
|
1210
|
+
() => selectedItems.map(item => item.label),
|
|
1211
|
+
[selectedItems],
|
|
1212
|
+
);
|
|
1213
|
+
|
|
1117
1214
|
const renderTriggerContent = useCallback(() => {
|
|
1118
1215
|
if (optimisticValue.length === 0) {
|
|
1119
1216
|
return <span {...stylex.props(styles.triggerText)}>{placeholder}</span>;
|
|
@@ -1123,7 +1220,8 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1123
1220
|
case 'count':
|
|
1124
1221
|
return (
|
|
1125
1222
|
<span {...stylex.props(styles.triggerText)}>
|
|
1126
|
-
{
|
|
1223
|
+
{formatValue?.(selectedItems) ??
|
|
1224
|
+
`${optimisticValue.length} selected`}
|
|
1127
1225
|
</span>
|
|
1128
1226
|
);
|
|
1129
1227
|
|
|
@@ -1134,7 +1232,11 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1134
1232
|
remaining > 0
|
|
1135
1233
|
? `${displayed.join(', ')}, +${remaining}`
|
|
1136
1234
|
: displayed.join(', ');
|
|
1137
|
-
return
|
|
1235
|
+
return (
|
|
1236
|
+
<span {...stylex.props(styles.triggerText)}>
|
|
1237
|
+
{formatValue?.(selectedItems) ?? text}
|
|
1238
|
+
</span>
|
|
1239
|
+
);
|
|
1138
1240
|
}
|
|
1139
1241
|
|
|
1140
1242
|
case 'badges': {
|
|
@@ -1154,7 +1256,15 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1154
1256
|
);
|
|
1155
1257
|
}
|
|
1156
1258
|
}
|
|
1157
|
-
}, [
|
|
1259
|
+
}, [
|
|
1260
|
+
optimisticValue,
|
|
1261
|
+
triggerDisplay,
|
|
1262
|
+
selectedItems,
|
|
1263
|
+
selectedLabels,
|
|
1264
|
+
placeholder,
|
|
1265
|
+
formatValue,
|
|
1266
|
+
maxBadges,
|
|
1267
|
+
]);
|
|
1158
1268
|
|
|
1159
1269
|
// Render search input
|
|
1160
1270
|
const renderSearch = useCallback(() => {
|
|
@@ -1381,7 +1491,10 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1381
1491
|
// message out of the listbox's accessibility tree (role="listbox" only
|
|
1382
1492
|
// permits option/group children); the no-results outcome is announced
|
|
1383
1493
|
// via the result-count live region instead.
|
|
1384
|
-
|
|
1494
|
+
// While isLoading the options have not arrived yet, so asserting either
|
|
1495
|
+
// message would be a claim the component cannot make; the trigger's
|
|
1496
|
+
// spinner covers it.
|
|
1497
|
+
if (realItemCount === 0 && !isLoading) {
|
|
1385
1498
|
elements.push(
|
|
1386
1499
|
<div
|
|
1387
1500
|
key="empty"
|
|
@@ -1390,7 +1503,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1390
1503
|
themeProps('multi-selector-empty-state'),
|
|
1391
1504
|
stylex.props(styles.emptyState),
|
|
1392
1505
|
)}>
|
|
1393
|
-
|
|
1506
|
+
{searchQuery ? emptySearchText : emptyText}
|
|
1394
1507
|
</div>,
|
|
1395
1508
|
);
|
|
1396
1509
|
return elements;
|
|
@@ -1420,8 +1533,17 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1420
1533
|
// A standalone divider between groups would orphan itself once its
|
|
1421
1534
|
// neighbors are filtered out, so skip it while searching.
|
|
1422
1535
|
if (!isSearching) {
|
|
1536
|
+
// role="listbox" only permits option/group children; the divider
|
|
1537
|
+
// carries no information the options don't, so it's hidden from
|
|
1538
|
+
// the accessibility tree entirely rather than exposing
|
|
1539
|
+
// role="separator" as a disallowed listbox child (axe
|
|
1540
|
+
// aria-required-children).
|
|
1423
1541
|
elements.push(
|
|
1424
|
-
<Divider
|
|
1542
|
+
<Divider
|
|
1543
|
+
key={`divider-${i}`}
|
|
1544
|
+
aria-hidden="true"
|
|
1545
|
+
xstyle={styles.divider}
|
|
1546
|
+
/>,
|
|
1425
1547
|
);
|
|
1426
1548
|
}
|
|
1427
1549
|
} else if (isSection(option)) {
|
|
@@ -1471,7 +1593,16 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1471
1593
|
flushPending();
|
|
1472
1594
|
|
|
1473
1595
|
return elements;
|
|
1474
|
-
}, [
|
|
1596
|
+
}, [
|
|
1597
|
+
options,
|
|
1598
|
+
renderItem,
|
|
1599
|
+
sortedItems,
|
|
1600
|
+
searchQuery,
|
|
1601
|
+
hasSelectAll,
|
|
1602
|
+
isLoading,
|
|
1603
|
+
emptyText,
|
|
1604
|
+
emptySearchText,
|
|
1605
|
+
]);
|
|
1475
1606
|
|
|
1476
1607
|
// The detached message box renders its own leading status icon, so the
|
|
1477
1608
|
// on-field icon would duplicate it — keep the chevron indicator instead.
|
|
@@ -22,7 +22,10 @@ export const docs = {
|
|
|
22
22
|
],
|
|
23
23
|
theming: {
|
|
24
24
|
targets: [
|
|
25
|
-
{className: 'astryx-
|
|
25
|
+
{className: 'astryx-nav-icon'},
|
|
26
|
+
// Still emitted beside the names above, so themes written against
|
|
27
|
+
// them keep working. Drop in the next major.
|
|
28
|
+
{className: 'astryx-navicon', deprecatedFor: 'nav-icon'},
|
|
26
29
|
],
|
|
27
30
|
},
|
|
28
31
|
usage: {
|
|
@@ -51,7 +54,10 @@ export const docsZh = {
|
|
|
51
54
|
],
|
|
52
55
|
theming: {
|
|
53
56
|
targets: [
|
|
54
|
-
{className: 'astryx-
|
|
57
|
+
{className: 'astryx-nav-icon'},
|
|
58
|
+
// Still emitted beside the names above, so themes written against
|
|
59
|
+
// them keep working. Drop in the next major.
|
|
60
|
+
{className: 'astryx-navicon', deprecatedFor: 'nav-icon'},
|
|
55
61
|
],
|
|
56
62
|
},
|
|
57
63
|
usage: {
|
|
@@ -30,3 +30,12 @@ describe('NavIcon', () => {
|
|
|
30
30
|
expect(screen.getByTestId('nav-icon')).toBeInTheDocument();
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
describe('NavIcon theme target names', () => {
|
|
35
|
+
it('renders the deprecated class beside the current one', () => {
|
|
36
|
+
render(<NavIcon icon={<span>Icon</span>} data-testid="nav-icon" />);
|
|
37
|
+
const root = screen.getByTestId('nav-icon');
|
|
38
|
+
expect(root).toHaveClass('astryx-nav-icon');
|
|
39
|
+
expect(root).toHaveClass('astryx-navicon');
|
|
40
|
+
});
|
|
41
|
+
});
|
package/src/NavIcon/NavIcon.tsx
CHANGED
|
@@ -79,7 +79,11 @@ export function NavIcon({
|
|
|
79
79
|
<span
|
|
80
80
|
ref={ref}
|
|
81
81
|
{...mergeProps(
|
|
82
|
-
themeProps('
|
|
82
|
+
themeProps('nav-icon', undefined, {
|
|
83
|
+
// `navicon` ran the compound name together; themes styling it keep
|
|
84
|
+
// working until the next major.
|
|
85
|
+
legacyNames: ['navicon'],
|
|
86
|
+
}),
|
|
83
87
|
stylex.props(styles.base, xstyle),
|
|
84
88
|
className,
|
|
85
89
|
style,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import React, {useCallback, useMemo, type ReactNode} from 'react';
|
|
16
16
|
import * as stylex from '@stylexjs/stylex';
|
|
17
17
|
import {spacingVars} from '../theme/tokens.stylex';
|
|
18
|
-
import {mergeProps
|
|
18
|
+
import {mergeProps} from '../utils';
|
|
19
19
|
import type {BaseProps} from '../BaseProps';
|
|
20
20
|
import {useListFocus} from '../hooks/useListFocus';
|
|
21
21
|
import {useTypeahead} from '../hooks/useTypeahead';
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
type NavHeadingMenuSize,
|
|
27
27
|
} from './NavMenuContext';
|
|
28
28
|
|
|
29
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
29
30
|
const styles = stylex.create({
|
|
30
31
|
root: {
|
|
31
32
|
display: 'flex',
|
|
@@ -162,7 +163,7 @@ export function NavHeadingMenu({
|
|
|
162
163
|
return (
|
|
163
164
|
<NavHeadingMenuContext value={ctx}>
|
|
164
165
|
<div
|
|
165
|
-
ref={
|
|
166
|
+
ref={useMergedRefs(ref, listRef)}
|
|
166
167
|
role="menu"
|
|
167
168
|
onKeyDown={listKeyDown}
|
|
168
169
|
data-testid={testId}
|
|
@@ -35,7 +35,7 @@ export const docs = {
|
|
|
35
35
|
name: 'onChange',
|
|
36
36
|
type: '(value: number) => void',
|
|
37
37
|
description:
|
|
38
|
-
'Callback fired when
|
|
38
|
+
'Callback fired when a valid text edit commits on blur or Enter, or when a step or clear control changes the value.',
|
|
39
39
|
required: true,
|
|
40
40
|
},
|
|
41
41
|
{
|
|
@@ -61,6 +61,11 @@ export const docs = {
|
|
|
61
61
|
description:
|
|
62
62
|
'Whether the field is optional (mutually exclusive with isRequired).',
|
|
63
63
|
},
|
|
64
|
+
{
|
|
65
|
+
name: 'onKeyDown',
|
|
66
|
+
type: '(e: KeyboardEvent<HTMLInputElement>) => void',
|
|
67
|
+
description: 'Callback fired on keydown events on the input.',
|
|
68
|
+
},
|
|
64
69
|
{
|
|
65
70
|
name: 'isRequired',
|
|
66
71
|
type: 'boolean',
|
|
@@ -123,12 +128,14 @@ export const docs = {
|
|
|
123
128
|
{
|
|
124
129
|
name: 'min',
|
|
125
130
|
type: 'number | null',
|
|
126
|
-
description:
|
|
131
|
+
description:
|
|
132
|
+
'Minimum value allowed. A smaller entry commits at this value on blur or Enter.',
|
|
127
133
|
},
|
|
128
134
|
{
|
|
129
135
|
name: 'max',
|
|
130
136
|
type: 'number | null',
|
|
131
|
-
description:
|
|
137
|
+
description:
|
|
138
|
+
'Maximum value allowed. A larger entry commits at this value on blur or Enter.',
|
|
132
139
|
},
|
|
133
140
|
{
|
|
134
141
|
name: 'step',
|
|
@@ -237,6 +244,11 @@ export const docs = {
|
|
|
237
244
|
description:
|
|
238
245
|
'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
|
|
239
246
|
bestPractices: [
|
|
247
|
+
{
|
|
248
|
+
guidance: true,
|
|
249
|
+
description:
|
|
250
|
+
"Let people paste formatted numbers: a pasted 1,234,234,234 is read under the field's locale and commits as 1234234234 on blur. Typing is never intercepted.",
|
|
251
|
+
},
|
|
240
252
|
{
|
|
241
253
|
guidance: true,
|
|
242
254
|
description:
|
|
@@ -318,7 +330,8 @@ export const docsZh = {
|
|
|
318
330
|
{
|
|
319
331
|
name: 'onChange',
|
|
320
332
|
type: '(value: number) => void',
|
|
321
|
-
description:
|
|
333
|
+
description:
|
|
334
|
+
'有效文本编辑在失焦或按 Enter 时提交;步进或清除控件更改值时也会触发回调。',
|
|
322
335
|
required: true,
|
|
323
336
|
},
|
|
324
337
|
{
|
|
@@ -400,12 +413,12 @@ export const docsZh = {
|
|
|
400
413
|
{
|
|
401
414
|
name: 'min',
|
|
402
415
|
type: 'number | null',
|
|
403
|
-
description: '
|
|
416
|
+
description: '允许的最小值。更小的输入会在失焦或按 Enter 时提交为该值。',
|
|
404
417
|
},
|
|
405
418
|
{
|
|
406
419
|
name: 'max',
|
|
407
420
|
type: 'number | null',
|
|
408
|
-
description: '
|
|
421
|
+
description: '允许的最大值。更大的输入会在失焦或按 Enter 时提交为该值。',
|
|
409
422
|
},
|
|
410
423
|
{
|
|
411
424
|
name: 'step',
|
|
@@ -504,6 +517,11 @@ export const docsZh = {
|
|
|
504
517
|
description:
|
|
505
518
|
'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
|
|
506
519
|
bestPractices: [
|
|
520
|
+
{
|
|
521
|
+
guidance: true,
|
|
522
|
+
description:
|
|
523
|
+
'可以直接粘贴带格式的数字:粘贴 1,234,234,234 会按字段所在区域设置解析,失去焦点时提交为 1234234234。输入过程中不会拦截按键。',
|
|
524
|
+
},
|
|
507
525
|
{
|
|
508
526
|
guidance: true,
|
|
509
527
|
description:
|
|
@@ -573,6 +591,11 @@ export const docsDense = {
|
|
|
573
591
|
description:
|
|
574
592
|
'A form input for numeric values with built-in validation, min/max constraints, and step controls. Use NumberInput for quantities, measurements, percentages, and similar inputs.',
|
|
575
593
|
bestPractices: [
|
|
594
|
+
{
|
|
595
|
+
guidance: true,
|
|
596
|
+
description:
|
|
597
|
+
"Pasted formatted numbers parse: 1,234,234,234 commits as 1234234234 under the field's locale. Typing is never intercepted.",
|
|
598
|
+
},
|
|
576
599
|
{
|
|
577
600
|
guidance: true,
|
|
578
601
|
description:
|
|
@@ -635,7 +658,8 @@ export const docsDense = {
|
|
|
635
658
|
propDescriptions: {
|
|
636
659
|
label: 'Label text (always rendered for accessibility).',
|
|
637
660
|
value: 'Current input value.',
|
|
638
|
-
onChange:
|
|
661
|
+
onChange:
|
|
662
|
+
'Callback when a valid text edit commits on blur/Enter, or a step/clear control changes the value.',
|
|
639
663
|
size: 'Size variant.',
|
|
640
664
|
isLabelHidden: 'Visually hide label (still accessible to screen readers).',
|
|
641
665
|
description: 'Text between label + input.',
|