@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/dist/utils/flatTree.js
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file flatTree.ts
|
|
5
5
|
* @input A DOM node
|
|
6
|
-
* @output Exports parentAcrossShadow,
|
|
6
|
+
* @output Exports parentAcrossShadow, containsAlongFlatTree, which walks it,
|
|
7
|
+
* and deepActiveElement
|
|
7
8
|
* @position The flat-tree parent the browser scrolls and dispatches
|
|
8
|
-
* through, shared by the gesture host's native-scroll probe
|
|
9
|
+
* through, shared by the gesture host's native-scroll probe, the
|
|
9
10
|
* selection lock (which the press feedback controller uses without the
|
|
10
|
-
* gesture system)
|
|
11
|
+
* gesture system) and the Layer module's input hold
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
/** The node's parent, crossing out of shadow roots. */
|
|
@@ -35,4 +36,13 @@ export function containsAlongFlatTree(ancestor, node) {
|
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** The focused element of `doc`, inside open shadow roots too. */
|
|
42
|
+
export function deepActiveElement(doc) {
|
|
43
|
+
let active = doc?.activeElement ?? null;
|
|
44
|
+
while (active?.shadowRoot?.activeElement != null) {
|
|
45
|
+
active = active.shadowRoot.activeElement;
|
|
46
|
+
}
|
|
47
|
+
return active;
|
|
38
48
|
}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* @input The document's current active element and the shared interaction
|
|
4
4
|
* modality.
|
|
5
5
|
* @output Whether focus would be lost if a surface hid now; a focus move whose
|
|
6
|
-
* ring follows the last input;
|
|
7
|
-
*
|
|
6
|
+
* ring follows the last input; the focus return of a closed overlay, which
|
|
7
|
+
* never scrolls the page; and the one path that moves focus out of content a
|
|
8
|
+
* change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
|
|
8
9
|
* @position Utility; used by overlays (BottomSheet, Dialog, DropdownMenu) that
|
|
9
10
|
* move focus programmatically, and by disclosures that hide focused
|
|
10
11
|
* content. isFocusDetached lives in isFocusDetached.ts, so the utils entry,
|
|
@@ -58,18 +59,38 @@ export declare function moveFocusLeftBehind(note: FocusWithin | null, target: HT
|
|
|
58
59
|
*/
|
|
59
60
|
export declare function focusForLastInput(element: HTMLElement, options?: FocusOptions, modality?: InteractionModality): void;
|
|
60
61
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
* Returns focus to `opener` after an overlay closes, without a scroll and with
|
|
63
|
+
* the ring the last input calls for. WebKit records the nearest focusable
|
|
64
|
+
* ancestor of a tapped button as the opener, such as a `tabindex="-1"` main
|
|
65
|
+
* region. A reveal of that region scrolls the page to its top edge.
|
|
66
|
+
*/
|
|
67
|
+
export declare function returnFocusForLastInput(opener: HTMLElement, modality?: InteractionModality): void;
|
|
68
|
+
/**
|
|
69
|
+
* Prepares a focus repair for an open surface that may be removed while open
|
|
70
|
+
* (rendered only while open, or removed with its view). Removing a `<dialog>`
|
|
71
|
+
* runs no close and no browser focus return. Call this while the surface is
|
|
72
|
+
* mounted: it reads the frame that hosts the surface now, because a removed
|
|
73
|
+
* frame's document has no window. Call the returned function from the effect
|
|
74
|
+
* cleanup with the repair to run.
|
|
67
75
|
*
|
|
68
|
-
* Once the commit has finished,
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
76
|
+
* Once the commit has finished, the repair runs only when the surface really
|
|
77
|
+
* left the document (StrictMode's simulated unmount keeps it) and the removal
|
|
78
|
+
* lost focus, both in the surface's document and in the document that hosts
|
|
79
|
+
* its frame. A control the user pressed outside the surface, or outside its
|
|
80
|
+
* frame, keeps its focus, and so does a surface that took focus in the same
|
|
81
|
+
* commit.
|
|
82
|
+
*/
|
|
83
|
+
export declare function prepareFocusRepairOnRemoval(surface: Element, options?: {
|
|
84
|
+
/**
|
|
85
|
+
* Skip the repair when focus already rested on the page body before the
|
|
86
|
+
* commit's first removal: the removal did not lose that focus.
|
|
87
|
+
*/
|
|
88
|
+
keepRestingFocus?: boolean;
|
|
89
|
+
}): (repair: () => void) => void;
|
|
90
|
+
/**
|
|
91
|
+
* The focus repair above that returns focus to `opener` while the opener is
|
|
92
|
+
* still on the page. Call the returned function from the effect cleanup with
|
|
93
|
+
* the opener.
|
|
73
94
|
*/
|
|
74
95
|
export declare function prepareFocusReturnOnRemoval(surface: Element): (opener: Element | null) => void;
|
|
75
96
|
//# sourceMappingURL=focusReturn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusReturn.d.ts","sourceRoot":"","sources":["../../src/utils/focusReturn.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"focusReturn.d.ts","sourceRoot":"","sources":["../../src/utils/focusReturn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAG/B;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAM5E;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACxC,WAAW,GAAG,IAAI,CAMpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,GAAE,OAAO,GAAG,IAAW,GAC5B,OAAO,CAUT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,YAAY,EACtB,QAAQ,GAAE,mBAAqD,GAC9D,IAAI,CA2BN;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,IAAI,CAEN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IACR;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GACA,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,IAAI,CAkB9B;AAgBD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GACf,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CASlC"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* @input The document's current active element and the shared interaction
|
|
6
6
|
* modality.
|
|
7
7
|
* @output Whether focus would be lost if a surface hid now; a focus move whose
|
|
8
|
-
* ring follows the last input;
|
|
9
|
-
*
|
|
8
|
+
* ring follows the last input; the focus return of a closed overlay, which
|
|
9
|
+
* never scrolls the page; and the one path that moves focus out of content a
|
|
10
|
+
* change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
|
|
10
11
|
* @position Utility; used by overlays (BottomSheet, Dialog, DropdownMenu) that
|
|
11
12
|
* move focus programmatically, and by disclosures that hide focused
|
|
12
13
|
* content. isFocusDetached lives in isFocusDetached.ts, so the utils entry,
|
|
@@ -108,28 +109,74 @@ export function focusForLastInput(element, options, modality = getInteractionMod
|
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
/**
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
* Returns focus to `opener` after an overlay closes, without a scroll and with
|
|
113
|
+
* the ring the last input calls for. WebKit records the nearest focusable
|
|
114
|
+
* ancestor of a tapped button as the opener, such as a `tabindex="-1"` main
|
|
115
|
+
* region. A reveal of that region scrolls the page to its top edge.
|
|
116
|
+
*/
|
|
117
|
+
export function returnFocusForLastInput(opener, modality) {
|
|
118
|
+
focusForLastInput(opener, {
|
|
119
|
+
preventScroll: true
|
|
120
|
+
}, modality);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Prepares a focus repair for an open surface that may be removed while open
|
|
125
|
+
* (rendered only while open, or removed with its view). Removing a `<dialog>`
|
|
126
|
+
* runs no close and no browser focus return. Call this while the surface is
|
|
127
|
+
* mounted: it reads the frame that hosts the surface now, because a removed
|
|
128
|
+
* frame's document has no window. Call the returned function from the effect
|
|
129
|
+
* cleanup with the repair to run.
|
|
117
130
|
*
|
|
118
|
-
* Once the commit has finished,
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
131
|
+
* Once the commit has finished, the repair runs only when the surface really
|
|
132
|
+
* left the document (StrictMode's simulated unmount keeps it) and the removal
|
|
133
|
+
* lost focus, both in the surface's document and in the document that hosts
|
|
134
|
+
* its frame. A control the user pressed outside the surface, or outside its
|
|
135
|
+
* frame, keeps its focus, and so does a surface that took focus in the same
|
|
136
|
+
* commit.
|
|
123
137
|
*/
|
|
124
|
-
export function
|
|
138
|
+
export function prepareFocusRepairOnRemoval(surface, options) {
|
|
125
139
|
const host = surface.ownerDocument.defaultView?.frameElement ?? null;
|
|
126
|
-
return
|
|
140
|
+
return repair => {
|
|
141
|
+
if (options?.keepRestingFocus === true && wasFocusDetachedBeforeRemoval(surface.ownerDocument)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
127
144
|
queueMicrotask(() => {
|
|
128
|
-
if (surface.isConnected
|
|
145
|
+
if (surface.isConnected) {
|
|
129
146
|
return;
|
|
130
147
|
}
|
|
131
148
|
if (isFocusLost(surface) && (host == null || isFocusLost(host))) {
|
|
132
|
-
|
|
149
|
+
repair();
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Whether focus rested on the page body when the current commit began
|
|
156
|
+
// removing surfaces, per document. One removal can drop focus before a later
|
|
157
|
+
// surface's cleanup runs, so every cleanup of the commit reads the first value.
|
|
158
|
+
const focusDetachedAtRemovalStart = new WeakMap();
|
|
159
|
+
function wasFocusDetachedBeforeRemoval(doc) {
|
|
160
|
+
let wasDetached = focusDetachedAtRemovalStart.get(doc);
|
|
161
|
+
if (wasDetached === undefined) {
|
|
162
|
+
wasDetached = isFocusDetached(doc);
|
|
163
|
+
focusDetachedAtRemovalStart.set(doc, wasDetached);
|
|
164
|
+
queueMicrotask(() => focusDetachedAtRemovalStart.delete(doc));
|
|
165
|
+
}
|
|
166
|
+
return wasDetached;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The focus repair above that returns focus to `opener` while the opener is
|
|
171
|
+
* still on the page. Call the returned function from the effect cleanup with
|
|
172
|
+
* the opener.
|
|
173
|
+
*/
|
|
174
|
+
export function prepareFocusReturnOnRemoval(surface) {
|
|
175
|
+
const repairOnRemoval = prepareFocusRepairOnRemoval(surface);
|
|
176
|
+
return opener => {
|
|
177
|
+
repairOnRemoval(() => {
|
|
178
|
+
if (opener != null && opener.isConnected) {
|
|
179
|
+
returnFocusForLastInput(opener);
|
|
133
180
|
}
|
|
134
181
|
});
|
|
135
182
|
};
|
package/dist/utils/hitArea.d.ts
CHANGED
|
@@ -53,6 +53,13 @@ export declare function writeHitInsets(element: HTMLElement, insets: HitInsets):
|
|
|
53
53
|
export interface WatchHitAreaOptions {
|
|
54
54
|
/** The size to grow toward, px. @default 44 */
|
|
55
55
|
readonly minSize?: number;
|
|
56
|
+
/**
|
|
57
|
+
* A touch that the browser hit-tests onto a descendant is the element's,
|
|
58
|
+
* however near a neighbour is. Set it for a host whose content can paint
|
|
59
|
+
* past its box, such as a list row with a swipe panel. A control whose
|
|
60
|
+
* grown input is its descendant leaves it off. @default false
|
|
61
|
+
*/
|
|
62
|
+
readonly ownsDescendantTouches?: boolean;
|
|
56
63
|
}
|
|
57
64
|
/**
|
|
58
65
|
* Stops every watch and forgets them, for tests: no observer, listener or
|
|
@@ -68,5 +75,5 @@ export declare function resetHitAreaForTests(): void;
|
|
|
68
75
|
* its parent's text and children settle after a change, all in the shared
|
|
69
76
|
* per-frame pass, and re-measured at once when a touch starts on it.
|
|
70
77
|
*/
|
|
71
|
-
export declare function watchHitArea(element: Element, onInsets: (insets: HitInsets) => void, { minSize }?: WatchHitAreaOptions): () => void;
|
|
78
|
+
export declare function watchHitArea(element: Element, onInsets: (insets: HitInsets) => void, { minSize, ownsDescendantTouches, }?: WatchHitAreaOptions): () => void;
|
|
72
79
|
//# sourceMappingURL=hitArea.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitArea.d.ts","sourceRoot":"","sources":["../../src/utils/hitArea.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hitArea.d.ts","sourceRoot":"","sources":["../../src/utils/hitArea.ts"],"names":[],"mappings":"AAgCA,+BAA+B;AAC/B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,6CAA6C;AAC7C,eAAO,MAAM,aAAa,EAAE,SAAkD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAmCX;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAClC,OAAO,GAAE,MAAyB,GACjC,SAAS,CA4CX;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,GAAE,MAAyB,GACjC,MAAM,CAoBR;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAI5E;AAskBD,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,EACrC,EACE,OAA0B,EAC1B,qBAA6B,GAC9B,GAAE,mBAAwB,GAC1B,MAAM,IAAI,CA0DZ"}
|
package/dist/utils/hitArea.js
CHANGED
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
// live control measures: only under a coarse primary pointer (AST-094), only on
|
|
25
25
|
// screen, and in one read pass per frame within a 4 ms budget. Until the first
|
|
26
26
|
// pass the insets are 0, so first paint never overlaps anything.
|
|
27
|
+
// The insets are lengths in the control's own box, so a pass measures in its
|
|
28
|
+
// layout px. A layer that opens from a smaller scale then keeps the insets of
|
|
29
|
+
// the size it settles at.
|
|
27
30
|
import { observeContent } from "./sharedMutationObserver.js";
|
|
28
31
|
|
|
29
32
|
/** A rect in client pixels. */
|
|
@@ -217,6 +220,8 @@ const observedSizes = new WeakMap();
|
|
|
217
220
|
const scopeTimers = new Map();
|
|
218
221
|
let frame = null;
|
|
219
222
|
let view = null;
|
|
223
|
+
/** The document the shared press listener is on, while it is on one. */
|
|
224
|
+
let pressDocument = null;
|
|
220
225
|
let pointer = null;
|
|
221
226
|
let visibility = null;
|
|
222
227
|
let resize = null;
|
|
@@ -263,6 +268,74 @@ function plainRect(element) {
|
|
|
263
268
|
bottom
|
|
264
269
|
};
|
|
265
270
|
}
|
|
271
|
+
|
|
272
|
+
/** A box that the transforms around it leave at its layout size. */
|
|
273
|
+
const UNSCALED = {
|
|
274
|
+
x: 1,
|
|
275
|
+
y: 1
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/** One axis of a box's scale on screen: its client size over its layout size. */
|
|
279
|
+
function axisScale(onScreen, layout) {
|
|
280
|
+
if (!(layout > 0) || !(onScreen > 0)) {
|
|
281
|
+
return 1;
|
|
282
|
+
}
|
|
283
|
+
const scale = onScreen / layout;
|
|
284
|
+
// Within rounding of 1 the box is at its layout size: no change to the rects.
|
|
285
|
+
return Math.abs(scale - 1) < 1e-3 ? 1 : scale;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* How far the transforms around `element` scale its box on screen, per axis.
|
|
290
|
+
* A layer that opens from a smaller scale scales every rect inside it, while
|
|
291
|
+
* the layout box keeps the size the layer settles at. Only a scale is
|
|
292
|
+
* expected: a rotated or skewed box would read as a larger scale.
|
|
293
|
+
*/
|
|
294
|
+
function screenScale(element, onScreen) {
|
|
295
|
+
// The offset size is the layout size in whole pixels, unaffected by
|
|
296
|
+
// transforms, and costs no style resolution. A box with none, such as an SVG
|
|
297
|
+
// element or a jsdom box, reads as unscaled.
|
|
298
|
+
const box = element;
|
|
299
|
+
const offsetWidth = box.offsetWidth ?? 0;
|
|
300
|
+
const offsetHeight = box.offsetHeight ?? 0;
|
|
301
|
+
if (offsetWidth === 0 || offsetHeight === 0) {
|
|
302
|
+
return UNSCALED;
|
|
303
|
+
}
|
|
304
|
+
// Within a pixel of its layout size the box reads as unscaled, which bounds
|
|
305
|
+
// the inset error at about a pixel. Only a box that a transform shrinks or
|
|
306
|
+
// grows reads its exact size from the computed style.
|
|
307
|
+
if (Math.abs(onScreen.right - onScreen.left - offsetWidth) <= 1 && Math.abs(onScreen.bottom - onScreen.top - offsetHeight) <= 1) {
|
|
308
|
+
return UNSCALED;
|
|
309
|
+
}
|
|
310
|
+
const style = element.ownerDocument.defaultView?.getComputedStyle(element);
|
|
311
|
+
if (style == null || !style.width.endsWith('px')) {
|
|
312
|
+
return UNSCALED;
|
|
313
|
+
}
|
|
314
|
+
const px = value => Number.parseFloat(value) || 0;
|
|
315
|
+
const isContentBox = style.boxSizing !== 'border-box';
|
|
316
|
+
const width = px(style.width) + (isContentBox ? px(style.paddingLeft) + px(style.paddingRight) + px(style.borderLeftWidth) + px(style.borderRightWidth) : 0);
|
|
317
|
+
const height = px(style.height) + (isContentBox ? px(style.paddingTop) + px(style.paddingBottom) + px(style.borderTopWidth) + px(style.borderBottomWidth) : 0);
|
|
318
|
+
return {
|
|
319
|
+
x: axisScale(onScreen.right - onScreen.left, width),
|
|
320
|
+
y: axisScale(onScreen.bottom - onScreen.top, height)
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* `rect` in the layout px of the box at `origin`: its offset from `origin`,
|
|
326
|
+
* divided by that box's scale on screen.
|
|
327
|
+
*/
|
|
328
|
+
function inLayout(rect, origin, scale) {
|
|
329
|
+
if (scale.x === 1 && scale.y === 1) {
|
|
330
|
+
return rect;
|
|
331
|
+
}
|
|
332
|
+
return {
|
|
333
|
+
left: origin.left + (rect.left - origin.left) / scale.x,
|
|
334
|
+
top: origin.top + (rect.top - origin.top) / scale.y,
|
|
335
|
+
right: origin.left + (rect.right - origin.left) / scale.x,
|
|
336
|
+
bottom: origin.top + (rect.bottom - origin.top) / scale.y
|
|
337
|
+
};
|
|
338
|
+
}
|
|
266
339
|
/** The watched element `element` belongs to, if any (itself included). */
|
|
267
340
|
function watchedOwner(element) {
|
|
268
341
|
for (let node = element; node != null; node = node.parentElement) {
|
|
@@ -297,14 +370,15 @@ function readCandidates(doc) {
|
|
|
297
370
|
/** A control's rect and clamped insets, from candidates already read. */
|
|
298
371
|
function measureOne(watch, candidates) {
|
|
299
372
|
const target = plainRect(watch.element);
|
|
373
|
+
const scale = screenScale(watch.element, target);
|
|
300
374
|
// Two targets each growing up to half the minimum reach each other from a
|
|
301
375
|
// minimum apart.
|
|
302
376
|
const reach = Math.max(0, watch.minSize);
|
|
303
377
|
const band = grown(target, {
|
|
304
|
-
top: reach,
|
|
305
|
-
right: reach,
|
|
306
|
-
bottom: reach,
|
|
307
|
-
left: reach
|
|
378
|
+
top: reach * scale.y,
|
|
379
|
+
right: reach * scale.x,
|
|
380
|
+
bottom: reach * scale.y,
|
|
381
|
+
left: reach * scale.x
|
|
308
382
|
});
|
|
309
383
|
const neighbours = candidates.filter(({
|
|
310
384
|
element,
|
|
@@ -314,7 +388,12 @@ function measureOne(watch, candidates) {
|
|
|
314
388
|
}) => rect);
|
|
315
389
|
return {
|
|
316
390
|
target,
|
|
317
|
-
insets
|
|
391
|
+
// The insets are in the control's layout px. The returned rects stay in
|
|
392
|
+
// screen px for a touch's distance checks. A neighbour maps by the
|
|
393
|
+
// control's scale, as if it is in the same layer. A neighbour outside that
|
|
394
|
+
// layer then reads farther away. A touch compares screen distances, so it
|
|
395
|
+
// still counts that neighbour.
|
|
396
|
+
insets: clampedHitInsets(inLayout(target, target, scale), neighbours.map(rect => inLayout(rect, target, scale)), watch.minSize),
|
|
318
397
|
neighbours
|
|
319
398
|
};
|
|
320
399
|
}
|
|
@@ -419,7 +498,12 @@ function checkPress(element, event) {
|
|
|
419
498
|
const own = distanceTo(target, x, y);
|
|
420
499
|
isNearerNeighbour ||= neighbours.some(rect => distanceTo(rect, x, y) < own);
|
|
421
500
|
}
|
|
422
|
-
|
|
501
|
+
// A watch can own its descendants' touches. Then a press that the browser
|
|
502
|
+
// hit-tests onto a descendant lands on content the element paints, even
|
|
503
|
+
// past its own box. A swipe panel's entry beside a moved row is such
|
|
504
|
+
// content. That touch is the element's.
|
|
505
|
+
const isOnOwnContent = [...entry.watches].some(watch => watch.ownsDescendantTouches) && press.target instanceof Node && press.target !== element && element.contains(press.target);
|
|
506
|
+
if (isNearerNeighbour && !isOnOwnContent) {
|
|
423
507
|
const swallow = click => {
|
|
424
508
|
disarm();
|
|
425
509
|
// A keyboard or assistive-technology activation (detail 0) is never
|
|
@@ -500,7 +584,8 @@ function startObserving() {
|
|
|
500
584
|
return;
|
|
501
585
|
}
|
|
502
586
|
view.addEventListener('resize', scheduleAll);
|
|
503
|
-
view.document
|
|
587
|
+
pressDocument = view.document;
|
|
588
|
+
pressDocument.addEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
|
|
504
589
|
if (typeof IntersectionObserver === 'function') {
|
|
505
590
|
visibility = new IntersectionObserver(entries => {
|
|
506
591
|
for (const entry of entries) {
|
|
@@ -555,7 +640,10 @@ function stopObserving() {
|
|
|
555
640
|
entry.release = null;
|
|
556
641
|
}
|
|
557
642
|
view?.removeEventListener('resize', scheduleAll);
|
|
558
|
-
|
|
643
|
+
// The listener leaves the document it went on. A window can close first, as
|
|
644
|
+
// a removed iframe's, and then it has no document to read.
|
|
645
|
+
pressDocument?.removeEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
|
|
646
|
+
pressDocument = null;
|
|
559
647
|
visibility?.disconnect();
|
|
560
648
|
resize?.disconnect();
|
|
561
649
|
visibility = null;
|
|
@@ -613,7 +701,8 @@ export function resetHitAreaForTests() {
|
|
|
613
701
|
* per-frame pass, and re-measured at once when a touch starts on it.
|
|
614
702
|
*/
|
|
615
703
|
export function watchHitArea(element, onInsets, {
|
|
616
|
-
minSize = MIN_TOUCH_TARGET
|
|
704
|
+
minSize = MIN_TOUCH_TARGET,
|
|
705
|
+
ownsDescendantTouches = false
|
|
617
706
|
} = {}) {
|
|
618
707
|
const owner = element.ownerDocument.defaultView;
|
|
619
708
|
if (owner == null) {
|
|
@@ -633,6 +722,7 @@ export function watchHitArea(element, onInsets, {
|
|
|
633
722
|
const watch = {
|
|
634
723
|
element,
|
|
635
724
|
minSize,
|
|
725
|
+
ownsDescendantTouches,
|
|
636
726
|
onInsets,
|
|
637
727
|
isVisible: isCoarse && visibility == null,
|
|
638
728
|
last: NO_HIT_INSETS
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file inputPresentation.ts
|
|
3
|
-
* @input A presentation policy, the deprecated nativePicker value,
|
|
3
|
+
* @input A presentation policy, the deprecated nativePicker value, whether the
|
|
4
|
+
* native date control can show the calendar, and pointer type
|
|
4
5
|
* @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
|
|
5
6
|
* @position Shared presentation vocabulary (AST-043)
|
|
6
7
|
*
|
|
@@ -48,6 +49,13 @@ export declare function presentationFromNativePicker(nativePicker: LegacyNativeP
|
|
|
48
49
|
export declare function effectivePickerPresentation(presentation: PickerPresentation | undefined, nativePicker: LegacyNativePicker | undefined): PickerPresentation;
|
|
49
50
|
/** The effective policy: explicit `presentation` wins over the deprecated prop. */
|
|
50
51
|
export declare function effectiveInputPresentation(presentation: InputPresentation | undefined, nativePicker: LegacyNativePicker | undefined, component: 'date' | 'time'): InputPresentation;
|
|
52
|
+
/**
|
|
53
|
+
* The policy a date picker follows in its calendar. `<input type="date">` is
|
|
54
|
+
* Gregorian, so in a calendar it cannot show, the policies that use it
|
|
55
|
+
* (`native` and `adaptive-native`) use the Astryx popover on a fine pointer and
|
|
56
|
+
* the bottom sheet on a coarse one instead.
|
|
57
|
+
*/
|
|
58
|
+
export declare function calendarPickerPresentation(presentation: PickerPresentation, isNativeCalendar: boolean): PickerPresentation;
|
|
51
59
|
/** Resolve a picker-only policy to the surface rendered for the current pointer. */
|
|
52
60
|
export declare function resolvePickerPresentation(presentation: PickerPresentation, isCoarsePointer: boolean): PickerPresentationSurface;
|
|
53
61
|
/** Resolve a policy to the surface rendered for the current pointer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputPresentation.d.ts","sourceRoot":"","sources":["../../src/utils/inputPresentation.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"inputPresentation.d.ts","sourceRoot":"","sources":["../../src/utils/inputPresentation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,SAAS,GACT,cAAc,GACd,QAAQ,GACR,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,8GAA8G;AAC9G,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE1E,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAClC,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,wBAAwB,EACxB,YAAY,CACb,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,kBAAsC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,kBAAkB,GAC/B,kBAAkB,CASpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAKnB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,YAAY,EAAE,kBAAkB,GAAG,SAAS,GAC3C,kBAAkB,CAQpB;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,iBAAiB,GAAG,SAAS,EAC3C,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAQnB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,kBAAkB,EAChC,gBAAgB,EAAE,OAAO,GACxB,kBAAkB,CAQpB;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,OAAO,GACvB,yBAAyB,CAa3B;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,iBAAiB,EAC/B,eAAe,EAAE,OAAO,GACvB,wBAAwB,CAI1B"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file inputPresentation.ts
|
|
5
|
-
* @input A presentation policy, the deprecated nativePicker value,
|
|
5
|
+
* @input A presentation policy, the deprecated nativePicker value, whether the
|
|
6
|
+
* native date control can show the calendar, and pointer type
|
|
6
7
|
* @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
|
|
7
8
|
* @position Shared presentation vocabulary (AST-043)
|
|
8
9
|
*
|
|
@@ -86,6 +87,19 @@ export function effectiveInputPresentation(presentation, nativePicker, component
|
|
|
86
87
|
return DEFAULT_INPUT_PRESENTATION;
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
/**
|
|
91
|
+
* The policy a date picker follows in its calendar. `<input type="date">` is
|
|
92
|
+
* Gregorian, so in a calendar it cannot show, the policies that use it
|
|
93
|
+
* (`native` and `adaptive-native`) use the Astryx popover on a fine pointer and
|
|
94
|
+
* the bottom sheet on a coarse one instead.
|
|
95
|
+
*/
|
|
96
|
+
export function calendarPickerPresentation(presentation, isNativeCalendar) {
|
|
97
|
+
if (!isNativeCalendar && (presentation === 'native' || presentation === 'adaptive-native')) {
|
|
98
|
+
return 'adaptive-bottom-sheet';
|
|
99
|
+
}
|
|
100
|
+
return presentation;
|
|
101
|
+
}
|
|
102
|
+
|
|
89
103
|
/** Resolve a picker-only policy to the surface rendered for the current pointer. */
|
|
90
104
|
export function resolvePickerPresentation(presentation, isCoarsePointer) {
|
|
91
105
|
switch (presentation) {
|
|
@@ -6,12 +6,25 @@ export interface InputSubscriptionOptions {
|
|
|
6
6
|
* @default false
|
|
7
7
|
*/
|
|
8
8
|
readonly cancels?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The subscriber runs before every subscriber that is not first. When it
|
|
11
|
+
* returns `true`, no later subscriber hears the event.
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
readonly first?: boolean;
|
|
9
15
|
}
|
|
10
16
|
/** The events a window's capture phase sees: its own, and the document's. */
|
|
11
17
|
export type InputEventMap = WindowEventMap & DocumentEventMap;
|
|
18
|
+
/**
|
|
19
|
+
* The type of the latest pointer event `view`'s stream delivered: `mouse`,
|
|
20
|
+
* `pen` or `touch`, or `null` before any. The stream hears a pointer event
|
|
21
|
+
* type only while a subscriber listens to it, as press feedback does on any
|
|
22
|
+
* page with a pressable. Reading it adds no listener.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLastPointerType(view: Window): string | null;
|
|
12
25
|
/**
|
|
13
26
|
* Listen to `type` on `view`'s capture phase through its shared native
|
|
14
27
|
* listener. Returns the unsubscribe; calling it again does nothing.
|
|
15
28
|
*/
|
|
16
|
-
export declare function subscribeInput<K extends keyof InputEventMap>(view: Window, type: K, listener: (event: InputEventMap[K]) =>
|
|
29
|
+
export declare function subscribeInput<K extends keyof InputEventMap>(view: Window, type: K, listener: (event: InputEventMap[K]) => unknown, { cancels, first }?: InputSubscriptionOptions): () => void;
|
|
17
30
|
//# sourceMappingURL=inputStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputStream.d.ts","sourceRoot":"","sources":["../../src/utils/inputStream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inputStream.d.ts","sourceRoot":"","sources":["../../src/utils/inputStream.ts"],"names":[],"mappings":"AAgDA,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAM9D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAC9C,EAAC,OAAe,EAAE,KAAa,EAAC,GAAE,wBAA6B,GAC9D,MAAM,IAAI,CA4CZ"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* @file inputStream.ts
|
|
5
5
|
* @input A window, and subscribers to its input events (the press feedback
|
|
6
6
|
* controller, the gesture host)
|
|
7
|
-
* @output subscribeInput
|
|
7
|
+
* @output subscribeInput, and getLastPointerType: the type of the latest
|
|
8
|
+
* pointer event the stream delivered
|
|
8
9
|
* @position The one entry for document-wide input listeners in core: one
|
|
9
10
|
* native listener per event type on the window's capture phase, shared by
|
|
10
11
|
* every subscriber
|
|
@@ -22,8 +23,10 @@
|
|
|
22
23
|
// `blur` or `focus`. A subscriber for the window's own event checks
|
|
23
24
|
// `event.target`.
|
|
24
25
|
//
|
|
25
|
-
// Subscribers run in subscription order
|
|
26
|
-
// the
|
|
26
|
+
// Subscribers run in subscription order, after the ones subscribed `first`.
|
|
27
|
+
// A first subscriber that returns `true` ends the dispatch: no later
|
|
28
|
+
// subscriber hears the event. One that throws is reported, and the rest still
|
|
29
|
+
// run.
|
|
27
30
|
//
|
|
28
31
|
// A type's native listener is passive, so it blocks no scroll. It is
|
|
29
32
|
// non-passive only while a subscriber that cancels the event
|
|
@@ -34,13 +37,26 @@
|
|
|
34
37
|
/** The events a window's capture phase sees: its own, and the document's. */
|
|
35
38
|
|
|
36
39
|
const streams = new WeakMap();
|
|
40
|
+
/** The type of the latest pointer event each window's stream delivered. */
|
|
41
|
+
const lastPointerTypes = new WeakMap();
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The type of the latest pointer event `view`'s stream delivered: `mouse`,
|
|
45
|
+
* `pen` or `touch`, or `null` before any. The stream hears a pointer event
|
|
46
|
+
* type only while a subscriber listens to it, as press feedback does on any
|
|
47
|
+
* page with a pressable. Reading it adds no listener.
|
|
48
|
+
*/
|
|
49
|
+
export function getLastPointerType(view) {
|
|
50
|
+
return lastPointerTypes.get(view) ?? null;
|
|
51
|
+
}
|
|
37
52
|
|
|
38
53
|
/**
|
|
39
54
|
* Listen to `type` on `view`'s capture phase through its shared native
|
|
40
55
|
* listener. Returns the unsubscribe; calling it again does nothing.
|
|
41
56
|
*/
|
|
42
57
|
export function subscribeInput(view, type, listener, {
|
|
43
|
-
cancels = false
|
|
58
|
+
cancels = false,
|
|
59
|
+
first = false
|
|
44
60
|
} = {}) {
|
|
45
61
|
let channels = streams.get(view);
|
|
46
62
|
if (channels == null) {
|
|
@@ -57,9 +73,15 @@ export function subscribeInput(view, type, listener, {
|
|
|
57
73
|
}
|
|
58
74
|
const subscriber = {
|
|
59
75
|
listener: listener,
|
|
60
|
-
cancels
|
|
76
|
+
cancels,
|
|
77
|
+
isFirst: first
|
|
61
78
|
};
|
|
62
|
-
channel.subscribers.
|
|
79
|
+
const firstLater = first ? channel.subscribers.findIndex(other => !other.isFirst) : -1;
|
|
80
|
+
if (firstLater === -1) {
|
|
81
|
+
channel.subscribers.push(subscriber);
|
|
82
|
+
} else {
|
|
83
|
+
channel.subscribers.splice(firstLater, 0, subscriber);
|
|
84
|
+
}
|
|
63
85
|
register(view, type, channel);
|
|
64
86
|
let isSubscribed = true;
|
|
65
87
|
return () => {
|
|
@@ -101,7 +123,7 @@ function register(view, type, channel) {
|
|
|
101
123
|
if (wanted == null) {
|
|
102
124
|
return;
|
|
103
125
|
}
|
|
104
|
-
const listener = event => dispatch(channel, event);
|
|
126
|
+
const listener = event => dispatch(view, channel, event);
|
|
105
127
|
view.addEventListener(type, listener, {
|
|
106
128
|
capture: true,
|
|
107
129
|
passive: !wanted
|
|
@@ -111,7 +133,14 @@ function register(view, type, channel) {
|
|
|
111
133
|
cancels: wanted
|
|
112
134
|
};
|
|
113
135
|
}
|
|
114
|
-
function dispatch(channel, event) {
|
|
136
|
+
function dispatch(view, channel, event) {
|
|
137
|
+
// Recorded before any subscriber runs, so each reads the pointer at hand.
|
|
138
|
+
const {
|
|
139
|
+
pointerType
|
|
140
|
+
} = event;
|
|
141
|
+
if (typeof pointerType === 'string' && pointerType !== '') {
|
|
142
|
+
lastPointerTypes.set(view, pointerType);
|
|
143
|
+
}
|
|
115
144
|
// A subscriber may subscribe or unsubscribe while the event runs; the
|
|
116
145
|
// event goes to those subscribed when it arrived.
|
|
117
146
|
for (const subscriber of [...channel.subscribers]) {
|
|
@@ -119,7 +148,9 @@ function dispatch(channel, event) {
|
|
|
119
148
|
continue;
|
|
120
149
|
}
|
|
121
150
|
try {
|
|
122
|
-
subscriber.listener(event)
|
|
151
|
+
if (subscriber.listener(event) === true && subscriber.isFirst) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
123
154
|
} catch (error) {
|
|
124
155
|
report(error);
|
|
125
156
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* @input StyleX and the semantic interaction-overlay color tokens
|
|
4
4
|
* @output Reusable background-color and background-image state styles, the
|
|
5
5
|
* touch press's registered strength variable (`pressVars`) and its clocks
|
|
6
|
-
* (`pressConsts`)
|
|
6
|
+
* (`pressConsts`). The list row's compositor press layer and its clocks
|
|
7
|
+
* are internal (privateAttributes/press.stylex.ts, utils/rowPressLayer.stylex.ts)
|
|
7
8
|
* @position Internal styling utility for interactive core surfaces
|
|
8
9
|
*
|
|
9
10
|
* SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
|
|
@@ -29,16 +30,11 @@ export declare const pressVars: stylex.VarGroup<Readonly<{
|
|
|
29
30
|
'--astryx-press-alpha': stylex.Types.Num<0>;
|
|
30
31
|
}>, symbol>;
|
|
31
32
|
/**
|
|
32
|
-
* The touch press's
|
|
33
|
-
*
|
|
34
|
-
* `defineConsts`, so the one number is inlined here at build time and is the
|
|
35
|
-
* controller's constant at run time (`PRESS_FADE_MS` in pressGesture.ts):
|
|
36
|
-
* the release animation and the controller's clock cannot drift apart. When
|
|
37
|
-
* that clock runs out, the controller waits for a release animation that a
|
|
38
|
-
* busy main thread started late, then removes the attribute.
|
|
33
|
+
* The touch press's measured release clock, kept as a reference value. Press
|
|
34
|
+
* releases now play the theme's `--duration-exit`.
|
|
39
35
|
*/
|
|
40
36
|
export declare const pressConsts: {
|
|
41
|
-
/**
|
|
37
|
+
/** UIKit's deselect clock, in ms: the measured reference value. */
|
|
42
38
|
releaseMs: number;
|
|
43
39
|
};
|
|
44
40
|
export declare const interactionOverlayStyles: Readonly<{
|