@astryxdesign/core 0.3.0 → 0.4.0
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.map +1 -1
- package/dist/Banner/Banner.js +15 -14
- 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 +11 -15
- 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 +35 -33
- 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 +24 -23
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +11 -16
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +22 -17
- 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/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/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 +167 -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 +56 -53
- 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.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +78 -75
- 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/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 +96 -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 +2 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +164 -94
- 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/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.js +11 -10
- 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/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 +7 -15
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- 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 +74 -85
- 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/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 +16 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +8 -0
- 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 +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.d.ts +107 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +130 -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 +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -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 +12 -0
- package/locales/pseudo.json +9 -0
- package/package.json +7 -2
- 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.tsx +9 -6
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.tsx +21 -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 +115 -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 +64 -0
- package/src/ComplexSelector/ComplexSelector.tsx +46 -29
- 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 +93 -11
- package/src/DateInput/DateInput.tsx +41 -19
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +24 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +75 -0
- package/src/DateTimeInput/DateTimeInput.tsx +35 -8
- 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/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/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 +45 -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 +186 -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 +43 -38
- 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 +9 -1
- package/src/MultiSelector/MultiSelector.test.tsx +255 -16
- package/src/MultiSelector/MultiSelector.tsx +103 -99
- 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.tsx +6 -7
- 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 +124 -22
- 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 +7 -4
- package/src/Selector/Selector.test.tsx +935 -25
- package/src/Selector/Selector.tsx +189 -106
- 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/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 +8 -8
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -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 +30 -3
- package/src/TimeInput/TimeInput.tsx +9 -26
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- 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.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 +206 -7
- 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/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 +24 -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 +61 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +13 -0
- package/src/utils/focusOutline.stylex.ts +163 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +1 -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
|
@@ -122,8 +122,12 @@ export interface ProgressBarProps extends BaseProps<HTMLDivElement> {
|
|
|
122
122
|
/**
|
|
123
123
|
* Target marks drawn on the track at fixed points in the same `0..max`
|
|
124
124
|
* scale as `value` — e.g. a goal line. Marks stay visible whether progress
|
|
125
|
-
* is below or past them
|
|
126
|
-
*
|
|
125
|
+
* is below or past them, and take their color from what they sit on: a mark
|
|
126
|
+
* inside the filled area uses the fill variant's on-color (on-accent,
|
|
127
|
+
* on-warning, on-error, …), while a mark still out on the bare track uses
|
|
128
|
+
* `--color-text-primary` (`--color-text-secondary` on a disabled bar, which
|
|
129
|
+
* dims everything it draws). Each mark's required `label` names it for
|
|
130
|
+
* assistive tech and is revealed via a `Tooltip` on hover/focus. Ignored when
|
|
127
131
|
* `isIndeterminate` is true.
|
|
128
132
|
*/
|
|
129
133
|
marks?: ReadonlyArray<ProgressBarMark>;
|
|
@@ -257,20 +261,27 @@ const styles = stylex.create({
|
|
|
257
261
|
},
|
|
258
262
|
// A mark is a vertical tick centered on the track, a child of the
|
|
259
263
|
// `role="progressbar"` element (unchanged DOM). The track no longer clips, so
|
|
260
|
-
// its height — 8px by default
|
|
261
|
-
//
|
|
262
|
-
//
|
|
263
|
-
//
|
|
264
|
+
// its height — 8px by default — may exceed the bar and overhang; the centering
|
|
265
|
+
// translate keeps any overhang symmetric. Positioned horizontally via
|
|
266
|
+
// `insetInlineStart`; the translate mirrors under RTL.
|
|
267
|
+
//
|
|
268
|
+
// The dimensions read private vars rather than being plain declarations: a
|
|
269
|
+
// theme writes `width`/`height` on the `progressbar-mark` target as usual and
|
|
270
|
+
// the derived-var registry emits them as these vars instead of as competing
|
|
271
|
+
// properties. Nothing else declares them, so the theme value lands whatever
|
|
272
|
+
// the consumer's cascade looks like — a source-build app that compiles StyleX
|
|
273
|
+
// without `useCSSLayers` leaves the atomics unlayered, where they outrank
|
|
274
|
+
// every rule in `@layer astryx-theme` and made sizing the mark impossible
|
|
275
|
+
// without `!important`.
|
|
276
|
+
//
|
|
277
|
+
// The tick's color is not set here: it depends on what the mark sits on, so
|
|
278
|
+
// it comes from `markOnFillStyles[variant]` (mark inside the filled area) or
|
|
279
|
+
// `markOnTrackStyles.track` (mark out on the bare track).
|
|
264
280
|
mark: {
|
|
265
281
|
position: 'absolute',
|
|
266
282
|
top: '50%',
|
|
267
|
-
width:
|
|
268
|
-
height:
|
|
269
|
-
// Defaults to text-primary. Directly overridable via the `progressbar-mark`
|
|
270
|
-
// theme target — a theme can set `backgroundColor`, `width`, and `height`
|
|
271
|
-
// (e.g. a taller "flag" tick that overhangs the bar, or per-variant
|
|
272
|
-
// contrast) with `defineTheme`; no dedicated CSS vars needed.
|
|
273
|
-
backgroundColor: colorVars['--color-text-primary'],
|
|
283
|
+
width: 'var(--_progressbar-mark-width, 2px)',
|
|
284
|
+
height: 'var(--_progressbar-mark-height, 8px)',
|
|
274
285
|
outline: {
|
|
275
286
|
default: 'none',
|
|
276
287
|
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
@@ -307,6 +318,64 @@ const variantStyles = stylex.create({
|
|
|
307
318
|
},
|
|
308
319
|
});
|
|
309
320
|
|
|
321
|
+
// A mark sitting inside the filled area is drawn *on* the bar, so it takes the
|
|
322
|
+
// on-color that pairs with the fill's own variant color — the same pairing
|
|
323
|
+
// Badge uses for solid semantic backgrounds.
|
|
324
|
+
//
|
|
325
|
+
// `neutral` and `disabled` both fill with the muted `--color-text-disabled`
|
|
326
|
+
// gray, which carries no semantic weight and has no dedicated on-token, so
|
|
327
|
+
// they fall back to a plain foreground. They pick different ones: a `neutral`
|
|
328
|
+
// bar is live, so its mark keeps the full-contrast `--color-text-primary` a
|
|
329
|
+
// mark uses out on the track; a `disabled` bar is deliberately low-emphasis —
|
|
330
|
+
// its own label and value text drop to muted colors — so its mark steps down
|
|
331
|
+
// to `--color-text-secondary` rather than becoming the loudest thing on a
|
|
332
|
+
// grayed-out component.
|
|
333
|
+
const markOnFillStyles = stylex.create({
|
|
334
|
+
accent: {
|
|
335
|
+
backgroundColor: colorVars['--color-on-accent'],
|
|
336
|
+
},
|
|
337
|
+
success: {
|
|
338
|
+
backgroundColor: colorVars['--color-on-success'],
|
|
339
|
+
},
|
|
340
|
+
warning: {
|
|
341
|
+
backgroundColor: colorVars['--color-on-warning'],
|
|
342
|
+
},
|
|
343
|
+
error: {
|
|
344
|
+
backgroundColor: colorVars['--color-on-error'],
|
|
345
|
+
},
|
|
346
|
+
neutral: {
|
|
347
|
+
backgroundColor: colorVars['--color-text-primary'],
|
|
348
|
+
},
|
|
349
|
+
disabled: {
|
|
350
|
+
backgroundColor: colorVars['--color-text-secondary'],
|
|
351
|
+
},
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// A mark out on the bare track is a foreground tick over the muted track
|
|
355
|
+
// background, so it takes `--color-text-primary`.
|
|
356
|
+
//
|
|
357
|
+
// The obvious candidate was `--color-border-emphasized` — the emphasized
|
|
358
|
+
// divider color `Divider`'s `strong` variant and `Slider`'s marks use — but
|
|
359
|
+
// divider tokens sit a step or two from the track on the same neutral ramp, so
|
|
360
|
+
// a mark drawn in one is at or near invisible: measured against each shipped
|
|
361
|
+
// theme's track it lands between 1.00:1 (theme-neutral, both modes, where the
|
|
362
|
+
// track is aliased to that very token) and 2.9:1, under the 3:1 WCAG 1.4.11
|
|
363
|
+
// non-text floor in 7 of 8 themes. `--color-text-secondary` still misses in
|
|
364
|
+
// two. `--color-text-primary` is the one foreground guaranteed to read against
|
|
365
|
+
// every surface a theme defines: 5.8:1 to 15.7:1 on the track across all
|
|
366
|
+
// themes and both modes.
|
|
367
|
+
const markOnTrackStyles = stylex.create({
|
|
368
|
+
track: {
|
|
369
|
+
backgroundColor: colorVars['--color-text-primary'],
|
|
370
|
+
},
|
|
371
|
+
// A disabled bar dims everything it draws, so its track marks step down to
|
|
372
|
+
// the secondary foreground for the same reason the disabled on-fill mark
|
|
373
|
+
// does — matching the muted label and value text.
|
|
374
|
+
trackDisabled: {
|
|
375
|
+
backgroundColor: colorVars['--color-text-secondary'],
|
|
376
|
+
},
|
|
377
|
+
});
|
|
378
|
+
|
|
310
379
|
function defaultFormatValueLabel(value: number, max: number): string {
|
|
311
380
|
const pct = max > 0 ? Math.round((value / max) * 100) : 0;
|
|
312
381
|
return `${pct}%`;
|
|
@@ -338,8 +407,11 @@ function defaultFormatValueLabel(value: number, max: number): string {
|
|
|
338
407
|
* ```
|
|
339
408
|
*
|
|
340
409
|
* A mark's height, width, and color are directly themeable via the
|
|
341
|
-
* `progressbar-mark` target
|
|
342
|
-
*
|
|
410
|
+
* `progressbar-mark` target. The target reflects `data-placement`
|
|
411
|
+
* (`"fill"` when the mark sits inside the filled area, `"track"` when it is
|
|
412
|
+
* still out on the bare track) and `data-variant` (the fill's variant), so a
|
|
413
|
+
* theme can style the two cases separately — e.g. a taller "goal flag" tick
|
|
414
|
+
* that overhangs the bar (centered, so the overhang is symmetric):
|
|
343
415
|
*
|
|
344
416
|
* @example
|
|
345
417
|
* ```
|
|
@@ -387,6 +459,13 @@ export function ProgressBar({
|
|
|
387
459
|
// Marks make no sense without a determinate value, so they are only drawn
|
|
388
460
|
// in determinate mode. Non-finite mark values are dropped; the rest are
|
|
389
461
|
// clamped to the track edges, matching the bar's own `clampedValue`.
|
|
462
|
+
//
|
|
463
|
+
// Each mark also records whether it lands on the filled part of the bar
|
|
464
|
+
// (`isOnFill`), which decides its color: a mark inside the fill reads against
|
|
465
|
+
// the variant color, one out on the bare track reads against the track. A
|
|
466
|
+
// mark exactly at the fill's leading edge counts as on the fill — it is the
|
|
467
|
+
// "reached the target" moment — except at zero progress, where there is no
|
|
468
|
+
// fill for it to sit on.
|
|
390
469
|
const resolvedMarks =
|
|
391
470
|
!isIndeterminate && marks
|
|
392
471
|
? marks
|
|
@@ -394,7 +473,12 @@ export function ProgressBar({
|
|
|
394
473
|
.map(mark => {
|
|
395
474
|
const clamped = Math.min(Math.max(0, mark.value), safeMax);
|
|
396
475
|
const pct = safeMax > 0 ? (clamped / safeMax) * 100 : 0;
|
|
397
|
-
return {
|
|
476
|
+
return {
|
|
477
|
+
value: mark.value,
|
|
478
|
+
label: mark.label,
|
|
479
|
+
pct,
|
|
480
|
+
isOnFill: percentage > 0 && pct <= percentage,
|
|
481
|
+
};
|
|
398
482
|
})
|
|
399
483
|
: [];
|
|
400
484
|
|
|
@@ -471,21 +555,39 @@ export function ProgressBar({
|
|
|
471
555
|
)}
|
|
472
556
|
{/* Target marks — children of the progressbar element (unchanged),
|
|
473
557
|
layered above the fill so they show whether progress is below or
|
|
474
|
-
past them.
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
558
|
+
past them. A mark's color follows what it sits on: inside the fill
|
|
559
|
+
it uses the fill variant's on-color, out on the bare track it uses
|
|
560
|
+
the emphasized divider color. Each mark is labeled, so it is a
|
|
561
|
+
focusable Tooltip trigger: the label is visible on hover/focus and
|
|
562
|
+
names the mark for assistive tech via the Tooltip's
|
|
563
|
+
aria-describedby, without adding a labeled child to the
|
|
564
|
+
progressbar's own a11y subtree. */}
|
|
478
565
|
{resolvedMarks.map(mark => {
|
|
479
566
|
// The tick element. It is both the Tooltip's anchor and the Suspense
|
|
480
567
|
// fallback shown while the lazy Tooltip chunk loads, so the tick is
|
|
481
568
|
// always visible and the label attaches once ready. The list `key`
|
|
482
569
|
// lives on the mapped <Suspense>, not here.
|
|
570
|
+
//
|
|
571
|
+
// `placement` is reflected as `data-placement` (and a class) so a
|
|
572
|
+
// theme can style the two cases separately on the
|
|
573
|
+
// `progressbar-mark` target; `variant` mirrors the fill's variant
|
|
574
|
+
// for the same reason.
|
|
483
575
|
const markEl = (
|
|
484
576
|
<span
|
|
485
577
|
tabIndex={0}
|
|
486
578
|
{...mergeProps(
|
|
487
|
-
themeProps('progressbar-mark'
|
|
488
|
-
|
|
579
|
+
themeProps('progressbar-mark', {
|
|
580
|
+
variant: fillVariant,
|
|
581
|
+
placement: mark.isOnFill ? 'fill' : 'track',
|
|
582
|
+
}),
|
|
583
|
+
stylex.props(
|
|
584
|
+
styles.mark,
|
|
585
|
+
mark.isOnFill
|
|
586
|
+
? markOnFillStyles[fillVariant]
|
|
587
|
+
: isDisabled
|
|
588
|
+
? markOnTrackStyles.trackDisabled
|
|
589
|
+
: markOnTrackStyles.track,
|
|
590
|
+
),
|
|
489
591
|
)}
|
|
490
592
|
style={{insetInlineStart: `${mark.pct}%`}}
|
|
491
593
|
/>
|
|
@@ -12,8 +12,10 @@ export const docs = {
|
|
|
12
12
|
targets: [
|
|
13
13
|
{className: 'astryx-radio-list', visualProps: ['orientation', 'size']},
|
|
14
14
|
{className: 'astryx-radio-list-item'},
|
|
15
|
-
{className: 'astryx-radio', visualProps: ['size'], states: ['checked', 'disabled']},
|
|
16
|
-
{className: 'astryx-radio-dot', visualProps: ['size']},
|
|
15
|
+
{className: 'astryx-radio-indicator', visualProps: ['size'], states: ['checked', 'disabled']},
|
|
16
|
+
{className: 'astryx-radio-indicator-dot', visualProps: ['size']},
|
|
17
|
+
{className: 'astryx-radio', visualProps: ['size'], states: ['checked', 'disabled'], deprecatedFor: 'radio-indicator'},
|
|
18
|
+
{className: 'astryx-radio-dot', visualProps: ['size'], deprecatedFor: 'radio-indicator-dot'},
|
|
17
19
|
],
|
|
18
20
|
},
|
|
19
21
|
description: 'Radio group container with field integration for label, description, and status.',
|
|
@@ -18,19 +18,15 @@
|
|
|
18
18
|
* - /packages/cli/assets/templates/blocks/components/RadioList/ (showcase blocks)
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import React, {use, useId, type ReactNode} from 'react';
|
|
21
|
+
import React, {use, useId, useRef, type ReactNode} from 'react';
|
|
22
22
|
import * as stylex from '@stylexjs/stylex';
|
|
23
23
|
import type {BaseProps} from '../BaseProps';
|
|
24
|
-
import {
|
|
25
|
-
colorVars,
|
|
26
|
-
spacingVars,
|
|
27
|
-
durationVars,
|
|
28
|
-
easeVars,
|
|
29
|
-
borderVars,
|
|
30
|
-
} from '../theme/tokens.stylex';
|
|
24
|
+
import {colorVars, spacingVars} from '../theme/tokens.stylex';
|
|
31
25
|
import {RadioListContext} from './RadioList';
|
|
32
26
|
import {mergeProps} from '../utils';
|
|
33
|
-
import {
|
|
27
|
+
import {indicatorScope} from '../Indicator/indicator.markers.stylex';
|
|
28
|
+
import {useIndicatorFocusRing} from '../hooks/useIndicatorFocusRing';
|
|
29
|
+
import {useIndicator} from '../Indicator';
|
|
34
30
|
import {Item} from '../Item';
|
|
35
31
|
import {themeProps} from '../utils/themeProps';
|
|
36
32
|
|
|
@@ -59,74 +55,9 @@ const styles = stylex.create({
|
|
|
59
55
|
inputDisabled: {
|
|
60
56
|
cursor: 'not-allowed',
|
|
61
57
|
},
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
justifyContent: 'center',
|
|
66
|
-
borderWidth: borderVars['--border-width'],
|
|
67
|
-
borderStyle: 'solid',
|
|
68
|
-
borderRadius: '50%',
|
|
69
|
-
transitionProperty: 'background-color, border-color',
|
|
70
|
-
transitionDuration: durationVars['--duration-fast'],
|
|
71
|
-
transitionTimingFunction: easeVars['--ease-standard'],
|
|
72
|
-
boxSizing: 'border-box',
|
|
73
|
-
},
|
|
74
|
-
radioUnchecked: {
|
|
75
|
-
borderColor: {
|
|
76
|
-
default: colorVars['--color-border-emphasized'],
|
|
77
|
-
[stylex.when.ancestor(':hover', radioScope)]: {
|
|
78
|
-
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-border-emphasized']}, ${colorVars['--color-tint-hover']} 20%)`,
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
backgroundColor: {
|
|
82
|
-
default: colorVars['--color-background-surface'],
|
|
83
|
-
[stylex.when.ancestor(':hover', radioScope)]: {
|
|
84
|
-
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-background-surface']}, ${colorVars['--color-tint-hover']} 5%)`,
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
radioChecked: {
|
|
89
|
-
borderColor: {
|
|
90
|
-
default: colorVars['--color-accent'],
|
|
91
|
-
[stylex.when.ancestor(':hover', radioScope)]: {
|
|
92
|
-
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-accent']}, ${colorVars['--color-tint-hover']} 15%)`,
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
backgroundColor: {
|
|
96
|
-
default: colorVars['--color-accent'],
|
|
97
|
-
[stylex.when.ancestor(':hover', radioScope)]: {
|
|
98
|
-
'@media (hover: hover)': `color-mix(in srgb, ${colorVars['--color-accent']}, ${colorVars['--color-tint-hover']} 15%)`,
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
radioWrapperFocus: {
|
|
103
|
-
outline: {
|
|
104
|
-
default: 'none',
|
|
105
|
-
':has(:focus-visible)': `2px solid ${colorVars['--color-accent']}`,
|
|
106
|
-
},
|
|
107
|
-
outlineOffset: {
|
|
108
|
-
default: '0',
|
|
109
|
-
':has(:focus-visible)': '2px',
|
|
110
|
-
},
|
|
111
|
-
borderRadius: '50%',
|
|
112
|
-
},
|
|
113
|
-
radioDisabled: {
|
|
114
|
-
opacity: 0.5,
|
|
115
|
-
borderColor: colorVars['--color-border'],
|
|
116
|
-
},
|
|
117
|
-
radioDisabledUnchecked: {
|
|
118
|
-
backgroundColor: colorVars['--color-background-muted'],
|
|
119
|
-
},
|
|
120
|
-
innerDot: {
|
|
121
|
-
borderRadius: '50%',
|
|
122
|
-
backgroundColor: {
|
|
123
|
-
default: colorVars['--color-on-accent'],
|
|
124
|
-
// Forced colors (Windows High Contrast) strips painted backgrounds,
|
|
125
|
-
// which would make the selected dot invisible — checked and unchecked
|
|
126
|
-
// radios would look identical. CanvasText keeps the dot perceivable on
|
|
127
|
-
// the Canvas circle fill (WCAG 1.4.11).
|
|
128
|
-
'@media (forced-colors: active)': 'CanvasText',
|
|
129
|
-
},
|
|
58
|
+
// Holds only the indicator, so the focus ring has one unambiguous target.
|
|
59
|
+
indicatorSlot: {
|
|
60
|
+
display: 'contents',
|
|
130
61
|
},
|
|
131
62
|
labelDisabled: {
|
|
132
63
|
color: colorVars['--color-text-disabled'],
|
|
@@ -145,28 +76,6 @@ const wrapperSizeStyles = stylex.create({
|
|
|
145
76
|
},
|
|
146
77
|
});
|
|
147
78
|
|
|
148
|
-
const radioSizeStyles = stylex.create({
|
|
149
|
-
sm: {
|
|
150
|
-
width: 20,
|
|
151
|
-
height: 20,
|
|
152
|
-
},
|
|
153
|
-
md: {
|
|
154
|
-
width: 24,
|
|
155
|
-
height: 24,
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
const dotSizeStyles = stylex.create({
|
|
160
|
-
sm: {
|
|
161
|
-
width: 8,
|
|
162
|
-
height: 8,
|
|
163
|
-
},
|
|
164
|
-
md: {
|
|
165
|
-
width: 10,
|
|
166
|
-
height: 10,
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
|
|
170
79
|
const embeddedStyles = stylex.create({
|
|
171
80
|
root: {
|
|
172
81
|
paddingBlock: 0,
|
|
@@ -248,14 +157,18 @@ export function RadioListItem({
|
|
|
248
157
|
context.hasDisabledMessage && !isItemDisabled;
|
|
249
158
|
const isChecked = context.value === value;
|
|
250
159
|
const size = context.size;
|
|
160
|
+
// The radio visual is an indicator: a theme can restyle it through the
|
|
161
|
+
// `radio` / `radio-dot` targets or replace the component outright.
|
|
162
|
+
const RadioControl = useIndicator('radio');
|
|
163
|
+
// See CheckboxInput: the ring goes on the indicator's own element, because
|
|
164
|
+
// the native input is visually hidden and only the indicator knows its shape.
|
|
165
|
+
const indicatorRef = useRef<HTMLSpanElement>(null);
|
|
166
|
+
const {focusProps} = useIndicatorFocusRing(indicatorRef, isDisabled);
|
|
251
167
|
|
|
252
168
|
const radioCircle = (
|
|
253
169
|
<div
|
|
254
|
-
{...stylex.props(
|
|
255
|
-
|
|
256
|
-
wrapperSizeStyles[size],
|
|
257
|
-
!isDisabled && styles.radioWrapperFocus,
|
|
258
|
-
)}>
|
|
170
|
+
{...stylex.props(styles.radioWrapper, wrapperSizeStyles[size])}
|
|
171
|
+
{...focusProps}>
|
|
259
172
|
<input
|
|
260
173
|
id={id}
|
|
261
174
|
type="radio"
|
|
@@ -282,31 +195,13 @@ export function RadioListItem({
|
|
|
282
195
|
isDisabled && styles.inputDisabled,
|
|
283
196
|
)}
|
|
284
197
|
/>
|
|
285
|
-
<
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}),
|
|
293
|
-
stylex.props(
|
|
294
|
-
styles.radio,
|
|
295
|
-
radioSizeStyles[size],
|
|
296
|
-
isChecked ? styles.radioChecked : styles.radioUnchecked,
|
|
297
|
-
isDisabled && styles.radioDisabled,
|
|
298
|
-
isDisabled && !isChecked && styles.radioDisabledUnchecked,
|
|
299
|
-
),
|
|
300
|
-
)}>
|
|
301
|
-
{isChecked && (
|
|
302
|
-
<div
|
|
303
|
-
{...mergeProps(
|
|
304
|
-
themeProps('radio-dot', {size}),
|
|
305
|
-
stylex.props(styles.innerDot, dotSizeStyles[size]),
|
|
306
|
-
)}
|
|
307
|
-
/>
|
|
308
|
-
)}
|
|
309
|
-
</div>
|
|
198
|
+
<span ref={indicatorRef} {...stylex.props(styles.indicatorSlot)}>
|
|
199
|
+
<RadioControl
|
|
200
|
+
state={isChecked ? 'checked' : 'unchecked'}
|
|
201
|
+
size={size}
|
|
202
|
+
isDisabled={isDisabled}
|
|
203
|
+
/>
|
|
204
|
+
</span>
|
|
310
205
|
</div>
|
|
311
206
|
);
|
|
312
207
|
|
|
@@ -325,7 +220,13 @@ export function RadioListItem({
|
|
|
325
220
|
ref={ref}
|
|
326
221
|
{...mergeProps(
|
|
327
222
|
themeProps('radio-list-item'),
|
|
328
|
-
stylex.props(
|
|
223
|
+
stylex.props(
|
|
224
|
+
styles.container,
|
|
225
|
+
// Hover reaches the radio visual through this ancestor marker rather
|
|
226
|
+
// than props, so hovering the row tints the control.
|
|
227
|
+
!isDisabled && indicatorScope,
|
|
228
|
+
xstyle,
|
|
229
|
+
),
|
|
329
230
|
className,
|
|
330
231
|
style,
|
|
331
232
|
)}
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
radiusVars,
|
|
35
35
|
spacingVars,
|
|
36
36
|
} from '../theme/tokens.stylex';
|
|
37
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
37
38
|
import {mergeProps, mergeRefs, rtlStyles} from '../utils';
|
|
38
39
|
import type {ResizableProps} from './useResizable';
|
|
39
40
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -94,14 +95,6 @@ const styles = stylex.create({
|
|
|
94
95
|
transitionProperty: 'background-color',
|
|
95
96
|
transitionDuration: durationVars['--duration-fast'],
|
|
96
97
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
97
|
-
outline: {
|
|
98
|
-
default: 'none',
|
|
99
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
100
|
-
},
|
|
101
|
-
outlineOffset: {
|
|
102
|
-
default: null,
|
|
103
|
-
':focus-visible': spacingVars['--spacing-0-5'],
|
|
104
|
-
},
|
|
105
98
|
},
|
|
106
99
|
// Overlay mode — absolutely positioned inside the parent panel
|
|
107
100
|
// instead of being a sibling in flex flow. Used when the handle
|
|
@@ -554,7 +547,7 @@ export function ResizeHandle({
|
|
|
554
547
|
data-resizing={isDragging || undefined}
|
|
555
548
|
{...mergeProps(
|
|
556
549
|
themeProps('resize-handle'),
|
|
557
|
-
|
|
550
|
+
focusOutlineProps.focusVisible(
|
|
558
551
|
styles.handle,
|
|
559
552
|
isOverlay && styles.overlay,
|
|
560
553
|
isOverlay &&
|
|
@@ -32,6 +32,7 @@ import type {SegmentedControlSize} from './SegmentedControlContext';
|
|
|
32
32
|
import {mergeProps, composeEventHandlers} from '../utils';
|
|
33
33
|
import type {BaseProps} from '../BaseProps';
|
|
34
34
|
import {themeProps} from '../utils/themeProps';
|
|
35
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
35
36
|
|
|
36
37
|
export interface SegmentedControlItemProps extends BaseProps<HTMLButtonElement> {
|
|
37
38
|
ref?: React.Ref<HTMLButtonElement>;
|
|
@@ -85,14 +86,6 @@ const styles = stylex.create({
|
|
|
85
86
|
transitionProperty: 'color, background-color, box-shadow',
|
|
86
87
|
transitionDuration: durationVars['--duration-fast'],
|
|
87
88
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
88
|
-
outline: {
|
|
89
|
-
default: null,
|
|
90
|
-
':focus-visible': `2px solid ${colorVars['--color-accent']}`,
|
|
91
|
-
},
|
|
92
|
-
outlineOffset: {
|
|
93
|
-
default: '0',
|
|
94
|
-
':focus-visible': '2px',
|
|
95
|
-
},
|
|
96
89
|
},
|
|
97
90
|
hover: {
|
|
98
91
|
backgroundColor: {
|
|
@@ -240,7 +233,7 @@ export function SegmentedControlItem({
|
|
|
240
233
|
selected: isSelected ? 'selected' : null,
|
|
241
234
|
disabled: isItemDisabled ? 'disabled' : null,
|
|
242
235
|
}),
|
|
243
|
-
|
|
236
|
+
focusOutlineProps.focusVisible(
|
|
244
237
|
styles.base,
|
|
245
238
|
sizeStyles[size],
|
|
246
239
|
isFill && styles.fill,
|
|
@@ -46,6 +46,7 @@ import type {CardVariant} from '../Card/Card';
|
|
|
46
46
|
import {useClickableContainer} from '../hooks/useClickableContainer';
|
|
47
47
|
import type {BaseProps} from '../BaseProps';
|
|
48
48
|
import {themeProps} from '../utils/themeProps';
|
|
49
|
+
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
49
50
|
|
|
50
51
|
// =============================================================================
|
|
51
52
|
// Styles — selection + interaction; Card handles the rest
|
|
@@ -58,13 +59,6 @@ const styles = stylex.create({
|
|
|
58
59
|
transitionProperty: 'box-shadow, border-color',
|
|
59
60
|
transitionDuration: durationVars['--duration-fast'],
|
|
60
61
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
61
|
-
outlineOffset: '2px',
|
|
62
|
-
},
|
|
63
|
-
focusWithin: {
|
|
64
|
-
':has(:focus-visible)': {
|
|
65
|
-
outline: `2px solid ${colorVars['--color-accent']}`,
|
|
66
|
-
outlineOffset: '2px',
|
|
67
|
-
},
|
|
68
62
|
},
|
|
69
63
|
// Hover overlay — guarded by @media (hover: hover) so touch devices
|
|
70
64
|
// don't show a stuck hover state. Active/pressed state works everywhere.
|
|
@@ -361,12 +355,13 @@ export function SelectableCard({
|
|
|
361
355
|
variant,
|
|
362
356
|
selected: isSelected ? 'true' : 'false',
|
|
363
357
|
}),
|
|
364
|
-
|
|
358
|
+
focusOutlineProps.focusWithin(),
|
|
359
|
+
classNameProp,
|
|
360
|
+
style,
|
|
365
361
|
)}
|
|
366
362
|
xstyle={
|
|
367
363
|
[
|
|
368
364
|
styles.interactive,
|
|
369
|
-
styles.focusWithin,
|
|
370
365
|
isSelected && selectedStyleForVariant(variant),
|
|
371
366
|
!isDisabled && styles.overlay,
|
|
372
367
|
!isDisabled && styles.hoverOnPointer,
|
|
@@ -24,10 +24,13 @@ export const docs = {
|
|
|
24
24
|
{
|
|
25
25
|
className: 'astryx-selector',
|
|
26
26
|
visualProps: ['variant', 'size', 'status'],
|
|
27
|
+
states: ['disabled'],
|
|
27
28
|
},
|
|
28
29
|
{className: 'astryx-selector-option'},
|
|
29
|
-
{className: 'astryx-selector-
|
|
30
|
+
{className: 'astryx-selector-empty-state'},
|
|
31
|
+
{className: 'astryx-selector-clear-icon', deprecatedFor: 'input-clear-icon'},
|
|
30
32
|
{className: 'astryx-selector-indicator-icon', states: ['state']},
|
|
33
|
+
{className: 'astryx-selector-check'},
|
|
31
34
|
],
|
|
32
35
|
},
|
|
33
36
|
description: 'Dropdown selector for choosing from a list of options.',
|
|
@@ -169,7 +172,7 @@ export const docs = {
|
|
|
169
172
|
components: [{name: 'SelectorOption'}],
|
|
170
173
|
usage: {
|
|
171
174
|
description:
|
|
172
|
-
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options.',
|
|
175
|
+
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options. Keyboard typeahead matches a native select: typing on the focused closed trigger selects the matching option directly, repeated presses cycle through options sharing a first letter, and spaces count as match characters ("new y" reaches "New York"). With the menu open, typing moves the highlight and Enter commits. With hasSearch, typing on the closed trigger opens the popup and seeds the search input.',
|
|
173
176
|
bestPractices: [
|
|
174
177
|
{
|
|
175
178
|
guidance: true,
|
|
@@ -271,7 +274,7 @@ export const docs = {
|
|
|
271
274
|
export const docsZh = {
|
|
272
275
|
usage: {
|
|
273
276
|
description:
|
|
274
|
-
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options.',
|
|
277
|
+
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options. Keyboard typeahead matches a native select: typing on the focused closed trigger selects the matching option directly, repeated presses cycle through options sharing a first letter, and spaces count as match characters ("new y" reaches "New York"). With the menu open, typing moves the highlight and Enter commits. With hasSearch, typing on the closed trigger opens the popup and seeds the search input.',
|
|
275
278
|
bestPractices: [
|
|
276
279
|
{
|
|
277
280
|
guidance: true,
|
|
@@ -363,7 +366,7 @@ export const docsZh = {
|
|
|
363
366
|
export const docsDense = {
|
|
364
367
|
usage: {
|
|
365
368
|
description:
|
|
366
|
-
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options.',
|
|
369
|
+
'A dropdown selector for choosing a single value from a list of options. Supports labels, validation, descriptions, and required/optional states. Use it in forms and settings when presenting a moderate number of options. Keyboard typeahead matches a native select: typing on the focused closed trigger selects the matching option directly, repeated presses cycle through options sharing a first letter, and spaces count as match characters ("new y" reaches "New York"). With the menu open, typing moves the highlight and Enter commits. With hasSearch, typing on the closed trigger opens the popup and seeds the search input.',
|
|
367
370
|
bestPractices: [
|
|
368
371
|
{
|
|
369
372
|
guidance: true,
|