@astryxdesign/core 0.3.0 → 0.4.0-canary.058f476
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +156 -0
- package/dist/AlertDialog/AlertDialog.d.ts +10 -2
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +22 -3
- package/dist/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +40 -9
- package/dist/AspectRatio/AspectRatio.d.ts +13 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +10 -2
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/AspectRatio/index.js +1 -2
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -20
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +1 -2
- package/dist/Badge/index.d.ts.map +1 -1
- package/dist/Badge/index.js +1 -2
- package/dist/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -17
- package/dist/Blockquote/Blockquote.d.ts.map +1 -1
- package/dist/Blockquote/Blockquote.js +1 -2
- package/dist/Blockquote/index.d.ts.map +1 -1
- package/dist/Blockquote/index.js +1 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
- package/dist/Breadcrumbs/index.d.ts +2 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +1 -0
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +12 -16
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +2 -1
- package/dist/Calendar/styles.d.ts +0 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +0 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +1 -2
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +1 -2
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +1 -2
- package/dist/Center/index.d.ts.map +1 -1
- package/dist/Center/index.js +1 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +2 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -3
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +17 -17
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +36 -125
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -11
- package/dist/Code/Code.d.ts.map +1 -1
- package/dist/Code/Code.js +1 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +84 -67
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +35 -15
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -0
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +6 -3
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +32 -31
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +1 -1
- package/dist/ContextMenu/index.d.ts +2 -1
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +1 -0
- package/dist/DateInput/DateInput.d.ts +9 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +47 -33
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +55 -32
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +54 -30
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +62 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
- package/dist/DropdownMenu/index.d.ts +2 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +4 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +35 -27
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +9 -5
- package/dist/Field/InputClearButton.d.ts +16 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +15 -4
- package/dist/Field/PanelSearchInput.d.ts +81 -0
- package/dist/Field/PanelSearchInput.d.ts.map +1 -0
- package/dist/Field/PanelSearchInput.js +151 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +1 -2
- package/dist/Grid/index.d.ts.map +1 -1
- package/dist/Grid/index.js +1 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- package/dist/Icon/globalIconRegistry.d.ts +5 -4
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +5 -4
- package/dist/Indicator/CheckIndicator.d.ts +25 -0
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckIndicator.js +155 -0
- package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckboxIndicator.js +173 -0
- package/dist/Indicator/RadioIndicator.d.ts +23 -0
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
- package/dist/Indicator/RadioIndicator.js +137 -0
- package/dist/Indicator/index.d.ts +24 -0
- package/dist/Indicator/index.d.ts.map +1 -0
- package/dist/Indicator/index.js +26 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
- package/dist/Indicator/indicator.markers.stylex.js +21 -0
- package/dist/Indicator/indicatorRegistry.d.ts +71 -0
- package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
- package/dist/Indicator/indicatorRegistry.js +93 -0
- package/dist/Indicator/types.d.ts +177 -0
- package/dist/Indicator/types.d.ts.map +1 -0
- package/dist/Indicator/types.js +1 -0
- package/dist/Indicator/useIndicator.d.ts +18 -0
- package/dist/Indicator/useIndicator.d.ts.map +1 -0
- package/dist/Indicator/useIndicator.js +30 -0
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -8
- package/dist/Layer/useLayer.d.ts +14 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +25 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +80 -103
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +4 -5
- package/dist/MobileNav/MobileNav.js +8 -8
- package/dist/MoreMenu/MoreMenu.d.ts +14 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +8 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +205 -170
- package/dist/NumberInput/NumberInput.d.ts +27 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +230 -42
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +61 -63
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -8
- package/dist/Popover/usePopover.d.ts +15 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
- package/dist/ProgressBar/ProgressBar.d.ts +11 -4
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +95 -6
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +29 -84
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +2 -3
- package/dist/Section/Section.d.ts.map +1 -1
- package/dist/Section/Section.js +1 -2
- package/dist/Section/index.d.ts.map +1 -1
- package/dist/Section/index.js +1 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -11
- package/dist/Selector/Selector.d.ts +12 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +293 -183
- package/dist/Selector/hooks.d.ts +18 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +57 -40
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +29 -14
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +56 -20
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +28 -22
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -2
- package/dist/Skeleton/index.d.ts.map +1 -1
- package/dist/Skeleton/index.js +1 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +2 -6
- package/dist/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +14 -13
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -3
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +41 -19
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +8 -0
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +4 -2
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
- package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/index.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +2 -1
- package/dist/Table/types.d.ts +11 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -6
- package/dist/TextInput/TextInput.d.ts +10 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +13 -19
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +32 -26
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +14 -17
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -3
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- package/dist/Timestamp/formatInstant.d.ts +11 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +3 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -11
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +4 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -19
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +6 -5
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +54 -16
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -9
- package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +146 -60
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +83 -38
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +13 -0
- package/dist/TreeList/TreeListBranches.d.ts +1 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +14 -4
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +57 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -8
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -2
- package/dist/VisuallyHidden/index.d.ts.map +1 -1
- package/dist/VisuallyHidden/index.js +1 -2
- package/dist/astryx.css +86 -96
- package/dist/astryx.umd.js +56 -56
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.stylex.d.ts +61 -0
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.stylex.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useClipboard.d.ts +59 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +106 -0
- package/dist/hooks/useContainerReveal.d.ts +14 -8
- package/dist/hooks/useContainerReveal.d.ts.map +1 -1
- package/dist/hooks/useContainerReveal.js +28 -69
- package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
- package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
- package/dist/hooks/useIndicatorFocusRing.js +96 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +17 -4
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +12 -2
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +33 -18
- package/dist/hooks/useStreamingText.d.ts +18 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +47 -7
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +9 -3
- package/dist/hooks/useTypeahead.d.ts +3 -2
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +19 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +18 -2
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +10 -1
- package/dist/theme/derivedVarRegistry.d.ts +8 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +14 -13
- package/dist/theme/expandColorScale.d.ts +3 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +17 -7
- package/dist/theme/expandTypeScale.d.ts.map +1 -1
- package/dist/theme/expandTypeScale.js +17 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +11 -0
- package/dist/theme/index.d.ts +2 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +23 -0
- package/dist/utils/focusOutline.stylex.d.ts +122 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +143 -0
- package/dist/utils/focusReturn.d.ts +24 -0
- package/dist/utils/focusReturn.d.ts.map +1 -0
- package/dist/utils/focusReturn.js +29 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -1
- package/dist/utils/interactionModality.d.ts +34 -0
- package/dist/utils/interactionModality.d.ts.map +1 -0
- package/dist/utils/interactionModality.js +70 -0
- package/dist/utils/mergeRefs.d.ts.map +1 -1
- package/dist/utils/mergeRefs.js +7 -5
- package/dist/utils/rtlStyles.d.ts +2 -2
- package/dist/utils/rtlStyles.js +2 -2
- package/dist/utils/themeProps.d.ts +20 -1
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +8 -2
- package/locales/en.json +52 -0
- package/locales/pseudo.json +39 -0
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
- package/src/AlertDialog/AlertDialog.test.tsx +208 -1
- package/src/AlertDialog/AlertDialog.tsx +21 -3
- package/src/AppShell/AppShell.doc.mjs +14 -0
- package/src/AppShell/AppShell.test.tsx +139 -0
- package/src/AppShell/AppShell.tsx +32 -22
- package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
- package/src/AspectRatio/AspectRatio.test.tsx +30 -0
- package/src/AspectRatio/AspectRatio.tsx +13 -2
- package/src/AspectRatio/index.ts +0 -2
- package/src/Avatar/Avatar.doc.mjs +2 -13
- package/src/Avatar/Avatar.test.tsx +33 -8
- package/src/Avatar/Avatar.tsx +52 -50
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
- package/src/Badge/Badge.tsx +0 -2
- package/src/Badge/index.ts +0 -2
- package/src/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +33 -11
- package/src/Blockquote/Blockquote.tsx +0 -2
- package/src/Blockquote/index.ts +0 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.doc.mjs +2 -2
- package/src/Button/Button.tsx +22 -41
- package/src/Calendar/Calendar.tsx +2 -1
- package/src/Calendar/styles.ts +0 -8
- package/src/Card/Card.tsx +0 -2
- package/src/Card/index.ts +0 -2
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- package/src/Center/Center.tsx +0 -2
- package/src/Center/index.ts +0 -2
- package/src/Chat/Chat.doc.mjs +2 -0
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
- package/src/Chat/ChatSendButton.tsx +2 -3
- package/src/Chat/ChatToolCalls.test.tsx +35 -0
- package/src/Chat/ChatToolCalls.tsx +36 -16
- package/src/Chat/useTriggerMenu.tsx +2 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
- package/src/CheckboxInput/CheckboxInput.tsx +45 -202
- package/src/ClickableCard/ClickableCard.tsx +6 -11
- package/src/Code/Code.tsx +0 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
- package/src/CodeBlock/CodeBlock.test.tsx +91 -0
- package/src/CodeBlock/CodeBlock.tsx +57 -80
- package/src/Collapsible/Collapsible.tsx +22 -18
- package/src/CommandPalette/CommandPalette.test.tsx +83 -0
- package/src/CommandPalette/CommandPalette.tsx +5 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
- package/src/CommandPalette/CommandPaletteList.tsx +2 -2
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -28
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +41 -0
- package/src/ContextMenu/ContextMenu.tsx +3 -3
- package/src/ContextMenu/index.ts +5 -1
- package/src/DateInput/DateInput.doc.mjs +18 -3
- package/src/DateInput/DateInput.test.tsx +112 -11
- package/src/DateInput/DateInput.tsx +44 -25
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +27 -21
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
- package/src/DateTimeInput/DateTimeInput.tsx +58 -17
- package/src/Dialog/Dialog.tsx +2 -9
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
- package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
- package/src/DropdownMenu/DropdownMenu.tsx +113 -52
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
- package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
- package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
- package/src/DropdownMenu/index.ts +8 -1
- package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
- package/src/EmptyState/EmptyState.doc.mjs +4 -0
- package/src/EmptyState/EmptyState.test.tsx +62 -0
- package/src/EmptyState/EmptyState.tsx +16 -6
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/InputClearButton.test.tsx +117 -0
- package/src/Field/InputClearButton.tsx +30 -3
- package/src/Field/PanelSearchInput.tsx +271 -0
- package/src/FileInput/FileInput.tsx +21 -8
- package/src/Grid/Grid.tsx +0 -2
- package/src/Grid/index.ts +0 -2
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- package/src/Icon/globalIconRegistry.tsx +5 -4
- package/src/Indicator/CheckIndicator.tsx +174 -0
- package/src/Indicator/CheckboxIndicator.tsx +257 -0
- package/src/Indicator/Indicator.doc.mjs +344 -0
- package/src/Indicator/Indicator.test.tsx +393 -0
- package/src/Indicator/RadioIndicator.tsx +206 -0
- package/src/Indicator/index.ts +46 -0
- package/src/Indicator/indicator.markers.stylex.ts +19 -0
- package/src/Indicator/indicatorRegistry.test.tsx +106 -0
- package/src/Indicator/indicatorRegistry.ts +120 -0
- package/src/Indicator/types.ts +197 -0
- package/src/Indicator/useIndicator.ts +39 -0
- package/src/Item/Item.doc.mjs +1 -1
- package/src/Item/Item.tsx +7 -14
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +85 -0
- package/src/Layer/useLayer.tsx +39 -1
- package/src/Lightbox/Lightbox.doc.mjs +1 -1
- package/src/Lightbox/Lightbox.tsx +45 -49
- package/src/Link/Link.tsx +4 -11
- package/src/MobileNav/MobileNav.tsx +3 -3
- package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
- package/src/MoreMenu/MoreMenu.test.tsx +68 -1
- package/src/MoreMenu/MoreMenu.tsx +19 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +18 -1
- package/src/MultiSelector/MultiSelector.test.tsx +387 -18
- package/src/MultiSelector/MultiSelector.tsx +267 -220
- package/src/NumberInput/NumberInput.doc.mjs +265 -50
- package/src/NumberInput/NumberInput.test.tsx +726 -21
- package/src/NumberInput/NumberInput.tsx +353 -59
- package/src/Outline/Outline.tsx +2 -5
- package/src/Pagination/Pagination.doc.mjs +1 -1
- package/src/Pagination/Pagination.test.tsx +22 -7
- package/src/Pagination/Pagination.tsx +38 -35
- package/src/Popover/Popover.doc.mjs +2 -0
- package/src/Popover/Popover.tsx +6 -7
- package/src/Popover/usePopover.tsx +37 -4
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
- package/src/ProgressBar/ProgressBar.test.tsx +224 -1
- package/src/ProgressBar/ProgressBar.tsx +126 -30
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioListItem.tsx +31 -130
- package/src/Resizable/ResizeHandle.tsx +2 -9
- package/src/Section/Section.tsx +0 -2
- package/src/Section/index.ts +0 -2
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +17 -4
- package/src/Selector/Selector.test.tsx +1394 -100
- package/src/Selector/Selector.tsx +355 -212
- package/src/Selector/hooks.ts +77 -50
- package/src/SideNav/SideNav.test.tsx +46 -0
- package/src/SideNav/SideNav.tsx +1 -0
- package/src/SideNav/SideNavCollapseButton.tsx +15 -10
- package/src/SideNav/SideNavHeading.tsx +48 -10
- package/src/SideNav/SideNavItem.tsx +20 -12
- package/src/Skeleton/Skeleton.tsx +0 -2
- package/src/Skeleton/index.ts +0 -2
- package/src/Slider/Slider.tsx +2 -11
- package/src/Stack/Stack.doc.mjs +110 -0
- package/src/StatusDot/StatusDot.doc.mjs +12 -3
- package/src/Switch/Switch.test.tsx +32 -0
- package/src/Switch/Switch.tsx +18 -10
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -0
- package/src/Table/Table.test.tsx +31 -0
- package/src/Table/TableRow.tsx +6 -0
- package/src/Table/index.ts +1 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
- package/src/Table/plugins/rowExpansion/index.ts +1 -4
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
- package/src/Table/tableContextMenu.test.tsx +27 -0
- package/src/Table/tableContextMenu.tsx +1 -0
- package/src/Table/types.ts +11 -0
- package/src/Table/useTableGroupedRows.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +43 -66
- package/src/TextArea/TextArea.doc.mjs +42 -2
- package/src/TextArea/TextArea.test.tsx +219 -0
- package/src/TextArea/TextArea.tsx +34 -7
- package/src/TextInput/TextInput.doc.mjs +18 -2
- package/src/TextInput/TextInput.test.tsx +189 -0
- package/src/TextInput/TextInput.tsx +25 -31
- package/src/Thumbnail/Thumbnail.tsx +2 -9
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.test.tsx +84 -3
- package/src/TimeInput/TimeInput.tsx +26 -28
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/Timestamp.test.tsx +91 -14
- package/src/Timestamp/Timestamp.tsx +14 -2
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- package/src/Timestamp/formatInstant.ts +16 -1
- package/src/Token/Token.tsx +5 -28
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +45 -3
- package/src/Tokenizer/Tokenizer.tsx +10 -2
- package/src/Tooltip/useTooltip.tsx +2 -23
- package/src/TopNav/TopNav.tsx +1 -3
- package/src/TopNav/TopNavHeading.tsx +42 -13
- package/src/TopNav/TopNavItem.tsx +3 -21
- package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
- package/src/TopNav/TopNavMegaMenu.tsx +118 -53
- package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
- package/src/TopNav/TopNavMenu.tsx +34 -37
- package/src/TreeList/TreeList.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +208 -8
- package/src/TreeList/TreeList.tsx +22 -0
- package/src/TreeList/TreeListBranches.tsx +25 -2
- package/src/TreeList/TreeListItem.tsx +89 -52
- package/src/Typeahead/BaseTypeahead.tsx +19 -6
- package/src/Typeahead/Typeahead.doc.mjs +1 -0
- package/src/Typeahead/Typeahead.test.tsx +76 -3
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -2
- package/src/VisuallyHidden/index.ts +0 -2
- package/src/hooks/containerReveal.stylex.ts +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useClipboard.doc.mjs +87 -0
- package/src/hooks/useClipboard.test.tsx +151 -0
- package/src/hooks/useClipboard.ts +135 -0
- package/src/hooks/useContainerReveal.doc.mjs +7 -7
- package/src/hooks/useContainerReveal.test.tsx +42 -62
- package/src/hooks/useContainerReveal.ts +36 -91
- package/src/hooks/useImageMode.test.ts +1 -1
- package/src/hooks/useIndicatorFocusRing.tsx +120 -0
- package/src/hooks/useInputStatusIcon.tsx +8 -8
- package/src/hooks/useLongPress.test.tsx +18 -0
- package/src/hooks/useLongPress.ts +12 -2
- package/src/hooks/useScrollLock.test.ts +72 -0
- package/src/hooks/useScrollLock.ts +51 -19
- package/src/hooks/useStreamingText.test.ts +46 -1
- package/src/hooks/useStreamingText.ts +49 -7
- package/src/hooks/useTreeFocus.test.tsx +50 -0
- package/src/hooks/useTreeFocus.ts +14 -3
- package/src/hooks/useTypeahead.test.tsx +150 -0
- package/src/hooks/useTypeahead.ts +24 -9
- package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
- package/src/index.ts +1 -0
- package/src/serverSafeComponents.test.ts +665 -0
- package/src/theme/defineTheme.ts +27 -0
- package/src/theme/derivedVarRegistry.test.ts +21 -1
- package/src/theme/derivedVarRegistry.ts +19 -6
- package/src/theme/expandColorScale.test.ts +14 -0
- package/src/theme/expandColorScale.ts +24 -9
- package/src/theme/expandTypeScale.test.ts +43 -0
- package/src/theme/expandTypeScale.ts +17 -0
- package/src/theme/generateThemeRules.test.ts +78 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +15 -0
- package/src/theme/tokens.stylex.ts +18 -0
- package/src/theme/tokens.test.ts +37 -0
- package/src/utils/focusOutline.stylex.ts +177 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/interactionModality.ts +74 -0
- package/src/utils/mergeRefs.test.ts +48 -0
- package/src/utils/mergeRefs.ts +12 -6
- package/src/utils/rtlStyles.ts +2 -2
- package/src/utils/themeProps.ts +26 -4
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
- package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
- package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
- package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
- package/dist/RadioList/radio.markers.stylex.js +0 -12
- package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
- package/dist/hooks/containerReveal.pool.stylex.js +0 -292
- package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
- package/src/RadioList/radio.markers.stylex.ts +0 -10
- package/src/hooks/containerReveal.pool.stylex.ts +0 -571
package/src/Icon/Icon.doc.mjs
CHANGED
|
@@ -55,7 +55,7 @@ export const docs = {
|
|
|
55
55
|
description: 'Icons are small visual symbols that represent actions, objects, or concepts. They improve scannability and reinforce meaning alongside text. Supports both direct SVG components and semantic icon names that adapt to the active theme.',
|
|
56
56
|
bestPractices: [
|
|
57
57
|
{ guidance: true, description: 'Use semantic icon names when available; they adapt to theme changes automatically.' },
|
|
58
|
-
{ guidance: true, description: "
|
|
58
|
+
{ guidance: true, description: "Override icons through the theme, not globally: defineTheme({icons: {close: <XMarkIcon />}}) scopes the swap to the active <Theme>, and extends shallow-merges it into derived themes. registerIcons() mutates a process-wide registry and warns in dev, so keep it for app bootstrap rather than making it a library's theming seam." },
|
|
59
59
|
{ guidance: true, description: 'Pair icons with text labels for accessibility; icon-only elements need an accessible label.' },
|
|
60
60
|
{ guidance: true, description: 'For a meaningful standalone icon (no adjacent text), give it an accessible name via the `label` prop: it sets role="img" + aria-label and unhides the icon.' },
|
|
61
61
|
{ guidance: true, description: 'Use color tokens for icon colors, not hardcoded hex values.' },
|
|
@@ -133,6 +133,7 @@ export const docsDense = {
|
|
|
133
133
|
description: 'Icons are small visual symbols that represent actions, objects, or concepts. They improve scannability and reinforce meaning alongside text. Supports both direct SVG components and semantic icon names that adapt to the active theme.',
|
|
134
134
|
bestPractices: [
|
|
135
135
|
{ guidance: true, description: 'Use semantic icon names when available; they adapt to theme changes automatically.' },
|
|
136
|
+
{ guidance: true, description: "Override icons via theme, not globally: defineTheme({icons: {close: <XMarkIcon />}}) scopes the swap to the active <Theme>; extends shallow-merges into derived themes. registerIcons() mutates a global registry and warns in dev: app bootstrap only, not a library theming seam." },
|
|
136
137
|
{ guidance: true, description: 'Pair icons with text labels for accessibility; icon-only elements need an accessible label.' },
|
|
137
138
|
{ guidance: true, description: 'For a meaningful standalone icon (no adjacent text), set an accessible name via `label`: sets role="img" + aria-label, unhides icon.' },
|
|
138
139
|
{ guidance: true, description: 'Use color tokens for icon colors, not hardcoded hex values.' },
|
|
@@ -110,12 +110,12 @@ function getThemeIconOverrides(
|
|
|
110
110
|
* ```
|
|
111
111
|
*
|
|
112
112
|
* Libraries may also register their own extension keys (any string), so a
|
|
113
|
-
* theme can override them the same way it overrides built-in icons
|
|
113
|
+
* theme can override them the same way it overrides built-in icons. A library
|
|
114
|
+
* that ships its own icons registers them by key, then resolves with
|
|
115
|
+
* `getIcon('richtext:bold')`.
|
|
114
116
|
* @example
|
|
115
117
|
* ```
|
|
116
|
-
* // In a library that ships its own icons:
|
|
117
118
|
* registerIcons({ 'richtext:bold': <MyBoldIcon /> });
|
|
118
|
-
* // resolve with getIcon('richtext:bold')
|
|
119
119
|
* ```
|
|
120
120
|
*/
|
|
121
121
|
export function registerIcons(
|
|
@@ -191,9 +191,10 @@ export function getIcon(
|
|
|
191
191
|
* override the key via {@link registerIcons} without the library having to
|
|
192
192
|
* widen the core {@link IconName} union.
|
|
193
193
|
*
|
|
194
|
+
* The `fallback` is the library default, overridable by a theme registering the
|
|
195
|
+
* same key (for example `'richtext:bold'`).
|
|
194
196
|
* @example
|
|
195
197
|
* ```
|
|
196
|
-
* // Library default, overridable by a theme registering 'richtext:bold':
|
|
197
198
|
* getExtendedIcon('richtext:bold', <BoldGlyph />)
|
|
198
199
|
* ```
|
|
199
200
|
*/
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file CheckIndicator.tsx
|
|
5
|
+
* @input Indicator state props
|
|
6
|
+
* @output Exports CheckIndicator — the default single-selection mark
|
|
7
|
+
* @position Decorative check visual used wherever "this one is chosen" is
|
|
8
|
+
* marked without a control: selector options, menu rows
|
|
9
|
+
*
|
|
10
|
+
* This is the indicator a product replaces to change what "chosen" looks like.
|
|
11
|
+
* `defineTheme({indicators: {check: RadioIndicator}})` turns every
|
|
12
|
+
* single-selection mark into a radio, in one line, without any component
|
|
13
|
+
* knowing it happened.
|
|
14
|
+
*
|
|
15
|
+
* It draws NOTHING when unchecked, which is what makes it the default: a
|
|
16
|
+
* listbox should not show an empty box beside every row. A replacement is free
|
|
17
|
+
* to draw in both states — a radio does — and hosting components render the
|
|
18
|
+
* indicator unconditionally so that works.
|
|
19
|
+
*
|
|
20
|
+
* Unlike the checkbox and radio indicators, this one renders no chrome of its
|
|
21
|
+
* own: it IS the glyph. Two consequences, both deliberate:
|
|
22
|
+
*
|
|
23
|
+
* - It renders `<Icon>` directly rather than wrapping one, so the class the
|
|
24
|
+
* host passes (`selector-check`, say) lands on the same element as
|
|
25
|
+
* `astryx-icon` — one element carrying the mark and its theme target, per
|
|
26
|
+
* the wrapper reduction in #4838/#4846.
|
|
27
|
+
* - It adds NO theme target of its own. `astryx-checkbox` and `astryx-radio`
|
|
28
|
+
* exist because those indicators draw chrome that needs styling; a check
|
|
29
|
+
* is an icon, and `astryx-icon` plus the host's target already reach it.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import * as stylex from '@stylexjs/stylex';
|
|
33
|
+
import type {SVGProps} from 'react';
|
|
34
|
+
import {Icon} from '../Icon/Icon';
|
|
35
|
+
import {colorVars} from '../theme/tokens.stylex';
|
|
36
|
+
import {isRenderable, mergeProps} from '../utils';
|
|
37
|
+
import type {IndicatorProps} from './types';
|
|
38
|
+
|
|
39
|
+
/** The check glyph matches the control sizes the indicator families share. */
|
|
40
|
+
const iconSizeForIndicator = {
|
|
41
|
+
sm: 'sm',
|
|
42
|
+
md: 'sm',
|
|
43
|
+
} as const;
|
|
44
|
+
|
|
45
|
+
const styles = stylex.create({
|
|
46
|
+
// The children slot stands where the glyph would, so swapping a Spinner in
|
|
47
|
+
// for the mark does not move the row. 1rem is Icon's `sm` box, which is what
|
|
48
|
+
// `iconSizeForIndicator` resolves to at both indicator sizes.
|
|
49
|
+
slot: {
|
|
50
|
+
display: 'inline-flex',
|
|
51
|
+
alignItems: 'center',
|
|
52
|
+
justifyContent: 'center',
|
|
53
|
+
flexShrink: 0,
|
|
54
|
+
width: '1rem',
|
|
55
|
+
height: '1rem',
|
|
56
|
+
},
|
|
57
|
+
// Foreground for an inherit-shade Spinner, matching what the glyph would
|
|
58
|
+
// have painted. The sibling indicators set `color` on their chrome for the
|
|
59
|
+
// same reason.
|
|
60
|
+
enabled: {color: colorVars['--color-accent']},
|
|
61
|
+
// The same token Icon's `color="disabled"` resolves to, so the busy and the
|
|
62
|
+
// glyph paths read identically when the owner is disabled.
|
|
63
|
+
disabled: {color: colorVars['--color-icon-disabled']},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The default single-selection mark: a checkmark when chosen, nothing when not.
|
|
68
|
+
*
|
|
69
|
+
* Decorative and non-interactive — it renders `aria-hidden` and owns no role,
|
|
70
|
+
* state, or focus behavior; the option or row that hosts it keeps all of that.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```
|
|
74
|
+
* <CheckIndicator state={isSelected ? 'checked' : 'unchecked'} size="sm" />
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* Swap every single-selection mark for a radio:
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```
|
|
81
|
+
* import {RadioIndicator} from '@astryxdesign/core/Indicator';
|
|
82
|
+
* defineTheme({name: 'brand', indicators: {check: RadioIndicator}});
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export function CheckIndicator({
|
|
86
|
+
state,
|
|
87
|
+
size = 'md',
|
|
88
|
+
isDisabled = false,
|
|
89
|
+
children,
|
|
90
|
+
ref,
|
|
91
|
+
className,
|
|
92
|
+
style,
|
|
93
|
+
xstyle,
|
|
94
|
+
...rest
|
|
95
|
+
}: IndicatorProps<'singleSelection'>) {
|
|
96
|
+
const isChecked = state === 'checked';
|
|
97
|
+
|
|
98
|
+
// `children` (a pending Spinner, say) replaces the mark but keeps the
|
|
99
|
+
// indicator's place, matching the other indicators' contract. It is checked
|
|
100
|
+
// BEFORE `state`: a host passes a busy visual through in whatever state the
|
|
101
|
+
// row happens to be in, and an unchecked listbox row is the common one.
|
|
102
|
+
//
|
|
103
|
+
// `isRenderable`, not `children != null`: the idiom a host actually writes is
|
|
104
|
+
// `children={isBusy && <Spinner/>}`, which passes `false` when it is not
|
|
105
|
+
// busy. `false` is non-null, so a null check takes this branch, renders
|
|
106
|
+
// nothing inside it, and DELETES the mark on a chosen row (#4893).
|
|
107
|
+
//
|
|
108
|
+
// There is no glyph to hang the caller's props on in this branch, so they go
|
|
109
|
+
// on a span — every one of them, so a `data-testid`, an `id`, a handler or
|
|
110
|
+
// an `xstyle` behaves the same whether or not children are present.
|
|
111
|
+
if (isRenderable(children)) {
|
|
112
|
+
return (
|
|
113
|
+
<span
|
|
114
|
+
// Spread first, as on the glyph path below, so the indicator's own
|
|
115
|
+
// contract (aria-hidden, and the styling it composes) outranks any
|
|
116
|
+
// same-named attribute a caller passed through. The type omits the
|
|
117
|
+
// a11y props, but TypeScript cannot reject a hyphenated JSX attribute,
|
|
118
|
+
// so order is the part that actually holds.
|
|
119
|
+
{...rest}
|
|
120
|
+
ref={ref}
|
|
121
|
+
aria-hidden="true"
|
|
122
|
+
{...mergeProps(
|
|
123
|
+
stylex.props(
|
|
124
|
+
styles.slot,
|
|
125
|
+
isDisabled ? styles.disabled : styles.enabled,
|
|
126
|
+
xstyle,
|
|
127
|
+
),
|
|
128
|
+
className,
|
|
129
|
+
style,
|
|
130
|
+
)}>
|
|
131
|
+
{children}
|
|
132
|
+
</span>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Nothing to draw, and no box to reserve: an unmarked row keeps the layout
|
|
137
|
+
// it would have without this indicator.
|
|
138
|
+
if (!isChecked) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<Icon
|
|
144
|
+
// Spread first so the indicator's own contract (below) wins over any
|
|
145
|
+
// same-named DOM attribute a caller passed through.
|
|
146
|
+
//
|
|
147
|
+
// An indicator declares span props (BaseProps<HTMLSpanElement>) while
|
|
148
|
+
// Icon declares SVG ones, so the handler types differ nominally. For a
|
|
149
|
+
// registry icon the element that actually receives these IS a span
|
|
150
|
+
// (IconFromRegistry renders one), so forwarding them is correct at
|
|
151
|
+
// runtime; the cast only reconciles the two declarations.
|
|
152
|
+
{...(rest as Omit<SVGProps<SVGSVGElement>, 'color' | 'ref'>)}
|
|
153
|
+
// After the spread, deliberately. Icon puts its own a11y defaults BEFORE
|
|
154
|
+
// `{...props}` as a documented escape hatch (Icon.tsx), which is right
|
|
155
|
+
// for an icon and wrong for an indicator — this one is decorative by
|
|
156
|
+
// contract, so it re-asserts it here rather than inheriting the hatch.
|
|
157
|
+
aria-hidden="true"
|
|
158
|
+
icon="check"
|
|
159
|
+
size={iconSizeForIndicator[size]}
|
|
160
|
+
color={isDisabled ? 'disabled' : 'accent'}
|
|
161
|
+
// The focus ring rides in through xstyle (composed at resolution), but
|
|
162
|
+
// never paints here: it only activates under an owner's indicatorScope
|
|
163
|
+
// marker, and a listbox row that marks selection takes focus itself
|
|
164
|
+
// rather than marking its indicator.
|
|
165
|
+
xstyle={xstyle}
|
|
166
|
+
// Icon merges className/style with its own rather than shadowing them,
|
|
167
|
+
// so the host's theme target composes with `astryx-icon`.
|
|
168
|
+
className={className}
|
|
169
|
+
style={style}
|
|
170
|
+
/>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
CheckIndicator.displayName = 'CheckIndicator';
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file CheckboxIndicator.tsx
|
|
5
|
+
* @input Indicator state props
|
|
6
|
+
* @output Exports CheckboxIndicator — the default checkbox selection visual
|
|
7
|
+
* @position Decorative checkbox visual shared by CheckboxInput, CheckboxList,
|
|
8
|
+
* and decorative menu markers
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import * as stylex from '@stylexjs/stylex';
|
|
12
|
+
import {
|
|
13
|
+
borderVars,
|
|
14
|
+
colorVars,
|
|
15
|
+
durationVars,
|
|
16
|
+
easeVars,
|
|
17
|
+
radiusVars,
|
|
18
|
+
} from '../theme/tokens.stylex';
|
|
19
|
+
import {isRenderable, mergeProps, themeProps} from '../utils';
|
|
20
|
+
import {indicatorScope} from './indicator.markers.stylex';
|
|
21
|
+
import type {IndicatorProps} from './types';
|
|
22
|
+
|
|
23
|
+
const styles = stylex.create({
|
|
24
|
+
box: {
|
|
25
|
+
boxSizing: 'border-box',
|
|
26
|
+
display: 'flex',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
justifyContent: 'center',
|
|
29
|
+
flexShrink: 0,
|
|
30
|
+
borderWidth: borderVars['--border-width'],
|
|
31
|
+
borderStyle: 'solid',
|
|
32
|
+
borderRadius: radiusVars['--radius-inner'],
|
|
33
|
+
transitionProperty: 'background-color, border-color',
|
|
34
|
+
transitionDuration: {
|
|
35
|
+
default: durationVars['--duration-fast'],
|
|
36
|
+
'@media (prefers-reduced-motion: reduce)': '0s',
|
|
37
|
+
},
|
|
38
|
+
transitionTimingFunction: easeVars['--ease-standard'],
|
|
39
|
+
},
|
|
40
|
+
// State-dependent colors with ancestor hover behavior
|
|
41
|
+
unchecked: {
|
|
42
|
+
// Foreground for the inherit-shade loading spinner (reads currentColor):
|
|
43
|
+
// brand accent on the light surface fill.
|
|
44
|
+
color: colorVars['--color-accent'],
|
|
45
|
+
borderColor: {
|
|
46
|
+
default: colorVars['--color-border-emphasized'],
|
|
47
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
48
|
+
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-border-emphasized']}, ${colorVars['--color-tint-hover']} 20%)`,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
backgroundColor: {
|
|
52
|
+
default: colorVars['--color-background-surface'],
|
|
53
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
54
|
+
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-background-surface']}, ${colorVars['--color-tint-hover']} 5%)`,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
checked: {
|
|
59
|
+
// Foreground for the inherit-shade loading spinner (reads currentColor):
|
|
60
|
+
// on-accent color against the accent fill.
|
|
61
|
+
color: colorVars['--color-on-accent'],
|
|
62
|
+
borderColor: {
|
|
63
|
+
default: colorVars['--color-accent'],
|
|
64
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
65
|
+
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-accent']}, ${colorVars['--color-tint-hover']} 15%)`,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
backgroundColor: {
|
|
69
|
+
default: colorVars['--color-accent'],
|
|
70
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
71
|
+
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-accent']}, ${colorVars['--color-tint-hover']} 15%)`,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
disabled: {
|
|
76
|
+
opacity: 0.5,
|
|
77
|
+
borderColor: {
|
|
78
|
+
default: colorVars['--color-border'],
|
|
79
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
80
|
+
'@media (hover: hover)': colorVars['--color-border'],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
disabledUnchecked: {
|
|
85
|
+
backgroundColor: {
|
|
86
|
+
default: colorVars['--color-background-muted'],
|
|
87
|
+
[stylex.when.ancestor(':hover', indicatorScope)]: {
|
|
88
|
+
'@media (hover: hover)': colorVars['--color-background-muted'],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
checkmark: {
|
|
93
|
+
display: 'none',
|
|
94
|
+
color: {
|
|
95
|
+
default: colorVars['--color-on-accent'],
|
|
96
|
+
// Forced colors (Windows High Contrast) does not reliably force an SVG
|
|
97
|
+
// stroke painted with currentColor, so the check stays the same white as
|
|
98
|
+
// the flattened (Canvas) box fill — a white check on a white box.
|
|
99
|
+
// CanvasText keeps it perceivable on the Canvas box, matching the
|
|
100
|
+
// indeterminate mark (WCAG 1.4.11).
|
|
101
|
+
'@media (forced-colors: active)': 'CanvasText',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
checkmarkVisible: {
|
|
105
|
+
display: 'block',
|
|
106
|
+
},
|
|
107
|
+
indeterminateMark: {
|
|
108
|
+
display: 'none',
|
|
109
|
+
backgroundColor: {
|
|
110
|
+
default: colorVars['--color-on-accent'],
|
|
111
|
+
// Forced colors (Windows High Contrast) strips painted backgrounds,
|
|
112
|
+
// which would make the indeterminate bar invisible; CanvasText keeps it
|
|
113
|
+
// perceivable on the Canvas box fill (WCAG 1.4.11). The checkmark carries
|
|
114
|
+
// the matching CanvasText treatment on its own style.
|
|
115
|
+
'@media (forced-colors: active)': 'CanvasText',
|
|
116
|
+
},
|
|
117
|
+
borderRadius: radiusVars['--radius-full'],
|
|
118
|
+
},
|
|
119
|
+
indeterminateMarkVisible: {
|
|
120
|
+
display: 'block',
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const boxSizeStyles = stylex.create({
|
|
125
|
+
sm: {
|
|
126
|
+
width: 20,
|
|
127
|
+
height: 20,
|
|
128
|
+
},
|
|
129
|
+
md: {
|
|
130
|
+
width: 24,
|
|
131
|
+
height: 24,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const checkmarkSizeStyles = stylex.create({
|
|
136
|
+
sm: {
|
|
137
|
+
width: 12,
|
|
138
|
+
height: 12,
|
|
139
|
+
},
|
|
140
|
+
md: {
|
|
141
|
+
width: 14,
|
|
142
|
+
height: 14,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
const indeterminateSizeStyles = stylex.create({
|
|
147
|
+
sm: {
|
|
148
|
+
width: 10,
|
|
149
|
+
height: 2,
|
|
150
|
+
},
|
|
151
|
+
md: {
|
|
152
|
+
width: 12,
|
|
153
|
+
height: 2,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The default checkbox visual: a square box with a checkmark or an
|
|
159
|
+
* indeterminate bar.
|
|
160
|
+
*
|
|
161
|
+
* Decorative and non-interactive — it renders `aria-hidden` and owns no input,
|
|
162
|
+
* role, or focus behavior. The focus ring lives on the owner's control wrapper
|
|
163
|
+
* (see CheckboxInput), so a theme that replaces this component keeps a visible
|
|
164
|
+
* focus indicator for free. Themes replace it wholesale through
|
|
165
|
+
* `defineTheme({indicators: {checkbox: MyCheckbox}})`, or restyle it through
|
|
166
|
+
* the `checkbox` theme target like any other component.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```
|
|
170
|
+
* <CheckboxIndicator state="indeterminate" size="sm" />
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function CheckboxIndicator({
|
|
174
|
+
state,
|
|
175
|
+
size = 'md',
|
|
176
|
+
isDisabled = false,
|
|
177
|
+
children,
|
|
178
|
+
ref,
|
|
179
|
+
className,
|
|
180
|
+
style,
|
|
181
|
+
xstyle,
|
|
182
|
+
...rest
|
|
183
|
+
}: IndicatorProps<'multiSelection'>) {
|
|
184
|
+
const isChecked = state === 'checked';
|
|
185
|
+
const isIndeterminate = state === 'indeterminate';
|
|
186
|
+
const isCheckedOrIndeterminate = isChecked || isIndeterminate;
|
|
187
|
+
|
|
188
|
+
return (
|
|
189
|
+
<span
|
|
190
|
+
// `{...rest}` first, own contract after. TypeScript cannot reject a
|
|
191
|
+
// hyphenated JSX attribute (see IndicatorProps), so attribute order is
|
|
192
|
+
// what actually keeps a caller from un-hiding a decorative element —
|
|
193
|
+
// rubric P3, "owned aria-* set after {...rest}".
|
|
194
|
+
{...rest}
|
|
195
|
+
ref={ref}
|
|
196
|
+
aria-hidden="true"
|
|
197
|
+
{...mergeProps(
|
|
198
|
+
themeProps(
|
|
199
|
+
'checkbox-indicator',
|
|
200
|
+
{
|
|
201
|
+
size,
|
|
202
|
+
checked: isChecked
|
|
203
|
+
? 'checked'
|
|
204
|
+
: isIndeterminate
|
|
205
|
+
? 'indeterminate'
|
|
206
|
+
: null,
|
|
207
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
208
|
+
},
|
|
209
|
+
// `checkbox` was the target before indicators existed; themes
|
|
210
|
+
// styling it keep working until the next major.
|
|
211
|
+
{legacyNames: ['checkbox']},
|
|
212
|
+
),
|
|
213
|
+
stylex.props(
|
|
214
|
+
styles.box,
|
|
215
|
+
boxSizeStyles[size],
|
|
216
|
+
isCheckedOrIndeterminate ? styles.checked : styles.unchecked,
|
|
217
|
+
isDisabled && styles.disabled,
|
|
218
|
+
isDisabled && !isCheckedOrIndeterminate && styles.disabledUnchecked,
|
|
219
|
+
xstyle,
|
|
220
|
+
),
|
|
221
|
+
className,
|
|
222
|
+
style,
|
|
223
|
+
)}>
|
|
224
|
+
{isRenderable(children) ? (
|
|
225
|
+
children
|
|
226
|
+
) : (
|
|
227
|
+
<>
|
|
228
|
+
<svg
|
|
229
|
+
viewBox="0 0 10 10"
|
|
230
|
+
{...stylex.props(
|
|
231
|
+
styles.checkmark,
|
|
232
|
+
checkmarkSizeStyles[size],
|
|
233
|
+
isChecked && styles.checkmarkVisible,
|
|
234
|
+
)}>
|
|
235
|
+
<path
|
|
236
|
+
d="M8.5 2.5L4 7.5L1.5 5"
|
|
237
|
+
stroke="currentColor"
|
|
238
|
+
strokeWidth="1.5"
|
|
239
|
+
fill="none"
|
|
240
|
+
strokeLinecap="round"
|
|
241
|
+
strokeLinejoin="round"
|
|
242
|
+
/>
|
|
243
|
+
</svg>
|
|
244
|
+
<span
|
|
245
|
+
{...stylex.props(
|
|
246
|
+
styles.indeterminateMark,
|
|
247
|
+
indeterminateSizeStyles[size],
|
|
248
|
+
isIndeterminate && styles.indeterminateMarkVisible,
|
|
249
|
+
)}
|
|
250
|
+
/>
|
|
251
|
+
</>
|
|
252
|
+
)}
|
|
253
|
+
</span>
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
CheckboxIndicator.displayName = 'CheckboxIndicator';
|