@astryxdesign/core 0.7.8 → 0.7.9-canary.0200dfe
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/AppShell/observeMainOverflow.d.ts.map +1 -1
- package/dist/AppShell/observeMainOverflow.js +9 -6
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +37 -3
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +40 -8
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetStack.js +4 -3
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +61 -21
- package/dist/Calendar/Calendar.d.ts +14 -2
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +63 -74
- package/dist/Calendar/getInitialFocusDate.d.ts +4 -1
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -1
- package/dist/Calendar/getInitialFocusDate.js +7 -5
- package/dist/Calendar/hooks/useCalendarDays.d.ts +19 -2
- package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarDays.js +57 -64
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts +28 -3
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarNavigation.js +33 -22
- package/dist/Calendar/styles.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts +2 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +74 -18
- package/dist/CheckboxInput/CheckboxRowPressContext.d.ts +2 -0
- package/dist/CheckboxInput/CheckboxRowPressContext.d.ts.map +1 -0
- package/dist/CheckboxInput/CheckboxRowPressContext.js +20 -0
- package/dist/CheckboxList/CheckboxListItem.d.ts +2 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +40 -14
- package/dist/ClickableCard/ClickableCard.d.ts +1 -1
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +5 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +2 -0
- package/dist/DateInput/DateInput.d.ts +37 -6
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +97 -124
- package/dist/DateInput/MonthScroller.d.ts +5 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +26 -29
- package/dist/DateInput/MonthYearWheels.d.ts +10 -1
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
- package/dist/DateInput/MonthYearWheels.js +54 -42
- package/dist/DateInput/PickerWheel.d.ts.map +1 -1
- package/dist/DateInput/PickerWheel.js +7 -1
- package/dist/DateInput/TouchDateField.d.ts +1 -1
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +26 -21
- package/dist/DateInput/monthGeometry.d.ts +42 -8
- package/dist/DateInput/monthGeometry.d.ts.map +1 -1
- package/dist/DateInput/monthGeometry.js +81 -7
- package/dist/DateInput/useCalendarPresentation.d.ts +10 -0
- package/dist/DateInput/useCalendarPresentation.d.ts.map +1 -0
- package/dist/DateInput/useCalendarPresentation.js +32 -0
- package/dist/DateInput/useTypedDate.d.ts +92 -0
- package/dist/DateInput/useTypedDate.d.ts.map +1 -0
- package/dist/DateInput/useTypedDate.js +269 -0
- package/dist/DateInput/wheelStrip.js +2 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts +17 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +15 -8
- package/dist/DateTimeInput/DateTimeInput.d.ts +26 -3
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +92 -88
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +26 -20
- package/dist/Dialog/Dialog.d.ts +2 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +14 -3
- package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +11 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +11 -8
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
- package/dist/Field/inputDisabledFocus.d.ts +4 -4
- package/dist/Field/inputStyles.stylex.d.ts +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +16 -2
- package/dist/HoverCard/useHoverCard.d.ts +3 -1
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/Icon/Icon.d.ts +1 -1
- package/dist/InfoTip/InfoTip.d.ts +1 -0
- package/dist/InfoTip/InfoTip.d.ts.map +1 -1
- package/dist/InfoTip/InfoTip.js +6 -18
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +2 -2
- package/dist/InputGroup/InputGroupText.d.ts +2 -1
- package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupText.js +2 -1
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +1 -1
- package/dist/Item/Item.d.ts +20 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +97 -29
- package/dist/Item/ItemListRowContext.d.ts +2 -0
- package/dist/Item/ItemListRowContext.d.ts.map +1 -0
- package/dist/Item/ItemListRowContext.js +16 -0
- package/dist/Layer/holdEntranceInput.d.ts +24 -0
- package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
- package/dist/Layer/holdEntranceInput.js +65 -0
- package/dist/Layer/inputHold.d.ts +49 -0
- package/dist/Layer/inputHold.d.ts.map +1 -0
- package/dist/Layer/inputHold.js +636 -0
- package/dist/Layer/outsidePress.d.ts +4 -0
- package/dist/Layer/outsidePress.d.ts.map +1 -1
- package/dist/Layer/outsidePress.js +18 -1
- package/dist/Layer/preserveAnimations.d.ts +1 -5
- package/dist/Layer/preserveAnimations.d.ts.map +1 -1
- package/dist/Layer/preserveAnimations.js +12 -214
- package/dist/Layer/useBackdropPress.d.ts +8 -0
- package/dist/Layer/useBackdropPress.d.ts.map +1 -1
- package/dist/Layer/useBackdropPress.js +31 -2
- package/dist/Layer/useLayer.d.ts +3 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +64 -4
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +4 -0
- package/dist/Layout/LayoutContent.d.ts +3 -1
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +12 -4
- package/dist/Layout/LayoutPanel.d.ts +13 -10
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.js +81 -11
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -0
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +1 -0
- package/dist/List/ListItem.d.ts +5 -4
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +45 -9
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +56 -39
- package/dist/MetadataList/MetadataList.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts +11 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +39 -1
- package/dist/MoreMenu/MoreMenu.d.ts +5 -3
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +6 -9
- package/dist/NumberInput/NumberInput.d.ts +4 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +244 -11
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +7 -2
- package/dist/Popover/usePopover.d.ts +1 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +12 -5
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchBottomSheet.js +4 -2
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +3 -1
- package/dist/PowerSearch/formatFilterValue.d.ts +9 -3
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +14 -11
- package/dist/PowerSearch/formatTokenValue.d.ts +6 -2
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatTokenValue.js +6 -3
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +16 -3
- package/dist/Resizable/ResizeHandle.d.ts +5 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +44 -5
- package/dist/Resizable/resizablePane.d.ts +58 -0
- package/dist/Resizable/resizablePane.d.ts.map +1 -0
- package/dist/Resizable/resizablePane.js +137 -0
- package/dist/Resizable/useResizable.d.ts +7 -0
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +13 -0
- package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
- package/dist/SelectableCard/SelectableCard.d.ts +1 -1
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +5 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +51 -10
- package/dist/SideNav/SideNav.d.ts +9 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +45 -10
- package/dist/Slider/sliderTouchController.js +2 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +14 -71
- package/dist/Spinner/index.d.ts +1 -1
- package/dist/Spinner/index.d.ts.map +1 -1
- package/dist/Spinner/spinnerRotor.d.ts +28 -0
- package/dist/Spinner/spinnerRotor.d.ts.map +1 -0
- package/dist/Spinner/spinnerRotor.js +98 -0
- package/dist/Stack/StackItem.d.ts +8 -4
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +17 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +13 -10
- package/dist/Switch/useSwitchTouch.js +4 -4
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -8
- package/dist/Timestamp/formatInstant.d.ts +10 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +13 -27
- package/dist/Timestamp/tooltipEntries.d.ts +5 -3
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.js +6 -4
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +9 -0
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +4 -1
- package/dist/Tokenizer/Tokenizer.d.ts +14 -10
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +189 -89
- package/dist/Tooltip/useTooltip.d.ts +3 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +164 -59
- package/dist/TreeList/TreeListItem.d.ts +2 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -3
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +2 -1
- package/dist/animator/createAnimator.js +2 -2
- package/dist/astryx.css +362 -325
- package/dist/gestures/GestureHost.d.ts +2 -2
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +21 -6
- package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +15 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/nativeScroll.d.ts +3 -6
- package/dist/gestures/nativeScroll.d.ts.map +1 -1
- package/dist/gestures/nativeScroll.js +7 -52
- package/dist/gestures/wheelSegmenter.d.ts +68 -1
- package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
- package/dist/gestures/wheelSegmenter.js +199 -10
- package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
- package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
- package/dist/hooks/StackItemScrollRegion.js +40 -0
- package/dist/hooks/computeOverflow.d.ts +2 -0
- package/dist/hooks/computeOverflow.d.ts.map +1 -1
- package/dist/hooks/computeOverflow.js +1 -1
- package/dist/hooks/menuPressGesture.d.ts +133 -21
- package/dist/hooks/menuPressGesture.d.ts.map +1 -1
- package/dist/hooks/menuPressGesture.js +155 -30
- package/dist/hooks/menuPressValues.d.ts +16 -0
- package/dist/hooks/menuPressValues.d.ts.map +1 -0
- package/dist/hooks/menuPressValues.js +18 -0
- package/dist/hooks/useClickableContainer.d.ts +36 -7
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +63 -14
- package/dist/hooks/useFocusTrap.d.ts +10 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +225 -132
- package/dist/hooks/useKeyboardHighlight.d.ts +17 -0
- package/dist/hooks/useKeyboardHighlight.d.ts.map +1 -0
- package/dist/hooks/useKeyboardHighlight.js +38 -0
- package/dist/hooks/useMediaQuery.d.ts +2 -1
- package/dist/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.js +37 -12
- package/dist/hooks/useMenuPress.d.ts +34 -1
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +93 -5
- package/dist/hooks/useOverflow.d.ts +10 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +214 -23
- package/dist/hooks/usePressFeedback.d.ts +6 -6
- package/dist/hooks/usePressFeedback.js +6 -6
- package/dist/hooks/useScrollRegionProps.d.ts +35 -0
- package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
- package/dist/hooks/useScrollRegionProps.js +51 -0
- package/dist/i18n/InternationalizationContext.d.ts +6 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.d.ts +23 -3
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +8 -3
- package/dist/i18n/generated-english/DateInput/DateInput.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/DateInput/DateInput.generated.js +0 -1
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts +8 -0
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.js +16 -0
- package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.js +0 -1
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +5 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/useCalendarSystem.d.ts +19 -0
- package/dist/i18n/useCalendarSystem.d.ts.map +1 -0
- package/dist/i18n/useCalendarSystem.js +61 -0
- package/dist/internal/calendar-system.d.ts +18 -0
- package/dist/internal/calendar-system.d.ts.map +1 -0
- package/dist/internal/calendar-system.js +19 -0
- package/dist/internal/spinner-rotor.d.ts +16 -0
- package/dist/internal/spinner-rotor.d.ts.map +1 -0
- package/dist/internal/spinner-rotor.js +16 -0
- package/dist/internal/touch.d.ts +20 -2
- package/dist/internal/touch.d.ts.map +1 -1
- package/dist/internal/touch.js +29 -3
- package/dist/motion/animator.d.ts +5 -5
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +7 -6
- package/dist/motion/carryAnimations.d.ts +58 -0
- package/dist/motion/carryAnimations.d.ts.map +1 -0
- package/dist/motion/carryAnimations.js +305 -0
- package/dist/motion/transientCopy.d.ts +4 -2
- package/dist/motion/transientCopy.d.ts.map +1 -1
- package/dist/motion/transientCopy.js +34 -5
- package/dist/motion/uikit/gestures.d.ts +41 -0
- package/dist/motion/uikit/gestures.d.ts.map +1 -1
- package/dist/motion/uikit/gestures.js +25 -0
- package/dist/motion/uikit/index.d.ts +1 -1
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +1 -1
- package/dist/motion/uikit/timing.d.ts +14 -10
- package/dist/motion/uikit/timing.d.ts.map +1 -1
- package/dist/motion/uikit/timing.js +7 -5
- package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
- package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
- package/dist/privateAttributes/press.stylex.d.ts +142 -0
- package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/press.stylex.js +101 -0
- package/dist/theme/themeMotion.d.ts +3 -2
- package/dist/theme/themeMotion.d.ts.map +1 -1
- package/dist/theme/themeMotion.js +3 -2
- package/dist/theme/tokens.stylex.d.ts +2 -2
- package/dist/theme/tokens.stylex.js +1 -1
- package/dist/utils/calendarDateParser.d.ts +110 -0
- package/dist/utils/calendarDateParser.d.ts.map +1 -0
- package/dist/utils/calendarDateParser.js +1225 -0
- package/dist/utils/calendarSystem.d.ts +176 -0
- package/dist/utils/calendarSystem.d.ts.map +1 -0
- package/dist/utils/calendarSystem.js +569 -0
- package/dist/utils/coarsePointer.d.ts +5 -0
- package/dist/utils/coarsePointer.d.ts.map +1 -1
- package/dist/utils/coarsePointer.js +22 -13
- package/dist/utils/flatTree.d.ts +6 -3
- package/dist/utils/flatTree.d.ts.map +1 -1
- package/dist/utils/flatTree.js +13 -3
- package/dist/utils/focusReturn.d.ts +34 -13
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +64 -17
- package/dist/utils/hitArea.d.ts +8 -1
- package/dist/utils/hitArea.d.ts.map +1 -1
- package/dist/utils/hitArea.js +99 -9
- package/dist/utils/inputPresentation.d.ts +9 -1
- package/dist/utils/inputPresentation.d.ts.map +1 -1
- package/dist/utils/inputPresentation.js +15 -1
- package/dist/utils/inputStream.d.ts +14 -1
- package/dist/utils/inputStream.d.ts.map +1 -1
- package/dist/utils/inputStream.js +40 -9
- package/dist/utils/interactionOverlay.stylex.d.ts +5 -9
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +29 -31
- package/dist/utils/plainDate.d.ts +38 -7
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +92 -18
- package/dist/utils/pressFeedback.d.ts +10 -2
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +40 -15
- package/dist/utils/pressGesture.d.ts +12 -6
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +26 -8
- package/dist/utils/scrollView.d.ts +25 -0
- package/dist/utils/scrollView.d.ts.map +1 -0
- package/dist/utils/scrollView.js +108 -0
- package/dist/utils/selectionLock.d.ts.map +1 -1
- package/dist/utils/selectionLock.js +1 -10
- package/dist/utils/touchHitArea.d.ts +30 -0
- package/dist/utils/touchHitArea.d.ts.map +1 -0
- package/dist/utils/touchHitArea.js +167 -0
- package/dist/utils/touchHitArea.stylex.d.ts +38 -0
- package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
- package/dist/utils/touchHitArea.stylex.js +48 -0
- package/dist/utils/triggerFocus.d.ts +5 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -1
- package/dist/utils/triggerFocus.js +9 -2
- package/locales/en.json +21 -1
- package/locales/pseudo.json +15 -0
- package/package.json +15 -4
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/BottomSheet/BottomSheet.tsx +45 -3
- package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
- package/src/BottomSheet/bottomSheetStack.ts +4 -3
- package/src/BottomSheet/useSheetGestures.ts +83 -20
- package/src/Calendar/Calendar.doc.mjs +76 -6
- package/src/Calendar/Calendar.tsx +123 -104
- package/src/Calendar/getInitialFocusDate.ts +22 -8
- package/src/Calendar/hooks/useCalendarDays.ts +89 -63
- package/src/Calendar/hooks/useCalendarNavigation.ts +68 -26
- package/src/CheckboxInput/CheckboxInput.doc.mjs +5 -4
- package/src/CheckboxInput/CheckboxInput.tsx +105 -20
- package/src/CheckboxInput/CheckboxRowPressContext.ts +22 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
- package/src/CheckboxList/CheckboxListItem.doc.mjs +3 -3
- package/src/CheckboxList/CheckboxListItem.tsx +35 -14
- package/src/ClickableCard/ClickableCard.tsx +8 -1
- package/src/ContextMenu/ContextMenu.tsx +2 -0
- package/src/DateInput/DateInput.doc.mjs +45 -12
- package/src/DateInput/DateInput.tsx +165 -179
- package/src/DateInput/MonthScroller.tsx +39 -37
- package/src/DateInput/MonthYearWheels.tsx +68 -47
- package/src/DateInput/PickerWheel.tsx +7 -2
- package/src/DateInput/TouchDateField.tsx +45 -17
- package/src/DateInput/monthGeometry.ts +110 -8
- package/src/DateInput/useCalendarPresentation.ts +64 -0
- package/src/DateInput/useTypedDate.ts +469 -0
- package/src/DateInput/wheelStrip.ts +2 -2
- package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -0
- package/src/DateRangeInput/DateRangeInput.tsx +43 -9
- package/src/DateTimeInput/DateTimeInput.doc.mjs +42 -9
- package/src/DateTimeInput/DateTimeInput.tsx +138 -148
- package/src/DateTimeInput/TouchDateTimeField.tsx +31 -16
- package/src/Dialog/Dialog.doc.mjs +1 -1
- package/src/Dialog/Dialog.tsx +14 -2
- package/src/Drawer/Drawer.doc.mjs +1 -1
- package/src/Drawer/useDrawerDialogPresence.ts +9 -2
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
- package/src/DropdownMenu/DropdownMenu.tsx +31 -7
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
- package/src/FileInput/FileInput.tsx +16 -2
- package/src/HoverCard/useHoverCard.tsx +3 -1
- package/src/Icon/useIcon.doc.mjs +94 -0
- package/src/InfoTip/InfoTip.doc.mjs +26 -2
- package/src/InfoTip/InfoTip.tsx +6 -27
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/InputGroupText.doc.mjs +45 -3
- package/src/InputGroup/InputGroupText.tsx +2 -1
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Item/Item.tsx +139 -35
- package/src/Item/ItemListRowContext.tsx +18 -0
- package/src/Layer/holdEntranceInput.ts +84 -0
- package/src/Layer/inputHold.ts +734 -0
- package/src/Layer/outsidePress.ts +18 -1
- package/src/Layer/preserveAnimations.ts +12 -275
- package/src/Layer/useBackdropPress.ts +41 -1
- package/src/Layer/useLayer.tsx +77 -4
- package/src/Layer/useTouchTrigger.ts +4 -0
- package/src/Layout/LayoutContent.doc.mjs +6 -3
- package/src/Layout/LayoutContent.tsx +10 -4
- package/src/Layout/LayoutPanel.doc.mjs +14 -11
- package/src/Layout/LayoutPanel.tsx +113 -16
- package/src/Lightbox/Lightbox.tsx +4 -0
- package/src/List/List.doc.mjs +10 -1
- package/src/List/List.tsx +5 -0
- package/src/List/ListItem.tsx +63 -8
- package/src/Markdown/parser.ts +65 -42
- package/src/MetadataList/MetadataList.tsx +1 -1
- package/src/MobileNav/MobileNav.doc.mjs +3 -3
- package/src/MobileNav/MobileNav.tsx +39 -1
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
- package/src/MoreMenu/MoreMenu.tsx +5 -3
- package/src/MultiSelector/MultiSelector.tsx +7 -17
- package/src/NumberInput/NumberInput.doc.mjs +1 -1
- package/src/NumberInput/NumberInput.tsx +259 -11
- package/src/OverflowList/OverflowList.tsx +15 -9
- package/src/Popover/usePopover.tsx +1 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
- package/src/PowerSearch/PowerSearch.tsx +20 -3
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +4 -1
- package/src/PowerSearch/PowerSearchToken.tsx +3 -0
- package/src/PowerSearch/formatFilterValue.ts +21 -11
- package/src/PowerSearch/formatTokenValue.ts +7 -1
- package/src/RadioList/RadioListItem.doc.mjs +3 -2
- package/src/RadioList/RadioListItem.tsx +16 -6
- package/src/Resizable/Resizable.doc.mjs +40 -12
- package/src/Resizable/ResizeHandle.tsx +68 -6
- package/src/Resizable/resizablePane.ts +179 -0
- package/src/Resizable/useResizable.ts +15 -0
- package/src/SegmentedControl/useSegmentedSelectionMotion.ts +3 -3
- package/src/SelectableCard/SelectableCard.tsx +8 -1
- package/src/Selector/Selector.tsx +83 -8
- package/src/SideNav/SideNav.doc.mjs +2 -2
- package/src/SideNav/SideNav.tsx +87 -12
- package/src/Slider/sliderTouchController.ts +2 -2
- package/src/Spinner/Spinner.tsx +7 -89
- package/src/Spinner/index.ts +1 -5
- package/src/Spinner/spinnerRotor.ts +113 -0
- package/src/Stack/Stack.doc.mjs +1 -1
- package/src/Stack/StackItem.tsx +27 -13
- package/src/Switch/Switch.tsx +7 -6
- package/src/Switch/useSwitchTouch.ts +4 -4
- package/src/TabList/Tab.tsx +5 -1
- package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
- package/src/Timestamp/Timestamp.doc.mjs +3 -3
- package/src/Timestamp/Timestamp.tsx +13 -8
- package/src/Timestamp/formatInstant.ts +49 -28
- package/src/Timestamp/tooltipEntries.ts +7 -3
- package/src/Token/Token.tsx +18 -1
- package/src/Token/TokenLink.tsx +7 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
- package/src/Tokenizer/Tokenizer.tsx +252 -115
- package/src/Tooltip/useTooltip.tsx +180 -80
- package/src/TreeList/TreeListItem.tsx +36 -2
- package/src/Typeahead/BaseTypeahead.tsx +2 -0
- package/src/animator/createAnimator.ts +3 -3
- package/src/gestures/GestureHost.ts +21 -5
- package/src/gestures/PanGestureRecognizer.ts +19 -2
- package/src/gestures/README.md +14 -5
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
- package/src/gestures/nativeScroll.ts +12 -68
- package/src/gestures/wheelSegmenter.ts +243 -10
- package/src/hooks/StackItemScrollRegion.tsx +57 -0
- package/src/hooks/computeOverflow.ts +1 -1
- package/src/hooks/menuPressGesture.ts +244 -38
- package/src/hooks/menuPressValues.ts +18 -0
- package/src/hooks/useClickableContainer.doc.mjs +8 -2
- package/src/hooks/useClickableContainer.ts +93 -15
- package/src/hooks/useFocusTrap.ts +268 -151
- package/src/hooks/useKeyboardHighlight.ts +71 -0
- package/src/hooks/useMediaQuery.ts +41 -12
- package/src/hooks/useMenuPress.ts +118 -11
- package/src/hooks/useOverflow.ts +321 -75
- package/src/hooks/usePressFeedback.doc.mjs +3 -3
- package/src/hooks/usePressFeedback.ts +6 -6
- package/src/hooks/useScrollRegionProps.ts +76 -0
- package/src/i18n/InternationalizationContext.ts +6 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +29 -1
- package/src/i18n/InternationalizationProvider.tsx +35 -3
- package/src/i18n/generated-english/DateInput/DateInput.generated.ts +0 -1
- package/src/i18n/generated-english/DateInput/useTypedDate.generated.ts +17 -0
- package/src/i18n/generated-english/DateTimeInput/DateTimeInput.generated.ts +0 -1
- package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
- package/src/i18n/generated-locales/en.generated.ts +7 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +7 -0
- package/src/i18n/index.ts +2 -0
- package/src/i18n/useCalendarSystem.ts +95 -0
- package/src/internal/calendar-system.ts +26 -0
- package/src/internal/spinner-rotor.ts +20 -0
- package/src/internal/touch.ts +43 -2
- package/src/motion/MEASUREMENTS.md +11 -0
- package/src/motion/README.md +3 -3
- package/src/motion/animator.ts +7 -7
- package/src/motion/carryAnimations.ts +389 -0
- package/src/motion/transientCopy.ts +45 -5
- package/src/motion/uikit/gestures.ts +22 -0
- package/src/motion/uikit/index.ts +1 -0
- package/src/motion/uikit/timing.ts +7 -5
- package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
- package/src/privateAttributes/press.stylex.ts +261 -0
- package/src/theme/themeMotion.ts +3 -2
- package/src/theme/tokens.stylex.ts +1 -1
- package/src/utils/calendarDateParser.ts +1385 -0
- package/src/utils/calendarSystem.ts +832 -0
- package/src/utils/coarsePointer.ts +27 -14
- package/src/utils/flatTree.ts +15 -3
- package/src/utils/focusReturn.ts +78 -18
- package/src/utils/hitArea.ts +138 -9
- package/src/utils/inputPresentation.ts +21 -1
- package/src/utils/inputStream.ts +47 -10
- package/src/utils/interactionOverlay.stylex.ts +19 -22
- package/src/utils/plainDate.ts +130 -19
- package/src/utils/pressFeedback.ts +46 -14
- package/src/utils/pressGesture.ts +35 -9
- package/src/utils/scrollView.ts +135 -0
- package/src/utils/selectionLock.ts +5 -10
- package/src/utils/touchHitArea.stylex.ts +56 -0
- package/src/utils/touchHitArea.ts +177 -0
- package/src/utils/triggerFocus.ts +17 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/core",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.9-canary.0200dfe",
|
|
4
4
|
"displayName": "Astryx Core",
|
|
5
5
|
"description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
|
|
6
6
|
"author": "Meta Open Source",
|
|
@@ -838,6 +838,16 @@
|
|
|
838
838
|
"source": "./src/internal/selectable-card.ts",
|
|
839
839
|
"types": "./dist/internal/selectable-card.d.ts",
|
|
840
840
|
"default": "./dist/internal/selectable-card.js"
|
|
841
|
+
},
|
|
842
|
+
"./internal/spinner-rotor": {
|
|
843
|
+
"source": "./src/internal/spinner-rotor.ts",
|
|
844
|
+
"types": "./dist/internal/spinner-rotor.d.ts",
|
|
845
|
+
"default": "./dist/internal/spinner-rotor.js"
|
|
846
|
+
},
|
|
847
|
+
"./internal/calendar-system": {
|
|
848
|
+
"source": "./src/internal/calendar-system.ts",
|
|
849
|
+
"types": "./dist/internal/calendar-system.d.ts",
|
|
850
|
+
"default": "./dist/internal/calendar-system.js"
|
|
841
851
|
}
|
|
842
852
|
},
|
|
843
853
|
"files": [
|
|
@@ -870,6 +880,9 @@
|
|
|
870
880
|
"react-dom": ">=19.0.0"
|
|
871
881
|
},
|
|
872
882
|
"devDependencies": {
|
|
883
|
+
"@astryxdesign/a11y-spec": "0.7.9-canary.0200dfe",
|
|
884
|
+
"@astryxdesign/cli": "0.7.9-canary.0200dfe",
|
|
885
|
+
"@astryxdesign/interaction-harness": "0.7.9-canary.0200dfe",
|
|
873
886
|
"@babel/cli": "^7.29.7",
|
|
874
887
|
"@babel/core": "^7.29.7",
|
|
875
888
|
"@babel/preset-react": "^7.29.7",
|
|
@@ -881,9 +894,7 @@
|
|
|
881
894
|
"@testing-library/react": "^16.3.2",
|
|
882
895
|
"@types/babel__core": "^7.20.5",
|
|
883
896
|
"tailwindcss": "^4.3.2",
|
|
884
|
-
"
|
|
885
|
-
"@astryxdesign/interaction-harness": "0.0.0",
|
|
886
|
-
"@astryxdesign/a11y-spec": "0.0.0"
|
|
897
|
+
"temporal-polyfill": "^1.0.6"
|
|
887
898
|
},
|
|
888
899
|
"dependencies": {
|
|
889
900
|
"intl-messageformat": "^11.2.9"
|
|
@@ -4,20 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file observeMainOverflow.ts
|
|
7
|
-
* @input
|
|
8
|
-
*
|
|
7
|
+
* @input A scroll container that holds its content as direct children with
|
|
8
|
+
* no wrapper: AppShell's main region under `height="fill"`, or a scrolling
|
|
9
|
+
* LayoutContent, LayoutPanel or StackItem
|
|
9
10
|
* @output observeMainOverflow(main, onChange): reports whether main's content
|
|
10
11
|
* overflows it on either axis, once at the start and on every change, and
|
|
11
12
|
* returns the function that stops observing
|
|
12
|
-
* @position Internal
|
|
13
|
+
* @position Internal and never exported. AppShell makes main a
|
|
13
14
|
* keyboard stop only while it overflows (`spec:AST-025` FR12,
|
|
14
|
-
* `component:AppShell` FR4 and PR1).
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* `component:AppShell` FR4 and PR1). useScrollRegionProps names a
|
|
16
|
+
* scrolling region only while it overflows. Main has no inner content
|
|
17
|
+
* box, so its content grows inside it without resizing it: its direct
|
|
18
|
+
* children's sizes are watched instead.
|
|
17
19
|
*
|
|
18
20
|
* SYNC: When modified, update:
|
|
19
21
|
* - /packages/core/src/AppShell/AppShell.tsx
|
|
20
22
|
* - /packages/core/src/AppShell/observeMainOverflow.test.ts
|
|
23
|
+
* - /packages/core/src/hooks/useScrollRegionProps.ts
|
|
21
24
|
*/
|
|
22
25
|
|
|
23
26
|
import {
|
|
@@ -81,7 +81,11 @@ import {LayerDepthProvider} from '../Layer/LayerDepthContext';
|
|
|
81
81
|
import {ModalAnnounceProvider} from '../hooks/ModalAnnounceProvider';
|
|
82
82
|
import {useModalOutlet} from '../Layer/modalOutlet';
|
|
83
83
|
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
84
|
-
import {
|
|
84
|
+
import {useFocusRegionContainment} from '../hooks/useFocusTrap';
|
|
85
|
+
import {
|
|
86
|
+
prepareFocusRepairOnRemoval,
|
|
87
|
+
returnFocusForLastInput,
|
|
88
|
+
} from '../utils/focusReturn';
|
|
85
89
|
import {useInteractionModalityTracking} from '../utils/interactionModality';
|
|
86
90
|
import {
|
|
87
91
|
BottomSheetPanel,
|
|
@@ -444,6 +448,10 @@ function StandaloneBottomSheet({
|
|
|
444
448
|
false,
|
|
445
449
|
);
|
|
446
450
|
const isEntrySettled = settledOpen && isOpen;
|
|
451
|
+
// Only a modal sheet contains Tab; a non-modal one leaves the page's focus
|
|
452
|
+
// order alone. A closing sheet stops containing as soon as it starts to
|
|
453
|
+
// leave.
|
|
454
|
+
useFocusRegionContainment(dialogRef, isOpen && hasScrim);
|
|
447
455
|
// Presentation outlives the controlled prop: a closing sheet stays mounted
|
|
448
456
|
// and in its native host through its exit, and only its motion completion
|
|
449
457
|
// (or a replace finishing) clears it. The open flip is derived during
|
|
@@ -548,7 +556,15 @@ function StandaloneBottomSheet({
|
|
|
548
556
|
return;
|
|
549
557
|
}
|
|
550
558
|
const key = stackKeyRef.current;
|
|
551
|
-
|
|
559
|
+
const dialog = dialogRef.current;
|
|
560
|
+
// Removing an open dialog runs no close, so focus would drop to the page.
|
|
561
|
+
// After the commit, the repair sends focus where a close would, if the
|
|
562
|
+
// removal lost focus.
|
|
563
|
+
const repairOnRemoval =
|
|
564
|
+
dialog == null
|
|
565
|
+
? null
|
|
566
|
+
: prepareFocusRepairOnRemoval(dialog, {keepRestingFocus: true});
|
|
567
|
+
const leave = registerBottomSheet(
|
|
552
568
|
{
|
|
553
569
|
key,
|
|
554
570
|
getElement: () => dialogRef.current,
|
|
@@ -606,6 +622,32 @@ function StandaloneBottomSheet({
|
|
|
606
622
|
isOpenRef.current,
|
|
607
623
|
hasScrim,
|
|
608
624
|
);
|
|
625
|
+
return () => {
|
|
626
|
+
// Read before the registry lets go of the sheet beneath. Focus the
|
|
627
|
+
// person had already moved out of the sheet to the page body stays
|
|
628
|
+
// there: the removal did not lose it.
|
|
629
|
+
if (repairOnRemoval != null && isSheetHostPresented(dialog)) {
|
|
630
|
+
const returnTarget =
|
|
631
|
+
finalFocusRefRef.current?.current ?? triggerRef.current;
|
|
632
|
+
const revealed = hasScrim ? getBottomSheetBeneath(key) : null;
|
|
633
|
+
repairOnRemoval(() => {
|
|
634
|
+
// The sheet beneath left too. Its own repair returns focus for the
|
|
635
|
+
// stack.
|
|
636
|
+
if (revealed != null && !revealed.element.isConnected) {
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
if (
|
|
640
|
+
revealed != null &&
|
|
641
|
+
(returnTarget == null || !revealed.element.contains(returnTarget))
|
|
642
|
+
) {
|
|
643
|
+
revealed.focus();
|
|
644
|
+
} else if (returnTarget != null && returnTarget.isConnected) {
|
|
645
|
+
returnFocusForLastInput(returnTarget);
|
|
646
|
+
}
|
|
647
|
+
});
|
|
648
|
+
}
|
|
649
|
+
leave();
|
|
650
|
+
};
|
|
609
651
|
}, [hasScrim, shouldPresent, writeScrim]);
|
|
610
652
|
useLayoutEffect(() => {
|
|
611
653
|
if (!isOpen) {
|
|
@@ -720,7 +762,7 @@ function StandaloneBottomSheet({
|
|
|
720
762
|
) {
|
|
721
763
|
revealed.focus();
|
|
722
764
|
} else if (returnTarget != null) {
|
|
723
|
-
|
|
765
|
+
returnFocusForLastInput(returnTarget);
|
|
724
766
|
}
|
|
725
767
|
triggerRef.current = null;
|
|
726
768
|
},
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
useLayoutEffect,
|
|
27
27
|
useMemo,
|
|
28
28
|
useRef,
|
|
29
|
+
useSyncExternalStore,
|
|
29
30
|
type ReactNode,
|
|
30
31
|
} from 'react';
|
|
31
32
|
import * as stylex from '@stylexjs/stylex';
|
|
@@ -60,6 +61,7 @@ import {
|
|
|
60
61
|
paddingStyles,
|
|
61
62
|
spacingStepToToken,
|
|
62
63
|
} from '../Layout/padding.stylex';
|
|
64
|
+
import {subscribeInput} from '../utils/inputStream';
|
|
63
65
|
import type {SpacingStep} from '../utils/types';
|
|
64
66
|
import {
|
|
65
67
|
isValidSnapPoint,
|
|
@@ -82,8 +84,20 @@ const HEIGHT_BUDGETS = {
|
|
|
82
84
|
export type BottomSheetHeight = keyof typeof HEIGHT_BUDGETS;
|
|
83
85
|
export type {BottomSheetSnapPoint};
|
|
84
86
|
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
+
// The reserve: how far the sheet's surface reaches below the screen, so a
|
|
88
|
+
// pull past the top never shows the page under it.
|
|
89
|
+
// SYNC: OVERSCROLL_MAX in useSheetGestures.ts must not exceed MIN_RESERVE.
|
|
90
|
+
const MIN_RESERVE = 48;
|
|
91
|
+
// A finger can pull past the top by at most the viewport's height. The rubber
|
|
92
|
+
// band over a sheet as tall as the viewport then shows 35.5% of it.
|
|
93
|
+
const RESERVE_VIEWPORT_SHARE = 0.4;
|
|
94
|
+
|
|
95
|
+
function sheetReserve(viewportHeight: number): number {
|
|
96
|
+
return Math.max(
|
|
97
|
+
MIN_RESERVE,
|
|
98
|
+
Math.ceil(viewportHeight * RESERVE_VIEWPORT_SHARE),
|
|
99
|
+
);
|
|
100
|
+
}
|
|
87
101
|
const MOBILE_KEYBOARD_BOTTOM_CLEARANCE = 48;
|
|
88
102
|
const TRANSITION_BACKSTOP_BUFFER_MS = 50;
|
|
89
103
|
// The floating handle bar's height. The bar is out of flow, so this is not
|
|
@@ -92,6 +106,22 @@ const TRANSITION_BACKSTOP_BUFFER_MS = 50;
|
|
|
92
106
|
// padding already provides.
|
|
93
107
|
const HANDLE_BAR_HEIGHT = spacingVars['--spacing-6'];
|
|
94
108
|
|
|
109
|
+
const BLOCK_SIZE_PROPERTIES = [
|
|
110
|
+
'height',
|
|
111
|
+
'minHeight',
|
|
112
|
+
'maxHeight',
|
|
113
|
+
'blockSize',
|
|
114
|
+
'minBlockSize',
|
|
115
|
+
'maxBlockSize',
|
|
116
|
+
] as const;
|
|
117
|
+
|
|
118
|
+
/** Whether StyleX styles hold any style: they can nest in arrays. */
|
|
119
|
+
function hasStyles(xstyle: unknown): boolean {
|
|
120
|
+
return Array.isArray(xstyle)
|
|
121
|
+
? xstyle.some(hasStyles)
|
|
122
|
+
: xstyle != null && typeof xstyle === 'object';
|
|
123
|
+
}
|
|
124
|
+
|
|
95
125
|
// Measure the viewport that the height budgets use. They are `dvh`, which
|
|
96
126
|
// the virtual keyboard does not shrink, so `visualViewport` would differ by
|
|
97
127
|
// the keyboard's height. `useMobileKeyboard` handles the keyboard and does
|
|
@@ -100,6 +130,14 @@ function layoutViewportHeight(): number {
|
|
|
100
130
|
return typeof window === 'undefined' ? 0 : window.innerHeight;
|
|
101
131
|
}
|
|
102
132
|
|
|
133
|
+
function subscribeToResize(onChange: () => void): () => void {
|
|
134
|
+
return subscribeInput(window, 'resize', onChange);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function subscribeToNothing(): () => void {
|
|
138
|
+
return () => {};
|
|
139
|
+
}
|
|
140
|
+
|
|
103
141
|
/**
|
|
104
142
|
* A stable identity for a set of snap points. Type-tagged, so the fraction
|
|
105
143
|
* `0.5` and the (invalid) string `'0.5'` cannot collide on one key.
|
|
@@ -159,8 +197,8 @@ const styles = stylex.create({
|
|
|
159
197
|
boxShadow: shadowVars['--shadow-high'],
|
|
160
198
|
outline: 'none',
|
|
161
199
|
overflow: 'hidden',
|
|
162
|
-
paddingBlockEnd: `calc(env(safe-area-inset-bottom, 0px) + ${
|
|
163
|
-
marginBlockEnd:
|
|
200
|
+
paddingBlockEnd: `calc(env(safe-area-inset-bottom, 0px) + var(--_sheet-reserve, ${MIN_RESERVE}px))`,
|
|
201
|
+
marginBlockEnd: `calc(-1 * var(--_sheet-reserve, ${MIN_RESERVE}px))`,
|
|
164
202
|
// Under reduced motion no transform runs. On a coarse primary pointer the
|
|
165
203
|
// entrance is an opacity cross-fade of at most 200 ms. A fine pointer gets
|
|
166
204
|
// the change at once (the 0.01s collapse).
|
|
@@ -340,11 +378,11 @@ const styles = stylex.create({
|
|
|
340
378
|
},
|
|
341
379
|
}),
|
|
342
380
|
budget: {
|
|
343
|
-
height: `calc(var(--_sheet-budget) + ${
|
|
381
|
+
height: `calc(var(--_sheet-budget) + var(--_sheet-reserve, ${MIN_RESERVE}px))`,
|
|
344
382
|
},
|
|
345
383
|
hugHeight: {
|
|
346
384
|
height: 'fit-content',
|
|
347
|
-
maxHeight: `calc(${HEIGHT_BUDGETS.hug} + ${
|
|
385
|
+
maxHeight: `calc(${HEIGHT_BUDGETS.hug} + var(--_sheet-reserve, ${MIN_RESERVE}px))`,
|
|
348
386
|
},
|
|
349
387
|
});
|
|
350
388
|
|
|
@@ -649,6 +687,24 @@ export function BottomSheetPanel({
|
|
|
649
687
|
|
|
650
688
|
// A caller's height owns the element's height: the drag never writes it.
|
|
651
689
|
const consumerHeight = style?.height;
|
|
690
|
+
// StyleX styles and a class name can size the sheet too. Their rules are
|
|
691
|
+
// only class names here, so any of them counts as a size.
|
|
692
|
+
const isSizedByCaller =
|
|
693
|
+
BLOCK_SIZE_PROPERTIES.some(property => style?.[property] != null) ||
|
|
694
|
+
hasStyles(xstyle) ||
|
|
695
|
+
(className != null && className !== '');
|
|
696
|
+
// Only a finger stretches the sheet past MIN_RESERVE, so a device with no
|
|
697
|
+
// touch pointer keeps the smallest reserve. So does a sheet the caller
|
|
698
|
+
// sizes, which nothing extends by the reserve; the stretch stops at it.
|
|
699
|
+
const hasTouchPointer = useMediaQuery('(any-pointer: coarse)');
|
|
700
|
+
const tracksViewport = isPresented && hasTouchPointer && !isSizedByCaller;
|
|
701
|
+
const viewportHeight = useSyncExternalStore(
|
|
702
|
+
tracksViewport ? subscribeToResize : subscribeToNothing,
|
|
703
|
+
() => (tracksViewport ? layoutViewportHeight() : 0),
|
|
704
|
+
() => 0,
|
|
705
|
+
);
|
|
706
|
+
const reserve =
|
|
707
|
+
viewportHeight > 0 ? sheetReserve(viewportHeight) : MIN_RESERVE;
|
|
652
708
|
const {
|
|
653
709
|
contentProps,
|
|
654
710
|
handleProps,
|
|
@@ -668,7 +724,7 @@ export function BottomSheetPanel({
|
|
|
668
724
|
isOpen: isInteractive,
|
|
669
725
|
isOpenRequested: isOpenRequested ?? isInteractive,
|
|
670
726
|
canDismiss: isSwipeDismissAllowed,
|
|
671
|
-
offscreenBlockEndInset:
|
|
727
|
+
offscreenBlockEndInset: reserve,
|
|
672
728
|
onDismiss,
|
|
673
729
|
snapHeights,
|
|
674
730
|
onTravelStart: () => {
|
|
@@ -931,6 +987,7 @@ export function BottomSheetPanel({
|
|
|
931
987
|
className,
|
|
932
988
|
{
|
|
933
989
|
['--_sheet-budget' as string]: budget,
|
|
990
|
+
['--_sheet-reserve' as string]: `${reserve}px`,
|
|
934
991
|
...(isInteractive
|
|
935
992
|
? gestureStyle
|
|
936
993
|
: isRetained || isClosing
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file bottomSheetStack.ts
|
|
7
|
-
* @input The DOM (dialog elements, document order) and
|
|
7
|
+
* @input The DOM (dialog elements, document order) and the focus-return
|
|
8
|
+
* utilities
|
|
8
9
|
* @output The private bottom-sheet stack registry: host registration,
|
|
9
10
|
* open-order ranking, top-layer reconciliation, one view per host, the
|
|
10
11
|
* replace handoff, and the shared native show/hide and focus helpers
|
|
@@ -50,7 +51,7 @@
|
|
|
50
51
|
// version keeps its own stack. Each document is its own stack.
|
|
51
52
|
|
|
52
53
|
import {notifyTopLayerEntry} from '../Layer/modalOutlet';
|
|
53
|
-
import {focusForLastInput} from '../utils/focusReturn';
|
|
54
|
+
import {focusForLastInput, returnFocusForLastInput} from '../utils/focusReturn';
|
|
54
55
|
|
|
55
56
|
export interface BottomSheetStackView {
|
|
56
57
|
/** Another modal sheet is presented alongside this one. */
|
|
@@ -458,7 +459,7 @@ function completeClosingGroup(group: ClosingGroup): void {
|
|
|
458
459
|
group.reported = true;
|
|
459
460
|
const target = group.returnTarget;
|
|
460
461
|
if (target != null && target.isConnected) {
|
|
461
|
-
|
|
462
|
+
returnFocusForLastInput(target);
|
|
462
463
|
}
|
|
463
464
|
}
|
|
464
465
|
|
|
@@ -64,6 +64,8 @@ import {
|
|
|
64
64
|
type UIEvent as ReactUIEvent,
|
|
65
65
|
} from 'react';
|
|
66
66
|
|
|
67
|
+
import {rubberBand} from '../motion/rubberBand';
|
|
68
|
+
import {scroll} from '../motion/uikit/scroll';
|
|
67
69
|
import {
|
|
68
70
|
computeDetentOffsets,
|
|
69
71
|
peekOffsetFor,
|
|
@@ -112,12 +114,19 @@ function isSyntheticTouch(event: ReactPointerEvent): boolean {
|
|
|
112
114
|
return (event as SyntheticTouchPointer).syntheticTouch === true;
|
|
113
115
|
}
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
type StylusTouch = Touch & {touchType?: string};
|
|
118
|
+
|
|
119
|
+
// An Apple Pencil raises touch events too, marked `stylus`. Its drag is a
|
|
120
|
+
// pen's, as on the grabber, where WebKit reports it as a pen.
|
|
121
|
+
function touchPointerType(touch: Touch): string {
|
|
122
|
+
return (touch as StylusTouch).touchType === 'stylus' ? 'pen' : 'touch';
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// A mouse's or a pen's stretch past fully open: a resisted fraction of the
|
|
126
|
+
// drag, capped at OVERSCROLL_MAX.
|
|
117
127
|
const OVERSCROLL_RESISTANCE = 0.35;
|
|
118
|
-
// SYNC: must
|
|
119
|
-
//
|
|
120
|
-
// import so it can be used inside stylex.create there.
|
|
128
|
+
// SYNC: must not exceed MIN_RESERVE in BottomSheetPanel.tsx, the smallest
|
|
129
|
+
// reserve the sheet keeps below the screen.
|
|
121
130
|
const OVERSCROLL_MAX = 48;
|
|
122
131
|
// Travel past the point where a scrolling gesture ran out of content before it
|
|
123
132
|
// hands the sheet the rest of the pull. Small enough to feel continuous with
|
|
@@ -308,6 +317,36 @@ function chainAtBottom(chain: ReadonlyArray<HTMLElement>): boolean {
|
|
|
308
317
|
return chain.every(elementAtBottom);
|
|
309
318
|
}
|
|
310
319
|
|
|
320
|
+
function chainScrolls(chain: ReadonlyArray<HTMLElement>): boolean {
|
|
321
|
+
return chain.some(element => element.scrollHeight - element.clientHeight > 1);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* iOS rubber-bands a scroller past its end even under `overscroll-behavior:
|
|
326
|
+
* contain`. While the content sits at its end mid-pull, `none` holds it still,
|
|
327
|
+
* so only the sheet moves. Returns the undo.
|
|
328
|
+
*/
|
|
329
|
+
function holdAtEnd(chain: ReadonlyArray<HTMLElement>): () => void {
|
|
330
|
+
const previous = chain.map(element => element.style.overscrollBehaviorY);
|
|
331
|
+
for (const element of chain) {
|
|
332
|
+
element.style.overscrollBehaviorY = 'none';
|
|
333
|
+
}
|
|
334
|
+
return () => {
|
|
335
|
+
chain.forEach((element, index) => {
|
|
336
|
+
element.style.overscrollBehaviorY = previous[index];
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function releaseContentHold(
|
|
342
|
+
armed: {releaseContentHold: (() => void) | null} | null,
|
|
343
|
+
): void {
|
|
344
|
+
if (armed?.releaseContentHold != null) {
|
|
345
|
+
armed.releaseContentHold();
|
|
346
|
+
armed.releaseContentHold = null;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
311
350
|
function visibleHeightForOffset(
|
|
312
351
|
sheetHeight: number,
|
|
313
352
|
offset: number,
|
|
@@ -690,6 +729,8 @@ export function useSheetGestures({
|
|
|
690
729
|
samples: {t: number; y: number}[];
|
|
691
730
|
velocity: number;
|
|
692
731
|
height: number;
|
|
732
|
+
/** The surface kept below the screen when the drag began. */
|
|
733
|
+
reserve: number;
|
|
693
734
|
baseOffset: number;
|
|
694
735
|
baseLayoutOffset: number;
|
|
695
736
|
renderedOffset: number;
|
|
@@ -1171,7 +1212,7 @@ export function useSheetGestures({
|
|
|
1171
1212
|
const baseLayoutOffset = settledLayoutOffsetRef.current;
|
|
1172
1213
|
dragStateRef.current = {
|
|
1173
1214
|
syntheticTouch,
|
|
1174
|
-
pointerType:
|
|
1215
|
+
pointerType: event.pointerType,
|
|
1175
1216
|
pointerId: event.pointerId,
|
|
1176
1217
|
startCoord: start,
|
|
1177
1218
|
lastCoord: event.clientY,
|
|
@@ -1179,6 +1220,7 @@ export function useSheetGestures({
|
|
|
1179
1220
|
samples: [{t: event.timeStamp, y: event.clientY}],
|
|
1180
1221
|
velocity: 0,
|
|
1181
1222
|
height: sheetHeight,
|
|
1223
|
+
reserve: offscreenBlockEndInsetRef.current,
|
|
1182
1224
|
baseOffset: settledOffset,
|
|
1183
1225
|
baseLayoutOffset,
|
|
1184
1226
|
renderedOffset: settledOffset,
|
|
@@ -1279,8 +1321,19 @@ export function useSheetGestures({
|
|
|
1279
1321
|
const maxDetentOffset = offsets[offsets.length - 1];
|
|
1280
1322
|
let next: number;
|
|
1281
1323
|
if (raw < 0) {
|
|
1282
|
-
//
|
|
1283
|
-
|
|
1324
|
+
// A touch device's reserve covers the whole stretch. The clamp binds
|
|
1325
|
+
// only where the reserve is short.
|
|
1326
|
+
next =
|
|
1327
|
+
state.pointerType === 'touch'
|
|
1328
|
+
? Math.max(
|
|
1329
|
+
-state.reserve,
|
|
1330
|
+
rubberBand(
|
|
1331
|
+
raw,
|
|
1332
|
+
state.height - state.reserve,
|
|
1333
|
+
scroll.rubberBand.coefficient,
|
|
1334
|
+
),
|
|
1335
|
+
)
|
|
1336
|
+
: Math.max(-OVERSCROLL_MAX, raw * OVERSCROLL_RESISTANCE);
|
|
1284
1337
|
} else if (raw > maxDetentOffset) {
|
|
1285
1338
|
// In the dismiss zone: no magnet, so it doesn't fight a drag-to-close.
|
|
1286
1339
|
next = raw;
|
|
@@ -1482,6 +1535,8 @@ export function useSheetGestures({
|
|
|
1482
1535
|
// armed at `touchstart`. That drag never cancelled the native scroll, so
|
|
1483
1536
|
// it has to yield again if the finger comes back down.
|
|
1484
1537
|
promotedAtContentEnd: boolean;
|
|
1538
|
+
// Null while no hold is set.
|
|
1539
|
+
releaseContentHold: (() => void) | null;
|
|
1485
1540
|
} | null>(null);
|
|
1486
1541
|
const previousTouchHandlersRef = useRef<{
|
|
1487
1542
|
start: (e: TouchEvent) => void;
|
|
@@ -1495,6 +1550,7 @@ export function useSheetGestures({
|
|
|
1495
1550
|
// the gesture; the sheet returns to its detent.
|
|
1496
1551
|
const yieldToPinch = useCallback(
|
|
1497
1552
|
(target?: HTMLElement) => {
|
|
1553
|
+
releaseContentHold(touchDragRef.current);
|
|
1498
1554
|
touchDragRef.current = null;
|
|
1499
1555
|
armedBodyRef.current = null;
|
|
1500
1556
|
cancelDrag(target);
|
|
@@ -1522,6 +1578,7 @@ export function useSheetGestures({
|
|
|
1522
1578
|
({
|
|
1523
1579
|
syntheticTouch: true,
|
|
1524
1580
|
pointerId: touch.identifier,
|
|
1581
|
+
pointerType: touchPointerType(touch),
|
|
1525
1582
|
clientY: touch.clientY,
|
|
1526
1583
|
timeStamp: Date.now(),
|
|
1527
1584
|
currentTarget: target,
|
|
@@ -1542,21 +1599,21 @@ export function useSheetGestures({
|
|
|
1542
1599
|
// scroll, but it is tracked all the same: the scroller can run out of
|
|
1543
1600
|
// content while the finger is still down (see onTouchMove). A touch
|
|
1544
1601
|
// inside a layer this sheet hosts is that layer's, never tracked here.
|
|
1602
|
+
releaseContentHold(touchDragRef.current);
|
|
1545
1603
|
if (!touch || isInsideNestedLayer(event.target, body)) {
|
|
1546
1604
|
touchDragRef.current = null;
|
|
1547
1605
|
return;
|
|
1548
1606
|
}
|
|
1549
1607
|
const scrollers = scrollChainUnder(event.target, body);
|
|
1550
1608
|
const top = chainAtTop(scrollers);
|
|
1551
|
-
//
|
|
1552
|
-
//
|
|
1553
|
-
//
|
|
1554
|
-
//
|
|
1555
|
-
//
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
const bottom = chainAtBottom(scrollers) && activeOffsetRef.current > 0;
|
|
1609
|
+
// Claiming a pull up from its first move blocks the content's scroll for
|
|
1610
|
+
// the whole touch. So it is claimed here only below the tallest detent,
|
|
1611
|
+
// or over content that cannot scroll. At the tallest detent, a list at
|
|
1612
|
+
// its end keeps its touch. Its pull reaches the sheet through the
|
|
1613
|
+
// content-end hand-off below, and a reversal hands it back.
|
|
1614
|
+
const bottom =
|
|
1615
|
+
chainAtBottom(scrollers) &&
|
|
1616
|
+
(activeOffsetRef.current > 0 || !chainScrolls(scrollers));
|
|
1560
1617
|
touchDragRef.current = {
|
|
1561
1618
|
id: touch.identifier,
|
|
1562
1619
|
startY: touch.clientY,
|
|
@@ -1565,6 +1622,7 @@ export function useSheetGestures({
|
|
|
1565
1622
|
bottom,
|
|
1566
1623
|
contentEndY: null,
|
|
1567
1624
|
promotedAtContentEnd: false,
|
|
1625
|
+
releaseContentHold: null,
|
|
1568
1626
|
};
|
|
1569
1627
|
};
|
|
1570
1628
|
|
|
@@ -1594,6 +1652,7 @@ export function useSheetGestures({
|
|
|
1594
1652
|
// at once; a later pull past the end promotes again.
|
|
1595
1653
|
armed.contentEndY = null;
|
|
1596
1654
|
armed.promotedAtContentEnd = false;
|
|
1655
|
+
releaseContentHold(armed);
|
|
1597
1656
|
cancelDragRef.current(scroller);
|
|
1598
1657
|
return;
|
|
1599
1658
|
}
|
|
@@ -1627,6 +1686,7 @@ export function useSheetGestures({
|
|
|
1627
1686
|
chainAtBottom(armed.scrollers);
|
|
1628
1687
|
if (pullDownAtTop || pullUpAtBottom) {
|
|
1629
1688
|
event.preventDefault();
|
|
1689
|
+
releaseContentHold(armed);
|
|
1630
1690
|
touchDragRef.current = null;
|
|
1631
1691
|
beginDragRef.current(
|
|
1632
1692
|
asPointer(t, scroller),
|
|
@@ -1646,13 +1706,14 @@ export function useSheetGestures({
|
|
|
1646
1706
|
// cannot see this, and re-arming for a preventDefault() promotion would
|
|
1647
1707
|
// be useless anyway: once the browser has committed the gesture to
|
|
1648
1708
|
// scrolling, every remaining touchmove is non-cancelable. Nothing needs
|
|
1649
|
-
// cancelling either
|
|
1650
|
-
// upward travel scrolls nothing. Anchor at the point where the content
|
|
1709
|
+
// cancelling either: the hold clamps the scroller at its maximum, so
|
|
1710
|
+
// further upward travel scrolls nothing. Anchor at the point where the content
|
|
1651
1711
|
// ran out and give the sheet everything past it, so the pull continues
|
|
1652
1712
|
// into the sheet with no jump and no lost scrolling.
|
|
1653
|
-
if (
|
|
1713
|
+
if (chainAtBottom(armed.scrollers)) {
|
|
1654
1714
|
if (armed.contentEndY == null) {
|
|
1655
1715
|
armed.contentEndY = t.clientY;
|
|
1716
|
+
armed.releaseContentHold ??= holdAtEnd(armed.scrollers);
|
|
1656
1717
|
} else if (armed.contentEndY - t.clientY >= CONTENT_END_HANDOFF_SLOP) {
|
|
1657
1718
|
armed.promotedAtContentEnd = true;
|
|
1658
1719
|
beginDragRef.current(
|
|
@@ -1664,10 +1725,12 @@ export function useSheetGestures({
|
|
|
1664
1725
|
}
|
|
1665
1726
|
} else {
|
|
1666
1727
|
armed.contentEndY = null;
|
|
1728
|
+
releaseContentHold(armed);
|
|
1667
1729
|
}
|
|
1668
1730
|
};
|
|
1669
1731
|
|
|
1670
1732
|
const onTouchEnd = (event: TouchEvent) => {
|
|
1733
|
+
releaseContentHold(touchDragRef.current);
|
|
1671
1734
|
touchDragRef.current = null;
|
|
1672
1735
|
const pointerId = dragStateRef.current?.pointerId;
|
|
1673
1736
|
if (pointerId == null) {
|