@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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file containerReveal.stylex.ts
|
|
3
|
+
* @input Uses StyleX, theme tokens
|
|
4
|
+
* @output The container style that publishes the reveal state, and the four
|
|
5
|
+
* content style blocks (reveal / conceal, each with a layout-preserved
|
|
6
|
+
* variant) that read it.
|
|
7
|
+
* @position Internal to useContainerReveal.
|
|
8
|
+
*
|
|
9
|
+
* HOW THE SCOPING WORKS: the container declares its own reveal state as
|
|
10
|
+
* inherited custom properties on itself, and content reads them. Because a
|
|
11
|
+
* nested container re-declares the same properties on itself, its subtree sees
|
|
12
|
+
* the inner value and never the ancestor's — nesting isolation falls out of the
|
|
13
|
+
* cascade, with one static style block for any number of containers.
|
|
14
|
+
*
|
|
15
|
+
* SYNC: When the block shape changes, update useContainerReveal.ts.
|
|
16
|
+
*/
|
|
17
|
+
import * as stylex from '@stylexjs/stylex';
|
|
18
|
+
export declare const styles: Readonly<{
|
|
19
|
+
readonly container: Readonly<{
|
|
20
|
+
readonly '--_reveal-opacity': stylex.StyleXClassNameFor<"--_reveal-opacity", 0 | 1 | {
|
|
21
|
+
readonly '@media (hover: hover)': 1;
|
|
22
|
+
}>;
|
|
23
|
+
readonly '--_reveal-position': stylex.StyleXClassNameFor<"--_reveal-position", "static" | "absolute" | {
|
|
24
|
+
readonly '@media (hover: hover)': "static";
|
|
25
|
+
}>;
|
|
26
|
+
readonly '--_reveal-delay': stylex.StyleXClassNameFor<"--_reveal-delay", string | {
|
|
27
|
+
readonly '@media (hover: hover)': "0s, 0s";
|
|
28
|
+
}>;
|
|
29
|
+
readonly '--_conceal-opacity': stylex.StyleXClassNameFor<"--_conceal-opacity", 1 | {
|
|
30
|
+
readonly '@media (hover: hover)': 0;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
readonly reveal: Readonly<{
|
|
34
|
+
readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity, position">;
|
|
35
|
+
readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", string>;
|
|
36
|
+
readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
|
|
37
|
+
readonly transitionBehavior: stylex.StyleXClassNameFor<"transitionBehavior", "allow-discrete">;
|
|
38
|
+
readonly transitionDelay: stylex.StyleXClassNameFor<"transitionDelay", "0s, 0s" | "var(--_reveal-delay, 0s, 0s)">;
|
|
39
|
+
readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_reveal-opacity, 1)">;
|
|
40
|
+
readonly position: stylex.StyleXClassNameFor<"position", "var(--_reveal-position, static)">;
|
|
41
|
+
}>;
|
|
42
|
+
readonly revealLayoutPreserved: Readonly<{
|
|
43
|
+
readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
|
|
44
|
+
readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
|
|
45
|
+
readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
|
|
46
|
+
readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_reveal-opacity, 1)">;
|
|
47
|
+
}>;
|
|
48
|
+
readonly conceal: Readonly<{
|
|
49
|
+
readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
|
|
50
|
+
readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
|
|
51
|
+
readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
|
|
52
|
+
readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_conceal-opacity, 1)">;
|
|
53
|
+
}>;
|
|
54
|
+
readonly concealLayoutPreserved: Readonly<{
|
|
55
|
+
readonly transitionProperty: stylex.StyleXClassNameFor<"transitionProperty", "opacity">;
|
|
56
|
+
readonly transitionDuration: stylex.StyleXClassNameFor<"transitionDuration", "175ms" | "0s">;
|
|
57
|
+
readonly transitionTimingFunction: stylex.StyleXClassNameFor<"transitionTimingFunction", "cubic-bezier(0.24, 1, 0.4, 1)">;
|
|
58
|
+
readonly opacity: stylex.StyleXClassNameFor<"opacity", "var(--_conceal-opacity, 1)">;
|
|
59
|
+
}>;
|
|
60
|
+
}>;
|
|
61
|
+
//# sourceMappingURL=containerReveal.stylex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerReveal.stylex.d.ts","sourceRoot":"","sources":["../../src/hooks/containerReveal.stylex.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAK3C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6EjB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file containerReveal.stylex.ts
|
|
5
|
+
* @input Uses StyleX, theme tokens
|
|
6
|
+
* @output The container style that publishes the reveal state, and the four
|
|
7
|
+
* content style blocks (reveal / conceal, each with a layout-preserved
|
|
8
|
+
* variant) that read it.
|
|
9
|
+
* @position Internal to useContainerReveal.
|
|
10
|
+
*
|
|
11
|
+
* HOW THE SCOPING WORKS: the container declares its own reveal state as
|
|
12
|
+
* inherited custom properties on itself, and content reads them. Because a
|
|
13
|
+
* nested container re-declares the same properties on itself, its subtree sees
|
|
14
|
+
* the inner value and never the ancestor's — nesting isolation falls out of the
|
|
15
|
+
* cascade, with one static style block for any number of containers.
|
|
16
|
+
*
|
|
17
|
+
* SYNC: When the block shape changes, update useContainerReveal.ts.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import * as stylex from '@stylexjs/stylex';
|
|
21
|
+
import "../theme/tokens.stylex.js";
|
|
22
|
+
import { durationVars, easeVars } from "../theme/tokens.stylex.js";
|
|
23
|
+
const REST_DELAY = '0s, ' + durationVars['--duration-fast'];
|
|
24
|
+
export const styles = {
|
|
25
|
+
container: {
|
|
26
|
+
"--_reveal-opacity": "xct0gwe x1wblmmc xi33vf3 xi7d7de",
|
|
27
|
+
"--_reveal-position": "xp0pj8v x106rhu xoa21yc xarvkxi",
|
|
28
|
+
"--_reveal-delay": "x1xiarpw xp1dr9k x1mjsb9v x1pn63d7",
|
|
29
|
+
"--_conceal-opacity": "x1kgmhs9 xb9fdgj",
|
|
30
|
+
$$css: true
|
|
31
|
+
},
|
|
32
|
+
reveal: {
|
|
33
|
+
k1ekBW: "x1n1p2mu",
|
|
34
|
+
kIyJzY: "x1tw3moq xsr0bmt",
|
|
35
|
+
kAMwcw: "xlr8y92",
|
|
36
|
+
kzIqYQ: "xd00j3c",
|
|
37
|
+
kIr0Dl: "x1rq8cwj x1k6wr6r",
|
|
38
|
+
kSiTet: "xgsobzw",
|
|
39
|
+
kVAEAm: "x1mf7ja4",
|
|
40
|
+
$$css: true
|
|
41
|
+
},
|
|
42
|
+
revealLayoutPreserved: {
|
|
43
|
+
k1ekBW: "x19991ni",
|
|
44
|
+
kIyJzY: "xuedmi6 x12w9bfk",
|
|
45
|
+
kAMwcw: "xlr8y92",
|
|
46
|
+
kSiTet: "xgsobzw",
|
|
47
|
+
$$css: true
|
|
48
|
+
},
|
|
49
|
+
conceal: {
|
|
50
|
+
k1ekBW: "x19991ni",
|
|
51
|
+
kIyJzY: "xuedmi6 x12w9bfk",
|
|
52
|
+
kAMwcw: "xlr8y92",
|
|
53
|
+
kSiTet: "x1wnsjo",
|
|
54
|
+
$$css: true
|
|
55
|
+
},
|
|
56
|
+
concealLayoutPreserved: {
|
|
57
|
+
k1ekBW: "x19991ni",
|
|
58
|
+
kIyJzY: "xuedmi6 x12w9bfk",
|
|
59
|
+
kAMwcw: "xlr8y92",
|
|
60
|
+
kSiTet: "x1wnsjo",
|
|
61
|
+
$$css: true
|
|
62
|
+
}
|
|
63
|
+
};
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { useFocusTrap } from './useFocusTrap';
|
|
|
10
10
|
export type { UseFocusTrapOptions, UseFocusTrapReturn } from './useFocusTrap';
|
|
11
11
|
export { useAnnounce } from './useAnnounce';
|
|
12
12
|
export type { AnnounceFn, AnnouncePoliteness } from './useAnnounce';
|
|
13
|
+
export { useClipboard } from './useClipboard';
|
|
14
|
+
export type { UseClipboardOptions, UseClipboardReturn } from './useClipboard';
|
|
13
15
|
export { useGridFocus } from './useGridFocus';
|
|
14
16
|
export type { UseGridFocusOptions, UseGridFocusReturn } from './useGridFocus';
|
|
15
17
|
export { useListFocus } from './useListFocus';
|
|
@@ -45,6 +47,7 @@ export type { InteractiveRole, UseInteractiveRoleOptions, } from './useInteracti
|
|
|
45
47
|
export { useLongPress } from './useLongPress';
|
|
46
48
|
export type { UseLongPressOptions, UseLongPressHandlers } from './useLongPress';
|
|
47
49
|
export { useDevWarning } from './useDevWarning';
|
|
50
|
+
export { useIndicatorFocusRing } from './useIndicatorFocusRing';
|
|
48
51
|
export { useContainerReveal } from './useContainerReveal';
|
|
49
52
|
export type { UseContainerRevealOptions, UseContainerRevealReturn, ContentRevealOptions, } from './useContainerReveal';
|
|
50
53
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAC,UAAU,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAElE,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,YAAY,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAEzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAE9E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAC,UAAU,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAElE,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,YAAY,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAEzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAE9E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { useFocusTrap } from "./useFocusTrap.js";
|
|
14
14
|
export { useAnnounce } from "./useAnnounce.js";
|
|
15
|
+
export { useClipboard } from "./useClipboard.js";
|
|
15
16
|
export { useGridFocus } from "./useGridFocus.js";
|
|
16
17
|
export { useListFocus } from "./useListFocus.js";
|
|
17
18
|
export { useTreeFocus } from "./useTreeFocus.js";
|
|
@@ -31,4 +32,5 @@ export { useInputStatusIcon } from "./useInputStatusIcon.js";
|
|
|
31
32
|
export { useInteractiveRole } from "./useInteractiveRole.js";
|
|
32
33
|
export { useLongPress } from "./useLongPress.js";
|
|
33
34
|
export { useDevWarning } from "./useDevWarning.js";
|
|
35
|
+
export { useIndicatorFocusRing } from "./useIndicatorFocusRing.js";
|
|
34
36
|
export { useContainerReveal } from "./useContainerReveal.js";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for {@link useClipboard}.
|
|
3
|
+
*/
|
|
4
|
+
export interface UseClipboardOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Message announced to a polite live region on a successful copy. Swapping a
|
|
7
|
+
* control's `aria-label` alone is not reliably announced by screen readers,
|
|
8
|
+
* so pass the localized confirmation (e.g. "Copied") to have it spoken.
|
|
9
|
+
* Omit to skip the announcement.
|
|
10
|
+
*/
|
|
11
|
+
announce?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Milliseconds `isCopied` stays true after a successful copy before it
|
|
14
|
+
* reverts to false.
|
|
15
|
+
* @default 2000
|
|
16
|
+
*/
|
|
17
|
+
resetAfterMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Return value of {@link useClipboard}.
|
|
21
|
+
*/
|
|
22
|
+
export interface UseClipboardReturn {
|
|
23
|
+
/**
|
|
24
|
+
* Write `text` to the clipboard. On success, flips `isCopied` to true,
|
|
25
|
+
* announces the configured message, and (re)starts the reset timer;
|
|
26
|
+
* resolves `true`. A clipboard rejection is a silent no-op that leaves the
|
|
27
|
+
* copied state unchanged and resolves `false`.
|
|
28
|
+
*/
|
|
29
|
+
copy: (text: string) => Promise<boolean>;
|
|
30
|
+
/** True for `resetAfterMs` after the most recent successful copy. */
|
|
31
|
+
isCopied: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Copy-to-clipboard behavior: the clipboard write, a transient `isCopied`
|
|
35
|
+
* flag with its own reset timer, and an optional polite screen-reader
|
|
36
|
+
* announcement — the block otherwise re-derived at every copy affordance.
|
|
37
|
+
*
|
|
38
|
+
* Per [API Conventions → Behaviors: Hooks Over Wrappers], the behavior is a
|
|
39
|
+
* hook and the control (an icon button, a menu item, a value chip) is a thin
|
|
40
|
+
* shell over it. Rapid re-copies restart the reset timer so the confirmation
|
|
41
|
+
* always lasts the full duration, and the timer is cleaned up on unmount.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```
|
|
45
|
+
* function CopyButton({text}: {text: string}) {
|
|
46
|
+
* const {copy, isCopied} = useClipboard({announce: 'Copied'});
|
|
47
|
+
* return (
|
|
48
|
+
* <IconButton
|
|
49
|
+
* label={isCopied ? 'Copied' : 'Copy'}
|
|
50
|
+
* tooltip="Copy"
|
|
51
|
+
* icon={<Icon icon={isCopied ? 'check' : 'copy'} />}
|
|
52
|
+
* onClick={() => void copy(text)}
|
|
53
|
+
* />
|
|
54
|
+
* );
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
|
|
59
|
+
//# sourceMappingURL=useClipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA2CpB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useClipboard.ts
|
|
7
|
+
* @input Uses React state/effect/callback; navigator.clipboard; useAnnounce
|
|
8
|
+
* @output Exports useClipboard hook plus its options/return types
|
|
9
|
+
* @position Core behavior hook; owns the copy-to-clipboard behavior shared by
|
|
10
|
+
* CodeBlock and Timestamp — the clipboard write, the transient "copied"
|
|
11
|
+
* flag with its reset timer, and the polite screen-reader announcement — so
|
|
12
|
+
* each call site is a thin control over one implementation instead of
|
|
13
|
+
* re-deriving the timer/announce details independently.
|
|
14
|
+
*
|
|
15
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
16
|
+
* - /packages/core/src/hooks/index.ts
|
|
17
|
+
* - /packages/core/src/hooks/useClipboard.doc.mjs
|
|
18
|
+
* - /packages/core/src/hooks/useClipboard.test.tsx
|
|
19
|
+
*/
|
|
20
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
21
|
+
import { useAnnounce } from "./useAnnounce.js";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* How long `isCopied` stays true after a successful copy before reverting.
|
|
25
|
+
* Long enough for the copied confirmation (e.g. a copy → check icon flip) to
|
|
26
|
+
* register without lingering.
|
|
27
|
+
*/
|
|
28
|
+
const DEFAULT_RESET_AFTER_MS = 2000;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Options for {@link useClipboard}.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Return value of {@link useClipboard}.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Copy-to-clipboard behavior: the clipboard write, a transient `isCopied`
|
|
40
|
+
* flag with its own reset timer, and an optional polite screen-reader
|
|
41
|
+
* announcement — the block otherwise re-derived at every copy affordance.
|
|
42
|
+
*
|
|
43
|
+
* Per [API Conventions → Behaviors: Hooks Over Wrappers], the behavior is a
|
|
44
|
+
* hook and the control (an icon button, a menu item, a value chip) is a thin
|
|
45
|
+
* shell over it. Rapid re-copies restart the reset timer so the confirmation
|
|
46
|
+
* always lasts the full duration, and the timer is cleaned up on unmount.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```
|
|
50
|
+
* function CopyButton({text}: {text: string}) {
|
|
51
|
+
* const {copy, isCopied} = useClipboard({announce: 'Copied'});
|
|
52
|
+
* return (
|
|
53
|
+
* <IconButton
|
|
54
|
+
* label={isCopied ? 'Copied' : 'Copy'}
|
|
55
|
+
* tooltip="Copy"
|
|
56
|
+
* icon={<Icon icon={isCopied ? 'check' : 'copy'} />}
|
|
57
|
+
* onClick={() => void copy(text)}
|
|
58
|
+
* />
|
|
59
|
+
* );
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function useClipboard(options = {}) {
|
|
64
|
+
const {
|
|
65
|
+
announce: announceMessage,
|
|
66
|
+
resetAfterMs = DEFAULT_RESET_AFTER_MS
|
|
67
|
+
} = options;
|
|
68
|
+
const announce = useAnnounce();
|
|
69
|
+
const [isCopied, setIsCopied] = useState(false);
|
|
70
|
+
const resetTimerRef = useRef(null);
|
|
71
|
+
|
|
72
|
+
// Clear a pending "copied" reset when the consumer unmounts.
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
return () => {
|
|
75
|
+
if (resetTimerRef.current != null) {
|
|
76
|
+
clearTimeout(resetTimerRef.current);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}, []);
|
|
80
|
+
const copy = useCallback(async text => {
|
|
81
|
+
try {
|
|
82
|
+
await navigator.clipboard.writeText(text);
|
|
83
|
+
setIsCopied(true);
|
|
84
|
+
if (announceMessage) {
|
|
85
|
+
announce(announceMessage);
|
|
86
|
+
}
|
|
87
|
+
// Restart the reset timer on every copy — otherwise a rapid re-copy
|
|
88
|
+
// is reverted early by the previous copy's timer.
|
|
89
|
+
if (resetTimerRef.current != null) {
|
|
90
|
+
clearTimeout(resetTimerRef.current);
|
|
91
|
+
}
|
|
92
|
+
resetTimerRef.current = setTimeout(() => {
|
|
93
|
+
resetTimerRef.current = null;
|
|
94
|
+
setIsCopied(false);
|
|
95
|
+
}, resetAfterMs);
|
|
96
|
+
return true;
|
|
97
|
+
} catch {
|
|
98
|
+
// Clipboard failures leave the copied state unchanged.
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}, [announce, announceMessage, resetAfterMs]);
|
|
102
|
+
return {
|
|
103
|
+
copy,
|
|
104
|
+
isCopied
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file useContainerReveal.ts
|
|
3
|
-
* @input Uses
|
|
3
|
+
* @input Uses the containerReveal styles
|
|
4
4
|
* @output Exports useContainerReveal — a headless hover/focus reveal primitive
|
|
5
5
|
* @position Core hook. Consumed by any component that reveals (or conceals)
|
|
6
6
|
* content when its container is hovered or focused — e.g. Thumbnail's remove
|
|
@@ -8,8 +8,13 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Gives a container a scoped hover/focus-within trigger that reveals or
|
|
10
10
|
* conceals content inside it, entirely in CSS (no hover state in JS, no
|
|
11
|
-
* re-render on hover). The caller authors NO StyleX: the hook hands out
|
|
12
|
-
*
|
|
11
|
+
* re-render on hover). The caller authors NO StyleX: the hook hands out the
|
|
12
|
+
* container style and the matching content styles.
|
|
13
|
+
*
|
|
14
|
+
* Scoping is by inheritance: the container publishes its reveal state as
|
|
15
|
+
* custom properties on itself and the content reads them, so a nested
|
|
16
|
+
* container shadows its ancestor's state for its own subtree. See
|
|
17
|
+
* containerReveal.stylex.ts.
|
|
13
18
|
*
|
|
14
19
|
* ACCESSIBILITY (WCAG 2.2 by construction):
|
|
15
20
|
* - Revealed content is visually hidden at rest via position + opacity, so it
|
|
@@ -23,14 +28,15 @@
|
|
|
23
28
|
*
|
|
24
29
|
* SYNC: When modified, update:
|
|
25
30
|
* - /packages/core/src/hooks/index.ts (export)
|
|
26
|
-
* - containerReveal.
|
|
31
|
+
* - containerReveal.stylex.ts (if the style blocks change)
|
|
27
32
|
*/
|
|
28
33
|
import { type CSSProperties } from 'react';
|
|
29
34
|
export interface UseContainerRevealOptions {
|
|
30
35
|
/**
|
|
31
|
-
* When false the hook is inert:
|
|
32
|
-
* return no styles, so content is always shown.
|
|
33
|
-
* own prop (e.g.
|
|
36
|
+
* When false the hook is inert: the container gets no styles and content
|
|
37
|
+
* getters return no styles, so content is always shown. Read on every
|
|
38
|
+
* render, so a component can flip it with its own prop (e.g.
|
|
39
|
+
* `revealOn === 'hover'`).
|
|
34
40
|
* @default true
|
|
35
41
|
*/
|
|
36
42
|
isEnabled?: boolean;
|
|
@@ -66,7 +72,7 @@ export interface UseContainerRevealReturn {
|
|
|
66
72
|
* Scoped, CSS-only hover/focus reveal for content inside a container.
|
|
67
73
|
*
|
|
68
74
|
* @example
|
|
69
|
-
* ```
|
|
75
|
+
* ```
|
|
70
76
|
* const {getContainerProps, getContentRevealProps} = useContainerReveal({
|
|
71
77
|
* isEnabled: revealOn === 'hover',
|
|
72
78
|
* });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContainerReveal.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerReveal.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"useContainerReveal.d.ts","sourceRoot":"","sources":["../../src/hooks/useContainerReveal.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AAIlD,MAAM,WAAW,yBAAyB;IACxC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,aAAa,CAAA;KAAC,CAAC;IACrE,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK;QACzD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,aAAa,CAAC;KACvB,CAAC;CACH;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA0B1B"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useContainerReveal.ts
|
|
7
|
-
* @input Uses
|
|
7
|
+
* @input Uses the containerReveal styles
|
|
8
8
|
* @output Exports useContainerReveal — a headless hover/focus reveal primitive
|
|
9
9
|
* @position Core hook. Consumed by any component that reveals (or conceals)
|
|
10
10
|
* content when its container is hovered or focused — e.g. Thumbnail's remove
|
|
@@ -12,8 +12,13 @@
|
|
|
12
12
|
*
|
|
13
13
|
* Gives a container a scoped hover/focus-within trigger that reveals or
|
|
14
14
|
* conceals content inside it, entirely in CSS (no hover state in JS, no
|
|
15
|
-
* re-render on hover). The caller authors NO StyleX: the hook hands out
|
|
16
|
-
*
|
|
15
|
+
* re-render on hover). The caller authors NO StyleX: the hook hands out the
|
|
16
|
+
* container style and the matching content styles.
|
|
17
|
+
*
|
|
18
|
+
* Scoping is by inheritance: the container publishes its reveal state as
|
|
19
|
+
* custom properties on itself and the content reads them, so a nested
|
|
20
|
+
* container shadows its ancestor's state for its own subtree. See
|
|
21
|
+
* containerReveal.stylex.ts.
|
|
17
22
|
*
|
|
18
23
|
* ACCESSIBILITY (WCAG 2.2 by construction):
|
|
19
24
|
* - Revealed content is visually hidden at rest via position + opacity, so it
|
|
@@ -27,53 +32,18 @@
|
|
|
27
32
|
*
|
|
28
33
|
* SYNC: When modified, update:
|
|
29
34
|
* - /packages/core/src/hooks/index.ts (export)
|
|
30
|
-
* - containerReveal.
|
|
35
|
+
* - containerReveal.stylex.ts (if the style blocks change)
|
|
31
36
|
*/
|
|
32
|
-
import {
|
|
37
|
+
import { useMemo } from 'react';
|
|
33
38
|
import * as stylex from '@stylexjs/stylex';
|
|
34
|
-
import {
|
|
35
|
-
import { useDevWarning } from "./useDevWarning.js";
|
|
36
|
-
|
|
37
|
-
// Module-level free-list. Each mounted, enabled useContainerReveal claims a
|
|
38
|
-
// distinct pool slot so that any two CONCURRENTLY mounted containers — in
|
|
39
|
-
// particular a nested container inside another's revealed content — get
|
|
40
|
-
// different markers and cannot leak hover/focus into one another. Slots are
|
|
41
|
-
// returned on unmount. Sibling containers that would only ever collide when
|
|
42
|
-
// the pool is exhausted are harmless (a sibling is never an ancestor), so the
|
|
43
|
-
// pool only needs to cover the number of concurrently mounted containers, not
|
|
44
|
-
// instances over time.
|
|
45
|
-
const claimed = new Array(POOL_SIZE).fill(false);
|
|
46
|
-
function claimSlot() {
|
|
47
|
-
for (let i = 0; i < POOL_SIZE; i++) {
|
|
48
|
-
if (!claimed[i]) {
|
|
49
|
-
claimed[i] = true;
|
|
50
|
-
return {
|
|
51
|
-
index: i,
|
|
52
|
-
isExhausted: false
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Exhausted: fall back to slot 0. Safe for siblings (a sibling is never an
|
|
57
|
-
// ancestor); only nesting deeper than POOL_SIZE could reintroduce a leak.
|
|
58
|
-
// Surfaced via useDevWarning so the pool can be grown.
|
|
59
|
-
return {
|
|
60
|
-
index: 0,
|
|
61
|
-
isExhausted: true
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function releaseSlot(index, isExhausted) {
|
|
65
|
-
// A fallback claim never owned the slot exclusively; leave it as-is.
|
|
66
|
-
if (!isExhausted) {
|
|
67
|
-
claimed[index] = false;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
39
|
+
import { styles } from "./containerReveal.stylex.js";
|
|
70
40
|
const EMPTY = Object.freeze({});
|
|
71
41
|
|
|
72
42
|
/**
|
|
73
43
|
* Scoped, CSS-only hover/focus reveal for content inside a container.
|
|
74
44
|
*
|
|
75
45
|
* @example
|
|
76
|
-
* ```
|
|
46
|
+
* ```
|
|
77
47
|
* const {getContainerProps, getContentRevealProps} = useContainerReveal({
|
|
78
48
|
* isEnabled: revealOn === 'hover',
|
|
79
49
|
* });
|
|
@@ -90,34 +60,23 @@ export function useContainerReveal(options = {}) {
|
|
|
90
60
|
const {
|
|
91
61
|
isEnabled = true
|
|
92
62
|
} = options;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (claim == null) {
|
|
100
|
-
return;
|
|
63
|
+
return useMemo(() => {
|
|
64
|
+
if (!isEnabled) {
|
|
65
|
+
return {
|
|
66
|
+
getContainerProps: () => EMPTY,
|
|
67
|
+
getContentRevealProps: () => EMPTY
|
|
68
|
+
};
|
|
101
69
|
}
|
|
102
|
-
return () => releaseSlot(claim.index, claim.isExhausted);
|
|
103
|
-
}, [claim]);
|
|
104
|
-
useDevWarning('useContainerReveal', `More than ${POOL_SIZE} reveal containers are mounted at once; nested ` + `containers beyond the pool may share a marker. Add markers to ` + `containerReveal.pool.stylex.ts and raise POOL_SIZE.`, claim?.isExhausted ?? false);
|
|
105
|
-
if (claim == null) {
|
|
106
70
|
return {
|
|
107
|
-
getContainerProps: () =>
|
|
108
|
-
getContentRevealProps: () =>
|
|
71
|
+
getContainerProps: () => stylex.props(styles.container),
|
|
72
|
+
getContentRevealProps: (contentOptions = {}) => {
|
|
73
|
+
const {
|
|
74
|
+
isRevealInverted = false,
|
|
75
|
+
isLayoutPreserved = false
|
|
76
|
+
} = contentOptions;
|
|
77
|
+
const style = isRevealInverted ? isLayoutPreserved ? styles.concealLayoutPreserved : styles.conceal : isLayoutPreserved ? styles.revealLayoutPreserved : styles.reveal;
|
|
78
|
+
return stylex.props(style);
|
|
79
|
+
}
|
|
109
80
|
};
|
|
110
|
-
}
|
|
111
|
-
const slot = POOL[claim.index];
|
|
112
|
-
return {
|
|
113
|
-
getContainerProps: () => stylex.props(slot.marker),
|
|
114
|
-
getContentRevealProps: (contentOptions = {}) => {
|
|
115
|
-
const {
|
|
116
|
-
isRevealInverted = false,
|
|
117
|
-
isLayoutPreserved = false
|
|
118
|
-
} = contentOptions;
|
|
119
|
-
const style = isRevealInverted ? isLayoutPreserved ? slot.concealLayoutPreserved : slot.conceal : isLayoutPreserved ? slot.revealLayoutPreserved : slot.reveal;
|
|
120
|
-
return stylex.props(style);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
81
|
+
}, [isEnabled]);
|
|
123
82
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FocusEvent, RefObject } from 'react';
|
|
2
|
+
export interface UseIndicatorFocusRingReturn {
|
|
3
|
+
/** Spread onto the element that owns the focusable input. */
|
|
4
|
+
focusProps: {
|
|
5
|
+
onFocus: (event: FocusEvent<HTMLElement>) => void;
|
|
6
|
+
onBlur: () => void;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Draw the standard focus ring on the indicator inside `containerRef`, shaped
|
|
11
|
+
* by whatever that indicator actually is.
|
|
12
|
+
*
|
|
13
|
+
* @param containerRef - Wraps ONLY the indicator, so its single element child
|
|
14
|
+
* is unambiguously the thing to ring, whatever a theme renders there.
|
|
15
|
+
* @param isDisabled - Skip the ring; a disabled control is not focusable.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```
|
|
19
|
+
* const indicatorRef = useRef<HTMLSpanElement>(null);
|
|
20
|
+
* const {focusProps} = useIndicatorFocusRing(indicatorRef, isDisabled);
|
|
21
|
+
* <div {...focusProps}>
|
|
22
|
+
* <input type="checkbox" />
|
|
23
|
+
* <span ref={indicatorRef}><Indicator state="checked" /></span>
|
|
24
|
+
* </div>
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function useIndicatorFocusRing(containerRef: RefObject<HTMLElement | null>, isDisabled?: boolean): UseIndicatorFocusRingReturn;
|
|
28
|
+
//# sourceMappingURL=useIndicatorFocusRing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIndicatorFocusRing.d.ts","sourceRoot":"","sources":["../../src/hooks/useIndicatorFocusRing.tsx"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAMjD,MAAM,WAAW,2BAA2B;IAC1C,6DAA6D;IAC7D,UAAU,EAAE;QACV,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QAClD,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC3C,UAAU,UAAQ,GACjB,2BAA2B,CAkC7B"}
|