@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
|
@@ -118,7 +118,9 @@ export function isActive(state: GestureState): boolean {
|
|
|
118
118
|
return state === 'began' || state === 'changed';
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* The browser behaviors `touch-action` can keep or remove.
|
|
123
|
+
*/
|
|
122
124
|
export interface NativeTouchBehavior {
|
|
123
125
|
readonly panX: boolean;
|
|
124
126
|
readonly panY: boolean;
|
|
@@ -142,9 +144,20 @@ export const MANIPULATION: NativeTouchBehavior = {
|
|
|
142
144
|
doubleTapZoom: false,
|
|
143
145
|
};
|
|
144
146
|
|
|
147
|
+
/**
|
|
148
|
+
* What a recognizer is. The gesture code tells the family apart by it, never
|
|
149
|
+
* by `instanceof` (`architecture:react-component-runtime` INV13); a
|
|
150
|
+
* screen-edge pan is its own kind, though it is built on the pan.
|
|
151
|
+
*/
|
|
152
|
+
export type RecognizerKind =
|
|
153
|
+
'tap' | 'longPress' | 'pan' | 'screenEdgePan' | 'swipe' | 'pinch';
|
|
154
|
+
|
|
145
155
|
let nextRecognizerId = 1;
|
|
146
156
|
|
|
147
157
|
export abstract class GestureRecognizer {
|
|
158
|
+
/** What this recognizer is (see RecognizerKind). */
|
|
159
|
+
abstract get kind(): RecognizerKind;
|
|
160
|
+
|
|
148
161
|
/** Stable id, for ordering and debugging. */
|
|
149
162
|
readonly id = nextRecognizerId++;
|
|
150
163
|
name: string;
|
|
@@ -568,12 +581,19 @@ export abstract class GestureRecognizer {
|
|
|
568
581
|
}
|
|
569
582
|
}
|
|
570
583
|
|
|
584
|
+
/** @internal The host's hook: listeners follow whether anything is enabled. */
|
|
585
|
+
onEnabledChange: (() => void) | null = null;
|
|
586
|
+
|
|
571
587
|
/**
|
|
572
588
|
* UIKit's `isEnabled` setter: turning a recognizer off mid-gesture cancels
|
|
573
589
|
* the gesture (an active one) or fails it (a possible one).
|
|
574
590
|
*/
|
|
575
591
|
setEnabled(value: boolean): void {
|
|
592
|
+
const changed = this.isEnabled !== value;
|
|
576
593
|
this.isEnabled = value;
|
|
594
|
+
if (changed) {
|
|
595
|
+
this.onEnabledChange?.();
|
|
596
|
+
}
|
|
577
597
|
if (!value && (this.state !== 'possible' || this.isInvolved())) {
|
|
578
598
|
this.cancel();
|
|
579
599
|
}
|
|
@@ -41,6 +41,10 @@ export interface LongPressGestureRecognizerOptions extends GestureRecognizerOpti
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export class LongPressGestureRecognizer extends GestureRecognizer {
|
|
44
|
+
override get kind(): GestureRecognizer['kind'] {
|
|
45
|
+
return 'longPress';
|
|
46
|
+
}
|
|
47
|
+
|
|
44
48
|
minimumPressDuration: number;
|
|
45
49
|
allowableMovement: number;
|
|
46
50
|
numberOfTapsRequired: number;
|
|
@@ -87,6 +87,10 @@ const DIRECTION_VECTORS: Partial<Record<PanDirection, Point>> = {
|
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
export class PanGestureRecognizer extends GestureRecognizer {
|
|
90
|
+
override get kind(): GestureRecognizer['kind'] {
|
|
91
|
+
return 'pan';
|
|
92
|
+
}
|
|
93
|
+
|
|
90
94
|
minimumNumberOfTouches: number;
|
|
91
95
|
maximumNumberOfTouches: number;
|
|
92
96
|
hysteresis: number;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file PinchGestureRecognizer.ts
|
|
5
|
+
* @input Touches from a GestureArena
|
|
6
|
+
* @output Exports PinchGestureRecognizer (UIPinchGestureRecognizer) and its
|
|
7
|
+
* options
|
|
8
|
+
* @position Continuous two-finger recognizer of packages/core/src/gestures
|
|
9
|
+
*
|
|
10
|
+
* Tracks the first two fingers; more are ignored. Begins once the distance
|
|
11
|
+
* between them has changed by `hysteresis` px. As in UIKit, `scale` is then
|
|
12
|
+
* the current distance over the starting distance moved by the hysteresis
|
|
13
|
+
* toward the pinch, so it does not jump (settable to re-base it); `velocity`
|
|
14
|
+
* is scale per second. Lifting either finger ends an
|
|
15
|
+
* active pinch and fails a possible one.
|
|
16
|
+
*
|
|
17
|
+
* A host gives every element WITHOUT a pinch recognizer `pinch-zoom` in its
|
|
18
|
+
* `touch-action`, so the page stays zoomable (WCAG 1.4.4); attaching one
|
|
19
|
+
* takes the two-finger gesture for this element only.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import {UIKIT_PINCH} from '../motion/uikit/gestures';
|
|
23
|
+
import {centroid, distance} from './geometry';
|
|
24
|
+
import {
|
|
25
|
+
GestureRecognizer,
|
|
26
|
+
isActive,
|
|
27
|
+
type GestureRecognizerOptions,
|
|
28
|
+
type NativeTouchBehavior,
|
|
29
|
+
} from './GestureRecognizer';
|
|
30
|
+
import type {GestureEventContext, GestureTouch, Point} from './types';
|
|
31
|
+
import {VelocityTracker} from './VelocityTracker';
|
|
32
|
+
|
|
33
|
+
export interface PinchGestureRecognizerOptions extends GestureRecognizerOptions<PinchGestureRecognizer> {
|
|
34
|
+
hysteresis?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class PinchGestureRecognizer extends GestureRecognizer {
|
|
38
|
+
override get kind(): GestureRecognizer['kind'] {
|
|
39
|
+
return 'pinch';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
hysteresis: number;
|
|
43
|
+
private initialSpan = 0;
|
|
44
|
+
private scaleValue = 1;
|
|
45
|
+
private readonly tracker = new VelocityTracker();
|
|
46
|
+
private lastTime = 0;
|
|
47
|
+
|
|
48
|
+
constructor(options: PinchGestureRecognizerOptions = {}) {
|
|
49
|
+
super(options);
|
|
50
|
+
this.hysteresis = options.hysteresis ?? UIKIT_PINCH.hysteresis.value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Current span over the span the fingers started at. */
|
|
54
|
+
get scale(): number {
|
|
55
|
+
return this.scaleValue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Re-base: from now on the scale reads `value` at the current span. */
|
|
59
|
+
set scale(value: number) {
|
|
60
|
+
const span = this.span();
|
|
61
|
+
if (span > 0 && value > 0) {
|
|
62
|
+
this.initialSpan = span / value;
|
|
63
|
+
this.scaleValue = value;
|
|
64
|
+
// The velocity continues from the re-based value, without a jump.
|
|
65
|
+
this.tracker.reset();
|
|
66
|
+
this.tracker.add(value, 0, this.lastTime);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Scale per second (UIKit's filter; measured for pans, assumed here). */
|
|
71
|
+
get velocity(): number {
|
|
72
|
+
return this.tracker.velocity().x;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The midpoint between the two fingers. */
|
|
76
|
+
focalPoint(): Point {
|
|
77
|
+
return centroid(this.touches.values());
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Two fingers on this view are this recognizer's, not the browser's zoom. */
|
|
81
|
+
override get nativeTouchBehavior(): NativeTouchBehavior {
|
|
82
|
+
return {panX: true, panY: true, pinchZoom: false, doubleTapZoom: false};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected override acceptsTouch(touch: GestureTouch): boolean {
|
|
86
|
+
return this.numberOfTouches < 2 && super.acceptsTouch(touch);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
protected override touchesBegan(
|
|
90
|
+
_touches: ReadonlyArray<GestureTouch>,
|
|
91
|
+
event: GestureEventContext,
|
|
92
|
+
): void {
|
|
93
|
+
this.lastTime = event.time;
|
|
94
|
+
if (this.numberOfTouches === 2) {
|
|
95
|
+
this.initialSpan = this.span();
|
|
96
|
+
this.scaleValue = 1;
|
|
97
|
+
this.tracker.reset();
|
|
98
|
+
this.tracker.add(1, 0, event.time);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
protected override touchesMoved(
|
|
103
|
+
_touches: ReadonlyArray<GestureTouch>,
|
|
104
|
+
event: GestureEventContext,
|
|
105
|
+
): void {
|
|
106
|
+
if (this.numberOfTouches < 2 || this.initialSpan <= 0) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.lastTime = event.time;
|
|
110
|
+
const span = this.span();
|
|
111
|
+
// Once recognized, a pinch waiting on a recognizer it requires to fail
|
|
112
|
+
// keeps its re-based start: its moves only follow the fingers.
|
|
113
|
+
if (this.state === 'possible' && this.pending == null) {
|
|
114
|
+
if (Math.abs(span - this.initialSpan) >= this.hysteresis) {
|
|
115
|
+
// UIKit measures from the start moved by the hysteresis, and its
|
|
116
|
+
// first velocity spans from the touch-down (scale 1) to here.
|
|
117
|
+
this.initialSpan +=
|
|
118
|
+
Math.sign(span - this.initialSpan) * this.hysteresis;
|
|
119
|
+
this.scaleValue = span / this.initialSpan;
|
|
120
|
+
this.tracker.add(this.scaleValue, 0, event.time);
|
|
121
|
+
this.setState('began');
|
|
122
|
+
}
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.scaleValue = span / this.initialSpan;
|
|
126
|
+
// Every move of the fingers is a sample: a span that holds while they
|
|
127
|
+
// move reads as no change, so the velocity never goes stale.
|
|
128
|
+
this.tracker.add(this.scaleValue, 0, event.time, {isMotion: true});
|
|
129
|
+
if (isActive(this.state)) {
|
|
130
|
+
this.setState('changed');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
protected override touchesEnded(): void {
|
|
135
|
+
this.setState(isActive(this.state) ? 'ended' : 'failed');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
protected override reset(): void {
|
|
139
|
+
this.initialSpan = 0;
|
|
140
|
+
this.scaleValue = 1;
|
|
141
|
+
this.tracker.reset();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private span(): number {
|
|
145
|
+
const [a, b] = this.trackedTouches;
|
|
146
|
+
return a == null || b == null ? 0 : distance(a, b);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file PressTracker.ts
|
|
5
|
+
* @input Touches the arena delivers to a pressable view (TouchConsumer)
|
|
6
|
+
* @output Exports createPressTracker and its PressTracker interface
|
|
7
|
+
* (UIControl's touch tracking, built by a factory per
|
|
8
|
+
* architecture:react-component-runtime INV13), its options, the
|
|
9
|
+
* control event type, and PRESS_PROFILES (a control's and a table cell's
|
|
10
|
+
* tracking and release clock)
|
|
11
|
+
* @position View-level consumer of packages/core/src/gestures: what a
|
|
12
|
+
* UIControl does with the touches no gesture recognizer took
|
|
13
|
+
*
|
|
14
|
+
* UIControl semantics, event for event:
|
|
15
|
+
*
|
|
16
|
+
* - `touchDown` when the finger lands; the highlight comes on in the same
|
|
17
|
+
* frame, unless the control sits in a scroller, where it waits
|
|
18
|
+
* `contentTouchDelay` (UIScrollView.delaysContentTouches) so a flick
|
|
19
|
+
* paints nothing.
|
|
20
|
+
* - `touchDragInside` / `touchDragOutside` on every move, `touchDragExit` /
|
|
21
|
+
* `touchDragEnter` when the finger crosses the control's bounds EXPANDED
|
|
22
|
+
* by `trackingExpansion` (a fingertip dragged a little off a button is
|
|
23
|
+
* still on it). The highlight follows inside / outside.
|
|
24
|
+
* - `touchUpInside` / `touchUpOutside` at the lift. A tap quicker than the
|
|
25
|
+
* scroller delay shows the highlight at the lift for `quickTapFlash`.
|
|
26
|
+
* - `touchCancel` when a recognizer took the touch (`cancelsTouchesInView`)
|
|
27
|
+
* or the browser took it to scroll: the highlight goes at once, with no
|
|
28
|
+
* release, one frame before the content moves.
|
|
29
|
+
*
|
|
30
|
+
* Two profiles (PRESS_PROFILES) cover what UIKit does:
|
|
31
|
+
*
|
|
32
|
+
* - `control` (a button, a switch): as above.
|
|
33
|
+
* - `cell` (a table or collection row): the highlight waits the
|
|
34
|
+
* content-touch delay inside a scroll view and comes on at once outside one
|
|
35
|
+
* (`spec:AST-094` FR11), travel past the pan hysteresis cancels the press
|
|
36
|
+
* for good (the scroll view took the touch), and a quicker tap highlights
|
|
37
|
+
* at the lift straight into the release, with no flash.
|
|
38
|
+
*
|
|
39
|
+
* And UIControl's iOS 6 rule: a single-finger single tap recognizer on an
|
|
40
|
+
* ANCESTOR does not beat the control's own action for a touch on it (the
|
|
41
|
+
* default veto; `vetoesAncestorRecognizer` replaces it, as a slider vetoes a
|
|
42
|
+
* pan along its track).
|
|
43
|
+
*
|
|
44
|
+
* The bounds are read once, when the finger lands; nothing reads layout
|
|
45
|
+
* during the press. Activation stays the browser's click, which the arena
|
|
46
|
+
* swallows for a touch a recognizer took.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
import {UIKIT_GESTURES} from '../motion/uikit/gestures';
|
|
50
|
+
import {timing} from '../motion/uikit/timing';
|
|
51
|
+
import {travel} from './geometry';
|
|
52
|
+
import type {GestureRecognizer} from './GestureRecognizer';
|
|
53
|
+
import type {TapGestureRecognizer} from './TapGestureRecognizer';
|
|
54
|
+
import type {GestureTouch, TouchConsumer} from './types';
|
|
55
|
+
|
|
56
|
+
export type ControlEvent =
|
|
57
|
+
| 'touchDown'
|
|
58
|
+
| 'touchDragInside'
|
|
59
|
+
| 'touchDragOutside'
|
|
60
|
+
| 'touchDragEnter'
|
|
61
|
+
| 'touchDragExit'
|
|
62
|
+
| 'touchUpInside'
|
|
63
|
+
| 'touchUpOutside'
|
|
64
|
+
| 'touchCancel';
|
|
65
|
+
|
|
66
|
+
export interface PressBounds {
|
|
67
|
+
readonly left: number;
|
|
68
|
+
readonly top: number;
|
|
69
|
+
readonly right: number;
|
|
70
|
+
readonly bottom: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface PressTrackerOptions {
|
|
74
|
+
/** The control's bounds in client px, read when a finger lands. */
|
|
75
|
+
getBounds: () => PressBounds | null;
|
|
76
|
+
/** The view the tracker belongs to; recognizers on it are not ancestors. */
|
|
77
|
+
view?: unknown;
|
|
78
|
+
onControlEvent?: (event: ControlEvent, touch: GestureTouch) => void;
|
|
79
|
+
onHighlightChange?: (isHighlighted: boolean) => void;
|
|
80
|
+
trackingExpansion?: number;
|
|
81
|
+
/**
|
|
82
|
+
* When the highlight waits `contentTouchDelay`: inside a scroller (a
|
|
83
|
+
* control or a cell), always, or never. @default 'inScrollers'
|
|
84
|
+
*/
|
|
85
|
+
highlightDelay?: PressHighlightDelay;
|
|
86
|
+
/**
|
|
87
|
+
* Travel (px) past which the press is cancelled for good, with no
|
|
88
|
+
* re-highlight on the way back (a cell whose scroll view took the touch).
|
|
89
|
+
* Unset, the finger is tracked in and out of the expanded bounds.
|
|
90
|
+
*/
|
|
91
|
+
cancelTravel?: number;
|
|
92
|
+
/**
|
|
93
|
+
* How long a tap quicker than the delay shows the highlight at the lift,
|
|
94
|
+
* ms; 0 highlights and releases at once. @default the quick-tap flash
|
|
95
|
+
*/
|
|
96
|
+
quickTapFlash?: number;
|
|
97
|
+
/** Which ancestor recognizers the control's own action beats. */
|
|
98
|
+
vetoesAncestorRecognizer?: (recognizer: GestureRecognizer) => boolean;
|
|
99
|
+
/** @default () => true */
|
|
100
|
+
isEnabled?: () => boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Whether this finger is braking a scroll it set moving (see
|
|
103
|
+
* GestureHost.isScrollBraking): a native list highlights nothing for one,
|
|
104
|
+
* and the control does not track it at all. Asked only for a finger: a
|
|
105
|
+
* mouse or a pen never brakes (`spec:AST-094` FR11).
|
|
106
|
+
*/
|
|
107
|
+
isBraking?: (touch: GestureTouch) => boolean;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const PRESS = UIKIT_GESTURES.press;
|
|
111
|
+
|
|
112
|
+
export type PressHighlightDelay = 'inScrollers' | 'always' | 'never';
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* How a kind of pressable tracks a finger and how long its release takes.
|
|
116
|
+
*/
|
|
117
|
+
export interface PressProfile {
|
|
118
|
+
readonly highlightDelay: PressHighlightDelay;
|
|
119
|
+
readonly cancelTravel?: number;
|
|
120
|
+
readonly quickTapFlash: number;
|
|
121
|
+
/** The release (`fading`) clock a painter uses, ms. */
|
|
122
|
+
readonly releaseMs: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export const PRESS_PROFILES = {
|
|
126
|
+
/** UIControl: same-frame highlight outside scrollers, 70 pt tracking. */
|
|
127
|
+
control: {
|
|
128
|
+
highlightDelay: 'inScrollers',
|
|
129
|
+
quickTapFlash: PRESS.quickTapFlash.value,
|
|
130
|
+
// The shared press styles release every surface on the deselect clock
|
|
131
|
+
// until a control runs its own release (UIButton's 250 ms), so a
|
|
132
|
+
// painter's `fading` never outlasts the fade it shows.
|
|
133
|
+
releaseMs: timing.press.highlightOutMs,
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* A table or collection cell: inside a scroll view it highlights after the
|
|
137
|
+
* content-touch delay, outside one at once (AST-094 FR11: the delay applies
|
|
138
|
+
* only inside scroll views); cancelled by the scroll.
|
|
139
|
+
*/
|
|
140
|
+
cell: {
|
|
141
|
+
highlightDelay: 'inScrollers',
|
|
142
|
+
cancelTravel: UIKIT_GESTURES.pan.hysteresis.value,
|
|
143
|
+
quickTapFlash: 0,
|
|
144
|
+
releaseMs: timing.press.highlightOutMs,
|
|
145
|
+
},
|
|
146
|
+
} as const satisfies Record<string, PressProfile>;
|
|
147
|
+
|
|
148
|
+
export type PressProfileName = keyof typeof PRESS_PROFILES;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* UIButton's rule, the tracker's default ancestor veto: an ancestor's
|
|
152
|
+
* single-finger single tap. A tap is told apart by its `kind`
|
|
153
|
+
* (`architecture:react-component-runtime` INV13).
|
|
154
|
+
*/
|
|
155
|
+
export function vetoesSingleTap(recognizer: GestureRecognizer): boolean {
|
|
156
|
+
if (recognizer.kind !== 'tap') {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
const tap = recognizer as TapGestureRecognizer;
|
|
160
|
+
return tap.numberOfTapsRequired === 1 && tap.numberOfTouchesRequired === 1;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* A control's touch tracking, the gesture host's consumer for one element
|
|
165
|
+
* (UIControl's `beginTracking` / `continueTracking` / `endTracking`): it
|
|
166
|
+
* reports control events and the highlight. Built by
|
|
167
|
+
* {@link createPressTracker}.
|
|
168
|
+
*/
|
|
169
|
+
export interface PressTracker extends TouchConsumer {
|
|
170
|
+
/** Whether the control paints its pressed highlight now. */
|
|
171
|
+
readonly isHighlighted: boolean;
|
|
172
|
+
/** Whether a touch is being tracked. */
|
|
173
|
+
readonly isTracking: boolean;
|
|
174
|
+
/** Whether the tracked touch is inside the bounds plus the expansion. */
|
|
175
|
+
readonly isTouchInside: boolean;
|
|
176
|
+
/**
|
|
177
|
+
* How far past its bounds a tracked touch still counts as inside, px; its
|
|
178
|
+
* hook keeps it in step with the option.
|
|
179
|
+
*/
|
|
180
|
+
trackingExpansion: number;
|
|
181
|
+
/**
|
|
182
|
+
* Whether the control takes touches now: a disabled one gives the host no
|
|
183
|
+
* reason to listen (`spec:AST-094` FR24).
|
|
184
|
+
*/
|
|
185
|
+
isEnabled(): boolean;
|
|
186
|
+
allowsAncestorRecognizer(recognizer: unknown): boolean;
|
|
187
|
+
/** Drop any highlight and timers (the control unmounted or was disabled). */
|
|
188
|
+
dispose(): void;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Track a control's touches (see {@link PressTracker}). */
|
|
192
|
+
export function createPressTracker(options: PressTrackerOptions): PressTracker {
|
|
193
|
+
let touchId: number | null = null;
|
|
194
|
+
let bounds: PressBounds | null = null;
|
|
195
|
+
let highlightTimer: ReturnType<typeof setTimeout> | null = null;
|
|
196
|
+
let flashTimer: ReturnType<typeof setTimeout> | null = null;
|
|
197
|
+
/** A pending highlight whose finger travelled: it will never paint. */
|
|
198
|
+
let isPendingDead = false;
|
|
199
|
+
|
|
200
|
+
const state = {
|
|
201
|
+
isHighlighted: false,
|
|
202
|
+
isTracking: false,
|
|
203
|
+
isTouchInside: false,
|
|
204
|
+
};
|
|
205
|
+
const contains = (touch: GestureTouch): boolean => {
|
|
206
|
+
if (bounds == null) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
const margin = tracker.trackingExpansion;
|
|
210
|
+
return (
|
|
211
|
+
touch.x >= bounds.left - margin &&
|
|
212
|
+
touch.x <= bounds.right + margin &&
|
|
213
|
+
touch.y >= bounds.top - margin &&
|
|
214
|
+
touch.y <= bounds.bottom + margin
|
|
215
|
+
);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
const emit = (event: ControlEvent, touch: GestureTouch): void => {
|
|
219
|
+
options.onControlEvent?.(event, touch);
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
const setHighlighted = (value: boolean): void => {
|
|
223
|
+
if (state.isHighlighted === value) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
state.isHighlighted = value;
|
|
227
|
+
options.onHighlightChange?.(value);
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const clearHighlightTimer = (): void => {
|
|
231
|
+
if (highlightTimer != null) {
|
|
232
|
+
clearTimeout(highlightTimer);
|
|
233
|
+
highlightTimer = null;
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
const clearFlash = (): void => {
|
|
238
|
+
if (flashTimer != null) {
|
|
239
|
+
clearTimeout(flashTimer);
|
|
240
|
+
flashTimer = null;
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
const finish = (): void => {
|
|
245
|
+
touchId = null;
|
|
246
|
+
state.isTracking = false;
|
|
247
|
+
state.isTouchInside = false;
|
|
248
|
+
bounds = null;
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
const touchCancelled = (touch: GestureTouch): void => {
|
|
252
|
+
if (touch.id !== touchId) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
clearHighlightTimer();
|
|
256
|
+
emit('touchCancel', touch);
|
|
257
|
+
setHighlighted(false);
|
|
258
|
+
finish();
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
const tracker: PressTracker = {
|
|
262
|
+
get isHighlighted() {
|
|
263
|
+
return state.isHighlighted;
|
|
264
|
+
},
|
|
265
|
+
get isTracking() {
|
|
266
|
+
return state.isTracking;
|
|
267
|
+
},
|
|
268
|
+
get isTouchInside() {
|
|
269
|
+
return state.isTouchInside;
|
|
270
|
+
},
|
|
271
|
+
trackingExpansion:
|
|
272
|
+
options.trackingExpansion ??
|
|
273
|
+
UIKIT_GESTURES.control.trackingExpansion.value,
|
|
274
|
+
|
|
275
|
+
isEnabled(): boolean {
|
|
276
|
+
return options.isEnabled?.() !== false;
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
touchBegan(touch: GestureTouch): void {
|
|
280
|
+
if (
|
|
281
|
+
touchId != null ||
|
|
282
|
+
options.isEnabled?.() === false ||
|
|
283
|
+
// The scroll brake is a finger's (`spec:AST-094` FR11, DEC-21).
|
|
284
|
+
(touch.pointerType === 'touch' && options.isBraking?.(touch) === true)
|
|
285
|
+
) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
clearFlash();
|
|
289
|
+
touchId = touch.id;
|
|
290
|
+
bounds = options.getBounds();
|
|
291
|
+
state.isTracking = true;
|
|
292
|
+
state.isTouchInside = true;
|
|
293
|
+
isPendingDead = false;
|
|
294
|
+
emit('touchDown', touch);
|
|
295
|
+
const delay = options.highlightDelay ?? 'inScrollers';
|
|
296
|
+
const delays =
|
|
297
|
+
touch.pointerType === 'touch' &&
|
|
298
|
+
(delay === 'always' ||
|
|
299
|
+
(delay === 'inScrollers' && touch.scroll?.isInsideScroller === true));
|
|
300
|
+
if (delays) {
|
|
301
|
+
highlightTimer = setTimeout(() => {
|
|
302
|
+
highlightTimer = null;
|
|
303
|
+
if (state.isTouchInside) {
|
|
304
|
+
setHighlighted(true);
|
|
305
|
+
}
|
|
306
|
+
}, PRESS.contentTouchDelay.value);
|
|
307
|
+
} else {
|
|
308
|
+
setHighlighted(true);
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
touchMoved(touch: GestureTouch): void {
|
|
313
|
+
if (touch.id !== touchId) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const cancelTravel = options.cancelTravel;
|
|
317
|
+
if (cancelTravel != null && travel(touch) > cancelTravel) {
|
|
318
|
+
// A cell's scroll view took the touch: the press is over.
|
|
319
|
+
touchCancelled(touch);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
if (highlightTimer != null && travel(touch) > PRESS.slop.value) {
|
|
323
|
+
// A finger travelling before the delay ran out is scrolling: the
|
|
324
|
+
// press it began never paints, as a flick on a list paints nothing.
|
|
325
|
+
clearTimeout(highlightTimer);
|
|
326
|
+
highlightTimer = null;
|
|
327
|
+
isPendingDead = true;
|
|
328
|
+
}
|
|
329
|
+
const inside = contains(touch);
|
|
330
|
+
if (inside !== state.isTouchInside) {
|
|
331
|
+
state.isTouchInside = inside;
|
|
332
|
+
emit(inside ? 'touchDragEnter' : 'touchDragExit', touch);
|
|
333
|
+
if (highlightTimer == null && !isPendingDead) {
|
|
334
|
+
setHighlighted(inside);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
emit(inside ? 'touchDragInside' : 'touchDragOutside', touch);
|
|
338
|
+
},
|
|
339
|
+
|
|
340
|
+
touchEnded(touch: GestureTouch): void {
|
|
341
|
+
if (touch.id !== touchId) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const inside = contains(touch);
|
|
345
|
+
const wasPending = highlightTimer != null;
|
|
346
|
+
clearHighlightTimer();
|
|
347
|
+
emit(inside ? 'touchUpInside' : 'touchUpOutside', touch);
|
|
348
|
+
const flash = options.quickTapFlash ?? PRESS.quickTapFlash.value;
|
|
349
|
+
if (wasPending && inside) {
|
|
350
|
+
// Quicker than the delay: the highlight shows at the lift, for the
|
|
351
|
+
// flash, or (a cell) straight into the release.
|
|
352
|
+
setHighlighted(true);
|
|
353
|
+
if (flash > 0) {
|
|
354
|
+
flashTimer = setTimeout(() => {
|
|
355
|
+
flashTimer = null;
|
|
356
|
+
setHighlighted(false);
|
|
357
|
+
}, flash);
|
|
358
|
+
} else {
|
|
359
|
+
setHighlighted(false);
|
|
360
|
+
}
|
|
361
|
+
} else {
|
|
362
|
+
setHighlighted(false);
|
|
363
|
+
}
|
|
364
|
+
finish();
|
|
365
|
+
},
|
|
366
|
+
|
|
367
|
+
touchCancelled,
|
|
368
|
+
|
|
369
|
+
allowsAncestorRecognizer(recognizer: unknown): boolean {
|
|
370
|
+
const candidate = recognizer as GestureRecognizer;
|
|
371
|
+
if (candidate.view != null && candidate.view === options.view) {
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
const vetoes = options.vetoesAncestorRecognizer ?? vetoesSingleTap;
|
|
375
|
+
return !vetoes(candidate);
|
|
376
|
+
},
|
|
377
|
+
|
|
378
|
+
dispose(): void {
|
|
379
|
+
clearHighlightTimer();
|
|
380
|
+
clearFlash();
|
|
381
|
+
setHighlighted(false);
|
|
382
|
+
finish();
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
return tracker;
|
|
386
|
+
}
|