@astryxdesign/core 0.1.8 → 0.1.9
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 +18 -2
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +63 -7
- 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/Banner/Banner.d.ts +9 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +31 -2
- 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 +31 -2
- 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 +35 -3
- 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/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/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/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 +8 -1
- 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/DateInput/DateInput.d.ts +47 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +26 -2
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +10 -1
- 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/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 +42 -15
- package/dist/FieldStatus/FieldStatus.d.ts +8 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +22 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +10 -2
- 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/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.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +39 -12
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +16 -0
- package/dist/NumberInput/NumberInput.d.ts.map +1 -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/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/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.map +1 -1
- package/dist/Selector/Selector.js +4 -2
- 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/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +3 -2
- 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/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/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.map +1 -1
- package/dist/TimeInput/TimeInput.js +15 -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 +1 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +16 -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 +27 -7
- 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/astryx.css +28 -18
- 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/useDevWarning.d.ts +18 -0
- package/dist/hooks/useDevWarning.d.ts.map +1 -0
- package/dist/hooks/useDevWarning.js +49 -0
- 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/resolve.d.ts.map +1 -1
- package/dist/i18n/resolve.js +7 -18
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +2 -7
- 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 +24 -0
- package/locales/fr-FR.json +14 -0
- package/locales/pseudo.json +18 -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 +15 -3
- package/src/Avatar/Avatar.test.tsx +156 -1
- package/src/Avatar/Avatar.tsx +96 -4
- 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/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +30 -0
- package/src/Banner/Banner.tsx +47 -3
- 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 +25 -1
- 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 +49 -3
- package/src/Chat/ChatContext.tsx +37 -10
- package/src/Chat/ChatDictationButton.tsx +4 -1
- package/src/Chat/ChatLayout.tsx +3 -1
- 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 +3 -1
- 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/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 +9 -1
- 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/ContextMenu/ContextMenu.test.tsx +193 -0
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.test.tsx +108 -0
- package/src/DateInput/DateInput.tsx +68 -3
- package/src/DateInput/index.ts +1 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +35 -0
- package/src/DateTimeInput/DateTimeInput.tsx +14 -2
- 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/DropdownMenuRadioGroup.tsx +1 -2
- package/src/Field/Field.test.tsx +57 -12
- package/src/Field/Field.tsx +6 -5
- package/src/Field/FieldLabel.tsx +8 -0
- package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
- package/src/FieldStatus/FieldStatus.test.tsx +78 -40
- package/src/FieldStatus/FieldStatus.tsx +22 -4
- package/src/FileInput/FileInput.test.tsx +52 -3
- package/src/FileInput/FileInput.tsx +13 -2
- 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/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 +4 -2
- package/src/MultiSelector/MultiSelector.test.tsx +172 -3
- package/src/MultiSelector/MultiSelector.tsx +55 -12
- package/src/MultiSelector/hooks.ts +17 -0
- package/src/NumberInput/NumberInput.test.tsx +11 -7
- package/src/NumberInput/NumberInput.tsx +1 -2
- 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/Popover/Popover.tsx +7 -4
- package/src/Popover/usePopover.tsx +9 -13
- package/src/PowerSearch/PowerSearch.doc.mjs +14 -0
- package/src/PowerSearch/PowerSearch.test.tsx +20 -0
- 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.test.tsx +69 -0
- package/src/Selector/Selector.tsx +5 -1
- 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/Table/BaseTable.tsx +3 -5
- 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/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.test.tsx +9 -1
- package/src/Thumbnail/Thumbnail.doc.mjs +19 -10
- package/src/Thumbnail/Thumbnail.test.tsx +98 -7
- package/src/Thumbnail/Thumbnail.tsx +141 -41
- package/src/Thumbnail/thumbnail.markers.stylex.ts +12 -0
- package/src/TimeInput/TimeInput.test.tsx +76 -1
- package/src/TimeInput/TimeInput.tsx +19 -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 +15 -1
- package/src/Tokenizer/Tokenizer.test.tsx +183 -2
- package/src/Tokenizer/Tokenizer.tsx +16 -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 +51 -11
- package/src/TreeList/TreeListTypes.ts +27 -1
- package/src/TreeList/index.ts +2 -2
- 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/useDevWarning.test.tsx +45 -0
- package/src/hooks/useDevWarning.ts +54 -0
- package/src/hooks/useOverflow.test.ts +96 -4
- package/src/hooks/useOverflow.ts +74 -33
- package/src/i18n/InternationalizationProvider.doc.mjs +99 -2
- package/src/i18n/resolve.ts +9 -21
- package/src/theme/Theme.tsx +11 -14
- package/src/theme/generateThemeRules.test.ts +65 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAiB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAiB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAWtD,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAMrE,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,mBAAmB,GACvC,MAAM,UAAU,CAAC;AAMlB;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,cAAc,IAChD;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAC,GACtB;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GACzB;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GACzB;IAAC,IAAI,EAAE,SAAS,CAAA;CAAC,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GACnC,MAAM,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,gCAAgC;IAChC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CACpE,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yBAAyB;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,gCAAgC;IAChC,KAAK,EAAE,CAAC,EAAE,CAAC;IAEX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3D,kEAAkE;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACpC,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC;IAC3D,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,sDAAsD;IACtD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACvC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,oDAAoD;IACpD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;CACxC;AAwHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,EAClD,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,MAAM,EACN,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,UAAkB,EAClB,QAAQ,EACR,eAAe,EACf,QAAgB,EAChB,UAAU,EACV,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,qBAA8B,EAC9B,UAAU,EACV,SAAiB,EACjB,aAAa,EACb,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,SAAS,GACV,EAAE,cAAc,CAAC,CAAC,CAAC,qBAmfnB;yBA1hBe,SAAS"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file Tokenizer.tsx
|
|
7
|
-
* @input Uses React, BaseTypeahead, Field, Token
|
|
7
|
+
* @input Uses React, BaseTypeahead, Field, Token, useAnnounce
|
|
8
8
|
* @output Exports Tokenizer multi-select typeahead component
|
|
9
9
|
* @position Composed component; forwards DOM ref and exposes focus control via
|
|
10
10
|
* handleRef
|
|
@@ -24,6 +24,7 @@ import { renderIconSlot } from "../Icon/index.js";
|
|
|
24
24
|
import { OverflowList } from "../OverflowList/index.js";
|
|
25
25
|
import { useLayer } from "../Layer/useLayer.js";
|
|
26
26
|
import { useTooltip } from "../Tooltip/index.js";
|
|
27
|
+
import { useAnnounce } from "../hooks/useAnnounce.js";
|
|
27
28
|
import "../theme/tokens.stylex.js";
|
|
28
29
|
import { colorVars, spacingVars, sizeVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
29
30
|
import { mergeProps } from "../utils/index.js";
|
|
@@ -385,6 +386,12 @@ export function Tokenizer({
|
|
|
385
386
|
bootstrap: async () => []
|
|
386
387
|
}), []);
|
|
387
388
|
|
|
389
|
+
// Announce token add/remove politely via the persistent live region.
|
|
390
|
+
// Tokens previously appeared and disappeared silently — Backspace on an
|
|
391
|
+
// empty input removes the trailing token, and the per-token remove buttons
|
|
392
|
+
// gave no audible feedback either.
|
|
393
|
+
const announce = useAnnounce();
|
|
394
|
+
|
|
388
395
|
// Handle adding an item — detect creatable synthetic items
|
|
389
396
|
const handleAdd = useCallback(item => {
|
|
390
397
|
if (!item) {
|
|
@@ -410,6 +417,7 @@ export function Tokenizer({
|
|
|
410
417
|
item: realItem,
|
|
411
418
|
type: 'create'
|
|
412
419
|
});
|
|
420
|
+
announce(`Added ${createdValue}`);
|
|
413
421
|
return;
|
|
414
422
|
}
|
|
415
423
|
if (selectedIds.has(item.id)) {
|
|
@@ -420,17 +428,21 @@ export function Tokenizer({
|
|
|
420
428
|
item,
|
|
421
429
|
type: 'add'
|
|
422
430
|
});
|
|
423
|
-
|
|
431
|
+
announce(`Added ${item.label}`);
|
|
432
|
+
}, [value, onChange, isAtMax, selectedIds, hasCreate, announce]);
|
|
424
433
|
|
|
425
|
-
// Handle removing an item
|
|
434
|
+
// Handle removing an item. Single removal path: both Backspace on an empty
|
|
435
|
+
// input and the per-token remove buttons route through here, so the
|
|
436
|
+
// announcement covers both.
|
|
426
437
|
const handleRemove = useCallback(item => {
|
|
427
438
|
const newItems = value.filter(v => v.id !== item.id);
|
|
428
439
|
onChange(newItems, {
|
|
429
440
|
item,
|
|
430
441
|
type: 'remove'
|
|
431
442
|
});
|
|
443
|
+
announce(`Removed ${item.label}`);
|
|
432
444
|
inputRef.current?.focus();
|
|
433
|
-
}, [value, onChange]);
|
|
445
|
+
}, [value, onChange, announce]);
|
|
434
446
|
|
|
435
447
|
// Handle clearing all items
|
|
436
448
|
const handleClearAll = useCallback(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavHeading.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavHeading.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAatD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA4K5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,WAAW,CAAC;IAChE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,IAAI,EACJ,SAAS,EACT,OAAO,EACP,WAAW,EAAE,eAAe,EAC5B,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,kBAAkB,+
|
|
1
|
+
{"version":3,"file":"TopNavHeading.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavHeading.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAatD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA4K5C,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,WAAW,CAAC;IAChE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,IAAI,EACJ,SAAS,EACT,OAAO,EACP,WAAW,EAAE,eAAe,EAC5B,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,kBAAkB,+BA4WpB;yBA/Xe,aAAa"}
|
|
@@ -135,6 +135,10 @@ export function TopNavHeading({
|
|
|
135
135
|
const rootRef = useRef(null);
|
|
136
136
|
const popover = usePopover({
|
|
137
137
|
dialogLabel: t('@astryx.topNav.heading.dialogLabel'),
|
|
138
|
+
// The popup exposes its own role="menu" semantics; a role="dialog"
|
|
139
|
+
// aria-modal wrapper would announce "dialog, Navigation menu" around a
|
|
140
|
+
// menu (the anti-pattern removed in a478a3dcf).
|
|
141
|
+
role: 'none',
|
|
138
142
|
hasCloseButton: false
|
|
139
143
|
});
|
|
140
144
|
const closeMenuCtx = useMemo(() => ({
|
|
@@ -304,14 +308,17 @@ export function TopNavHeading({
|
|
|
304
308
|
})), headerEndContentElement]
|
|
305
309
|
}), popover.render(/*#__PURE__*/_jsxs("div", {
|
|
306
310
|
ref: menuRef,
|
|
307
|
-
role: "menu",
|
|
308
311
|
...{
|
|
309
312
|
className: "x9epnlk xb3r6kr"
|
|
310
313
|
},
|
|
311
314
|
...contentProps,
|
|
312
|
-
children: [popoverHeadingContent, /*#__PURE__*/_jsx(
|
|
313
|
-
|
|
314
|
-
|
|
315
|
+
children: [popoverHeadingContent, /*#__PURE__*/_jsx("div", {
|
|
316
|
+
role: "menu",
|
|
317
|
+
"aria-label": heading ?? t('@astryx.topNav.heading.dialogLabel'),
|
|
318
|
+
children: /*#__PURE__*/_jsx(NavHeadingCloseContext, {
|
|
319
|
+
value: closeMenuCtx,
|
|
320
|
+
children: menu
|
|
321
|
+
})
|
|
315
322
|
})]
|
|
316
323
|
}), {
|
|
317
324
|
placement: 'below',
|
|
@@ -357,14 +364,17 @@ export function TopNavHeading({
|
|
|
357
364
|
}) : undefined), headerEndContentElement]
|
|
358
365
|
}), popover.render(/*#__PURE__*/_jsxs("div", {
|
|
359
366
|
ref: menuRef,
|
|
360
|
-
role: "menu",
|
|
361
367
|
...{
|
|
362
368
|
className: "x9epnlk xb3r6kr"
|
|
363
369
|
},
|
|
364
370
|
...contentProps,
|
|
365
|
-
children: [popoverHeadingContent, /*#__PURE__*/_jsx(
|
|
366
|
-
|
|
367
|
-
|
|
371
|
+
children: [popoverHeadingContent, /*#__PURE__*/_jsx("div", {
|
|
372
|
+
role: "menu",
|
|
373
|
+
"aria-label": heading ?? t('@astryx.topNav.heading.dialogLabel'),
|
|
374
|
+
children: /*#__PURE__*/_jsx(NavHeadingCloseContext, {
|
|
375
|
+
value: closeMenuCtx,
|
|
376
|
+
children: menu
|
|
377
|
+
})
|
|
368
378
|
})]
|
|
369
379
|
}), {
|
|
370
380
|
placement: 'below',
|
|
@@ -179,7 +179,11 @@ function DefaultMegaMenu({
|
|
|
179
179
|
onOpenChange?.(false);
|
|
180
180
|
}, [onOpenChange]);
|
|
181
181
|
const popover = usePopover({
|
|
182
|
-
|
|
182
|
+
// role: 'none' — the panel exposes its own role="group" labeled by
|
|
183
|
+
// `label`. Focus stays on the trigger while the panel is open, so a
|
|
184
|
+
// role="dialog" aria-modal="true" wrapper would announce an unnamed
|
|
185
|
+
// modal dialog around a grid of links.
|
|
186
|
+
role: 'none',
|
|
183
187
|
// hasSurface: false — mega menu provides its own surface (panelContainer)
|
|
184
188
|
// with border-top and custom overflow. Animation is applied via the
|
|
185
189
|
// render() call's xstyle prop (panelAnimation), not the hook options.
|
|
@@ -252,8 +256,7 @@ function DefaultMegaMenu({
|
|
|
252
256
|
children: [/*#__PURE__*/_jsxs("button", {
|
|
253
257
|
ref: mergeRefs(triggerButtonRef, ref),
|
|
254
258
|
type: "button",
|
|
255
|
-
|
|
256
|
-
"aria-expanded": popover.isOpen,
|
|
259
|
+
...popover.triggerProps,
|
|
257
260
|
onClick: handleClick,
|
|
258
261
|
onMouseEnter: handleMouseEnter,
|
|
259
262
|
onMouseLeave: handleMouseLeave,
|
|
@@ -277,7 +280,10 @@ function DefaultMegaMenu({
|
|
|
277
280
|
children: getIcon('chevronDown')
|
|
278
281
|
})]
|
|
279
282
|
}), popover.render(/*#__PURE__*/_jsx("div", {
|
|
280
|
-
role
|
|
283
|
+
// role="group" — a mega menu is a browsing grid of links, not an
|
|
284
|
+
// ARIA menu of menuitems (per the WAI-ARIA APG, the menu role is
|
|
285
|
+
// for action menus; link mega menus are the documented anti-case).
|
|
286
|
+
role: "group",
|
|
281
287
|
"aria-label": label,
|
|
282
288
|
onMouseEnter: handleMouseEnter,
|
|
283
289
|
onMouseLeave: handleMouseLeave,
|
|
@@ -23,7 +23,15 @@ export interface TopNavMegaMenuFeaturedCardProps extends BaseProps<HTMLDivElemen
|
|
|
23
23
|
description?: string;
|
|
24
24
|
/** Optional image URL displayed above the body. */
|
|
25
25
|
image?: string;
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Alt text for the image.
|
|
28
|
+
*
|
|
29
|
+
* When omitted, the image is explicitly decorative (`alt=""` +
|
|
30
|
+
* `role="presentation"` + `aria-hidden`, matching Avatar) and hidden from
|
|
31
|
+
* assistive technology. Since the card already has a visible `title`, a
|
|
32
|
+
* decorative image is usually correct; pass `imageAlt` only when the image
|
|
33
|
+
* conveys information beyond the title and description.
|
|
34
|
+
*/
|
|
27
35
|
imageAlt?: string;
|
|
28
36
|
/** CTA link text. */
|
|
29
37
|
linkLabel?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavMegaMenuFeaturedCard.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuFeaturedCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiD5C,MAAM,WAAW,+BAAgC,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChF,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf
|
|
1
|
+
{"version":3,"file":"TopNavMegaMenuFeaturedCard.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuFeaturedCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiD5C,MAAM,WAAW,+BAAgC,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChF,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,+BAA+B,qBAsCjC;yBAnDe,0BAA0B"}
|
|
@@ -89,9 +89,16 @@ export function TopNavMegaMenuFeaturedCard({
|
|
|
89
89
|
ref: ref,
|
|
90
90
|
...mergeProps(themeProps('top-nav-mega-menu-featured-card'), stylex.props(styles.root, xstyle), className, style),
|
|
91
91
|
...rest,
|
|
92
|
-
children: [image &&
|
|
92
|
+
children: [image &&
|
|
93
|
+
/*#__PURE__*/
|
|
94
|
+
// Without `imageAlt`, the image is explicitly decorative rather than
|
|
95
|
+
// silently empty-alt, matching Avatar's handling of unnamed images.
|
|
96
|
+
// Usually correct here: the card already has a visible title.
|
|
97
|
+
_jsx("img", {
|
|
93
98
|
src: image,
|
|
94
99
|
alt: imageAlt ?? '',
|
|
100
|
+
role: imageAlt ? undefined : 'presentation',
|
|
101
|
+
"aria-hidden": imageAlt ? undefined : true,
|
|
95
102
|
...{
|
|
96
103
|
className: "xh8yej3 xhjk10j xl1xv1r x1lliihq"
|
|
97
104
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file TopNavMenu.tsx
|
|
3
|
-
* @input Uses React, StyleX,
|
|
3
|
+
* @input Uses React, StyleX, usePopover, useMenuHover, useListFocus,
|
|
4
|
+
* useTypeahead, TopNavItem tokens
|
|
4
5
|
* @output Exports TopNavMenu component and related types
|
|
5
6
|
* @position Navigation item with hover-triggered overflow menu for TopNav
|
|
6
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAmM5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAW,EACX,SAAe,GAChB,EAAE,eAAe,4BA+NjB;yBArOe,UAAU"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file TopNavMenu.tsx
|
|
7
|
-
* @input Uses React, StyleX,
|
|
7
|
+
* @input Uses React, StyleX, usePopover, useMenuHover, useListFocus,
|
|
8
|
+
* useTypeahead, TopNavItem tokens
|
|
8
9
|
* @output Exports TopNavMenu component and related types
|
|
9
10
|
* @position Navigation item with hover-triggered overflow menu for TopNav
|
|
10
11
|
*
|
|
@@ -14,10 +15,12 @@
|
|
|
14
15
|
* - /packages/core/src/TopNav/index.ts
|
|
15
16
|
* - /packages/cli/templates/blocks/components/TopNav/ (showcase blocks)
|
|
16
17
|
*/
|
|
17
|
-
import React, { useId, useRef, useState } from 'react';
|
|
18
|
+
import React, { useCallback, useId, useRef, useState } from 'react';
|
|
18
19
|
import * as stylex from '@stylexjs/stylex';
|
|
19
20
|
import { usePopover } from "../Popover/usePopover.js";
|
|
20
21
|
import { useMenuHover } from "../hooks/useMenuHover.js";
|
|
22
|
+
import { useListFocus } from "../hooks/useListFocus.js";
|
|
23
|
+
import { useTypeahead } from "../hooks/useTypeahead.js";
|
|
21
24
|
import { getIcon } from "../Icon/globalIconRegistry.js";
|
|
22
25
|
import { mergeProps, mergeRefs } from "../utils/index.js";
|
|
23
26
|
import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
@@ -119,7 +122,10 @@ export function TopNavMenu({
|
|
|
119
122
|
const slot = useTopNavSlot();
|
|
120
123
|
const triggerButtonRef = useRef(null);
|
|
121
124
|
const popover = usePopover({
|
|
122
|
-
|
|
125
|
+
// The popup's own role="menu" is the exposed semantics; a modal dialog
|
|
126
|
+
// wrapper would announce an unnamed dialog around the menu and make the
|
|
127
|
+
// trigger claim aria-haspopup="dialog" for menu content (see TabMenu).
|
|
128
|
+
role: 'none',
|
|
123
129
|
xstyle: styles.menuOffset
|
|
124
130
|
});
|
|
125
131
|
const {
|
|
@@ -137,6 +143,54 @@ export function TopNavMenu({
|
|
|
137
143
|
});
|
|
138
144
|
const setTriggerRef = mergeRefs(triggerButtonRef, popover.triggerRef, setTriggerEl, ref);
|
|
139
145
|
|
|
146
|
+
// The desktop popup is a composite menu widget per the APG menu pattern:
|
|
147
|
+
// a single roving tab stop with ArrowUp/ArrowDown traversal (wrapping),
|
|
148
|
+
// Home/End, and first-character typeahead. The hook owns item tabindex —
|
|
149
|
+
// items render tabIndex={-1} and exactly one is promoted to 0. The
|
|
150
|
+
// composition mirrors NavHeadingMenu.
|
|
151
|
+
const {
|
|
152
|
+
listRef,
|
|
153
|
+
handleKeyDown,
|
|
154
|
+
handleFocus,
|
|
155
|
+
focusItem
|
|
156
|
+
} = useListFocus({
|
|
157
|
+
itemSelector: '[role="menuitem"]',
|
|
158
|
+
hasRovingTabIndex: true,
|
|
159
|
+
onEscape: popover.hide
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// First-character typeahead over the menu items (menus-11).
|
|
163
|
+
const getMenuItems = useCallback(() => listRef.current ? Array.from(listRef.current.querySelectorAll('[role="menuitem"]')) : [], [listRef]);
|
|
164
|
+
const typeahead = useTypeahead({
|
|
165
|
+
getItemLabels: () => getMenuItems().map(el => el.textContent),
|
|
166
|
+
onMatch: focusItem,
|
|
167
|
+
getCurrentIndex: () => getMenuItems().findIndex(el => el === document.activeElement || el.contains(document.activeElement))
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// Extend useListFocus with Enter/Space activation. Items rendered without an
|
|
171
|
+
// `href` are `<div role="menuitem">` elements, which have no native keyboard
|
|
172
|
+
// activation — without this, Enter/Space on a focused onClick-only item does
|
|
173
|
+
// nothing. Anchor items (with `href`) already activate on Enter natively.
|
|
174
|
+
const menuKeyDown = useCallback(e => {
|
|
175
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
176
|
+
const focused = document.activeElement;
|
|
177
|
+
if (focused?.getAttribute('role') === 'menuitem') {
|
|
178
|
+
e.preventDefault();
|
|
179
|
+
focused.click();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (typeahead.onKeyDown(e)) {
|
|
184
|
+
e.preventDefault();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
handleKeyDown(e);
|
|
188
|
+
}, [handleKeyDown, typeahead]);
|
|
189
|
+
|
|
190
|
+
// Menu container carries both the hover hook's ref (for its open/close
|
|
191
|
+
// focus management) and the list-focus ref (for roving tabindex/typeahead).
|
|
192
|
+
const setMenuRef = mergeRefs(menuRef, listRef);
|
|
193
|
+
|
|
140
194
|
// Mobile bar: hide menus entirely
|
|
141
195
|
if (renderMode === 'mobile-bar') {
|
|
142
196
|
return null;
|
|
@@ -235,18 +289,26 @@ export function TopNavMenu({
|
|
|
235
289
|
children: getIcon('chevronDown')
|
|
236
290
|
})]
|
|
237
291
|
}), popover.render(/*#__PURE__*/_jsx("div", {
|
|
238
|
-
ref:
|
|
292
|
+
ref: setMenuRef,
|
|
239
293
|
role: "menu",
|
|
240
294
|
"aria-label": label,
|
|
241
295
|
...contentProps,
|
|
296
|
+
// After the contentProps spread so the full APG composition (roving
|
|
297
|
+
// tabindex + typeahead + Enter/Space activation) replaces the hover
|
|
298
|
+
// hook's basic arrow-key handler.
|
|
299
|
+
onKeyDown: menuKeyDown,
|
|
300
|
+
onFocus: handleFocus,
|
|
242
301
|
...{
|
|
243
302
|
className: "x78zum5 xdt5ytf xzye2dw x1u2d2a2 x9epnlk"
|
|
244
303
|
},
|
|
245
304
|
children: items.map(item => {
|
|
246
305
|
const Element = item.href ? 'a' : 'div';
|
|
247
306
|
return /*#__PURE__*/_jsxs(Element, {
|
|
248
|
-
role: "menuitem"
|
|
249
|
-
|
|
307
|
+
role: "menuitem"
|
|
308
|
+
// Single tab stop: useListFocus owns the roving tabindex and
|
|
309
|
+
// promotes exactly one item to 0.
|
|
310
|
+
,
|
|
311
|
+
tabIndex: -1,
|
|
250
312
|
href: item.href,
|
|
251
313
|
onClick: item.onClick,
|
|
252
314
|
...{
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { type ReactNode } from 'react';
|
|
14
14
|
import type { BaseProps } from '../BaseProps';
|
|
15
|
-
import type { TreeListItemData, TreeListDensity } from './TreeListTypes';
|
|
16
|
-
export { type TreeListDensity } from './TreeListTypes';
|
|
15
|
+
import type { TreeListItemData, TreeListDensity, TreeListVariant } from './TreeListTypes';
|
|
16
|
+
export { type TreeListDensity, type TreeListVariant } from './TreeListTypes';
|
|
17
17
|
export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
18
18
|
/** Ref forwarded to the root element */
|
|
19
19
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -30,6 +30,15 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
|
30
30
|
* @default 'balanced'
|
|
31
31
|
*/
|
|
32
32
|
density?: TreeListDensity;
|
|
33
|
+
/**
|
|
34
|
+
* Visual treatment of the hierarchy guide (connector) lines.
|
|
35
|
+
* - `lineGuides`: connector lines between parent and child rows
|
|
36
|
+
* - `noGuides`: no connector lines; indentation alone conveys nesting
|
|
37
|
+
*
|
|
38
|
+
* Orthogonal to `density` (which controls spacing) — the two compose.
|
|
39
|
+
* @default 'lineGuides'
|
|
40
|
+
*/
|
|
41
|
+
variant?: TreeListVariant;
|
|
33
42
|
/**
|
|
34
43
|
* Header content rendered above the tree list.
|
|
35
44
|
* Semantically associated via aria-labelledby.
|
|
@@ -62,7 +71,7 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
|
62
71
|
* />
|
|
63
72
|
* ```
|
|
64
73
|
*/
|
|
65
|
-
export declare function TreeList({ items, density, header, xstyle, className, style, 'data-testid': testId, ref, }: TreeListProps): import("react").JSX.Element;
|
|
74
|
+
export declare function TreeList({ items, density, variant, header, xstyle, className, style, 'data-testid': testId, ref, }: TreeListProps): import("react").JSX.Element;
|
|
66
75
|
export declare namespace TreeList {
|
|
67
76
|
var displayName: string;
|
|
68
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeList.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TreeList.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAC,KAAK,eAAe,EAAE,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAE3E,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAE1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAuED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAoB,EACpB,OAAsB,EACtB,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,aAAa,+BAqJf;yBA/Je,QAAQ"}
|
|
@@ -114,6 +114,7 @@ function findInitialTabbableId(items) {
|
|
|
114
114
|
export function TreeList({
|
|
115
115
|
items,
|
|
116
116
|
density = 'balanced',
|
|
117
|
+
variant = 'lineGuides',
|
|
117
118
|
header,
|
|
118
119
|
xstyle,
|
|
119
120
|
className,
|
|
@@ -199,6 +200,7 @@ export function TreeList({
|
|
|
199
200
|
isExpanded: isExpanded,
|
|
200
201
|
onToggle: handleToggle,
|
|
201
202
|
density: density,
|
|
203
|
+
variant: variant,
|
|
202
204
|
renderedChildren: renderedChildren,
|
|
203
205
|
posInSet: index + 1,
|
|
204
206
|
setSize: items.length,
|
|
@@ -6,6 +6,11 @@ interface TreeListBranchesProps {
|
|
|
6
6
|
/**
|
|
7
7
|
* Renders vertical lines showing parent-child relationships in the tree.
|
|
8
8
|
* Positioned in a full-height container to span the entire item including children.
|
|
9
|
+
*
|
|
10
|
+
* The line element carries the stable `astryx-tree-list-guide` theme target so a
|
|
11
|
+
* theme can recolor or hide the connectors via `defineTheme` (e.g.
|
|
12
|
+
* `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
|
|
13
|
+
* and reimplementing them.
|
|
9
14
|
*/
|
|
10
15
|
export declare function TreeListBranches({ ancestorsIsLast, isLast: _isLast, nestedLevel, }: TreeListBranchesProps): import("react").JSX.Element;
|
|
11
16
|
export declare namespace TreeListBranches {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"AAuDA,UAAU,qBAAqB;IAC7B,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,MAAM,EAAE,OAAO,EACf,WAAW,GACZ,EAAE,qBAAqB,+BA8CvB;yBAlDe,gBAAgB"}
|
|
@@ -16,6 +16,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
16
16
|
import "../theme/tokens.stylex.js";
|
|
17
17
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
18
18
|
import { mergeProps } from "../utils/index.js";
|
|
19
|
+
import { themeProps } from "../utils/themeProps.js";
|
|
19
20
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
21
|
const LINE_WIDTH = 1;
|
|
21
22
|
|
|
@@ -38,6 +39,11 @@ const LEVEL_INDENT = spacingVars['--spacing-4'];
|
|
|
38
39
|
/**
|
|
39
40
|
* Renders vertical lines showing parent-child relationships in the tree.
|
|
40
41
|
* Positioned in a full-height container to span the entire item including children.
|
|
42
|
+
*
|
|
43
|
+
* The line element carries the stable `astryx-tree-list-guide` theme target so a
|
|
44
|
+
* theme can recolor or hide the connectors via `defineTheme` (e.g.
|
|
45
|
+
* `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
|
|
46
|
+
* and reimplementing them.
|
|
41
47
|
*/
|
|
42
48
|
export function TreeListBranches({
|
|
43
49
|
ancestorsIsLast,
|
|
@@ -60,9 +66,9 @@ export function TreeListBranches({
|
|
|
60
66
|
}
|
|
61
67
|
}),
|
|
62
68
|
children: /*#__PURE__*/_jsx("div", {
|
|
63
|
-
...{
|
|
69
|
+
...mergeProps(themeProps('tree-list-guide'), {
|
|
64
70
|
className: "x1nj7uno xu96u03 x1bpp3o7 x10l6tqk x3m8u43 x1i1rx1s x7njt3n xs02d24"
|
|
65
|
-
}
|
|
71
|
+
})
|
|
66
72
|
})
|
|
67
73
|
}, level)
|
|
68
74
|
);
|
|
@@ -75,9 +81,9 @@ export function TreeListBranches({
|
|
|
75
81
|
}
|
|
76
82
|
}),
|
|
77
83
|
children: /*#__PURE__*/_jsx("div", {
|
|
78
|
-
...{
|
|
84
|
+
...mergeProps(themeProps('tree-list-guide'), {
|
|
79
85
|
className: "x1nj7uno xu96u03 x1bpp3o7 x10l6tqk x3m8u43 x1i1rx1s x7njt3n xs02d24"
|
|
80
|
-
}
|
|
86
|
+
})
|
|
81
87
|
})
|
|
82
88
|
})]
|
|
83
89
|
});
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - /packages/cli/templates/blocks/components/TreeList/ (showcase blocks)
|
|
11
11
|
*/
|
|
12
12
|
import { type ReactNode } from 'react';
|
|
13
|
-
import type { TreeListDensity } from './TreeListTypes';
|
|
13
|
+
import type { TreeListDensity, TreeListVariant } from './TreeListTypes';
|
|
14
14
|
export interface TreeListItemInternalProps {
|
|
15
15
|
id: string;
|
|
16
16
|
label: React.ReactNode;
|
|
@@ -29,6 +29,12 @@ export interface TreeListItemInternalProps {
|
|
|
29
29
|
isExpanded: boolean;
|
|
30
30
|
onToggle?: (id: string) => void;
|
|
31
31
|
density: TreeListDensity;
|
|
32
|
+
/**
|
|
33
|
+
* Guide-line visual treatment. `noGuides` suppresses the connector lines;
|
|
34
|
+
* indentation is unaffected (it lives on the row's `marginLeft`, not the
|
|
35
|
+
* guide element).
|
|
36
|
+
*/
|
|
37
|
+
variant: TreeListVariant;
|
|
32
38
|
/** Pre-rendered children subtree (rendered by the parent recursion) */
|
|
33
39
|
renderedChildren?: ReactNode;
|
|
34
40
|
/** 1-based position of this item among its siblings (aria-posinset). */
|
|
@@ -42,7 +48,7 @@ export interface TreeListItemInternalProps {
|
|
|
42
48
|
*/
|
|
43
49
|
isTabbable: boolean;
|
|
44
50
|
}
|
|
45
|
-
export declare function TreeListItem({ id, label, description, startContent, endContent, onClick, href, target, isDisabled, isSelected, hasChildren, nestedLevel, isLast, ancestorsIsLast, isExpanded, onToggle, density, renderedChildren, posInSet, setSize, isTabbable, }: TreeListItemInternalProps): import("react").JSX.Element;
|
|
51
|
+
export declare function TreeListItem({ id, label, description, startContent, endContent, onClick, href, target, isDisabled, isSelected, hasChildren, nestedLevel, isLast, ancestorsIsLast, isExpanded, onToggle, density, variant, renderedChildren, posInSet, setSize, isTabbable, }: TreeListItemInternalProps): import("react").JSX.Element;
|
|
46
52
|
export declare namespace TreeListItem {
|
|
47
53
|
var displayName: string;
|
|
48
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAcrD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAcrD,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AA8NtE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB;;;;OAIG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,WAAW,EACX,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,+BAgO3B;yBAvPe,YAAY"}
|
|
@@ -134,6 +134,7 @@ export function TreeListItem({
|
|
|
134
134
|
isExpanded,
|
|
135
135
|
onToggle,
|
|
136
136
|
density,
|
|
137
|
+
variant,
|
|
137
138
|
renderedChildren,
|
|
138
139
|
posInSet,
|
|
139
140
|
setSize,
|
|
@@ -171,9 +172,18 @@ export function TreeListItem({
|
|
|
171
172
|
const labelAndDescription = /*#__PURE__*/_jsxs(_Fragment, {
|
|
172
173
|
children: [/*#__PURE__*/_jsx("span", {
|
|
173
174
|
id: labelId,
|
|
174
|
-
...
|
|
175
|
+
...mergeProps(
|
|
176
|
+
// Stable theme target for the item's label text. The label carries no
|
|
177
|
+
// themeable handle today, so a theme can only reach it through a
|
|
178
|
+
// fragile structural selector (a content button's first span). This
|
|
179
|
+
// adds an `astryx-tree-list-item-label` class and reflects the row's
|
|
180
|
+
// `selected` state so a theme can, e.g., bold just the selected
|
|
181
|
+
// item's label via `defineTheme`.
|
|
182
|
+
themeProps('tree-list-item-label', {
|
|
183
|
+
selected: isSelected ? 'selected' : null
|
|
184
|
+
}), {
|
|
175
185
|
className: "x1tgivj0"
|
|
176
|
-
},
|
|
186
|
+
}),
|
|
177
187
|
children: label
|
|
178
188
|
}), description != null && /*#__PURE__*/_jsx("span", {
|
|
179
189
|
id: descriptionId,
|
|
@@ -213,17 +223,27 @@ export function TreeListItem({
|
|
|
213
223
|
,
|
|
214
224
|
tabIndex: -1,
|
|
215
225
|
onClick: handleToggle,
|
|
216
|
-
...
|
|
226
|
+
...mergeProps(
|
|
227
|
+
// Stable theme target for the expand/collapse control. `data-tree-toggle`
|
|
228
|
+
// stays as the functional activation hook; this adds a themeable
|
|
229
|
+
// `astryx-tree-list-chevron` class and reflects the open/closed state so
|
|
230
|
+
// a theme can restyle the toggle (and each state) without a fragile
|
|
231
|
+
// `[data-tree-toggle]` selector.
|
|
232
|
+
themeProps('tree-list-chevron', {
|
|
233
|
+
state: isExpanded ? 'expanded' : 'collapsed'
|
|
234
|
+
}), {
|
|
217
235
|
className: "x78zum5 x6s0dn4 xl56j7k x12xnipv x6b6gus xho7bvi x1ypdohk xv9yike xx3sua9 x11g1kdw xmequkd"
|
|
218
|
-
},
|
|
236
|
+
}),
|
|
219
237
|
children: chevronIcon
|
|
220
238
|
}) :
|
|
221
239
|
/*#__PURE__*/
|
|
222
240
|
// Non-interactive chevron only when toggling is not wired up at all
|
|
223
241
|
_jsx("span", {
|
|
224
|
-
...{
|
|
242
|
+
...mergeProps(themeProps('tree-list-chevron', {
|
|
243
|
+
state: isExpanded ? 'expanded' : 'collapsed'
|
|
244
|
+
}), {
|
|
225
245
|
className: "x2lah0s x78zum5 x6s0dn4 xl56j7k x12xnipv x6b6gus xho7bvi x1ypdohk x1717udv xv9yike xx3sua9 x11g1kdw xmequkd"
|
|
226
|
-
},
|
|
246
|
+
}),
|
|
227
247
|
children: chevronIcon
|
|
228
248
|
}) : null;
|
|
229
249
|
const innerContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -291,7 +311,7 @@ export function TreeListItem({
|
|
|
291
311
|
...{
|
|
292
312
|
className: "x3ct3a4 x1ghz6dp x1717udv x1n2onr6 xh8yej3 x1a2a7pz x1hb5tod xtoutpx x1f8er9e x1aefuf3"
|
|
293
313
|
},
|
|
294
|
-
children: [/*#__PURE__*/_jsx("div", {
|
|
314
|
+
children: [variant !== 'noGuides' && /*#__PURE__*/_jsx("div", {
|
|
295
315
|
...{
|
|
296
316
|
className: "x12gdq22"
|
|
297
317
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file TreeListTypes.ts
|
|
3
3
|
* @input Uses React types
|
|
4
|
-
* @output Exports TreeListItemData, TreeListDensity types
|
|
4
|
+
* @output Exports TreeListItemData, TreeListDensity, TreeListVariant types
|
|
5
5
|
* @position Type definitions; consumed by TreeList.tsx, TreeListItem.tsx, index.ts
|
|
6
6
|
*
|
|
7
7
|
* SYNC: When modified, update these files to stay in sync:
|
|
@@ -11,6 +11,30 @@
|
|
|
11
11
|
import type { ReactNode } from 'react';
|
|
12
12
|
/** Spacing density for tree list items. */
|
|
13
13
|
export type TreeListDensity = 'compact' | 'balanced' | 'spacious';
|
|
14
|
+
/**
|
|
15
|
+
* Extensible variant map for TreeList.
|
|
16
|
+
*
|
|
17
|
+
* Theme packages can add custom variants via TypeScript module augmentation:
|
|
18
|
+
* @example
|
|
19
|
+
* ```
|
|
20
|
+
* declare module '@astryxdesign/core/TreeList' {
|
|
21
|
+
* interface TreeListVariantMap {
|
|
22
|
+
* 'dotted': true;
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export interface TreeListVariantMap {
|
|
28
|
+
lineGuides: true;
|
|
29
|
+
noGuides: true;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Visual treatment of the hierarchy guide (connector) lines. Extensible via
|
|
33
|
+
* module augmentation of TreeListVariantMap.
|
|
34
|
+
* - `lineGuides`: connector lines between parent and child rows (default)
|
|
35
|
+
* - `noGuides`: no connector lines; indentation alone conveys nesting
|
|
36
|
+
*/
|
|
37
|
+
export type TreeListVariant = keyof TreeListVariantMap;
|
|
14
38
|
/** Recursive item configuration for TreeList. */
|
|
15
39
|
export interface TreeListItemData {
|
|
16
40
|
/** Unique identifier for the item. Used as React key and for expansion tracking. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeListTypes.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListTypes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAElE,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IAEX,uCAAuC;IACvC,KAAK,EAAE,SAAS,CAAC;IAEjB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kEAAkE;IAClE,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE9B,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAExC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"TreeListTypes.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListTypes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IAEX,uCAAuC;IACvC,KAAK,EAAE,SAAS,CAAC;IAEjB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kEAAkE;IAClE,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE9B,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAExC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|