@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
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file paging.ts
|
|
5
5
|
* @input Nothing; data only
|
|
6
|
-
* @output Exports `paging`, the measured constants of a paging UIScrollView
|
|
6
|
+
* @output Exports `paging`, the measured constants of a paging UIScrollView,
|
|
7
|
+
* and `registerPagingTable`, which registers them with the motion registry
|
|
7
8
|
* @position The paging domain of the UIKit constants table (motion/uikit). Only
|
|
8
9
|
* core reads it, so the `uikit` namespace does not re-export it
|
|
9
10
|
*
|
|
@@ -12,6 +13,8 @@
|
|
|
12
13
|
* - /packages/core/src/motion/paging.ts and paging.test.ts
|
|
13
14
|
*/
|
|
14
15
|
|
|
16
|
+
import {registerMotionTable} from '../roles';
|
|
17
|
+
|
|
15
18
|
export const paging = {
|
|
16
19
|
/**
|
|
17
20
|
* After the lift, one model moves the content: the settle onto the chosen
|
|
@@ -70,7 +73,8 @@ export const paging = {
|
|
|
70
73
|
release: {
|
|
71
74
|
/**
|
|
72
75
|
* Released slower than `advanceSpeed`, the scroll view settles on the page
|
|
73
|
-
* nearest the content position: past half a page, the next one.
|
|
76
|
+
* nearest the content position: past half a page, the next one. The pager
|
|
77
|
+
* keeps the start page instead for a release that moves back toward it.
|
|
74
78
|
* @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. In releases
|
|
75
79
|
* at rest from page 1, content at 48.5 % of the page stays, and 57.5 %
|
|
76
80
|
* goes to the next page. On a second 402 pt pager, 45 % stays and 55 %
|
|
@@ -121,9 +125,9 @@ export const paging = {
|
|
|
121
125
|
*/
|
|
122
126
|
catchStopMs: 85,
|
|
123
127
|
/**
|
|
124
|
-
*
|
|
125
|
-
* horizontal (26.6° for 2). A steeper drag goes to the
|
|
126
|
-
*
|
|
128
|
+
* In a sheet, a horizontal pager's pan begins only for a drag within atan(1 ÷
|
|
129
|
+
* this) of horizontal (26.6° for 2). A steeper drag goes to the sheet.
|
|
130
|
+
* Between 26.6° and 45°, neither moves.
|
|
127
131
|
* @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A scroll
|
|
128
132
|
* view's directional lock holds the major axis up to 25° and frees it from
|
|
129
133
|
* 30°. An inline calendar pager in a sheet pages at 20° from horizontal. At
|
|
@@ -131,23 +135,36 @@ export const paging = {
|
|
|
131
135
|
* the sheet.
|
|
132
136
|
*/
|
|
133
137
|
panAxisRatio: 2,
|
|
138
|
+
/**
|
|
139
|
+
* Inside a vertical scroll view, exactly one of the pager and the scroll view
|
|
140
|
+
* takes a drag, decided once by its dominant axis. The pager takes it when
|
|
141
|
+
* |dx| ≥ this × |dy|, 45° and the tie included. The scroll view takes any
|
|
142
|
+
* other drag.
|
|
143
|
+
* @source measured: UIKit lab, iOS 26.2 simulator, Oct 24 2026. A 402 × 300
|
|
144
|
+
* paging view sits in a full-screen vertical scroll view, with 150 pt drags
|
|
145
|
+
* at 0–90°. The pager takes 0–45°, and the page takes 50–90°. At 35°, the
|
|
146
|
+
* outer view stays at 0 through 86 pt of vertical travel. The choice
|
|
147
|
+
* happens at 10–15 pt of travel.
|
|
148
|
+
*/
|
|
149
|
+
nestedPanAxisRatio: 1,
|
|
134
150
|
animatedScroll: {
|
|
135
151
|
/**
|
|
136
|
-
* `setContentOffset(_:animated:)` duration. It is the same
|
|
137
|
-
* for five, as for a page control's tap.
|
|
152
|
+
* `setContentOffset(_:animated:)` duration in milliseconds. It is the same
|
|
153
|
+
* for one page and for five, as for a page control's tap.
|
|
138
154
|
* @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026.
|
|
139
155
|
* `_contentOffsetAnimationDuration` reads 0.3, and five animated moves of
|
|
140
156
|
* 1 to 5 pages each last 0.30 s.
|
|
141
157
|
*/
|
|
142
|
-
|
|
158
|
+
durationMs: 300,
|
|
143
159
|
/**
|
|
144
160
|
* Its curve is a sinusoidal ease-in-out: x = from + (to − from) · (1 − cos
|
|
145
|
-
* πu) ÷ 2, for u = t ÷ duration.
|
|
161
|
+
* πu) ÷ 2, for u = t ÷ duration. This cubic bézier matches it to 0.02 % of
|
|
162
|
+
* the distance (0.09 pt over a 402 pt page).
|
|
146
163
|
* @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. The five
|
|
147
164
|
* moves fit the sinusoid to 0.14–0.51 pt RMS, and a 2010 pt move fits to
|
|
148
165
|
* 0.20 pt. The curve easeInEaseOut (0.42, 0, 0.58, 1) misses by 7.7 pt.
|
|
149
166
|
*/
|
|
150
|
-
curve:
|
|
167
|
+
curve: [0.364212, 0, 0.635788, 1],
|
|
151
168
|
},
|
|
152
169
|
/**
|
|
153
170
|
* Past the first or last page, the content follows the finger through the
|
|
@@ -160,3 +177,17 @@ export const paging = {
|
|
|
160
177
|
*/
|
|
161
178
|
rubberBandDimension: 'pageWidth',
|
|
162
179
|
} as const;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Registers this table with the motion registry (motion/roles.ts). The pager
|
|
183
|
+
* then reads `setContentOffset(_:animated:)`'s duration and curve through
|
|
184
|
+
* `resolveMotion`, as it reads every touch motion. The table lists no role,
|
|
185
|
+
* because no motion role names any of its values, so each plays as measured.
|
|
186
|
+
* Nothing registers on import, and a second call does nothing.
|
|
187
|
+
*/
|
|
188
|
+
export function registerPagingTable(): void {
|
|
189
|
+
registerMotionTable('paging', paging, {
|
|
190
|
+
// Who gets the touch, not how anything moves.
|
|
191
|
+
exclude: ['catchStopMs'],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* @file progressBar.ts
|
|
5
5
|
* @input Nothing: data only
|
|
6
6
|
* @output Exports `progressBar` (UIProgressView's fill: the whole-track
|
|
7
|
-
* duration and curve, its minimum length and its empty alpha
|
|
8
|
-
* `registerProgressBarTable`
|
|
7
|
+
* duration and curve, its minimum length and its empty alpha; and the
|
|
8
|
+
* reduced-motion pulse) and `registerProgressBarTable`
|
|
9
9
|
* @position ProgressBar's rows of the UIKit constants table (motion/uikit).
|
|
10
10
|
* Lengths are in pt (CSS px), durations in ms, alphas in 0..1. Tests check
|
|
11
|
-
* each leaf's `@source`.
|
|
11
|
+
* each leaf's `@source`, and each GUESS's `@measure`.
|
|
12
12
|
*
|
|
13
13
|
* SYNC: When modified, update
|
|
14
14
|
* /packages/core/src/ProgressBar/ProgressBarTouch.ts and
|
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
import {registerMotionTable} from '../roles';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* UIProgressView's values, for ProgressBar.
|
|
22
|
-
* generated motion role table: the whole-track duration,
|
|
23
|
-
* `progress.fillTrackMs`,
|
|
24
|
-
*
|
|
21
|
+
* UIProgressView's values, for ProgressBar. Three values are motion roles in
|
|
22
|
+
* the generated motion role table: the whole-track duration,
|
|
23
|
+
* `progress.fillTrackMs`, its curve, `progress.curves.fill`, and the
|
|
24
|
+
* reduced-motion pulse, `progress.reducedMotionPulseMs`. Every other value is
|
|
25
|
+
* an internal constant.
|
|
25
26
|
*/
|
|
26
27
|
export const progressBar = {
|
|
27
28
|
/**
|
|
@@ -43,6 +44,24 @@ export const progressBar = {
|
|
|
43
44
|
*/
|
|
44
45
|
fill: [0, 0, 1, 1],
|
|
45
46
|
},
|
|
47
|
+
/**
|
|
48
|
+
* Under reduced motion the indeterminate fill stops travelling and pulses
|
|
49
|
+
* its opacity in place. Each way takes this long, on the `timing.curves.move`
|
|
50
|
+
* curve. A busy loop, so tempo does not scale it.
|
|
51
|
+
* @source GUESS — An owner value, not a UIKit number. iOS Safari pulses its
|
|
52
|
+
* indeterminate bar for 1 s between 0.30 and 0.60 opacity. ProgressBar
|
|
53
|
+
* pulses slower, at a floor that keeps the bar visible.
|
|
54
|
+
* @measure M-PB1
|
|
55
|
+
*/
|
|
56
|
+
reducedMotionPulseMs: 2000,
|
|
57
|
+
/**
|
|
58
|
+
* That pulse's lowest opacity. It is the lowest at which every tone that
|
|
59
|
+
* reaches 3:1 against the track at full opacity still does. That holds in
|
|
60
|
+
* the light and dark default themes.
|
|
61
|
+
* @source GUESS — An owner value, not a UIKit number.
|
|
62
|
+
* @measure M-PB1
|
|
63
|
+
*/
|
|
64
|
+
reducedMotionPulseFloor: 0.84,
|
|
46
65
|
progressView: {
|
|
47
66
|
/**
|
|
48
67
|
* The track's height in the `.default` style; the fill is as tall.
|
|
@@ -71,12 +90,13 @@ export const progressBar = {
|
|
|
71
90
|
} as const;
|
|
72
91
|
|
|
73
92
|
/**
|
|
74
|
-
* Registers the table's
|
|
75
|
-
* test, which call it. Nothing at runtime reads the registry:
|
|
76
|
-
* returns the table value. Idempotent, and nothing runs on
|
|
93
|
+
* Registers the table's three roles, for the generated motion role table and
|
|
94
|
+
* its test, which call it. Nothing at runtime reads the registry:
|
|
95
|
+
* `resolveMotion` returns the table value. Idempotent, and nothing runs on
|
|
96
|
+
* import.
|
|
77
97
|
*/
|
|
78
98
|
export function registerProgressBarTable(): void {
|
|
79
99
|
registerMotionTable('progress', progressBar, {
|
|
80
|
-
roles: ['fillTrackMs', 'curves.fill'],
|
|
100
|
+
roles: ['fillTrackMs', 'curves.fill', 'reducedMotionPulseMs'],
|
|
81
101
|
});
|
|
82
102
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file segmented.ts
|
|
5
|
+
* @input Nothing; data only
|
|
6
|
+
* @output Exports `segmentedControl`, UISegmentedControl's selection slide
|
|
7
|
+
* spring and its drag overshoot; and `registerSegmentedTable`, which
|
|
8
|
+
* registers the spring as an internal motion role
|
|
9
|
+
* @position The segmented-control domain of the UIKit constants table
|
|
10
|
+
* (motion/uikit); read by SegmentedControl's touch presentation
|
|
11
|
+
*
|
|
12
|
+
* SYNC: When modified, update:
|
|
13
|
+
* - /packages/core/src/SegmentedControl/useSegmentedSelectionMotion.ts
|
|
14
|
+
* - /packages/core/src/motion/README.md (domain list)
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {registerMotionTable} from '../roles';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* UIKit's own UISegmentedControl, measured with three text segments in a
|
|
21
|
+
* 300 × 31 pt control. A tap and a programmatic change follow the same
|
|
22
|
+
* spring. Every leaf carries a `@source`, and uikit.test.ts checks it.
|
|
23
|
+
*
|
|
24
|
+
* Some UIKit motion is left out on purpose. UIKit cross-fades the two titles
|
|
25
|
+
* that change, over 0.2 s. Astryx switches them at once, because a
|
|
26
|
+
* cross-fade needs a second copy of each title. Under Reduce Motion, UIKit's
|
|
27
|
+
* lens fades in at the new segment and scales from 0.88. Astryx allows no
|
|
28
|
+
* scaling there, so the animator's Reduce Motion cross-fade replaces it.
|
|
29
|
+
* UIKit's lens also lifts and stretches under a finger. A theme role owns
|
|
30
|
+
* the lift, and the stretch is not modeled. The lens chases a dragging
|
|
31
|
+
* finger on the shared `springs.fingerTracking` role, which matches the
|
|
32
|
+
* values UIKit reports for this control.
|
|
33
|
+
*/
|
|
34
|
+
export const segmentedControl = {
|
|
35
|
+
/**
|
|
36
|
+
* The selection indicator's slide from the old segment to the new one,
|
|
37
|
+
* after a tap or a programmatic change. Its response is 0.40 s and its
|
|
38
|
+
* damping ratio 0.85. That gives about 1.25 pt of overshoot on a 200 pt
|
|
39
|
+
* move, settled by about 0.6 s. The width follows the same spring when the
|
|
40
|
+
* segments differ in width.
|
|
41
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
42
|
+
* iPhone 17 Pro, UIViewSpringAnimationBehavior read on the lens position
|
|
43
|
+
* for a tap and a programmatic set (dampingRatio 0.85, response 0.40,
|
|
44
|
+
* tracking off), Oct 23 2026
|
|
45
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
46
|
+
* iPhone 17 Pro, per-frame log of the lens's presentation position and
|
|
47
|
+
* velocity (method C) for a tap, a programmatic set and an animated set,
|
|
48
|
+
* least-squares spring fit (response 0.395 / 0.405 / 0.400 s, damping
|
|
49
|
+
* ratio 0.855 / 0.845 / 0.850, rms at most 0.65 pt over 200 pt),
|
|
50
|
+
* Oct 23 2026
|
|
51
|
+
*/
|
|
52
|
+
selectionSpring: {response: 0.4, dampingRatio: 0.85},
|
|
53
|
+
/**
|
|
54
|
+
* How far past the first or last segment's center the lens follows a
|
|
55
|
+
* dragging finger, in pt. Beyond that, the lens stays put while the finger
|
|
56
|
+
* goes on.
|
|
57
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
58
|
+
* iPhone 17 Pro, a drag 60 pt past the last segment: the lens stops about
|
|
59
|
+
* 11 pt past its center (312 vs 301), Oct 23 2026
|
|
60
|
+
*/
|
|
61
|
+
dragOvershoot: 11,
|
|
62
|
+
} as const;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Registers this table with the motion registry (motion/roles.ts). The
|
|
66
|
+
* slide's spring becomes an internal motion role. The drag overshoot is not
|
|
67
|
+
* motion, so it stays an internal constant. Nothing registers on import, and
|
|
68
|
+
* a second call does nothing.
|
|
69
|
+
*/
|
|
70
|
+
export function registerSegmentedTable(): void {
|
|
71
|
+
registerMotionTable('segmented', segmentedControl, {
|
|
72
|
+
roles: ['selectionSpring'],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* that will confirm or replace them (MEASUREMENTS.md lists them all).
|
|
16
16
|
* uikit.test.ts enforces both.
|
|
17
17
|
*
|
|
18
|
-
* Most springs are measured on iOS 26.2 or documented by Apple;
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
18
|
+
* Most springs are measured on iOS 26.2 or documented by Apple; one is still
|
|
19
|
+
* a GUESS (`banner`). `switchThumbMove` is the switch's measured travel,
|
|
20
|
+
* which uikit/switch.ts reads. A guess starts from the nearest sourced
|
|
21
|
+
* spring and names it. A component built on the table gets the measured
|
|
22
|
+
* value the moment it lands, without changing.
|
|
23
23
|
*
|
|
24
24
|
* Press highlight in/out are fades, not springs: see timing.ts.
|
|
25
25
|
*
|
|
@@ -388,44 +388,16 @@ export const MENU_REDUCED_MOTION_SPRING = {
|
|
|
388
388
|
// ---------------------------------------------------------------------
|
|
389
389
|
|
|
390
390
|
/**
|
|
391
|
-
* UISwitch thumb travelling between off and on
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
*
|
|
395
|
-
*
|
|
396
|
-
*
|
|
397
|
-
* switch frames differ, and a switch reads its measured table instead.
|
|
398
|
-
* @measure M-SW02
|
|
391
|
+
* UISwitch thumb travelling between off and on, measured: the switch table's
|
|
392
|
+
* `travel` reads this row, so the value has one home.
|
|
393
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
394
|
+
* iPhone 17 Pro, the lens's position behavior read on a tap (damping 1,
|
|
395
|
+
* response 0.3); the lens center after a 50 ms tap and after a 1 s hold
|
|
396
|
+
* fits one spring at 0.31 / 1 (rms 0.11 pt), Oct 23 2026
|
|
399
397
|
*/
|
|
400
398
|
export const SWITCH_THUMB_MOVE_SPRING = {
|
|
401
399
|
response: 0.3,
|
|
402
|
-
dampingRatio:
|
|
403
|
-
} as const;
|
|
404
|
-
|
|
405
|
-
/**
|
|
406
|
-
* UISwitch thumb stretching while pressed and relaxing on release.
|
|
407
|
-
* @source webkit Source/WebCore/rendering/cocoa/RenderThemeCocoa.mm
|
|
408
|
-
* `thumbPressSpring = SpringSolver(1.0, 322.272…, 31.2364…)`, "Values
|
|
409
|
-
* chosen for consistency with UIKit" (= response 0.35 s, ratio 0.87);
|
|
410
|
-
* settles in WebKit's held duration 0.50740 s (RenderThemeIOS.h). As
|
|
411
|
-
* for `switchThumbMove`, UIKit's own frames differ.
|
|
412
|
-
* @measure M-SW03
|
|
413
|
-
*/
|
|
414
|
-
export const SWITCH_THUMB_STRETCH_SPRING = {
|
|
415
|
-
response: 0.35,
|
|
416
|
-
dampingRatio: 0.87,
|
|
417
|
-
} as const;
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* UISegmentedControl selection thumb sliding to a new segment.
|
|
421
|
-
* @source GUESS — WebKit's UIKit-matched switch thumb spring, the nearest
|
|
422
|
-
* sourced control thumb
|
|
423
|
-
* @measure M-SG02
|
|
424
|
-
* @measure M-SG03
|
|
425
|
-
*/
|
|
426
|
-
export const SEGMENTED_THUMB_SPRING = {
|
|
427
|
-
response: 0.3,
|
|
428
|
-
dampingRatio: 0.75,
|
|
400
|
+
dampingRatio: 1,
|
|
429
401
|
} as const;
|
|
430
402
|
|
|
431
403
|
// ---------------------------------------------------------------------
|
|
@@ -517,8 +489,6 @@ export const springs = {
|
|
|
517
489
|
contextMenuMorph: CONTEXT_MENU_MORPH_SPRING,
|
|
518
490
|
menuReducedMotion: MENU_REDUCED_MOTION_SPRING,
|
|
519
491
|
switchThumbMove: SWITCH_THUMB_MOVE_SPRING,
|
|
520
|
-
switchThumbStretch: SWITCH_THUMB_STRETCH_SPRING,
|
|
521
|
-
segmentedThumb: SEGMENTED_THUMB_SPRING,
|
|
522
492
|
keyboard: KEYBOARD_SPRING,
|
|
523
493
|
banner: BANNER_SPRING,
|
|
524
494
|
sliderRelease: SLIDER_RELEASE_SPRING,
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file switch.ts
|
|
5
|
+
* @input The springs table's measured switch travel (springs.ts)
|
|
6
|
+
* @output Exports `switchControl`: UISwitch's geometry, the springs of its
|
|
7
|
+
* Liquid Glass thumb and of its track color, the drag's rubber band and
|
|
8
|
+
* flip distance, and the release timing
|
|
9
|
+
* @position The switch domain of the UIKit constants table (motion/uikit)
|
|
10
|
+
*
|
|
11
|
+
* The values are UISwitch's on iOS 26.2, read in a UIKit host app on the
|
|
12
|
+
* simulator. Lengths are in pt (CSS px). uikit.test.ts checks each `@source`.
|
|
13
|
+
*
|
|
14
|
+
* SYNC: When modified, update /packages/core/src/motion/MEASUREMENTS.md.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {registerMotionTable} from '../roles';
|
|
18
|
+
import {SWITCH_THUMB_MOVE_SPRING} from './springs';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* UISwitch on iOS 26.2. Under a finger its white thumb lifts into a clear
|
|
22
|
+
* glass lens, and a drag moves it with a rubber band. The track colour slides
|
|
23
|
+
* on a spring of its own. UISwitch plays no haptic.
|
|
24
|
+
*/
|
|
25
|
+
export const switchControl = {
|
|
26
|
+
/**
|
|
27
|
+
* The control's size (width × height): the track.
|
|
28
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
29
|
+
* iPhone 17 Pro, `UISwitch` frame 63 × 28 (intrinsic 61 × 28), track view
|
|
30
|
+
* 63 × 28 with corner radius 14, Oct 23 2026
|
|
31
|
+
*/
|
|
32
|
+
trackSize: [63, 28],
|
|
33
|
+
/**
|
|
34
|
+
* The thumb at rest (width × height), inset equally from the track's top,
|
|
35
|
+
* bottom and nearer end; it never changes size between off and on.
|
|
36
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
37
|
+
* iPhone 17 Pro, `_UILiquidLensView` frame 37 × 24 at x 2 (off) and
|
|
38
|
+
* x 24 (on) inside the 63 × 28 track, Oct 23 2026
|
|
39
|
+
*/
|
|
40
|
+
thumbSize: [37, 24],
|
|
41
|
+
/**
|
|
42
|
+
* The thumb lifted under a finger (width × height). The lens grows about
|
|
43
|
+
* its own center, past the track, and holds this size while the finger
|
|
44
|
+
* stays down.
|
|
45
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
46
|
+
* iPhone 17 Pro, lens bounds settled at 58 × 38.33 during a 1 s hold
|
|
47
|
+
* (center unmoved), Oct 23 2026
|
|
48
|
+
*/
|
|
49
|
+
liftedThumbSize: [58, 38.333],
|
|
50
|
+
/**
|
|
51
|
+
* The lift: the thumb growing to `liftedThumbSize` while its white fill
|
|
52
|
+
* fades out and the clear glass fades in (one spring drives all three).
|
|
53
|
+
* Starts with the touch outside a scroll view, after its content delay
|
|
54
|
+
* inside one. UISwitch keeps it under Reduce Motion; core's Switch does not
|
|
55
|
+
* lift then.
|
|
56
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
57
|
+
* iPhone 17 Pro, per-frame lens bounds during a 1 s hold fitted with one
|
|
58
|
+
* spring for width and height (rms 0.29 pt; the fill's and the glass's
|
|
59
|
+
* opacity overshoot by the same 13 %; the lens's settings read on a tap
|
|
60
|
+
* say damping 0.625, response 0.27, whose 8 % overshoot is short of the
|
|
61
|
+
* frames' 12 %), Oct 23 2026
|
|
62
|
+
*/
|
|
63
|
+
lift: {response: 0.23, dampingRatio: 0.55},
|
|
64
|
+
/**
|
|
65
|
+
* The settle after the finger lifts: the lens shrinking back to
|
|
66
|
+
* `thumbSize` while the white fill returns over the glass.
|
|
67
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
68
|
+
* iPhone 17 Pro, the lens's spring settings read on a tap (damping 0.7,
|
|
69
|
+
* response 0.5); per-frame lens bounds after the lift of a 1 s hold fit
|
|
70
|
+
* one spring at 0.49 / 0.70 (rms 0.065 pt; the opacities undershoot by
|
|
71
|
+
* the same 4.5 %), Oct 23 2026
|
|
72
|
+
*/
|
|
73
|
+
settle: {response: 0.5, dampingRatio: 0.7},
|
|
74
|
+
/**
|
|
75
|
+
* The settle never starts sooner than this after the lift began, so a
|
|
76
|
+
* quick tap still shows the lifted lens, in ms.
|
|
77
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
78
|
+
* iPhone 17 Pro, a 50 ms tap: the lift→settle hand-off fitted at 235 ms
|
|
79
|
+
* after the lift began (rms 0.33 pt), Oct 23 2026
|
|
80
|
+
* @measure M-SW07
|
|
81
|
+
*/
|
|
82
|
+
minimumLiftMs: 235,
|
|
83
|
+
/**
|
|
84
|
+
* The thumb travelling to the committed end after a release or a
|
|
85
|
+
* programmatic change. It starts from the thumb's own velocity.
|
|
86
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
87
|
+
* iPhone 17 Pro, the lens's position behavior read on a tap (damping 1,
|
|
88
|
+
* response 0.3); the lens center after a 50 ms tap and after a 1 s hold
|
|
89
|
+
* fits one spring at 0.31 / 1 (rms 0.11 pt), Oct 23 2026; the springs
|
|
90
|
+
* table's `SWITCH_THUMB_MOVE_SPRING` holds the one value
|
|
91
|
+
*/
|
|
92
|
+
travel: SWITCH_THUMB_MOVE_SPRING,
|
|
93
|
+
/**
|
|
94
|
+
* During a drag the thumb chases the finger: each move retargets this
|
|
95
|
+
* spring at the finger's position, rubber-banded past either end.
|
|
96
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
97
|
+
* iPhone 17 Pro, a 4 s drag off → on → past both ends: the lens center
|
|
98
|
+
* simulated as this spring chasing the rubber-banded finger fits every
|
|
99
|
+
* frame (rms 0.21 pt), Oct 23 2026
|
|
100
|
+
*/
|
|
101
|
+
tracking: {response: 0.36, dampingRatio: 1},
|
|
102
|
+
/**
|
|
103
|
+
* The drag's rubber band past either end: UIScrollView's
|
|
104
|
+
* `(1 − 1 ÷ (x·c ÷ d + 1))·d`. The coefficient c and the dimension d are in
|
|
105
|
+
* pt for the 28 pt control. Scale d with the track height.
|
|
106
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
107
|
+
* iPhone 17 Pro, the same drag fit: c 0.55, d 11.75–12 pt, the
|
|
108
|
+
* translation measured from where the finger landed, Oct 23 2026
|
|
109
|
+
*/
|
|
110
|
+
rubberBand: {coefficient: 0.55, dimension: 12},
|
|
111
|
+
/**
|
|
112
|
+
* A drag flips the switch by the finger, not the thumb. Once the finger is
|
|
113
|
+
* this far from where it landed, toward the other end, the switch shows
|
|
114
|
+
* the other side. The distance is the track width minus the thumb width
|
|
115
|
+
* (63 − 37 pt). Back past where it landed, the starting side shows again.
|
|
116
|
+
* Flips happen on touch events only, so a fast swipe flips on the lift.
|
|
117
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
118
|
+
* iPhone 17 Pro, `UISwitchModernVisualElement` ivars per frame and the
|
|
119
|
+
* "SwitchWellPosition" springs during 1 pt-step drags: the same 26 pt for
|
|
120
|
+
* presses at x 8, 20.5 and 45, with and without a 400 ms hold, mirrored
|
|
121
|
+
* on an on switch; flipping back at the press point, Oct 23 2026
|
|
122
|
+
*/
|
|
123
|
+
flipDistance: 26,
|
|
124
|
+
/**
|
|
125
|
+
* The track color turning on: the well image sliding in on a critically
|
|
126
|
+
* damped spring, starting when the switch flips (the lift of a tap).
|
|
127
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
128
|
+
* iPhone 17 Pro, `CASpringAnimation` "SwitchWellPosition" read: mass 1,
|
|
129
|
+
* stiffness 85.377, damping 18.480 (response 0.68 s), Oct 23 2026
|
|
130
|
+
*/
|
|
131
|
+
wellOn: {mass: 1, stiffness: 85.37720070146501, damping: 18.47995678582231},
|
|
132
|
+
/**
|
|
133
|
+
* The track color turning off: the same well sliding back, faster.
|
|
134
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
135
|
+
* iPhone 17 Pro, `CASpringAnimation` "SwitchWellPosition" read: mass 1,
|
|
136
|
+
* stiffness 246.740, damping 31.416 (response 0.40 s), Oct 23 2026
|
|
137
|
+
*/
|
|
138
|
+
wellOff: {mass: 1, stiffness: 246.74011002723395, damping: 31.41592653589793},
|
|
139
|
+
/**
|
|
140
|
+
* The lifted lens's drop shadow: y offset and radius in pt, then black
|
|
141
|
+
* alpha; none at rest.
|
|
142
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
143
|
+
* iPhone 17 Pro, the lens layer's presented `shadowOffset` (0, 7),
|
|
144
|
+
* `shadowRadius` 3, `shadowOpacity` 0.12 once lifted, 0 at rest,
|
|
145
|
+
* Oct 23 2026
|
|
146
|
+
*/
|
|
147
|
+
liftedShadow: [7, 3, 0.12],
|
|
148
|
+
/**
|
|
149
|
+
* UISwitch plays no haptic on a tap, a hold or a drag.
|
|
150
|
+
* @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
|
|
151
|
+
* iPhone 17 Pro, every `UIFeedbackGenerator` entry point hooked: no call
|
|
152
|
+
* on tap, hold, drag or flip, Oct 23 2026
|
|
153
|
+
*/
|
|
154
|
+
haptic: 'none',
|
|
155
|
+
} as const;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Registers the switch table's motion roles as internal roles. Nothing
|
|
159
|
+
* registers on import: Switch's touch presentation calls it once before its
|
|
160
|
+
* first animation, and a second call does nothing.
|
|
161
|
+
*/
|
|
162
|
+
export function registerSwitchTable(): void {
|
|
163
|
+
registerMotionTable('switchControl', switchControl, {
|
|
164
|
+
roles: [
|
|
165
|
+
'lift',
|
|
166
|
+
'settle',
|
|
167
|
+
'travel',
|
|
168
|
+
'tracking',
|
|
169
|
+
'wellOn',
|
|
170
|
+
'wellOff',
|
|
171
|
+
'minimumLiftMs',
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
/**
|
|
3
|
+
* @file privateAttributes/pressGroupItem.stylex.ts
|
|
4
|
+
* @input Nothing: the private press-group-item attribute
|
|
5
|
+
* @output pressGroupItemProps, which marks an action a group's tracker
|
|
6
|
+
* follows, and isTrackedByGroup, which reads the mark
|
|
7
|
+
* @position Owner module of the private press-group-item attribute: the only
|
|
8
|
+
* file that writes its name. AlertDialog marks its actions, and the press
|
|
9
|
+
* controller (utils/pressFeedback.ts) leaves their press to the group's
|
|
10
|
+
* tracker. No package entry exports it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const PRESS_GROUP_ITEM = 'data-astryx-press-group-item';
|
|
14
|
+
|
|
15
|
+
/** Spread on each action that a group's tracker follows. */
|
|
16
|
+
export const pressGroupItemProps: Readonly<Record<string, string>> = {
|
|
17
|
+
[PRESS_GROUP_ITEM]: '',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** Whether a group's tracker paints the press on `element` or an ancestor. */
|
|
21
|
+
export function isTrackedByGroup(element: Element): boolean {
|
|
22
|
+
return element.closest(`[${PRESS_GROUP_ITEM}]`) != null;
|
|
23
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
/**
|
|
3
|
+
* @file privateAttributes/pressHoldsDrag.stylex.ts
|
|
4
|
+
* @input Whether a pressable's own drag moves under the finger
|
|
5
|
+
* @output pressHoldsDragProps, which marks such a pressable, and
|
|
6
|
+
* holdsPressThroughDrag, which reads the mark
|
|
7
|
+
* @position Owner module of the private press-holds-drag attribute: the only
|
|
8
|
+
* file that writes its name. Switch marks its row; the press controller
|
|
9
|
+
* (utils/pressFeedback.ts) keeps the press painted through that row's
|
|
10
|
+
* drag. No package entry exports it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const PRESS_HOLDS_DRAG = 'data-astryx-press-holds-drag';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Spread on a pressable whose own drag the finger moves, such as a Switch's
|
|
17
|
+
* thumb. The drag is not a scroll, so the press stays painted.
|
|
18
|
+
*/
|
|
19
|
+
export function pressHoldsDragProps(
|
|
20
|
+
holdsDrag: boolean,
|
|
21
|
+
): Readonly<Record<string, string>> {
|
|
22
|
+
return holdsDrag ? {[PRESS_HOLDS_DRAG]: ''} : {};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Whether the press on `element` stays painted through its drag. */
|
|
26
|
+
export function holdsPressThroughDrag(element: Element): boolean {
|
|
27
|
+
return element.hasAttribute(PRESS_HOLDS_DRAG);
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file privateAttributes/segmentTitle.stylex.ts
|
|
5
|
+
* @input Nothing
|
|
6
|
+
* @output segmentTitleProps, which marks a SegmentedControl segment's title,
|
|
7
|
+
* and titleOfSegment, which finds that title in a segment
|
|
8
|
+
* @position Owner module of the private segment-title attribute: the only
|
|
9
|
+
* file that writes its name. No package entry exports it.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const SEGMENT_TITLE = 'data-astryx-segment-title';
|
|
13
|
+
|
|
14
|
+
/** Spread on a segment's title: marks it for the touch layer. */
|
|
15
|
+
export const segmentTitleProps: Readonly<Record<string, string>> = {
|
|
16
|
+
[SEGMENT_TITLE]: '',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** The title inside `segment`, or null when the label is hidden. */
|
|
20
|
+
export function titleOfSegment(segment: Element): HTMLElement | null {
|
|
21
|
+
return segment.querySelector<HTMLElement>(`[${SEGMENT_TITLE}]`);
|
|
22
|
+
}
|