@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
|
@@ -20,7 +20,7 @@ import {lazy, Suspense, useEffect, useRef, useState} from 'react';
|
|
|
20
20
|
import * as stylex from '@stylexjs/stylex';
|
|
21
21
|
import {Text} from '../Text';
|
|
22
22
|
import type {TextType, TextSize, TextColor, TextWeight} from '../theme/types';
|
|
23
|
-
import {mergeProps
|
|
23
|
+
import {mergeProps} from '../utils';
|
|
24
24
|
import {useDevWarning} from '../hooks/useDevWarning';
|
|
25
25
|
import {useTranslator} from '../i18n';
|
|
26
26
|
import {useLocale} from '../i18n/useLocale';
|
|
@@ -33,6 +33,7 @@ import type {
|
|
|
33
33
|
TimestampTooltipLine,
|
|
34
34
|
} from './tooltipEntries';
|
|
35
35
|
|
|
36
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
36
37
|
// Load the overlay lazily so a card-less Timestamp — the default — never
|
|
37
38
|
// bundles HoverCard or the copy affordance's Icon/IconButton. Mirrors the code
|
|
38
39
|
// split the read-only Tooltip path used before it.
|
|
@@ -422,6 +423,7 @@ export function Timestamp({
|
|
|
422
423
|
const t = useTranslator();
|
|
423
424
|
const locale = useLocale();
|
|
424
425
|
const timeRef = useRef<HTMLTimeElement>(null);
|
|
426
|
+
const mergedTimeRef = useMergedRefs(ref, timeRef);
|
|
425
427
|
const [now, setNow] = useState(() => new Date());
|
|
426
428
|
|
|
427
429
|
const date = parseValue(value);
|
|
@@ -526,7 +528,7 @@ export function Timestamp({
|
|
|
526
528
|
xstyle={xstyle}
|
|
527
529
|
{...timestampProps}>
|
|
528
530
|
<time
|
|
529
|
-
ref={
|
|
531
|
+
ref={mergedTimeRef}
|
|
530
532
|
dateTime={isoString}
|
|
531
533
|
// `ariaLabelText` is '' only for an invalid date, which bails out
|
|
532
534
|
// before rendering — but keep the guard local: an empty aria-label
|
package/src/Toast/Toast.doc.mjs
CHANGED
|
@@ -60,6 +60,12 @@ export const docs = {
|
|
|
60
60
|
type: '(reason: "auto" | "manual") => void',
|
|
61
61
|
description: 'Callback fired when the toast is removed.',
|
|
62
62
|
},
|
|
63
|
+
{
|
|
64
|
+
name: 'onDismiss',
|
|
65
|
+
type: '(reason: "auto" | "manual") => void',
|
|
66
|
+
description: 'Callback fired when the toast is dismissed.',
|
|
67
|
+
required: true,
|
|
68
|
+
},
|
|
63
69
|
], theming: {
|
|
64
70
|
targets: [
|
|
65
71
|
{className: 'astryx-toast', visualProps: ['type']},
|
|
@@ -58,7 +58,6 @@ const styles = stylex.create({
|
|
|
58
58
|
pointerEvents: 'auto',
|
|
59
59
|
display: 'grid',
|
|
60
60
|
gridTemplateRows: '1fr',
|
|
61
|
-
paddingBlockEnd: spacingVars['--spacing-3'],
|
|
62
61
|
transitionProperty: 'grid-template-rows, padding',
|
|
63
62
|
transitionDuration: {
|
|
64
63
|
default: durationVars['--duration-fast'],
|
|
@@ -70,6 +69,18 @@ const styles = stylex.create({
|
|
|
70
69
|
paddingBlockEnd: 0,
|
|
71
70
|
},
|
|
72
71
|
},
|
|
72
|
+
// The inter-toast gap is padding on each toast rather than `gap` on the
|
|
73
|
+
// viewport so it can animate alongside gridTemplateRows on entry and exit.
|
|
74
|
+
// That makes it the toast's own trailing space, so the toast at the visual
|
|
75
|
+
// bottom of the stack has to give it up — otherwise it stacks on top of the
|
|
76
|
+
// viewport's own padding. Which child that is flips with the flex direction
|
|
77
|
+
// the position sets.
|
|
78
|
+
toastWrapperGap: {
|
|
79
|
+
paddingBlockEnd: {default: spacingVars['--spacing-3'], ':last-child': 0},
|
|
80
|
+
},
|
|
81
|
+
toastWrapperGapReversed: {
|
|
82
|
+
paddingBlockEnd: {default: spacingVars['--spacing-3'], ':first-child': 0},
|
|
83
|
+
},
|
|
73
84
|
toastWrapperExiting: {
|
|
74
85
|
gridTemplateRows: '0fr',
|
|
75
86
|
paddingBlockEnd: 0,
|
|
@@ -417,6 +428,10 @@ export function ToastViewport({
|
|
|
417
428
|
: position === 'bottomStart'
|
|
418
429
|
? styles.bottomStart
|
|
419
430
|
: styles.bottomEnd;
|
|
431
|
+
const isReversed = position === 'topEnd' || position === 'topStart';
|
|
432
|
+
const gapStyle = isReversed
|
|
433
|
+
? styles.toastWrapperGapReversed
|
|
434
|
+
: styles.toastWrapperGap;
|
|
420
435
|
|
|
421
436
|
return (
|
|
422
437
|
<ToastContext value={contextValue}>
|
|
@@ -444,6 +459,7 @@ export function ToastViewport({
|
|
|
444
459
|
data-toast-id={entry.id}
|
|
445
460
|
{...stylex.props(
|
|
446
461
|
styles.toastWrapper,
|
|
462
|
+
gapStyle,
|
|
447
463
|
isExiting && styles.toastWrapperExiting,
|
|
448
464
|
)}
|
|
449
465
|
onTransitionEnd={
|
package/src/Token/TokenLink.tsx
CHANGED
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
|
|
28
28
|
import type {ReactNode, CSSProperties, Ref, HTMLAttributes} from 'react';
|
|
29
29
|
import {useRef} from 'react';
|
|
30
|
-
import {mergeRefs} from '../utils';
|
|
31
30
|
import {useClickableContainer} from '../hooks/useClickableContainer';
|
|
32
31
|
import type {LinkComponentType} from '../Link/types';
|
|
33
32
|
|
|
33
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
34
34
|
export interface TokenLinkProps extends HTMLAttributes<HTMLElement> {
|
|
35
35
|
/** Ref forwarded to the container element. */
|
|
36
36
|
ref?: Ref<HTMLElement>;
|
|
@@ -86,7 +86,7 @@ export function TokenLink({
|
|
|
86
86
|
|
|
87
87
|
return (
|
|
88
88
|
<span
|
|
89
|
-
ref={
|
|
89
|
+
ref={useMergedRefs(ref, containerRef)}
|
|
90
90
|
onClick={isDisabled ? undefined : onClick}
|
|
91
91
|
onMouseUp={isDisabled ? undefined : onMouseUp}
|
|
92
92
|
{...containerProps}>
|
|
@@ -135,6 +135,11 @@ export const docs = {
|
|
|
135
135
|
description: 'Maximum number of dropdown items to display.',
|
|
136
136
|
default: '10',
|
|
137
137
|
},
|
|
138
|
+
{
|
|
139
|
+
name: 'menuWidth',
|
|
140
|
+
type: 'number',
|
|
141
|
+
description: 'Fixed dropdown width in pixels. The menu never shrinks below its anchor width.',
|
|
142
|
+
},
|
|
138
143
|
{
|
|
139
144
|
name: 'emptySearchResultsText',
|
|
140
145
|
type: 'string',
|
|
@@ -201,6 +206,22 @@ export const docs = {
|
|
|
201
206
|
description:
|
|
202
207
|
'Width of the field (number = pixels, string used as-is, e.g. "100%"). Sizes the whole field (label, control, and status) so they stay aligned.',
|
|
203
208
|
},
|
|
209
|
+
{
|
|
210
|
+
name: 'tokenOverflowBehavior',
|
|
211
|
+
type: "'none' | 'unfocusedInline' | 'unfocusedLayer'",
|
|
212
|
+
description: 'Controls how tokens overflow when the container is too narrow.',
|
|
213
|
+
default: "'none'",
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'onFocus',
|
|
217
|
+
type: '(e: FocusEvent<HTMLInputElement>) => void',
|
|
218
|
+
description: 'Fires when focus enters the tokenizer input.',
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: 'onBlur',
|
|
222
|
+
type: '(e: FocusEvent<HTMLInputElement>) => void',
|
|
223
|
+
description: 'Fires when focus leaves the tokenizer input.',
|
|
224
|
+
},
|
|
204
225
|
{
|
|
205
226
|
name: 'xstyle',
|
|
206
227
|
type: 'StyleXStyles',
|
|
@@ -368,6 +389,11 @@ export const docsZh = {
|
|
|
368
389
|
description: '\u4e0b\u62c9\u5217\u8868\u663e\u793a\u7684\u6700\u5927\u9879\u76ee\u6570\u3002',
|
|
369
390
|
default: '10',
|
|
370
391
|
},
|
|
392
|
+
{
|
|
393
|
+
name: 'menuWidth',
|
|
394
|
+
type: 'number',
|
|
395
|
+
description: '下拉菜单的固定像素宽度。菜单不会小于其锚点宽度。',
|
|
396
|
+
},
|
|
371
397
|
{
|
|
372
398
|
name: 'emptySearchResultsText',
|
|
373
399
|
type: 'string',
|
|
@@ -490,6 +516,7 @@ export const docsDense = {
|
|
|
490
516
|
labelTooltip: 'Tooltip on label.',
|
|
491
517
|
hasEntriesOnFocus: 'Show bootstrap results on focus before typing.',
|
|
492
518
|
maxMenuItems: 'Max dropdown items to display.',
|
|
519
|
+
menuWidth: 'Fixed dropdown width in pixels.',
|
|
493
520
|
emptySearchResultsText: 'Text when search returns no results.',
|
|
494
521
|
hasAutoFocus: 'Auto-focus input on mount.',
|
|
495
522
|
size: 'Input+token size.',
|
|
@@ -156,6 +156,8 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
|
|
|
156
156
|
hasEntriesOnFocus?: boolean;
|
|
157
157
|
/** Max dropdown items. @default 10 */
|
|
158
158
|
maxMenuItems?: number;
|
|
159
|
+
/** Fixed dropdown width in pixels. Never shrinks below the input width. */
|
|
160
|
+
menuWidth?: number;
|
|
159
161
|
/** Text shown when no results found. @default 'No results found' */
|
|
160
162
|
emptySearchResultsText?: string;
|
|
161
163
|
/** Whether the input is disabled. @default false */
|
|
@@ -393,6 +395,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
393
395
|
placeholder,
|
|
394
396
|
hasEntriesOnFocus,
|
|
395
397
|
maxMenuItems,
|
|
398
|
+
menuWidth,
|
|
396
399
|
emptySearchResultsText,
|
|
397
400
|
isDisabled = false,
|
|
398
401
|
htmlName,
|
|
@@ -778,6 +781,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
778
781
|
placeholder={value.length === 0 ? placeholder : ''}
|
|
779
782
|
hasEntriesOnFocus={isAtMax ? false : hasEntriesOnFocus}
|
|
780
783
|
maxMenuItems={maxMenuItems}
|
|
784
|
+
menuWidth={menuWidth}
|
|
781
785
|
emptySearchResultsText={emptySearchResultsText}
|
|
782
786
|
isDisabled={isDisabled}
|
|
783
787
|
isFocusableDisabled={showsDisabledMessage}
|
|
@@ -133,6 +133,11 @@ export const docs = {
|
|
|
133
133
|
description: 'Visual variant passed to Section.',
|
|
134
134
|
default: "'transparent'",
|
|
135
135
|
},
|
|
136
|
+
{
|
|
137
|
+
name: 'dividers',
|
|
138
|
+
type: "Array<'top' | 'bottom' | 'start' | 'end'>",
|
|
139
|
+
description: 'Borders/dividers rendered around the toolbar.',
|
|
140
|
+
},
|
|
136
141
|
{
|
|
137
142
|
name: 'xstyle',
|
|
138
143
|
type: 'StyleXStyles',
|
|
@@ -96,6 +96,11 @@ export const docs = {
|
|
|
96
96
|
type: 'boolean',
|
|
97
97
|
description: 'Whether the tooltip should be shown on mount. Still dismissible.',
|
|
98
98
|
},
|
|
99
|
+
{
|
|
100
|
+
name: 'isOpen',
|
|
101
|
+
type: 'boolean',
|
|
102
|
+
description: 'Controlled open state for the tooltip.',
|
|
103
|
+
},
|
|
99
104
|
],
|
|
100
105
|
},
|
|
101
106
|
],
|
|
@@ -276,6 +276,38 @@ describe('Tooltip', () => {
|
|
|
276
276
|
expect(onOpenChange).not.toHaveBeenCalledWith(false);
|
|
277
277
|
});
|
|
278
278
|
});
|
|
279
|
+
|
|
280
|
+
describe('controlled', () => {
|
|
281
|
+
// Escape asks a controlled tooltip to close by calling this same handler,
|
|
282
|
+
// so a consumer who complies sees the request and then this echo. Pinning
|
|
283
|
+
// the echo here keeps the two straight.
|
|
284
|
+
it('echoes the close through onOpenChange when the consumer flips isOpen', async () => {
|
|
285
|
+
const onOpenChange = vi.fn();
|
|
286
|
+
const {rerender} = render(
|
|
287
|
+
<Tooltip content="Pinned" isOpen onOpenChange={onOpenChange} delay={0}>
|
|
288
|
+
<button type="button">Trigger</button>
|
|
289
|
+
</Tooltip>,
|
|
290
|
+
);
|
|
291
|
+
await waitFor(() => {
|
|
292
|
+
expect(onOpenChange).toHaveBeenCalledWith(true);
|
|
293
|
+
});
|
|
294
|
+
onOpenChange.mockClear();
|
|
295
|
+
|
|
296
|
+
rerender(
|
|
297
|
+
<Tooltip
|
|
298
|
+
content="Pinned"
|
|
299
|
+
isOpen={false}
|
|
300
|
+
onOpenChange={onOpenChange}
|
|
301
|
+
delay={0}>
|
|
302
|
+
<button type="button">Trigger</button>
|
|
303
|
+
</Tooltip>,
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
await waitFor(() => {
|
|
307
|
+
expect(onOpenChange).toHaveBeenCalledWith(false);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
279
311
|
describe('touch', () => {
|
|
280
312
|
// The modality is document-global; a tap in one case must not decide the
|
|
281
313
|
// next one's answer.
|
package/src/Tooltip/Tooltip.tsx
CHANGED
|
@@ -146,6 +146,11 @@ export interface TooltipProps {
|
|
|
146
146
|
* - `true`: force-show the tooltip (hover/focus hide is suppressed)
|
|
147
147
|
* - `false`: force-hide the tooltip
|
|
148
148
|
* - `undefined`: uncontrolled — hover/focus triggers manage visibility
|
|
149
|
+
*
|
|
150
|
+
* A controlled tooltip still takes Escape when it is the top-most layer, and
|
|
151
|
+
* answers by calling `onOpenChange(false)` without hiding itself — closing is
|
|
152
|
+
* your update's decision, exactly as for a controlled Dialog. Ignore the call
|
|
153
|
+
* and the tip stays, and so does the press: nothing underneath dismisses.
|
|
149
154
|
*/
|
|
150
155
|
isOpen?: boolean;
|
|
151
156
|
|
|
@@ -31,8 +31,8 @@ import {
|
|
|
31
31
|
type LayerTouchTrigger,
|
|
32
32
|
} from '../Layer/useTouchTrigger';
|
|
33
33
|
import {layerAnimations} from '../Layer/layerAnimations.stylex';
|
|
34
|
+
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
34
35
|
import {themeProps} from '../utils/themeProps';
|
|
35
|
-
import {isImeKeyEvent} from '../utils/ime';
|
|
36
36
|
import {
|
|
37
37
|
colorVars,
|
|
38
38
|
radiusVars,
|
|
@@ -144,6 +144,11 @@ export interface TooltipOptions {
|
|
|
144
144
|
* - `true`: force-show the tooltip (hover/focus hide is suppressed)
|
|
145
145
|
* - `false`: force-hide the tooltip
|
|
146
146
|
* - `undefined`: uncontrolled — hover/focus triggers manage visibility
|
|
147
|
+
*
|
|
148
|
+
* A controlled tooltip still takes Escape when it is the top-most layer, and
|
|
149
|
+
* answers by calling `onHide` without hiding itself — closing is your
|
|
150
|
+
* update's decision, exactly as for a controlled Dialog. Ignore the call and
|
|
151
|
+
* the tip stays, and so does the press: nothing underneath dismisses.
|
|
147
152
|
*/
|
|
148
153
|
isOpen?: boolean;
|
|
149
154
|
|
|
@@ -518,34 +523,52 @@ export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
|
|
|
518
523
|
}
|
|
519
524
|
}, [isOpen, clearTimeouts, layer]);
|
|
520
525
|
|
|
521
|
-
// Dismiss on Escape (WCAG 1.4.13 — dismissible)
|
|
522
|
-
//
|
|
523
|
-
//
|
|
524
|
-
//
|
|
525
|
-
//
|
|
526
|
-
//
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
526
|
+
// Dismiss on Escape (WCAG 1.4.13 — dismissible) through the shared layer
|
|
527
|
+
// stack. A visible tip is the top-most layer, so it takes the press and
|
|
528
|
+
// consumes it: Escape hides the tip and leaves the dialog underneath open.
|
|
529
|
+
// The user presses Escape again to close that. Consuming (rather than also
|
|
530
|
+
// dismissing what is beneath) keeps one rule with no per-component
|
|
531
|
+
// exceptions, and the failure mode is one extra keystroke instead of a
|
|
532
|
+
// dialog closing under someone who only wanted the tip gone.
|
|
533
|
+
//
|
|
534
|
+
// A controlled tooltip stays on the stack and takes the press like any other
|
|
535
|
+
// layer, but answers it by reporting instead of hiding: `isOpen` is the
|
|
536
|
+
// consumer's value, so only their update may change it. Same contract as a
|
|
537
|
+
// controlled Dialog.
|
|
538
|
+
useLayerDismissal({
|
|
539
|
+
// Registered for the hook's lifetime rather than gated on `layer.isOpen`:
|
|
540
|
+
// that state can lag a frame behind the DOM, so a press arriving right after
|
|
541
|
+
// the layer appears would find nothing registered. Because this layer
|
|
542
|
+
// CONSUMES the press, a stale registration would be worse than a missed one
|
|
543
|
+
// — it would silently eat Escapes meant for the dialog underneath — so
|
|
544
|
+
// presence is answered from the DOM at press time instead of from state.
|
|
545
|
+
isActive: true,
|
|
546
|
+
isPresent: () => {
|
|
547
|
+
const el =
|
|
548
|
+
typeof document === 'undefined'
|
|
549
|
+
? null
|
|
550
|
+
: document.getElementById(layer.id);
|
|
551
|
+
if (el == null) {
|
|
552
|
+
return false;
|
|
534
553
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
554
|
+
try {
|
|
555
|
+
return el.matches(':popover-open');
|
|
556
|
+
} catch {
|
|
557
|
+
// Browsers without the Popover API (and some test environments) cannot
|
|
558
|
+
// answer the selector; fall back to the hook's own state.
|
|
559
|
+
return layer.isOpen;
|
|
539
560
|
}
|
|
561
|
+
},
|
|
562
|
+
onDismiss: () => {
|
|
540
563
|
clearTimeouts();
|
|
541
564
|
clearTapOpen();
|
|
565
|
+
if (isOpen !== undefined) {
|
|
566
|
+
onHide?.();
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
542
569
|
layer.hide();
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
return () => {
|
|
546
|
-
document.removeEventListener('keydown', handleKeyDown);
|
|
547
|
-
};
|
|
548
|
-
}, [isOpen, layer, clearTimeouts, clearTapOpen]);
|
|
570
|
+
},
|
|
571
|
+
});
|
|
549
572
|
|
|
550
573
|
// Render function that wraps layer.render with tooltip styling
|
|
551
574
|
const renderTooltip = useCallback(
|
|
@@ -34,7 +34,8 @@ import {Link} from '../Link';
|
|
|
34
34
|
import {Icon} from '../Icon';
|
|
35
35
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
36
36
|
import type {LinkComponentType} from '../Link/types';
|
|
37
|
-
import {mergeProps
|
|
37
|
+
import {mergeProps} from '../utils';
|
|
38
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
38
39
|
import type {BaseProps} from '../BaseProps';
|
|
39
40
|
import {useMenuHover} from '../hooks/useMenuHover';
|
|
40
41
|
import {NavHeadingCloseContext} from '../NavMenu/NavMenuContext';
|
|
@@ -53,7 +54,7 @@ const styles = stylex.create({
|
|
|
53
54
|
minHeight: spacingVars['--spacing-8'],
|
|
54
55
|
paddingInlineStart: {
|
|
55
56
|
default: spacingVars['--spacing-2'],
|
|
56
|
-
':has(.astryx-
|
|
57
|
+
':has(.astryx-nav-icon)': 0,
|
|
57
58
|
},
|
|
58
59
|
paddingInlineEnd: spacingVars['--spacing-2'],
|
|
59
60
|
paddingBlock: 0,
|
|
@@ -189,7 +190,7 @@ const styles = stylex.create({
|
|
|
189
190
|
minHeight: spacingVars['--spacing-8'],
|
|
190
191
|
paddingInlineStart: {
|
|
191
192
|
default: spacingVars['--spacing-2'],
|
|
192
|
-
':has(.astryx-
|
|
193
|
+
':has(.astryx-nav-icon)': 0,
|
|
193
194
|
},
|
|
194
195
|
paddingInlineEnd: spacingVars['--spacing-2'],
|
|
195
196
|
paddingBlock: 0,
|
|
@@ -363,7 +364,7 @@ export function TopNavHeading({
|
|
|
363
364
|
// setTriggerEl belongs on the chevron button, not this root: it is the
|
|
364
365
|
// focus-restore target and a <div> cannot take focus. triggerRef stays here
|
|
365
366
|
// because the panel anchors to the whole heading.
|
|
366
|
-
const setRef =
|
|
367
|
+
const setRef = useMergedRefs<HTMLElement>(
|
|
367
368
|
rootRef,
|
|
368
369
|
ref,
|
|
369
370
|
menu ? popover.triggerRef : undefined,
|
|
@@ -53,7 +53,7 @@ import {usePopover} from '../Popover/usePopover';
|
|
|
53
53
|
import {useMenuHover} from '../hooks/useMenuHover';
|
|
54
54
|
import {Grid} from '../Grid/Grid';
|
|
55
55
|
import {Icon} from '../Icon';
|
|
56
|
-
import {mergeProps
|
|
56
|
+
import {mergeProps} from '../utils';
|
|
57
57
|
import type {BaseProps} from '../BaseProps';
|
|
58
58
|
import {navItemStyles} from '../NavItem/navItemStyles.stylex';
|
|
59
59
|
import {useTopNavSlot} from './TopNavContext';
|
|
@@ -61,6 +61,7 @@ import {useTopNavRenderMode} from './TopNavRenderContext';
|
|
|
61
61
|
import {themeProps} from '../utils/themeProps';
|
|
62
62
|
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
63
63
|
|
|
64
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
64
65
|
// =============================================================================
|
|
65
66
|
// Styles
|
|
66
67
|
// =============================================================================
|
|
@@ -451,7 +452,7 @@ function DefaultMegaMenu({
|
|
|
451
452
|
return (
|
|
452
453
|
<>
|
|
453
454
|
<button
|
|
454
|
-
ref={
|
|
455
|
+
ref={useMergedRefs(triggerButtonRef, setTriggerEl, ref)}
|
|
455
456
|
type="button"
|
|
456
457
|
{...popover.triggerProps}
|
|
457
458
|
{...hoverTriggerProps}
|
|
@@ -29,7 +29,8 @@ import {useMenuHover} from '../hooks/useMenuHover';
|
|
|
29
29
|
import {useListFocus} from '../hooks/useListFocus';
|
|
30
30
|
import {useTypeahead} from '../hooks/useTypeahead';
|
|
31
31
|
import {Icon} from '../Icon';
|
|
32
|
-
import {mergeProps
|
|
32
|
+
import {mergeProps} from '../utils';
|
|
33
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
33
34
|
import type {BaseProps} from '../BaseProps';
|
|
34
35
|
import {navItemStyles} from '../NavItem/navItemStyles.stylex';
|
|
35
36
|
import {useTopNavSlot} from './TopNavContext';
|
|
@@ -361,7 +362,7 @@ export function TopNavMenu({
|
|
|
361
362
|
popoverId: popover.id,
|
|
362
363
|
});
|
|
363
364
|
|
|
364
|
-
const setTriggerRef =
|
|
365
|
+
const setTriggerRef = useMergedRefs<HTMLButtonElement>(
|
|
365
366
|
triggerButtonRef,
|
|
366
367
|
popover.triggerRef,
|
|
367
368
|
setTriggerEl,
|
|
@@ -426,7 +427,7 @@ export function TopNavMenu({
|
|
|
426
427
|
|
|
427
428
|
// Menu container carries both the hover hook's ref (for its open/close
|
|
428
429
|
// focus management) and the list-focus ref (for roving tabindex/typeahead).
|
|
429
|
-
const setMenuRef =
|
|
430
|
+
const setMenuRef = useMergedRefs<HTMLDivElement>(menuRef, listRef);
|
|
430
431
|
|
|
431
432
|
// Mobile bar: hide menus entirely
|
|
432
433
|
if (renderMode === 'mobile-bar') {
|
|
@@ -60,6 +60,11 @@ export const docs = {
|
|
|
60
60
|
description: 'Maximum dropdown items to display.',
|
|
61
61
|
default: '10',
|
|
62
62
|
},
|
|
63
|
+
{
|
|
64
|
+
name: 'menuWidth',
|
|
65
|
+
type: 'number',
|
|
66
|
+
description: 'Fixed dropdown width in pixels. The menu never shrinks below its anchor width.',
|
|
67
|
+
},
|
|
63
68
|
{
|
|
64
69
|
name: 'emptySearchResultsText',
|
|
65
70
|
type: 'string',
|
|
@@ -169,6 +174,11 @@ export const docsZh = {
|
|
|
169
174
|
description: '下拉列表显示的最大项目数。',
|
|
170
175
|
default: '10',
|
|
171
176
|
},
|
|
177
|
+
{
|
|
178
|
+
name: 'menuWidth',
|
|
179
|
+
type: 'number',
|
|
180
|
+
description: '下拉菜单的固定像素宽度。菜单不会小于其锚点宽度。',
|
|
181
|
+
},
|
|
172
182
|
{
|
|
173
183
|
name: 'emptySearchResultsText',
|
|
174
184
|
type: 'string',
|
|
@@ -253,6 +263,7 @@ export const docsDense = {
|
|
|
253
263
|
placeholder: 'Input placeholder.',
|
|
254
264
|
hasEntriesOnFocus: 'Bootstrap results on focus.',
|
|
255
265
|
maxMenuItems: 'Max dropdown items.',
|
|
266
|
+
menuWidth: 'Fixed dropdown width in pixels.',
|
|
256
267
|
emptySearchResultsText: 'Text when no results.',
|
|
257
268
|
isDisabled: 'Whether input disabled.',
|
|
258
269
|
hasAutoFocus: 'Auto-focus on mount.',
|