@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
package/src/Stepper/Stepper.tsx
CHANGED
|
@@ -23,14 +23,7 @@
|
|
|
23
23
|
* - /packages/cli/assets/templates/blocks/components/Stepper/ (showcase blocks)
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import {
|
|
27
|
-
useCallback,
|
|
28
|
-
useEffect,
|
|
29
|
-
useMemo,
|
|
30
|
-
useRef,
|
|
31
|
-
useState,
|
|
32
|
-
type ReactNode,
|
|
33
|
-
} from 'react';
|
|
26
|
+
import {useCallback, useMemo, useRef, useState, type ReactNode} from 'react';
|
|
34
27
|
import * as stylex from '@stylexjs/stylex';
|
|
35
28
|
|
|
36
29
|
import {spacingVars} from '../theme/tokens.stylex';
|
|
@@ -360,32 +353,22 @@ export function Stepper({
|
|
|
360
353
|
// still owns the ref and DOM pass-throughs and fills that frame, so its width
|
|
361
354
|
// is the effective component width to observe.
|
|
362
355
|
const [rootWidth, setRootWidth] = useState(0);
|
|
363
|
-
const stopObservingRootRef = useRef<(() => void) | null>(null);
|
|
364
356
|
const attachRoot = useCallback(
|
|
365
357
|
(el: HTMLOListElement | null) => {
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
if (el && isHorizontal) {
|
|
369
|
-
// observeResize calls back once, synchronously, as it subscribes. That
|
|
370
|
-
// is what keeps the collapse off the screen: a ref callback runs during
|
|
371
|
-
// commit, so the width lands and the re-render happens before the
|
|
372
|
-
// browser has painted the uncollapsed stepper it would otherwise show
|
|
373
|
-
// first.
|
|
374
|
-
stopObservingRootRef.current = observeResize(el, entry =>
|
|
375
|
-
setRootWidth(entry.target.clientWidth),
|
|
376
|
-
);
|
|
358
|
+
if (el == null || !isHorizontal) {
|
|
359
|
+
return;
|
|
377
360
|
}
|
|
361
|
+
// observeResize calls back once, synchronously, as it subscribes. That
|
|
362
|
+
// is what keeps the collapse off the screen: a ref callback runs during
|
|
363
|
+
// commit, so the width lands and the re-render happens before the
|
|
364
|
+
// browser has painted the uncollapsed stepper it would otherwise show
|
|
365
|
+
// first. React calls the returned unsubscribe when the list detaches or
|
|
366
|
+
// when the orientation changes.
|
|
367
|
+
return observeResize(el, entry => setRootWidth(entry.target.clientWidth));
|
|
378
368
|
},
|
|
379
369
|
[isHorizontal],
|
|
380
370
|
);
|
|
381
371
|
const rootRef = useMergedRefs(ref, attachRoot);
|
|
382
|
-
useEffect(
|
|
383
|
-
() => () => {
|
|
384
|
-
stopObservingRootRef.current?.();
|
|
385
|
-
stopObservingRootRef.current = null;
|
|
386
|
-
},
|
|
387
|
-
[],
|
|
388
|
-
);
|
|
389
372
|
|
|
390
373
|
// Width is measured rather than asked of a container query because the
|
|
391
374
|
// answer changes what is *rendered*, not just how it looks: the labels and
|
package/src/Switch/Switch.tsx
CHANGED
|
@@ -52,7 +52,6 @@ import type {BaseProps} from '../BaseProps';
|
|
|
52
52
|
import type {SizeValue} from '../utils/types';
|
|
53
53
|
import {themeProps} from '../utils/themeProps';
|
|
54
54
|
import {useAnnounce} from '../hooks/useAnnounce';
|
|
55
|
-
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
56
55
|
|
|
57
56
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
58
57
|
import {usePressFeedback} from '../hooks/usePressFeedback';
|
|
@@ -867,10 +866,6 @@ export function Switch({
|
|
|
867
866
|
const pressable = usePressFeedback();
|
|
868
867
|
const descriptionID = useId();
|
|
869
868
|
const statusMessageID = useId();
|
|
870
|
-
// Announce the effective required state (form default included) while the
|
|
871
|
-
// native `required` stays bound to the explicit `isRequired` so a layout
|
|
872
|
-
// default never switches on browser validation.
|
|
873
|
-
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
874
869
|
|
|
875
870
|
const [, startTransition] = useTransition();
|
|
876
871
|
const [optimisticValue, setOptimisticValue] = useOptimistic(value);
|
|
@@ -1003,7 +998,8 @@ export function Switch({
|
|
|
1003
998
|
aria-disabled={isDisabled ? 'true' : undefined}
|
|
1004
999
|
form={isDisabled ? '' : undefined}
|
|
1005
1000
|
required={isRequired}
|
|
1006
|
-
|
|
1001
|
+
// A form's required default sets nothing here: an off switch is an answer.
|
|
1002
|
+
aria-required={isRequired ? 'true' : undefined}
|
|
1007
1003
|
onChange={e => {
|
|
1008
1004
|
if (isDisabled || isBusy) {
|
|
1009
1005
|
return;
|
|
@@ -23,7 +23,7 @@ import type {GestureTouch} from '../gestures/types';
|
|
|
23
23
|
import {isRtlElement} from '../hooks/isRtlElement';
|
|
24
24
|
import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
|
|
25
25
|
import {
|
|
26
|
-
|
|
26
|
+
createMotionAnimator,
|
|
27
27
|
type Animator,
|
|
28
28
|
type MotionCurve,
|
|
29
29
|
} from '../motion/animator';
|
|
@@ -282,15 +282,15 @@ export class SwitchTouchController {
|
|
|
282
282
|
return;
|
|
283
283
|
}
|
|
284
284
|
registerSwitchTable();
|
|
285
|
-
this.thumb =
|
|
285
|
+
this.thumb = createMotionAnimator(elements.thumb);
|
|
286
286
|
// The layer rests clear (its class's opacity 0) while the visuals show
|
|
287
287
|
// the value; from here its opacity is the animator's.
|
|
288
|
-
this.fade =
|
|
288
|
+
this.fade = createMotionAnimator(elements.track, {
|
|
289
289
|
pseudoElement: '::after',
|
|
290
290
|
initial: {opacity: 0},
|
|
291
291
|
});
|
|
292
292
|
this.fade.set({opacity: 0});
|
|
293
|
-
this.shadow =
|
|
293
|
+
this.shadow = createMotionAnimator(elements.thumb, {
|
|
294
294
|
pseudoElement: '::after',
|
|
295
295
|
initial: {opacity: 0},
|
|
296
296
|
});
|
package/src/Table/BaseTable.tsx
CHANGED
|
@@ -14,7 +14,14 @@
|
|
|
14
14
|
* - /packages/cli/assets/templates/blocks/components/Table/ (showcase blocks)
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
memo,
|
|
19
|
+
useId,
|
|
20
|
+
useRef,
|
|
21
|
+
type ReactElement,
|
|
22
|
+
type ReactNode,
|
|
23
|
+
type Ref,
|
|
24
|
+
} from 'react';
|
|
18
25
|
import {isRenderable} from '../utils/isRenderable';
|
|
19
26
|
import * as stylex from '@stylexjs/stylex';
|
|
20
27
|
import {spacingVars} from '../theme/tokens.stylex';
|
|
@@ -423,6 +430,7 @@ function BaseTableInner<T extends Record<string, unknown>>({
|
|
|
423
430
|
} satisfies TableRenderProps);
|
|
424
431
|
|
|
425
432
|
// --- Plugin pipeline: header cells ---
|
|
433
|
+
const headerLabelIdBase = useId();
|
|
426
434
|
const headerCells = resolvedColumns.map((col, columnIndex) => {
|
|
427
435
|
const headerContent = col.header ?? col.key;
|
|
428
436
|
|
|
@@ -477,28 +485,54 @@ function BaseTableInner<T extends Record<string, unknown>>({
|
|
|
477
485
|
const hasSlots =
|
|
478
486
|
before != null || after != null || overlay != null || below != null;
|
|
479
487
|
|
|
480
|
-
const
|
|
488
|
+
const labelRow = isRenderable(after) ? (
|
|
489
|
+
<div {...stylex.props(styles.headerLabelRow)}>
|
|
490
|
+
{resolvedContent}
|
|
491
|
+
{after}
|
|
492
|
+
</div>
|
|
493
|
+
) : (
|
|
494
|
+
resolvedContent
|
|
495
|
+
);
|
|
496
|
+
|
|
497
|
+
// The overlay is a control of its own. Keep its name and value out of the
|
|
498
|
+
// header's name.
|
|
499
|
+
const namesOwnHeader =
|
|
500
|
+
isRenderable(overlay) &&
|
|
501
|
+
mergedHtmlProps['aria-label'] == null &&
|
|
502
|
+
mergedHtmlProps['aria-labelledby'] == null;
|
|
503
|
+
const labelId = `${headerLabelIdBase}-label-${columnIndex}`;
|
|
504
|
+
const belowId = `${headerLabelIdBase}-below-${columnIndex}`;
|
|
505
|
+
const hasBelow = isRenderable(below);
|
|
506
|
+
|
|
507
|
+
const headerInner = !hasSlots ? (
|
|
508
|
+
resolvedContent
|
|
509
|
+
) : namesOwnHeader ? (
|
|
510
|
+
<>
|
|
511
|
+
{/* Inline, so the cell's text-overflow still reaches the label. */}
|
|
512
|
+
<span id={labelId}>
|
|
513
|
+
{before}
|
|
514
|
+
{labelRow}
|
|
515
|
+
</span>
|
|
516
|
+
{overlay}
|
|
517
|
+
{hasBelow && <div id={belowId}>{below}</div>}
|
|
518
|
+
</>
|
|
519
|
+
) : (
|
|
481
520
|
<>
|
|
482
521
|
{before}
|
|
483
|
-
{
|
|
484
|
-
<div {...stylex.props(styles.headerLabelRow)}>
|
|
485
|
-
{resolvedContent}
|
|
486
|
-
{after}
|
|
487
|
-
</div>
|
|
488
|
-
) : (
|
|
489
|
-
resolvedContent
|
|
490
|
-
)}
|
|
522
|
+
{labelRow}
|
|
491
523
|
{overlay}
|
|
492
524
|
{below}
|
|
493
525
|
</>
|
|
494
|
-
) : (
|
|
495
|
-
resolvedContent
|
|
496
526
|
);
|
|
527
|
+
const headerNameProps = namesOwnHeader
|
|
528
|
+
? {'aria-labelledby': hasBelow ? `${labelId} ${belowId}` : labelId}
|
|
529
|
+
: {};
|
|
497
530
|
|
|
498
531
|
return (
|
|
499
532
|
<HeaderCellComponent
|
|
500
533
|
key={col.key}
|
|
501
534
|
{...mergedHtmlProps}
|
|
535
|
+
{...headerNameProps}
|
|
502
536
|
{...headerTitleProp}
|
|
503
537
|
contextMenuActions={cellRenderProps.contextMenuActions}
|
|
504
538
|
xstyle={cellRenderProps.xstyle}>
|
|
@@ -865,7 +865,7 @@ export function useTableColumnResize<T extends Record<string, unknown>>(
|
|
|
865
865
|
}
|
|
866
866
|
}, []);
|
|
867
867
|
|
|
868
|
-
//
|
|
868
|
+
// Releases the table resize observer on unmount.
|
|
869
869
|
useEffect(() => {
|
|
870
870
|
return () => {
|
|
871
871
|
unobserveTableRef.current?.();
|
|
@@ -934,6 +934,7 @@ export function useTableColumnResize<T extends Record<string, unknown>>(
|
|
|
934
934
|
};
|
|
935
935
|
}, []);
|
|
936
936
|
|
|
937
|
+
// Releases the resize gate on unmount.
|
|
937
938
|
useEffect(() => {
|
|
938
939
|
return () => {
|
|
939
940
|
gateCleanupRef.current?.();
|
|
@@ -439,6 +439,8 @@ function PanelDividerModeWatch({
|
|
|
439
439
|
const {mode} = useTheme();
|
|
440
440
|
const themeName = useThemeName();
|
|
441
441
|
const lastRef = useRef({mode, themeName});
|
|
442
|
+
// Syncs the panel dividers with the computed theme CSS after a color mode or
|
|
443
|
+
// theme change.
|
|
442
444
|
useLayoutEffect(() => {
|
|
443
445
|
const last = lastRef.current;
|
|
444
446
|
if (last.mode === mode && last.themeName === themeName) {
|
|
@@ -703,6 +705,8 @@ export function useTableRowExpansion<T extends Record<string, unknown>>(
|
|
|
703
705
|
}
|
|
704
706
|
}
|
|
705
707
|
}, []);
|
|
708
|
+
// Syncs the chevron transitions with the `animatedLayout` handle. Without a
|
|
709
|
+
// handle, the chevrons use the theme's turn.
|
|
706
710
|
useLayoutEffect(() => {
|
|
707
711
|
if (animatedLayout == null) {
|
|
708
712
|
resetChevrons();
|
|
@@ -432,6 +432,8 @@ function PinnedDividerModeWatch({
|
|
|
432
432
|
const {mode} = useTheme();
|
|
433
433
|
const themeName = useThemeName();
|
|
434
434
|
const lastRef = useRef({mode, themeName});
|
|
435
|
+
// Syncs the pinned divider with the computed theme CSS after a color mode or
|
|
436
|
+
// theme change.
|
|
435
437
|
useLayoutEffect(() => {
|
|
436
438
|
const last = lastRef.current;
|
|
437
439
|
if (last.mode !== mode || last.themeName !== themeName) {
|
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
} from '../Field';
|
|
46
46
|
import {Icon, renderIconSlot, type IconType} from '../Icon';
|
|
47
47
|
import {isRenderable} from '../utils/isRenderable';
|
|
48
|
+
import {withholdCallerHandlers} from '../utils/disabledInteraction';
|
|
48
49
|
import {Spinner} from '../Spinner';
|
|
49
50
|
import {useTooltip} from '../Tooltip';
|
|
50
51
|
import {mergeProps} from '../utils';
|
|
@@ -476,13 +477,7 @@ export function TextArea({
|
|
|
476
477
|
const showsDisabledMessage = isDisabled && !!disabledMessage;
|
|
477
478
|
// A disabled field keeps its tab stop but, like a natively disabled one,
|
|
478
479
|
// runs no caller event handler other than focus and blur (`spec:AST-085` FR2).
|
|
479
|
-
const fieldProps = isDisabled
|
|
480
|
-
? Object.fromEntries(
|
|
481
|
-
Object.entries(rest).filter(
|
|
482
|
-
([key]) => !/^on[A-Z]/.test(key) || /^on(Focus|Blur)/.test(key),
|
|
483
|
-
),
|
|
484
|
-
)
|
|
485
|
-
: rest;
|
|
480
|
+
const fieldProps = withholdCallerHandlers(rest, isDisabled);
|
|
486
481
|
const disabledMessageTooltip = useTooltip({
|
|
487
482
|
placement: 'above',
|
|
488
483
|
// The container div is not naturally focusable; focusin bubbles up from
|
|
@@ -35,21 +35,23 @@ import {
|
|
|
35
35
|
typographyVars,
|
|
36
36
|
typeScaleVars,
|
|
37
37
|
} from '../theme/tokens.stylex';
|
|
38
|
+
import {Field} from '../Field/Field';
|
|
39
|
+
import {InputClearButton} from '../Field/InputClearButton';
|
|
38
40
|
import {
|
|
39
|
-
Field,
|
|
40
|
-
InputClearButton,
|
|
41
|
-
type InputStatus,
|
|
42
41
|
inputWrapperStyles,
|
|
43
42
|
inputStatusBorderStyles,
|
|
44
43
|
inputStatusHoverShadowStyles,
|
|
45
44
|
inputStatusFocusWithinStyles,
|
|
46
|
-
} from '../Field';
|
|
47
|
-
import
|
|
45
|
+
} from '../Field/inputStyles.stylex';
|
|
46
|
+
import type {InputStatus} from '../Field/types';
|
|
47
|
+
import {renderIconSlot, type IconType} from '../Icon/Icon';
|
|
48
48
|
import {isRenderable} from '../utils/isRenderable';
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
49
|
+
import {withholdCallerHandlers} from '../utils/disabledInteraction';
|
|
50
|
+
import {Spinner} from '../Spinner/Spinner';
|
|
51
|
+
import {useTooltip} from '../Tooltip/useTooltip';
|
|
52
|
+
import {VisuallyHidden} from '../VisuallyHidden/VisuallyHidden';
|
|
53
|
+
import {getInputARIA} from '../utils/inputAria';
|
|
54
|
+
import {isImeKeyEvent} from '../utils/ime';
|
|
53
55
|
import {
|
|
54
56
|
textEntryTraitAttributes,
|
|
55
57
|
type TextEntryTraitProps,
|
|
@@ -109,7 +111,7 @@ export type {
|
|
|
109
111
|
InputStatus as TextInputStatus,
|
|
110
112
|
InputStatusType as TextInputStatusType,
|
|
111
113
|
} from '../Field';
|
|
112
|
-
import {mergeProps} from '../utils';
|
|
114
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
113
115
|
import {useSize} from '../SizeContext/SizeContext';
|
|
114
116
|
import {useInputContainer} from '../hooks/useInputContainer';
|
|
115
117
|
import {useInputStatusIcon} from '../hooks/useInputStatusIcon';
|
|
@@ -373,13 +375,7 @@ export function TextInput({
|
|
|
373
375
|
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
374
376
|
// A disabled field keeps its tab stop but, like a natively disabled one,
|
|
375
377
|
// runs no caller event handler other than focus and blur (`spec:AST-085` FR2).
|
|
376
|
-
const fieldProps = isDisabled
|
|
377
|
-
? Object.fromEntries(
|
|
378
|
-
Object.entries(rest).filter(
|
|
379
|
-
([key]) => !/^on[A-Z]/.test(key) || /^on(Focus|Blur)/.test(key),
|
|
380
|
-
),
|
|
381
|
-
)
|
|
382
|
-
: rest;
|
|
378
|
+
const fieldProps = withholdCallerHandlers(rest, isDisabled);
|
|
383
379
|
const size = useSize(sizeProp, 'md');
|
|
384
380
|
|
|
385
381
|
const generatedID = useId();
|
|
@@ -491,6 +491,8 @@ function TimeField({
|
|
|
491
491
|
// region mounted together with its content is not reliably announced.
|
|
492
492
|
// Ungrouped mode delegates to Field -> FieldStatus, which announces itself.
|
|
493
493
|
const announce = useAnnounce();
|
|
494
|
+
// Syncs the live region with `status.message` when the field is in an
|
|
495
|
+
// InputGroup.
|
|
494
496
|
useEffect(() => {
|
|
495
497
|
if (inputGroup && status?.message) {
|
|
496
498
|
announce(
|
package/src/Timer/Timer.tsx
CHANGED
|
@@ -186,6 +186,7 @@ export function Timer({
|
|
|
186
186
|
const resolvedFormat = resolveFormat(format);
|
|
187
187
|
const initialPresentation = getPresentation(0, resolvedFormat);
|
|
188
188
|
|
|
189
|
+
// Syncs the elapsed-time text with a timer.
|
|
189
190
|
useEffect(() => {
|
|
190
191
|
const resolvedStartTime =
|
|
191
192
|
startTime !== undefined && Number.isFinite(startTime)
|
|
@@ -378,7 +378,7 @@ export function Timestamp({
|
|
|
378
378
|
? formatInstant(date, 'full', locale, {timeZoneNameStyle: 'long'})
|
|
379
379
|
: '';
|
|
380
380
|
|
|
381
|
-
//
|
|
381
|
+
// Syncs the relative time with an interval timer while the timestamp is live.
|
|
382
382
|
useEffect(() => {
|
|
383
383
|
if (!isLive || !isValidDate || !isRelativeFormat(effectiveFormat)) {
|
|
384
384
|
return;
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* - /packages/core/src/Timestamp/Timestamp.test.tsx
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
-
import {SHARED_DATE_FORMAT_OPTIONS,
|
|
32
|
+
import {SHARED_DATE_FORMAT_OPTIONS, getWallClock} from '../utils/plainDate';
|
|
33
33
|
import type {Locale} from '../i18n/types';
|
|
34
34
|
import type {TimestampFormat} from './Timestamp';
|
|
35
35
|
|
|
@@ -125,38 +125,6 @@ function pad(n: number): string {
|
|
|
125
125
|
return String(n).padStart(2, '0');
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/** The fields a `system_*` string is assembled from. */
|
|
129
|
-
interface WallClock {
|
|
130
|
-
year: number;
|
|
131
|
-
month: number;
|
|
132
|
-
day: number;
|
|
133
|
-
hour: number;
|
|
134
|
-
minute: number;
|
|
135
|
-
second: number;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Wall-clock fields for an instant: in the named zone, or — with no zone —
|
|
140
|
-
* the viewer's own, read straight off the `Date`. The zone-less branch
|
|
141
|
-
* deliberately stays on plain getters so the default rendering never gains a
|
|
142
|
-
* dependency on `Intl` zone data it did not have before.
|
|
143
|
-
*
|
|
144
|
-
* The explicit return type is load-bearing: it is what forces the two branches
|
|
145
|
-
* to keep producing the same shape.
|
|
146
|
-
*/
|
|
147
|
-
function getWallClock(date: Date, timeZone: string | undefined): WallClock {
|
|
148
|
-
return timeZone === undefined
|
|
149
|
-
? {
|
|
150
|
-
year: date.getFullYear(),
|
|
151
|
-
month: date.getMonth() + 1,
|
|
152
|
-
day: date.getDate(),
|
|
153
|
-
hour: date.getHours(),
|
|
154
|
-
minute: date.getMinutes(),
|
|
155
|
-
second: date.getSeconds(),
|
|
156
|
-
}
|
|
157
|
-
: getTimeZoneParts(date.getTime(), timeZone);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
128
|
/**
|
|
161
129
|
* Renders one instant in one absolute format.
|
|
162
130
|
*
|
package/src/Toast/Toast.doc.mjs
CHANGED
|
@@ -89,7 +89,7 @@ export const docs = {
|
|
|
89
89
|
name: 'renderContent',
|
|
90
90
|
type: '(toast: ToastContentRenderProps) => ReactNode',
|
|
91
91
|
description:
|
|
92
|
-
"Replaces the content of this toast's card with your own layout. Astryx keeps the card, its astryx-toast theme target
|
|
92
|
+
"Replaces the content of this toast's card with your own layout. Astryx keeps the card, its astryx-toast theme target and auto-hide behavior (inside a ToastViewport the viewport announces the toast, and while a modal hosts the viewport the card announces itself), then hands the renderer the message, endContent, resolved toast settings and a dismiss callback. The custom renderer owns every control in its layout: compose the control you want and call dismiss from it. Astryx does not inject a fallback close into custom content. Per-toast: an app shares one layout by wrapping useToast and passing it on every call, while a toast raised by library code that never passes it renders as an ordinary Astryx toast. The argument is {body, endContent, type, isAutoHide, autoHideDuration, dismiss}, where type is 'info' | 'error'.",
|
|
93
93
|
},
|
|
94
94
|
],
|
|
95
95
|
theming: {
|
|
@@ -211,7 +211,7 @@ export const docsZh = {
|
|
|
211
211
|
collisionBehavior: '当已存在相同 uniqueID 的 toast 时的行为。',
|
|
212
212
|
onHide: '当 toast 被移除时触发的回调。',
|
|
213
213
|
renderContent:
|
|
214
|
-
"用你自己的布局替换该 toast 卡片内部的内容。Astryx 保留卡片本身、astryx-toast
|
|
214
|
+
"用你自己的布局替换该 toast 卡片内部的内容。Astryx 保留卡片本身、astryx-toast 主题目标和自动关闭行为(在 ToastViewport 中由视口播报该 toast;当模态框承载视口时由卡片自行播报),并把消息、endContent、解析后的 toast 设置和 dismiss 回调交给渲染函数。自定义渲染函数完全拥有布局中的控件:请组合所需的控件并通过它调用 dismiss。Astryx 不会向自定义内容注入后备关闭按钮。按 toast 单独设置:应用可通过封装 useToast 并在每次调用时传入来共享同一套布局;而由库代码发起、从不传入该参数的 toast 会渲染为普通的 Astryx toast。传入参数为 {body, endContent, type, isAutoHide, autoHideDuration, dismiss},其中 type 为 'info' | 'error'。",
|
|
215
215
|
},
|
|
216
216
|
usage: {
|
|
217
217
|
description:
|
|
@@ -328,6 +328,7 @@ export const docsDense = {
|
|
|
328
328
|
uniqueID: 'unique id for dedup',
|
|
329
329
|
collisionBehavior: 'behavior when matching uniqueID exists',
|
|
330
330
|
onHide: 'callback when toast removed',
|
|
331
|
-
renderContent:
|
|
331
|
+
renderContent:
|
|
332
|
+
'custom inner layout; receives content, resolved settings + dismiss callback; no injected fallback control',
|
|
332
333
|
},
|
|
333
334
|
};
|
package/src/Toast/Toast.tsx
CHANGED
|
@@ -154,6 +154,16 @@ export interface ToastProps {
|
|
|
154
154
|
|
|
155
155
|
interface ToastSurfaceProps extends ToastProps {
|
|
156
156
|
gestureDirection: ToastGestureDirection;
|
|
157
|
+
/**
|
|
158
|
+
* Changes when a uniqueID overwrite updates this card in place: the new
|
|
159
|
+
* toast's auto-hide timer starts over.
|
|
160
|
+
*/
|
|
161
|
+
timerKey?: string;
|
|
162
|
+
/**
|
|
163
|
+
* False when the viewport announces the toast: the card then carries no
|
|
164
|
+
* live region of its own, so an update in place is announced once.
|
|
165
|
+
*/
|
|
166
|
+
isLiveRegion?: boolean;
|
|
157
167
|
}
|
|
158
168
|
|
|
159
169
|
/**
|
|
@@ -193,6 +203,8 @@ export function ToastSurface({
|
|
|
193
203
|
onDismiss,
|
|
194
204
|
renderContent,
|
|
195
205
|
gestureDirection,
|
|
206
|
+
timerKey,
|
|
207
|
+
isLiveRegion = true,
|
|
196
208
|
}: ToastSurfaceProps) {
|
|
197
209
|
const t = useComponentTranslator();
|
|
198
210
|
const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
@@ -226,34 +238,28 @@ export function ToastSurface({
|
|
|
226
238
|
}, remainingRef.current);
|
|
227
239
|
}, [isAutoHide]);
|
|
228
240
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
},
|
|
249
|
-
[isAutoHide],
|
|
250
|
-
);
|
|
241
|
+
// Pointer, focus and gesture holds are tracked whatever isAutoHide is: an
|
|
242
|
+
// overwrite can turn a toast that does not auto-hide into one that does
|
|
243
|
+
// while a hold is in place. The window hold leaves with its listeners.
|
|
244
|
+
const pauseTimer = useCallback((source: PauseSource) => {
|
|
245
|
+
const sources = pauseSourcesRef.current;
|
|
246
|
+
const wasRunning = sources.size === 0;
|
|
247
|
+
sources.add(source);
|
|
248
|
+
if (!wasRunning) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (timerRef.current) {
|
|
252
|
+
clearTimeout(timerRef.current);
|
|
253
|
+
timerRef.current = null;
|
|
254
|
+
}
|
|
255
|
+
if (startTimeRef.current != null) {
|
|
256
|
+
const elapsed = Date.now() - startTimeRef.current;
|
|
257
|
+
remainingRef.current = Math.max(remainingRef.current - elapsed, 1000);
|
|
258
|
+
}
|
|
259
|
+
}, []);
|
|
251
260
|
|
|
252
261
|
const resumeTimer = useCallback(
|
|
253
262
|
(source: PauseSource) => {
|
|
254
|
-
if (!isAutoHide) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
263
|
const sources = pauseSourcesRef.current;
|
|
258
264
|
if (!sources.delete(source)) {
|
|
259
265
|
return;
|
|
@@ -271,20 +277,31 @@ export function ToastSurface({
|
|
|
271
277
|
}
|
|
272
278
|
startTimer();
|
|
273
279
|
},
|
|
274
|
-
[
|
|
280
|
+
[startTimer],
|
|
275
281
|
);
|
|
276
282
|
|
|
277
283
|
useEffect(() => {
|
|
278
284
|
remainingRef.current = autoHideDuration;
|
|
285
|
+
// An update in place can remove the focused control, which fires no blur:
|
|
286
|
+
// a focus hold whose focus has left the card is stale.
|
|
287
|
+
const root = cardRootRef.current?.current;
|
|
288
|
+
if (
|
|
289
|
+
pauseSourcesRef.current.has('focus') &&
|
|
290
|
+
root != null &&
|
|
291
|
+
!root.contains(root.ownerDocument.activeElement)
|
|
292
|
+
) {
|
|
293
|
+
pauseSourcesRef.current.delete('focus');
|
|
294
|
+
}
|
|
279
295
|
startTimer();
|
|
280
296
|
return () => {
|
|
281
297
|
if (timerRef.current) {
|
|
282
298
|
clearTimeout(timerRef.current);
|
|
283
299
|
}
|
|
284
300
|
};
|
|
285
|
-
// startTimer's identity is stable per isAutoHide, so this runs on mount
|
|
286
|
-
//
|
|
287
|
-
|
|
301
|
+
// startTimer's identity is stable per isAutoHide, so this runs on mount,
|
|
302
|
+
// on a genuine duration change and on an overwrite (timerKey), not on
|
|
303
|
+
// unrelated viewport renders.
|
|
304
|
+
}, [autoHideDuration, startTimer, timerKey]);
|
|
288
305
|
|
|
289
306
|
// Pause the auto-hide timer while the window is not focused, so a toast
|
|
290
307
|
// doesn't silently expire while the user is in another window or tab.
|
|
@@ -292,6 +309,7 @@ export function ToastSurface({
|
|
|
292
309
|
if (!isAutoHide) {
|
|
293
310
|
return;
|
|
294
311
|
}
|
|
312
|
+
const pauseSources = pauseSourcesRef.current;
|
|
295
313
|
const pauseForWindow = () => pauseTimer('window');
|
|
296
314
|
const resumeForWindow = () => resumeTimer('window');
|
|
297
315
|
window.addEventListener('blur', pauseForWindow);
|
|
@@ -304,6 +322,8 @@ export function ToastSurface({
|
|
|
304
322
|
return () => {
|
|
305
323
|
window.removeEventListener('blur', pauseForWindow);
|
|
306
324
|
window.removeEventListener('focus', resumeForWindow);
|
|
325
|
+
// With the listeners gone, no focus event would clear the window hold.
|
|
326
|
+
pauseSources.delete('window');
|
|
307
327
|
};
|
|
308
328
|
}, [isAutoHide, pauseTimer, resumeTimer]);
|
|
309
329
|
|
|
@@ -368,9 +388,9 @@ export function ToastSurface({
|
|
|
368
388
|
return (
|
|
369
389
|
<div
|
|
370
390
|
ref={rootRef}
|
|
371
|
-
role={isError ? 'alert' : 'status'}
|
|
372
|
-
aria-live={isError ? 'assertive' : 'polite'}
|
|
373
|
-
aria-atomic=
|
|
391
|
+
role={isLiveRegion ? (isError ? 'alert' : 'status') : undefined}
|
|
392
|
+
aria-live={isLiveRegion ? (isError ? 'assertive' : 'polite') : undefined}
|
|
393
|
+
aria-atomic={isLiveRegion ? 'true' : undefined}
|
|
374
394
|
onMouseEnter={pauseForPointer}
|
|
375
395
|
onMouseLeave={resumeForPointer}
|
|
376
396
|
onFocusCapture={pauseForFocus}
|