@astryxdesign/core 0.7.7-canary.c0929c8 → 0.7.7-canary.c19ca12
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/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 +7 -3
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +47 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +13 -2
- 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/ContextMenu/ContextMenu.js +2 -2
- 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.map +1 -1
- package/dist/DateInput/Wheel.js +22 -41
- 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 +23 -45
- 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 +5 -1
- 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 +4 -3
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +27 -2
- package/dist/HoverCard/useHoverCard.d.ts +5 -4
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +17 -31
- 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/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 +20 -10
- package/dist/Layer/usePressPin.d.ts.map +1 -1
- package/dist/Layer/usePressPin.js +66 -18
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +18 -0
- 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/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/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 +8 -1
- 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/Spinner/Spinner.d.ts +1 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +60 -58
- package/dist/Switch/switchTouch.d.ts +0 -7
- package/dist/Switch/switchTouch.d.ts.map +1 -1
- package/dist/Switch/switchTouch.js +2 -10
- package/dist/Switch/useSwitchTouch.d.ts +2 -11
- package/dist/Switch/useSwitchTouch.d.ts.map +1 -1
- package/dist/Switch/useSwitchTouch.js +35 -93
- 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 +11 -1
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +30 -15
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +94 -34
- package/dist/Toast/types.d.ts +9 -3
- package/dist/Toast/types.d.ts.map +1 -1
- 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 +40 -57
- 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 +25 -30
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.js +24 -5
- package/dist/Tooltip/index.d.ts +1 -1
- package/dist/Tooltip/index.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +45 -28
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +52 -59
- 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/TypeaheadItem.d.ts +2 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/animator/createAnimator.d.ts +98 -0
- package/dist/animator/createAnimator.d.ts.map +1 -0
- package/dist/animator/createAnimator.js +259 -0
- package/dist/astryx.css +96 -7
- package/dist/gestures/GestureHost.d.ts +27 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +157 -21
- package/dist/gestures/PressTracker.d.ts.map +1 -1
- package/dist/gestures/PressTracker.js +4 -3
- 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 +1 -1
- package/dist/hooks/useAttachment.js +1 -1
- 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/useLongPress.d.ts +6 -2
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +95 -15
- 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/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/indicatorPress.stylex.d.ts +20 -0
- package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
- package/dist/internal/indicatorPress.stylex.js +26 -0
- package/dist/internal/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/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 +6 -5
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +6 -5
- 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 +0 -18
- package/dist/motion/uikit/springs.d.ts.map +1 -1
- package/dist/motion/uikit/springs.js +5 -21
- 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/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/focusReturn.d.ts +15 -0
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +28 -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 +19 -6
- package/dist/utils/triggerFocus.d.ts +36 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -0
- package/dist/utils/triggerFocus.js +65 -0
- package/locales/en.json +128 -0
- package/locales/pseudo.json +96 -0
- package/package.json +18 -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/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 +13 -3
- package/src/Button/Button.tsx +63 -5
- package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
- package/src/CheckboxInput/CheckboxInput.tsx +36 -9
- 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/ContextMenu/ContextMenu.tsx +2 -2
- package/src/DateInput/DateInput.tsx +8 -2
- package/src/DateInput/MonthScroller.tsx +18 -22
- package/src/DateInput/Wheel.tsx +30 -32
- package/src/DateTimeInput/DateTimeInput.tsx +8 -2
- package/src/Dialog/Dialog.tsx +54 -45
- package/src/Drawer/Drawer.tsx +28 -11
- package/src/Drawer/useDrawerDialogPresence.ts +5 -1
- package/src/Field/Field.tsx +2 -2
- package/src/Field/PanelSearchInput.tsx +11 -0
- package/src/HoverCard/HoverCard.doc.mjs +4 -2
- package/src/HoverCard/HoverCard.tsx +35 -4
- package/src/HoverCard/useHoverCard.doc.mjs +178 -36
- package/src/HoverCard/useHoverCard.tsx +46 -52
- 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/useBackdropPress.ts +81 -0
- package/src/Layer/usePressPin.ts +86 -26
- package/src/Lightbox/Lightbox.tsx +18 -0
- 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/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/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 +12 -1
- 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/Spinner/Spinner.tsx +77 -63
- package/src/Switch/switchTouch.ts +2 -10
- package/src/Switch/useSwitchTouch.ts +38 -104
- package/src/Table/BaseTable.tsx +46 -12
- package/src/TextInput/TextInput.tsx +11 -10
- package/src/Toast/Toast.doc.mjs +4 -3
- package/src/Toast/Toast.tsx +57 -32
- package/src/Toast/ToastViewport.tsx +121 -35
- package/src/Toast/types.ts +9 -3
- 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 +89 -85
- package/src/Tokenizer/TokenizerBottomSheet.tsx +219 -93
- package/src/Tokenizer/TokenizerItemRemovableContext.ts +24 -0
- package/src/Tooltip/Tooltip.doc.mjs +123 -54
- package/src/Tooltip/Tooltip.tsx +36 -39
- package/src/Tooltip/index.ts +0 -1
- package/src/Tooltip/useTooltip.doc.mjs +171 -33
- package/src/Tooltip/useTooltip.tsx +98 -86
- package/src/TopNav/TopNavItem.tsx +6 -5
- package/src/TopNav/TopNavMegaMenuItem.tsx +6 -5
- package/src/TopNav/TopNavMenu.tsx +6 -5
- package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/animator/createAnimator.doc.mjs +153 -0
- package/src/animator/createAnimator.ts +324 -0
- package/src/gestures/GestureHost.ts +198 -20
- package/src/gestures/PressTracker.ts +4 -3
- package/src/gestures/README.md +7 -1
- 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 +1 -1
- package/src/hooks/useHighlightedOptionScroll.ts +123 -15
- package/src/hooks/useInputStatusIcon.tsx +3 -2
- package/src/hooks/useLongPress.doc.mjs +2 -2
- package/src/hooks/useLongPress.ts +136 -15
- package/src/hooks/useMediaQuery.doc.mjs +2 -2
- package/src/hooks/useMediaQuery.ts +13 -4
- package/src/hooks/useMenuPress.ts +8 -2
- 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/indicatorPress.stylex.ts +24 -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 +7 -0
- package/src/motion/README.md +9 -5
- package/src/motion/animator.ts +61 -29
- 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 +5 -5
- package/src/motion/uikit/segmented.ts +74 -0
- package/src/motion/uikit/springs.ts +5 -21
- package/src/privateAttributes/pressGroupItem.stylex.ts +23 -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/focusReturn.ts +30 -0
- package/src/utils/interactionOverlay.stylex.ts +3 -2
- package/src/utils/pressFeedback.ts +19 -6
- package/src/utils/triggerFocus.ts +80 -0
- 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,251 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file resizeGesture.ts
|
|
5
|
+
* @input A handle element, a resize model (its state, and a gesture's start,
|
|
6
|
+
* move, end and cancel), and the handle's axis, reversal and disabled state
|
|
7
|
+
* @output createResizeGesture: the window splitter's input in one place: a
|
|
8
|
+
* pointer drag that holds its pointer, the arrow keys, Home, End and Enter,
|
|
9
|
+
* and a double-click collapse; and the body's drag cursor
|
|
10
|
+
* @position Internal to the Resizable family. ResizeHandle forwards its React
|
|
11
|
+
* events to it. No React, and no DOM work on import
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** Pixels an arrow key moves the separator; Shift moves it further. */
|
|
15
|
+
export const KEYBOARD_STEP = 10;
|
|
16
|
+
export const KEYBOARD_LARGE_STEP = 50;
|
|
17
|
+
|
|
18
|
+
/** What a gesture reads from its region when an input arrives. */
|
|
19
|
+
|
|
20
|
+
/** The region a gesture resizes. */
|
|
21
|
+
|
|
22
|
+
/** The handle's configuration, read at each input. */
|
|
23
|
+
|
|
24
|
+
/** The fields of a pointer event the gesture reads (native or React). */
|
|
25
|
+
|
|
26
|
+
/** The fields of a key event the gesture reads (native or React). */
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Drag feedback lives on the page's `<body>`, not on the handle. During a
|
|
30
|
+
* drag the pointer moves over whatever the panels contain, and the resize
|
|
31
|
+
* cursor must hold there.
|
|
32
|
+
*/
|
|
33
|
+
function applyBodyDragStyles(isHorizontal) {
|
|
34
|
+
document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';
|
|
35
|
+
document.body.style.userSelect = 'none';
|
|
36
|
+
}
|
|
37
|
+
function clearBodyDragStyles() {
|
|
38
|
+
document.body.style.cursor = '';
|
|
39
|
+
document.body.style.userSelect = '';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The snap point `count` points away from the region's current size in
|
|
44
|
+
* `direction` (+1 grows, -1 shrinks). A point beyond the minimum or the
|
|
45
|
+
* maximum counts as that bound. When fewer points remain, the nearest end
|
|
46
|
+
* point serves, or the current size when the region is already there.
|
|
47
|
+
*/
|
|
48
|
+
function adjacentSnapPoint(state, direction, count) {
|
|
49
|
+
const points = [...new Set(state.snaps.map(p => Math.min(state.maxPx, Math.max(state.minPx, p))))].sort((a, b) => a - b);
|
|
50
|
+
const {
|
|
51
|
+
size
|
|
52
|
+
} = state;
|
|
53
|
+
const ahead = direction > 0 ? points.filter(p => p > size) : points.filter(p => p < size).reverse();
|
|
54
|
+
if (ahead.length === 0) {
|
|
55
|
+
return size;
|
|
56
|
+
}
|
|
57
|
+
return ahead[Math.min(count, ahead.length) - 1];
|
|
58
|
+
}
|
|
59
|
+
function step(model, delta) {
|
|
60
|
+
model.start();
|
|
61
|
+
model.move(delta);
|
|
62
|
+
model.end();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Collapse an open pane, or restore a collapsed one to the size it had before
|
|
67
|
+
* it collapsed, with the region's own collapse and expand. A region without
|
|
68
|
+
* them falls back to a resize gesture to the minimum. That gesture cannot
|
|
69
|
+
* reopen a pane whose minimum sits below its collapse threshold.
|
|
70
|
+
*/
|
|
71
|
+
function toggleCollapse(model) {
|
|
72
|
+
const state = model.state();
|
|
73
|
+
if (model.collapse != null && model.expand != null) {
|
|
74
|
+
if (state.isCollapsed) {
|
|
75
|
+
model.expand();
|
|
76
|
+
} else {
|
|
77
|
+
model.collapse();
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
step(model, state.isCollapsed ? state.minPx : -state.size);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The window splitter's input for one handle. A drag takes pointer capture
|
|
86
|
+
* on the element the press landed on. The rest of the gesture then goes to
|
|
87
|
+
* that element. Without capture, the browser hit-tests each move, and an
|
|
88
|
+
* embedded frame under the pointer takes the drag.
|
|
89
|
+
*/
|
|
90
|
+
export function createResizeGesture(getHandle, model, getConfig, onDraggingChange) {
|
|
91
|
+
let drag = null;
|
|
92
|
+
const rtlMultiplier = () => {
|
|
93
|
+
const handle = getHandle();
|
|
94
|
+
if (handle == null) {
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
const view = handle.ownerDocument.defaultView;
|
|
98
|
+
return view?.getComputedStyle(handle).direction === 'rtl' ? -1 : 1;
|
|
99
|
+
};
|
|
100
|
+
const clearDrag = () => {
|
|
101
|
+
const ending = drag;
|
|
102
|
+
drag = null;
|
|
103
|
+
const target = ending?.target;
|
|
104
|
+
if (ending != null && target != null && target.hasPointerCapture?.(ending.pointerId) === true) {
|
|
105
|
+
target.releasePointerCapture(ending.pointerId);
|
|
106
|
+
}
|
|
107
|
+
if (ending != null) {
|
|
108
|
+
clearBodyDragStyles();
|
|
109
|
+
}
|
|
110
|
+
onDraggingChange?.(false);
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
get isDragging() {
|
|
114
|
+
return drag != null;
|
|
115
|
+
},
|
|
116
|
+
pointerDown(event) {
|
|
117
|
+
const config = getConfig();
|
|
118
|
+
if (config.isDisabled || drag != null) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
event.preventDefault();
|
|
122
|
+
event.stopPropagation();
|
|
123
|
+
// An element from another document (an iframe, a popup) is not an
|
|
124
|
+
// instance of this page's Element, so test for the capture API itself.
|
|
125
|
+
const current = event.currentTarget;
|
|
126
|
+
const target = typeof current?.setPointerCapture === 'function' ? current : null;
|
|
127
|
+
target?.setPointerCapture?.(event.pointerId);
|
|
128
|
+
const isHorizontal = config.direction === 'horizontal';
|
|
129
|
+
drag = {
|
|
130
|
+
pointerId: event.pointerId,
|
|
131
|
+
startPos: isHorizontal ? event.clientX : event.clientY,
|
|
132
|
+
rtl: isHorizontal ? rtlMultiplier() : 1,
|
|
133
|
+
target
|
|
134
|
+
};
|
|
135
|
+
onDraggingChange?.(true);
|
|
136
|
+
model.start();
|
|
137
|
+
applyBodyDragStyles(isHorizontal);
|
|
138
|
+
},
|
|
139
|
+
pointerMove(event) {
|
|
140
|
+
if (drag == null || drag.pointerId !== event.pointerId) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const config = getConfig();
|
|
144
|
+
const position = config.direction === 'horizontal' ? event.clientX : event.clientY;
|
|
145
|
+
const sign = config.isReversed ? -1 : 1;
|
|
146
|
+
model.move((position - drag.startPos) * drag.rtl * sign);
|
|
147
|
+
},
|
|
148
|
+
pointerUp(event) {
|
|
149
|
+
if (drag?.pointerId !== event.pointerId) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
clearDrag();
|
|
153
|
+
model.end();
|
|
154
|
+
},
|
|
155
|
+
// Serves pointercancel and lostpointercapture alike: an interrupted drag
|
|
156
|
+
// ends without a resize end. The implicit release after every pointerup
|
|
157
|
+
// or pointercancel also fires lostpointercapture. By then the drag is
|
|
158
|
+
// already cleared, and this is a no-op.
|
|
159
|
+
pointerCancel(event) {
|
|
160
|
+
if (drag?.pointerId !== event.pointerId) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
clearDrag();
|
|
164
|
+
model.cancel();
|
|
165
|
+
},
|
|
166
|
+
interrupt() {
|
|
167
|
+
if (drag == null) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
clearDrag();
|
|
171
|
+
model.cancel();
|
|
172
|
+
},
|
|
173
|
+
keyDown(event) {
|
|
174
|
+
const config = getConfig();
|
|
175
|
+
if (config.isDisabled) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const state = model.state();
|
|
179
|
+
const isHorizontal = config.direction === 'horizontal';
|
|
180
|
+
const sign = config.isReversed ? -1 : 1;
|
|
181
|
+
const keyStep = event.shiftKey ? KEYBOARD_LARGE_STEP : KEYBOARD_STEP;
|
|
182
|
+
const rtl = isHorizontal ? rtlMultiplier() : 1;
|
|
183
|
+
|
|
184
|
+
// The pane's grow direction on this key: ArrowRight/Down grow unless the
|
|
185
|
+
// layout is reversed or, on the inline axis, right-to-left.
|
|
186
|
+
const grows = key => (key === 'ArrowRight' || key === 'ArrowDown' ? 1 : key === 'ArrowLeft' || key === 'ArrowUp' ? -1 : 0) * (isHorizontal ? rtl : 1) * sign > 0;
|
|
187
|
+
switch (event.key) {
|
|
188
|
+
case 'ArrowRight':
|
|
189
|
+
case 'ArrowDown':
|
|
190
|
+
case 'ArrowLeft':
|
|
191
|
+
case 'ArrowUp':
|
|
192
|
+
{
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
if (state.isCollapsed) {
|
|
195
|
+
// A collapsed pane answers only the grow arrow. It opens one step
|
|
196
|
+
// above its minimum, the value the separator announces while
|
|
197
|
+
// collapsed. If the collapse threshold is larger, it opens there.
|
|
198
|
+
// A bare step would stay below the threshold and leave the pane
|
|
199
|
+
// closed. The shrink arrow is a no-op.
|
|
200
|
+
if (grows(event.key)) {
|
|
201
|
+
step(model, Math.max(state.minPx + keyStep, state.collapsedSize));
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (state.snaps.length > 0) {
|
|
206
|
+
// With snap points the region rests only on a point, so a pixel
|
|
207
|
+
// step would snap straight back. The arrow moves to the adjacent
|
|
208
|
+
// point in its direction instead, two points with Shift, within
|
|
209
|
+
// the bounds.
|
|
210
|
+
step(model, adjacentSnapPoint(state, grows(event.key) ? 1 : -1, event.shiftKey ? 2 : 1) - state.size);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
const direction = event.key === 'ArrowRight' || event.key === 'ArrowDown' ? 1 : -1;
|
|
214
|
+
step(model, direction * keyStep * (isHorizontal ? rtl : 1) * sign);
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case 'Home':
|
|
218
|
+
{
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
step(model, state.minPx - state.size);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case 'End':
|
|
224
|
+
{
|
|
225
|
+
event.preventDefault();
|
|
226
|
+
// Only a configured maximum is the region's own limit. The reported
|
|
227
|
+
// stand-in for an unbounded region is where the pane could reach,
|
|
228
|
+
// not where End may move it.
|
|
229
|
+
if (state.maxPx !== Infinity) {
|
|
230
|
+
step(model, state.maxPx - state.size);
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
case 'Enter':
|
|
235
|
+
{
|
|
236
|
+
event.preventDefault();
|
|
237
|
+
if (state.collapsible) {
|
|
238
|
+
toggleCollapse(model);
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
doubleClick() {
|
|
245
|
+
if (getConfig().isDisabled || !model.state().collapsible) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
toggleCollapse(model);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file SegmentedControl.tsx
|
|
3
|
-
* @input Uses React, StyleX, SegmentedControlContext, useListFocus,
|
|
3
|
+
* @input Uses React, StyleX, SegmentedControlContext, useListFocus,
|
|
4
|
+
* useKeyboardHint, useTouchPresentation, useSegmentedSelectionMotion
|
|
4
5
|
* @output Exports SegmentedControl component and SegmentedControlProps type
|
|
5
6
|
* @position Container wrapper; provides context to SegmentedControlItem children
|
|
6
7
|
*
|
|
@@ -8,6 +9,7 @@
|
|
|
8
9
|
* - /packages/core/src/SegmentedControl/SegmentedControl.doc.mjs
|
|
9
10
|
* - /packages/core/src/SegmentedControl/index.ts
|
|
10
11
|
* - /packages/core/src/SegmentedControl/SegmentedControl.test.tsx
|
|
12
|
+
* - /packages/core/src/SegmentedControl/useSegmentedSelectionMotion.ts
|
|
11
13
|
* - /packages/cli/assets/templates/blocks/components/SegmentedControl/ (showcase blocks)
|
|
12
14
|
*/
|
|
13
15
|
import React, { type ReactNode } from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,EAA+B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAQ1E,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAqMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EAAE,QAAQ,EACd,MAAc,EACd,UAAkB,EAClB,eAAe,EACf,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,mBAAmB,EACvC,GAAG,IAAI,EACR,EAAE,qBAAqB,qBAkLvB;yBApMe,gBAAgB"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file SegmentedControl.tsx
|
|
7
|
-
* @input Uses React, StyleX, SegmentedControlContext, useListFocus,
|
|
7
|
+
* @input Uses React, StyleX, SegmentedControlContext, useListFocus,
|
|
8
|
+
* useKeyboardHint, useTouchPresentation, useSegmentedSelectionMotion
|
|
8
9
|
* @output Exports SegmentedControl component and SegmentedControlProps type
|
|
9
10
|
* @position Container wrapper; provides context to SegmentedControlItem children
|
|
10
11
|
*
|
|
@@ -12,9 +13,10 @@
|
|
|
12
13
|
* - /packages/core/src/SegmentedControl/SegmentedControl.doc.mjs
|
|
13
14
|
* - /packages/core/src/SegmentedControl/index.ts
|
|
14
15
|
* - /packages/core/src/SegmentedControl/SegmentedControl.test.tsx
|
|
16
|
+
* - /packages/core/src/SegmentedControl/useSegmentedSelectionMotion.ts
|
|
15
17
|
* - /packages/cli/assets/templates/blocks/components/SegmentedControl/ (showcase blocks)
|
|
16
18
|
*/
|
|
17
|
-
import React, { useMemo, useCallback } from 'react';
|
|
19
|
+
import React, { useMemo, useCallback, useRef } from 'react';
|
|
18
20
|
import * as stylex from '@stylexjs/stylex';
|
|
19
21
|
import "../theme/tokens.stylex.js";
|
|
20
22
|
import { colorVars, spacingVars, radiusVars } from "../theme/tokens.stylex.js";
|
|
@@ -28,6 +30,8 @@ import { joinAriaIDs } from "../utils/inputAria.js";
|
|
|
28
30
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
29
31
|
import { themeProps } from "../utils/themeProps.js";
|
|
30
32
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
33
|
+
import { useTouchPresentation } from "../utils/touchPresentation.js";
|
|
34
|
+
import { useSegmentedSelectionMotion } from "./useSegmentedSelectionMotion.js";
|
|
31
35
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
36
|
// =============================================================================
|
|
33
37
|
// Styles
|
|
@@ -35,6 +39,8 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
35
39
|
|
|
36
40
|
const styles = {
|
|
37
41
|
container: {
|
|
42
|
+
kVAEAm: "x1n2onr6",
|
|
43
|
+
kHBbk8: "xc8icb0",
|
|
38
44
|
k1xSpc: "x3nfvp2",
|
|
39
45
|
kGNEyG: "x6s0dn4",
|
|
40
46
|
kzqmXN: "xeq5yr9",
|
|
@@ -54,6 +60,87 @@ const styles = {
|
|
|
54
60
|
disabled: {
|
|
55
61
|
kSiTet: "xbyyjgo",
|
|
56
62
|
$$css: true
|
|
63
|
+
},
|
|
64
|
+
lens: {
|
|
65
|
+
kgeoSG: "x1cpjm7i",
|
|
66
|
+
kEoFBp: "x1hmns74",
|
|
67
|
+
kxmVGU: "xy5mcqj",
|
|
68
|
+
k75S9Q: "x1h6x5ug",
|
|
69
|
+
k96MEf: "x319kzk",
|
|
70
|
+
kOlAkY: "xj84cd",
|
|
71
|
+
kgzTxl: "xlxjeq7",
|
|
72
|
+
kQmYQc: "xtql2tq",
|
|
73
|
+
kEdqc7: "x1xm9zrc",
|
|
74
|
+
km8f2m: "xkk1bqk",
|
|
75
|
+
ktHQil: "x1e91tbo",
|
|
76
|
+
kSdLuy: "xwrs98t",
|
|
77
|
+
ku0W4C: "x13rwrtk",
|
|
78
|
+
kLkRvE: "x1nk0e2p",
|
|
79
|
+
k3DiCg: "x19ph129",
|
|
80
|
+
kuPSpR: "xkyjh71",
|
|
81
|
+
k836YN: "xai7mxl",
|
|
82
|
+
kTP8oX: "xzr6j9d",
|
|
83
|
+
khXQ3S: "x1mz0nwo",
|
|
84
|
+
k2irxo: "xtojb3y",
|
|
85
|
+
ktNmms: "x19rx9s5",
|
|
86
|
+
kGBI9E: "x1gz1ewn",
|
|
87
|
+
ks091d: "xirquxt",
|
|
88
|
+
k9BEaU: "x1rj83xg",
|
|
89
|
+
kLSKZI: "x1gp8cmm",
|
|
90
|
+
kg8CZY: "x267z7u",
|
|
91
|
+
kgb78d: "xu7nluz",
|
|
92
|
+
kTJRYx: "xaki043",
|
|
93
|
+
kUmSqE: "x131tjkd",
|
|
94
|
+
k2L7bE: "x10hoewy",
|
|
95
|
+
krR4Wo: "x1rimih4",
|
|
96
|
+
kjBTDo: "xjmzqq9",
|
|
97
|
+
ktumvE: "xymdich",
|
|
98
|
+
kwknyK: "x1l1ofoh",
|
|
99
|
+
kSMQRv: "x1whvb6r",
|
|
100
|
+
k1cwP5: "xg5vybf",
|
|
101
|
+
k6d8aP: "x1j47n5p",
|
|
102
|
+
klC6Y0: "x11t1reg",
|
|
103
|
+
kFbLEI: "x1icymkt",
|
|
104
|
+
k5JduY: "x1s928wv",
|
|
105
|
+
kwXMNM: "x1j6awrg",
|
|
106
|
+
kDVEDD: "xi4xitw",
|
|
107
|
+
kH8cDV: "x1ggeerv",
|
|
108
|
+
k3foIR: "x3g43gi",
|
|
109
|
+
kkgrvl: "x1l8h5kv",
|
|
110
|
+
k4zj60: "x1fv2pxm",
|
|
111
|
+
kWgvks: "xx38sju",
|
|
112
|
+
k51VwD: "x8ihlwz",
|
|
113
|
+
kloYau: "x2q1x1w",
|
|
114
|
+
kMEsQN: "x1631zco",
|
|
115
|
+
kWkaDd: "x1y8idqa",
|
|
116
|
+
kU8QeM: "xwnwc82",
|
|
117
|
+
ks3ayO: "x1wb6yj0",
|
|
118
|
+
kNctxI: "x10e6nnj",
|
|
119
|
+
kgUb28: "x1d269y",
|
|
120
|
+
kakxe6: "x1pxrrzi",
|
|
121
|
+
kIWj2l: "x19crzk3",
|
|
122
|
+
kJM1pu: "x17as9s2",
|
|
123
|
+
kM2ZXO: "x54l34w",
|
|
124
|
+
kbMawA: "x1tmynux",
|
|
125
|
+
kgFEc0: "x13ob3d2",
|
|
126
|
+
kDH5la: "xbn9yse",
|
|
127
|
+
kBNLoZ: "x1icybqf",
|
|
128
|
+
kskBYc: "xk12vn8",
|
|
129
|
+
k9Mpue: "xsbnptc",
|
|
130
|
+
k6OB6z: "x1n4cxts",
|
|
131
|
+
kHSQhd: "x11at6vl",
|
|
132
|
+
kFO5lE: "x1t5rpqk",
|
|
133
|
+
kRcv9L: "x1ff385h",
|
|
134
|
+
kHi7i2: "x1tili5q",
|
|
135
|
+
kh0EW9: "xe87dmk",
|
|
136
|
+
kjCSS1: "x3sz45y",
|
|
137
|
+
kfzc6R: "x18pjm2d",
|
|
138
|
+
kc1AQg: "xa4st9h",
|
|
139
|
+
kvRJ0G: "x1tqw9ds",
|
|
140
|
+
kcGwG1: "x1pgdhoo",
|
|
141
|
+
kR8tOf: "xc4c6yy",
|
|
142
|
+
kxzRJW: "xt64kwx",
|
|
143
|
+
$$css: true
|
|
57
144
|
}
|
|
58
145
|
};
|
|
59
146
|
const sizeStyles = {
|
|
@@ -107,6 +194,18 @@ export function SegmentedControl({
|
|
|
107
194
|
...rest
|
|
108
195
|
}) {
|
|
109
196
|
const size = useSize(sizeProp, 'md');
|
|
197
|
+
// A touch device (a coarse primary pointer) gets UIKit's motion: the
|
|
198
|
+
// selection slides on a spring. Under a mouse it slides on the theme's
|
|
199
|
+
// duration and easing.
|
|
200
|
+
const isTouchPresentation = useTouchPresentation().isTouch;
|
|
201
|
+
const trackRef = useRef(null);
|
|
202
|
+
// Every pointer's press is tracked. A drag from the selected segment
|
|
203
|
+
// carries the lens, and the lift commits the segment nearest the pointer.
|
|
204
|
+
// A lift outside the control commits nothing.
|
|
205
|
+
const {
|
|
206
|
+
selection,
|
|
207
|
+
attachTrack
|
|
208
|
+
} = useSegmentedSelectionMotion(trackRef, value, isTouchPresentation, !isDisabled);
|
|
110
209
|
|
|
111
210
|
// Disabled-reason tooltip. Applies to the whole-group disabled state. The
|
|
112
211
|
// tooltip listeners attach to the radiogroup container, which keeps pointer
|
|
@@ -145,13 +244,14 @@ export function SegmentedControl({
|
|
|
145
244
|
isEnabled: !isDisabled
|
|
146
245
|
});
|
|
147
246
|
const handleContainerKeyDown = useCallback(e => {
|
|
247
|
+
selection.keyPressed();
|
|
148
248
|
onKeyDownProp?.(e);
|
|
149
249
|
if (e.defaultPrevented) {
|
|
150
250
|
return;
|
|
151
251
|
}
|
|
152
252
|
hint.onKeyDown(e);
|
|
153
253
|
handleKeyDown(e);
|
|
154
|
-
}, [onKeyDownProp, hint, handleKeyDown]);
|
|
254
|
+
}, [selection, onKeyDownProp, hint, handleKeyDown]);
|
|
155
255
|
|
|
156
256
|
// Selection-follows-focus (APG radiogroup): useListFocus only *moves* focus,
|
|
157
257
|
// so whenever it lands focus on a new radio (arrow/Home/End, or a click) we
|
|
@@ -179,6 +279,12 @@ export function SegmentedControl({
|
|
|
179
279
|
if (!e.currentTarget.contains(e.relatedTarget)) {
|
|
180
280
|
return;
|
|
181
281
|
}
|
|
282
|
+
// A mouse or pen press moves focus at pointerdown. A finger moves it
|
|
283
|
+
// after the lift, before the tap's click. The press commits through
|
|
284
|
+
// that click, so this focus move selects nothing.
|
|
285
|
+
if (selection.isPressing()) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
182
288
|
const focused = e.target?.closest('[role="radio"][data-value]');
|
|
183
289
|
if (!focused || focused.getAttribute('aria-disabled') === 'true') {
|
|
184
290
|
return;
|
|
@@ -187,19 +293,20 @@ export function SegmentedControl({
|
|
|
187
293
|
if (nextValue != null && nextValue !== value) {
|
|
188
294
|
onChange(nextValue);
|
|
189
295
|
}
|
|
190
|
-
}, [onFocusProp, hint, handleFocus, isDisabled, onChange, value]);
|
|
296
|
+
}, [onFocusProp, hint, handleFocus, isDisabled, onChange, selection, value]);
|
|
191
297
|
const contextValue = useMemo(() => ({
|
|
192
298
|
value,
|
|
193
299
|
onChange,
|
|
194
300
|
size,
|
|
195
301
|
layout,
|
|
196
302
|
isDisabled,
|
|
197
|
-
disabledReasonID: showsDisabledMessage ? disabledMessageTooltip.describedBy : undefined
|
|
198
|
-
|
|
303
|
+
disabledReasonID: showsDisabledMessage ? disabledMessageTooltip.describedBy : undefined,
|
|
304
|
+
isTouchPresentation
|
|
305
|
+
}), [value, onChange, size, layout, isDisabled, showsDisabledMessage, disabledMessageTooltip.describedBy, isTouchPresentation]);
|
|
199
306
|
return /*#__PURE__*/_jsxs(SegmentedControlContext, {
|
|
200
307
|
value: contextValue,
|
|
201
308
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
202
|
-
ref: useMergedRefs(ref, listRef, disabledMessageTooltip.ref),
|
|
309
|
+
ref: useMergedRefs(ref, listRef, trackRef, attachTrack, disabledMessageTooltip.ref),
|
|
203
310
|
...rest,
|
|
204
311
|
role: "radiogroup",
|
|
205
312
|
"aria-label": label,
|
|
@@ -212,7 +319,7 @@ export function SegmentedControl({
|
|
|
212
319
|
onBlur: composeEventHandlers(onBlurProp, hint.onBlur),
|
|
213
320
|
...mergeProps(themeProps('segmented-control', {
|
|
214
321
|
size
|
|
215
|
-
}), stylex.props(styles.container, sizeStyles[size], layout === 'fill' && styles.fill, isDisabled && styles.disabled, xstyle), className, style),
|
|
322
|
+
}), stylex.props(styles.container, sizeStyles[size], layout === 'fill' && styles.fill, (isTouchPresentation || !isDisabled) && styles.lens, isDisabled && styles.disabled, xstyle), className, style),
|
|
216
323
|
children: [children, hint.hintElement]
|
|
217
324
|
}), showsDisabledMessage && disabledMessageTooltip.renderTooltip(disabledMessage)]
|
|
218
325
|
});
|
|
@@ -12,6 +12,12 @@ export interface SegmentedControlContextValue {
|
|
|
12
12
|
* described by the reason (spec:AST-085 FR5).
|
|
13
13
|
*/
|
|
14
14
|
disabledReasonID?: string;
|
|
15
|
+
/**
|
|
16
|
+
* True in the touch presentation (under a finger, `useTouchPresentation`):
|
|
17
|
+
* the control animates selection changes itself (the surface slides), so
|
|
18
|
+
* segments drop their CSS transitions.
|
|
19
|
+
*/
|
|
20
|
+
isTouchPresentation?: boolean;
|
|
15
21
|
}
|
|
16
22
|
export declare const SegmentedControlContext: import("react").Context<SegmentedControlContextValue | null>;
|
|
17
23
|
export declare function useSegmentedControlContext(): SegmentedControlContextValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControlContext.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControlContext.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SegmentedControlContext.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControlContext.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,uBAAuB,8DACsB,CAAC;AAG3D,wBAAgB,0BAA0B,IAAI,4BAA4B,CASzE"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* @position Child item; renders as a radio button within the segmented control
|
|
6
6
|
*
|
|
7
7
|
* SYNC: When modified, update:
|
|
8
|
+
* - /packages/core/src/SegmentedControl/useSegmentedSelectionMotion.ts (the title marker)
|
|
8
9
|
* - /packages/core/src/SegmentedControl/SegmentedControl.doc.mjs
|
|
9
10
|
* - /packages/core/src/SegmentedControl/index.ts
|
|
10
11
|
* - /packages/core/src/SegmentedControl/SegmentedControl.test.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControlItem.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControlItem.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"SegmentedControlItem.d.ts","sourceRoot":"","sources":["../../src/SegmentedControl/SegmentedControlItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAkB5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,MAAM,WAAW,yBAA0B,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC7E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAsHD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAqB,EACrB,IAAI,EACJ,UAAkB,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EACN,kBAAkB,EAAE,mBAAmB,EACvC,GAAG,IAAI,EACR,EAAE,yBAAyB,qBA8E3B;yBAzFe,oBAAoB"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* @position Child item; renders as a radio button within the segmented control
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update:
|
|
12
|
+
* - /packages/core/src/SegmentedControl/useSegmentedSelectionMotion.ts (the title marker)
|
|
12
13
|
* - /packages/core/src/SegmentedControl/SegmentedControl.doc.mjs
|
|
13
14
|
* - /packages/core/src/SegmentedControl/index.ts
|
|
14
15
|
* - /packages/core/src/SegmentedControl/SegmentedControl.test.tsx
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
import React from 'react';
|
|
18
19
|
import { joinAriaIDs } from "../utils/inputAria.js";
|
|
19
20
|
import { segmentDisabledProps } from "../privateAttributes/segmentDisabled.stylex.js";
|
|
21
|
+
import { segmentTitleProps } from "../privateAttributes/segmentTitle.stylex.js";
|
|
20
22
|
import * as stylex from '@stylexjs/stylex';
|
|
21
23
|
import "../theme/tokens.stylex.js";
|
|
22
24
|
import { colorVars, spacingVars, sizeVars, durationVars, easeVars, fontWeightVars, shadowVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
@@ -85,6 +87,10 @@ const styles = {
|
|
|
85
87
|
kjj79g: "xl56j7k",
|
|
86
88
|
kmuXW: "x2lah0s",
|
|
87
89
|
$$css: true
|
|
90
|
+
},
|
|
91
|
+
touchPresentation: {
|
|
92
|
+
k1ekBW: "x13b0p5u",
|
|
93
|
+
$$css: true
|
|
88
94
|
}
|
|
89
95
|
};
|
|
90
96
|
const CONCENTRIC_RADIUS = 'max(0px, calc(var(--_segmented-control-radius) - var(--_segmented-control-padding)))';
|
|
@@ -198,8 +204,9 @@ export function SegmentedControlItem({
|
|
|
198
204
|
}), focusOutlineProps.focusVisible(styles.base, sizeStyles[size], isFill && styles.fill, isLabelHidden && styles.iconOnly, isSelected && styles.selected,
|
|
199
205
|
// The shared hover and pressed overlay, on the segments a press can
|
|
200
206
|
// change: the selected segment keeps its raised surface as it is.
|
|
201
|
-
!isSelected && !isItemDisabled && interactionOverlayStyles.backgroundColor, isItemDisabled && styles.disabled, xstyle)),
|
|
207
|
+
!isSelected && !isItemDisabled && interactionOverlayStyles.backgroundColor, isItemDisabled && styles.disabled, ctx.isTouchPresentation === true && styles.touchPresentation, xstyle)),
|
|
202
208
|
children: [iconElement, !isLabelHidden && /*#__PURE__*/_jsx("span", {
|
|
209
|
+
...segmentTitleProps,
|
|
203
210
|
...{
|
|
204
211
|
className: "xb3r6kr xlyipyv xeuugli"
|
|
205
212
|
},
|