@astryxdesign/core 0.3.0 → 0.4.0-canary.058f476
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +156 -0
- package/dist/AlertDialog/AlertDialog.d.ts +10 -2
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +22 -3
- package/dist/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +40 -9
- package/dist/AspectRatio/AspectRatio.d.ts +13 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +10 -2
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/AspectRatio/index.js +1 -2
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -20
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +1 -2
- package/dist/Badge/index.d.ts.map +1 -1
- package/dist/Badge/index.js +1 -2
- package/dist/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -17
- package/dist/Blockquote/Blockquote.d.ts.map +1 -1
- package/dist/Blockquote/Blockquote.js +1 -2
- package/dist/Blockquote/index.d.ts.map +1 -1
- package/dist/Blockquote/index.js +1 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
- package/dist/Breadcrumbs/index.d.ts +2 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +1 -0
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +12 -16
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +2 -1
- package/dist/Calendar/styles.d.ts +0 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +0 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +1 -2
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +1 -2
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +1 -2
- package/dist/Center/index.d.ts.map +1 -1
- package/dist/Center/index.js +1 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +2 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -3
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +17 -17
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +36 -125
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -11
- package/dist/Code/Code.d.ts.map +1 -1
- package/dist/Code/Code.js +1 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +84 -67
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +35 -15
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -0
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +6 -3
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +32 -31
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +1 -1
- package/dist/ContextMenu/index.d.ts +2 -1
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +1 -0
- package/dist/DateInput/DateInput.d.ts +9 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +47 -33
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +55 -32
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +54 -30
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +62 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
- package/dist/DropdownMenu/index.d.ts +2 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +4 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +35 -27
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +9 -5
- package/dist/Field/InputClearButton.d.ts +16 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +15 -4
- package/dist/Field/PanelSearchInput.d.ts +81 -0
- package/dist/Field/PanelSearchInput.d.ts.map +1 -0
- package/dist/Field/PanelSearchInput.js +151 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +1 -2
- package/dist/Grid/index.d.ts.map +1 -1
- package/dist/Grid/index.js +1 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- package/dist/Icon/globalIconRegistry.d.ts +5 -4
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +5 -4
- package/dist/Indicator/CheckIndicator.d.ts +25 -0
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckIndicator.js +155 -0
- package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckboxIndicator.js +173 -0
- package/dist/Indicator/RadioIndicator.d.ts +23 -0
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
- package/dist/Indicator/RadioIndicator.js +137 -0
- package/dist/Indicator/index.d.ts +24 -0
- package/dist/Indicator/index.d.ts.map +1 -0
- package/dist/Indicator/index.js +26 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
- package/dist/Indicator/indicator.markers.stylex.js +21 -0
- package/dist/Indicator/indicatorRegistry.d.ts +71 -0
- package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
- package/dist/Indicator/indicatorRegistry.js +93 -0
- package/dist/Indicator/types.d.ts +177 -0
- package/dist/Indicator/types.d.ts.map +1 -0
- package/dist/Indicator/types.js +1 -0
- package/dist/Indicator/useIndicator.d.ts +18 -0
- package/dist/Indicator/useIndicator.d.ts.map +1 -0
- package/dist/Indicator/useIndicator.js +30 -0
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -8
- package/dist/Layer/useLayer.d.ts +14 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +25 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +80 -103
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +4 -5
- package/dist/MobileNav/MobileNav.js +8 -8
- package/dist/MoreMenu/MoreMenu.d.ts +14 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +8 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +205 -170
- package/dist/NumberInput/NumberInput.d.ts +27 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +230 -42
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +61 -63
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -8
- package/dist/Popover/usePopover.d.ts +15 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
- package/dist/ProgressBar/ProgressBar.d.ts +11 -4
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +95 -6
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +29 -84
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +2 -3
- package/dist/Section/Section.d.ts.map +1 -1
- package/dist/Section/Section.js +1 -2
- package/dist/Section/index.d.ts.map +1 -1
- package/dist/Section/index.js +1 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -11
- package/dist/Selector/Selector.d.ts +12 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +293 -183
- package/dist/Selector/hooks.d.ts +18 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +57 -40
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +29 -14
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +56 -20
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +28 -22
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -2
- package/dist/Skeleton/index.d.ts.map +1 -1
- package/dist/Skeleton/index.js +1 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +2 -6
- package/dist/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +14 -13
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -3
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +41 -19
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +8 -0
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +4 -2
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
- package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/index.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +2 -1
- package/dist/Table/types.d.ts +11 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -6
- package/dist/TextInput/TextInput.d.ts +10 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +13 -19
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +32 -26
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +14 -17
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -3
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- package/dist/Timestamp/formatInstant.d.ts +11 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +3 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -11
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +4 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -19
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +6 -5
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +54 -16
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -9
- package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +146 -60
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +83 -38
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +13 -0
- package/dist/TreeList/TreeListBranches.d.ts +1 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +14 -4
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +57 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -8
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -2
- package/dist/VisuallyHidden/index.d.ts.map +1 -1
- package/dist/VisuallyHidden/index.js +1 -2
- package/dist/astryx.css +86 -96
- package/dist/astryx.umd.js +56 -56
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.stylex.d.ts +61 -0
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.stylex.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useClipboard.d.ts +59 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +106 -0
- package/dist/hooks/useContainerReveal.d.ts +14 -8
- package/dist/hooks/useContainerReveal.d.ts.map +1 -1
- package/dist/hooks/useContainerReveal.js +28 -69
- package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
- package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
- package/dist/hooks/useIndicatorFocusRing.js +96 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +17 -4
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +12 -2
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +33 -18
- package/dist/hooks/useStreamingText.d.ts +18 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +47 -7
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +9 -3
- package/dist/hooks/useTypeahead.d.ts +3 -2
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +19 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +18 -2
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +10 -1
- package/dist/theme/derivedVarRegistry.d.ts +8 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +14 -13
- package/dist/theme/expandColorScale.d.ts +3 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +17 -7
- package/dist/theme/expandTypeScale.d.ts.map +1 -1
- package/dist/theme/expandTypeScale.js +17 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +11 -0
- package/dist/theme/index.d.ts +2 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +23 -0
- package/dist/utils/focusOutline.stylex.d.ts +122 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +143 -0
- package/dist/utils/focusReturn.d.ts +24 -0
- package/dist/utils/focusReturn.d.ts.map +1 -0
- package/dist/utils/focusReturn.js +29 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -1
- package/dist/utils/interactionModality.d.ts +34 -0
- package/dist/utils/interactionModality.d.ts.map +1 -0
- package/dist/utils/interactionModality.js +70 -0
- package/dist/utils/mergeRefs.d.ts.map +1 -1
- package/dist/utils/mergeRefs.js +7 -5
- package/dist/utils/rtlStyles.d.ts +2 -2
- package/dist/utils/rtlStyles.js +2 -2
- package/dist/utils/themeProps.d.ts +20 -1
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +8 -2
- package/locales/en.json +52 -0
- package/locales/pseudo.json +39 -0
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
- package/src/AlertDialog/AlertDialog.test.tsx +208 -1
- package/src/AlertDialog/AlertDialog.tsx +21 -3
- package/src/AppShell/AppShell.doc.mjs +14 -0
- package/src/AppShell/AppShell.test.tsx +139 -0
- package/src/AppShell/AppShell.tsx +32 -22
- package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
- package/src/AspectRatio/AspectRatio.test.tsx +30 -0
- package/src/AspectRatio/AspectRatio.tsx +13 -2
- package/src/AspectRatio/index.ts +0 -2
- package/src/Avatar/Avatar.doc.mjs +2 -13
- package/src/Avatar/Avatar.test.tsx +33 -8
- package/src/Avatar/Avatar.tsx +52 -50
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
- package/src/Badge/Badge.tsx +0 -2
- package/src/Badge/index.ts +0 -2
- package/src/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +33 -11
- package/src/Blockquote/Blockquote.tsx +0 -2
- package/src/Blockquote/index.ts +0 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.doc.mjs +2 -2
- package/src/Button/Button.tsx +22 -41
- package/src/Calendar/Calendar.tsx +2 -1
- package/src/Calendar/styles.ts +0 -8
- package/src/Card/Card.tsx +0 -2
- package/src/Card/index.ts +0 -2
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- package/src/Center/Center.tsx +0 -2
- package/src/Center/index.ts +0 -2
- package/src/Chat/Chat.doc.mjs +2 -0
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
- package/src/Chat/ChatSendButton.tsx +2 -3
- package/src/Chat/ChatToolCalls.test.tsx +35 -0
- package/src/Chat/ChatToolCalls.tsx +36 -16
- package/src/Chat/useTriggerMenu.tsx +2 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
- package/src/CheckboxInput/CheckboxInput.tsx +45 -202
- package/src/ClickableCard/ClickableCard.tsx +6 -11
- package/src/Code/Code.tsx +0 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
- package/src/CodeBlock/CodeBlock.test.tsx +91 -0
- package/src/CodeBlock/CodeBlock.tsx +57 -80
- package/src/Collapsible/Collapsible.tsx +22 -18
- package/src/CommandPalette/CommandPalette.test.tsx +83 -0
- package/src/CommandPalette/CommandPalette.tsx +5 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
- package/src/CommandPalette/CommandPaletteList.tsx +2 -2
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -28
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +41 -0
- package/src/ContextMenu/ContextMenu.tsx +3 -3
- package/src/ContextMenu/index.ts +5 -1
- package/src/DateInput/DateInput.doc.mjs +18 -3
- package/src/DateInput/DateInput.test.tsx +112 -11
- package/src/DateInput/DateInput.tsx +44 -25
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +27 -21
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
- package/src/DateTimeInput/DateTimeInput.tsx +58 -17
- package/src/Dialog/Dialog.tsx +2 -9
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
- package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
- package/src/DropdownMenu/DropdownMenu.tsx +113 -52
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
- package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
- package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
- package/src/DropdownMenu/index.ts +8 -1
- package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
- package/src/EmptyState/EmptyState.doc.mjs +4 -0
- package/src/EmptyState/EmptyState.test.tsx +62 -0
- package/src/EmptyState/EmptyState.tsx +16 -6
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/InputClearButton.test.tsx +117 -0
- package/src/Field/InputClearButton.tsx +30 -3
- package/src/Field/PanelSearchInput.tsx +271 -0
- package/src/FileInput/FileInput.tsx +21 -8
- package/src/Grid/Grid.tsx +0 -2
- package/src/Grid/index.ts +0 -2
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- package/src/Icon/globalIconRegistry.tsx +5 -4
- package/src/Indicator/CheckIndicator.tsx +174 -0
- package/src/Indicator/CheckboxIndicator.tsx +257 -0
- package/src/Indicator/Indicator.doc.mjs +344 -0
- package/src/Indicator/Indicator.test.tsx +393 -0
- package/src/Indicator/RadioIndicator.tsx +206 -0
- package/src/Indicator/index.ts +46 -0
- package/src/Indicator/indicator.markers.stylex.ts +19 -0
- package/src/Indicator/indicatorRegistry.test.tsx +106 -0
- package/src/Indicator/indicatorRegistry.ts +120 -0
- package/src/Indicator/types.ts +197 -0
- package/src/Indicator/useIndicator.ts +39 -0
- package/src/Item/Item.doc.mjs +1 -1
- package/src/Item/Item.tsx +7 -14
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +85 -0
- package/src/Layer/useLayer.tsx +39 -1
- package/src/Lightbox/Lightbox.doc.mjs +1 -1
- package/src/Lightbox/Lightbox.tsx +45 -49
- package/src/Link/Link.tsx +4 -11
- package/src/MobileNav/MobileNav.tsx +3 -3
- package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
- package/src/MoreMenu/MoreMenu.test.tsx +68 -1
- package/src/MoreMenu/MoreMenu.tsx +19 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +18 -1
- package/src/MultiSelector/MultiSelector.test.tsx +387 -18
- package/src/MultiSelector/MultiSelector.tsx +267 -220
- package/src/NumberInput/NumberInput.doc.mjs +265 -50
- package/src/NumberInput/NumberInput.test.tsx +726 -21
- package/src/NumberInput/NumberInput.tsx +353 -59
- package/src/Outline/Outline.tsx +2 -5
- package/src/Pagination/Pagination.doc.mjs +1 -1
- package/src/Pagination/Pagination.test.tsx +22 -7
- package/src/Pagination/Pagination.tsx +38 -35
- package/src/Popover/Popover.doc.mjs +2 -0
- package/src/Popover/Popover.tsx +6 -7
- package/src/Popover/usePopover.tsx +37 -4
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
- package/src/ProgressBar/ProgressBar.test.tsx +224 -1
- package/src/ProgressBar/ProgressBar.tsx +126 -30
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioListItem.tsx +31 -130
- package/src/Resizable/ResizeHandle.tsx +2 -9
- package/src/Section/Section.tsx +0 -2
- package/src/Section/index.ts +0 -2
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +17 -4
- package/src/Selector/Selector.test.tsx +1394 -100
- package/src/Selector/Selector.tsx +355 -212
- package/src/Selector/hooks.ts +77 -50
- package/src/SideNav/SideNav.test.tsx +46 -0
- package/src/SideNav/SideNav.tsx +1 -0
- package/src/SideNav/SideNavCollapseButton.tsx +15 -10
- package/src/SideNav/SideNavHeading.tsx +48 -10
- package/src/SideNav/SideNavItem.tsx +20 -12
- package/src/Skeleton/Skeleton.tsx +0 -2
- package/src/Skeleton/index.ts +0 -2
- package/src/Slider/Slider.tsx +2 -11
- package/src/Stack/Stack.doc.mjs +110 -0
- package/src/StatusDot/StatusDot.doc.mjs +12 -3
- package/src/Switch/Switch.test.tsx +32 -0
- package/src/Switch/Switch.tsx +18 -10
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -0
- package/src/Table/Table.test.tsx +31 -0
- package/src/Table/TableRow.tsx +6 -0
- package/src/Table/index.ts +1 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
- package/src/Table/plugins/rowExpansion/index.ts +1 -4
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
- package/src/Table/tableContextMenu.test.tsx +27 -0
- package/src/Table/tableContextMenu.tsx +1 -0
- package/src/Table/types.ts +11 -0
- package/src/Table/useTableGroupedRows.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +43 -66
- package/src/TextArea/TextArea.doc.mjs +42 -2
- package/src/TextArea/TextArea.test.tsx +219 -0
- package/src/TextArea/TextArea.tsx +34 -7
- package/src/TextInput/TextInput.doc.mjs +18 -2
- package/src/TextInput/TextInput.test.tsx +189 -0
- package/src/TextInput/TextInput.tsx +25 -31
- package/src/Thumbnail/Thumbnail.tsx +2 -9
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.test.tsx +84 -3
- package/src/TimeInput/TimeInput.tsx +26 -28
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/Timestamp.test.tsx +91 -14
- package/src/Timestamp/Timestamp.tsx +14 -2
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- package/src/Timestamp/formatInstant.ts +16 -1
- package/src/Token/Token.tsx +5 -28
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +45 -3
- package/src/Tokenizer/Tokenizer.tsx +10 -2
- package/src/Tooltip/useTooltip.tsx +2 -23
- package/src/TopNav/TopNav.tsx +1 -3
- package/src/TopNav/TopNavHeading.tsx +42 -13
- package/src/TopNav/TopNavItem.tsx +3 -21
- package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
- package/src/TopNav/TopNavMegaMenu.tsx +118 -53
- package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
- package/src/TopNav/TopNavMenu.tsx +34 -37
- package/src/TreeList/TreeList.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +208 -8
- package/src/TreeList/TreeList.tsx +22 -0
- package/src/TreeList/TreeListBranches.tsx +25 -2
- package/src/TreeList/TreeListItem.tsx +89 -52
- package/src/Typeahead/BaseTypeahead.tsx +19 -6
- package/src/Typeahead/Typeahead.doc.mjs +1 -0
- package/src/Typeahead/Typeahead.test.tsx +76 -3
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -2
- package/src/VisuallyHidden/index.ts +0 -2
- package/src/hooks/containerReveal.stylex.ts +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useClipboard.doc.mjs +87 -0
- package/src/hooks/useClipboard.test.tsx +151 -0
- package/src/hooks/useClipboard.ts +135 -0
- package/src/hooks/useContainerReveal.doc.mjs +7 -7
- package/src/hooks/useContainerReveal.test.tsx +42 -62
- package/src/hooks/useContainerReveal.ts +36 -91
- package/src/hooks/useImageMode.test.ts +1 -1
- package/src/hooks/useIndicatorFocusRing.tsx +120 -0
- package/src/hooks/useInputStatusIcon.tsx +8 -8
- package/src/hooks/useLongPress.test.tsx +18 -0
- package/src/hooks/useLongPress.ts +12 -2
- package/src/hooks/useScrollLock.test.ts +72 -0
- package/src/hooks/useScrollLock.ts +51 -19
- package/src/hooks/useStreamingText.test.ts +46 -1
- package/src/hooks/useStreamingText.ts +49 -7
- package/src/hooks/useTreeFocus.test.tsx +50 -0
- package/src/hooks/useTreeFocus.ts +14 -3
- package/src/hooks/useTypeahead.test.tsx +150 -0
- package/src/hooks/useTypeahead.ts +24 -9
- package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
- package/src/index.ts +1 -0
- package/src/serverSafeComponents.test.ts +665 -0
- package/src/theme/defineTheme.ts +27 -0
- package/src/theme/derivedVarRegistry.test.ts +21 -1
- package/src/theme/derivedVarRegistry.ts +19 -6
- package/src/theme/expandColorScale.test.ts +14 -0
- package/src/theme/expandColorScale.ts +24 -9
- package/src/theme/expandTypeScale.test.ts +43 -0
- package/src/theme/expandTypeScale.ts +17 -0
- package/src/theme/generateThemeRules.test.ts +78 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +15 -0
- package/src/theme/tokens.stylex.ts +18 -0
- package/src/theme/tokens.test.ts +37 -0
- package/src/utils/focusOutline.stylex.ts +177 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/interactionModality.ts +74 -0
- package/src/utils/mergeRefs.test.ts +48 -0
- package/src/utils/mergeRefs.ts +12 -6
- package/src/utils/rtlStyles.ts +2 -2
- package/src/utils/themeProps.ts +26 -4
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
- package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
- package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
- package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
- package/dist/RadioList/radio.markers.stylex.js +0 -12
- package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
- package/dist/hooks/containerReveal.pool.stylex.js +0 -292
- package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
- package/src/RadioList/radio.markers.stylex.ts +0 -10
- package/src/hooks/containerReveal.pool.stylex.ts +0 -571
|
@@ -1509,6 +1509,29 @@ describe('MultiSelector statusVariant forwarding', () => {
|
|
|
1509
1509
|
});
|
|
1510
1510
|
});
|
|
1511
1511
|
|
|
1512
|
+
describe('MultiSelector empty-state theme target', () => {
|
|
1513
|
+
const OPTIONS = ['Apple', 'Banana', 'Cherry'];
|
|
1514
|
+
|
|
1515
|
+
it('renders the astryx-multi-selector-empty-state target on the "No results found" element', async () => {
|
|
1516
|
+
const user = userEvent.setup();
|
|
1517
|
+
const {container} = render(
|
|
1518
|
+
<MultiSelector
|
|
1519
|
+
label="Fruit"
|
|
1520
|
+
options={OPTIONS}
|
|
1521
|
+
value={[]}
|
|
1522
|
+
onChange={() => {}}
|
|
1523
|
+
hasSearch
|
|
1524
|
+
/>,
|
|
1525
|
+
);
|
|
1526
|
+
await user.click(screen.getByRole('button', {name: 'Fruit'}));
|
|
1527
|
+
await user.type(screen.getByRole('combobox', h), 'xyz');
|
|
1528
|
+
|
|
1529
|
+
const empty = container.querySelector('.astryx-multi-selector-empty-state');
|
|
1530
|
+
expect(empty).not.toBeNull();
|
|
1531
|
+
expect(empty).toHaveTextContent('No results found');
|
|
1532
|
+
});
|
|
1533
|
+
});
|
|
1534
|
+
|
|
1512
1535
|
describe('MultiSelector clear icon theme target', () => {
|
|
1513
1536
|
const ICON_OPTIONS = ['Apple', 'Banana', 'Orange'];
|
|
1514
1537
|
|
|
@@ -1523,7 +1546,7 @@ describe('MultiSelector clear icon theme target', () => {
|
|
|
1523
1546
|
return icon as HTMLElement;
|
|
1524
1547
|
};
|
|
1525
1548
|
|
|
1526
|
-
it('renders the astryx-
|
|
1549
|
+
it('renders the astryx-input-clear-icon target (plus the legacy alias) on the clear glyph', () => {
|
|
1527
1550
|
render(
|
|
1528
1551
|
<MultiSelector
|
|
1529
1552
|
label="Fruit"
|
|
@@ -1533,11 +1556,13 @@ describe('MultiSelector clear icon theme target', () => {
|
|
|
1533
1556
|
hasClear
|
|
1534
1557
|
/>,
|
|
1535
1558
|
);
|
|
1536
|
-
// The
|
|
1537
|
-
//
|
|
1538
|
-
//
|
|
1539
|
-
//
|
|
1559
|
+
// The canonical target lands on the icon element itself (not the button),
|
|
1560
|
+
// so a theme can restyle just this glyph (color, size, hover) via
|
|
1561
|
+
// `defineTheme` — a button-level target could not reach the icon's own
|
|
1562
|
+
// color/size. The original per-component name rides along for a
|
|
1563
|
+
// deprecation window.
|
|
1540
1564
|
const icon = getClearIcon();
|
|
1565
|
+
expect(icon).toHaveClass('astryx-input-clear-icon');
|
|
1541
1566
|
expect(icon).toHaveClass('astryx-multi-selector-clear-icon');
|
|
1542
1567
|
expect(icon).toHaveClass('astryx-icon');
|
|
1543
1568
|
});
|
|
@@ -1559,11 +1584,13 @@ describe('MultiSelector clear icon theme target', () => {
|
|
|
1559
1584
|
expect(onChange).toHaveBeenCalledWith([]);
|
|
1560
1585
|
});
|
|
1561
1586
|
|
|
1562
|
-
it('
|
|
1563
|
-
//
|
|
1564
|
-
//
|
|
1565
|
-
// target
|
|
1566
|
-
//
|
|
1587
|
+
it('routes the clear glyph through the shared clear button, keeping the legacy target', () => {
|
|
1588
|
+
// The clear affordance now composes the shared InputClearButton (a ghost
|
|
1589
|
+
// Button with a secondary/sm glyph), so the icon carries the canonical
|
|
1590
|
+
// `astryx-input-clear-icon` target and — for a deprecation window — the
|
|
1591
|
+
// original `astryx-multi-selector-clear-icon`. Aside from those target
|
|
1592
|
+
// classes it matches the shared button's own `close`/`sm`/`secondary`
|
|
1593
|
+
// glyph exactly, so the default look is defined in one place.
|
|
1567
1594
|
render(
|
|
1568
1595
|
<MultiSelector
|
|
1569
1596
|
label="Fruit"
|
|
@@ -1574,6 +1601,8 @@ describe('MultiSelector clear icon theme target', () => {
|
|
|
1574
1601
|
/>,
|
|
1575
1602
|
);
|
|
1576
1603
|
const icon = getClearIcon();
|
|
1604
|
+
expect(icon).toHaveClass('astryx-input-clear-icon');
|
|
1605
|
+
expect(icon).toHaveClass('astryx-multi-selector-clear-icon');
|
|
1577
1606
|
|
|
1578
1607
|
const {container: refContainer} = render(
|
|
1579
1608
|
<Icon icon="close" size="sm" color="secondary" />,
|
|
@@ -1583,7 +1612,11 @@ describe('MultiSelector clear icon theme target', () => {
|
|
|
1583
1612
|
const styleClasses = (el: HTMLElement) =>
|
|
1584
1613
|
el.className
|
|
1585
1614
|
.split(' ')
|
|
1586
|
-
.filter(
|
|
1615
|
+
.filter(
|
|
1616
|
+
c =>
|
|
1617
|
+
c !== 'astryx-input-clear-icon' &&
|
|
1618
|
+
c !== 'astryx-multi-selector-clear-icon',
|
|
1619
|
+
)
|
|
1587
1620
|
.sort();
|
|
1588
1621
|
|
|
1589
1622
|
expect(styleClasses(icon)).toEqual(styleClasses(refIcon));
|
|
@@ -1671,9 +1704,12 @@ describe('MultiSelector indicator (chevron) icon theme target', () => {
|
|
|
1671
1704
|
});
|
|
1672
1705
|
});
|
|
1673
1706
|
|
|
1674
|
-
it('renders the default icon (
|
|
1707
|
+
it('renders the default icon (secondary color, sm size) byte-identically', () => {
|
|
1675
1708
|
// Pixel-identical default guard: the chevron glyph must carry the exact
|
|
1676
|
-
// same StyleX color/size classes as a standalone
|
|
1709
|
+
// same StyleX color/size classes as a standalone secondary/sm icon. The
|
|
1710
|
+
// glyph now sets --color-icon-secondary itself rather than inheriting it
|
|
1711
|
+
// from a wrapper span that set the same token, so the rendered color is
|
|
1712
|
+
// unchanged. The added
|
|
1677
1713
|
// target class + data-state are purely additive — they change nothing until
|
|
1678
1714
|
// a theme targets them.
|
|
1679
1715
|
const {container} = render(
|
|
@@ -1687,12 +1723,12 @@ describe('MultiSelector indicator (chevron) icon theme target', () => {
|
|
|
1687
1723
|
const icon = getIndicatorIcon(container);
|
|
1688
1724
|
|
|
1689
1725
|
const {container: refContainer} = render(
|
|
1690
|
-
<Icon icon="chevronDown" size="sm" color="
|
|
1726
|
+
<Icon icon="chevronDown" size="sm" color="secondary" />,
|
|
1691
1727
|
);
|
|
1692
1728
|
const refIcon = refContainer.querySelector('.astryx-icon') as HTMLElement;
|
|
1693
1729
|
|
|
1694
1730
|
// Exclude the additive theme-target classes (the stable target + its
|
|
1695
|
-
// reflected state class) so only
|
|
1731
|
+
// reflected state class) so only StyleX classes remain.
|
|
1696
1732
|
const themeTargetClasses = new Set([
|
|
1697
1733
|
'astryx-multi-selector-indicator-icon',
|
|
1698
1734
|
'collapsed',
|
|
@@ -1704,7 +1740,14 @@ describe('MultiSelector indicator (chevron) icon theme target', () => {
|
|
|
1704
1740
|
.filter(c => !themeTargetClasses.has(c))
|
|
1705
1741
|
.sort();
|
|
1706
1742
|
|
|
1707
|
-
|
|
1743
|
+
// A superset, not an exact match: the chevron additionally carries the
|
|
1744
|
+
// rotation styles, which live on the glyph precisely so a theme can reach
|
|
1745
|
+
// the transform through the same selector as the color. The guard that
|
|
1746
|
+
// matters is that every color/size class of a standalone icon is still
|
|
1747
|
+
// present — i.e. the default look has not drifted.
|
|
1748
|
+
expect(styleClasses(icon)).toEqual(
|
|
1749
|
+
expect.arrayContaining(styleClasses(refIcon)),
|
|
1750
|
+
);
|
|
1708
1751
|
});
|
|
1709
1752
|
|
|
1710
1753
|
it('exposes multi-selector-indicator-icon so a theme reaches the icon size and per-state color', () => {
|
|
@@ -1731,7 +1774,134 @@ describe('MultiSelector indicator (chevron) icon theme target', () => {
|
|
|
1731
1774
|
});
|
|
1732
1775
|
});
|
|
1733
1776
|
|
|
1777
|
+
describe('MultiSelector list structure', () => {
|
|
1778
|
+
it('does not draw a divider under select-all', async () => {
|
|
1779
|
+
const user = userEvent.setup();
|
|
1780
|
+
render(
|
|
1781
|
+
<MultiSelector
|
|
1782
|
+
label="Fruit"
|
|
1783
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
1784
|
+
value={[]}
|
|
1785
|
+
onChange={() => {}}
|
|
1786
|
+
hasSelectAll
|
|
1787
|
+
/>,
|
|
1788
|
+
);
|
|
1789
|
+
await user.click(screen.getByRole('combobox'));
|
|
1790
|
+
// Select-all is the first row of the list, not a section of its own. No
|
|
1791
|
+
// option here declares a divider and there is no search row, so the panel
|
|
1792
|
+
// should contain no rule at all.
|
|
1793
|
+
expect(document.querySelectorAll('[role="separator"]')).toHaveLength(0);
|
|
1794
|
+
const [first] = screen.getAllByRole('option', h);
|
|
1795
|
+
expect(first).toHaveTextContent('Select all');
|
|
1796
|
+
});
|
|
1797
|
+
|
|
1798
|
+
it('renders a section title as a plain heading inside the group, not a divider', async () => {
|
|
1799
|
+
const user = userEvent.setup();
|
|
1800
|
+
render(
|
|
1801
|
+
<MultiSelector
|
|
1802
|
+
label="Fruit"
|
|
1803
|
+
options={[
|
|
1804
|
+
{
|
|
1805
|
+
type: 'section',
|
|
1806
|
+
title: 'Citrus',
|
|
1807
|
+
options: [
|
|
1808
|
+
{value: 'orange', label: 'Orange'},
|
|
1809
|
+
{value: 'lemon', label: 'Lemon'},
|
|
1810
|
+
],
|
|
1811
|
+
},
|
|
1812
|
+
]}
|
|
1813
|
+
value={[]}
|
|
1814
|
+
onChange={() => {}}
|
|
1815
|
+
/>,
|
|
1816
|
+
);
|
|
1817
|
+
await user.click(screen.getByRole('combobox'));
|
|
1818
|
+
|
|
1819
|
+
// A labeled Divider used to stand in for the heading; it rendered a
|
|
1820
|
+
// role="separator" as a direct child of the listbox and stacked a second
|
|
1821
|
+
// rule under the search row's own.
|
|
1822
|
+
expect(document.querySelectorAll('[role="separator"]')).toHaveLength(0);
|
|
1823
|
+
|
|
1824
|
+
const group = screen.getByRole('group', {name: 'Citrus', ...h});
|
|
1825
|
+
const heading = group.querySelector(
|
|
1826
|
+
'.astryx-multi-selector-section-heading',
|
|
1827
|
+
);
|
|
1828
|
+
expect(heading).toBeTruthy();
|
|
1829
|
+
expect(heading).toHaveTextContent('Citrus');
|
|
1830
|
+
// The group already carries the title as its accessible name, so the
|
|
1831
|
+
// visible heading must not announce it a second time.
|
|
1832
|
+
expect(heading).toHaveAttribute('aria-hidden', 'true');
|
|
1833
|
+
// ...and it precedes the options it heads.
|
|
1834
|
+
const [firstOption] = within(group).getAllByRole('option', h);
|
|
1835
|
+
expect(
|
|
1836
|
+
heading!.compareDocumentPosition(firstOption) &
|
|
1837
|
+
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
1838
|
+
).toBeTruthy();
|
|
1839
|
+
});
|
|
1840
|
+
});
|
|
1841
|
+
|
|
1734
1842
|
describe('MultiSelector search affordances', () => {
|
|
1843
|
+
it('renders the search row seamlessly — no nested input box, a divider under it', async () => {
|
|
1844
|
+
const user = userEvent.setup();
|
|
1845
|
+
render(
|
|
1846
|
+
<MultiSelector
|
|
1847
|
+
label="Fruit"
|
|
1848
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
1849
|
+
value={[]}
|
|
1850
|
+
onChange={() => {}}
|
|
1851
|
+
hasSearch
|
|
1852
|
+
/>,
|
|
1853
|
+
);
|
|
1854
|
+
await user.click(screen.getByRole('button', {name: 'Fruit'}));
|
|
1855
|
+
|
|
1856
|
+
const search = screen.getByRole('combobox', h);
|
|
1857
|
+
// The row is the outer gutter; the input sits inside the rounded field.
|
|
1858
|
+
const row = search.closest('.astryx-multi-selector-search');
|
|
1859
|
+
const field = search.parentElement;
|
|
1860
|
+
if (!row || !field) {
|
|
1861
|
+
throw new Error('search row not found');
|
|
1862
|
+
}
|
|
1863
|
+
// The panel is already a bordered surface: the field inside it must not be
|
|
1864
|
+
// a second bordered box (this used to render a TextInput).
|
|
1865
|
+
expect(row).not.toHaveClass('astryx-text-input');
|
|
1866
|
+
expect(search.closest('.astryx-text-input')).toBeNull();
|
|
1867
|
+
// The field is a rounded box inset from the panel edge, shaped like the
|
|
1868
|
+
// option rows under it — not a full-bleed header strip.
|
|
1869
|
+
expect(field).not.toBe(row);
|
|
1870
|
+
// ...and a divider separates it from the options.
|
|
1871
|
+
const separator = document.querySelector('[role="separator"]');
|
|
1872
|
+
if (!separator) {
|
|
1873
|
+
throw new Error('divider not found');
|
|
1874
|
+
}
|
|
1875
|
+
// Order: row, then divider, then the listbox.
|
|
1876
|
+
expect(
|
|
1877
|
+
row.compareDocumentPosition(separator) & Node.DOCUMENT_POSITION_FOLLOWING,
|
|
1878
|
+
).toBeTruthy();
|
|
1879
|
+
const listbox = screen.getByRole('listbox', h);
|
|
1880
|
+
expect(
|
|
1881
|
+
separator.compareDocumentPosition(listbox) &
|
|
1882
|
+
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
1883
|
+
).toBeTruthy();
|
|
1884
|
+
});
|
|
1885
|
+
|
|
1886
|
+
it('keeps the search row outside the scrolling option list', async () => {
|
|
1887
|
+
const user = userEvent.setup();
|
|
1888
|
+
render(
|
|
1889
|
+
<MultiSelector
|
|
1890
|
+
label="Fruit"
|
|
1891
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
1892
|
+
value={[]}
|
|
1893
|
+
onChange={() => {}}
|
|
1894
|
+
hasSearch
|
|
1895
|
+
/>,
|
|
1896
|
+
);
|
|
1897
|
+
await user.click(screen.getByRole('button', {name: 'Fruit'}));
|
|
1898
|
+
// The options scroll under the header rather than carrying it away, so the
|
|
1899
|
+
// field stays reachable in a long list.
|
|
1900
|
+
const search = screen.getByRole('combobox', h);
|
|
1901
|
+
const listbox = screen.getByRole('listbox', h);
|
|
1902
|
+
expect(listbox.contains(search)).toBe(false);
|
|
1903
|
+
});
|
|
1904
|
+
|
|
1735
1905
|
it('renders a decorative (aria-hidden) magnifier icon whenever hasSearch is on', async () => {
|
|
1736
1906
|
const user = userEvent.setup();
|
|
1737
1907
|
render(
|
|
@@ -1745,8 +1915,7 @@ describe('MultiSelector search affordances', () => {
|
|
|
1745
1915
|
);
|
|
1746
1916
|
await user.click(screen.getByRole('button', {name: 'Fruit'}));
|
|
1747
1917
|
const search = screen.getByRole('combobox', h);
|
|
1748
|
-
// The
|
|
1749
|
-
// sits inside the input container as a sibling of the <input>.
|
|
1918
|
+
// The magnifier leads the search row, as a sibling of the <input>.
|
|
1750
1919
|
const wrapper = search.parentElement;
|
|
1751
1920
|
const magnifier = wrapper?.querySelector('.astryx-icon');
|
|
1752
1921
|
expect(magnifier).toBeTruthy();
|
|
@@ -1871,3 +2040,203 @@ describe('MultiSelector search affordances', () => {
|
|
|
1871
2040
|
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
1872
2041
|
});
|
|
1873
2042
|
});
|
|
2043
|
+
|
|
2044
|
+
describe('MultiSelector disabled state theme target', () => {
|
|
2045
|
+
const getSelectorRoot = (container: HTMLElement): HTMLElement => {
|
|
2046
|
+
const root = container.querySelector('.astryx-multi-selector');
|
|
2047
|
+
if (root == null) {
|
|
2048
|
+
throw new Error('multi-selector root not found');
|
|
2049
|
+
}
|
|
2050
|
+
return root as HTMLElement;
|
|
2051
|
+
};
|
|
2052
|
+
|
|
2053
|
+
it('reflects data-state="disabled" on the root when disabled', () => {
|
|
2054
|
+
const {container} = render(
|
|
2055
|
+
<MultiSelector
|
|
2056
|
+
label="Fruit"
|
|
2057
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
2058
|
+
value={[]}
|
|
2059
|
+
onChange={() => {}}
|
|
2060
|
+
isDisabled
|
|
2061
|
+
/>,
|
|
2062
|
+
);
|
|
2063
|
+
expect(getSelectorRoot(container)).toHaveAttribute(
|
|
2064
|
+
'data-disabled',
|
|
2065
|
+
'disabled',
|
|
2066
|
+
);
|
|
2067
|
+
});
|
|
2068
|
+
|
|
2069
|
+
it('omits the disabled class/attribute when enabled', () => {
|
|
2070
|
+
const {container} = render(
|
|
2071
|
+
<MultiSelector
|
|
2072
|
+
label="Fruit"
|
|
2073
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
2074
|
+
value={[]}
|
|
2075
|
+
onChange={() => {}}
|
|
2076
|
+
/>,
|
|
2077
|
+
);
|
|
2078
|
+
const root = getSelectorRoot(container);
|
|
2079
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
2080
|
+
expect(root).not.toHaveClass('disabled');
|
|
2081
|
+
});
|
|
2082
|
+
|
|
2083
|
+
it('exposes the disabled state so a theme can key on it', () => {
|
|
2084
|
+
const theme = defineTheme({
|
|
2085
|
+
name: 'multi-selector-disabled-state-test',
|
|
2086
|
+
components: {
|
|
2087
|
+
'multi-selector': {
|
|
2088
|
+
'disabled:disabled': {opacity: '0.4'},
|
|
2089
|
+
},
|
|
2090
|
+
},
|
|
2091
|
+
});
|
|
2092
|
+
const css = generateThemeTestCSS(theme);
|
|
2093
|
+
expect(css).toContain('.astryx-multi-selector.disabled');
|
|
2094
|
+
expect(css).toContain('opacity: 0.4');
|
|
2095
|
+
});
|
|
2096
|
+
});
|
|
2097
|
+
|
|
2098
|
+
describe('MultiSelector dropdown option theme target', () => {
|
|
2099
|
+
const ROW_OPTIONS = ['Apple', 'Banana', 'Orange'];
|
|
2100
|
+
|
|
2101
|
+
it('renders astryx-multi-selector-option, with its size, on every dropdown row', async () => {
|
|
2102
|
+
const user = userEvent.setup();
|
|
2103
|
+
render(
|
|
2104
|
+
<MultiSelector
|
|
2105
|
+
label="Fruit"
|
|
2106
|
+
options={ROW_OPTIONS}
|
|
2107
|
+
value={[]}
|
|
2108
|
+
onChange={() => {}}
|
|
2109
|
+
size="lg"
|
|
2110
|
+
/>,
|
|
2111
|
+
);
|
|
2112
|
+
await user.click(screen.getByRole('combobox'));
|
|
2113
|
+
const options = screen.getAllByRole('option', h);
|
|
2114
|
+
expect(options).toHaveLength(3);
|
|
2115
|
+
for (const option of options) {
|
|
2116
|
+
expect(option).toHaveClass('astryx-multi-selector-option');
|
|
2117
|
+
expect(option).toHaveClass('lg');
|
|
2118
|
+
expect(option).toHaveAttribute('data-size', 'lg');
|
|
2119
|
+
}
|
|
2120
|
+
});
|
|
2121
|
+
|
|
2122
|
+
it('carries the selected and disabled states a theme keys on', async () => {
|
|
2123
|
+
const user = userEvent.setup();
|
|
2124
|
+
render(
|
|
2125
|
+
<MultiSelector
|
|
2126
|
+
label="Fruit"
|
|
2127
|
+
options={[
|
|
2128
|
+
{value: 'apple', label: 'Apple'},
|
|
2129
|
+
{value: 'banana', label: 'Banana'},
|
|
2130
|
+
{value: 'orange', label: 'Orange', disabled: true},
|
|
2131
|
+
]}
|
|
2132
|
+
value={['apple']}
|
|
2133
|
+
onChange={() => {}}
|
|
2134
|
+
/>,
|
|
2135
|
+
);
|
|
2136
|
+
await user.click(screen.getByRole('combobox'));
|
|
2137
|
+
const [selected, plain, disabled] = screen.getAllByRole('option', h);
|
|
2138
|
+
|
|
2139
|
+
expect(selected).toHaveClass('selected');
|
|
2140
|
+
expect(selected).toHaveAttribute('data-selected', 'selected');
|
|
2141
|
+
expect(plain).not.toHaveClass('selected');
|
|
2142
|
+
expect(plain).not.toHaveAttribute('data-selected');
|
|
2143
|
+
|
|
2144
|
+
expect(disabled).toHaveClass('disabled');
|
|
2145
|
+
expect(disabled).toHaveAttribute('data-disabled', 'disabled');
|
|
2146
|
+
expect(plain).not.toHaveAttribute('data-disabled');
|
|
2147
|
+
});
|
|
2148
|
+
|
|
2149
|
+
it('marks the Select All row with the select-all state, not a separate target', async () => {
|
|
2150
|
+
const user = userEvent.setup();
|
|
2151
|
+
render(
|
|
2152
|
+
<MultiSelector
|
|
2153
|
+
label="Fruit"
|
|
2154
|
+
options={ROW_OPTIONS}
|
|
2155
|
+
value={[]}
|
|
2156
|
+
onChange={() => {}}
|
|
2157
|
+
hasSelectAll
|
|
2158
|
+
/>,
|
|
2159
|
+
);
|
|
2160
|
+
await user.click(screen.getByRole('combobox'));
|
|
2161
|
+
|
|
2162
|
+
const [selectAllRow, ...regularRows] = screen.getAllByRole('option', h);
|
|
2163
|
+
expect(selectAllRow).toHaveTextContent('Select all');
|
|
2164
|
+
expect(selectAllRow).toHaveClass('astryx-multi-selector-option');
|
|
2165
|
+
expect(selectAllRow).toHaveClass('select-all');
|
|
2166
|
+
expect(selectAllRow).toHaveAttribute('data-select-all', 'select-all');
|
|
2167
|
+
|
|
2168
|
+
for (const row of regularRows) {
|
|
2169
|
+
expect(row).toHaveClass('astryx-multi-selector-option');
|
|
2170
|
+
expect(row).not.toHaveClass('select-all');
|
|
2171
|
+
expect(row).not.toHaveAttribute('data-select-all');
|
|
2172
|
+
}
|
|
2173
|
+
});
|
|
2174
|
+
|
|
2175
|
+
it('keeps the row targetable when renderOption replaces the label', async () => {
|
|
2176
|
+
const user = userEvent.setup();
|
|
2177
|
+
render(
|
|
2178
|
+
<MultiSelector
|
|
2179
|
+
label="Fruit"
|
|
2180
|
+
options={[{value: 'apple', label: 'Apple'}]}
|
|
2181
|
+
value={[]}
|
|
2182
|
+
onChange={() => {}}
|
|
2183
|
+
renderOption={option => (
|
|
2184
|
+
<span data-testid="custom-row">{option.label}</span>
|
|
2185
|
+
)}
|
|
2186
|
+
/>,
|
|
2187
|
+
);
|
|
2188
|
+
await user.click(screen.getByRole('combobox'));
|
|
2189
|
+
const option = screen.getAllByRole('option', h)[0];
|
|
2190
|
+
// The row owns the typography, so custom content inherits the same
|
|
2191
|
+
// treatment the fallback label gets — and one row override reaches both.
|
|
2192
|
+
expect(option).toHaveClass('astryx-multi-selector-option');
|
|
2193
|
+
expect(within(option).getByTestId('custom-row')).toHaveTextContent('Apple');
|
|
2194
|
+
});
|
|
2195
|
+
|
|
2196
|
+
it('exposes the row target, its states and its size to defineTheme', () => {
|
|
2197
|
+
const theme = defineTheme({
|
|
2198
|
+
name: 'multi-selector-option-target-test',
|
|
2199
|
+
components: {
|
|
2200
|
+
'multi-selector-option': {
|
|
2201
|
+
base: {borderRadius: '8px', fontWeight: '600'},
|
|
2202
|
+
selected: {backgroundColor: 'var(--color-background-muted)'},
|
|
2203
|
+
'select-all': {fontWeight: '700'},
|
|
2204
|
+
'size:lg': {borderRadius: '12px'},
|
|
2205
|
+
},
|
|
2206
|
+
},
|
|
2207
|
+
});
|
|
2208
|
+
const css = generateThemeTestCSS(theme);
|
|
2209
|
+
expect(css).toContain('.astryx-multi-selector-option {');
|
|
2210
|
+
expect(css).toContain('.astryx-multi-selector-option.selected');
|
|
2211
|
+
expect(css).toContain('.astryx-multi-selector-option.select-all');
|
|
2212
|
+
expect(css).toContain('.astryx-multi-selector-option.lg');
|
|
2213
|
+
});
|
|
2214
|
+
});
|
|
2215
|
+
|
|
2216
|
+
describe('MultiSelector popup theme target', () => {
|
|
2217
|
+
it('puts astryx-multi-selector-popup on the surface that paints, not the list inside it', async () => {
|
|
2218
|
+
const user = userEvent.setup();
|
|
2219
|
+
render(
|
|
2220
|
+
<MultiSelector
|
|
2221
|
+
label="Fruit"
|
|
2222
|
+
options={['Apple', 'Banana']}
|
|
2223
|
+
value={[]}
|
|
2224
|
+
onChange={() => {}}
|
|
2225
|
+
/>,
|
|
2226
|
+
);
|
|
2227
|
+
await user.click(screen.getByRole('combobox', {name: /Fruit/}));
|
|
2228
|
+
|
|
2229
|
+
const popup = document.querySelector(
|
|
2230
|
+
'.astryx-multi-selector-popup',
|
|
2231
|
+
) as HTMLElement;
|
|
2232
|
+
expect(popup).not.toBeNull();
|
|
2233
|
+
expect(popup).toHaveClass('astryx-popover-surface');
|
|
2234
|
+
// The scrolling list is a descendant, not the target itself.
|
|
2235
|
+
expect(popup.querySelector('[role="listbox"]')).not.toBeNull();
|
|
2236
|
+
expect(popup.getAttribute('role')).toBeNull();
|
|
2237
|
+
|
|
2238
|
+
const layer = document.querySelector('[popover]') as HTMLElement;
|
|
2239
|
+
expect(popup).not.toBe(layer);
|
|
2240
|
+
expect(layer.contains(popup)).toBe(true);
|
|
2241
|
+
});
|
|
2242
|
+
});
|