@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +161 -1
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -2
- package/dist/AspectRatio/AspectRatio.d.ts +24 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +23 -4
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +58 -19
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +8 -4
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
- package/dist/Banner/Banner.d.ts +49 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +62 -20
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +17 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +26 -7
- package/dist/Calendar/Calendar.d.ts +7 -3
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -23
- package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
- package/dist/Calendar/getInitialFocusDate.js +62 -0
- package/dist/Calendar/styles.d.ts +5 -14
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -15
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -3
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +3 -3
- package/dist/Chat/ChatMessageList.d.ts +22 -3
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +6 -3
- package/dist/Chat/ChatTokenizedText.d.ts +2 -0
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +11 -6
- package/dist/Chat/useChatComposerTokens.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +10 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +3 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -3
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -2
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +82 -23
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +406 -12
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.d.ts +21 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +110 -58
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +3 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +6 -3
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +19 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +74 -26
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -19
- package/dist/Layer/LayerDepthContext.d.ts +52 -0
- package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
- package/dist/Layer/LayerDepthContext.js +66 -0
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/index.d.ts +3 -0
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +4 -0
- package/dist/Layer/layerStack.d.ts +98 -0
- package/dist/Layer/layerStack.d.ts.map +1 -0
- package/dist/Layer/layerStack.js +306 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +128 -8
- package/dist/Layer/useLayerDismissal.d.ts +93 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
- package/dist/Layer/useLayerDismissal.js +91 -0
- package/dist/Lightbox/Lightbox.d.ts +1 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +103 -81
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/parser.d.ts +38 -1
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +182 -32
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MobileNav/MobileNav.d.ts +6 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +61 -36
- package/dist/MultiSelector/MultiSelector.d.ts +32 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +73 -15
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +9 -5
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +54 -104
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -2
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -2
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +3 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +1 -9
- package/dist/Popover/usePopover.d.ts +7 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +40 -21
- package/dist/PowerSearch/PowerSearch.d.ts +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +19 -6
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +14 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +12 -3
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +91 -18
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +4 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +37 -5
- package/dist/Spinner/Spinner.d.ts +3 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +130 -78
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts +140 -0
- package/dist/Stepper/Step.d.ts.map +1 -0
- package/dist/Stepper/Step.js +1045 -0
- package/dist/Stepper/StepStatus.d.ts +24 -0
- package/dist/Stepper/StepStatus.d.ts.map +1 -0
- package/dist/Stepper/StepStatus.js +1 -0
- package/dist/Stepper/Stepper.d.ts +93 -0
- package/dist/Stepper/Stepper.d.ts.map +1 -0
- package/dist/Stepper/Stepper.js +184 -0
- package/dist/Stepper/StepperContext.d.ts +41 -0
- package/dist/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/Stepper/StepperContext.js +34 -0
- package/dist/Stepper/index.d.ts +8 -0
- package/dist/Stepper/index.d.ts.map +1 -0
- package/dist/Stepper/index.js +7 -0
- package/dist/Stepper/stepper.stylex.d.ts +15 -0
- package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
- package/dist/Stepper/stepper.stylex.js +20 -0
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -3
- package/dist/TabList/Tab.d.ts +15 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +32 -7
- package/dist/TabList/TabList.d.ts +46 -7
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +353 -23
- package/dist/TabList/TabListContext.d.ts +11 -1
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +11 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.d.ts.map +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +10 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/TableRow.d.ts +16 -5
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +16 -5
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +43 -5
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Table/types.d.ts +22 -4
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -0
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +6 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +3 -2
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +15 -21
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +22 -7
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +71 -18
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -9
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +7 -4
- package/dist/Tokenizer/Tokenizer.d.ts +14 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +33 -21
- package/dist/Tooltip/Tooltip.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +5 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +39 -24
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +31 -11
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +22 -7
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +119 -37
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +5 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +113 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -4
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +60 -95
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -18
- package/dist/hooks/useMergedRefs.d.ts +18 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/utils/groupItems.d.ts +5 -1
- package/dist/utils/groupItems.d.ts.map +1 -1
- package/dist/utils/groupItems.js +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +10 -1
- package/dist/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/af-ZA.json +6 -6
- package/locales/ar-SA.json +6 -6
- package/locales/ca-ES.json +5 -5
- package/locales/cs-CZ.json +6 -6
- package/locales/da-DK.json +6 -6
- package/locales/de-DE.json +6 -6
- package/locales/el-GR.json +6 -6
- package/locales/en.json +163 -11
- package/locales/es-ES.json +5 -5
- package/locales/fi-FI.json +6 -6
- package/locales/fr-FR.json +6 -6
- package/locales/he-IL.json +6 -6
- package/locales/hu-HU.json +6 -6
- package/locales/it-IT.json +6 -6
- package/locales/ja-JP.json +6 -6
- package/locales/ko-KR.json +6 -6
- package/locales/nl-NL.json +6 -6
- package/locales/no-NO.json +6 -6
- package/locales/pl-PL.json +6 -6
- package/locales/pseudo.json +114 -0
- package/locales/pt-BR.json +6 -6
- package/locales/pt-PT.json +6 -6
- package/locales/ro-RO.json +6 -6
- package/locales/ru-RU.json +6 -6
- package/locales/sr-SP.json +6 -6
- package/locales/sv-SE.json +6 -6
- package/locales/tr-TR.json +6 -6
- package/locales/uk-UA.json +6 -6
- package/locales/vi-VN.json +6 -6
- package/locales/zh-CN.json +6 -6
- package/locales/zh-TW.json +6 -6
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AppShell/AppShell.tsx +3 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
- package/src/AspectRatio/AspectRatio.test.tsx +57 -10
- package/src/AspectRatio/AspectRatio.tsx +40 -1
- package/src/Avatar/Avatar.doc.mjs +14 -3
- package/src/Avatar/Avatar.test.tsx +97 -0
- package/src/Avatar/Avatar.tsx +125 -52
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +15 -6
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
- package/src/Banner/Banner.doc.mjs +22 -11
- package/src/Banner/Banner.test.tsx +177 -25
- package/src/Banner/Banner.tsx +93 -27
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +17 -4
- package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +24 -1
- package/src/Button/Button.test.tsx +32 -4
- package/src/Button/Button.tsx +12 -5
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +7 -6
- package/src/Calendar/Calendar.test.tsx +143 -0
- package/src/Calendar/Calendar.tsx +30 -26
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.tsx +3 -2
- package/src/Chat/ChatComposerInput.tsx +5 -1
- package/src/Chat/ChatLayout.tsx +3 -2
- package/src/Chat/ChatMessageList.doc.mjs +9 -1
- package/src/Chat/ChatMessageList.test.tsx +46 -0
- package/src/Chat/ChatMessageList.tsx +28 -4
- package/src/Chat/ChatTokenizedText.tsx +17 -10
- package/src/Chat/useChatComposerTokens.ts +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +8 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
- package/src/ComplexSelector/ComplexSelector.tsx +1 -3
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.tsx +55 -2
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +108 -24
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
- package/src/DateRangeInput/DateRangeInput.tsx +4 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
- package/src/DateTimeInput/DateTimeInput.tsx +556 -24
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +429 -2
- package/src/Dialog/Dialog.tsx +133 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
- package/src/Field/Field.doc.mjs +13 -2
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -3
- package/src/HoverCard/HoverCard.doc.mjs +13 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +143 -3
- package/src/HoverCard/useHoverCard.tsx +104 -33
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.tsx +2 -19
- package/src/Layer/LayerDepthContext.tsx +62 -0
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/index.ts +9 -0
- package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
- package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
- package/src/Layer/layerStack.ts +362 -0
- package/src/Layer/useLayer.test.tsx +324 -15
- package/src/Layer/useLayer.tsx +164 -8
- package/src/Layer/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/incremental.test.ts +16 -2
- package/src/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +96 -1
- package/src/Markdown/parser.test.ts +178 -2
- package/src/Markdown/parser.ts +253 -32
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
- package/src/MultiSelector/MultiSelector.test.tsx +311 -0
- package/src/MultiSelector/MultiSelector.tsx +151 -15
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +9 -5
- package/src/NumberInput/NumberInput.doc.mjs +31 -7
- package/src/NumberInput/NumberInput.test.tsx +436 -8
- package/src/NumberInput/NumberInput.tsx +62 -114
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.test.tsx +14 -0
- package/src/Popover/Popover.tsx +1 -9
- package/src/Popover/usePopover.tsx +57 -32
- package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
- package/src/PowerSearch/PowerSearch.test.tsx +240 -1
- package/src/PowerSearch/PowerSearch.tsx +34 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
- package/src/PowerSearch/types.ts +2 -0
- package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
- package/src/PowerSearch/usePowerSearchSource.ts +13 -3
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +346 -1
- package/src/Selector/Selector.tsx +148 -21
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavHeading.tsx +12 -12
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +55 -3
- package/src/Spinner/Spinner.test.tsx +147 -1
- package/src/Spinner/Spinner.tsx +120 -101
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +98 -0
- package/src/Stepper/Step.tsx +1638 -0
- package/src/Stepper/StepStatus.ts +26 -0
- package/src/Stepper/Stepper.doc.mjs +370 -0
- package/src/Stepper/Stepper.test.tsx +1024 -0
- package/src/Stepper/Stepper.tsx +258 -0
- package/src/Stepper/StepperContext.ts +71 -0
- package/src/Stepper/index.ts +18 -0
- package/src/Stepper/stepper.stylex.ts +19 -0
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +6 -2
- package/src/TabList/Tab.doc.mjs +13 -1
- package/src/TabList/Tab.tsx +67 -7
- package/src/TabList/TabList.doc.mjs +22 -6
- package/src/TabList/TabList.test.tsx +559 -0
- package/src/TabList/TabList.tsx +490 -22
- package/src/TabList/TabListContext.ts +13 -2
- package/src/TabList/TabMenu.tsx +3 -2
- package/src/TabList/index.ts +6 -2
- package/src/Table/BaseTable.tsx +12 -4
- package/src/Table/Table.doc.mjs +9 -2
- package/src/Table/Table.test.tsx +132 -14
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +40 -0
- package/src/Table/TableFooter.doc.mjs +40 -0
- package/src/Table/TableHeader.doc.mjs +40 -0
- package/src/Table/TableRow.tsx +16 -5
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
- package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
- package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/types.ts +22 -4
- package/src/Table/useBaseTablePlugins.ts +5 -0
- package/src/Table/useTableGroupedRows.doc.mjs +5 -4
- package/src/Table/useTablePagination.doc.mjs +7 -0
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +31 -0
- package/src/Text/Text.test.tsx +67 -1
- package/src/Text/Text.tsx +6 -3
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +37 -24
- package/src/TextInput/TextInput.doc.mjs +10 -0
- package/src/TextInput/TextInput.tsx +3 -2
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timestamp/Timestamp.test.tsx +58 -0
- package/src/Timestamp/Timestamp.tsx +12 -10
- package/src/Toast/Toast.doc.mjs +26 -12
- package/src/Toast/Toast.tsx +28 -4
- package/src/Toast/ToastViewport.test.tsx +536 -8
- package/src/Toast/ToastViewport.tsx +81 -12
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +15 -10
- package/src/Token/TokenLink.tsx +14 -5
- package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +53 -24
- package/src/Toolbar/Toolbar.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.test.tsx +32 -0
- package/src/Tooltip/Tooltip.tsx +5 -0
- package/src/Tooltip/useTooltip.tsx +47 -24
- package/src/TopNav/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -5
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -7
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
- package/src/Typeahead/BaseTypeahead.tsx +181 -39
- package/src/Typeahead/Typeahead.doc.mjs +11 -0
- package/src/Typeahead/Typeahead.test.tsx +203 -0
- package/src/Typeahead/Typeahead.tsx +12 -2
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useFocusTrap.test.tsx +14 -0
- package/src/hooks/useFocusTrap.ts +62 -111
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.ts +3 -18
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -0
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +1 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/derivedVarRegistry.test.ts +26 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/utils/groupItems.ts +12 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/sharedResizeObserver.ts +10 -2
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
|
@@ -156,6 +156,19 @@ 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;
|
|
161
|
+
/**
|
|
162
|
+
* Minimum query length before the search source is queried. Below it no
|
|
163
|
+
* search runs and the menu stays closed — useful for remote sources where
|
|
164
|
+
* one or two characters match too much to be worth fetching.
|
|
165
|
+
*
|
|
166
|
+
* With `hasCreate`, the "Create" entry rides on the search results, so it
|
|
167
|
+
* also waits for the threshold.
|
|
168
|
+
*
|
|
169
|
+
* @default 1
|
|
170
|
+
*/
|
|
171
|
+
minQueryLength?: number;
|
|
159
172
|
/** Text shown when no results found. @default 'No results found' */
|
|
160
173
|
emptySearchResultsText?: string;
|
|
161
174
|
/** Whether the input is disabled. @default false */
|
|
@@ -393,6 +406,8 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
393
406
|
placeholder,
|
|
394
407
|
hasEntriesOnFocus,
|
|
395
408
|
maxMenuItems,
|
|
409
|
+
menuWidth,
|
|
410
|
+
minQueryLength,
|
|
396
411
|
emptySearchResultsText,
|
|
397
412
|
isDisabled = false,
|
|
398
413
|
htmlName,
|
|
@@ -533,36 +548,47 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
533
548
|
() => ({
|
|
534
549
|
search: async (query: string) => {
|
|
535
550
|
const results = await searchSource.search(query);
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
// Append a "Create: X" synthetic item when hasCreate is true,
|
|
539
|
-
// the user has typed something, and it doesn't exactly match an
|
|
540
|
-
// existing result.
|
|
541
|
-
if (hasCreate && query.trim()) {
|
|
542
|
-
const trimmed = query.trim();
|
|
543
|
-
const alreadyExists =
|
|
544
|
-
selectedIds.has(trimmed) ||
|
|
545
|
-
filtered.some(
|
|
546
|
-
item => item.label.toLowerCase() === trimmed.toLowerCase(),
|
|
547
|
-
);
|
|
548
|
-
if (!alreadyExists) {
|
|
549
|
-
const creatableItem = {
|
|
550
|
-
id: `${CREATABLE_ID_PREFIX}${trimmed}`,
|
|
551
|
-
label: `Create "${trimmed}"`,
|
|
552
|
-
auxiliaryData: {__createdValue: trimmed},
|
|
553
|
-
} as unknown as T;
|
|
554
|
-
filtered.push(creatableItem);
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
return filtered;
|
|
551
|
+
return results.filter(item => !selectedIds.has(item.id));
|
|
559
552
|
},
|
|
560
553
|
bootstrap: async () => {
|
|
561
554
|
const results = await searchSource.bootstrap();
|
|
562
555
|
return results.filter(item => !selectedIds.has(item.id));
|
|
563
556
|
},
|
|
564
557
|
}),
|
|
565
|
-
[searchSource, selectedIds
|
|
558
|
+
[searchSource, selectedIds],
|
|
559
|
+
);
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* The "Create X" entry. It is derived from the typed text, not fetched for
|
|
563
|
+
* it, so it is offered through `__queryEntries` rather than appended to the
|
|
564
|
+
* search results — which is what keeps it available when the query is too
|
|
565
|
+
* short to search. `minQueryLength` is there to avoid a fetch too broad to
|
|
566
|
+
* be worth making; creating `QA` costs no fetch, and a field that can
|
|
567
|
+
* create it should not stop being able to.
|
|
568
|
+
*/
|
|
569
|
+
const createEntries = useCallback(
|
|
570
|
+
(query: string, results: T[]): T[] => {
|
|
571
|
+
const trimmed = query.trim();
|
|
572
|
+
if (!hasCreate || trimmed === '') {
|
|
573
|
+
return [];
|
|
574
|
+
}
|
|
575
|
+
const alreadyExists =
|
|
576
|
+
selectedIds.has(trimmed) ||
|
|
577
|
+
results.some(
|
|
578
|
+
item => item.label.toLowerCase() === trimmed.toLowerCase(),
|
|
579
|
+
);
|
|
580
|
+
if (alreadyExists) {
|
|
581
|
+
return [];
|
|
582
|
+
}
|
|
583
|
+
return [
|
|
584
|
+
{
|
|
585
|
+
id: `${CREATABLE_ID_PREFIX}${trimmed}`,
|
|
586
|
+
label: `Create "${trimmed}"`,
|
|
587
|
+
auxiliaryData: {__createdValue: trimmed},
|
|
588
|
+
} as unknown as T,
|
|
589
|
+
];
|
|
590
|
+
},
|
|
591
|
+
[hasCreate, selectedIds],
|
|
566
592
|
);
|
|
567
593
|
|
|
568
594
|
const emptySource: SearchSource<T> = useMemo(
|
|
@@ -778,6 +804,8 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
778
804
|
placeholder={value.length === 0 ? placeholder : ''}
|
|
779
805
|
hasEntriesOnFocus={isAtMax ? false : hasEntriesOnFocus}
|
|
780
806
|
maxMenuItems={maxMenuItems}
|
|
807
|
+
menuWidth={menuWidth}
|
|
808
|
+
minQueryLength={minQueryLength}
|
|
781
809
|
emptySearchResultsText={emptySearchResultsText}
|
|
782
810
|
isDisabled={isDisabled}
|
|
783
811
|
isFocusableDisabled={showsDisabledMessage}
|
|
@@ -785,6 +813,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
785
813
|
inputId={inputId}
|
|
786
814
|
ariaDescribedBy={ariaDescribedBy}
|
|
787
815
|
onChangeQuery={onChangeQuery}
|
|
816
|
+
__queryEntries={createEntries}
|
|
788
817
|
debounceMs={debounceMs}
|
|
789
818
|
onKeyDown={handleKeyDown}
|
|
790
819
|
anchorRef={wrapperRef}
|
|
@@ -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,
|
|
@@ -860,3 +860,107 @@ describe('TopNavMegaMenu — drawer focus ring', () => {
|
|
|
860
860
|
expectSharedFocusRing(screen.getByRole('link', {name: /Analytics/}));
|
|
861
861
|
});
|
|
862
862
|
});
|
|
863
|
+
|
|
864
|
+
describe('TopNavMegaMenu pass-through props', () => {
|
|
865
|
+
it('forwards pass-through props to the trigger button', () => {
|
|
866
|
+
render(
|
|
867
|
+
<TopNavMegaMenu
|
|
868
|
+
label="Products"
|
|
869
|
+
aria-label="Products mega menu"
|
|
870
|
+
id="mega-trigger"
|
|
871
|
+
data-source="nav"
|
|
872
|
+
/>,
|
|
873
|
+
);
|
|
874
|
+
const trigger = screen.getByRole('button', {name: 'Products mega menu'});
|
|
875
|
+
expect(trigger).toHaveAttribute('id', 'mega-trigger');
|
|
876
|
+
expect(trigger).toHaveAttribute('data-source', 'nav');
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
it('forwards pass-through props to the drawer trigger', () => {
|
|
880
|
+
render(
|
|
881
|
+
<TopNavRenderContext value="drawer">
|
|
882
|
+
<TopNavMegaMenu label="Products" id="mega-drawer" data-source="nav" />
|
|
883
|
+
</TopNavRenderContext>,
|
|
884
|
+
);
|
|
885
|
+
const trigger = screen.getByRole('button', {name: /Products/});
|
|
886
|
+
expect(trigger).toHaveAttribute('id', 'mega-drawer');
|
|
887
|
+
expect(trigger).toHaveAttribute('data-source', 'nav');
|
|
888
|
+
});
|
|
889
|
+
});
|
|
890
|
+
|
|
891
|
+
describe('TopNavMegaMenu — owned handlers on the trigger', () => {
|
|
892
|
+
beforeAll(installPopoverApiMock);
|
|
893
|
+
afterAll(restorePopoverApiMock);
|
|
894
|
+
afterEach(() => {
|
|
895
|
+
vi.useRealTimers();
|
|
896
|
+
});
|
|
897
|
+
|
|
898
|
+
it("composes a caller's onClick with the trigger's own open behavior", async () => {
|
|
899
|
+
const user = userEvent.setup();
|
|
900
|
+
const handleClick = vi.fn();
|
|
901
|
+
render(
|
|
902
|
+
<TopNavMegaMenu
|
|
903
|
+
label="Products"
|
|
904
|
+
items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
|
|
905
|
+
onClick={handleClick}
|
|
906
|
+
/>,
|
|
907
|
+
);
|
|
908
|
+
|
|
909
|
+
const trigger = screen.getByRole('button', {name: 'Products'});
|
|
910
|
+
await user.click(trigger);
|
|
911
|
+
|
|
912
|
+
expect(handleClick).toHaveBeenCalledOnce();
|
|
913
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
it("composes a caller's hover handlers with the trigger's hover-open behavior", async () => {
|
|
917
|
+
vi.useFakeTimers({shouldAdvanceTime: true});
|
|
918
|
+
const user = userEvent.setup({advanceTimers: vi.advanceTimersByTime});
|
|
919
|
+
const handleMouseEnter = vi.fn();
|
|
920
|
+
const handleMouseLeave = vi.fn();
|
|
921
|
+
render(
|
|
922
|
+
<TopNavMegaMenu
|
|
923
|
+
label="Products"
|
|
924
|
+
items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
|
|
925
|
+
onMouseEnter={handleMouseEnter}
|
|
926
|
+
onMouseLeave={handleMouseLeave}
|
|
927
|
+
/>,
|
|
928
|
+
);
|
|
929
|
+
|
|
930
|
+
const trigger = screen.getByRole('button', {name: 'Products'});
|
|
931
|
+
await user.hover(trigger);
|
|
932
|
+
act(() => {
|
|
933
|
+
vi.advanceTimersByTime(200);
|
|
934
|
+
});
|
|
935
|
+
expect(handleMouseEnter).toHaveBeenCalledOnce();
|
|
936
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
937
|
+
|
|
938
|
+
await user.unhover(trigger);
|
|
939
|
+
act(() => {
|
|
940
|
+
vi.advanceTimersByTime(400);
|
|
941
|
+
});
|
|
942
|
+
expect(handleMouseLeave).toHaveBeenCalledOnce();
|
|
943
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
944
|
+
});
|
|
945
|
+
|
|
946
|
+
it("composes a caller's onClick with the drawer section toggle", async () => {
|
|
947
|
+
const user = userEvent.setup();
|
|
948
|
+
const handleClick = vi.fn();
|
|
949
|
+
render(
|
|
950
|
+
<TopNavRenderContext value="drawer">
|
|
951
|
+
<TopNavMegaMenu
|
|
952
|
+
label="Products"
|
|
953
|
+
items={<TopNavMegaMenuItem title="Analytics" href="/analytics" />}
|
|
954
|
+
onClick={handleClick}
|
|
955
|
+
/>
|
|
956
|
+
</TopNavRenderContext>,
|
|
957
|
+
);
|
|
958
|
+
|
|
959
|
+
const trigger = screen.getByRole('button', {name: /Products/});
|
|
960
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
961
|
+
|
|
962
|
+
await user.click(trigger);
|
|
963
|
+
expect(handleClick).toHaveBeenCalledOnce();
|
|
964
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'true');
|
|
965
|
+
});
|
|
966
|
+
});
|
|
@@ -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, composeEventHandlers} 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
|
// =============================================================================
|
|
@@ -335,6 +336,7 @@ export function TopNavMegaMenu({
|
|
|
335
336
|
delay = 150,
|
|
336
337
|
hideDelay = 250,
|
|
337
338
|
onOpenChange,
|
|
339
|
+
...rest
|
|
338
340
|
}: TopNavMegaMenuProps) {
|
|
339
341
|
const renderMode = useTopNavRenderMode();
|
|
340
342
|
|
|
@@ -349,7 +351,14 @@ export function TopNavMegaMenu({
|
|
|
349
351
|
// Drawer mode — inline collapsible
|
|
350
352
|
// =========================================================================
|
|
351
353
|
if (renderMode === 'drawer') {
|
|
352
|
-
return
|
|
354
|
+
return (
|
|
355
|
+
<DrawerMegaMenu
|
|
356
|
+
label={label}
|
|
357
|
+
items={items}
|
|
358
|
+
featured={featured}
|
|
359
|
+
{...rest}
|
|
360
|
+
/>
|
|
361
|
+
);
|
|
353
362
|
}
|
|
354
363
|
|
|
355
364
|
// =========================================================================
|
|
@@ -364,6 +373,7 @@ export function TopNavMegaMenu({
|
|
|
364
373
|
delay={delay}
|
|
365
374
|
hideDelay={hideDelay}
|
|
366
375
|
onOpenChange={onOpenChange}
|
|
376
|
+
{...rest}
|
|
367
377
|
/>
|
|
368
378
|
);
|
|
369
379
|
}
|
|
@@ -386,6 +396,13 @@ function DefaultMegaMenu({
|
|
|
386
396
|
delay = 150,
|
|
387
397
|
hideDelay = 250,
|
|
388
398
|
onOpenChange,
|
|
399
|
+
xstyle,
|
|
400
|
+
className,
|
|
401
|
+
style,
|
|
402
|
+
onClick: onClickProp,
|
|
403
|
+
onMouseEnter: onMouseEnterProp,
|
|
404
|
+
onMouseLeave: onMouseLeaveProp,
|
|
405
|
+
...rest
|
|
389
406
|
}: TopNavMegaMenuProps) {
|
|
390
407
|
const slot = useTopNavSlot();
|
|
391
408
|
const triggerButtonRef = useRef<HTMLButtonElement | null>(null);
|
|
@@ -451,16 +468,29 @@ function DefaultMegaMenu({
|
|
|
451
468
|
return (
|
|
452
469
|
<>
|
|
453
470
|
<button
|
|
454
|
-
ref={
|
|
471
|
+
ref={useMergedRefs(triggerButtonRef, setTriggerEl, ref)}
|
|
455
472
|
type="button"
|
|
473
|
+
{...rest}
|
|
456
474
|
{...popover.triggerProps}
|
|
457
475
|
{...hoverTriggerProps}
|
|
476
|
+
onClick={composeEventHandlers(onClickProp, hoverTriggerProps.onClick)}
|
|
477
|
+
onMouseEnter={composeEventHandlers(
|
|
478
|
+
onMouseEnterProp,
|
|
479
|
+
hoverTriggerProps.onMouseEnter,
|
|
480
|
+
)}
|
|
481
|
+
onMouseLeave={composeEventHandlers(
|
|
482
|
+
onMouseLeaveProp,
|
|
483
|
+
hoverTriggerProps.onMouseLeave,
|
|
484
|
+
)}
|
|
458
485
|
{...mergeProps(
|
|
459
486
|
themeProps('top-nav-mega-menu'),
|
|
460
487
|
focusOutlineProps.focusVisible(
|
|
461
488
|
styles.trigger,
|
|
462
489
|
popover.isOpen && styles.triggerOpen,
|
|
490
|
+
xstyle,
|
|
463
491
|
),
|
|
492
|
+
className,
|
|
493
|
+
style,
|
|
464
494
|
)}>
|
|
465
495
|
{label}
|
|
466
496
|
<Icon
|
|
@@ -512,7 +542,13 @@ function DrawerMegaMenu({
|
|
|
512
542
|
label,
|
|
513
543
|
items,
|
|
514
544
|
featured,
|
|
515
|
-
|
|
545
|
+
xstyle,
|
|
546
|
+
className,
|
|
547
|
+
style,
|
|
548
|
+
onClick: onClickProp,
|
|
549
|
+
...rest
|
|
550
|
+
}: Pick<TopNavMegaMenuProps, 'label' | 'items' | 'featured'> &
|
|
551
|
+
BaseProps<HTMLButtonElement>) {
|
|
516
552
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
517
553
|
const menuId = `mega-menu-${label.toLowerCase().replace(/\s+/g, '-')}`;
|
|
518
554
|
|
|
@@ -521,7 +557,10 @@ function DrawerMegaMenu({
|
|
|
521
557
|
{/* Header toggle — same pattern as TopNavMenu drawer */}
|
|
522
558
|
<button
|
|
523
559
|
type="button"
|
|
524
|
-
|
|
560
|
+
{...rest}
|
|
561
|
+
onClick={composeEventHandlers(onClickProp, () =>
|
|
562
|
+
setIsExpanded(v => !v),
|
|
563
|
+
)}
|
|
525
564
|
aria-expanded={isExpanded}
|
|
526
565
|
aria-controls={`${menuId}-items`}
|
|
527
566
|
{...mergeProps(
|
|
@@ -529,7 +568,10 @@ function DrawerMegaMenu({
|
|
|
529
568
|
focusOutlineProps.focusVisible(
|
|
530
569
|
navItemStyles.item,
|
|
531
570
|
styles.drawerHeader,
|
|
571
|
+
xstyle,
|
|
532
572
|
),
|
|
573
|
+
className,
|
|
574
|
+
style,
|
|
533
575
|
)}>
|
|
534
576
|
{label}
|
|
535
577
|
<Icon
|