@astryxdesign/core 0.1.8 → 0.1.9-canary.09e9ddd
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 +100 -0
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +6 -2
- package/dist/AppShell/AppShellMobileContext.d.ts +8 -0
- package/dist/AppShell/AppShellMobileContext.d.ts.map +1 -1
- package/dist/Avatar/Avatar.d.ts +53 -3
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +203 -49
- package/dist/Avatar/AvatarStatusDot.d.ts +33 -5
- package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
- package/dist/Avatar/AvatarStatusDot.js +144 -19
- package/dist/AvatarGroup/AvatarGroup.d.ts +7 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +58 -6
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +1 -0
- package/dist/Banner/Banner.d.ts +9 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +33 -4
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +31 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +208 -6
- package/dist/Breadcrumbs/index.d.ts +5 -0
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +9 -1
- package/dist/Button/Button.d.ts +8 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +33 -4
- package/dist/ButtonGroup/ButtonGroup.d.ts +9 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +30 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +30 -2
- package/dist/Calendar/dayCellUtils.js +1 -1
- package/dist/Card/Card.d.ts +8 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +28 -2
- package/dist/Carousel/Carousel.d.ts +4 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +24 -4
- package/dist/Chat/ChatComposer.d.ts +8 -0
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +46 -7
- package/dist/Chat/ChatComposerDrawer.d.ts +2 -0
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +11 -1
- package/dist/Chat/ChatComposerInput.d.ts +20 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +36 -4
- package/dist/Chat/ChatContext.d.ts +33 -0
- package/dist/Chat/ChatContext.d.ts.map +1 -1
- package/dist/Chat/ChatContext.js +16 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +1 -1
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +4 -4
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +4 -4
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +7 -1
- package/dist/Chat/ChatToolCalls.d.ts +5 -1
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +18 -9
- package/dist/Chat/index.d.ts +2 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/Chat/index.js +1 -1
- package/dist/Chat/useChatStreamScroll.d.ts +2 -1
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +22 -8
- package/dist/Chat/useSpeechRecognition.d.ts +0 -1
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +1 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -2
- package/dist/CheckboxInput/CheckboxInput.js +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts +20 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +11 -1
- package/dist/Citation/Citation.d.ts +22 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +20 -6
- package/dist/ClickableCard/ClickableCard.d.ts +9 -2
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +5 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +9 -2
- package/dist/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +3 -1
- package/dist/CommandPalette/CommandPaletteGroup.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteGroup.js +9 -2
- package/dist/CommandPalette/CommandPaletteInput.d.ts +7 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +6 -1
- package/dist/CommandPalette/CommandPaletteItem.js +1 -1
- package/dist/DateInput/DateInput.d.ts +55 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +28 -2
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +3 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +18 -3
- package/dist/Dialog/Dialog.d.ts +3 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +57 -6
- package/dist/Dialog/DialogContext.d.ts +7 -0
- package/dist/Dialog/DialogContext.d.ts.map +1 -1
- package/dist/Dialog/DialogContext.js +2 -2
- package/dist/Dialog/DialogHeader.d.ts +5 -2
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +6 -1
- package/dist/Divider/Divider.js +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +1 -2
- package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +1 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +2 -3
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +43 -16
- package/dist/FieldStatus/FieldStatus.d.ts +15 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +58 -6
- package/dist/FileInput/FileInput.d.ts +9 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +42 -20
- package/dist/HoverCard/HoverCard.d.ts +9 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +2 -0
- package/dist/HoverCard/useHoverCard.d.ts +8 -0
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +7 -2
- package/dist/Icon/Icon.d.ts +7 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Item/Item.d.ts +6 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +22 -1
- package/dist/Layer/useLayer.d.ts +6 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +2 -0
- package/dist/Lightbox/Lightbox.js +4 -4
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +6 -1
- package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
- package/dist/MobileNav/MobileNavToggle.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +9 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +41 -12
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +16 -0
- package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
- package/dist/NumberInput/NumberInput.d.ts +9 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +8 -1
- package/dist/Outline/Outline.d.ts +0 -1
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +0 -1
- package/dist/OverflowList/OverflowList.d.ts +20 -3
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +29 -4
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +11 -3
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +3 -2
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +3 -9
- package/dist/PowerSearch/PowerSearch.d.ts +9 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +2 -0
- package/dist/PowerSearch/PowerSearchEditPopover.js +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.d.ts +9 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +16 -13
- package/dist/Selector/Selector.d.ts +8 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +7 -3
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +16 -0
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +21 -8
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +19 -2
- package/dist/Stack/stack.stylex.d.ts +9 -9
- package/dist/TabList/Tab.js +2 -2
- package/dist/TabList/TabMenu.js +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +3 -2
- package/dist/Table/TableCell.js +3 -3
- package/dist/Table/TableHeaderCell.js +3 -3
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/index.d.ts +3 -0
- package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -0
- package/dist/Table/plugins/rowStatus/index.js +3 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +60 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -0
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +145 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts +13 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +4 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +16 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +87 -0
- package/dist/Table/plugins/tree/useTableTreeState.d.ts +6 -0
- package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeState.js +22 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -3
- package/dist/TextArea/TextArea.d.ts +9 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +2 -0
- package/dist/TextInput/TextInput.d.ts +9 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +6 -1
- package/dist/Thumbnail/Thumbnail.d.ts +26 -5
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +97 -54
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts +9 -0
- package/dist/Thumbnail/thumbnail.markers.stylex.d.ts.map +1 -0
- package/dist/Thumbnail/thumbnail.markers.stylex.js +14 -0
- package/dist/TimeInput/TimeInput.d.ts +9 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +17 -4
- package/dist/Timestamp/Timestamp.d.ts +3 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +8 -6
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +2 -5
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +0 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
- package/dist/Tokenizer/Tokenizer.d.ts +10 -3
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +18 -4
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +18 -8
- package/dist/TopNav/TopNavMegaMenu.js +10 -4
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +9 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +8 -1
- package/dist/TopNav/TopNavMenu.d.ts +2 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +68 -6
- package/dist/TreeList/TreeList.d.ts +12 -3
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +2 -0
- package/dist/TreeList/TreeListBranches.d.ts +5 -0
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +10 -4
- package/dist/TreeList/TreeListItem.d.ts +8 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +28 -8
- package/dist/TreeList/TreeListTypes.d.ts +25 -1
- package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
- package/dist/TreeList/index.d.ts +2 -2
- package/dist/TreeList/index.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +20 -11
- package/dist/Typeahead/Typeahead.d.ts +9 -2
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +2 -0
- package/dist/astryx.css +41 -31
- package/dist/astryx.umd.js +51 -51
- package/dist/astryx.umd.js.map +4 -4
- package/dist/authoring/doc.d.ts.map +1 -1
- package/dist/docs-types.d.ts +8 -0
- package/dist/docs-types.d.ts.map +1 -1
- package/dist/hooks/computeOverflow.d.ts +47 -0
- package/dist/hooks/computeOverflow.d.ts.map +1 -0
- package/dist/hooks/computeOverflow.js +213 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/hooks/isRtlElement.d.ts +18 -0
- package/dist/hooks/isRtlElement.d.ts.map +1 -0
- package/dist/hooks/isRtlElement.js +27 -0
- package/dist/hooks/useDevWarning.d.ts +18 -0
- package/dist/hooks/useDevWarning.d.ts.map +1 -0
- package/dist/hooks/useDevWarning.js +49 -0
- package/dist/hooks/useGridFocus.d.ts +6 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +12 -9
- package/dist/hooks/useListFocus.d.ts +6 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +12 -4
- package/dist/hooks/useOverflow.d.ts +19 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +36 -25
- package/dist/i18n/InternationalizationContext.d.ts +1 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -0
- package/dist/i18n/InternationalizationProvider.d.ts +8 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +5 -1
- package/dist/i18n/getLocaleDirection.d.ts +18 -0
- package/dist/i18n/getLocaleDirection.d.ts.map +1 -0
- package/dist/i18n/getLocaleDirection.js +29 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +7 -1
- package/dist/i18n/resolve.d.ts.map +1 -1
- package/dist/i18n/resolve.js +7 -18
- package/dist/i18n/useDirection.d.ts +2 -0
- package/dist/i18n/useDirection.d.ts.map +1 -0
- package/dist/i18n/useDirection.js +27 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +2 -7
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +13 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +51 -0
- package/dist/theme/hct.d.ts +0 -1
- package/dist/theme/hct.d.ts.map +1 -1
- package/dist/theme/hct.js +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.js +2 -1
- package/dist/utils/devWarning.d.ts +42 -0
- package/dist/utils/devWarning.d.ts.map +1 -0
- package/dist/utils/devWarning.js +88 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/plainDate.d.ts +30 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +53 -0
- package/dist/utils/types.d.ts +13 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/locales/en.json +32 -0
- package/locales/fr-FR.json +14 -0
- package/locales/pseudo.json +24 -0
- package/package.json +1 -1
- package/src/AppShell/AppShell.tsx +6 -0
- package/src/AppShell/AppShellMobileContext.tsx +8 -0
- package/src/AppShell/useAppShellMobile.doc.mjs +8 -0
- package/src/Avatar/Avatar.doc.mjs +60 -3
- package/src/Avatar/Avatar.test.tsx +281 -1
- package/src/Avatar/Avatar.tsx +324 -64
- package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
- package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
- package/src/Avatar/AvatarStatusDot.tsx +178 -21
- package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
- package/src/AvatarGroup/AvatarGroup.test.tsx +125 -0
- package/src/AvatarGroup/AvatarGroup.tsx +58 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +1 -0
- package/src/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +30 -0
- package/src/Banner/Banner.tsx +53 -9
- package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +26 -0
- package/src/Breadcrumbs/BreadcrumbItem.tsx +333 -14
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +2 -0
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +284 -2
- package/src/Breadcrumbs/index.ts +27 -0
- package/src/Button/Button.doc.mjs +9 -4
- package/src/Button/Button.test.tsx +49 -0
- package/src/Button/Button.tsx +27 -3
- package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -0
- package/src/ButtonGroup/ButtonGroup.test.tsx +37 -0
- package/src/ButtonGroup/ButtonGroup.tsx +32 -0
- package/src/Calendar/Calendar.doc.mjs +12 -1
- package/src/Calendar/Calendar.test.tsx +193 -0
- package/src/Calendar/Calendar.tsx +38 -16
- package/src/Calendar/dayCellUtils.test.ts +5 -0
- package/src/Calendar/dayCellUtils.ts +1 -1
- package/src/Card/Card.doc.mjs +9 -0
- package/src/Card/Card.test.tsx +21 -3
- package/src/Card/Card.tsx +35 -2
- package/src/Carousel/Carousel.doc.mjs +1 -0
- package/src/Carousel/Carousel.test.tsx +53 -0
- package/src/Carousel/Carousel.tsx +34 -4
- package/src/Chat/ChatComposer.doc.mjs +12 -3
- package/src/Chat/ChatComposer.test.tsx +115 -0
- package/src/Chat/ChatComposer.tsx +73 -9
- package/src/Chat/ChatComposerDrawer.test.tsx +61 -0
- package/src/Chat/ChatComposerDrawer.tsx +11 -1
- package/src/Chat/ChatComposerInput.doc.mjs +7 -0
- package/src/Chat/ChatComposerInput.test.tsx +103 -0
- package/src/Chat/ChatComposerInput.tsx +51 -5
- package/src/Chat/ChatContext.tsx +37 -10
- package/src/Chat/ChatDictationButton.tsx +4 -1
- package/src/Chat/ChatLayout.tsx +7 -5
- package/src/Chat/ChatLayoutScrollButton.tsx +7 -2
- package/src/Chat/ChatMessageMetadata.tsx +1 -2
- package/src/Chat/ChatSendButton.tsx +11 -1
- package/src/Chat/ChatToolCalls.test.tsx +64 -0
- package/src/Chat/ChatToolCalls.tsx +25 -4
- package/src/Chat/index.ts +5 -1
- package/src/Chat/useChatStreamScroll.test.tsx +49 -0
- package/src/Chat/useChatStreamScroll.ts +27 -10
- package/src/Chat/useSpeechRecognition.ts +1 -1
- package/src/Chat/useTriggerMenu.tsx +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +32 -1
- package/src/CheckboxInput/CheckboxInput.tsx +1 -1
- package/src/CheckboxList/CheckboxList.test.tsx +81 -3
- package/src/CheckboxList/CheckboxListItem.doc.mjs +33 -5
- package/src/CheckboxList/CheckboxListItem.tsx +41 -5
- package/src/Citation/Citation.doc.mjs +4 -3
- package/src/Citation/Citation.test.tsx +97 -0
- package/src/Citation/Citation.tsx +43 -11
- package/src/ClickableCard/ClickableCard.doc.mjs +2 -0
- package/src/ClickableCard/ClickableCard.test.tsx +34 -0
- package/src/ClickableCard/ClickableCard.tsx +13 -3
- package/src/CodeBlock/CodeBlock.test.tsx +56 -0
- package/src/CodeBlock/CodeBlock.tsx +10 -2
- package/src/CommandPalette/CommandPalette.doc.mjs +1 -0
- package/src/CommandPalette/CommandPalette.tsx +3 -1
- package/src/CommandPalette/CommandPaletteGroup.test.tsx +71 -0
- package/src/CommandPalette/CommandPaletteGroup.tsx +12 -1
- package/src/CommandPalette/CommandPaletteInput.doc.mjs +26 -9
- package/src/CommandPalette/CommandPaletteInput.test.tsx +34 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +11 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +193 -0
- package/src/DateInput/DateInput.doc.mjs +31 -0
- package/src/DateInput/DateInput.test.tsx +131 -0
- package/src/DateInput/DateInput.tsx +78 -3
- package/src/DateInput/index.ts +1 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +8 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +23 -0
- package/src/DateRangeInput/DateRangeInput.tsx +13 -3
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -1
- package/src/DateTimeInput/DateTimeInput.test.tsx +147 -0
- package/src/DateTimeInput/DateTimeInput.tsx +42 -18
- package/src/Dialog/Dialog.doc.mjs +2 -2
- package/src/Dialog/Dialog.test.tsx +77 -4
- package/src/Dialog/Dialog.tsx +89 -5
- package/src/Dialog/DialogContext.ts +9 -2
- package/src/Dialog/DialogHeader.doc.mjs +2 -2
- package/src/Dialog/DialogHeader.tsx +9 -2
- package/src/Divider/Divider.tsx +2 -2
- package/src/DropdownMenu/DropdownMenu.test.tsx +169 -0
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +1 -2
- package/src/DropdownMenu/DropdownMenuItem.tsx +1 -1
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +1 -2
- package/src/Field/Field.test.tsx +57 -12
- package/src/Field/Field.tsx +6 -5
- package/src/Field/FieldLabel.tsx +9 -1
- package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
- package/src/FieldStatus/FieldStatus.test.tsx +150 -40
- package/src/FieldStatus/FieldStatus.tsx +63 -5
- package/src/FileInput/FileInput.doc.mjs +17 -2
- package/src/FileInput/FileInput.test.tsx +135 -12
- package/src/FileInput/FileInput.tsx +53 -28
- package/src/HoverCard/HoverCard.doc.mjs +13 -0
- package/src/HoverCard/HoverCard.test.tsx +21 -2
- package/src/HoverCard/HoverCard.tsx +11 -0
- package/src/HoverCard/useHoverCard.doc.mjs +2 -0
- package/src/HoverCard/useHoverCard.tsx +24 -2
- package/src/Icon/Icon.doc.mjs +3 -2
- package/src/Icon/Icon.tsx +7 -2
- package/src/IconButton/IconButton.doc.mjs +8 -0
- package/src/IconButton/IconButton.test.tsx +15 -18
- package/src/Item/Item.test.tsx +40 -18
- package/src/Item/Item.tsx +38 -2
- package/src/Layer/useLayer.tsx +8 -0
- package/src/Lightbox/Lightbox.tsx +4 -4
- package/src/List/List.test.tsx +9 -8
- package/src/MobileNav/MobileNav.tsx +12 -1
- package/src/MobileNav/MobileNavToggle.test.tsx +116 -0
- package/src/MobileNav/MobileNavToggle.tsx +9 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +13 -2
- package/src/MultiSelector/MultiSelector.test.tsx +195 -3
- package/src/MultiSelector/MultiSelector.tsx +65 -12
- package/src/MultiSelector/hooks.ts +17 -0
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +15 -0
- package/src/NumberInput/NumberInput.test.tsx +82 -7
- package/src/NumberInput/NumberInput.tsx +21 -4
- package/src/Outline/Outline.tsx +0 -1
- package/src/OverflowList/OverflowList.doc.mjs +39 -6
- package/src/OverflowList/OverflowList.test.tsx +111 -0
- package/src/OverflowList/OverflowList.tsx +48 -8
- package/src/Pagination/Pagination.tsx +11 -3
- package/src/Popover/Popover.tsx +7 -4
- package/src/Popover/usePopover.tsx +9 -13
- package/src/PowerSearch/PowerSearch.doc.mjs +29 -0
- package/src/PowerSearch/PowerSearch.test.tsx +43 -0
- package/src/PowerSearch/PowerSearch.tsx +10 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +67 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +1 -1
- package/src/PowerSearch/usePowerSearchSource.ts +1 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +2 -0
- package/src/SelectableCard/SelectableCard.test.tsx +46 -4
- package/src/SelectableCard/SelectableCard.tsx +29 -16
- package/src/Selector/Selector.doc.mjs +7 -0
- package/src/Selector/Selector.test.tsx +92 -0
- package/src/Selector/Selector.tsx +16 -2
- package/src/Selector/hooks.ts +17 -0
- package/src/SideNav/SideNav.test.tsx +119 -3
- package/src/SideNav/SideNavCollapseButton.tsx +6 -1
- package/src/SideNav/SideNavHeading.tsx +24 -8
- package/src/SideNav/SideNavItem.tsx +5 -1
- package/src/Slider/Slider.test.tsx +75 -2
- package/src/Slider/Slider.tsx +21 -5
- package/src/Switch/Switch.test.tsx +32 -1
- package/src/TabList/Tab.tsx +2 -2
- package/src/TabList/TabMenu.tsx +2 -2
- package/src/Table/BaseTable.tsx +3 -5
- package/src/Table/TableCell.tsx +3 -3
- package/src/Table/TableHeaderCell.tsx +3 -3
- package/src/Table/index.ts +5 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +6 -2
- package/src/Table/plugins/rowStatus/index.ts +7 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +138 -0
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +189 -0
- package/src/Table/plugins/selection/useTableSelection.test.tsx +16 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +19 -1
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -1
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +135 -3
- package/src/Table/plugins/tree/useTableTreeData.tsx +128 -1
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +104 -0
- package/src/Table/plugins/tree/useTableTreeState.tsx +46 -2
- package/src/Table/useBaseTablePlugins.ts +10 -6
- package/src/Table/useTableRowStatus.doc.mjs +30 -0
- package/src/Table/useTableSelection.doc.mjs +65 -14
- package/src/Table/useTableTreeData.doc.mjs +29 -0
- package/src/Table/useTableTreeState.doc.mjs +2 -2
- package/src/TextArea/TextArea.doc.mjs +15 -0
- package/src/TextArea/TextArea.test.tsx +32 -1
- package/src/TextArea/TextArea.tsx +10 -0
- package/src/TextInput/TextInput.doc.mjs +15 -0
- package/src/TextInput/TextInput.test.tsx +44 -0
- package/src/TextInput/TextInput.tsx +13 -1
- package/src/Thumbnail/Thumbnail.doc.mjs +19 -10
- package/src/Thumbnail/Thumbnail.test.tsx +98 -7
- package/src/Thumbnail/Thumbnail.tsx +142 -42
- package/src/Thumbnail/thumbnail.markers.stylex.ts +12 -0
- package/src/TimeInput/TimeInput.doc.mjs +15 -0
- package/src/TimeInput/TimeInput.test.tsx +99 -1
- package/src/TimeInput/TimeInput.tsx +29 -6
- package/src/Timestamp/Timestamp.doc.mjs +4 -4
- package/src/Timestamp/Timestamp.test.tsx +32 -0
- package/src/Timestamp/Timestamp.tsx +28 -8
- package/src/Toast/useToast.tsx +7 -8
- package/src/ToggleButton/ToggleButtonGroup.tsx +1 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +30 -1
- package/src/Tokenizer/Tokenizer.test.tsx +206 -2
- package/src/Tokenizer/Tokenizer.tsx +26 -4
- package/src/TopNav/TopNav.test.tsx +125 -1
- package/src/TopNav/TopNavHeading.tsx +24 -8
- package/src/TopNav/TopNavMegaMenu.test.tsx +149 -1
- package/src/TopNav/TopNavMegaMenu.tsx +10 -4
- package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +3 -3
- package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +19 -2
- package/src/TopNav/TopNavMenu.test.tsx +118 -4
- package/src/TopNav/TopNavMenu.tsx +83 -5
- package/src/TreeList/TreeList.doc.mjs +22 -0
- package/src/TreeList/TreeList.test.tsx +232 -0
- package/src/TreeList/TreeList.tsx +18 -2
- package/src/TreeList/TreeListBranches.tsx +16 -2
- package/src/TreeList/TreeListItem.tsx +52 -12
- package/src/TreeList/TreeListTypes.ts +27 -1
- package/src/TreeList/index.ts +2 -2
- package/src/Typeahead/BaseTypeahead.tsx +30 -15
- package/src/Typeahead/Typeahead.doc.mjs +7 -0
- package/src/Typeahead/Typeahead.test.tsx +50 -0
- package/src/Typeahead/Typeahead.tsx +10 -0
- package/src/authoring/doc.ts +1 -3
- package/src/docs-types.ts +5 -0
- package/src/hooks/computeOverflow.test.ts +422 -0
- package/src/hooks/computeOverflow.ts +290 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/isRtlElement.ts +27 -0
- package/src/hooks/useDevWarning.test.tsx +45 -0
- package/src/hooks/useDevWarning.ts +54 -0
- package/src/hooks/useGridFocus.doc.mjs +3 -3
- package/src/hooks/useGridFocus.test.tsx +41 -0
- package/src/hooks/useGridFocus.ts +21 -10
- package/src/hooks/useListFocus.doc.mjs +3 -3
- package/src/hooks/useListFocus.test.tsx +67 -1
- package/src/hooks/useListFocus.ts +21 -5
- package/src/hooks/useOverflow.test.ts +96 -4
- package/src/hooks/useOverflow.ts +74 -33
- package/src/i18n/InternationalizationContext.ts +4 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +99 -2
- package/src/i18n/InternationalizationProvider.tsx +12 -2
- package/src/i18n/__tests__/getLocaleDirection.test.ts +40 -0
- package/src/i18n/__tests__/useDirection.test.tsx +66 -0
- package/src/i18n/getLocaleDirection.ts +29 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/resolve.ts +9 -21
- package/src/i18n/useDirection.ts +29 -0
- package/src/reset.css +0 -26
- package/src/reset.test.ts +60 -0
- package/src/theme/Theme.tsx +11 -14
- package/src/theme/derivedVarRegistry.test.ts +1 -0
- package/src/theme/derivedVarRegistry.ts +6 -0
- package/src/theme/generateThemeRules.test.ts +107 -0
- package/src/theme/generateThemeRules.ts +56 -0
- package/src/theme/hct.ts +1 -1
- package/src/theme/syntax/defineSyntaxTheme.ts +5 -6
- package/src/utils/devWarning.test.ts +56 -0
- package/src/utils/devWarning.ts +102 -0
- package/src/utils/index.ts +6 -0
- package/src/utils/plainDate.test.ts +22 -0
- package/src/utils/plainDate.ts +61 -0
- package/src/utils/types.ts +14 -0
|
@@ -4,10 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file BreadcrumbItem.tsx
|
|
7
|
-
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext
|
|
7
|
+
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
|
|
8
|
+
* and (for the menu trigger) usePopover + the shared DropdownMenu item API
|
|
9
|
+
* (renderDropdownItems, DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
|
|
8
10
|
* @output Exports BreadcrumbItem component and BreadcrumbItemProps
|
|
9
11
|
* @position Individual breadcrumb item; used inside Breadcrumbs
|
|
10
12
|
*
|
|
13
|
+
* A `menu` prop turns the item's link-styled button into a menu trigger whose
|
|
14
|
+
* popover reuses DropdownMenu's item pipeline — the same wiring ContextMenu
|
|
15
|
+
* uses — so menu-item definitions are portable across the menu family.
|
|
16
|
+
*
|
|
11
17
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
18
|
* - /packages/core/src/Breadcrumbs/Breadcrumbs.doc.mjs
|
|
13
19
|
* - /packages/core/src/Breadcrumbs/Breadcrumbs.test.tsx
|
|
@@ -18,19 +24,43 @@
|
|
|
18
24
|
|
|
19
25
|
import React, {
|
|
20
26
|
use,
|
|
27
|
+
useCallback,
|
|
28
|
+
useId,
|
|
29
|
+
useMemo,
|
|
21
30
|
useRef,
|
|
22
31
|
useEffect,
|
|
23
32
|
type ReactNode,
|
|
24
33
|
type MouseEvent,
|
|
25
34
|
} from 'react';
|
|
26
35
|
import * as stylex from '@stylexjs/stylex';
|
|
27
|
-
import {
|
|
36
|
+
import {
|
|
37
|
+
colorVars,
|
|
38
|
+
spacingVars,
|
|
39
|
+
typeScaleVars,
|
|
40
|
+
radiusVars,
|
|
41
|
+
} from '../theme/tokens.stylex';
|
|
28
42
|
import {BreadcrumbContext} from './Breadcrumbs';
|
|
29
43
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
30
44
|
import type {LinkComponentType} from '../Link/types';
|
|
31
45
|
import {mergeProps, mergeRefs} from '../utils';
|
|
32
46
|
import type {BaseProps} from '../BaseProps';
|
|
33
47
|
import {themeProps} from '../utils/themeProps';
|
|
48
|
+
import {getIcon} from '../Icon/globalIconRegistry';
|
|
49
|
+
import {usePopover} from '../Popover/usePopover';
|
|
50
|
+
import {useListFocus} from '../hooks/useListFocus';
|
|
51
|
+
import {useTypeahead} from '../hooks/useTypeahead';
|
|
52
|
+
import {layerAnimations} from '../Layer/layerAnimations.stylex';
|
|
53
|
+
import {renderDropdownItems} from '../DropdownMenu/renderDropdownItems';
|
|
54
|
+
import {
|
|
55
|
+
DropdownMenuContext,
|
|
56
|
+
type DropdownMenuContextValue,
|
|
57
|
+
type DropdownMenuSize,
|
|
58
|
+
} from '../DropdownMenu/DropdownMenuContext';
|
|
59
|
+
import {
|
|
60
|
+
MENU_ITEM_ROLES,
|
|
61
|
+
MENU_ITEM_SELECTOR,
|
|
62
|
+
} from '../DropdownMenu/menuItemRoles';
|
|
63
|
+
import type {DropdownMenuOption} from '../DropdownMenu/DropdownMenu';
|
|
34
64
|
|
|
35
65
|
// =============================================================================
|
|
36
66
|
// Props
|
|
@@ -69,6 +99,27 @@ export interface BreadcrumbItemProps extends Omit<
|
|
|
69
99
|
* Optional icon rendered before the label.
|
|
70
100
|
*/
|
|
71
101
|
startIcon?: ReactNode;
|
|
102
|
+
/**
|
|
103
|
+
* Menu opened when the item is activated. Accepts the SAME item API as
|
|
104
|
+
* DropdownMenu / MoreMenu / ContextMenu, so a consumer's existing menu-item
|
|
105
|
+
* definitions are portable into a breadcrumb with no rewrite:
|
|
106
|
+
* - a `DropdownMenuOption[]` data array (items, sections, dividers), or
|
|
107
|
+
* - composed `DropdownMenuItem` / `DropdownMenuCheckboxItem` /
|
|
108
|
+
* `DropdownMenuRadioGroup` children.
|
|
109
|
+
*
|
|
110
|
+
* When set, the item renders as a link-styled menu trigger (button + a
|
|
111
|
+
* trailing chevron, `aria-haspopup="menu"` / `aria-expanded`) whose popover
|
|
112
|
+
* is a `role="menu"` container that provides `DropdownMenuContext` and runs
|
|
113
|
+
* `useListFocus`. Takes precedence over `href` / `onClick` (which are
|
|
114
|
+
* ignored when `menu` is set — a dev-time warning is logged).
|
|
115
|
+
*/
|
|
116
|
+
menu?: DropdownMenuOption[] | ReactNode;
|
|
117
|
+
/**
|
|
118
|
+
* Size passed to the menu items via `DropdownMenuContext` (item
|
|
119
|
+
* padding/typography). Defaults from the breadcrumb variant:
|
|
120
|
+
* `'supporting'` → `'sm'`, otherwise `'md'`.
|
|
121
|
+
*/
|
|
122
|
+
menuSize?: DropdownMenuSize;
|
|
72
123
|
}
|
|
73
124
|
|
|
74
125
|
// =============================================================================
|
|
@@ -140,6 +191,12 @@ const itemStyles = stylex.create({
|
|
|
140
191
|
alignItems: 'center',
|
|
141
192
|
flexShrink: 0,
|
|
142
193
|
},
|
|
194
|
+
chevron: {
|
|
195
|
+
display: 'flex',
|
|
196
|
+
alignItems: 'center',
|
|
197
|
+
flexShrink: 0,
|
|
198
|
+
fontSize: typeScaleVars['--text-supporting-size'],
|
|
199
|
+
},
|
|
143
200
|
separator: {
|
|
144
201
|
display: 'var(--separator-display)',
|
|
145
202
|
alignItems: 'center',
|
|
@@ -149,6 +206,26 @@ const itemStyles = stylex.create({
|
|
|
149
206
|
},
|
|
150
207
|
});
|
|
151
208
|
|
|
209
|
+
const menuStyles = stylex.create({
|
|
210
|
+
menu: {
|
|
211
|
+
boxSizing: 'border-box',
|
|
212
|
+
display: 'flex',
|
|
213
|
+
flexDirection: 'column',
|
|
214
|
+
gap: spacingVars['--spacing-0-5'],
|
|
215
|
+
maxHeight: '300px',
|
|
216
|
+
overflowY: 'auto',
|
|
217
|
+
'--_dropdown-menu-radius': radiusVars['--radius-container'],
|
|
218
|
+
'--_dropdown-menu-padding': spacingVars['--spacing-1'],
|
|
219
|
+
padding: spacingVars['--spacing-1'],
|
|
220
|
+
borderRadius: 'var(--_dropdown-menu-radius)',
|
|
221
|
+
userSelect: 'none',
|
|
222
|
+
},
|
|
223
|
+
popover: {
|
|
224
|
+
minWidth: '160px',
|
|
225
|
+
marginBlock: spacingVars['--spacing-1'],
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
|
|
152
229
|
// =============================================================================
|
|
153
230
|
// Component
|
|
154
231
|
// =============================================================================
|
|
@@ -175,6 +252,8 @@ export function BreadcrumbItem({
|
|
|
175
252
|
onClick,
|
|
176
253
|
isCurrent: isCurrentProp,
|
|
177
254
|
startIcon,
|
|
255
|
+
menu,
|
|
256
|
+
menuSize,
|
|
178
257
|
xstyle,
|
|
179
258
|
className,
|
|
180
259
|
style,
|
|
@@ -192,6 +271,28 @@ export function BreadcrumbItem({
|
|
|
192
271
|
|
|
193
272
|
const isCurrent = isCurrentProp === true;
|
|
194
273
|
const isAutoCandidate = isCurrentProp == null;
|
|
274
|
+
const hasMenu = menu != null;
|
|
275
|
+
const resolvedMenuSize: DropdownMenuSize =
|
|
276
|
+
menuSize ?? (isSupporting ? 'sm' : 'md');
|
|
277
|
+
|
|
278
|
+
// `menu` owns the click interaction; a label can't both navigate/act and
|
|
279
|
+
// open a menu on the same activation. Warn once so the (ignored) href/onClick
|
|
280
|
+
// don't silently disappear on the consumer.
|
|
281
|
+
useEffect(() => {
|
|
282
|
+
if (process.env.NODE_ENV !== 'production' && hasMenu) {
|
|
283
|
+
if (href != null) {
|
|
284
|
+
console.warn(
|
|
285
|
+
'BreadcrumbItem: `menu` and `href` are mutually exclusive; `menu` ' +
|
|
286
|
+
'takes precedence and `href` is ignored.',
|
|
287
|
+
);
|
|
288
|
+
} else if (onClick != null) {
|
|
289
|
+
console.warn(
|
|
290
|
+
'BreadcrumbItem: `menu` and `onClick` are mutually exclusive; ' +
|
|
291
|
+
'`menu` takes precedence and `onClick` is ignored.',
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}, [hasMenu, href, onClick]);
|
|
195
296
|
|
|
196
297
|
// Auto-detect: if no sibling has aria-current="page" and this is the last
|
|
197
298
|
// non-separator item, set aria-current on our content element.
|
|
@@ -258,17 +359,31 @@ export function BreadcrumbItem({
|
|
|
258
359
|
<span aria-hidden="true" {...stylex.props(itemStyles.separator)}>
|
|
259
360
|
{ctx.separator}
|
|
260
361
|
</span>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
362
|
+
{hasMenu ? (
|
|
363
|
+
// A current crumb can also open a sibling menu — the trigger keeps
|
|
364
|
+
// both aria-current="page" and aria-haspopup="menu".
|
|
365
|
+
<BreadcrumbMenuTrigger
|
|
366
|
+
ref={contentRef}
|
|
367
|
+
menu={menu}
|
|
368
|
+
menuSize={resolvedMenuSize}
|
|
369
|
+
isSupporting={isSupporting}
|
|
370
|
+
isCurrent
|
|
371
|
+
label={children}>
|
|
372
|
+
{content}
|
|
373
|
+
</BreadcrumbMenuTrigger>
|
|
374
|
+
) : (
|
|
375
|
+
<span
|
|
376
|
+
{...stylex.props(
|
|
377
|
+
itemStyles.contentWrapper,
|
|
378
|
+
itemStyles.current,
|
|
379
|
+
isSupporting
|
|
380
|
+
? itemStyles.supportingCurrent
|
|
381
|
+
: itemStyles.defaultCurrent,
|
|
382
|
+
)}
|
|
383
|
+
aria-current="page">
|
|
384
|
+
{content}
|
|
385
|
+
</span>
|
|
386
|
+
)}
|
|
272
387
|
</li>
|
|
273
388
|
);
|
|
274
389
|
}
|
|
@@ -293,7 +408,16 @@ export function BreadcrumbItem({
|
|
|
293
408
|
<span aria-hidden="true" {...stylex.props(itemStyles.separator)}>
|
|
294
409
|
{ctx.separator}
|
|
295
410
|
</span>
|
|
296
|
-
{
|
|
411
|
+
{hasMenu ? (
|
|
412
|
+
<BreadcrumbMenuTrigger
|
|
413
|
+
ref={contentRef}
|
|
414
|
+
menu={menu}
|
|
415
|
+
menuSize={resolvedMenuSize}
|
|
416
|
+
isSupporting={isSupporting}
|
|
417
|
+
label={children}>
|
|
418
|
+
{content}
|
|
419
|
+
</BreadcrumbMenuTrigger>
|
|
420
|
+
) : href != null ? (
|
|
297
421
|
<LinkComponent
|
|
298
422
|
ref={contentRef}
|
|
299
423
|
href={href}
|
|
@@ -334,3 +458,198 @@ export function BreadcrumbItem({
|
|
|
334
458
|
}
|
|
335
459
|
|
|
336
460
|
BreadcrumbItem.displayName = 'BreadcrumbItem';
|
|
461
|
+
|
|
462
|
+
// =============================================================================
|
|
463
|
+
// Menu trigger
|
|
464
|
+
// =============================================================================
|
|
465
|
+
|
|
466
|
+
interface BreadcrumbMenuTriggerProps {
|
|
467
|
+
ref: React.Ref<HTMLElement>;
|
|
468
|
+
/** The link-styled label content rendered inside the trigger button. */
|
|
469
|
+
children: ReactNode;
|
|
470
|
+
/** Accessible name for the menu surface (the crumb's label). */
|
|
471
|
+
label: ReactNode;
|
|
472
|
+
menu: DropdownMenuOption[] | ReactNode;
|
|
473
|
+
menuSize: DropdownMenuSize;
|
|
474
|
+
isSupporting: boolean;
|
|
475
|
+
isCurrent?: boolean;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* The link-styled `<button>` trigger + its `role="menu"` popover. Reuses the
|
|
480
|
+
* DropdownMenu item pipeline (`renderDropdownItems` for arrays, the item
|
|
481
|
+
* components for children) inside a `useListFocus` container that provides
|
|
482
|
+
* `DropdownMenuContext` — the same wiring ContextMenu uses — so menu-item
|
|
483
|
+
* definitions are portable into a breadcrumb with no rewrite.
|
|
484
|
+
*/
|
|
485
|
+
function BreadcrumbMenuTrigger({
|
|
486
|
+
ref,
|
|
487
|
+
children,
|
|
488
|
+
label,
|
|
489
|
+
menu,
|
|
490
|
+
menuSize,
|
|
491
|
+
isSupporting,
|
|
492
|
+
isCurrent = false,
|
|
493
|
+
}: BreadcrumbMenuTriggerProps) {
|
|
494
|
+
const menuId = useId();
|
|
495
|
+
const buttonRef = useRef<HTMLButtonElement>(null);
|
|
496
|
+
|
|
497
|
+
const popover = usePopover({
|
|
498
|
+
onHide: useCallback(() => {
|
|
499
|
+
buttonRef.current?.focus();
|
|
500
|
+
}, []),
|
|
501
|
+
hasLightDismiss: true,
|
|
502
|
+
hasCloseButton: false,
|
|
503
|
+
hasAutoFocus: false,
|
|
504
|
+
// The popup's own role="menu" is the exposed semantics; a modal dialog
|
|
505
|
+
// wrapper would announce an unnamed dialog around the menu.
|
|
506
|
+
role: 'none',
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
const closeMenu = useCallback(() => {
|
|
510
|
+
popover.hide();
|
|
511
|
+
}, [popover]);
|
|
512
|
+
|
|
513
|
+
const {
|
|
514
|
+
listRef,
|
|
515
|
+
handleKeyDown: listNavKeyDown,
|
|
516
|
+
focusFirst,
|
|
517
|
+
focusItem,
|
|
518
|
+
} = useListFocus<HTMLDivElement>({
|
|
519
|
+
itemSelector: MENU_ITEM_SELECTOR,
|
|
520
|
+
wrap: false,
|
|
521
|
+
onEscape: closeMenu,
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
const getMenuItems = useCallback(
|
|
525
|
+
(): HTMLElement[] =>
|
|
526
|
+
listRef.current
|
|
527
|
+
? Array.from(
|
|
528
|
+
listRef.current.querySelectorAll<HTMLElement>(MENU_ITEM_SELECTOR),
|
|
529
|
+
)
|
|
530
|
+
: [],
|
|
531
|
+
[listRef],
|
|
532
|
+
);
|
|
533
|
+
const typeahead = useTypeahead({
|
|
534
|
+
getItemLabels: () => getMenuItems().map(el => el.textContent),
|
|
535
|
+
onMatch: focusItem,
|
|
536
|
+
getCurrentIndex: () =>
|
|
537
|
+
getMenuItems().findIndex(
|
|
538
|
+
el =>
|
|
539
|
+
el === document.activeElement || el.contains(document.activeElement),
|
|
540
|
+
),
|
|
541
|
+
});
|
|
542
|
+
|
|
543
|
+
const listKeyDown = useCallback(
|
|
544
|
+
(e: React.KeyboardEvent) => {
|
|
545
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
546
|
+
e.preventDefault();
|
|
547
|
+
const focused = document.activeElement as HTMLElement | null;
|
|
548
|
+
if (
|
|
549
|
+
focused &&
|
|
550
|
+
MENU_ITEM_ROLES.has(focused.getAttribute('role') ?? '')
|
|
551
|
+
) {
|
|
552
|
+
focused.click();
|
|
553
|
+
}
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
// APG menu-button pattern: Tab closes the menu (items are tabIndex={-1}).
|
|
557
|
+
if (e.key === 'Tab') {
|
|
558
|
+
closeMenu();
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
if (typeahead.onKeyDown(e)) {
|
|
562
|
+
e.preventDefault();
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
listNavKeyDown(e);
|
|
566
|
+
},
|
|
567
|
+
[listNavKeyDown, closeMenu, typeahead],
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
const openAndFocus = useCallback(() => {
|
|
571
|
+
popover.show();
|
|
572
|
+
requestAnimationFrame(() => focusFirst());
|
|
573
|
+
}, [popover, focusFirst]);
|
|
574
|
+
|
|
575
|
+
const handleClick = useCallback(() => {
|
|
576
|
+
if (popover.isOpen) {
|
|
577
|
+
popover.hide();
|
|
578
|
+
} else {
|
|
579
|
+
openAndFocus();
|
|
580
|
+
}
|
|
581
|
+
}, [popover, openAndFocus]);
|
|
582
|
+
|
|
583
|
+
const handleKeyDown = useCallback(
|
|
584
|
+
(e: React.KeyboardEvent) => {
|
|
585
|
+
if (!popover.isOpen) {
|
|
586
|
+
if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {
|
|
587
|
+
e.preventDefault();
|
|
588
|
+
openAndFocus();
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
},
|
|
592
|
+
[popover.isOpen, openAndFocus],
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
const contextValue = useMemo<DropdownMenuContextValue>(
|
|
596
|
+
() => ({closeMenu, menuSize}),
|
|
597
|
+
[closeMenu, menuSize],
|
|
598
|
+
);
|
|
599
|
+
|
|
600
|
+
const menuContent = Array.isArray(menu) ? renderDropdownItems(menu) : menu;
|
|
601
|
+
|
|
602
|
+
return (
|
|
603
|
+
<>
|
|
604
|
+
<button
|
|
605
|
+
ref={mergeRefs(
|
|
606
|
+
ref as React.Ref<HTMLButtonElement>,
|
|
607
|
+
buttonRef,
|
|
608
|
+
popover.triggerRef,
|
|
609
|
+
)}
|
|
610
|
+
type="button"
|
|
611
|
+
onClick={handleClick}
|
|
612
|
+
onKeyDown={handleKeyDown}
|
|
613
|
+
{...mergeProps(themeProps('breadcrumb-item-menu-trigger'), {
|
|
614
|
+
...popover.triggerProps,
|
|
615
|
+
'aria-haspopup': 'menu' as const,
|
|
616
|
+
'aria-controls': menuId,
|
|
617
|
+
'aria-current': isCurrent ? ('page' as const) : undefined,
|
|
618
|
+
})}
|
|
619
|
+
{...stylex.props(
|
|
620
|
+
itemStyles.link,
|
|
621
|
+
itemStyles.buttonReset,
|
|
622
|
+
isSupporting ? itemStyles.supportingLink : itemStyles.defaultLink,
|
|
623
|
+
)}>
|
|
624
|
+
{children}
|
|
625
|
+
<span aria-hidden="true" {...stylex.props(itemStyles.chevron)}>
|
|
626
|
+
{getIcon('chevronDown')}
|
|
627
|
+
</span>
|
|
628
|
+
</button>
|
|
629
|
+
|
|
630
|
+
{popover.render(
|
|
631
|
+
<div
|
|
632
|
+
ref={listRef}
|
|
633
|
+
id={menuId}
|
|
634
|
+
role="menu"
|
|
635
|
+
aria-label={typeof label === 'string' ? label : undefined}
|
|
636
|
+
onKeyDown={listKeyDown}
|
|
637
|
+
{...mergeProps(
|
|
638
|
+
themeProps('breadcrumb-menu'),
|
|
639
|
+
stylex.props(menuStyles.menu),
|
|
640
|
+
)}>
|
|
641
|
+
<DropdownMenuContext value={contextValue}>
|
|
642
|
+
{menuContent}
|
|
643
|
+
</DropdownMenuContext>
|
|
644
|
+
</div>,
|
|
645
|
+
{
|
|
646
|
+
placement: 'below',
|
|
647
|
+
alignment: 'start',
|
|
648
|
+
xstyle: [menuStyles.popover, layerAnimations.below],
|
|
649
|
+
},
|
|
650
|
+
)}
|
|
651
|
+
</>
|
|
652
|
+
);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
BreadcrumbMenuTrigger.displayName = 'BreadcrumbMenuTrigger';
|
|
@@ -30,6 +30,8 @@ export const docs = {
|
|
|
30
30
|
theming: {
|
|
31
31
|
targets: [
|
|
32
32
|
{className: 'astryx-breadcrumb-item'},
|
|
33
|
+
{className: 'astryx-breadcrumb-item-menu-trigger'},
|
|
34
|
+
{className: 'astryx-breadcrumb-menu'},
|
|
33
35
|
{className: 'astryx-breadcrumbs', visualProps: ['variant']},
|
|
34
36
|
],
|
|
35
37
|
},
|