@astryxdesign/core 0.7.7 → 0.7.8-canary.07ee4b5
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 +11 -3
- 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 +18 -22
- package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
- package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
- package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
- package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarDays.js +2 -10
- package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
- package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
- package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
- 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 +6 -1
- 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/CheckboxList/CheckboxList.d.ts +8 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +2 -0
- 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 +9 -30
- 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 +10 -10
- 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/InfoTip/InfoTip.d.ts +5 -5
- package/dist/InfoTip/InfoTip.d.ts.map +1 -1
- package/dist/InfoTip/InfoTip.js +58 -19
- 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 +4 -1
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +3 -0
- package/dist/Layer/useTouchTrigger.d.ts +13 -7
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +20 -6
- package/dist/Layout/index.d.ts +1 -1
- package/dist/Layout/index.d.ts.map +1 -1
- package/dist/Layout/index.js +1 -1
- package/dist/Layout/layoutReset.js +1 -1
- package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
- package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
- package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
- package/dist/Layout/padding.stylex.d.ts +5 -129
- package/dist/Layout/padding.stylex.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.js +9 -143
- package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
- package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
- package/dist/Layout/paddingStyles.stylex.js +99 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +20 -1
- package/dist/MobileNav/MobileNav.d.ts +3 -2
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +10 -26
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +2 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +2 -1
- 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/Popover/usePopover.js +2 -2
- package/dist/PowerSearch/PowerSearch.d.ts +39 -4
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +441 -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 +43 -10
- 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 +3 -2
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
- package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +31 -23
- package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
- package/dist/PowerSearch/formatTokenValue.js +161 -0
- package/dist/PowerSearch/index.d.ts +1 -1
- package/dist/PowerSearch/index.d.ts.map +1 -1
- package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
- package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
- package/dist/PowerSearch/powerSearchDateZone.js +57 -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 +8 -1
- 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 +7 -9
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +36 -5
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +16 -11
- 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/Stepper/Stepper.d.ts.map +1 -1
- package/dist/Stepper/Stepper.js +10 -15
- 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/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +2 -1
- package/dist/TextInput/TextInput.d.ts +2 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +12 -8
- 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/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +1 -23
- 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 +44 -46
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +20 -21
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +4 -6
- package/dist/Tokenizer/index.d.ts +1 -1
- package/dist/Tokenizer/index.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.d.ts +2 -23
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.js +5 -29
- package/dist/Tooltip/useTooltip.d.ts +23 -30
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +194 -108
- 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 +41 -7
- 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 +117 -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/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
- 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 +8 -9
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +50 -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 +8 -0
- package/dist/motion/animatedLayout.d.ts.map +1 -1
- package/dist/motion/animatedLayout.js +246 -53
- package/dist/motion/animator.d.ts +14 -14
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +45 -26
- package/dist/motion/frameBlock.d.ts +14 -0
- package/dist/motion/frameBlock.d.ts.map +1 -0
- package/dist/motion/frameBlock.js +16 -0
- 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/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +14 -13
- 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 +15 -2
- package/dist/theme/tokens.stylex.d.ts +3 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +4 -1
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +12 -0
- package/dist/utils/disabledInteraction.d.ts +10 -2
- package/dist/utils/disabledInteraction.d.ts.map +1 -1
- package/dist/utils/disabledInteraction.js +16 -2
- package/dist/utils/focusReturn.d.ts +22 -25
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +36 -29
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- 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/isFocusDetached.d.ts +27 -0
- package/dist/utils/isFocusDetached.d.ts.map +1 -0
- package/dist/utils/isFocusDetached.js +32 -0
- package/dist/utils/plainDate.d.ts +31 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +68 -4
- 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 +13 -4
- 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 +40 -32
- package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
- package/src/Calendar/hooks/useCalendarDays.ts +5 -10
- package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
- package/src/Carousel/Carousel.tsx +1 -0
- package/src/Chat/ChatComposerInput.tsx +4 -7
- 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/CheckboxList/CheckboxList.doc.mjs +7 -0
- package/src/CheckboxList/CheckboxList.tsx +9 -0
- 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 +6 -32
- 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 +8 -13
- 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 +51 -10
- package/src/Icon/Icon.tsx +15 -7
- package/src/IconButton/IconButton.doc.mjs +141 -21
- package/src/InfoTip/InfoTip.tsx +72 -16
- 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 +3 -1
- package/src/Layer/useLayerDismissal.ts +2 -0
- package/src/Layer/useTouchTrigger.ts +19 -6
- package/src/Layout/index.ts +1 -1
- package/src/Layout/layoutReset.ts +1 -1
- package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
- package/src/Layout/padding.stylex.ts +9 -133
- package/src/Layout/paddingStyles.stylex.ts +87 -0
- package/src/Lightbox/Lightbox.tsx +20 -1
- package/src/Lightbox/useLightbox.doc.mjs +167 -0
- package/src/MobileNav/MobileNav.tsx +10 -31
- package/src/MultiSelector/MultiSelector.tsx +2 -7
- package/src/NumberInput/NumberInput.tsx +2 -7
- 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/Popover/usePopover.tsx +2 -2
- package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
- package/src/PowerSearch/PowerSearch.tsx +620 -157
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
- package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
- package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
- package/src/PowerSearch/PowerSearchToken.tsx +2 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
- package/src/PowerSearch/formatFilterValue.ts +49 -27
- package/src/PowerSearch/formatTokenValue.ts +220 -0
- package/src/PowerSearch/index.ts +5 -1
- package/src/PowerSearch/powerSearchDateZone.ts +95 -0
- package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
- package/src/PowerSearch/types.ts +8 -1
- 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 +7 -19
- package/src/SideNav/SideNav.tsx +41 -5
- package/src/Slider/Slider.tsx +20 -11
- package/src/Slider/sliderTouchController.ts +2 -2
- package/src/Spinner/Spinner.tsx +77 -63
- package/src/Stepper/Stepper.tsx +10 -27
- 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/TextArea/TextArea.tsx +2 -7
- package/src/TextInput/TextInput.tsx +13 -17
- 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/Timestamp/formatInstant.ts +1 -33
- 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 +10 -10
- package/src/Tokenizer/Tokenizer.tsx +61 -62
- package/src/Tokenizer/TokenizerBottomSheet.tsx +9 -11
- package/src/Tokenizer/index.ts +1 -0
- package/src/Tooltip/Tooltip.tsx +6 -42
- package/src/Tooltip/useTooltip.doc.mjs +24 -0
- package/src/Tooltip/useTooltip.tsx +237 -134
- 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 +149 -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 +53 -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 +323 -60
- package/src/motion/animator.ts +66 -37
- package/src/motion/frameBlock.ts +16 -0
- 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/generateThemeRules.ts +14 -12
- package/src/theme/motionKnobs.ts +4 -3
- package/src/theme/themeMotion.ts +17 -2
- package/src/theme/tokens.stylex.ts +2 -0
- package/src/utils/dateParser.ts +16 -0
- package/src/utils/disabledInteraction.ts +23 -2
- package/src/utils/focusReturn.ts +38 -31
- package/src/utils/index.ts +1 -1
- package/src/utils/interactionModality.ts +4 -0
- package/src/utils/interactionOverlay.stylex.ts +3 -2
- package/src/utils/isFocusDetached.ts +34 -0
- package/src/utils/plainDate.ts +80 -4
- package/src/utils/pressFeedback.ts +24 -6
- package/src/utils/triggerFocus.ts +80 -0
- package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
- package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
- package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
- package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
- package/dist/Layer/usePressPin.d.ts +0 -93
- package/dist/Layer/usePressPin.d.ts.map +0 -1
- package/dist/Layer/usePressPin.js +0 -363
- 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/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
- package/src/Layer/usePressPin.ts +0 -510
- package/src/internal/touch-sheet.ts +0 -21
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useTooltip.tsx
|
|
7
|
-
* @input Uses useLayer,
|
|
8
|
-
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips
|
|
9
|
-
* and
|
|
7
|
+
* @input Uses useLayer, useTouchTriggerInternal, React hooks
|
|
8
|
+
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips
|
|
9
|
+
* and imperative show() and hide() for an app-built toggle trigger
|
|
10
10
|
* @position Layer hook; builds on useLayer for tooltip behavior
|
|
11
11
|
*
|
|
12
12
|
* SYNC: When modified, update:
|
|
@@ -17,9 +17,11 @@ import {
|
|
|
17
17
|
useCallback,
|
|
18
18
|
useEffect,
|
|
19
19
|
useRef,
|
|
20
|
+
useState,
|
|
20
21
|
type ReactNode,
|
|
21
22
|
type RefCallback,
|
|
22
23
|
} from 'react';
|
|
24
|
+
import {createTriggerFocusGate} from '../utils/triggerFocus';
|
|
23
25
|
import * as stylex from '@stylexjs/stylex';
|
|
24
26
|
import {
|
|
25
27
|
useLayerInternal,
|
|
@@ -27,12 +29,14 @@ import {
|
|
|
27
29
|
type LayerAlignment,
|
|
28
30
|
type LayerPlacement,
|
|
29
31
|
} from '../Layer/useLayer';
|
|
30
|
-
import
|
|
32
|
+
import {
|
|
33
|
+
useTouchTriggerInternal,
|
|
34
|
+
type LayerTouchTrigger,
|
|
35
|
+
} from '../Layer/useTouchTrigger';
|
|
31
36
|
import {useAnnounceRenderedText} from '../hooks/useAnnounceRenderedText';
|
|
32
37
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
33
38
|
import {layerAnimations} from '../Layer/layerAnimations.stylex';
|
|
34
39
|
import {registerLayerSurface} from '../Layer/layerSurfacePress';
|
|
35
|
-
import {usePressPin, type LayerTriggerBehavior} from '../Layer/usePressPin';
|
|
36
40
|
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
37
41
|
import {themeProps} from '../utils/themeProps';
|
|
38
42
|
import {
|
|
@@ -216,29 +220,27 @@ export interface TooltipReturn {
|
|
|
216
220
|
children: ReactNode,
|
|
217
221
|
props?: Omit<ContextRenderProps, 'positioning'>,
|
|
218
222
|
) => ReactNode;
|
|
219
|
-
}
|
|
220
223
|
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
return false;
|
|
224
|
+
/**
|
|
225
|
+
* Opens the tooltip now and keeps it open until `hide()`, Escape, a press
|
|
226
|
+
* outside, or focus leaving its trigger. If a press on the trigger is down
|
|
227
|
+
* when you call it, and the press ends off the trigger with no click, the
|
|
228
|
+
* hold ends. The hover rules then decide.
|
|
229
|
+
* Its text is announced once. Reports through `onShow`. Under a controlled `isOpen`,
|
|
230
|
+
* it calls `onShow` and does not change `isOpen`. Does nothing while
|
|
231
|
+
* `isEnabled` is false.
|
|
232
|
+
*
|
|
233
|
+
* Use `show()` and `hide()` to build a toggle-style trigger: your own button
|
|
234
|
+
* calls them, sets `aria-describedby` and `aria-controls` to `describedBy`
|
|
235
|
+
* and `aria-expanded` (true while shown), and keeps its own accessible name.
|
|
236
|
+
*/
|
|
237
|
+
show: () => void;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Closes the tooltip now. Reports through `onHide`. Under a controlled
|
|
241
|
+
* `isOpen`, it calls `onHide` and does not change `isOpen`.
|
|
242
|
+
*/
|
|
243
|
+
hide: () => void;
|
|
242
244
|
}
|
|
243
245
|
|
|
244
246
|
/**
|
|
@@ -267,42 +269,6 @@ function isFocusable(element: HTMLElement): boolean {
|
|
|
267
269
|
*/
|
|
268
270
|
|
|
269
271
|
export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
|
|
270
|
-
// The option is fixed to `adaptive`, so an options object that carries it at
|
|
271
|
-
// runtime cannot reach the press-to-pin path.
|
|
272
|
-
return useTooltipWithTriggerBehavior({
|
|
273
|
-
...options,
|
|
274
|
-
triggerBehavior: 'adaptive',
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Module-only options for `useTooltipWithTriggerBehavior`. Not exported from
|
|
280
|
-
* the package.
|
|
281
|
-
*/
|
|
282
|
-
export interface TooltipWithTriggerBehaviorOptions extends TooltipOptions {
|
|
283
|
-
/**
|
|
284
|
-
* How the trigger opens the tooltip:
|
|
285
|
-
* - `adaptive` (the default): hover and focus preview it. `touchTrigger`
|
|
286
|
-
* decides taps.
|
|
287
|
-
* - `toggle`: on a button trigger, a click, a tap, Enter, or Space pins the
|
|
288
|
-
* tooltip open, and the same press closes it. Hover and keyboard focus
|
|
289
|
-
* still preview it. A pinned tooltip stays until Escape, a second press,
|
|
290
|
-
* a press outside, or focus leaving. The trigger reports `aria-expanded`
|
|
291
|
-
* and `aria-controls`, and the tooltip's text is announced once when it
|
|
292
|
-
* pins. `touchTrigger` is ignored. InfoTip uses it.
|
|
293
|
-
*
|
|
294
|
-
* @default 'adaptive'
|
|
295
|
-
*/
|
|
296
|
-
triggerBehavior?: LayerTriggerBehavior;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* `useTooltip` with a trigger behavior. Module-only: InfoTip's press-to-pin
|
|
301
|
-
* goes through it, and the package does not export it.
|
|
302
|
-
*/
|
|
303
|
-
export function useTooltipWithTriggerBehavior(
|
|
304
|
-
options: TooltipWithTriggerBehaviorOptions = {},
|
|
305
|
-
): TooltipReturn {
|
|
306
272
|
const {
|
|
307
273
|
placement = 'above',
|
|
308
274
|
alignment = 'center',
|
|
@@ -310,7 +276,6 @@ export function useTooltipWithTriggerBehavior(
|
|
|
310
276
|
hideDelay = 0,
|
|
311
277
|
focusTrigger = 'auto',
|
|
312
278
|
touchTrigger = 'auto',
|
|
313
|
-
triggerBehavior = 'adaptive',
|
|
314
279
|
isEnabled = true,
|
|
315
280
|
isOpen,
|
|
316
281
|
isDefaultOpen = false,
|
|
@@ -368,39 +333,122 @@ export function useTooltipWithTriggerBehavior(
|
|
|
368
333
|
hideLayer();
|
|
369
334
|
}, [clearTimeouts, hideLayer]);
|
|
370
335
|
|
|
371
|
-
//
|
|
372
|
-
|
|
336
|
+
// DOM listeners read the latest controlled state through a ref.
|
|
337
|
+
const latestRef = useRef({isOpen, isLayerOpen, onShow, onHide});
|
|
338
|
+
latestRef.current = {isOpen, isLayerOpen, onShow, onHide};
|
|
339
|
+
|
|
340
|
+
// The app's show() holds the tooltip open until hide(), Escape, a press or
|
|
341
|
+
// scroll outside, or focus leaving the trigger and the tooltip.
|
|
342
|
+
const isHeldRef = useRef(false);
|
|
343
|
+
const [isHeldState, setIsHeldState] = useState(false);
|
|
344
|
+
const setHeld = useCallback((next: boolean) => {
|
|
345
|
+
isHeldRef.current = next;
|
|
346
|
+
setIsHeldState(next);
|
|
347
|
+
}, []);
|
|
348
|
+
|
|
349
|
+
// Whether the current hold began during a press on the trigger. Such a
|
|
350
|
+
// hold ends with the press when the press ends off the trigger, as no click
|
|
351
|
+
// pins it. The hover rules then decide. isHoldInThisTaskRef covers a show()
|
|
352
|
+
// that runs before the hook's own pointerdown listener.
|
|
353
|
+
const isHoldFromPressRef = useRef(false);
|
|
354
|
+
const isHoldInThisTaskRef = useRef(false);
|
|
355
|
+
const handleReleaseInLayer = useCallback(() => {
|
|
356
|
+
if (isHoldFromPressRef.current && isHeldRef.current) {
|
|
357
|
+
isHoldFromPressRef.current = false;
|
|
358
|
+
setHeld(false);
|
|
359
|
+
}
|
|
360
|
+
}, [setHeld]);
|
|
361
|
+
|
|
362
|
+
// The touch trigger's outside dismissal (a press or scroll outside) ends a
|
|
363
|
+
// hold with the tooltip.
|
|
364
|
+
const hideFromTouch = useCallback(() => {
|
|
365
|
+
if (isHeldRef.current) {
|
|
366
|
+
setHeld(false);
|
|
367
|
+
const latest = latestRef.current;
|
|
368
|
+
if (latest.isOpen !== undefined) {
|
|
369
|
+
latest.onHide?.();
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
hideNow();
|
|
374
|
+
}, [setHeld, hideNow]);
|
|
375
|
+
|
|
373
376
|
const {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
377
|
+
isTouchPointerRef,
|
|
378
|
+
isTouchInteraction,
|
|
379
|
+
handlePointerEnter,
|
|
380
|
+
handlePointerDown: handleTouchPointerDown,
|
|
381
|
+
clearTapOpen,
|
|
382
|
+
armOutsideDismiss,
|
|
383
|
+
} = useTouchTriggerInternal(
|
|
384
|
+
{
|
|
385
|
+
touchTrigger,
|
|
386
|
+
isEnabled,
|
|
387
|
+
isControlled: isOpen !== undefined,
|
|
388
|
+
isOpen: isLayerOpen,
|
|
389
|
+
layerId,
|
|
390
|
+
triggerRef,
|
|
391
|
+
show: showNow,
|
|
392
|
+
hide: hideFromTouch,
|
|
385
393
|
},
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
isLayerOpen
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
394
|
+
handleReleaseInLayer,
|
|
395
|
+
);
|
|
396
|
+
|
|
397
|
+
const isHeldOpen = useCallback(() => {
|
|
398
|
+
const latest = latestRef.current;
|
|
399
|
+
return isHeldRef.current && latest.isLayerOpen && latest.isOpen !== false;
|
|
400
|
+
}, []);
|
|
401
|
+
|
|
402
|
+
const releaseHold = useCallback(() => {
|
|
403
|
+
clearTapOpen();
|
|
404
|
+
setHeld(false);
|
|
405
|
+
const latest = latestRef.current;
|
|
406
|
+
if (latest.isOpen !== undefined) {
|
|
407
|
+
latest.onHide?.();
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
hideNow();
|
|
411
|
+
}, [clearTapOpen, setHeld, hideNow]);
|
|
399
412
|
|
|
400
|
-
|
|
413
|
+
const dropHold = useCallback(() => {
|
|
414
|
+
if (isHeldRef.current) {
|
|
415
|
+
setHeld(false);
|
|
416
|
+
}
|
|
417
|
+
}, [setHeld]);
|
|
418
|
+
|
|
419
|
+
// Focus leaving the trigger and the tooltip ends a hold, whatever
|
|
420
|
+
// `focusTrigger` is. Focus that leaves for no element is a press's to
|
|
421
|
+
// decide. The trigger can sit in another document, so the check uses its
|
|
422
|
+
// own window.
|
|
423
|
+
const handleHeldFocusOut = useCallback(
|
|
424
|
+
(event: FocusEvent) => {
|
|
425
|
+
if (!isHeldOpen()) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
const next = event.relatedTarget;
|
|
429
|
+
const trigger = triggerRef.current;
|
|
430
|
+
const view = trigger?.ownerDocument.defaultView;
|
|
431
|
+
if (view == null || !(next instanceof view.Node)) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const surface = trigger?.ownerDocument.getElementById(layerId) ?? null;
|
|
435
|
+
if (
|
|
436
|
+
trigger?.contains(next) === true ||
|
|
437
|
+
surface?.contains(next) === true
|
|
438
|
+
) {
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
releaseHold();
|
|
442
|
+
},
|
|
443
|
+
[isHeldOpen, layerId, releaseHold],
|
|
444
|
+
);
|
|
445
|
+
|
|
446
|
+
const isHoldShown = isHeldState && isLayerOpen && isOpen !== false;
|
|
447
|
+
|
|
448
|
+
// Only a hold announces the text: a preview is already the trigger's
|
|
401
449
|
// description.
|
|
402
450
|
const contentRef = useRef<HTMLDivElement | null>(null);
|
|
403
|
-
useAnnounceRenderedText(contentRef,
|
|
451
|
+
useAnnounceRenderedText(contentRef, isHoldShown, 'pinned');
|
|
404
452
|
const contentRefs = useMergedRefs<HTMLDivElement>(
|
|
405
453
|
contentRef,
|
|
406
454
|
registerLayerSurface,
|
|
@@ -433,7 +481,7 @@ export function useTooltipWithTriggerBehavior(
|
|
|
433
481
|
// trigger onto the tooltip surface without the tooltip vanishing — required
|
|
434
482
|
// for WCAG 1.4.13 (Content on Hover or Focus: hoverable).
|
|
435
483
|
const scheduleHide = useCallback(() => {
|
|
436
|
-
if (isOpen === true ||
|
|
484
|
+
if (isOpen === true || isHeldOpen()) {
|
|
437
485
|
return;
|
|
438
486
|
}
|
|
439
487
|
clearTimeouts();
|
|
@@ -441,7 +489,7 @@ export function useTooltipWithTriggerBehavior(
|
|
|
441
489
|
hideTimeoutRef.current = setTimeout(() => {
|
|
442
490
|
hideLayer();
|
|
443
491
|
}, effectiveHideDelay);
|
|
444
|
-
}, [isOpen,
|
|
492
|
+
}, [isOpen, isHeldOpen, clearTimeouts, hideLayer, hideDelay]);
|
|
445
493
|
|
|
446
494
|
// Cancel a pending hide (e.g. the pointer entered the tooltip surface).
|
|
447
495
|
const cancelHide = useCallback(() => {
|
|
@@ -485,32 +533,13 @@ export function useTooltipWithTriggerBehavior(
|
|
|
485
533
|
[isTouchPointerRef, layerId, scheduleHide],
|
|
486
534
|
);
|
|
487
535
|
|
|
488
|
-
// Under `auto`, whether focus counts is decided when it arrives,
|
|
489
|
-
//
|
|
490
|
-
|
|
491
|
-
// by definition; focus inside it counts only while the trigger is
|
|
492
|
-
// focusable too, so a plain wrapper still ignores its children's focus.
|
|
493
|
-
const isFocusForTrigger = useCallback(
|
|
494
|
-
(e: Event): boolean => {
|
|
495
|
-
if (focusTrigger === 'always') {
|
|
496
|
-
return true;
|
|
497
|
-
}
|
|
498
|
-
const triggerEl = e.currentTarget as HTMLElement | null;
|
|
499
|
-
return (
|
|
500
|
-
triggerEl != null && (e.target === triggerEl || isFocusable(triggerEl))
|
|
501
|
-
);
|
|
502
|
-
},
|
|
503
|
-
[focusTrigger],
|
|
504
|
-
);
|
|
505
|
-
|
|
506
|
-
// Whether the trigger's current focus counted when it arrived, so its blur
|
|
507
|
-
// hides the tooltip even if the trigger has since left the tab order.
|
|
508
|
-
const focusCountedRef = useRef(false);
|
|
536
|
+
// Under `auto`, whether focus counts is decided when it arrives, and a
|
|
537
|
+
// focus that counted still hides on blur (utils/triggerFocus.ts).
|
|
538
|
+
const [focusGate] = useState(createTriggerFocusGate);
|
|
509
539
|
|
|
510
540
|
const handleFocusIn = useCallback(
|
|
511
541
|
(e: Event) => {
|
|
512
|
-
|
|
513
|
-
if (!isEnabled || !focusCountedRef.current) {
|
|
542
|
+
if (!focusGate.focusIn(e, focusTrigger) || !isEnabled) {
|
|
514
543
|
return;
|
|
515
544
|
}
|
|
516
545
|
// A tap focuses the trigger it activates, and `:focus-visible` does not
|
|
@@ -531,26 +560,26 @@ export function useTooltipWithTriggerBehavior(
|
|
|
531
560
|
showLayer();
|
|
532
561
|
},
|
|
533
562
|
[
|
|
563
|
+
focusGate,
|
|
564
|
+
focusTrigger,
|
|
534
565
|
isEnabled,
|
|
535
|
-
isFocusForTrigger,
|
|
536
566
|
isTouchInteraction,
|
|
537
567
|
clearTimeouts,
|
|
538
568
|
showLayer,
|
|
539
569
|
],
|
|
540
570
|
);
|
|
541
571
|
|
|
542
|
-
// A
|
|
543
|
-
// trigger whatever `focusTrigger` is. This schedules the
|
|
544
|
-
//
|
|
572
|
+
// A held tooltip's focus-leave close is the hold's own: it listens on the
|
|
573
|
+
// trigger whatever `focusTrigger` is. This schedules the unheld hide, which
|
|
574
|
+
// a held tooltip skips.
|
|
545
575
|
const handleFocusOut = useCallback(
|
|
546
576
|
(e: Event) => {
|
|
547
|
-
if (!
|
|
577
|
+
if (!focusGate.focusOut(e, focusTrigger)) {
|
|
548
578
|
return;
|
|
549
579
|
}
|
|
550
|
-
focusCountedRef.current = false;
|
|
551
580
|
scheduleHide();
|
|
552
581
|
},
|
|
553
|
-
[
|
|
582
|
+
[focusGate, focusTrigger, scheduleHide],
|
|
554
583
|
);
|
|
555
584
|
|
|
556
585
|
// Pressing the trigger hides its own tooltip: once the control is activated
|
|
@@ -560,11 +589,47 @@ export function useTooltipWithTriggerBehavior(
|
|
|
560
589
|
// is owned by the consumer. `hideLayer()` self-guards when already closed.
|
|
561
590
|
// A touch press is a different gesture (it may be the only way to open the
|
|
562
591
|
// tooltip at all), so the touch path answers it first.
|
|
592
|
+
// Whether a press on the trigger is down, from the hook's pointerdown to
|
|
593
|
+
// the press's end.
|
|
594
|
+
const isTriggerPressedRef = useRef(false);
|
|
595
|
+
const stopPressTrackingRef = useRef<(() => void) | null>(null);
|
|
596
|
+
const trackTriggerPress = useCallback(() => {
|
|
597
|
+
stopPressTrackingRef.current?.();
|
|
598
|
+
const view = triggerRef.current?.ownerDocument.defaultView;
|
|
599
|
+
if (view == null) {
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
isTriggerPressedRef.current = true;
|
|
603
|
+
const trigger = triggerRef.current;
|
|
604
|
+
const stop = (event?: Event) => {
|
|
605
|
+
// A press that ends on the trigger keeps its hold, as a click does.
|
|
606
|
+
if (
|
|
607
|
+
event?.type === 'pointerup' &&
|
|
608
|
+
event.target instanceof view.Node &&
|
|
609
|
+
trigger?.contains(event.target) === true
|
|
610
|
+
) {
|
|
611
|
+
isHoldFromPressRef.current = false;
|
|
612
|
+
}
|
|
613
|
+
view.removeEventListener('pointerup', stop, true);
|
|
614
|
+
view.removeEventListener('pointercancel', stop, true);
|
|
615
|
+
isTriggerPressedRef.current = false;
|
|
616
|
+
stopPressTrackingRef.current = null;
|
|
617
|
+
};
|
|
618
|
+
view.addEventListener('pointerup', stop, true);
|
|
619
|
+
view.addEventListener('pointercancel', stop, true);
|
|
620
|
+
stopPressTrackingRef.current = stop;
|
|
621
|
+
}, []);
|
|
622
|
+
|
|
563
623
|
const handlePointerDown = useCallback(
|
|
564
624
|
(event: PointerEvent) => {
|
|
565
|
-
|
|
566
|
-
//
|
|
567
|
-
|
|
625
|
+
trackTriggerPress();
|
|
626
|
+
// The app's hide() closes a held tooltip. A press neither hides it here
|
|
627
|
+
// nor waits for a tap verdict. A show() in a capture handler of this
|
|
628
|
+
// press runs before this listener. Tie that hold to the press.
|
|
629
|
+
if (isHeldRef.current) {
|
|
630
|
+
if (isHoldInThisTaskRef.current) {
|
|
631
|
+
isHoldFromPressRef.current = true;
|
|
632
|
+
}
|
|
568
633
|
return;
|
|
569
634
|
}
|
|
570
635
|
if (handleTouchPointerDown(event)) {
|
|
@@ -576,7 +641,13 @@ export function useTooltipWithTriggerBehavior(
|
|
|
576
641
|
clearTimeouts();
|
|
577
642
|
hideLayer();
|
|
578
643
|
},
|
|
579
|
-
[
|
|
644
|
+
[
|
|
645
|
+
handleTouchPointerDown,
|
|
646
|
+
trackTriggerPress,
|
|
647
|
+
isOpen,
|
|
648
|
+
clearTimeouts,
|
|
649
|
+
hideLayer,
|
|
650
|
+
],
|
|
580
651
|
);
|
|
581
652
|
|
|
582
653
|
// Interaction ref that handles event listeners only
|
|
@@ -588,6 +659,8 @@ export function useTooltipWithTriggerBehavior(
|
|
|
588
659
|
triggerRef.current.removeEventListener('mouseleave', handleMouseLeave);
|
|
589
660
|
triggerRef.current.removeEventListener('focusin', handleFocusIn);
|
|
590
661
|
triggerRef.current.removeEventListener('focusout', handleFocusOut);
|
|
662
|
+
triggerRef.current.removeEventListener('focusout', handleHeldFocusOut);
|
|
663
|
+
stopPressTrackingRef.current?.();
|
|
591
664
|
triggerRef.current.removeEventListener(
|
|
592
665
|
'pointerenter',
|
|
593
666
|
handlePointerEnter,
|
|
@@ -609,18 +682,19 @@ export function useTooltipWithTriggerBehavior(
|
|
|
609
682
|
el.addEventListener('pointerdown', handlePointerDown);
|
|
610
683
|
|
|
611
684
|
// Focus listeners unless focus never opens the tooltip; `auto` decides
|
|
612
|
-
// per event (
|
|
685
|
+
// per event (utils/triggerFocus.ts).
|
|
613
686
|
if (focusTrigger !== 'never') {
|
|
614
687
|
el.addEventListener('focusin', handleFocusIn);
|
|
615
688
|
el.addEventListener('focusout', handleFocusOut);
|
|
616
689
|
}
|
|
617
690
|
}
|
|
618
691
|
|
|
692
|
+
// Its own focus-leave listener: `focusTrigger="never"` attaches none.
|
|
693
|
+
el?.addEventListener('focusout', handleHeldFocusOut);
|
|
619
694
|
triggerRef.current = el;
|
|
620
|
-
attachPressPin(el);
|
|
621
695
|
},
|
|
622
696
|
[
|
|
623
|
-
|
|
697
|
+
handleHeldFocusOut,
|
|
624
698
|
focusTrigger,
|
|
625
699
|
handleMouseEnter,
|
|
626
700
|
handleMouseLeave,
|
|
@@ -665,9 +739,11 @@ export function useTooltipWithTriggerBehavior(
|
|
|
665
739
|
showLayer();
|
|
666
740
|
} else {
|
|
667
741
|
clearTimeouts();
|
|
742
|
+
// A hold ends when the consumer closes the tooltip.
|
|
743
|
+
dropHold();
|
|
668
744
|
hideLayer();
|
|
669
745
|
}
|
|
670
|
-
}, [isOpen, clearTimeouts, showLayer, hideLayer]);
|
|
746
|
+
}, [isOpen, clearTimeouts, showLayer, hideLayer, dropHold]);
|
|
671
747
|
|
|
672
748
|
// Dismiss on Escape (WCAG 1.4.13 — dismissible) through the shared layer
|
|
673
749
|
// stack. A visible tip is the top-most layer, so it takes the press and
|
|
@@ -708,7 +784,7 @@ export function useTooltipWithTriggerBehavior(
|
|
|
708
784
|
onDismiss: () => {
|
|
709
785
|
clearTimeouts();
|
|
710
786
|
clearTapOpen();
|
|
711
|
-
|
|
787
|
+
dropHold();
|
|
712
788
|
if (isOpen !== undefined) {
|
|
713
789
|
onHide?.();
|
|
714
790
|
return;
|
|
@@ -745,7 +821,7 @@ export function useTooltipWithTriggerBehavior(
|
|
|
745
821
|
// something else in the shared interactive-ancestor walk, so a
|
|
746
822
|
// clickable container around the trigger leaves the press alone while
|
|
747
823
|
// document listeners still see it.
|
|
748
|
-
// The
|
|
824
|
+
// The hold's announcement reads this element's text.
|
|
749
825
|
<div ref={contentRefs} {...stylex.props(styles.content)}>
|
|
750
826
|
{children}
|
|
751
827
|
</div>,
|
|
@@ -763,6 +839,31 @@ export function useTooltipWithTriggerBehavior(
|
|
|
763
839
|
],
|
|
764
840
|
);
|
|
765
841
|
|
|
842
|
+
const show = useCallback(() => {
|
|
843
|
+
clearTimeouts();
|
|
844
|
+
if (!isEnabled) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
setHeld(true);
|
|
848
|
+
armOutsideDismiss();
|
|
849
|
+
isHoldFromPressRef.current = isTriggerPressedRef.current;
|
|
850
|
+
isHoldInThisTaskRef.current = true;
|
|
851
|
+
triggerRef.current?.ownerDocument.defaultView?.setTimeout(() => {
|
|
852
|
+
isHoldInThisTaskRef.current = false;
|
|
853
|
+
}, 0);
|
|
854
|
+
const latest = latestRef.current;
|
|
855
|
+
if (latest.isOpen !== undefined) {
|
|
856
|
+
latest.onShow?.();
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
showLayer();
|
|
860
|
+
}, [clearTimeouts, isEnabled, setHeld, armOutsideDismiss, showLayer]);
|
|
861
|
+
|
|
862
|
+
const hide = useCallback(() => {
|
|
863
|
+
clearTimeouts();
|
|
864
|
+
releaseHold();
|
|
865
|
+
}, [clearTimeouts, releaseHold]);
|
|
866
|
+
|
|
766
867
|
return {
|
|
767
868
|
ref,
|
|
768
869
|
positionRef: layerRef,
|
|
@@ -770,5 +871,7 @@ export function useTooltipWithTriggerBehavior(
|
|
|
770
871
|
anchorId: layerAnchorId,
|
|
771
872
|
describedBy: layerId,
|
|
772
873
|
renderTooltip,
|
|
874
|
+
show,
|
|
875
|
+
hide,
|
|
773
876
|
};
|
|
774
877
|
}
|
|
@@ -24,6 +24,7 @@ import React, {
|
|
|
24
24
|
useCallback,
|
|
25
25
|
useEffect,
|
|
26
26
|
useId,
|
|
27
|
+
useInsertionEffect,
|
|
27
28
|
useMemo,
|
|
28
29
|
useRef,
|
|
29
30
|
useState,
|
|
@@ -775,15 +776,6 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
775
776
|
// source: they can never be re-shown, so focus bootstraps the new source.
|
|
776
777
|
const sourceGenRef = useRef(0);
|
|
777
778
|
|
|
778
|
-
// Results still arriving from a replaced source must not land in the new
|
|
779
|
-
// one's menu.
|
|
780
|
-
const prevSearchSourceRef = useRef(searchSource);
|
|
781
|
-
if (prevSearchSourceRef.current !== searchSource) {
|
|
782
|
-
prevSearchSourceRef.current.cancel?.();
|
|
783
|
-
prevSearchSourceRef.current = searchSource;
|
|
784
|
-
sourceGenRef.current = ++searchGenRef.current;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
779
|
// The previous source is remembered in state, not a ref, so a render React
|
|
788
780
|
// discards cannot consume the comparison without its state updates.
|
|
789
781
|
const [sourceOfState, setSourceOfState] = useState(searchSource);
|
|
@@ -793,7 +785,6 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
793
785
|
setIsLoading(false);
|
|
794
786
|
setHasSearched(false);
|
|
795
787
|
}
|
|
796
|
-
loadingRef.current = false;
|
|
797
788
|
}
|
|
798
789
|
// A field that becomes disabled stops showing a search as busy in the same
|
|
799
790
|
// render, and the dropped query shows no outcome, so no empty state; the
|
|
@@ -807,15 +798,34 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
|
|
|
807
798
|
}
|
|
808
799
|
}
|
|
809
800
|
|
|
810
|
-
//
|
|
811
|
-
// source
|
|
812
|
-
//
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
801
|
+
// Results that arrive from a replaced source must not land in the new
|
|
802
|
+
// source's menu, so the replacement starts a new generation. That happens
|
|
803
|
+
// when the replacement commits, not in render. React can render a
|
|
804
|
+
// replacement and then discard it, for example when a transition suspends
|
|
805
|
+
// and a newer update replaces it. The source that stays then keeps its read.
|
|
806
|
+
// An insertion effect runs before every layout effect and ref callback of
|
|
807
|
+
// its commit. A read that one of them starts against the replacement gets a
|
|
808
|
+
// later generation, after the replaced source stopped its requests.
|
|
809
|
+
const prevSearchSourceRef = useRef(searchSource);
|
|
810
|
+
const isSourceReplacedRef = useRef(false);
|
|
811
|
+
useInsertionEffect(() => {
|
|
812
|
+
if (prevSearchSourceRef.current === searchSource) {
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
prevSearchSourceRef.current.cancel?.();
|
|
816
|
+
prevSearchSourceRef.current = searchSource;
|
|
817
|
+
sourceGenRef.current = ++searchGenRef.current;
|
|
818
|
+
// The replacing render cleared the busy state.
|
|
819
|
+
loadingRef.current = false;
|
|
820
|
+
isSourceReplacedRef.current = true;
|
|
821
|
+
}, [searchSource]);
|
|
822
|
+
// Syncs the wrapper's busy lane. A read of the replacement that already
|
|
823
|
+
// started keeps the lane busy.
|
|
824
|
+
useIsomorphicLayoutEffect(() => {
|
|
825
|
+
if (!isSourceReplacedRef.current) {
|
|
817
826
|
return;
|
|
818
827
|
}
|
|
828
|
+
isSourceReplacedRef.current = false;
|
|
819
829
|
if (!loadingRef.current) {
|
|
820
830
|
onLoadingChangeRef.current?.(false);
|
|
821
831
|
}
|
|
@@ -43,7 +43,8 @@ export const docs = {
|
|
|
43
43
|
{
|
|
44
44
|
name: 'group',
|
|
45
45
|
type: 'string',
|
|
46
|
-
description:
|
|
46
|
+
description:
|
|
47
|
+
'This prop has no effect. Set `item.auxiliaryData.group` on search-source items to group results in Typeahead or BaseTypeahead.',
|
|
47
48
|
},
|
|
48
49
|
],
|
|
49
50
|
};
|
|
@@ -79,7 +80,8 @@ export const docsZh = {
|
|
|
79
80
|
{
|
|
80
81
|
name: 'group',
|
|
81
82
|
type: 'string',
|
|
82
|
-
description:
|
|
83
|
+
description:
|
|
84
|
+
'此属性不影响渲染。要在 Typeahead 或 BaseTypeahead 中分组,请在搜索源返回的结果项上设置 `item.auxiliaryData.group`。',
|
|
83
85
|
},
|
|
84
86
|
],
|
|
85
87
|
};
|
|
@@ -94,6 +96,7 @@ export const docsDense = {
|
|
|
94
96
|
icon: 'Icon/avatar before label.',
|
|
95
97
|
description: 'Text below label.',
|
|
96
98
|
isDisabled: 'Visually disabled.',
|
|
97
|
-
group:
|
|
99
|
+
group:
|
|
100
|
+
'No effect. Group results via `item.auxiliaryData.group` in the search source.',
|
|
98
101
|
},
|
|
99
102
|
};
|
|
@@ -54,7 +54,8 @@ export interface TypeaheadItemProps<
|
|
|
54
54
|
isDisabled?: boolean;
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* This prop has no effect. Set `item.auxiliaryData.group` on search-source
|
|
58
|
+
* items to group results in Typeahead or BaseTypeahead.
|
|
58
59
|
*/
|
|
59
60
|
group?: string;
|
|
60
61
|
}
|