@astryxdesign/core 0.7.7 → 0.7.8-canary.0588a13
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 +1 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +55 -18
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
- package/dist/BottomSheet/bottomSheetStack.js +1 -1
- package/dist/BottomSheet/useSheetGestures.d.ts +3 -1
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +16 -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 +20 -2
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +12 -4
- package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListContext.js +2 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +14 -2
- package/dist/CheckboxList/requiredGroup.d.ts +22 -0
- package/dist/CheckboxList/requiredGroup.d.ts.map +1 -0
- package/dist/CheckboxList/requiredGroup.js +52 -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 +646 -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 +133 -120
- package/dist/DateInput/datePickerTouch.d.ts +13 -0
- package/dist/DateInput/datePickerTouch.d.ts.map +1 -0
- package/dist/DateInput/datePickerTouch.js +14 -0
- 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 +94 -0
- package/dist/DateInput/wheelOptions.d.ts.map +1 -0
- package/dist/DateInput/wheelOptions.js +110 -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 +70 -127
- 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 +26 -34
- package/dist/Icon/Icon.d.ts +5 -1
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +20 -3
- 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/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +7 -2
- 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 +41 -4
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +441 -134
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +125 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
- package/dist/PowerSearch/PowerSearchBottomSheet.js +2041 -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 +116 -92
- package/dist/Resizable/createResizable.d.ts +199 -0
- package/dist/Resizable/createResizable.d.ts.map +1 -0
- package/dist/Resizable/createResizable.js +733 -0
- package/dist/Resizable/separatorAttributes.d.ts +45 -0
- package/dist/Resizable/separatorAttributes.d.ts.map +1 -0
- package/dist/Resizable/separatorAttributes.js +35 -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 +12 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +17 -3
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +27 -14
- 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/TimeWheels.d.ts +32 -0
- package/dist/TimeInput/TimeWheels.d.ts.map +1 -0
- package/dist/TimeInput/TimeWheels.js +144 -0
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +63 -116
- package/dist/TimeInput/timeWheelRules.d.ts +124 -0
- package/dist/TimeInput/timeWheelRules.d.ts.map +1 -0
- package/dist/TimeInput/timeWheelRules.js +277 -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 +12 -18
- 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 +200 -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 +53 -8
- package/dist/gestures/GestureHost.d.ts +16 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +4 -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 +18 -7
- 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 +45 -0
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
- package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts +8 -0
- package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/Resizable/createResizable.generated.js +13 -0
- package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.js +3 -1
- package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.js +3 -1
- package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts +8 -0
- package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.js +17 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +37 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +37 -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/keyboard/index.d.ts +17 -0
- package/dist/keyboard/index.d.ts.map +1 -0
- package/dist/keyboard/index.js +19 -0
- package/dist/keyboard/keyboardHeight.d.ts +149 -0
- package/dist/keyboard/keyboardHeight.d.ts.map +1 -0
- package/dist/keyboard/keyboardHeight.js +432 -0
- package/dist/keyboard/keyboardLayoutGuide.d.ts +59 -0
- package/dist/keyboard/keyboardLayoutGuide.d.ts.map +1 -0
- package/dist/keyboard/keyboardLayoutGuide.js +207 -0
- package/dist/keyboard/keyboardModel.d.ts +93 -0
- package/dist/keyboard/keyboardModel.d.ts.map +1 -0
- package/dist/keyboard/keyboardModel.js +220 -0
- package/dist/keyboard/rideKeyboard.d.ts +42 -0
- package/dist/keyboard/rideKeyboard.d.ts.map +1 -0
- package/dist/keyboard/rideKeyboard.js +77 -0
- package/dist/keyboard/useMobileKeyboard.d.ts +61 -0
- package/dist/keyboard/useMobileKeyboard.d.ts.map +1 -0
- package/dist/keyboard/useMobileKeyboard.js +699 -0
- package/dist/motion/android/index.d.ts +16 -0
- package/dist/motion/android/index.d.ts.map +1 -0
- package/dist/motion/android/index.js +18 -0
- package/dist/motion/android/keyboard.d.ts +83 -0
- package/dist/motion/android/keyboard.d.ts.map +1 -0
- package/dist/motion/android/keyboard.js +96 -0
- 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/datePicker.d.ts +58 -0
- package/dist/motion/uikit/datePicker.d.ts.map +1 -0
- package/dist/motion/uikit/datePicker.js +60 -0
- package/dist/motion/uikit/index.d.ts +6 -4
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +6 -4
- 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 +6 -4
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +6 -4
- 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/layoutViewport.d.ts +25 -0
- package/dist/utils/layoutViewport.d.ts.map +1 -0
- package/dist/utils/layoutViewport.js +102 -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 +6 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +97 -18
- package/dist/utils/pressGesture.d.ts +4 -2
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +3 -1
- package/dist/utils/selectionLock.d.ts +10 -1
- package/dist/utils/selectionLock.d.ts.map +1 -1
- package/dist/utils/selectionLock.js +31 -5
- package/dist/utils/sharedMutationObserver.d.ts +2 -1
- package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
- package/dist/utils/sharedMutationObserver.js +2 -1
- package/dist/utils/timeParser.d.ts +2 -1
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +29 -3
- 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 +148 -0
- package/locales/pseudo.json +111 -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.doc.mjs +1 -1
- package/src/BottomSheet/BottomSheet.tsx +1 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +80 -16
- package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +5 -0
- package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
- package/src/BottomSheet/bottomSheetStack.ts +1 -1
- package/src/BottomSheet/useSheetGestures.ts +16 -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 +14 -0
- package/src/CheckboxList/CheckboxList.tsx +43 -2
- package/src/CheckboxList/CheckboxListContext.tsx +9 -1
- package/src/CheckboxList/CheckboxListItem.tsx +23 -2
- package/src/CheckboxList/requiredGroup.ts +77 -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 +796 -0
- package/src/DateInput/TouchDateField.tsx +6 -32
- package/src/DateInput/Wheel.tsx +188 -171
- package/src/DateInput/datePickerTouch.ts +15 -0
- 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 +184 -0
- package/src/DateInput/wheelPhysics.ts +406 -0
- package/src/DateInput/wheelStrip.ts +341 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +100 -189
- 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 +55 -55
- package/src/Icon/Icon.doc.mjs +51 -10
- package/src/Icon/Icon.tsx +31 -8
- 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/Overlay/Overlay.tsx +7 -2
- 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 +622 -157
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +2700 -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 +187 -135
- package/src/Resizable/createResizable.ts +1046 -0
- package/src/Resizable/separatorAttributes.ts +73 -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 +31 -7
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
- package/src/Table/plugins/tree/useTableTreeData.tsx +43 -20
- package/src/Table/useTableRowExpansion.doc.mjs +9 -0
- package/src/Table/useTableTreeData.doc.mjs +15 -3
- package/src/TextArea/TextArea.tsx +2 -7
- package/src/TextInput/TextInput.tsx +13 -17
- package/src/TimeInput/TimeInput.tsx +2 -0
- package/src/TimeInput/TimeWheels.tsx +218 -0
- package/src/TimeInput/TouchTimeField.tsx +93 -155
- package/src/TimeInput/timeWheelRules.ts +352 -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 +17 -23
- 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 +243 -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 +6 -5
- 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 +25 -9
- 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 +46 -0
- package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
- package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
- package/src/i18n/generated-english/Resizable/createResizable.generated.ts +14 -0
- package/src/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.ts +3 -1
- package/src/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.ts +3 -1
- package/src/i18n/generated-english/TimeInput/TimeWheels.generated.ts +18 -0
- package/src/i18n/generated-locales/en.generated.ts +47 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +48 -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/keyboard/README.md +197 -0
- package/src/keyboard/index.ts +48 -0
- package/src/keyboard/keyboardHeight.ts +543 -0
- package/src/keyboard/keyboardLayoutGuide.ts +266 -0
- package/src/keyboard/keyboardModel.ts +301 -0
- package/src/keyboard/rideKeyboard.ts +100 -0
- package/src/keyboard/useMobileKeyboard.ts +866 -0
- package/src/motion/MEASUREMENTS.md +28 -0
- package/src/motion/README.md +12 -5
- package/src/motion/android/index.ts +18 -0
- package/src/motion/android/keyboard.ts +96 -0
- 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/datePicker.ts +60 -0
- package/src/motion/uikit/index.ts +6 -4
- 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 +6 -4
- package/src/utils/isFocusDetached.ts +34 -0
- package/src/utils/layoutViewport.ts +104 -0
- package/src/utils/plainDate.ts +80 -4
- package/src/utils/pressFeedback.ts +126 -30
- package/src/utils/pressGesture.ts +4 -2
- package/src/utils/selectionLock.ts +40 -6
- package/src/utils/sharedMutationObserver.ts +2 -1
- package/src/utils/timeParser.ts +40 -3
- package/src/utils/triggerFocus.ts +80 -0
- package/dist/BottomSheet/useMobileKeyboard.d.ts +0 -21
- package/dist/BottomSheet/useMobileKeyboard.d.ts.map +0 -1
- package/dist/BottomSheet/useMobileKeyboard.js +0 -407
- 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/BottomSheet/useMobileKeyboard.ts +0 -538
- package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
- package/src/Layer/usePressPin.ts +0 -510
- package/src/internal/touch-sheet.ts +0 -21
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
useMemo,
|
|
22
22
|
useRef,
|
|
23
23
|
useState,
|
|
24
|
+
useSyncExternalStore,
|
|
24
25
|
} from 'react';
|
|
25
26
|
import type {ReactNode} from 'react';
|
|
26
27
|
import {createPortal} from 'react-dom';
|
|
@@ -28,6 +29,11 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
28
29
|
import {spacingVars, durationVars, easeVars} from '../theme/tokens.stylex';
|
|
29
30
|
import {mergeProps} from '../utils';
|
|
30
31
|
import {getNodeText} from '../utils/getNodeText';
|
|
32
|
+
import {
|
|
33
|
+
moveFocusLeftBehind,
|
|
34
|
+
noteFocusWithin,
|
|
35
|
+
type FocusWithin,
|
|
36
|
+
} from '../utils/focusReturn';
|
|
31
37
|
import {INTERACTIVE_SELECTORS} from '../hooks/useClickableContainer';
|
|
32
38
|
import {useAnnounce} from '../hooks/useAnnounce';
|
|
33
39
|
import {layerTextReset} from '../Layer/layerTextReset.stylex';
|
|
@@ -224,6 +230,8 @@ interface ToastRowProps {
|
|
|
224
230
|
isReversed: boolean;
|
|
225
231
|
onExited: (id: string) => void;
|
|
226
232
|
onDismiss: (id: string, reason: ToastDismissReason) => void;
|
|
233
|
+
/** Whether the card carries its own live region (see ToastViewport). */
|
|
234
|
+
isLiveRegion: boolean;
|
|
227
235
|
}
|
|
228
236
|
|
|
229
237
|
/**
|
|
@@ -246,6 +254,7 @@ function ToastRow({
|
|
|
246
254
|
isReversed,
|
|
247
255
|
onExited,
|
|
248
256
|
onDismiss,
|
|
257
|
+
isLiveRegion,
|
|
249
258
|
}: ToastRowProps) {
|
|
250
259
|
const o = entry.options;
|
|
251
260
|
const type = o.type ?? 'info';
|
|
@@ -296,6 +305,8 @@ function ToastRow({
|
|
|
296
305
|
gestureDirection={isReversed ? -1 : 1}
|
|
297
306
|
onDismiss={reason => onDismiss(entry.id, reason)}
|
|
298
307
|
renderContent={o.renderContent}
|
|
308
|
+
timerKey={entry.id}
|
|
309
|
+
isLiveRegion={isLiveRegion}
|
|
299
310
|
/>
|
|
300
311
|
</div>
|
|
301
312
|
</div>
|
|
@@ -303,6 +314,9 @@ function ToastRow({
|
|
|
303
314
|
}
|
|
304
315
|
ToastRow.displayName = 'ToastRow';
|
|
305
316
|
|
|
317
|
+
const hasActiveModalOutlet = (): boolean => getActiveModalOutlet() != null;
|
|
318
|
+
const hasNoModalOutlet = (): boolean => false;
|
|
319
|
+
|
|
306
320
|
/**
|
|
307
321
|
* Container that renders and manages toast notifications. Place at the root
|
|
308
322
|
* of your app to enable useToast(). Toasts stack with enter/exit
|
|
@@ -363,6 +377,13 @@ export function ToastViewport({
|
|
|
363
377
|
// The next toast id that should receive focus once the dismissed toast has
|
|
364
378
|
// unmounted, or 'restore' to fall back to the previously-focused element.
|
|
365
379
|
const pendingFocusRef = useRef<string | 'restore' | null>(null);
|
|
380
|
+
// The id of a toast whose overwrite updated a row that held focus. If the
|
|
381
|
+
// update removed the focused control, the commit hands focus off.
|
|
382
|
+
const overwriteFocusRef = useRef<{id: string; note: FocusWithin} | null>(
|
|
383
|
+
null,
|
|
384
|
+
);
|
|
385
|
+
// Where focus was inside a toast whose dismissal hands focus off.
|
|
386
|
+
const dismissFocusNoteRef = useRef<FocusWithin | null>(null);
|
|
366
387
|
|
|
367
388
|
// Collect a focusable control within a toast node, if any.
|
|
368
389
|
// Reuses the canonical INTERACTIVE_SELECTORS list (native controls plus
|
|
@@ -392,13 +413,9 @@ export function ToastViewport({
|
|
|
392
413
|
[],
|
|
393
414
|
);
|
|
394
415
|
|
|
395
|
-
// Announce toasts through the persistent singleton live regions.
|
|
396
|
-
//
|
|
397
|
-
//
|
|
398
|
-
// screen readers do not announce (see useAnnounce.ts); the singleton regions
|
|
399
|
-
// are mounted empty and only mutated afterwards, so they are what actually
|
|
400
|
-
// guarantees the announcement (the per-toast markup is kept for browse-mode
|
|
401
|
-
// discoverability). The announcement happens in addToast — the imperative
|
|
416
|
+
// Announce toasts through the persistent singleton live regions. They are
|
|
417
|
+
// mounted empty and only mutated afterwards, which screen readers announce
|
|
418
|
+
// (see useAnnounce.ts). The announcement happens in addToast — the imperative
|
|
402
419
|
// dispatch path invoked once per useToast() call from an event handler,
|
|
403
420
|
// never from render — so each toast is announced exactly once by
|
|
404
421
|
// construction, independent of the React render lifecycle (StrictMode
|
|
@@ -406,6 +423,16 @@ export function ToastViewport({
|
|
|
406
423
|
// re-renders never re-announce). It is client-only (addToast never runs
|
|
407
424
|
// during SSR), so it is SSR-safe.
|
|
408
425
|
const announce = useAnnounce();
|
|
426
|
+
// An open native modal hides the body-level channel above from assistive
|
|
427
|
+
// technology, so while the viewport is hosted in one, each card announces
|
|
428
|
+
// itself through its own live region instead. Outside a modal the cards
|
|
429
|
+
// carry none, so a card updated in place is announced once.
|
|
430
|
+
const hasModalOutlet = useSyncExternalStore(
|
|
431
|
+
subscribeModalOutlets,
|
|
432
|
+
hasActiveModalOutlet,
|
|
433
|
+
hasNoModalOutlet,
|
|
434
|
+
);
|
|
435
|
+
const isModalHosted = isTopLayer && hasModalOutlet;
|
|
409
436
|
|
|
410
437
|
const addToast = useCallback(
|
|
411
438
|
(entry: ToastEntry) => {
|
|
@@ -441,9 +468,29 @@ export function ToastViewport({
|
|
|
441
468
|
if (overwritten && renderedToastsRef.current.includes(overwritten)) {
|
|
442
469
|
replacedRef.current.set(overwritten.id, overwritten);
|
|
443
470
|
}
|
|
471
|
+
// An overwrite of a toast that is not leaving keeps its row, so the card
|
|
472
|
+
// updates in place and focus inside it stays. A leaving namesake
|
|
473
|
+
// is replaced by a new row, which enters again.
|
|
474
|
+
const keepsRow =
|
|
475
|
+
overwritten != null && !exitingIdsRef.current.has(overwritten.id);
|
|
476
|
+
const placed: ToastEntry = keepsRow
|
|
477
|
+
? {...entry, rowKey: overwritten.rowKey ?? overwritten.id}
|
|
478
|
+
: entry;
|
|
479
|
+
if (keepsRow) {
|
|
480
|
+
// If the update removes the focused control, the commit hands focus
|
|
481
|
+
// off as a dismissal does.
|
|
482
|
+
const note = noteFocusWithin(
|
|
483
|
+
viewportRef.current?.querySelector<HTMLElement>(
|
|
484
|
+
`[data-toast-id="${overwritten.id}"]`,
|
|
485
|
+
),
|
|
486
|
+
);
|
|
487
|
+
if (note != null) {
|
|
488
|
+
overwriteFocusRef.current = {id: placed.id, note};
|
|
489
|
+
}
|
|
490
|
+
}
|
|
444
491
|
const projected = overwritten
|
|
445
|
-
? committed.map(t => (t === overwritten ?
|
|
446
|
-
: [...committed,
|
|
492
|
+
? committed.map(t => (t === overwritten ? placed : t))
|
|
493
|
+
: [...committed, placed];
|
|
447
494
|
// `maxVisible={0}` shows every toast (FR7): nothing leaves the window.
|
|
448
495
|
const firstVisible = maxVisible > 0 ? projected.length - maxVisible : 0;
|
|
449
496
|
const cutIds = new Set(
|
|
@@ -470,7 +517,7 @@ export function ToastViewport({
|
|
|
470
517
|
}
|
|
471
518
|
}
|
|
472
519
|
}
|
|
473
|
-
pending.set(entry.id,
|
|
520
|
+
pending.set(entry.id, placed);
|
|
474
521
|
// An overwrite swaps a new entry, with a new id, into the replaced
|
|
475
522
|
// toast's place, so the old row leaves the DOM without ever being
|
|
476
523
|
// dismissed. Its settled id is dropped by the prune below, which covers
|
|
@@ -482,8 +529,8 @@ export function ToastViewport({
|
|
|
482
529
|
// overwrite into an append. An ignored collision already returned.
|
|
483
530
|
const kept = prev.filter(t => !cutIds.has(t.id));
|
|
484
531
|
return overwritten && kept.includes(overwritten)
|
|
485
|
-
? kept.map(t => (t === overwritten ?
|
|
486
|
-
: [...kept,
|
|
532
|
+
? kept.map(t => (t === overwritten ? placed : t))
|
|
533
|
+
: [...kept, placed];
|
|
487
534
|
});
|
|
488
535
|
},
|
|
489
536
|
[announce, maxVisible],
|
|
@@ -512,14 +559,23 @@ export function ToastViewport({
|
|
|
512
559
|
// focused before the user entered the viewport) rather than <body>.
|
|
513
560
|
const el = viewportRef.current;
|
|
514
561
|
const active = document.activeElement;
|
|
515
|
-
|
|
516
|
-
|
|
562
|
+
// A toast an overwrite replaced in place no longer owns its row: the
|
|
563
|
+
// replacement does, so dismissing the replaced toast leaves the row, and
|
|
564
|
+
// focus in it, to the replacement.
|
|
565
|
+
const rowKey = entry.rowKey ?? entry.id;
|
|
566
|
+
const isReplacedInPlace =
|
|
567
|
+
!toastsRef.current.some(t => t.id === id) &&
|
|
568
|
+
toastsRef.current.some(t => t.rowKey === rowKey);
|
|
569
|
+
const dismissedNode = isReplacedInPlace
|
|
570
|
+
? null
|
|
571
|
+
: (el?.querySelector<HTMLElement>(`[data-toast-id="${id}"]`) ?? null);
|
|
517
572
|
if (
|
|
518
573
|
dismissedNode &&
|
|
519
574
|
active instanceof Node &&
|
|
520
575
|
dismissedNode.contains(active)
|
|
521
576
|
) {
|
|
522
577
|
focusHandoffIdRef.current = id;
|
|
578
|
+
dismissFocusNoteRef.current = noteFocusWithin(dismissedNode);
|
|
523
579
|
// Pick the toast to receive focus while the DOM is still intact: the
|
|
524
580
|
// nearest one after it, then before it, that shows once it is gone
|
|
525
581
|
// (FR10), else restore. The list may already run ahead of the render
|
|
@@ -587,6 +643,41 @@ export function ToastViewport({
|
|
|
587
643
|
setToasts(prev => prev.filter(t => t.id !== id));
|
|
588
644
|
}, []);
|
|
589
645
|
|
|
646
|
+
// Moves focus to a control in the target toast, else in another toast that
|
|
647
|
+
// shows (newest first), else back to the element focused before focus
|
|
648
|
+
// entered the viewport, so a handoff never drops focus to <body>.
|
|
649
|
+
const handOffFocus = useCallback(
|
|
650
|
+
(note: FocusWithin | null, targetId: string | null) => {
|
|
651
|
+
const el = viewportRef.current;
|
|
652
|
+
const rowFor = (id: string) =>
|
|
653
|
+
el?.querySelector<HTMLElement>(`[data-toast-id="${id}"]`) ?? null;
|
|
654
|
+
const shownIds = toastsRef.current
|
|
655
|
+
.slice(maxVisibleRef.current > 0 ? -maxVisibleRef.current : 0)
|
|
656
|
+
.map(t => t.id)
|
|
657
|
+
.reverse();
|
|
658
|
+
const candidates =
|
|
659
|
+
targetId == null
|
|
660
|
+
? []
|
|
661
|
+
: [targetId, ...shownIds.filter(id => id !== targetId)];
|
|
662
|
+
let target: HTMLElement | null = null;
|
|
663
|
+
for (const id of candidates) {
|
|
664
|
+
target = getFocusable(rowFor(id));
|
|
665
|
+
if (target != null) {
|
|
666
|
+
break;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
const prev = prevFocusRef.current;
|
|
670
|
+
const isReturning = target == null && prev != null && prev.isConnected;
|
|
671
|
+
if (target == null) {
|
|
672
|
+
target = isReturning ? prev : el;
|
|
673
|
+
}
|
|
674
|
+
if (moveFocusLeftBehind(note, target) && isReturning) {
|
|
675
|
+
prevFocusRef.current = null;
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
[getFocusable],
|
|
679
|
+
);
|
|
680
|
+
|
|
590
681
|
// After a dismissed toast unmounts, hand focus off so it never falls to
|
|
591
682
|
// <body>. Runs in a layout effect once the toast list no longer contains
|
|
592
683
|
// the dismissed toast.
|
|
@@ -602,27 +693,21 @@ export function ToastViewport({
|
|
|
602
693
|
}
|
|
603
694
|
focusHandoffIdRef.current = null;
|
|
604
695
|
pendingFocusRef.current = null;
|
|
605
|
-
const
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
// No remaining toast to receive focus — restore the previously-focused
|
|
617
|
-
// element if it's still connected, else fall back to the container.
|
|
618
|
-
const prev = prevFocusRef.current;
|
|
619
|
-
prevFocusRef.current = null;
|
|
620
|
-
if (prev && prev.isConnected) {
|
|
621
|
-
prev.focus();
|
|
622
|
-
} else if (el) {
|
|
623
|
-
el.focus();
|
|
696
|
+
const note = dismissFocusNoteRef.current;
|
|
697
|
+
dismissFocusNoteRef.current = null;
|
|
698
|
+
handOffFocus(note, target === 'restore' ? null : target);
|
|
699
|
+
}, [toasts, handOffFocus]);
|
|
700
|
+
|
|
701
|
+
// After an overwrite updated a row that held focus: focus stays on the same
|
|
702
|
+
// control, or, if the update removed it, moves as a dismissal hands it off.
|
|
703
|
+
useLayoutEffect(() => {
|
|
704
|
+
const overwrite = overwriteFocusRef.current;
|
|
705
|
+
if (overwrite == null) {
|
|
706
|
+
return;
|
|
624
707
|
}
|
|
625
|
-
|
|
708
|
+
overwriteFocusRef.current = null;
|
|
709
|
+
handOffFocus(overwrite.note, overwrite.id);
|
|
710
|
+
}, [toasts, handOffFocus]);
|
|
626
711
|
|
|
627
712
|
const findByUniqueID = useCallback((uid: string) => {
|
|
628
713
|
return toastsRef.current.find(t => t.options.uniqueID === uid);
|
|
@@ -672,6 +757,8 @@ export function ToastViewport({
|
|
|
672
757
|
};
|
|
673
758
|
}, [isTopLayer]);
|
|
674
759
|
|
|
760
|
+
// Syncs the host's place with the modal outlet registry. The host moves into
|
|
761
|
+
// the latest open modal, and back when that modal closes.
|
|
675
762
|
useLayoutEffect(() => {
|
|
676
763
|
if (!isTopLayer || host == null) {
|
|
677
764
|
return;
|
|
@@ -830,12 +917,13 @@ export function ToastViewport({
|
|
|
830
917
|
<LayerContentBoundary>
|
|
831
918
|
{visibleToasts.map(entry => (
|
|
832
919
|
<ToastRow
|
|
833
|
-
key={entry.id}
|
|
920
|
+
key={entry.rowKey ?? entry.id}
|
|
834
921
|
entry={entry}
|
|
835
922
|
isExiting={exitingIds.has(entry.id)}
|
|
836
923
|
isReversed={isReversed}
|
|
837
924
|
onExited={handleExited}
|
|
838
925
|
onDismiss={removeToast}
|
|
926
|
+
isLiveRegion={isModalHosted}
|
|
839
927
|
/>
|
|
840
928
|
))}
|
|
841
929
|
</LayerContentBoundary>
|
package/src/Toast/types.ts
CHANGED
|
@@ -38,9 +38,10 @@ export interface ToastOptions {
|
|
|
38
38
|
/**
|
|
39
39
|
* Replaces the content of this toast's card with your own layout.
|
|
40
40
|
*
|
|
41
|
-
* Astryx keeps the card
|
|
42
|
-
* the
|
|
43
|
-
*
|
|
41
|
+
* Astryx keeps the card and its auto-hide behavior (inside a
|
|
42
|
+
* `ToastViewport` the viewport announces the toast, and while a modal hosts
|
|
43
|
+
* the viewport the card announces itself), then hands the
|
|
44
|
+
* renderer this toast's content, resolved settings and `dismiss` callback. The renderer owns every control inside its layout; call
|
|
44
45
|
* `dismiss` from the control that should close the toast. Astryx does not
|
|
45
46
|
* inject a fallback control into custom content.
|
|
46
47
|
*
|
|
@@ -100,4 +101,9 @@ export interface ToastEntry {
|
|
|
100
101
|
id: string;
|
|
101
102
|
options: ToastOptions;
|
|
102
103
|
createdAt: number;
|
|
104
|
+
/**
|
|
105
|
+
* The row's identity in the stack. A uniqueID overwrite keeps the replaced
|
|
106
|
+
* toast's, so the card updates in place and focus inside it stays.
|
|
107
|
+
*/
|
|
108
|
+
rowKey?: string;
|
|
103
109
|
}
|
package/src/Toast/useToast.tsx
CHANGED
|
@@ -91,6 +91,7 @@ function getFallbackContext(): ToastContextValue {
|
|
|
91
91
|
const FallbackCapture = () => {
|
|
92
92
|
const ctx = use(ToastContext);
|
|
93
93
|
const doneRef = useRef(false);
|
|
94
|
+
// Syncs the module-level fallback with the first toast context that mounts.
|
|
94
95
|
useEffect(() => {
|
|
95
96
|
if (ctx && !doneRef.current) {
|
|
96
97
|
doneRef.current = true;
|
|
@@ -293,11 +293,11 @@ export const docs = {
|
|
|
293
293
|
description: 'Inline styles for the visual control box.',
|
|
294
294
|
},
|
|
295
295
|
{
|
|
296
|
-
name: '
|
|
297
|
-
type: "
|
|
298
|
-
stability: 'experimental',
|
|
296
|
+
name: 'presentation',
|
|
297
|
+
type: "'popover' | 'bottom-sheet' | 'adaptive'",
|
|
299
298
|
description:
|
|
300
|
-
|
|
299
|
+
'How the field presents its choices. adaptive (the default) uses the bottom sheet on compact touch screens and the popover otherwise, resolved the same way Selector resolves it; the server render and the hydrating render are the popover. popover is the inline combobox with its anchored suggestion menu on every device. bottom-sheet replaces it on every device with a trigger showing the selected tokens that opens one tall modal sheet: a search row on top, full-width checkbox rows that keep their place while the sheet is open, a Create row with hasCreate, and a footer pinned in every state with a confirmed Clear all and Save; the sheet edits a draft, so onChange fires once, when Save commits it, and a swipe, scrim or Escape close of a changed draft asks before discarding. In the sheet presentation the trigger is the control: ref, id, aria-* and data-* reach it, and ref receives the trigger button there, so type it Ref<HTMLInputElement | HTMLButtonElement>, which the component accepts (TokenizerProps keeps its released input ref type). renderItem, renderToken, endContent, hasClear, hasEntriesOnFocus, menuWidth, tokenOverflowBehavior and hasAutoFocus have no surface in the sheet, and the field warns once in development when they are passed. Pass presentation="popover" to keep the inline field and those props on every device.',
|
|
300
|
+
default: "'adaptive'",
|
|
301
301
|
},
|
|
302
302
|
],
|
|
303
303
|
theming: {
|
|
@@ -639,11 +639,11 @@ export const docsZh = {
|
|
|
639
639
|
description: '可视控件框的内联样式。',
|
|
640
640
|
},
|
|
641
641
|
{
|
|
642
|
-
name: '
|
|
643
|
-
type: "
|
|
644
|
-
stability: 'experimental',
|
|
642
|
+
name: 'presentation',
|
|
643
|
+
type: "'popover' | 'bottom-sheet' | 'adaptive'",
|
|
645
644
|
description:
|
|
646
|
-
|
|
645
|
+
'字段如何呈现选项。adaptive(默认)在紧凑触摸屏上使用底部面板,其他情况使用 popover,解析方式与 Selector 相同;服务端渲染和水合期间的渲染均为 popover。popover 在所有设备上为内联组合框及其锚定建议菜单。bottom-sheet 在所有设备上改为一个显示已选标记的触发按钮,点按后打开一个高的模态底部面板——顶部为搜索行,下方为整行复选框行(面板打开期间位置保持不变),hasCreate 时有「创建」行,底部固定显示需确认的「全部清除」和「保存」;面板编辑的是草稿,onChange 仅在「保存」提交时触发一次,草稿有改动时滑动、点击遮罩或按 Escape 关闭会先询问是否放弃。在底部面板呈现中,触发按钮即为控件:ref、id、aria-* 和 data-* 都作用于它,ref 在该呈现中收到的是触发按钮,因此请将其类型声明为组件所接受的 Ref<HTMLInputElement | HTMLButtonElement>(TokenizerProps 保留已发布的输入框 ref 类型)。renderItem、renderToken、endContent、hasClear、hasEntriesOnFocus、menuWidth、tokenOverflowBehavior 和 hasAutoFocus 在底部面板中没有作用对象,传入时开发模式下会警告一次。传入 presentation="popover" 可在所有设备上保留内联字段和这些属性。',
|
|
646
|
+
default: "'adaptive'",
|
|
647
647
|
},
|
|
648
648
|
],
|
|
649
649
|
theming: {
|
|
@@ -844,7 +844,7 @@ export const docsDense = {
|
|
|
844
844
|
'Icon at input start, before tokens. Icon name, SVG component, or ReactNode.',
|
|
845
845
|
endContent: 'Content at input row end. For buttons, counts, controls.',
|
|
846
846
|
handleRef: 'Imperative handle for focus() and blur() control.',
|
|
847
|
-
|
|
848
|
-
"
|
|
847
|
+
presentation:
|
|
848
|
+
"'adaptive' (default: sheet on compact touch, else popover; SSR/hydration render popover) | 'popover' (inline combobox, every device) | 'bottom-sheet' (trigger + one searchable modal sheet of checkbox rows editing a draft that Save commits; onChange fires once, on Save). Sheet: ref reaches the trigger button; renderItem/renderToken/endContent/hasClear/hasEntriesOnFocus/menuWidth/tokenOverflowBehavior/hasAutoFocus inert (dev warning). presentation=\"popover\" keeps them on every device.",
|
|
849
849
|
},
|
|
850
850
|
};
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* useAdaptivePresentation, and TokenizerBottomSheet (lazy)
|
|
9
9
|
* @output Exports Tokenizer multi-select typeahead component
|
|
10
10
|
* @position Composed component; forwards DOM ref and exposes focus control via
|
|
11
|
-
* handleRef. The
|
|
12
|
-
*
|
|
11
|
+
* handleRef. The `presentation` prop swaps the inline combobox for a
|
|
12
|
+
* trigger that opens TokenizerBottomSheet.
|
|
13
13
|
*
|
|
14
14
|
* SYNC: When modified, update:
|
|
15
15
|
* - /packages/core/src/Tokenizer/index.ts
|
|
@@ -51,7 +51,10 @@ import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
|
51
51
|
import {TokenizerClearAllMessageContext} from './TokenizerClearAllMessageContext';
|
|
52
52
|
import {TokenizerItemRemovableContext} from './TokenizerItemRemovableContext';
|
|
53
53
|
import {useBusyAnnouncement} from '../hooks/useBusyAnnouncement';
|
|
54
|
-
import {
|
|
54
|
+
import {
|
|
55
|
+
type AdaptivePresentation,
|
|
56
|
+
useAdaptivePresentation,
|
|
57
|
+
} from '../hooks/useAdaptivePresentation';
|
|
55
58
|
import {useIsHydrating} from '../hooks/useIsHydrating';
|
|
56
59
|
import {VisuallyHidden} from '../VisuallyHidden';
|
|
57
60
|
import {warnOnce} from '../utils/devWarning';
|
|
@@ -88,7 +91,7 @@ import type {
|
|
|
88
91
|
} from '../Typeahead/types';
|
|
89
92
|
import {composeEventHandlers, mergeProps} from '../utils';
|
|
90
93
|
import {joinAriaIDs} from '../utils/inputAria';
|
|
91
|
-
import {isFocusDetached} from '../utils/
|
|
94
|
+
import {isFocusDetached} from '../utils/isFocusDetached';
|
|
92
95
|
import {themeProps} from '../utils/themeProps';
|
|
93
96
|
import type {SheetDraftChange} from '../internal/sheetDraft';
|
|
94
97
|
import type {TokenizerBottomSheetProps} from './TokenizerBottomSheet';
|
|
@@ -296,62 +299,60 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
|
|
|
296
299
|
onFocus?: (e: React.FocusEvent) => void;
|
|
297
300
|
/** Fires when focus leaves the tokenizer entirely. */
|
|
298
301
|
onBlur?: (e: React.FocusEvent) => void;
|
|
299
|
-
/**
|
|
302
|
+
/**
|
|
303
|
+
* How the field presents its choices.
|
|
304
|
+
* - `'popover'`: the inline combobox with its anchored suggestion menu, on
|
|
305
|
+
* every device.
|
|
306
|
+
* - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
|
|
307
|
+
* tall modal sheet: a search row on top, full-width checkbox rows that
|
|
308
|
+
* keep their place while the sheet is open, a create row with
|
|
309
|
+
* `hasCreate`, and a footer pinned in every state with a confirmed Clear
|
|
310
|
+
* all and Save. The sheet edits a draft: `onChange` fires once, when Save
|
|
311
|
+
* commits it, and a swipe, scrim or Escape close of a changed draft asks
|
|
312
|
+
* before discarding. Suited to compact touch screens, where the inline
|
|
313
|
+
* combobox competes with the software keyboard.
|
|
314
|
+
* - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
|
|
315
|
+
* otherwise the popover — the same resolution Selector uses. The server
|
|
316
|
+
* render and the hydrating render are the popover.
|
|
317
|
+
*
|
|
318
|
+
* In the sheet presentation the trigger is the control: `ref`, `id`,
|
|
319
|
+
* `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
|
|
320
|
+
* `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
|
|
321
|
+
* `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
|
|
322
|
+
* and warn once in development. Pass `'popover'` to keep the inline field
|
|
323
|
+
* and those props on every device.
|
|
324
|
+
* @default 'adaptive'
|
|
325
|
+
*/
|
|
326
|
+
presentation?: TokenizerPresentation;
|
|
327
|
+
/**
|
|
328
|
+
* Ref forwarded to the control: the combobox input in the popover
|
|
329
|
+
* presentation, the trigger button in the sheet presentation. This type
|
|
330
|
+
* keeps its released input element; the component itself also accepts a
|
|
331
|
+
* `Ref<HTMLInputElement | HTMLButtonElement>`, the type to use where the
|
|
332
|
+
* sheet can present.
|
|
333
|
+
*/
|
|
300
334
|
ref?: React.Ref<HTMLInputElement>;
|
|
301
335
|
/** Imperative handle ref for focus/blur control. */
|
|
302
336
|
handleRef?: React.Ref<TokenizerHandle>;
|
|
303
|
-
/**
|
|
304
|
-
* Experimental options, outside the stable compatibility promise: anything
|
|
305
|
-
* in this object may change or be removed in a patch release. Omit it for
|
|
306
|
-
* the stable behavior.
|
|
307
|
-
* @experimental
|
|
308
|
-
*/
|
|
309
|
-
experimental?: {
|
|
310
|
-
/**
|
|
311
|
-
* How the field presents its choices.
|
|
312
|
-
* - `'popover'`: the inline combobox with its anchored suggestion menu —
|
|
313
|
-
* the stable behavior.
|
|
314
|
-
* - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
|
|
315
|
-
* tall modal sheet: a search row on top, full-width checkbox rows that
|
|
316
|
-
* keep their place while the sheet is open, a create row with
|
|
317
|
-
* `hasCreate`, and a footer pinned in every state with a confirmed Clear
|
|
318
|
-
* all and Save. The sheet edits a draft: `onChange` fires once, when Save
|
|
319
|
-
* commits it, and a swipe, scrim or Escape close of a changed draft asks
|
|
320
|
-
* before discarding. Suited to compact touch screens, where the inline
|
|
321
|
-
* combobox competes with the software keyboard.
|
|
322
|
-
* - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
|
|
323
|
-
* otherwise the popover — the same resolution Selector uses.
|
|
324
|
-
*
|
|
325
|
-
* In the sheet presentation the trigger is the control: `ref`, `id`,
|
|
326
|
-
* `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
|
|
327
|
-
* `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
|
|
328
|
-
* `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
|
|
329
|
-
* and warn once in development.
|
|
330
|
-
* @experimental
|
|
331
|
-
* @default 'popover'
|
|
332
|
-
*/
|
|
333
|
-
presentation?: 'popover' | 'bottom-sheet' | 'adaptive';
|
|
334
|
-
};
|
|
335
337
|
}
|
|
336
338
|
|
|
339
|
+
/** How Tokenizer presents its choices; see `TokenizerProps.presentation`. */
|
|
340
|
+
export type TokenizerPresentation = AdaptivePresentation;
|
|
341
|
+
|
|
337
342
|
/**
|
|
338
|
-
* The props the
|
|
339
|
-
* `ref` also accepts the sheet
|
|
340
|
-
*
|
|
341
|
-
*
|
|
342
|
-
* `
|
|
343
|
-
* `ComponentProps<typeof Tokenizer>` keep their released shapes.
|
|
343
|
+
* The props the component accepts: `TokenizerProps`, whose `ref` keeps its
|
|
344
|
+
* released input type, with a `ref` that also accepts the sheet
|
|
345
|
+
* presentation's trigger button. `TokenizerProps` stays the declared props
|
|
346
|
+
* type, so `interface X extends TokenizerProps<T>`, `Omit<TokenizerProps<T>,
|
|
347
|
+
* …>` and `ComponentProps<typeof Tokenizer>` keep their released shapes.
|
|
344
348
|
*/
|
|
345
|
-
type
|
|
349
|
+
type TokenizerAcceptedProps<T extends SearchableItem> = Omit<
|
|
346
350
|
TokenizerProps<T>,
|
|
347
|
-
'ref'
|
|
351
|
+
'ref'
|
|
348
352
|
> & {
|
|
349
|
-
/** @experimental */
|
|
350
|
-
experimental: NonNullable<TokenizerProps<T>['experimental']>;
|
|
351
353
|
/**
|
|
352
354
|
* Ref forwarded to the control: the combobox input in the popover
|
|
353
355
|
* presentation, the trigger button in the sheet presentation.
|
|
354
|
-
* @experimental
|
|
355
356
|
*/
|
|
356
357
|
ref?: React.Ref<HTMLInputElement | HTMLButtonElement>;
|
|
357
358
|
};
|
|
@@ -722,11 +723,11 @@ function EndLane({
|
|
|
722
723
|
}
|
|
723
724
|
|
|
724
725
|
// Keep this overload first. TypeScript resolves `ComponentProps<typeof
|
|
725
|
-
// Tokenizer>` against the last overload, so that type stays the
|
|
726
|
-
//
|
|
727
|
-
//
|
|
726
|
+
// Tokenizer>` against the last overload, so that type stays the released
|
|
727
|
+
// props. Every call matches this one, so a ref typed for both controls is
|
|
728
|
+
// accepted.
|
|
728
729
|
export function Tokenizer<T extends SearchableItem>(
|
|
729
|
-
props:
|
|
730
|
+
props: TokenizerAcceptedProps<T>,
|
|
730
731
|
): React.JSX.Element;
|
|
731
732
|
export function Tokenizer<T extends SearchableItem>(
|
|
732
733
|
props: TokenizerProps<T>,
|
|
@@ -776,12 +777,12 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
776
777
|
ref,
|
|
777
778
|
handleRef,
|
|
778
779
|
onKeyDown,
|
|
779
|
-
|
|
780
|
+
presentation = 'adaptive',
|
|
780
781
|
id: idProp,
|
|
781
782
|
'aria-describedby': ariaDescribedByProp,
|
|
782
783
|
'aria-labelledby': ariaLabelledByProp,
|
|
783
784
|
...restProps
|
|
784
|
-
}: TokenizerProps<T> |
|
|
785
|
+
}: TokenizerProps<T> | TokenizerAcceptedProps<T>): React.JSX.Element {
|
|
785
786
|
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
786
787
|
const {rest, container} = useFieldInputStyling('Tokenizer', restProps, {
|
|
787
788
|
containerXstyle,
|
|
@@ -807,11 +808,9 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
807
808
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
808
809
|
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
809
810
|
|
|
810
|
-
//
|
|
811
|
-
//
|
|
812
|
-
//
|
|
813
|
-
// cannot pull the surface out from under the person.
|
|
814
|
-
const presentation = experimental?.presentation ?? 'popover';
|
|
811
|
+
// `adaptive` resolves through the policy the selection controls share. An
|
|
812
|
+
// open sheet keeps its presentation until it closes. A resolution change
|
|
813
|
+
// during a task does not replace the open surface.
|
|
815
814
|
const resolvedPresentation = useAdaptivePresentation(presentation);
|
|
816
815
|
const [isSheetOpen, setIsSheetOpen] = useState(false);
|
|
817
816
|
// Latched for the sheet's lifetime: a sheet stays presented after it closes
|
|
@@ -931,7 +930,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
931
930
|
inertSheetProps.length === 1 ? 'has' : 'have'
|
|
932
931
|
} no surface in the bottom-sheet presentation and ${
|
|
933
932
|
inertSheetProps.length === 1 ? 'is' : 'are'
|
|
934
|
-
} not rendered there.`,
|
|
933
|
+
} not rendered there. Pass \`presentation="popover"\` to keep the inline field on every device.`,
|
|
935
934
|
);
|
|
936
935
|
// eslint-disable-next-line @eslint-react/exhaustive-deps -- keyed by the joined names
|
|
937
936
|
}, [inertSheetPropsKey]);
|
|
@@ -1466,8 +1465,8 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
1466
1465
|
{...rest}
|
|
1467
1466
|
ref={useMergedRefs(
|
|
1468
1467
|
inputRef,
|
|
1469
|
-
//
|
|
1470
|
-
//
|
|
1468
|
+
// The ref type admits the sheet's trigger too; in this
|
|
1469
|
+
// presentation it receives the input.
|
|
1471
1470
|
ref as React.Ref<HTMLInputElement> | undefined,
|
|
1472
1471
|
handOffFocusRef,
|
|
1473
1472
|
)}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* EmptyState, AlertDialog, Icon, Spinner, Text, useBusyAnnouncement, and
|
|
9
9
|
* the i18n translator
|
|
10
10
|
* @output Exports TokenizerBottomSheet — the touch surface of
|
|
11
|
-
* `Tokenizer
|
|
11
|
+
* `Tokenizer presentation="bottom-sheet"`: one tall modal sheet
|
|
12
12
|
* with a search row on top, stable-order checkbox rows, progressive
|
|
13
13
|
* long-list rendering, an optional create row, and a confirmed Clear all
|
|
14
14
|
* @position Internal presentation surface of Tokenizer. Loaded on demand by
|
|
@@ -354,10 +354,10 @@ function TokenizerSheetContent<T extends SearchableItem>({
|
|
|
354
354
|
// has an entrance animation and no exit, so a close is its unmount; the
|
|
355
355
|
// close handler commits that unmount at once and then places focus itself,
|
|
356
356
|
// now that the modal is gone and the sheet's content can take focus again
|
|
357
|
-
// (`architecture:react-component-runtime` INV2)
|
|
358
|
-
//
|
|
359
|
-
//
|
|
360
|
-
//
|
|
357
|
+
// (`architecture:react-component-runtime` INV2). After a clear, Clear all
|
|
358
|
+
// is aria-disabled but stays focusable, so it keeps focus (FR24,
|
|
359
|
+
// `spec:AST-085` FR4). Focus on the search field opens the on-screen
|
|
360
|
+
// keyboard over the cleared rows. A confirmed clear is announced too — a
|
|
361
361
|
// change the person hears about, as an add or a remove is
|
|
362
362
|
// (`component:Tokenizer` AR6) — after the confirmation's dialog has gone,
|
|
363
363
|
// so the sheet is the modal on top and the words are delivered inside it
|
|
@@ -372,11 +372,9 @@ function TokenizerSheetContent<T extends SearchableItem>({
|
|
|
372
372
|
const closeClearConfirmation = (confirmed: boolean) => {
|
|
373
373
|
// eslint-disable-next-line @eslint-react/dom-no-flush-sync -- the confirmation must be gone before focus moves into the sheet and the words are routed into it
|
|
374
374
|
flushSync(() => setIsClearConfirmationOpen(false));
|
|
375
|
+
clearAllRef.current?.focus();
|
|
375
376
|
if (confirmed) {
|
|
376
|
-
searchRef.current?.focus();
|
|
377
377
|
announce(t('@astryx.tokenizer.allRemoved'));
|
|
378
|
-
} else {
|
|
379
|
-
clearAllRef.current?.focus();
|
|
380
378
|
}
|
|
381
379
|
};
|
|
382
380
|
// Keep editing: the confirmation is gone, and focus returns to the search
|
|
@@ -614,16 +612,14 @@ function TokenizerSheetContent<T extends SearchableItem>({
|
|
|
614
612
|
// `action` is declared on `SearchableItem` for the grid-adopting hosts; the
|
|
615
613
|
// sheet rows have not adopted it, so a row renders the item without the
|
|
616
614
|
// control and says so (`spec:AST-058` FR9), as the inline panel does.
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
'
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
}
|
|
626
|
-
}, [results]);
|
|
615
|
+
if (results.some(item => item.action != null)) {
|
|
616
|
+
warnOnce(
|
|
617
|
+
'tokenizer-sheet:item-action',
|
|
618
|
+
'Tokenizer',
|
|
619
|
+
'A result carries `action`, which the bottom-sheet rows do not render ' +
|
|
620
|
+
'yet; the item is shown without it.',
|
|
621
|
+
);
|
|
622
|
+
}
|
|
627
623
|
|
|
628
624
|
// The pending Spinner below stays named, as the inline field's does
|
|
629
625
|
// (`family:input-fields` FR7), but is not a live region; the sheet announces
|
|
@@ -1002,11 +998,9 @@ function TokenizerSheetContent<T extends SearchableItem>({
|
|
|
1002
998
|
variant="secondary"
|
|
1003
999
|
size="lg"
|
|
1004
1000
|
isDisabled={draftValue.length === 0}
|
|
1005
|
-
// With a tooltip, Button
|
|
1006
|
-
//
|
|
1007
|
-
// (`spec:AST-085` FR1)
|
|
1008
|
-
// natively disabled button does — a confirmed Clear all returns
|
|
1009
|
-
// focus here before the search field takes it (FR24).
|
|
1001
|
+
// With a tooltip, Button uses aria-disabled, so Clear all stays
|
|
1002
|
+
// focusable after a clear and says why it does nothing
|
|
1003
|
+
// (`spec:AST-085` FR1; FR24).
|
|
1010
1004
|
tooltip={
|
|
1011
1005
|
draftValue.length === 0
|
|
1012
1006
|
? t('@astryx.tokenizer.nothingToClear')
|