@astryxdesign/core 0.3.0 → 0.4.0-canary.3112e99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +156 -0
- package/dist/AlertDialog/AlertDialog.d.ts +10 -2
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +22 -3
- package/dist/AppShell/AppShell.d.ts +2 -2
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +40 -9
- package/dist/AspectRatio/AspectRatio.d.ts +13 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +9 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -20
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
- package/dist/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +32 -17
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
- package/dist/Breadcrumbs/index.d.ts +2 -1
- package/dist/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/Breadcrumbs/index.js +1 -0
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +12 -16
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +2 -1
- package/dist/Calendar/styles.d.ts +0 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +0 -2
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +8 -12
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +2 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +3 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +4 -3
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +17 -17
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +36 -125
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -11
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +84 -67
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +35 -15
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +6 -3
- package/dist/CommandPalette/CommandPaletteList.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +32 -31
- package/dist/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +1 -1
- package/dist/ContextMenu/index.d.ts +2 -1
- package/dist/ContextMenu/index.d.ts.map +1 -1
- package/dist/ContextMenu/index.js +1 -0
- package/dist/DateInput/DateInput.d.ts +9 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +47 -33
- package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +55 -32
- package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +54 -30
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +62 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
- package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
- package/dist/DropdownMenu/index.d.ts +2 -1
- package/dist/DropdownMenu/index.d.ts.map +1 -1
- package/dist/DropdownMenu/index.js +4 -0
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +35 -27
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +9 -5
- package/dist/Field/InputClearButton.d.ts +16 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +15 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +3 -19
- package/dist/Indicator/CheckIndicator.d.ts +25 -0
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckIndicator.js +155 -0
- package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
- package/dist/Indicator/CheckboxIndicator.js +173 -0
- package/dist/Indicator/RadioIndicator.d.ts +23 -0
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
- package/dist/Indicator/RadioIndicator.js +137 -0
- package/dist/Indicator/index.d.ts +24 -0
- package/dist/Indicator/index.d.ts.map +1 -0
- package/dist/Indicator/index.js +26 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
- package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
- package/dist/Indicator/indicator.markers.stylex.js +21 -0
- package/dist/Indicator/indicatorRegistry.d.ts +71 -0
- package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
- package/dist/Indicator/indicatorRegistry.js +93 -0
- package/dist/Indicator/types.d.ts +177 -0
- package/dist/Indicator/types.d.ts.map +1 -0
- package/dist/Indicator/types.js +1 -0
- package/dist/Indicator/useIndicator.d.ts +18 -0
- package/dist/Indicator/useIndicator.d.ts.map +1 -0
- package/dist/Indicator/useIndicator.js +30 -0
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -8
- package/dist/Layer/useLayer.d.ts +14 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +25 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +80 -103
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +4 -5
- package/dist/MobileNav/MobileNav.js +8 -8
- package/dist/MoreMenu/MoreMenu.d.ts +14 -1
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +4 -0
- package/dist/MultiSelector/MultiSelector.d.ts +8 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +119 -95
- package/dist/NumberInput/NumberInput.d.ts +27 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +230 -42
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +61 -63
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -8
- package/dist/Popover/usePopover.d.ts +15 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
- package/dist/ProgressBar/ProgressBar.d.ts +11 -4
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +95 -6
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +29 -84
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +2 -3
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -11
- package/dist/Selector/Selector.d.ts +12 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +222 -111
- package/dist/Selector/hooks.d.ts +18 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +57 -40
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
- package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
- package/dist/SideNav/SideNavCollapseButton.js +29 -14
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +56 -20
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +28 -22
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +2 -6
- package/dist/Stack/stack.stylex.d.ts +3 -3
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +14 -13
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +2 -3
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +41 -19
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +8 -0
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +4 -2
- package/dist/Table/index.d.ts +1 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
- package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/index.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
- package/dist/Table/tableContextMenu.d.ts.map +1 -1
- package/dist/Table/tableContextMenu.js +2 -1
- package/dist/Table/types.d.ts +11 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +10 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -6
- package/dist/TextInput/TextInput.d.ts +10 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +13 -19
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +32 -26
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +14 -17
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -3
- package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
- package/dist/Timestamp/TimestampHoverCard.js +16 -34
- package/dist/Timestamp/formatInstant.d.ts +11 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +3 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -11
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +4 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +3 -19
- package/dist/TopNav/TopNav.d.ts.map +1 -1
- package/dist/TopNav/TopNav.js +6 -5
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +54 -16
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -9
- package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +146 -60
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +83 -38
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +13 -0
- package/dist/TreeList/TreeListBranches.d.ts +1 -1
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +14 -4
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +57 -30
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -8
- package/dist/astryx.css +84 -96
- package/dist/astryx.umd.js +56 -56
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/containerReveal.stylex.d.ts +61 -0
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
- package/dist/hooks/containerReveal.stylex.js +63 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useClipboard.d.ts +59 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +106 -0
- package/dist/hooks/useContainerReveal.d.ts +14 -8
- package/dist/hooks/useContainerReveal.d.ts.map +1 -1
- package/dist/hooks/useContainerReveal.js +28 -69
- package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
- package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
- package/dist/hooks/useIndicatorFocusRing.js +96 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +17 -4
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +12 -2
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +33 -18
- package/dist/hooks/useStreamingText.d.ts +18 -3
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +47 -7
- package/dist/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +9 -3
- package/dist/hooks/useTypeahead.d.ts +3 -2
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +19 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +18 -2
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +10 -1
- package/dist/theme/derivedVarRegistry.d.ts +8 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +14 -13
- package/dist/theme/expandColorScale.d.ts +3 -1
- package/dist/theme/expandColorScale.d.ts.map +1 -1
- package/dist/theme/expandColorScale.js +17 -7
- package/dist/theme/expandTypeScale.d.ts.map +1 -1
- package/dist/theme/expandTypeScale.js +17 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +11 -0
- package/dist/theme/index.d.ts +2 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +23 -0
- package/dist/utils/focusOutline.stylex.d.ts +122 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
- package/dist/utils/focusOutline.stylex.js +143 -0
- package/dist/utils/focusReturn.d.ts +24 -0
- package/dist/utils/focusReturn.d.ts.map +1 -0
- package/dist/utils/focusReturn.js +29 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -1
- package/dist/utils/mergeRefs.d.ts.map +1 -1
- package/dist/utils/mergeRefs.js +7 -5
- package/dist/utils/rtlStyles.d.ts +2 -2
- package/dist/utils/rtlStyles.js +2 -2
- package/dist/utils/themeProps.d.ts +20 -1
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +8 -2
- package/locales/en.json +52 -0
- package/locales/pseudo.json +39 -0
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
- package/src/AlertDialog/AlertDialog.test.tsx +208 -1
- package/src/AlertDialog/AlertDialog.tsx +21 -3
- package/src/AppShell/AppShell.doc.mjs +11 -0
- package/src/AppShell/AppShell.test.tsx +139 -0
- package/src/AppShell/AppShell.tsx +32 -22
- package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
- package/src/AspectRatio/AspectRatio.test.tsx +30 -0
- package/src/AspectRatio/AspectRatio.tsx +13 -0
- package/src/Avatar/Avatar.doc.mjs +2 -13
- package/src/Avatar/Avatar.test.tsx +33 -8
- package/src/Avatar/Avatar.tsx +52 -50
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
- package/src/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +33 -11
- package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
- package/src/Breadcrumbs/index.ts +5 -1
- package/src/Button/Button.doc.mjs +2 -2
- package/src/Button/Button.tsx +22 -41
- package/src/Calendar/Calendar.tsx +2 -1
- package/src/Calendar/styles.ts +0 -8
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.tsx +10 -6
- package/src/Chat/Chat.doc.mjs +2 -0
- package/src/Chat/ChatDictationButton.tsx +7 -1
- package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
- package/src/Chat/ChatSendButton.tsx +2 -3
- package/src/Chat/ChatToolCalls.test.tsx +35 -0
- package/src/Chat/ChatToolCalls.tsx +36 -16
- package/src/Chat/useTriggerMenu.tsx +2 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +120 -0
- package/src/CheckboxInput/CheckboxInput.tsx +45 -202
- package/src/ClickableCard/ClickableCard.tsx +6 -11
- package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
- package/src/CodeBlock/CodeBlock.test.tsx +91 -0
- package/src/CodeBlock/CodeBlock.tsx +57 -80
- package/src/Collapsible/Collapsible.tsx +22 -18
- package/src/CommandPalette/CommandPalette.test.tsx +29 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
- package/src/CommandPalette/CommandPaletteList.tsx +2 -2
- package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +73 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -28
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.test.tsx +41 -0
- package/src/ContextMenu/ContextMenu.tsx +3 -3
- package/src/ContextMenu/index.ts +5 -1
- package/src/DateInput/DateInput.doc.mjs +18 -3
- package/src/DateInput/DateInput.test.tsx +112 -11
- package/src/DateInput/DateInput.tsx +44 -25
- package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
- package/src/DateRangeInput/DateRangeInput.tsx +27 -21
- package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +154 -1
- package/src/DateTimeInput/DateTimeInput.tsx +58 -17
- package/src/Dialog/Dialog.tsx +2 -9
- package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
- package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
- package/src/DropdownMenu/DropdownMenu.tsx +113 -52
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
- package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
- package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
- package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
- package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
- package/src/DropdownMenu/index.ts +8 -1
- package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
- package/src/EmptyState/EmptyState.doc.mjs +4 -0
- package/src/EmptyState/EmptyState.test.tsx +62 -0
- package/src/EmptyState/EmptyState.tsx +16 -6
- package/src/Field/Field.doc.mjs +1 -0
- package/src/Field/InputClearButton.test.tsx +117 -0
- package/src/Field/InputClearButton.tsx +30 -3
- package/src/FileInput/FileInput.tsx +21 -8
- package/src/HoverCard/useHoverCard.tsx +2 -23
- package/src/Icon/Icon.doc.mjs +2 -1
- package/src/Indicator/CheckIndicator.tsx +174 -0
- package/src/Indicator/CheckboxIndicator.tsx +257 -0
- package/src/Indicator/Indicator.doc.mjs +344 -0
- package/src/Indicator/Indicator.test.tsx +393 -0
- package/src/Indicator/RadioIndicator.tsx +206 -0
- package/src/Indicator/index.ts +46 -0
- package/src/Indicator/indicator.markers.stylex.ts +19 -0
- package/src/Indicator/indicatorRegistry.test.tsx +106 -0
- package/src/Indicator/indicatorRegistry.ts +120 -0
- package/src/Indicator/types.ts +197 -0
- package/src/Indicator/useIndicator.ts +39 -0
- package/src/Item/Item.doc.mjs +1 -1
- package/src/Item/Item.tsx +7 -14
- package/src/Layer/useLayer.doc.mjs +2 -2
- package/src/Layer/useLayer.test.tsx +85 -0
- package/src/Layer/useLayer.tsx +39 -1
- package/src/Lightbox/Lightbox.doc.mjs +1 -1
- package/src/Lightbox/Lightbox.tsx +45 -49
- package/src/Link/Link.tsx +4 -11
- package/src/MobileNav/MobileNav.tsx +3 -3
- package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
- package/src/MoreMenu/MoreMenu.test.tsx +68 -1
- package/src/MoreMenu/MoreMenu.tsx +19 -0
- package/src/MultiSelector/MultiSelector.doc.mjs +16 -1
- package/src/MultiSelector/MultiSelector.test.tsx +259 -16
- package/src/MultiSelector/MultiSelector.tsx +144 -121
- package/src/NumberInput/NumberInput.doc.mjs +265 -50
- package/src/NumberInput/NumberInput.test.tsx +726 -21
- package/src/NumberInput/NumberInput.tsx +353 -59
- package/src/Outline/Outline.tsx +2 -5
- package/src/Pagination/Pagination.doc.mjs +1 -1
- package/src/Pagination/Pagination.test.tsx +22 -7
- package/src/Pagination/Pagination.tsx +38 -35
- package/src/Popover/Popover.doc.mjs +2 -0
- package/src/Popover/Popover.tsx +6 -7
- package/src/Popover/usePopover.tsx +37 -4
- package/src/PowerSearch/PowerSearch.tsx +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
- package/src/ProgressBar/ProgressBar.test.tsx +224 -1
- package/src/ProgressBar/ProgressBar.tsx +126 -30
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioListItem.tsx +31 -130
- package/src/Resizable/ResizeHandle.tsx +2 -9
- package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
- package/src/SelectableCard/SelectableCard.tsx +4 -9
- package/src/Selector/Selector.doc.mjs +15 -4
- package/src/Selector/Selector.test.tsx +1234 -98
- package/src/Selector/Selector.tsx +254 -126
- package/src/Selector/hooks.ts +77 -50
- package/src/SideNav/SideNav.test.tsx +46 -0
- package/src/SideNav/SideNav.tsx +1 -0
- package/src/SideNav/SideNavCollapseButton.tsx +15 -10
- package/src/SideNav/SideNavHeading.tsx +48 -10
- package/src/SideNav/SideNavItem.tsx +20 -12
- package/src/Slider/Slider.tsx +2 -11
- package/src/Stack/Stack.doc.mjs +110 -0
- package/src/StatusDot/StatusDot.doc.mjs +12 -3
- package/src/Switch/Switch.test.tsx +32 -0
- package/src/Switch/Switch.tsx +18 -10
- package/src/TabList/Tab.tsx +2 -9
- package/src/TabList/TabMenu.tsx +14 -21
- package/src/Table/BaseTable.tsx +11 -0
- package/src/Table/Table.test.tsx +31 -0
- package/src/Table/TableRow.tsx +6 -0
- package/src/Table/index.ts +1 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
- package/src/Table/plugins/rowExpansion/index.ts +1 -4
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
- package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
- package/src/Table/tableContextMenu.test.tsx +27 -0
- package/src/Table/tableContextMenu.tsx +1 -0
- package/src/Table/types.ts +11 -0
- package/src/Table/useTableGroupedRows.doc.mjs +1 -1
- package/src/Table/useTableRowExpansion.doc.mjs +43 -66
- package/src/TextArea/TextArea.doc.mjs +42 -2
- package/src/TextArea/TextArea.test.tsx +219 -0
- package/src/TextArea/TextArea.tsx +34 -7
- package/src/TextInput/TextInput.doc.mjs +18 -2
- package/src/TextInput/TextInput.test.tsx +189 -0
- package/src/TextInput/TextInput.tsx +25 -31
- package/src/Thumbnail/Thumbnail.tsx +2 -9
- package/src/TimeInput/TimeInput.doc.mjs +2 -2
- package/src/TimeInput/TimeInput.test.tsx +84 -3
- package/src/TimeInput/TimeInput.tsx +26 -28
- package/src/Timestamp/Timestamp.doc.mjs +4 -3
- package/src/Timestamp/Timestamp.test.tsx +91 -14
- package/src/Timestamp/Timestamp.tsx +14 -2
- package/src/Timestamp/TimestampHoverCard.tsx +13 -35
- package/src/Timestamp/formatInstant.ts +16 -1
- package/src/Token/Token.tsx +5 -28
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.test.tsx +45 -3
- package/src/Tokenizer/Tokenizer.tsx +10 -2
- package/src/Tooltip/useTooltip.tsx +2 -23
- package/src/TopNav/TopNav.tsx +1 -3
- package/src/TopNav/TopNavHeading.tsx +42 -13
- package/src/TopNav/TopNavItem.tsx +3 -21
- package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
- package/src/TopNav/TopNavMegaMenu.tsx +118 -53
- package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
- package/src/TopNav/TopNavMenu.tsx +34 -37
- package/src/TreeList/TreeList.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +208 -8
- package/src/TreeList/TreeList.tsx +22 -0
- package/src/TreeList/TreeListBranches.tsx +25 -2
- package/src/TreeList/TreeListItem.tsx +89 -52
- package/src/Typeahead/BaseTypeahead.tsx +19 -6
- package/src/Typeahead/Typeahead.doc.mjs +1 -0
- package/src/Typeahead/Typeahead.test.tsx +76 -3
- package/src/hooks/containerReveal.stylex.ts +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useClipboard.doc.mjs +87 -0
- package/src/hooks/useClipboard.test.tsx +151 -0
- package/src/hooks/useClipboard.ts +135 -0
- package/src/hooks/useContainerReveal.doc.mjs +7 -7
- package/src/hooks/useContainerReveal.test.tsx +42 -62
- package/src/hooks/useContainerReveal.ts +36 -91
- package/src/hooks/useImageMode.test.ts +1 -1
- package/src/hooks/useIndicatorFocusRing.tsx +120 -0
- package/src/hooks/useInputStatusIcon.tsx +8 -8
- package/src/hooks/useLongPress.test.tsx +18 -0
- package/src/hooks/useLongPress.ts +12 -2
- package/src/hooks/useScrollLock.test.ts +72 -0
- package/src/hooks/useScrollLock.ts +51 -19
- package/src/hooks/useStreamingText.test.ts +46 -1
- package/src/hooks/useStreamingText.ts +49 -7
- package/src/hooks/useTreeFocus.test.tsx +50 -0
- package/src/hooks/useTreeFocus.ts +14 -3
- package/src/hooks/useTypeahead.test.tsx +150 -0
- package/src/hooks/useTypeahead.ts +24 -9
- package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
- package/src/index.ts +1 -0
- package/src/theme/defineTheme.ts +27 -0
- package/src/theme/derivedVarRegistry.test.ts +21 -1
- package/src/theme/derivedVarRegistry.ts +19 -6
- package/src/theme/expandColorScale.test.ts +14 -0
- package/src/theme/expandColorScale.ts +24 -9
- package/src/theme/expandTypeScale.test.ts +43 -0
- package/src/theme/expandTypeScale.ts +17 -0
- package/src/theme/generateThemeRules.test.ts +78 -20
- package/src/theme/generateThemeRules.ts +11 -0
- package/src/theme/index.ts +15 -0
- package/src/theme/tokens.stylex.ts +18 -0
- package/src/theme/tokens.test.ts +37 -0
- package/src/utils/focusOutline.stylex.ts +177 -0
- package/src/utils/focusReturn.test.ts +42 -0
- package/src/utils/focusReturn.ts +31 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/mergeRefs.test.ts +48 -0
- package/src/utils/mergeRefs.ts +12 -6
- package/src/utils/rtlStyles.ts +2 -2
- package/src/utils/themeProps.ts +26 -4
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
- package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
- package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
- package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
- package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
- package/dist/RadioList/radio.markers.stylex.js +0 -12
- package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
- package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
- package/dist/hooks/containerReveal.pool.stylex.js +0 -292
- package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
- package/src/RadioList/radio.markers.stylex.ts +0 -10
- package/src/hooks/containerReveal.pool.stylex.ts +0 -571
|
@@ -0,0 +1,173 @@
|
|
|
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 "../theme/tokens.stylex.js";
|
|
13
|
+
import { borderVars, colorVars, durationVars, easeVars, radiusVars } from "../theme/tokens.stylex.js";
|
|
14
|
+
import { isRenderable, mergeProps, themeProps } from "../utils/index.js";
|
|
15
|
+
import "./indicator.markers.stylex.js";
|
|
16
|
+
import { indicatorScope } from "./indicator.markers.stylex.js";
|
|
17
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
const styles = {
|
|
19
|
+
box: {
|
|
20
|
+
kB7OPa: "x9f619",
|
|
21
|
+
k1xSpc: "x78zum5",
|
|
22
|
+
kGNEyG: "x6s0dn4",
|
|
23
|
+
kjj79g: "xl56j7k",
|
|
24
|
+
kmuXW: "x2lah0s",
|
|
25
|
+
kMzoRj: "x1litavf",
|
|
26
|
+
ksu8eU: "x1y0btm7",
|
|
27
|
+
kaIpWk: "xx3sua9",
|
|
28
|
+
k1ekBW: "xts7igz",
|
|
29
|
+
kIyJzY: "xuedmi6 x12w9bfk",
|
|
30
|
+
kAMwcw: "xlr8y92",
|
|
31
|
+
$$css: true
|
|
32
|
+
},
|
|
33
|
+
unchecked: {
|
|
34
|
+
kMwMTN: "xqwr325",
|
|
35
|
+
kVAM5u: "xvy26l8 xilc7fp",
|
|
36
|
+
kWkggS: "x10xzikg xeultfy",
|
|
37
|
+
$$css: true
|
|
38
|
+
},
|
|
39
|
+
checked: {
|
|
40
|
+
kMwMTN: "x17wrial",
|
|
41
|
+
kVAM5u: "xad5do x1ozl1p1",
|
|
42
|
+
kWkggS: "x1ewilqj x17srpfb",
|
|
43
|
+
$$css: true
|
|
44
|
+
},
|
|
45
|
+
disabled: {
|
|
46
|
+
kSiTet: "xbyyjgo",
|
|
47
|
+
kVAM5u: "x14i3s5s x61roa7",
|
|
48
|
+
$$css: true
|
|
49
|
+
},
|
|
50
|
+
disabledUnchecked: {
|
|
51
|
+
kWkggS: "xwmxj5m xqxnq6d",
|
|
52
|
+
$$css: true
|
|
53
|
+
},
|
|
54
|
+
checkmark: {
|
|
55
|
+
k1xSpc: "x1s85apg",
|
|
56
|
+
kMwMTN: "x17wrial xs5hli",
|
|
57
|
+
$$css: true
|
|
58
|
+
},
|
|
59
|
+
checkmarkVisible: {
|
|
60
|
+
k1xSpc: "x1lliihq",
|
|
61
|
+
$$css: true
|
|
62
|
+
},
|
|
63
|
+
indeterminateMark: {
|
|
64
|
+
k1xSpc: "x1s85apg",
|
|
65
|
+
kWkggS: "x1azo05 xwvh9j7",
|
|
66
|
+
kaIpWk: "xjspbzw",
|
|
67
|
+
$$css: true
|
|
68
|
+
},
|
|
69
|
+
indeterminateMarkVisible: {
|
|
70
|
+
k1xSpc: "x1lliihq",
|
|
71
|
+
$$css: true
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const boxSizeStyles = {
|
|
75
|
+
sm: {
|
|
76
|
+
kzqmXN: "xw4jnvo",
|
|
77
|
+
kZKoxP: "x1qx5ct2",
|
|
78
|
+
$$css: true
|
|
79
|
+
},
|
|
80
|
+
md: {
|
|
81
|
+
kzqmXN: "xvy4d1p",
|
|
82
|
+
kZKoxP: "xxk0z11",
|
|
83
|
+
$$css: true
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const checkmarkSizeStyles = {
|
|
87
|
+
sm: {
|
|
88
|
+
kzqmXN: "xsmyaan",
|
|
89
|
+
kZKoxP: "x1kpxq89",
|
|
90
|
+
$$css: true
|
|
91
|
+
},
|
|
92
|
+
md: {
|
|
93
|
+
kzqmXN: "x6jxa94",
|
|
94
|
+
kZKoxP: "x1v9usgg",
|
|
95
|
+
$$css: true
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const indeterminateSizeStyles = {
|
|
99
|
+
sm: {
|
|
100
|
+
kzqmXN: "x1fsd2vl",
|
|
101
|
+
kZKoxP: "x36qwtl",
|
|
102
|
+
$$css: true
|
|
103
|
+
},
|
|
104
|
+
md: {
|
|
105
|
+
kzqmXN: "xsmyaan",
|
|
106
|
+
kZKoxP: "x36qwtl",
|
|
107
|
+
$$css: true
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The default checkbox visual: a square box with a checkmark or an
|
|
113
|
+
* indeterminate bar.
|
|
114
|
+
*
|
|
115
|
+
* Decorative and non-interactive — it renders `aria-hidden` and owns no input,
|
|
116
|
+
* role, or focus behavior. The focus ring lives on the owner's control wrapper
|
|
117
|
+
* (see CheckboxInput), so a theme that replaces this component keeps a visible
|
|
118
|
+
* focus indicator for free. Themes replace it wholesale through
|
|
119
|
+
* `defineTheme({indicators: {checkbox: MyCheckbox}})`, or restyle it through
|
|
120
|
+
* the `checkbox` theme target like any other component.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```
|
|
124
|
+
* <CheckboxIndicator state="indeterminate" size="sm" />
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export function CheckboxIndicator({
|
|
128
|
+
state,
|
|
129
|
+
size = 'md',
|
|
130
|
+
isDisabled = false,
|
|
131
|
+
children,
|
|
132
|
+
ref,
|
|
133
|
+
className,
|
|
134
|
+
style,
|
|
135
|
+
xstyle,
|
|
136
|
+
...rest
|
|
137
|
+
}) {
|
|
138
|
+
const isChecked = state === 'checked';
|
|
139
|
+
const isIndeterminate = state === 'indeterminate';
|
|
140
|
+
const isCheckedOrIndeterminate = isChecked || isIndeterminate;
|
|
141
|
+
return /*#__PURE__*/_jsx("span", {
|
|
142
|
+
...rest,
|
|
143
|
+
ref: ref,
|
|
144
|
+
"aria-hidden": "true",
|
|
145
|
+
...mergeProps(themeProps('checkbox-indicator', {
|
|
146
|
+
size,
|
|
147
|
+
checked: isChecked ? 'checked' : isIndeterminate ? 'indeterminate' : null,
|
|
148
|
+
disabled: isDisabled ? 'disabled' : null
|
|
149
|
+
},
|
|
150
|
+
// `checkbox` was the target before indicators existed; themes
|
|
151
|
+
// styling it keep working until the next major.
|
|
152
|
+
{
|
|
153
|
+
legacyNames: ['checkbox']
|
|
154
|
+
}), stylex.props(styles.box, boxSizeStyles[size], isCheckedOrIndeterminate ? styles.checked : styles.unchecked, isDisabled && styles.disabled, isDisabled && !isCheckedOrIndeterminate && styles.disabledUnchecked, xstyle), className, style),
|
|
155
|
+
children: isRenderable(children) ? children : /*#__PURE__*/_jsxs(_Fragment, {
|
|
156
|
+
children: [/*#__PURE__*/_jsx("svg", {
|
|
157
|
+
viewBox: "0 0 10 10",
|
|
158
|
+
...stylex.props(styles.checkmark, checkmarkSizeStyles[size], isChecked && styles.checkmarkVisible),
|
|
159
|
+
children: /*#__PURE__*/_jsx("path", {
|
|
160
|
+
d: "M8.5 2.5L4 7.5L1.5 5",
|
|
161
|
+
stroke: "currentColor",
|
|
162
|
+
strokeWidth: "1.5",
|
|
163
|
+
fill: "none",
|
|
164
|
+
strokeLinecap: "round",
|
|
165
|
+
strokeLinejoin: "round"
|
|
166
|
+
})
|
|
167
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
168
|
+
...stylex.props(styles.indeterminateMark, indeterminateSizeStyles[size], isIndeterminate && styles.indeterminateMarkVisible)
|
|
169
|
+
})]
|
|
170
|
+
})
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
CheckboxIndicator.displayName = 'CheckboxIndicator';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IndicatorProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The default radio visual: a circle with a filled inner dot when selected.
|
|
4
|
+
*
|
|
5
|
+
* Decorative and non-interactive — it renders `aria-hidden` and owns no input,
|
|
6
|
+
* role, or focus behavior. Themes replace it wholesale through
|
|
7
|
+
* `defineTheme({indicators: {radio: MyRadio}})`, or restyle it through the
|
|
8
|
+
* `radio` / `radio-dot` theme targets like any other component.
|
|
9
|
+
*
|
|
10
|
+
* Unlike an icon, a radio draws in *both* states — an empty circle when
|
|
11
|
+
* unchecked. That is what makes it usable as a selection indicator in
|
|
12
|
+
* components whose default is "a checkmark when selected, nothing otherwise".
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```
|
|
16
|
+
* <RadioIndicator state="checked" size="md" />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function RadioIndicator({ state, size, isDisabled, children, ref, className, style, xstyle, ...rest }: IndicatorProps<'singleSelection'>): import("react").JSX.Element;
|
|
20
|
+
export declare namespace RadioIndicator {
|
|
21
|
+
var displayName: string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=RadioIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioIndicator.d.ts","sourceRoot":"","sources":["../../src/Indicator/RadioIndicator.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAuG5C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAW,EACX,UAAkB,EAClB,QAAQ,EACR,GAAG,EACH,SAAS,EACT,KAAK,EACL,MAAM,EACN,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,iBAAiB,CAAC,+BAqDnC;yBA/De,cAAc"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file RadioIndicator.tsx
|
|
5
|
+
* @input Indicator state props
|
|
6
|
+
* @output Exports RadioIndicator — the default radio selection visual
|
|
7
|
+
* @position Decorative radio visual shared by RadioList, decorative menu
|
|
8
|
+
* markers, and any selection slot themed to use a radio
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import * as stylex from '@stylexjs/stylex';
|
|
12
|
+
import "../theme/tokens.stylex.js";
|
|
13
|
+
import { borderVars, colorVars, durationVars, easeVars, radiusVars } from "../theme/tokens.stylex.js";
|
|
14
|
+
import { isRenderable, mergeProps, themeProps } from "../utils/index.js";
|
|
15
|
+
import "./indicator.markers.stylex.js";
|
|
16
|
+
import { indicatorScope } from "./indicator.markers.stylex.js";
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
const styles = {
|
|
19
|
+
circle: {
|
|
20
|
+
kB7OPa: "x9f619",
|
|
21
|
+
k1xSpc: "x78zum5",
|
|
22
|
+
kGNEyG: "x6s0dn4",
|
|
23
|
+
kjj79g: "xl56j7k",
|
|
24
|
+
kmuXW: "x2lah0s",
|
|
25
|
+
kMzoRj: "x1litavf",
|
|
26
|
+
ksu8eU: "x1y0btm7",
|
|
27
|
+
kaIpWk: "xjspbzw",
|
|
28
|
+
k1ekBW: "xts7igz",
|
|
29
|
+
kIyJzY: "xuedmi6 x12w9bfk",
|
|
30
|
+
kAMwcw: "xlr8y92",
|
|
31
|
+
$$css: true
|
|
32
|
+
},
|
|
33
|
+
unchecked: {
|
|
34
|
+
kVAM5u: "xvy26l8 xilc7fp",
|
|
35
|
+
kWkggS: "x10xzikg xeultfy",
|
|
36
|
+
$$css: true
|
|
37
|
+
},
|
|
38
|
+
checked: {
|
|
39
|
+
kVAM5u: "xad5do x1ozl1p1",
|
|
40
|
+
kWkggS: "x1ewilqj x17srpfb",
|
|
41
|
+
$$css: true
|
|
42
|
+
},
|
|
43
|
+
disabled: {
|
|
44
|
+
kSiTet: "xbyyjgo",
|
|
45
|
+
kVAM5u: "x14i3s5s x61roa7",
|
|
46
|
+
$$css: true
|
|
47
|
+
},
|
|
48
|
+
disabledUnchecked: {
|
|
49
|
+
kWkggS: "xwmxj5m xqxnq6d",
|
|
50
|
+
$$css: true
|
|
51
|
+
},
|
|
52
|
+
dot: {
|
|
53
|
+
kaIpWk: "xjspbzw",
|
|
54
|
+
kWkggS: "x1azo05 xwvh9j7",
|
|
55
|
+
$$css: true
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const circleSizeStyles = {
|
|
59
|
+
sm: {
|
|
60
|
+
kzqmXN: "xw4jnvo",
|
|
61
|
+
kZKoxP: "x1qx5ct2",
|
|
62
|
+
$$css: true
|
|
63
|
+
},
|
|
64
|
+
md: {
|
|
65
|
+
kzqmXN: "xvy4d1p",
|
|
66
|
+
kZKoxP: "xxk0z11",
|
|
67
|
+
$$css: true
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const dotSizeStyles = {
|
|
71
|
+
sm: {
|
|
72
|
+
kzqmXN: "x1xc55vz",
|
|
73
|
+
kZKoxP: "xdk7pt",
|
|
74
|
+
$$css: true
|
|
75
|
+
},
|
|
76
|
+
md: {
|
|
77
|
+
kzqmXN: "x1fsd2vl",
|
|
78
|
+
kZKoxP: "x170jfvy",
|
|
79
|
+
$$css: true
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The default radio visual: a circle with a filled inner dot when selected.
|
|
85
|
+
*
|
|
86
|
+
* Decorative and non-interactive — it renders `aria-hidden` and owns no input,
|
|
87
|
+
* role, or focus behavior. Themes replace it wholesale through
|
|
88
|
+
* `defineTheme({indicators: {radio: MyRadio}})`, or restyle it through the
|
|
89
|
+
* `radio` / `radio-dot` theme targets like any other component.
|
|
90
|
+
*
|
|
91
|
+
* Unlike an icon, a radio draws in *both* states — an empty circle when
|
|
92
|
+
* unchecked. That is what makes it usable as a selection indicator in
|
|
93
|
+
* components whose default is "a checkmark when selected, nothing otherwise".
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```
|
|
97
|
+
* <RadioIndicator state="checked" size="md" />
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function RadioIndicator({
|
|
101
|
+
state,
|
|
102
|
+
size = 'md',
|
|
103
|
+
isDisabled = false,
|
|
104
|
+
children,
|
|
105
|
+
ref,
|
|
106
|
+
className,
|
|
107
|
+
style,
|
|
108
|
+
xstyle,
|
|
109
|
+
...rest
|
|
110
|
+
}) {
|
|
111
|
+
// A radio has no partial state; anything other than unchecked reads as
|
|
112
|
+
// selected.
|
|
113
|
+
const isChecked = state !== 'unchecked';
|
|
114
|
+
return /*#__PURE__*/_jsx("span", {
|
|
115
|
+
...rest,
|
|
116
|
+
ref: ref,
|
|
117
|
+
"aria-hidden": "true",
|
|
118
|
+
...mergeProps(themeProps('radio-indicator', {
|
|
119
|
+
size,
|
|
120
|
+
checked: isChecked ? 'checked' : null,
|
|
121
|
+
disabled: isDisabled ? 'disabled' : null
|
|
122
|
+
},
|
|
123
|
+
// `radio` was the target before indicators existed; themes styling
|
|
124
|
+
// it keep working until the next major.
|
|
125
|
+
{
|
|
126
|
+
legacyNames: ['radio']
|
|
127
|
+
}), stylex.props(styles.circle, circleSizeStyles[size], isChecked ? styles.checked : styles.unchecked, isDisabled && styles.disabled, isDisabled && !isChecked && styles.disabledUnchecked, xstyle), className, style),
|
|
128
|
+
children: isRenderable(children) ? children : isChecked && /*#__PURE__*/_jsx("span", {
|
|
129
|
+
...mergeProps(themeProps('radio-indicator-dot', {
|
|
130
|
+
size
|
|
131
|
+
}, {
|
|
132
|
+
legacyNames: ['radio-dot']
|
|
133
|
+
}), stylex.props(styles.dot, dotSizeStyles[size]))
|
|
134
|
+
})
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
RadioIndicator.displayName = 'RadioIndicator';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @input None (re-export barrel)
|
|
4
|
+
* @output Public indicator surface: components, registry, hook, types
|
|
5
|
+
* @position Entry point for the stateful control-visual layer
|
|
6
|
+
*
|
|
7
|
+
* Indicators are the componentized form of stateful control visuals — the
|
|
8
|
+
* checkbox box, the radio circle, the mark on a chosen option. They are
|
|
9
|
+
* decorative: the owning component keeps the role, state, and focus behavior,
|
|
10
|
+
* while the indicator turns state into a picture.
|
|
11
|
+
*
|
|
12
|
+
* That makes them themeable through CSS targets like any other component, and
|
|
13
|
+
* replaceable wholesale by name through `defineTheme({indicators})` — replace
|
|
14
|
+
* `check` and every single-selection mark in the app follows.
|
|
15
|
+
*/
|
|
16
|
+
export { CheckboxIndicator } from './CheckboxIndicator';
|
|
17
|
+
export { CheckIndicator } from './CheckIndicator';
|
|
18
|
+
export { RadioIndicator } from './RadioIndicator';
|
|
19
|
+
export { defaultIndicators, getIndicator } from './indicatorRegistry';
|
|
20
|
+
export type { CoreIndicatorName, IndicatorRegistrySource, } from './indicatorRegistry';
|
|
21
|
+
export { useIndicator } from './useIndicator';
|
|
22
|
+
export { indicatorScope } from './indicator.markers.stylex';
|
|
23
|
+
export type { IndicatorComponent, IndicatorFamily, IndicatorFamilyMap, IndicatorMap, IndicatorName, IndicatorNameOfFamily, IndicatorPosition, IndicatorProps, IndicatorRegistry, IndicatorSize, IndicatorState, } from './types';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Indicator/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE1D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file index.ts
|
|
5
|
+
* @input None (re-export barrel)
|
|
6
|
+
* @output Public indicator surface: components, registry, hook, types
|
|
7
|
+
* @position Entry point for the stateful control-visual layer
|
|
8
|
+
*
|
|
9
|
+
* Indicators are the componentized form of stateful control visuals — the
|
|
10
|
+
* checkbox box, the radio circle, the mark on a chosen option. They are
|
|
11
|
+
* decorative: the owning component keeps the role, state, and focus behavior,
|
|
12
|
+
* while the indicator turns state into a picture.
|
|
13
|
+
*
|
|
14
|
+
* That makes them themeable through CSS targets like any other component, and
|
|
15
|
+
* replaceable wholesale by name through `defineTheme({indicators})` — replace
|
|
16
|
+
* `check` and every single-selection mark in the app follows.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export { CheckboxIndicator } from "./CheckboxIndicator.js";
|
|
20
|
+
export { CheckIndicator } from "./CheckIndicator.js";
|
|
21
|
+
export { RadioIndicator } from "./RadioIndicator.js";
|
|
22
|
+
|
|
23
|
+
// Registry (RSC-compatible, no 'use client')
|
|
24
|
+
export { defaultIndicators, getIndicator } from "./indicatorRegistry.js";
|
|
25
|
+
export { useIndicator } from "./useIndicator.js";
|
|
26
|
+
export { indicatorScope } from "./indicator.markers.stylex.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as stylex from '@stylexjs/stylex';
|
|
2
|
+
/**
|
|
3
|
+
* Scoped marker for indicator ancestor selectors.
|
|
4
|
+
*
|
|
5
|
+
* An owner (CheckboxInput's row, RadioListItem's row) applies this marker to
|
|
6
|
+
* the element whose hover and focus should drive the indicator's appearance.
|
|
7
|
+
* The indicator reads it through `stylex.when.ancestor()`, so interaction
|
|
8
|
+
* state stays in CSS instead of being threaded through React props — and
|
|
9
|
+
* owners that should *not* tint their indicator on hover (decorative menu
|
|
10
|
+
* markers, listbox options) simply don't apply the marker.
|
|
11
|
+
*
|
|
12
|
+
* Owners apply it only while enabled, so disabled controls get no hover
|
|
13
|
+
* feedback.
|
|
14
|
+
*/
|
|
15
|
+
export declare const indicatorScope: ReturnType<typeof stylex.defineMarker>;
|
|
16
|
+
//# sourceMappingURL=indicator.markers.stylex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indicator.markers.stylex.d.ts","sourceRoot":"","sources":["../../src/Indicator/indicator.markers.stylex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,YAAY,CAC3C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import * as stylex from '@stylexjs/stylex';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Scoped marker for indicator ancestor selectors.
|
|
7
|
+
*
|
|
8
|
+
* An owner (CheckboxInput's row, RadioListItem's row) applies this marker to
|
|
9
|
+
* the element whose hover and focus should drive the indicator's appearance.
|
|
10
|
+
* The indicator reads it through `stylex.when.ancestor()`, so interaction
|
|
11
|
+
* state stays in CSS instead of being threaded through React props — and
|
|
12
|
+
* owners that should *not* tint their indicator on hover (decorative menu
|
|
13
|
+
* markers, listbox options) simply don't apply the marker.
|
|
14
|
+
*
|
|
15
|
+
* Owners apply it only while enabled, so disabled controls get no hover
|
|
16
|
+
* feedback.
|
|
17
|
+
*/
|
|
18
|
+
export const indicatorScope = {
|
|
19
|
+
x1odsvnm: "x1odsvnm",
|
|
20
|
+
$$css: true
|
|
21
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file indicatorRegistry.ts
|
|
3
|
+
* @input Theme source and indicator name
|
|
4
|
+
* @output Exports the default indicator map and getIndicator resolution
|
|
5
|
+
* @position Server-safe indicator resolver; no 'use client' so it is
|
|
6
|
+
* importable from RSC
|
|
7
|
+
*
|
|
8
|
+
* Two name spaces meet here, and keeping them apart is the whole design:
|
|
9
|
+
*
|
|
10
|
+
* - {@link CoreIndicatorName} — the indicators Astryx itself ships. Closed,
|
|
11
|
+
* and every one of them has a default, so resolving one always yields a
|
|
12
|
+
* component.
|
|
13
|
+
* - {@link IndicatorName} — every indicator name that exists, including the
|
|
14
|
+
* ones other packages add by augmenting `IndicatorMap`. Open, and core has
|
|
15
|
+
* no default for a name it has never heard of.
|
|
16
|
+
*
|
|
17
|
+
* `getIndicator` is overloaded along that seam: a core name resolves to a
|
|
18
|
+
* component, an augmented name resolves to a component *or* `undefined`, and
|
|
19
|
+
* the caller has to say what to do about it. Typing the map as total over the
|
|
20
|
+
* open union instead — which is what shipped in #4712 — made the compiler
|
|
21
|
+
* promise a component for `getIndicator('brand-star')` and hand back
|
|
22
|
+
* `undefined` at runtime.
|
|
23
|
+
*/
|
|
24
|
+
import type { DefinedTheme } from '../theme/defineTheme';
|
|
25
|
+
import type { IndicatorComponent, IndicatorMap, IndicatorName } from './types';
|
|
26
|
+
/**
|
|
27
|
+
* The indicator names Astryx ships a default for.
|
|
28
|
+
*
|
|
29
|
+
* Written out rather than derived from {@link IndicatorMap}, because that
|
|
30
|
+
* interface is open to augmentation and this set is not: it is exactly what is
|
|
31
|
+
* in {@link defaultIndicators} below. `indicatorRegistry.test.tsx` pins the two
|
|
32
|
+
* together in both directions.
|
|
33
|
+
*/
|
|
34
|
+
export type CoreIndicatorName = 'check' | 'checkbox' | 'radio';
|
|
35
|
+
/**
|
|
36
|
+
* The indicators Astryx ships. A theme's `indicators` entries override these
|
|
37
|
+
* by name.
|
|
38
|
+
*
|
|
39
|
+
* Typed per family (rather than as one widened component type) so a default
|
|
40
|
+
* declared here has to accept the states its family passes — the same rule
|
|
41
|
+
* {@link IndicatorRegistry} holds replacements to.
|
|
42
|
+
*/
|
|
43
|
+
export declare const defaultIndicators: {
|
|
44
|
+
[N in CoreIndicatorName]: IndicatorComponent<IndicatorMap[N]>;
|
|
45
|
+
};
|
|
46
|
+
export type IndicatorRegistrySource = DefinedTheme | string | null | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve an indicator component by name, preferring the theme's override and
|
|
49
|
+
* falling back to the built-in indicator.
|
|
50
|
+
*
|
|
51
|
+
* Works in both server and client environments. Client components should use
|
|
52
|
+
* the {@link useIndicator} hook, which resolves against the nearest `<Theme>`.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```
|
|
56
|
+
* const Radio = getIndicator('radio', themeName);
|
|
57
|
+
* <Radio state="checked" />
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* For a name contributed by augmentation there is no built-in to fall back to,
|
|
61
|
+
* so the result is `undefined` unless a theme supplies one — the package that
|
|
62
|
+
* added the name owns its default:
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```
|
|
66
|
+
* const Star = getIndicator('brand-star', themeName) ?? BrandStar;
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function getIndicator<N extends CoreIndicatorName>(name: N, source?: IndicatorRegistrySource): IndicatorComponent<IndicatorMap[N]>;
|
|
70
|
+
export declare function getIndicator<N extends IndicatorName>(name: N, source?: IndicatorRegistrySource): IndicatorComponent<IndicatorMap[N]> | undefined;
|
|
71
|
+
//# sourceMappingURL=indicatorRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indicatorRegistry.d.ts","sourceRoot":"","sources":["../../src/Indicator/indicatorRegistry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAKvD,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EAEd,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE;KAC7B,CAAC,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAK9D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAe/E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,iBAAiB,EACtD,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,uBAAuB,GAC/B,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,uBAAuB,GAC/B,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file indicatorRegistry.ts
|
|
5
|
+
* @input Theme source and indicator name
|
|
6
|
+
* @output Exports the default indicator map and getIndicator resolution
|
|
7
|
+
* @position Server-safe indicator resolver; no 'use client' so it is
|
|
8
|
+
* importable from RSC
|
|
9
|
+
*
|
|
10
|
+
* Two name spaces meet here, and keeping them apart is the whole design:
|
|
11
|
+
*
|
|
12
|
+
* - {@link CoreIndicatorName} — the indicators Astryx itself ships. Closed,
|
|
13
|
+
* and every one of them has a default, so resolving one always yields a
|
|
14
|
+
* component.
|
|
15
|
+
* - {@link IndicatorName} — every indicator name that exists, including the
|
|
16
|
+
* ones other packages add by augmenting `IndicatorMap`. Open, and core has
|
|
17
|
+
* no default for a name it has never heard of.
|
|
18
|
+
*
|
|
19
|
+
* `getIndicator` is overloaded along that seam: a core name resolves to a
|
|
20
|
+
* component, an augmented name resolves to a component *or* `undefined`, and
|
|
21
|
+
* the caller has to say what to do about it. Typing the map as total over the
|
|
22
|
+
* open union instead — which is what shipped in #4712 — made the compiler
|
|
23
|
+
* promise a component for `getIndicator('brand-star')` and hand back
|
|
24
|
+
* `undefined` at runtime.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { getRegisteredTheme } from "../theme/themeRegistry.js";
|
|
28
|
+
import { CheckboxIndicator } from "./CheckboxIndicator.js";
|
|
29
|
+
import { CheckIndicator } from "./CheckIndicator.js";
|
|
30
|
+
import { RadioIndicator } from "./RadioIndicator.js";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The indicator names Astryx ships a default for.
|
|
34
|
+
*
|
|
35
|
+
* Written out rather than derived from {@link IndicatorMap}, because that
|
|
36
|
+
* interface is open to augmentation and this set is not: it is exactly what is
|
|
37
|
+
* in {@link defaultIndicators} below. `indicatorRegistry.test.tsx` pins the two
|
|
38
|
+
* together in both directions.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The indicators Astryx ships. A theme's `indicators` entries override these
|
|
43
|
+
* by name.
|
|
44
|
+
*
|
|
45
|
+
* Typed per family (rather than as one widened component type) so a default
|
|
46
|
+
* declared here has to accept the states its family passes — the same rule
|
|
47
|
+
* {@link IndicatorRegistry} holds replacements to.
|
|
48
|
+
*/
|
|
49
|
+
export const defaultIndicators = {
|
|
50
|
+
check: CheckIndicator,
|
|
51
|
+
checkbox: CheckboxIndicator,
|
|
52
|
+
radio: RadioIndicator
|
|
53
|
+
};
|
|
54
|
+
function getTheme(source) {
|
|
55
|
+
if (source == null) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return typeof source === 'string' ? getRegisteredTheme(source) : source;
|
|
59
|
+
}
|
|
60
|
+
function getThemeIndicators(source) {
|
|
61
|
+
return getTheme(source)?.indicators ?? null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Resolve an indicator component by name, preferring the theme's override and
|
|
66
|
+
* falling back to the built-in indicator.
|
|
67
|
+
*
|
|
68
|
+
* Works in both server and client environments. Client components should use
|
|
69
|
+
* the {@link useIndicator} hook, which resolves against the nearest `<Theme>`.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```
|
|
73
|
+
* const Radio = getIndicator('radio', themeName);
|
|
74
|
+
* <Radio state="checked" />
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* For a name contributed by augmentation there is no built-in to fall back to,
|
|
78
|
+
* so the result is `undefined` unless a theme supplies one — the package that
|
|
79
|
+
* added the name owns its default:
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```
|
|
83
|
+
* const Star = getIndicator('brand-star', themeName) ?? BrandStar;
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
export function getIndicator(name, source) {
|
|
88
|
+
const override = getThemeIndicators(source)?.[name];
|
|
89
|
+
return override ??
|
|
90
|
+
// `name` may be an augmented one, which this map has no entry for — hence
|
|
91
|
+
// the `| undefined` the overloads expose to those callers.
|
|
92
|
+
defaultIndicators[name];
|
|
93
|
+
}
|