@astryxdesign/core 0.4.6 → 0.4.7-canary.20bae6c
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 +36 -0
- 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/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +3 -2
- package/dist/BottomSheet/BottomSheet.d.ts +1 -0
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +54 -15
- package/dist/BottomSheet/BottomSheetEdgeTint.d.ts +6 -0
- package/dist/BottomSheet/BottomSheetEdgeTint.d.ts.map +1 -0
- package/dist/BottomSheet/BottomSheetEdgeTint.js +62 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +1 -0
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +1 -0
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +13 -6
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +23 -5
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +11 -10
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +12 -4
- package/dist/Calendar/Calendar.d.ts +3 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +13 -14
- 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/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +3 -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/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +3 -2
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +3 -3
- 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/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +4 -3
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +3 -2
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +34 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +3 -2
- package/dist/Dialog/Dialog.d.ts +7 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +89 -58
- 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 -2
- package/dist/HoverCard/HoverCard.d.ts +6 -0
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.d.ts +5 -0
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +67 -25
- 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 +10 -3
- 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/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/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/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 +149 -23
- 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 +15 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +17 -6
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +3 -2
- 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/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +20 -17
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +3 -4
- 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 +3 -3
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +5 -0
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +4 -3
- 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 +3 -3
- 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 +3 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +3 -3
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +4 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +20 -8
- 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 +19 -5
- 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 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +3 -2
- 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.map +1 -1
- package/dist/Timestamp/Timestamp.js +5 -3
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +2 -2
- 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/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -3
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +3 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +3 -2
- package/dist/astryx.css +43 -1
- 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 +52 -91
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +10 -3
- package/dist/hooks/useListFocus.d.ts +5 -2
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +12 -6
- 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/utils/timeParser.d.ts +1 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +26 -12
- package/locales/en.json +27 -7
- package/locales/pseudo.json +15 -0
- package/package.json +8 -3
- 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 +2 -1
- package/src/AvatarGroup/AvatarGroup.tsx +3 -2
- package/src/BottomSheet/BottomSheet.test.tsx +123 -0
- package/src/BottomSheet/BottomSheet.tsx +36 -4
- package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +225 -0
- package/src/BottomSheet/BottomSheetEdgeTint.tsx +82 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +66 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +19 -0
- package/src/BottomSheet/BottomSheetSwitcher.tsx +16 -2
- package/src/BottomSheet/useSheetGestures.test.ts +27 -0
- package/src/BottomSheet/useSheetGestures.ts +25 -5
- package/src/Breadcrumbs/BreadcrumbItem.tsx +9 -5
- package/src/Button/Button.doc.mjs +22 -0
- package/src/ButtonGroup/ButtonGroup.doc.mjs +7 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +185 -1
- package/src/ButtonGroup/ButtonGroup.tsx +11 -3
- package/src/Calendar/Calendar.doc.mjs +4 -3
- package/src/Calendar/Calendar.test.tsx +52 -0
- package/src/Calendar/Calendar.tsx +18 -15
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Carousel/Carousel.tsx +3 -2
- 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/CheckboxInput/CheckboxInput.tsx +3 -2
- package/src/ClickableCard/ClickableCard.tsx +3 -2
- package/src/CodeBlock/CodeBlock.doc.mjs +6 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +3 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +3 -2
- package/src/ContextMenu/ContextMenu.doc.mjs +5 -0
- package/src/ContextMenu/ContextMenu.tsx +4 -3
- package/src/DateInput/DateInput.tsx +3 -2
- package/src/DateInput/DateInputTouch.test.tsx +36 -0
- package/src/DateInput/TouchDateField.tsx +35 -1
- package/src/DateTimeInput/DateTimeInput.tsx +2 -2
- package/src/Dialog/Dialog.doc.mjs +8 -3
- package/src/Dialog/Dialog.test.tsx +261 -1
- package/src/Dialog/Dialog.tsx +109 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- package/src/Field/Field.doc.mjs +13 -2
- package/src/FileInput/FileInput.tsx +3 -2
- package/src/Heading/Heading.test.tsx +23 -1
- package/src/Heading/Heading.tsx +6 -2
- package/src/HoverCard/HoverCard.doc.mjs +5 -0
- package/src/HoverCard/HoverCard.tsx +6 -0
- package/src/HoverCard/useHoverCard.tsx +81 -30
- package/src/Item/Item.tsx +5 -4
- package/src/Kbd/Kbd.test.tsx +17 -0
- package/src/Kbd/Kbd.tsx +10 -3
- package/src/Layer/LayerDepthContext.tsx +62 -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/useLayerDismissal.test.tsx +469 -0
- package/src/Layer/useLayerDismissal.ts +173 -0
- package/src/Layout/Layout.doc.mjs +2 -2
- 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/Markdown/index.ts +1 -0
- package/src/Markdown/parser.perf.test.ts +71 -1
- package/src/Markdown/parser.test.ts +145 -2
- package/src/Markdown/parser.ts +208 -22
- package/src/MobileNav/MobileNav.tsx +62 -36
- package/src/MoreMenu/MoreMenu.doc.mjs +7 -1
- package/src/MultiSelector/MultiSelector.doc.mjs +27 -0
- package/src/MultiSelector/MultiSelector.test.tsx +105 -0
- package/src/MultiSelector/MultiSelector.tsx +50 -6
- package/src/MultiSelector/index.ts +1 -0
- package/src/NavMenu/NavHeadingMenu.tsx +3 -2
- package/src/NumberInput/NumberInput.doc.mjs +5 -0
- package/src/Outline/Outline.tsx +3 -2
- package/src/OverflowList/OverflowList.tsx +3 -2
- package/src/Overlay/Overlay.tsx +3 -2
- package/src/Popover/Popover.test.tsx +27 -1
- package/src/Popover/usePopover.tsx +31 -28
- package/src/PowerSearch/PowerSearch.doc.mjs +26 -0
- package/src/PowerSearch/PowerSearch.tsx +5 -2
- package/src/Resizable/ResizeHandle.tsx +3 -2
- package/src/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/SelectableCard/SelectableCard.tsx +3 -2
- package/src/Selector/Selector.doc.mjs +12 -1
- package/src/Selector/Selector.test.tsx +21 -0
- package/src/Selector/Selector.tsx +11 -1
- package/src/SideNav/SideNav.doc.mjs +6 -6
- package/src/SideNav/SideNav.tsx +4 -2
- package/src/SideNav/SideNavItem.tsx +4 -2
- package/src/Slider/Slider.tsx +3 -2
- 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.tsx +3 -2
- package/src/TabList/Tab.tsx +5 -1
- package/src/TabList/TabList.test.tsx +21 -4
- package/src/TabList/TabList.tsx +3 -2
- package/src/Table/BaseTable.tsx +6 -3
- package/src/Table/Table.test.tsx +35 -0
- 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 +17 -8
- 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 +76 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +40 -7
- 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 +23 -1
- package/src/Text/Text.tsx +6 -2
- package/src/TextArea/TextArea.tsx +3 -2
- 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.tsx +4 -2
- package/src/Toast/Toast.doc.mjs +6 -0
- package/src/Token/TokenLink.tsx +2 -2
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -0
- 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/TopNavMegaMenu.tsx +3 -2
- package/src/Typeahead/BaseTypeahead.tsx +3 -2
- package/src/Typeahead/Typeahead.doc.mjs +5 -0
- package/src/Typeahead/Typeahead.tsx +3 -2
- package/src/__tests__/complexComponentContract.test.tsx +81 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- package/src/hooks/useFocusTrap.ts +54 -107
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +165 -0
- package/src/hooks/useHotkeys.test.ts +18 -0
- package/src/hooks/useHotkeys.ts +10 -3
- package/src/hooks/useListFocus.doc.mjs +2 -2
- package/src/hooks/useListFocus.test.tsx +65 -3
- package/src/hooks/useListFocus.ts +15 -7
- 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/index.ts +1 -0
- package/src/theme/MediaTheme.doc.mjs +5 -5
- package/src/utils/timeParser.test.ts +6 -1
- package/src/utils/timeParser.ts +35 -13
- package/src/__tests__/inputWidthContract.test.tsx +0 -69
|
@@ -17,69 +17,26 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { useCallback, useEffect, useRef } from 'react';
|
|
19
19
|
import { FOCUSABLE_SELECTOR } from "./focusableSelector.js";
|
|
20
|
-
import {
|
|
20
|
+
import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* traps in a shared stack lets only the top-most trap respond to Escape.
|
|
29
|
-
*
|
|
30
|
-
* "Top-most" is resolved by DOM containment first, push order second. Push
|
|
31
|
-
* order alone is not reliable: React runs child effects before parent
|
|
32
|
-
* effects, so when an outer and an inner (DOM-nested) trap mount in the SAME
|
|
33
|
-
* commit, the inner trap pushes first and the outer trap would wrongly win a
|
|
34
|
-
* pure last-pushed comparison.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
const escapeStack = [];
|
|
38
|
-
function pushEscapeHandler(entry) {
|
|
39
|
-
escapeStack.push(entry);
|
|
40
|
-
}
|
|
41
|
-
function removeEscapeHandler(handler) {
|
|
42
|
-
for (let i = escapeStack.length - 1; i >= 0; i--) {
|
|
43
|
-
if (escapeStack[i].handler === handler) {
|
|
44
|
-
escapeStack.splice(i, 1);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Resolve the top-most trap: walk the stack in push order, keeping the
|
|
52
|
-
* deepest container by DOM containment. When a later entry's container
|
|
53
|
-
* contains the current candidate's container, the candidate is nested inside
|
|
54
|
-
* it and stays on top; otherwise the later push wins (containment for nested
|
|
55
|
-
* traps, push order as the tiebreaker for unrelated ones).
|
|
56
|
-
*/
|
|
57
|
-
function isTopEscapeHandler(handler) {
|
|
58
|
-
if (escapeStack.length === 0) {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
let top = escapeStack[0];
|
|
62
|
-
for (let i = 1; i < escapeStack.length; i++) {
|
|
63
|
-
const entry = escapeStack[i];
|
|
64
|
-
const topContainer = top.getContainer();
|
|
65
|
-
const entryContainer = entry.getContainer();
|
|
66
|
-
if (topContainer != null && entryContainer != null && entryContainer !== topContainer && entryContainer.contains(topContainer)) {
|
|
67
|
-
// The current top is nested inside this entry — it stays on top.
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
top = entry;
|
|
71
|
-
}
|
|
72
|
-
return top.handler === handler;
|
|
73
|
-
}
|
|
22
|
+
// Escape-dismissible focus traps currently mounted. This is the whole state
|
|
23
|
+
// behind `hasActiveFocusTrapEscape`, which predates the shared stack and must
|
|
24
|
+
// keep answering about focus traps alone — the stack now carries families that
|
|
25
|
+
// never trapped focus (tooltips, hover cards), and counting those would tell
|
|
26
|
+
// callers a trap is above them when none is.
|
|
27
|
+
let activeEscapeTrapCount = 0;
|
|
74
28
|
|
|
75
29
|
/**
|
|
76
|
-
* Whether
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
30
|
+
* Whether an Escape-dismissible focus trap is currently active — a Popover,
|
|
31
|
+
* menu or other trapped layer that would take an Escape press.
|
|
32
|
+
*
|
|
33
|
+
* @deprecated The focus trap no longer owns Escape coordination — every overlay
|
|
34
|
+
* family shares one stack (`useLayerDismissal`), which routes each press to
|
|
35
|
+
* the top-most layer. A layer that wants the same ordering should join the
|
|
36
|
+
* stack rather than ask whether a trap exists.
|
|
80
37
|
*/
|
|
81
38
|
export function hasActiveFocusTrapEscape() {
|
|
82
|
-
return
|
|
39
|
+
return activeEscapeTrapCount > 0;
|
|
83
40
|
}
|
|
84
41
|
|
|
85
42
|
/**
|
|
@@ -206,6 +163,36 @@ export function useFocusTrap(options) {
|
|
|
206
163
|
// Track if focus change was triggered by keyboard (Tab key)
|
|
207
164
|
const isKeyboardNavigationRef = useRef(false);
|
|
208
165
|
|
|
166
|
+
// Join the shared layer dismissal stack. The trap no longer listens for
|
|
167
|
+
// Escape itself: the stack owns one listener and routes each press to the
|
|
168
|
+
// top-most layer, so a popover inside a Dialog, a submenu inside a menu, and
|
|
169
|
+
// a modal inside a modal all peel off one at a time. A trap with no
|
|
170
|
+
// `onEscape` is not dismissible and stays off the stack, so a press flows
|
|
171
|
+
// past it to whatever is underneath.
|
|
172
|
+
// One expression drives both the stack registration and the deprecated
|
|
173
|
+
// `hasActiveFocusTrapEscape` count, so the two can never disagree about
|
|
174
|
+
// whether this trap is active.
|
|
175
|
+
const isEscapeTrap = isActive && onEscape != null;
|
|
176
|
+
useLayerDismissal({
|
|
177
|
+
isActive: isEscapeTrap,
|
|
178
|
+
onDismiss: () => {
|
|
179
|
+
onEscape?.();
|
|
180
|
+
},
|
|
181
|
+
// The trap renders nothing, so it cannot push a depth provider around its
|
|
182
|
+
// content; hand the stack the container instead so two DOM-nested traps
|
|
183
|
+
// still resolve in the right order.
|
|
184
|
+
getContainer: () => containerRef.current
|
|
185
|
+
});
|
|
186
|
+
useEffect(() => {
|
|
187
|
+
if (!isEscapeTrap) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
activeEscapeTrapCount += 1;
|
|
191
|
+
return () => {
|
|
192
|
+
activeEscapeTrapCount -= 1;
|
|
193
|
+
};
|
|
194
|
+
}, [isEscapeTrap]);
|
|
195
|
+
|
|
209
196
|
/**
|
|
210
197
|
* Focus the first focusable element.
|
|
211
198
|
*/
|
|
@@ -295,46 +282,23 @@ export function useFocusTrap(options) {
|
|
|
295
282
|
}, [isActive]);
|
|
296
283
|
|
|
297
284
|
/**
|
|
298
|
-
* Handle Tab key to wrap focus at boundaries
|
|
299
|
-
*
|
|
285
|
+
* Handle Tab key to wrap focus at boundaries. Also tracks that keyboard
|
|
286
|
+
* navigation is occurring.
|
|
287
|
+
*
|
|
288
|
+
* No Escape here, and no IME guard: the shared stack owns the press, claims
|
|
289
|
+
* a composing Escape so no close request follows, and dismisses the trap
|
|
290
|
+
* through `onEscape` above. The trap renders no element of its own, so it
|
|
291
|
+
* has no `cancel` to answer either.
|
|
300
292
|
*/
|
|
301
293
|
useEffect(() => {
|
|
302
294
|
if (!isActive) {
|
|
303
295
|
return;
|
|
304
296
|
}
|
|
305
|
-
|
|
306
|
-
// Register this trap on the shared Escape stack so only the top-most
|
|
307
|
-
// active trap responds to Escape. A stable identity per active period is
|
|
308
|
-
// enough — we push on activate and remove on cleanup. The container is
|
|
309
|
-
// read lazily: the ref may not be attached yet at effect time, and the
|
|
310
|
-
// stack resolves top-most by DOM containment at keydown time.
|
|
311
|
-
const escapeHandler = () => {
|
|
312
|
-
onEscape?.();
|
|
313
|
-
};
|
|
314
|
-
if (onEscape) {
|
|
315
|
-
pushEscapeHandler({
|
|
316
|
-
handler: escapeHandler,
|
|
317
|
-
getContainer: () => containerRef.current
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
297
|
const handleKeyDown = event => {
|
|
321
298
|
const container = containerRef.current;
|
|
322
299
|
if (!container) {
|
|
323
300
|
return;
|
|
324
301
|
}
|
|
325
|
-
if (event.key === 'Escape' && onEscape) {
|
|
326
|
-
// Ignore Escape that is cancelling an IME composition, already handled
|
|
327
|
-
// by a nested handler, or not targeting the top-most trap.
|
|
328
|
-
if (event.defaultPrevented || isImeKeyEvent(event) || !isTopEscapeHandler(escapeHandler)) {
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
// Mark handled and stop propagation so an outer layer (e.g. a Dialog
|
|
332
|
-
// hosting this popover) does not also dismiss on the same press.
|
|
333
|
-
event.preventDefault();
|
|
334
|
-
event.stopPropagation();
|
|
335
|
-
onEscape();
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
302
|
if (event.key === 'Tab') {
|
|
339
303
|
// Mark that keyboard navigation is happening
|
|
340
304
|
isKeyboardNavigationRef.current = true;
|
|
@@ -371,9 +335,6 @@ export function useFocusTrap(options) {
|
|
|
371
335
|
document.addEventListener('keydown', handleKeyDown);
|
|
372
336
|
return () => {
|
|
373
337
|
document.removeEventListener('keydown', handleKeyDown);
|
|
374
|
-
if (onEscape) {
|
|
375
|
-
removeEscapeHandler(escapeHandler);
|
|
376
|
-
}
|
|
377
338
|
};
|
|
378
339
|
}, [isActive, onEscape]);
|
|
379
340
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHotkeys.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkeys.ts"],"names":[],"mappings":"AA6BA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;;OAeG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"useHotkeys.d.ts","sourceRoot":"","sources":["../../src/hooks/useHotkeys.ts"],"names":[],"mappings":"AA6BA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;;OAeG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkGD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAkClD"}
|
package/dist/hooks/useHotkeys.js
CHANGED
|
@@ -44,8 +44,9 @@ const KEY_ALIASES = {
|
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
46
|
* Detects whether the current platform is macOS/iOS.
|
|
47
|
-
* Prefers the User-Agent Client Hints API when
|
|
48
|
-
* falls back to navigator.platform (deprecated but universally
|
|
47
|
+
* Prefers the User-Agent Client Hints API when it names a platform (modern
|
|
48
|
+
* Chrome/Edge), falls back to navigator.platform (deprecated but universally
|
|
49
|
+
* supported) when it is absent or blank.
|
|
49
50
|
* Mirrors the detection used by Kbd so displayed and handled shortcuts agree.
|
|
50
51
|
*/
|
|
51
52
|
function isApplePlatform() {
|
|
@@ -54,7 +55,13 @@ function isApplePlatform() {
|
|
|
54
55
|
}
|
|
55
56
|
const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null;
|
|
56
57
|
if (uaData && typeof uaData === 'object' && 'platform' in uaData) {
|
|
57
|
-
|
|
58
|
+
const uaPlatform = uaData.platform;
|
|
59
|
+
// A blank platform is no answer, not a negative one. Builds that rewrite
|
|
60
|
+
// their client-hints identity ship '', so fall through rather than
|
|
61
|
+
// reading it as "not Apple".
|
|
62
|
+
if (typeof uaPlatform === 'string' && uaPlatform.trim() !== '') {
|
|
63
|
+
return /mac/i.test(uaPlatform);
|
|
64
|
+
}
|
|
58
65
|
}
|
|
59
66
|
return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? '');
|
|
60
67
|
}
|
|
@@ -38,7 +38,9 @@ export interface UseListFocusOptions {
|
|
|
38
38
|
*/
|
|
39
39
|
wrap?: boolean;
|
|
40
40
|
/**
|
|
41
|
-
* Callback when Escape key is pressed.
|
|
41
|
+
* Callback when Escape key is pressed. Supplying it also makes the list
|
|
42
|
+
* consume the key (`preventDefault`); without it Escape passes through to
|
|
43
|
+
* the surrounding layer.
|
|
42
44
|
*/
|
|
43
45
|
onEscape?: () => void;
|
|
44
46
|
/**
|
|
@@ -144,7 +146,8 @@ export interface UseListFocusReturn<T extends HTMLElement = HTMLElement> {
|
|
|
144
146
|
* - ArrowUp/ArrowLeft: Move to previous item (wraps to last)
|
|
145
147
|
* - Home: Move to first item
|
|
146
148
|
* - End: Move to last item
|
|
147
|
-
* - Escape:
|
|
149
|
+
* - Escape: runs `onEscape` and consumes the key. With no `onEscape` the key
|
|
150
|
+
* is left alone, so a surrounding layer can still dismiss on it.
|
|
148
151
|
*
|
|
149
152
|
* By default the hook only *moves* focus and leaves `tabindex` management to
|
|
150
153
|
* the caller. Opt into {@link UseListFocusOptions.hasRovingTabIndex} for a hook
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListFocus.d.ts","sourceRoot":"","sources":["../../src/hooks/useListFocus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useListFocus.d.ts","sourceRoot":"","sources":["../../src/hooks/useListFocus.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAEnC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAEhD;;;;OAIG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,MAAM,OAAO,CAAC;IAEzB;;;;;;OAMG;IACH,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC;IAE/C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;CAC/B;AA+FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC9D,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,CAAC,CAAC,CA2VvB"}
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*
|
|
15
15
|
* SYNC: When modified, update:
|
|
16
16
|
* - /packages/core/src/hooks/index.ts
|
|
17
|
+
* - /packages/core/src/hooks/useListFocus.doc.mjs
|
|
18
|
+
* - /packages/core/src/hooks/useListFocus.test.tsx
|
|
17
19
|
*/
|
|
18
20
|
import { useCallback, useRef } from 'react';
|
|
19
21
|
import { isRtlElement } from "./isRtlElement.js";
|
|
@@ -127,7 +129,8 @@ function shouldDeferToCaret(target, key) {
|
|
|
127
129
|
* - ArrowUp/ArrowLeft: Move to previous item (wraps to last)
|
|
128
130
|
* - Home: Move to first item
|
|
129
131
|
* - End: Move to last item
|
|
130
|
-
* - Escape:
|
|
132
|
+
* - Escape: runs `onEscape` and consumes the key. With no `onEscape` the key
|
|
133
|
+
* is left alone, so a surrounding layer can still dismiss on it.
|
|
131
134
|
*
|
|
132
135
|
* By default the hook only *moves* focus and leaves `tabindex` management to
|
|
133
136
|
* the caller. Opt into {@link UseListFocusOptions.hasRovingTabIndex} for a hook
|
|
@@ -380,12 +383,15 @@ export function useListFocus(options = {}) {
|
|
|
380
383
|
return;
|
|
381
384
|
}
|
|
382
385
|
|
|
383
|
-
// Escape is handled regardless of orientation
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
+
// Escape is handled regardless of orientation, but only *consumed* when
|
|
387
|
+
// a handler asked for it: a list with no dismissal to perform must leave
|
|
388
|
+
// the key to whatever host layer does have one, and those defer to
|
|
389
|
+
// `defaultPrevented` (see `useFocusTrap`) or to the native popover.
|
|
386
390
|
if (e.key === 'Escape') {
|
|
387
|
-
|
|
388
|
-
|
|
391
|
+
if (onEscape) {
|
|
392
|
+
e.preventDefault();
|
|
393
|
+
onEscape();
|
|
394
|
+
}
|
|
389
395
|
return;
|
|
390
396
|
}
|
|
391
397
|
const horizontal = orientation === 'horizontal' || orientation === 'both';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file useMergedRefs.ts
|
|
3
|
+
* @input React refs to combine into one stable callback ref
|
|
4
|
+
* @output Exports useMergedRefs
|
|
5
|
+
* @position Core hook; use when one element must receive multiple refs
|
|
6
|
+
*
|
|
7
|
+
* SYNC: When modified, update:
|
|
8
|
+
* - /packages/core/src/hooks/index.ts
|
|
9
|
+
* - /packages/core/src/hooks/useMergedRefs.doc.mjs
|
|
10
|
+
* - /packages/core/src/hooks/useMergedRefs.test.tsx
|
|
11
|
+
*/
|
|
12
|
+
import { type Ref, type RefCallback } from 'react';
|
|
13
|
+
/**
|
|
14
|
+
* Combine up to six refs into a callback ref whose identity changes only when
|
|
15
|
+
* one of the input refs changes.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useMergedRefs<T>(refA?: Ref<T>, refB?: Ref<T>, refC?: Ref<T>, refD?: Ref<T>, refE?: Ref<T>, refF?: Ref<T>): RefCallback<T>;
|
|
18
|
+
//# sourceMappingURL=useMergedRefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMergedRefs.d.ts","sourceRoot":"","sources":["../../src/hooks/useMergedRefs.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAU,KAAK,GAAG,EAAE,KAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAG1D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GACZ,WAAW,CAAC,CAAC,CAAC,CAKhB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useMergedRefs.ts
|
|
7
|
+
* @input React refs to combine into one stable callback ref
|
|
8
|
+
* @output Exports useMergedRefs
|
|
9
|
+
* @position Core hook; use when one element must receive multiple refs
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update:
|
|
12
|
+
* - /packages/core/src/hooks/index.ts
|
|
13
|
+
* - /packages/core/src/hooks/useMergedRefs.doc.mjs
|
|
14
|
+
* - /packages/core/src/hooks/useMergedRefs.test.tsx
|
|
15
|
+
*/
|
|
16
|
+
import { useMemo } from 'react';
|
|
17
|
+
import { mergeRefs } from "../utils/mergeRefs.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Combine up to six refs into a callback ref whose identity changes only when
|
|
21
|
+
* one of the input refs changes.
|
|
22
|
+
*/
|
|
23
|
+
export function useMergedRefs(refA, refB, refC, refD, refE, refF) {
|
|
24
|
+
return useMemo(() => mergeRefs(refA, refB, refC, refD, refE, refF), [refA, refB, refC, refD, refE, refF]);
|
|
25
|
+
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,7 @@ export * from "./NavIcon/index.js";
|
|
|
53
53
|
export * from "./NavMenu/index.js";
|
|
54
54
|
export * from "./Slider/index.js";
|
|
55
55
|
export * from "./Stack/index.js";
|
|
56
|
+
export * from "./Stepper/index.js";
|
|
56
57
|
export * from "./Switch/index.js";
|
|
57
58
|
export * from "./DateInput/index.js";
|
|
58
59
|
export * from "./DateTimeInput/index.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @file timeParser.ts
|
|
3
3
|
* @input Uses string parsing
|
|
4
4
|
* @output Exports time parsing and formatting utilities
|
|
5
|
-
* @position Shared utility; used by
|
|
5
|
+
* @position Shared utility; used by TimeInput and DateTimeInput
|
|
6
6
|
*
|
|
7
7
|
* SYNC: When modified, update this header
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeParser.d.ts","sourceRoot":"","sources":["../../src/utils/timeParser.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA6B5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,cAAc,GAAE,OAAe,GAC9B,aAAa,CAUf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,cAAc,GAAE,OAAe,GAC9B,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,cAAc,GAAE,OAAe,GAC9B,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,OAAe,GAC9B,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"timeParser.d.ts","sourceRoot":"","sources":["../../src/utils/timeParser.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA6B5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,cAAc,GAAE,OAAe,GAC9B,aAAa,CAUf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,cAAc,GAAE,OAAe,GAC9B,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,cAAc,GAAE,OAAe,GAC9B,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,OAAe,GAC9B,aAAa,GAAG,IAAI,CA6HtB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,aAAa,GAAG,SAAS,EAC5B,CAAC,EAAE,aAAa,GAAG,SAAS,GAC3B,MAAM,CA4BR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,GAAG,CAAC,EAAE,aAAa,EACnB,GAAG,CAAC,EAAE,aAAa,GAClB,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,aAAa,EACnB,GAAG,CAAC,EAAE,aAAa,EACnB,GAAG,CAAC,EAAE,aAAa,EACnB,cAAc,GAAE,OAAe,GAC9B,aAAa,CAoBf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,EACnB,YAAY,EAAE,MAAM,EACpB,cAAc,GAAE,OAAe,GAC9B,aAAa,CAwBf"}
|
package/dist/utils/timeParser.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @file timeParser.ts
|
|
5
5
|
* @input Uses string parsing
|
|
6
6
|
* @output Exports time parsing and formatting utilities
|
|
7
|
-
* @position Shared utility; used by
|
|
7
|
+
* @position Shared utility; used by TimeInput and DateTimeInput
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When modified, update this header
|
|
10
10
|
*/
|
|
@@ -134,17 +134,29 @@ export function parseTimeInput(input, includeSeconds = false) {
|
|
|
134
134
|
|
|
135
135
|
// Remove AM/PM suffix
|
|
136
136
|
const timeStr = trimmed.replace(/\s*[ap]\.?m?\.?\s*$/i, '').trim();
|
|
137
|
+
const convertHourTo24Hour = hour => {
|
|
138
|
+
if (!hasMeridiem) {
|
|
139
|
+
return hour;
|
|
140
|
+
}
|
|
141
|
+
if (hour < 1 || hour > 12) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
if (isPM && hour !== 12) {
|
|
145
|
+
return hour + 12;
|
|
146
|
+
}
|
|
147
|
+
if (isAM && hour === 12) {
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
return hour;
|
|
151
|
+
};
|
|
137
152
|
|
|
138
153
|
// Handle formats like "2pm" -> "2"
|
|
139
154
|
if (/^\d{1,2}$/.test(timeStr)) {
|
|
140
155
|
const hour = parseInt(timeStr, 10);
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
if (isAM && hour === 12) {
|
|
147
|
-
hour24 = 0;
|
|
156
|
+
if (hasMeridiem) {
|
|
157
|
+
const hour24 = convertHourTo24Hour(hour);
|
|
158
|
+
if (hour24 === null) {
|
|
159
|
+
return null;
|
|
148
160
|
}
|
|
149
161
|
return formatISOTime({
|
|
150
162
|
hour: hour24,
|
|
@@ -166,9 +178,10 @@ export function parseTimeInput(input, includeSeconds = false) {
|
|
|
166
178
|
if (/^\d{4}$/.test(timeStr)) {
|
|
167
179
|
const hour = parseInt(timeStr.slice(0, 2), 10);
|
|
168
180
|
const minute = parseInt(timeStr.slice(2, 4), 10);
|
|
169
|
-
|
|
181
|
+
const hour24 = convertHourTo24Hour(hour);
|
|
182
|
+
if (hour24 !== null && hour24 >= 0 && hour24 <= 23 && minute >= 0 && minute <= 59) {
|
|
170
183
|
return formatISOTime({
|
|
171
|
-
hour,
|
|
184
|
+
hour: hour24,
|
|
172
185
|
minute,
|
|
173
186
|
second: 0
|
|
174
187
|
}, includeSeconds);
|
|
@@ -181,9 +194,10 @@ export function parseTimeInput(input, includeSeconds = false) {
|
|
|
181
194
|
const hour = parseInt(timeStr.slice(0, 2), 10);
|
|
182
195
|
const minute = parseInt(timeStr.slice(2, 4), 10);
|
|
183
196
|
const second = parseInt(timeStr.slice(4, 6), 10);
|
|
184
|
-
|
|
197
|
+
const hour24 = convertHourTo24Hour(hour);
|
|
198
|
+
if (hour24 !== null && hour24 >= 0 && hour24 <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59) {
|
|
185
199
|
return formatISOTime({
|
|
186
|
-
hour,
|
|
200
|
+
hour: hour24,
|
|
187
201
|
minute,
|
|
188
202
|
second
|
|
189
203
|
}, includeSeconds);
|
package/locales/en.json
CHANGED
|
@@ -563,6 +563,10 @@
|
|
|
563
563
|
"defaultMessage": "Apply",
|
|
564
564
|
"description": "Primary button label inside a table's filter panel/popover; commits pending filter values. Imperative verb; pairs with `Reset`."
|
|
565
565
|
},
|
|
566
|
+
"@astryx.table.rowStatus.columnHeader": {
|
|
567
|
+
"defaultMessage": "Row status",
|
|
568
|
+
"description": "Screen-reader-only column header for the narrow status-indicator gutter a Table gains from useTableRowStatus. Sighted users see a blank gutter; assistive tech announces this as the column name."
|
|
569
|
+
},
|
|
566
570
|
"@astryx.table.selection.selectAllRows": {
|
|
567
571
|
"defaultMessage": "Select all rows",
|
|
568
572
|
"description": "Aria label for the \"select all rows\" checkbox in a Table header."
|
|
@@ -809,7 +813,15 @@
|
|
|
809
813
|
},
|
|
810
814
|
"@astryx.table.pagination.label": {
|
|
811
815
|
"defaultMessage": "Table pagination",
|
|
812
|
-
"description": "Screen-reader-only accessible name for
|
|
816
|
+
"description": "Screen-reader-only accessible name for a table's pagination `<nav>` (rendered below and/or above the table per the plugin's position config). Kept separate from `@astryx.pagination.label` so translations may diverge. When position='both', this string is interpolated as the {label} value into `@astryx.table.pagination.labelAbove`/`labelBelow` — keep it compatible with those suffix templates."
|
|
817
|
+
},
|
|
818
|
+
"@astryx.table.pagination.labelAbove": {
|
|
819
|
+
"defaultMessage": "{label} (top)",
|
|
820
|
+
"description": "Accessible name for the pagination `<nav>` rendered above the table when position='both' renders two navs. `label` is the resolved base label (default \"Table pagination\" or consumer-supplied); the suffix keeps the two same-type landmarks distinguishable."
|
|
821
|
+
},
|
|
822
|
+
"@astryx.table.pagination.labelBelow": {
|
|
823
|
+
"defaultMessage": "{label} (bottom)",
|
|
824
|
+
"description": "Accessible name for the pagination `<nav>` rendered below the table when position='both' renders two navs. `label` is the resolved base label (default \"Table pagination\" or consumer-supplied); the suffix keeps the two same-type landmarks distinguishable."
|
|
813
825
|
},
|
|
814
826
|
"@astryx.timeInput.placeholder": {
|
|
815
827
|
"defaultMessage": "Select a time",
|
|
@@ -1059,6 +1071,10 @@
|
|
|
1059
1071
|
"defaultMessage": "Expand row",
|
|
1060
1072
|
"description": "Screen-reader-only label on the row-expand chevron when the row is currently collapsed. Part of a four-way set with `collapseRow`, `expandAllRows`, `collapseAllRows`."
|
|
1061
1073
|
},
|
|
1074
|
+
"@astryx.tableRowExpansion.columnHeader": {
|
|
1075
|
+
"defaultMessage": "Row expansion",
|
|
1076
|
+
"description": "Screen-reader-only header for the leading column that holds the per-row expand/collapse chevrons. The column shows no visible label."
|
|
1077
|
+
},
|
|
1062
1078
|
"@astryx.tableRowExpansion.collapseAllRows": {
|
|
1063
1079
|
"defaultMessage": "Collapse all rows",
|
|
1064
1080
|
"description": "Screen-reader-only label on the same header button when every row is expanded. Part of the four-way set."
|
|
@@ -1067,29 +1083,33 @@
|
|
|
1067
1083
|
"defaultMessage": "Expand all rows",
|
|
1068
1084
|
"description": "Screen-reader-only label on the header expand-all/collapse-all button when at least one row is collapsed (clicking expands every expandable row). Part of the four-way set."
|
|
1069
1085
|
},
|
|
1086
|
+
"@astryx.stepper.label": {
|
|
1087
|
+
"defaultMessage": "Progress",
|
|
1088
|
+
"description": "Screen-reader-only fallback name for the Stepper's ordered list of steps, describing the sequence as a whole (e.g. `Progress`). Used as the aria-label when the consumer does not pass a `label`. Singular per ARIA convention."
|
|
1089
|
+
},
|
|
1070
1090
|
"@astryx.step.goToStep": {
|
|
1071
1091
|
"defaultMessage": "Go to step {stepNumber, number}: {label}",
|
|
1072
|
-
"description": "Accessible name for a clickable step in the
|
|
1092
|
+
"description": "Accessible name for a clickable step in the Stepper. {stepNumber} is the 1-based position, {label} is the step's visible label."
|
|
1073
1093
|
},
|
|
1074
1094
|
"@astryx.step.goToStepWithStatus": {
|
|
1075
1095
|
"defaultMessage": "Go to step {stepNumber, number}: {label}, {status}",
|
|
1076
|
-
"description": "Accessible name for a clickable
|
|
1096
|
+
"description": "Accessible name for a clickable Stepper step that also carries a status. {status} is one of the translated `step.status.*` words (completed/warning/error). Keep the pattern parallel to `step.goToStep`."
|
|
1077
1097
|
},
|
|
1078
1098
|
"@astryx.step.optional": {
|
|
1079
1099
|
"defaultMessage": "Optional",
|
|
1080
|
-
"description": "Visible indicator appended after a
|
|
1100
|
+
"description": "Visible indicator appended after a Stepper step's label when the step is optional (isOptional). Very short; appears inline after the label text."
|
|
1081
1101
|
},
|
|
1082
1102
|
"@astryx.step.status.completed": {
|
|
1083
1103
|
"defaultMessage": "completed",
|
|
1084
|
-
"description": "Screen-reader-only status word rendered next to a
|
|
1104
|
+
"description": "Screen-reader-only status word rendered next to a Stepper step label when the step is done (either progress-completed or status=success). Lowercase adjective; it is read mid-sentence after the step label."
|
|
1085
1105
|
},
|
|
1086
1106
|
"@astryx.step.status.warning": {
|
|
1087
1107
|
"defaultMessage": "warning",
|
|
1088
|
-
"description": "Screen-reader-only status word rendered next to a
|
|
1108
|
+
"description": "Screen-reader-only status word rendered next to a Stepper step label when status=warning. Lowercase noun/adjective; read mid-sentence after the step label."
|
|
1089
1109
|
},
|
|
1090
1110
|
"@astryx.step.status.error": {
|
|
1091
1111
|
"defaultMessage": "error",
|
|
1092
|
-
"description": "Screen-reader-only status word rendered next to a
|
|
1112
|
+
"description": "Screen-reader-only status word rendered next to a Stepper step label when status=error. Lowercase noun; read mid-sentence after the step label."
|
|
1093
1113
|
},
|
|
1094
1114
|
"@astryx.tableTree.collapseRow": {
|
|
1095
1115
|
"defaultMessage": "Collapse row",
|
package/locales/pseudo.json
CHANGED
|
@@ -422,6 +422,9 @@
|
|
|
422
422
|
"@astryx.table.filter.apply": {
|
|
423
423
|
"defaultMessage": "⟦Àþþłý⟧"
|
|
424
424
|
},
|
|
425
|
+
"@astryx.table.rowStatus.columnHeader": {
|
|
426
|
+
"defaultMessage": "⟦Řóŵ šţàţúš⟧"
|
|
427
|
+
},
|
|
425
428
|
"@astryx.table.selection.selectAllRows": {
|
|
426
429
|
"defaultMessage": "⟦Šéłéçţ àłł řóŵš⟧"
|
|
427
430
|
},
|
|
@@ -608,6 +611,12 @@
|
|
|
608
611
|
"@astryx.table.pagination.label": {
|
|
609
612
|
"defaultMessage": "⟦Ţàƀłé þàĝíñàţíóñ⟧"
|
|
610
613
|
},
|
|
614
|
+
"@astryx.table.pagination.labelAbove": {
|
|
615
|
+
"defaultMessage": "⟦{label} (ţóþ)⟧"
|
|
616
|
+
},
|
|
617
|
+
"@astryx.table.pagination.labelBelow": {
|
|
618
|
+
"defaultMessage": "⟦{label} (ƀóţţóɱ)⟧"
|
|
619
|
+
},
|
|
611
620
|
"@astryx.timeInput.placeholder": {
|
|
612
621
|
"defaultMessage": "⟦Šéłéçţ à ţíɱé⟧"
|
|
613
622
|
},
|
|
@@ -794,12 +803,18 @@
|
|
|
794
803
|
"@astryx.tableRowExpansion.expandRow": {
|
|
795
804
|
"defaultMessage": "⟦Éẋþàñð řóŵ⟧"
|
|
796
805
|
},
|
|
806
|
+
"@astryx.tableRowExpansion.columnHeader": {
|
|
807
|
+
"defaultMessage": "⟦Řóŵ éẋþàñšíóñ⟧"
|
|
808
|
+
},
|
|
797
809
|
"@astryx.tableRowExpansion.collapseAllRows": {
|
|
798
810
|
"defaultMessage": "⟦Çółłàþšé àłł řóŵš⟧"
|
|
799
811
|
},
|
|
800
812
|
"@astryx.tableRowExpansion.expandAllRows": {
|
|
801
813
|
"defaultMessage": "⟦Éẋþàñð àłł řóŵš⟧"
|
|
802
814
|
},
|
|
815
|
+
"@astryx.stepper.label": {
|
|
816
|
+
"defaultMessage": "⟦Þřóĝřéšš⟧"
|
|
817
|
+
},
|
|
803
818
|
"@astryx.step.goToStep": {
|
|
804
819
|
"defaultMessage": "⟦Ĝó ţó šţéþ {stepNumber, number}: {label}⟧"
|
|
805
820
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7-canary.20bae6c",
|
|
4
4
|
"displayName": "Astryx Core",
|
|
5
5
|
"description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
|
|
6
6
|
"author": "Meta Open Source",
|
|
@@ -489,6 +489,11 @@
|
|
|
489
489
|
"types": "./dist/StatusDot/index.d.ts",
|
|
490
490
|
"default": "./dist/StatusDot/index.js"
|
|
491
491
|
},
|
|
492
|
+
"./Stepper": {
|
|
493
|
+
"source": "./src/Stepper/index.ts",
|
|
494
|
+
"types": "./dist/Stepper/index.d.ts",
|
|
495
|
+
"default": "./dist/Stepper/index.js"
|
|
496
|
+
},
|
|
492
497
|
"./Switch": {
|
|
493
498
|
"source": "./src/Switch/index.ts",
|
|
494
499
|
"types": "./dist/Switch/index.d.ts",
|
|
@@ -656,6 +661,7 @@
|
|
|
656
661
|
"react-dom": ">=19.0.0"
|
|
657
662
|
},
|
|
658
663
|
"devDependencies": {
|
|
664
|
+
"@astryxdesign/cli": "0.4.7-canary.20bae6c",
|
|
659
665
|
"@babel/cli": "^8.0.4",
|
|
660
666
|
"@babel/core": "^7.29.7",
|
|
661
667
|
"@babel/preset-react": "^8.0.1",
|
|
@@ -664,8 +670,7 @@
|
|
|
664
670
|
"@testing-library/dom": "^10.0.0",
|
|
665
671
|
"@testing-library/jest-dom": "^6.6.0",
|
|
666
672
|
"@testing-library/react": "^16.3.2",
|
|
667
|
-
"rimraf": "^6.0.1"
|
|
668
|
-
"@astryxdesign/cli": "0.4.6"
|
|
673
|
+
"rimraf": "^6.0.1"
|
|
669
674
|
},
|
|
670
675
|
"dependencies": {
|
|
671
676
|
"intl-messageformat": "^11.2.9"
|