@astryxdesign/core 0.1.8 → 0.1.9-canary.02ef052
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 +58 -3
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +240 -53
- package/dist/Avatar/AvatarStatusDot.d.ts +35 -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 +215 -6
- package/dist/Breadcrumbs/index.d.ts +6 -0
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +10 -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 +80 -11
- package/dist/Calendar/dayCellUtils.d.ts +4 -4
- package/dist/Calendar/dayCellUtils.js +3 -3
- package/dist/Calendar/styles.d.ts +30 -31
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +30 -31
- 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 +46 -16
- 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 +4 -2
- 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 +27 -11
- 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 +5 -5
- 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 +22 -9
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +3 -1
- package/dist/CommandPalette/CommandPalette.d.ts +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +45 -4
- 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/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +14 -5
- package/dist/ContextMenu/index.d.ts +1 -0
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +3 -1
- package/dist/DateInput/DateInput.d.ts +56 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +59 -21
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts +10 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +23 -20
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +33 -19
- 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/DropdownMenu.d.ts +6 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +22 -5
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +1 -2
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +5 -3
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +5 -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/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +4 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +104 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +427 -0
- package/dist/DropdownMenu/index.d.ts +10 -0
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +13 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +23 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -0
- package/dist/DropdownMenu/menuItemHover.js +33 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts +8 -0
- package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemRoles.js +10 -1
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -6
- package/dist/Field/Field.d.ts +3 -1
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +6 -4
- 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/Field/inputStyles.stylex.d.ts +1 -0
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +18 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +60 -6
- package/dist/FileInput/FileInput.d.ts +10 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +54 -35
- 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 +17 -6
- package/dist/Icon/Icon.d.ts +22 -3
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +19 -3
- 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.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +19 -13
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -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 +9 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +104 -50
- 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 +10 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +22 -17
- 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/RadioList/RadioList.d.ts +2 -2
- package/dist/RadioList/RadioListItem.js +4 -4
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -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 +65 -19
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +16 -0
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +5 -5
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +13 -10
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +21 -8
- package/dist/SideNav/SideNavItem.d.ts +1 -1
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +12 -10
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +106 -36
- package/dist/Stack/stack.stylex.d.ts +9 -9
- package/dist/Switch/Switch.d.ts +8 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +160 -91
- 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 +33 -6
- 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/groupedRows/useTableGroupedRows.js +15 -11
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +36 -26
- 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 +7 -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 +105 -12
- 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/types.d.ts +32 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -3
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +18 -19
- package/dist/TextInput/TextInput.d.ts +10 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +20 -17
- 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 +10 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +32 -21
- 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/Token/Token.d.ts +30 -3
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +17 -2
- package/dist/Token/index.d.ts +1 -1
- package/dist/Token/index.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.d.ts +10 -3
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +20 -6
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +17 -1
- 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 +3 -0
- package/dist/TreeList/TreeListBranches.d.ts +5 -0
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +18 -10
- package/dist/TreeList/TreeListItem.d.ts +8 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +59 -21
- 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 +3 -1
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +20 -10
- package/dist/astryx.css +61 -39
- package/dist/astryx.umd.js +53 -53
- 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 +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -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/useInputStatusIcon.d.ts +38 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -0
- package/dist/hooks/useInputStatusIcon.js +158 -0
- package/dist/hooks/useListFocus.d.ts +39 -1
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +54 -9
- 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 +4 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -2
- package/dist/utils/plainDate.d.ts +30 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +65 -3
- package/dist/utils/rtlStyles.d.ts +24 -0
- package/dist/utils/rtlStyles.d.ts.map +1 -0
- package/dist/utils/rtlStyles.js +27 -0
- package/dist/utils/types.d.ts +13 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/locales/en.json +104 -0
- package/locales/fr-FR.json +14 -0
- package/locales/pseudo.json +78 -0
- package/package.json +6 -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 +64 -5
- package/src/Avatar/Avatar.test.tsx +374 -1
- package/src/Avatar/Avatar.tsx +367 -69
- package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
- package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
- package/src/Avatar/AvatarStatusDot.tsx +180 -21
- package/src/AvatarGroup/AvatarGroup.doc.mjs +2 -0
- package/src/AvatarGroup/AvatarGroup.test.tsx +141 -1
- 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 +335 -2
- package/src/Breadcrumbs/index.ts +31 -0
- package/src/Button/Button.doc.mjs +9 -4
- package/src/Button/Button.test.tsx +49 -0
- package/src/Button/Button.tsx +27 -3
- package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -0
- package/src/ButtonGroup/ButtonGroup.test.tsx +37 -0
- package/src/ButtonGroup/ButtonGroup.tsx +32 -0
- package/src/Calendar/Calendar.doc.mjs +12 -1
- package/src/Calendar/Calendar.test.tsx +362 -19
- package/src/Calendar/Calendar.tsx +111 -32
- package/src/Calendar/dayCellUtils.test.ts +23 -18
- package/src/Calendar/dayCellUtils.ts +3 -3
- package/src/Calendar/styles.ts +33 -39
- 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 +59 -10
- 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 +11 -2
- 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 +33 -5
- 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.doc.mjs +6 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +32 -1
- package/src/CheckboxInput/CheckboxInput.tsx +5 -5
- package/src/CheckboxList/CheckboxList.doc.mjs +6 -0
- 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 +45 -10
- package/src/Collapsible/Collapsible.doc.mjs +1 -0
- package/src/Collapsible/Collapsible.test.tsx +7 -0
- package/src/Collapsible/Collapsible.tsx +16 -6
- package/src/CommandPalette/CommandPalette.doc.mjs +1 -0
- package/src/CommandPalette/CommandPalette.test.tsx +95 -1
- package/src/CommandPalette/CommandPalette.tsx +44 -3
- 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 +235 -0
- package/src/ContextMenu/ContextMenu.tsx +13 -11
- package/src/ContextMenu/index.ts +5 -0
- package/src/DateInput/DateInput.doc.mjs +41 -0
- package/src/DateInput/DateInput.test.tsx +338 -0
- package/src/DateInput/DateInput.tsx +119 -32
- package/src/DateInput/index.ts +1 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +16 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +140 -0
- package/src/DateRangeInput/DateRangeInput.tsx +42 -30
- package/src/DateTimeInput/DateTimeInput.doc.mjs +22 -1
- package/src/DateTimeInput/DateTimeInput.test.tsx +147 -0
- package/src/DateTimeInput/DateTimeInput.tsx +58 -41
- 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 +229 -0
- package/src/DropdownMenu/DropdownMenu.tsx +31 -12
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +9 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +9 -3
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +1 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +8 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +88 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +635 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +553 -0
- package/src/DropdownMenu/index.ts +16 -0
- package/src/DropdownMenu/menuItemHover.ts +39 -0
- package/src/DropdownMenu/menuItemRoles.ts +9 -0
- package/src/DropdownMenu/renderDropdownItems.tsx +29 -15
- package/src/Field/Field.test.tsx +57 -12
- package/src/Field/Field.tsx +20 -14
- package/src/Field/FieldLabel.tsx +9 -1
- package/src/Field/inputStyles.stylex.ts +2 -0
- package/src/FieldStatus/FieldStatus.doc.mjs +17 -5
- package/src/FieldStatus/FieldStatus.test.tsx +150 -40
- package/src/FieldStatus/FieldStatus.tsx +69 -5
- package/src/FileInput/FileInput.doc.mjs +23 -2
- package/src/FileInput/FileInput.test.tsx +135 -12
- package/src/FileInput/FileInput.tsx +65 -51
- 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 +39 -5
- package/src/Icon/Icon.doc.mjs +16 -2
- package/src/Icon/Icon.test.tsx +89 -0
- package/src/Icon/Icon.tsx +58 -5
- 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 +15 -7
- package/src/List/List.test.tsx +9 -8
- package/src/Markdown/Markdown.test.tsx +21 -0
- package/src/Markdown/Markdown.tsx +4 -0
- 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 +24 -2
- package/src/MultiSelector/MultiSelector.test.tsx +498 -3
- package/src/MultiSelector/MultiSelector.tsx +149 -65
- package/src/MultiSelector/hooks.ts +17 -0
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +21 -0
- package/src/NumberInput/NumberInput.test.tsx +82 -7
- package/src/NumberInput/NumberInput.tsx +36 -28
- 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/RadioList/RadioList.doc.mjs +6 -0
- package/src/RadioList/RadioList.tsx +2 -2
- package/src/RadioList/RadioListItem.tsx +4 -4
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -0
- 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 +15 -0
- package/src/Selector/Selector.test.tsx +417 -0
- package/src/Selector/Selector.tsx +86 -21
- package/src/Selector/hooks.ts +17 -0
- package/src/SideNav/SideNav.test.tsx +119 -3
- package/src/SideNav/SideNav.tsx +1 -8
- package/src/SideNav/SideNavCollapseButton.tsx +15 -8
- package/src/SideNav/SideNavHeading.tsx +24 -8
- package/src/SideNav/SideNavItem.tsx +10 -4
- package/src/Slider/Slider.doc.mjs +6 -0
- package/src/Slider/Slider.test.tsx +314 -13
- package/src/Slider/Slider.tsx +117 -28
- package/src/Switch/Switch.doc.mjs +142 -42
- package/src/Switch/Switch.test.tsx +54 -1
- package/src/Switch/Switch.tsx +90 -33
- package/src/TabList/Tab.tsx +2 -2
- package/src/TabList/TabMenu.tsx +2 -2
- package/src/Table/BaseTable.tsx +37 -7
- package/src/Table/Table.doc.mjs +11 -0
- package/src/Table/Table.test.tsx +85 -0
- 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 +15 -8
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +24 -17
- 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 +77 -3
- package/src/Table/plugins/selection/useTableSelection.tsx +22 -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 +139 -8
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +104 -0
- package/src/Table/plugins/tree/useTableTreeState.tsx +46 -2
- package/src/Table/types.ts +33 -0
- 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 +21 -0
- package/src/TextArea/TextArea.test.tsx +32 -1
- package/src/TextArea/TextArea.tsx +27 -26
- package/src/TextInput/TextInput.doc.mjs +21 -0
- package/src/TextInput/TextInput.test.tsx +150 -0
- package/src/TextInput/TextInput.tsx +28 -25
- 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 +21 -0
- package/src/TimeInput/TimeInput.test.tsx +99 -1
- package/src/TimeInput/TimeInput.tsx +43 -31
- 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/Token/Token.test.tsx +21 -15
- package/src/Token/Token.tsx +31 -14
- package/src/Token/index.ts +1 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +38 -2
- package/src/Tokenizer/Tokenizer.test.tsx +206 -2
- package/src/Tokenizer/Tokenizer.tsx +30 -6
- package/src/Tooltip/Tooltip.test.tsx +46 -0
- package/src/Tooltip/useTooltip.tsx +20 -0
- 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 +28 -0
- package/src/TreeList/TreeList.test.tsx +272 -0
- package/src/TreeList/TreeList.tsx +23 -2
- package/src/TreeList/TreeListBranches.tsx +24 -8
- package/src/TreeList/TreeListItem.tsx +84 -22
- 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 +13 -0
- package/src/Typeahead/Typeahead.test.tsx +50 -0
- package/src/Typeahead/Typeahead.tsx +11 -1
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/__tests__/inputWidthContract.test.tsx +62 -0
- package/src/authoring/doc.ts +1 -3
- package/src/doc-mjs.d.ts +19 -0
- 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 +8 -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/useInputStatusIcon.test.tsx +162 -0
- package/src/hooks/useInputStatusIcon.tsx +224 -0
- package/src/hooks/useListFocus.doc.mjs +25 -3
- package/src/hooks/useListFocus.test.tsx +153 -1
- package/src/hooks/useListFocus.ts +102 -9
- 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 +8 -0
- package/src/utils/plainDate.test.ts +46 -6
- package/src/utils/plainDate.ts +69 -3
- package/src/utils/rtlStyles.ts +27 -0
- package/src/utils/types.ts +14 -0
|
@@ -21,7 +21,11 @@ import {spacingVars} from '../theme/tokens.stylex';
|
|
|
21
21
|
import {mergeProps} from '../utils';
|
|
22
22
|
import type {BaseProps} from '../BaseProps';
|
|
23
23
|
import {TreeListItem} from './TreeListItem';
|
|
24
|
-
import type {
|
|
24
|
+
import type {
|
|
25
|
+
TreeListItemData,
|
|
26
|
+
TreeListDensity,
|
|
27
|
+
TreeListVariant,
|
|
28
|
+
} from './TreeListTypes';
|
|
25
29
|
import {themeProps} from '../utils/themeProps';
|
|
26
30
|
import {useTreeFocus} from '../hooks/useTreeFocus';
|
|
27
31
|
|
|
@@ -29,7 +33,7 @@ import {useTreeFocus} from '../hooks/useTreeFocus';
|
|
|
29
33
|
// Types
|
|
30
34
|
// =============================================================================
|
|
31
35
|
|
|
32
|
-
export {type TreeListDensity} from './TreeListTypes';
|
|
36
|
+
export {type TreeListDensity, type TreeListVariant} from './TreeListTypes';
|
|
33
37
|
|
|
34
38
|
export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
35
39
|
/** Ref forwarded to the root element */
|
|
@@ -50,6 +54,16 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
|
50
54
|
*/
|
|
51
55
|
density?: TreeListDensity;
|
|
52
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Visual treatment of the hierarchy guide (connector) lines.
|
|
59
|
+
* - `lineGuides`: connector lines between parent and child rows
|
|
60
|
+
* - `noGuides`: no connector lines; indentation alone conveys nesting
|
|
61
|
+
*
|
|
62
|
+
* Orthogonal to `density` (which controls spacing) — the two compose.
|
|
63
|
+
* @default 'lineGuides'
|
|
64
|
+
*/
|
|
65
|
+
variant?: TreeListVariant;
|
|
66
|
+
|
|
53
67
|
/**
|
|
54
68
|
* Header content rendered above the tree list.
|
|
55
69
|
* Semantically associated via aria-labelledby.
|
|
@@ -69,6 +83,11 @@ export interface TreeListProps extends BaseProps<HTMLDivElement> {
|
|
|
69
83
|
const styles = stylex.create({
|
|
70
84
|
root: {
|
|
71
85
|
position: 'relative',
|
|
86
|
+
// Per-level indentation step. Public, themeable lever: a theme can retune
|
|
87
|
+
// the tree's indent metric (e.g. to `var(--spacing-5)`) via `defineTheme`
|
|
88
|
+
// on the `tree-list` target, and both the row margins (TreeListItem) and
|
|
89
|
+
// the guide-line offsets (TreeListBranches) read it so they stay aligned.
|
|
90
|
+
'--tree-list-indent': spacingVars['--spacing-4'],
|
|
72
91
|
},
|
|
73
92
|
list: {
|
|
74
93
|
margin: 0,
|
|
@@ -156,6 +175,7 @@ function findInitialTabbableId(items: TreeListItemData[]): string | undefined {
|
|
|
156
175
|
export function TreeList({
|
|
157
176
|
items,
|
|
158
177
|
density = 'balanced',
|
|
178
|
+
variant = 'lineGuides',
|
|
159
179
|
header,
|
|
160
180
|
xstyle,
|
|
161
181
|
className,
|
|
@@ -275,6 +295,7 @@ export function TreeList({
|
|
|
275
295
|
isExpanded={isExpanded}
|
|
276
296
|
onToggle={handleToggle}
|
|
277
297
|
density={density}
|
|
298
|
+
variant={variant}
|
|
278
299
|
renderedChildren={renderedChildren}
|
|
279
300
|
posInSet={index + 1}
|
|
280
301
|
setSize={items.length}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import * as stylex from '@stylexjs/stylex';
|
|
17
17
|
import {colorVars, spacingVars} from '../theme/tokens.stylex';
|
|
18
18
|
import {mergeProps} from '../utils';
|
|
19
|
+
import {themeProps} from '../utils/themeProps';
|
|
19
20
|
|
|
20
21
|
const LINE_WIDTH = 1;
|
|
21
22
|
|
|
@@ -25,8 +26,10 @@ const LINE_WIDTH = 1;
|
|
|
25
26
|
*/
|
|
26
27
|
const BRANCH_MARGIN = `calc(${spacingVars['--spacing-2']} + ${spacingVars['--spacing-0-5']})`;
|
|
27
28
|
|
|
28
|
-
/** Per-level indent width,
|
|
29
|
-
|
|
29
|
+
/** Per-level indent width. Reads the public, themeable `--tree-list-indent`
|
|
30
|
+
* lever set on the tree-list root (default `--spacing-4`, 16px), so the guide
|
|
31
|
+
* lines stay aligned with the row indent when a theme retunes the step. */
|
|
32
|
+
const LEVEL_INDENT = 'var(--tree-list-indent)';
|
|
30
33
|
|
|
31
34
|
const styles = stylex.create({
|
|
32
35
|
container: {
|
|
@@ -36,10 +39,10 @@ const styles = stylex.create({
|
|
|
36
39
|
},
|
|
37
40
|
verticalLine: {
|
|
38
41
|
borderRadius: 1,
|
|
39
|
-
|
|
42
|
+
insetInlineStart: 0,
|
|
40
43
|
margin: 'auto',
|
|
41
44
|
position: 'absolute',
|
|
42
|
-
|
|
45
|
+
insetInlineEnd: 0,
|
|
43
46
|
width: LINE_WIDTH,
|
|
44
47
|
backgroundColor: colorVars['--color-border-emphasized'],
|
|
45
48
|
},
|
|
@@ -65,6 +68,11 @@ interface TreeListBranchesProps {
|
|
|
65
68
|
/**
|
|
66
69
|
* Renders vertical lines showing parent-child relationships in the tree.
|
|
67
70
|
* Positioned in a full-height container to span the entire item including children.
|
|
71
|
+
*
|
|
72
|
+
* The line element carries the stable `astryx-tree-list-guide` theme target so a
|
|
73
|
+
* theme can recolor or hide the connectors via `defineTheme` (e.g.
|
|
74
|
+
* `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
|
|
75
|
+
* and reimplementing them.
|
|
68
76
|
*/
|
|
69
77
|
export function TreeListBranches({
|
|
70
78
|
ancestorsIsLast,
|
|
@@ -86,11 +94,14 @@ export function TreeListBranches({
|
|
|
86
94
|
key={level}
|
|
87
95
|
{...mergeProps(stylex.props(styles.container), {
|
|
88
96
|
style: {
|
|
89
|
-
|
|
97
|
+
insetInlineStart: branchOffset,
|
|
90
98
|
},
|
|
91
99
|
})}>
|
|
92
100
|
<div
|
|
93
|
-
{...
|
|
101
|
+
{...mergeProps(
|
|
102
|
+
themeProps('tree-list-guide'),
|
|
103
|
+
stylex.props(styles.verticalLine, styles.verticalFull),
|
|
104
|
+
)}
|
|
94
105
|
/>
|
|
95
106
|
</div>
|
|
96
107
|
)
|
|
@@ -100,10 +111,15 @@ export function TreeListBranches({
|
|
|
100
111
|
<div
|
|
101
112
|
{...mergeProps(stylex.props(styles.container), {
|
|
102
113
|
style: {
|
|
103
|
-
|
|
114
|
+
insetInlineStart: `calc(${BRANCH_MARGIN} + ${nestedLevel - 1} * ${LEVEL_INDENT})`,
|
|
104
115
|
},
|
|
105
116
|
})}>
|
|
106
|
-
<div
|
|
117
|
+
<div
|
|
118
|
+
{...mergeProps(
|
|
119
|
+
themeProps('tree-list-guide'),
|
|
120
|
+
stylex.props(styles.verticalLine, styles.verticalFull),
|
|
121
|
+
)}
|
|
122
|
+
/>
|
|
107
123
|
</div>
|
|
108
124
|
)}
|
|
109
125
|
</>
|
|
@@ -25,10 +25,10 @@ import {
|
|
|
25
25
|
typeScaleVars,
|
|
26
26
|
} from '../theme/tokens.stylex';
|
|
27
27
|
import {getIcon} from '../Icon/globalIconRegistry';
|
|
28
|
-
import {mergeProps} from '../utils';
|
|
28
|
+
import {mergeProps, rtlStyles} from '../utils';
|
|
29
29
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
30
30
|
import {TreeListBranches} from './TreeListBranches';
|
|
31
|
-
import type {TreeListDensity} from './TreeListTypes';
|
|
31
|
+
import type {TreeListDensity, TreeListVariant} from './TreeListTypes';
|
|
32
32
|
import {themeProps} from '../utils/themeProps';
|
|
33
33
|
import {useTranslator} from '../i18n';
|
|
34
34
|
|
|
@@ -82,6 +82,12 @@ const styles = stylex.create({
|
|
|
82
82
|
position: 'relative',
|
|
83
83
|
boxSizing: 'border-box',
|
|
84
84
|
textAlign: 'start',
|
|
85
|
+
// Per-level indent. Declared here (not inline) so it lives in
|
|
86
|
+
// `@layer astryx-base` and the theme layer can override it in normal
|
|
87
|
+
// cascade order — an inline longhand would outrank every layer. The row
|
|
88
|
+
// publishes only the computed distance as `--_tree-indent`; the per-level
|
|
89
|
+
// step is the public `--tree-list-indent` lever (see TreeList `root`).
|
|
90
|
+
marginInlineStart: 'var(--_tree-indent, 0px)',
|
|
85
91
|
},
|
|
86
92
|
interactive: {
|
|
87
93
|
cursor: 'pointer',
|
|
@@ -246,6 +252,11 @@ const descriptionSizeStyles = stylex.create({
|
|
|
246
252
|
},
|
|
247
253
|
});
|
|
248
254
|
|
|
255
|
+
// `CSSProperties` has no index signature for custom properties, so the row's
|
|
256
|
+
// inline style — which publishes the computed indent distance as the private
|
|
257
|
+
// `--_tree-indent` — needs this augmentation to typecheck.
|
|
258
|
+
type IndentStyle = React.CSSProperties & Record<'--_tree-indent', string>;
|
|
259
|
+
|
|
249
260
|
// =============================================================================
|
|
250
261
|
// Types
|
|
251
262
|
// =============================================================================
|
|
@@ -268,6 +279,12 @@ export interface TreeListItemInternalProps {
|
|
|
268
279
|
isExpanded: boolean;
|
|
269
280
|
onToggle?: (id: string) => void;
|
|
270
281
|
density: TreeListDensity;
|
|
282
|
+
/**
|
|
283
|
+
* Guide-line visual treatment. `noGuides` suppresses the connector lines;
|
|
284
|
+
* indentation is unaffected (it lives on the row's `marginLeft`, not the
|
|
285
|
+
* guide element).
|
|
286
|
+
*/
|
|
287
|
+
variant: TreeListVariant;
|
|
271
288
|
/** Pre-rendered children subtree (rendered by the parent recursion) */
|
|
272
289
|
renderedChildren?: ReactNode;
|
|
273
290
|
/** 1-based position of this item among its siblings (aria-posinset). */
|
|
@@ -304,6 +321,7 @@ export function TreeListItem({
|
|
|
304
321
|
isExpanded,
|
|
305
322
|
onToggle,
|
|
306
323
|
density,
|
|
324
|
+
variant,
|
|
307
325
|
renderedChildren,
|
|
308
326
|
posInSet,
|
|
309
327
|
setSize,
|
|
@@ -346,13 +364,35 @@ export function TreeListItem({
|
|
|
346
364
|
return undefined;
|
|
347
365
|
}, [onClick, hasChildren, onToggle, id, isDisabled]);
|
|
348
366
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
367
|
+
// Per-level indent distance. The per-level step is the public, themeable
|
|
368
|
+
// `--tree-list-indent` lever (default `--spacing-4`, set on the tree-list
|
|
369
|
+
// root). Leaves add a fixed chevron-column offset (chevron width + gap) so
|
|
370
|
+
// their labels line up with sibling parents' labels; that offset is tied to
|
|
371
|
+
// the chevron's own dimensions, not the indent step, so it does not scale
|
|
372
|
+
// with the lever. Published as the private `--_tree-indent` and consumed by
|
|
373
|
+
// `contentWrapper`'s stylesheet `margin-inline-start` (kept out of the inline
|
|
374
|
+
// style so the theme layer can override it — see #4308).
|
|
375
|
+
const indentDistance = hasChildren
|
|
376
|
+
? `calc(${nestedLevel} * var(--tree-list-indent))`
|
|
377
|
+
: `calc(${nestedLevel} * var(--tree-list-indent) + ${spacingVars['--spacing-4']} + ${spacingVars['--spacing-2']})`;
|
|
378
|
+
const indentStyle: IndentStyle = {'--_tree-indent': indentDistance};
|
|
352
379
|
|
|
353
380
|
const labelAndDescription = (
|
|
354
381
|
<>
|
|
355
|
-
<span
|
|
382
|
+
<span
|
|
383
|
+
id={labelId}
|
|
384
|
+
{...mergeProps(
|
|
385
|
+
// Stable theme target for the item's label text. The label carries no
|
|
386
|
+
// themeable handle today, so a theme can only reach it through a
|
|
387
|
+
// fragile structural selector (a content button's first span). This
|
|
388
|
+
// adds an `astryx-tree-list-item-label` class and reflects the row's
|
|
389
|
+
// `selected` state so a theme can, e.g., bold just the selected
|
|
390
|
+
// item's label via `defineTheme`.
|
|
391
|
+
themeProps('tree-list-item-label', {
|
|
392
|
+
selected: isSelected ? 'selected' : null,
|
|
393
|
+
}),
|
|
394
|
+
stylex.props(styles.label),
|
|
395
|
+
)}>
|
|
356
396
|
{label}
|
|
357
397
|
</span>
|
|
358
398
|
{description != null && (
|
|
@@ -366,12 +406,14 @@ export function TreeListItem({
|
|
|
366
406
|
);
|
|
367
407
|
|
|
368
408
|
const chevronIcon = (
|
|
369
|
-
<span
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
409
|
+
<span {...stylex.props(rtlStyles.mirror)}>
|
|
410
|
+
<span
|
|
411
|
+
{...stylex.props(
|
|
412
|
+
styles.chevronSvg,
|
|
413
|
+
isExpanded ? styles.chevronExpanded : styles.chevronCollapsed,
|
|
414
|
+
)}>
|
|
415
|
+
{getIcon('chevronRight')}
|
|
416
|
+
</span>
|
|
375
417
|
</span>
|
|
376
418
|
);
|
|
377
419
|
|
|
@@ -394,12 +436,30 @@ export function TreeListItem({
|
|
|
394
436
|
// a separate tab stop. Row-level Enter/Space forwards to this button.
|
|
395
437
|
tabIndex={-1}
|
|
396
438
|
onClick={handleToggle}
|
|
397
|
-
{...
|
|
439
|
+
{...mergeProps(
|
|
440
|
+
// Stable theme target for the expand/collapse control. `data-tree-toggle`
|
|
441
|
+
// stays as the functional activation hook; this adds a themeable
|
|
442
|
+
// `astryx-tree-list-chevron` class and reflects the open/closed state so
|
|
443
|
+
// a theme can restyle the toggle (and each state) without a fragile
|
|
444
|
+
// `[data-tree-toggle]` selector.
|
|
445
|
+
themeProps('tree-list-chevron', {
|
|
446
|
+
state: isExpanded ? 'expanded' : 'collapsed',
|
|
447
|
+
}),
|
|
448
|
+
stylex.props(styles.chevronButton),
|
|
449
|
+
)}>
|
|
398
450
|
{chevronIcon}
|
|
399
451
|
</button>
|
|
400
452
|
) : (
|
|
401
453
|
// Non-interactive chevron only when toggling is not wired up at all
|
|
402
|
-
<span
|
|
454
|
+
<span
|
|
455
|
+
{...mergeProps(
|
|
456
|
+
themeProps('tree-list-chevron', {
|
|
457
|
+
state: isExpanded ? 'expanded' : 'collapsed',
|
|
458
|
+
}),
|
|
459
|
+
stylex.props(styles.chevronContainer),
|
|
460
|
+
)}>
|
|
461
|
+
{chevronIcon}
|
|
462
|
+
</span>
|
|
403
463
|
)
|
|
404
464
|
) : null;
|
|
405
465
|
|
|
@@ -461,13 +521,15 @@ export function TreeListItem({
|
|
|
461
521
|
data-tree-level={nestedLevel + 1}
|
|
462
522
|
data-tree-disabled={isDisabled || undefined}
|
|
463
523
|
{...stylex.props(styles.wrapper)}>
|
|
464
|
-
|
|
465
|
-
<
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
524
|
+
{variant !== 'noGuides' && (
|
|
525
|
+
<div {...stylex.props(styles.treeBranches)}>
|
|
526
|
+
<TreeListBranches
|
|
527
|
+
ancestorsIsLast={ancestorsIsLast}
|
|
528
|
+
isLast={isLast}
|
|
529
|
+
nestedLevel={nestedLevel}
|
|
530
|
+
/>
|
|
531
|
+
</div>
|
|
532
|
+
)}
|
|
471
533
|
<div {...stylex.props(styles.rowWrapper)}>
|
|
472
534
|
<div
|
|
473
535
|
{...mergeProps(
|
|
@@ -487,7 +549,7 @@ export function TreeListItem({
|
|
|
487
549
|
isSelected && styles.selected,
|
|
488
550
|
),
|
|
489
551
|
)}
|
|
490
|
-
style={
|
|
552
|
+
style={indentStyle}
|
|
491
553
|
onClick={handleClick}>
|
|
492
554
|
{innerContent}
|
|
493
555
|
</div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file TreeListTypes.ts
|
|
5
5
|
* @input Uses React types
|
|
6
|
-
* @output Exports TreeListItemData, TreeListDensity types
|
|
6
|
+
* @output Exports TreeListItemData, TreeListDensity, TreeListVariant types
|
|
7
7
|
* @position Type definitions; consumed by TreeList.tsx, TreeListItem.tsx, index.ts
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When modified, update these files to stay in sync:
|
|
@@ -16,6 +16,32 @@ import type {ReactNode} from 'react';
|
|
|
16
16
|
/** Spacing density for tree list items. */
|
|
17
17
|
export type TreeListDensity = 'compact' | 'balanced' | 'spacious';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Extensible variant map for TreeList.
|
|
21
|
+
*
|
|
22
|
+
* Theme packages can add custom variants via TypeScript module augmentation:
|
|
23
|
+
* @example
|
|
24
|
+
* ```
|
|
25
|
+
* declare module '@astryxdesign/core/TreeList' {
|
|
26
|
+
* interface TreeListVariantMap {
|
|
27
|
+
* 'dotted': true;
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export interface TreeListVariantMap {
|
|
33
|
+
lineGuides: true;
|
|
34
|
+
noGuides: true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Visual treatment of the hierarchy guide (connector) lines. Extensible via
|
|
39
|
+
* module augmentation of TreeListVariantMap.
|
|
40
|
+
* - `lineGuides`: connector lines between parent and child rows (default)
|
|
41
|
+
* - `noGuides`: no connector lines; indentation alone conveys nesting
|
|
42
|
+
*/
|
|
43
|
+
export type TreeListVariant = keyof TreeListVariantMap;
|
|
44
|
+
|
|
19
45
|
/** Recursive item configuration for TreeList. */
|
|
20
46
|
export interface TreeListItemData {
|
|
21
47
|
/** Unique identifier for the item. Used as React key and for expansion tracking. */
|
package/src/TreeList/index.ts
CHANGED
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
export {TreeList} from './TreeList';
|
|
15
|
-
export type {TreeListProps, TreeListDensity} from './TreeList';
|
|
16
|
-
export type {TreeListItemData} from './TreeListTypes';
|
|
15
|
+
export type {TreeListProps, TreeListDensity, TreeListVariant} from './TreeList';
|
|
16
|
+
export type {TreeListItemData, TreeListVariantMap} from './TreeListTypes';
|
|
@@ -230,7 +230,7 @@ const styles = stylex.create({
|
|
|
230
230
|
outline: 'none',
|
|
231
231
|
backgroundColor: 'transparent',
|
|
232
232
|
border: 'none',
|
|
233
|
-
textAlign: '
|
|
233
|
+
textAlign: 'start',
|
|
234
234
|
},
|
|
235
235
|
itemHighlighted: {
|
|
236
236
|
backgroundColor: colorVars['--color-overlay-hover'],
|
|
@@ -431,7 +431,7 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
431
431
|
resultsGenRef.current = gen;
|
|
432
432
|
const shown = searchResults.slice(0, maxMenuItems);
|
|
433
433
|
setResults(shown);
|
|
434
|
-
setHighlightedIndex(
|
|
434
|
+
setHighlightedIndex(shown.length > 0 ? 0 : -1);
|
|
435
435
|
if (searchResults.length > 0 || searchQuery.length > 0) {
|
|
436
436
|
showLayer();
|
|
437
437
|
}
|
|
@@ -469,8 +469,9 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
469
469
|
return;
|
|
470
470
|
}
|
|
471
471
|
resultsGenRef.current = gen;
|
|
472
|
-
|
|
473
|
-
|
|
472
|
+
const shown = bootstrapResults.slice(0, maxMenuItems);
|
|
473
|
+
setResults(shown);
|
|
474
|
+
setHighlightedIndex(shown.length > 0 ? 0 : -1);
|
|
474
475
|
if (bootstrapResults.length > 0) {
|
|
475
476
|
showLayer();
|
|
476
477
|
}
|
|
@@ -637,15 +638,19 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
637
638
|
switch (e.key) {
|
|
638
639
|
case 'ArrowDown':
|
|
639
640
|
e.preventDefault();
|
|
640
|
-
|
|
641
|
-
prev
|
|
642
|
-
|
|
641
|
+
if (results.length > 0) {
|
|
642
|
+
setHighlightedIndex(prev =>
|
|
643
|
+
prev < results.length - 1 ? prev + 1 : 0,
|
|
644
|
+
);
|
|
645
|
+
}
|
|
643
646
|
break;
|
|
644
647
|
case 'ArrowUp':
|
|
645
648
|
e.preventDefault();
|
|
646
|
-
|
|
647
|
-
prev
|
|
648
|
-
|
|
649
|
+
if (results.length > 0) {
|
|
650
|
+
setHighlightedIndex(prev =>
|
|
651
|
+
prev > 0 ? prev - 1 : results.length - 1,
|
|
652
|
+
);
|
|
653
|
+
}
|
|
649
654
|
break;
|
|
650
655
|
case 'Enter':
|
|
651
656
|
e.preventDefault();
|
|
@@ -660,13 +665,17 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
660
665
|
case 'Home':
|
|
661
666
|
if (popover.isOpen) {
|
|
662
667
|
e.preventDefault();
|
|
663
|
-
|
|
668
|
+
if (results.length > 0) {
|
|
669
|
+
setHighlightedIndex(0);
|
|
670
|
+
}
|
|
664
671
|
}
|
|
665
672
|
break;
|
|
666
673
|
case 'End':
|
|
667
674
|
if (popover.isOpen) {
|
|
668
675
|
e.preventDefault();
|
|
669
|
-
|
|
676
|
+
if (results.length > 0) {
|
|
677
|
+
setHighlightedIndex(results.length - 1);
|
|
678
|
+
}
|
|
670
679
|
}
|
|
671
680
|
break;
|
|
672
681
|
}
|
|
@@ -694,13 +703,17 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
694
703
|
// cursor walks off-screen once navigation passes the visible window. Mirrors
|
|
695
704
|
// CommandPaletteItem's scrollIntoView({block: 'nearest'}) behavior.
|
|
696
705
|
useEffect(() => {
|
|
697
|
-
if (
|
|
706
|
+
if (
|
|
707
|
+
!popover.isOpen ||
|
|
708
|
+
highlightedIndex < 0 ||
|
|
709
|
+
highlightedIndex >= results.length
|
|
710
|
+
) {
|
|
698
711
|
return;
|
|
699
712
|
}
|
|
700
713
|
document
|
|
701
714
|
.getElementById(getItemId(highlightedIndex))
|
|
702
715
|
?.scrollIntoView?.({block: 'nearest'});
|
|
703
|
-
}, [popover.isOpen, highlightedIndex, getItemId]);
|
|
716
|
+
}, [popover.isOpen, highlightedIndex, getItemId, results.length]);
|
|
704
717
|
|
|
705
718
|
const selectedKey =
|
|
706
719
|
value == null ? null : getKey(value.id, () => results.indexOf(value));
|
|
@@ -725,7 +738,9 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
725
738
|
aria-expanded={popover.isOpen}
|
|
726
739
|
aria-controls={listboxId}
|
|
727
740
|
aria-activedescendant={
|
|
728
|
-
popover.isOpen &&
|
|
741
|
+
popover.isOpen &&
|
|
742
|
+
highlightedIndex >= 0 &&
|
|
743
|
+
highlightedIndex < results.length
|
|
729
744
|
? getItemId(highlightedIndex)
|
|
730
745
|
: undefined
|
|
731
746
|
}
|
|
@@ -89,6 +89,13 @@ export const docs = {
|
|
|
89
89
|
description:
|
|
90
90
|
'Validation status object with type and message for error/warning/success states.',
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
name: 'statusVariant',
|
|
94
|
+
type: "'attached' | 'detached'",
|
|
95
|
+
description:
|
|
96
|
+
'How the status message is placed relative to the input. attached overlaps directly below the input (bordered treatment); detached floats below as a separate element with spacing.',
|
|
97
|
+
default: "'attached'",
|
|
98
|
+
},
|
|
92
99
|
{
|
|
93
100
|
name: 'renderItem',
|
|
94
101
|
type: '(item: T) => ReactNode',
|
|
@@ -158,6 +165,12 @@ export const docs = {
|
|
|
158
165
|
type: '(isOpen: boolean) => void',
|
|
159
166
|
description: 'Callback when the dropdown opens or closes.',
|
|
160
167
|
},
|
|
168
|
+
{
|
|
169
|
+
name: 'width',
|
|
170
|
+
type: 'SizeValue',
|
|
171
|
+
description:
|
|
172
|
+
'Width of the field (number = pixels, string used as-is, e.g. "100%"). Sizes the whole field (label, control, and status) so they stay aligned.',
|
|
173
|
+
},
|
|
161
174
|
{
|
|
162
175
|
name: 'xstyle',
|
|
163
176
|
type: 'StyleXStyles',
|
|
@@ -171,6 +171,33 @@ describe('BaseTypeahead', () => {
|
|
|
171
171
|
});
|
|
172
172
|
});
|
|
173
173
|
|
|
174
|
+
describe('empty results active descendant (#4059)', () => {
|
|
175
|
+
it('does not set aria-activedescendant when search has 0 results', async () => {
|
|
176
|
+
render(
|
|
177
|
+
<BaseTypeahead
|
|
178
|
+
searchSource={fruitSource}
|
|
179
|
+
value={null}
|
|
180
|
+
onChange={() => {}}
|
|
181
|
+
debounceMs={0}
|
|
182
|
+
/>,
|
|
183
|
+
);
|
|
184
|
+
const input = screen.getByRole('combobox');
|
|
185
|
+
fireEvent.change(input, {target: {value: 'zzzzz'}});
|
|
186
|
+
|
|
187
|
+
await waitFor(() => {
|
|
188
|
+
expect(input).not.toHaveAttribute('aria-activedescendant');
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Press ArrowDown — should NOT set aria-activedescendant to option-0
|
|
192
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
193
|
+
expect(input).not.toHaveAttribute('aria-activedescendant');
|
|
194
|
+
|
|
195
|
+
// Press Home — should NOT set aria-activedescendant
|
|
196
|
+
fireEvent.keyDown(input, {key: 'Home'});
|
|
197
|
+
expect(input).not.toHaveAttribute('aria-activedescendant');
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
174
201
|
it('disables input when isDisabled', () => {
|
|
175
202
|
render(
|
|
176
203
|
<BaseTypeahead
|
|
@@ -948,3 +975,26 @@ describe('Typeahead disabledMessage', () => {
|
|
|
948
975
|
expect(input).not.toHaveAttribute('aria-disabled');
|
|
949
976
|
});
|
|
950
977
|
});
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
describe('Typeahead statusVariant forwarding', () => {
|
|
981
|
+
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
982
|
+
const {container} = render(
|
|
983
|
+
<Typeahead label="Fruit" searchSource={fruitSource} value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} />,
|
|
984
|
+
);
|
|
985
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
986
|
+
'data-variant',
|
|
987
|
+
'attached',
|
|
988
|
+
);
|
|
989
|
+
});
|
|
990
|
+
|
|
991
|
+
it('forwards statusVariant="detached" to the underlying Field status', () => {
|
|
992
|
+
const {container} = render(
|
|
993
|
+
<Typeahead label="Fruit" searchSource={fruitSource} value={null} onChange={() => {}} status={{type: 'error', message: 'Required'}} statusVariant="detached" />,
|
|
994
|
+
);
|
|
995
|
+
expect(container.querySelector('.astryx-field-status')).toHaveAttribute(
|
|
996
|
+
'data-variant',
|
|
997
|
+
'detached',
|
|
998
|
+
);
|
|
999
|
+
});
|
|
1000
|
+
});
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
inputStatusBorderStyles,
|
|
37
37
|
inputStatusHoverShadowStyles,
|
|
38
38
|
inputStatusFocusWithinStyles,
|
|
39
|
+
type FieldStatusVariant,
|
|
39
40
|
} from '../Field';
|
|
40
41
|
import {Token} from '../Token';
|
|
41
42
|
import {useTooltip} from '../Tooltip';
|
|
@@ -75,6 +76,13 @@ export interface TypeaheadProps<T extends SearchableItem> extends Omit<
|
|
|
75
76
|
isOptional?: boolean;
|
|
76
77
|
/** Validation status. */
|
|
77
78
|
status?: InputStatus;
|
|
79
|
+
/**
|
|
80
|
+
* How the status message is placed relative to the input.
|
|
81
|
+
* - 'attached': message overlaps directly below the input (bordered treatment)
|
|
82
|
+
* - 'detached': message floats below as a separate element with spacing
|
|
83
|
+
* @default 'attached'
|
|
84
|
+
*/
|
|
85
|
+
statusVariant?: FieldStatusVariant;
|
|
78
86
|
/**
|
|
79
87
|
* Icon to display at the start of the input.
|
|
80
88
|
* Accepts a ReactNode (e.g. `<Icon icon={SearchIcon} />`) or an SVG icon component directly.
|
|
@@ -226,6 +234,7 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
226
234
|
isRequired = false,
|
|
227
235
|
isOptional = false,
|
|
228
236
|
status,
|
|
237
|
+
statusVariant = 'attached',
|
|
229
238
|
startIcon,
|
|
230
239
|
labelTooltip,
|
|
231
240
|
searchSource,
|
|
@@ -412,7 +421,7 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
412
421
|
styles.wrapper,
|
|
413
422
|
sizeStyle,
|
|
414
423
|
status && inputStatusBorderStyles[status.type],
|
|
415
|
-
status && inputStatusHoverShadowStyles[status.type],
|
|
424
|
+
status && !isDisabled && inputStatusHoverShadowStyles[status.type],
|
|
416
425
|
status && inputStatusFocusWithinStyles[status.type],
|
|
417
426
|
isDisabled && inputWrapperStyles.disabled,
|
|
418
427
|
inputGroup && groupStyles.inGroup,
|
|
@@ -500,6 +509,7 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
500
509
|
}
|
|
501
510
|
: undefined
|
|
502
511
|
}
|
|
512
|
+
statusVariant={statusVariant}
|
|
503
513
|
labelTooltip={labelTooltip}
|
|
504
514
|
width={width}
|
|
505
515
|
xstyle={xstyle}
|
|
@@ -132,6 +132,7 @@ export function TypeaheadItem<T extends SearchableItem>({
|
|
|
132
132
|
icon,
|
|
133
133
|
description,
|
|
134
134
|
isDisabled = false,
|
|
135
|
+
xstyle,
|
|
135
136
|
}: TypeaheadItemProps<T>) {
|
|
136
137
|
// If item has a pre-rendered element, use it
|
|
137
138
|
if (item.element) {
|
|
@@ -143,7 +144,7 @@ export function TypeaheadItem<T extends SearchableItem>({
|
|
|
143
144
|
ref={ref}
|
|
144
145
|
{...mergeProps(
|
|
145
146
|
themeProps('typeahead-item'),
|
|
146
|
-
stylex.props(styles.container, isDisabled && styles.disabled),
|
|
147
|
+
stylex.props(styles.container, isDisabled && styles.disabled, xstyle),
|
|
147
148
|
)}>
|
|
148
149
|
{icon}
|
|
149
150
|
<div {...stylex.props(styles.content)}>
|