@astryxdesign/core 0.3.0 → 0.4.0-canary.3112e99
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 +9 -0
- 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/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -17
- 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/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- 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/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/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/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- 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 +119 -95
- 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/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 +222 -111
- 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/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/astryx.css +84 -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/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 +11 -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 -0
- 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/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +33 -11
- 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/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- 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/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 +29 -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/FileInput/FileInput.tsx +21 -8
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- 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 +16 -1
- package/src/MultiSelector/MultiSelector.test.tsx +259 -16
- package/src/MultiSelector/MultiSelector.tsx +144 -121
- 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/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +15 -4
- package/src/Selector/Selector.test.tsx +1234 -98
- package/src/Selector/Selector.tsx +254 -126
- 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/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/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/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/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', () => {
|
|
@@ -1871,3 +1914,203 @@ describe('MultiSelector search affordances', () => {
|
|
|
1871
1914
|
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
1872
1915
|
});
|
|
1873
1916
|
});
|
|
1917
|
+
|
|
1918
|
+
describe('MultiSelector disabled state theme target', () => {
|
|
1919
|
+
const getSelectorRoot = (container: HTMLElement): HTMLElement => {
|
|
1920
|
+
const root = container.querySelector('.astryx-multi-selector');
|
|
1921
|
+
if (root == null) {
|
|
1922
|
+
throw new Error('multi-selector root not found');
|
|
1923
|
+
}
|
|
1924
|
+
return root as HTMLElement;
|
|
1925
|
+
};
|
|
1926
|
+
|
|
1927
|
+
it('reflects data-state="disabled" on the root when disabled', () => {
|
|
1928
|
+
const {container} = render(
|
|
1929
|
+
<MultiSelector
|
|
1930
|
+
label="Fruit"
|
|
1931
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
1932
|
+
value={[]}
|
|
1933
|
+
onChange={() => {}}
|
|
1934
|
+
isDisabled
|
|
1935
|
+
/>,
|
|
1936
|
+
);
|
|
1937
|
+
expect(getSelectorRoot(container)).toHaveAttribute(
|
|
1938
|
+
'data-disabled',
|
|
1939
|
+
'disabled',
|
|
1940
|
+
);
|
|
1941
|
+
});
|
|
1942
|
+
|
|
1943
|
+
it('omits the disabled class/attribute when enabled', () => {
|
|
1944
|
+
const {container} = render(
|
|
1945
|
+
<MultiSelector
|
|
1946
|
+
label="Fruit"
|
|
1947
|
+
options={['Apple', 'Banana', 'Orange']}
|
|
1948
|
+
value={[]}
|
|
1949
|
+
onChange={() => {}}
|
|
1950
|
+
/>,
|
|
1951
|
+
);
|
|
1952
|
+
const root = getSelectorRoot(container);
|
|
1953
|
+
expect(root).not.toHaveAttribute('data-disabled');
|
|
1954
|
+
expect(root).not.toHaveClass('disabled');
|
|
1955
|
+
});
|
|
1956
|
+
|
|
1957
|
+
it('exposes the disabled state so a theme can key on it', () => {
|
|
1958
|
+
const theme = defineTheme({
|
|
1959
|
+
name: 'multi-selector-disabled-state-test',
|
|
1960
|
+
components: {
|
|
1961
|
+
'multi-selector': {
|
|
1962
|
+
'disabled:disabled': {opacity: '0.4'},
|
|
1963
|
+
},
|
|
1964
|
+
},
|
|
1965
|
+
});
|
|
1966
|
+
const css = generateThemeTestCSS(theme);
|
|
1967
|
+
expect(css).toContain('.astryx-multi-selector.disabled');
|
|
1968
|
+
expect(css).toContain('opacity: 0.4');
|
|
1969
|
+
});
|
|
1970
|
+
});
|
|
1971
|
+
|
|
1972
|
+
describe('MultiSelector dropdown option theme target', () => {
|
|
1973
|
+
const ROW_OPTIONS = ['Apple', 'Banana', 'Orange'];
|
|
1974
|
+
|
|
1975
|
+
it('renders astryx-multi-selector-option, with its size, on every dropdown row', async () => {
|
|
1976
|
+
const user = userEvent.setup();
|
|
1977
|
+
render(
|
|
1978
|
+
<MultiSelector
|
|
1979
|
+
label="Fruit"
|
|
1980
|
+
options={ROW_OPTIONS}
|
|
1981
|
+
value={[]}
|
|
1982
|
+
onChange={() => {}}
|
|
1983
|
+
size="lg"
|
|
1984
|
+
/>,
|
|
1985
|
+
);
|
|
1986
|
+
await user.click(screen.getByRole('combobox'));
|
|
1987
|
+
const options = screen.getAllByRole('option', h);
|
|
1988
|
+
expect(options).toHaveLength(3);
|
|
1989
|
+
for (const option of options) {
|
|
1990
|
+
expect(option).toHaveClass('astryx-multi-selector-option');
|
|
1991
|
+
expect(option).toHaveClass('lg');
|
|
1992
|
+
expect(option).toHaveAttribute('data-size', 'lg');
|
|
1993
|
+
}
|
|
1994
|
+
});
|
|
1995
|
+
|
|
1996
|
+
it('carries the selected and disabled states a theme keys on', async () => {
|
|
1997
|
+
const user = userEvent.setup();
|
|
1998
|
+
render(
|
|
1999
|
+
<MultiSelector
|
|
2000
|
+
label="Fruit"
|
|
2001
|
+
options={[
|
|
2002
|
+
{value: 'apple', label: 'Apple'},
|
|
2003
|
+
{value: 'banana', label: 'Banana'},
|
|
2004
|
+
{value: 'orange', label: 'Orange', disabled: true},
|
|
2005
|
+
]}
|
|
2006
|
+
value={['apple']}
|
|
2007
|
+
onChange={() => {}}
|
|
2008
|
+
/>,
|
|
2009
|
+
);
|
|
2010
|
+
await user.click(screen.getByRole('combobox'));
|
|
2011
|
+
const [selected, plain, disabled] = screen.getAllByRole('option', h);
|
|
2012
|
+
|
|
2013
|
+
expect(selected).toHaveClass('selected');
|
|
2014
|
+
expect(selected).toHaveAttribute('data-selected', 'selected');
|
|
2015
|
+
expect(plain).not.toHaveClass('selected');
|
|
2016
|
+
expect(plain).not.toHaveAttribute('data-selected');
|
|
2017
|
+
|
|
2018
|
+
expect(disabled).toHaveClass('disabled');
|
|
2019
|
+
expect(disabled).toHaveAttribute('data-disabled', 'disabled');
|
|
2020
|
+
expect(plain).not.toHaveAttribute('data-disabled');
|
|
2021
|
+
});
|
|
2022
|
+
|
|
2023
|
+
it('marks the Select All row with the select-all state, not a separate target', async () => {
|
|
2024
|
+
const user = userEvent.setup();
|
|
2025
|
+
render(
|
|
2026
|
+
<MultiSelector
|
|
2027
|
+
label="Fruit"
|
|
2028
|
+
options={ROW_OPTIONS}
|
|
2029
|
+
value={[]}
|
|
2030
|
+
onChange={() => {}}
|
|
2031
|
+
hasSelectAll
|
|
2032
|
+
/>,
|
|
2033
|
+
);
|
|
2034
|
+
await user.click(screen.getByRole('combobox'));
|
|
2035
|
+
|
|
2036
|
+
const [selectAllRow, ...regularRows] = screen.getAllByRole('option', h);
|
|
2037
|
+
expect(selectAllRow).toHaveTextContent('Select all');
|
|
2038
|
+
expect(selectAllRow).toHaveClass('astryx-multi-selector-option');
|
|
2039
|
+
expect(selectAllRow).toHaveClass('select-all');
|
|
2040
|
+
expect(selectAllRow).toHaveAttribute('data-select-all', 'select-all');
|
|
2041
|
+
|
|
2042
|
+
for (const row of regularRows) {
|
|
2043
|
+
expect(row).toHaveClass('astryx-multi-selector-option');
|
|
2044
|
+
expect(row).not.toHaveClass('select-all');
|
|
2045
|
+
expect(row).not.toHaveAttribute('data-select-all');
|
|
2046
|
+
}
|
|
2047
|
+
});
|
|
2048
|
+
|
|
2049
|
+
it('keeps the row targetable when renderOption replaces the label', async () => {
|
|
2050
|
+
const user = userEvent.setup();
|
|
2051
|
+
render(
|
|
2052
|
+
<MultiSelector
|
|
2053
|
+
label="Fruit"
|
|
2054
|
+
options={[{value: 'apple', label: 'Apple'}]}
|
|
2055
|
+
value={[]}
|
|
2056
|
+
onChange={() => {}}
|
|
2057
|
+
renderOption={option => (
|
|
2058
|
+
<span data-testid="custom-row">{option.label}</span>
|
|
2059
|
+
)}
|
|
2060
|
+
/>,
|
|
2061
|
+
);
|
|
2062
|
+
await user.click(screen.getByRole('combobox'));
|
|
2063
|
+
const option = screen.getAllByRole('option', h)[0];
|
|
2064
|
+
// The row owns the typography, so custom content inherits the same
|
|
2065
|
+
// treatment the fallback label gets — and one row override reaches both.
|
|
2066
|
+
expect(option).toHaveClass('astryx-multi-selector-option');
|
|
2067
|
+
expect(within(option).getByTestId('custom-row')).toHaveTextContent('Apple');
|
|
2068
|
+
});
|
|
2069
|
+
|
|
2070
|
+
it('exposes the row target, its states and its size to defineTheme', () => {
|
|
2071
|
+
const theme = defineTheme({
|
|
2072
|
+
name: 'multi-selector-option-target-test',
|
|
2073
|
+
components: {
|
|
2074
|
+
'multi-selector-option': {
|
|
2075
|
+
base: {borderRadius: '8px', fontWeight: '600'},
|
|
2076
|
+
selected: {backgroundColor: 'var(--color-background-muted)'},
|
|
2077
|
+
'select-all': {fontWeight: '700'},
|
|
2078
|
+
'size:lg': {borderRadius: '12px'},
|
|
2079
|
+
},
|
|
2080
|
+
},
|
|
2081
|
+
});
|
|
2082
|
+
const css = generateThemeTestCSS(theme);
|
|
2083
|
+
expect(css).toContain('.astryx-multi-selector-option {');
|
|
2084
|
+
expect(css).toContain('.astryx-multi-selector-option.selected');
|
|
2085
|
+
expect(css).toContain('.astryx-multi-selector-option.select-all');
|
|
2086
|
+
expect(css).toContain('.astryx-multi-selector-option.lg');
|
|
2087
|
+
});
|
|
2088
|
+
});
|
|
2089
|
+
|
|
2090
|
+
describe('MultiSelector popup theme target', () => {
|
|
2091
|
+
it('puts astryx-multi-selector-popup on the surface that paints, not the list inside it', async () => {
|
|
2092
|
+
const user = userEvent.setup();
|
|
2093
|
+
render(
|
|
2094
|
+
<MultiSelector
|
|
2095
|
+
label="Fruit"
|
|
2096
|
+
options={['Apple', 'Banana']}
|
|
2097
|
+
value={[]}
|
|
2098
|
+
onChange={() => {}}
|
|
2099
|
+
/>,
|
|
2100
|
+
);
|
|
2101
|
+
await user.click(screen.getByRole('combobox', {name: /Fruit/}));
|
|
2102
|
+
|
|
2103
|
+
const popup = document.querySelector(
|
|
2104
|
+
'.astryx-multi-selector-popup',
|
|
2105
|
+
) as HTMLElement;
|
|
2106
|
+
expect(popup).not.toBeNull();
|
|
2107
|
+
expect(popup).toHaveClass('astryx-popover-surface');
|
|
2108
|
+
// The scrolling list is a descendant, not the target itself.
|
|
2109
|
+
expect(popup.querySelector('[role="listbox"]')).not.toBeNull();
|
|
2110
|
+
expect(popup.getAttribute('role')).toBeNull();
|
|
2111
|
+
|
|
2112
|
+
const layer = document.querySelector('[popover]') as HTMLElement;
|
|
2113
|
+
expect(popup).not.toBe(layer);
|
|
2114
|
+
expect(layer.contains(popup)).toBe(true);
|
|
2115
|
+
});
|
|
2116
|
+
});
|