@astryxdesign/core 0.4.7 → 0.5.0-canary.1f8525f
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/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 +40 -15
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +51 -18
- 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 +5 -4
- 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 +3 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +14 -15
- 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/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/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 +38 -4
- 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/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 +7 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +89 -58
- 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/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/HoverCard.js +52 -3
- package/dist/HoverCard/useHoverCard.d.ts +16 -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/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 +177 -29
- 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/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +3 -2
- package/dist/NumberInput/NumberInput.d.ts +1 -0
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +27 -37
- package/dist/NumberInput/numberParser.d.ts +51 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +333 -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/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +20 -17
- 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 +19 -9
- 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 +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/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/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/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 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +9 -3
- 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/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +27 -8
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +2 -2
- package/dist/Tokenizer/Tokenizer.d.ts +3 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +2 -0
- 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.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +4 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +2 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +68 -29
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +3 -2
- package/dist/astryx.css +96 -7
- 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/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- 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/en.json +31 -7
- package/locales/pseudo.json +18 -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 +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 +13 -11
- package/src/Banner/Banner.test.tsx +102 -15
- package/src/Banner/Banner.tsx +72 -25
- 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 +22 -0
- package/src/Button/Button.test.tsx +13 -0
- package/src/Button/Button.tsx +5 -4
- package/src/ButtonGroup/ButtonGroup.doc.mjs +10 -1
- package/src/ButtonGroup/ButtonGroup.test.tsx +391 -1
- package/src/ButtonGroup/ButtonGroup.tsx +23 -5
- package/src/Calendar/Calendar.doc.mjs +4 -3
- package/src/Calendar/Calendar.test.tsx +103 -0
- package/src/Calendar/Calendar.tsx +19 -16
- package/src/Calendar/getInitialFocusDate.test.ts +94 -0
- package/src/Calendar/getInitialFocusDate.ts +93 -0
- package/src/Calendar/styles.ts +49 -31
- 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/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 +68 -9
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +38 -4
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- 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 +261 -1
- package/src/Dialog/Dialog.tsx +109 -58
- package/src/DropdownMenu/DropdownMenu.doc.mjs +6 -0
- 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/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 +13 -2
- package/src/HoverCard/HoverCard.test.tsx +101 -4
- package/src/HoverCard/HoverCard.tsx +71 -3
- package/src/HoverCard/useHoverCard.tsx +101 -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/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/Markdown.doc.mjs +5 -0
- 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 +145 -2
- package/src/Markdown/parser.ts +244 -29
- 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 +106 -0
- package/src/MultiSelector/MultiSelector.tsx +50 -6
- 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.tsx +3 -2
- package/src/NumberInput/NumberInput.doc.mjs +20 -0
- package/src/NumberInput/NumberInput.tsx +28 -29
- package/src/NumberInput/numberParser.test.ts +210 -0
- package/src/NumberInput/numberParser.ts +386 -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/usePopover.tsx +31 -28
- 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 +201 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +29 -2
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +47 -1
- package/src/PowerSearch/PowerSearchValueEditor.tsx +15 -0
- 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.tsx +3 -2
- package/src/Selector/Selector.doc.mjs +12 -1
- package/src/Selector/Selector.test.tsx +45 -1
- 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/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/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/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 +23 -1
- package/src/Text/Text.tsx +6 -2
- package/src/TextArea/TextArea.doc.mjs +8 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +15 -8
- 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/Toast/ToastViewport.tsx +17 -1
- package/src/Token/TokenLink.tsx +2 -2
- package/src/Tokenizer/Tokenizer.doc.mjs +27 -0
- package/src/Tokenizer/Tokenizer.tsx +4 -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/TopNavHeading.tsx +5 -4
- package/src/TopNav/TopNavMegaMenu.tsx +3 -2
- package/src/TopNav/TopNavMenu.tsx +4 -3
- package/src/Typeahead/BaseTypeahead.doc.mjs +11 -0
- package/src/Typeahead/BaseTypeahead.tsx +85 -33
- package/src/Typeahead/Typeahead.doc.mjs +5 -0
- package/src/Typeahead/Typeahead.test.tsx +49 -0
- package/src/Typeahead/Typeahead.tsx +3 -2
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useContainerReveal.doc.mjs +2 -2
- 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/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/theme/derivedVarRegistry.test.ts +19 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +37 -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
|
@@ -62,6 +62,7 @@ import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
|
|
|
62
62
|
import {useMediaQuery} from '../hooks/useMediaQuery';
|
|
63
63
|
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
64
64
|
import {usePopover} from '../Popover';
|
|
65
|
+
import {NativeDateField} from './NativeDateField';
|
|
65
66
|
import {TouchDateField} from './TouchDateField';
|
|
66
67
|
import {useTooltip} from '../Tooltip';
|
|
67
68
|
import {getInputARIA, isImeKeyEvent, parseDateInput} from '../utils';
|
|
@@ -150,6 +151,17 @@ export type DateInputSize = keyof typeof sizeStyles;
|
|
|
150
151
|
* types stay in compile-time lockstep: renaming or removing one of these
|
|
151
152
|
* members from `TimestampFormat` breaks this type at build time.
|
|
152
153
|
*/
|
|
154
|
+
/**
|
|
155
|
+
* When DateInput hands date picking to the browser/OS instead of its own
|
|
156
|
+
* surfaces.
|
|
157
|
+
*
|
|
158
|
+
* - `'touch'`: native on touch devices (coarse pointer), Astryx's calendar
|
|
159
|
+
* popover on mouse-driven ones
|
|
160
|
+
* - `'always'`: native wherever the browser supports `<input type="date">`
|
|
161
|
+
* - `'never'`: Astryx's own pickers everywhere
|
|
162
|
+
*/
|
|
163
|
+
export type DateInputNativePicker = 'touch' | 'always' | 'never';
|
|
164
|
+
|
|
153
165
|
export type DateInputFormat = Extract<
|
|
154
166
|
TimestampFormat,
|
|
155
167
|
'date' | 'date_long' | 'date_weekday' | 'system_date'
|
|
@@ -161,7 +173,7 @@ export type {
|
|
|
161
173
|
InputStatus as DateInputStatus,
|
|
162
174
|
InputStatusType as DateInputStatusType,
|
|
163
175
|
} from '../Field';
|
|
164
|
-
import {mergeProps,
|
|
176
|
+
import {mergeProps, isFocusDetached} from '../utils';
|
|
165
177
|
import type {BaseProps} from '../BaseProps';
|
|
166
178
|
import type {SizeValue} from '../utils/types';
|
|
167
179
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -169,6 +181,7 @@ import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
|
169
181
|
import {stableClassName} from '../naming';
|
|
170
182
|
import {useTranslator, InternationalizationContext} from '../i18n';
|
|
171
183
|
|
|
184
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
172
185
|
export interface DateInputProps extends Omit<
|
|
173
186
|
BaseProps,
|
|
174
187
|
'onChange' | 'defaultValue'
|
|
@@ -360,6 +373,40 @@ export interface DateInputProps extends Omit<
|
|
|
360
373
|
* ```
|
|
361
374
|
*/
|
|
362
375
|
format?: DateInputFormat | ((value: ISODateString) => string);
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* When date picking is handed to the browser/OS instead of Astryx's own
|
|
379
|
+
* surfaces: the field becomes an `<input type="date">` and the platform
|
|
380
|
+
* draws the picker — the iOS wheel, the Android calendar dialog — with the
|
|
381
|
+
* OS's own hit areas, momentum scrolling, locale and accessibility
|
|
382
|
+
* settings.
|
|
383
|
+
*
|
|
384
|
+
* - `'touch'` (default): native on touch devices (coarse pointer), the text
|
|
385
|
+
* field and calendar popover on mouse-driven ones
|
|
386
|
+
* - `'always'`: native wherever the browser supports `<input type="date">`
|
|
387
|
+
* - `'never'`: Astryx's own pickers everywhere — the touch picker on a
|
|
388
|
+
* finger, the calendar popover on a mouse
|
|
389
|
+
*
|
|
390
|
+
* `format` and `placeholder` still apply in native mode: DateInput paints
|
|
391
|
+
* the closed field's text itself, over the control. `numberOfMonths` and
|
|
392
|
+
* `weekStartsOn` do not — they describe a calendar grid the native picker
|
|
393
|
+
* does not have — so a field that needs either should pass `'never'`.
|
|
394
|
+
*
|
|
395
|
+
* `min` and `max` are forwarded, but note that a native picker may not
|
|
396
|
+
* *show* them: on iOS they are constraint-validation flags rather than
|
|
397
|
+
* clamps, so an out-of-range date can be selected and is refused on commit
|
|
398
|
+
* (announced to assistive technology) rather than being greyed out in the
|
|
399
|
+
* picker. `dateConstraints` is enforced the same way, on commit, and is
|
|
400
|
+
* reason enough to prefer `'never'` on a field that uses it.
|
|
401
|
+
*
|
|
402
|
+
* @default 'touch'
|
|
403
|
+
* @example
|
|
404
|
+
* ```
|
|
405
|
+
* // Astryx's own touch picker instead of the platform's
|
|
406
|
+
* <DateInput label="Event date" value={date} onChange={setDate} nativePicker="never" />
|
|
407
|
+
* ```
|
|
408
|
+
*/
|
|
409
|
+
nativePicker?: DateInputNativePicker;
|
|
363
410
|
}
|
|
364
411
|
|
|
365
412
|
/**
|
|
@@ -739,7 +786,7 @@ function PointerDateField({
|
|
|
739
786
|
/>
|
|
740
787
|
</button>
|
|
741
788
|
<input
|
|
742
|
-
ref={
|
|
789
|
+
ref={useMergedRefs(ref, inputRef)}
|
|
743
790
|
id={id}
|
|
744
791
|
type="text"
|
|
745
792
|
role="combobox"
|
|
@@ -886,7 +933,13 @@ PointerDateField.displayName = 'PointerDateField';
|
|
|
886
933
|
*/
|
|
887
934
|
export function DateInput(props: DateInputProps) {
|
|
888
935
|
const isTouch = useMediaQuery(TOUCH_POINTER_QUERY);
|
|
936
|
+
const nativePicker = props.nativePicker ?? 'touch';
|
|
889
937
|
|
|
938
|
+
// The platform's picker, where the consumer asked for it — see the
|
|
939
|
+
// `nativePicker` prop for what that trades away.
|
|
940
|
+
if (nativePicker === 'always' || (nativePicker === 'touch' && isTouch)) {
|
|
941
|
+
return <NativeDateField {...props} />;
|
|
942
|
+
}
|
|
890
943
|
return isTouch ? (
|
|
891
944
|
<TouchDateField {...props} />
|
|
892
945
|
) : (
|
|
@@ -219,6 +219,11 @@ function Controlled({
|
|
|
219
219
|
return (
|
|
220
220
|
<DateInput
|
|
221
221
|
label="Event date"
|
|
222
|
+
// This suite is about Astryx's own touch surface, which is now opt-out:
|
|
223
|
+
// `nativePicker` defaults to 'touch', so a coarse pointer gets the
|
|
224
|
+
// platform's picker unless a field says otherwise. Tests that assert on
|
|
225
|
+
// the surface selection itself pass their own value over this.
|
|
226
|
+
nativePicker="never"
|
|
222
227
|
{...DEFAULT_RANGE}
|
|
223
228
|
{...props}
|
|
224
229
|
value={value}
|
|
@@ -276,6 +281,16 @@ function weekdayRow(): HTMLElement {
|
|
|
276
281
|
// ---------------------------------------------------------------------------
|
|
277
282
|
|
|
278
283
|
describe('DateInput — surface selection', () => {
|
|
284
|
+
it('hands a touch device to the platform picker by default', () => {
|
|
285
|
+
// `nativePicker` defaults to 'touch': the OS draws the picker unless a
|
|
286
|
+
// field opts out. Everything else in this file passes 'never', so this is
|
|
287
|
+
// the one place the default itself is asserted.
|
|
288
|
+
stubMedia({pointer: 'coarse', width: 393});
|
|
289
|
+
render(<DateInput label="Event date" onChange={() => {}} />);
|
|
290
|
+
const input = document.querySelector('input');
|
|
291
|
+
expect(input).toHaveAttribute('type', 'date');
|
|
292
|
+
});
|
|
293
|
+
|
|
279
294
|
it('switches on the pointer alone, so a tablet gets the picker too', () => {
|
|
280
295
|
// `pointer` is the PRIMARY device, which is what makes it the whole test:
|
|
281
296
|
// a touchscreen laptop reports `fine` (its trackpad) and keeps the
|
|
@@ -320,7 +335,7 @@ describe('DateInput — surface selection', () => {
|
|
|
320
335
|
setViewport('desktop');
|
|
321
336
|
const onChange = vi.fn();
|
|
322
337
|
render(
|
|
323
|
-
<DateInput label="Event date" onChange={onChange} min={undefined} />,
|
|
338
|
+
<DateInput nativePicker="never" label="Event date" onChange={onChange} min={undefined} />,
|
|
324
339
|
);
|
|
325
340
|
fireEvent.change(field(), {target: {value: '2026-03-25'}});
|
|
326
341
|
expect(onChange).toHaveBeenCalledWith('2026-03-25');
|
|
@@ -360,12 +375,12 @@ describe('DateInput — surface selection', () => {
|
|
|
360
375
|
describe('DateInput — field parity', () => {
|
|
361
376
|
it('shows a placeholder until a date is chosen, then the formatted value', () => {
|
|
362
377
|
const {rerender} = render(
|
|
363
|
-
<DateInput label="Ship date" onChange={() => {}} />,
|
|
378
|
+
<DateInput nativePicker="never" label="Ship date" onChange={() => {}} />,
|
|
364
379
|
);
|
|
365
380
|
expect(field()).toHaveValue('');
|
|
366
381
|
expect(field()).toHaveAttribute('placeholder', 'Select a date');
|
|
367
382
|
rerender(
|
|
368
|
-
<DateInput label="Ship date" value="2026-03-21" onChange={() => {}} />,
|
|
383
|
+
<DateInput nativePicker="never" label="Ship date" value="2026-03-21" onChange={() => {}} />,
|
|
369
384
|
);
|
|
370
385
|
expect(field()).toHaveValue('March 21, 2026');
|
|
371
386
|
});
|
|
@@ -373,6 +388,7 @@ describe('DateInput — field parity', () => {
|
|
|
373
388
|
it('honors a named format', () => {
|
|
374
389
|
render(
|
|
375
390
|
<DateInput
|
|
391
|
+
nativePicker="never"
|
|
376
392
|
label="Ship date"
|
|
377
393
|
value="2026-03-21"
|
|
378
394
|
format="system_date"
|
|
@@ -385,6 +401,7 @@ describe('DateInput — field parity', () => {
|
|
|
385
401
|
it('honors a function format', () => {
|
|
386
402
|
render(
|
|
387
403
|
<DateInput
|
|
404
|
+
nativePicker="never"
|
|
388
405
|
label="Ship date"
|
|
389
406
|
value="2026-03-21"
|
|
390
407
|
format={iso => `ISO:${iso}`}
|
|
@@ -397,6 +414,7 @@ describe('DateInput — field parity', () => {
|
|
|
397
414
|
it('honors a custom placeholder', () => {
|
|
398
415
|
render(
|
|
399
416
|
<DateInput
|
|
417
|
+
nativePicker="never"
|
|
400
418
|
label="Ship date"
|
|
401
419
|
placeholder="Pick a day"
|
|
402
420
|
onChange={() => {}}
|
|
@@ -409,6 +427,7 @@ describe('DateInput — field parity', () => {
|
|
|
409
427
|
const onChange = vi.fn();
|
|
410
428
|
render(
|
|
411
429
|
<DateInput
|
|
430
|
+
nativePicker="never"
|
|
412
431
|
label="Ship date"
|
|
413
432
|
value="2026-03-21"
|
|
414
433
|
hasClear
|
|
@@ -419,9 +438,46 @@ describe('DateInput — field parity', () => {
|
|
|
419
438
|
expect(onChange).toHaveBeenCalledWith(undefined);
|
|
420
439
|
});
|
|
421
440
|
|
|
441
|
+
it('returns focus to the field without letting the page scroll', async () => {
|
|
442
|
+
// Clearing unmounts the clear button, and focusing another element in the
|
|
443
|
+
// same task as that unmount makes iOS Safari scroll the document to the
|
|
444
|
+
// top. Measured on the iOS 26 simulator against the live docsite, field at
|
|
445
|
+
// scrollY 2055: synchronous focus lands at 0, deferred focus stays at
|
|
446
|
+
// 2055. `preventScroll` alone does not fix it, so both halves are
|
|
447
|
+
// asserted: the focus is deferred past the unmount, and it is passed
|
|
448
|
+
// preventScroll. jsdom implements no scrolling, so the guard is asserted
|
|
449
|
+
// at the call.
|
|
450
|
+
vi.useFakeTimers();
|
|
451
|
+
try {
|
|
452
|
+
render(
|
|
453
|
+
<DateInput
|
|
454
|
+
nativePicker="never"
|
|
455
|
+
label="Ship date"
|
|
456
|
+
value="2026-03-21"
|
|
457
|
+
hasClear
|
|
458
|
+
onChange={() => {}}
|
|
459
|
+
/>,
|
|
460
|
+
);
|
|
461
|
+
const input = field();
|
|
462
|
+
const focus = vi.spyOn(input, 'focus');
|
|
463
|
+
|
|
464
|
+
fireEvent.click(screen.getByRole('button', {name: /Clear Ship date/}));
|
|
465
|
+
|
|
466
|
+
// Not synchronous — that is the whole point.
|
|
467
|
+
expect(focus).not.toHaveBeenCalled();
|
|
468
|
+
|
|
469
|
+
vi.runAllTimers();
|
|
470
|
+
|
|
471
|
+
expect(focus).toHaveBeenCalledWith({preventScroll: true});
|
|
472
|
+
focus.mockRestore();
|
|
473
|
+
} finally {
|
|
474
|
+
vi.useRealTimers();
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
|
|
422
478
|
it('does not open the picker until the field is tapped', () => {
|
|
423
479
|
withLayout(() => {
|
|
424
|
-
render(<DateInput label="Ship date" onChange={() => {}} />);
|
|
480
|
+
render(<DateInput nativePicker="never" label="Ship date" onChange={() => {}} />);
|
|
425
481
|
expect(field()).toHaveAttribute('aria-expanded', 'false');
|
|
426
482
|
expect(screen.queryByRole('grid')).not.toBeInTheDocument();
|
|
427
483
|
fireEvent.click(field());
|
|
@@ -439,7 +495,7 @@ describe('DateInput — field parity', () => {
|
|
|
439
495
|
});
|
|
440
496
|
|
|
441
497
|
it('is not openable while disabled', () => {
|
|
442
|
-
render(<DateInput label="Ship date" isDisabled onChange={() => {}} />);
|
|
498
|
+
render(<DateInput nativePicker="never" label="Ship date" isDisabled onChange={() => {}} />);
|
|
443
499
|
expect(field()).toBeDisabled();
|
|
444
500
|
fireEvent.click(field());
|
|
445
501
|
expect(screen.queryByRole('grid')).not.toBeInTheDocument();
|
|
@@ -448,6 +504,7 @@ describe('DateInput — field parity', () => {
|
|
|
448
504
|
it('stays focusable and explains itself when disabled with a reason', () => {
|
|
449
505
|
render(
|
|
450
506
|
<DateInput
|
|
507
|
+
nativePicker="never"
|
|
451
508
|
label="Ship date"
|
|
452
509
|
isDisabled
|
|
453
510
|
disabledMessage="You need the Editor role"
|
|
@@ -464,6 +521,7 @@ describe('DateInput — field parity', () => {
|
|
|
464
521
|
it('renders label, description and status through Field', () => {
|
|
465
522
|
render(
|
|
466
523
|
<DateInput
|
|
524
|
+
nativePicker="never"
|
|
467
525
|
label="Ship date"
|
|
468
526
|
description="When it leaves the warehouse"
|
|
469
527
|
status={{type: 'error', message: 'Pick a date'}}
|
|
@@ -480,12 +538,12 @@ describe('DateInput — field parity', () => {
|
|
|
480
538
|
});
|
|
481
539
|
|
|
482
540
|
it('marks required for assistive technology', () => {
|
|
483
|
-
render(<DateInput label="Ship date" isRequired onChange={() => {}} />);
|
|
541
|
+
render(<DateInput nativePicker="never" label="Ship date" isRequired onChange={() => {}} />);
|
|
484
542
|
expect(field()).toHaveAttribute('aria-required', 'true');
|
|
485
543
|
});
|
|
486
544
|
|
|
487
545
|
it('associates the label natively, so the field is named without ARIA', () => {
|
|
488
|
-
render(<DateInput label="Ship date" onChange={() => {}} />);
|
|
546
|
+
render(<DateInput nativePicker="never" label="Ship date" onChange={() => {}} />);
|
|
489
547
|
expect(screen.getByLabelText('Ship date')).toBe(field());
|
|
490
548
|
});
|
|
491
549
|
|
|
@@ -500,6 +558,7 @@ describe('DateInput — field parity', () => {
|
|
|
500
558
|
withLayout(() => {
|
|
501
559
|
render(
|
|
502
560
|
<DateInput
|
|
561
|
+
nativePicker="never"
|
|
503
562
|
label="Ship date"
|
|
504
563
|
value="2026-03-10"
|
|
505
564
|
min="2026-03-01"
|
|
@@ -522,7 +581,7 @@ describe('DateInput — field parity', () => {
|
|
|
522
581
|
it('drops the Field wrapper inside an InputGroup', () => {
|
|
523
582
|
render(
|
|
524
583
|
<InputGroup label="Range">
|
|
525
|
-
<DateInput label="Start" onChange={() => {}} />
|
|
584
|
+
<DateInput nativePicker="never" label="Start" onChange={() => {}} />
|
|
526
585
|
</InputGroup>,
|
|
527
586
|
);
|
|
528
587
|
// Named by the group label plus its own, the way core's inputs are.
|
|
@@ -607,7 +666,7 @@ describe('DateInput — calendar surface', () => {
|
|
|
607
666
|
it('Save closes even with no date chosen, committing nothing', () => {
|
|
608
667
|
const onChange = vi.fn();
|
|
609
668
|
withLayout(() => {
|
|
610
|
-
render(<DateInput label="Ship date" onChange={onChange} />);
|
|
669
|
+
render(<DateInput nativePicker="never" label="Ship date" onChange={onChange} />);
|
|
611
670
|
fireEvent.click(field());
|
|
612
671
|
fireEvent.click(screen.getByRole('button', {name: 'Save'}));
|
|
613
672
|
});
|