@astryxdesign/core 0.3.0 → 0.4.0
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 +156 -0
- package/dist/AlertDialog/AlertDialog.d.ts +10 -2
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +22 -3
- package/dist/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +40 -9
- package/dist/AspectRatio/AspectRatio.d.ts +13 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +9 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -20
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +15 -14
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
- package/dist/Breadcrumbs/index.d.ts +2 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +1 -0
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -15
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +2 -1
- package/dist/Calendar/styles.d.ts +0 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +0 -2
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +2 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -3
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +17 -17
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +36 -125
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -11
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +84 -67
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +35 -15
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +6 -3
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +35 -33
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +1 -1
- package/dist/ContextMenu/index.d.ts +2 -1
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +1 -0
- package/dist/DateInput/DateInput.d.ts +9 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +24 -23
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +11 -16
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +22 -17
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +62 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
- package/dist/DropdownMenu/index.d.ts +2 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +4 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +35 -27
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +9 -5
- package/dist/Field/InputClearButton.d.ts +16 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +15 -4
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- package/dist/Indicator/CheckIndicator.d.ts +25 -0
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckIndicator.js +155 -0
- package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckboxIndicator.js +173 -0
- package/dist/Indicator/RadioIndicator.d.ts +23 -0
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
- package/dist/Indicator/RadioIndicator.js +137 -0
- package/dist/Indicator/index.d.ts +24 -0
- package/dist/Indicator/index.d.ts.map +1 -0
- package/dist/Indicator/index.js +26 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
- package/dist/Indicator/indicator.markers.stylex.js +21 -0
- package/dist/Indicator/indicatorRegistry.d.ts +71 -0
- package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
- package/dist/Indicator/indicatorRegistry.js +93 -0
- package/dist/Indicator/types.d.ts +167 -0
- package/dist/Indicator/types.d.ts.map +1 -0
- package/dist/Indicator/types.js +1 -0
- package/dist/Indicator/useIndicator.d.ts +18 -0
- package/dist/Indicator/useIndicator.d.ts.map +1 -0
- package/dist/Indicator/useIndicator.js +30 -0
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -8
- package/dist/Layer/useLayer.d.ts +14 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +25 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +56 -53
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +4 -5
- package/dist/MobileNav/MobileNav.js +8 -8
- package/dist/MoreMenu/MoreMenu.d.ts +14 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +78 -75
- package/dist/NumberInput/NumberInput.d.ts +27 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +230 -42
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +61 -63
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -8
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
- package/dist/ProgressBar/ProgressBar.d.ts +11 -4
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +96 -6
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +29 -84
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +2 -3
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -11
- package/dist/Selector/Selector.d.ts +2 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +164 -94
- package/dist/Selector/hooks.d.ts +18 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +57 -40
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +29 -14
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +56 -20
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +28 -22
- package/dist/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.js +11 -10
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -3
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +41 -19
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +8 -0
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
- package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/index.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +2 -1
- package/dist/Table/types.d.ts +11 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -6
- package/dist/TextInput/TextInput.d.ts +10 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +13 -19
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +32 -26
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +7 -15
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -11
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +4 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -19
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +6 -5
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +54 -16
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -9
- package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +146 -60
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +83 -38
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +13 -0
- package/dist/TreeList/TreeListBranches.d.ts +1 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +14 -4
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +57 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -8
- package/dist/astryx.css +74 -85
- package/dist/astryx.umd.js +56 -56
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.stylex.d.ts +61 -0
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.stylex.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useClipboard.d.ts +59 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +106 -0
- package/dist/hooks/useContainerReveal.d.ts +14 -8
- package/dist/hooks/useContainerReveal.d.ts.map +1 -1
- package/dist/hooks/useContainerReveal.js +28 -69
- package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
- package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
- package/dist/hooks/useIndicatorFocusRing.js +96 -0
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +12 -2
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +33 -18
- package/dist/hooks/useStreamingText.d.ts +18 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +47 -7
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +9 -3
- package/dist/hooks/useTypeahead.d.ts +3 -2
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +19 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +16 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +8 -0
- package/dist/theme/derivedVarRegistry.d.ts +8 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +14 -13
- package/dist/theme/expandColorScale.d.ts +3 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +17 -7
- package/dist/theme/expandTypeScale.d.ts.map +1 -1
- package/dist/theme/expandTypeScale.js +17 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +11 -0
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.d.ts +107 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +130 -0
- package/dist/utils/focusReturn.d.ts +24 -0
- package/dist/utils/focusReturn.d.ts.map +1 -0
- package/dist/utils/focusReturn.js +29 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/mergeRefs.d.ts.map +1 -1
- package/dist/utils/mergeRefs.js +7 -5
- package/dist/utils/rtlStyles.d.ts +2 -2
- package/dist/utils/rtlStyles.js +2 -2
- package/dist/utils/themeProps.d.ts +20 -1
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +8 -2
- package/locales/en.json +12 -0
- package/locales/pseudo.json +9 -0
- package/package.json +7 -2
- package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
- package/src/AlertDialog/AlertDialog.test.tsx +208 -1
- package/src/AlertDialog/AlertDialog.tsx +21 -3
- package/src/AppShell/AppShell.doc.mjs +11 -0
- package/src/AppShell/AppShell.test.tsx +139 -0
- package/src/AppShell/AppShell.tsx +32 -22
- package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
- package/src/AspectRatio/AspectRatio.test.tsx +30 -0
- package/src/AspectRatio/AspectRatio.tsx +13 -0
- package/src/Avatar/Avatar.doc.mjs +2 -13
- package/src/Avatar/Avatar.test.tsx +33 -8
- package/src/Avatar/Avatar.tsx +52 -50
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
- package/src/Banner/Banner.tsx +9 -6
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.tsx +21 -41
- package/src/Calendar/Calendar.tsx +2 -1
- package/src/Calendar/styles.ts +0 -8
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- package/src/Chat/Chat.doc.mjs +2 -0
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
- package/src/Chat/ChatSendButton.tsx +2 -3
- package/src/Chat/ChatToolCalls.test.tsx +35 -0
- package/src/Chat/ChatToolCalls.tsx +36 -16
- package/src/Chat/useTriggerMenu.tsx +2 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +115 -0
- package/src/CheckboxInput/CheckboxInput.tsx +45 -202
- package/src/ClickableCard/ClickableCard.tsx +6 -11
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
- package/src/CodeBlock/CodeBlock.test.tsx +91 -0
- package/src/CodeBlock/CodeBlock.tsx +57 -80
- package/src/Collapsible/Collapsible.tsx +22 -18
- package/src/CommandPalette/CommandPalette.test.tsx +29 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
- package/src/CommandPalette/CommandPaletteList.tsx +2 -2
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +64 -0
- package/src/ComplexSelector/ComplexSelector.tsx +46 -29
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +41 -0
- package/src/ContextMenu/ContextMenu.tsx +3 -3
- package/src/ContextMenu/index.ts +5 -1
- package/src/DateInput/DateInput.doc.mjs +18 -3
- package/src/DateInput/DateInput.test.tsx +93 -11
- package/src/DateInput/DateInput.tsx +41 -19
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +24 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +75 -0
- package/src/DateTimeInput/DateTimeInput.tsx +35 -8
- package/src/Dialog/Dialog.tsx +2 -9
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
- package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
- package/src/DropdownMenu/DropdownMenu.tsx +113 -52
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
- package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
- package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
- package/src/DropdownMenu/index.ts +8 -1
- package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
- package/src/EmptyState/EmptyState.doc.mjs +4 -0
- package/src/EmptyState/EmptyState.test.tsx +62 -0
- package/src/EmptyState/EmptyState.tsx +16 -6
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/InputClearButton.test.tsx +117 -0
- package/src/Field/InputClearButton.tsx +30 -3
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- package/src/Indicator/CheckIndicator.tsx +174 -0
- package/src/Indicator/CheckboxIndicator.tsx +257 -0
- package/src/Indicator/Indicator.doc.mjs +344 -0
- package/src/Indicator/Indicator.test.tsx +393 -0
- package/src/Indicator/RadioIndicator.tsx +206 -0
- package/src/Indicator/index.ts +45 -0
- package/src/Indicator/indicator.markers.stylex.ts +19 -0
- package/src/Indicator/indicatorRegistry.test.tsx +106 -0
- package/src/Indicator/indicatorRegistry.ts +120 -0
- package/src/Indicator/types.ts +186 -0
- package/src/Indicator/useIndicator.ts +39 -0
- package/src/Item/Item.doc.mjs +1 -1
- package/src/Item/Item.tsx +7 -14
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +85 -0
- package/src/Layer/useLayer.tsx +39 -1
- package/src/Lightbox/Lightbox.doc.mjs +1 -1
- package/src/Lightbox/Lightbox.tsx +43 -38
- package/src/Link/Link.tsx +4 -11
- package/src/MobileNav/MobileNav.tsx +3 -3
- package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
- package/src/MoreMenu/MoreMenu.test.tsx +68 -1
- package/src/MoreMenu/MoreMenu.tsx +19 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +9 -1
- package/src/MultiSelector/MultiSelector.test.tsx +255 -16
- package/src/MultiSelector/MultiSelector.tsx +103 -99
- package/src/NumberInput/NumberInput.doc.mjs +265 -50
- package/src/NumberInput/NumberInput.test.tsx +726 -21
- package/src/NumberInput/NumberInput.tsx +353 -59
- package/src/Outline/Outline.tsx +2 -5
- package/src/Pagination/Pagination.doc.mjs +1 -1
- package/src/Pagination/Pagination.test.tsx +22 -7
- package/src/Pagination/Pagination.tsx +38 -35
- package/src/Popover/Popover.tsx +6 -7
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
- package/src/ProgressBar/ProgressBar.test.tsx +224 -1
- package/src/ProgressBar/ProgressBar.tsx +124 -22
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioListItem.tsx +31 -130
- package/src/Resizable/ResizeHandle.tsx +2 -9
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +7 -4
- package/src/Selector/Selector.test.tsx +935 -25
- package/src/Selector/Selector.tsx +189 -106
- package/src/Selector/hooks.ts +77 -50
- package/src/SideNav/SideNav.test.tsx +46 -0
- package/src/SideNav/SideNav.tsx +1 -0
- package/src/SideNav/SideNavCollapseButton.tsx +15 -10
- package/src/SideNav/SideNavHeading.tsx +48 -10
- package/src/SideNav/SideNavItem.tsx +20 -12
- package/src/Stack/Stack.doc.mjs +110 -0
- package/src/StatusDot/StatusDot.doc.mjs +12 -3
- package/src/Switch/Switch.test.tsx +32 -0
- package/src/Switch/Switch.tsx +8 -8
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -0
- package/src/Table/index.ts +1 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
- package/src/Table/plugins/rowExpansion/index.ts +1 -4
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
- package/src/Table/tableContextMenu.test.tsx +27 -0
- package/src/Table/tableContextMenu.tsx +1 -0
- package/src/Table/types.ts +11 -0
- package/src/Table/useTableGroupedRows.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +43 -66
- package/src/TextArea/TextArea.doc.mjs +42 -2
- package/src/TextArea/TextArea.test.tsx +219 -0
- package/src/TextArea/TextArea.tsx +34 -7
- package/src/TextInput/TextInput.doc.mjs +18 -2
- package/src/TextInput/TextInput.test.tsx +189 -0
- package/src/TextInput/TextInput.tsx +25 -31
- package/src/Thumbnail/Thumbnail.tsx +2 -9
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.test.tsx +30 -3
- package/src/TimeInput/TimeInput.tsx +9 -26
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- package/src/Token/Token.tsx +5 -28
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +45 -3
- package/src/Tokenizer/Tokenizer.tsx +10 -2
- package/src/Tooltip/useTooltip.tsx +2 -23
- package/src/TopNav/TopNav.tsx +1 -3
- package/src/TopNav/TopNavHeading.tsx +42 -13
- package/src/TopNav/TopNavItem.tsx +3 -21
- package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
- package/src/TopNav/TopNavMegaMenu.tsx +118 -53
- package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
- package/src/TopNav/TopNavMenu.tsx +34 -37
- package/src/TreeList/TreeList.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +206 -7
- package/src/TreeList/TreeList.tsx +22 -0
- package/src/TreeList/TreeListBranches.tsx +25 -2
- package/src/TreeList/TreeListItem.tsx +89 -52
- package/src/Typeahead/BaseTypeahead.tsx +19 -6
- package/src/Typeahead/Typeahead.doc.mjs +1 -0
- package/src/Typeahead/Typeahead.test.tsx +76 -3
- package/src/hooks/containerReveal.stylex.ts +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useClipboard.doc.mjs +87 -0
- package/src/hooks/useClipboard.test.tsx +151 -0
- package/src/hooks/useClipboard.ts +135 -0
- package/src/hooks/useContainerReveal.doc.mjs +7 -7
- package/src/hooks/useContainerReveal.test.tsx +42 -62
- package/src/hooks/useContainerReveal.ts +36 -91
- package/src/hooks/useImageMode.test.ts +1 -1
- package/src/hooks/useIndicatorFocusRing.tsx +120 -0
- package/src/hooks/useLongPress.test.tsx +18 -0
- package/src/hooks/useLongPress.ts +12 -2
- package/src/hooks/useScrollLock.test.ts +72 -0
- package/src/hooks/useScrollLock.ts +51 -19
- package/src/hooks/useStreamingText.test.ts +46 -1
- package/src/hooks/useStreamingText.ts +49 -7
- package/src/hooks/useTreeFocus.test.tsx +50 -0
- package/src/hooks/useTreeFocus.ts +14 -3
- package/src/hooks/useTypeahead.test.tsx +150 -0
- package/src/hooks/useTypeahead.ts +24 -9
- package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
- package/src/index.ts +1 -0
- package/src/theme/defineTheme.ts +24 -0
- package/src/theme/derivedVarRegistry.test.ts +21 -1
- package/src/theme/derivedVarRegistry.ts +19 -6
- package/src/theme/expandColorScale.test.ts +14 -0
- package/src/theme/expandColorScale.ts +24 -9
- package/src/theme/expandTypeScale.test.ts +43 -0
- package/src/theme/expandTypeScale.ts +17 -0
- package/src/theme/generateThemeRules.test.ts +61 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +13 -0
- package/src/utils/focusOutline.stylex.ts +163 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/mergeRefs.test.ts +48 -0
- package/src/utils/mergeRefs.ts +12 -6
- package/src/utils/rtlStyles.ts +2 -2
- package/src/utils/themeProps.ts +26 -4
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
- package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
- package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
- package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
- package/dist/RadioList/radio.markers.stylex.js +0 -12
- package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
- package/dist/hooks/containerReveal.pool.stylex.js +0 -292
- package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
- package/src/RadioList/radio.markers.stylex.ts +0 -10
- package/src/hooks/containerReveal.pool.stylex.ts +0 -571
package/src/Layer/useLayer.tsx
CHANGED
|
@@ -50,6 +50,18 @@ const styles = stylex.create({
|
|
|
50
50
|
fixed: {
|
|
51
51
|
position: 'fixed',
|
|
52
52
|
},
|
|
53
|
+
// Clearance from the anchor. Set on BOTH edges of the placement axis, not
|
|
54
|
+
// just the one facing the anchor: `position-try-fallbacks` can flip the
|
|
55
|
+
// layer to the opposite side at paint time, and a single-edge margin then
|
|
56
|
+
// lands on the far side and the gap vanishes (#4803).
|
|
57
|
+
offsetBlock: (offset: string) => ({
|
|
58
|
+
marginBlockStart: offset,
|
|
59
|
+
marginBlockEnd: offset,
|
|
60
|
+
}),
|
|
61
|
+
offsetInline: (offset: string) => ({
|
|
62
|
+
marginInlineStart: offset,
|
|
63
|
+
marginInlineEnd: offset,
|
|
64
|
+
}),
|
|
53
65
|
});
|
|
54
66
|
|
|
55
67
|
/**
|
|
@@ -94,6 +106,20 @@ export interface ContextRenderProps {
|
|
|
94
106
|
* is `'custom'`.
|
|
95
107
|
*/
|
|
96
108
|
alignment?: LayerAlignment;
|
|
109
|
+
/**
|
|
110
|
+
* Clearance between the layer and its anchor, as a CSS length (a number is
|
|
111
|
+
* treated as `px`). Applied along the placement axis and flip-safe, so the
|
|
112
|
+
* gap survives a `position-try-fallbacks` flip to the opposite side.
|
|
113
|
+
*
|
|
114
|
+
* Layers sit flush by default: the hook zeroes the UA margins so anchor
|
|
115
|
+
* positioning has a clean box, and clearance is a deliberate choice per
|
|
116
|
+
* surface. `var(--spacing-1)` is the system's standard clearance.
|
|
117
|
+
*
|
|
118
|
+
* Ignored when `positioning` is `'custom'` — that mode owns its own insets.
|
|
119
|
+
*
|
|
120
|
+
* @default 0
|
|
121
|
+
*/
|
|
122
|
+
offset?: number | string;
|
|
97
123
|
/**
|
|
98
124
|
* ARIA role applied to the popover container (e.g. `'tooltip'`). Lets
|
|
99
125
|
* consumers complete the ARIA pattern and gives test tooling a stable,
|
|
@@ -284,6 +310,10 @@ export interface FixedLayerReturn {
|
|
|
284
310
|
render: (children: ReactNode, props: FixedRenderProps) => ReactNode;
|
|
285
311
|
}
|
|
286
312
|
|
|
313
|
+
function toCssLength(value: number | string): string {
|
|
314
|
+
return typeof value === 'number' ? `${value}px` : value;
|
|
315
|
+
}
|
|
316
|
+
|
|
287
317
|
/**
|
|
288
318
|
* Map logical placement/alignment to a CSS position-area value.
|
|
289
319
|
*
|
|
@@ -530,6 +560,7 @@ export function useLayer(
|
|
|
530
560
|
placement = 'above',
|
|
531
561
|
alignment = 'center',
|
|
532
562
|
positioning = 'anchor',
|
|
563
|
+
offset,
|
|
533
564
|
role,
|
|
534
565
|
'aria-label': ariaLabel,
|
|
535
566
|
xstyle,
|
|
@@ -555,7 +586,14 @@ export function useLayer(
|
|
|
555
586
|
),
|
|
556
587
|
};
|
|
557
588
|
|
|
558
|
-
const
|
|
589
|
+
const offsetStyle =
|
|
590
|
+
positioning === 'anchor' && offset
|
|
591
|
+
? placement === 'above' || placement === 'below'
|
|
592
|
+
? styles.offsetBlock(toCssLength(offset))
|
|
593
|
+
: styles.offsetInline(toCssLength(offset))
|
|
594
|
+
: null;
|
|
595
|
+
|
|
596
|
+
const stylexResult = stylex.props(styles.base, offsetStyle, xstyle);
|
|
559
597
|
const combinedClassName = extraClassName
|
|
560
598
|
? `${extraClassName} ${stylexResult.className ?? ''}`
|
|
561
599
|
: stylexResult.className;
|
|
@@ -77,7 +77,7 @@ export const docs = {
|
|
|
77
77
|
defaults: {
|
|
78
78
|
isOpen: false,
|
|
79
79
|
media: {
|
|
80
|
-
src: '
|
|
80
|
+
src: '/template-assets/light-scene-horizontal-1.png',
|
|
81
81
|
alt: 'Coastal shoreline with ocean waves',
|
|
82
82
|
caption: 'A scenic coastline with waves rolling onto a sandy beach beneath a clear sky.',
|
|
83
83
|
},
|
|
@@ -215,7 +215,12 @@ const styles = stylex.create({
|
|
|
215
215
|
navButton: {
|
|
216
216
|
position: 'absolute',
|
|
217
217
|
top: '50%',
|
|
218
|
-
transform
|
|
218
|
+
// The individual `translate` property, not `transform`: this style now
|
|
219
|
+
// lands on the Button root, and a `transform` here replaces the Button's
|
|
220
|
+
// own transform rules — measured: the `scale(0.98)` press feedback stops
|
|
221
|
+
// firing. `translate` composes with them, reproducing exactly what the
|
|
222
|
+
// removed wrapper element did (wrapper translated, button scaled).
|
|
223
|
+
translate: '0 -50%',
|
|
219
224
|
zIndex: 1,
|
|
220
225
|
},
|
|
221
226
|
navPrev: {
|
|
@@ -595,34 +600,33 @@ export function Lightbox({
|
|
|
595
600
|
{...props}>
|
|
596
601
|
<div ref={containerRef} {...stylex.props(styles.container)}>
|
|
597
602
|
{/* Close button */}
|
|
598
|
-
<
|
|
599
|
-
<
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
/>
|
|
606
|
-
</div>
|
|
603
|
+
<IconButton
|
|
604
|
+
icon={<Icon icon="close" size="sm" color="inherit" />}
|
|
605
|
+
label={t('@astryx.lightbox.close')}
|
|
606
|
+
variant="ghost"
|
|
607
|
+
onClick={handleClose}
|
|
608
|
+
xstyle={[styles.closeButton, styles.controlButton]}
|
|
609
|
+
/>
|
|
607
610
|
|
|
608
611
|
{/* Gallery nav: prev — stays mounted and is disabled at the start of
|
|
609
612
|
the range so pressing/arrowing to the boundary doesn't unmount the
|
|
610
613
|
focused control and drop focus to <body>. */}
|
|
611
614
|
{isGallery && (
|
|
612
|
-
<
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
615
|
+
<IconButton
|
|
616
|
+
icon={
|
|
617
|
+
<Icon
|
|
618
|
+
icon="chevronLeft"
|
|
619
|
+
size="sm"
|
|
620
|
+
color="inherit"
|
|
621
|
+
xstyle={rtlStyles.mirror}
|
|
622
|
+
/>
|
|
623
|
+
}
|
|
624
|
+
label={t('@astryx.lightbox.previous')}
|
|
625
|
+
variant="ghost"
|
|
626
|
+
isDisabled={!canPrev}
|
|
627
|
+
onClick={goToPrev}
|
|
628
|
+
xstyle={[styles.navButton, styles.navPrev, styles.controlButton]}
|
|
629
|
+
/>
|
|
626
630
|
)}
|
|
627
631
|
|
|
628
632
|
{/* Media + caption group (centered together) */}
|
|
@@ -676,20 +680,21 @@ export function Lightbox({
|
|
|
676
680
|
{/* Gallery nav: next — see "prev" above; stays mounted and disabled at
|
|
677
681
|
the end of the range instead of unmounting. */}
|
|
678
682
|
{isGallery && (
|
|
679
|
-
<
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
683
|
+
<IconButton
|
|
684
|
+
icon={
|
|
685
|
+
<Icon
|
|
686
|
+
icon="chevronRight"
|
|
687
|
+
size="sm"
|
|
688
|
+
color="inherit"
|
|
689
|
+
xstyle={rtlStyles.mirror}
|
|
690
|
+
/>
|
|
691
|
+
}
|
|
692
|
+
label={t('@astryx.lightbox.next')}
|
|
693
|
+
variant="ghost"
|
|
694
|
+
isDisabled={!canNext}
|
|
695
|
+
onClick={goToNext}
|
|
696
|
+
xstyle={[styles.navButton, styles.navNext, styles.controlButton]}
|
|
697
|
+
/>
|
|
693
698
|
)}
|
|
694
699
|
|
|
695
700
|
{/* Gallery counter */}
|
package/src/Link/Link.tsx
CHANGED
|
@@ -44,6 +44,7 @@ import {mergeProps} from '../utils';
|
|
|
44
44
|
import {computeTargetAndRel} from './computeTargetAndRel';
|
|
45
45
|
import {useInteractiveRole} from '../hooks/useInteractiveRole';
|
|
46
46
|
import {themeProps} from '../utils/themeProps';
|
|
47
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
47
48
|
import {useTranslator} from '../i18n';
|
|
48
49
|
|
|
49
50
|
/**
|
|
@@ -68,14 +69,6 @@ const styles = stylex.create({
|
|
|
68
69
|
transitionProperty: 'color, text-decoration',
|
|
69
70
|
transitionDuration: durationVars['--duration-fast'],
|
|
70
71
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
71
|
-
outline: {
|
|
72
|
-
default: null,
|
|
73
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
74
|
-
},
|
|
75
|
-
outlineOffset: {
|
|
76
|
-
default: '0',
|
|
77
|
-
':focus-visible': '2px',
|
|
78
|
-
},
|
|
79
72
|
},
|
|
80
73
|
/**
|
|
81
74
|
* Reset styles for rendering as a <button> when href is undefined.
|
|
@@ -368,7 +361,7 @@ export function Link({
|
|
|
368
361
|
disabled={isDisabled}
|
|
369
362
|
{...mergeProps(
|
|
370
363
|
themeProps('link', {color}),
|
|
371
|
-
|
|
364
|
+
focusOutlineProps.focusVisible(
|
|
372
365
|
styles.base,
|
|
373
366
|
styles.buttonReset,
|
|
374
367
|
linkColorStyles[color],
|
|
@@ -400,7 +393,7 @@ export function Link({
|
|
|
400
393
|
tabIndex={-1}
|
|
401
394
|
{...mergeProps(
|
|
402
395
|
themeProps('link', {color}),
|
|
403
|
-
|
|
396
|
+
focusOutlineProps.focusVisible(
|
|
404
397
|
styles.base,
|
|
405
398
|
linkColorStyles[color],
|
|
406
399
|
hasUnderline && styles.hasUnderline,
|
|
@@ -428,7 +421,7 @@ export function Link({
|
|
|
428
421
|
tabIndex={isDisabled ? -1 : undefined}
|
|
429
422
|
{...mergeProps(
|
|
430
423
|
themeProps('link', {color}),
|
|
431
|
-
|
|
424
|
+
focusOutlineProps.focusVisible(
|
|
432
425
|
styles.base,
|
|
433
426
|
linkColorStyles[color],
|
|
434
427
|
hasUnderline && styles.hasUnderline,
|
|
@@ -453,9 +453,9 @@ export function MobileNav({
|
|
|
453
453
|
{/* Header — content + close button */}
|
|
454
454
|
<div {...stylex.props(styles.header, !header && styles.headerNoTitle)}>
|
|
455
455
|
{typeof header === 'string' ? (
|
|
456
|
-
<
|
|
457
|
-
|
|
458
|
-
</
|
|
456
|
+
<Heading level={2} xstyle={styles.headerText}>
|
|
457
|
+
{header}
|
|
458
|
+
</Heading>
|
|
459
459
|
) : (
|
|
460
460
|
(header ?? null)
|
|
461
461
|
)}
|
|
@@ -47,6 +47,20 @@ export const docs = {
|
|
|
47
47
|
description: 'Whether the menu trigger is disabled.',
|
|
48
48
|
default: 'false',
|
|
49
49
|
}, {
|
|
50
|
+
name: 'placement',
|
|
51
|
+
type: "'above' | 'below' | 'start' | 'end'",
|
|
52
|
+
description:
|
|
53
|
+
"Position of the menu relative to the trigger. Logical: start/end resolve against the menu's own inherited direction (RTL mirrors).",
|
|
54
|
+
default: "'below'",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'alignment',
|
|
58
|
+
type: "'start' | 'center' | 'end'",
|
|
59
|
+
description:
|
|
60
|
+
"Alignment along the placement axis. Use 'end' to align the menu with the trigger's trailing edge, which is usually what an overflow menu wants.",
|
|
61
|
+
default: "'start'",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
50
64
|
name: 'xstyle',
|
|
51
65
|
type: 'StyleXStyles',
|
|
52
66
|
description:
|
|
@@ -120,6 +134,20 @@ export const docsZh = {
|
|
|
120
134
|
description: '菜单触发器是否禁用。',
|
|
121
135
|
default: 'false',
|
|
122
136
|
}, {
|
|
137
|
+
name: 'placement',
|
|
138
|
+
type: "'above' | 'below' | 'start' | 'end'",
|
|
139
|
+
description:
|
|
140
|
+
'菜单相对于触发按钮的位置。逻辑方向:start/end 依据菜单自身继承的书写方向解析(RTL 自动镜像)。',
|
|
141
|
+
default: "'below'",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: 'alignment',
|
|
145
|
+
type: "'start' | 'center' | 'end'",
|
|
146
|
+
description:
|
|
147
|
+
"沿放置轴的对齐方式。使用 'end' 让菜单与触发器的尾部边缘对齐,这通常是溢出菜单所需的效果。",
|
|
148
|
+
default: "'start'",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
123
151
|
name: 'xstyle',
|
|
124
152
|
type: 'StyleXStyles',
|
|
125
153
|
description:
|
|
@@ -162,6 +190,9 @@ export const docsDense = {
|
|
|
162
190
|
size: 'Trigger button size.',
|
|
163
191
|
icon: 'Override default three-dot icon. Accepts any ReactNode.',
|
|
164
192
|
isDisabled: 'Whether menu trigger disabled.',
|
|
193
|
+
placement: 'Menu position relative to trigger. Logical (RTL mirrors).',
|
|
194
|
+
alignment:
|
|
195
|
+
"Alignment along the placement axis. 'end' aligns with the trigger's trailing edge.",
|
|
165
196
|
xstyle:
|
|
166
197
|
'StyleX styles for layout customization (margins, positioning, sizing). Must be stylex.create() value.',
|
|
167
198
|
},
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
|
-
import {render, screen} from '@testing-library/react';
|
|
13
|
+
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
15
|
import {MoreMenu} from './MoreMenu';
|
|
16
|
+
import {DropdownMenu} from '../DropdownMenu/DropdownMenu';
|
|
16
17
|
|
|
17
18
|
// Mock showPopover and hidePopover methods since they're not implemented in jsdom
|
|
18
19
|
beforeEach(() => {
|
|
@@ -197,4 +198,70 @@ describe('MoreMenu', () => {
|
|
|
197
198
|
const menu = screen.getByRole('menu', {hidden: true});
|
|
198
199
|
expect(menu.className).toContain('astryx-more-menu');
|
|
199
200
|
});
|
|
201
|
+
|
|
202
|
+
it('pointer open focuses the menu container, not the first item (#4477)', async () => {
|
|
203
|
+
const user = userEvent.setup();
|
|
204
|
+
render(<MoreMenu items={defaultItems} />);
|
|
205
|
+
|
|
206
|
+
await user.click(screen.getByRole('button', {name: 'More options'}));
|
|
207
|
+
|
|
208
|
+
const menu = screen.getByRole('menu', {hidden: true});
|
|
209
|
+
await waitFor(() => expect(menu).toHaveFocus());
|
|
210
|
+
expect(
|
|
211
|
+
screen.getByRole('menuitem', {name: 'Edit', hidden: true}),
|
|
212
|
+
).not.toHaveFocus();
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('first ArrowDown after a pointer open moves focus to the first item (#4477)', async () => {
|
|
216
|
+
const user = userEvent.setup();
|
|
217
|
+
render(<MoreMenu items={defaultItems} />);
|
|
218
|
+
|
|
219
|
+
await user.click(screen.getByRole('button', {name: 'More options'}));
|
|
220
|
+
const menu = screen.getByRole('menu', {hidden: true});
|
|
221
|
+
await waitFor(() => expect(menu).toHaveFocus());
|
|
222
|
+
|
|
223
|
+
fireEvent.keyDown(menu, {key: 'ArrowDown'});
|
|
224
|
+
expect(
|
|
225
|
+
screen.getByRole('menuitem', {name: 'Edit', hidden: true}),
|
|
226
|
+
).toHaveFocus();
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
describe('placement and alignment', () => {
|
|
230
|
+
const positionAreaOf = (menu: HTMLElement) =>
|
|
231
|
+
menu
|
|
232
|
+
.closest('[popover]')
|
|
233
|
+
?.getAttribute('style')
|
|
234
|
+
?.match(/position-area:[^;]*/)?.[0];
|
|
235
|
+
|
|
236
|
+
it('resolves the same default position as DropdownMenu', () => {
|
|
237
|
+
render(
|
|
238
|
+
<>
|
|
239
|
+
<MoreMenu items={defaultItems} />
|
|
240
|
+
<DropdownMenu button={{label: 'Actions'}} items={defaultItems} />
|
|
241
|
+
</>,
|
|
242
|
+
);
|
|
243
|
+
const [moreMenu, dropdownMenu] = screen.getAllByRole('menu', {
|
|
244
|
+
hidden: true,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
expect(positionAreaOf(moreMenu)).toBe(positionAreaOf(dropdownMenu));
|
|
248
|
+
expect(positionAreaOf(moreMenu)).toBe(
|
|
249
|
+
'position-area: self-block-end span-self-inline-end',
|
|
250
|
+
);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it('forwards alignment to the menu layer', () => {
|
|
254
|
+
render(<MoreMenu items={defaultItems} alignment="end" />);
|
|
255
|
+
expect(positionAreaOf(screen.getByRole('menu', {hidden: true}))).toBe(
|
|
256
|
+
'position-area: self-block-end span-self-inline-start',
|
|
257
|
+
);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it('forwards placement to the menu layer', () => {
|
|
261
|
+
render(<MoreMenu items={defaultItems} placement="above" />);
|
|
262
|
+
expect(positionAreaOf(screen.getByRole('menu', {hidden: true}))).toBe(
|
|
263
|
+
'position-area: self-block-start span-self-inline-end',
|
|
264
|
+
);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
200
267
|
});
|
|
@@ -23,6 +23,7 @@ import {useIcon} from '../Icon';
|
|
|
23
23
|
import {DropdownMenu} from '../DropdownMenu/DropdownMenu';
|
|
24
24
|
import {useSize} from '../SizeContext/SizeContext';
|
|
25
25
|
import type {DropdownMenuOption} from '../DropdownMenu';
|
|
26
|
+
import type {LayerAlignment, LayerPlacement} from '../Layer';
|
|
26
27
|
import type {ButtonVariant, ButtonSize} from '../Button';
|
|
27
28
|
import type {BaseProps} from '../BaseProps';
|
|
28
29
|
import {stableClassName} from '../naming';
|
|
@@ -72,6 +73,20 @@ export interface MoreMenuProps extends Pick<
|
|
|
72
73
|
*/
|
|
73
74
|
isDisabled?: boolean;
|
|
74
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Position of the menu relative to the trigger button.
|
|
78
|
+
* Forwarded to DropdownMenu, which owns the default.
|
|
79
|
+
* @default 'below'
|
|
80
|
+
*/
|
|
81
|
+
placement?: LayerPlacement;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Alignment of the menu along the placement axis.
|
|
85
|
+
* Forwarded to DropdownMenu, which owns the default.
|
|
86
|
+
* @default 'start'
|
|
87
|
+
*/
|
|
88
|
+
alignment?: LayerAlignment;
|
|
89
|
+
|
|
75
90
|
/**
|
|
76
91
|
* Controlled open state for the menu.
|
|
77
92
|
*/
|
|
@@ -108,6 +123,8 @@ export function MoreMenu({
|
|
|
108
123
|
size: sizeProp,
|
|
109
124
|
icon,
|
|
110
125
|
isDisabled = false,
|
|
126
|
+
placement,
|
|
127
|
+
alignment,
|
|
111
128
|
isMenuOpen,
|
|
112
129
|
onOpenChange,
|
|
113
130
|
xstyle,
|
|
@@ -132,6 +149,8 @@ export function MoreMenu({
|
|
|
132
149
|
style={style}
|
|
133
150
|
isMenuOpen={isMenuOpen}
|
|
134
151
|
onOpenChange={onOpenChange}
|
|
152
|
+
placement={placement}
|
|
153
|
+
alignment={alignment}
|
|
135
154
|
button={{
|
|
136
155
|
label,
|
|
137
156
|
icon: icon ?? moreIcon,
|
|
@@ -23,12 +23,20 @@ export const docs = {
|
|
|
23
23
|
{
|
|
24
24
|
className: 'astryx-multi-selector',
|
|
25
25
|
visualProps: ['variant', 'size', 'status'],
|
|
26
|
+
states: ['disabled'],
|
|
26
27
|
},
|
|
27
|
-
{className: 'astryx-multi-selector-clear-icon'},
|
|
28
|
+
{className: 'astryx-multi-selector-clear-icon', deprecatedFor: 'input-clear-icon'},
|
|
29
|
+
{className: 'astryx-multi-selector-empty-state'},
|
|
28
30
|
{
|
|
29
31
|
className: 'astryx-multi-selector-indicator-icon',
|
|
30
32
|
states: ['state'],
|
|
31
33
|
},
|
|
34
|
+
{
|
|
35
|
+
className: 'astryx-multi-selector-option',
|
|
36
|
+
visualProps: ['size'],
|
|
37
|
+
states: ['select-all', 'selected', 'disabled'],
|
|
38
|
+
},
|
|
39
|
+
{className: 'astryx-multi-selector-popup'},
|
|
32
40
|
],
|
|
33
41
|
},
|
|
34
42
|
components: [
|