@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
|
@@ -71,9 +71,6 @@ import {
|
|
|
71
71
|
type ISOTimeString,
|
|
72
72
|
parseDateInput,
|
|
73
73
|
parseISOTime,
|
|
74
|
-
parseTimeInput,
|
|
75
|
-
formatDisplayTime12h,
|
|
76
|
-
formatDisplayTime24h,
|
|
77
74
|
formatISOTime,
|
|
78
75
|
isTimeInRange,
|
|
79
76
|
adjustTime,
|
|
@@ -102,6 +99,11 @@ import {useSize} from '../SizeContext/SizeContext';
|
|
|
102
99
|
import {themeProps} from '../utils/themeProps';
|
|
103
100
|
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
104
101
|
import {useLocale, useTranslator} from '../i18n';
|
|
102
|
+
import {
|
|
103
|
+
formatLocaleTime,
|
|
104
|
+
parseLocaleTime,
|
|
105
|
+
resolveHourFormat,
|
|
106
|
+
} from '../utils/timeFormat';
|
|
105
107
|
|
|
106
108
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
107
109
|
import {useHighlightedOptionScroll} from '../hooks/useHighlightedOptionScroll';
|
|
@@ -412,8 +414,11 @@ export interface DateTimeInputProps extends Omit<
|
|
|
412
414
|
hasSeconds?: boolean;
|
|
413
415
|
|
|
414
416
|
/**
|
|
415
|
-
* Hour display format.
|
|
416
|
-
*
|
|
417
|
+
* Hour display format: '12h' with the locale's day period, or '24h'.
|
|
418
|
+
* When unset, follows the `InternationalizationProvider` locale's hour
|
|
419
|
+
* cycle (`en-US` 12-hour, `en-GB` 24-hour); a per-user preference rides on
|
|
420
|
+
* the locale tag (`en-US-u-hc-h23`).
|
|
421
|
+
* @default the locale's hour cycle
|
|
417
422
|
*/
|
|
418
423
|
hourFormat?: DateTimeInputHourFormat;
|
|
419
424
|
|
|
@@ -836,8 +841,11 @@ function PointerDateTimeField({
|
|
|
836
841
|
}
|
|
837
842
|
const nativeTimeValue = nativeTimeDraft ?? valueParts.time;
|
|
838
843
|
|
|
839
|
-
const formatDisplayTime =
|
|
840
|
-
|
|
844
|
+
const formatDisplayTime = useCallback(
|
|
845
|
+
(time: ISOTimeString, includeSeconds: boolean) =>
|
|
846
|
+
formatLocaleTime(time, locale, hourFormat, includeSeconds),
|
|
847
|
+
[locale, hourFormat],
|
|
848
|
+
);
|
|
841
849
|
|
|
842
850
|
const timeDisplayValue = useMemo(() => {
|
|
843
851
|
if (timePendingInput !== null) {
|
|
@@ -852,12 +860,12 @@ function PointerDateTimeField({
|
|
|
852
860
|
if (timePendingInput === null || !timePendingInput.trim()) {
|
|
853
861
|
return true;
|
|
854
862
|
}
|
|
855
|
-
const parsed =
|
|
863
|
+
const parsed = parseLocaleTime(timePendingInput, locale, hasSeconds);
|
|
856
864
|
if (!parsed) {
|
|
857
865
|
return false;
|
|
858
866
|
}
|
|
859
867
|
return isTimeInRange(parsed, timeMin, timeMax);
|
|
860
|
-
}, [timePendingInput, hasSeconds, timeMin, timeMax]);
|
|
868
|
+
}, [timePendingInput, locale, hasSeconds, timeMin, timeMax]);
|
|
861
869
|
|
|
862
870
|
const resolvedTimePlaceholder = useMemo(() => {
|
|
863
871
|
if (isTimeFocused && !timeDisplayValue) {
|
|
@@ -1362,7 +1370,7 @@ function PointerDateTimeField({
|
|
|
1362
1370
|
const text = e.target.value;
|
|
1363
1371
|
setTimePendingInput(text);
|
|
1364
1372
|
|
|
1365
|
-
const parsed =
|
|
1373
|
+
const parsed = parseLocaleTime(text, locale, hasSeconds);
|
|
1366
1374
|
|
|
1367
1375
|
// Typing narrows nothing — free-form entry is the contract, and a time
|
|
1368
1376
|
// between two options must stay reachable. The list instead follows the
|
|
@@ -1386,6 +1394,7 @@ function PointerDateTimeField({
|
|
|
1386
1394
|
}
|
|
1387
1395
|
},
|
|
1388
1396
|
[
|
|
1397
|
+
locale,
|
|
1389
1398
|
hasSeconds,
|
|
1390
1399
|
timeMin,
|
|
1391
1400
|
timeMax,
|
|
@@ -1440,7 +1449,7 @@ function PointerDateTimeField({
|
|
|
1440
1449
|
return;
|
|
1441
1450
|
}
|
|
1442
1451
|
|
|
1443
|
-
const parsed =
|
|
1452
|
+
const parsed = parseLocaleTime(timePendingInput, locale, hasSeconds);
|
|
1444
1453
|
if (parsed && isTimeInRange(parsed, timeMin, timeMax)) {
|
|
1445
1454
|
if (parsed !== valueParts.time && valueParts.date) {
|
|
1446
1455
|
const combined = combineDateTime(valueParts.date, parsed);
|
|
@@ -1453,6 +1462,7 @@ function PointerDateTimeField({
|
|
|
1453
1462
|
},
|
|
1454
1463
|
[
|
|
1455
1464
|
timePendingInput,
|
|
1465
|
+
locale,
|
|
1456
1466
|
hasSeconds,
|
|
1457
1467
|
timeMin,
|
|
1458
1468
|
timeMax,
|
|
@@ -1530,7 +1540,7 @@ function PointerDateTimeField({
|
|
|
1530
1540
|
const typed =
|
|
1531
1541
|
timeHighlightFollowsTypingRef.current &&
|
|
1532
1542
|
timePendingInput !== null
|
|
1533
|
-
?
|
|
1543
|
+
? parseLocaleTime(timePendingInput, locale, hasSeconds)
|
|
1534
1544
|
: null;
|
|
1535
1545
|
const option = timeOptions[activeTimeIndex];
|
|
1536
1546
|
if (typed) {
|
|
@@ -1582,6 +1592,7 @@ function PointerDateTimeField({
|
|
|
1582
1592
|
},
|
|
1583
1593
|
[
|
|
1584
1594
|
valueParts,
|
|
1595
|
+
locale,
|
|
1585
1596
|
hasSeconds,
|
|
1586
1597
|
timeIncrement,
|
|
1587
1598
|
timeMin,
|
|
@@ -1937,17 +1948,21 @@ function PointerDateTimeField({
|
|
|
1937
1948
|
|
|
1938
1949
|
{!usesNativePicker &&
|
|
1939
1950
|
popover.render(
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
+
// Mounted only while open, like the time list below; the calendar
|
|
1952
|
+
// opens on the current value.
|
|
1953
|
+
!popover.isOpen ? null : (
|
|
1954
|
+
<Calendar
|
|
1955
|
+
handleRef={calendarRef}
|
|
1956
|
+
mode="single"
|
|
1957
|
+
value={valueParts.date ?? null}
|
|
1958
|
+
onChange={(d: ISODateString) => handleDateChange(d, 'calendar')}
|
|
1959
|
+
min={calendarMin}
|
|
1960
|
+
max={calendarMax}
|
|
1961
|
+
dateConstraints={dateConstraints}
|
|
1962
|
+
numberOfMonths={numberOfMonths}
|
|
1963
|
+
weekStartsOn={weekStartsOn}
|
|
1964
|
+
/>
|
|
1965
|
+
),
|
|
1951
1966
|
{placement: 'below', alignment: 'start'},
|
|
1952
1967
|
)}
|
|
1953
1968
|
|
|
@@ -2030,11 +2045,18 @@ export function DateTimeInput(props: DateTimeInputProps) {
|
|
|
2030
2045
|
props.presentation,
|
|
2031
2046
|
props.nativePicker,
|
|
2032
2047
|
);
|
|
2048
|
+
const locale = useLocale();
|
|
2033
2049
|
const {
|
|
2034
2050
|
presentation: _presentation,
|
|
2035
2051
|
nativePicker: _nativePicker,
|
|
2036
|
-
...
|
|
2052
|
+
...surfaceProps
|
|
2037
2053
|
} = props;
|
|
2054
|
+
// Every surface gets the resolved hour format, so typed text, the native
|
|
2055
|
+
// field's resting text, preset times, and the sheet wheels agree.
|
|
2056
|
+
const rest = {
|
|
2057
|
+
...surfaceProps,
|
|
2058
|
+
hourFormat: resolveHourFormat(locale, props.hourFormat),
|
|
2059
|
+
};
|
|
2038
2060
|
if (effective === 'native') {
|
|
2039
2061
|
return (
|
|
2040
2062
|
<PointerDateTimeField
|
|
@@ -34,13 +34,12 @@ import type {InputStatusType} from '../Field';
|
|
|
34
34
|
import {useMediaQuery} from '../hooks/useMediaQuery';
|
|
35
35
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
36
36
|
import {Icon} from '../Icon';
|
|
37
|
-
import {useTranslator} from '../i18n';
|
|
37
|
+
import {useLocale, useTranslator} from '../i18n';
|
|
38
|
+
import {formatLocaleTime} from '../utils/timeFormat';
|
|
38
39
|
import type {ThemeProps} from '../utils/themeProps';
|
|
39
40
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
40
41
|
import {
|
|
41
42
|
focusOutlineStyles,
|
|
42
|
-
formatDisplayTime12h,
|
|
43
|
-
formatDisplayTime24h,
|
|
44
43
|
formatISOTime,
|
|
45
44
|
isTimeInRange,
|
|
46
45
|
parseISOTime,
|
|
@@ -126,6 +125,7 @@ export function NativeTimeSegment({
|
|
|
126
125
|
...inputProps
|
|
127
126
|
} = controlProps ?? {};
|
|
128
127
|
const t = useTranslator();
|
|
128
|
+
const locale = useLocale();
|
|
129
129
|
const isTouchPointer = useMediaQuery('(pointer: coarse)');
|
|
130
130
|
const internalInputRef = useRef<HTMLInputElement | null>(null);
|
|
131
131
|
const mergedInputRef = useMergedRefs(inputRef, internalInputRef);
|
|
@@ -151,10 +151,8 @@ export function NativeTimeSegment({
|
|
|
151
151
|
|
|
152
152
|
const nativeValue = normalizeNativeTime(value) ?? '';
|
|
153
153
|
const isInputValid = rejectedValue === null;
|
|
154
|
-
const formatDisplayTime =
|
|
155
|
-
hourFormat === '12h' ? formatDisplayTime12h : formatDisplayTime24h;
|
|
156
154
|
const overlayText = nativeValue
|
|
157
|
-
?
|
|
155
|
+
? formatLocaleTime(nativeValue, locale, hourFormat, false)
|
|
158
156
|
: placeholder;
|
|
159
157
|
const showsOverlay = !!overlayText && !(isFocused && isSegmentEditable);
|
|
160
158
|
|
|
@@ -69,9 +69,8 @@ import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
|
69
69
|
import {rtlStyles} from '../utils/rtlStyles';
|
|
70
70
|
import {themeProps} from '../utils/themeProps';
|
|
71
71
|
import {normalizeDayOfWeek} from '../utils/dateTypes';
|
|
72
|
+
import {formatLocaleTime} from '../utils/timeFormat';
|
|
72
73
|
import {
|
|
73
|
-
formatDisplayTime12h,
|
|
74
|
-
formatDisplayTime24h,
|
|
75
74
|
formatISOTime,
|
|
76
75
|
isImeKeyEvent,
|
|
77
76
|
isRenderable,
|
|
@@ -689,12 +688,9 @@ export function TouchDateTimeField({
|
|
|
689
688
|
const timeDisplayValue = useMemo(() => {
|
|
690
689
|
const displayTime = normalizedValueTime ?? draftTime;
|
|
691
690
|
return displayTime
|
|
692
|
-
? (
|
|
693
|
-
displayTime,
|
|
694
|
-
hasSeconds,
|
|
695
|
-
)
|
|
691
|
+
? formatLocaleTime(displayTime, locale, hourFormat, hasSeconds)
|
|
696
692
|
: '';
|
|
697
|
-
}, [draftTime, normalizedValueTime, hourFormat, hasSeconds]);
|
|
693
|
+
}, [draftTime, normalizedValueTime, locale, hourFormat, hasSeconds]);
|
|
698
694
|
|
|
699
695
|
const timeBoundsForDate = useCallback(
|
|
700
696
|
(date: ISODateString | undefined) => ({
|
|
@@ -13,7 +13,14 @@ import {useState, type SyntheticEvent} from 'react';
|
|
|
13
13
|
import {readFileSync} from 'node:fs';
|
|
14
14
|
import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
|
|
15
15
|
import type {MockInstance} from 'vitest';
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
render,
|
|
18
|
+
screen,
|
|
19
|
+
fireEvent,
|
|
20
|
+
within,
|
|
21
|
+
cleanup,
|
|
22
|
+
} from '@testing-library/react';
|
|
23
|
+
import {createPortal} from 'react-dom';
|
|
17
24
|
import {
|
|
18
25
|
Dialog,
|
|
19
26
|
dialogFullscreenSafeAreaPaddingContract,
|
|
@@ -21,7 +28,10 @@ import {
|
|
|
21
28
|
} from './Dialog';
|
|
22
29
|
import {DialogHeader} from './DialogHeader';
|
|
23
30
|
import {defineTheme, generateThemeCSS} from '../theme';
|
|
24
|
-
import {
|
|
31
|
+
import {
|
|
32
|
+
__resetInteractionModalityForTest,
|
|
33
|
+
getInteractionModality,
|
|
34
|
+
} from '../utils/interactionModality';
|
|
25
35
|
|
|
26
36
|
function generateThemeTestCSS(
|
|
27
37
|
theme: Parameters<typeof generateThemeCSS>[0],
|
|
@@ -555,6 +565,210 @@ describe('Dialog', () => {
|
|
|
555
565
|
}).not.toThrow();
|
|
556
566
|
expect(dialog).not.toHaveAttribute('open');
|
|
557
567
|
});
|
|
568
|
+
|
|
569
|
+
describe('in a second document', () => {
|
|
570
|
+
// An app can render a Dialog into a same-origin iframe or a Document
|
|
571
|
+
// Picture-in-Picture window through a portal. The control that opens it
|
|
572
|
+
// is focused in that document; the page's document reports only the
|
|
573
|
+
// iframe element.
|
|
574
|
+
let frame: HTMLIFrameElement;
|
|
575
|
+
let secondDocument: Document;
|
|
576
|
+
|
|
577
|
+
beforeEach(() => {
|
|
578
|
+
frame = document.createElement('iframe');
|
|
579
|
+
document.body.appendChild(frame);
|
|
580
|
+
secondDocument = frame.contentDocument!;
|
|
581
|
+
// The showModal/close stand-ins above, on the second window's own
|
|
582
|
+
// prototype.
|
|
583
|
+
const {prototype} = secondDocument.defaultView!.HTMLDialogElement;
|
|
584
|
+
prototype.showModal = HTMLDialogElement.prototype.showModal;
|
|
585
|
+
prototype.close = HTMLDialogElement.prototype.close;
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
afterEach(() => {
|
|
589
|
+
// Unmount before the frame goes, or React removes nodes from a
|
|
590
|
+
// document that no longer exists.
|
|
591
|
+
cleanup();
|
|
592
|
+
frame.remove();
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
function SecondDocumentDialog({isOpen}: {isOpen: boolean}) {
|
|
596
|
+
return createPortal(
|
|
597
|
+
<>
|
|
598
|
+
<button type="button">Open dialog</button>
|
|
599
|
+
<Dialog isOpen={isOpen} onOpenChange={() => {}} aria-label="Review">
|
|
600
|
+
<button type="button">Inside</button>
|
|
601
|
+
</Dialog>
|
|
602
|
+
</>,
|
|
603
|
+
secondDocument.body,
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
function PageOpensSecondDocumentDialog({isOpen}: {isOpen: boolean}) {
|
|
608
|
+
return (
|
|
609
|
+
<>
|
|
610
|
+
<button type="button">Open from the page</button>
|
|
611
|
+
{createPortal(
|
|
612
|
+
<Dialog
|
|
613
|
+
isOpen={isOpen}
|
|
614
|
+
onOpenChange={() => {}}
|
|
615
|
+
aria-label="Review">
|
|
616
|
+
<button type="button">Inside</button>
|
|
617
|
+
</Dialog>,
|
|
618
|
+
secondDocument.body,
|
|
619
|
+
)}
|
|
620
|
+
</>
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
function SecondDocumentFieldDialog({isOpen}: {isOpen: boolean}) {
|
|
625
|
+
return createPortal(
|
|
626
|
+
<>
|
|
627
|
+
<input aria-label="Search" />
|
|
628
|
+
<Dialog isOpen={isOpen} onOpenChange={() => {}} aria-label="Review">
|
|
629
|
+
<button type="button">Inside</button>
|
|
630
|
+
</Dialog>
|
|
631
|
+
</>,
|
|
632
|
+
secondDocument.body,
|
|
633
|
+
);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function SecondDocumentDialogs({count}: {count: number}) {
|
|
637
|
+
return createPortal(
|
|
638
|
+
<>
|
|
639
|
+
{count > 0 && (
|
|
640
|
+
<Dialog isOpen={false} onOpenChange={() => {}} aria-label="First">
|
|
641
|
+
First
|
|
642
|
+
</Dialog>
|
|
643
|
+
)}
|
|
644
|
+
{count > 1 && (
|
|
645
|
+
<Dialog
|
|
646
|
+
isOpen={false}
|
|
647
|
+
onOpenChange={() => {}}
|
|
648
|
+
aria-label="Second">
|
|
649
|
+
Second
|
|
650
|
+
</Dialog>
|
|
651
|
+
)}
|
|
652
|
+
</>,
|
|
653
|
+
secondDocument.body,
|
|
654
|
+
);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
it('returns focus to the control that opened it, in its own document', () => {
|
|
658
|
+
const {rerender} = render(<SecondDocumentDialog isOpen={false} />);
|
|
659
|
+
const view = within(secondDocument.body);
|
|
660
|
+
const opener = view.getByRole('button', {name: 'Open dialog'});
|
|
661
|
+
opener.focus();
|
|
662
|
+
expect(document.activeElement).toBe(frame);
|
|
663
|
+
|
|
664
|
+
rerender(<SecondDocumentDialog isOpen={true} />);
|
|
665
|
+
view.getByRole('button', {name: 'Inside', hidden: true}).focus();
|
|
666
|
+
|
|
667
|
+
rerender(<SecondDocumentDialog isOpen={false} />);
|
|
668
|
+
expect(opener).toHaveFocus();
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
it('returns focus to a control in the page that opened it', () => {
|
|
672
|
+
const {rerender} = render(
|
|
673
|
+
<PageOpensSecondDocumentDialog isOpen={false} />,
|
|
674
|
+
);
|
|
675
|
+
const opener = screen.getByRole('button', {name: 'Open from the page'});
|
|
676
|
+
opener.focus();
|
|
677
|
+
|
|
678
|
+
rerender(<PageOpensSecondDocumentDialog isOpen={true} />);
|
|
679
|
+
within(secondDocument.body)
|
|
680
|
+
.getByRole('button', {name: 'Inside', hidden: true})
|
|
681
|
+
.focus();
|
|
682
|
+
|
|
683
|
+
rerender(<PageOpensSecondDocumentDialog isOpen={false} />);
|
|
684
|
+
expect(opener).toHaveFocus();
|
|
685
|
+
});
|
|
686
|
+
|
|
687
|
+
it('takes the ring from the last input in its own document', () => {
|
|
688
|
+
__resetInteractionModalityForTest();
|
|
689
|
+
const {rerender} = render(<SecondDocumentDialog isOpen={false} />);
|
|
690
|
+
const opener = within(secondDocument.body).getByRole('button', {
|
|
691
|
+
name: 'Open dialog',
|
|
692
|
+
});
|
|
693
|
+
// The page's last input was a pointer press (say, on the control that
|
|
694
|
+
// popped the window out); the dialog then closes from the keyboard in
|
|
695
|
+
// its own document.
|
|
696
|
+
fireEvent.pointerDown(document.body);
|
|
697
|
+
opener.focus();
|
|
698
|
+
rerender(<SecondDocumentDialog isOpen={true} />);
|
|
699
|
+
fireEvent.keyDown(secondDocument.body, {key: 'Escape'});
|
|
700
|
+
const focus = vi.spyOn(
|
|
701
|
+
secondDocument.defaultView!.HTMLElement.prototype,
|
|
702
|
+
'focus',
|
|
703
|
+
);
|
|
704
|
+
|
|
705
|
+
rerender(<SecondDocumentDialog isOpen={false} />);
|
|
706
|
+
expect(opener).toHaveFocus();
|
|
707
|
+
expect(
|
|
708
|
+
focus.mock.calls.filter(
|
|
709
|
+
(_call, index) => focus.mock.contexts[index] === opener,
|
|
710
|
+
),
|
|
711
|
+
).toEqual([[]]);
|
|
712
|
+
focus.mockRestore();
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
it('keeps plain focus on a text field that opened it after a pointer close', () => {
|
|
716
|
+
const {rerender} = render(<SecondDocumentFieldDialog isOpen={false} />);
|
|
717
|
+
const field = within(secondDocument.body).getByRole('textbox', {
|
|
718
|
+
name: 'Search',
|
|
719
|
+
});
|
|
720
|
+
field.focus();
|
|
721
|
+
rerender(<SecondDocumentFieldDialog isOpen={true} />);
|
|
722
|
+
const inside = within(secondDocument.body).getByRole('button', {
|
|
723
|
+
name: 'Inside',
|
|
724
|
+
hidden: true,
|
|
725
|
+
});
|
|
726
|
+
inside.focus();
|
|
727
|
+
fireEvent.pointerDown(inside);
|
|
728
|
+
// The field's own window's prototype: a field there is never an
|
|
729
|
+
// instance of the page's constructors.
|
|
730
|
+
const {prototype} = secondDocument.defaultView!.HTMLElement;
|
|
731
|
+
const focus = vi.spyOn(prototype, 'focus');
|
|
732
|
+
const blur = vi.spyOn(prototype, 'blur');
|
|
733
|
+
|
|
734
|
+
rerender(<SecondDocumentFieldDialog isOpen={false} />);
|
|
735
|
+
expect(field).toHaveFocus();
|
|
736
|
+
expect(
|
|
737
|
+
focus.mock.calls.filter(
|
|
738
|
+
(_call, index) => focus.mock.contexts[index] === field,
|
|
739
|
+
),
|
|
740
|
+
).toEqual([[]]);
|
|
741
|
+
expect(blur.mock.contexts).not.toContain(field);
|
|
742
|
+
focus.mockRestore();
|
|
743
|
+
blur.mockRestore();
|
|
744
|
+
});
|
|
745
|
+
|
|
746
|
+
it('tracks its document while any Dialog there is mounted, and releases it after the last', () => {
|
|
747
|
+
const removeEventListener = vi.spyOn(
|
|
748
|
+
secondDocument,
|
|
749
|
+
'removeEventListener',
|
|
750
|
+
);
|
|
751
|
+
const removedModalityListeners = () =>
|
|
752
|
+
removeEventListener.mock.calls
|
|
753
|
+
.map(([type]) => type)
|
|
754
|
+
.filter(type => type === 'pointerdown' || type === 'keydown')
|
|
755
|
+
.sort();
|
|
756
|
+
const {rerender} = render(<SecondDocumentDialogs count={2} />);
|
|
757
|
+
fireEvent.pointerDown(secondDocument.body);
|
|
758
|
+
expect(getInteractionModality(secondDocument)).toBe('pointer');
|
|
759
|
+
|
|
760
|
+
rerender(<SecondDocumentDialogs count={1} />);
|
|
761
|
+
fireEvent.keyDown(secondDocument.body, {key: 'Tab'});
|
|
762
|
+
expect(getInteractionModality(secondDocument)).toBe('keyboard');
|
|
763
|
+
expect(removedModalityListeners()).toEqual([]);
|
|
764
|
+
|
|
765
|
+
rerender(<SecondDocumentDialogs count={0} />);
|
|
766
|
+
expect(removedModalityListeners()).toEqual(['keydown', 'pointerdown']);
|
|
767
|
+
fireEvent.pointerDown(secondDocument.body);
|
|
768
|
+
expect(getInteractionModality(secondDocument)).toBe('keyboard');
|
|
769
|
+
removeEventListener.mockRestore();
|
|
770
|
+
});
|
|
771
|
+
});
|
|
558
772
|
});
|
|
559
773
|
|
|
560
774
|
// jsdom draws no focus ring, so these prove only which focus call Dialog
|
package/src/Dialog/Dialog.tsx
CHANGED
|
@@ -69,14 +69,18 @@ import {
|
|
|
69
69
|
overlayPaddingReset,
|
|
70
70
|
} from '../Layout/padding.stylex';
|
|
71
71
|
import type {SpacingStep} from '../utils/types';
|
|
72
|
-
import {mergeProps} from '../utils';
|
|
72
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
73
73
|
import {chainEventHandlers} from '../utils/chainEventHandlers';
|
|
74
74
|
import {devWarn} from '../utils/devWarning';
|
|
75
75
|
import {DialogContext} from './DialogContext';
|
|
76
76
|
import {themeProps} from '../utils/themeProps';
|
|
77
77
|
import type {DialogVariantMap} from './index';
|
|
78
78
|
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
79
|
-
import {
|
|
79
|
+
import {
|
|
80
|
+
getInteractionModality,
|
|
81
|
+
trackInteractionModalityIn,
|
|
82
|
+
useInteractionModalityTracking,
|
|
83
|
+
} from '../utils/interactionModality';
|
|
80
84
|
import {focusForLastInput} from '../utils/focusReturn';
|
|
81
85
|
import {ModalAnnounceProvider} from '../hooks/ModalAnnounceProvider';
|
|
82
86
|
|
|
@@ -91,8 +95,11 @@ function getDialogDirection(
|
|
|
91
95
|
distance = 16,
|
|
92
96
|
): {x: number; y: number} {
|
|
93
97
|
const rect = triggerEl.getBoundingClientRect();
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
// The trigger's own window: its rect is measured in that window's viewport,
|
|
99
|
+
// which is not the page's when the dialog renders into a second document.
|
|
100
|
+
const view = triggerEl.ownerDocument.defaultView ?? window;
|
|
101
|
+
const dx = rect.left + rect.width / 2 - view.innerWidth / 2;
|
|
102
|
+
const dy = rect.top + rect.height / 2 - view.innerHeight / 2;
|
|
96
103
|
const dist = Math.sqrt(dx * dx + dy * dy) || 1;
|
|
97
104
|
return {
|
|
98
105
|
x: Math.round((dx / dist) * distance),
|
|
@@ -534,6 +541,18 @@ export function Dialog({
|
|
|
534
541
|
|
|
535
542
|
useInteractionModalityTracking();
|
|
536
543
|
|
|
544
|
+
// Input in a second document (a same-origin iframe, a Document
|
|
545
|
+
// Picture-in-Picture window) never reaches the page's listeners, so the
|
|
546
|
+
// dialog's own document keeps its own last input for the focus return while
|
|
547
|
+
// this Dialog is mounted, from before it opens until it unmounts.
|
|
548
|
+
useEffect(() => {
|
|
549
|
+
const ownerDocument = dialogRef.current?.ownerDocument;
|
|
550
|
+
if (ownerDocument == null || ownerDocument === document) {
|
|
551
|
+
return undefined;
|
|
552
|
+
}
|
|
553
|
+
return trackInteractionModalityIn(ownerDocument);
|
|
554
|
+
}, [isInline]);
|
|
555
|
+
|
|
537
556
|
// This runs in a layout effect so the capture lands before any descendant's
|
|
538
557
|
// passive mount effect: all layout effects run before any passive effect,
|
|
539
558
|
// while a child's passive effect runs before this parent's passive effect.
|
|
@@ -545,7 +564,15 @@ export function Dialog({
|
|
|
545
564
|
if (isInline || !isOpen) {
|
|
546
565
|
return;
|
|
547
566
|
}
|
|
548
|
-
|
|
567
|
+
// The dialog's own document while it holds focus: an app can render a
|
|
568
|
+
// dialog into a second document (a same-origin iframe, a Document
|
|
569
|
+
// Picture-in-Picture window) through a portal, and a control there that
|
|
570
|
+
// opens it is focused in that document, which the page's document reports
|
|
571
|
+
// only as the iframe element, or not at all. A control in the page that
|
|
572
|
+
// opens such a dialog leaves focus in the page.
|
|
573
|
+
const dialogDocument = dialogRef.current?.ownerDocument ?? document;
|
|
574
|
+
const doc = dialogDocument.hasFocus() ? dialogDocument : document;
|
|
575
|
+
triggerElementRef.current = doc.activeElement as HTMLElement | null;
|
|
549
576
|
}, [isOpen, isInline]);
|
|
550
577
|
|
|
551
578
|
// Derive dismissal behavior from purpose
|
|
@@ -567,7 +594,7 @@ export function Dialog({
|
|
|
567
594
|
// captured by the layout effect above, before any descendant effect
|
|
568
595
|
// could move focus.
|
|
569
596
|
const trigger = triggerElementRef.current;
|
|
570
|
-
if (trigger && trigger !==
|
|
597
|
+
if (trigger && trigger !== trigger.ownerDocument.body) {
|
|
571
598
|
const dir = getDialogDirection(trigger);
|
|
572
599
|
dialog.style.setProperty('--dialog-dir-x', `${dir.x}px`);
|
|
573
600
|
dialog.style.setProperty('--dialog-dir-y', `${dir.y}px`);
|
|
@@ -591,9 +618,15 @@ export function Dialog({
|
|
|
591
618
|
if (dialog.open) {
|
|
592
619
|
dialog.close();
|
|
593
620
|
}
|
|
594
|
-
// Return focus to the element that opened the dialog
|
|
595
|
-
|
|
596
|
-
|
|
621
|
+
// Return focus to the element that opened the dialog, with the ring
|
|
622
|
+
// the last input in that element's own document calls for.
|
|
623
|
+
const trigger = triggerElementRef.current;
|
|
624
|
+
if (trigger) {
|
|
625
|
+
focusForLastInput(
|
|
626
|
+
trigger,
|
|
627
|
+
undefined,
|
|
628
|
+
getInteractionModality(trigger.ownerDocument),
|
|
629
|
+
);
|
|
597
630
|
}
|
|
598
631
|
triggerElementRef.current = null;
|
|
599
632
|
}
|
|
@@ -20,15 +20,16 @@ import {useEffect, useRef, type ReactNode} from 'react';
|
|
|
20
20
|
import * as stylex from '@stylexjs/stylex';
|
|
21
21
|
import {spacingVars, sizeVars, typeScaleVars} from '../theme/tokens.stylex';
|
|
22
22
|
import {LayoutHeader} from '../Layout/LayoutHeader';
|
|
23
|
-
import {Button} from '../Button';
|
|
24
|
-
import {Icon} from '../Icon';
|
|
23
|
+
import {Button} from '../Button/Button';
|
|
24
|
+
import {Icon} from '../Icon/Icon';
|
|
25
25
|
import {Heading} from '../Heading/Heading';
|
|
26
26
|
import {Text} from '../Text/Text';
|
|
27
27
|
import type {BaseProps} from '../BaseProps';
|
|
28
|
-
import {isRenderable
|
|
28
|
+
import {isRenderable} from '../utils/isRenderable';
|
|
29
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
29
30
|
import {themeProps} from '../utils/themeProps';
|
|
30
31
|
import {useDialogContext} from './DialogContext';
|
|
31
|
-
import {useTranslator} from '../i18n';
|
|
32
|
+
import {useTranslator} from '../i18n/useTranslator';
|
|
32
33
|
|
|
33
34
|
const styles = stylex.create({
|
|
34
35
|
container: {
|