@astryxdesign/core 0.7.7-canary.f9ac85f → 0.7.7
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/CHANGELOG.md +104 -0
- package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts +13 -0
- package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts.map +1 -0
- package/dist/AppShell/useCloseMobileDrawerOnActivate.js +45 -0
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +79 -9
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +1 -1
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetStack.js +5 -4
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +2 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +7 -3
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +30 -2
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +7 -1
- package/dist/CheckboxList/CheckboxListContext.d.ts +6 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +10 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +5 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +13 -27
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +22 -41
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +5 -2
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +4 -3
- package/dist/Drawer/Drawer.js +0 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +5 -1
- package/dist/Field/PanelSearchInput.d.ts +9 -1
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +3 -1
- package/dist/InfoTip/InfoTip.d.ts +2 -2
- package/dist/InfoTip/InfoTip.js +4 -4
- package/dist/Layer/layerAnimations.stylex.d.ts +7 -8
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +25 -20
- package/dist/Layer/usePressPin.d.ts +3 -5
- package/dist/Layer/usePressPin.d.ts.map +1 -1
- package/dist/Layer/usePressPin.js +4 -6
- package/dist/MobileNav/MobileNav.js +0 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +2 -4
- package/dist/Outline/Outline.d.ts +2 -4
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +4 -52
- package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromMarkdown.js +1 -0
- package/dist/Outline/useScrollSpy.js +3 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +134 -179
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +5 -0
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +118 -260
- package/dist/Resizable/resizeGesture.d.ts +91 -0
- package/dist/Resizable/resizeGesture.d.ts.map +1 -0
- package/dist/Resizable/resizeGesture.js +251 -0
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +3 -9
- package/dist/Token/Token.d.ts +2 -2
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +12 -4
- package/dist/Token/TokenNamingContext.d.ts +14 -0
- package/dist/Token/TokenNamingContext.d.ts.map +1 -0
- package/dist/Token/TokenNamingContext.js +23 -0
- package/dist/Tokenizer/Tokenizer.d.ts +46 -59
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +35 -58
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +25 -28
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +157 -54
- package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerItemRemovableContext.js +5 -3
- package/dist/Tooltip/Tooltip.d.ts +25 -30
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.js +24 -5
- package/dist/Tooltip/index.d.ts +1 -1
- package/dist/Tooltip/index.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +28 -29
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +20 -8
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +4 -7
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +4 -7
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +4 -7
- package/dist/astryx.css +5 -5
- package/dist/gestures/GestureHost.d.ts +27 -1
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +90 -8
- package/dist/hooks/useHighlightedOptionScroll.d.ts +11 -1
- package/dist/hooks/useHighlightedOptionScroll.d.ts.map +1 -1
- package/dist/hooks/useHighlightedOptionScroll.js +103 -5
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +4 -2
- package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.js +1 -0
- package/dist/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.js +7 -1
- 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/internal/SheetConfirmation.d.ts +11 -0
- package/dist/internal/SheetConfirmation.d.ts.map +1 -0
- package/dist/internal/SheetConfirmation.js +92 -0
- package/dist/internal/sheetDraft.d.ts +35 -0
- package/dist/internal/sheetDraft.d.ts.map +1 -0
- package/dist/internal/sheetDraft.js +65 -0
- package/dist/internal/touch-sheet.d.ts +21 -0
- package/dist/internal/touch-sheet.d.ts.map +1 -0
- package/dist/internal/touch-sheet.js +19 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts +24 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts.map +1 -0
- package/dist/internal/useDismissSearchOnTouchDrag.js +56 -0
- package/dist/motion/reducedMotion.d.ts +24 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +78 -1
- package/dist/utils/clickGuard.d.ts +8 -1
- package/dist/utils/clickGuard.d.ts.map +1 -1
- package/dist/utils/clickGuard.js +24 -1
- package/locales/en.json +4 -0
- package/locales/pseudo.json +3 -0
- package/package.json +9 -9
- package/src/AppShell/useCloseMobileDrawerOnActivate.ts +52 -0
- package/src/BottomSheet/BottomSheet.tsx +95 -10
- package/src/BottomSheet/BottomSheetPanel.tsx +7 -2
- package/src/BottomSheet/bottomSheetStack.ts +8 -4
- package/src/Breadcrumbs/BreadcrumbItem.tsx +13 -3
- package/src/Button/Button.tsx +37 -1
- package/src/CheckboxList/CheckboxList.doc.mjs +4 -2
- package/src/CheckboxList/CheckboxList.tsx +6 -0
- package/src/CheckboxList/CheckboxListContext.tsx +6 -0
- package/src/CheckboxList/CheckboxListItem.tsx +11 -2
- package/src/DateInput/DateInput.tsx +8 -2
- package/src/DateInput/MonthScroller.tsx +18 -22
- package/src/DateInput/Wheel.tsx +30 -32
- package/src/DateTimeInput/DateTimeInput.tsx +8 -2
- package/src/Dialog/Dialog.tsx +19 -4
- package/src/Drawer/Drawer.tsx +1 -1
- package/src/Drawer/useDrawerDialogPresence.ts +5 -1
- package/src/Field/PanelSearchInput.tsx +11 -0
- package/src/InfoTip/InfoTip.doc.mjs +3 -3
- package/src/InfoTip/InfoTip.tsx +5 -5
- package/src/Layer/layerAnimations.stylex.ts +24 -16
- package/src/Layer/usePressPin.ts +5 -11
- package/src/MobileNav/MobileNav.tsx +1 -1
- package/src/MultiSelector/hooks.ts +2 -4
- package/src/Outline/Outline.doc.mjs +177 -51
- package/src/Outline/Outline.tsx +5 -57
- package/src/Outline/useOutlineFromMarkdown.doc.mjs +157 -0
- package/src/Outline/useOutlineFromMarkdown.ts +1 -0
- package/src/Outline/useScrollSpy.ts +3 -3
- package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
- package/src/PowerSearch/PowerSearch.tsx +196 -183
- package/src/RadioList/RadioList.doc.mjs +4 -2
- package/src/RadioList/RadioList.tsx +4 -0
- package/src/Resizable/ResizeHandle.tsx +133 -328
- package/src/Resizable/resizeGesture.ts +368 -0
- package/src/SideNav/SideNavItem.tsx +3 -7
- package/src/Token/Token.tsx +13 -4
- package/src/Token/TokenNamingContext.ts +28 -0
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -0
- package/src/Tokenizer/Tokenizer.tsx +81 -86
- package/src/Tokenizer/TokenizerBottomSheet.tsx +219 -93
- package/src/Tokenizer/TokenizerItemRemovableContext.ts +5 -3
- package/src/Tooltip/Tooltip.doc.mjs +123 -54
- package/src/Tooltip/Tooltip.tsx +36 -39
- package/src/Tooltip/index.ts +0 -1
- package/src/Tooltip/useTooltip.doc.mjs +147 -33
- package/src/Tooltip/useTooltip.tsx +39 -32
- package/src/TopNav/TopNavItem.tsx +6 -5
- package/src/TopNav/TopNavMegaMenuItem.tsx +6 -5
- package/src/TopNav/TopNavMenu.tsx +6 -5
- package/src/gestures/GestureHost.ts +105 -10
- package/src/hooks/useHighlightedOptionScroll.ts +113 -9
- package/src/hooks/useMenuPress.ts +8 -2
- package/src/i18n/generated-english/PowerSearch/PowerSearch.generated.ts +1 -0
- package/src/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.ts +7 -1
- package/src/i18n/generated-locales/en.generated.ts +1 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
- package/src/internal/SheetConfirmation.tsx +101 -0
- package/src/internal/sheetDraft.ts +80 -0
- package/src/internal/touch-sheet.ts +21 -0
- package/src/internal/useDismissSearchOnTouchDrag.ts +69 -0
- package/src/motion/reducedMotion.ts +79 -1
- package/src/utils/clickGuard.ts +37 -1
- package/dist/internal/tokenizer-presentation.d.ts +0 -21
- package/dist/internal/tokenizer-presentation.d.ts.map +0 -1
- package/dist/internal/tokenizer-presentation.js +0 -21
- package/src/internal/tokenizer-presentation.ts +0 -25
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file useTooltip.tsx
|
|
3
3
|
* @input Uses useLayer, usePressPin, React hooks
|
|
4
|
-
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips
|
|
4
|
+
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips,
|
|
5
|
+
* and the module-only useTooltipWithTriggerBehavior that InfoTip's press-to-pin uses
|
|
5
6
|
* @position Layer hook; builds on useLayer for tooltip behavior
|
|
6
7
|
*
|
|
7
8
|
* SYNC: When modified, update:
|
|
@@ -10,6 +11,7 @@
|
|
|
10
11
|
import { type ReactNode, type RefCallback } from 'react';
|
|
11
12
|
import { type ContextRenderProps, type LayerAlignment, type LayerPlacement } from '../Layer/useLayer.js';
|
|
12
13
|
import type { LayerTouchTrigger } from '../Layer/useTouchTrigger.js';
|
|
14
|
+
import { type LayerTriggerBehavior } from '../Layer/usePressPin.js';
|
|
13
15
|
/**
|
|
14
16
|
* Focus trigger behavior for tooltips
|
|
15
17
|
*/
|
|
@@ -18,13 +20,6 @@ export type TooltipFocusTrigger = 'auto' | 'always' | 'never';
|
|
|
18
20
|
* Touch trigger behavior for tooltips
|
|
19
21
|
*/
|
|
20
22
|
export type TooltipTouchTrigger = LayerTouchTrigger;
|
|
21
|
-
/**
|
|
22
|
-
* How the trigger opens the tooltip. `adaptive`, the default, previews it on
|
|
23
|
-
* hover and focus, and a tap opens it unless the trigger acts. `hover`
|
|
24
|
-
* previews it on hover and focus, and no touch or pen tap opens it. `toggle`
|
|
25
|
-
* pins it on a click, tap, Enter, or Space on a button trigger.
|
|
26
|
-
*/
|
|
27
|
-
export type TooltipTriggerBehavior = 'adaptive' | 'hover' | 'toggle';
|
|
28
23
|
export interface TooltipOptions {
|
|
29
24
|
/**
|
|
30
25
|
* Position placement relative to anchor
|
|
@@ -64,30 +59,9 @@ export interface TooltipOptions {
|
|
|
64
59
|
* - `tap`: tap always opens the tooltip, even on a trigger that acts
|
|
65
60
|
* - `none`: touch never opens the tooltip
|
|
66
61
|
*
|
|
67
|
-
* It decides only under `triggerBehavior="adaptive"`, the default.
|
|
68
|
-
*
|
|
69
62
|
* @default 'auto'
|
|
70
63
|
*/
|
|
71
64
|
touchTrigger?: TooltipTouchTrigger;
|
|
72
|
-
/**
|
|
73
|
-
* How the trigger opens the tooltip:
|
|
74
|
-
* - `adaptive` (the default): hover and focus preview it. A tap opens it
|
|
75
|
-
* unless the trigger performs an action of its own. While `touchTrigger`
|
|
76
|
-
* remains, it decides those taps.
|
|
77
|
-
* - `hover`: hover and focus preview it; no touch or pen tap opens it.
|
|
78
|
-
* - `toggle`: on a button trigger, a click, a tap, Enter, or Space pins the
|
|
79
|
-
* tooltip open, and the same press closes it. Hover and keyboard focus
|
|
80
|
-
* still preview it. A pinned tooltip stays until Escape, a second press,
|
|
81
|
-
* a press outside, or focus leaving. Astryx clickable rows and cards
|
|
82
|
-
* ignore the pinning press, except an Item row on a trigger that is not
|
|
83
|
-
* a native button. The `Tooltip` component also stops it at a child
|
|
84
|
-
* trigger. A hook caller stops a plain `onClick` ancestor itself. The
|
|
85
|
-
* trigger reports `aria-expanded` and `aria-controls`, and the tooltip's
|
|
86
|
-
* text is announced once when it pins. `touchTrigger` is ignored.
|
|
87
|
-
*
|
|
88
|
-
* @default 'adaptive'
|
|
89
|
-
*/
|
|
90
|
-
triggerBehavior?: TooltipTriggerBehavior;
|
|
91
65
|
/**
|
|
92
66
|
* Whether the tooltip is enabled.
|
|
93
67
|
* When false, hover/focus triggers are disabled.
|
|
@@ -185,4 +159,29 @@ export interface TooltipReturn {
|
|
|
185
159
|
* ```
|
|
186
160
|
*/
|
|
187
161
|
export declare function useTooltip(options?: TooltipOptions): TooltipReturn;
|
|
162
|
+
/**
|
|
163
|
+
* Module-only options for `useTooltipWithTriggerBehavior`. Not exported from
|
|
164
|
+
* the package.
|
|
165
|
+
*/
|
|
166
|
+
export interface TooltipWithTriggerBehaviorOptions extends TooltipOptions {
|
|
167
|
+
/**
|
|
168
|
+
* How the trigger opens the tooltip:
|
|
169
|
+
* - `adaptive` (the default): hover and focus preview it. `touchTrigger`
|
|
170
|
+
* decides taps.
|
|
171
|
+
* - `toggle`: on a button trigger, a click, a tap, Enter, or Space pins the
|
|
172
|
+
* tooltip open, and the same press closes it. Hover and keyboard focus
|
|
173
|
+
* still preview it. A pinned tooltip stays until Escape, a second press,
|
|
174
|
+
* a press outside, or focus leaving. The trigger reports `aria-expanded`
|
|
175
|
+
* and `aria-controls`, and the tooltip's text is announced once when it
|
|
176
|
+
* pins. `touchTrigger` is ignored. InfoTip uses it.
|
|
177
|
+
*
|
|
178
|
+
* @default 'adaptive'
|
|
179
|
+
*/
|
|
180
|
+
triggerBehavior?: LayerTriggerBehavior;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* `useTooltip` with a trigger behavior. Module-only: InfoTip's press-to-pin
|
|
184
|
+
* goes through it, and the package does not export it.
|
|
185
|
+
*/
|
|
186
|
+
export declare function useTooltipWithTriggerBehavior(options?: TooltipWithTriggerBehaviorOptions): TooltipReturn;
|
|
188
187
|
//# sourceMappingURL=useTooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../src/Tooltip/useTooltip.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../src/Tooltip/useTooltip.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAKhE,OAAO,EAAc,KAAK,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AA0C5E;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;OAOG;IACH,aAAa,EAAE,CACb,QAAQ,EAAE,SAAS,EACnB,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAC5C,SAAS,CAAC;CAChB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAOtE;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAkC,SAAQ,cAAc;IACvE;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,iCAAsC,GAC9C,aAAa,CAqdf"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useTooltip.tsx
|
|
7
7
|
* @input Uses useLayer, usePressPin, React hooks
|
|
8
|
-
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips
|
|
8
|
+
* @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips,
|
|
9
|
+
* and the module-only useTooltipWithTriggerBehavior that InfoTip's press-to-pin uses
|
|
9
10
|
* @position Layer hook; builds on useLayer for tooltip behavior
|
|
10
11
|
*
|
|
11
12
|
* SYNC: When modified, update:
|
|
@@ -51,13 +52,6 @@ const styles = {
|
|
|
51
52
|
* Touch trigger behavior for tooltips
|
|
52
53
|
*/
|
|
53
54
|
|
|
54
|
-
/**
|
|
55
|
-
* How the trigger opens the tooltip. `adaptive`, the default, previews it on
|
|
56
|
-
* hover and focus, and a tap opens it unless the trigger acts. `hover`
|
|
57
|
-
* previews it on hover and focus, and no touch or pen tap opens it. `toggle`
|
|
58
|
-
* pins it on a click, tap, Enter, or Space on a button trigger.
|
|
59
|
-
*/
|
|
60
|
-
|
|
61
55
|
/**
|
|
62
56
|
* Check if an element is naturally focusable
|
|
63
57
|
*/
|
|
@@ -106,6 +100,24 @@ function isFocusable(element) {
|
|
|
106
100
|
*/
|
|
107
101
|
|
|
108
102
|
export function useTooltip(options = {}) {
|
|
103
|
+
// The option is fixed to `adaptive`, so an options object that carries it at
|
|
104
|
+
// runtime cannot reach the press-to-pin path.
|
|
105
|
+
return useTooltipWithTriggerBehavior({
|
|
106
|
+
...options,
|
|
107
|
+
triggerBehavior: 'adaptive'
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Module-only options for `useTooltipWithTriggerBehavior`. Not exported from
|
|
113
|
+
* the package.
|
|
114
|
+
*/
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* `useTooltip` with a trigger behavior. Module-only: InfoTip's press-to-pin
|
|
118
|
+
* goes through it, and the package does not export it.
|
|
119
|
+
*/
|
|
120
|
+
export function useTooltipWithTriggerBehavior(options = {}) {
|
|
109
121
|
const {
|
|
110
122
|
placement = 'above',
|
|
111
123
|
alignment = 'center',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAY5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,EAAgB,KAAK,WAAW,EAAC,MAAM,iCAAiC,CAAC;AA2DhF,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,oCAAoC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC;IACnD;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAWD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,EACzB,EAAE,EACF,IAAI,EACJ,MAAM,EACN,OAAO,EACP,KAAK,EACL,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,IAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,+
|
|
1
|
+
{"version":3,"file":"TopNavItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAY5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,EAAgB,KAAK,WAAW,EAAC,MAAM,iCAAiC,CAAC;AA2DhF,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,oCAAoC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC;IACnD;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAWD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,EACzB,EAAE,EACF,IAAI,EACJ,MAAM,EACN,OAAO,EACP,KAAK,EACL,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,IAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,+BAmGjB;yBApHe,UAAU"}
|
|
@@ -22,7 +22,7 @@ import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
|
22
22
|
import { useTopNavRenderMode } from "./TopNavRenderContext.js";
|
|
23
23
|
import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
24
24
|
import { mergeProps } from "../utils/index.js";
|
|
25
|
-
import {
|
|
25
|
+
import { useCloseMobileDrawerOnActivate } from "../AppShell/useCloseMobileDrawerOnActivate.js";
|
|
26
26
|
import { themeProps } from "../utils/themeProps.js";
|
|
27
27
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
28
28
|
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
@@ -112,9 +112,7 @@ export function TopNavItem({
|
|
|
112
112
|
const pressable = usePressFeedback();
|
|
113
113
|
const LinkComponent = useLinkComponent(as);
|
|
114
114
|
const renderMode = useTopNavRenderMode();
|
|
115
|
-
const
|
|
116
|
-
closeMobileNav
|
|
117
|
-
} = useAppShellMobile();
|
|
115
|
+
const closeDrawerAfter = useCloseMobileDrawerOnActivate(renderMode === 'drawer');
|
|
118
116
|
|
|
119
117
|
// A disabled item renders as a plain <a> with no href: an href-less anchor
|
|
120
118
|
// is not focusable and exposes no link affordance, so programmatic focus +
|
|
@@ -129,14 +127,13 @@ export function TopNavItem({
|
|
|
129
127
|
// Drawer mode — render as a SideNavItem-style vertical list element
|
|
130
128
|
// =========================================================================
|
|
131
129
|
if (renderMode === 'drawer') {
|
|
130
|
+
const activate = closeDrawerAfter(onClick);
|
|
132
131
|
const handleDrawerClick = e => {
|
|
133
132
|
if (isDisabled) {
|
|
134
133
|
preventDefaultClick(e);
|
|
135
134
|
return;
|
|
136
135
|
}
|
|
137
|
-
|
|
138
|
-
onClick?.(e);
|
|
139
|
-
closeMobileNav();
|
|
136
|
+
activate?.(e);
|
|
140
137
|
};
|
|
141
138
|
return /*#__PURE__*/_jsxs(Root, {
|
|
142
139
|
ref: ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavMegaMenuItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsG5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACb,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"TopNavMegaMenuItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsG5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACb,EAAE,uBAAuB,qBAuFzB;yBApGe,kBAAkB"}
|
|
@@ -22,7 +22,7 @@ import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
|
22
22
|
import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
23
23
|
import { useTopNavRenderMode } from "./TopNavRenderContext.js";
|
|
24
24
|
import { mergeProps } from "../utils/index.js";
|
|
25
|
-
import {
|
|
25
|
+
import { useCloseMobileDrawerOnActivate } from "../AppShell/useCloseMobileDrawerOnActivate.js";
|
|
26
26
|
import { themeProps } from "../utils/themeProps.js";
|
|
27
27
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
28
28
|
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
@@ -112,9 +112,7 @@ export function TopNavMegaMenuItem({
|
|
|
112
112
|
const pressable = usePressFeedback();
|
|
113
113
|
const renderMode = useTopNavRenderMode();
|
|
114
114
|
const LinkComponent = useLinkComponent(as);
|
|
115
|
-
const
|
|
116
|
-
closeMobileNav
|
|
117
|
-
} = useAppShellMobile();
|
|
115
|
+
const closeDrawerAfter = useCloseMobileDrawerOnActivate(renderMode === 'drawer');
|
|
118
116
|
|
|
119
117
|
// =========================================================================
|
|
120
118
|
// Drawer mode — matches SideNavItem / TopNavMenu drawer appearance
|
|
@@ -124,10 +122,9 @@ export function TopNavMegaMenuItem({
|
|
|
124
122
|
const elementProps = Element === 'button' ? {
|
|
125
123
|
type: 'button'
|
|
126
124
|
} : {};
|
|
127
|
-
const handleDrawerClick = () => {
|
|
125
|
+
const handleDrawerClick = closeDrawerAfter(() => {
|
|
128
126
|
onClick?.();
|
|
129
|
-
|
|
130
|
-
};
|
|
127
|
+
});
|
|
131
128
|
return /*#__PURE__*/_jsxs(Element, {
|
|
132
129
|
...restProps,
|
|
133
130
|
ref: ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAqN5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAW,EACX,SAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,EAC9B,GAAG,IAAI,EACR,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAqN5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAW,EACX,SAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,EAC9B,GAAG,IAAI,EACR,EAAE,eAAe,4BAuSjB;yBApTe,UAAU"}
|
|
@@ -31,7 +31,7 @@ import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
|
31
31
|
import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
32
32
|
import { useTopNavSlot } from "./TopNavContext.js";
|
|
33
33
|
import { useTopNavRenderMode } from "./TopNavRenderContext.js";
|
|
34
|
-
import {
|
|
34
|
+
import { useCloseMobileDrawerOnActivate } from "../AppShell/useCloseMobileDrawerOnActivate.js";
|
|
35
35
|
import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
36
36
|
import { isSafeUrl } from "../utils/safeUrl.js";
|
|
37
37
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -212,9 +212,7 @@ export function TopNavMenu({
|
|
|
212
212
|
}) {
|
|
213
213
|
const pressable = usePressFeedback();
|
|
214
214
|
const renderMode = useTopNavRenderMode();
|
|
215
|
-
const
|
|
216
|
-
closeMobileNav
|
|
217
|
-
} = useAppShellMobile();
|
|
215
|
+
const closeDrawerAfter = useCloseMobileDrawerOnActivate(renderMode === 'drawer');
|
|
218
216
|
const LinkComponent = useLinkComponent();
|
|
219
217
|
const [drawerExpanded, setDrawerExpanded] = useState(false);
|
|
220
218
|
const menuId = useId();
|
|
@@ -351,10 +349,9 @@ export function TopNavMenu({
|
|
|
351
349
|
children: items.map(item => /*#__PURE__*/_jsxs(LinkComponent, {
|
|
352
350
|
href: item.href,
|
|
353
351
|
...pressable,
|
|
354
|
-
onClick: _e => {
|
|
352
|
+
onClick: closeDrawerAfter(_e => {
|
|
355
353
|
item.onClick?.();
|
|
356
|
-
|
|
357
|
-
},
|
|
354
|
+
}),
|
|
358
355
|
...focusOutlineProps.focusVisible(navItemStyles.item, interactionOverlayStyles.backgroundColor, drawerStyles.item),
|
|
359
356
|
children: [isRenderable(item.icon) && /*#__PURE__*/_jsx("span", {
|
|
360
357
|
...{
|
package/dist/astryx.css
CHANGED
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
@keyframes x13kz0yu-B{0%, 100%{opacity:1;}50%{opacity:.5;}}
|
|
64
64
|
@keyframes x132z07p-B{0%{opacity:.25;}9.99%{opacity:.25;}10%{opacity:.325;}19.99%{opacity:.325;}20%{opacity:.4;}29.99%{opacity:.4;}30%{opacity:.475;}39.99%{opacity:.475;}40%{opacity:.55;}49.99%{opacity:.55;}50%{opacity:.625;}59.99%{opacity:.625;}60%{opacity:.7;}69.99%{opacity:.7;}70%{opacity:.775;}79.99%{opacity:.775;}80%{opacity:.85;}89.99%{opacity:.85;}90%{opacity:.925;}100%{opacity:.925;}}
|
|
65
65
|
@keyframes x1jn504y-B{from{opacity:1;}to{opacity:0;}}
|
|
66
|
+
@keyframes x12p7u8f-B{from{opacity:0;animation-timing-function:cubic-bezier(0.42, 0, 0.58, 1);}to{opacity:1;}}
|
|
66
67
|
@keyframes x18re5ia-B{from{opacity:0;}to{opacity:1;}}
|
|
67
68
|
@keyframes xtut5q7-B{0%{opacity:1;}50%{opacity:.5;}100%{opacity:1;}}
|
|
68
69
|
@keyframes x1k48ry3-B{from{opacity:0;transform:scale(.95);}to{opacity:1;transform:scale(1);}}
|
|
@@ -717,7 +718,6 @@
|
|
|
717
718
|
.xg7jpbn:not(#\#):not(#\#):not(#\#){-webkit-text-fill-color:transparent}
|
|
718
719
|
.xpdipgo:not(#\#):not(#\#):not(#\#){-webkit-touch-callout:none}
|
|
719
720
|
.x1winvzj:not(#\#):not(#\#):not(#\#){-webkit-user-select:none}
|
|
720
|
-
.x4465f1:not(#\#):not(#\#):not(#\#){align-content:end}
|
|
721
721
|
.x8gbvx8:not(#\#):not(#\#):not(#\#){align-content:flex-start}
|
|
722
722
|
.x1pha0wt:not(#\#):not(#\#):not(#\#){align-items:baseline}
|
|
723
723
|
.x6s0dn4:not(#\#):not(#\#):not(#\#){align-items:center}
|
|
@@ -1686,13 +1686,13 @@
|
|
|
1686
1686
|
@media (prefers-reduced-motion: reduce){.x4q6aw4.x4q6aw4:not(#\#):not(#\#):not(#\#){animation-direction:alternate}}
|
|
1687
1687
|
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.x1jq6yc9.x1jq6yc9:not(#\#):not(#\#):not(#\#){animation-duration:.2s}}
|
|
1688
1688
|
@media (prefers-reduced-motion: reduce){.xnh0sag.xnh0sag:not(#\#):not(#\#):not(#\#){animation-duration:3s}}
|
|
1689
|
-
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.x13pi3j7.x13pi3j7:not(#\#):not(#\#):not(#\#){animation-duration:min(var(--duration-fast-max),.2s)}}
|
|
1690
1689
|
@media (prefers-reduced-motion: reduce){.x1p2ibn3.x1p2ibn3:not(#\#):not(#\#):not(#\#){animation-duration:var(--_progress-bar-pulse)}}
|
|
1691
|
-
@media (
|
|
1690
|
+
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.x10got5w.x10got5w:not(#\#):not(#\#):not(#\#){animation-duration:200ms}}
|
|
1691
|
+
@media ((prefers-reduced-motion: reduce) and (not (pointer: coarse)) and (not (prefers-reduced-motion: reduce))) or ((prefers-reduced-motion: reduce) and (not (pointer: coarse)) and (not (pointer: coarse))){.x2g3n7u.x2g3n7u:not(#\#):not(#\#):not(#\#){animation-name:none}}
|
|
1692
1692
|
@media (prefers-reduced-motion: reduce) and (not (pointer: coarse)){.xtuz6mp.xtuz6mp:not(#\#):not(#\#):not(#\#){animation-name:none}}
|
|
1693
1693
|
@media (prefers-reduced-motion: reduce){.x1aquc0h.x1aquc0h:not(#\#):not(#\#):not(#\#){animation-name:none}}
|
|
1694
|
+
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.xaqowwx.xaqowwx:not(#\#):not(#\#):not(#\#){animation-name:x12p7u8f-B}}
|
|
1694
1695
|
@media ((prefers-reduced-motion: reduce) and (pointer: coarse) and (not (prefers-reduced-motion: reduce))) or ((prefers-reduced-motion: reduce) and (pointer: coarse) and (not ((not (pointer: coarse))))){.x6mpr79.x6mpr79:not(#\#):not(#\#):not(#\#){animation-name:x18re5ia-B}}
|
|
1695
|
-
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.xajy0lc.xajy0lc:not(#\#):not(#\#):not(#\#){animation-name:x18re5ia-B}}
|
|
1696
1696
|
@media (prefers-reduced-motion: reduce){.xfqa98z.xfqa98z:not(#\#):not(#\#):not(#\#){animation-name:xml828b-B}}
|
|
1697
1697
|
@media (prefers-reduced-motion: reduce) and (pointer: coarse){.xr5m3f0.xr5m3f0:not(#\#):not(#\#):not(#\#){animation-timing-function:cubic-bezier(.42,0,.58,1)}}
|
|
1698
1698
|
@media (prefers-reduced-motion: reduce){.x10xcq22.x10xcq22:not(#\#):not(#\#):not(#\#){animation-timing-function:var(--_progress-bar-pulse-curve)}}
|
|
@@ -2019,7 +2019,7 @@
|
|
|
2019
2019
|
.xe0p6wg:not(#\#):not(#\#):not(#\#):not(#\#){min-height:28px}
|
|
2020
2020
|
.x21xpn4:not(#\#):not(#\#):not(#\#):not(#\#){min-height:32px}
|
|
2021
2021
|
.x1gg8mnh:not(#\#):not(#\#):not(#\#):not(#\#){min-height:44px}
|
|
2022
|
-
.
|
|
2022
|
+
.x1lh6h5t:not(#\#):not(#\#):not(#\#):not(#\#){min-height:fit-content}
|
|
2023
2023
|
.x1xf4nls:not(#\#):not(#\#):not(#\#):not(#\#){min-height:var(--size-element-lg)}
|
|
2024
2024
|
.x1uogy3y:not(#\#):not(#\#):not(#\#):not(#\#){min-height:var(--size-element-md)}
|
|
2025
2025
|
.x1gdqauq:not(#\#):not(#\#):not(#\#):not(#\#){min-height:var(--size-element-sm)}
|
|
@@ -96,6 +96,12 @@ export declare class GestureHost {
|
|
|
96
96
|
* lift click (`spec:AST-094` FR28: nothing acts).
|
|
97
97
|
*/
|
|
98
98
|
private readonly cancelledFingers;
|
|
99
|
+
/**
|
|
100
|
+
* The pens and pointer-read fingers that the app's lost focus cancelled,
|
|
101
|
+
* by pointer id. Each is kept until its lift, which must not click either,
|
|
102
|
+
* or until a new press.
|
|
103
|
+
*/
|
|
104
|
+
private readonly cancelledPointers;
|
|
99
105
|
/** Touch.identifier → the element the finger landed on. */
|
|
100
106
|
private readonly touchTargets;
|
|
101
107
|
/**
|
|
@@ -117,6 +123,8 @@ export declare class GestureHost {
|
|
|
117
123
|
private readonly processed;
|
|
118
124
|
/** pointerId → arena id, for live mouse and pen contacts. */
|
|
119
125
|
private readonly pointerIds;
|
|
126
|
+
/** Each contact's kind: a blur refuses a pen's or a pointer-read finger's lift, never a mouse's. */
|
|
127
|
+
private readonly pointerKinds;
|
|
120
128
|
/**
|
|
121
129
|
* The boxes the host watches for screen-edge pans (syncLayoutWatch): each
|
|
122
130
|
* element with an enabled one, and the root for one whose band moves with
|
|
@@ -397,7 +405,18 @@ export declare class GestureHost {
|
|
|
397
405
|
private readonly onArmedPress;
|
|
398
406
|
/** A kept press's blocking `touchmove` follows the armed press (syncTouchMoveListener). */
|
|
399
407
|
private syncKeptPresses;
|
|
400
|
-
/**
|
|
408
|
+
/**
|
|
409
|
+
* A new press is a new gesture, as the click guard reads one, so the lifts
|
|
410
|
+
* the blur cancelled owe nothing after it. A second finger keeps the other
|
|
411
|
+
* fingers' refusals, since those fingers may still be down.
|
|
412
|
+
*/
|
|
413
|
+
private dropCancelledLifts;
|
|
414
|
+
/**
|
|
415
|
+
* After a contact ends: an armed press that is over stops listening. A
|
|
416
|
+
* contact the lost focus cancelled still owes its lift, so the press is
|
|
417
|
+
* not over until that lift comes. A lift the page never hears ends it at
|
|
418
|
+
* the next press, or at a cancel.
|
|
419
|
+
*/
|
|
401
420
|
private releaseArmedPress;
|
|
402
421
|
/** With nothing attached, stop listening and stop following the pointer. */
|
|
403
422
|
private uninstallIfIdle;
|
|
@@ -688,6 +707,8 @@ export declare class GestureHost {
|
|
|
688
707
|
* FR10), and no claim is released here.
|
|
689
708
|
*/
|
|
690
709
|
private failUnclaimedLoneFingerPans;
|
|
710
|
+
/** Whether a finger's drag is claimed: then two fingers make no pinch. */
|
|
711
|
+
private isFingerClaimed;
|
|
691
712
|
private readonly onVisibilityChange;
|
|
692
713
|
private readonly onBlur;
|
|
693
714
|
/** Whether the browser sends Touch Events at all (`ontouchstart`). */
|
|
@@ -698,6 +719,11 @@ export declare class GestureHost {
|
|
|
698
719
|
* after load), as the move path does.
|
|
699
720
|
*/
|
|
700
721
|
private readsFingersFromPointerEvents;
|
|
722
|
+
/**
|
|
723
|
+
* The lift of a contact the lost focus cancelled: its click is refused,
|
|
724
|
+
* and a finger's touchend after it is cancelled.
|
|
725
|
+
*/
|
|
726
|
+
private refuseCancelledLift;
|
|
701
727
|
/** The app lost focus: UIKit cancels every touch in flight. */
|
|
702
728
|
private cancelEverything;
|
|
703
729
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureHost.d.ts","sourceRoot":"","sources":["../../src/gestures/GestureHost.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GestureHost.d.ts","sourceRoot":"","sources":["../../src/gestures/GestureHost.ts"],"names":[],"mappings":"AAoIA,OAAO,EAEL,YAAY,EAGZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAC,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAqBhD,OAAO,KAAK,EAEV,YAAY,EAIZ,aAAa,EAGd,MAAM,SAAS,CAAC;AAgDjB,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtC,4DAA4D;IAC5D,YAAY,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACnD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClD;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,MAAM,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsZD,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,wEAAwE;IACxE,OAAO,CAAC,kBAAkB,CAA6B;IACvD,uEAAuE;IACvE,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAC7D,OAAO,CAAC,qBAAqB,CAAS;IACtC,gFAAgF;IAChF,OAAO,CAAC,gBAAgB,CAA6B;IACrD,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IACJ;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG5B;IACJ;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IACJ,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IACJ,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;IAClE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IACJ,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGpB;IACJ,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,cAAc,CAA+B;IACrD,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0C;IACvE,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB,CAAiB;IACzC,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgB;IACvD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,kEAAkE;IAClE,OAAO,CAAC,SAAS,CACV;IACP,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAK;IAC3B,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA+B;IAC/D,gDAAgD;IAChD,OAAO,CAAC,UAAU,CACX;IACP,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwC;IACnE,yEAAyE;IACzE,OAAO,CAAC,SAAS,CAAK;IACtB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD;;;OAGG;IACH,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,MAAM,CAAK;IACnB,qCAAqC;IACrC,OAAO,CAAC,KAAK,CAA6B;IAC1C,+EAA+E;IAC/E,OAAO,CAAC,cAAc,CAA6B;IACnD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,kCAAkC;IAClC,OAAO,CAAC,YAAY,CAA6B;IACjD,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,WAAW,CAAS;IAC5B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAA6B;IACxD,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAsB;IAC3C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,YAAY,CAAS;IAC7B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAS;IACpC,kEAAkE;IAClE,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,eAAe,CAAQ;gBAEnB,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,kBAAuB;IA+C3D,sEAAsE;IACtE,MAAM,CACJ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,GAAE,aAAkB,GAC1B,MAAM,IAAI;IA+Db;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IA6CvB,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS7B;IAEF,gFAAgF;IAChF,cAAc,CACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAM,GACpD,MAAM,IAAI;IAmBb;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAK3C;;;;;;OAMG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW;IAiB5C,0EAA0E;IAC1E,OAAO,CAAC,cAAc;IAOtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAsEvB,oDAAoD;IACpD,OAAO,CAAC,YAAY;IAkBpB,8DAA8D;IAC9D,OAAO,CAAC,OAAO;IAcf,4EAA4E;IAC5E,OAAO,CAAC,WAAW;IAOnB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA+BvB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAY9B;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAexD;;;;OAIG;IACH,eAAe,CACb,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,MAAsC,GAC7C,OAAO;IASV;;;;OAIG;IACH,MAAM,IAAI,MAAM,IAAI;IAgBpB;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOjD,wEAAwE;IACxE,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAQnC,OAAO,CAAC,eAAe;IAqBvB,kDAAkD;IAClD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,OAAO;IAOf;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;IAqE7B,OAAO,CAAC,UAAU;IA6ClB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;;;;;OAMG;IACH,OAAO,CAAC,gCAAgC;IAmCxC,OAAO,CAAC,OAAO;IAoBf;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;IAgCzB,kFAAkF;IAClF,OAAO,CAAC,2BAA2B;IAkBnC;;;;;;;;;OASG;IACH,OAAO,CAAC,SAAS;IAgDjB,uGAAuG;IACvG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAqB3B;IAEF,2FAA2F;IAC3F,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAiBzB,4EAA4E;IAC5E,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA2BvB,0EAA0E;IAC1E,OAAO,CAAC,YAAY;IAWpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IActB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAkBlB;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,OAAO;IA0Df,OAAO,CAAC,SAAS;IAyBjB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IAmDrB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAgLtB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAgB3B,oEAAoE;IACpE,OAAO,CAAC,UAAU;IA4HlB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAyBrB,yEAAyE;IACzE,OAAO,CAAC,aAAa;IAUrB,gFAAgF;IAChF,OAAO,CAAC,aAAa;IAcrB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAiClB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,gBAAgB;IAsDxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IA2ChB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,GAAG,MAAM,IAAI;IAOzD;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;IAIrB,mEAAmE;IACnE,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,QAAQ,CAAC,YAAY,CA2H3B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CA4D1B;IAEF,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAElC;IAEF;;;;;;OAMG;IACH;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA4BvB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CA8BhC;IAEF,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAgEzB;IAEF;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CA8B5B;IAEF,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAGhC;IAEF,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAEvC;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE/B;IAEF,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEtC;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAElC;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,aAAa;IAoCrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAmB1B,4EAA4E;IAC5E,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAYnB,mEAAmE;IACnE,OAAO,CAAC,SAAS;IAcjB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CA0F5B;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CA6B5B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CA4C1B;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAmBvB,mEAAmE;IACnE,OAAO,CAAC,mBAAmB;IAoB3B,yEAAyE;IACzE,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CA2B9B;IAEF;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAU5B;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IA2B/B;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO;IAIpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CA6CvB;IAEF,OAAO,CAAC,eAAe;IAevB;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAgBnC,0EAA0E;IAC1E,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAOjC;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,sEAAsE;IACtE,OAAO,CAAC,gBAAgB;IAKxB;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAQrC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAQ3B,+DAA+D;IAC/D,OAAO,CAAC,gBAAgB;CAkCzB;AAyBD,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAOzD"}
|
|
@@ -457,6 +457,12 @@ export class GestureHost {
|
|
|
457
457
|
* lift click (`spec:AST-094` FR28: nothing acts).
|
|
458
458
|
*/
|
|
459
459
|
cancelledFingers = new Set();
|
|
460
|
+
/**
|
|
461
|
+
* The pens and pointer-read fingers that the app's lost focus cancelled,
|
|
462
|
+
* by pointer id. Each is kept until its lift, which must not click either,
|
|
463
|
+
* or until a new press.
|
|
464
|
+
*/
|
|
465
|
+
cancelledPointers = new Map();
|
|
460
466
|
/** Touch.identifier → the element the finger landed on. */
|
|
461
467
|
touchTargets = new Map();
|
|
462
468
|
/**
|
|
@@ -478,6 +484,8 @@ export class GestureHost {
|
|
|
478
484
|
processed = new WeakSet();
|
|
479
485
|
/** pointerId → arena id, for live mouse and pen contacts. */
|
|
480
486
|
pointerIds = new Map();
|
|
487
|
+
/** Each contact's kind: a blur refuses a pen's or a pointer-read finger's lift, never a mouse's. */
|
|
488
|
+
pointerKinds = new Map();
|
|
481
489
|
/**
|
|
482
490
|
* The boxes the host watches for screen-edge pans (syncLayoutWatch): each
|
|
483
491
|
* element with an enabled one, and the root for one whose band moves with
|
|
@@ -1420,13 +1428,32 @@ export class GestureHost {
|
|
|
1420
1428
|
}
|
|
1421
1429
|
}
|
|
1422
1430
|
|
|
1423
|
-
/**
|
|
1431
|
+
/**
|
|
1432
|
+
* A new press is a new gesture, as the click guard reads one, so the lifts
|
|
1433
|
+
* the blur cancelled owe nothing after it. A second finger keeps the other
|
|
1434
|
+
* fingers' refusals, since those fingers may still be down.
|
|
1435
|
+
*/
|
|
1436
|
+
dropCancelledLifts(event) {
|
|
1437
|
+
const isSecond = event.pointerType === 'touch' && event.isPrimary === false;
|
|
1438
|
+
for (const [pointerId, kind] of [...this.cancelledPointers]) {
|
|
1439
|
+
if (pointerId === event.pointerId || !(isSecond && kind === 'touch')) {
|
|
1440
|
+
this.cancelledPointers.delete(pointerId);
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
/**
|
|
1446
|
+
* After a contact ends: an armed press that is over stops listening. A
|
|
1447
|
+
* contact the lost focus cancelled still owes its lift, so the press is
|
|
1448
|
+
* not over until that lift comes. A lift the page never hears ends it at
|
|
1449
|
+
* the next press, or at a cancel.
|
|
1450
|
+
*/
|
|
1424
1451
|
releaseArmedPress() {
|
|
1425
1452
|
if (!this.isArmedPress) {
|
|
1426
1453
|
return;
|
|
1427
1454
|
}
|
|
1428
1455
|
queueMicrotask(() => {
|
|
1429
|
-
if (this.isArmedPress && this.arena.touches.length === 0) {
|
|
1456
|
+
if (this.isArmedPress && this.arena.touches.length === 0 && this.cancelledPointers.size === 0) {
|
|
1430
1457
|
this.isArmedPress = false;
|
|
1431
1458
|
this.syncKeptPresses();
|
|
1432
1459
|
this.syncListeners();
|
|
@@ -1457,6 +1484,7 @@ export class GestureHost {
|
|
|
1457
1484
|
return;
|
|
1458
1485
|
}
|
|
1459
1486
|
this.cancelledFingers.clear();
|
|
1487
|
+
this.cancelledPointers.clear();
|
|
1460
1488
|
this.clearClaimedLifts();
|
|
1461
1489
|
this.cancelCallerRead?.();
|
|
1462
1490
|
this.cancelCallerRead = null;
|
|
@@ -2415,8 +2443,9 @@ export class GestureHost {
|
|
|
2415
2443
|
consumerElement
|
|
2416
2444
|
});
|
|
2417
2445
|
}
|
|
2418
|
-
// The finger's events keep going to what the engine hit.
|
|
2419
|
-
|
|
2446
|
+
// The finger's events keep going to what the engine hit. A disabled
|
|
2447
|
+
// participant can never claim, so a scroll never waits on it.
|
|
2448
|
+
this.watchTarget(touch.identifier, native, recognizers.some(recognizer => recognizer.isEnabled && claimsWhileMoving(recognizer)) || consumer?.keepsTouch != null && consumer.isEnabled?.() !== false, consumer != null && consumer.isEnabled?.() !== false || recognizers.some(recognizer => recognizer.isEnabled && recognizer.claimsTouches));
|
|
2420
2449
|
this.lastFed.set(id, {
|
|
2421
2450
|
x: touch.clientX,
|
|
2422
2451
|
y: touch.clientY,
|
|
@@ -2460,6 +2489,11 @@ export class GestureHost {
|
|
|
2460
2489
|
for (const input of untracked) {
|
|
2461
2490
|
this.arena.untrackedBegan(input);
|
|
2462
2491
|
}
|
|
2492
|
+
// Again once the new fingers are delivered: a pinch's second finger may
|
|
2493
|
+
// have landed on another one-finger pan, the next row.
|
|
2494
|
+
if (this.fingerTargets.length > 1 && !this.isFingerClaimed()) {
|
|
2495
|
+
this.failUnclaimedLoneFingerPans();
|
|
2496
|
+
}
|
|
2463
2497
|
// Stamped after the consumers judged the touch: the brake asks whether
|
|
2464
2498
|
// an EARLIER finger is still driving a scroll.
|
|
2465
2499
|
const landed = landedOn(event);
|
|
@@ -2985,6 +3019,7 @@ export class GestureHost {
|
|
|
2985
3019
|
if (!isPointerKind(event.pointerType)) {
|
|
2986
3020
|
return;
|
|
2987
3021
|
}
|
|
3022
|
+
this.dropCancelledLifts(event);
|
|
2988
3023
|
if (event.pointerType === 'touch' && this.usesTouchEvents) {
|
|
2989
3024
|
this.pairPointer(event.pointerId, {
|
|
2990
3025
|
x: event.clientX,
|
|
@@ -2993,6 +3028,13 @@ export class GestureHost {
|
|
|
2993
3028
|
});
|
|
2994
3029
|
return;
|
|
2995
3030
|
}
|
|
3031
|
+
if (event.pointerType === 'touch' && event.isPrimary === false) {
|
|
3032
|
+
// Fingers from pointer events: a second one, wherever either lands,
|
|
3033
|
+
// leaves the two to the page's pinch, as onTouchStart does. A finger
|
|
3034
|
+
// that is not the primary pointer is a second finger, even where the
|
|
3035
|
+
// host never heard the first.
|
|
3036
|
+
this.failUnclaimedLoneFingerPans();
|
|
3037
|
+
}
|
|
2996
3038
|
// A right click, a pen's barrel button, or a ctrl-click on macOS (its
|
|
2997
3039
|
// context click) starts no press (FR43).
|
|
2998
3040
|
if (event.pointerType !== 'touch' && !isPrimaryClick(event)) {
|
|
@@ -3010,6 +3052,7 @@ export class GestureHost {
|
|
|
3010
3052
|
}
|
|
3011
3053
|
const id = this.nextId++;
|
|
3012
3054
|
this.pointerIds.set(event.pointerId, id);
|
|
3055
|
+
this.pointerKinds.set(event.pointerId, event.pointerType);
|
|
3013
3056
|
if (target !== landed && target != null) {
|
|
3014
3057
|
this.retargeted.set(id, {
|
|
3015
3058
|
x: event.clientX,
|
|
@@ -3033,6 +3076,11 @@ export class GestureHost {
|
|
|
3033
3076
|
recognizers,
|
|
3034
3077
|
consumer
|
|
3035
3078
|
}]);
|
|
3079
|
+
if (event.pointerType === 'touch' && event.isPrimary === false && !this.isFingerClaimed()) {
|
|
3080
|
+
// Again once this finger is delivered: it may have landed on another
|
|
3081
|
+
// one-finger pan.
|
|
3082
|
+
this.failUnclaimedLoneFingerPans();
|
|
3083
|
+
}
|
|
3036
3084
|
if (locksSelectionFor(event.pointerType)) {
|
|
3037
3085
|
// The presented target: what the pen is on, where the engine's own
|
|
3038
3086
|
// hit test may still see the motion's start.
|
|
@@ -3079,9 +3127,14 @@ export class GestureHost {
|
|
|
3079
3127
|
}
|
|
3080
3128
|
const id = this.pointerIds.get(event.pointerId);
|
|
3081
3129
|
if (id == null) {
|
|
3130
|
+
// A contact the lost focus cancelled: its lift clicks nothing.
|
|
3131
|
+
if (this.cancelledPointers.delete(event.pointerId)) {
|
|
3132
|
+
this.refuseCancelledLift(event);
|
|
3133
|
+
}
|
|
3082
3134
|
return;
|
|
3083
3135
|
}
|
|
3084
3136
|
this.pointerIds.delete(event.pointerId);
|
|
3137
|
+
this.pointerKinds.delete(event.pointerId);
|
|
3085
3138
|
this.unlockSelection(id);
|
|
3086
3139
|
const dispositions = this.arena.ended([{
|
|
3087
3140
|
id,
|
|
@@ -3176,9 +3229,12 @@ export class GestureHost {
|
|
|
3176
3229
|
}
|
|
3177
3230
|
return;
|
|
3178
3231
|
}
|
|
3232
|
+
// A contact that ends in a cancel owes no refused lift.
|
|
3233
|
+
this.cancelledPointers.delete(event.pointerId);
|
|
3179
3234
|
const id = this.pointerIds.get(event.pointerId);
|
|
3180
3235
|
if (id != null) {
|
|
3181
3236
|
this.pointerIds.delete(event.pointerId);
|
|
3237
|
+
this.pointerKinds.delete(event.pointerId);
|
|
3182
3238
|
this.unlockSelection(id, true);
|
|
3183
3239
|
this.retargeted.delete(id);
|
|
3184
3240
|
this.arena.cancelled([id], eventTime(event));
|
|
@@ -3348,18 +3404,22 @@ export class GestureHost {
|
|
|
3348
3404
|
}
|
|
3349
3405
|
}
|
|
3350
3406
|
}
|
|
3407
|
+
/** Whether a finger's drag is claimed: then two fingers make no pinch. */
|
|
3408
|
+
isFingerClaimed() {
|
|
3409
|
+
return this.arena.touches.some(touch => touch.pointerType === 'touch' && this.arena.isClaimed(touch.id));
|
|
3410
|
+
}
|
|
3351
3411
|
onVisibilityChange = () => {
|
|
3352
3412
|
if (this.doc.visibilityState === 'hidden') {
|
|
3353
3413
|
this.cancelEverything(this.arena.now());
|
|
3354
|
-
// As at a blur:
|
|
3355
|
-
//
|
|
3414
|
+
// As at a blur: an armed press's page listeners go once nothing is left
|
|
3415
|
+
// to hear.
|
|
3356
3416
|
this.releaseArmedPress();
|
|
3357
3417
|
}
|
|
3358
3418
|
};
|
|
3359
3419
|
onBlur = () => {
|
|
3360
3420
|
this.cancelEverything(this.arena.now());
|
|
3361
|
-
//
|
|
3362
|
-
//
|
|
3421
|
+
// An armed press's page listeners go once nothing is left to hear. A pen
|
|
3422
|
+
// or a pointer-read finger the blur cancelled still owes its lift.
|
|
3363
3423
|
this.releaseArmedPress();
|
|
3364
3424
|
};
|
|
3365
3425
|
|
|
@@ -3379,8 +3439,29 @@ export class GestureHost {
|
|
|
3379
3439
|
return this.inputMode === 'pointer-events' || view != null && !('ontouchstart' in view);
|
|
3380
3440
|
}
|
|
3381
3441
|
|
|
3442
|
+
/**
|
|
3443
|
+
* The lift of a contact the lost focus cancelled: its click is refused,
|
|
3444
|
+
* and a finger's touchend after it is cancelled.
|
|
3445
|
+
*/
|
|
3446
|
+
refuseCancelledLift(event) {
|
|
3447
|
+
armClickGuard(this.doc, {
|
|
3448
|
+
takesLateMouse: event.pointerType === 'touch'
|
|
3449
|
+
});
|
|
3450
|
+
if (event.pointerType === 'touch') {
|
|
3451
|
+
// Noted as a claimed lift is: capped, and gone after its time.
|
|
3452
|
+
this.noteClaimedLift(event);
|
|
3453
|
+
}
|
|
3454
|
+
}
|
|
3455
|
+
|
|
3382
3456
|
/** The app lost focus: UIKit cancels every touch in flight. */
|
|
3383
3457
|
cancelEverything(time) {
|
|
3458
|
+
// The browser may keep a pen or a pointer-read finger down: its lift must
|
|
3459
|
+
// not click. A mouse button held through the blur keeps its click.
|
|
3460
|
+
for (const [pointerId, kind] of this.pointerKinds) {
|
|
3461
|
+
if (kind !== 'mouse') {
|
|
3462
|
+
this.cancelledPointers.set(pointerId, kind);
|
|
3463
|
+
}
|
|
3464
|
+
}
|
|
3384
3465
|
const ids = [...this.pointerIds.values()];
|
|
3385
3466
|
for (const id of ids) {
|
|
3386
3467
|
this.unlockSelection(id, true);
|
|
@@ -3394,6 +3475,7 @@ export class GestureHost {
|
|
|
3394
3475
|
}
|
|
3395
3476
|
}
|
|
3396
3477
|
this.pointerIds.clear();
|
|
3478
|
+
this.pointerKinds.clear();
|
|
3397
3479
|
this.retargeted.clear();
|
|
3398
3480
|
this.fingerPointers.clear();
|
|
3399
3481
|
this.pendingPointers.clear();
|