@astryxdesign/core 0.7.7-canary.550ff21 → 0.7.7-canary.58c5b8a
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 +36 -6
- package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts +13 -0
- package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts.map +1 -0
- package/dist/AppShell/useCloseMobileDrawerOnActivate.js +45 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +1 -1
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +79 -9
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +23 -4
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetStack.js +5 -4
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +3 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +2 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +9 -4
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +50 -5
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +7 -1
- package/dist/CheckboxList/CheckboxListContext.d.ts +6 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +10 -2
- 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/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +5 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +13 -27
- package/dist/DateInput/Wheel.d.ts +17 -1
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +161 -20
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +63 -49
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +5 -2
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +53 -15
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +15 -11
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +9 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +20 -4
- package/dist/Field/Field.js +2 -2
- package/dist/Field/PanelSearchInput.d.ts +9 -1
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +3 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +27 -2
- 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/InfoTip/InfoTip.d.ts +63 -0
- package/dist/InfoTip/InfoTip.d.ts.map +1 -0
- package/dist/InfoTip/InfoTip.js +126 -0
- package/dist/InfoTip/index.d.ts +10 -0
- package/dist/InfoTip/index.d.ts.map +1 -0
- package/dist/InfoTip/index.js +12 -0
- package/dist/Layer/layerAnimations.stylex.d.ts +7 -8
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +25 -20
- package/dist/Layer/layerClickBoundary.d.ts +7 -1
- package/dist/Layer/layerClickBoundary.d.ts.map +1 -1
- package/dist/Layer/layerClickBoundary.js +2 -2
- package/dist/Layer/useBackdropPress.d.ts +27 -0
- package/dist/Layer/useBackdropPress.d.ts.map +1 -0
- package/dist/Layer/useBackdropPress.js +53 -0
- package/dist/Layer/usePressPin.d.ts +105 -0
- package/dist/Layer/usePressPin.d.ts.map +1 -0
- package/dist/Layer/usePressPin.js +413 -0
- package/dist/Layer/useTouchTrigger.d.ts +23 -1
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +45 -7
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +2 -1
- package/dist/MobileNav/MobileNav.js +0 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +2 -4
- package/dist/Outline/Outline.d.ts +2 -4
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +4 -52
- package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromMarkdown.js +1 -0
- package/dist/Outline/useScrollSpy.js +3 -3
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +56 -7
- package/dist/PowerSearch/PowerSearch.d.ts +36 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +571 -302
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +100 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.js +1913 -0
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +32 -1
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +17 -6
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +170 -61
- package/dist/PowerSearch/formatFilterValue.d.ts +7 -0
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +11 -1
- package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
- package/dist/PowerSearch/formatTokenValue.js +160 -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/ProgressBar/ProgressBar.d.ts +1 -1
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +33 -6
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +8 -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.map +1 -1
- package/dist/Resizable/ResizeHandle.js +118 -260
- package/dist/Resizable/resizeGesture.d.ts +91 -0
- package/dist/Resizable/resizeGesture.d.ts.map +1 -0
- package/dist/Resizable/resizeGesture.js +251 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +3 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +115 -8
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +6 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -0
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +10 -2
- package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts +357 -0
- package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -0
- package/dist/SegmentedControl/useSegmentedSelectionMotion.js +1349 -0
- package/dist/SegmentedControl/useSegmentedTouchTracking.d.ts +70 -0
- package/dist/SegmentedControl/useSegmentedTouchTracking.d.ts.map +1 -0
- package/dist/SegmentedControl/useSegmentedTouchTracking.js +264 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +96 -67
- package/dist/Selector/optionShape.d.ts +24 -0
- package/dist/Selector/optionShape.d.ts.map +1 -0
- package/dist/Selector/optionShape.js +48 -0
- package/dist/Selector/selectableOptionEntries.d.ts +20 -0
- package/dist/Selector/selectableOptionEntries.d.ts.map +1 -0
- package/dist/Selector/selectableOptionEntries.js +38 -0
- package/dist/Selector/utils.d.ts +2 -17
- package/dist/Selector/utils.d.ts.map +1 -1
- package/dist/Selector/utils.js +3 -51
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +3 -9
- package/dist/Slider/sliderTouchController.js +2 -2
- package/dist/Switch/Switch.d.ts +1 -1
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +200 -46
- package/dist/Switch/switchFill.d.ts +31 -0
- package/dist/Switch/switchFill.d.ts.map +1 -0
- package/dist/Switch/switchFill.js +88 -0
- package/dist/Switch/switchTouch.d.ts +74 -0
- package/dist/Switch/switchTouch.d.ts.map +1 -0
- package/dist/Switch/switchTouch.js +125 -0
- package/dist/Switch/useSwitchTouch.d.ts +276 -0
- package/dist/Switch/useSwitchTouch.d.ts.map +1 -0
- package/dist/Switch/useSwitchTouch.js +939 -0
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +4 -3
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +29 -8
- 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/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +5 -0
- package/dist/Token/Token.d.ts +2 -2
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +13 -4
- package/dist/Token/TokenNamingContext.d.ts +14 -0
- package/dist/Token/TokenNamingContext.d.ts.map +1 -0
- package/dist/Token/TokenNamingContext.js +23 -0
- package/dist/Tokenizer/Tokenizer.d.ts +46 -59
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +44 -60
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +25 -28
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +157 -54
- package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts +3 -0
- package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerItemRemovableContext.js +19 -0
- package/dist/Tooltip/Tooltip.d.ts +24 -5
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.js +29 -5
- package/dist/Tooltip/useTooltip.d.ts +48 -5
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +90 -20
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +4 -7
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +4 -7
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +4 -7
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +26 -15
- 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 +142 -7
- package/dist/gestures/GestureHost.d.ts +27 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +161 -22
- package/dist/gestures/PressTracker.d.ts +6 -0
- package/dist/gestures/PressTracker.d.ts.map +1 -1
- package/dist/gestures/PressTracker.js +3 -0
- package/dist/gestures/types.d.ts +6 -0
- package/dist/gestures/types.d.ts.map +1 -1
- package/dist/gestures/usePressTracker.d.ts.map +1 -1
- package/dist/gestures/usePressTracker.js +1 -0
- package/dist/gestures/wheelSegmenter.d.ts +14 -3
- package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
- package/dist/gestures/wheelSegmenter.js +32 -8
- package/dist/hooks/actionGroupTracker.d.ts +7 -4
- package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
- package/dist/hooks/actionGroupTracker.js +19 -56
- 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/pressGroupContext.d.ts +6 -0
- package/dist/hooks/pressGroupContext.d.ts.map +1 -0
- package/dist/hooks/pressGroupContext.js +20 -0
- 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/useAttachment.d.ts +16 -8
- package/dist/hooks/useAttachment.d.ts.map +1 -1
- package/dist/hooks/useAttachment.js +35 -15
- package/dist/hooks/useFocusTrap.d.ts +15 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +13 -2
- package/dist/hooks/useHighlightedOptionScroll.d.ts +11 -1
- package/dist/hooks/useHighlightedOptionScroll.d.ts.map +1 -1
- package/dist/hooks/useHighlightedOptionScroll.js +112 -11
- 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/useMediaQuery.d.ts +2 -1
- package/dist/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.js +7 -4
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +4 -2
- package/dist/hooks/usePager.d.ts +261 -0
- package/dist/hooks/usePager.d.ts.map +1 -0
- package/dist/hooks/usePager.js +1169 -0
- package/dist/i18n/generated-english/InfoTip/InfoTip.generated.d.ts +8 -0
- package/dist/i18n/generated-english/InfoTip/InfoTip.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/InfoTip/InfoTip.generated.js +12 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.js +1 -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-english/Tokenizer/TokenizerBottomSheet.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.js +7 -1
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +33 -1
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +33 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/internal/SheetConfirmation.d.ts +11 -0
- package/dist/internal/SheetConfirmation.d.ts.map +1 -0
- package/dist/internal/SheetConfirmation.js +92 -0
- package/dist/internal/sheetDraft.d.ts +35 -0
- package/dist/internal/sheetDraft.d.ts.map +1 -0
- package/dist/internal/sheetDraft.js +65 -0
- package/dist/internal/touch-sheet.d.ts +21 -0
- package/dist/internal/touch-sheet.d.ts.map +1 -0
- package/dist/internal/touch-sheet.js +19 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts +24 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts.map +1 -0
- package/dist/internal/useDismissSearchOnTouchDrag.js +56 -0
- package/dist/motion/animator.d.ts +14 -14
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +41 -18
- package/dist/motion/paging.d.ts +16 -5
- package/dist/motion/paging.d.ts.map +1 -1
- package/dist/motion/paging.js +34 -14
- package/dist/motion/reducedMotion.d.ts +24 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +78 -1
- package/dist/motion/roles.d.ts +7 -1
- package/dist/motion/roles.d.ts.map +1 -1
- package/dist/motion/roles.js +20 -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 +7 -4
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +7 -4
- package/dist/motion/uikit/paging.d.ts +31 -20
- package/dist/motion/uikit/paging.d.ts.map +1 -1
- package/dist/motion/uikit/paging.js +41 -11
- package/dist/motion/uikit/progressBar.d.ts +27 -7
- package/dist/motion/uikit/progressBar.d.ts.map +1 -1
- package/dist/motion/uikit/progressBar.js +31 -11
- package/dist/motion/uikit/segmented.d.ts +55 -0
- package/dist/motion/uikit/segmented.d.ts.map +1 -0
- package/dist/motion/uikit/segmented.js +77 -0
- package/dist/motion/uikit/springs.d.ts +8 -42
- package/dist/motion/uikit/springs.d.ts.map +1 -1
- package/dist/motion/uikit/springs.js +12 -42
- package/dist/motion/uikit/switch.d.ts +166 -0
- package/dist/motion/uikit/switch.d.ts.map +1 -0
- package/dist/motion/uikit/switch.js +186 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts +15 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/pressGroupItem.stylex.js +23 -0
- package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts +18 -0
- package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/pressHoldsDrag.stylex.js +28 -0
- package/dist/privateAttributes/segmentTitle.stylex.d.ts +5 -0
- package/dist/privateAttributes/segmentTitle.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/segmentTitle.stylex.js +22 -0
- package/dist/utils/browserClickWait.d.ts +35 -0
- package/dist/utils/browserClickWait.d.ts.map +1 -0
- package/dist/utils/browserClickWait.js +123 -0
- package/dist/utils/clickGuard.d.ts +14 -1
- package/dist/utils/clickGuard.d.ts.map +1 -1
- package/dist/utils/clickGuard.js +46 -1
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +12 -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/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +24 -6
- package/locales/en.json +128 -0
- package/locales/pseudo.json +96 -0
- package/package.json +13 -8
- package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
- package/src/AlertDialog/AlertDialog.tsx +37 -5
- package/src/AppShell/useCloseMobileDrawerOnActivate.ts +52 -0
- package/src/Avatar/Avatar.tsx +3 -1
- package/src/BottomSheet/BottomSheet.tsx +95 -10
- package/src/BottomSheet/BottomSheetPanel.tsx +40 -5
- package/src/BottomSheet/bottomSheetStack.ts +8 -4
- package/src/BottomSheet/useSheetGestures.ts +3 -1
- package/src/Breadcrumbs/BreadcrumbItem.tsx +17 -4
- package/src/Button/Button.tsx +66 -7
- package/src/CheckboxList/CheckboxList.doc.mjs +4 -2
- package/src/CheckboxList/CheckboxList.tsx +6 -0
- package/src/CheckboxList/CheckboxListContext.tsx +6 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/ComplexSelector/ComplexSelector.tsx +20 -5
- package/src/DateInput/DateInput.tsx +8 -2
- package/src/DateInput/MonthScroller.tsx +18 -22
- package/src/DateInput/Wheel.tsx +172 -14
- package/src/DateRangeInput/DateRangeInput.doc.mjs +3 -2
- package/src/DateRangeInput/DateRangeInput.tsx +117 -71
- package/src/DateTimeInput/DateTimeInput.tsx +8 -2
- package/src/Dialog/Dialog.tsx +81 -15
- package/src/Drawer/Drawer.tsx +28 -11
- package/src/Drawer/useDrawerDialogPresence.ts +9 -1
- package/src/DropdownMenu/DropdownMenu.tsx +28 -6
- package/src/Field/Field.tsx +2 -2
- package/src/Field/PanelSearchInput.tsx +11 -0
- package/src/HoverCard/HoverCard.tsx +31 -1
- package/src/Icon/Icon.doc.mjs +49 -8
- package/src/Icon/Icon.tsx +15 -7
- package/src/InfoTip/InfoTip.doc.mjs +192 -0
- package/src/InfoTip/InfoTip.tsx +186 -0
- package/src/InfoTip/index.ts +14 -0
- package/src/Layer/layerAnimations.stylex.ts +24 -16
- package/src/Layer/layerClickBoundary.ts +2 -2
- package/src/Layer/useBackdropPress.ts +81 -0
- package/src/Layer/usePressPin.ts +576 -0
- package/src/Layer/useTouchTrigger.ts +56 -6
- package/src/Lightbox/Lightbox.tsx +2 -1
- package/src/MobileNav/MobileNav.tsx +1 -1
- package/src/MultiSelector/hooks.ts +2 -4
- package/src/Outline/Outline.doc.mjs +177 -51
- package/src/Outline/Outline.tsx +5 -57
- package/src/Outline/useOutlineFromMarkdown.doc.mjs +157 -0
- package/src/Outline/useOutlineFromMarkdown.ts +1 -0
- package/src/Outline/useScrollSpy.ts +3 -3
- package/src/Popover/usePopover.tsx +71 -9
- package/src/PowerSearch/PowerSearch.doc.mjs +55 -6
- package/src/PowerSearch/PowerSearch.tsx +798 -324
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +2515 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +28 -6
- package/src/PowerSearch/PowerSearchValueEditor.tsx +203 -38
- package/src/PowerSearch/formatFilterValue.ts +18 -1
- package/src/PowerSearch/formatTokenValue.ts +215 -0
- package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +4 -2
- package/src/ProgressBar/ProgressBar.tsx +67 -7
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioList.tsx +7 -2
- package/src/RadioList/RadioListItem.tsx +5 -3
- package/src/Resizable/ResizeHandle.tsx +133 -328
- package/src/Resizable/resizeGesture.ts +368 -0
- package/src/SegmentedControl/SegmentedControl.doc.mjs +3 -3
- package/src/SegmentedControl/SegmentedControl.tsx +179 -5
- package/src/SegmentedControl/SegmentedControlContext.ts +6 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +14 -2
- package/src/SegmentedControl/useSegmentedSelectionMotion.ts +1640 -0
- package/src/SegmentedControl/useSegmentedTouchTracking.ts +308 -0
- package/src/Selector/Selector.tsx +136 -89
- package/src/Selector/optionShape.ts +64 -0
- package/src/Selector/selectableOptionEntries.ts +39 -0
- package/src/Selector/utils.ts +9 -68
- package/src/SideNav/SideNavItem.tsx +3 -7
- package/src/Slider/sliderTouchController.ts +2 -2
- package/src/Switch/Switch.doc.mjs +3 -3
- package/src/Switch/Switch.tsx +412 -86
- package/src/Switch/switchFill.ts +106 -0
- package/src/Switch/switchTouch.ts +186 -0
- package/src/Switch/useSwitchTouch.ts +1051 -0
- package/src/TabList/Tab.tsx +5 -3
- package/src/Table/BaseTable.tsx +46 -12
- package/src/TextInput/TextInput.tsx +11 -10
- package/src/Toast/Toast.tsx +5 -0
- package/src/Token/Token.tsx +15 -4
- package/src/Token/TokenNamingContext.ts +28 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -0
- package/src/Tokenizer/Tokenizer.tsx +93 -88
- package/src/Tokenizer/TokenizerBottomSheet.tsx +219 -93
- package/src/Tokenizer/TokenizerItemRemovableContext.ts +24 -0
- package/src/Tooltip/Tooltip.doc.mjs +123 -39
- package/src/Tooltip/Tooltip.tsx +43 -9
- package/src/Tooltip/useTooltip.doc.mjs +171 -31
- package/src/Tooltip/useTooltip.tsx +137 -22
- package/src/TopNav/TopNavItem.tsx +6 -5
- package/src/TopNav/TopNavMegaMenuItem.tsx +6 -5
- package/src/TopNav/TopNavMenu.tsx +6 -5
- package/src/Typeahead/Typeahead.tsx +29 -15
- package/src/animator/createAnimator.doc.mjs +153 -0
- package/src/animator/createAnimator.ts +324 -0
- package/src/gestures/GestureHost.ts +205 -21
- package/src/gestures/PressTracker.ts +10 -0
- package/src/gestures/types.ts +6 -0
- package/src/gestures/usePressTracker.ts +2 -0
- package/src/gestures/wheelSegmenter.ts +36 -7
- package/src/hooks/actionGroupTracker.ts +32 -61
- package/src/hooks/index.ts +2 -0
- package/src/hooks/pressGroupContext.ts +21 -0
- 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/useAttachment.ts +56 -14
- package/src/hooks/useFocusTrap.ts +26 -2
- package/src/hooks/useHighlightedOptionScroll.ts +123 -15
- package/src/hooks/useInputStatusIcon.tsx +3 -2
- package/src/hooks/useMediaQuery.doc.mjs +2 -2
- package/src/hooks/useMediaQuery.ts +13 -4
- package/src/hooks/useMenuPress.ts +8 -2
- package/src/hooks/usePager.ts +1446 -0
- package/src/i18n/generated-english/InfoTip/InfoTip.generated.ts +13 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearch.generated.ts +1 -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-english/Tokenizer/TokenizerBottomSheet.generated.ts +7 -1
- package/src/i18n/generated-locales/en.generated.ts +43 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +44 -0
- package/src/index.ts +14 -0
- package/src/internal/SheetConfirmation.tsx +101 -0
- package/src/internal/sheetDraft.ts +80 -0
- package/src/internal/touch-sheet.ts +21 -0
- package/src/internal/useDismissSearchOnTouchDrag.ts +69 -0
- package/src/motion/MEASUREMENTS.md +36 -27
- package/src/motion/README.md +11 -6
- package/src/motion/animator.ts +61 -29
- package/src/motion/paging.ts +37 -14
- package/src/motion/reducedMotion.ts +79 -1
- package/src/motion/roles.ts +20 -1
- package/src/motion/uikit/alert.ts +43 -0
- package/src/motion/uikit/index.ts +6 -5
- package/src/motion/uikit/paging.ts +41 -10
- package/src/motion/uikit/progressBar.ts +31 -11
- package/src/motion/uikit/segmented.ts +74 -0
- package/src/motion/uikit/springs.ts +12 -42
- package/src/motion/uikit/switch.ts +174 -0
- package/src/privateAttributes/pressGroupItem.stylex.ts +23 -0
- package/src/privateAttributes/pressHoldsDrag.stylex.ts +28 -0
- package/src/privateAttributes/segmentTitle.stylex.ts +22 -0
- package/src/utils/browserClickWait.ts +133 -0
- package/src/utils/clickGuard.ts +64 -1
- package/src/utils/dateParser.ts +16 -0
- package/src/utils/interactionOverlay.stylex.ts +3 -2
- package/src/utils/pressFeedback.ts +24 -6
- package/dist/internal/tokenizer-presentation.d.ts +0 -21
- package/dist/internal/tokenizer-presentation.d.ts.map +0 -1
- package/dist/internal/tokenizer-presentation.js +0 -21
- package/src/internal/tokenizer-presentation.ts +0 -25
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file useDismissSearchOnTouchDrag.ts
|
|
3
|
+
* @input Caller-owned search inputs, a focus target, and touch events from a
|
|
4
|
+
* separate results list
|
|
5
|
+
* @output useDismissSearchOnTouchDrag — touch handlers for the results list
|
|
6
|
+
* @position Core-internal, shared by the touch sheets; not a public export
|
|
7
|
+
*
|
|
8
|
+
* A direct vertical touch drag on the results moves focus off a focused
|
|
9
|
+
* search input. The on-screen keyboard then leaves and the rows come into
|
|
10
|
+
* view; the query stays. Focus goes to the caller's target (the sheet's
|
|
11
|
+
* panel), never to the page body behind an open modal. Scroll events are not
|
|
12
|
+
* observed: filtering can clamp scrollTop and fire scroll while someone is
|
|
13
|
+
* typing. Small moves, taps and multi-touch gestures leave focus alone.
|
|
14
|
+
*/
|
|
15
|
+
import { type TouchEvent } from 'react';
|
|
16
|
+
type SearchInput = HTMLInputElement | null | undefined;
|
|
17
|
+
export declare function useDismissSearchOnTouchDrag(getSearchInputs: () => ReadonlyArray<SearchInput>, getFocusTarget?: () => HTMLElement | null | undefined): {
|
|
18
|
+
onTouchStart: (event: TouchEvent<HTMLElement>) => void;
|
|
19
|
+
onTouchMove: (event: TouchEvent<HTMLElement>) => void;
|
|
20
|
+
onTouchEnd: () => void;
|
|
21
|
+
onTouchCancel: () => void;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=useDismissSearchOnTouchDrag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDismissSearchOnTouchDrag.d.ts","sourceRoot":"","sources":["../../src/internal/useDismissSearchOnTouchDrag.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAS,KAAK,UAAU,EAAC,MAAM,OAAO,CAAC;AAI9C,KAAK,WAAW,GAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvD,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,MAAM,aAAa,CAAC,WAAW,CAAC,EACjD,cAAc,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS;0BAQ7B,UAAU,CAAC,WAAW,CAAC;yBAIxB,UAAU,CAAC,WAAW,CAAC;;;EA6B/C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useDismissSearchOnTouchDrag.ts
|
|
7
|
+
* @input Caller-owned search inputs, a focus target, and touch events from a
|
|
8
|
+
* separate results list
|
|
9
|
+
* @output useDismissSearchOnTouchDrag — touch handlers for the results list
|
|
10
|
+
* @position Core-internal, shared by the touch sheets; not a public export
|
|
11
|
+
*
|
|
12
|
+
* A direct vertical touch drag on the results moves focus off a focused
|
|
13
|
+
* search input. The on-screen keyboard then leaves and the rows come into
|
|
14
|
+
* view; the query stays. Focus goes to the caller's target (the sheet's
|
|
15
|
+
* panel), never to the page body behind an open modal. Scroll events are not
|
|
16
|
+
* observed: filtering can clamp scrollTop and fire scroll while someone is
|
|
17
|
+
* typing. Small moves, taps and multi-touch gestures leave focus alone.
|
|
18
|
+
*/
|
|
19
|
+
import { useRef } from 'react';
|
|
20
|
+
const DRAG_THRESHOLD_PX = 8;
|
|
21
|
+
export function useDismissSearchOnTouchDrag(getSearchInputs, getFocusTarget) {
|
|
22
|
+
const startYRef = useRef(null);
|
|
23
|
+
const reset = () => {
|
|
24
|
+
startYRef.current = null;
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
onTouchStart: event => {
|
|
28
|
+
startYRef.current = event.touches.length === 1 ? event.touches[0].clientY : null;
|
|
29
|
+
},
|
|
30
|
+
onTouchMove: event => {
|
|
31
|
+
if (event.touches.length !== 1) {
|
|
32
|
+
reset();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const startY = startYRef.current;
|
|
36
|
+
if (startY == null || Math.abs(event.touches[0].clientY - startY) < DRAG_THRESHOLD_PX) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
reset();
|
|
40
|
+
const focusedSearch = getSearchInputs().find(input => input != null && input === document.activeElement);
|
|
41
|
+
if (focusedSearch == null) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const target = getFocusTarget?.();
|
|
45
|
+
if (target != null) {
|
|
46
|
+
target.focus({
|
|
47
|
+
preventScroll: true
|
|
48
|
+
});
|
|
49
|
+
} else {
|
|
50
|
+
focusedSearch.blur();
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
onTouchEnd: reset,
|
|
54
|
+
onTouchCancel: reset
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -50,18 +50,18 @@ export interface AnimateOptions {
|
|
|
50
50
|
crossfadeAs?: 'entrance' | 'exit';
|
|
51
51
|
/**
|
|
52
52
|
* When the call's animations start. By default a call from rest starts
|
|
53
|
-
* when the browser commits it
|
|
54
|
-
*
|
|
53
|
+
* when the browser commits it. A call that continues motion on screen (a
|
|
54
|
+
* retarget) starts now, from the value on screen. A curve whose tail
|
|
55
|
+
* already shows as at rest counts as rest. Ignored with `at`.
|
|
55
56
|
* - `'commit'`: a call that continues motion also starts when the browser
|
|
56
|
-
* commits it
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* continues motion on screen (a retarget) starts now, as by default.
|
|
57
|
+
* commits it. The browser dates it, as it dates a call from rest.
|
|
58
|
+
* - `'presented'`: a call from rest leaves its element at rest. Its
|
|
59
|
+
* animations are created two frames later, once the frame with the
|
|
60
|
+
* element at rest has been presented. They then start at their commit,
|
|
61
|
+
* so a busy UI process delays the motion instead of skipping into it.
|
|
62
|
+
* Any other change to the animator before then creates the animations
|
|
63
|
+
* first, in call order. A call that continues motion on screen starts
|
|
64
|
+
* now, as by default.
|
|
65
65
|
*/
|
|
66
66
|
start?: 'commit' | 'presented';
|
|
67
67
|
/**
|
|
@@ -101,7 +101,7 @@ export interface MotionCurve {
|
|
|
101
101
|
readonly isTransition?: boolean;
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
|
-
* Options of `
|
|
104
|
+
* Options of `createMotionAnimator`.
|
|
105
105
|
*/
|
|
106
106
|
/** How `set` puts values in place. */
|
|
107
107
|
export interface SetOptions {
|
|
@@ -302,7 +302,7 @@ export declare function defaultIsCoarsePointer(): boolean;
|
|
|
302
302
|
*
|
|
303
303
|
* @example
|
|
304
304
|
* ```
|
|
305
|
-
* const animator =
|
|
305
|
+
* const animator = createMotionAnimator(sheet);
|
|
306
306
|
* // finger lifts at 1200 px/s heading for the detent at 0 (a component
|
|
307
307
|
* // passes the spring of its motion role):
|
|
308
308
|
* animator.animate({y: 0}, {spring: {response: 0.45, dampingRatio: 0.9}, velocity: {y: 1200}});
|
|
@@ -311,5 +311,5 @@ export declare function defaultIsCoarsePointer(): boolean;
|
|
|
311
311
|
* animator.stop(['y']);
|
|
312
312
|
* ```
|
|
313
313
|
*/
|
|
314
|
-
export declare function
|
|
314
|
+
export declare function createMotionAnimator(element: HTMLElement | null, options?: AnimatorOptions): Animator;
|
|
315
315
|
//# sourceMappingURL=animator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../../src/motion/animator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../../src/motion/animator.ts"],"names":[],"mappings":"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"}
|
package/dist/motion/animator.js
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* @file animator.ts
|
|
5
5
|
* @input An element, target values, and a spring, momentum curves (coast.ts)
|
|
6
6
|
* or any closed-form curve
|
|
7
|
-
* @output Exports `
|
|
8
|
-
* rotate, scale and opacity,
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* @output Exports `createMotionAnimator`, a compositor animator for
|
|
8
|
+
* translate, rotate, scale and opacity, and its option, handle and
|
|
9
|
+
* transition types. It reads presentation values and velocities from the
|
|
10
|
+
* analytic curves. It retargets with the velocity kept, freezes in place on
|
|
11
|
+
* `stop`, and gives completion promises, a shared clock, and UIKit's
|
|
12
|
+
* Reduced Motion substitution.
|
|
12
13
|
* @position Motion foundation (DOM). Internal to core: components use it for
|
|
13
14
|
* every touch-presentation animation; not exported from the package entry
|
|
14
15
|
*
|
|
@@ -212,7 +213,7 @@ import { planReducedMotion } from "./reducedMotionPlan.js";
|
|
|
212
213
|
*/
|
|
213
214
|
|
|
214
215
|
/**
|
|
215
|
-
* Options of `
|
|
216
|
+
* Options of `createMotionAnimator`.
|
|
216
217
|
*/
|
|
217
218
|
/** How `set` puts values in place. */
|
|
218
219
|
|
|
@@ -292,6 +293,18 @@ const SAMPLE_TOLERANCE = {
|
|
|
292
293
|
/** Keyframes start on this grid (ms) and are split where the curve needs it. */
|
|
293
294
|
const SAMPLE_GRID_MS = 1000 / 30;
|
|
294
295
|
|
|
296
|
+
/**
|
|
297
|
+
* A curve within this many sample tolerances of its target can show as at
|
|
298
|
+
* rest. A call on it then starts as one from rest does, at the browser's start.
|
|
299
|
+
*/
|
|
300
|
+
const REST_DISTANCE_TOLERANCES = 2;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* A curve shows as at rest only while it moves at most one `SAMPLE_TOLERANCE`
|
|
304
|
+
* a frame at this rate.
|
|
305
|
+
*/
|
|
306
|
+
const REST_FRAMES_PER_SECOND = 60;
|
|
307
|
+
|
|
295
308
|
/** A curve that has not settled by then (an undamped spring) snaps. */
|
|
296
309
|
const MAX_DURATION_MS = 30_000;
|
|
297
310
|
|
|
@@ -420,7 +433,7 @@ export function animatorFor(element, options = {}) {
|
|
|
420
433
|
const key = options.pseudoElement ?? '';
|
|
421
434
|
let animator = byPseudo.get(key);
|
|
422
435
|
if (animator == null) {
|
|
423
|
-
animator =
|
|
436
|
+
animator = createMotionAnimator(element, options);
|
|
424
437
|
byPseudo.set(key, animator);
|
|
425
438
|
}
|
|
426
439
|
return animator;
|
|
@@ -524,7 +537,7 @@ const REDUCED_TRANSITION = {
|
|
|
524
537
|
*
|
|
525
538
|
* @example
|
|
526
539
|
* ```
|
|
527
|
-
* const animator =
|
|
540
|
+
* const animator = createMotionAnimator(sheet);
|
|
528
541
|
* // finger lifts at 1200 px/s heading for the detent at 0 (a component
|
|
529
542
|
* // passes the spring of its motion role):
|
|
530
543
|
* animator.animate({y: 0}, {spring: {response: 0.45, dampingRatio: 0.9}, velocity: {y: 1200}});
|
|
@@ -533,7 +546,7 @@ const REDUCED_TRANSITION = {
|
|
|
533
546
|
* animator.stop(['y']);
|
|
534
547
|
* ```
|
|
535
548
|
*/
|
|
536
|
-
export function
|
|
549
|
+
export function createMotionAnimator(element, options = {}) {
|
|
537
550
|
const now = options.now ?? defaultNow;
|
|
538
551
|
const frameSource = options.requestFrame ?? (typeof requestAnimationFrame === 'function' ? callback => {
|
|
539
552
|
requestAnimationFrame(() => callback());
|
|
@@ -737,6 +750,14 @@ export function createAnimator(element, options = {}) {
|
|
|
737
750
|
}
|
|
738
751
|
return curveAt(property, time);
|
|
739
752
|
};
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* Whether a curve's tail already shows as at rest at `time`. Under a
|
|
756
|
+
* starved main thread the browser commits a call late. A call that starts
|
|
757
|
+
* at its own time then skips that far into its curve. One that starts at
|
|
758
|
+
* the commit holds an element that hardly moves.
|
|
759
|
+
*/
|
|
760
|
+
const showsAtRest = (property, segment, time) => Math.abs(valueAt(property, time) - segment.target) <= REST_DISTANCE_TOLERANCES * SAMPLE_TOLERANCE[property] && Math.abs(velocityAt(property, time)) <= SAMPLE_TOLERANCE[property] * REST_FRAMES_PER_SECOND;
|
|
740
761
|
const velocityAt = (property, time) => {
|
|
741
762
|
const held = segments.get(property);
|
|
742
763
|
if (held != null && isHeld(held)) {
|
|
@@ -1506,10 +1527,10 @@ export function createAnimator(element, options = {}) {
|
|
|
1506
1527
|
// -- starting from rest ---------------------------------------------------
|
|
1507
1528
|
|
|
1508
1529
|
/**
|
|
1509
|
-
* A call starts from rest when nothing on the channels it drives
|
|
1510
|
-
*
|
|
1511
|
-
*
|
|
1512
|
-
* start.
|
|
1530
|
+
* A call starts from rest when nothing on the channels it drives moves on
|
|
1531
|
+
* screen and nothing pins its clock (`at`). A curve still waiting for its
|
|
1532
|
+
* first frame counts as rest, as does one whose tail already shows as at
|
|
1533
|
+
* rest. Returns its start group, or null for an explicit start.
|
|
1513
1534
|
*/
|
|
1514
1535
|
const beginGroup = (time, properties, at, start) => {
|
|
1515
1536
|
if (target == null || typeof target.animate !== 'function') {
|
|
@@ -1538,16 +1559,18 @@ export function createAnimator(element, options = {}) {
|
|
|
1538
1559
|
}
|
|
1539
1560
|
return null;
|
|
1540
1561
|
}
|
|
1541
|
-
// A call that continues motion starts now unless it asks for the
|
|
1542
|
-
// browser's start (`commit`). `presented` asks only for a call from rest
|
|
1543
|
-
//
|
|
1544
|
-
// the value and velocity on screen
|
|
1562
|
+
// A call that continues motion starts now, unless it asks for the
|
|
1563
|
+
// browser's start (`commit`). `presented` asks only for a call from rest.
|
|
1564
|
+
// A curve that still moves is not at rest, so a call on it starts now,
|
|
1565
|
+
// from the value and velocity on screen. A tail that shows as at rest
|
|
1566
|
+
// counts as rest, so a call on it waits, under `presented` for its two
|
|
1567
|
+
// frames.
|
|
1545
1568
|
for (const channel of start === 'commit' ? [] : channels) {
|
|
1546
1569
|
for (const property of CHANNELS[channel]) {
|
|
1547
1570
|
const segment = segments.get(property);
|
|
1548
1571
|
// A call's first frame puts its channels on screen, even before the
|
|
1549
1572
|
// browser reports the start. So such a channel is not at rest either.
|
|
1550
|
-
if (segment != null && time < endOf(property, segment) && (segment.group == null || segment.group.resolved || shownSince(property, segment) != null)) {
|
|
1573
|
+
if (segment != null && time < endOf(property, segment) && (segment.group == null || segment.group.resolved || shownSince(property, segment) != null) && !showsAtRest(property, segment, time)) {
|
|
1551
1574
|
return null;
|
|
1552
1575
|
}
|
|
1553
1576
|
}
|
package/dist/motion/paging.d.ts
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* paging constants
|
|
5
5
|
* @output Exports `pagingSettleVelocity`, `solvePaging` (UIKit's paging settle
|
|
6
6
|
* as a curve the animator plays) and `solveAnimatedPageScroll`
|
|
7
|
-
* @position Pure math, with no DOM and no React
|
|
7
|
+
* @position Pure math, with no DOM and no React; hooks/usePager.ts reads it
|
|
8
8
|
*
|
|
9
9
|
* SYNC: When modified, update:
|
|
10
10
|
* - /packages/core/src/motion/paging.test.ts
|
|
11
11
|
* - /packages/core/src/motion/README.md
|
|
12
12
|
*/
|
|
13
13
|
import type { MotionCurve } from './animator.js';
|
|
14
|
+
import { type BezierPoints } from './bezier.js';
|
|
14
15
|
/**
|
|
15
16
|
* The velocity a paging settle starts at. It is the release velocity that every
|
|
16
17
|
* gesture reads, zeroed below `velocityFloor`. The page choice reads the
|
|
@@ -47,12 +48,22 @@ export declare function solvePaging({ from, velocity, to, }: {
|
|
|
47
48
|
to: number;
|
|
48
49
|
}): PagingCurve;
|
|
49
50
|
/**
|
|
50
|
-
* `setContentOffset(_:animated:)`: `paging.animatedScroll.
|
|
51
|
-
*
|
|
52
|
-
*
|
|
51
|
+
* `setContentOffset(_:animated:)`: `paging.animatedScroll.durationMs` on its
|
|
52
|
+
* curve, from the current offset, at any distance. The pager passes the
|
|
53
|
+
* duration and curve that `resolveMotion` gives, which are the measured values
|
|
54
|
+
* of the table.
|
|
55
|
+
*
|
|
56
|
+
* `velocity` (px/s) is the velocity of a move that this one retargets. The new
|
|
57
|
+
* curve starts at it and still ends on `to`, at rest and on time. A new target
|
|
58
|
+
* keeps the current velocity, where UIKit drops it. The carry is a Hermite
|
|
59
|
+
* term, v × duration × u(1 − u)², less the curve's own starting slope. So a
|
|
60
|
+
* move from rest is the curve itself.
|
|
53
61
|
*/
|
|
54
|
-
export declare function solveAnimatedPageScroll({ from, to, }: {
|
|
62
|
+
export declare function solveAnimatedPageScroll({ from, to, durationMs, curve, velocity, }: {
|
|
55
63
|
from: number;
|
|
56
64
|
to: number;
|
|
65
|
+
durationMs?: number;
|
|
66
|
+
curve?: BezierPoints;
|
|
67
|
+
velocity?: number;
|
|
57
68
|
}): MotionCurve;
|
|
58
69
|
//# sourceMappingURL=paging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/motion/paging.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/motion/paging.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAc,KAAK,YAAY,EAAC,MAAM,UAAU,CAAC;AAGxD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,EAAE,GACH,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,WAAW,CA6Cd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,EAAE,EACF,UAA6C,EAC7C,KAAmC,EACnC,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CA4Bd"}
|
package/dist/motion/paging.js
CHANGED
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
* paging constants
|
|
7
7
|
* @output Exports `pagingSettleVelocity`, `solvePaging` (UIKit's paging settle
|
|
8
8
|
* as a curve the animator plays) and `solveAnimatedPageScroll`
|
|
9
|
-
* @position Pure math, with no DOM and no React
|
|
9
|
+
* @position Pure math, with no DOM and no React; hooks/usePager.ts reads it
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update:
|
|
12
12
|
* - /packages/core/src/motion/paging.test.ts
|
|
13
13
|
* - /packages/core/src/motion/README.md
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { cubicBezier } from "./bezier.js";
|
|
16
17
|
import { paging } from "./uikit/paging.js";
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -100,29 +101,48 @@ export function solvePaging({
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
/**
|
|
103
|
-
* `setContentOffset(_:animated:)`: `paging.animatedScroll.
|
|
104
|
-
*
|
|
105
|
-
*
|
|
104
|
+
* `setContentOffset(_:animated:)`: `paging.animatedScroll.durationMs` on its
|
|
105
|
+
* curve, from the current offset, at any distance. The pager passes the
|
|
106
|
+
* duration and curve that `resolveMotion` gives, which are the measured values
|
|
107
|
+
* of the table.
|
|
108
|
+
*
|
|
109
|
+
* `velocity` (px/s) is the velocity of a move that this one retargets. The new
|
|
110
|
+
* curve starts at it and still ends on `to`, at rest and on time. A new target
|
|
111
|
+
* keeps the current velocity, where UIKit drops it. The carry is a Hermite
|
|
112
|
+
* term, v × duration × u(1 − u)², less the curve's own starting slope. So a
|
|
113
|
+
* move from rest is the curve itself.
|
|
106
114
|
*/
|
|
107
115
|
export function solveAnimatedPageScroll({
|
|
108
116
|
from,
|
|
109
|
-
to
|
|
117
|
+
to,
|
|
118
|
+
durationMs = paging.animatedScroll.durationMs,
|
|
119
|
+
curve = paging.animatedScroll.curve,
|
|
120
|
+
velocity
|
|
110
121
|
}) {
|
|
111
|
-
const
|
|
112
|
-
duration
|
|
113
|
-
} = paging.animatedScroll;
|
|
122
|
+
const duration = durationMs / 1000;
|
|
114
123
|
const distance = to - from;
|
|
124
|
+
const ease = cubicBezier(curve);
|
|
125
|
+
const progress = u => ease(Math.min(1, Math.max(0, u)));
|
|
126
|
+
// The carry, in px: the retargeted velocity over the whole duration, less
|
|
127
|
+
// what the curve's own starting slope already gives.
|
|
128
|
+
const startSlope = progress(1e-4) / 1e-4;
|
|
129
|
+
const carry = velocity == null ? 0 : velocity * duration - distance * startSlope;
|
|
130
|
+
const at = t => {
|
|
131
|
+
const u = Math.min(1, Math.max(0, t / duration));
|
|
132
|
+
return from + distance * progress(u) + carry * u * (1 - u) * (1 - u);
|
|
133
|
+
};
|
|
115
134
|
return {
|
|
116
135
|
duration,
|
|
117
|
-
at
|
|
118
|
-
const u = Math.min(1, Math.max(0, t / duration));
|
|
119
|
-
return from + distance * (1 - Math.cos(Math.PI * u)) / 2;
|
|
120
|
-
},
|
|
136
|
+
at,
|
|
121
137
|
velocity: t => {
|
|
122
|
-
if (t <= 0
|
|
138
|
+
if (t <= 0) {
|
|
139
|
+
return velocity ?? 0;
|
|
140
|
+
}
|
|
141
|
+
if (t >= duration) {
|
|
123
142
|
return 0;
|
|
124
143
|
}
|
|
125
|
-
|
|
144
|
+
const h = Math.min(1e-4, t / 2, (duration - t) / 2);
|
|
145
|
+
return (at(t + h) - at(t - h)) / (2 * h);
|
|
126
146
|
}
|
|
127
147
|
};
|
|
128
148
|
}
|
|
@@ -22,4 +22,28 @@ export declare function reducedMotionFade(element?: Element | null, options?: {
|
|
|
22
22
|
/** The change starts from the release of a touch drag (DR2). */
|
|
23
23
|
touchRelease?: boolean;
|
|
24
24
|
}): ReducedMotionFade | null;
|
|
25
|
+
/** A running Reduced Motion dip. */
|
|
26
|
+
export interface ReducedMotionDip {
|
|
27
|
+
/** Stops the dip. A change that has not landed yet never lands. */
|
|
28
|
+
cancel(): void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Plays `fade` on `element` as a dip, and runs `land` at its middle: the
|
|
32
|
+
* fade-out, the change, then the fade-in. The fade-out holds at 0 until `land`
|
|
33
|
+
* has run, and the fade-in starts only after it. So the change never shows at
|
|
34
|
+
* full opacity, however late the main thread runs. A timer at the middle can
|
|
35
|
+
* fire after the fade-in has begun.
|
|
36
|
+
*
|
|
37
|
+
* `land` must apply the change before it returns: the fade-in starts right
|
|
38
|
+
* after it. `from` is the opacity the fade-out starts at: a leaving element
|
|
39
|
+
* fades out from where it is.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```
|
|
43
|
+
* const dip = playReducedMotionDip(scroller, fade, () => scroller.scrollTo({top}));
|
|
44
|
+
* // A newer change replaces it:
|
|
45
|
+
* dip.cancel();
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function playReducedMotionDip(element: Element, fade: ReducedMotionFade, land: () => void, from?: number): ReducedMotionDip;
|
|
25
49
|
//# sourceMappingURL=reducedMotion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducedMotion.d.ts","sourceRoot":"","sources":["../../src/motion/reducedMotion.ts"],"names":[],"mappings":"AAqDA,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,2DACoB,CAAC;AAE3D,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,iEACuB,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,EACxB,OAAO,GAAE;IACP,gEAAgE;IAChE,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,iBAAiB,GAAG,IAAI,CAmB1B"}
|
|
1
|
+
{"version":3,"file":"reducedMotion.d.ts","sourceRoot":"","sources":["../../src/motion/reducedMotion.ts"],"names":[],"mappings":"AAqDA,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,2DACoB,CAAC;AAE3D,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,iEACuB,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,EACxB,OAAO,GAAE;IACP,gEAAgE;IAChE,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,iBAAiB,GAAG,IAAI,CAmB1B;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,MAAM,IAAI,EAChB,IAAI,SAAI,GACP,gBAAgB,CAyClB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @file reducedMotion.ts
|
|
5
5
|
* @input The Reduced Motion preference, the primary pointer, the motion tables
|
|
6
6
|
* @output reducedMotionFade (the fade the animator would play, for motion it
|
|
7
|
-
* does not drive) and the
|
|
7
|
+
* does not drive), playReducedMotionDip, and the queries a transition spells
|
|
8
8
|
* @position The one Reduced Motion policy (design:reduced-motion) for code
|
|
9
9
|
* beside the animator: a raw Web Animations fade, a CSS transition
|
|
10
10
|
*
|
|
@@ -86,4 +86,81 @@ export function reducedMotionFade(element, options = {}) {
|
|
|
86
86
|
duration: reducedMotionCrossFade.durationMs,
|
|
87
87
|
easing: `cubic-bezier(${curve.join(', ')})`
|
|
88
88
|
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** A running Reduced Motion dip. */
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Plays `fade` on `element` as a dip, and runs `land` at its middle: the
|
|
95
|
+
* fade-out, the change, then the fade-in. The fade-out holds at 0 until `land`
|
|
96
|
+
* has run, and the fade-in starts only after it. So the change never shows at
|
|
97
|
+
* full opacity, however late the main thread runs. A timer at the middle can
|
|
98
|
+
* fire after the fade-in has begun.
|
|
99
|
+
*
|
|
100
|
+
* `land` must apply the change before it returns: the fade-in starts right
|
|
101
|
+
* after it. `from` is the opacity the fade-out starts at: a leaving element
|
|
102
|
+
* fades out from where it is.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```
|
|
106
|
+
* const dip = playReducedMotionDip(scroller, fade, () => scroller.scrollTo({top}));
|
|
107
|
+
* // A newer change replaces it:
|
|
108
|
+
* dip.cancel();
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export function playReducedMotionDip(element, fade, land, from = 1) {
|
|
112
|
+
const half = fade.duration / 2;
|
|
113
|
+
let isCancelled = false;
|
|
114
|
+
let fadeIn = null;
|
|
115
|
+
const fadeOut = element.animate([{
|
|
116
|
+
opacity: from,
|
|
117
|
+
easing: fade.easing
|
|
118
|
+
}, {
|
|
119
|
+
opacity: 0
|
|
120
|
+
}], {
|
|
121
|
+
duration: half,
|
|
122
|
+
fill: 'forwards'
|
|
123
|
+
});
|
|
124
|
+
fadeOut.finished.then(() => {
|
|
125
|
+
if (isCancelled) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
land();
|
|
129
|
+
// The fade-in holds 0 until it starts: after a long stall, its start can
|
|
130
|
+
// come after the frame that runs this.
|
|
131
|
+
fadeIn = element.animate([{
|
|
132
|
+
opacity: 0,
|
|
133
|
+
easing: fade.easing
|
|
134
|
+
}, {
|
|
135
|
+
opacity: 1
|
|
136
|
+
}], {
|
|
137
|
+
duration: half,
|
|
138
|
+
fill: 'backwards'
|
|
139
|
+
});
|
|
140
|
+
// The fade-in keeps the dip's own schedule: it starts where the fade-out
|
|
141
|
+
// ended, so the dip keeps its length. The clock is read after the
|
|
142
|
+
// landing, because a frame's timestamp does not count the landing's own
|
|
143
|
+
// work. After a long stall, half of the fade-in still plays.
|
|
144
|
+
const fadeOutEnd = endTime(fadeOut, half);
|
|
145
|
+
if (fadeOutEnd != null) {
|
|
146
|
+
fadeIn.startTime = Math.max(fadeOutEnd, performance.now() - half / 2);
|
|
147
|
+
}
|
|
148
|
+
// The fade-in now holds the opacity, so the held 0 can go.
|
|
149
|
+
fadeOut.cancel();
|
|
150
|
+
},
|
|
151
|
+
// A cancelled fade-out rejects `finished`: nothing lands.
|
|
152
|
+
() => {});
|
|
153
|
+
return {
|
|
154
|
+
cancel() {
|
|
155
|
+
isCancelled = true;
|
|
156
|
+
fadeOut.cancel();
|
|
157
|
+
fadeIn?.cancel();
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** When `animation` was due to end, on its timeline (ms), if it has started. */
|
|
163
|
+
function endTime(animation, duration) {
|
|
164
|
+
const start = animation.startTime;
|
|
165
|
+
return typeof start === 'number' ? start + duration : null;
|
|
89
166
|
}
|
package/dist/motion/roles.d.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* @input The motion tables (motion/uikit and each component's own table)
|
|
4
4
|
* @output registerMotionTable, motionRoleOf, motionRoleIn, listMotionRoles,
|
|
5
5
|
* motionRoleVariable, and the CSS form of a role's value
|
|
6
|
-
* (formatMotionRoleValue, parseMotionRoleValue)
|
|
6
|
+
* (formatMotionRoleValue, parseMotionRoleValue), and parseCssEasing for a
|
|
7
|
+
* CSS transition's easing
|
|
7
8
|
* @position Motion foundation, internal to core: read by the code that
|
|
8
9
|
* resolves a role when a motion starts. No public API writes a role: touch
|
|
9
10
|
* motion stays internal until the public motion-token set is decided.
|
|
@@ -76,4 +77,9 @@ export declare function parseMotionRoleValue(kind: 'spring', text: string): Dura
|
|
|
76
77
|
export declare function parseMotionRoleValue(kind: 'duration', text: string): number | null;
|
|
77
78
|
export declare function parseMotionRoleValue(kind: 'curve', text: string): MotionCurvePoints | null;
|
|
78
79
|
export declare function parseMotionRoleValue(kind: MotionRoleKind, text: string): DurationBounce | number | MotionCurvePoints | null;
|
|
80
|
+
/**
|
|
81
|
+
* Reads a CSS easing, a keyword or a `cubic-bezier()`, as a curve role's value
|
|
82
|
+
* is read. Returns null for any other easing, such as `steps()`.
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseCssEasing(text: string): MotionCurvePoints | null;
|
|
79
85
|
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/motion/roles.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/motion/roles.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,qBAAqB,EAErB,cAAc,EAEd,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,cAAc,EAAE,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAC,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAC,CAAC;AACnE,YAAY,EAAC,iBAAiB,EAAE,cAAc,EAAC,CAAC;AAEhD,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,GAAG,iBAAiB,CAAC;CAChE;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,EACE,KAAU,EACV,OAAY,EACZ,MAAW,GACZ,GAAE;IACD,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtC,GACL,IAAI,CAoEN;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAIlE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,UAAU,GAAG,SAAS,CAOxB;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,eAAe,IAAI,UAAU,EAAE,CAE9C;AASD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,GACX,cAAc,GAAG,IAAI,CAAC;AACzB,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAAC;AACjB,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,IAAI,CAAC;AAC5B,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,GACX,cAAc,GAAG,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;AAqDtD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGrE"}
|
package/dist/motion/roles.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* @input The motion tables (motion/uikit and each component's own table)
|
|
6
6
|
* @output registerMotionTable, motionRoleOf, motionRoleIn, listMotionRoles,
|
|
7
7
|
* motionRoleVariable, and the CSS form of a role's value
|
|
8
|
-
* (formatMotionRoleValue, parseMotionRoleValue)
|
|
8
|
+
* (formatMotionRoleValue, parseMotionRoleValue), and parseCssEasing for a
|
|
9
|
+
* CSS transition's easing
|
|
9
10
|
* @position Motion foundation, internal to core: read by the code that
|
|
10
11
|
* resolves a role when a motion starts. No public API writes a role: touch
|
|
11
12
|
* motion stays internal until the public motion-token set is decided.
|
|
@@ -196,4 +197,22 @@ export function parseMotionRoleValue(kind, text) {
|
|
|
196
197
|
}
|
|
197
198
|
const points = [m[1], m[2], m[3], m[4]].map(Number);
|
|
198
199
|
return points[0] >= 0 && points[0] <= 1 && points[2] >= 0 && points[2] <= 1 ? points : null;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** The CSS easing keywords, as the control points CSS gives them. */
|
|
203
|
+
const EASING_KEYWORDS = {
|
|
204
|
+
linear: [0, 0, 1, 1],
|
|
205
|
+
ease: [0.25, 0.1, 0.25, 1],
|
|
206
|
+
'ease-in': [0.42, 0, 1, 1],
|
|
207
|
+
'ease-out': [0, 0, 0.58, 1],
|
|
208
|
+
'ease-in-out': [0.42, 0, 0.58, 1]
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Reads a CSS easing, a keyword or a `cubic-bezier()`, as a curve role's value
|
|
213
|
+
* is read. Returns null for any other easing, such as `steps()`.
|
|
214
|
+
*/
|
|
215
|
+
export function parseCssEasing(text) {
|
|
216
|
+
const value = text.trim();
|
|
217
|
+
return EASING_KEYWORDS[value] ?? parseMotionRoleValue('curve', value);
|
|
199
218
|
}
|