@astryxdesign/core 0.7.7 → 0.7.8-canary.36cde5e
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 +4 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +46 -6
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +5 -0
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +1 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +25 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
- package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
- package/dist/BottomSheet/useMobileKeyboard.js +6 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +12 -1
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +17 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +15 -16
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +2 -0
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +4 -0
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +2 -1
- package/dist/Chat/useChatDictation.d.ts.map +1 -1
- package/dist/Chat/useChatDictation.js +2 -0
- package/dist/Chat/useChatNewMessages.js +1 -1
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +2 -0
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +3 -0
- package/dist/Chat/useTriggerMenu.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +17 -12
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +28 -11
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +2 -0
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +14 -4
- package/dist/ContextMenu/ContextMenu.js +2 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +5 -2
- package/dist/DateInput/PickerWheel.d.ts +19 -0
- package/dist/DateInput/PickerWheel.d.ts.map +1 -0
- package/dist/DateInput/PickerWheel.js +625 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +1 -0
- package/dist/DateInput/Wheel.d.ts +18 -37
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +84 -113
- package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
- package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
- package/dist/DateInput/useOwnScrollGesture.js +16 -3
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
- package/dist/DateInput/usePointerDragScroll.js +2 -0
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
- package/dist/DateInput/useScrollSettle.js +3 -0
- package/dist/DateInput/useWheelListbox.d.ts +59 -0
- package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
- package/dist/DateInput/useWheelListbox.js +88 -0
- package/dist/DateInput/wheelOptions.d.ts +74 -0
- package/dist/DateInput/wheelOptions.d.ts.map +1 -0
- package/dist/DateInput/wheelOptions.js +98 -0
- package/dist/DateInput/wheelPhysics.d.ts +127 -0
- package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
- package/dist/DateInput/wheelPhysics.js +341 -0
- package/dist/DateInput/wheelStrip.d.ts +92 -0
- package/dist/DateInput/wheelStrip.d.ts.map +1 -0
- package/dist/DateInput/wheelStrip.js +258 -0
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +2 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -32
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +3 -0
- package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
- package/dist/DropdownMenu/useMenuOverflow.js +5 -0
- package/dist/Field/Field.js +2 -2
- package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
- package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
- package/dist/FormLayout/FormLayout.d.ts +5 -1
- package/dist/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.d.ts +6 -4
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +48 -3
- package/dist/HoverCard/useHoverCard.d.ts +5 -4
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +20 -33
- package/dist/Icon/Icon.d.ts +5 -1
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +5 -2
- package/dist/Item/useSwipeAction.d.ts.map +1 -1
- package/dist/Item/useSwipeAction.js +3 -0
- package/dist/Layer/modalOutlet.d.ts.map +1 -1
- package/dist/Layer/modalOutlet.js +2 -0
- package/dist/Layer/outsidePress.d.ts.map +1 -1
- package/dist/Layer/outsidePress.js +1 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +3 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +3 -0
- package/dist/Layer/usePressPin.d.ts +17 -5
- package/dist/Layer/usePressPin.d.ts.map +1 -1
- package/dist/Layer/usePressPin.js +62 -12
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +3 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +19 -0
- package/dist/MobileNav/MobileNav.d.ts +3 -2
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +9 -25
- package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromDOM.js +3 -0
- package/dist/Outline/useScrollSpy.d.ts.map +1 -1
- package/dist/Outline/useScrollSpy.js +3 -0
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -0
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -0
- package/dist/PowerSearch/PowerSearch.d.ts +43 -4
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +445 -134
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +25 -6
- package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
- package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +7 -2
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +193 -83
- package/dist/PowerSearch/formatFilterValue.d.ts +18 -6
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +33 -12
- package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
- package/dist/PowerSearch/formatTokenValue.js +162 -0
- package/dist/PowerSearch/powerSearchDateZone.d.ts +21 -0
- package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
- package/dist/PowerSearch/powerSearchDateZone.js +37 -0
- package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
- package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
- package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBarTouch.js +2 -0
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +3 -2
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +5 -3
- package/dist/Resizable/ResizeHandle.d.ts +2 -1
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +101 -77
- package/dist/Resizable/createResizable.d.ts +145 -0
- package/dist/Resizable/createResizable.d.ts.map +1 -0
- package/dist/Resizable/createResizable.js +575 -0
- package/dist/Resizable/useResizable.d.ts +3 -3
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +252 -459
- package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
- package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
- package/dist/SelectableCard/SelectableCard.d.ts +2 -0
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +36 -11
- package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
- package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
- package/dist/SelectableCard/selectableCardInput.js +20 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +5 -8
- package/dist/Slider/sliderTouchController.js +2 -2
- package/dist/Spinner/Spinner.d.ts +1 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +60 -58
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +4 -10
- package/dist/Switch/useSwitchTouch.js +4 -4
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +29 -8
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
- package/dist/TextInput/TextInput.d.ts +2 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +10 -7
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +2 -0
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +2 -0
- package/dist/Timer/Timer.d.ts.map +1 -1
- package/dist/Timer/Timer.js +2 -0
- package/dist/Timestamp/Timestamp.js +1 -1
- package/dist/Toast/Toast.d.ts +11 -1
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -15
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +97 -34
- package/dist/Toast/types.d.ts +9 -3
- package/dist/Toast/types.d.ts.map +1 -1
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +1 -0
- package/dist/Tokenizer/Tokenizer.d.ts +49 -37
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +22 -19
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +1 -1
- package/dist/Tokenizer/index.d.ts +1 -1
- package/dist/Tokenizer/index.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +19 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +34 -53
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +27 -18
- package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/animator/createAnimator.d.ts +98 -0
- package/dist/animator/createAnimator.d.ts.map +1 -0
- package/dist/animator/createAnimator.js +259 -0
- package/dist/astryx.css +39 -6
- package/dist/gestures/GestureHost.d.ts +16 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +1 -1
- package/dist/gestures/PressTracker.d.ts.map +1 -1
- package/dist/gestures/PressTracker.js +4 -3
- package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
- package/dist/hooks/ModalAnnounceProvider.js +1 -0
- package/dist/hooks/actionGroupTracker.d.ts +4 -1
- package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
- package/dist/hooks/actionGroupTracker.js +13 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/longPressDetector.d.ts +66 -0
- package/dist/hooks/longPressDetector.d.ts.map +1 -0
- package/dist/hooks/longPressDetector.js +200 -0
- package/dist/hooks/pressGroupContext.d.ts +6 -0
- package/dist/hooks/pressGroupContext.d.ts.map +1 -0
- package/dist/hooks/pressGroupContext.js +20 -0
- package/dist/hooks/rootScrollStyles.d.ts +48 -0
- package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
- package/dist/hooks/rootScrollStyles.js +207 -0
- package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
- package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
- package/dist/hooks/scrollLockTouchGuard.js +134 -0
- package/dist/hooks/scrollbarGutter.d.ts +4 -4
- package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
- package/dist/hooks/scrollbarGutter.js +36 -23
- package/dist/hooks/useActionGroupTracking.d.ts +53 -0
- package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
- package/dist/hooks/useActionGroupTracking.js +174 -0
- package/dist/hooks/useAnimator.d.ts +41 -0
- package/dist/hooks/useAnimator.d.ts.map +1 -0
- package/dist/hooks/useAnimator.js +70 -0
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +1 -0
- package/dist/hooks/useAttachment.d.ts +1 -1
- package/dist/hooks/useAttachment.js +1 -1
- package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
- package/dist/hooks/useAutoMediaMode.js +1 -0
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +2 -0
- package/dist/hooks/useDevWarning.d.ts.map +1 -1
- package/dist/hooks/useDevWarning.js +2 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +2 -0
- package/dist/hooks/useGridFocus.d.ts +8 -5
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +4 -3
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -0
- package/dist/hooks/useImageMode.d.ts.map +1 -1
- package/dist/hooks/useImageMode.js +3 -0
- package/dist/hooks/useInputStatusIcon.d.ts +1 -1
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +2 -2
- package/dist/hooks/useKeyboardHint.js +1 -1
- package/dist/hooks/useLongPress.d.ts +8 -9
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +23 -106
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +2 -0
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +3 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +2 -1
- package/dist/hooks/usePressFeedback.d.ts.map +1 -1
- package/dist/hooks/usePressFeedback.js +1 -0
- package/dist/hooks/useResolvedRequired.d.ts +3 -0
- package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
- package/dist/hooks/useResolvedRequired.js +3 -0
- package/dist/hooks/useScrollLock.d.ts +7 -9
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +55 -48
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +5 -0
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +3 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +30 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/internal/indicatorPress.stylex.d.ts +20 -0
- package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
- package/dist/internal/indicatorPress.stylex.js +26 -0
- package/dist/internal/selectable-card.d.ts +21 -0
- package/dist/internal/selectable-card.d.ts.map +1 -0
- package/dist/internal/selectable-card.js +20 -0
- package/dist/internal/sheetDraft.d.ts +2 -2
- package/dist/internal/sheetDraft.js +2 -2
- package/dist/motion/animatedLayout.d.ts.map +1 -1
- package/dist/motion/animatedLayout.js +7 -7
- package/dist/motion/animator.d.ts +14 -14
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +45 -20
- package/dist/motion/progress.d.ts +88 -0
- package/dist/motion/progress.d.ts.map +1 -0
- package/dist/motion/progress.js +128 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +3 -1
- package/dist/motion/uikit/alert.d.ts +41 -0
- package/dist/motion/uikit/alert.d.ts.map +1 -0
- package/dist/motion/uikit/alert.js +43 -0
- package/dist/motion/uikit/index.d.ts +4 -3
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +4 -3
- package/dist/motion/uikit/picker.d.ts +96 -0
- package/dist/motion/uikit/picker.d.ts.map +1 -0
- package/dist/motion/uikit/picker.js +117 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
- package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
- package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +29 -4
- package/dist/theme/motionKnobs.d.ts +4 -3
- package/dist/theme/motionKnobs.d.ts.map +1 -1
- package/dist/theme/motionKnobs.js +3 -2
- package/dist/theme/themeMotion.d.ts +6 -0
- package/dist/theme/themeMotion.d.ts.map +1 -1
- package/dist/theme/themeMotion.js +7 -0
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +12 -0
- package/dist/utils/focusReturn.d.ts +15 -0
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +28 -0
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +4 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +3 -2
- package/dist/utils/plainDate.d.ts +8 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +19 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -6
- package/dist/utils/triggerFocus.d.ts +36 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -0
- package/dist/utils/triggerFocus.js +65 -0
- package/locales/en.json +120 -0
- package/locales/pseudo.json +90 -0
- package/package.json +14 -9
- package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
- package/src/AlertDialog/AlertDialog.tsx +46 -5
- package/src/AppShell/AppShell.tsx +4 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
- package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
- package/src/BottomSheet/useMobileKeyboard.ts +4 -0
- package/src/BottomSheet/useSheetGestures.ts +10 -1
- package/src/Button/Button.tsx +26 -4
- package/src/Calendar/Calendar.tsx +36 -25
- package/src/Carousel/Carousel.tsx +1 -0
- package/src/Chat/ChatComposerInput.tsx +2 -0
- package/src/Chat/ChatMessageList.tsx +2 -1
- package/src/Chat/useChatDictation.ts +1 -0
- package/src/Chat/useChatNewMessages.ts +1 -1
- package/src/Chat/useChatStreamScroll.ts +2 -0
- package/src/Chat/useSpeechRecognition.ts +2 -0
- package/src/Chat/useTriggerMenu.tsx +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
- package/src/CheckboxInput/CheckboxInput.tsx +38 -15
- package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
- package/src/CodeBlock/CodeBlock.tsx +41 -4
- package/src/CommandPalette/CommandPalette.tsx +1 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
- package/src/ComplexSelector/ComplexSelector.tsx +20 -5
- package/src/ContextMenu/ContextMenu.tsx +2 -2
- package/src/DateInput/MonthScroller.tsx +8 -2
- package/src/DateInput/PickerWheel.tsx +765 -0
- package/src/DateInput/TouchDateField.tsx +1 -0
- package/src/DateInput/Wheel.tsx +94 -150
- package/src/DateInput/useOwnScrollGesture.ts +25 -3
- package/src/DateInput/usePointerDragScroll.ts +1 -0
- package/src/DateInput/useScrollSettle.ts +2 -0
- package/src/DateInput/useWheelListbox.ts +112 -0
- package/src/DateInput/wheelOptions.ts +155 -0
- package/src/DateInput/wheelPhysics.ts +406 -0
- package/src/DateInput/wheelStrip.ts +341 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +2 -0
- package/src/Dialog/Dialog.tsx +12 -32
- package/src/Drawer/useDrawerDialogPresence.ts +2 -0
- package/src/DropdownMenu/useMenuOverflow.ts +3 -0
- package/src/Field/Field.tsx +2 -2
- package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
- package/src/FormLayout/FormLayout.doc.mjs +181 -46
- package/src/FormLayout/FormLayout.tsx +5 -1
- package/src/HoverCard/HoverCard.doc.mjs +10 -8
- package/src/HoverCard/HoverCard.tsx +58 -6
- package/src/HoverCard/useHoverCard.doc.mjs +178 -36
- package/src/HoverCard/useHoverCard.tsx +49 -54
- package/src/Icon/Icon.doc.mjs +49 -8
- package/src/Icon/Icon.tsx +15 -7
- package/src/IconButton/IconButton.doc.mjs +141 -21
- package/src/Item/useSwipeAction.ts +2 -0
- package/src/Layer/modalOutlet.ts +2 -0
- package/src/Layer/outsidePress.ts +1 -0
- package/src/Layer/useLayer.tsx +2 -0
- package/src/Layer/useLayerDismissal.ts +2 -0
- package/src/Layer/usePressPin.ts +81 -15
- package/src/Layer/useTouchTrigger.ts +2 -0
- package/src/Lightbox/Lightbox.tsx +19 -0
- package/src/MobileNav/MobileNav.tsx +9 -30
- package/src/Outline/useOutlineFromDOM.ts +2 -0
- package/src/Outline/useScrollSpy.ts +2 -0
- package/src/OverflowList/OverflowList.tsx +2 -0
- package/src/Popover/Popover.tsx +4 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
- package/src/PowerSearch/PowerSearch.tsx +627 -157
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +39 -6
- package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
- package/src/PowerSearch/PowerSearchToken.tsx +7 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +244 -58
- package/src/PowerSearch/formatFilterValue.ts +55 -17
- package/src/PowerSearch/formatTokenValue.ts +222 -0
- package/src/PowerSearch/powerSearchDateZone.ts +64 -0
- package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
- package/src/PowerSearch/types.ts +2 -0
- package/src/ProgressBar/ProgressBarTouch.ts +2 -0
- package/src/RadioList/RadioList.tsx +3 -2
- package/src/RadioList/RadioListItem.tsx +5 -3
- package/src/Resizable/Resizable.doc.mjs +5 -4
- package/src/Resizable/ResizeHandle.tsx +169 -109
- package/src/Resizable/createResizable.ts +831 -0
- package/src/Resizable/useResizable.ts +292 -623
- package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
- package/src/SelectableCard/SelectableCard.tsx +39 -10
- package/src/SelectableCard/selectableCardInput.ts +30 -0
- package/src/Selector/Selector.tsx +5 -12
- package/src/Slider/sliderTouchController.ts +2 -2
- package/src/Spinner/Spinner.tsx +77 -63
- package/src/Switch/Switch.tsx +2 -6
- package/src/Switch/useSwitchTouch.ts +4 -4
- package/src/Table/BaseTable.tsx +46 -12
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
- package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
- package/src/TextInput/TextInput.tsx +11 -10
- package/src/TimeInput/TimeInput.tsx +2 -0
- package/src/TimeInput/TouchTimeField.tsx +2 -0
- package/src/Timer/Timer.tsx +1 -0
- package/src/Timestamp/Timestamp.tsx +1 -1
- package/src/Toast/Toast.doc.mjs +4 -3
- package/src/Toast/Toast.tsx +52 -32
- package/src/Toast/ToastViewport.tsx +123 -35
- package/src/Toast/types.ts +9 -3
- package/src/Toast/useToast.tsx +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +19 -3
- package/src/Tokenizer/Tokenizer.tsx +73 -51
- package/src/Tokenizer/TokenizerBottomSheet.tsx +1 -1
- package/src/Tokenizer/index.ts +1 -0
- package/src/Tooltip/useTooltip.doc.mjs +24 -0
- package/src/Tooltip/useTooltip.tsx +61 -56
- package/src/Typeahead/BaseTypeahead.tsx +27 -17
- package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/animator/createAnimator.doc.mjs +153 -0
- package/src/animator/createAnimator.ts +324 -0
- package/src/gestures/GestureHost.ts +1 -1
- package/src/gestures/PressTracker.ts +4 -3
- package/src/gestures/README.md +10 -4
- package/src/hooks/ModalAnnounceProvider.tsx +1 -0
- package/src/hooks/actionGroupTracker.ts +20 -5
- package/src/hooks/index.ts +2 -0
- package/src/hooks/longPressDetector.ts +273 -0
- package/src/hooks/pressGroupContext.ts +21 -0
- package/src/hooks/rootScrollStyles.ts +247 -0
- package/src/hooks/scrollLockTouchGuard.ts +182 -0
- package/src/hooks/scrollbarGutter.ts +41 -26
- package/src/hooks/useActionGroupTracking.ts +224 -0
- package/src/hooks/useAnimator.doc.mjs +109 -0
- package/src/hooks/useAnimator.ts +67 -0
- package/src/hooks/useAnnounceRenderedText.ts +1 -0
- package/src/hooks/useAttachment.ts +1 -1
- package/src/hooks/useAutoMediaMode.ts +1 -0
- package/src/hooks/useBusyAnnouncement.ts +2 -0
- package/src/hooks/useDevWarning.ts +2 -0
- package/src/hooks/useFocusTrap.ts +2 -0
- package/src/hooks/useGridFocus.doc.mjs +6 -6
- package/src/hooks/useGridFocus.ts +10 -7
- package/src/hooks/useHotkeys.ts +2 -0
- package/src/hooks/useImageMode.ts +2 -0
- package/src/hooks/useInputStatusIcon.tsx +3 -2
- package/src/hooks/useKeyboardHint.tsx +1 -1
- package/src/hooks/useLongPress.doc.mjs +2 -2
- package/src/hooks/useLongPress.ts +32 -122
- package/src/hooks/useMenuHover.ts +1 -0
- package/src/hooks/useMenuPress.ts +2 -0
- package/src/hooks/useOverflow.ts +2 -1
- package/src/hooks/usePressFeedback.ts +1 -0
- package/src/hooks/useResolvedRequired.ts +3 -0
- package/src/hooks/useScrollLock.doc.mjs +51 -12
- package/src/hooks/useScrollLock.ts +57 -60
- package/src/hooks/useScrollableArea.ts +4 -0
- package/src/hooks/useStreamingText.ts +2 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
- package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
- package/src/i18n/generated-locales/en.generated.ts +41 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
- package/src/index.ts +13 -0
- package/src/internal/indicatorPress.stylex.ts +24 -0
- package/src/internal/selectable-card.ts +21 -0
- package/src/internal/sheetDraft.ts +2 -2
- package/src/motion/MEASUREMENTS.md +18 -0
- package/src/motion/README.md +10 -5
- package/src/motion/animatedLayout.ts +10 -5
- package/src/motion/animator.ts +66 -31
- package/src/motion/progress.ts +155 -0
- package/src/motion/reducedMotion.ts +3 -1
- package/src/motion/uikit/alert.ts +43 -0
- package/src/motion/uikit/index.ts +4 -3
- package/src/motion/uikit/picker.ts +116 -0
- package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
- package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
- package/src/theme/Theme.tsx +37 -3
- package/src/theme/motionKnobs.ts +4 -3
- package/src/theme/themeMotion.ts +7 -0
- package/src/utils/dateParser.ts +16 -0
- package/src/utils/focusReturn.ts +30 -0
- package/src/utils/interactionModality.ts +4 -0
- package/src/utils/interactionOverlay.stylex.ts +3 -2
- package/src/utils/plainDate.ts +21 -0
- package/src/utils/pressFeedback.ts +24 -6
- package/src/utils/triggerFocus.ts +80 -0
- package/dist/internal/touch-sheet.d.ts +0 -21
- package/dist/internal/touch-sheet.d.ts.map +0 -1
- package/dist/internal/touch-sheet.js +0 -19
- package/src/internal/touch-sheet.ts +0 -21
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file longPressDetector.ts
|
|
5
|
+
* @input The long-press numbers (motion/uikit/longPress.ts) and touch events
|
|
6
|
+
* @output createLongPressDetector(): one long press at a time, timed on the
|
|
7
|
+
* touch events' clock, with no React
|
|
8
|
+
* @position Internal; the core of useLongPress and useLongPressDetector
|
|
9
|
+
* (useLongPress.ts). Not in the hooks entry.
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update /packages/core/src/hooks/useLongPress.ts
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
LONG_PRESS_ALLOWABLE_MOVEMENT_PX,
|
|
16
|
+
LONG_PRESS_DURATION_MS,
|
|
17
|
+
} from '../motion/uikit/longPress';
|
|
18
|
+
|
|
19
|
+
// The hold is a deadline on the touch events' timestamps, on the clock of the
|
|
20
|
+
// touch's own window. A busy main thread can delay the timer past the
|
|
21
|
+
// deadline. A touch stamped after the deadline then reports the press before
|
|
22
|
+
// it acts. A press started by hand from a point has no stamp, so its page
|
|
23
|
+
// timer waits the full delay.
|
|
24
|
+
|
|
25
|
+
// The long-press numbers have one source, shared with the gesture
|
|
26
|
+
// recognizers (motion/uikit/longPress.ts).
|
|
27
|
+
const DEFAULT_DELAY_MS = LONG_PRESS_DURATION_MS;
|
|
28
|
+
const DEFAULT_MOVE_CANCEL_PX = LONG_PRESS_ALLOWABLE_MOVEMENT_PX;
|
|
29
|
+
|
|
30
|
+
/** @internal What a detector reads at each start, move and fire. */
|
|
31
|
+
export interface LongPressDetectorOptions {
|
|
32
|
+
/** Fired with the start point once the press is held for `delayMs`. */
|
|
33
|
+
onLongPress: (point: {x: number; y: number}) => void;
|
|
34
|
+
/** When true, a start does nothing. */
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/** Hold duration before the press fires, in ms. Defaults to 500. */
|
|
37
|
+
delayMs?: number;
|
|
38
|
+
/** Movement past this distance (px, either axis) cancels the press. Defaults to 10. */
|
|
39
|
+
moveCancelPx?: number;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @internal A press's own movement tolerance, for a core caller that decides
|
|
44
|
+
* it as the press starts (useMenuPress's trigger).
|
|
45
|
+
*/
|
|
46
|
+
export interface LongPressTolerance {
|
|
47
|
+
moveCancelPx?: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @internal The part of a touch event a detector reads, React's or the DOM's.
|
|
52
|
+
*/
|
|
53
|
+
export interface LongPressTouchEvent {
|
|
54
|
+
readonly touches: {
|
|
55
|
+
readonly length: number;
|
|
56
|
+
readonly [index: number]: {
|
|
57
|
+
readonly clientX: number;
|
|
58
|
+
readonly clientY: number;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
readonly timeStamp: number;
|
|
62
|
+
readonly view?: unknown;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @internal One detector: start a press, report its touches, or drop it. */
|
|
66
|
+
export interface LongPressDetector {
|
|
67
|
+
/** Begin detection at a point, dropping any press still pending. */
|
|
68
|
+
start: (
|
|
69
|
+
point: {x: number; y: number},
|
|
70
|
+
tolerance?: LongPressTolerance,
|
|
71
|
+
) => void;
|
|
72
|
+
/** A touch started: one finger begins a press, a second one ends it. */
|
|
73
|
+
touchStart: (event: LongPressTouchEvent) => void;
|
|
74
|
+
/** A touch moved: past the tolerance the press is off. */
|
|
75
|
+
touchMove: (event: LongPressTouchEvent) => void;
|
|
76
|
+
/** The lift or the cancel. A press it is stamped past reports first. */
|
|
77
|
+
touchEnd: (event?: LongPressTouchEvent) => void;
|
|
78
|
+
/**
|
|
79
|
+
* Report the pointer's new position. Past the tolerance the press is off.
|
|
80
|
+
* Returns whether a press is still pending.
|
|
81
|
+
*/
|
|
82
|
+
moveTo: (point: {x: number; y: number}) => boolean;
|
|
83
|
+
/** Drop any pending press (a lift, a cancel, or the gesture moving on). */
|
|
84
|
+
cancel: () => void;
|
|
85
|
+
/** Whether a press is in progress (started and not dropped). */
|
|
86
|
+
isPending: () => boolean;
|
|
87
|
+
/** The options the next start, move and fire read. */
|
|
88
|
+
setOptions: (options: LongPressDetectorOptions) => void;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** The part of a window's performance timeline a press reads. */
|
|
92
|
+
type EventClock = Pick<Performance, 'now'>;
|
|
93
|
+
|
|
94
|
+
function clockOf(event: LongPressTouchEvent): EventClock | null {
|
|
95
|
+
const view = event.view as {performance?: EventClock} | null | undefined;
|
|
96
|
+
return (
|
|
97
|
+
view?.performance ??
|
|
98
|
+
(typeof performance === 'undefined' ? null : performance)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* An event's time on its window's clock. jsdom stamps events with
|
|
104
|
+
* `Date.now()`. The detector reads the age of such a stamp on that clock, so a
|
|
105
|
+
* frozen system time keeps the hold's length. A stamp nearer `Date.now()` than
|
|
106
|
+
* the window's clock is that kind of stamp.
|
|
107
|
+
*/
|
|
108
|
+
function timeOn(
|
|
109
|
+
clock: EventClock | null,
|
|
110
|
+
timeStamp: number | undefined,
|
|
111
|
+
): number | undefined {
|
|
112
|
+
// A stamp of 0 means the event carries no time, so the hold falls back to
|
|
113
|
+
// the full delay on the page's timer.
|
|
114
|
+
if (timeStamp == null || !Number.isFinite(timeStamp) || timeStamp <= 0) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
if (
|
|
118
|
+
clock != null &&
|
|
119
|
+
Math.abs(Date.now() - timeStamp) < Math.abs(clock.now() - timeStamp)
|
|
120
|
+
) {
|
|
121
|
+
return clock.now() - (Date.now() - timeStamp);
|
|
122
|
+
}
|
|
123
|
+
return timeStamp;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** @internal A long-press detector with no React (see LongPressDetector). */
|
|
127
|
+
export function createLongPressDetector(
|
|
128
|
+
initial: LongPressDetectorOptions,
|
|
129
|
+
): LongPressDetector {
|
|
130
|
+
let options = initial;
|
|
131
|
+
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
132
|
+
let from: {x: number; y: number} | null = null;
|
|
133
|
+
// Null for a press started by hand. It has no stamp.
|
|
134
|
+
let deadline: number | null = null;
|
|
135
|
+
let clock: EventClock | null = null;
|
|
136
|
+
let pressTolerance: LongPressTolerance | null = null;
|
|
137
|
+
|
|
138
|
+
const cancel = () => {
|
|
139
|
+
if (timer != null) {
|
|
140
|
+
clearTimeout(timer);
|
|
141
|
+
timer = null;
|
|
142
|
+
}
|
|
143
|
+
from = null;
|
|
144
|
+
deadline = null;
|
|
145
|
+
clock = null;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const fire = () => {
|
|
149
|
+
const at = from;
|
|
150
|
+
if (at == null) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
cancel();
|
|
154
|
+
options.onLongPress({x: at.x, y: at.y});
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// A touch stamped at or past the deadline: the finger was down for the
|
|
158
|
+
// whole delay, so the press reports before the touch acts.
|
|
159
|
+
const fireIfDue = (event: LongPressTouchEvent | undefined) => {
|
|
160
|
+
const eventTime =
|
|
161
|
+
event == null ? undefined : timeOn(clock, event.timeStamp);
|
|
162
|
+
if (deadline != null && eventTime != null && eventTime >= deadline) {
|
|
163
|
+
fire();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const begin = (
|
|
168
|
+
point: {x: number; y: number},
|
|
169
|
+
tolerance: LongPressTolerance | undefined,
|
|
170
|
+
started: {at: number; clock: EventClock} | undefined,
|
|
171
|
+
) => {
|
|
172
|
+
if (options.disabled === true) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
cancel();
|
|
176
|
+
const delayMs = options.delayMs ?? DEFAULT_DELAY_MS;
|
|
177
|
+
from = {x: point.x, y: point.y};
|
|
178
|
+
pressTolerance = tolerance ?? null;
|
|
179
|
+
const pressClock = started?.clock ?? null;
|
|
180
|
+
const pressDeadline = started == null ? null : started.at + delayMs;
|
|
181
|
+
clock = pressClock;
|
|
182
|
+
deadline = pressDeadline;
|
|
183
|
+
// Wait only for the rest of the hold. A touch handled late then keeps its
|
|
184
|
+
// length, and the wait never passes the delay.
|
|
185
|
+
const remaining =
|
|
186
|
+
pressClock == null || pressDeadline == null
|
|
187
|
+
? delayMs
|
|
188
|
+
: Math.min(delayMs, Math.max(0, pressDeadline - pressClock.now()));
|
|
189
|
+
// A late timer yields to queued input once, so a lift stamped before the
|
|
190
|
+
// deadline still cancels the press. The gesture arena does the same.
|
|
191
|
+
const run = (mayYield: boolean) => {
|
|
192
|
+
timer = null;
|
|
193
|
+
if (
|
|
194
|
+
mayYield &&
|
|
195
|
+
pressClock != null &&
|
|
196
|
+
pressDeadline != null &&
|
|
197
|
+
pressClock.now() > pressDeadline
|
|
198
|
+
) {
|
|
199
|
+
timer = setTimeout(() => run(false), 0);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
fire();
|
|
203
|
+
};
|
|
204
|
+
timer = setTimeout(() => run(true), remaining);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const moveTo = (point: {x: number; y: number}): boolean => {
|
|
208
|
+
const at = from;
|
|
209
|
+
if (at == null) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
// This press's own tolerance when its caller chose one, on either axis.
|
|
213
|
+
const limit =
|
|
214
|
+
pressTolerance?.moveCancelPx ??
|
|
215
|
+
options.moveCancelPx ??
|
|
216
|
+
DEFAULT_MOVE_CANCEL_PX;
|
|
217
|
+
if (Math.abs(point.x - at.x) > limit || Math.abs(point.y - at.y) > limit) {
|
|
218
|
+
cancel();
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
return {
|
|
225
|
+
start(point, tolerance) {
|
|
226
|
+
begin(point, tolerance, undefined);
|
|
227
|
+
},
|
|
228
|
+
touchStart(event) {
|
|
229
|
+
if (options.disabled === true) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (event.touches.length !== 1) {
|
|
233
|
+
// A second finger ends the press, unless the press was already due.
|
|
234
|
+
fireIfDue(event);
|
|
235
|
+
cancel();
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const touch = event.touches[0];
|
|
239
|
+
const touchClock = clockOf(event);
|
|
240
|
+
const at = timeOn(touchClock, event.timeStamp);
|
|
241
|
+
begin(
|
|
242
|
+
{x: touch.clientX, y: touch.clientY},
|
|
243
|
+
undefined,
|
|
244
|
+
touchClock == null || at == null ? undefined : {at, clock: touchClock},
|
|
245
|
+
);
|
|
246
|
+
},
|
|
247
|
+
touchMove(event) {
|
|
248
|
+
if (from == null) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
fireIfDue(event);
|
|
252
|
+
if (from == null) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (event.touches.length !== 1) {
|
|
256
|
+
cancel();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const touch = event.touches[0];
|
|
260
|
+
moveTo({x: touch.clientX, y: touch.clientY});
|
|
261
|
+
},
|
|
262
|
+
touchEnd(event) {
|
|
263
|
+
fireIfDue(event);
|
|
264
|
+
cancel();
|
|
265
|
+
},
|
|
266
|
+
moveTo,
|
|
267
|
+
cancel,
|
|
268
|
+
isPending: () => from != null,
|
|
269
|
+
setOptions(next) {
|
|
270
|
+
options = next;
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file pressGroupContext.ts
|
|
7
|
+
* @input Nothing
|
|
8
|
+
* @output PressGroupContext: true inside a group whose own tracker paints
|
|
9
|
+
* its actions' press
|
|
10
|
+
* @position Internal; not exported from the hooks entry. AlertDialog
|
|
11
|
+
* provides it around its tracked actions, and Button reads it.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import {createContext} from 'react';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* True inside a group whose tracker paints a pointer's press on its actions.
|
|
18
|
+
* Those actions take no `:active` paint, so one press never lights two.
|
|
19
|
+
*/
|
|
20
|
+
export const PressGroupContext = createContext(false);
|
|
21
|
+
PressGroupContext.displayName = 'PressGroupContext';
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file rootScrollStyles.ts
|
|
7
|
+
* @input The inline styles of the root and `<body>`
|
|
8
|
+
* @output claimRootScrollStyle, which owns the page's `overflow`,
|
|
9
|
+
* `overscroll-behavior-y` and `scrollbar-gutter`; isScrollLockActive and
|
|
10
|
+
* subscribeScrollLock, which report whether a scroll lock holds the page
|
|
11
|
+
* @position Internal hook utility. Each caller that changes how the page
|
|
12
|
+
* scrolls claims these styles here, so no caller overwrites a value that
|
|
13
|
+
* another caller still needs.
|
|
14
|
+
*
|
|
15
|
+
* SYNC: When modified, update:
|
|
16
|
+
* - /packages/core/src/hooks/useScrollLock.ts
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** The root scroll styles a caller can hold. */
|
|
20
|
+
export interface RootScrollStyle {
|
|
21
|
+
/** `hidden` or `clip` stops wheel, keyboard and scrollbar scrolling of the page. */
|
|
22
|
+
overflow?: 'hidden' | 'clip';
|
|
23
|
+
/** `none` turns the page's own bounce off at both vertical edges. */
|
|
24
|
+
overscrollBehaviorY?: 'none' | 'contain';
|
|
25
|
+
/** `stable` keeps a classic scrollbar's space while the page cannot scroll. */
|
|
26
|
+
scrollbarGutter?: 'stable';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type RootScrollProperty = keyof RootScrollStyle;
|
|
30
|
+
|
|
31
|
+
const PROPERTIES: ReadonlyArray<RootScrollProperty> = [
|
|
32
|
+
'overflow',
|
|
33
|
+
'overscrollBehaviorY',
|
|
34
|
+
'scrollbarGutter',
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
interface Claim {
|
|
38
|
+
readonly id: number;
|
|
39
|
+
readonly value: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const claims: Record<RootScrollProperty, Claim[]> = {
|
|
43
|
+
overflow: [],
|
|
44
|
+
overscrollBehaviorY: [],
|
|
45
|
+
scrollbarGutter: [],
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
type SavedStyle =
|
|
49
|
+
| 'overflow'
|
|
50
|
+
| 'overflowX'
|
|
51
|
+
| 'overflowY'
|
|
52
|
+
| 'overscrollBehaviorY'
|
|
53
|
+
| 'scrollbarGutter';
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The inline styles saved for each property, so a page's own value comes back
|
|
57
|
+
* exactly, including a one-axis `overflow-x` or `overflow-y`.
|
|
58
|
+
*/
|
|
59
|
+
const SAVED: Record<RootScrollProperty, ReadonlyArray<SavedStyle>> = {
|
|
60
|
+
overflow: ['overflow', 'overflowX', 'overflowY'],
|
|
61
|
+
overscrollBehaviorY: ['overscrollBehaviorY'],
|
|
62
|
+
scrollbarGutter: ['scrollbarGutter'],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* An element that holds a property's claims. It keeps the page's own inline
|
|
67
|
+
* values, saved at the first claim, and the value that the claims last wrote.
|
|
68
|
+
*/
|
|
69
|
+
interface HeldTarget {
|
|
70
|
+
readonly element: HTMLElement;
|
|
71
|
+
readonly pageValues: Partial<Record<SavedStyle, string>>;
|
|
72
|
+
written: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const held = new Map<RootScrollProperty, HeldTarget[]>();
|
|
76
|
+
|
|
77
|
+
let nextClaimId = 0;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The element whose `overflow` the viewport uses. That is the root, unless the
|
|
81
|
+
* root's own is `visible` and `<body>` sets one, which then propagates to the
|
|
82
|
+
* viewport. A write to the root in that case stops the propagation. Then
|
|
83
|
+
* `<body>` becomes its own scroller at offset 0, and the page jumps to its top.
|
|
84
|
+
*/
|
|
85
|
+
function overflowTarget(doc: Document): HTMLElement {
|
|
86
|
+
const root = doc.documentElement;
|
|
87
|
+
const {body} = doc;
|
|
88
|
+
const view = doc.defaultView;
|
|
89
|
+
if (body == null || view == null) {
|
|
90
|
+
return root;
|
|
91
|
+
}
|
|
92
|
+
const isVisible = (element: Element) => {
|
|
93
|
+
const style = view.getComputedStyle(element);
|
|
94
|
+
return (
|
|
95
|
+
(style.overflowX || 'visible') === 'visible' &&
|
|
96
|
+
(style.overflowY || 'visible') === 'visible'
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
return isVisible(root) && !isVisible(body) ? body : root;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Where a property's claims go. `overflow` goes to the element that the
|
|
104
|
+
* viewport takes it from. `overscroll-behavior-y` goes to the root and to
|
|
105
|
+
* `<body>`, because Chrome on Android reads `<body>`'s value for its
|
|
106
|
+
* pull-to-refresh. `scrollbar-gutter` goes to the root.
|
|
107
|
+
*/
|
|
108
|
+
function claimTargets(
|
|
109
|
+
property: RootScrollProperty,
|
|
110
|
+
doc: Document,
|
|
111
|
+
): HTMLElement[] {
|
|
112
|
+
if (property === 'overflow') {
|
|
113
|
+
return [overflowTarget(doc)];
|
|
114
|
+
}
|
|
115
|
+
if (property === 'scrollbarGutter') {
|
|
116
|
+
return [doc.documentElement];
|
|
117
|
+
}
|
|
118
|
+
return doc.body == null
|
|
119
|
+
? [doc.documentElement]
|
|
120
|
+
: [doc.documentElement, doc.body];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function applyTopClaim(property: RootScrollProperty): void {
|
|
124
|
+
const targets = held.get(property);
|
|
125
|
+
if (targets == null) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const stack = claims[property];
|
|
129
|
+
const top = stack[stack.length - 1];
|
|
130
|
+
for (const target of targets) {
|
|
131
|
+
const {style} = target.element;
|
|
132
|
+
if (top != null) {
|
|
133
|
+
style[property] = top.value;
|
|
134
|
+
target.written = top.value;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// The last claim is gone, so the page gets its own values back. A value
|
|
138
|
+
// that an outside writer set meanwhile stays.
|
|
139
|
+
if (style[property] === target.written) {
|
|
140
|
+
style[property] = '';
|
|
141
|
+
for (const name of SAVED[property]) {
|
|
142
|
+
const value = target.pageValues[name];
|
|
143
|
+
if (value) {
|
|
144
|
+
style[name] = value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (top == null) {
|
|
150
|
+
held.delete(property);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Sets the page's `overflow`, `overscroll-behavior-y` or `scrollbar-gutter`
|
|
156
|
+
* until the returned release runs. Claims stack per property: the latest claim
|
|
157
|
+
* wins, and a release in any order restores the claim beneath it. The page's
|
|
158
|
+
* own inline value comes back after the last release, unless an outside writer
|
|
159
|
+
* changed that style meanwhile. A second release does nothing.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```
|
|
163
|
+
* const release = claimRootScrollStyle({overflow: 'hidden'});
|
|
164
|
+
* // later
|
|
165
|
+
* release();
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export function claimRootScrollStyle(claim: RootScrollStyle): () => void {
|
|
169
|
+
if (typeof document === 'undefined') {
|
|
170
|
+
return () => {};
|
|
171
|
+
}
|
|
172
|
+
nextClaimId += 1;
|
|
173
|
+
const id = nextClaimId;
|
|
174
|
+
const claimed: RootScrollProperty[] = [];
|
|
175
|
+
for (const property of PROPERTIES) {
|
|
176
|
+
const value = claim[property];
|
|
177
|
+
if (value == null) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (claims[property].length === 0) {
|
|
181
|
+
held.set(
|
|
182
|
+
property,
|
|
183
|
+
claimTargets(property, document).map(element => {
|
|
184
|
+
const pageValues: Partial<Record<SavedStyle, string>> = {};
|
|
185
|
+
for (const name of SAVED[property]) {
|
|
186
|
+
pageValues[name] = element.style[name];
|
|
187
|
+
}
|
|
188
|
+
return {element, pageValues, written: ''};
|
|
189
|
+
}),
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
claims[property].push({id, value});
|
|
193
|
+
claimed.push(property);
|
|
194
|
+
applyTopClaim(property);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let released = false;
|
|
198
|
+
return () => {
|
|
199
|
+
if (released) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
released = true;
|
|
203
|
+
for (const property of claimed) {
|
|
204
|
+
const stack = claims[property];
|
|
205
|
+
const index = stack.findIndex(entry => entry.id === id);
|
|
206
|
+
if (index !== -1) {
|
|
207
|
+
stack.splice(index, 1);
|
|
208
|
+
}
|
|
209
|
+
applyTopClaim(property);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
let lockCount = 0;
|
|
215
|
+
const lockListeners = new Set<(isActive: boolean) => void>();
|
|
216
|
+
|
|
217
|
+
/** Whether a scroll lock (useScrollLock) currently holds the page. */
|
|
218
|
+
export function isScrollLockActive(): boolean {
|
|
219
|
+
return lockCount > 0;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Calls `listener` with the new state each time the page becomes locked or
|
|
224
|
+
* free. A second lock while one holds is no change. Returns the unsubscribe
|
|
225
|
+
* function.
|
|
226
|
+
*/
|
|
227
|
+
export function subscribeScrollLock(
|
|
228
|
+
listener: (isActive: boolean) => void,
|
|
229
|
+
): () => void {
|
|
230
|
+
lockListeners.add(listener);
|
|
231
|
+
return () => {
|
|
232
|
+
lockListeners.delete(listener);
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** For scroll locks: one lock taken (`1`) or released (`-1`). */
|
|
237
|
+
export function reportScrollLock(delta: 1 | -1): void {
|
|
238
|
+
const wasActive = lockCount > 0;
|
|
239
|
+
lockCount = Math.max(0, lockCount + delta);
|
|
240
|
+
const isActive = lockCount > 0;
|
|
241
|
+
if (isActive === wasActive) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
for (const listener of [...lockListeners]) {
|
|
245
|
+
listener(isActive);
|
|
246
|
+
}
|
|
247
|
+
}
|