@astryxdesign/core 0.7.5 → 0.7.6-canary.0d71e8d
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/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +5 -5
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +183 -5
- package/dist/AppShell/observeMainOverflow.d.ts +9 -0
- package/dist/AppShell/observeMainOverflow.d.ts.map +1 -0
- package/dist/AppShell/observeMainOverflow.js +125 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +12 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +7 -1
- package/dist/BottomSheet/BottomSheet.js +1 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +2 -1
- package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +30 -3
- package/dist/Button/Button.js +4 -4
- package/dist/Carousel/Carousel.d.ts +3 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +12 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -5
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +37 -4
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +41 -4
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -4
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +101 -15
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +8 -3
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +11 -7
- package/dist/DateInput/usePointerDragScroll.d.ts +10 -1
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
- package/dist/DateInput/usePointerDragScroll.js +25 -9
- package/dist/DateInput/useScrollSettle.d.ts +3 -1
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
- package/dist/DateInput/useScrollSettle.js +37 -8
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +23 -12
- package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
- package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +34 -9
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +5 -4
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +2 -1
- package/dist/Drawer/Drawer.d.ts +1 -0
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +7 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +35 -22
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -16
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +2 -1
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +4 -4
- package/dist/Field/InputClearButton.js +3 -3
- package/dist/Field/PanelSearchInput.js +2 -2
- package/dist/FieldStatus/FieldStatus.d.ts +3 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +3 -2
- package/dist/FileInput/FileInput.d.ts +3 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +34 -13
- package/dist/Heading/Heading.js +1 -1
- package/dist/Icon/Icon.js +1 -1
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckIndicator.js +2 -1
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +3 -1
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
- package/dist/Indicator/RadioIndicator.js +3 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +21 -7
- package/dist/Item/ItemSwipeLayer.js +1 -1
- package/dist/Layer/popoverOperations.d.ts +27 -0
- package/dist/Layer/popoverOperations.d.ts.map +1 -0
- package/dist/Layer/popoverOperations.js +159 -0
- package/dist/Layer/useLayer.d.ts +1 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +120 -65
- package/dist/Layout/Layout.js +1 -1
- package/dist/Layout/LayoutContent.js +1 -1
- package/dist/Layout/LayoutFooter.js +1 -1
- package/dist/Layout/LayoutHeader.js +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +5 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +8 -3
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +7 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +26 -10
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
- package/dist/NumberInput/NumberInput.d.ts +3 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +26 -5
- package/dist/NumberInput/numberParser.d.ts +3 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -1
- package/dist/NumberInput/numberParser.js +7 -44
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +27 -0
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +32 -12
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +10 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +37 -30
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +11 -3
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +28 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
- package/dist/Selector/useSelectorPresentation.d.ts +8 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +20 -4
- package/dist/SideNav/SideNavItem.d.ts +2 -2
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +18 -7
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +10 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +3 -3
- package/dist/Stack/Stack.js +1 -1
- package/dist/Stack/StackItem.js +1 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +26 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +10 -3
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +16 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -10
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
- package/dist/Text/Text.js +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +23 -5
- package/dist/TextArea/TextArea.d.ts +1 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -3
- package/dist/TimeInput/TimeInput.d.ts +6 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -14
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +5 -4
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +2 -2
- package/dist/Timestamp/TimestampHoverCard.js +4 -4
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +60 -20
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +101 -54
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +52 -5
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +14 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +44 -7
- package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +2 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -0
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +1 -0
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -4
- package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +43 -7
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +43 -9
- package/dist/astryx.css +25 -4
- package/dist/gestures/GestureArena.d.ts +32 -1
- package/dist/gestures/GestureArena.d.ts.map +1 -1
- package/dist/gestures/GestureArena.js +110 -9
- package/dist/gestures/GestureHost.d.ts +351 -0
- package/dist/gestures/GestureHost.d.ts.map +1 -0
- package/dist/gestures/GestureHost.js +1773 -0
- package/dist/gestures/GestureRecognizer.d.ts +13 -1
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/GestureRecognizer.js +19 -1
- package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/LongPressGestureRecognizer.js +3 -0
- package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +3 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/PinchGestureRecognizer.js +128 -0
- package/dist/gestures/PressTracker.d.ts +112 -0
- package/dist/gestures/PressTracker.d.ts.map +1 -0
- package/dist/gestures/PressTracker.js +267 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/SwipeGestureRecognizer.js +148 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/TapGestureRecognizer.js +3 -0
- package/dist/gestures/VelocityTracker.d.ts +6 -2
- package/dist/gestures/VelocityTracker.d.ts.map +1 -1
- package/dist/gestures/VelocityTracker.js +7 -3
- package/dist/gestures/haptics.d.ts +65 -0
- package/dist/gestures/haptics.d.ts.map +1 -0
- package/dist/gestures/haptics.js +182 -0
- package/dist/gestures/index.d.ts +37 -0
- package/dist/gestures/index.d.ts.map +1 -0
- package/dist/gestures/index.js +25 -0
- package/dist/gestures/nativeScroll.d.ts +42 -0
- package/dist/gestures/nativeScroll.d.ts.map +1 -0
- package/dist/gestures/nativeScroll.js +228 -0
- package/dist/gestures/touchAction.d.ts +60 -0
- package/dist/gestures/touchAction.d.ts.map +1 -0
- package/dist/gestures/touchAction.js +157 -0
- package/dist/gestures/touchActionRule.d.ts +34 -0
- package/dist/gestures/touchActionRule.d.ts.map +1 -0
- package/dist/gestures/touchActionRule.js +140 -0
- package/dist/gestures/types.d.ts +18 -7
- package/dist/gestures/types.d.ts.map +1 -1
- package/dist/gestures/types.js +22 -2
- package/dist/gestures/useGestureRecognizer.d.ts +56 -0
- package/dist/gestures/useGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/useGestureRecognizer.js +226 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.js +107 -61
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
- package/dist/hooks/scrollKeyboardDelegation.js +7 -3
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +4 -1
- package/dist/hooks/useAnnounce.d.ts +101 -42
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +161 -75
- package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +5 -3
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +6 -12
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +12 -1
- package/dist/hooks/useScrollOverflow.d.ts +2 -1
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +56 -10
- package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
- package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
- package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
- package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
- package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
- package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +8 -5
- package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
- package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
- package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
- package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
- package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
- package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
- package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
- package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
- package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
- package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +8 -5
- package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
- package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
- package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
- package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
- package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
- package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
- package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
- package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
- package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
- package/dist/i18n/useListFormatter.d.ts +9 -0
- package/dist/i18n/useListFormatter.d.ts.map +1 -0
- package/dist/i18n/useListFormatter.js +41 -0
- package/dist/motion/animator.d.ts +83 -8
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +701 -119
- package/dist/motion/coast.d.ts +4 -1
- package/dist/motion/coast.d.ts.map +1 -1
- package/dist/motion/coast.js +4 -2
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +6 -2
- package/dist/motion/reducedMotionPlan.d.ts +7 -0
- package/dist/motion/reducedMotionPlan.d.ts.map +1 -1
- package/dist/motion/reducedMotionPlan.js +14 -1
- package/dist/motion/resolveMotion.d.ts +42 -0
- package/dist/motion/resolveMotion.d.ts.map +1 -0
- package/dist/motion/resolveMotion.js +43 -0
- package/dist/motion/roleValue.d.ts +2 -1
- package/dist/motion/roleValue.d.ts.map +1 -1
- package/dist/motion/roleValue.js +2 -1
- package/dist/motion/uikit/timing.d.ts +7 -1
- package/dist/motion/uikit/timing.d.ts.map +1 -1
- package/dist/motion/uikit/timing.js +19 -1
- package/dist/theme/defineTheme.d.ts +19 -5
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +64 -4
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
- package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
- package/dist/theme/domainTokens/index.d.ts +5 -4
- package/dist/theme/domainTokens/index.d.ts.map +1 -1
- package/dist/theme/domainTokens/index.js +5 -9
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/motionKnobs.d.ts +56 -0
- package/dist/theme/motionKnobs.d.ts.map +1 -0
- package/dist/theme/motionKnobs.js +48 -0
- package/dist/theme/resolveThemeValues.d.ts +11 -4
- package/dist/theme/resolveThemeValues.d.ts.map +1 -1
- package/dist/theme/resolveThemeValues.js +40 -4
- package/dist/theme/themeAdaptations.d.ts +7 -3
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +36 -7
- package/dist/theme/themeMotion.d.ts +96 -0
- package/dist/theme/themeMotion.d.ts.map +1 -0
- package/dist/theme/themeMotion.js +177 -0
- package/dist/theme/tokenReferences.d.ts +31 -0
- package/dist/theme/tokenReferences.d.ts.map +1 -0
- package/dist/theme/tokenReferences.js +132 -0
- package/dist/theme/tokens.d.ts +1 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +9 -129
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +12 -0
- package/dist/utils/focusOutline.stylex.d.ts +6 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +7 -0
- package/dist/utils/focusReturn.d.ts +17 -1
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +11 -4
- package/dist/utils/getNodeText.d.ts +8 -0
- package/dist/utils/getNodeText.d.ts.map +1 -0
- package/dist/utils/getNodeText.js +37 -0
- package/dist/utils/interactionModality.d.ts +11 -2
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +58 -5
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +17 -8
- package/dist/utils/plainDate.d.ts +2 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +46 -3
- package/dist/utils/presentation.d.ts +50 -0
- package/dist/utils/presentation.d.ts.map +1 -0
- package/dist/utils/presentation.js +125 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -1
- package/dist/utils/primaryClick.d.ts +11 -0
- package/dist/utils/primaryClick.d.ts.map +1 -0
- package/dist/utils/primaryClick.js +25 -0
- package/dist/utils/sharedMutationObserver.d.ts +19 -11
- package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
- package/dist/utils/sharedMutationObserver.js +66 -26
- package/dist/utils/timeFormat.d.ts +47 -0
- package/dist/utils/timeFormat.d.ts.map +1 -0
- package/dist/utils/timeFormat.js +240 -0
- package/dist/utils/touchPresentation.d.ts +2 -2
- package/dist/utils/touchPresentation.d.ts.map +1 -1
- package/dist/utils/touchPresentation.js +13 -8
- package/dist/utils/touchPresentation.stylex.d.ts +15 -0
- package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
- package/dist/utils/touchPresentation.stylex.js +33 -0
- package/dist/utils/touchQueries.d.ts +13 -0
- package/dist/utils/touchQueries.d.ts.map +1 -0
- package/dist/utils/touchQueries.js +15 -0
- package/dist/utils/unicodeDigits.d.ts +20 -0
- package/dist/utils/unicodeDigits.d.ts.map +1 -0
- package/dist/utils/unicodeDigits.js +70 -0
- package/dist/utils/useFocusAcrossSwap.d.ts +19 -0
- package/dist/utils/useFocusAcrossSwap.d.ts.map +1 -0
- package/dist/utils/useFocusAcrossSwap.js +41 -0
- package/locales/af-ZA.json +0 -21
- package/locales/ar-SA.json +0 -21
- package/locales/ca-ES.json +0 -21
- package/locales/cs-CZ.json +0 -21
- package/locales/da-DK.json +0 -21
- package/locales/de-DE.json +0 -21
- package/locales/el-GR.json +0 -21
- package/locales/en.json +35 -23
- package/locales/es-ES.json +0 -21
- package/locales/fi-FI.json +0 -21
- package/locales/fr-FR.json +0 -21
- package/locales/he-IL.json +0 -21
- package/locales/hu-HU.json +0 -21
- package/locales/it-IT.json +0 -21
- package/locales/ja-JP.json +0 -21
- package/locales/ko-KR.json +0 -21
- package/locales/nl-NL.json +0 -21
- package/locales/no-NO.json +0 -21
- package/locales/pl-PL.json +0 -21
- package/locales/pseudo.json +23 -14
- package/locales/pt-BR.json +0 -21
- package/locales/pt-PT.json +0 -21
- package/locales/ro-RO.json +0 -21
- package/locales/ru-RU.json +0 -21
- package/locales/sr-SP.json +0 -21
- package/locales/sv-SE.json +0 -21
- package/locales/tr-TR.json +0 -21
- package/locales/uk-UA.json +0 -21
- package/locales/vi-VN.json +0 -21
- package/locales/zh-CN.json +0 -21
- package/locales/zh-TW.json +0 -21
- package/package.json +5 -4
- package/src/AlertDialog/AlertDialog.tsx +6 -5
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
- package/src/AppShell/AppShell.doc.mjs +1 -1
- package/src/AppShell/AppShell.spec.md +9 -12
- package/src/AppShell/AppShell.test.tsx +164 -2
- package/src/AppShell/AppShell.tsx +225 -5
- package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +534 -0
- package/src/AppShell/observeMainOverflow.test.ts +173 -0
- package/src/AppShell/observeMainOverflow.ts +143 -0
- package/src/Avatar/Avatar.spec.md +22 -22
- package/src/Avatar/Avatar.tsx +18 -1
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
- package/src/Badge/Badge.doc.mjs +1 -1
- package/src/Badge/Badge.tsx +19 -2
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
- package/src/BottomSheet/BottomSheet.test.tsx +46 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
- package/src/BottomSheet/useSheetGestures.test.ts +52 -0
- package/src/BottomSheet/useSheetGestures.ts +37 -6
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
- package/src/Button/Button.tsx +4 -4
- package/src/Calendar/Calendar.spec.md +87 -48
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.spec.md +9 -9
- package/src/Carousel/Carousel.test.tsx +124 -3
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +1 -16
- package/src/Chat/ChatComposer.spec.md +75 -59
- package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
- package/src/Chat/ChatDictationButton.spec.md +126 -81
- package/src/Chat/ChatLayout.spec.md +41 -36
- package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
- package/src/Chat/ChatMessage.spec.md +64 -65
- package/src/Chat/ChatSendButton.spec.md +78 -67
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/Citation/Citation.spec.md +60 -47
- package/src/ClickableCard/ClickableCard.test.tsx +96 -0
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +38 -3
- package/src/Collapsible/Collapsible.spec.md +2 -0
- package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
- package/src/ComplexSelector/ComplexSelector.test.tsx +148 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -4
- package/src/ContextMenu/ContextMenu.spec.md +84 -56
- package/src/ContextMenu/ContextMenu.test.tsx +35 -0
- package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
- package/src/DateInput/DateInput.spec.md +74 -57
- package/src/DateInput/DateInput.test.tsx +115 -3
- package/src/DateInput/DateInput.tsx +29 -14
- package/src/DateInput/DateInputTouch.test.tsx +120 -0
- package/src/DateInput/MonthScroller.tsx +106 -20
- package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
- package/src/DateInput/TouchDateField.tsx +14 -3
- package/src/DateInput/Wheel.tsx +9 -6
- package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
- package/src/DateInput/usePointerDragScroll.ts +34 -10
- package/src/DateInput/useScrollSettle.ts +38 -7
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
- package/src/DateRangeInput/DateRangeInput.tsx +16 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
- package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
- package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
- package/src/DateTimeInput/DateTimeInput.tsx +46 -24
- package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
- package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
- package/src/Dialog/Dialog.test.tsx +216 -2
- package/src/Dialog/Dialog.tsx +42 -9
- package/src/Dialog/DialogHeader.tsx +5 -4
- package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
- package/src/Divider/Divider.tsx +2 -1
- package/src/Drawer/Drawer.spec.md +111 -80
- package/src/Drawer/Drawer.test.tsx +35 -0
- package/src/Drawer/Drawer.tsx +13 -2
- package/src/Drawer/DrawerHeader.spec.md +181 -0
- package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
- package/src/DropdownMenu/DropdownMenu.test.tsx +158 -0
- package/src/DropdownMenu/DropdownMenu.tsx +43 -21
- package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
- package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
- package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
- package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
- package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
- package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
- package/src/EmptyState/EmptyState.spec.md +35 -29
- package/src/EmptyState/EmptyState.tsx +2 -1
- package/src/Field/FieldLabel.tsx +5 -4
- package/src/Field/InputClearButton.tsx +3 -3
- package/src/Field/PanelSearchInput.tsx +2 -2
- package/src/FieldStatus/FieldStatus.tsx +9 -2
- package/src/FieldStatus/__tests__/FieldStatusAudit.a11y.chromium.spec.ts +477 -0
- package/src/FileInput/FileInput.test.tsx +159 -0
- package/src/FileInput/FileInput.tsx +34 -6
- package/src/FileInput/__tests__/FileInputAudit.a11y.chromium.spec.ts +796 -0
- package/src/FormLayout/FormLayout.spec.md +11 -20
- package/src/Heading/Heading.tsx +1 -1
- package/src/Icon/Icon.tsx +1 -1
- package/src/Indicator/CheckIndicator.spec.md +47 -42
- package/src/Indicator/CheckIndicator.tsx +2 -1
- package/src/Indicator/CheckboxIndicator.spec.md +40 -37
- package/src/Indicator/CheckboxIndicator.tsx +3 -1
- package/src/Indicator/Indicator.spec.md +188 -0
- package/src/Indicator/RadioIndicator.tsx +3 -1
- package/src/Item/Item.test.tsx +60 -0
- package/src/Item/Item.tsx +16 -8
- package/src/Item/ItemSwipeLayer.tsx +1 -1
- package/src/Kbd/Kbd.spec.md +81 -38
- package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
- package/src/Layer/popoverOperations.test.ts +205 -0
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.test.tsx +426 -4
- package/src/Layer/useLayer.tsx +145 -77
- package/src/Layout/Layout.spec.md +127 -131
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.spec.md +205 -0
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.spec.md +190 -0
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.spec.md +193 -0
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Layout/LayoutPanel.spec.md +194 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
- package/src/Lightbox/Lightbox.test.tsx +18 -0
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
- package/src/Link/Link.spec.md +3 -2
- package/src/Link/Link.tsx +11 -0
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
- package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +58 -0
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.spec.md +205 -0
- package/src/List/ListItem.tsx +3 -3
- package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +1 -1
- package/src/MetadataList/MetadataList.spec.md +187 -0
- package/src/MetadataList/MetadataListItem.spec.md +165 -0
- package/src/MobileNav/MobileNav.test.tsx +15 -0
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
- package/src/MoreMenu/MoreMenu.test.tsx +11 -0
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
- package/src/MultiSelector/MultiSelector.spec.md +7 -4
- package/src/MultiSelector/MultiSelector.test.tsx +270 -1
- package/src/MultiSelector/MultiSelector.tsx +25 -10
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
- package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
- package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
- package/src/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.spec.md +59 -37
- package/src/NumberInput/NumberInput.test.tsx +68 -7
- package/src/NumberInput/NumberInput.tsx +44 -4
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/Outline/Outline.spec.md +165 -69
- package/src/Outline/Outline.test.tsx +67 -2
- package/src/Outline/Outline.tsx +23 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
- package/src/OverflowList/OverflowList.spec.md +102 -55
- package/src/Pagination/Pagination.spec.md +158 -84
- package/src/Popover/Popover.test.tsx +84 -0
- package/src/Popover/Popover.tsx +34 -14
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +70 -8
- package/src/Popover/usePopover.tsx +10 -3
- package/src/PowerSearch/PowerSearch.test.tsx +24 -0
- package/src/PowerSearch/PowerSearch.tsx +42 -31
- package/src/ProgressBar/ProgressBar.spec.md +143 -119
- package/src/ProgressBar/ProgressBar.test.tsx +108 -32
- package/src/ProgressBar/ProgressBar.tsx +58 -10
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
- package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
- package/src/RadioList/RadioList.spec.md +1 -1
- package/src/RadioList/RadioList.test.tsx +84 -0
- package/src/RadioList/RadioListItem.tsx +11 -2
- package/src/Resizable/Resizable.spec.md +144 -124
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
- package/src/Resizable/useResizable.test.ts +43 -0
- package/src/Resizable/useResizable.ts +32 -9
- package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
- package/src/Selector/Selector.test.tsx +90 -1
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
- package/src/Selector/useSelectorPresentation.ts +31 -3
- package/src/SideNav/SideNav.test.tsx +151 -4
- package/src/SideNav/SideNavItem.spec.md +14 -24
- package/src/SideNav/SideNavItem.tsx +27 -10
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
- package/src/Skeleton/Skeleton.tsx +3 -1
- package/src/Slider/Slider.test.tsx +31 -0
- package/src/Slider/Slider.tsx +8 -3
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
- package/src/Spinner/Spinner.tsx +5 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/Stepper/Step.spec.md +36 -42
- package/src/Stepper/Step.tsx +33 -6
- package/src/Stepper/Stepper.doc.mjs +1 -1
- package/src/Stepper/Stepper.test.tsx +69 -7
- package/src/Switch/Switch.spec.md +1 -1
- package/src/Switch/Switch.test.tsx +66 -1
- package/src/Switch/Switch.tsx +11 -3
- package/src/TabList/TabList.test.tsx +58 -4
- package/src/TabList/TabList.tsx +16 -1
- package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
- package/src/Table/Table.spec.md +1 -1
- package/src/Table/Table.test.tsx +32 -0
- package/src/Table/Table.tsx +43 -11
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
- package/src/Table/__tests__/Table.a11y.states.ts +1 -5
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
- package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
- package/src/Text/Text.tsx +1 -1
- package/src/Text/useTruncation.test.tsx +128 -1
- package/src/Text/useTruncation.ts +23 -5
- package/src/TextArea/TextArea.spec.md +10 -13
- package/src/TextArea/TextArea.test.tsx +60 -0
- package/src/TextArea/TextArea.tsx +15 -1
- package/src/TextInput/TextInput.test.tsx +21 -0
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
- package/src/TimeInput/Presentation.test.tsx +21 -0
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.spec.md +58 -61
- package/src/TimeInput/TimeInput.test.tsx +76 -0
- package/src/TimeInput/TimeInput.tsx +36 -18
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timestamp/Timestamp.spec.md +6 -12
- package/src/Timestamp/Timestamp.test.tsx +30 -5
- package/src/Timestamp/Timestamp.tsx +6 -2
- package/src/Timestamp/TimestampHoverCard.tsx +4 -4
- package/src/Toast/Toast.spec.md +15 -24
- package/src/Toast/Toast.tsx +104 -36
- package/src/Toast/ToastViewport.test.tsx +798 -1
- package/src/Toast/ToastViewport.tsx +121 -53
- package/src/ToggleButton/ToggleButton.test.tsx +27 -0
- package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
- package/src/Token/Token.doc.mjs +2 -2
- package/src/Token/Token.spec.md +52 -61
- package/src/Token/Token.test.tsx +104 -0
- package/src/Token/Token.tsx +75 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/Tokenizer/Tokenizer.spec.md +18 -4
- package/src/Tokenizer/Tokenizer.test.tsx +176 -0
- package/src/Tokenizer/Tokenizer.tsx +48 -12
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +23 -4
- package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
- package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
- package/src/Toolbar/Toolbar.spec.md +5 -6
- package/src/Toolbar/Toolbar.test.tsx +30 -0
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
- package/src/TopNav/TopNav.test.tsx +27 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
- package/src/TopNav/TopNavMegaMenu.tsx +4 -1
- package/src/TopNav/TopNavMenu.test.tsx +17 -0
- package/src/TopNav/TopNavMenu.tsx +1 -0
- package/src/TreeList/TreeList.test.tsx +26 -0
- package/src/TreeList/TreeListItem.tsx +26 -4
- package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
- package/src/Typeahead/BaseTypeahead.spec.md +45 -45
- package/src/Typeahead/BaseTypeahead.tsx +48 -9
- package/src/Typeahead/Typeahead.test.tsx +294 -11
- package/src/Typeahead/Typeahead.tsx +51 -9
- package/src/__tests__/internalModulesNotExperimental.test.ts +88 -0
- package/src/__tests__/pressState.ts +8 -4
- package/src/gestures/GestureArena.ts +111 -11
- package/src/gestures/GestureHost.ts +2064 -0
- package/src/gestures/GestureRecognizer.ts +21 -1
- package/src/gestures/LongPressGestureRecognizer.ts +4 -0
- package/src/gestures/PanGestureRecognizer.ts +4 -0
- package/src/gestures/PinchGestureRecognizer.ts +148 -0
- package/src/gestures/PressTracker.ts +386 -0
- package/src/gestures/README.md +420 -0
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
- package/src/gestures/SwipeGestureRecognizer.ts +197 -0
- package/src/gestures/TapGestureRecognizer.ts +4 -0
- package/src/gestures/VelocityTracker.ts +10 -3
- package/src/gestures/__tests__/GestureHost.test.ts +2136 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
- package/src/gestures/__tests__/PressTracker.test.ts +275 -0
- package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
- package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
- package/src/gestures/__tests__/arena.test.ts +40 -0
- package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
- package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
- package/src/gestures/__tests__/browser/fixture.ts +307 -0
- package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
- package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
- package/src/gestures/__tests__/haptics.test.ts +187 -0
- package/src/gestures/__tests__/harness.ts +52 -4
- package/src/gestures/__tests__/pressTrackerFactory.test.ts +59 -0
- package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
- package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
- package/src/gestures/__tests__/useGestureRecognizer.test.tsx +570 -0
- package/src/gestures/haptics.ts +203 -0
- package/src/gestures/index.ts +79 -0
- package/src/gestures/nativeScroll.ts +277 -0
- package/src/gestures/touchAction.ts +191 -0
- package/src/gestures/touchActionRule.ts +157 -0
- package/src/gestures/types.ts +30 -9
- package/src/gestures/useGestureRecognizer.ts +305 -0
- package/src/hooks/index.ts +5 -1
- package/src/hooks/modalAnnounce.ts +129 -72
- package/src/hooks/scrollKeyboardDelegation.test.ts +33 -0
- package/src/hooks/scrollKeyboardDelegation.ts +9 -3
- package/src/hooks/useAdaptivePresentation.ts +4 -1
- package/src/hooks/useAnnounce.doc.mjs +35 -3
- package/src/hooks/useAnnounce.replace.test.tsx +516 -0
- package/src/hooks/useAnnounce.ts +209 -102
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
- package/src/hooks/useAnnounceRenderedText.ts +17 -3
- package/src/hooks/useBusyAnnouncement.ts +7 -10
- package/src/hooks/useMenuHover.ts +15 -1
- package/src/hooks/useScrollOverflow.doc.mjs +1 -1
- package/src/hooks/useScrollOverflow.test.tsx +102 -1
- package/src/hooks/useScrollOverflow.ts +59 -10
- package/src/i18n/__tests__/useListFormatter.test.tsx +58 -0
- package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
- package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
- package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
- package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
- package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
- package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
- package/src/i18n/generated-locales/en.generated.ts +9 -6
- package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
- package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
- package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
- package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
- package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
- package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
- package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
- package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
- package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
- package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
- package/src/i18n/generated-locales/pseudo.generated.ts +9 -6
- package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
- package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
- package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
- package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
- package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
- package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
- package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
- package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
- package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
- package/src/i18n/useListFormatter.ts +42 -0
- package/src/motion/MEASUREMENTS.md +2 -1
- package/src/motion/README.md +113 -33
- package/src/motion/__tests__/animator.interaction.browser.spec.ts +843 -0
- package/src/motion/__tests__/motionBundle.ts +14 -0
- package/src/motion/animator.test.ts +1125 -32
- package/src/motion/animator.ts +932 -130
- package/src/motion/coast.ts +10 -3
- package/src/motion/reducedMotion.ts +12 -2
- package/src/motion/reducedMotionPlan.test.ts +26 -0
- package/src/motion/reducedMotionPlan.ts +20 -1
- package/src/motion/resolveMotion.test.ts +123 -0
- package/src/motion/resolveMotion.ts +68 -0
- package/src/motion/roleValue.ts +2 -1
- package/src/motion/roles.test.ts +21 -4
- package/src/motion/uikit/tableImports.test.ts +293 -0
- package/src/motion/uikit/timing.ts +15 -1
- package/src/motion/uikit/values.test.ts +23 -12
- package/src/theme/Theme.doc.mjs +1 -1
- package/src/theme/defineTheme.ts +117 -8
- package/src/theme/derivedVarRegistry.test.ts +4 -0
- package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
- package/src/theme/domainTokens/index.ts +6 -10
- package/src/theme/expandMotionScale.test.ts +1 -1
- package/src/theme/index.ts +5 -0
- package/src/theme/motionKnobs.ts +82 -0
- package/src/theme/resolveThemeValues.ts +68 -6
- package/src/theme/themeAdaptations.ts +52 -12
- package/src/theme/themeMotion.test.ts +620 -0
- package/src/theme/themeMotion.ts +221 -0
- package/src/theme/tokenReferences.ts +149 -0
- package/src/theme/tokens.stylex.ts +10 -0
- package/src/theme/tokens.ts +15 -158
- package/src/utils/focusOutline.stylex.ts +28 -0
- package/src/utils/focusReturn.ts +17 -6
- package/src/utils/getNodeText.test.ts +24 -0
- package/src/utils/getNodeText.ts +37 -0
- package/src/utils/interactionModality.test.ts +45 -1
- package/src/utils/interactionModality.ts +64 -5
- package/src/utils/interactionOverlay.stylex.ts +12 -3
- package/src/utils/plainDate.test.ts +90 -0
- package/src/utils/plainDate.ts +58 -3
- package/src/utils/presentation.test.ts +380 -0
- package/src/utils/presentation.ts +180 -0
- package/src/utils/pressFeedback.test.ts +138 -0
- package/src/utils/pressFeedback.ts +34 -11
- package/src/utils/pressGesture.test.ts +9 -0
- package/src/utils/pressPaintPriority.test.ts +80 -0
- package/src/utils/primaryClick.test.ts +38 -0
- package/src/utils/primaryClick.ts +28 -0
- package/src/utils/sharedMutationObserver.test.ts +54 -1
- package/src/utils/sharedMutationObserver.ts +87 -29
- package/src/utils/timeFormat.test.ts +204 -0
- package/src/utils/timeFormat.ts +314 -0
- package/src/utils/touchPresentation.stylex.ts +43 -0
- package/src/utils/touchPresentation.test.ts +140 -1
- package/src/utils/touchPresentation.ts +13 -8
- package/src/utils/touchQueries.ts +15 -0
- package/src/utils/unicodeDigits.test.ts +44 -0
- package/src/utils/unicodeDigits.ts +71 -0
- package/src/utils/useFocusAcrossSwap.ts +55 -0
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
} from '@testing-library/react';
|
|
22
22
|
import userEvent from '@testing-library/user-event';
|
|
23
23
|
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
24
|
-
import {DateInput} from './DateInput';
|
|
24
|
+
import {DateInput, type DateInputProps} from './DateInput';
|
|
25
25
|
import {Icon} from '../Icon';
|
|
26
26
|
import {InputGroup} from '../InputGroup';
|
|
27
27
|
import {InputGroupText} from '../InputGroup/InputGroupText';
|
|
@@ -570,6 +570,67 @@ describe('DateInput', () => {
|
|
|
570
570
|
);
|
|
571
571
|
});
|
|
572
572
|
|
|
573
|
+
it('blocks selection in an open picker after the field becomes disabled', async () => {
|
|
574
|
+
const user = userEvent.setup();
|
|
575
|
+
const props = {
|
|
576
|
+
label: 'Date',
|
|
577
|
+
value: '2026-10-15',
|
|
578
|
+
presentation: 'popover',
|
|
579
|
+
onChange: vi.fn(),
|
|
580
|
+
changeAction: vi.fn(),
|
|
581
|
+
} satisfies DateInputProps;
|
|
582
|
+
const {rerender} = render(<DateInput {...props} />);
|
|
583
|
+
const input = screen.getByRole('combobox');
|
|
584
|
+
act(() => input.focus());
|
|
585
|
+
await user.keyboard('{ArrowDown}');
|
|
586
|
+
const day = getButton(/October 16, 2026/);
|
|
587
|
+
act(() => day.focus());
|
|
588
|
+
|
|
589
|
+
rerender(<DateInput {...props} isDisabled />);
|
|
590
|
+
expect(day).toHaveFocus();
|
|
591
|
+
await user.click(day);
|
|
592
|
+
await user.keyboard(' ');
|
|
593
|
+
|
|
594
|
+
rerender(
|
|
595
|
+
<DateInput
|
|
596
|
+
{...props}
|
|
597
|
+
isDisabled
|
|
598
|
+
disabledMessage="Scheduling is locked"
|
|
599
|
+
/>,
|
|
600
|
+
);
|
|
601
|
+
expect(day).toHaveFocus();
|
|
602
|
+
await user.keyboard('{Enter}');
|
|
603
|
+
expect(props.onChange).not.toHaveBeenCalled();
|
|
604
|
+
expect(props.changeAction).not.toHaveBeenCalled();
|
|
605
|
+
expect(input).toHaveValue('October 15, 2026');
|
|
606
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
607
|
+
expect(day).toHaveFocus();
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
it('dismisses an open picker without committing while loading', async () => {
|
|
611
|
+
const user = userEvent.setup();
|
|
612
|
+
const props = {
|
|
613
|
+
label: 'Date',
|
|
614
|
+
value: '2026-10-15',
|
|
615
|
+
presentation: 'popover',
|
|
616
|
+
onChange: vi.fn(),
|
|
617
|
+
changeAction: vi.fn(),
|
|
618
|
+
} satisfies DateInputProps;
|
|
619
|
+
const {rerender} = render(<DateInput {...props} />);
|
|
620
|
+
await user.click(getButton('Open calendar'));
|
|
621
|
+
const day = getButton(/October 16, 2026/);
|
|
622
|
+
|
|
623
|
+
rerender(<DateInput {...props} isLoading />);
|
|
624
|
+
await user.click(day);
|
|
625
|
+
expect(props.onChange).not.toHaveBeenCalled();
|
|
626
|
+
expect(props.changeAction).not.toHaveBeenCalled();
|
|
627
|
+
expect(screen.getByRole('combobox')).toHaveValue('October 15, 2026');
|
|
628
|
+
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
629
|
+
'aria-expanded',
|
|
630
|
+
'false',
|
|
631
|
+
);
|
|
632
|
+
});
|
|
633
|
+
|
|
573
634
|
// --- Enter key commits typed date ---
|
|
574
635
|
|
|
575
636
|
it('commits typed date and fires onChange on Enter key', () => {
|
|
@@ -633,15 +694,19 @@ describe('DateInput', () => {
|
|
|
633
694
|
}
|
|
634
695
|
|
|
635
696
|
render(<ControlledDateInput />);
|
|
636
|
-
|
|
697
|
+
const toggle = getButton('Open calendar');
|
|
698
|
+
await user.click(toggle);
|
|
637
699
|
await user.click(getButton(/January 15, 2026/));
|
|
700
|
+
// The calendar mounts only while open; reopen it to read the selection.
|
|
701
|
+
await user.click(toggle);
|
|
638
702
|
expect(
|
|
639
703
|
screen.getAllByRole('gridcell', {selected: true, hidden: true}),
|
|
640
704
|
).toHaveLength(1);
|
|
705
|
+
await user.click(toggle);
|
|
641
706
|
|
|
642
707
|
await user.click(getButton('Clear Date'));
|
|
643
708
|
expect(screen.getByRole('combobox')).toHaveValue('');
|
|
644
|
-
await user.click(
|
|
709
|
+
await user.click(toggle);
|
|
645
710
|
|
|
646
711
|
expect(
|
|
647
712
|
screen.queryAllByRole('gridcell', {selected: true, hidden: true}),
|
|
@@ -1152,6 +1217,53 @@ describe('DateInput', () => {
|
|
|
1152
1217
|
expect(screen.getByDisplayValue('Mar 10, 2026')).toBeInTheDocument();
|
|
1153
1218
|
});
|
|
1154
1219
|
});
|
|
1220
|
+
describe('calendar while the popover is closed', () => {
|
|
1221
|
+
const calendarGrid = () => document.querySelector('[role="grid"]');
|
|
1222
|
+
|
|
1223
|
+
it('renders no calendar until the popover opens, and none after it closes', () => {
|
|
1224
|
+
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
1225
|
+
const toggle = getButton('Open calendar');
|
|
1226
|
+
expect(calendarGrid()).toBeNull();
|
|
1227
|
+
|
|
1228
|
+
fireEvent.click(toggle);
|
|
1229
|
+
expect(calendarGrid()).not.toBeNull();
|
|
1230
|
+
|
|
1231
|
+
fireEvent.click(toggle);
|
|
1232
|
+
expect(calendarGrid()).toBeNull();
|
|
1233
|
+
});
|
|
1234
|
+
|
|
1235
|
+
it('opens on the month of a date typed while closed', () => {
|
|
1236
|
+
function Controlled() {
|
|
1237
|
+
const [value, setValue] = useState<ISODateString | undefined>(
|
|
1238
|
+
'2026-01-25',
|
|
1239
|
+
);
|
|
1240
|
+
return <DateInput label="Date" value={value} onChange={setValue} />;
|
|
1241
|
+
}
|
|
1242
|
+
render(<Controlled />);
|
|
1243
|
+
const input = screen.getByRole('combobox');
|
|
1244
|
+
|
|
1245
|
+
fireEvent.change(input, {target: {value: 'March 5, 2027'}});
|
|
1246
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
1247
|
+
|
|
1248
|
+
expect(calendarGrid()).toHaveAccessibleName('March 2027');
|
|
1249
|
+
});
|
|
1250
|
+
|
|
1251
|
+
it('moves focus into the calendar on each open from the toggle', async () => {
|
|
1252
|
+
render(<DateInput label="Date" value="2026-01-25" onChange={() => {}} />);
|
|
1253
|
+
const toggle = getButton('Open calendar');
|
|
1254
|
+
|
|
1255
|
+
for (let i = 0; i < 2; i++) {
|
|
1256
|
+
fireEvent.click(toggle);
|
|
1257
|
+
// The first calendar control takes focus, not the dialog surface.
|
|
1258
|
+
await waitFor(() => {
|
|
1259
|
+
expect(getButton('Previous month')).toHaveFocus();
|
|
1260
|
+
});
|
|
1261
|
+
fireEvent.click(toggle);
|
|
1262
|
+
expect(calendarGrid()).toBeNull();
|
|
1263
|
+
}
|
|
1264
|
+
});
|
|
1265
|
+
});
|
|
1266
|
+
|
|
1155
1267
|
describe('weekStartsOn', () => {
|
|
1156
1268
|
// The calendar popover renders in the top layer; jsdom keeps the content in
|
|
1157
1269
|
// the DOM but role queries skip it, so read the columnheaders directly.
|
|
@@ -680,7 +680,7 @@ function PointerDateField({
|
|
|
680
680
|
// Unified change handler that fires both onChange and changeAction
|
|
681
681
|
const fireChange = useCallback(
|
|
682
682
|
(newValue: ISODateString | undefined) => {
|
|
683
|
-
if (
|
|
683
|
+
if (isEffectivelyDisabled) {
|
|
684
684
|
return;
|
|
685
685
|
}
|
|
686
686
|
onChange?.(newValue);
|
|
@@ -691,7 +691,13 @@ function PointerDateField({
|
|
|
691
691
|
});
|
|
692
692
|
}
|
|
693
693
|
},
|
|
694
|
-
[
|
|
694
|
+
[
|
|
695
|
+
isEffectivelyDisabled,
|
|
696
|
+
onChange,
|
|
697
|
+
changeAction,
|
|
698
|
+
startTransition,
|
|
699
|
+
setOptimisticValue,
|
|
700
|
+
],
|
|
695
701
|
);
|
|
696
702
|
|
|
697
703
|
// Handle clear button click
|
|
@@ -714,11 +720,16 @@ function PointerDateField({
|
|
|
714
720
|
// Handle date selection from calendar
|
|
715
721
|
const handleDateSelect = useCallback(
|
|
716
722
|
(selectedDate: ISODateString) => {
|
|
723
|
+
// An already-open calendar can outlive an enabled owner. Reject the
|
|
724
|
+
// whole selection, including dismissal, so its focused day stays put.
|
|
725
|
+
if (isDisabled) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
717
728
|
fireChange(selectedDate);
|
|
718
729
|
setPendingInput(null);
|
|
719
730
|
popover.hide();
|
|
720
731
|
},
|
|
721
|
-
[fireChange, popover],
|
|
732
|
+
[isDisabled, fireChange, popover],
|
|
722
733
|
);
|
|
723
734
|
|
|
724
735
|
// Handle input text change - update immediately if valid and allowed
|
|
@@ -948,17 +959,21 @@ function PointerDateField({
|
|
|
948
959
|
{isBusy && <Spinner size="sm" aria-hidden="true" />}
|
|
949
960
|
{statusIcon}
|
|
950
961
|
{popover.render(
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
+
// The layer renders its children open or closed, so mount the
|
|
963
|
+
// calendar only while it is open; it opens on the current value.
|
|
964
|
+
!popover.isOpen ? null : (
|
|
965
|
+
<Calendar
|
|
966
|
+
handleRef={calendarRef}
|
|
967
|
+
mode="single"
|
|
968
|
+
value={optimisticValue ?? null}
|
|
969
|
+
onChange={handleDateSelect}
|
|
970
|
+
min={min}
|
|
971
|
+
max={max}
|
|
972
|
+
dateConstraints={dateConstraints}
|
|
973
|
+
numberOfMonths={numberOfMonths}
|
|
974
|
+
weekStartsOn={weekStartsOn}
|
|
975
|
+
/>
|
|
976
|
+
),
|
|
962
977
|
{placement: 'below', alignment: 'start'},
|
|
963
978
|
)}
|
|
964
979
|
{showsDisabledMessage &&
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
afterEach,
|
|
30
30
|
} from 'vitest';
|
|
31
31
|
import {
|
|
32
|
+
act,
|
|
32
33
|
render,
|
|
33
34
|
screen,
|
|
34
35
|
fireEvent,
|
|
@@ -276,6 +277,81 @@ function weekdayRow(): HTMLElement {
|
|
|
276
277
|
return row as HTMLElement;
|
|
277
278
|
}
|
|
278
279
|
|
|
280
|
+
describe('DateInput — open-sheet disablement', () => {
|
|
281
|
+
it('blocks selection after the open sheet becomes disabled, retaining value and focus', () => {
|
|
282
|
+
const onChange = vi.fn();
|
|
283
|
+
const changeAction = vi.fn();
|
|
284
|
+
const props = {initial: '2026-02-21' as const, onChange, changeAction};
|
|
285
|
+
withLayout(() => {
|
|
286
|
+
const {rerender} = render(<Controlled {...props} />);
|
|
287
|
+
fireEvent.click(field());
|
|
288
|
+
const day = within(pane('February 2026')).getByRole('button', {
|
|
289
|
+
name: /February 22, 2026/,
|
|
290
|
+
});
|
|
291
|
+
act(() => day.focus());
|
|
292
|
+
rerender(<Controlled {...props} isDisabled />);
|
|
293
|
+
expect(day).toHaveFocus();
|
|
294
|
+
fireEvent.click(day);
|
|
295
|
+
|
|
296
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
297
|
+
expect(changeAction).not.toHaveBeenCalled();
|
|
298
|
+
expect(field()).toHaveValue('February 21, 2026');
|
|
299
|
+
expect(field()).toHaveAttribute('aria-expanded', 'true');
|
|
300
|
+
expect(day).toHaveFocus();
|
|
301
|
+
expect(
|
|
302
|
+
document.querySelector('[data-title="month-year"]'),
|
|
303
|
+
).toHaveTextContent('February 2026');
|
|
304
|
+
|
|
305
|
+
rerender(<Controlled {...props} />);
|
|
306
|
+
fireEvent.click(day);
|
|
307
|
+
expect(onChange).toHaveBeenCalledExactlyOnceWith('2026-02-22');
|
|
308
|
+
expect(changeAction).toHaveBeenCalledExactlyOnceWith('2026-02-22');
|
|
309
|
+
expect(field()).toHaveAttribute('aria-expanded', 'true');
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
it('blocks disabled reset but preserves busy-only month navigation', () => {
|
|
314
|
+
const onChange = vi.fn();
|
|
315
|
+
const changeAction = vi.fn();
|
|
316
|
+
const props = {initial: '2026-02-21' as const, onChange, changeAction};
|
|
317
|
+
withLayout(() => {
|
|
318
|
+
const {rerender} = render(<Controlled {...props} />);
|
|
319
|
+
fireEvent.click(field());
|
|
320
|
+
const reset = screen.getByRole('button', {name: 'Reset'});
|
|
321
|
+
act(() => reset.focus());
|
|
322
|
+
rerender(<Controlled {...props} isDisabled />);
|
|
323
|
+
expect(reset).toHaveFocus();
|
|
324
|
+
fireEvent.click(reset);
|
|
325
|
+
|
|
326
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
327
|
+
expect(changeAction).not.toHaveBeenCalled();
|
|
328
|
+
expect(field()).toHaveValue('February 21, 2026');
|
|
329
|
+
expect(field()).toHaveAttribute('aria-expanded', 'true');
|
|
330
|
+
expect(reset).toHaveFocus();
|
|
331
|
+
expect(
|
|
332
|
+
document.querySelector('[data-title="month-year"]'),
|
|
333
|
+
).toHaveTextContent('February 2026');
|
|
334
|
+
|
|
335
|
+
rerender(<Controlled {...props} isLoading />);
|
|
336
|
+
fireEvent.click(reset);
|
|
337
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
338
|
+
expect(changeAction).not.toHaveBeenCalled();
|
|
339
|
+
expect(field()).toHaveValue('February 21, 2026');
|
|
340
|
+
expect(field()).toHaveAttribute('aria-expanded', 'true');
|
|
341
|
+
expect(reset).toHaveFocus();
|
|
342
|
+
expect(
|
|
343
|
+
document.querySelector('[data-title="month-year"]'),
|
|
344
|
+
).toHaveTextContent('March 2026');
|
|
345
|
+
|
|
346
|
+
rerender(<Controlled {...props} />);
|
|
347
|
+
fireEvent.click(reset);
|
|
348
|
+
expect(onChange).toHaveBeenCalledExactlyOnceWith(undefined);
|
|
349
|
+
expect(changeAction).toHaveBeenCalledExactlyOnceWith(undefined);
|
|
350
|
+
expect(field()).toHaveAttribute('aria-expanded', 'true');
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
|
|
279
355
|
// ---------------------------------------------------------------------------
|
|
280
356
|
// Which surface, and why
|
|
281
357
|
// ---------------------------------------------------------------------------
|
|
@@ -2249,6 +2325,50 @@ describe('DateInput — a mouse can drag a wheel', () => {
|
|
|
2249
2325
|
});
|
|
2250
2326
|
});
|
|
2251
2327
|
|
|
2328
|
+
/**
|
|
2329
|
+
* Every `scrollTop` the drag assigns ends in its own `scrollend` in
|
|
2330
|
+
* Chromium, and the hand can rest with the button still down. Neither is
|
|
2331
|
+
* rest: the month the wheel lands on commits at the release, as it does
|
|
2332
|
+
* when a finger lifts.
|
|
2333
|
+
*/
|
|
2334
|
+
it('commits nothing while a mouse drag holds the wheel, and commits at the release', () => {
|
|
2335
|
+
vi.useFakeTimers();
|
|
2336
|
+
try {
|
|
2337
|
+
// A year of months, so May is reachable (the default range ends in April).
|
|
2338
|
+
renderAndOpen(
|
|
2339
|
+
<Controlled initial="2026-03-21" min="2026-01-01" max="2026-12-31" />,
|
|
2340
|
+
);
|
|
2341
|
+
fireEvent.click(title());
|
|
2342
|
+
withWheelLayout(() => {
|
|
2343
|
+
const el = wheel();
|
|
2344
|
+
trackable(el);
|
|
2345
|
+
// March, the committed month, sits under the band.
|
|
2346
|
+
el.scrollTop = 2 * 28;
|
|
2347
|
+
const selected = () =>
|
|
2348
|
+
el.querySelector('[aria-selected="true"]')?.textContent;
|
|
2349
|
+
el.dispatchEvent(pointer('pointerdown', {y: 200}));
|
|
2350
|
+
// Two rows on: May is under the band.
|
|
2351
|
+
el.dispatchEvent(pointer('pointermove', {y: 144}));
|
|
2352
|
+
fireEvent.scroll(el);
|
|
2353
|
+
el.dispatchEvent(new Event('scrollend'));
|
|
2354
|
+
act(() => {
|
|
2355
|
+
vi.advanceTimersByTime(SCROLL_QUIET_MS * 2);
|
|
2356
|
+
});
|
|
2357
|
+
expect(selected()).toBe('March');
|
|
2358
|
+
expect(title()).toHaveTextContent('March 2026');
|
|
2359
|
+
|
|
2360
|
+
el.dispatchEvent(pointer('pointerup', {y: 144}));
|
|
2361
|
+
act(() => {
|
|
2362
|
+
vi.advanceTimersByTime(SCROLL_QUIET_MS * 2);
|
|
2363
|
+
});
|
|
2364
|
+
expect(selected()).toBe('May');
|
|
2365
|
+
expect(title()).toHaveTextContent('May 2026');
|
|
2366
|
+
});
|
|
2367
|
+
} finally {
|
|
2368
|
+
vi.useRealTimers();
|
|
2369
|
+
}
|
|
2370
|
+
});
|
|
2371
|
+
|
|
2252
2372
|
/**
|
|
2253
2373
|
* BottomSheet starts its own drag-to-dismiss from a `pointerdown` on its
|
|
2254
2374
|
* body and CAPTURES the pointer for it, which retargets every later pointer
|
|
@@ -85,6 +85,14 @@ const DAY_SIZE = dateInputTouchSizes.daySize;
|
|
|
85
85
|
*/
|
|
86
86
|
const OVERSCAN = 3;
|
|
87
87
|
|
|
88
|
+
/** Input on the scroller that ends a steer: the user's from here. */
|
|
89
|
+
const USER_INPUT_EVENTS = [
|
|
90
|
+
'touchstart',
|
|
91
|
+
'wheel',
|
|
92
|
+
'pointerdown',
|
|
93
|
+
'keydown',
|
|
94
|
+
] as const;
|
|
95
|
+
|
|
88
96
|
const styles = stylex.create({
|
|
89
97
|
scroller: {
|
|
90
98
|
position: 'relative',
|
|
@@ -326,13 +334,59 @@ export function MonthScroller({
|
|
|
326
334
|
// updater — React runs updaters during render, where another component's
|
|
327
335
|
// setState is illegal.
|
|
328
336
|
const centerRowRef = useRef(centerRow);
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Scroll snapping is off from a re-center until the frame after its
|
|
340
|
+
* commit. WebKit keeps the position it snapped to as an index into the
|
|
341
|
+
* container's snap offsets, and re-snaps to that index after a layout: a
|
|
342
|
+
* re-center that unmounts panes before the snapped one shifts the index,
|
|
343
|
+
* so the re-snap lands a month further on, and the scroll that makes
|
|
344
|
+
* re-centers again. One stalled frame right after an arrow (300 ms,
|
|
345
|
+
* measured) was enough to set the calendar paging on by itself, a month
|
|
346
|
+
* every few frames. With snapping off across the commit nothing re-snaps,
|
|
347
|
+
* and switching it back on a frame later snaps to the pane in place.
|
|
348
|
+
*
|
|
349
|
+
* Each pause counts itself, so a batch of re-centers that ends on the
|
|
350
|
+
* center it began from, which commits no new center, still restores
|
|
351
|
+
* snapping.
|
|
352
|
+
*
|
|
353
|
+
* Not while a finger drives the scroll, from its touch until the scroll it
|
|
354
|
+
* started comes to rest: iOS tracks a snap target for the gesture, and
|
|
355
|
+
* turning snapping off drops it, so the swipe coasted past the month for
|
|
356
|
+
* about two seconds and was corrected late (iOS 26.2 simulator, where the
|
|
357
|
+
* same swipe snaps in about 0.6 s with snapping left on).
|
|
358
|
+
*/
|
|
359
|
+
const [snapPauses, setSnapPauses] = useState(0);
|
|
360
|
+
const isFingerScrollRef = useRef(false);
|
|
361
|
+
const recenter = useCallback((scroller: HTMLElement, row: number) => {
|
|
362
|
+
if (!isFingerScrollRef.current) {
|
|
363
|
+
scroller.style.scrollSnapType = 'none';
|
|
364
|
+
setSnapPauses(count => count + 1);
|
|
365
|
+
}
|
|
366
|
+
setCenterRow(row);
|
|
367
|
+
}, []);
|
|
368
|
+
// Synchronizes the scroller's snapping with the browser's frame loop: it
|
|
369
|
+
// comes back on in the frame after the pause's commit, and a restore still
|
|
370
|
+
// pending at the next pause or at unmount is dropped.
|
|
371
|
+
useLayoutEffect(() => {
|
|
372
|
+
const scroller = scrollerRef.current;
|
|
373
|
+
if (snapPauses === 0 || scroller == null) {
|
|
374
|
+
return undefined;
|
|
375
|
+
}
|
|
376
|
+
const frame = requestAnimationFrame(() => {
|
|
377
|
+
scroller.style.scrollSnapType = '';
|
|
378
|
+
});
|
|
379
|
+
return () => cancelAnimationFrame(frame);
|
|
380
|
+
}, [snapPauses]);
|
|
329
381
|
// A row to scroll to once its pane is mounted; see scrollToMonth.
|
|
330
382
|
const pendingScrollRef = useRef<number | null>(null);
|
|
331
383
|
|
|
332
384
|
/**
|
|
333
385
|
* The row a programmatic scroll is heading for, so its own scroll events
|
|
334
|
-
* are not reported back as if the user had gone there
|
|
335
|
-
*
|
|
386
|
+
* are not reported back as if the user had gone there, and so the settle
|
|
387
|
+
* correction finishes the steer instead of rounding it back. Null once the
|
|
388
|
+
* user's own input reaches the scroller (a finger, a wheel or trackpad, a
|
|
389
|
+
* press, a key), or once the steered scroll has arrived.
|
|
336
390
|
*/
|
|
337
391
|
const steeredRowRef = useRef<number | null>(null);
|
|
338
392
|
|
|
@@ -401,7 +455,12 @@ export function MonthScroller({
|
|
|
401
455
|
// below); a jump that far is never worth animating either.
|
|
402
456
|
pendingScrollRef.current = row;
|
|
403
457
|
centerRowRef.current = row;
|
|
404
|
-
|
|
458
|
+
// The jump is a steer too. Recording it replaces a steer left behind
|
|
459
|
+
// by a scroll that moved nothing (the re-assert when the month and
|
|
460
|
+
// year wheels close), which the settle would otherwise finish,
|
|
461
|
+
// pulling the scroller back off the jump's month.
|
|
462
|
+
steeredRowRef.current = row;
|
|
463
|
+
recenter(scroller, row);
|
|
405
464
|
return;
|
|
406
465
|
}
|
|
407
466
|
steeredRowRef.current = row;
|
|
@@ -410,7 +469,7 @@ export function MonthScroller({
|
|
|
410
469
|
behavior,
|
|
411
470
|
});
|
|
412
471
|
},
|
|
413
|
-
[paneSize, minMonthIndex, rowCount, isRTL],
|
|
472
|
+
[paneSize, minMonthIndex, rowCount, isRTL, recenter],
|
|
414
473
|
);
|
|
415
474
|
|
|
416
475
|
// Deliberately un-keyed: it runs after every render, costs a null check, and
|
|
@@ -476,8 +535,11 @@ export function MonthScroller({
|
|
|
476
535
|
* A tail crawling slower than half a pixel a frame has effectively arrived,
|
|
477
536
|
* so treating it as arrived is right anyway.
|
|
478
537
|
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
538
|
+
* After the user's own scroll the correction goes to the nearest boundary,
|
|
539
|
+
* at most half a pane away. After a steer it goes on to the steered month,
|
|
540
|
+
* however early the browser cut the steer short. Either way its own scroll
|
|
541
|
+
* settles onto the boundary it aimed at, where a steer counts as arrived, so
|
|
542
|
+
* it cannot oscillate.
|
|
481
543
|
*/
|
|
482
544
|
const settleFrameRef = useRef<number | undefined>(undefined);
|
|
483
545
|
useEffect(
|
|
@@ -490,6 +552,8 @@ export function MonthScroller({
|
|
|
490
552
|
);
|
|
491
553
|
|
|
492
554
|
useScrollSettle(scrollerRef, scroller => {
|
|
555
|
+
// At rest, momentum included: the finger no longer drives the scroll.
|
|
556
|
+
isFingerScrollRef.current = false;
|
|
493
557
|
if (paneSize === 0) {
|
|
494
558
|
return;
|
|
495
559
|
}
|
|
@@ -505,15 +569,22 @@ export function MonthScroller({
|
|
|
505
569
|
if (Math.abs(scroller.scrollLeft - offsetBefore) >= 0.5) {
|
|
506
570
|
return;
|
|
507
571
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
572
|
+
// A steer the browser cut short is finished, not rounded back. WebKit
|
|
573
|
+
// ends a smooth scroll that a second one retargeted once the first
|
|
574
|
+
// one's time is up, firing `scrollend` part-way: an arrow tapped late
|
|
575
|
+
// in the previous arrow's scroll stopped near that month, and rounding
|
|
576
|
+
// to the nearest pane put the scroller back on it while the title named
|
|
577
|
+
// the new one.
|
|
578
|
+
const steered = steeredRowRef.current;
|
|
579
|
+
const row =
|
|
580
|
+
steered ??
|
|
581
|
+
rowAtScrollOffset(scroller.scrollLeft, paneSize, rowCount, isRTL);
|
|
514
582
|
const target = scrollOffsetForRow(row, paneSize, isRTL);
|
|
515
583
|
// Sub-pixel drift is the browser's own rounding, not a failed snap.
|
|
516
584
|
if (Math.abs(scroller.scrollLeft - target) < 1) {
|
|
585
|
+
// At rest on its target, a steer has arrived even if no scroll
|
|
586
|
+
// crossed into its month.
|
|
587
|
+
steeredRowRef.current = null;
|
|
517
588
|
return;
|
|
518
589
|
}
|
|
519
590
|
scroller.scrollTo({left: target, behavior: 'smooth'});
|
|
@@ -554,11 +625,20 @@ export function MonthScroller({
|
|
|
554
625
|
if (scroller == null || paneSize === 0) {
|
|
555
626
|
return;
|
|
556
627
|
}
|
|
557
|
-
// A finger
|
|
558
|
-
// passes are the user's doing
|
|
559
|
-
|
|
628
|
+
// A finger, a wheel or trackpad, a press or a key on the scroller ends any
|
|
629
|
+
// steering: from here the months it passes are the user's doing, every
|
|
630
|
+
// one of them is worth reporting, and the settle rounds to the nearest
|
|
631
|
+
// month instead of finishing a steer. A steer that moved nothing (the
|
|
632
|
+
// re-assert when the month and year wheels close on the month shown)
|
|
633
|
+
// would otherwise pull the user's next scroll back to its month.
|
|
634
|
+
const endSteer = () => {
|
|
560
635
|
steeredRowRef.current = null;
|
|
561
636
|
};
|
|
637
|
+
// From a touch until its scroll comes to rest (the settle above), the
|
|
638
|
+
// finger drives the scroll and a re-center leaves snapping on.
|
|
639
|
+
const onTouchStart = () => {
|
|
640
|
+
isFingerScrollRef.current = true;
|
|
641
|
+
};
|
|
562
642
|
|
|
563
643
|
const onScroll = () => {
|
|
564
644
|
if (frameRef.current != null) {
|
|
@@ -576,7 +656,7 @@ export function MonthScroller({
|
|
|
576
656
|
return;
|
|
577
657
|
}
|
|
578
658
|
centerRowRef.current = row;
|
|
579
|
-
|
|
659
|
+
recenter(scroller, row);
|
|
580
660
|
// Report nothing while a steer is in flight. `scrollToMonth` is only
|
|
581
661
|
// ever called by something that already knows the month — a wheel
|
|
582
662
|
// commit, a header arrow, the re-assert when the wheels close — so
|
|
@@ -590,9 +670,9 @@ export function MonthScroller({
|
|
|
590
670
|
// the exact moment reports start being trusted again. The month drifted
|
|
591
671
|
// on the way back to the calendar.
|
|
592
672
|
//
|
|
593
|
-
// Cleared on arrival, or by
|
|
594
|
-
//
|
|
595
|
-
// reporting.
|
|
673
|
+
// Cleared on arrival, or by the user's input below (a finger, a wheel
|
|
674
|
+
// or trackpad, a press, a key) — from then the user owns the scroller,
|
|
675
|
+
// and every month it passes is worth reporting.
|
|
596
676
|
if (steeredRowRef.current != null) {
|
|
597
677
|
if (steeredRowRef.current === row) {
|
|
598
678
|
steeredRowRef.current = null;
|
|
@@ -603,16 +683,22 @@ export function MonthScroller({
|
|
|
603
683
|
});
|
|
604
684
|
};
|
|
605
685
|
scroller.addEventListener('scroll', onScroll, {passive: true});
|
|
686
|
+
for (const type of USER_INPUT_EVENTS) {
|
|
687
|
+
scroller.addEventListener(type, endSteer, {passive: true});
|
|
688
|
+
}
|
|
606
689
|
scroller.addEventListener('touchstart', onTouchStart, {passive: true});
|
|
607
690
|
return () => {
|
|
608
691
|
scroller.removeEventListener('scroll', onScroll);
|
|
692
|
+
for (const type of USER_INPUT_EVENTS) {
|
|
693
|
+
scroller.removeEventListener(type, endSteer);
|
|
694
|
+
}
|
|
609
695
|
scroller.removeEventListener('touchstart', onTouchStart);
|
|
610
696
|
if (frameRef.current != null) {
|
|
611
697
|
cancelAnimationFrame(frameRef.current);
|
|
612
698
|
frameRef.current = undefined;
|
|
613
699
|
}
|
|
614
700
|
};
|
|
615
|
-
}, [paneSize, rowCount, minMonthIndex, isRTL]);
|
|
701
|
+
}, [paneSize, rowCount, minMonthIndex, isRTL, recenter]);
|
|
616
702
|
|
|
617
703
|
// Move the keyboard focus by whole days and let the scroller follow. Paging
|
|
618
704
|
// by month is PageUp/PageDown; everything else is the APG grid vocabulary.
|