Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
1193 commits
Select commit Hold shift + click to select a range
02bda5a
test(gestures): attaching reads no computed style
vjeux Oct 26, 2026
1ba08fd
perf(gestures): attaching reads no computed style
vjeux Oct 26, 2026
3a8ee21
Merge #8309 (#8076 4adaf8b77e; the lock after admission; no style rea…
vjeux Oct 26, 2026
3d201a0
Merge main (#8257: the touch motion roles are internal) into the moti…
cixzhang Oct 26, 2026
f581948
Merge 3d201a04ee (#8056 with main through #8257's landing) as a depen…
cixzhang Oct 26, 2026
c1c522b
docs(core): each gesture hook Effect names what it syncs
vjeux Oct 26, 2026
8cd46df
docs(motion): the animator, README, reducedMotionFade and the browser…
cixzhang Oct 26, 2026
54561a1
Merge #8067 (f581948d) into the motion-role animator
cixzhang Oct 26, 2026
2ed832f
perf(keyboard): one layout read per keyboard change, shared by every …
vjeux Oct 26, 2026
7c8672b
fix(ChatLayout): a text control composer tapped with nothing focused …
vjeux Oct 26, 2026
3b3fc77
docs(ChatLayout): the composer rides in step in Safari; in Firefox an…
vjeux Oct 26, 2026
1e1b7bd
fix(motion): a hidden element lends no borrow, and a stop that finish…
cixzhang Oct 26, 2026
efdffbe
refactor(interaction): the animation-state waits move to their own pu…
cixzhang Oct 26, 2026
c833823
feat(interaction): animation-state waits for interaction proofs
cixzhang Oct 26, 2026
89614c7
Merge main (2af4d305: #8257, the motion roles internal) into the anim…
cixzhang Oct 26, 2026
bd9246d
Merge main (2af4d305) into the experimental touch layer
cixzhang Oct 26, 2026
5d9e4ec
Merge #8055 (89614c7f: a hidden element lends no borrow; a stop that …
cixzhang Oct 26, 2026
7b26ef2
Merge 5d9e4ec203 (#8056 on #8055's 89614c7f with a pseudo-element fix…
cixzhang Oct 26, 2026
af953bd
Merge #8076 (bd9246df: main 2af4d305 with #8257) into the keyboard mo…
cixzhang Oct 26, 2026
b61b264
docs(motion): coast's edge spring plays its table value; scroll.bounc…
cixzhang Oct 26, 2026
4051fac
Merge #8073 (8a8ac32170: the hooks follow a replaced node and name th…
vjeux Oct 26, 2026
94cc596
Merge #8176 (af953bdb: #8076 and main 2af4d305) into the Popover's gr…
cixzhang Oct 26, 2026
370c4d9
Merge #8067 (7b26ef27: #8056 5d9e4ec2, #8055 89614c7f) into the motio…
cixzhang Oct 26, 2026
e0a88c4
Merge the maintainer's #8176 head (af953bdb9f) into the keyboard module
vjeux Oct 26, 2026
e084460
Merge bd9246df2e (#8076 with main) as a dependency
cixzhang Oct 26, 2026
f0235bd
Merge #8176 (e0a88c4f08) into the Chrome-on-Android ride
vjeux Oct 26, 2026
3ccbd7a
test(core): drop the delegated-pressable selection case; the host no …
cixzhang Oct 26, 2026
2a0d065
Merge #8309 (3ccbd7a2: #8076 bd9246df, main, the host's injected lock…
cixzhang Oct 26, 2026
7d09c3c
docs(ChatLayout): in Chrome on Android the composer rides Gboard's sl…
vjeux Oct 26, 2026
999ef1b
Merge #8076 bd9246df2e (main 2af4d305a6)
vjeux Oct 26, 2026
b2fe2a3
Merge #8076 (bd9246df2e: main 2af4d305a6) into #8270
vjeux Oct 26, 2026
25bf6c7
Merge #8270 (#8076 bd9246df2e) into #8309
vjeux Oct 26, 2026
0b38f82
Merge cixzhang's #8309 head (3ccbd7a2ab: #8076 bd9246df2e merged in, …
vjeux Oct 26, 2026
0325b2e
test(gestures): the gesture host bundles only the UIKit groups it reads
vjeux Oct 26, 2026
7798802
perf(gestures): the gesture host imports only the press and click groups
vjeux Oct 26, 2026
38a06d4
Merge #8309 (#8076 bd9246df2e; her restack; the host's per-group impo…
vjeux Oct 26, 2026
31576f6
Merge cixzhang's #8315 head (2a0d0650e3: her #8309 restack)
vjeux Oct 26, 2026
993a4ca
Merge #8315 (2a0d0650: #8309, #8076 bd9246df, main 2af4d305) into the…
cixzhang Oct 26, 2026
04ff5dc
Merge 993a4ca926 (#8336 resolved against main through #8315 and #8309…
cixzhang Oct 26, 2026
7f48c36
perf(core): the gesture host reads the haptic switch's marker from a …
cixzhang Oct 26, 2026
15c71e1
fix(motion): a release past an edge springs back as a Reduce Motion c…
cixzhang Oct 26, 2026
83c36b4
Merge #8309 (7f48c369: the haptic switch marker in its own module) in…
cixzhang Oct 26, 2026
2bcd5b2
docs(interaction): the waits read a run reversed before it starts; a …
cixzhang Oct 26, 2026
3c0d8a0
Merge #8055 (15c71e1f: under Reduce Motion a coast's spring back is a…
cixzhang Oct 26, 2026
e8b0bb6
Merge main (#8044 landed) into the animation-state waits
cixzhang Oct 26, 2026
7f84cbf
Merge #8315 (83c36b4b: #8309's haptic switch marker in its own module…
cixzhang Oct 26, 2026
2c57208
Merge #8258 (370c4d9e: the roles' table values in the docs; #8067 thr…
vjeux Oct 26, 2026
b5931a5
Merge cixzhang's #8309 head (7f48c369b5: the haptic switch marker in …
vjeux Oct 26, 2026
1e5d0f4
refactor(core): the plan's stop needs no step-segment landing; the st…
cixzhang Oct 26, 2026
907abe9
Merge #8309 (her haptic switch marker module folded) into #8315
vjeux Oct 26, 2026
d10bbf0
Merge cixzhang's #8315 head (83c36b4b06: her #8309 merge)
vjeux Oct 26, 2026
16d3f24
Merge 1e5d0f4f98 (#8056: the dead stop() step-segment block removed) …
cixzhang Oct 26, 2026
4eac57c
Merge #8505 (e8b0bb62: main with #8044, plus the animation-state wait…
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
772a4b5
Merge #8348 (main with #8044 and #8505's waits) into the frame evidence
cixzhang Oct 26, 2026
7d946d2
Merge #8045 (main with #8044 and #8505's waits) into the recorder sta…
cixzhang Oct 26, 2026
e028c36
fix(Popover): a touch that lands while the popover grows takes no inp…
cixzhang Oct 26, 2026
ee34b25
Merge #8446 (7d946d25: the harness line on main with #8505's waits) i…
cixzhang Oct 26, 2026
b5f71bd
test(Popover): FR35 in a real engine: a tap or drag during the grow r…
cixzhang Oct 26, 2026
355a456
Merge 7d946d259b (#8446 resolved against main, #8044 landed) as a dep…
cixzhang Oct 26, 2026
c4412ab
Merge 5b691cda71 (main) as a dependency
cixzhang Oct 26, 2026
effe685
docs(motion): decay's docs and the changeset say a transition curve c…
cixzhang Oct 26, 2026
6da19c0
Merge ee34b25079 (#8076 with the resolved harness line, #8446 7d946d2…
cixzhang Oct 26, 2026
dd8e946
Merge 5b691cda71 (main) as a dependency
cixzhang Oct 26, 2026
75f0d8b
Merge #8270 (#8076 ee34b25079: main 4444d70bd7) into #8309
vjeux Oct 26, 2026
c0215ae
Merge #8076 (ee34b25079: main 4444d70bd7 with #8505's waits, through …
vjeux Oct 26, 2026
ac3a7bc
Merge #8309 (#8076 ee34b25079: main 4444d70bd7) into #8315
vjeux Oct 26, 2026
66232e6
Merge #8073 and #8258 (2c572082: #8073's hooks follow a replaced node…
vjeux Oct 26, 2026
0d1a829
Merge #8073 (b600a78a: began-elsewhere for untracked fingers and a re…
vjeux Oct 26, 2026
571f088
fix(interaction): openStory turns Storybook's highlight module off
vjeux Oct 26, 2026
4c41132
fix(interaction): a trace sets apart only the harness's own reads, ne…
vjeux Oct 26, 2026
2665e5a
Merge #8270 (the host header and changeset without delegated consumer…
vjeux Oct 26, 2026
dc7a77c
docs(core): the host header and the press changeset describe no deleg…
vjeux Oct 26, 2026
2a44226
Merge #8309 into #8315
vjeux Oct 26, 2026
b9c536f
Merge #8309 (dd8e9462: #8076 ee34b250 with the harness line, main) in…
cixzhang Oct 26, 2026
c22ce07
fix(gestures): a keepsTouch press tracker keeps only the touch whose …
cixzhang Oct 26, 2026
24ce396
Merge #8315 (b9c536ff: #8309 dd8e9462, #8076 ee34b250, the resolved h…
cixzhang Oct 26, 2026
9320644
fix(interaction): a wait keeps waiting while the action's animation i…
cixzhang Oct 26, 2026
ad52891
docs(gestures): the host header drops the delegated-consumer paragraph
cixzhang Oct 26, 2026
7ad0455
fix(motion): a held identity follows a node replacement, a mixed rele…
cixzhang Oct 26, 2026
156e4b3
test(interaction): openStory's highlight self-test runs in both engines
vjeux Oct 26, 2026
f60e87d
Merge #8055 (7ad0455a: held identities follow a node replacement; one…
cixzhang Oct 26, 2026
6eb2193
Merge f60e87d2cd (#8056 on #8055's 7ad0455a: held identities across a…
cixzhang Oct 26, 2026
86ac77d
Merge 79a7a902b8 (main) as a dependency
cixzhang Oct 26, 2026
a2ea848
Merge #8270 (main 5b691cda71) into #8309
vjeux Oct 26, 2026
50f39fb
Merge cixzhang's #8309 head (dd8e9462f5: #8076 ee34b25079 and main 5b…
vjeux Oct 26, 2026
d0200c3
Merge main (5b691cda71) into #8270, as cixzhang's #8309 does
vjeux Oct 26, 2026
e84b0ad
Merge #8309 (her third pass folded: #8076 ee34b25079, main 5b691cda71…
vjeux Oct 26, 2026
f8faec3
Merge cixzhang's #8315 head (b9c536ffab: her #8309 merge)
vjeux Oct 26, 2026
9d5c20a
fix(interaction): a traced waitForRest skips scroll- and view-timelin…
cixzhang Oct 26, 2026
747d441
fix(Popover): the input hold typechecks; FR35's browser test taps 47 …
cixzhang Oct 26, 2026
b4234d7
Merge #8505 (9320644717: a wait keeps waiting while the action's anim…
vjeux Oct 26, 2026
6c30869
docs(layer-runtime): Current gaps takes main's INV14/INV15 paragraph
cixzhang Oct 26, 2026
20d2b93
Merge #8076 (ee34b250: the harness line from #8446) into the keyboard…
cixzhang Oct 26, 2026
f995023
Merge main (79a7a902) into the keyboard module
cixzhang Oct 26, 2026
cb907b7
fix(interaction): the busy verdict judges a sparse cast from its firs…
vjeux Oct 26, 2026
462d82c
fix(interaction): a scroll- or view-timeline animation does not hold …
cixzhang Oct 26, 2026
626bceb
test(interaction): the trace verdict's fixture carries devtoolsTasks,…
cixzhang Oct 26, 2026
58d5392
Merge #8176 (626bceb6: #8076 ee34b250's harness line and main 79a7a90…
cixzhang Oct 26, 2026
cf97fc4
Merge #8176 (626bceb6b0) into the Chrome-on-Android ride
vjeux Oct 26, 2026
07423cb
fix(gestures): a kept press keeps only the touch it tracks
cixzhang Oct 26, 2026
8fc7f2e
docs(motion): the animator's SYNC list and test header name only file…
cixzhang Oct 26, 2026
0543b78
Merge #8446 (9d5c20a8: the harness line on #8505's waits) into useAni…
vjeux Oct 26, 2026
2fed42c
Merge #8076 0d1a829741 (main 4444d70bd7 with #8446, #8073, #8258)
vjeux Oct 26, 2026
a94a00f
revert(Popover): the grow-time input hold leaves this pull request
cixzhang Oct 26, 2026
79dc151
Merge #8055 (8fc7f2ef: coast says a transition lands at once on a fin…
cixzhang Oct 26, 2026
1fde85a
docs(core): the gestures README says a cell's highlight waits only in…
vjeux Oct 26, 2026
a4b10f9
Merge 79dc151e53 (#8056 on #8055's 8fc7f2ef: the Reduce Motion change…
cixzhang Oct 26, 2026
1fe597d
refactor(core): the animator's Reduce Motion planner is its own module
cixzhang Oct 26, 2026
dbac844
Merge #8076 (0d1a829741) into the Chrome-on-Android ride
vjeux Oct 26, 2026
b33685a
refactor(core): play(curves) and pseudo-element support move to stack…
cixzhang Oct 26, 2026
fa62e29
feat(core): the animator plays any closed-form curve
cixzhang Oct 26, 2026
2cb04fe
feat(core): the animator drives a pseudo-element
cixzhang Oct 26, 2026
803e6d6
test(interaction): the long-task self-test judges the harness read, n…
vjeux Oct 26, 2026
fa8c8e2
Merge #8505 (462d82caaf: a scroll- or view-timeline animation does no…
vjeux Oct 26, 2026
1ffb20e
Merge branch 'interaction-harness-3-frames' into uikit/f3-recorder-st…
vjeux Oct 26, 2026
d62bc30
perf(utils): the scrollbar thickness is measured once per document an…
vjeux Oct 26, 2026
1aaeddc
docs(changeset): in Chrome the composer moves once reported, and a Ta…
vjeux Oct 26, 2026
a9be409
fix(interaction): a scroll-driven animation at its end is not a finis…
cixzhang Oct 26, 2026
c2bc85e
Merge 2cb04fe6f6 (#8522, the top of #8056's split: core, play(curves)…
cixzhang Oct 26, 2026
c97ab3d
Merge f1b4c05434 (main) as a dependency
cixzhang Oct 26, 2026
c84803b
Merge #8505 (a9be409b35: a scroll-driven animation at its end is not …
vjeux Oct 26, 2026
6efc091
fix(Popover): a fine-pointer open releases the touch presentation's l…
cixzhang Oct 26, 2026
97a16c5
Merge #8287 (dbac8444ff) into the keyboard module: Chrome on Android …
vjeux Oct 26, 2026
84ea877
Merge main (30a4a2b3: #8055 landed) into the animator's Reduce Motion…
cixzhang Oct 26, 2026
3cb158a
Merge #8056 (main with #8055 landed) into play(curves)
cixzhang Oct 26, 2026
f0819b9
Merge #8521 (main with #8055 landed) into pseudo-element support
cixzhang Oct 26, 2026
f9f1162
Merge f0819b956e (#8522 with main through #8055's landing) as a depen…
cixzhang Oct 26, 2026
041b4dc
fix(gestures): a watcher cancels no press under it; a page hold keeps…
cixzhang Oct 26, 2026
dcfecc9
Merge #8067 (f9f1162c: #8522, main through #8055) into the motion-rol…
cixzhang Oct 26, 2026
2267ee5
Merge #8258 (dcfecc93: #8067 f9f1162c, main through #8055) into the e…
cixzhang Oct 26, 2026
b84bcfc
refactor(core): drop the animator's unused TRAVEL alias
cixzhang Oct 26, 2026
4a62aad
fix(keyboard): one reveal-pan watch puts a browser's own pan back, fo…
vjeux Oct 26, 2026
24336ad
Merge 2267ee5154 (#8076 with main through #8055's landing, via #8067 …
cixzhang Oct 26, 2026
739aa81
Merge dbcfc30f7a (main) as a dependency
cixzhang Oct 26, 2026
df04ef9
Merge #8076 2267ee5154 (main through #8055)
vjeux Oct 26, 2026
5fcd00f
Merge #8076 (2267ee5154) into the keyboard module
vjeux Oct 26, 2026
09aa3f1
Merge #8076 (2267ee5154: #8073's fold with her b600a78a, main through…
vjeux Oct 26, 2026
1346af4
docs(core): the gestures README gives a control's release the shared …
vjeux Oct 26, 2026
02ff48f
fix(interaction): a watch stamps after the newest entry, and an exit …
cixzhang Oct 26, 2026
a9208c4
test(core): the FR30 own-scroll case moves its finger past the press …
cixzhang Oct 26, 2026
1d7254a
Merge #8309 (a9208c41: #8076 2267ee51, main through #8055) into the g…
cixzhang Oct 26, 2026
7847980
test(core): the animator's tests drop an unused import and binding
cixzhang Oct 26, 2026
528dd2d
fix(interaction): after an on-screen start, the busy verdict judges t…
vjeux Oct 26, 2026
e05cdd1
Merge #8505 (02ff48fafe: a watch stamps after the newest entry, and a…
vjeux Oct 26, 2026
e1dfdff
fix(gestures): the arena reaches deliverBeganElsewhere through intern…
cixzhang Oct 26, 2026
2ce2286
docs(Popover): the dismissal cites the shared exit copy as main's lay…
cixzhang Oct 26, 2026
154fa40
Merge #8315 (e1dfdff9: #8309 a9208c41, #8076 2267ee51, main through #…
cixzhang Oct 26, 2026
4693f5e
docs(keyboard): rewrap two file headers the fold left uneven
vjeux Oct 26, 2026
b814769
fix(core): under Reduce Motion a move lands only while the element is…
cixzhang Oct 26, 2026
97d0182
docs(Popover): the touch layer cites component-style-authoring INV6 a…
cixzhang Oct 26, 2026
2a5fd52
Merge #8186 (df04ef94: the layer runtime's exit copy and its INV13 re…
cixzhang Oct 26, 2026
5a59ef2
fix(gestures): a page hold judges a new touch afresh when it reuses a…
cixzhang Oct 26, 2026
92f1ef6
docs(layer-runtime): Current gaps notes Popover's latched anchored pr…
cixzhang Oct 26, 2026
d1b07a4
Merge #8045 (e05cdd163a, on #8505 02ff48fafe) into the recorder stand…
vjeux Oct 26, 2026
d68ab87
Merge #8336 (5a59ef2e17) into #8342
vjeux Oct 26, 2026
595b5c3
Merge #8076 (1346af4990: the README's control release and test list, …
vjeux Oct 26, 2026
14e78e0
Merge #8270 (09aa3f1883 with #8076 1346af4990: the README's control r…
vjeux Oct 26, 2026
363a213
Merge #8309 (#8270 09aa3f1883, #8076 1346af4990) into #8315
vjeux Oct 26, 2026
3044718
Merge #8315 (#8270 09aa3f1883, #8076 1346af4990) into #8336
vjeux Oct 26, 2026
51688cd
fix(interaction): waitForAnimation and a watch's started() stand down…
vjeux Oct 26, 2026
274ee1b
fix(core): a handle's stop freezes its waiting Reduce Motion travel w…
cixzhang Oct 26, 2026
93c611d
Merge main (#8505 landed) into the storyboards
cixzhang Oct 26, 2026
79aa498
Merge #8348 (main with #8505 landed) into the frame evidence
cixzhang Oct 26, 2026
63218c8
Merge #8045 (main with #8505 landed) into the recorder stand-down
cixzhang Oct 26, 2026
0400cb2
Merge #8446 (63218c8a: the harness line on main 42a30b47 with #8505) …
cixzhang Oct 26, 2026
0c7ff0c
docs(Popover): its changeset says Popover is the exit copy's first user
cixzhang Oct 26, 2026
6c68865
Merge 0400cb2e4d (#8076 with main through #8055's landing) as a depen…
cixzhang Oct 26, 2026
0ba0b6b
fix(Layer): embedded content stands in the exit copy as an empty box …
cixzhang Oct 26, 2026
5695479
Merge #8186 (0ba0b6b9: the exit copy leaves embedded content as empty…
cixzhang Oct 26, 2026
a865057
Merge 6c688655c6 (#8270 with #8076 0400cb2e and main 42a30b47) as a d…
cixzhang Oct 26, 2026
d6a5845
Merge #8309 (a8650574: #8076 0400cb2e with the harness line on main) …
cixzhang Oct 26, 2026
7f36229
fix(core): a carried Reduce Motion move keeps its own call
cixzhang Oct 26, 2026
e14f901
Merge #8076 (0400cb2e: the harness line on main 42a30b47 with #8505) …
cixzhang Oct 26, 2026
67fc000
test(gestures): the host never writes a touch-action wider than the a…
vjeux Oct 26, 2026
0648297
fix(gestures): the host reads an author's touch-action in the next fr…
vjeux Oct 26, 2026
610b9c1
test(gestures): the press tracker bundle carries only the UIKit group…
vjeux Oct 26, 2026
672ed7d
perf(gestures): the press tracker imports only the UIKit groups it reads
vjeux Oct 26, 2026
dfcb2b4
test(gestures): a press tracker disabled under the finger reports not…
vjeux Oct 26, 2026
fbf8258
fix(gestures): a press tracker disabled under the finger ends its pre…
vjeux Oct 26, 2026
8aa1d23
Merge #8309 (the next-frame author read; the press tracker's per-grou…
vjeux Oct 26, 2026
2c2397b
Merge #8315 (d6a58453: #8309 a8650574, #8076 0400cb2e with #8446, mai…
cixzhang Oct 26, 2026
0616e1f
Merge #8176 (e14f901e: #8076 0400cb2e with #8446's harness line, main…
cixzhang Oct 26, 2026
500f3ca
docs(gestures): the haptic switch's label rule says what the code does
vjeux Oct 26, 2026
38aa181
Merge #8315 (#8309's next-frame author read; a tracker disabled under…
vjeux Oct 26, 2026
8588156
test(gestures): the host-line cases take the frame the host writes to…
vjeux Oct 26, 2026
5ad1170
fix(interaction): the WebKit container runs as the invoking user unde…
cixzhang Oct 26, 2026
49460a6
docs(interaction): a traced waitForAnimation on a CSS @keyframes anim…
cixzhang Oct 26, 2026
c32c2ba
Merge 2c2397b981 (#8336 on #8315 d6a58453) as a dependency
cixzhang Oct 26, 2026
66cef6e
Merge #8336 (8588156218) into #8342
vjeux Oct 26, 2026
1a40c3a
fix(core): a held call still finds its start; a caught dismissal fade…
cixzhang Oct 26, 2026
eef7532
test(gestures): the host marks a recognizer's touch-action under a ru…
vjeux Oct 26, 2026
38ea7d9
fix(interaction): rootless docker runs the WebKit container without -…
cixzhang Oct 26, 2026
7c8aea9
test(gestures): in a browser, the host's touch-action is in force fro…
vjeux Oct 26, 2026
fd4d2c4
perf(gestures): the host marks a recognizer's touch-action under a ru…
vjeux Oct 26, 2026
19797f8
Merge #8309 (the touch-action mark under a rule an author rule outran…
vjeux Oct 26, 2026
57db055
Merge #8315 (#8309's touch-action mark under a rule an author rule ou…
vjeux Oct 26, 2026
b9a08c5
test(gestures): the host-line cases read the host's touch-action mark
vjeux Oct 26, 2026
9bf354f
test(gestures): a hold's selection lock suppresses a link's callout, …
vjeux Oct 26, 2026
730b103
fix(gestures): a hold's selection lock suppresses a link's callout, a…
vjeux Oct 26, 2026
215f031
fix(core): a waiting Reduce Motion call whose own opacity a later cal…
cixzhang Oct 26, 2026
7f0f5c4
docs(interaction): waitForAnimation's JSDoc names the CSS @keyframes …
vjeux Oct 26, 2026
5712c49
Merge #8348 (38ea7d9c: rootless docker, WebKit container user) into t…
cixzhang Oct 26, 2026
4045092
chore(interaction): move four instruments out of the frame evidence
cixzhang Oct 26, 2026
6762cc5
chore(interaction): move rendering traces and the long-task log out o…
cixzhang Oct 26, 2026
03058f6
chore(interaction): move the compositor presentation record out of th…
cixzhang Oct 26, 2026
bf5950f
feat(interaction): Chromium rendering traces, the compositor presenta…
cixzhang Oct 26, 2026
d12ed28
feat(interaction): cast filmstrips, rect sampling, a Storybook highli…
cixzhang Oct 26, 2026
4574489
Merge #8270 (the selection lock's engine split; a link's callout supp…
vjeux Oct 26, 2026
6d5eaf1
Merge #8309 (#8270's selection-lock split) into #8315
vjeux Oct 26, 2026
eae13d0
Merge #8315 (#8270's selection-lock split) into #8336
vjeux Oct 26, 2026
61de06c
Merge #8549 (d12ed280: the frame evidence split into #8045, #8548 and…
cixzhang Oct 26, 2026
c1c46dc
fix(core): a held call keeps reading until it has a start
cixzhang Oct 26, 2026
8e0d69f
test(gestures): usePressTracker's lock case reads a refused selectstart
vjeux Oct 26, 2026
d3275e1
docs(gestures): the README says a press tracker disabled under a fing…
vjeux Oct 26, 2026
f8fbbd6
Merge #8315 (the README on a press tracker disabled under a finger) i…
vjeux Oct 26, 2026
daf723b
Merge 61de06c700 (#8446: the split harness line with #8348's containe…
cixzhang Oct 26, 2026
a2cf054
Merge #8309 (daf723b8: the harness line split, #8446 61de06c7) into t…
cixzhang Oct 26, 2026
bae8ff7
Merge #8309's window (#8270's selection-lock split, the touch-action …
vjeux Oct 26, 2026
57f866d
Merge #8315's window (the disabled-under-finger README note, #8309's …
vjeux Oct 26, 2026
fd8bf33
Merge #8309 (cixzhang's daf723b835 with the window) into #8315
vjeux Oct 26, 2026
6d10c7d
Merge #8315 (cixzhang's harness merge; the window) into #8336
vjeux Oct 26, 2026
4715604
fix(gestures): an idle per-event press tracker leaves no page listener
cixzhang Oct 26, 2026
ce5e84e
Merge 4715604b4f (#8336: per-press listener lifetime for perEventPoin…
cixzhang Oct 26, 2026
92d6477
fix(core): decay takes touchRelease; a take-back fades straight back;…
cixzhang Oct 26, 2026
5d7e96a
docs(gestures): the host header, AttachOptions and the README state a…
cixzhang Oct 26, 2026
ae03ad7
Merge 5d7e96a9e8 (#8336: docs for the per-event tracker's listener li…
cixzhang Oct 26, 2026
45a454b
docs(core): the animator header and changeset name the touch-release …
cixzhang Oct 26, 2026
ac656ef
refactor(Layer): the presentation hold is an input hold (`Layer/input…
vjeux Oct 26, 2026
3e3c4e7
Merge main (#8348 landed) into the frame evidence
cixzhang Oct 26, 2026
a7ffe6e
Merge #8045 (main with #8348 landed) into the rendering traces
cixzhang Oct 26, 2026
36abaa1
Merge #8548 (main with #8348 landed) into the instruments
cixzhang Oct 26, 2026
2931530
Merge #8549 (main with #8348 landed) into the recorder stand-down
cixzhang Oct 26, 2026
27fb158
fix(gestures): a finger-scroll watch installs no page listener where …
cixzhang Oct 26, 2026
1286a82
Merge 2931530b12 (#8446: the harness line on main with #8348 landed) …
cixzhang Oct 26, 2026
1910a64
Merge #8309 (1286a827: the harness line on main, #8348 landed) into t…
cixzhang Oct 26, 2026
b4e0adb
Merge #8446 (2931530b: the harness line on main with #8348) into the …
cixzhang Oct 26, 2026
2b264d3
test(core): uikit.test.ts matches bindings in the file text again
cixzhang Oct 26, 2026
ecb9f20
Merge #8056 (2b264d3d: the held call's start, the Reduce Motion landi…
vjeux Oct 26, 2026
62ecda1
test(core): browser proofs that a Reduce Motion dip held before its f…
vjeux Oct 26, 2026
53c11ea
Merge #8315 (1910a646: #8309 1286a827, the harness line on main with …
cixzhang Oct 26, 2026
2ebecf5
Merge 53c11ea923 (#8336 on #8315 1910a646: main with #8348) as a depe…
cixzhang Oct 26, 2026
f9f9a52
Merge #8076 (62ecda1c34: main with the storyboards harness and #8056'…
vjeux Oct 26, 2026
b795951
Merge #8342 (2ebecf51: the input hold) into the Popover presentation …
cixzhang Oct 26, 2026
d9e51fe
refactor(Layer): one presentation hold keeps a layer's chosen present…
cixzhang Oct 26, 2026
99b0ba8
fix(Popover): the surface motion's present callback lists touchHold; …
cixzhang Oct 26, 2026
5ba8d14
refactor(MobileNav): keep the closing dialog rendered through the lay…
cixzhang Oct 26, 2026
b6f4a72
Merge main into the MobileNav presentation-hold adoption
cixzhang Nov 9, 2026
aee5cb6
Merge branch 'main' into feat/presentation-hold-mobilenav
cixzhang Nov 9, 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/mobilenav-presentation-hold.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: MobileNav keeps its dialog rendered from the open until its delayed close has run through the layer runtime's presentation hold (Layer/presentationHold.ts). No behavior change.

@cixzhang
34 changes: 16 additions & 18 deletions packages/core/src/MobileNav/MobileNav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
* - /packages/cli/assets/templates/blocks/components/MobileNav/ (showcase blocks)
*/

import {usePresentationHold} from '../Layer/presentationHold';
import {
useCallback,
useEffect,
Expand Down Expand Up @@ -533,20 +534,17 @@ export function MobileNav({
// once the native dialog has closed (see closeAndRestoreFocus).
const triggerElementRef = useRef<HTMLElement | null>(null);

// Keeps the dialog rendered from the commit that closes it until the delayed
// `close()` below has run. The `display` transition on the dialog is meant to
// do this, but a browser that does not hold a discrete `display` transition
// (WebKit) drops the dialog to `display: none` at once while it is still an
// open modal: nothing is visible, yet the whole page stays inert until the
// timer fires. Set during render, so it is already true in the commit that
// closes. The drawer's transform and the backdrop stay keyed to `isOpen`, so
// the slide-out is unchanged.
const [isCloseHeld, setIsCloseHeld] = useState(false);
const [wasOpen, setWasOpen] = useState(isOpen);
if (wasOpen !== isOpen) {
setWasOpen(isOpen);
setIsCloseHeld(!isOpen);
}
// Keeps the dialog rendered from the open until the delayed `close()` below
// has run: the layer runtime's presentation hold. The `display` transition
// on the dialog is meant to do this, but a browser that does not hold a
// discrete `display` transition (WebKit) drops the dialog to
// `display: none` at once while it is still an open modal: nothing is
// visible, yet the whole page stays inert until the timer fires. Held during
// render, so it is already held in the commit that closes. The drawer's
// transform and the backdrop stay keyed to `isOpen`, so the slide-out is
// unchanged.
Comment on lines +537 to +545

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Non-blocking: the second sentence of this comment runs about 50 words over several topics, and "so the slide-out is unchanged" compares with past code. A shorter form that keeps only the reason:

// Keeps the dialog rendered until the delayed `close()` below runs.
// WebKit does not hold a discrete `display` transition. It drops a closing
// modal dialog to `display: none` at once. The page then stays inert with
// nothing visible. The hook takes the hold during render, so the closing
// commit already has it.

const {isHeld: isPresentationHeld, release: releasePresentation} =
usePresentationHold({isOpen, presentation: true});
// The same page lock as every other modal. Its effect runs before the
// open/close effect below, so it measures the scrollbar gutter before
// showModal() can hide the scrollbar.
Expand Down Expand Up @@ -616,12 +614,12 @@ export function MobileNav({
releaseHoldRef.current = null;
closeTimeoutRef.current = setTimeout(() => {
closeAndRestoreFocus(dialog, triggerElementRef);
setIsCloseHeld(false);
releasePresentation();
}, resolveCloseDelay(dialog));
} else {
// Nothing is open, so there is no close to hold the dialog for, and no
// close timer is left to release the hold.
setIsCloseHeld(false);
releasePresentation();
}

return () => {
Expand All @@ -634,7 +632,7 @@ export function MobileNav({
releaseHoldRef.current?.();
releaseHoldRef.current = null;
};
}, [isOpen]);
}, [isOpen, releasePresentation]);

// Close the native dialog on unmount if it's still open. Inside AppShell the
// drawer is mounted in an <Activity> that switches to mode="hidden" when the
Expand Down Expand Up @@ -720,7 +718,7 @@ export function MobileNav({
layerStructureReset.reset,
styles.dialog,
overlayPaddingReset.reset,
(isOpen || isCloseHeld) && styles.open,
isPresentationHeld && styles.open,
styles.backdrop,
isOpen && styles.backdropOpen,
xstyle,
Expand Down
Loading