@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
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* @input StyleX and the semantic interaction-overlay color tokens
|
|
10
10
|
* @output Reusable background-color and background-image state styles, the
|
|
11
11
|
* touch press's registered strength variable (`pressVars`) and its clocks
|
|
12
|
-
* (`pressConsts`)
|
|
12
|
+
* (`pressConsts`). The list row's compositor press layer and its clocks
|
|
13
|
+
* are internal (privateAttributes/press.stylex.ts, utils/rowPressLayer.stylex.ts)
|
|
13
14
|
* @position Internal styling utility for interactive core surfaces
|
|
14
15
|
*
|
|
15
16
|
* SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
// background image, so a composer's color transition cannot fade the onset
|
|
42
43
|
// in. `on` sets the strength to 1 on the first frame. `fading` animates it
|
|
43
44
|
// from 1 to 0, not to the hover strength, because a finger has no hover. The
|
|
44
|
-
// theme's motion
|
|
45
|
+
// release plays the theme's exit motion tokens, which follow its tempo.
|
|
45
46
|
//
|
|
46
47
|
// The release is an animation, not a transition. Composers own their
|
|
47
48
|
// `transition-*` longhands, and StyleX is last-wins per property. A
|
|
@@ -54,7 +55,8 @@
|
|
|
54
55
|
// `animation-*` on the element that composes them. The touch arms own both.
|
|
55
56
|
|
|
56
57
|
import * as stylex from '@stylexjs/stylex';
|
|
57
|
-
import {
|
|
58
|
+
import {reducedMotionFadeConsts} from '../motion/reducedMotion.stylex';
|
|
59
|
+
import {colorVars, durationVars, easeVars} from '../theme/tokens.stylex';
|
|
58
60
|
|
|
59
61
|
/**
|
|
60
62
|
* The touch press's strength on the surface the controller painted, 0 to 1.
|
|
@@ -72,26 +74,22 @@ export const pressVars = stylex.defineVars({
|
|
|
72
74
|
});
|
|
73
75
|
|
|
74
76
|
/**
|
|
75
|
-
* The touch press's
|
|
76
|
-
*
|
|
77
|
-
* `defineConsts`, so the one number is inlined here at build time and is the
|
|
78
|
-
* controller's constant at run time (`PRESS_FADE_MS` in pressGesture.ts):
|
|
79
|
-
* the release animation and the controller's clock cannot drift apart. When
|
|
80
|
-
* that clock runs out, the controller waits for a release animation that a
|
|
81
|
-
* busy main thread started late, then removes the attribute.
|
|
77
|
+
* The touch press's measured release clock, kept as a reference value. Press
|
|
78
|
+
* releases now play the theme's `--duration-exit`.
|
|
82
79
|
*/
|
|
83
80
|
export const pressConsts = stylex.defineConsts({
|
|
84
|
-
/**
|
|
81
|
+
/** UIKit's deselect clock, in ms: the measured reference value. */
|
|
85
82
|
releaseMs: 200,
|
|
86
83
|
});
|
|
87
84
|
|
|
88
85
|
/**
|
|
89
|
-
* The release's clock
|
|
90
|
-
*
|
|
86
|
+
* The release's clock: the theme's exit duration. The token already
|
|
87
|
+
* follows the theme's tempo. The controller's timer reads the
|
|
88
|
+
* same property.
|
|
91
89
|
*/
|
|
92
|
-
const PRESS_RELEASE_DURATION =
|
|
93
|
-
/** The same clock under Reduce Motion
|
|
94
|
-
const PRESS_RELEASE_DURATION_REDUCED = `min(${
|
|
90
|
+
const PRESS_RELEASE_DURATION = durationVars['--duration-exit'];
|
|
91
|
+
/** The same clock under Reduce Motion, no longer than the Reduce Motion fade. */
|
|
92
|
+
const PRESS_RELEASE_DURATION_REDUCED = `min(${durationVars['--duration-exit']}, ${reducedMotionFadeConsts.duration})`;
|
|
95
93
|
|
|
96
94
|
const ENABLED = ':where(:not(:disabled,[aria-disabled="true"]))';
|
|
97
95
|
const HOVER_HOVER = '@media (hover: hover)';
|
|
@@ -144,13 +142,12 @@ const pressRelease = stylex.keyframes({
|
|
|
144
142
|
});
|
|
145
143
|
|
|
146
144
|
/**
|
|
147
|
-
* The release's curve:
|
|
148
|
-
* (
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* would read as half its clock.
|
|
145
|
+
* The release's curve: the theme's exit easing. The list row's layer
|
|
146
|
+
* (privateAttributes/press.stylex.ts) and Switch's press layers use the same
|
|
147
|
+
* token; interactionOverlay.cell.test.ts and Switch.test.tsx fail if they
|
|
148
|
+
* differ.
|
|
152
149
|
*/
|
|
153
|
-
const RELEASE_EASE = '
|
|
150
|
+
const RELEASE_EASE = easeVars['--ease-exit'];
|
|
154
151
|
|
|
155
152
|
/**
|
|
156
153
|
* The touch press's strength and its release, on the element the controller
|
package/src/utils/plainDate.ts
CHANGED
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
import type {ISODateString, PlainDate} from './dateTypes';
|
|
11
11
|
import type {Locale} from '../i18n/types';
|
|
12
|
+
import {
|
|
13
|
+
formatCalendarDate,
|
|
14
|
+
isCalendarSystem,
|
|
15
|
+
type CalendarSystem,
|
|
16
|
+
} from './calendarSystem';
|
|
12
17
|
import {firstCharacter} from './characters';
|
|
13
18
|
import {standaloneMonthCapitalLanguages} from './standaloneMonthCapitals.generated';
|
|
14
19
|
|
|
@@ -295,6 +300,52 @@ export function plainDateIsInRange(
|
|
|
295
300
|
return compare(pd, range[0]) >= 0 && compare(pd, range[1]) <= 0;
|
|
296
301
|
}
|
|
297
302
|
|
|
303
|
+
export interface NearestAcceptedDateOptions {
|
|
304
|
+
min?: PlainDate | null;
|
|
305
|
+
max?: PlainDate | null;
|
|
306
|
+
/** Rejects a date inside the bounds, such as a date constraint. */
|
|
307
|
+
isDateDisabled?: (date: PlainDate) => boolean;
|
|
308
|
+
/** How many days to search on each side of the clamped date. */
|
|
309
|
+
searchDays?: number;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* The date nearest to `target` that a field accepts. It clamps `target` into
|
|
314
|
+
* [`min`, `max`], then searches outward one day at a time, inside the bounds,
|
|
315
|
+
* for a date that `isDateDisabled` allows. On a tie the later date wins. When
|
|
316
|
+
* no date inside the search window is allowed, it returns the clamped date.
|
|
317
|
+
*/
|
|
318
|
+
export function nearestAcceptedDate(
|
|
319
|
+
target: PlainDate,
|
|
320
|
+
{min, max, isDateDisabled, searchDays = 366}: NearestAcceptedDateOptions,
|
|
321
|
+
): PlainDate {
|
|
322
|
+
let clamped = target;
|
|
323
|
+
if (min != null && compare(clamped, min) < 0) {
|
|
324
|
+
clamped = min;
|
|
325
|
+
}
|
|
326
|
+
if (max != null && compare(clamped, max) > 0) {
|
|
327
|
+
clamped = max;
|
|
328
|
+
}
|
|
329
|
+
if (isDateDisabled == null || !isDateDisabled(clamped)) {
|
|
330
|
+
return clamped;
|
|
331
|
+
}
|
|
332
|
+
const isAccepted = (date: PlainDate) =>
|
|
333
|
+
(min == null || compare(date, min) >= 0) &&
|
|
334
|
+
(max == null || compare(date, max) <= 0) &&
|
|
335
|
+
!isDateDisabled(date);
|
|
336
|
+
for (let offset = 1; offset <= searchDays; offset += 1) {
|
|
337
|
+
const later = plainDateAddDays(clamped, offset);
|
|
338
|
+
if (isAccepted(later)) {
|
|
339
|
+
return later;
|
|
340
|
+
}
|
|
341
|
+
const earlier = plainDateAddDays(clamped, -offset);
|
|
342
|
+
if (isAccepted(earlier)) {
|
|
343
|
+
return earlier;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return clamped;
|
|
347
|
+
}
|
|
348
|
+
|
|
298
349
|
export function plainDateSetFirstOfMonth(pd: PlainDate): PlainDate {
|
|
299
350
|
return {year: pd.year, month: pd.month, day: 1};
|
|
300
351
|
}
|
|
@@ -374,8 +425,13 @@ export const DATE_FORMAT_MONTH_YEAR: Intl.DateTimeFormatOptions = {
|
|
|
374
425
|
export function plainDateFormatStandaloneMonthYear(
|
|
375
426
|
pd: PlainDate,
|
|
376
427
|
locale: Locale,
|
|
428
|
+
calendar: Intl.DateTimeFormatOptions['calendar'] = 'gregory',
|
|
377
429
|
): string {
|
|
378
|
-
const label = plainDateFormat(
|
|
430
|
+
const label = plainDateFormat(
|
|
431
|
+
pd,
|
|
432
|
+
{...DATE_FORMAT_MONTH_YEAR, calendar},
|
|
433
|
+
locale,
|
|
434
|
+
);
|
|
379
435
|
let language: string;
|
|
380
436
|
try {
|
|
381
437
|
language = new Intl.Locale(locale).language;
|
|
@@ -450,35 +506,63 @@ export const DATE_FORMAT_SHORT_WITH_YEAR: Intl.DateTimeFormatOptions = {
|
|
|
450
506
|
* when `options.calendar` is omitted. The explicit option remains supported for
|
|
451
507
|
* compatibility with the public `Intl.DateTimeFormatOptions` signature; it is a
|
|
452
508
|
* display-only escape hatch and does not change PlainDate arithmetic, parsing,
|
|
453
|
-
* serialization, or any Astryx component's calendar semantics.
|
|
509
|
+
* serialization, or any Astryx component's calendar semantics. Another
|
|
510
|
+
* calendar names the month and day that Calendar shows in it.
|
|
454
511
|
*/
|
|
455
512
|
export function plainDateFormat(
|
|
456
513
|
pd: PlainDate,
|
|
457
514
|
options: Intl.DateTimeFormatOptions,
|
|
458
515
|
locale: Locale = 'en',
|
|
459
516
|
): string {
|
|
517
|
+
const calendar = options.calendar ?? 'gregory';
|
|
518
|
+
if (calendar !== 'gregory' && isCalendarSystem(calendar)) {
|
|
519
|
+
return formatCalendarDate(calendar, pd, options, locale);
|
|
520
|
+
}
|
|
521
|
+
const [format, date] = plainDateFormatInput(pd, options, locale);
|
|
522
|
+
return format.format(date);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* The parts of `plainDateFormat`'s output, from the same formatter and date.
|
|
527
|
+
* Internal: not re-exported from `utils/index.ts`.
|
|
528
|
+
*/
|
|
529
|
+
export function plainDateFormatToParts(
|
|
530
|
+
pd: PlainDate,
|
|
531
|
+
options: Intl.DateTimeFormatOptions,
|
|
532
|
+
locale: Locale,
|
|
533
|
+
): Intl.DateTimeFormatPart[] {
|
|
534
|
+
const [format, date] = plainDateFormatInput(pd, options, locale);
|
|
535
|
+
return format.formatToParts(date);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
function plainDateFormatInput(
|
|
539
|
+
pd: PlainDate,
|
|
540
|
+
options: Intl.DateTimeFormatOptions,
|
|
541
|
+
locale: Locale,
|
|
542
|
+
): [Intl.DateTimeFormat, Date | number] {
|
|
460
543
|
const calendar = options.calendar ?? 'gregory';
|
|
461
544
|
if (options.timeZone != null) {
|
|
462
|
-
return
|
|
545
|
+
return [
|
|
546
|
+
dateTimeFormatFor(locale, {...options, calendar}),
|
|
463
547
|
plainDateToDate(pd),
|
|
464
|
-
|
|
548
|
+
];
|
|
465
549
|
}
|
|
466
550
|
if (TIME_OF_DAY_FIELDS.some(field => options[field] != null)) {
|
|
467
551
|
// A zone name or a time of day reads local midnight in the zone current
|
|
468
552
|
// at the call. A cached formatter would keep the zone it was built in,
|
|
469
553
|
// so this one is built for the call.
|
|
470
|
-
return
|
|
554
|
+
return [
|
|
555
|
+
new Intl.DateTimeFormat(locale, {...options, calendar}),
|
|
471
556
|
plainDateToDate(pd),
|
|
472
|
-
|
|
557
|
+
];
|
|
473
558
|
}
|
|
474
559
|
// Date fields alone: UTC midnight formatted in UTC, so neither the cached
|
|
475
560
|
// formatter nor the date depends on the host's zone, which can change while
|
|
476
561
|
// a page is open.
|
|
477
|
-
return
|
|
478
|
-
...options,
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
}).format(utcTime(pd.year, pd.month - 1, pd.day));
|
|
562
|
+
return [
|
|
563
|
+
dateTimeFormatFor(locale, {...options, calendar, timeZone: 'UTC'}),
|
|
564
|
+
utcTime(pd.year, pd.month - 1, pd.day),
|
|
565
|
+
];
|
|
482
566
|
}
|
|
483
567
|
|
|
484
568
|
/** Options that print a time of day or a zone, which a PlainDate lacks. */
|
|
@@ -518,6 +602,20 @@ export function dateTimeFormatFor(
|
|
|
518
602
|
return format;
|
|
519
603
|
}
|
|
520
604
|
|
|
605
|
+
/**
|
|
606
|
+
* @internal `dateTimeFormatFor`, except that without `options.timeZone` it
|
|
607
|
+
* builds a formatter for the call. A cached formatter keeps the host zone it
|
|
608
|
+
* was built in.
|
|
609
|
+
*/
|
|
610
|
+
export function dateTimeFormatAtCall(
|
|
611
|
+
locale: Locale,
|
|
612
|
+
options: Intl.DateTimeFormatOptions,
|
|
613
|
+
): Intl.DateTimeFormat {
|
|
614
|
+
return options.timeZone === undefined
|
|
615
|
+
? new Intl.DateTimeFormat(locale, options)
|
|
616
|
+
: dateTimeFormatFor(locale, options);
|
|
617
|
+
}
|
|
618
|
+
|
|
521
619
|
/**
|
|
522
620
|
* The locale's name for the "week of year" date field ("week", "Woche", "週"),
|
|
523
621
|
* from CLDR through `Intl.DisplayNames`. Calendar names its week-number
|
|
@@ -543,23 +641,29 @@ export function plainDateWeekFieldName(locale: Locale = 'en'): string {
|
|
|
543
641
|
return 'week';
|
|
544
642
|
}
|
|
545
643
|
|
|
546
|
-
const dayNumberFormats = new Map<
|
|
644
|
+
const dayNumberFormats = new Map<string, Intl.NumberFormat>();
|
|
547
645
|
|
|
548
646
|
/**
|
|
549
647
|
* A day of the month or a week number in the locale's own digits: `15` in
|
|
550
|
-
* English, `۱۵` in Persian, `١٥` in Egyptian Arabic.
|
|
551
|
-
*
|
|
552
|
-
*
|
|
648
|
+
* English, `۱۵` in Persian, `١٥` in Egyptian Arabic. A `numberingSystem`
|
|
649
|
+
* replaces the locale's digits. Only the digits change. The number stays the
|
|
650
|
+
* value that it is given, so no calendar applies, and no grouping separator or
|
|
651
|
+
* unit word is added.
|
|
553
652
|
* Internal: not re-exported from `utils/index.ts`.
|
|
554
653
|
*/
|
|
555
654
|
export function plainDateFormatDayNumber(
|
|
556
655
|
value: number,
|
|
557
656
|
locale: Locale,
|
|
657
|
+
numberingSystem?: string,
|
|
558
658
|
): string {
|
|
559
|
-
|
|
659
|
+
const key = `${locale}|${numberingSystem ?? ''}`;
|
|
660
|
+
let format = dayNumberFormats.get(key);
|
|
560
661
|
if (format == null) {
|
|
561
|
-
format = new Intl.NumberFormat(locale, {
|
|
562
|
-
|
|
662
|
+
format = new Intl.NumberFormat(locale, {
|
|
663
|
+
useGrouping: false,
|
|
664
|
+
numberingSystem,
|
|
665
|
+
});
|
|
666
|
+
dayNumberFormats.set(key, format);
|
|
563
667
|
}
|
|
564
668
|
return format.format(value);
|
|
565
669
|
}
|
|
@@ -605,14 +709,21 @@ export const SHARED_DATE_FORMAT_OPTIONS: Record<
|
|
|
605
709
|
* members. The shared entry point DateInput uses for the named-format path;
|
|
606
710
|
* Timestamp maps the same members onto {@link SHARED_DATE_FORMAT_OPTIONS} in
|
|
607
711
|
* its own `formatTimestamp` switch (its input is a `Date`, not a `PlainDate`).
|
|
712
|
+
* The locale-aware members write the date in `calendar`, which defaults to
|
|
713
|
+
* Gregorian. `system_date` stays the Gregorian ISO date in every calendar.
|
|
608
714
|
*/
|
|
609
715
|
export function formatSharedDate(
|
|
610
716
|
pd: PlainDate,
|
|
611
717
|
format: SharedDateFormat,
|
|
612
718
|
locale: Locale = 'en',
|
|
719
|
+
calendar: CalendarSystem = 'gregory',
|
|
613
720
|
): string {
|
|
614
721
|
if (format === 'system_date') {
|
|
615
722
|
return plainDateToISO(pd);
|
|
616
723
|
}
|
|
617
|
-
return plainDateFormat(
|
|
724
|
+
return plainDateFormat(
|
|
725
|
+
pd,
|
|
726
|
+
{...SHARED_DATE_FORMAT_OPTIONS[format], calendar},
|
|
727
|
+
locale,
|
|
728
|
+
);
|
|
618
729
|
}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file pressFeedback.ts
|
|
5
5
|
* @input The press state machine (pressGesture.ts), the menu-press and
|
|
6
|
-
* press-group markers and the document's pointer, keyboard, scroll and
|
|
6
|
+
* press-group markers, the scroll-view test (scrollView.ts) and the document's pointer, keyboard, scroll and
|
|
7
7
|
* visibility events
|
|
8
8
|
* @output PRESSABLE_ATTRIBUTE, PRESSED_ATTRIBUTE, pressableProps,
|
|
9
|
-
* pressFadeMs and
|
|
9
|
+
* pressFadeMs, installPressFeedback and cancelPress
|
|
10
10
|
* @position The DOM half of the touch press model. usePressFeedback installs
|
|
11
11
|
* it, and the CSS arms live in interactionOverlay.stylex.ts.
|
|
12
12
|
*
|
|
@@ -23,9 +23,13 @@
|
|
|
23
23
|
// Where the primary pointer is fine, the controller ignores the mouse and the
|
|
24
24
|
// keyboard, and CSS `:active` keeps their press. Under a coarse primary
|
|
25
25
|
// pointer the CSS drops `:active`, so the controller paints every press. A
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
26
|
+
// mouse, trackpad or Space press paints at once. The controller reads the
|
|
27
|
+
// same query as the stylesheet, so they agree.
|
|
28
|
+
//
|
|
29
|
+
// A finger waits only inside a scroller. Outside one, a surface highlights in
|
|
30
|
+
// the frame the finger lands, as a UIControl does. Inside one, it waits the
|
|
31
|
+
// content-touch delay, because the touch can become a scroll. Rows follow the
|
|
32
|
+
// same rule.
|
|
29
33
|
//
|
|
30
34
|
// A surface's hold does nothing, so it keeps the browser's long-press text
|
|
31
35
|
// selection (AST-094). Only an element whose hold does something suppresses
|
|
@@ -43,7 +47,10 @@ import {
|
|
|
43
47
|
pressGestureStep,
|
|
44
48
|
} from './pressGesture';
|
|
45
49
|
import {isCoarsePointer, watchCoarsePointer} from './coarsePointer';
|
|
50
|
+
import {reducedMotionFadeConsts} from '../motion/reducedMotion.stylex';
|
|
51
|
+
import {parseMotionRoleValue} from '../motion/roles';
|
|
46
52
|
import {subscribeInput} from './inputStream';
|
|
53
|
+
import {isInsideScrollView} from './scrollView';
|
|
47
54
|
import {TOUCH_QUERY} from './touchPresentation';
|
|
48
55
|
import {holdsPressThroughDrag} from '../privateAttributes/pressHoldsDrag.stylex';
|
|
49
56
|
import {isTrackedByGroup} from '../privateAttributes/pressGroupItem.stylex';
|
|
@@ -151,19 +158,24 @@ const TIMER_MS: Record<NonNullable<PressStep['timer']>, number> = {
|
|
|
151
158
|
|
|
152
159
|
/**
|
|
153
160
|
* The release fade's clock on `element`, read once, at the release, from the
|
|
154
|
-
*
|
|
155
|
-
*
|
|
161
|
+
* token its stylesheet reads: the theme's `--duration-exit`. Without a
|
|
162
|
+
* readable value it is the token's default. Under Reduce Motion it is no
|
|
163
|
+
* longer than the Reduce Motion fade, as in the stylesheet.
|
|
156
164
|
*/
|
|
157
165
|
export function pressFadeMs(element: Element): number {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
const exit =
|
|
167
|
+
parseMotionRoleValue(
|
|
168
|
+
'duration',
|
|
169
|
+
getComputedStyle(element).getPropertyValue('--duration-exit'),
|
|
170
|
+
) ?? PRESS_FADE_MS;
|
|
163
171
|
const reduced =
|
|
164
172
|
typeof window.matchMedia === 'function' &&
|
|
165
173
|
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
166
|
-
|
|
174
|
+
const bound = parseMotionRoleValue(
|
|
175
|
+
'duration',
|
|
176
|
+
reducedMotionFadeConsts.duration,
|
|
177
|
+
);
|
|
178
|
+
return reduced && bound != null ? Math.min(exit, bound) : exit;
|
|
167
179
|
}
|
|
168
180
|
|
|
169
181
|
/**
|
|
@@ -247,7 +259,11 @@ function paintElement(element: HTMLElement, paint: PressPaint): void {
|
|
|
247
259
|
element.removeAttribute(PRESSED_ATTRIBUTE);
|
|
248
260
|
return;
|
|
249
261
|
}
|
|
250
|
-
|
|
262
|
+
// A step that keeps the paint writes nothing, so the element sees one
|
|
263
|
+
// change per paint.
|
|
264
|
+
if (element.getAttribute(PRESSED_ATTRIBUTE) !== paint) {
|
|
265
|
+
element.setAttribute(PRESSED_ATTRIBUTE, paint);
|
|
266
|
+
}
|
|
251
267
|
}
|
|
252
268
|
|
|
253
269
|
function clearTimer(slot: Slot): void {
|
|
@@ -381,6 +397,21 @@ function finish(slot: Slot): void {
|
|
|
381
397
|
}
|
|
382
398
|
}
|
|
383
399
|
|
|
400
|
+
/**
|
|
401
|
+
* Ends the press the controller follows on `element`, and its paint, at once.
|
|
402
|
+
* A clickable container calls it when a press starts on an interactive
|
|
403
|
+
* element inside it: that press does not activate the container, so the
|
|
404
|
+
* container shows no press.
|
|
405
|
+
*/
|
|
406
|
+
export function cancelPress(element: Element): void {
|
|
407
|
+
if (finger.live?.element === element) {
|
|
408
|
+
finish(finger);
|
|
409
|
+
}
|
|
410
|
+
if (button.live?.element === element) {
|
|
411
|
+
finish(button);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
384
415
|
/** A new press on an element owns its paint: the other slot's gesture there ends. */
|
|
385
416
|
function takeOver(other: Slot, element: HTMLElement): void {
|
|
386
417
|
if (other.live?.element === element) {
|
|
@@ -521,6 +552,7 @@ function onPointerDown(event: PointerEvent): void {
|
|
|
521
552
|
kind: 'down',
|
|
522
553
|
x: event.clientX,
|
|
523
554
|
y: event.clientY,
|
|
555
|
+
delayed: isInsideScrollView(element),
|
|
524
556
|
}),
|
|
525
557
|
);
|
|
526
558
|
}
|
|
@@ -21,10 +21,15 @@
|
|
|
21
21
|
// primary pointer, so a mouse, trackpad or Space press on such a device comes
|
|
22
22
|
// here as `buttonDown`: painted at once and faded on release.
|
|
23
23
|
//
|
|
24
|
+
// Only a finger inside a scroller waits. The controller tells the machine
|
|
25
|
+
// which touch waits (`down`'s `delayed`), and a touch that does not wait goes
|
|
26
|
+
// straight to `pressed`. After that the machine is the same.
|
|
27
|
+
//
|
|
24
28
|
// The constants were measured against native apps. The machine knows nothing
|
|
25
29
|
// of the DOM, so {@link pressGestureStep}'s cases are the state diagram.
|
|
26
30
|
|
|
27
|
-
import {
|
|
31
|
+
import {resolveTokenReferences} from '../theme/tokenReferences';
|
|
32
|
+
import {durationDefaults} from '../theme/tokens.stylex';
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
35
|
* How long a finger must stay put before the surface believes it.
|
|
@@ -59,14 +64,16 @@ export const PRESS_SLOP_PX = 10;
|
|
|
59
64
|
export const PRESS_FLASH_MS = 100;
|
|
60
65
|
|
|
61
66
|
/**
|
|
62
|
-
* How long the paint takes to leave after a release
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* runs out, the controller waits for a release
|
|
67
|
-
* then removes the attribute.
|
|
67
|
+
* How long the paint takes to leave after a release when no theme sets
|
|
68
|
+
* `--duration-exit`: that token's default. The release plays the theme's
|
|
69
|
+
* exit motion tokens, so the controller reads the token on
|
|
70
|
+
* the pressed element (`pressFadeMs` in pressFeedback.ts) and falls back to
|
|
71
|
+
* this. When the clock runs out, the controller waits for a release
|
|
72
|
+
* animation that still runs, then removes the attribute.
|
|
68
73
|
*/
|
|
69
|
-
export const PRESS_FADE_MS: number =
|
|
74
|
+
export const PRESS_FADE_MS: number = Number.parseFloat(
|
|
75
|
+
resolveTokenReferences(durationDefaults)['--duration-exit'],
|
|
76
|
+
);
|
|
70
77
|
|
|
71
78
|
/**
|
|
72
79
|
* How recently a scroller must have moved for a touch on it to be a BRAKE
|
|
@@ -105,7 +112,17 @@ export interface PressGesture {
|
|
|
105
112
|
}
|
|
106
113
|
|
|
107
114
|
export type PressEvent =
|
|
108
|
-
| {
|
|
115
|
+
| {
|
|
116
|
+
kind: 'down';
|
|
117
|
+
x: number;
|
|
118
|
+
y: number;
|
|
119
|
+
/**
|
|
120
|
+
* Whether this touch waits {@link PRESS_ONSET_MS} before it paints:
|
|
121
|
+
* a surface inside a scroller. Defaults to
|
|
122
|
+
* `true`.
|
|
123
|
+
*/
|
|
124
|
+
delayed?: boolean;
|
|
125
|
+
}
|
|
109
126
|
/**
|
|
110
127
|
* A mouse button or the Space key went down on the surface. The
|
|
111
128
|
* controller sends this only where the stylesheet has dropped `:active`
|
|
@@ -167,6 +184,15 @@ export function pressGestureStep(
|
|
|
167
184
|
event: PressEvent,
|
|
168
185
|
): PressStep {
|
|
169
186
|
if (event.kind === 'down') {
|
|
187
|
+
// A surface with no scroller above it: nothing can turn this touch into a
|
|
188
|
+
// scroll, so it paints in the frame it lands, as a UIControl highlights.
|
|
189
|
+
if (event.delayed === false) {
|
|
190
|
+
return {
|
|
191
|
+
gesture: {originX: event.x, originY: event.y, phase: 'pressed'},
|
|
192
|
+
paint: 'on',
|
|
193
|
+
timer: null,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
170
196
|
// A new touch always starts armed and painting nothing, whatever the last
|
|
171
197
|
// gesture ended as. This is the only way out of `dead`.
|
|
172
198
|
return {
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file scrollView.ts
|
|
5
|
+
* @input An element and its computed styles
|
|
6
|
+
* @output Exports parseTouchAction, rootOverflow, SCROLLABLE_OVERFLOW and
|
|
7
|
+
* isInsideScrollView: whether a touch on the element lands inside a box the
|
|
8
|
+
* browser can scroll
|
|
9
|
+
* @position The one definition of "inside a scroll view", shared by the
|
|
10
|
+
* press feedback controller (utils/pressFeedback.ts) and the gesture
|
|
11
|
+
* core's native-scroll probe (gestures/nativeScroll.ts), so Core's main
|
|
12
|
+
* entry can ask it without the gesture core
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {parentAcrossShadow} from './flatTree';
|
|
16
|
+
|
|
17
|
+
/** Overflow values that let a box scroll. */
|
|
18
|
+
export const SCROLLABLE_OVERFLOW: ReadonlySet<string> = new Set([
|
|
19
|
+
'auto',
|
|
20
|
+
'scroll',
|
|
21
|
+
'overlay',
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
/** How far a box must overflow, in px, before it counts as scrolling. */
|
|
25
|
+
const OVERFLOW_TOLERANCE_PX = 1;
|
|
26
|
+
|
|
27
|
+
export interface AllowedPans {
|
|
28
|
+
readonly x: boolean;
|
|
29
|
+
readonly y: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Which pans a `touch-action` value lets the browser perform. */
|
|
33
|
+
export function parseTouchAction(value: string): AllowedPans {
|
|
34
|
+
const tokens = value.trim().split(/\s+/);
|
|
35
|
+
if (tokens.includes('auto') || tokens.includes('manipulation')) {
|
|
36
|
+
return {x: true, y: true};
|
|
37
|
+
}
|
|
38
|
+
if (tokens.includes('none')) {
|
|
39
|
+
return {x: false, y: false};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
x: tokens.some(
|
|
43
|
+
token =>
|
|
44
|
+
token === 'pan-x' || token === 'pan-left' || token === 'pan-right',
|
|
45
|
+
),
|
|
46
|
+
y: tokens.some(
|
|
47
|
+
token => token === 'pan-y' || token === 'pan-up' || token === 'pan-down',
|
|
48
|
+
),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The viewport's overflow on an axis. It scrolls unless the root or the body
|
|
54
|
+
* clips it, as a scroll lock does with `overflow: hidden`.
|
|
55
|
+
*/
|
|
56
|
+
export function rootOverflow(doc: Document, axis: 'x' | 'y'): string {
|
|
57
|
+
const view = doc.defaultView;
|
|
58
|
+
if (view == null) {
|
|
59
|
+
return 'hidden';
|
|
60
|
+
}
|
|
61
|
+
for (const element of [doc.documentElement, doc.body]) {
|
|
62
|
+
if (element == null) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const style = view.getComputedStyle(element);
|
|
66
|
+
const value = axis === 'x' ? style.overflowX : style.overflowY;
|
|
67
|
+
if (value === 'hidden' || value === 'clip') {
|
|
68
|
+
return 'hidden';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return 'auto';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function overflows(element: Element, axis: 'x' | 'y'): boolean {
|
|
75
|
+
return axis === 'y'
|
|
76
|
+
? element.scrollHeight - element.clientHeight > OVERFLOW_TOLERANCE_PX
|
|
77
|
+
: element.scrollWidth - element.clientWidth > OVERFLOW_TOLERANCE_PX;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Whether a touch on `element` lands inside a scroll view, UIKit's question
|
|
82
|
+
* for a touch: a box above it, the page included, overflows on an axis it
|
|
83
|
+
* scrolls, and `touch-action` on the way up leaves that axis to the browser.
|
|
84
|
+
* A `position: fixed` box ends the walk, because it does not move with any
|
|
85
|
+
* scroller above it. A wheel scrolls whatever `touch-action` says, so a
|
|
86
|
+
* wheel's question passes `readsTouchAction: false`.
|
|
87
|
+
*/
|
|
88
|
+
export function isInsideScrollView(
|
|
89
|
+
element: Element,
|
|
90
|
+
{readsTouchAction = true}: {readsTouchAction?: boolean} = {},
|
|
91
|
+
): boolean {
|
|
92
|
+
const doc = element.ownerDocument;
|
|
93
|
+
const view = doc.defaultView;
|
|
94
|
+
if (view == null) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const root = doc.scrollingElement ?? doc.documentElement;
|
|
98
|
+
let panX = true;
|
|
99
|
+
let panY = true;
|
|
100
|
+
for (let node: Node | null = element; node != null;) {
|
|
101
|
+
if (node instanceof Element) {
|
|
102
|
+
const style = view.getComputedStyle(node);
|
|
103
|
+
if (readsTouchAction) {
|
|
104
|
+
const pans = parseTouchAction(style.touchAction || 'auto');
|
|
105
|
+
panX &&= pans.x;
|
|
106
|
+
panY &&= pans.y;
|
|
107
|
+
}
|
|
108
|
+
if (node === root || node === doc.documentElement) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
if (
|
|
112
|
+
(panY &&
|
|
113
|
+
SCROLLABLE_OVERFLOW.has(style.overflowY) &&
|
|
114
|
+
overflows(node, 'y')) ||
|
|
115
|
+
(panX &&
|
|
116
|
+
SCROLLABLE_OVERFLOW.has(style.overflowX) &&
|
|
117
|
+
overflows(node, 'x'))
|
|
118
|
+
) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (style.position === 'fixed') {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
node = parentAcrossShadow(node);
|
|
126
|
+
}
|
|
127
|
+
return (
|
|
128
|
+
(panY &&
|
|
129
|
+
SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'y')) &&
|
|
130
|
+
overflows(root, 'y')) ||
|
|
131
|
+
(panX &&
|
|
132
|
+
SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'x')) &&
|
|
133
|
+
overflows(root, 'x'))
|
|
134
|
+
);
|
|
135
|
+
}
|
|
@@ -28,7 +28,11 @@
|
|
|
28
28
|
//
|
|
29
29
|
// A mouse never takes the lock, so its released behavior stays (AST-017).
|
|
30
30
|
|
|
31
|
-
import {
|
|
31
|
+
import {
|
|
32
|
+
containsAlongFlatTree,
|
|
33
|
+
deepActiveElement,
|
|
34
|
+
parentAcrossShadow,
|
|
35
|
+
} from './flatTree';
|
|
32
36
|
import {subscribeInput} from './inputStream';
|
|
33
37
|
import {isIosWebKit} from './touchQueries';
|
|
34
38
|
|
|
@@ -616,15 +620,6 @@ function openShadowRootsOf(target: EventTarget | null): ShadowRoot[] {
|
|
|
616
620
|
return roots;
|
|
617
621
|
}
|
|
618
622
|
|
|
619
|
-
/** The focused element, inside open shadow roots too. */
|
|
620
|
-
function deepActiveElement(doc: Document | null): Element | null {
|
|
621
|
-
let active = doc?.activeElement ?? null;
|
|
622
|
-
while (active?.shadowRoot?.activeElement != null) {
|
|
623
|
-
active = active.shadowRoot.activeElement;
|
|
624
|
-
}
|
|
625
|
-
return active;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
623
|
/**
|
|
629
624
|
* The selection-lock styles on `set`, refcounted per element; idempotent
|
|
630
625
|
* release.
|