@astryxdesign/core 0.4.7 → 0.5.0-canary.009bcb3
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 +161 -1
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +3 -2
- package/dist/AspectRatio/AspectRatio.d.ts +24 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +23 -4
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +58 -19
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +8 -4
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +10 -6
- package/dist/Banner/Banner.d.ts +49 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +62 -20
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +17 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +11 -6
- package/dist/ButtonGroup/ButtonGroup.d.ts +5 -1
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +26 -7
- package/dist/Calendar/Calendar.d.ts +7 -3
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -23
- package/dist/Calendar/getInitialFocusDate.d.ts +46 -0
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -0
- package/dist/Calendar/getInitialFocusDate.js +62 -0
- package/dist/Calendar/styles.d.ts +5 -14
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -15
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +2 -3
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +3 -3
- package/dist/Chat/ChatMessageList.d.ts +22 -3
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +6 -3
- package/dist/Chat/ChatTokenizedText.d.ts +2 -0
- package/dist/Chat/ChatTokenizedText.d.ts.map +1 -1
- package/dist/Chat/ChatTokenizedText.js +11 -6
- package/dist/Chat/useChatComposerTokens.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +10 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +3 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -3
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -2
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +82 -23
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +21 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +406 -12
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/Dialog/Dialog.d.ts +21 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +110 -58
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +6 -5
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +3 -2
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +6 -3
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +19 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +74 -26
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -19
- package/dist/Layer/LayerDepthContext.d.ts +52 -0
- package/dist/Layer/LayerDepthContext.d.ts.map +1 -0
- package/dist/Layer/LayerDepthContext.js +66 -0
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/index.d.ts +3 -0
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +4 -0
- package/dist/Layer/layerStack.d.ts +98 -0
- package/dist/Layer/layerStack.d.ts.map +1 -0
- package/dist/Layer/layerStack.js +306 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +128 -8
- package/dist/Layer/useLayerDismissal.d.ts +93 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -0
- package/dist/Layer/useLayerDismissal.js +91 -0
- package/dist/Lightbox/Lightbox.d.ts +1 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +103 -81
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/parser.d.ts +38 -1
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +182 -32
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MobileNav/MobileNav.d.ts +6 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +61 -36
- package/dist/MultiSelector/MultiSelector.d.ts +32 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +73 -15
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +9 -5
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +54 -104
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -2
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -2
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +3 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +1 -9
- package/dist/Popover/usePopover.d.ts +7 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +40 -21
- package/dist/PowerSearch/PowerSearch.d.ts +8 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +19 -6
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +28 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +3 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +110 -27
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +6 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts.map +1 -1
- package/dist/PowerSearch/usePowerSearchSource.js +14 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +12 -3
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +91 -18
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +8 -7
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +4 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +37 -5
- package/dist/Spinner/Spinner.d.ts +3 -3
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +130 -78
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts +140 -0
- package/dist/Stepper/Step.d.ts.map +1 -0
- package/dist/Stepper/Step.js +1045 -0
- package/dist/Stepper/StepStatus.d.ts +24 -0
- package/dist/Stepper/StepStatus.d.ts.map +1 -0
- package/dist/Stepper/StepStatus.js +1 -0
- package/dist/Stepper/Stepper.d.ts +93 -0
- package/dist/Stepper/Stepper.d.ts.map +1 -0
- package/dist/Stepper/Stepper.js +184 -0
- package/dist/Stepper/StepperContext.d.ts +41 -0
- package/dist/Stepper/StepperContext.d.ts.map +1 -0
- package/dist/Stepper/StepperContext.js +34 -0
- package/dist/Stepper/index.d.ts +8 -0
- package/dist/Stepper/index.d.ts.map +1 -0
- package/dist/Stepper/index.js +7 -0
- package/dist/Stepper/stepper.stylex.d.ts +15 -0
- package/dist/Stepper/stepper.stylex.d.ts.map +1 -0
- package/dist/Stepper/stepper.stylex.js +20 -0
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +8 -3
- package/dist/TabList/Tab.d.ts +15 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +32 -7
- package/dist/TabList/TabList.d.ts +46 -7
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +353 -23
- package/dist/TabList/TabListContext.d.ts +11 -1
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +11 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.d.ts.map +1 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +10 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/TableRow.d.ts +16 -5
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +16 -5
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +54 -11
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +3 -0
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +21 -4
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
- package/dist/Table/plugins/rowStatus/useTableRowStatus.js +10 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts +16 -0
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +43 -5
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Table/types.d.ts +22 -4
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +5 -0
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +6 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +16 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +3 -2
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +15 -21
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +22 -7
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +71 -18
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +20 -9
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +7 -4
- package/dist/Tokenizer/Tokenizer.d.ts +14 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +33 -21
- package/dist/Tooltip/Tooltip.d.ts +5 -0
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +5 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +39 -24
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +5 -4
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +31 -11
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +22 -7
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +35 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +119 -37
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +5 -2
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +113 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -4
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +60 -95
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -18
- package/dist/hooks/useMergedRefs.d.ts +18 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +25 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/utils/groupItems.d.ts +5 -1
- package/dist/utils/groupItems.d.ts.map +1 -1
- package/dist/utils/groupItems.js +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +10 -1
- package/dist/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/af-ZA.json +6 -6
- package/locales/ar-SA.json +6 -6
- package/locales/ca-ES.json +5 -5
- package/locales/cs-CZ.json +6 -6
- package/locales/da-DK.json +6 -6
- package/locales/de-DE.json +6 -6
- package/locales/el-GR.json +6 -6
- package/locales/en.json +163 -11
- package/locales/es-ES.json +5 -5
- package/locales/fi-FI.json +6 -6
- package/locales/fr-FR.json +6 -6
- package/locales/he-IL.json +6 -6
- package/locales/hu-HU.json +6 -6
- package/locales/it-IT.json +6 -6
- package/locales/ja-JP.json +6 -6
- package/locales/ko-KR.json +6 -6
- package/locales/nl-NL.json +6 -6
- package/locales/no-NO.json +6 -6
- package/locales/pl-PL.json +6 -6
- package/locales/pseudo.json +114 -0
- package/locales/pt-BR.json +6 -6
- package/locales/pt-PT.json +6 -6
- package/locales/ro-RO.json +6 -6
- package/locales/ru-RU.json +6 -6
- package/locales/sr-SP.json +6 -6
- package/locales/sv-SE.json +6 -6
- package/locales/tr-TR.json +6 -6
- package/locales/uk-UA.json +6 -6
- package/locales/vi-VN.json +6 -6
- package/locales/zh-CN.json +6 -6
- package/locales/zh-TW.json +6 -6
- package/package.json +8 -3
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AppShell/AppShell.tsx +3 -2
- package/src/AspectRatio/AspectRatio.doc.mjs +6 -3
- package/src/AspectRatio/AspectRatio.test.tsx +57 -10
- package/src/AspectRatio/AspectRatio.tsx +40 -1
- package/src/Avatar/Avatar.doc.mjs +14 -3
- package/src/Avatar/Avatar.test.tsx +97 -0
- package/src/Avatar/Avatar.tsx +125 -52
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +15 -6
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +10 -4
- package/src/Banner/Banner.doc.mjs +22 -11
- package/src/Banner/Banner.test.tsx +177 -25
- package/src/Banner/Banner.tsx +93 -27
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +17 -4
- package/src/BottomSheet/BottomSheetSwitcher.tsx +3 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +24 -1
- package/src/Button/Button.test.tsx +32 -4
- package/src/Button/Button.tsx +12 -5
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +404 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +7 -6
- package/src/Calendar/Calendar.test.tsx +143 -0
- package/src/Calendar/Calendar.tsx +30 -26
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.tsx +3 -2
- package/src/Chat/ChatComposerInput.tsx +5 -1
- package/src/Chat/ChatLayout.tsx +3 -2
- package/src/Chat/ChatMessageList.doc.mjs +9 -1
- package/src/Chat/ChatMessageList.test.tsx +46 -0
- package/src/Chat/ChatMessageList.tsx +28 -4
- package/src/Chat/ChatTokenizedText.tsx +17 -10
- package/src/Chat/useChatComposerTokens.ts +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +8 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +16 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +32 -0
- package/src/ComplexSelector/ComplexSelector.tsx +1 -3
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.tsx +55 -2
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +108 -24
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +22 -0
- package/src/DateRangeInput/DateRangeInput.tsx +4 -2
- package/src/DateTimeInput/DateTimeInput.doc.mjs +18 -0
- package/src/DateTimeInput/DateTimeInput.test.tsx +1088 -0
- package/src/DateTimeInput/DateTimeInput.tsx +556 -24
- package/src/DateTimeInput/index.ts +1 -0
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +429 -2
- package/src/Dialog/Dialog.tsx +133 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +8 -5
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +8 -11
- package/src/Field/Field.doc.mjs +13 -2
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -3
- package/src/HoverCard/HoverCard.doc.mjs +13 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +143 -3
- package/src/HoverCard/useHoverCard.tsx +104 -33
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.tsx +2 -19
- package/src/Layer/LayerDepthContext.tsx +62 -0
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/index.ts +9 -0
- package/src/Layer/layerDismissalFamilies.test.tsx +359 -0
- package/src/Layer/layerDismissalInvariants.test.tsx +417 -0
- package/src/Layer/layerStack.ts +362 -0
- package/src/Layer/useLayer.test.tsx +324 -15
- package/src/Layer/useLayer.tsx +164 -8
- package/src/Layer/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/Lightbox/Lightbox.doc.mjs +12 -0
- package/src/Lightbox/Lightbox.tsx +124 -102
- package/src/Link/Link.doc.mjs +39 -0
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.doc.mjs +5 -0
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/incremental.test.ts +16 -2
- package/src/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +96 -1
- package/src/Markdown/parser.test.ts +178 -2
- package/src/Markdown/parser.ts +253 -32
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +49 -1
- package/src/MultiSelector/MultiSelector.test.tsx +311 -0
- package/src/MultiSelector/MultiSelector.tsx +151 -15
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +9 -5
- package/src/NumberInput/NumberInput.doc.mjs +31 -7
- package/src/NumberInput/NumberInput.test.tsx +436 -8
- package/src/NumberInput/NumberInput.tsx +62 -114
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.test.tsx +14 -0
- package/src/Popover/Popover.tsx +1 -9
- package/src/Popover/usePopover.tsx +57 -32
- package/src/PowerSearch/PowerSearch.doc.mjs +160 -28
- package/src/PowerSearch/PowerSearch.test.tsx +240 -1
- package/src/PowerSearch/PowerSearch.tsx +34 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +288 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +111 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +124 -10
- package/src/PowerSearch/types.ts +2 -0
- package/src/PowerSearch/usePowerSearchSource.test.ts +82 -2
- package/src/PowerSearch/usePowerSearchSource.ts +13 -3
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +19 -2
- package/src/Selector/Selector.doc.mjs +26 -1
- package/src/Selector/Selector.test.tsx +346 -1
- package/src/Selector/Selector.tsx +148 -21
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavHeading.tsx +12 -12
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +55 -3
- package/src/Spinner/Spinner.test.tsx +147 -1
- package/src/Spinner/Spinner.tsx +120 -101
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +98 -0
- package/src/Stepper/Step.tsx +1638 -0
- package/src/Stepper/StepStatus.ts +26 -0
- package/src/Stepper/Stepper.doc.mjs +370 -0
- package/src/Stepper/Stepper.test.tsx +1024 -0
- package/src/Stepper/Stepper.tsx +258 -0
- package/src/Stepper/StepperContext.ts +71 -0
- package/src/Stepper/index.ts +18 -0
- package/src/Stepper/stepper.stylex.ts +19 -0
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +6 -2
- package/src/TabList/Tab.doc.mjs +13 -1
- package/src/TabList/Tab.tsx +67 -7
- package/src/TabList/TabList.doc.mjs +22 -6
- package/src/TabList/TabList.test.tsx +559 -0
- package/src/TabList/TabList.tsx +490 -22
- package/src/TabList/TabListContext.ts +13 -2
- package/src/TabList/TabMenu.tsx +3 -2
- package/src/TabList/index.ts +6 -2
- package/src/Table/BaseTable.tsx +12 -4
- package/src/Table/Table.doc.mjs +9 -2
- package/src/Table/Table.test.tsx +132 -14
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +40 -0
- package/src/Table/TableFooter.doc.mjs +40 -0
- package/src/Table/TableHeader.doc.mjs +40 -0
- package/src/Table/TableRow.tsx +16 -5
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +112 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +100 -0
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +67 -12
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +34 -4
- package/src/Table/plugins/pagination/useTablePagination.tsx +35 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +9 -2
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +13 -7
- package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +12 -3
- package/src/Table/plugins/selection/useTableSelection.test.tsx +138 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +63 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/types.ts +22 -4
- package/src/Table/useBaseTablePlugins.ts +5 -0
- package/src/Table/useTableGroupedRows.doc.mjs +5 -4
- package/src/Table/useTablePagination.doc.mjs +7 -0
- package/src/Table/useTableRowStatus.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +31 -0
- package/src/Text/Text.test.tsx +67 -1
- package/src/Text/Text.tsx +6 -3
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +37 -24
- package/src/TextInput/TextInput.doc.mjs +10 -0
- package/src/TextInput/TextInput.tsx +3 -2
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.tsx +2 -2
- package/src/Timestamp/Timestamp.test.tsx +58 -0
- package/src/Timestamp/Timestamp.tsx +12 -10
- package/src/Toast/Toast.doc.mjs +26 -12
- package/src/Toast/Toast.tsx +28 -4
- package/src/Toast/ToastViewport.test.tsx +536 -8
- package/src/Toast/ToastViewport.tsx +81 -12
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +15 -10
- package/src/Token/TokenLink.tsx +14 -5
- package/src/Tokenizer/Tokenizer.doc.mjs +43 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +53 -24
- package/src/Toolbar/Toolbar.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.doc.mjs +5 -0
- package/src/Tooltip/Tooltip.test.tsx +32 -0
- package/src/Tooltip/Tooltip.tsx +5 -0
- package/src/Tooltip/useTooltip.tsx +47 -24
- package/src/TopNav/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -5
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -7
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/Typeahead/BaseTypeahead.doc.mjs +24 -0
- package/src/Typeahead/BaseTypeahead.tsx +181 -39
- package/src/Typeahead/Typeahead.doc.mjs +11 -0
- package/src/Typeahead/Typeahead.test.tsx +203 -0
- package/src/Typeahead/Typeahead.tsx +12 -2
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useFocusTrap.test.tsx +14 -0
- package/src/hooks/useFocusTrap.ts +62 -111
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.ts +3 -18
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useMergedRefs.doc.mjs +79 -0
- package/src/hooks/useMergedRefs.test.tsx +62 -0
- package/src/hooks/useMergedRefs.ts +36 -0
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +1 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/derivedVarRegistry.test.ts +26 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/utils/groupItems.ts +12 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/sharedResizeObserver.ts +10 -2
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
|
@@ -21,6 +21,45 @@ import { useHoverCard } from "./useHoverCard.js";
|
|
|
21
21
|
import "../theme/tokens.stylex.js";
|
|
22
22
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
23
23
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
// `aria-haspopup` and `aria-controls` are global, so any trigger may carry
|
|
25
|
+
// them. `aria-expanded` is not. This is the ARIA 1.2 "Supported States and
|
|
26
|
+
// Properties" list for it — deliberately the narrow reading: axe accepts the
|
|
27
|
+
// attribute on rather more roles, since it also allows every subclass of these,
|
|
28
|
+
// so a role outside this set is not necessarily a violation. Widening it is
|
|
29
|
+
// safe; the set is a floor, not the spec's ceiling. The same rule is applied in
|
|
30
|
+
// Chat/useTriggerMenu.tsx, which only emits the combobox attributes once the
|
|
31
|
+
// element is actually a combobox.
|
|
32
|
+
const EXPANDABLE_ROLES = new Set(['application', 'button', 'checkbox', 'columnheader', 'combobox', 'gridcell', 'link', 'listbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'row', 'rowheader', 'switch', 'tab', 'treeitem']);
|
|
33
|
+
const BUTTON_INPUT_TYPES = new Set(['button', 'submit', 'reset', 'image']);
|
|
34
|
+
|
|
35
|
+
// Deliberately partial, and unlisted elements are read as role-less: dropping
|
|
36
|
+
// aria-expanded where it might have been legal costs an AT user a state they
|
|
37
|
+
// can still infer, whereas emitting it where it is illegal is a critical
|
|
38
|
+
// aria-allowed-attr defect.
|
|
39
|
+
function supportsAriaExpanded(el) {
|
|
40
|
+
const explicit = el.getAttribute('role')?.trim().split(/\s+/)[0];
|
|
41
|
+
if (explicit) {
|
|
42
|
+
return EXPANDABLE_ROLES.has(explicit);
|
|
43
|
+
}
|
|
44
|
+
switch (el.tagName) {
|
|
45
|
+
case 'BUTTON':
|
|
46
|
+
case 'SUMMARY':
|
|
47
|
+
return true;
|
|
48
|
+
case 'A':
|
|
49
|
+
case 'AREA':
|
|
50
|
+
return el.hasAttribute('href');
|
|
51
|
+
case 'INPUT':
|
|
52
|
+
// The button-flavoured input types map to role="button"; every other
|
|
53
|
+
// type maps to a textbox-family role, which does not take it.
|
|
54
|
+
return BUTTON_INPUT_TYPES.has(el.type?.toLowerCase());
|
|
55
|
+
case 'SELECT':
|
|
56
|
+
// combobox when it is a single-line picker, listbox otherwise; both
|
|
57
|
+
// support aria-expanded.
|
|
58
|
+
return true;
|
|
59
|
+
default:
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
24
63
|
/**
|
|
25
64
|
* Check if children are text-only (no React elements)
|
|
26
65
|
*/
|
|
@@ -115,8 +154,65 @@ export function HoverCard({
|
|
|
115
154
|
|
|
116
155
|
// Use combined ref for position + interaction
|
|
117
156
|
hoverCard.ref(firstChild);
|
|
157
|
+
if (label) {
|
|
158
|
+
// When named, the hover card is a dialog. The trigger should advertise the
|
|
159
|
+
// popup relationship with aria-haspopup/aria-expanded, not describe the
|
|
160
|
+
// trigger with the dialog's content (aria-describedby is for plain-text
|
|
161
|
+
// descriptions, not navigable regions). See #5049.
|
|
162
|
+
//
|
|
163
|
+
// aria-expanded only goes on a trigger whose role permits it. A role-less
|
|
164
|
+
// trigger (Timestamp's <time>/<span>) gets haspopup + controls, which are
|
|
165
|
+
// global, and no expanded state.
|
|
166
|
+
//
|
|
167
|
+
// Merge rather than overwrite: the trigger may already carry its own
|
|
168
|
+
// popup semantics (e.g. a menu button wrapped in a labelled HoverCard),
|
|
169
|
+
// so preserve the existing values and restore them on cleanup.
|
|
170
|
+
const existingHaspopup = firstChild.getAttribute('aria-haspopup');
|
|
171
|
+
const existingControls = firstChild.getAttribute('aria-controls');
|
|
172
|
+
const existingExpanded = firstChild.getAttribute('aria-expanded');
|
|
173
|
+
const canExpand = supportsAriaExpanded(firstChild);
|
|
174
|
+
firstChild.setAttribute('aria-haspopup', 'dialog');
|
|
175
|
+
// Only point aria-controls at the layer while it is open and in the DOM.
|
|
176
|
+
// While closed, useLayer leaves only an inert <template> marker, so the
|
|
177
|
+
// id would reference nothing. DateInput gates it the same way. The
|
|
178
|
+
// trigger's own aria-controls (if any) is preserved either way.
|
|
179
|
+
if (hoverCard.isOpen) {
|
|
180
|
+
firstChild.setAttribute('aria-controls', mergeIds(existingControls, hoverCard.id) ?? '');
|
|
181
|
+
} else if (existingControls) {
|
|
182
|
+
firstChild.setAttribute('aria-controls', existingControls);
|
|
183
|
+
} else {
|
|
184
|
+
firstChild.removeAttribute('aria-controls');
|
|
185
|
+
}
|
|
186
|
+
if (canExpand) {
|
|
187
|
+
firstChild.setAttribute('aria-expanded', String(hoverCard.isOpen));
|
|
188
|
+
} else if (existingExpanded) {
|
|
189
|
+
firstChild.setAttribute('aria-expanded', existingExpanded);
|
|
190
|
+
} else {
|
|
191
|
+
firstChild.removeAttribute('aria-expanded');
|
|
192
|
+
}
|
|
193
|
+
return () => {
|
|
194
|
+
hoverCard.ref(null);
|
|
195
|
+
if (existingHaspopup) {
|
|
196
|
+
firstChild.setAttribute('aria-haspopup', existingHaspopup);
|
|
197
|
+
} else {
|
|
198
|
+
firstChild.removeAttribute('aria-haspopup');
|
|
199
|
+
}
|
|
200
|
+
if (existingControls) {
|
|
201
|
+
firstChild.setAttribute('aria-controls', existingControls);
|
|
202
|
+
} else {
|
|
203
|
+
firstChild.removeAttribute('aria-controls');
|
|
204
|
+
}
|
|
205
|
+
if (existingExpanded) {
|
|
206
|
+
firstChild.setAttribute('aria-expanded', existingExpanded);
|
|
207
|
+
} else {
|
|
208
|
+
firstChild.removeAttribute('aria-expanded');
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
118
212
|
|
|
119
|
-
//
|
|
213
|
+
// Unnamed fallback: the popup remains role="group", which is not a dialog,
|
|
214
|
+
// so keep the previous description relationship until a naming decision is
|
|
215
|
+
// made for the no-label case (tracked in #5049).
|
|
120
216
|
const existingDescribedBy = firstChild.getAttribute('aria-describedby');
|
|
121
217
|
firstChild.setAttribute('aria-describedby', mergeIds(existingDescribedBy, hoverCard.describedBy) ?? '');
|
|
122
218
|
return () => {
|
|
@@ -127,7 +223,7 @@ export function HoverCard({
|
|
|
127
223
|
firstChild.removeAttribute('aria-describedby');
|
|
128
224
|
}
|
|
129
225
|
};
|
|
130
|
-
}, [textOnly, hoverCard.ref, hoverCard.describedBy]);
|
|
226
|
+
}, [textOnly, label, hoverCard.ref, hoverCard.id, hoverCard.isOpen, hoverCard.describedBy]);
|
|
131
227
|
|
|
132
228
|
// While closed, useLayer leaves only an inert <template> marker at this JSX
|
|
133
229
|
// position. When the card needs to open, it uses that marker to keep the
|
|
@@ -145,7 +241,12 @@ export function HoverCard({
|
|
|
145
241
|
children: [/*#__PURE__*/_jsx("span", {
|
|
146
242
|
ref: hoverCard.ref,
|
|
147
243
|
tabIndex: 0,
|
|
148
|
-
"aria-
|
|
244
|
+
"aria-haspopup": label ? 'dialog' : undefined,
|
|
245
|
+
"aria-controls": label && hoverCard.isOpen ? hoverCard.id : undefined
|
|
246
|
+
// No aria-expanded: this wrapper is a role-less <span>, and
|
|
247
|
+
// aria-expanded is invalid on it (see EXPANDABLE_ROLES above).
|
|
248
|
+
,
|
|
249
|
+
"aria-describedby": label ? undefined : hoverCard.describedBy,
|
|
149
250
|
...{
|
|
150
251
|
0: {
|
|
151
252
|
className: "xt0psk2"
|
|
@@ -78,6 +78,11 @@ export interface HoverCardOptions {
|
|
|
78
78
|
* - `true`: force-show the hover card (hover/focus hide is suppressed)
|
|
79
79
|
* - `false`: force-hide the hover card
|
|
80
80
|
* - `undefined`: uncontrolled — hover/focus triggers manage visibility
|
|
81
|
+
*
|
|
82
|
+
* A controlled hover card still takes Escape when it is the top-most layer,
|
|
83
|
+
* and answers by calling `onHide` without hiding itself — closing is your
|
|
84
|
+
* update's decision, exactly as for a controlled Dialog. Ignore the call and
|
|
85
|
+
* the card stays, and so does the press: nothing underneath dismisses.
|
|
81
86
|
*/
|
|
82
87
|
isOpen?: boolean;
|
|
83
88
|
/**
|
|
@@ -119,10 +124,22 @@ export interface HoverCardReturn {
|
|
|
119
124
|
*/
|
|
120
125
|
anchorId: string;
|
|
121
126
|
/**
|
|
122
|
-
* ID for
|
|
123
|
-
*
|
|
127
|
+
* Unique ID for the hover card container.
|
|
128
|
+
* Useful for `aria-controls` or `aria-owns` on the trigger.
|
|
129
|
+
*/
|
|
130
|
+
id: string;
|
|
131
|
+
/**
|
|
132
|
+
* Deprecated alias of `id`. Kept for backwards compatibility; prefer `id`.
|
|
124
133
|
*/
|
|
125
134
|
describedBy: string;
|
|
135
|
+
/**
|
|
136
|
+
* Whether the hover card is currently open.
|
|
137
|
+
* Useful for driving `aria-expanded` on the trigger — but only when the
|
|
138
|
+
* trigger's role permits it (`button`, `link`, `combobox`, …). On a role-less
|
|
139
|
+
* trigger `aria-expanded` is invalid; use `aria-haspopup`/`aria-controls`
|
|
140
|
+
* alone there.
|
|
141
|
+
*/
|
|
142
|
+
isOpen: boolean;
|
|
126
143
|
/**
|
|
127
144
|
* Render function for hover card content.
|
|
128
145
|
* Returns anchor-positioned popover element.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHoverCard.d.ts","sourceRoot":"","sources":["../../src/HoverCard/useHoverCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"useHoverCard.d.ts","sourceRoot":"","sources":["../../src/HoverCard/useHoverCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AA6BlC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAErC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;;OAOG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,SAAS,EACnB,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAC5C,SAAS,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAyBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAib5E"}
|
|
@@ -16,6 +16,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
16
16
|
import { useLayer } from "../Layer/useLayer.js";
|
|
17
17
|
import { useTouchTrigger } from "../Layer/useTouchTrigger.js";
|
|
18
18
|
import { layerAnimations } from "../Layer/layerAnimations.stylex.js";
|
|
19
|
+
import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
19
20
|
import "../theme/tokens.stylex.js";
|
|
20
21
|
import { colorVars, shadowVars, radiusVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
21
22
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -216,16 +217,66 @@ export function useHoverCard(options = {}) {
|
|
|
216
217
|
}
|
|
217
218
|
scheduleHide();
|
|
218
219
|
}, [layer.id, scheduleHide]);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
220
|
+
|
|
221
|
+
// Escape dismissal (WCAG 1.4.13) goes through the shared layer stack: a
|
|
222
|
+
// visible card is the top-most layer, so it takes the press and consumes it.
|
|
223
|
+
//
|
|
224
|
+
// This replaces a keydown listener on the TRIGGER that called
|
|
225
|
+
// stopPropagation() on any Escape while the trigger merely had focus — open
|
|
226
|
+
// card or not — so focusing a HoverCard trigger inside a Dialog silently ate
|
|
227
|
+
// the press that should have closed the Dialog. Presence is now answered from
|
|
228
|
+
// the DOM, so a closed card never claims a press.
|
|
229
|
+
// A controlled hover card stays on the stack and takes the press like any
|
|
230
|
+
// other layer, but answers it by reporting instead of hiding: `isOpen` is
|
|
231
|
+
// the consumer's value, so only their update may change it. Same contract as
|
|
232
|
+
// a controlled Dialog.
|
|
233
|
+
useLayerDismissal({
|
|
234
|
+
// Registered for the hook's lifetime rather than gated on `layer.isOpen`:
|
|
235
|
+
// that state can lag a frame behind the DOM, so a press arriving right after
|
|
236
|
+
// the layer appears would find nothing registered. Because this layer
|
|
237
|
+
// CONSUMES the press, a stale registration would be worse than a missed one
|
|
238
|
+
// — it would silently eat Escapes meant for the dialog underneath — so
|
|
239
|
+
// presence is answered from the DOM at press time instead of from state.
|
|
240
|
+
isActive: true,
|
|
241
|
+
isPresent: () => {
|
|
242
|
+
const el = typeof document === 'undefined' ? null : document.getElementById(layer.id);
|
|
243
|
+
if (el == null) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
return el.matches(':popover-open');
|
|
248
|
+
} catch {
|
|
249
|
+
// Browsers without the Popover API (and some test environments) cannot
|
|
250
|
+
// answer the selector; fall back to the hook's own state.
|
|
251
|
+
return layer.isOpen;
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
onDismiss: () => {
|
|
224
255
|
clearTimeouts();
|
|
225
256
|
touch.clearTapOpen();
|
|
257
|
+
// Controlled: report and stop. The close — and the focus restore that
|
|
258
|
+
// goes with it — happens in the controlled effect if and when the
|
|
259
|
+
// consumer flips `isOpen`.
|
|
260
|
+
if (isOpen !== undefined) {
|
|
261
|
+
onHide?.();
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Only when the card itself held focus, which is the one case the
|
|
265
|
+
// content-level handler this replaced could run in. Refocusing
|
|
266
|
+
// unconditionally would drag the caret out of a field the user was
|
|
267
|
+
// typing in while a hover card happened to be up; arming the re-show
|
|
268
|
+
// guard unconditionally would swallow their next focus on the trigger,
|
|
269
|
+
// because a focus() on the already-focused trigger fires no focusin to
|
|
270
|
+
// clear it.
|
|
271
|
+
const card = typeof document === 'undefined' ? null : document.getElementById(layer.id);
|
|
272
|
+
const hadFocus = card?.contains(document.activeElement) ?? false;
|
|
226
273
|
layer.hide();
|
|
274
|
+
if (hadFocus) {
|
|
275
|
+
isEscapeDismissingRef.current = true;
|
|
276
|
+
triggerRef.current?.focus();
|
|
277
|
+
}
|
|
227
278
|
}
|
|
228
|
-
}
|
|
279
|
+
});
|
|
229
280
|
|
|
230
281
|
// Interaction ref that handles event listeners only
|
|
231
282
|
const {
|
|
@@ -238,7 +289,6 @@ export function useHoverCard(options = {}) {
|
|
|
238
289
|
triggerRef.current.removeEventListener('mouseleave', handleMouseLeave);
|
|
239
290
|
triggerRef.current.removeEventListener('focusin', handleFocusIn);
|
|
240
291
|
triggerRef.current.removeEventListener('focusout', handleFocusOut);
|
|
241
|
-
triggerRef.current.removeEventListener('keydown', handleKeyDown);
|
|
242
292
|
triggerRef.current.removeEventListener('pointerenter', handlePointerEnter);
|
|
243
293
|
triggerRef.current.removeEventListener('pointerdown', handlePointerDown);
|
|
244
294
|
}
|
|
@@ -257,12 +307,9 @@ export function useHoverCard(options = {}) {
|
|
|
257
307
|
el.addEventListener('focusin', handleFocusIn);
|
|
258
308
|
el.addEventListener('focusout', handleFocusOut);
|
|
259
309
|
}
|
|
260
|
-
|
|
261
|
-
// Attach keydown for Escape handling
|
|
262
|
-
el.addEventListener('keydown', handleKeyDown);
|
|
263
310
|
}
|
|
264
311
|
triggerRef.current = el;
|
|
265
|
-
}, [focusTrigger, handleMouseEnter, handleMouseLeave, handleFocusIn, handleFocusOut,
|
|
312
|
+
}, [focusTrigger, handleMouseEnter, handleMouseLeave, handleFocusIn, handleFocusOut, handlePointerEnter, handlePointerDown]);
|
|
266
313
|
|
|
267
314
|
// Combined ref - shorthand for calling both positionRef and interactionRef
|
|
268
315
|
const ref = useCallback(el => {
|
|
@@ -295,14 +342,27 @@ export function useHoverCard(options = {}) {
|
|
|
295
342
|
layer.show();
|
|
296
343
|
} else {
|
|
297
344
|
clearTimeouts();
|
|
345
|
+
// A consumer closing the card while it holds focus would strand focus on
|
|
346
|
+
// <body>. Arming the re-show guard is what keeps the refocus from
|
|
347
|
+
// reopening the card through `handleFocusIn`, which shows on any focusin.
|
|
348
|
+
const card = typeof document === 'undefined' ? null : document.getElementById(layer.id);
|
|
349
|
+
const hadFocus = card?.contains(document.activeElement) ?? false;
|
|
298
350
|
layer.hide();
|
|
351
|
+
if (hadFocus) {
|
|
352
|
+
isEscapeDismissingRef.current = true;
|
|
353
|
+
triggerRef.current?.focus();
|
|
354
|
+
}
|
|
299
355
|
}
|
|
300
356
|
}, [isOpen, clearTimeouts, layer]);
|
|
301
357
|
|
|
302
358
|
// Render function that wraps layer.render with hover card behavior
|
|
303
359
|
const renderHoverCard = useCallback((children, props) => {
|
|
304
360
|
const renderPlacement = props?.placement ?? placement;
|
|
305
|
-
const themeClassName = themeProps('
|
|
361
|
+
const themeClassName = themeProps('hover-card', undefined, {
|
|
362
|
+
// `hovercard` ran the compound name together; themes styling it keep
|
|
363
|
+
// working until the next major.
|
|
364
|
+
legacyNames: ['hovercard']
|
|
365
|
+
}).className;
|
|
306
366
|
const renderProps = {
|
|
307
367
|
placement: renderPlacement,
|
|
308
368
|
alignment: props?.alignment ?? alignment,
|
|
@@ -343,20 +403,6 @@ export function useHoverCard(options = {}) {
|
|
|
343
403
|
isHoveringContentRef.current = false;
|
|
344
404
|
scheduleHide();
|
|
345
405
|
},
|
|
346
|
-
onKeyDown: e => {
|
|
347
|
-
if (e.key === 'Escape') {
|
|
348
|
-
// Stop propagation so parent components don't react to the same Escape
|
|
349
|
-
e.stopPropagation();
|
|
350
|
-
// Set flag to prevent re-show when we refocus trigger
|
|
351
|
-
isEscapeDismissingRef.current = true;
|
|
352
|
-
// Hide immediately
|
|
353
|
-
clearTimeouts();
|
|
354
|
-
touch.clearTapOpen();
|
|
355
|
-
layer.hide();
|
|
356
|
-
// Refocus the trigger
|
|
357
|
-
triggerRef.current?.focus();
|
|
358
|
-
}
|
|
359
|
-
},
|
|
360
406
|
onBlur: e => {
|
|
361
407
|
// Check if focus is moving back to the trigger or staying within content
|
|
362
408
|
const relatedTarget = e.relatedTarget;
|
|
@@ -383,7 +429,9 @@ export function useHoverCard(options = {}) {
|
|
|
383
429
|
positionRef: layer.ref,
|
|
384
430
|
interactionRef,
|
|
385
431
|
anchorId: layer.anchorId,
|
|
432
|
+
id: layer.id,
|
|
386
433
|
describedBy: layer.id,
|
|
434
|
+
isOpen: layer.isOpen,
|
|
387
435
|
renderHoverCard,
|
|
388
436
|
show: layer.show,
|
|
389
437
|
hide: layer.hide
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxIndicator.d.ts","sourceRoot":"","sources":["../../src/Indicator/CheckboxIndicator.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAwI5C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,IAAW,EACX,UAAkB,EAClB,QAAQ,EACR,GAAG,EACH,SAAS,EACT,KAAK,EACL,MAAM,EACN,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,gBAAgB,CAAC,+
|
|
1
|
+
{"version":3,"file":"CheckboxIndicator.d.ts","sourceRoot":"","sources":["../../src/Indicator/CheckboxIndicator.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAwI5C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,IAAW,EACX,UAAkB,EAClB,QAAQ,EACR,GAAG,EACH,SAAS,EACT,KAAK,EACL,MAAM,EACN,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,gBAAgB,CAAC,+BA8ElC;yBAxFe,iBAAiB"}
|
|
@@ -155,7 +155,9 @@ export function CheckboxIndicator({
|
|
|
155
155
|
children: isRenderable(children) ? children : /*#__PURE__*/_jsxs(_Fragment, {
|
|
156
156
|
children: [/*#__PURE__*/_jsx("svg", {
|
|
157
157
|
viewBox: "0 0 10 10",
|
|
158
|
-
...
|
|
158
|
+
...mergeProps(themeProps('checkbox-indicator-check', {
|
|
159
|
+
size
|
|
160
|
+
}), stylex.props(styles.checkmark, checkmarkSizeStyles[size], isChecked && styles.checkmarkVisible)),
|
|
159
161
|
children: /*#__PURE__*/_jsx("path", {
|
|
160
162
|
d: "M8.5 2.5L4 7.5L1.5 5",
|
|
161
163
|
stroke: "currentColor",
|
|
@@ -165,7 +167,9 @@ export function CheckboxIndicator({
|
|
|
165
167
|
strokeLinejoin: "round"
|
|
166
168
|
})
|
|
167
169
|
}), /*#__PURE__*/_jsx("span", {
|
|
168
|
-
...
|
|
170
|
+
...mergeProps(themeProps('checkbox-indicator-dash', {
|
|
171
|
+
size
|
|
172
|
+
}), stylex.props(styles.indeterminateMark, indeterminateSizeStyles[size], isIndeterminate && styles.indeterminateMarkVisible))
|
|
169
173
|
})]
|
|
170
174
|
})
|
|
171
175
|
});
|
package/dist/Item/Item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../src/Item/Item.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAS,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAU7C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../src/Item/Item.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAS,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAU7C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,WAAW,CAAC;IACvD,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7B;;;OAGG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;;OAGG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAE5C;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAErD;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+LD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,EACnB,EAAE,EAAE,SAAiB,EACrB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAgB,EAChB,OAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,MAAkB,EAClB,OAAO,EACP,cAAc,EACd,IAAI,EACJ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,EACjB,aAAqB,EACrB,UAAkB,EAClB,UAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,IAAI,EACJ,GAAG,SAAS,EACb,EAAE,SAAS,+BAqNX;yBA/Oe,IAAI"}
|
package/dist/Item/Item.js
CHANGED
|
@@ -19,7 +19,8 @@ import { useRef } from 'react';
|
|
|
19
19
|
import * as stylex from '@stylexjs/stylex';
|
|
20
20
|
import "../theme/tokens.stylex.js";
|
|
21
21
|
import { colorVars, radiusVars, spacingVars, durationVars, easeVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
22
|
-
import { mergeProps
|
|
22
|
+
import { mergeProps } from "../utils/index.js";
|
|
23
|
+
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
23
24
|
import { computeTargetAndRel } from "../Link/computeTargetAndRel.js";
|
|
24
25
|
import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
25
26
|
import { useClickableContainer } from "../hooks/useClickableContainer.js";
|
|
@@ -352,8 +353,9 @@ export function Item({
|
|
|
352
353
|
children: endContent
|
|
353
354
|
})]
|
|
354
355
|
});
|
|
356
|
+
const mergedRef = useMergedRefs(ref, containerRef);
|
|
355
357
|
return /*#__PURE__*/_jsx(Component, {
|
|
356
|
-
ref: isDelegate ?
|
|
358
|
+
ref: isDelegate ? mergedRef : ref,
|
|
357
359
|
...restProps,
|
|
358
360
|
"aria-selected": allowsAriaSelected && isSelected || undefined
|
|
359
361
|
// aria-selected is invalid on roles that don't permit it (listitem, a
|
package/dist/Kbd/Kbd.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kbd.d.ts","sourceRoot":"","sources":["../../src/Kbd/Kbd.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAA6B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Kbd.d.ts","sourceRoot":"","sources":["../../src/Kbd/Kbd.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAA6B,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0G5C,MAAM,WAAW,QAAS,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAC,EAAE,QAAQ,qBAgC3E;yBAhCe,GAAG"}
|
package/dist/Kbd/Kbd.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import React, { useSyncExternalStore } from 'react';
|
|
16
16
|
import * as stylex from '@stylexjs/stylex';
|
|
17
17
|
import { mergeProps } from "../utils/index.js";
|
|
18
|
+
import { isApplePlatform } from "../utils/isApplePlatform.js";
|
|
18
19
|
import { themeProps } from "../utils/themeProps.js";
|
|
19
20
|
import "../theme/tokens.stylex.js";
|
|
20
21
|
import { colorVars, spacingVars, radiusVars, typographyVars, fontWeightVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
@@ -98,24 +99,6 @@ function subscribeToPlatformChanges() {
|
|
|
98
99
|
function getServerPlatformSnapshot() {
|
|
99
100
|
return false;
|
|
100
101
|
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Detects whether the current platform is macOS/iOS.
|
|
104
|
-
* Prefers the User-Agent Client Hints API when available (modern Chrome/Edge),
|
|
105
|
-
* falls back to navigator.platform (deprecated but universally supported).
|
|
106
|
-
*/
|
|
107
|
-
function detectMac() {
|
|
108
|
-
if (typeof navigator === 'undefined') {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
// Prefer User-Agent Client Hints API (not deprecated)
|
|
112
|
-
const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null;
|
|
113
|
-
if (uaData && typeof uaData === 'object' && 'platform' in uaData) {
|
|
114
|
-
return /mac/i.test(uaData.platform ?? '');
|
|
115
|
-
}
|
|
116
|
-
// Fallback: navigator.platform (deprecated but still shipped everywhere)
|
|
117
|
-
return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? '');
|
|
118
|
-
}
|
|
119
102
|
/**
|
|
120
103
|
* Displays a keyboard shortcut as styled <kbd> elements.
|
|
121
104
|
*
|
|
@@ -139,7 +122,7 @@ export function Kbd({
|
|
|
139
122
|
style,
|
|
140
123
|
...rest
|
|
141
124
|
}) {
|
|
142
|
-
const isMac = useSyncExternalStore(subscribeToPlatformChanges,
|
|
125
|
+
const isMac = useSyncExternalStore(subscribeToPlatformChanges, isApplePlatform, getServerPlatformSnapshot);
|
|
143
126
|
const parts = keys.split('+').map(key => key.trim().toLowerCase());
|
|
144
127
|
|
|
145
128
|
// Screen-reader name: the joined spoken labels (e.g. "Command + K"), since
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file LayerDepthContext.tsx
|
|
3
|
+
* @input React context
|
|
4
|
+
* @output Exports LayerDepthContext, useLayerDepth, LayerDepthProvider
|
|
5
|
+
* @position Layer system; how the dismissal stack learns which layer is nested
|
|
6
|
+
* inside which.
|
|
7
|
+
*
|
|
8
|
+
* SYNC: When modified, update:
|
|
9
|
+
* - /packages/core/src/Layer/index.ts
|
|
10
|
+
* - /packages/core/src/Layer/useLayerDismissal.ts
|
|
11
|
+
*
|
|
12
|
+
* Nesting is read from the React tree rather than the DOM. Two reasons:
|
|
13
|
+
*
|
|
14
|
+
* - **Portals.** A nested overlay routinely renders into `document.body` or the
|
|
15
|
+
* native top layer, so DOM containment reports it as a sibling of the layer
|
|
16
|
+
* it is logically inside. React context flows through `createPortal`, so the
|
|
17
|
+
* tree keeps the relationship the DOM loses.
|
|
18
|
+
* - **Same-commit mounts.** Depth is fixed during render. Effect order is not
|
|
19
|
+
* available then and is misleading anyway: React runs child effects before
|
|
20
|
+
* parent effects, so an inner layer registers first and looks "older" than
|
|
21
|
+
* the outer layer that contains it.
|
|
22
|
+
*
|
|
23
|
+
* There is nothing to mount at the app root: the context defaults to 0, and
|
|
24
|
+
* each layer provides depth for its OWN content, so nesting composes on its own.
|
|
25
|
+
*/
|
|
26
|
+
import { type ReactNode } from 'react';
|
|
27
|
+
/**
|
|
28
|
+
* How many layers deep the current subtree is. 0 at the app root; each layer
|
|
29
|
+
* increments it for its own content.
|
|
30
|
+
*/
|
|
31
|
+
export declare const LayerDepthContext: import("react").Context<number>;
|
|
32
|
+
/**
|
|
33
|
+
* Read the current nesting depth. A layer calls this to learn its OWN depth —
|
|
34
|
+
* the depth of the subtree it is rendered into, before it pushes its content
|
|
35
|
+
* one level deeper.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useLayerDepth(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Wrap a layer's content so any layer opened from inside it registers as
|
|
40
|
+
* nested. Takes no depth prop on purpose: it reads the ambient depth and adds
|
|
41
|
+
* one, so nesting composes without anyone tracking absolute numbers.
|
|
42
|
+
*
|
|
43
|
+
* Renders no DOM element — it is a context boundary only, which is why it takes
|
|
44
|
+
* no `xstyle`/`ref` and exposes no props interface.
|
|
45
|
+
*/
|
|
46
|
+
export declare function LayerDepthProvider({ children }: {
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
}): import("react").JSX.Element;
|
|
49
|
+
export declare namespace LayerDepthProvider {
|
|
50
|
+
var displayName: string;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=LayerDepthContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerDepthContext.d.ts","sourceRoot":"","sources":["../../src/Layer/LayerDepthContext.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAqB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iCAAmB,CAAC;AAGlD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAC,QAAQ,EAAC,EAAE;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAC,+BAGnE;yBAHe,kBAAkB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file LayerDepthContext.tsx
|
|
7
|
+
* @input React context
|
|
8
|
+
* @output Exports LayerDepthContext, useLayerDepth, LayerDepthProvider
|
|
9
|
+
* @position Layer system; how the dismissal stack learns which layer is nested
|
|
10
|
+
* inside which.
|
|
11
|
+
*
|
|
12
|
+
* SYNC: When modified, update:
|
|
13
|
+
* - /packages/core/src/Layer/index.ts
|
|
14
|
+
* - /packages/core/src/Layer/useLayerDismissal.ts
|
|
15
|
+
*
|
|
16
|
+
* Nesting is read from the React tree rather than the DOM. Two reasons:
|
|
17
|
+
*
|
|
18
|
+
* - **Portals.** A nested overlay routinely renders into `document.body` or the
|
|
19
|
+
* native top layer, so DOM containment reports it as a sibling of the layer
|
|
20
|
+
* it is logically inside. React context flows through `createPortal`, so the
|
|
21
|
+
* tree keeps the relationship the DOM loses.
|
|
22
|
+
* - **Same-commit mounts.** Depth is fixed during render. Effect order is not
|
|
23
|
+
* available then and is misleading anyway: React runs child effects before
|
|
24
|
+
* parent effects, so an inner layer registers first and looks "older" than
|
|
25
|
+
* the outer layer that contains it.
|
|
26
|
+
*
|
|
27
|
+
* There is nothing to mount at the app root: the context defaults to 0, and
|
|
28
|
+
* each layer provides depth for its OWN content, so nesting composes on its own.
|
|
29
|
+
*/
|
|
30
|
+
import { createContext, use } from 'react';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* How many layers deep the current subtree is. 0 at the app root; each layer
|
|
34
|
+
* increments it for its own content.
|
|
35
|
+
*/
|
|
36
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
37
|
+
export const LayerDepthContext = /*#__PURE__*/createContext(0);
|
|
38
|
+
LayerDepthContext.displayName = 'LayerDepthContext';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Read the current nesting depth. A layer calls this to learn its OWN depth —
|
|
42
|
+
* the depth of the subtree it is rendered into, before it pushes its content
|
|
43
|
+
* one level deeper.
|
|
44
|
+
*/
|
|
45
|
+
export function useLayerDepth() {
|
|
46
|
+
return use(LayerDepthContext);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Wrap a layer's content so any layer opened from inside it registers as
|
|
51
|
+
* nested. Takes no depth prop on purpose: it reads the ambient depth and adds
|
|
52
|
+
* one, so nesting composes without anyone tracking absolute numbers.
|
|
53
|
+
*
|
|
54
|
+
* Renders no DOM element — it is a context boundary only, which is why it takes
|
|
55
|
+
* no `xstyle`/`ref` and exposes no props interface.
|
|
56
|
+
*/
|
|
57
|
+
export function LayerDepthProvider({
|
|
58
|
+
children
|
|
59
|
+
}) {
|
|
60
|
+
const depth = use(LayerDepthContext);
|
|
61
|
+
return /*#__PURE__*/_jsx(LayerDepthContext, {
|
|
62
|
+
value: depth + 1,
|
|
63
|
+
children: children
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
LayerDepthProvider.displayName = 'LayerDepthProvider';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifies the user gesture in flight. Two reads returning the same value
|
|
3
|
+
* happened within one press (or one keystroke).
|
|
4
|
+
*/
|
|
5
|
+
export declare function currentGesture(): number;
|
|
6
|
+
/** Whether the click belonging to the current gesture already bubbled. */
|
|
7
|
+
export declare function currentGestureHasClicked(): boolean;
|
|
8
|
+
//# sourceMappingURL=gestureCounter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gestureCounter.d.ts","sourceRoot":"","sources":["../../src/Layer/gestureCounter.ts"],"names":[],"mappings":"AA2CA;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,IAAI,OAAO,CAGlD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file gestureCounter.ts
|
|
7
|
+
* @input Listens for pointerdown, keydown, and click on the document
|
|
8
|
+
* @output Exports the current gesture identity and whether its click has run
|
|
9
|
+
* @position Internal to Layer; used by useLayer to tell a click that belongs
|
|
10
|
+
* to a dismissing press from a fresh one
|
|
11
|
+
*
|
|
12
|
+
* A browser light-dismiss and the trigger's own click come from ONE press, and
|
|
13
|
+
* which of them React sees first is a race. Comparing timestamps against a
|
|
14
|
+
* window guesses; counting gestures does not. The counter advances on every
|
|
15
|
+
* new press or keystroke, so "the click from the gesture that dismissed the
|
|
16
|
+
* layer" is exactly "the click while the counter still reads what it read at
|
|
17
|
+
* the dismissal", no matter how long the main thread was blocked in between.
|
|
18
|
+
*/
|
|
19
|
+
let gesture = 0;
|
|
20
|
+
let clickedGesture = null;
|
|
21
|
+
let isListening = false;
|
|
22
|
+
function advance() {
|
|
23
|
+
gesture += 1;
|
|
24
|
+
}
|
|
25
|
+
function markClicked() {
|
|
26
|
+
clickedGesture = gesture;
|
|
27
|
+
}
|
|
28
|
+
function listen() {
|
|
29
|
+
if (isListening || typeof document === 'undefined') {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
isListening = true;
|
|
33
|
+
// Capture phase: the count must advance before any handler reads it.
|
|
34
|
+
document.addEventListener('pointerdown', advance, true);
|
|
35
|
+
document.addEventListener('keydown', advance, true);
|
|
36
|
+
// Capture phase observes the click even when a consumer stops propagation.
|
|
37
|
+
document.addEventListener('click', markClicked, true);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Identifies the user gesture in flight. Two reads returning the same value
|
|
42
|
+
* happened within one press (or one keystroke).
|
|
43
|
+
*/
|
|
44
|
+
export function currentGesture() {
|
|
45
|
+
listen();
|
|
46
|
+
return gesture;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Whether the click belonging to the current gesture already bubbled. */
|
|
50
|
+
export function currentGestureHasClicked() {
|
|
51
|
+
listen();
|
|
52
|
+
return clickedGesture === gesture;
|
|
53
|
+
}
|
package/dist/Layer/index.d.ts
CHANGED
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export { useLayer } from './useLayer';
|
|
15
15
|
export type { LayerAlignment, LayerPlacement, ContextRenderProps, FixedRenderProps, ContextLayerOptions, FixedLayerOptions, ContextLayerReturn, FixedLayerReturn, } from './useLayer';
|
|
16
|
+
export { useLayerDismissal } from './useLayerDismissal';
|
|
17
|
+
export type { LayerEscapeBehavior, UseLayerDismissalOptions, UseLayerDismissalReturn, } from './useLayerDismissal';
|
|
18
|
+
export { LayerDepthProvider } from './LayerDepthContext';
|
|
16
19
|
export { useTouchTrigger, isActionTrigger } from './useTouchTrigger';
|
|
17
20
|
export type { LayerTouchTrigger, UseTouchTriggerOptions, UseTouchTriggerReturn, } from './useTouchTrigger';
|
|
18
21
|
export { LayerProvider } from './LayerProvider';
|