Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
4076bf3
spec(AST-094): touch presentations follow UIKit
vjeux Oct 24, 2026
28343b4
chore(core): the UIKit constants table for touch presentations
vjeux Oct 24, 2026
081b6c5
feat(core): gesture recognizer core — UIKit's state machine and the a…
vjeux Oct 24, 2026
f423ffe
feat(core): tap and long-press recognizers with UIKit's measured thre…
vjeux Oct 24, 2026
5cb0543
feat(core): pan gesture recognizer with UIKit's hysteresis and velocity
vjeux Oct 24, 2026
7d58f27
feat(core): swipe, pinch, rotation, screen-edge pan and hover recogni…
vjeux Oct 24, 2026
1a76704
feat(core): touch-action derivation, native scroll probe and haptics
vjeux Oct 24, 2026
cfffebf
feat(core): gesture host — claims, click suppression and the browser'…
vjeux Oct 24, 2026
0453495
feat(core): UIControl press tracking, press profiles, the press paint…
vjeux Oct 24, 2026
c784084
spec(AST-094): touch presentations feel native by default
cixzhang Oct 24, 2026
0c35c43
chore(core): the UIKit constants table for touch presentations
vjeux Oct 24, 2026
6bd2851
chore(core): the constants table names only what exists, and dates ev…
vjeux Oct 24, 2026
4b3de64
Merge main into the constants table (lab typechecks with its tests)
vjeux Oct 25, 2026
da65388
fix(gestures): the velocity tracker is INV10's one filter, with AST-1…
cixzhang Oct 25, 2026
9c93b37
Merge main (4bcd84ff07) into the pan recognizer
vjeux Oct 25, 2026
6fd1ecb
fix(core): a committed early claim keeps its touch, and a handoff nev…
vjeux Oct 25, 2026
ee93b9e
docs(spec): the draft AST-094 leaves this stack
vjeux Oct 25, 2026
e7df427
perf(core): the gesture table's sources move to JSDoc, out of the bundle
vjeux Oct 25, 2026
439dcc3
docs(spec): the draft AST-094 copy leaves this stack
vjeux Oct 25, 2026
0bf13da
Merge main (the deploy typecheck gate test reads the step as written)…
vjeux Oct 25, 2026
bbbcb60
refactor(core): the platform presets are named for their use
vjeux Oct 25, 2026
03bb055
refactor(core): a drag never changes hands midway: the pan's scrollHa…
vjeux Oct 25, 2026
99991ad
Merge main (c66a4146) into the gesture recognizer core
cixzhang Oct 25, 2026
6d0d390
Merge main into the stack (AST-094 is current on main)
cixzhang Oct 25, 2026
889eea5
Merge main (67dc45f66d3) into #8061
cixzhang Oct 25, 2026
c748639
Merge main (67dc45f66d3) into #8071
cixzhang Oct 25, 2026
03f66c3
fix(core): the UIKit table keeps only what a touch presentation plays…
cixzhang Oct 25, 2026
1133bf9
Merge remote-tracking branch 'origin/main' into m8053
cixzhang Oct 25, 2026
e8f90e8
fix(core): a two-finger double tap recognizes
cixzhang Oct 25, 2026
eded944
style(core): MEASUREMENTS.md table widths after the dropped rows
cixzhang Oct 25, 2026
4bec6a0
fix(gestures): a late timer yields to queued input, an idle cancel st…
cixzhang Oct 25, 2026
9d1c740
fix(gestures, motion): the innermost recognizer wins across fingers, …
cixzhang Oct 25, 2026
7e36bcd
fix(core): the table's notes point at what exists, and the press entr…
cixzhang Oct 25, 2026
1b06fb1
fix(core): the gesture host cancels only touches a recognizer owns, a…
cixzhang Oct 25, 2026
15b8e71
fix(gestures): the velocity tracker is INV10's one filter, with AST-1…
cixzhang Oct 25, 2026
a7591e0
fix(gestures): no early claim or scroll handoff; swipe, rotation and …
cixzhang Oct 25, 2026
1f751c9
docs(core): M-S2 feeds scroll.decelerationRate, where the coast readi…
cixzhang Oct 25, 2026
2823695
fix(gestures): the tap haptic keeps focus and the label's control; se…
cixzhang Oct 25, 2026
e43824f
fix(gestures): a code cancel keeps the event clock, simultaneity need…
cixzhang Oct 25, 2026
08415d1
Merge main (8c3f3bea) into UIControl press tracking
cixzhang Oct 25, 2026
0032cb6
Merge main (#8043, #7308 landed) into the UIKit constants table
cixzhang Oct 25, 2026
dd8720e
fix(gestures): a cell highlights at once outside a scroll view, and t…
cixzhang Oct 25, 2026
927e70d
fix(gestures): pinch and rotation velocity settles; the swipe reads t…
cixzhang Oct 25, 2026
eb27e2b
fix(gestures): a lift settles the waiting recognitions it decides bef…
cixzhang Oct 25, 2026
56fe65d
fix(gestures): the scroll probe follows a slotted node into its shado…
cixzhang Oct 25, 2026
e067db3
fix(gestures): a screen-edge pan from one edge leaves the browser eve…
cixzhang Oct 25, 2026
ce07485
Merge #8053 (0032cb6a7f: the UIKit table in its sourced, dated form) …
vjeux Oct 25, 2026
8f65477
fix(core): the pan's early-claim distance is a dated entry of the UIK…
vjeux Oct 25, 2026
e039480
test(core): the scroll release reproduces UIKit's on four recorded UI…
vjeux Oct 26, 2026
1ca9754
Merge main (99ad3f6d, the constants table landed) into the gesture re…
cixzhang Oct 26, 2026
789b028
Merge #8058 (main with the #8053 tables resolved) into the tap and lo…
cixzhang Oct 26, 2026
c5909e4
Merge #8059 (main with the #8053 tables resolved) into the pan recogn…
cixzhang Oct 26, 2026
2567700
Merge main (99ad3f6d906) into the gesture recognizers
cixzhang Oct 26, 2026
7537284
Merge #8061's resolved head (25677005) into browser negotiation
cixzhang Oct 26, 2026
61115f9
fix(gestures): a wrapped control keeps its name under the tap haptic;…
cixzhang Oct 26, 2026
555a186
fix(core): a touch the browser took is never kept by a claiming recog…
cixzhang Oct 26, 2026
2d98530
fix(gestures): no claim on a touch the browser took, one settle per e…
cixzhang Oct 26, 2026
cf16042
fix(core): the long press's taps phase counts only quick taps with it…
cixzhang Oct 26, 2026
bb9f7a6
Merge 61115f9fa2 (#8071 resolved against main) as a dependency
cixzhang Oct 26, 2026
17cac8d
Merge 253fe637a0 (main) as a dependency
cixzhang Oct 26, 2026
d28dcb8
Merge #8058 (round-5 arena fixes) into the tap and long-press recogni…
cixzhang Oct 26, 2026
03fac3f
fix(core): the gesture host turns selection and the callout off for o…
cixzhang Oct 26, 2026
63df69a
Merge #8072 (03fac3f2: the resolved gesture host on main) into UICont…
cixzhang Oct 26, 2026
fb20886
Merge #8058 (2d985307: the gesture core's round-five fixes) into UICo…
cixzhang Oct 26, 2026
c23b4fa
Merge #8059 (d28dcb8d) into the pan recognizer; the pan claims nothin…
cixzhang Oct 26, 2026
a313e3b
fix(gestures): the barrel no longer exports the removed VelocityStrat…
cixzhang Oct 26, 2026
2c3b0fe
Merge #8060 (c23b4fa5: the claim at the begin, the browser-taken rule…
cixzhang Oct 26, 2026
4a231f9
Merge #8060's resolved head (c23b4fa5) into the gesture recognizers
cixzhang Oct 26, 2026
c9ffc9d
test(gestures): a waiting recognition that fails on its re-attempt gi…
cixzhang Oct 26, 2026
83193a7
Merge #8061's head (4a231f97) into browser negotiation
cixzhang Oct 26, 2026
b1b7df4
Merge 83193a7bf2 (#8071 on #8061's 4a231f97) as a dependency
cixzhang Oct 26, 2026
601be15
Merge e9b3f3edac (main) as a dependency
cixzhang Oct 26, 2026
9976982
fix(core): the long press's taps-phase bounds name their measurement;…
cixzhang Oct 26, 2026
3a2e069
Merge #8059 (9976982b: the taps-phase measurement named, FR10 test) i…
cixzhang Oct 26, 2026
52e62af
docs(core): the per-press selection lock cites spec:AST-094 FR41 and …
cixzhang Oct 26, 2026
a8ebaca
Merge #8060's head (3a2e0696) into the gesture recognizers
cixzhang Oct 26, 2026
685fc5e
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
18cb680
Merge #8072 (52e62afa: the per-press lock on #8071 and main) into UIC…
cixzhang Oct 26, 2026
9e234f6
Merge #8060 (3a2e0696: with #8059 9976982b) into UIControl press trac…
cixzhang Oct 26, 2026
de4736c
fix(gestures): a deadline inside a re-entrant entry settles with the …
cixzhang Oct 26, 2026
03209de
Merge main (16770e30, the per-group UIKit table) into the gesture rec…
cixzhang Oct 26, 2026
f4d9e0e
Merge 685fc5e05f (#8071 on #8061's a8ebacad) as a dependency
cixzhang Oct 26, 2026
4e0edaf
Merge #8058 (main with the per-group UIKit table, #8468; re-entrant s…
cixzhang Oct 26, 2026
e227218
Merge #8072 (f4d9e0e0: on lane 4's #8071) into UIControl press tracking
cixzhang Oct 26, 2026
0466e28
Merge #8058 (03209de6: main with the per-group UIKit table) into UICo…
cixzhang Oct 26, 2026
411c960
Merge #8059 (4e0edafa: main's per-group UIKit table) into the pan rec…
cixzhang Oct 26, 2026
22a166d
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
6350b02
Merge #8060's head (411c9607) into the gesture recognizers
cixzhang Oct 26, 2026
05db673
Merge 22a166dc91 (#8071 with main's per-group table) as a dependency
cixzhang Oct 26, 2026
1a789ff
docs(core): the gesture host's header no longer describes the early c…
cixzhang Oct 26, 2026
82cb12d
docs(core): the pan's 10 pt begin is spec:AST-094 FR17
cixzhang Oct 26, 2026
9cf5820
fix(core): a pan decides by its 10 px begin, whatever its axisRatio
cixzhang Oct 26, 2026
7f74dd1
fix(gestures): a disabled hook gesture attaches nothing, and usePress…
cixzhang Oct 26, 2026
d61e266
fix(gestures): a control in a fixed bar is not inside a scroll view
cixzhang Oct 26, 2026
cead4e6
Merge d61e266cd5 (#8071: a control in a fixed bar is not in a scroll …
cixzhang Oct 26, 2026
6d884e7
Merge 6322d94dbf (main) as a dependency
cixzhang Oct 26, 2026
7f712c4
perf(core): the pan and the velocity tracker import only their own ta…
cixzhang Oct 26, 2026
d0d2dbc
Merge main (#8058 landed) into the pan recognizer
cixzhang Oct 26, 2026
c2b3dc2
fix(core): the gesture host listens only where the primary pointer is…
cixzhang Oct 26, 2026
9b518eb
Merge #8060's head (d0d2dbce) into the gesture recognizers
cixzhang Oct 26, 2026
9afe78e
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
7e5c4fa
Merge 9afe78ef24 (#8071 with main, #8058 and #8054 landed) as a depen…
cixzhang Oct 26, 2026
99b47ce
Merge main (#8059 landed) into the pan recognizer
cixzhang Oct 26, 2026
858d0e7
Merge #8072 (main b298b37d with the landed gesture recognizer core) i…
vjeux Oct 26, 2026
447db56
Merge #8060's head (99b47ce5) into the gesture recognizers
cixzhang Oct 26, 2026
8faa78c
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
b0c024a
Merge 8faa78c72a (#8071 with main, #8059 landed) as a dependency
cixzhang Oct 26, 2026
74221f0
test(core): the press-tracking tests declare a coarse primary pointer
vjeux Oct 26, 2026
606e815
fix(core): a disabled press consumer does not make the gesture host l…
cixzhang Oct 26, 2026
e6548b9
Merge #8072 (606e8159: main through #8059, the fixed-bar fix, listene…
cixzhang Oct 26, 2026
8f50e29
Merge #8072 (606e815973: main 19a7a463cc with the landed tap and long…
vjeux Oct 26, 2026
1f991af
fix(gestures): a disabled press tracker gives the host no listener
cixzhang Oct 26, 2026
51192ab
Merge main (cd4aca6453, #8060 squashed) into press tracking
vjeux Oct 26, 2026
2817ba4
Merge vjeux's #8073 head (51192abe: #8072 606e8159 and main with #806…
cixzhang Oct 26, 2026
4984fb6
Merge main (a17ee0a801e) into the gesture recognizers
cixzhang Oct 26, 2026
1313a0e
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
6929751
Merge 1313a0e09d (#8071 with main, #8060 landed) as a dependency
cixzhang Oct 26, 2026
1f79091
fix(core): the gesture host writes touch-action only where the primar…
cixzhang Oct 26, 2026
c0aea9b
refactor(core): one press machine and paint: pressPaint and the deleg…
vjeux Oct 25, 2026
4155755
fix(gestures): recognizers read their own UIKit table groups; Hover c…
cixzhang Oct 26, 2026
5b7d1eb
Merge #8061's head into browser negotiation
cixzhang Oct 26, 2026
29578a0
Merge 5b7d1ebb04 (#8071 with #8061's per-group table imports) as a de…
cixzhang Oct 26, 2026
0a5b023
Merge 4adaeda939 (main) as a dependency
cixzhang Oct 26, 2026
eca0738
Merge #8072 (0a5b023e: touch-action only on a coarse pointer, #8071 5…
cixzhang Oct 26, 2026
95daacd
refactor(core): the gesture host drops the delegated consumer, which …
cixzhang Oct 26, 2026
c4bc6f8
fix(gestures): the tap haptic gives a disabled control no feedback
cixzhang Oct 26, 2026
e71ad6a
Merge c4bc6f8f70 (#8071: the FR23 disabled-control haptic fix) as a d…
cixzhang Oct 26, 2026
acbf411
Merge 51a0d3cca9 (main) as a dependency
cixzhang Oct 26, 2026
a1813b9
Merge #8072 (acbf411a: #8071 c4bc6f8f, the FR23 haptic fix, and main)…
cixzhang Oct 26, 2026
61e891d
fix(core): the gesture host watches the pointer kind only while somet…
cixzhang Oct 26, 2026
c34bf73
fix(gestures): the hooks follow a replaced node, name what each Effec…
cixzhang Oct 26, 2026
8a8ac32
Merge #8072 (61e891d7: the pointer-kind listener only while something…
cixzhang Oct 26, 2026
347f0ac
fix(core): a finger on page content reaches tracking recognizers as b…
cixzhang Oct 26, 2026
b600a78
Merge #8072 (347f0aca: FR28 began-elsewhere for untracked fingers, FR…
cixzhang Oct 26, 2026
3846b6a
Merge main 70ea85903c into #8073
vjeux Oct 28, 2026
10c62f5
test(core): a mouse press ending early leaves a held row to its owner
vjeux Oct 28, 2026
fdf8766
fix(core): a press ended early clears its paint through the one writer
vjeux Oct 28, 2026
63128d3
test(core): pressFeedback.test.ts drops its unused durationToMs import
vjeux Oct 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/gesture-browser-negotiation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: touch-action derivation, the native scroll probe and haptics for the gesture system. Not exported from the package entry point; no component uses them yet.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/gesture-host.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: the gesture system's DOM host (claims, click suppression, the browser's takeover, the pointer behind a contact). Not exported from the package entry point; no component uses it yet.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/gesture-press-tracking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: UIControl press tracking with control and cell profiles and the gesture hooks, with every press painter writing `data-astryx-press` through one internal writer in `utils/pressFeedback.ts`. Not exported from the package entry point; no component uses them yet.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hooks/actionGroupTracker.ts still writes data-astryx-press directly, with its own fade clock, so "every press painter ... through one internal writer" is not true yet. Either route its paint, cut and release through paintPress, or narrow this sentence.


@vjeux
7 changes: 7 additions & 0 deletions .changeset/gesture-swipe-pinch-rotation-edge-hover.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: swipe, pinch, rotation, screen-edge pan and hover gesture recognizers. Not exported from the package entry point; no component uses them yet.

@vjeux
35 changes: 35 additions & 0 deletions packages/core/src/gestures/GestureArena.ts
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,41 @@ export class GestureArena {
});
}

/**
* A contact began where nothing takes part (plain page content). It is
* never tracked and stays the browser's; recognizers already tracking a
* gesture hear of it, as of any touch off their hit path.
*/
untrackedBegan(input: TouchBeganInput): void {
if (!this.active.some(recognizer => recognizer.numberOfTouches > 0)) {
return;
}
this.run(input.time, () => {
const time = this.clampTime(input.time);
const touch: GestureTouch = {
id: input.id,
pointerType: input.pointerType,
phase: 'began',
x: input.x,
y: input.y,
time,
startX: input.x,
startY: input.y,
startTime: time,
samples: [{x: input.x, y: input.y, time}],
target: input.target,
scroll: input.scroll ?? null,
takenByBrowser: false,
};
const context = this.context();
for (const recognizer of [...this.active]) {
if (recognizer.numberOfTouches > 0) {
recognizer.deliverBeganElsewhere([touch], context);
}
}
});
}

/** Contacts moved. */
moved(inputs: ReadonlyArray<TouchInput>): void {
if (inputs.length === 0) {
Expand Down
Loading