@astryxdesign/core 0.7.8 → 0.7.9-canary.07992bb
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 +5 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +40 -8
- 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.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +54 -11
- 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/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +4 -1
- package/dist/DateInput/PickerWheel.d.ts.map +1 -1
- package/dist/DateInput/PickerWheel.js +7 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +4 -1
- package/dist/Dialog/Dialog.d.ts +2 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -1
- 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 +9 -4
- 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 +1 -0
- 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/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 +2 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +29 -6
- 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/preserveAnimations.d.ts +1 -5
- package/dist/Layer/preserveAnimations.d.ts.map +1 -1
- package/dist/Layer/preserveAnimations.js +12 -214
- 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/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 +4 -1
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.js +13 -4
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -0
- 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/NumberInput/NumberInput.d.ts +4 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +244 -11
- 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 +22 -4
- 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/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/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 +162 -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/astryx.css +45 -18
- 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/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 +27 -5
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +41 -5
- 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/useMenuPress.d.ts +34 -1
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +93 -5
- 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 +21 -3
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +8 -3
- 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 +1 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +1 -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/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 +14 -1
- package/dist/internal/touch.d.ts.map +1 -1
- package/dist/internal/touch.js +20 -2
- 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 +139 -0
- package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/press.stylex.js +97 -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/calendarSystem.d.ts +114 -0
- package/dist/utils/calendarSystem.d.ts.map +1 -0
- package/dist/utils/calendarSystem.js +386 -0
- 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/hitArea.d.ts.map +1 -1
- package/dist/utils/hitArea.js +82 -5
- 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 +23 -7
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +57 -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.stylex.d.ts +35 -0
- package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
- package/dist/utils/touchHitArea.stylex.js +32 -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 +4 -0
- package/locales/pseudo.json +3 -0
- package/package.json +10 -4
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/BottomSheet/BottomSheet.tsx +5 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
- 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 +3 -2
- package/src/CheckboxInput/CheckboxInput.tsx +71 -9
- package/src/ClickableCard/ClickableCard.tsx +8 -1
- package/src/DateInput/DateInput.tsx +2 -0
- package/src/DateInput/PickerWheel.tsx +7 -2
- package/src/DateRangeInput/DateRangeInput.tsx +3 -1
- package/src/DateTimeInput/DateTimeInput.tsx +2 -0
- package/src/Dialog/Dialog.doc.mjs +1 -1
- package/src/Dialog/Dialog.tsx +12 -1
- 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 +29 -5
- 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/InfoTip/InfoTip.doc.mjs +26 -2
- package/src/InfoTip/InfoTip.tsx +1 -0
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Item/Item.tsx +51 -9
- package/src/Layer/holdEntranceInput.ts +84 -0
- package/src/Layer/inputHold.ts +734 -0
- package/src/Layer/preserveAnimations.ts +12 -275
- package/src/Layer/useLayer.tsx +77 -4
- package/src/Layout/LayoutContent.doc.mjs +6 -3
- package/src/Layout/LayoutContent.tsx +10 -4
- package/src/Layout/LayoutPanel.doc.mjs +6 -3
- package/src/Layout/LayoutPanel.tsx +11 -4
- package/src/Lightbox/Lightbox.tsx +4 -0
- 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/NumberInput/NumberInput.doc.mjs +1 -1
- package/src/NumberInput/NumberInput.tsx +259 -11
- 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 +25 -7
- package/src/SelectableCard/SelectableCard.tsx +8 -1
- 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/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 +178 -80
- package/src/TreeList/TreeListItem.tsx +36 -2
- 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/menuPressGesture.ts +244 -38
- package/src/hooks/menuPressValues.ts +18 -0
- package/src/hooks/useClickableContainer.doc.mjs +8 -2
- package/src/hooks/useClickableContainer.ts +72 -6
- package/src/hooks/useFocusTrap.ts +268 -151
- package/src/hooks/useMenuPress.ts +118 -11
- 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 +33 -3
- package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
- package/src/i18n/generated-locales/en.generated.ts +1 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
- package/src/i18n/index.ts +2 -0
- package/src/i18n/useCalendarSystem.ts +95 -0
- package/src/internal/spinner-rotor.ts +20 -0
- package/src/internal/touch.ts +34 -1
- package/src/motion/MEASUREMENTS.md +11 -0
- 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 +243 -0
- package/src/theme/themeMotion.ts +3 -2
- package/src/theme/tokens.stylex.ts +1 -1
- package/src/utils/calendarSystem.ts +548 -0
- package/src/utils/flatTree.ts +15 -3
- package/src/utils/hitArea.ts +107 -5
- package/src/utils/inputStream.ts +47 -10
- package/src/utils/interactionOverlay.stylex.ts +19 -22
- package/src/utils/plainDate.ts +84 -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 +41 -0
- package/src/utils/triggerFocus.ts +17 -4
package/dist/utils/plainDate.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @position Shared utility; replaces scattered Date usage across Calendar hooks
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { formatCalendarDate, isCalendarSystem } from "./calendarSystem.js";
|
|
10
11
|
import { firstCharacter } from "./characters.js";
|
|
11
12
|
import { standaloneMonthCapitalLanguages } from "./standaloneMonthCapitals.generated.js";
|
|
12
13
|
export function plainDateCreate(year, month, day) {
|
|
@@ -278,8 +279,11 @@ export const DATE_FORMAT_MONTH_YEAR = {
|
|
|
278
279
|
* stand-alone forms (`component:Calendar` FR1). Internal: not re-exported from
|
|
279
280
|
* `utils/index.ts`.
|
|
280
281
|
*/
|
|
281
|
-
export function plainDateFormatStandaloneMonthYear(pd, locale) {
|
|
282
|
-
const label = plainDateFormat(pd,
|
|
282
|
+
export function plainDateFormatStandaloneMonthYear(pd, locale, calendar = 'gregory') {
|
|
283
|
+
const label = plainDateFormat(pd, {
|
|
284
|
+
...DATE_FORMAT_MONTH_YEAR,
|
|
285
|
+
calendar
|
|
286
|
+
}, locale);
|
|
283
287
|
let language;
|
|
284
288
|
try {
|
|
285
289
|
language = new Intl.Locale(locale).language;
|
|
@@ -357,33 +361,51 @@ export const DATE_FORMAT_SHORT_WITH_YEAR = {
|
|
|
357
361
|
* when `options.calendar` is omitted. The explicit option remains supported for
|
|
358
362
|
* compatibility with the public `Intl.DateTimeFormatOptions` signature; it is a
|
|
359
363
|
* display-only escape hatch and does not change PlainDate arithmetic, parsing,
|
|
360
|
-
* serialization, or any Astryx component's calendar semantics.
|
|
364
|
+
* serialization, or any Astryx component's calendar semantics. Another
|
|
365
|
+
* calendar names the month and day that Calendar shows in it.
|
|
361
366
|
*/
|
|
362
367
|
export function plainDateFormat(pd, options, locale = 'en') {
|
|
368
|
+
const calendar = options.calendar ?? 'gregory';
|
|
369
|
+
if (calendar !== 'gregory' && isCalendarSystem(calendar)) {
|
|
370
|
+
return formatCalendarDate(calendar, pd, options, locale);
|
|
371
|
+
}
|
|
372
|
+
const [format, date] = plainDateFormatInput(pd, options, locale);
|
|
373
|
+
return format.format(date);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* The parts of `plainDateFormat`'s output, from the same formatter and date.
|
|
378
|
+
* Internal: not re-exported from `utils/index.ts`.
|
|
379
|
+
*/
|
|
380
|
+
export function plainDateFormatToParts(pd, options, locale) {
|
|
381
|
+
const [format, date] = plainDateFormatInput(pd, options, locale);
|
|
382
|
+
return format.formatToParts(date);
|
|
383
|
+
}
|
|
384
|
+
function plainDateFormatInput(pd, options, locale) {
|
|
363
385
|
const calendar = options.calendar ?? 'gregory';
|
|
364
386
|
if (options.timeZone != null) {
|
|
365
|
-
return dateTimeFormatFor(locale, {
|
|
387
|
+
return [dateTimeFormatFor(locale, {
|
|
366
388
|
...options,
|
|
367
389
|
calendar
|
|
368
|
-
})
|
|
390
|
+
}), plainDateToDate(pd)];
|
|
369
391
|
}
|
|
370
392
|
if (TIME_OF_DAY_FIELDS.some(field => options[field] != null)) {
|
|
371
393
|
// A zone name or a time of day reads local midnight in the zone current
|
|
372
394
|
// at the call. A cached formatter would keep the zone it was built in,
|
|
373
395
|
// so this one is built for the call.
|
|
374
|
-
return new Intl.DateTimeFormat(locale, {
|
|
396
|
+
return [new Intl.DateTimeFormat(locale, {
|
|
375
397
|
...options,
|
|
376
398
|
calendar
|
|
377
|
-
})
|
|
399
|
+
}), plainDateToDate(pd)];
|
|
378
400
|
}
|
|
379
401
|
// Date fields alone: UTC midnight formatted in UTC, so neither the cached
|
|
380
402
|
// formatter nor the date depends on the host's zone, which can change while
|
|
381
403
|
// a page is open.
|
|
382
|
-
return dateTimeFormatFor(locale, {
|
|
404
|
+
return [dateTimeFormatFor(locale, {
|
|
383
405
|
...options,
|
|
384
406
|
calendar,
|
|
385
407
|
timeZone: 'UTC'
|
|
386
|
-
})
|
|
408
|
+
}), utcTime(pd.year, pd.month - 1, pd.day)];
|
|
387
409
|
}
|
|
388
410
|
|
|
389
411
|
/** Options that print a time of day or a zone, which a PlainDate lacks. */
|
|
@@ -409,6 +431,15 @@ export function dateTimeFormatFor(locale, options) {
|
|
|
409
431
|
return format;
|
|
410
432
|
}
|
|
411
433
|
|
|
434
|
+
/**
|
|
435
|
+
* @internal `dateTimeFormatFor`, except that without `options.timeZone` it
|
|
436
|
+
* builds a formatter for the call. A cached formatter keeps the host zone it
|
|
437
|
+
* was built in.
|
|
438
|
+
*/
|
|
439
|
+
export function dateTimeFormatAtCall(locale, options) {
|
|
440
|
+
return options.timeZone === undefined ? new Intl.DateTimeFormat(locale, options) : dateTimeFormatFor(locale, options);
|
|
441
|
+
}
|
|
442
|
+
|
|
412
443
|
/**
|
|
413
444
|
* The locale's name for the "week of year" date field ("week", "Woche", "週"),
|
|
414
445
|
* from CLDR through `Intl.DisplayNames`. Calendar names its week-number
|
|
@@ -437,18 +468,21 @@ const dayNumberFormats = new Map();
|
|
|
437
468
|
|
|
438
469
|
/**
|
|
439
470
|
* A day of the month or a week number in the locale's own digits: `15` in
|
|
440
|
-
* English, `۱۵` in Persian, `١٥` in Egyptian Arabic.
|
|
441
|
-
*
|
|
442
|
-
*
|
|
471
|
+
* English, `۱۵` in Persian, `١٥` in Egyptian Arabic. A `numberingSystem`
|
|
472
|
+
* replaces the locale's digits. Only the digits change. The number stays the
|
|
473
|
+
* value that it is given, so no calendar applies, and no grouping separator or
|
|
474
|
+
* unit word is added.
|
|
443
475
|
* Internal: not re-exported from `utils/index.ts`.
|
|
444
476
|
*/
|
|
445
|
-
export function plainDateFormatDayNumber(value, locale) {
|
|
446
|
-
|
|
477
|
+
export function plainDateFormatDayNumber(value, locale, numberingSystem) {
|
|
478
|
+
const key = `${locale}|${numberingSystem ?? ''}`;
|
|
479
|
+
let format = dayNumberFormats.get(key);
|
|
447
480
|
if (format == null) {
|
|
448
481
|
format = new Intl.NumberFormat(locale, {
|
|
449
|
-
useGrouping: false
|
|
482
|
+
useGrouping: false,
|
|
483
|
+
numberingSystem
|
|
450
484
|
});
|
|
451
|
-
dayNumberFormats.set(
|
|
485
|
+
dayNumberFormats.set(key, format);
|
|
452
486
|
}
|
|
453
487
|
return format.format(value);
|
|
454
488
|
}
|
|
@@ -489,10 +523,15 @@ export const SHARED_DATE_FORMAT_OPTIONS = {
|
|
|
489
523
|
* members. The shared entry point DateInput uses for the named-format path;
|
|
490
524
|
* Timestamp maps the same members onto {@link SHARED_DATE_FORMAT_OPTIONS} in
|
|
491
525
|
* its own `formatTimestamp` switch (its input is a `Date`, not a `PlainDate`).
|
|
526
|
+
* The locale-aware members write the date in `calendar`, which defaults to
|
|
527
|
+
* Gregorian. `system_date` stays the Gregorian ISO date in every calendar.
|
|
492
528
|
*/
|
|
493
|
-
export function formatSharedDate(pd, format, locale = 'en') {
|
|
529
|
+
export function formatSharedDate(pd, format, locale = 'en', calendar = 'gregory') {
|
|
494
530
|
if (format === 'system_date') {
|
|
495
531
|
return plainDateToISO(pd);
|
|
496
532
|
}
|
|
497
|
-
return plainDateFormat(pd,
|
|
533
|
+
return plainDateFormat(pd, {
|
|
534
|
+
...SHARED_DATE_FORMAT_OPTIONS[format],
|
|
535
|
+
calendar
|
|
536
|
+
}, locale);
|
|
498
537
|
}
|
|
@@ -25,10 +25,18 @@ export declare const pressableProps: {
|
|
|
25
25
|
export declare const PRESS_GESTURE_MEMORY_MS = 3000;
|
|
26
26
|
/**
|
|
27
27
|
* The release fade's clock on `element`, read once, at the release, from the
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* token its stylesheet reads: the theme's `--duration-exit`. Without a
|
|
29
|
+
* readable value it is the token's default. Under Reduce Motion it is no
|
|
30
|
+
* longer than the Reduce Motion fade, as in the stylesheet.
|
|
30
31
|
*/
|
|
31
32
|
export declare function pressFadeMs(element: Element): number;
|
|
33
|
+
/**
|
|
34
|
+
* Ends the press the controller follows on `element`, and its paint, at once.
|
|
35
|
+
* A clickable container calls it when a press starts on an interactive
|
|
36
|
+
* element inside it: that press does not activate the container, so the
|
|
37
|
+
* container shows no press.
|
|
38
|
+
*/
|
|
39
|
+
export declare function cancelPress(element: Element): void;
|
|
32
40
|
/**
|
|
33
41
|
* Install the touch press controller on this document, once, however many
|
|
34
42
|
* times it is called: the listeners exist while at least one caller holds it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pressFeedback.d.ts","sourceRoot":"","sources":["../../src/utils/pressFeedback.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pressFeedback.d.ts","sourceRoot":"","sources":["../../src/utils/pressFeedback.ts"],"names":[],"mappings":"AAyDA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE;IAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAA;CAE/D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AA0E5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAcpD;AA6ND;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAOlD;AA4aD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CA0BjD"}
|
|
@@ -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
|
|
@@ -35,7 +39,10 @@
|
|
|
35
39
|
import { MENU_PRESS_MARKER } from "../hooks/menuPressMarker.js";
|
|
36
40
|
import { idlePressGesture, PRESS_FADE_MS, PRESS_FLASH_MS, PRESS_ONSET_MS, PRESS_SCROLL_BRAKE_MS, pressGestureStep } from "./pressGesture.js";
|
|
37
41
|
import { isCoarsePointer, watchCoarsePointer } from "./coarsePointer.js";
|
|
42
|
+
import { reducedMotionFadeConsts } from "../motion/reducedMotion.stylex.js";
|
|
43
|
+
import { parseMotionRoleValue } from "../motion/roles.js";
|
|
38
44
|
import { subscribeInput } from "./inputStream.js";
|
|
45
|
+
import { isInsideScrollView } from "./scrollView.js";
|
|
39
46
|
import { TOUCH_QUERY } from "./touchPresentation.js";
|
|
40
47
|
import { holdsPressThroughDrag } from "../privateAttributes/pressHoldsDrag.stylex.js";
|
|
41
48
|
import { isTrackedByGroup } from "../privateAttributes/pressGroupItem.stylex.js";
|
|
@@ -126,17 +133,15 @@ const TIMER_MS = {
|
|
|
126
133
|
|
|
127
134
|
/**
|
|
128
135
|
* The release fade's clock on `element`, read once, at the release, from the
|
|
129
|
-
*
|
|
130
|
-
*
|
|
136
|
+
* token its stylesheet reads: the theme's `--duration-exit`. Without a
|
|
137
|
+
* readable value it is the token's default. Under Reduce Motion it is no
|
|
138
|
+
* longer than the Reduce Motion fade, as in the stylesheet.
|
|
131
139
|
*/
|
|
132
140
|
export function pressFadeMs(element) {
|
|
133
|
-
const
|
|
134
|
-
const value = style.getPropertyValue('--_astryx-motion-tempo').trim();
|
|
135
|
-
const read = value === '' ? Number.NaN : Number(value);
|
|
136
|
-
const tempo = Number.isFinite(read) && read > 0 ? read : 1;
|
|
137
|
-
const scaled = PRESS_FADE_MS * tempo;
|
|
141
|
+
const exit = parseMotionRoleValue('duration', getComputedStyle(element).getPropertyValue('--duration-exit')) ?? PRESS_FADE_MS;
|
|
138
142
|
const reduced = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
139
|
-
|
|
143
|
+
const bound = parseMotionRoleValue('duration', reducedMotionFadeConsts.duration);
|
|
144
|
+
return reduced && bound != null ? Math.min(exit, bound) : exit;
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
/**
|
|
@@ -208,7 +213,11 @@ function paintElement(element, paint) {
|
|
|
208
213
|
element.removeAttribute(PRESSED_ATTRIBUTE);
|
|
209
214
|
return;
|
|
210
215
|
}
|
|
211
|
-
|
|
216
|
+
// A step that keeps the paint writes nothing, so the element sees one
|
|
217
|
+
// change per paint.
|
|
218
|
+
if (element.getAttribute(PRESSED_ATTRIBUTE) !== paint) {
|
|
219
|
+
element.setAttribute(PRESSED_ATTRIBUTE, paint);
|
|
220
|
+
}
|
|
212
221
|
}
|
|
213
222
|
function clearTimer(slot) {
|
|
214
223
|
if (slot.live?.timer != null) {
|
|
@@ -334,6 +343,21 @@ function finish(slot) {
|
|
|
334
343
|
}
|
|
335
344
|
}
|
|
336
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Ends the press the controller follows on `element`, and its paint, at once.
|
|
348
|
+
* A clickable container calls it when a press starts on an interactive
|
|
349
|
+
* element inside it: that press does not activate the container, so the
|
|
350
|
+
* container shows no press.
|
|
351
|
+
*/
|
|
352
|
+
export function cancelPress(element) {
|
|
353
|
+
if (finger.live?.element === element) {
|
|
354
|
+
finish(finger);
|
|
355
|
+
}
|
|
356
|
+
if (button.live?.element === element) {
|
|
357
|
+
finish(button);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
337
361
|
/** A new press on an element owns its paint: the other slot's gesture there ends. */
|
|
338
362
|
function takeOver(other, element) {
|
|
339
363
|
if (other.live?.element === element) {
|
|
@@ -466,7 +490,8 @@ function onPointerDown(event) {
|
|
|
466
490
|
apply(finger, pressGestureStep(finger.live.gesture, {
|
|
467
491
|
kind: 'down',
|
|
468
492
|
x: event.clientX,
|
|
469
|
-
y: event.clientY
|
|
493
|
+
y: event.clientY,
|
|
494
|
+
delayed: isInsideScrollView(element)
|
|
470
495
|
}));
|
|
471
496
|
}
|
|
472
497
|
function onPointerMove(event) {
|
|
@@ -28,12 +28,12 @@ export declare const PRESS_SLOP_PX = 10;
|
|
|
28
28
|
*/
|
|
29
29
|
export declare const PRESS_FLASH_MS = 100;
|
|
30
30
|
/**
|
|
31
|
-
* How long the paint takes to leave after a release
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* runs out, the controller waits for a release
|
|
36
|
-
* then removes the attribute.
|
|
31
|
+
* How long the paint takes to leave after a release when no theme sets
|
|
32
|
+
* `--duration-exit`: that token's default. The release plays the theme's
|
|
33
|
+
* exit motion tokens, so the controller reads the token on
|
|
34
|
+
* the pressed element (`pressFadeMs` in pressFeedback.ts) and falls back to
|
|
35
|
+
* this. When the clock runs out, the controller waits for a release
|
|
36
|
+
* animation that still runs, then removes the attribute.
|
|
37
37
|
*/
|
|
38
38
|
export declare const PRESS_FADE_MS: number;
|
|
39
39
|
/**
|
|
@@ -71,6 +71,12 @@ export type PressEvent = {
|
|
|
71
71
|
kind: 'down';
|
|
72
72
|
x: number;
|
|
73
73
|
y: number;
|
|
74
|
+
/**
|
|
75
|
+
* Whether this touch waits {@link PRESS_ONSET_MS} before it paints:
|
|
76
|
+
* a surface inside a scroller. Defaults to
|
|
77
|
+
* `true`.
|
|
78
|
+
*/
|
|
79
|
+
delayed?: boolean;
|
|
74
80
|
}
|
|
75
81
|
/**
|
|
76
82
|
* A mouse button or the Space key went down on the surface. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pressGesture.d.ts","sourceRoot":"","sources":["../../src/utils/pressGesture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pressGesture.d.ts","sourceRoot":"","sources":["../../src/utils/pressGesture.ts"],"names":[],"mappings":"AAiCA;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,MAE3B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,GACpB,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACH;;;;GAIG;GACD;IAAC,IAAI,EAAE,YAAY,CAAA;CAAC;AACtB,0EAA0E;GACxE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,GACpC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC;AACd,4FAA4F;GAC1F;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC;AAClB,iEAAiE;GAC/D;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC;AACjB,yDAAyD;GACvD;IAAC,IAAI,EAAE,UAAU,CAAA;CAAC;AACpB,wFAAwF;GACtF;IAAC,IAAI,EAAE,SAAS,CAAA;CAAC,CAAC;AAEtB,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;CACnD;AAkBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,UAAU,GAChB,SAAS,CAsHX;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAE/C"}
|
|
@@ -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.js";
|
|
32
|
+
import { durationDefaults } from "../theme/tokens.stylex.js";
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
35
|
* How long a finger must stay put before the surface believes it.
|
|
@@ -59,14 +64,14 @@ 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 =
|
|
74
|
+
export const PRESS_FADE_MS = Number.parseFloat(resolveTokenReferences(durationDefaults)['--duration-exit']);
|
|
70
75
|
|
|
71
76
|
/**
|
|
72
77
|
* How recently a scroller must have moved for a touch on it to be a BRAKE
|
|
@@ -123,6 +128,19 @@ function step(gesture, phase, paint, timer) {
|
|
|
123
128
|
*/
|
|
124
129
|
export function pressGestureStep(gesture, event) {
|
|
125
130
|
if (event.kind === 'down') {
|
|
131
|
+
// A surface with no scroller above it: nothing can turn this touch into a
|
|
132
|
+
// scroll, so it paints in the frame it lands, as a UIControl highlights.
|
|
133
|
+
if (event.delayed === false) {
|
|
134
|
+
return {
|
|
135
|
+
gesture: {
|
|
136
|
+
originX: event.x,
|
|
137
|
+
originY: event.y,
|
|
138
|
+
phase: 'pressed'
|
|
139
|
+
},
|
|
140
|
+
paint: 'on',
|
|
141
|
+
timer: null
|
|
142
|
+
};
|
|
143
|
+
}
|
|
126
144
|
// A new touch always starts armed and painting nothing, whatever the last
|
|
127
145
|
// gesture ended as. This is the only way out of `dead`.
|
|
128
146
|
return {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Overflow values that let a box scroll. */
|
|
2
|
+
export declare const SCROLLABLE_OVERFLOW: ReadonlySet<string>;
|
|
3
|
+
export interface AllowedPans {
|
|
4
|
+
readonly x: boolean;
|
|
5
|
+
readonly y: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Which pans a `touch-action` value lets the browser perform. */
|
|
8
|
+
export declare function parseTouchAction(value: string): AllowedPans;
|
|
9
|
+
/**
|
|
10
|
+
* The viewport's overflow on an axis. It scrolls unless the root or the body
|
|
11
|
+
* clips it, as a scroll lock does with `overflow: hidden`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function rootOverflow(doc: Document, axis: 'x' | 'y'): string;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a touch on `element` lands inside a scroll view, UIKit's question
|
|
16
|
+
* for a touch: a box above it, the page included, overflows on an axis it
|
|
17
|
+
* scrolls, and `touch-action` on the way up leaves that axis to the browser.
|
|
18
|
+
* A `position: fixed` box ends the walk, because it does not move with any
|
|
19
|
+
* scroller above it. A wheel scrolls whatever `touch-action` says, so a
|
|
20
|
+
* wheel's question passes `readsTouchAction: false`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isInsideScrollView(element: Element, { readsTouchAction }?: {
|
|
23
|
+
readsTouchAction?: boolean;
|
|
24
|
+
}): boolean;
|
|
25
|
+
//# sourceMappingURL=scrollView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollView.d.ts","sourceRoot":"","sources":["../../src/utils/scrollView.ts"],"names":[],"mappings":"AAgBA,6CAA6C;AAC7C,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAIlD,CAAC;AAKH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAiB3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAgBnE;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,EAAC,gBAAuB,EAAC,GAAE;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAM,GAC3D,OAAO,CA4CT"}
|
|
@@ -0,0 +1,108 @@
|
|
|
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.js";
|
|
16
|
+
|
|
17
|
+
/** Overflow values that let a box scroll. */
|
|
18
|
+
export const SCROLLABLE_OVERFLOW = new Set(['auto', 'scroll', 'overlay']);
|
|
19
|
+
|
|
20
|
+
/** How far a box must overflow, in px, before it counts as scrolling. */
|
|
21
|
+
const OVERFLOW_TOLERANCE_PX = 1;
|
|
22
|
+
/** Which pans a `touch-action` value lets the browser perform. */
|
|
23
|
+
export function parseTouchAction(value) {
|
|
24
|
+
const tokens = value.trim().split(/\s+/);
|
|
25
|
+
if (tokens.includes('auto') || tokens.includes('manipulation')) {
|
|
26
|
+
return {
|
|
27
|
+
x: true,
|
|
28
|
+
y: true
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (tokens.includes('none')) {
|
|
32
|
+
return {
|
|
33
|
+
x: false,
|
|
34
|
+
y: false
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
x: tokens.some(token => token === 'pan-x' || token === 'pan-left' || token === 'pan-right'),
|
|
39
|
+
y: tokens.some(token => token === 'pan-y' || token === 'pan-up' || token === 'pan-down')
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The viewport's overflow on an axis. It scrolls unless the root or the body
|
|
45
|
+
* clips it, as a scroll lock does with `overflow: hidden`.
|
|
46
|
+
*/
|
|
47
|
+
export function rootOverflow(doc, axis) {
|
|
48
|
+
const view = doc.defaultView;
|
|
49
|
+
if (view == null) {
|
|
50
|
+
return 'hidden';
|
|
51
|
+
}
|
|
52
|
+
for (const element of [doc.documentElement, doc.body]) {
|
|
53
|
+
if (element == null) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const style = view.getComputedStyle(element);
|
|
57
|
+
const value = axis === 'x' ? style.overflowX : style.overflowY;
|
|
58
|
+
if (value === 'hidden' || value === 'clip') {
|
|
59
|
+
return 'hidden';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return 'auto';
|
|
63
|
+
}
|
|
64
|
+
function overflows(element, axis) {
|
|
65
|
+
return axis === 'y' ? element.scrollHeight - element.clientHeight > OVERFLOW_TOLERANCE_PX : element.scrollWidth - element.clientWidth > OVERFLOW_TOLERANCE_PX;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Whether a touch on `element` lands inside a scroll view, UIKit's question
|
|
70
|
+
* for a touch: a box above it, the page included, overflows on an axis it
|
|
71
|
+
* scrolls, and `touch-action` on the way up leaves that axis to the browser.
|
|
72
|
+
* A `position: fixed` box ends the walk, because it does not move with any
|
|
73
|
+
* scroller above it. A wheel scrolls whatever `touch-action` says, so a
|
|
74
|
+
* wheel's question passes `readsTouchAction: false`.
|
|
75
|
+
*/
|
|
76
|
+
export function isInsideScrollView(element, {
|
|
77
|
+
readsTouchAction = true
|
|
78
|
+
} = {}) {
|
|
79
|
+
const doc = element.ownerDocument;
|
|
80
|
+
const view = doc.defaultView;
|
|
81
|
+
if (view == null) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const root = doc.scrollingElement ?? doc.documentElement;
|
|
85
|
+
let panX = true;
|
|
86
|
+
let panY = true;
|
|
87
|
+
for (let node = element; node != null;) {
|
|
88
|
+
if (node instanceof Element) {
|
|
89
|
+
const style = view.getComputedStyle(node);
|
|
90
|
+
if (readsTouchAction) {
|
|
91
|
+
const pans = parseTouchAction(style.touchAction || 'auto');
|
|
92
|
+
panX &&= pans.x;
|
|
93
|
+
panY &&= pans.y;
|
|
94
|
+
}
|
|
95
|
+
if (node === root || node === doc.documentElement) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
if (panY && SCROLLABLE_OVERFLOW.has(style.overflowY) && overflows(node, 'y') || panX && SCROLLABLE_OVERFLOW.has(style.overflowX) && overflows(node, 'x')) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
if (style.position === 'fixed') {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
node = parentAcrossShadow(node);
|
|
106
|
+
}
|
|
107
|
+
return panY && SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'y')) && overflows(root, 'y') || panX && SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'x')) && overflows(root, 'x');
|
|
108
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionLock.d.ts","sourceRoot":"","sources":["../../src/utils/selectionLock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"selectionLock.d.ts","sourceRoot":"","sources":["../../src/utils/selectionLock.ts"],"names":[],"mappings":"AAwDA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAWD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,MAAM,IAAI,CA4BZ;AAED,mEAAmE;AACnE,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,EAClC,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,CAuGnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,aAAa,CAAC,aAAa,CAAC,CAiB9B;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,OAAO,CA+CT"}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
//
|
|
29
29
|
// A mouse never takes the lock, so its released behavior stays (AST-017).
|
|
30
30
|
|
|
31
|
-
import { containsAlongFlatTree, parentAcrossShadow } from "./flatTree.js";
|
|
31
|
+
import { containsAlongFlatTree, deepActiveElement, parentAcrossShadow } from "./flatTree.js";
|
|
32
32
|
import { subscribeInput } from "./inputStream.js";
|
|
33
33
|
import { isIosWebKit } from "./touchQueries.js";
|
|
34
34
|
|
|
@@ -477,15 +477,6 @@ function openShadowRootsOf(target) {
|
|
|
477
477
|
return roots;
|
|
478
478
|
}
|
|
479
479
|
|
|
480
|
-
/** The focused element, inside open shadow roots too. */
|
|
481
|
-
function deepActiveElement(doc) {
|
|
482
|
-
let active = doc?.activeElement ?? null;
|
|
483
|
-
while (active?.shadowRoot?.activeElement != null) {
|
|
484
|
-
active = active.shadowRoot.activeElement;
|
|
485
|
-
}
|
|
486
|
-
return active;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
480
|
/**
|
|
490
481
|
* The selection-lock styles on `set`, refcounted per element; idempotent
|
|
491
482
|
* release.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file touchHitArea.stylex.ts
|
|
3
|
+
* @input Uses StyleX and the insets that utils/hitArea.ts writes on a host
|
|
4
|
+
* @output Exports `touchHitAreaStyles.layer`, a host's invisible hit band
|
|
5
|
+
* under a coarse pointer
|
|
6
|
+
* @position Internal styling utility for CheckboxInput and RadioListItem
|
|
7
|
+
*
|
|
8
|
+
* The band is the host's `::after`, grown past each edge by the measured
|
|
9
|
+
* inset. A clip path cuts out the host's box, so its content keeps its taps.
|
|
10
|
+
* A tap on the band lands on the host. SYNC: hitArea.ts HIT_INSET_PROPERTIES.
|
|
11
|
+
*/
|
|
12
|
+
import * as stylex from '@stylexjs/stylex';
|
|
13
|
+
export declare const touchHitAreaStyles: Readonly<{
|
|
14
|
+
readonly layer: Readonly<{
|
|
15
|
+
readonly '::after': stylex.StyleXClassNameFor<"::after", {
|
|
16
|
+
readonly content: {
|
|
17
|
+
readonly default: null;
|
|
18
|
+
readonly "@media (pointer: coarse)": "\"\"";
|
|
19
|
+
};
|
|
20
|
+
readonly position: {
|
|
21
|
+
readonly default: null;
|
|
22
|
+
readonly "@media (pointer: coarse)": "absolute";
|
|
23
|
+
};
|
|
24
|
+
readonly inset: {
|
|
25
|
+
readonly default: null;
|
|
26
|
+
readonly "@media (pointer: coarse)": "calc(var(--astryx-hit-inset-top, 0px) * -1) calc(var(--astryx-hit-inset-right, 0px) * -1) calc(var(--astryx-hit-inset-bottom, 0px) * -1) calc(var(--astryx-hit-inset-left, 0px) * -1)";
|
|
27
|
+
};
|
|
28
|
+
readonly clipPath: {
|
|
29
|
+
readonly default: null;
|
|
30
|
+
readonly "@media (pointer: coarse)": "polygon(evenodd, 0 0, 100% 0, 100% 100%, 0 100%, 0 0, var(--astryx-hit-inset-left, 0px) var(--astryx-hit-inset-top, 0px), calc(100% - var(--astryx-hit-inset-right, 0px)) var(--astryx-hit-inset-top, 0px), calc(100% - var(--astryx-hit-inset-right, 0px)) calc(100% - var(--astryx-hit-inset-bottom, 0px)), var(--astryx-hit-inset-left, 0px) calc(100% - var(--astryx-hit-inset-bottom, 0px)), var(--astryx-hit-inset-left, 0px) var(--astryx-hit-inset-top, 0px))";
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=touchHitArea.stylex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"touchHitArea.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/touchHitArea.stylex.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAU3C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAgB7B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file touchHitArea.stylex.ts
|
|
5
|
+
* @input Uses StyleX and the insets that utils/hitArea.ts writes on a host
|
|
6
|
+
* @output Exports `touchHitAreaStyles.layer`, a host's invisible hit band
|
|
7
|
+
* under a coarse pointer
|
|
8
|
+
* @position Internal styling utility for CheckboxInput and RadioListItem
|
|
9
|
+
*
|
|
10
|
+
* The band is the host's `::after`, grown past each edge by the measured
|
|
11
|
+
* inset. A clip path cuts out the host's box, so its content keeps its taps.
|
|
12
|
+
* A tap on the band lands on the host. SYNC: hitArea.ts HIT_INSET_PROPERTIES.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as stylex from '@stylexjs/stylex';
|
|
16
|
+
|
|
17
|
+
// StyleX reads these at build time, so they are spelled out.
|
|
18
|
+
const TOUCH = '@media (pointer: coarse)';
|
|
19
|
+
// The insets are measured in the viewport, so the sides are physical.
|
|
20
|
+
const TOP = 'var(--astryx-hit-inset-top, 0px)';
|
|
21
|
+
const RIGHT = 'var(--astryx-hit-inset-right, 0px)';
|
|
22
|
+
const BOTTOM = 'var(--astryx-hit-inset-bottom, 0px)';
|
|
23
|
+
const LEFT = 'var(--astryx-hit-inset-left, 0px)';
|
|
24
|
+
export const touchHitAreaStyles = {
|
|
25
|
+
layer: {
|
|
26
|
+
k5JduY: "x1fjtqre",
|
|
27
|
+
kwXMNM: "x7b72wb",
|
|
28
|
+
kv0HGH: "x16x82qr",
|
|
29
|
+
kJYu5r: "x1c440c0",
|
|
30
|
+
$$css: true
|
|
31
|
+
}
|
|
32
|
+
};
|
|
@@ -21,6 +21,11 @@ export declare function isFocusableTrigger(element: HTMLElement): boolean;
|
|
|
21
21
|
* too, so a plain wrapper ignores its children's focus.
|
|
22
22
|
*/
|
|
23
23
|
export declare function isFocusForTrigger(event: Event, mode: TriggerFocusMode): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* `isFocusForTrigger` for focus already on `target`, inside `trigger`: the
|
|
26
|
+
* same rule, read when a trigger attaches with focus inside it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isFocusOnTrigger(target: EventTarget | null, trigger: HTMLElement | null, mode: TriggerFocusMode): boolean;
|
|
24
29
|
/** Remembers whether a trigger's current focus counted when it arrived. */
|
|
25
30
|
export interface TriggerFocusGate {
|
|
26
31
|
/** On focusin: whether this focus opens the layer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggerFocus.d.ts","sourceRoot":"","sources":["../../src/utils/triggerFocus.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAShE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,gBAAgB,GACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"triggerFocus.d.ts","sourceRoot":"","sources":["../../src/utils/triggerFocus.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAShE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAQT;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACzD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,gBAAgB,CAezD"}
|