@astryxdesign/core 0.1.8 → 0.1.9-canary.1887ee2
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 -0
- 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
|
@@ -24,6 +24,13 @@ import type { BaseProps } from '../BaseProps';
|
|
|
24
24
|
* }
|
|
25
25
|
* }
|
|
26
26
|
* ```
|
|
27
|
+
*
|
|
28
|
+
* Custom variants render no background fill, no ink colour, and no built-in
|
|
29
|
+
* shape glyph — the theme must supply the fill and, if it passes an `icon`,
|
|
30
|
+
* a `color` for it to paint with. It should also supply a non-colour mark
|
|
31
|
+
* so the status is not distinguishable by colour alone (a WCAG 1.4.1
|
|
32
|
+
* failure): pass `icon`, or theme a glyph onto the dot via
|
|
33
|
+
* `.astryx-avatar-status-dot[data-variant="..."]` (e.g. a `::before` mark).
|
|
27
34
|
*/
|
|
28
35
|
export interface AvatarStatusDotVariantMap {
|
|
29
36
|
success: true;
|
|
@@ -37,12 +44,14 @@ export type AvatarStatusDotVariant = keyof AvatarStatusDotVariantMap;
|
|
|
37
44
|
export interface AvatarStatusDotProps extends BaseProps<HTMLDivElement> {
|
|
38
45
|
ref?: React.Ref<HTMLDivElement>;
|
|
39
46
|
/**
|
|
40
|
-
* The semantic
|
|
41
|
-
* -
|
|
42
|
-
*
|
|
43
|
-
* - `
|
|
47
|
+
* The semantic variant of the dot. Each variant pairs a colour with a
|
|
48
|
+
* distinct built-in shape so status is never conveyed by colour alone
|
|
49
|
+
* (WCAG 2.1 SC 1.4.1):
|
|
50
|
+
* - `success` — filled green dot (e.g. online, accepted)
|
|
51
|
+
* - `neutral` — grey ring (e.g. away, offline, pending)
|
|
52
|
+
* - `error` — red dot with a minus bar (e.g. busy, do not disturb)
|
|
44
53
|
*
|
|
45
|
-
* Matches the `variant` convention from `StatusDot`.
|
|
54
|
+
* Matches the `variant` naming convention from `StatusDot`.
|
|
46
55
|
* @default 'success'
|
|
47
56
|
*/
|
|
48
57
|
variant?: AvatarStatusDotVariant;
|
|
@@ -50,6 +59,11 @@ export interface AvatarStatusDotProps extends BaseProps<HTMLDivElement> {
|
|
|
50
59
|
* Accessible label for the status dot.
|
|
51
60
|
* Describes the meaning of the indicator for screen readers
|
|
52
61
|
* (e.g. "Online", "Accepted", "John Doe is busy").
|
|
62
|
+
*
|
|
63
|
+
* Note: inside an Avatar the label is currently not announced — the
|
|
64
|
+
* Avatar root is `role="img"`, which prunes descendant semantics.
|
|
65
|
+
* Pass it anyway; composing status into the avatar's accessible name
|
|
66
|
+
* is a planned Avatar-level fix.
|
|
53
67
|
*/
|
|
54
68
|
label?: string;
|
|
55
69
|
/**
|
|
@@ -58,6 +72,14 @@ export interface AvatarStatusDotProps extends BaseProps<HTMLDivElement> {
|
|
|
58
72
|
* The icon is automatically sized to fit the dot and hidden
|
|
59
73
|
* at the smallest avatar sizes where there isn't enough room.
|
|
60
74
|
*
|
|
75
|
+
* A rendered icon replaces the variant's built-in shape glyph, so use a
|
|
76
|
+
* different icon per status — the same icon on every variant leaves the
|
|
77
|
+
* statuses distinguishable by colour alone (WCAG 1.4.1). At the smallest
|
|
78
|
+
* avatar sizes the built-in glyph still shows instead of the icon.
|
|
79
|
+
* Booleans and empty strings are ignored (safe for `cond && <Icon />`),
|
|
80
|
+
* but a component that renders nothing still counts as an icon and
|
|
81
|
+
* suppresses the glyph.
|
|
82
|
+
*
|
|
61
83
|
* @example
|
|
62
84
|
* ```
|
|
63
85
|
* <AvatarStatusDot variant="success" label="Verified" icon={<CheckIcon />} />
|
|
@@ -69,6 +91,12 @@ export interface AvatarStatusDotProps extends BaseProps<HTMLDivElement> {
|
|
|
69
91
|
* A status indicator dot that automatically scales to match the parent
|
|
70
92
|
* Avatar's size.
|
|
71
93
|
*
|
|
94
|
+
* Each variant pairs a colour with a distinct built-in shape (filled dot,
|
|
95
|
+
* ring, minus bar) so status stays distinguishable without colour
|
|
96
|
+
* perception (WCAG 2.1 SC 1.4.1). Themes can target the shape glyph via
|
|
97
|
+
* the `astryx-avatar-status-dot-glyph` class and its `data-shape`
|
|
98
|
+
* attribute.
|
|
99
|
+
*
|
|
72
100
|
* Must be used inside an Avatar's `status` prop so it can read
|
|
73
101
|
* the avatar size from context.
|
|
74
102
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarStatusDot.d.ts","sourceRoot":"","sources":["../../src/Avatar/AvatarStatusDot.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAM,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"AvatarStatusDot.d.ts","sourceRoot":"","sources":["../../src/Avatar/AvatarStatusDot.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAM,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiD5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;CACb;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,CAAC;AAErE,MAAM,WAAW,oBAAqB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;;;;;OAkBG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA2JD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,OAAmB,EACnB,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,oBAAoB,qBAyCtB;yBAlDe,eAAe"}
|
|
@@ -19,45 +19,57 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
19
19
|
import "../theme/tokens.stylex.js";
|
|
20
20
|
import { colorVars, radiusVars } from "../theme/tokens.stylex.js";
|
|
21
21
|
import { AvatarSizeContext } from "./AvatarSizeContext.js";
|
|
22
|
-
import { mergeProps } from "../utils/index.js";
|
|
22
|
+
import { isRenderable, mergeProps } from "../utils/index.js";
|
|
23
23
|
import { themeProps } from "../utils/themeProps.js";
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* Discrete size tier of the status dot, derived from the avatar size.
|
|
27
|
+
* Keys the built-in shape glyph's stroke weight — see `GLYPH_STROKE_WIDTH`.
|
|
28
|
+
*/
|
|
29
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
30
|
+
/**
|
|
31
|
+
* Resolves the status dot size, border width, icon size, and size tier
|
|
32
|
+
* based on the avatar size.
|
|
28
33
|
*
|
|
29
34
|
* Uses discrete size tiers rather than a continuous ratio so the dot
|
|
30
35
|
* looks intentional at every avatar size:
|
|
31
36
|
*
|
|
32
|
-
* | Avatar size | Dot | Border | Icon |
|
|
33
|
-
*
|
|
34
|
-
* | ≤ 36px | 10px | 1px | — |
|
|
35
|
-
* | 40–72px | 20px | 2px | 12px |
|
|
36
|
-
* | ≥ 96px | 32px | 4px | 18px |
|
|
37
|
+
* | Avatar size | Tier | Dot | Border | Icon | Field | Glyph stroke |
|
|
38
|
+
* |--------------|--------|------|--------|------|-------|--------------|
|
|
39
|
+
* | ≤ 36px | small | 10px | 1px | — | 8px | 1px |
|
|
40
|
+
* | 40–72px | medium | 20px | 2px | 12px | 16px | 1.5px |
|
|
41
|
+
* | ≥ 96px | large | 32px | 4px | 18px | 24px | 2px |
|
|
42
|
+
*
|
|
43
|
+
* "Field" is the dot's inner field — the dot minus both borders — that the
|
|
44
|
+
* shape glyph is drawn into; see `GLYPH_STROKE_WIDTH` for the stroke ladder.
|
|
37
45
|
*
|
|
38
46
|
* Icons are not rendered at the smallest tier — there isn't enough
|
|
39
|
-
* room for them to be legible.
|
|
47
|
+
* room for them to be legible. The built-in shape glyphs (see
|
|
48
|
+
* `glyphShapeMap`) do render there, so status stays distinguishable
|
|
49
|
+
* without colour at every size.
|
|
40
50
|
*/
|
|
41
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
42
51
|
function resolveStatusDotSize(avatarSize) {
|
|
43
52
|
if (avatarSize <= 36) {
|
|
44
53
|
return {
|
|
45
54
|
dotSize: 10,
|
|
46
55
|
borderWidth: 1,
|
|
47
|
-
iconSize: 0
|
|
56
|
+
iconSize: 0,
|
|
57
|
+
tier: 'small'
|
|
48
58
|
};
|
|
49
59
|
}
|
|
50
60
|
if (avatarSize <= 72) {
|
|
51
61
|
return {
|
|
52
62
|
dotSize: 20,
|
|
53
63
|
borderWidth: 2,
|
|
54
|
-
iconSize: 12
|
|
64
|
+
iconSize: 12,
|
|
65
|
+
tier: 'medium'
|
|
55
66
|
};
|
|
56
67
|
}
|
|
57
68
|
return {
|
|
58
69
|
dotSize: 32,
|
|
59
70
|
borderWidth: 4,
|
|
60
|
-
iconSize: 18
|
|
71
|
+
iconSize: 18,
|
|
72
|
+
tier: 'large'
|
|
61
73
|
};
|
|
62
74
|
}
|
|
63
75
|
|
|
@@ -73,6 +85,13 @@ function resolveStatusDotSize(avatarSize) {
|
|
|
73
85
|
* }
|
|
74
86
|
* }
|
|
75
87
|
* ```
|
|
88
|
+
*
|
|
89
|
+
* Custom variants render no background fill, no ink colour, and no built-in
|
|
90
|
+
* shape glyph — the theme must supply the fill and, if it passes an `icon`,
|
|
91
|
+
* a `color` for it to paint with. It should also supply a non-colour mark
|
|
92
|
+
* so the status is not distinguishable by colour alone (a WCAG 1.4.1
|
|
93
|
+
* failure): pass `icon`, or theme a glyph onto the dot via
|
|
94
|
+
* `.astryx-avatar-status-dot[data-variant="..."]` (e.g. a `::before` mark).
|
|
76
95
|
*/
|
|
77
96
|
|
|
78
97
|
/**
|
|
@@ -92,21 +111,23 @@ const styles = {
|
|
|
92
111
|
},
|
|
93
112
|
success: {
|
|
94
113
|
kWkggS: "xdsz4j9",
|
|
114
|
+
kMwMTN: "xrkvqaz",
|
|
95
115
|
$$css: true
|
|
96
116
|
},
|
|
97
117
|
neutral: {
|
|
98
|
-
kWkggS: "
|
|
118
|
+
kWkggS: "x10xzikg",
|
|
119
|
+
kMwMTN: "xv1l7n4",
|
|
99
120
|
$$css: true
|
|
100
121
|
},
|
|
101
122
|
error: {
|
|
102
123
|
kWkggS: "x1pjz0fi",
|
|
124
|
+
kMwMTN: "xrkvqaz",
|
|
103
125
|
$$css: true
|
|
104
126
|
},
|
|
105
127
|
icon: {
|
|
106
128
|
k1xSpc: "x78zum5",
|
|
107
129
|
kGNEyG: "x6s0dn4",
|
|
108
130
|
kjj79g: "xl56j7k",
|
|
109
|
-
kMwMTN: "xrkvqaz",
|
|
110
131
|
kLWn49: "x14ju556",
|
|
111
132
|
$$css: true
|
|
112
133
|
}
|
|
@@ -137,10 +158,105 @@ const variantStyleMap = {
|
|
|
137
158
|
error: styles.error
|
|
138
159
|
};
|
|
139
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Built-in shape glyph per variant, so each status differs by shape and not
|
|
163
|
+
* only by colour (WCAG 2.1 SC 1.4.1). The glyph is a stroked inline SVG
|
|
164
|
+
* painted in `currentColor`:
|
|
165
|
+
* - `ring` — a stroked circle on a surface plate; the dot reads as hollow
|
|
166
|
+
* (away/offline).
|
|
167
|
+
* - `minus` — a round-capped bar across the filled dot; the dot reads as
|
|
168
|
+
* "do not disturb" (busy).
|
|
169
|
+
*
|
|
170
|
+
* `success` stays the plain filled dot — filled, hollow, and barred are the
|
|
171
|
+
* three distinct fill topologies. Custom augmented variants have no entry
|
|
172
|
+
* and render no glyph; see the `AvatarStatusDotVariantMap` docs.
|
|
173
|
+
*/
|
|
174
|
+
|
|
175
|
+
const glyphShapeMap = {
|
|
176
|
+
neutral: 'ring',
|
|
177
|
+
error: 'minus'
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Glyph stroke weight per tier, in px of the dot's inner field.
|
|
182
|
+
*
|
|
183
|
+
* Roughly `field / 12`, floored at 1px so the smallest tier stays visible.
|
|
184
|
+
* That lands on the 1 / 1.5 / 2 ladder the rest of the system draws with —
|
|
185
|
+
* `Icon`'s default set strokes at 1.5 in a 24 viewBox, as does the
|
|
186
|
+
* `CheckboxInput` checkmark — rather than the 25% band a CSS box cutout
|
|
187
|
+
* produced, which was several times heavier than any other glyph we ship.
|
|
188
|
+
*/
|
|
189
|
+
const GLYPH_STROKE_WIDTH = {
|
|
190
|
+
small: 1,
|
|
191
|
+
medium: 1.5,
|
|
192
|
+
large: 2
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/** Fraction of the inner field the minus bar spans, cap to cap. */
|
|
196
|
+
const MINUS_BAR_SPAN = 0.75;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* The built-in shape glyph, drawn as a stroked inline SVG in `currentColor`.
|
|
200
|
+
*
|
|
201
|
+
* Stroking (rather than a CSS box) is what buys sub-pixel control and round
|
|
202
|
+
* line caps, so the mark stays intentional at every tier — including the
|
|
203
|
+
* 10px dot, where a box cutout can only land on whole pixels.
|
|
204
|
+
*
|
|
205
|
+
* `viewBox` is one user unit per px of the inner field, so every value here
|
|
206
|
+
* is literal px.
|
|
207
|
+
*/
|
|
208
|
+
function StatusDotGlyph({
|
|
209
|
+
shape,
|
|
210
|
+
field,
|
|
211
|
+
stroke
|
|
212
|
+
}) {
|
|
213
|
+
const center = field / 2;
|
|
214
|
+
return /*#__PURE__*/_jsx("svg", {
|
|
215
|
+
"aria-hidden": "true",
|
|
216
|
+
viewBox: `0 0 ${field} ${field}`,
|
|
217
|
+
width: field,
|
|
218
|
+
height: field,
|
|
219
|
+
fill: "none",
|
|
220
|
+
...themeProps('avatar-status-dot-glyph', {
|
|
221
|
+
shape
|
|
222
|
+
}),
|
|
223
|
+
children: shape === 'ring' ?
|
|
224
|
+
/*#__PURE__*/
|
|
225
|
+
// Radius is to the stroke centreline, so the ring's outer edge lands
|
|
226
|
+
// exactly on the inner field and never clips against the border.
|
|
227
|
+
_jsx("circle", {
|
|
228
|
+
cx: center,
|
|
229
|
+
cy: center,
|
|
230
|
+
r: (field - stroke) / 2,
|
|
231
|
+
fill: "none",
|
|
232
|
+
stroke: "currentColor",
|
|
233
|
+
strokeWidth: stroke
|
|
234
|
+
}) :
|
|
235
|
+
/*#__PURE__*/
|
|
236
|
+
// Ends inset by half the stroke so the round caps land inside the
|
|
237
|
+
// span rather than overhanging it.
|
|
238
|
+
_jsx("line", {
|
|
239
|
+
x1: field * (1 - MINUS_BAR_SPAN) / 2 + stroke / 2,
|
|
240
|
+
y1: center,
|
|
241
|
+
x2: field * (1 + MINUS_BAR_SPAN) / 2 - stroke / 2,
|
|
242
|
+
y2: center,
|
|
243
|
+
stroke: "currentColor",
|
|
244
|
+
strokeWidth: stroke,
|
|
245
|
+
strokeLinecap: "round"
|
|
246
|
+
})
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
140
250
|
/**
|
|
141
251
|
* A status indicator dot that automatically scales to match the parent
|
|
142
252
|
* Avatar's size.
|
|
143
253
|
*
|
|
254
|
+
* Each variant pairs a colour with a distinct built-in shape (filled dot,
|
|
255
|
+
* ring, minus bar) so status stays distinguishable without colour
|
|
256
|
+
* perception (WCAG 2.1 SC 1.4.1). Themes can target the shape glyph via
|
|
257
|
+
* the `astryx-avatar-status-dot-glyph` class and its `data-shape`
|
|
258
|
+
* attribute.
|
|
259
|
+
*
|
|
144
260
|
* Must be used inside an Avatar's `status` prop so it can read
|
|
145
261
|
* the avatar size from context.
|
|
146
262
|
*
|
|
@@ -172,9 +288,14 @@ export function AvatarStatusDot({
|
|
|
172
288
|
const {
|
|
173
289
|
dotSize,
|
|
174
290
|
borderWidth,
|
|
175
|
-
iconSize
|
|
291
|
+
iconSize,
|
|
292
|
+
tier
|
|
176
293
|
} = resolveStatusDotSize(avatarSize);
|
|
177
|
-
|
|
294
|
+
const showsIcon = isRenderable(icon) && iconSize > 0;
|
|
295
|
+
// A rendered icon is itself a non-colour mark; overlaying both cutouts in
|
|
296
|
+
// the dot's small inner field would make each illegible.
|
|
297
|
+
const glyphShape = showsIcon ? undefined : glyphShapeMap[variant];
|
|
298
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
178
299
|
...props,
|
|
179
300
|
ref: ref,
|
|
180
301
|
...(label ? {
|
|
@@ -184,11 +305,15 @@ export function AvatarStatusDot({
|
|
|
184
305
|
...mergeProps(themeProps('avatar-status-dot', {
|
|
185
306
|
variant
|
|
186
307
|
}), stylex.props(styles.dot, variantStyleMap[variant], dynamicStyles.size(dotSize, borderWidth), xstyle), className, style),
|
|
187
|
-
children:
|
|
308
|
+
children: [showsIcon && /*#__PURE__*/_jsx("span", {
|
|
188
309
|
"aria-hidden": "true",
|
|
189
310
|
...stylex.props(styles.icon, dynamicStyles.iconSize(iconSize)),
|
|
190
311
|
children: icon
|
|
191
|
-
})
|
|
312
|
+
}), glyphShape && /*#__PURE__*/_jsx(StatusDotGlyph, {
|
|
313
|
+
shape: glyphShape,
|
|
314
|
+
field: dotSize - borderWidth * 2,
|
|
315
|
+
stroke: GLYPH_STROKE_WIDTH[tier]
|
|
316
|
+
})]
|
|
192
317
|
});
|
|
193
318
|
}
|
|
194
319
|
AvatarStatusDot.displayName = 'AvatarStatusDot';
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
* one AvatarGroupOverflow). The group provides overlap styling via
|
|
9
9
|
* context — no child introspection needed.
|
|
10
10
|
*
|
|
11
|
+
* When the group contains interactive avatars (rendered as links/buttons) or an
|
|
12
|
+
* interactive AvatarGroupOverflow, it becomes a single Tab stop with roving
|
|
13
|
+
* arrow-key focus (via useListFocus with hasRovingTabIndex) and exposes a
|
|
14
|
+
* screen-reader keyboard hint via aria-describedby. A purely static facepile
|
|
15
|
+
* gets neither — it stays a plain non-focusable group.
|
|
16
|
+
*
|
|
11
17
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
18
|
* - /packages/core/src/AvatarGroup/AvatarGroup.doc.mjs (props table, features)
|
|
13
19
|
* - /packages/core/src/AvatarGroup/index.ts (exports if types change)
|
|
@@ -53,7 +59,7 @@ export interface AvatarGroupProps extends BaseProps<HTMLDivElement> {
|
|
|
53
59
|
* </AvatarGroup>
|
|
54
60
|
* ```
|
|
55
61
|
*/
|
|
56
|
-
export declare function AvatarGroup({ children, size, 'data-testid': testId, 'aria-label': ariaLabelFromProps, xstyle, className, style, ref, ...props }: AvatarGroupProps): ReactNode;
|
|
62
|
+
export declare function AvatarGroup({ children, size, 'data-testid': testId, 'aria-label': ariaLabelFromProps, 'aria-describedby': ariaDescribedByFromProps, onKeyDown, onFocus, xstyle, className, style, ref, ...props }: AvatarGroupProps): ReactNode;
|
|
57
63
|
export declare namespace AvatarGroup {
|
|
58
64
|
var displayName: string;
|
|
59
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA2B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAc,KAAK,UAAU,EAAC,MAAM,WAAW,CAAC;AAavD,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,IAAW,EACX,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,kBAAkB,EAChC,kBAAkB,EAAE,wBAAwB,EAC5C,SAAS,EACT,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,SAAS,CAuE9B;yBApFe,WAAW"}
|
|
@@ -11,20 +11,30 @@
|
|
|
11
11
|
* one AvatarGroupOverflow). The group provides overlap styling via
|
|
12
12
|
* context — no child introspection needed.
|
|
13
13
|
*
|
|
14
|
+
* When the group contains interactive avatars (rendered as links/buttons) or an
|
|
15
|
+
* interactive AvatarGroupOverflow, it becomes a single Tab stop with roving
|
|
16
|
+
* arrow-key focus (via useListFocus with hasRovingTabIndex) and exposes a
|
|
17
|
+
* screen-reader keyboard hint via aria-describedby. A purely static facepile
|
|
18
|
+
* gets neither — it stays a plain non-focusable group.
|
|
19
|
+
*
|
|
14
20
|
* SYNC: When modified, update these files to stay in sync:
|
|
15
21
|
* - /packages/core/src/AvatarGroup/AvatarGroup.doc.mjs (props table, features)
|
|
16
22
|
* - /packages/core/src/AvatarGroup/index.ts (exports if types change)
|
|
17
23
|
* - /apps/storybook/stories/AvatarGroup.stories.tsx (storybook stories)
|
|
18
24
|
* - /packages/cli/templates/blocks/components/AvatarGroup/ (showcase blocks)
|
|
19
25
|
*/
|
|
20
|
-
import { useMemo } from 'react';
|
|
26
|
+
import { useId, useMemo, useState } from 'react';
|
|
21
27
|
import { resolveSize } from "../Avatar/index.js";
|
|
22
28
|
import * as stylex from '@stylexjs/stylex';
|
|
23
|
-
import { mergeProps } from "../utils/index.js";
|
|
29
|
+
import { mergeProps, mergeRefs } from "../utils/index.js";
|
|
30
|
+
import { composeEventHandlers } from "../utils/composeEventHandlers.js";
|
|
24
31
|
import { AvatarGroupContext } from "./AvatarGroupContext.js";
|
|
25
32
|
import { themeProps } from "../utils/themeProps.js";
|
|
26
33
|
import { useTranslator } from "../i18n/index.js";
|
|
27
|
-
import {
|
|
34
|
+
import { useListFocus } from "../hooks/useListFocus.js";
|
|
35
|
+
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
36
|
+
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
37
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
28
38
|
const OVERLAP_RATIO = 0.25;
|
|
29
39
|
const styles = {
|
|
30
40
|
root: {
|
|
@@ -57,6 +67,9 @@ export function AvatarGroup({
|
|
|
57
67
|
size = 'md',
|
|
58
68
|
'data-testid': testId,
|
|
59
69
|
'aria-label': ariaLabelFromProps,
|
|
70
|
+
'aria-describedby': ariaDescribedByFromProps,
|
|
71
|
+
onKeyDown,
|
|
72
|
+
onFocus,
|
|
60
73
|
xstyle,
|
|
61
74
|
className,
|
|
62
75
|
style,
|
|
@@ -72,18 +85,57 @@ export function AvatarGroup({
|
|
|
72
85
|
overlap,
|
|
73
86
|
numericSize
|
|
74
87
|
}), [size, overlap, numericSize]);
|
|
88
|
+
|
|
89
|
+
// The keyboard hint and roving tab stop only make sense once the group has
|
|
90
|
+
// interactive children. Detect their presence (and the writing direction for
|
|
91
|
+
// RTL-correct arrow navigation) from the rendered DOM after commit, matching
|
|
92
|
+
// how the codebase reads direction elsewhere (`getComputedStyle(el).direction`).
|
|
93
|
+
const [hasInteractiveItems, setHasInteractiveItems] = useState(false);
|
|
94
|
+
const [isRtl, setIsRtl] = useState(false);
|
|
95
|
+
|
|
96
|
+
// Single tab stop + roving arrow focus over the group's interactive items.
|
|
97
|
+
// `itemSelector` targets the shared `[data-avatar-item]` marker stamped on
|
|
98
|
+
// interactive avatars (their rendered <a>/<button>) and on the overflow
|
|
99
|
+
// button — NOT a tag/role selector — so roving never catches a nested button
|
|
100
|
+
// inside a custom status/badge slot (O5).
|
|
101
|
+
const {
|
|
102
|
+
listRef,
|
|
103
|
+
handleKeyDown,
|
|
104
|
+
handleFocus
|
|
105
|
+
} = useListFocus({
|
|
106
|
+
itemSelector: '[data-avatar-item]',
|
|
107
|
+
orientation: 'horizontal',
|
|
108
|
+
hasRovingTabIndex: true,
|
|
109
|
+
isRtl
|
|
110
|
+
});
|
|
111
|
+
useIsomorphicLayoutEffect(() => {
|
|
112
|
+
const root = listRef.current;
|
|
113
|
+
if (!root) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
setHasInteractiveItems(root.querySelector('[data-avatar-item]') != null);
|
|
117
|
+
setIsRtl(getComputedStyle(root).direction === 'rtl');
|
|
118
|
+
});
|
|
119
|
+
const hintId = useId();
|
|
120
|
+
const describedBy = [ariaDescribedByFromProps, hasInteractiveItems ? hintId : null].filter(Boolean).join(' ') || undefined;
|
|
75
121
|
return /*#__PURE__*/_jsx(AvatarGroupContext, {
|
|
76
122
|
value: contextValue,
|
|
77
|
-
children: /*#__PURE__*/
|
|
123
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
78
124
|
...props,
|
|
79
|
-
ref: ref,
|
|
125
|
+
ref: mergeRefs(ref, listRef),
|
|
80
126
|
role: "group",
|
|
81
127
|
"aria-label": ariaLabel,
|
|
128
|
+
"aria-describedby": describedBy,
|
|
82
129
|
"data-testid": testId,
|
|
130
|
+
onKeyDown: composeEventHandlers(onKeyDown, handleKeyDown),
|
|
131
|
+
onFocus: composeEventHandlers(onFocus, handleFocus),
|
|
83
132
|
...mergeProps(themeProps('avatar-group', {
|
|
84
133
|
size
|
|
85
134
|
}), stylex.props(styles.root, xstyle), className, style),
|
|
86
|
-
children: children
|
|
135
|
+
children: [children, hasInteractiveItems && /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
136
|
+
id: hintId,
|
|
137
|
+
children: t('@astryx.avatarGroup.keyboardHint')
|
|
138
|
+
})]
|
|
87
139
|
})
|
|
88
140
|
});
|
|
89
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroupOverflow.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroupOverflow.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAW5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAM5C,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA4ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,wBAAwB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"AvatarGroupOverflow.d.ts","sourceRoot":"","sources":["../../src/AvatarGroup/AvatarGroupOverflow.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAW5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAM5C,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CACpD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA4ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,wBAAwB,GAAG,SAAS,CAyDtC;yBAlEe,mBAAmB"}
|
|
@@ -117,6 +117,7 @@ export function AvatarGroupOverflow({
|
|
|
117
117
|
onClick: onClick,
|
|
118
118
|
...rest,
|
|
119
119
|
"aria-label": label,
|
|
120
|
+
"data-avatar-item": "",
|
|
120
121
|
...mergeProps(themeProps('avatar-group-overflow'), stylex.props(styles.base, styles.button, styles.overlap, dynamicStyles.size(numericSize), dynamicStyles.fontSize(numericSize), dynamicStyles.overlap(-overlap), xstyle), className, style),
|
|
121
122
|
children: content
|
|
122
123
|
});
|
package/dist/Banner/Banner.d.ts
CHANGED
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
import { type ReactNode } from 'react';
|
|
30
30
|
import type { BaseProps } from '../BaseProps';
|
|
31
|
+
import type { Elevation } from '../utils/types';
|
|
31
32
|
/**
|
|
32
33
|
* Extensible status map for Banner.
|
|
33
34
|
*
|
|
@@ -125,6 +126,13 @@ export interface BannerProps extends BaseProps<HTMLDivElement> {
|
|
|
125
126
|
* @default 'card'
|
|
126
127
|
*/
|
|
127
128
|
container?: BannerContainer;
|
|
129
|
+
/**
|
|
130
|
+
* Resting elevation — the shadow depth the banner sits at. Use for a
|
|
131
|
+
* floating banner that hovers above content. `none` is the default inline
|
|
132
|
+
* banner.
|
|
133
|
+
* @default 'none'
|
|
134
|
+
*/
|
|
135
|
+
elevation?: Elevation;
|
|
128
136
|
/**
|
|
129
137
|
* Whether the content area (children) starts expanded.
|
|
130
138
|
* Only relevant when children are provided.
|
|
@@ -183,7 +191,7 @@ export interface BannerProps extends BaseProps<HTMLDivElement> {
|
|
|
183
191
|
* </Banner>
|
|
184
192
|
* ```
|
|
185
193
|
*/
|
|
186
|
-
export declare function Banner({ status, title, description, icon, isDismissable, onDismiss, endContent, container, defaultIsExpanded, children, xstyle, className, style, ref, ...rest }: BannerProps): import("react").JSX.Element | null;
|
|
194
|
+
export declare function Banner({ status, title, description, icon, isDismissable, onDismiss, endContent, container, elevation, defaultIsExpanded, children, xstyle, className, style, ref, ...rest }: BannerProps): import("react").JSX.Element | null;
|
|
187
195
|
export declare namespace Banner {
|
|
188
196
|
var displayName: string;
|
|
189
197
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../src/Banner/Banner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAgB5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAS9C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA+KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,KAAK,EACL,WAAW,EACX,IAAI,EACJ,aAAqB,EACrB,SAAS,EACT,UAAU,EACV,SAAkB,EAClB,SAAkB,EAClB,iBAAyB,EACzB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,WAAW,sCAmJb;yBApKe,MAAM"}
|
package/dist/Banner/Banner.js
CHANGED
|
@@ -35,7 +35,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
35
35
|
import { Button } from "../Button/index.js";
|
|
36
36
|
import { Icon } from "../Icon/index.js";
|
|
37
37
|
import "../theme/tokens.stylex.js";
|
|
38
|
-
import { colorVars, spacingVars, radiusVars, fontWeightVars, typeScaleVars, borderVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
|
|
38
|
+
import { colorVars, spacingVars, radiusVars, fontWeightVars, typeScaleVars, borderVars, durationVars, easeVars, shadowVars } from "../theme/tokens.stylex.js";
|
|
39
39
|
import { mergeProps } from "../utils/index.js";
|
|
40
40
|
import { edgeCompSlot } from "../Layout/edgeCompensation.stylex.js";
|
|
41
41
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -130,6 +130,10 @@ const styles = {
|
|
|
130
130
|
kMv6JI: "xjb2p0i",
|
|
131
131
|
$$css: true
|
|
132
132
|
},
|
|
133
|
+
rootElevatedCard: {
|
|
134
|
+
kaIpWk: "x1hviunn",
|
|
135
|
+
$$css: true
|
|
136
|
+
},
|
|
133
137
|
header: {
|
|
134
138
|
k1xSpc: "x78zum5",
|
|
135
139
|
kGNEyG: "x1cy8zhl",
|
|
@@ -182,6 +186,30 @@ const statusStyles = {
|
|
|
182
186
|
}
|
|
183
187
|
};
|
|
184
188
|
|
|
189
|
+
// Resting elevation for the banner. Applied to the root so the shadow wraps
|
|
190
|
+
// the whole banner (header + optional content). 'none' is the default and
|
|
191
|
+
// leaves the layout-only root untouched. For the `card` container the root is
|
|
192
|
+
// rounded (rootElevatedCard) so the shadow follows the card silhouette; the
|
|
193
|
+
// full-width `section` container stays square.
|
|
194
|
+
const elevationStyles = {
|
|
195
|
+
none: {
|
|
196
|
+
kGVxlE: "x1gnnqk1",
|
|
197
|
+
$$css: true
|
|
198
|
+
},
|
|
199
|
+
low: {
|
|
200
|
+
kGVxlE: "x1i5ehqx",
|
|
201
|
+
$$css: true
|
|
202
|
+
},
|
|
203
|
+
med: {
|
|
204
|
+
kGVxlE: "x14hfi27",
|
|
205
|
+
$$css: true
|
|
206
|
+
},
|
|
207
|
+
high: {
|
|
208
|
+
kGVxlE: "x1kcpxr7",
|
|
209
|
+
$$css: true
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
185
213
|
// =============================================================================
|
|
186
214
|
// Component
|
|
187
215
|
// =============================================================================
|
|
@@ -240,6 +268,7 @@ export function Banner({
|
|
|
240
268
|
onDismiss,
|
|
241
269
|
endContent,
|
|
242
270
|
container = 'card',
|
|
271
|
+
elevation = 'none',
|
|
243
272
|
defaultIsExpanded = false,
|
|
244
273
|
children,
|
|
245
274
|
xstyle,
|
|
@@ -282,7 +311,7 @@ export function Banner({
|
|
|
282
311
|
return /*#__PURE__*/_jsxs("div", {
|
|
283
312
|
ref: ref,
|
|
284
313
|
role: role,
|
|
285
|
-
...mergeProps(stylex.props(styles.root, xstyle), className, style),
|
|
314
|
+
...mergeProps(stylex.props(styles.root, elevationStyles[elevation], isCard && elevation !== 'none' && styles.rootElevatedCard, xstyle), className, style),
|
|
286
315
|
...rest,
|
|
287
316
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
288
317
|
...mergeProps(themeProps('banner', {
|
|
@@ -363,10 +392,10 @@ export function Banner({
|
|
|
363
392
|
status
|
|
364
393
|
}), {
|
|
365
394
|
0: {
|
|
366
|
-
className: "x1de1mus x8o8v82 x1pzlopt
|
|
395
|
+
className: "x1de1mus x8o8v82 x1pzlopt xgbv0en xw8tdv1 x92x3c3 x1t7ytsu x18b5jzi x1q0q8m5 x1j92z86 x1gejf6u xw8gpjh"
|
|
367
396
|
},
|
|
368
397
|
1: {
|
|
369
|
-
className: "x1de1mus x8o8v82 x1pzlopt
|
|
398
|
+
className: "x1de1mus x8o8v82 x1pzlopt xgbv0en xw8tdv1 x92x3c3 x1t7ytsu x18b5jzi x1q0q8m5 x1j92z86 x1gejf6u xw8gpjh xv76oww x1padx2d"
|
|
370
399
|
}
|
|
371
400
|
}[!!isCard << 0]),
|
|
372
401
|
children: children
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file BreadcrumbItem.tsx
|
|
3
|
-
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext
|
|
3
|
+
* @input Uses React use/useRef/useEffect, stylex, theme tokens, BreadcrumbContext,
|
|
4
|
+
* and (for the menu trigger) usePopover + the shared DropdownMenu item API
|
|
5
|
+
* (renderDropdownItems, DropdownMenuContext, MENU_ITEM_SELECTOR, useListFocus)
|
|
4
6
|
* @output Exports BreadcrumbItem component and BreadcrumbItemProps
|
|
5
7
|
* @position Individual breadcrumb item; used inside Breadcrumbs
|
|
6
8
|
*
|
|
9
|
+
* A `menu` prop turns the item's link-styled button into a menu trigger whose
|
|
10
|
+
* popover reuses DropdownMenu's item pipeline — the same wiring ContextMenu
|
|
11
|
+
* uses — so menu-item definitions are portable across the menu family.
|
|
12
|
+
*
|
|
7
13
|
* SYNC: When modified, update these files to stay in sync:
|
|
8
14
|
* - /packages/core/src/Breadcrumbs/Breadcrumbs.doc.mjs
|
|
9
15
|
* - /packages/core/src/Breadcrumbs/Breadcrumbs.test.tsx
|
|
@@ -14,6 +20,8 @@
|
|
|
14
20
|
import React, { type ReactNode, type MouseEvent } from 'react';
|
|
15
21
|
import type { LinkComponentType } from '../Link/types';
|
|
16
22
|
import type { BaseProps } from '../BaseProps';
|
|
23
|
+
import { type DropdownMenuSize } from '../DropdownMenu/DropdownMenuContext';
|
|
24
|
+
import type { DropdownMenuOption } from '../DropdownMenu/DropdownMenu';
|
|
17
25
|
export interface BreadcrumbItemProps extends Omit<BaseProps<HTMLLIElement>, 'onClick'> {
|
|
18
26
|
ref?: React.Ref<HTMLLIElement>;
|
|
19
27
|
/**
|
|
@@ -44,6 +52,27 @@ export interface BreadcrumbItemProps extends Omit<BaseProps<HTMLLIElement>, 'onC
|
|
|
44
52
|
* Optional icon rendered before the label.
|
|
45
53
|
*/
|
|
46
54
|
startIcon?: ReactNode;
|
|
55
|
+
/**
|
|
56
|
+
* Menu opened when the item is activated. Accepts the SAME item API as
|
|
57
|
+
* DropdownMenu / MoreMenu / ContextMenu, so a consumer's existing menu-item
|
|
58
|
+
* definitions are portable into a breadcrumb with no rewrite:
|
|
59
|
+
* - a `DropdownMenuOption[]` data array (items, sections, dividers), or
|
|
60
|
+
* - composed `DropdownMenuItem` / `DropdownMenuCheckboxItem` /
|
|
61
|
+
* `DropdownMenuRadioGroup` children.
|
|
62
|
+
*
|
|
63
|
+
* When set, the item renders as a link-styled menu trigger (button + a
|
|
64
|
+
* trailing chevron, `aria-haspopup="menu"` / `aria-expanded`) whose popover
|
|
65
|
+
* is a `role="menu"` container that provides `DropdownMenuContext` and runs
|
|
66
|
+
* `useListFocus`. Takes precedence over `href` / `onClick` (which are
|
|
67
|
+
* ignored when `menu` is set — a dev-time warning is logged).
|
|
68
|
+
*/
|
|
69
|
+
menu?: DropdownMenuOption[] | ReactNode;
|
|
70
|
+
/**
|
|
71
|
+
* Size passed to the menu items via `DropdownMenuContext` (item
|
|
72
|
+
* padding/typography). Defaults from the breadcrumb variant:
|
|
73
|
+
* `'supporting'` → `'sm'`, otherwise `'md'`.
|
|
74
|
+
*/
|
|
75
|
+
menuSize?: DropdownMenuSize;
|
|
47
76
|
}
|
|
48
77
|
/**
|
|
49
78
|
* An individual breadcrumb item. Renders as a link (`<a>`) or a span
|
|
@@ -59,7 +88,7 @@ export interface BreadcrumbItemProps extends Omit<BaseProps<HTMLLIElement>, 'onC
|
|
|
59
88
|
* <BreadcrumbItem isCurrent>My Project</BreadcrumbItem>
|
|
60
89
|
* ```
|
|
61
90
|
*/
|
|
62
|
-
export declare function BreadcrumbItem({ ref, as, children, href, onClick, isCurrent: isCurrentProp, startIcon, xstyle, className, style, 'data-testid': testId, ...rest }: BreadcrumbItemProps): React.JSX.Element;
|
|
91
|
+
export declare function BreadcrumbItem({ ref, as, children, href, onClick, isCurrent: isCurrentProp, startIcon, menu, menuSize, xstyle, className, style, 'data-testid': testId, ...rest }: BreadcrumbItemProps): React.JSX.Element;
|
|
63
92
|
export declare namespace BreadcrumbItem {
|
|
64
93
|
var displayName: string;
|
|
65
94
|
}
|