@astryxdesign/core 0.7.7 → 0.7.8-canary.36cde5e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog/AlertDialog.d.ts +4 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +46 -6
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +5 -0
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +1 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +25 -4
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
- package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
- package/dist/BottomSheet/useMobileKeyboard.js +6 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +12 -1
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +17 -1
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +15 -16
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +2 -0
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +4 -0
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +2 -1
- package/dist/Chat/useChatDictation.d.ts.map +1 -1
- package/dist/Chat/useChatDictation.js +2 -0
- package/dist/Chat/useChatNewMessages.js +1 -1
- package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
- package/dist/Chat/useChatStreamScroll.js +2 -0
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +3 -0
- package/dist/Chat/useTriggerMenu.js +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +17 -12
- package/dist/CodeBlock/CodeBlock.d.ts +10 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +28 -11
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +2 -0
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +14 -4
- package/dist/ContextMenu/ContextMenu.js +2 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +5 -2
- package/dist/DateInput/PickerWheel.d.ts +19 -0
- package/dist/DateInput/PickerWheel.d.ts.map +1 -0
- package/dist/DateInput/PickerWheel.js +625 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +1 -0
- package/dist/DateInput/Wheel.d.ts +18 -37
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +84 -113
- package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
- package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
- package/dist/DateInput/useOwnScrollGesture.js +16 -3
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
- package/dist/DateInput/usePointerDragScroll.js +2 -0
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
- package/dist/DateInput/useScrollSettle.js +3 -0
- package/dist/DateInput/useWheelListbox.d.ts +59 -0
- package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
- package/dist/DateInput/useWheelListbox.js +88 -0
- package/dist/DateInput/wheelOptions.d.ts +74 -0
- package/dist/DateInput/wheelOptions.d.ts.map +1 -0
- package/dist/DateInput/wheelOptions.js +98 -0
- package/dist/DateInput/wheelPhysics.d.ts +127 -0
- package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
- package/dist/DateInput/wheelPhysics.js +341 -0
- package/dist/DateInput/wheelStrip.d.ts +92 -0
- package/dist/DateInput/wheelStrip.d.ts.map +1 -0
- package/dist/DateInput/wheelStrip.js +258 -0
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +2 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +9 -32
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +3 -0
- package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
- package/dist/DropdownMenu/useMenuOverflow.js +5 -0
- package/dist/Field/Field.js +2 -2
- package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
- package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
- package/dist/FormLayout/FormLayout.d.ts +5 -1
- package/dist/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.d.ts +6 -4
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +48 -3
- package/dist/HoverCard/useHoverCard.d.ts +5 -4
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +20 -33
- package/dist/Icon/Icon.d.ts +5 -1
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +5 -2
- package/dist/Item/useSwipeAction.d.ts.map +1 -1
- package/dist/Item/useSwipeAction.js +3 -0
- package/dist/Layer/modalOutlet.d.ts.map +1 -1
- package/dist/Layer/modalOutlet.js +2 -0
- package/dist/Layer/outsidePress.d.ts.map +1 -1
- package/dist/Layer/outsidePress.js +1 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +3 -0
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +3 -0
- package/dist/Layer/usePressPin.d.ts +17 -5
- package/dist/Layer/usePressPin.d.ts.map +1 -1
- package/dist/Layer/usePressPin.js +62 -12
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +3 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +19 -0
- package/dist/MobileNav/MobileNav.d.ts +3 -2
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +9 -25
- package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromDOM.js +3 -0
- package/dist/Outline/useScrollSpy.d.ts.map +1 -1
- package/dist/Outline/useScrollSpy.js +3 -0
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +3 -0
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +6 -0
- package/dist/PowerSearch/PowerSearch.d.ts +43 -4
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +445 -134
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +25 -6
- package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
- package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +7 -2
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +193 -83
- package/dist/PowerSearch/formatFilterValue.d.ts +18 -6
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +33 -12
- package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
- package/dist/PowerSearch/formatTokenValue.js +162 -0
- package/dist/PowerSearch/powerSearchDateZone.d.ts +21 -0
- package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
- package/dist/PowerSearch/powerSearchDateZone.js +37 -0
- package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
- package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
- package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
- package/dist/PowerSearch/types.d.ts +2 -0
- package/dist/PowerSearch/types.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBarTouch.js +2 -0
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +3 -2
- package/dist/RadioList/RadioListItem.d.ts +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +5 -3
- package/dist/Resizable/ResizeHandle.d.ts +2 -1
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +101 -77
- package/dist/Resizable/createResizable.d.ts +145 -0
- package/dist/Resizable/createResizable.d.ts.map +1 -0
- package/dist/Resizable/createResizable.js +575 -0
- package/dist/Resizable/useResizable.d.ts +3 -3
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +252 -459
- package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
- package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
- package/dist/SelectableCard/SelectableCard.d.ts +2 -0
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +36 -11
- package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
- package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
- package/dist/SelectableCard/selectableCardInput.js +20 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +5 -8
- package/dist/Slider/sliderTouchController.js +2 -2
- package/dist/Spinner/Spinner.d.ts +1 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +60 -58
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +4 -10
- package/dist/Switch/useSwitchTouch.js +4 -4
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +29 -8
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
- package/dist/TextInput/TextInput.d.ts +2 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +10 -7
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +2 -0
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +2 -0
- package/dist/Timer/Timer.d.ts.map +1 -1
- package/dist/Timer/Timer.js +2 -0
- package/dist/Timestamp/Timestamp.js +1 -1
- package/dist/Toast/Toast.d.ts +11 -1
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +25 -15
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +97 -34
- package/dist/Toast/types.d.ts +9 -3
- package/dist/Toast/types.d.ts.map +1 -1
- package/dist/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +1 -0
- package/dist/Tokenizer/Tokenizer.d.ts +49 -37
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +22 -19
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +1 -1
- package/dist/Tokenizer/index.d.ts +1 -1
- package/dist/Tokenizer/index.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +19 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +34 -53
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +27 -18
- package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/animator/createAnimator.d.ts +98 -0
- package/dist/animator/createAnimator.d.ts.map +1 -0
- package/dist/animator/createAnimator.js +259 -0
- package/dist/astryx.css +39 -6
- package/dist/gestures/GestureHost.d.ts +16 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +1 -1
- package/dist/gestures/PressTracker.d.ts.map +1 -1
- package/dist/gestures/PressTracker.js +4 -3
- package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
- package/dist/hooks/ModalAnnounceProvider.js +1 -0
- package/dist/hooks/actionGroupTracker.d.ts +4 -1
- package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
- package/dist/hooks/actionGroupTracker.js +13 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/longPressDetector.d.ts +66 -0
- package/dist/hooks/longPressDetector.d.ts.map +1 -0
- package/dist/hooks/longPressDetector.js +200 -0
- package/dist/hooks/pressGroupContext.d.ts +6 -0
- package/dist/hooks/pressGroupContext.d.ts.map +1 -0
- package/dist/hooks/pressGroupContext.js +20 -0
- package/dist/hooks/rootScrollStyles.d.ts +48 -0
- package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
- package/dist/hooks/rootScrollStyles.js +207 -0
- package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
- package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
- package/dist/hooks/scrollLockTouchGuard.js +134 -0
- package/dist/hooks/scrollbarGutter.d.ts +4 -4
- package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
- package/dist/hooks/scrollbarGutter.js +36 -23
- package/dist/hooks/useActionGroupTracking.d.ts +53 -0
- package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
- package/dist/hooks/useActionGroupTracking.js +174 -0
- package/dist/hooks/useAnimator.d.ts +41 -0
- package/dist/hooks/useAnimator.d.ts.map +1 -0
- package/dist/hooks/useAnimator.js +70 -0
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +1 -0
- package/dist/hooks/useAttachment.d.ts +1 -1
- package/dist/hooks/useAttachment.js +1 -1
- package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
- package/dist/hooks/useAutoMediaMode.js +1 -0
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +2 -0
- package/dist/hooks/useDevWarning.d.ts.map +1 -1
- package/dist/hooks/useDevWarning.js +2 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +2 -0
- package/dist/hooks/useGridFocus.d.ts +8 -5
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +4 -3
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -0
- package/dist/hooks/useImageMode.d.ts.map +1 -1
- package/dist/hooks/useImageMode.js +3 -0
- package/dist/hooks/useInputStatusIcon.d.ts +1 -1
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +2 -2
- package/dist/hooks/useKeyboardHint.js +1 -1
- package/dist/hooks/useLongPress.d.ts +8 -9
- package/dist/hooks/useLongPress.d.ts.map +1 -1
- package/dist/hooks/useLongPress.js +23 -106
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +2 -0
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +3 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +2 -1
- package/dist/hooks/usePressFeedback.d.ts.map +1 -1
- package/dist/hooks/usePressFeedback.js +1 -0
- package/dist/hooks/useResolvedRequired.d.ts +3 -0
- package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
- package/dist/hooks/useResolvedRequired.js +3 -0
- package/dist/hooks/useScrollLock.d.ts +7 -9
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +55 -48
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +5 -0
- package/dist/hooks/useStreamingText.d.ts.map +1 -1
- package/dist/hooks/useStreamingText.js +3 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +30 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/internal/indicatorPress.stylex.d.ts +20 -0
- package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
- package/dist/internal/indicatorPress.stylex.js +26 -0
- package/dist/internal/selectable-card.d.ts +21 -0
- package/dist/internal/selectable-card.d.ts.map +1 -0
- package/dist/internal/selectable-card.js +20 -0
- package/dist/internal/sheetDraft.d.ts +2 -2
- package/dist/internal/sheetDraft.js +2 -2
- package/dist/motion/animatedLayout.d.ts.map +1 -1
- package/dist/motion/animatedLayout.js +7 -7
- package/dist/motion/animator.d.ts +14 -14
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +45 -20
- package/dist/motion/progress.d.ts +88 -0
- package/dist/motion/progress.d.ts.map +1 -0
- package/dist/motion/progress.js +128 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +3 -1
- package/dist/motion/uikit/alert.d.ts +41 -0
- package/dist/motion/uikit/alert.d.ts.map +1 -0
- package/dist/motion/uikit/alert.js +43 -0
- package/dist/motion/uikit/index.d.ts +4 -3
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +4 -3
- package/dist/motion/uikit/picker.d.ts +96 -0
- package/dist/motion/uikit/picker.d.ts.map +1 -0
- package/dist/motion/uikit/picker.js +117 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
- package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
- package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
- package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +29 -4
- package/dist/theme/motionKnobs.d.ts +4 -3
- package/dist/theme/motionKnobs.d.ts.map +1 -1
- package/dist/theme/motionKnobs.js +3 -2
- package/dist/theme/themeMotion.d.ts +6 -0
- package/dist/theme/themeMotion.d.ts.map +1 -1
- package/dist/theme/themeMotion.js +7 -0
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +12 -0
- package/dist/utils/focusReturn.d.ts +15 -0
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +28 -0
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +4 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +3 -2
- package/dist/utils/plainDate.d.ts +8 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +19 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -6
- package/dist/utils/triggerFocus.d.ts +36 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -0
- package/dist/utils/triggerFocus.js +65 -0
- package/locales/en.json +120 -0
- package/locales/pseudo.json +90 -0
- package/package.json +14 -9
- package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
- package/src/AlertDialog/AlertDialog.tsx +46 -5
- package/src/AppShell/AppShell.tsx +4 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
- package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
- package/src/BottomSheet/useMobileKeyboard.ts +4 -0
- package/src/BottomSheet/useSheetGestures.ts +10 -1
- package/src/Button/Button.tsx +26 -4
- package/src/Calendar/Calendar.tsx +36 -25
- package/src/Carousel/Carousel.tsx +1 -0
- package/src/Chat/ChatComposerInput.tsx +2 -0
- package/src/Chat/ChatMessageList.tsx +2 -1
- package/src/Chat/useChatDictation.ts +1 -0
- package/src/Chat/useChatNewMessages.ts +1 -1
- package/src/Chat/useChatStreamScroll.ts +2 -0
- package/src/Chat/useSpeechRecognition.ts +2 -0
- package/src/Chat/useTriggerMenu.tsx +1 -1
- package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
- package/src/CheckboxInput/CheckboxInput.tsx +38 -15
- package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
- package/src/CodeBlock/CodeBlock.tsx +41 -4
- package/src/CommandPalette/CommandPalette.tsx +1 -0
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
- package/src/ComplexSelector/ComplexSelector.tsx +20 -5
- package/src/ContextMenu/ContextMenu.tsx +2 -2
- package/src/DateInput/MonthScroller.tsx +8 -2
- package/src/DateInput/PickerWheel.tsx +765 -0
- package/src/DateInput/TouchDateField.tsx +1 -0
- package/src/DateInput/Wheel.tsx +94 -150
- package/src/DateInput/useOwnScrollGesture.ts +25 -3
- package/src/DateInput/usePointerDragScroll.ts +1 -0
- package/src/DateInput/useScrollSettle.ts +2 -0
- package/src/DateInput/useWheelListbox.ts +112 -0
- package/src/DateInput/wheelOptions.ts +155 -0
- package/src/DateInput/wheelPhysics.ts +406 -0
- package/src/DateInput/wheelStrip.ts +341 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +2 -0
- package/src/Dialog/Dialog.tsx +12 -32
- package/src/Drawer/useDrawerDialogPresence.ts +2 -0
- package/src/DropdownMenu/useMenuOverflow.ts +3 -0
- package/src/Field/Field.tsx +2 -2
- package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
- package/src/FormLayout/FormLayout.doc.mjs +181 -46
- package/src/FormLayout/FormLayout.tsx +5 -1
- package/src/HoverCard/HoverCard.doc.mjs +10 -8
- package/src/HoverCard/HoverCard.tsx +58 -6
- package/src/HoverCard/useHoverCard.doc.mjs +178 -36
- package/src/HoverCard/useHoverCard.tsx +49 -54
- package/src/Icon/Icon.doc.mjs +49 -8
- package/src/Icon/Icon.tsx +15 -7
- package/src/IconButton/IconButton.doc.mjs +141 -21
- package/src/Item/useSwipeAction.ts +2 -0
- package/src/Layer/modalOutlet.ts +2 -0
- package/src/Layer/outsidePress.ts +1 -0
- package/src/Layer/useLayer.tsx +2 -0
- package/src/Layer/useLayerDismissal.ts +2 -0
- package/src/Layer/usePressPin.ts +81 -15
- package/src/Layer/useTouchTrigger.ts +2 -0
- package/src/Lightbox/Lightbox.tsx +19 -0
- package/src/MobileNav/MobileNav.tsx +9 -30
- package/src/Outline/useOutlineFromDOM.ts +2 -0
- package/src/Outline/useScrollSpy.ts +2 -0
- package/src/OverflowList/OverflowList.tsx +2 -0
- package/src/Popover/Popover.tsx +4 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
- package/src/PowerSearch/PowerSearch.tsx +627 -157
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +39 -6
- package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
- package/src/PowerSearch/PowerSearchToken.tsx +7 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +244 -58
- package/src/PowerSearch/formatFilterValue.ts +55 -17
- package/src/PowerSearch/formatTokenValue.ts +222 -0
- package/src/PowerSearch/powerSearchDateZone.ts +64 -0
- package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
- package/src/PowerSearch/types.ts +2 -0
- package/src/ProgressBar/ProgressBarTouch.ts +2 -0
- package/src/RadioList/RadioList.tsx +3 -2
- package/src/RadioList/RadioListItem.tsx +5 -3
- package/src/Resizable/Resizable.doc.mjs +5 -4
- package/src/Resizable/ResizeHandle.tsx +169 -109
- package/src/Resizable/createResizable.ts +831 -0
- package/src/Resizable/useResizable.ts +292 -623
- package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
- package/src/SelectableCard/SelectableCard.tsx +39 -10
- package/src/SelectableCard/selectableCardInput.ts +30 -0
- package/src/Selector/Selector.tsx +5 -12
- package/src/Slider/sliderTouchController.ts +2 -2
- package/src/Spinner/Spinner.tsx +77 -63
- package/src/Switch/Switch.tsx +2 -6
- package/src/Switch/useSwitchTouch.ts +4 -4
- package/src/Table/BaseTable.tsx +46 -12
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
- package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
- package/src/TextInput/TextInput.tsx +11 -10
- package/src/TimeInput/TimeInput.tsx +2 -0
- package/src/TimeInput/TouchTimeField.tsx +2 -0
- package/src/Timer/Timer.tsx +1 -0
- package/src/Timestamp/Timestamp.tsx +1 -1
- package/src/Toast/Toast.doc.mjs +4 -3
- package/src/Toast/Toast.tsx +52 -32
- package/src/Toast/ToastViewport.tsx +123 -35
- package/src/Toast/types.ts +9 -3
- package/src/Toast/useToast.tsx +1 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +19 -3
- package/src/Tokenizer/Tokenizer.tsx +73 -51
- package/src/Tokenizer/TokenizerBottomSheet.tsx +1 -1
- package/src/Tokenizer/index.ts +1 -0
- package/src/Tooltip/useTooltip.doc.mjs +24 -0
- package/src/Tooltip/useTooltip.tsx +61 -56
- package/src/Typeahead/BaseTypeahead.tsx +27 -17
- package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
- package/src/Typeahead/TypeaheadItem.tsx +2 -1
- package/src/animator/createAnimator.doc.mjs +153 -0
- package/src/animator/createAnimator.ts +324 -0
- package/src/gestures/GestureHost.ts +1 -1
- package/src/gestures/PressTracker.ts +4 -3
- package/src/gestures/README.md +10 -4
- package/src/hooks/ModalAnnounceProvider.tsx +1 -0
- package/src/hooks/actionGroupTracker.ts +20 -5
- package/src/hooks/index.ts +2 -0
- package/src/hooks/longPressDetector.ts +273 -0
- package/src/hooks/pressGroupContext.ts +21 -0
- package/src/hooks/rootScrollStyles.ts +247 -0
- package/src/hooks/scrollLockTouchGuard.ts +182 -0
- package/src/hooks/scrollbarGutter.ts +41 -26
- package/src/hooks/useActionGroupTracking.ts +224 -0
- package/src/hooks/useAnimator.doc.mjs +109 -0
- package/src/hooks/useAnimator.ts +67 -0
- package/src/hooks/useAnnounceRenderedText.ts +1 -0
- package/src/hooks/useAttachment.ts +1 -1
- package/src/hooks/useAutoMediaMode.ts +1 -0
- package/src/hooks/useBusyAnnouncement.ts +2 -0
- package/src/hooks/useDevWarning.ts +2 -0
- package/src/hooks/useFocusTrap.ts +2 -0
- package/src/hooks/useGridFocus.doc.mjs +6 -6
- package/src/hooks/useGridFocus.ts +10 -7
- package/src/hooks/useHotkeys.ts +2 -0
- package/src/hooks/useImageMode.ts +2 -0
- package/src/hooks/useInputStatusIcon.tsx +3 -2
- package/src/hooks/useKeyboardHint.tsx +1 -1
- package/src/hooks/useLongPress.doc.mjs +2 -2
- package/src/hooks/useLongPress.ts +32 -122
- package/src/hooks/useMenuHover.ts +1 -0
- package/src/hooks/useMenuPress.ts +2 -0
- package/src/hooks/useOverflow.ts +2 -1
- package/src/hooks/usePressFeedback.ts +1 -0
- package/src/hooks/useResolvedRequired.ts +3 -0
- package/src/hooks/useScrollLock.doc.mjs +51 -12
- package/src/hooks/useScrollLock.ts +57 -60
- package/src/hooks/useScrollableArea.ts +4 -0
- package/src/hooks/useStreamingText.ts +2 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
- package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
- package/src/i18n/generated-locales/en.generated.ts +41 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
- package/src/index.ts +13 -0
- package/src/internal/indicatorPress.stylex.ts +24 -0
- package/src/internal/selectable-card.ts +21 -0
- package/src/internal/sheetDraft.ts +2 -2
- package/src/motion/MEASUREMENTS.md +18 -0
- package/src/motion/README.md +10 -5
- package/src/motion/animatedLayout.ts +10 -5
- package/src/motion/animator.ts +66 -31
- package/src/motion/progress.ts +155 -0
- package/src/motion/reducedMotion.ts +3 -1
- package/src/motion/uikit/alert.ts +43 -0
- package/src/motion/uikit/index.ts +4 -3
- package/src/motion/uikit/picker.ts +116 -0
- package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
- package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
- package/src/theme/Theme.tsx +37 -3
- package/src/theme/motionKnobs.ts +4 -3
- package/src/theme/themeMotion.ts +7 -0
- package/src/utils/dateParser.ts +16 -0
- package/src/utils/focusReturn.ts +30 -0
- package/src/utils/interactionModality.ts +4 -0
- package/src/utils/interactionOverlay.stylex.ts +3 -2
- package/src/utils/plainDate.ts +21 -0
- package/src/utils/pressFeedback.ts +24 -6
- package/src/utils/triggerFocus.ts +80 -0
- package/dist/internal/touch-sheet.d.ts +0 -21
- package/dist/internal/touch-sheet.d.ts.map +0 -1
- package/dist/internal/touch-sheet.js +0 -19
- package/src/internal/touch-sheet.ts +0 -21
|
@@ -1,48 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
value: number;
|
|
4
|
-
/** Row text. */
|
|
5
|
-
label: string;
|
|
6
|
-
/**
|
|
7
|
-
* Rows outside min/max stay visible but cannot be committed: a wheel that
|
|
8
|
-
* stops on one travels on to the nearest enabled row.
|
|
9
|
-
*/
|
|
10
|
-
isDisabled?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface WheelProps {
|
|
13
|
-
/** Accessible name for the column, e.g. "Month". */
|
|
14
|
-
label: string;
|
|
15
|
-
/** Rows, top to bottom. */
|
|
16
|
-
options: ReadonlyArray<WheelOption>;
|
|
17
|
-
/** Committed value; must match one option's `value`. */
|
|
18
|
-
value: number;
|
|
19
|
-
/** Fired when the wheel comes to rest on a different, enabled row. */
|
|
20
|
-
onChange: (value: number) => void;
|
|
21
|
-
/**
|
|
22
|
-
* False while the wheel is hidden — scroll offsets of a display:none
|
|
23
|
-
* scroller are meaningless, so listeners and the initial scroll wait.
|
|
24
|
-
*/
|
|
25
|
-
isActive?: boolean;
|
|
26
|
-
}
|
|
1
|
+
import { type WheelProps } from './wheelOptions.js';
|
|
2
|
+
export { nearestEnabledIndex, type WheelOption, type WheelProps, } from './wheelOptions.js';
|
|
27
3
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* `towardIndex` (the committed row), and a wheel with no enabled row stays on
|
|
31
|
-
* `towardIndex`.
|
|
4
|
+
* One picker column: UIPickerView's motion with flat rows under a finger, the
|
|
5
|
+
* snap-scrolling column under a fine pointer.
|
|
32
6
|
*
|
|
33
7
|
* @example
|
|
34
8
|
* ```
|
|
35
|
-
*
|
|
36
|
-
*
|
|
9
|
+
* <Wheel
|
|
10
|
+
* label="Month"
|
|
11
|
+
* options={monthOptions}
|
|
12
|
+
* value={month}
|
|
13
|
+
* onChange={setMonth}
|
|
14
|
+
* />
|
|
37
15
|
* ```
|
|
38
16
|
*/
|
|
39
|
-
export declare function
|
|
17
|
+
export declare function Wheel(props: WheelProps): import("react").JSX.Element;
|
|
18
|
+
export declare namespace Wheel {
|
|
19
|
+
var displayName: string;
|
|
20
|
+
}
|
|
40
21
|
/**
|
|
41
|
-
* One snap-scrolling picker column.
|
|
22
|
+
* One snap-scrolling picker column, under a fine pointer.
|
|
42
23
|
*
|
|
43
24
|
* @example
|
|
44
25
|
* ```
|
|
45
|
-
* <
|
|
26
|
+
* <ScrollWheel
|
|
46
27
|
* label="Month"
|
|
47
28
|
* options={monthOptions}
|
|
48
29
|
* value={month}
|
|
@@ -50,8 +31,8 @@ export declare function nearestEnabledIndex(options: ReadonlyArray<WheelOption>,
|
|
|
50
31
|
* />
|
|
51
32
|
* ```
|
|
52
33
|
*/
|
|
53
|
-
export declare function
|
|
54
|
-
export declare namespace
|
|
34
|
+
export declare function ScrollWheel({ label, options, value, onChange, isActive, }: WheelProps): import("react").JSX.Element;
|
|
35
|
+
export declare namespace ScrollWheel {
|
|
55
36
|
var displayName: string;
|
|
56
37
|
}
|
|
57
38
|
//# sourceMappingURL=Wheel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/Wheel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/Wheel.tsx"],"names":[],"mappings":"AAoDA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AA6JxB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,+BAKtC;yBALe,KAAK;;;AASrB;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,GAChB,EAAE,UAAU,+BA6TZ;yBAnUe,WAAW"}
|
package/dist/DateInput/Wheel.js
CHANGED
|
@@ -4,51 +4,45 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file Wheel.tsx
|
|
7
|
-
* @input Option list, selected value
|
|
8
|
-
* @output Exports Wheel
|
|
9
|
-
*
|
|
7
|
+
* @input Option list, selected value and change callback
|
|
8
|
+
* @output Exports Wheel (one picker column), ScrollWheel (the scrolling
|
|
9
|
+
* column) and the shared types of wheelOptions.ts
|
|
10
|
+
* @position Internal component; consumed by MonthYearWheels.tsx,
|
|
11
|
+
* TouchTimeField.tsx and TouchDateTimeField.tsx
|
|
10
12
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* is
|
|
14
|
-
* each end so the first and last option can reach the middle, and a commit
|
|
15
|
-
* when the scrolling stops and no finger or mouse drag still holds it.
|
|
13
|
+
* Wheel picks its column by the primary pointer. Under a finger it is
|
|
14
|
+
* PickerWheel.tsx, the touch layer, imported here alone. Under a fine pointer
|
|
15
|
+
* it is the snap-scrolling column below.
|
|
16
16
|
*
|
|
17
|
-
* The
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* finger with no JS in the frame loop. It is guarded by `@supports`, because a
|
|
21
|
-
* browser that does not understand `animation-timeline` would otherwise run
|
|
22
|
-
* the same keyframes on the document timeline and simply play them once.
|
|
23
|
-
*
|
|
24
|
-
* Under Reduce Motion, the wheel's own scrolls (a step from a key or a click,
|
|
25
|
-
* the travel to the nearest enabled row) land without travel. They cross-fade
|
|
26
|
-
* on a touch screen and land at once otherwise. A finger's scroll and its
|
|
27
|
-
* momentum stay the platform's.
|
|
28
|
-
*
|
|
29
|
-
* Accessibility: this is a listbox, not a novel widget. It is one tab stop
|
|
30
|
-
* with arrow/Home/End/PageUp/PageDown keys, `aria-activedescendant` tracking
|
|
31
|
-
* the active row, and every row reachable by tap — none of which depends on
|
|
32
|
-
* the scroll-driven decoration.
|
|
17
|
+
* The scrolling column is a scroll container: momentum, rubber-banding and the
|
|
18
|
+
* settle are the platform's. Its rows fade and tip on a CSS `view()` timeline,
|
|
19
|
+
* behind `@supports`. Under Reduce Motion its own scrolls land without travel.
|
|
33
20
|
*
|
|
34
21
|
* SYNC: When modified, update:
|
|
22
|
+
* - /packages/core/src/DateInput/PickerWheel.tsx (the touch column)
|
|
23
|
+
* - /packages/core/src/DateInput/wheelOptions.ts
|
|
35
24
|
* - /packages/core/src/DateInput/TouchDateField.tsx
|
|
36
25
|
* - /packages/core/src/DateTimeInput/TouchDateTimeField.tsx
|
|
37
26
|
* - /packages/core/src/DateInput/DateInput.doc.mjs
|
|
38
27
|
* - /packages/core/src/DateInput/DateInputTouch.test.tsx
|
|
39
28
|
*/
|
|
40
|
-
import { useCallback, useEffect,
|
|
29
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
41
30
|
import * as stylex from '@stylexjs/stylex';
|
|
42
31
|
import "../theme/tokens.stylex.js";
|
|
43
32
|
import { colorVars, radiusVars, fontWeightVars, typeScaleVars, spacingVars, durationVars } from "../theme/tokens.stylex.js";
|
|
44
33
|
import { focusOutlineStyles } from "../utils/index.js";
|
|
45
34
|
import { playReducedMotionDip, reducedMotionFade } from "../motion/reducedMotion.js";
|
|
35
|
+
import { useTouchPresentation } from "../utils/touchPresentation.js";
|
|
36
|
+
import { PickerWheel } from "./PickerWheel.js";
|
|
46
37
|
import "./tokens.stylex.js";
|
|
47
38
|
import { dateInputTouchSizes, dateInputTouchGeometry } from "./tokens.stylex.js";
|
|
48
39
|
import { useOwnScrollGesture } from "./useOwnScrollGesture.js";
|
|
49
40
|
import { usePointerDragScroll } from "./usePointerDragScroll.js";
|
|
50
41
|
import { useScrollSettle } from "./useScrollSettle.js";
|
|
42
|
+
import { useWheelListbox } from "./useWheelListbox.js";
|
|
43
|
+
import { endIndex, nearestEnabledIndex, steppedIndex } from "./wheelOptions.js";
|
|
51
44
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
45
|
+
export { nearestEnabledIndex } from "./wheelOptions.js";
|
|
52
46
|
const ITEM_BLOCK_SIZE = dateInputTouchSizes.wheelItemSize;
|
|
53
47
|
|
|
54
48
|
/**
|
|
@@ -78,47 +72,41 @@ const styles = {
|
|
|
78
72
|
$$css: true
|
|
79
73
|
}
|
|
80
74
|
};
|
|
75
|
+
|
|
81
76
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* `towardIndex` (the committed row), and a wheel with no enabled row stays on
|
|
85
|
-
* `towardIndex`.
|
|
77
|
+
* One picker column: UIPickerView's motion with flat rows under a finger, the
|
|
78
|
+
* snap-scrolling column under a fine pointer.
|
|
86
79
|
*
|
|
87
80
|
* @example
|
|
88
81
|
* ```
|
|
89
|
-
*
|
|
90
|
-
*
|
|
82
|
+
* <Wheel
|
|
83
|
+
* label="Month"
|
|
84
|
+
* options={monthOptions}
|
|
85
|
+
* value={month}
|
|
86
|
+
* onChange={setMonth}
|
|
87
|
+
* />
|
|
91
88
|
* ```
|
|
92
89
|
*/
|
|
93
|
-
export function
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return towardIndex < index ? below : above;
|
|
105
|
-
}
|
|
106
|
-
if (isBelowEnabled) {
|
|
107
|
-
return below;
|
|
108
|
-
}
|
|
109
|
-
if (isAboveEnabled) {
|
|
110
|
-
return above;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return towardIndex;
|
|
90
|
+
export function Wheel(props) {
|
|
91
|
+
// One touch model on every touch device: a finger gets UIPickerView's motion
|
|
92
|
+
// with flat rows, a fine pointer the scrolling column.
|
|
93
|
+
const {
|
|
94
|
+
isTouch
|
|
95
|
+
} = useTouchPresentation();
|
|
96
|
+
return isTouch ? /*#__PURE__*/_jsx(PickerWheel, {
|
|
97
|
+
...props
|
|
98
|
+
}) : /*#__PURE__*/_jsx(ScrollWheel, {
|
|
99
|
+
...props
|
|
100
|
+
});
|
|
114
101
|
}
|
|
102
|
+
Wheel.displayName = 'Wheel';
|
|
115
103
|
|
|
116
104
|
/**
|
|
117
|
-
* One snap-scrolling picker column.
|
|
105
|
+
* One snap-scrolling picker column, under a fine pointer.
|
|
118
106
|
*
|
|
119
107
|
* @example
|
|
120
108
|
* ```
|
|
121
|
-
* <
|
|
109
|
+
* <ScrollWheel
|
|
122
110
|
* label="Month"
|
|
123
111
|
* options={monthOptions}
|
|
124
112
|
* value={month}
|
|
@@ -126,14 +114,13 @@ export function nearestEnabledIndex(options, index, towardIndex) {
|
|
|
126
114
|
* />
|
|
127
115
|
* ```
|
|
128
116
|
*/
|
|
129
|
-
export function
|
|
117
|
+
export function ScrollWheel({
|
|
130
118
|
label,
|
|
131
119
|
options,
|
|
132
120
|
value,
|
|
133
121
|
onChange,
|
|
134
122
|
isActive = true
|
|
135
123
|
}) {
|
|
136
|
-
const id = useId();
|
|
137
124
|
const scrollerRef = useRef(null);
|
|
138
125
|
const selectedIndex = Math.max(0, options.findIndex(option => option.value === value));
|
|
139
126
|
// Which row is under the band right now. Tracks the finger during a scroll;
|
|
@@ -277,6 +264,8 @@ export function Wheel({
|
|
|
277
264
|
// useScrollSettle. The settle handler re-checks the position afterwards, so
|
|
278
265
|
// a correction that is genuinely needed still happens, just at rest.
|
|
279
266
|
const parkedRef = useRef(false);
|
|
267
|
+
// Syncs the wheel's scroll position with the selected index while the wheel
|
|
268
|
+
// is active.
|
|
280
269
|
useEffect(() => {
|
|
281
270
|
if (!isActive) {
|
|
282
271
|
parkedRef.current = false;
|
|
@@ -310,6 +299,8 @@ export function Wheel({
|
|
|
310
299
|
// Highlight follows the finger. rAF-throttled: a scroll can fire far more
|
|
311
300
|
// often than the display refreshes, and this only feeds a repaint.
|
|
312
301
|
const frameRef = useRef(undefined);
|
|
302
|
+
// Syncs a scroll listener with the active wheel. It updates the highlighted
|
|
303
|
+
// row.
|
|
313
304
|
useEffect(() => {
|
|
314
305
|
const scroller = scrollerRef.current;
|
|
315
306
|
if (scroller == null || !isActive) {
|
|
@@ -349,48 +340,46 @@ export function Wheel({
|
|
|
349
340
|
useOwnScrollGesture(scrollerRef, 'all', {
|
|
350
341
|
isEnabled: isActive
|
|
351
342
|
});
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
343
|
+
|
|
344
|
+
// A key commits the row it moves to and scrolls the column there.
|
|
345
|
+
const moveTo = useCallback(row => {
|
|
346
|
+
const option = row == null ? undefined : options[row];
|
|
347
|
+
if (row == null || option == null || option.isDisabled) {
|
|
356
348
|
return;
|
|
357
349
|
}
|
|
358
|
-
setActiveIndex(
|
|
359
|
-
scrollToIndex(
|
|
350
|
+
setActiveIndex(row);
|
|
351
|
+
scrollToIndex(row, 'smooth');
|
|
360
352
|
if (option.value !== value) {
|
|
361
353
|
onChange(option.value);
|
|
362
354
|
}
|
|
363
|
-
}, [
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
moveBy(-1);
|
|
373
|
-
break;
|
|
374
|
-
case 'PageDown':
|
|
375
|
-
event.preventDefault();
|
|
376
|
-
moveBy(10);
|
|
377
|
-
break;
|
|
378
|
-
case 'PageUp':
|
|
379
|
-
event.preventDefault();
|
|
380
|
-
moveBy(-10);
|
|
381
|
-
break;
|
|
382
|
-
case 'Home':
|
|
383
|
-
event.preventDefault();
|
|
384
|
-
moveBy(-activeIndex);
|
|
385
|
-
break;
|
|
386
|
-
case 'End':
|
|
387
|
-
event.preventDefault();
|
|
388
|
-
moveBy(options.length - 1 - activeIndex);
|
|
389
|
-
break;
|
|
390
|
-
default:
|
|
391
|
-
break;
|
|
355
|
+
}, [options, scrollToIndex, value, onChange]);
|
|
356
|
+
const moveBy = useCallback(delta => moveTo(steppedIndex(options, activeIndex, delta)), [moveTo, options, activeIndex]);
|
|
357
|
+
|
|
358
|
+
// Home and End: the first and the last enabled row.
|
|
359
|
+
const toEnd = useCallback(end => moveTo(endIndex(options, end)), [moveTo, options]);
|
|
360
|
+
const activate = useCallback(index => {
|
|
361
|
+
const option = options[index];
|
|
362
|
+
if (option == null || option.isDisabled) {
|
|
363
|
+
return;
|
|
392
364
|
}
|
|
393
|
-
|
|
365
|
+
setActiveIndex(index);
|
|
366
|
+
scrollToIndex(index, 'smooth');
|
|
367
|
+
if (option.value !== value) {
|
|
368
|
+
onChange(option.value);
|
|
369
|
+
}
|
|
370
|
+
}, [options, scrollToIndex, value, onChange]);
|
|
371
|
+
const {
|
|
372
|
+
listboxProps,
|
|
373
|
+
optionProps
|
|
374
|
+
} = useWheelListbox({
|
|
375
|
+
label,
|
|
376
|
+
options,
|
|
377
|
+
value,
|
|
378
|
+
activeIndex,
|
|
379
|
+
stepBy: moveBy,
|
|
380
|
+
toEnd,
|
|
381
|
+
activate
|
|
382
|
+
});
|
|
394
383
|
return /*#__PURE__*/_jsxs("div", {
|
|
395
384
|
...{
|
|
396
385
|
className: "x1n2onr6 x1cqoux5 xeuugli"
|
|
@@ -402,16 +391,11 @@ export function Wheel({
|
|
|
402
391
|
}
|
|
403
392
|
}), /*#__PURE__*/_jsx("div", {
|
|
404
393
|
ref: scrollerRef,
|
|
405
|
-
|
|
406
|
-
"aria-label": label,
|
|
407
|
-
"aria-activedescendant": `${id}-${options[activeIndex]?.value}`,
|
|
408
|
-
tabIndex: 0,
|
|
409
|
-
onKeyDown: handleKeyDown
|
|
394
|
+
...listboxProps,
|
|
410
395
|
// Read in the capture phase. usePointerDragScroll stops a primary
|
|
411
396
|
// mouse press from bubbling, so that it does not reach BottomSheet's
|
|
412
397
|
// drag. A bubbling handler would never see a mouse, and would keep the
|
|
413
398
|
// last touch.
|
|
414
|
-
,
|
|
415
399
|
onPointerDownCapture: event => {
|
|
416
400
|
lastPointerRef.current = event.pointerType;
|
|
417
401
|
},
|
|
@@ -420,20 +404,7 @@ export function Wheel({
|
|
|
420
404
|
},
|
|
421
405
|
...stylex.props(styles.scroller, focusOutlineStyles.focusVisible),
|
|
422
406
|
children: options.map((option, index) => /*#__PURE__*/_jsx("div", {
|
|
423
|
-
|
|
424
|
-
role: "option",
|
|
425
|
-
"aria-selected": option.value === value,
|
|
426
|
-
"aria-disabled": option.isDisabled || undefined,
|
|
427
|
-
onClick: () => {
|
|
428
|
-
if (option.isDisabled) {
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
setActiveIndex(index);
|
|
432
|
-
scrollToIndex(index, 'smooth');
|
|
433
|
-
if (option.value !== value) {
|
|
434
|
-
onChange(option.value);
|
|
435
|
-
}
|
|
436
|
-
},
|
|
407
|
+
...optionProps(option, index),
|
|
437
408
|
...{
|
|
438
409
|
0: {
|
|
439
410
|
className: "x78zum5 x6s0dn4 xl56j7k x6hpsvf xf314gf x1hdbdi8 xc342km xng3xce xjbqb8w x18juvz8 x1sodnla x1tgivj0 xuxw1ft x1ypdohk x16khyan x87ps6o x1jbe559 xuedmi6"
|
|
@@ -458,4 +429,4 @@ export function Wheel({
|
|
|
458
429
|
})]
|
|
459
430
|
});
|
|
460
431
|
}
|
|
461
|
-
|
|
432
|
+
ScrollWheel.displayName = 'ScrollWheel';
|
|
@@ -27,6 +27,16 @@ export type OwnScrollGestureOptions = {
|
|
|
27
27
|
* so momentum and snapping are never second-guessed.
|
|
28
28
|
*/
|
|
29
29
|
onSwipe?: (direction: 1 | -1) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Also keep the pointer a touch lands with, for an `'all'` scroller that pans
|
|
32
|
+
* through the gesture system rather than natively. A sheet arms its pull-down
|
|
33
|
+
* on its body's `pointerdown`, and counts on a native pan to cancel a touch
|
|
34
|
+
* pointer. A pan of the gesture system never cancels it. Without this, the
|
|
35
|
+
* sheet follows the first 8 px of a downward drag before the scroller's own
|
|
36
|
+
* pan takes over. The gesture host and the shared modality tracker listen in
|
|
37
|
+
* the capture phase, before this.
|
|
38
|
+
*/
|
|
39
|
+
isPointerKept?: boolean;
|
|
30
40
|
};
|
|
31
41
|
/**
|
|
32
42
|
* Claim touch gestures that start on `ref`'s element, so an ancestor cannot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOwnScrollGesture.d.ts","sourceRoot":"","sources":["../../src/DateInput/useOwnScrollGesture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useOwnScrollGesture.d.ts","sourceRoot":"","sources":["../../src/DateInput/useOwnScrollGesture.ts"],"names":[],"mappings":"AAkFA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAKpC;;;GAGG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,uBAAuB,GAAG;IACpC;yDACqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IACtC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,IAAI,GAAE,SAAiB,EACvB,OAAO,GAAE,uBAA4B,GACpC,IAAI,CA0GN"}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* @file useOwnScrollGesture.ts
|
|
7
7
|
* @input A scroll container ref and which axis it owns
|
|
8
8
|
* @output Stops touch gestures on that container from reaching an ancestor
|
|
9
|
-
* @position Internal behavior hook; consumed by Wheel.tsx
|
|
9
|
+
* @position Internal behavior hook; consumed by Wheel.tsx, PickerWheel.tsx and
|
|
10
|
+
* MonthScroller.tsx
|
|
10
11
|
*
|
|
11
12
|
* Lets a nested scroller keep the finger that lands on it.
|
|
12
13
|
*
|
|
@@ -106,13 +107,17 @@ export const SWIPE_DISTANCE = 32;
|
|
|
106
107
|
export function useOwnScrollGesture(ref, axis = 'all', options = {}) {
|
|
107
108
|
const {
|
|
108
109
|
isEnabled = true,
|
|
109
|
-
onSwipe
|
|
110
|
+
onSwipe,
|
|
111
|
+
isPointerKept = false
|
|
110
112
|
} = options;
|
|
111
113
|
|
|
112
114
|
// Read through a ref so a caller need not memoize the callback: re-running
|
|
113
115
|
// this effect would tear the listeners off mid-gesture.
|
|
114
116
|
const onSwipeRef = useRef(onSwipe);
|
|
115
117
|
onSwipeRef.current = onSwipe;
|
|
118
|
+
|
|
119
|
+
// Syncs touch listeners on the element with `isEnabled`. They decide which
|
|
120
|
+
// gesture owns a horizontal scroll.
|
|
116
121
|
useEffect(() => {
|
|
117
122
|
const element = ref.current;
|
|
118
123
|
if (element == null || !isEnabled) {
|
|
@@ -180,6 +185,8 @@ export function useOwnScrollGesture(ref, axis = 'all', options = {}) {
|
|
|
180
185
|
// bookkeeping.
|
|
181
186
|
claimed = null;
|
|
182
187
|
};
|
|
188
|
+
const keepPointer = event => event.stopPropagation();
|
|
189
|
+
const isKeepingPointer = axis === 'all' && isPointerKept;
|
|
183
190
|
element.addEventListener('touchstart', onStart, {
|
|
184
191
|
passive: true
|
|
185
192
|
});
|
|
@@ -192,11 +199,17 @@ export function useOwnScrollGesture(ref, axis = 'all', options = {}) {
|
|
|
192
199
|
element.addEventListener('touchcancel', onEnd, {
|
|
193
200
|
passive: true
|
|
194
201
|
});
|
|
202
|
+
if (isKeepingPointer) {
|
|
203
|
+
element.addEventListener('pointerdown', keepPointer);
|
|
204
|
+
}
|
|
195
205
|
return () => {
|
|
196
206
|
element.removeEventListener('touchstart', onStart);
|
|
197
207
|
element.removeEventListener('touchmove', onMove);
|
|
198
208
|
element.removeEventListener('touchend', onEnd);
|
|
199
209
|
element.removeEventListener('touchcancel', onEnd);
|
|
210
|
+
if (isKeepingPointer) {
|
|
211
|
+
element.removeEventListener('pointerdown', keepPointer);
|
|
212
|
+
}
|
|
200
213
|
};
|
|
201
|
-
}, [ref, axis, isEnabled]);
|
|
214
|
+
}, [ref, axis, isEnabled, isPointerKept]);
|
|
202
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePointerDragScroll.d.ts","sourceRoot":"","sources":["../../src/DateInput/usePointerDragScroll.ts"],"names":[],"mappings":"AAwDA;;;GAGG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAK3B,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,SAAS,GAAE,OAAc,GACxB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"usePointerDragScroll.d.ts","sourceRoot":"","sources":["../../src/DateInput/usePointerDragScroll.ts"],"names":[],"mappings":"AAwDA;;;GAGG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAK3B,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,SAAS,GAAE,OAAc,GACxB,sBAAsB,CAoJxB"}
|
|
@@ -74,6 +74,8 @@ const SETTLE_FALLBACK_MS = 260;
|
|
|
74
74
|
*/
|
|
75
75
|
export function usePointerDragScroll(ref, isEnabled = true) {
|
|
76
76
|
const isDraggingRef = useRef(false);
|
|
77
|
+
|
|
78
|
+
// Syncs pointer listeners with `isEnabled`. A mouse drag scrolls the element.
|
|
77
79
|
useEffect(() => {
|
|
78
80
|
const element = ref.current;
|
|
79
81
|
if (element == null || !isEnabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollSettle.d.ts","sourceRoot":"","sources":["../../src/DateInput/useScrollSettle.ts"],"names":[],"mappings":"AA0DA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACxC,SAAS,GAAE,OAAc,EACzB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GACnC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useScrollSettle.d.ts","sourceRoot":"","sources":["../../src/DateInput/useScrollSettle.ts"],"names":[],"mappings":"AA0DA;;;;;GAKG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACxC,SAAS,GAAE,OAAc,EACzB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GACnC,iBAAiB,CAyGnB"}
|
|
@@ -81,6 +81,9 @@ export function useScrollSettle(ref, onSettle, isEnabled = true, isHeldRef) {
|
|
|
81
81
|
const onSettleRef = useRef(onSettle);
|
|
82
82
|
onSettleRef.current = onSettle;
|
|
83
83
|
const isAtRestRef = useRef(true);
|
|
84
|
+
|
|
85
|
+
// Syncs scroll, touch and pointer listeners with `isEnabled`. They find when
|
|
86
|
+
// scrolling stops.
|
|
84
87
|
useEffect(() => {
|
|
85
88
|
const element = ref.current;
|
|
86
89
|
if (element == null || !isEnabled) {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file useWheelListbox.ts
|
|
3
|
+
* @input A wheel's label, options, committed value and active row, and its
|
|
4
|
+
* presentation's three moves: a step, an end, a row
|
|
5
|
+
* @output useWheelListbox: the listbox and option props both wheels share
|
|
6
|
+
* @position Internal hook of ScrollWheel (Wheel.tsx) and PickerWheel.tsx
|
|
7
|
+
*
|
|
8
|
+
* A wheel is a listbox: one tab stop, with Arrow, Page, Home and End keys.
|
|
9
|
+
* Each presentation decides what its keys and clicks do to its own column.
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update Wheel.tsx and PickerWheel.tsx.
|
|
12
|
+
*/
|
|
13
|
+
import { type KeyboardEvent } from 'react';
|
|
14
|
+
import type { WheelOption } from './wheelOptions.js';
|
|
15
|
+
export interface WheelListboxProps {
|
|
16
|
+
/** Accessible name for the column. */
|
|
17
|
+
label: string;
|
|
18
|
+
/** Rows, top to bottom. */
|
|
19
|
+
options: ReadonlyArray<WheelOption>;
|
|
20
|
+
/** Committed value. */
|
|
21
|
+
value: number;
|
|
22
|
+
/** The row `aria-activedescendant` names. */
|
|
23
|
+
activeIndex: number;
|
|
24
|
+
/** An Arrow or Page key: a step of `delta` rows. */
|
|
25
|
+
stepBy: (delta: number) => void;
|
|
26
|
+
/** Home or End. */
|
|
27
|
+
toEnd: (end: 'first' | 'last') => void;
|
|
28
|
+
/** A click on row `index`. */
|
|
29
|
+
activate: (index: number) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The listbox and option props of one wheel column: ids, ARIA, the keys and
|
|
33
|
+
* a click on a row. `aria-activedescendant` marks the active row, and a click
|
|
34
|
+
* reaches every row. The scrolling column steps from the row under its band. The
|
|
35
|
+
* touch column steps from the row it is heading to.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```
|
|
39
|
+
* const {listboxProps, optionProps} = useWheelListbox({label, options, value, activeIndex, stepBy, toEnd, activate});
|
|
40
|
+
* <div {...listboxProps}>{options.map((option, index) => <div key={option.value} {...optionProps(option, index)} />)}</div>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function useWheelListbox({ label, options, value, activeIndex, stepBy, toEnd, activate, }: WheelListboxProps): {
|
|
44
|
+
listboxProps: {
|
|
45
|
+
role: "listbox";
|
|
46
|
+
'aria-label': string;
|
|
47
|
+
'aria-activedescendant': string;
|
|
48
|
+
tabIndex: number;
|
|
49
|
+
onKeyDown: (event: KeyboardEvent) => void;
|
|
50
|
+
};
|
|
51
|
+
optionProps: (option: WheelOption, index: number) => {
|
|
52
|
+
id: string;
|
|
53
|
+
role: "option";
|
|
54
|
+
'aria-selected': boolean;
|
|
55
|
+
'aria-disabled': true | undefined;
|
|
56
|
+
onClick: () => void;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=useWheelListbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWheelListbox.d.ts","sourceRoot":"","sources":["../../src/DateInput/useWheelListbox.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAqB,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,mBAAmB;IACnB,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACvC,8BAA8B;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,GACT,EAAE,iBAAiB;;;;;;2BAGR,aAAa;;0BAwCC,WAAW,SAAS,MAAM;;;;;;;EAQnD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useWheelListbox.ts
|
|
7
|
+
* @input A wheel's label, options, committed value and active row, and its
|
|
8
|
+
* presentation's three moves: a step, an end, a row
|
|
9
|
+
* @output useWheelListbox: the listbox and option props both wheels share
|
|
10
|
+
* @position Internal hook of ScrollWheel (Wheel.tsx) and PickerWheel.tsx
|
|
11
|
+
*
|
|
12
|
+
* A wheel is a listbox: one tab stop, with Arrow, Page, Home and End keys.
|
|
13
|
+
* Each presentation decides what its keys and clicks do to its own column.
|
|
14
|
+
*
|
|
15
|
+
* SYNC: When modified, update Wheel.tsx and PickerWheel.tsx.
|
|
16
|
+
*/
|
|
17
|
+
import { useCallback, useId } from 'react';
|
|
18
|
+
/** Rows a Page Up or Page Down key moves. */
|
|
19
|
+
const PAGE_ROWS = 10;
|
|
20
|
+
/**
|
|
21
|
+
* The listbox and option props of one wheel column: ids, ARIA, the keys and
|
|
22
|
+
* a click on a row. `aria-activedescendant` marks the active row, and a click
|
|
23
|
+
* reaches every row. The scrolling column steps from the row under its band. The
|
|
24
|
+
* touch column steps from the row it is heading to.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```
|
|
28
|
+
* const {listboxProps, optionProps} = useWheelListbox({label, options, value, activeIndex, stepBy, toEnd, activate});
|
|
29
|
+
* <div {...listboxProps}>{options.map((option, index) => <div key={option.value} {...optionProps(option, index)} />)}</div>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function useWheelListbox({
|
|
33
|
+
label,
|
|
34
|
+
options,
|
|
35
|
+
value,
|
|
36
|
+
activeIndex,
|
|
37
|
+
stepBy,
|
|
38
|
+
toEnd,
|
|
39
|
+
activate
|
|
40
|
+
}) {
|
|
41
|
+
const id = useId();
|
|
42
|
+
const onKeyDown = useCallback(event => {
|
|
43
|
+
switch (event.key) {
|
|
44
|
+
case 'ArrowDown':
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
stepBy(1);
|
|
47
|
+
break;
|
|
48
|
+
case 'ArrowUp':
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
stepBy(-1);
|
|
51
|
+
break;
|
|
52
|
+
case 'PageDown':
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
stepBy(PAGE_ROWS);
|
|
55
|
+
break;
|
|
56
|
+
case 'PageUp':
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
stepBy(-PAGE_ROWS);
|
|
59
|
+
break;
|
|
60
|
+
case 'Home':
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
toEnd('first');
|
|
63
|
+
break;
|
|
64
|
+
case 'End':
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
toEnd('last');
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}, [stepBy, toEnd]);
|
|
72
|
+
return {
|
|
73
|
+
listboxProps: {
|
|
74
|
+
role: 'listbox',
|
|
75
|
+
'aria-label': label,
|
|
76
|
+
'aria-activedescendant': `${id}-${options[activeIndex]?.value}`,
|
|
77
|
+
tabIndex: 0,
|
|
78
|
+
onKeyDown
|
|
79
|
+
},
|
|
80
|
+
optionProps: (option, index) => ({
|
|
81
|
+
id: `${id}-${option.value}`,
|
|
82
|
+
role: 'option',
|
|
83
|
+
'aria-selected': option.value === value,
|
|
84
|
+
'aria-disabled': option.isDisabled || undefined,
|
|
85
|
+
onClick: () => activate(index)
|
|
86
|
+
})
|
|
87
|
+
};
|
|
88
|
+
}
|