@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
|
@@ -34,6 +34,7 @@ import {Icon, renderIconSlot, type IconType} from '../Icon';
|
|
|
34
34
|
import type {IconName} from '../Icon';
|
|
35
35
|
import {
|
|
36
36
|
Field,
|
|
37
|
+
InputClearButton,
|
|
37
38
|
inputStatusBorderStyles,
|
|
38
39
|
inputStatusHoverShadowStyles,
|
|
39
40
|
inputWrapperStyles,
|
|
@@ -43,6 +44,7 @@ import {Divider} from '../Divider';
|
|
|
43
44
|
import {Spinner} from '../Spinner';
|
|
44
45
|
import {TextInput} from '../TextInput';
|
|
45
46
|
import {CheckboxInput} from '../CheckboxInput';
|
|
47
|
+
import type {IndicatorPosition} from '../Indicator';
|
|
46
48
|
import {Badge} from '../Badge';
|
|
47
49
|
import {
|
|
48
50
|
colorVars,
|
|
@@ -75,6 +77,8 @@ import type {BaseProps} from '../BaseProps';
|
|
|
75
77
|
import type {SizeValue} from '../utils/types';
|
|
76
78
|
import {useSize} from '../SizeContext/SizeContext';
|
|
77
79
|
import {themeProps} from '../utils/themeProps';
|
|
80
|
+
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
81
|
+
import {stableClassName} from '../naming';
|
|
78
82
|
import {groupStyles} from '../InputGroup/groupStyles';
|
|
79
83
|
import {useInputGroup} from '../InputGroup/InputGroupContext';
|
|
80
84
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
@@ -158,25 +162,27 @@ const styles = stylex.create({
|
|
|
158
162
|
color: colorVars['--color-text-secondary'],
|
|
159
163
|
fontWeight: fontWeightVars['--font-weight-medium'],
|
|
160
164
|
},
|
|
165
|
+
// Only what Icon does not already provide: `size="sm"` gives the 16px box
|
|
166
|
+
// and `color` the token, but the glyph still must not shrink inside the flex
|
|
167
|
+
// trigger.
|
|
161
168
|
triggerIcon: {
|
|
162
169
|
flexShrink: 0,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
170
|
+
},
|
|
171
|
+
// Rotation lives on the chevron glyph itself (passed through `xstyle`), not
|
|
172
|
+
// on the layout wrapper above, so the icon's `multi-selector-indicator-icon`
|
|
173
|
+
// theme target and the open/closed transform sit on one element — a theme can
|
|
174
|
+
// restyle the mark and its rotation through a single selector. The wrapper
|
|
175
|
+
// keeps only layout. The status branch renders a different icon, so it never
|
|
176
|
+
// picks these up and needs no transition opt-out.
|
|
177
|
+
triggerIconRotation: {
|
|
168
178
|
transitionProperty: 'transform',
|
|
169
179
|
transitionDuration: durationVars['--duration-fast'],
|
|
170
180
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
171
181
|
transformOrigin: 'center',
|
|
172
|
-
color: colorVars['--color-icon-secondary'],
|
|
173
182
|
},
|
|
174
183
|
triggerIconOpen: {
|
|
175
184
|
transform: 'rotate(180deg)',
|
|
176
185
|
},
|
|
177
|
-
triggerIconStatus: {
|
|
178
|
-
transition: 'none',
|
|
179
|
-
},
|
|
180
186
|
triggerGhost: {
|
|
181
187
|
width: 'auto',
|
|
182
188
|
borderWidth: 0,
|
|
@@ -196,14 +202,6 @@ const styles = stylex.create({
|
|
|
196
202
|
':focus-within': 'none',
|
|
197
203
|
},
|
|
198
204
|
fontWeight: fontWeightVars['--font-weight-medium'],
|
|
199
|
-
outline: {
|
|
200
|
-
default: 'none',
|
|
201
|
-
':has(:focus-visible)': `2px solid ${colorVars['--color-accent']}`,
|
|
202
|
-
},
|
|
203
|
-
outlineOffset: {
|
|
204
|
-
default: '0',
|
|
205
|
-
':has(:focus-visible)': '3px',
|
|
206
|
-
},
|
|
207
205
|
transitionProperty:
|
|
208
206
|
'background-image, background-color, color, opacity, transform',
|
|
209
207
|
transform: {
|
|
@@ -220,23 +218,6 @@ const styles = stylex.create({
|
|
|
220
218
|
},
|
|
221
219
|
|
|
222
220
|
// Clear button
|
|
223
|
-
clearButton: {
|
|
224
|
-
display: 'flex',
|
|
225
|
-
alignItems: 'center',
|
|
226
|
-
justifyContent: 'center',
|
|
227
|
-
padding: 0,
|
|
228
|
-
margin: 0,
|
|
229
|
-
borderWidth: 0,
|
|
230
|
-
borderStyle: 'none',
|
|
231
|
-
backgroundColor: 'transparent',
|
|
232
|
-
cursor: 'pointer',
|
|
233
|
-
borderRadius: radiusVars['--radius-element'],
|
|
234
|
-
outline: {
|
|
235
|
-
default: 'none',
|
|
236
|
-
':focus-visible': `${borderVars['--border-width']} solid ${colorVars['--color-accent']}`,
|
|
237
|
-
},
|
|
238
|
-
outlineOffset: 1,
|
|
239
|
-
},
|
|
240
221
|
statusButton: {
|
|
241
222
|
display: 'flex',
|
|
242
223
|
alignItems: 'center',
|
|
@@ -249,11 +230,6 @@ const styles = stylex.create({
|
|
|
249
230
|
color: 'inherit',
|
|
250
231
|
cursor: 'pointer',
|
|
251
232
|
borderRadius: radiusVars['--radius-element'],
|
|
252
|
-
outline: {
|
|
253
|
-
default: 'none',
|
|
254
|
-
':focus-visible': `${borderVars['--border-width']} solid ${colorVars['--color-accent']}`,
|
|
255
|
-
},
|
|
256
|
-
outlineOffset: 1,
|
|
257
233
|
},
|
|
258
234
|
|
|
259
235
|
// Dropdown container
|
|
@@ -267,7 +243,6 @@ const styles = stylex.create({
|
|
|
267
243
|
// Popover container (for anchor positioning)
|
|
268
244
|
popover: {
|
|
269
245
|
minWidth: 'anchor-size(width)',
|
|
270
|
-
marginBlockStart: spacingVars['--spacing-1'],
|
|
271
246
|
},
|
|
272
247
|
|
|
273
248
|
// Search field. The inner TextInput owns the border, focus ring, magnifier
|
|
@@ -307,6 +282,14 @@ const styles = stylex.create({
|
|
|
307
282
|
width: '100%',
|
|
308
283
|
borderRadius: radiusVars['--radius-element'],
|
|
309
284
|
cursor: 'pointer',
|
|
285
|
+
// Row typography lives here, not on the label span, so a theme override on
|
|
286
|
+
// the row target reaches both the fallback label and renderOption output
|
|
287
|
+
// (a declaration on the span would win over the inherited row value).
|
|
288
|
+
// Matches Selector, whose option row owns its typography the same way.
|
|
289
|
+
fontFamily: typographyVars['--font-family-body'],
|
|
290
|
+
fontSize: typeScaleVars['--text-label-size'],
|
|
291
|
+
fontWeight: fontWeightVars['--font-weight-medium'],
|
|
292
|
+
color: colorVars['--color-text-primary'],
|
|
310
293
|
backgroundColor: 'transparent',
|
|
311
294
|
border: 'none',
|
|
312
295
|
outline: 'none',
|
|
@@ -316,6 +299,7 @@ const styles = stylex.create({
|
|
|
316
299
|
},
|
|
317
300
|
itemDisabled: {
|
|
318
301
|
opacity: 0.5,
|
|
302
|
+
color: colorVars['--color-text-disabled'],
|
|
319
303
|
cursor: 'not-allowed',
|
|
320
304
|
},
|
|
321
305
|
|
|
@@ -325,21 +309,24 @@ const styles = stylex.create({
|
|
|
325
309
|
display: 'flex',
|
|
326
310
|
flexShrink: 0,
|
|
327
311
|
},
|
|
312
|
+
// Pushed to the row's far edge rather than sitting against the label, which
|
|
313
|
+
// is what an end-positioned control means here. The row is not
|
|
314
|
+
// `space-between` (a truncating label plus a trailing control is what wants
|
|
315
|
+
// the auto margin), and `renderOption` content is not wrapped in a growing
|
|
316
|
+
// span, so the margin has to live on the checkbox itself.
|
|
317
|
+
checkboxDecorativeEnd: {
|
|
318
|
+
marginInlineStart: 'auto',
|
|
319
|
+
},
|
|
328
320
|
|
|
329
|
-
// Label text for items (rendered outside checkbox for correct click
|
|
321
|
+
// Label text for items (rendered outside checkbox for correct click
|
|
322
|
+
// behavior). Typography is inherited from the row; this only handles
|
|
323
|
+
// truncation.
|
|
330
324
|
itemLabel: {
|
|
331
|
-
fontFamily: typographyVars['--font-family-body'],
|
|
332
|
-
fontSize: typeScaleVars['--text-label-size'],
|
|
333
|
-
fontWeight: fontWeightVars['--font-weight-medium'],
|
|
334
|
-
color: colorVars['--color-text-primary'],
|
|
335
325
|
minWidth: 0,
|
|
336
326
|
overflow: 'hidden',
|
|
337
327
|
textOverflow: 'ellipsis',
|
|
338
328
|
whiteSpace: 'nowrap',
|
|
339
329
|
},
|
|
340
|
-
itemLabelDisabled: {
|
|
341
|
-
color: colorVars['--color-text-disabled'],
|
|
342
|
-
},
|
|
343
330
|
|
|
344
331
|
// Empty state
|
|
345
332
|
emptyState: {
|
|
@@ -617,6 +604,13 @@ export interface MultiSelectorProps<
|
|
|
617
604
|
*/
|
|
618
605
|
renderOption?: (option: MultiSelectorOptionData) => ReactNode;
|
|
619
606
|
|
|
607
|
+
/**
|
|
608
|
+
* Which edge of the option row carries the checkbox.
|
|
609
|
+
*
|
|
610
|
+
* @default 'start'
|
|
611
|
+
*/
|
|
612
|
+
indicatorPosition?: IndicatorPosition;
|
|
613
|
+
|
|
620
614
|
/**
|
|
621
615
|
* Whether the dropdown starts open on mount.
|
|
622
616
|
* Useful for showcases and previews.
|
|
@@ -702,6 +696,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
702
696
|
triggerDisplay = 'count',
|
|
703
697
|
maxBadges = 3,
|
|
704
698
|
renderOption,
|
|
699
|
+
indicatorPosition = 'start',
|
|
705
700
|
isDefaultOpen = false,
|
|
706
701
|
'data-testid': testId,
|
|
707
702
|
htmlName,
|
|
@@ -879,6 +874,9 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
879
874
|
// The popup's own role="listbox" is the exposed semantics; the trigger
|
|
880
875
|
// keeps DOM focus, so wrapping it in a modal dialog would misrepresent it.
|
|
881
876
|
role: 'none',
|
|
877
|
+
// The theme target belongs on the SURFACE that paints the popup, which
|
|
878
|
+
// `usePopover` owns — not on the scrolling list inside it.
|
|
879
|
+
surfaceTarget: 'multi-selector-popup',
|
|
882
880
|
});
|
|
883
881
|
|
|
884
882
|
// Open dropdown on mount when isDefaultOpen is true
|
|
@@ -1244,6 +1242,24 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1244
1242
|
const isPartiallySelected =
|
|
1245
1243
|
isSelectAll && selectAllState === 'indeterminate';
|
|
1246
1244
|
|
|
1245
|
+
const checkbox = (
|
|
1246
|
+
<div
|
|
1247
|
+
inert
|
|
1248
|
+
{...stylex.props(
|
|
1249
|
+
styles.checkboxDecorative,
|
|
1250
|
+
indicatorPosition === 'end' && styles.checkboxDecorativeEnd,
|
|
1251
|
+
)}>
|
|
1252
|
+
<CheckboxInput
|
|
1253
|
+
label=""
|
|
1254
|
+
isLabelHidden
|
|
1255
|
+
value={checkboxValue}
|
|
1256
|
+
onChange={() => {}}
|
|
1257
|
+
isDisabled={item.disabled}
|
|
1258
|
+
size={size === 'lg' ? 'md' : size}
|
|
1259
|
+
/>
|
|
1260
|
+
</div>
|
|
1261
|
+
);
|
|
1262
|
+
|
|
1247
1263
|
return (
|
|
1248
1264
|
<div
|
|
1249
1265
|
key={item.value}
|
|
@@ -1264,39 +1280,40 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1264
1280
|
}
|
|
1265
1281
|
}}
|
|
1266
1282
|
onMouseEnter={() => onItemMouseEnter(item, flatIndex)}
|
|
1267
|
-
{...
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1283
|
+
{...mergeProps(
|
|
1284
|
+
// One target for every dropdown row, carrying the row's size and
|
|
1285
|
+
// runtime state so a theme can express "selected option at large"
|
|
1286
|
+
// or restyle just the Select All row (`.select-all`) without
|
|
1287
|
+
// reaching for structural selectors.
|
|
1288
|
+
themeProps('multi-selector-option', {
|
|
1289
|
+
size,
|
|
1290
|
+
'select-all': isSelectAll ? 'select-all' : null,
|
|
1291
|
+
selected: isSelected ? 'selected' : null,
|
|
1292
|
+
disabled: item.disabled ? 'disabled' : null,
|
|
1293
|
+
}),
|
|
1294
|
+
stylex.props(
|
|
1295
|
+
styles.item,
|
|
1296
|
+
isSelectAll ? selectAllSizeStyles[size] : itemSizeStyles[size],
|
|
1297
|
+
isSelectAll && styles.selectAllWrapper,
|
|
1298
|
+
isHighlighted && styles.itemHighlighted,
|
|
1299
|
+
item.disabled && styles.itemDisabled,
|
|
1300
|
+
),
|
|
1273
1301
|
)}>
|
|
1274
|
-
|
|
1275
|
-
<CheckboxInput
|
|
1276
|
-
label=""
|
|
1277
|
-
isLabelHidden
|
|
1278
|
-
value={checkboxValue}
|
|
1279
|
-
onChange={() => {}}
|
|
1280
|
-
isDisabled={item.disabled}
|
|
1281
|
-
size={size === 'lg' ? 'md' : size}
|
|
1282
|
-
/>
|
|
1283
|
-
</div>
|
|
1302
|
+
{indicatorPosition === 'start' && checkbox}
|
|
1284
1303
|
{renderOption && !isSelectAll ? (
|
|
1285
1304
|
renderOption(item)
|
|
1286
1305
|
) : (
|
|
1287
|
-
<span
|
|
1288
|
-
{...stylex.props(
|
|
1289
|
-
styles.itemLabel,
|
|
1290
|
-
item.disabled && styles.itemLabelDisabled,
|
|
1291
|
-
)}>
|
|
1306
|
+
<span {...stylex.props(styles.itemLabel)}>
|
|
1292
1307
|
{item.label ?? item.value}
|
|
1293
1308
|
</span>
|
|
1294
1309
|
)}
|
|
1310
|
+
{indicatorPosition === 'end' && checkbox}
|
|
1295
1311
|
</div>
|
|
1296
1312
|
);
|
|
1297
1313
|
},
|
|
1298
1314
|
[
|
|
1299
1315
|
renderOption,
|
|
1316
|
+
indicatorPosition,
|
|
1300
1317
|
highlightedIndex,
|
|
1301
1318
|
optimisticValue,
|
|
1302
1319
|
allEnabledSelected,
|
|
@@ -1343,7 +1360,10 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1343
1360
|
<div
|
|
1344
1361
|
key="empty"
|
|
1345
1362
|
role="presentation"
|
|
1346
|
-
{...
|
|
1363
|
+
{...mergeProps(
|
|
1364
|
+
themeProps('multi-selector-empty-state'),
|
|
1365
|
+
stylex.props(styles.emptyState),
|
|
1366
|
+
)}>
|
|
1347
1367
|
No results found
|
|
1348
1368
|
</div>,
|
|
1349
1369
|
);
|
|
@@ -1445,12 +1465,14 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1445
1465
|
variant,
|
|
1446
1466
|
size,
|
|
1447
1467
|
status: status?.type ?? null,
|
|
1468
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
1448
1469
|
}),
|
|
1449
1470
|
stylex.props(
|
|
1450
1471
|
inputWrapperStyles.base,
|
|
1451
1472
|
styles.triggerContainer,
|
|
1452
1473
|
sizeStyles[size],
|
|
1453
1474
|
variant === 'ghost' && styles.triggerGhost,
|
|
1475
|
+
variant === 'ghost' && focusOutlineStyles.focusWithin,
|
|
1454
1476
|
isDisabled && inputWrapperStyles.disabled,
|
|
1455
1477
|
variant === 'ghost' && isDisabled && styles.triggerGhostDisabled,
|
|
1456
1478
|
optimisticValue.length === 0 && styles.triggerPlaceholder,
|
|
@@ -1519,68 +1541,68 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1519
1541
|
))}
|
|
1520
1542
|
{isBusy && <Spinner size="sm" />}
|
|
1521
1543
|
{hasClear && value.length > 0 && !isDisabled && (
|
|
1522
|
-
<
|
|
1523
|
-
|
|
1544
|
+
<InputClearButton
|
|
1545
|
+
label={t('@astryx.multiSelector.clearAll', {label})}
|
|
1524
1546
|
onClick={handleClear}
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
<Icon
|
|
1528
|
-
icon="close"
|
|
1529
|
-
size="sm"
|
|
1530
|
-
color="secondary"
|
|
1531
|
-
// Stable theme target on the clear glyph itself, so a theme can
|
|
1532
|
-
// restyle just this icon (color, size, hover) via `defineTheme`.
|
|
1533
|
-
// Same-element rules in @layer astryx-theme win over the icon's
|
|
1534
|
-
// own base color/size, which a button-level target could not
|
|
1535
|
-
// reach.
|
|
1536
|
-
{...themeProps('multi-selector-clear-icon')}
|
|
1537
|
-
/>
|
|
1538
|
-
</button>
|
|
1547
|
+
iconClassName={stableClassName('multi-selector-clear-icon')}
|
|
1548
|
+
/>
|
|
1539
1549
|
)}
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
color={STATUS_ICON_COLOR_MAP[status.type]}
|
|
1559
|
-
/>
|
|
1560
|
-
</button>
|
|
1561
|
-
) : (
|
|
1550
|
+
{/*
|
|
1551
|
+
No wrapper span: Icon's own span already provides the 16px box (`sm`)
|
|
1552
|
+
and the icon color, so the status glyph and the chevron are each
|
|
1553
|
+
directly targetable instead of sharing one untargetable parent — and
|
|
1554
|
+
the two affordances stop sharing a node.
|
|
1555
|
+
*/}
|
|
1556
|
+
{showStatusIcon ? (
|
|
1557
|
+
showStatusTooltip ? (
|
|
1558
|
+
<button
|
|
1559
|
+
ref={statusTooltip.ref}
|
|
1560
|
+
type="button"
|
|
1561
|
+
aria-label={t(STATUS_BUTTON_LABEL_KEY[status.type])}
|
|
1562
|
+
aria-describedby={statusTooltip.describedBy}
|
|
1563
|
+
onClick={e => e.stopPropagation()}
|
|
1564
|
+
{...stylex.props(
|
|
1565
|
+
focusOutlineStyles.focusVisible,
|
|
1566
|
+
styles.statusButton,
|
|
1567
|
+
)}>
|
|
1562
1568
|
<Icon
|
|
1563
1569
|
icon={STATUS_ICON_MAP[status.type]}
|
|
1564
1570
|
size="sm"
|
|
1565
1571
|
color={STATUS_ICON_COLOR_MAP[status.type]}
|
|
1572
|
+
xstyle={styles.triggerIcon}
|
|
1566
1573
|
/>
|
|
1567
|
-
|
|
1574
|
+
</button>
|
|
1568
1575
|
) : (
|
|
1569
1576
|
<Icon
|
|
1570
|
-
icon=
|
|
1577
|
+
icon={STATUS_ICON_MAP[status.type]}
|
|
1571
1578
|
size="sm"
|
|
1572
|
-
color=
|
|
1573
|
-
|
|
1574
|
-
// restyle just this icon (color, size, hover) — and its
|
|
1575
|
-
// open/closed state — via `defineTheme`. Same-element rules in
|
|
1576
|
-
// @layer astryx-theme win over the icon's own base color/size,
|
|
1577
|
-
// which a button-level target could not reach.
|
|
1578
|
-
{...themeProps('multi-selector-indicator-icon', {
|
|
1579
|
-
state: popover.isOpen ? 'expanded' : 'collapsed',
|
|
1580
|
-
})}
|
|
1579
|
+
color={STATUS_ICON_COLOR_MAP[status.type]}
|
|
1580
|
+
xstyle={styles.triggerIcon}
|
|
1581
1581
|
/>
|
|
1582
|
-
)
|
|
1583
|
-
|
|
1582
|
+
)
|
|
1583
|
+
) : (
|
|
1584
|
+
<Icon
|
|
1585
|
+
icon="chevronDown"
|
|
1586
|
+
size="sm"
|
|
1587
|
+
color="secondary"
|
|
1588
|
+
// The rotation rides on the glyph, alongside the box and color
|
|
1589
|
+
// the wrapper used to provide, so one element carries the mark,
|
|
1590
|
+
// its open/closed transform, and the theme target.
|
|
1591
|
+
xstyle={[
|
|
1592
|
+
styles.triggerIcon,
|
|
1593
|
+
styles.triggerIconRotation,
|
|
1594
|
+
popover.isOpen && styles.triggerIconOpen,
|
|
1595
|
+
]}
|
|
1596
|
+
// Stable theme target on the chevron glyph itself, so a theme can
|
|
1597
|
+
// restyle just this icon (color, size, hover) — and its
|
|
1598
|
+
// open/closed state — via `defineTheme`. Same-element rules in
|
|
1599
|
+
// @layer astryx-theme win over the icon's own base color/size,
|
|
1600
|
+
// which a button-level target could not reach.
|
|
1601
|
+
{...themeProps('multi-selector-indicator-icon', {
|
|
1602
|
+
state: popover.isOpen ? 'expanded' : 'collapsed',
|
|
1603
|
+
})}
|
|
1604
|
+
/>
|
|
1605
|
+
)}
|
|
1584
1606
|
</div>
|
|
1585
1607
|
|
|
1586
1608
|
{popover.render(
|
|
@@ -1597,6 +1619,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1597
1619
|
{
|
|
1598
1620
|
placement: 'below',
|
|
1599
1621
|
alignment: 'start',
|
|
1622
|
+
offset: spacingVars['--spacing-1'],
|
|
1600
1623
|
xstyle: styles.popover,
|
|
1601
1624
|
},
|
|
1602
1625
|
)}
|