Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1464 commits
Select commit Hold shift + click to select a range
e1b44c6
refactor(ContextMenu): the lift presentation reads liftFromTrigger
cixzhang Oct 26, 2026
eb566ac
docs(ContextMenu): DEC-2 and the lazy-loading test name the input hold
vjeux Oct 26, 2026
2f078e6
Merge #8201 (bf71cc6f0d) into #8213
vjeux Oct 26, 2026
cb659f5
Merge #8342 (d0cc722eb2) into #8485
vjeux Oct 26, 2026
05df9c2
Merge 87e516b545 (#8446: CodeBunny fixes up the harness line) as a de…
cixzhang Oct 26, 2026
362f4ce
Merge #8485 (1c1eb94127) into #8201
vjeux Oct 26, 2026
b1a4f09
Merge #8201 (361feb2a83) into #8213
vjeux Oct 26, 2026
a23c4b2
fix(gestures): an off-zone edge pan decides at 10 px; a waiting swipe…
cixzhang Oct 26, 2026
20dead2
fix(gestures): the host's touch-action rules sit in the reset cascade…
cixzhang Oct 26, 2026
62b6ad2
Merge #8309 (60763a66: touch-action rules in @layer reset, #8446 87e5…
cixzhang Oct 26, 2026
2558554
fix(gestures): a pan from several edges claims each axis only in its …
cixzhang Oct 26, 2026
16de016
feat(gestures): a recognizer created with claimsTouches: false is a w…
cixzhang Oct 26, 2026
1e4a3fd
Merge #8315 (851525bc: #8309 60763a66, touch-action rules in @layer r…
cixzhang Oct 26, 2026
74ffade
Merge #8315 (851525bc: #8309 60763a66, touch-action rules in @layer r…
cixzhang Oct 26, 2026
498c0fa
Merge the gesture watcher (its own PR now) into the host line
cixzhang Oct 26, 2026
2a549ba
chore(changeset): the touch foundation's internal changesets stop cou…
vjeux Oct 26, 2026
774a496
Merge 5c58ae5877 (#8336 (#8315 851525bc with touch-action in @layer r…
cixzhang Oct 26, 2026
83e838f
test(ContextMenu): the lift's busy-main-thread proof holds the main t…
vjeux Oct 26, 2026
1c50d4e
Merge #8201 (0a5ad53a5a) into #8213
vjeux Oct 26, 2026
b5879fc
fix(interaction): the compositor record refuses another open page
cixzhang Oct 26, 2026
c00a187
Merge #8548 (the compositor record refuses another page) into the ins…
cixzhang Oct 26, 2026
dcc496f
fix(interaction): resolve ASTRYX_WEBKIT_SHADER_CACHE to a host path
cixzhang Oct 26, 2026
48e8a84
Merge #8549 (compositor record refuses another page, shader cache pat…
cixzhang Oct 26, 2026
b3be493
docs(interaction): a traced waitForRest restyles a running element on…
cixzhang Oct 26, 2026
117ac8e
fix(core): a node detached mid-dip lands its move where it was going
cixzhang Oct 26, 2026
b22e9ed
Merge #8521 (a node detached mid-dip lands its move) into pseudo-elem…
cixzhang Oct 26, 2026
93b93b7
fix(interaction): a window that delivered under four frames is judged…
cixzhang Oct 26, 2026
55b9067
Merge n8045 (the busy verdict judges a thin window against its span) …
cixzhang Oct 26, 2026
d4f0f1b
Merge n8548 (the busy verdict judges a thin window against its span) …
cixzhang Oct 26, 2026
1033c85
Merge n8549 (the busy verdict judges a thin window against its span) …
cixzhang Oct 26, 2026
9522a9b
test(ContextMenu): the selection lock test reads the host's selectsta…
vjeux Oct 26, 2026
5abe3aa
Merge #8201 (413b599e4a) into #8213
vjeux Oct 26, 2026
d0f7be8
Merge f405e7fa31 (#8446: CodeBunny's #8045 round up the harness line)…
cixzhang Oct 26, 2026
fca2da1
Merge #8309 (959f1e1e: #8446 f405e7fa) into the gesture hook fixes
cixzhang Oct 26, 2026
97a9713
docs(gestures): a watcher needs no manageStyle: false
cixzhang Oct 26, 2026
a0a4e1c
Merge #8315 (4e19448b: #8309 959f1e1e) into the host line
cixzhang Oct 26, 2026
2835f0b
Merge #8315 (4e19448b: #8309 959f1e1e) into the gesture watcher
cixzhang Oct 26, 2026
a17a358
Merge #8589 (a watcher needs no manageStyle: false) into the host line
cixzhang Oct 26, 2026
3d3c316
test(gestures): a scroll takes an unclaimed touch from 10 px of trave…
vjeux Oct 26, 2026
9d25337
Merge 029e4fd372 (#8336 (#8315 4e19448b, #8589's README fix)) as a de…
cixzhang Oct 26, 2026
a0337e6
fix(core): the unmount's landing leaves the detached node with nothin…
cixzhang Oct 26, 2026
d799c40
Merge #8521 (the unmount's landing leaves nothing running) into pseud…
cixzhang Oct 26, 2026
8e5ed37
docs(interaction): the busy verdict's docs name the thin-window rule
cixzhang Oct 26, 2026
2688e84
Merge n8045 (the busy docs name the thin-window rule) into n8548
cixzhang Oct 26, 2026
fe881e9
Merge n8548 (the busy docs name the thin-window rule) into n8549
cixzhang Oct 26, 2026
3f26d01
Merge n8549 (the busy docs name the thin-window rule) into n8446b
cixzhang Oct 26, 2026
cd4bb5e
test(ContextMenu): a finger that lands as the card shows gets UIKit's…
vjeux Oct 25, 2026
547ffd6
perf(ContextMenu): the touch layer ships with ContextMenu, with no ex…
vjeux Oct 25, 2026
480ac40
fix(core): a waiting move lands on the latest node detached, and disp…
cixzhang Oct 26, 2026
164cfe6
Merge #8521 (the latest detached node) into pseudo-element support
cixzhang Oct 26, 2026
671c5c0
fix(core): a press another hook's isEnabled sync resolves ends after …
cixzhang Oct 26, 2026
28d6f84
fix(interaction): the compositor record refuses a page that opened wh…
cixzhang Oct 26, 2026
66b7b35
Merge n8548 (the compositor record refuses a page opened while it ran…
cixzhang Oct 26, 2026
d50250e
Merge n8549 (the compositor record refuses a page opened while it ran…
cixzhang Oct 26, 2026
046977a
fix(core): a Reduce Motion call naming the opacity a waiting dip retu…
vjeux Oct 26, 2026
9f95186
Merge #8076 (2ec969c6: a Reduce Motion call naming the opacity a wait…
vjeux Oct 26, 2026
d5ec801
test(gestures): the isEnabled-sync press test names its refs as refs
vjeux Oct 26, 2026
acf72ae
fix(interaction): a traced wait on a missing element reports it missing
cixzhang Oct 26, 2026
2870199
docs(motion): the Reduce Motion planner's fade length is no role, the…
vjeux Oct 26, 2026
f3b4094
perf(core): a promotion reads no style in its own task
vjeux Oct 26, 2026
730975a
test(gestures): a recognizer waiting on one a hook's Effect stops rep…
vjeux Oct 26, 2026
83b61f2
Merge #8061 (4c3df941: a screen-edge pan takes the axis across its ed…
vjeux Oct 26, 2026
b792998
Merge #8076 (70c70e41: her #8061 4c3df941, a screen-edge pan claims a…
vjeux Oct 26, 2026
5783925
fix(gestures): what a hook's Effect stop unblocks resolves just after it
vjeux Oct 26, 2026
21374ab
test(core): the mid-dip unmount test reads the element after the defe…
cixzhang Oct 26, 2026
4c4fbdf
Merge #8521 (the mid-dip unmount test awaits the microtask) into pseu…
cixzhang Oct 26, 2026
9e56b61
feat(gestures): an action group keeps working under a fine pointer, w…
cixzhang Oct 26, 2026
5b4d981
Merge d2c3c788f0 (#8072 (an action group under a fine pointer)) as a …
cixzhang Oct 26, 2026
80a9f1f
Merge #8072 (d2c3c788: the action-group host exception) and #8446 (1d…
cixzhang Oct 27, 2026
1ce40ab
Merge #8309 (cc795a1e: #8072's action-group fine-pointer exception) a…
cixzhang Oct 27, 2026
b0a8114
Merge 1ddea08f3e (#8446 (the harness line's latest)) as a dependency
cixzhang Oct 27, 2026
9fe4eee
Merge #8315 (8b0cb36f: #8309 cc795a1e, the action-group exception) in…
cixzhang Oct 27, 2026
58e46a1
Merge #8315 (8b0cb36f: #8309 cc795a1e) into the gesture watcher
cixzhang Oct 27, 2026
227c84c
Merge #8589 (with #8315 8b0cb36f) into the host line
cixzhang Oct 27, 2026
118577c
Merge 266fa0af50 (#8076 266fa0af (vjeux 70c70e41, #8072 d2c3c788, #84…
cixzhang Oct 27, 2026
b3a49f8
Merge 453149e064 (#8336 (#8315 8b0cb36f with the action-group host ex…
cixzhang Oct 27, 2026
8e1b01a
Merge #8309 (03d87941: #8076 266fa0af) as a dependency
cixzhang Oct 27, 2026
e01fda9
Merge #8315 (8d59b3f3: #8309 03d87941, #8076 266fa0af) into the gestu…
cixzhang Oct 27, 2026
223b628
Merge #8315 (8d59b3f3) into the host line
cixzhang Oct 27, 2026
4bfdcb6
Merge #8589 (#8315 8d59b3f3) into the host line
cixzhang Oct 27, 2026
4ae95c2
Merge a4f63a85b8 (#8336 (#8315 8d59b3f3)) as a dependency
cixzhang Oct 27, 2026
c97f22b
test(gestures): useGestureRecognizer attaches an action group the hos…
vjeux Oct 27, 2026
dda3e34
feat(gestures): useGestureRecognizer takes actionGroup
vjeux Oct 27, 2026
645a2e3
Merge main (2c4f1728: #8056 merged) into play-curves
cixzhang Oct 27, 2026
78908e5
Merge #8521 (main with #8056) into pseudo-element support
cixzhang Oct 27, 2026
aa633a9
fix(core): the host forgets a finger scroll in progress when it stops…
cixzhang Oct 27, 2026
6407763
fix(gestures): under inputMode 'pointer-events' a finger is tracked o…
cixzhang Oct 27, 2026
ca2597c
fix(core): a touch only watchers follow gets a passive touchend
cixzhang Oct 27, 2026
3edbbae
Merge 2e60799487 (#8072) as a dependency
cixzhang Oct 27, 2026
2d49686
build(lab): Lab reaches core only through core's exports, with no sec…
cixzhang Oct 27, 2026
dd0900c
Merge #8589 (a touch only watchers follow gets a passive touchend) in…
cixzhang Oct 27, 2026
e53d011
Merge 793c8dbd (#8076: Lab reaches core only through core's exports) …
cixzhang Oct 27, 2026
b23d3d6
Merge #8522 (182ef2e9: the animator line carrying main with #8056 lan…
cixzhang Oct 27, 2026
dd2f6b3
Merge 6586b84b5a (#8336 (passive touchend for watcher-only touches; u…
cixzhang Oct 27, 2026
d25459d
fix(core): an unmount leaves no will-change read timer on the node it…
cixzhang Oct 27, 2026
22cec5e
Merge #8076 (27eeeb8d: main with #8056 merged through her #8522, her …
vjeux Oct 27, 2026
d19cab1
Merge #8076 (27eeeb8db4: main with #8056, the Lab route through core'…
vjeux Oct 27, 2026
1641f9d
Merge 27eeeb8d (#8076: carries main with #8056 landed, via #8522 182e…
cixzhang Oct 27, 2026
cfead61
Merge #8309 (dd1b1244: #8076 27eeeb8d with #8056, and #8072 2e607994)…
cixzhang Oct 27, 2026
1fb64ca
Merge #8315 (c1776597: #8309 dd1b1244, with #8056 via #8076) into the…
cixzhang Oct 27, 2026
ee70a37
test(core): the detached-mid-dip cases read the presented start's inl…
vjeux Oct 27, 2026
ce87546
Merge #8589 (#8315 c1776597: #8309 dd1b1244, with #8056 via #8076) in…
cixzhang Oct 27, 2026
bec2283
fix(gestures): a gesture that cancels itself on a finger's move keeps…
vjeux Oct 26, 2026
e6fefb4
Merge 33bff1642a (#8336 (#8315 c1776597: #8309 dd1b1244 with main)) a…
cixzhang Oct 27, 2026
24199ab
Merge #8076 (27eeeb8d: main with #8056 merged, her Lab route through …
vjeux Oct 27, 2026
21ede35
chore(changeset): the exit copy's changeset no longer says nothing us…
vjeux Oct 27, 2026
c6913ba
test(gestures): a scroll-edge pan cancels its first moves while every…
vjeux Oct 27, 2026
06f9030
test(gestures): browser proof that a scroll-edge pull's first move is…
vjeux Oct 27, 2026
9a44735
feat(gestures): a scroll-edge pan holds its finger from the first mov…
vjeux Oct 27, 2026
d501cf5
test(gestures): real-touch states for AST-094 FR18–FR22: 9 and 10 px …
cixzhang Oct 27, 2026
5b58549
fix(core): the gesture host measures a screen-edge pan's view, so an …
cixzhang Oct 27, 2026
0a0164e
fix(gestures): a strip authored at the edge region is the edge zone a…
cixzhang Oct 27, 2026
75f59f3
Merge a3e07d88 (#8076: the host's arena environment measures a view) …
cixzhang Oct 27, 2026
fd3366c
Merge 9adbe2d8 (#8061: an edge strip within half a pixel of its band …
cixzhang Oct 27, 2026
b50e68b
test(gestures): the real-touch edge strip is the band's own 40.2 px, …
cixzhang Oct 27, 2026
e67a6e0
fix(gestures): a scroll takes a finger only after its 10 px of travel…
cixzhang Oct 27, 2026
1e4f9f9
docs(gestures): the README's touch-action table qualifies the edge pa…
cixzhang Oct 27, 2026
68795cc
Merge 9800eb54 (#8072: a scroll takes a finger after 10 px; pointer-e…
cixzhang Oct 27, 2026
e34f799
Merge #8309 (c3375f65: #8076 a3e07d88, #8061 9adbe2d8, #8072 9800eb54…
cixzhang Oct 27, 2026
49b7d58
Merge #8315 (8ae65405: #8309 c3375f65 with #8076 a3e07d88, #8061 9adb…
cixzhang Oct 27, 2026
6b8466c
fix(gestures): a finger on an action group under a fine pointer reach…
cixzhang Oct 27, 2026
9bc194c
fix(core): with only watchers attached, the host's document listeners…
cixzhang Oct 27, 2026
1ebaa07
Merge #8589 (#8315 8ae65405, and its passive-only listeners for watch…
cixzhang Oct 27, 2026
b6e705a
Merge main (2c7ef0e223: BottomSheet stacking) into the layer exit copy
vjeux Oct 27, 2026
78c3102
Merge #8076 (a3e07d88: main with #8056 merged, her Lab route through …
vjeux Oct 27, 2026
07870ba
Merge #8497 (6a315c52: the progress module on #8076 a3e07d88) into th…
vjeux Oct 27, 2026
0497fd8
Merge #8340 (8ada4015: the presented start on #8076 27eeeb8d, with th…
vjeux Oct 27, 2026
d6e1a88
Merge 54901eb959 (#8336 (#8315 8ae65405: #8309 c3375f65)) as a depend…
cixzhang Oct 27, 2026
c761d8b
Merge 5c59af12 (#8072: a finger on an action group under a fine point…
cixzhang Oct 27, 2026
28989ec
Merge #8309 (2d4b4bdc: #8072 5c59af12, an action group's finger under…
cixzhang Oct 27, 2026
5e5f1d4
Merge #8315 (10abed58: #8309 2d4b4bdc, #8072 5c59af12: an action grou…
cixzhang Oct 27, 2026
5ded6fd
Merge #8589 (#8315 10abed58) into the host line
cixzhang Oct 27, 2026
53c1570
Merge main (a00afee502: #8521 merged) into the experimental touch layer
vjeux Oct 27, 2026
6f83f98
Merge #8076 (cba0ad93f6: main with #8521 merged) into the presented s…
vjeux Oct 27, 2026
3bcb509
Merge #8076 (cba0ad93f6: main with #8521 merged) into the layer exit …
vjeux Oct 27, 2026
0129aeb
Merge #8076 (cba0ad93f6: main with #8521 merged) into the progress mo…
vjeux Oct 27, 2026
f533ea2
Merge #8497 (3c42849f: the progress module on #8076 cba0ad93, main wi…
vjeux Oct 27, 2026
907cf89
Merge #8340 (f5ac3e89: the presented start on #8076 cba0ad93) into th…
vjeux Oct 27, 2026
4fb1703
Merge b8d7f4cdaf (#8336 (#8315 10abed58: #8072's action-group finger …
cixzhang Oct 27, 2026
0ef5998
Merge #8076 (cba0ad93f6: a3e07d889b's edge-zone measuring, main with …
vjeux Oct 27, 2026
86a93ba
test(gestures): a watcher follows a touch the browser scrolls with to…
cixzhang Oct 27, 2026
b472b63
fix(gestures): a scroll-edge pan holds a lone finger only, so a pinch…
cixzhang Oct 27, 2026
b4cc2ba
Merge #8589 (a watcher's real-touch browser test) into the host line
cixzhang Oct 27, 2026
666dcb3
test(gestures): the 41 px edge-band case skips WebKit like the file's…
cixzhang Oct 27, 2026
f7247e5
Merge #8309 (c5b1e894: the 41 px edge-band case skips WebKit) as a de…
cixzhang Oct 27, 2026
0e70bef
Merge #8315 (2850d32b: #8309 c5b1e894, a WebKit test skip) into the g…
cixzhang Oct 27, 2026
b4bb184
Merge #8589 (#8315 2850d32b) into the host line
cixzhang Oct 27, 2026
ceb5ffd
Merge #8270 (#8076 cba0ad93f6) into #8309
vjeux Oct 27, 2026
9ef64da
Merge #8315 (#8076 cba0ad93f6) into #8336
vjeux Oct 27, 2026
33ce206
Merge #8309 (#8076 cba0ad93f6) into #8315
vjeux Oct 27, 2026
7f871bd
test(gestures): a scroll-edge pan holds nothing while a second finger…
vjeux Oct 27, 2026
3434ca9
fix(gestures): a scroll-edge pan holds nothing while a second finger …
vjeux Oct 27, 2026
07e46e2
fix(core): the animator reads no style for a node out of the document
vjeux Oct 27, 2026
9e85cc9
Merge #8336 (9affd96133: the host line on #8076 cba0ad93f6, main with…
vjeux Oct 27, 2026
dcac17d
test(gestures): the watcher's browser test checks it reports moves af…
cixzhang Oct 27, 2026
4e9be48
Merge #8589 (the watcher's browser test checks moves after the takeov…
cixzhang Oct 27, 2026
8b07843
test(liftFromTrigger): a lifted list item leaves its list valid and t…
vjeux Oct 27, 2026
f922599
fix(liftFromTrigger): an li holds a list item's spot, and takes no nu…
vjeux Oct 27, 2026
5a971e6
Merge the static-import offer on #8125 (16dc55eae0) into #8201
vjeux Oct 27, 2026
7e0c912
test(ContextMenu): the lift's proof no longer says the touch layer lo…
vjeux Oct 27, 2026
a581212
Merge #8342 (e9aa7841a2) into #8485
vjeux Oct 27, 2026
663cb35
Merge #8186 (79450266a7) into #8485
vjeux Oct 27, 2026
fce8dc5
Merge #8329 (dba829faf6) into #8485
vjeux Oct 27, 2026
824c516
Merge #8076 (3bfd7c32da) into #8485
vjeux Oct 27, 2026
25a1b2b
Merge #8076 (3bfd7c32da: the animator reads no style for a node out o…
vjeux Oct 27, 2026
2ba3dab
test(core): the press feedback controller imports nothing from the ge…
vjeux Oct 27, 2026
6d01708
refactor(core): the coarse-pointer query moves to the environment que…
vjeux Oct 27, 2026
966faa3
Merge #8270 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
46d45d6
Merge #8309 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
ac9ffa6
test(gestures): the watcher's browser test names its record type (lint)
cixzhang Oct 27, 2026
8438e45
Merge #8589 (the watcher browser test's lint fix) into the host line
cixzhang Oct 27, 2026
282f4ce
Merge #8485 (08eb612a47) into #8201
vjeux Oct 27, 2026
bd5286b
Merge #8201 (e582bd021e) into #8213
vjeux Oct 27, 2026
a4082c5
test(gestures): the watcher's real-touch test reads its end before th…
vjeux Oct 27, 2026
3f91308
Merge #8315 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
6c51e5b
test(gestures): an in-band touch on a wider element decides at 15 px …
vjeux Oct 27, 2026
3e13310
fix(gestures): an in-band touch decides at 15 px whatever the element…
vjeux Oct 27, 2026
83fe0bf
Merge #8061 (3d85c303e6: an in-band screen-edge touch decides at 15 p…
vjeux Oct 27, 2026
2d0e086
Merge #8641 (bec2283d0f: a gesture that cancels itself on a finger's …
vjeux Oct 27, 2026
c6d3fd9
fix(core): a rect morph dismissing on a copy lets the element go of i…
vjeux Oct 27, 2026
99fc8bf
fix(gestures): an in-band touch decides at 10 px on an element wider …
vjeux Oct 27, 2026
2e08e06
Merge #8061 (d9a1e1ad19: an in-band touch on an element wider than th…
vjeux Oct 27, 2026
f4b7173
docs(layer-runtime): the lift-from-trigger module exists
vjeux Oct 27, 2026
65d4d4c
docs(changeset): drop the claim that mouse pages do not download the …
vjeux Oct 27, 2026
429da1e
Merge the static-import offer on #8125 (30f196cfe2) into #8201
vjeux Oct 27, 2026
2dff629
test(ContextMenu): the lift plays every spring through an internal mo…
vjeux Oct 27, 2026
a92eafc
fix(ContextMenu): the lift's springs play through the internal motion…
vjeux Oct 27, 2026
f4b745b
Merge #8076 (e6ab0b9cd9: #8061 d9a1e1ad19, an in-band screen-edge tou…
vjeux Oct 27, 2026
017ff65
Merge #8270 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641) into #8309
vjeux Oct 27, 2026
0dae87b
Merge #8315 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641) into #8336
vjeux Oct 27, 2026
0e07079
Merge #8309 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8641's moving…
vjeux Oct 27, 2026
38ad8bc
Merge #8485 (e238de662f) into #8201
vjeux Oct 27, 2026
43ff8b2
Merge #8201 (5f89edff9c) into #8213
vjeux Oct 27, 2026
e4fc6bf
Merge the #8589 watcher-test fix (1b6e19f7b0: the real-touch test rea…
vjeux Oct 27, 2026
800282a
Merge #8336 (03155c374e: F2's fZ line on #8076 e6ab0b9cd9, with the w…
vjeux Oct 27, 2026
ae41d4b
Merge #8076 (e6ab0b9cd9: the animator reads no style for a node out o…
vjeux Oct 27, 2026
e7a4bd7
test(gestures): a finger from a browser that sends Touch Events but e…
vjeux Oct 27, 2026
244b609
fix(gestures): the host reads no Touch Events where it takes fingers …
vjeux Oct 27, 2026
c6515e6
Merge #8342 (d535664aec) into #8485
vjeux Oct 27, 2026
c78524b
Merge #8485 (ff6a464334) into #8201
vjeux Oct 27, 2026
12e3118
Merge #8201 (49345f0540) into #8213
vjeux Oct 27, 2026
fb7f49f
docs(changeset): the lift module, the input hold, the rect morph and …
vjeux Oct 27, 2026
a5fa7d3
docs(changeset): the press constants and the presentation resolver ha…
vjeux Oct 27, 2026
647fb7c
Merge the static-import offer on #8125 (c97a702d6f) into #8201
vjeux Oct 27, 2026
7132531
Merge #8201 (c997f735ee) into #8213
vjeux Oct 27, 2026
7bb02d9
Merge main (6aea9bda01: #8663 merged, one release policy) into the ex…
vjeux Oct 27, 2026
a524895
Merge #8076 (3fb31ddb3e: main 6aea9bda merged, #8663's release policy…
vjeux Oct 27, 2026
03cf017
Merge #8076 (3fb31ddb3e: main 6aea9bda merged, #8663's release policy…
vjeux Oct 27, 2026
c094ae2
Merge main (6aea9bda01: #8663 merged) into the motion progress module
vjeux Oct 27, 2026
c819b1c
Merge #8340 (9718a3d851: #8076 with main 6aea9bda) into the rect morp…
vjeux Oct 27, 2026
954167a
Merge #8497 (30c22161f0: main 6aea9bda folded in) into the rect morph…
vjeux Oct 27, 2026
ffafb27
Merge #8076 (main's #8663 rows in motion/README.md) into #8270
vjeux Oct 27, 2026
c2f2e22
Merge #8270 (#8076: main's #8663 rows in motion/README.md) into #8309
vjeux Oct 27, 2026
c8d2c01
Merge #8309 (#8076: main's #8663 rows in motion/README.md) into #8315
vjeux Oct 27, 2026
7f0cbba
Merge #8315 (#8076: main's #8663 rows in motion/README.md) into #8336
vjeux Oct 27, 2026
d932ed4
Merge #8336 (3b1b26d530: F2's line on #8076 3fb31ddb3e, main with #86…
vjeux Oct 27, 2026
50fb7ca
Merge #8329 (46347b2aeb) into #8485
vjeux Oct 27, 2026
af0f24d
Merge #8485 (6ec3609ce3) into #8201
vjeux Oct 27, 2026
2074a8f
Merge #8201 (f487b07590) into #8213
vjeux Oct 27, 2026
010fe33
Merge #8186 (1aaf2db59d) into #8485
vjeux Oct 27, 2026
80704de
Merge #8485 (85407d128b) into #8201
vjeux Oct 27, 2026
892752a
Merge #8201 (7ced73aadb) into #8213
vjeux Oct 27, 2026
47a8f56
Merge #8342 (aba564668f) into #8485
vjeux Oct 27, 2026
f252547
Merge #8485 (798809f3ec) into #8201
vjeux Oct 27, 2026
9423a53
Merge #8201 (2820cdab81) into #8213
vjeux Oct 27, 2026
8cc3fac
fix(core): a presented call's curve that a later one's channel holds …
vjeux Oct 27, 2026
0f18994
Merge #8340 (b6a910dd40: a presented call's curve that a later one's …
vjeux Oct 27, 2026
e427ad4
Merge #8340 (b6a910dd40) into #8485
vjeux Oct 27, 2026
ff46662
Merge #8485 (d3624cd94e) into #8201
vjeux Oct 27, 2026
162e894
test(ContextMenu): the long-press a11y check syncs on the lift, or th…
vjeux Oct 27, 2026
0ea0eb9
Merge #8201 (b8b636df5c) into #8213
vjeux Oct 27, 2026
fef7e53
Merge #8329 (b02bad37eb) into #8485
vjeux Oct 27, 2026
f912dd9
Merge #8485 (fce152e83d) into #8201
vjeux Oct 27, 2026
8bbf67a
Merge #8201 (03b5a7b8be) into #8213
vjeux Oct 27, 2026
fe0cf33
test(gestures): a recognizer inside a shadow root gets its finger and…
vjeux Oct 27, 2026
6fa587b
fix(gestures): the host resolves what an input landed on through the …
vjeux Oct 27, 2026
bd06607
test(ContextMenu): the long-press a11y check taps outside once the pr…
vjeux Oct 27, 2026
79413f9
Merge #8201 (3d038b9b72) into #8213
vjeux Oct 27, 2026
917be4d
Merge #8336 (c3c119a466: the host resolves what an input landed on th…
vjeux Oct 27, 2026
eb2069d
Merge #8342 (5e0277e26a) into #8485
vjeux Oct 27, 2026
0849c1d
Merge #8485 (974ca77efe) into #8201
vjeux Oct 27, 2026
59af9dd
test(hooks): the shadow-root menu check taps its host once the presen…
vjeux Oct 27, 2026
77b0b23
Merge #8201 (533e88113b) into #8213
vjeux Oct 27, 2026
cf76474
feat(core): a rect morph plays on an animator it is handed, and takes…
vjeux Oct 27, 2026
5652ae1
fix(core): a rect morph keeps the animator's dip for an element that …
vjeux Oct 27, 2026
2440201
Merge main (6a751f7b7a: #8646's every-pointer gestures) into the rect…
vjeux Oct 27, 2026
6b92495
Merge #8186 (f28d42ee0f: main 6a751f7b7a, #8646's every-pointer gestu…
vjeux Oct 27, 2026
53830cc
Merge #8329 (d0f24e1f98) into #8485
vjeux Oct 27, 2026
e31d6c6
Merge #8485 (dd431b1885) into #8201
vjeux Oct 27, 2026
ee7d149
Merge #8201 (a0e1620582) into #8213
vjeux Oct 27, 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/build-stylex-cross-file-consts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/build': patch
---

[fix] `astryxStylex` resolves `defineConsts` values read from another file. With the `{stylexOptions}` form (the one Storybook uses), a file that read only constants from a `.stylex.ts` module lost that import once StyleX compiled it, so the constants never reached the CSS: a constant used as a media-query key failed the build ("Invalid empty selector") and one used as a value shipped as a custom property nothing declares. In either form, a constant defined on the other side of the layer split, or in an Astryx package (compiled with the library class-name prefix) and read from an app file (compiled with its own), stayed unresolved.

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

[feat] Under a finger, on every touch device, when a held finger opens a ContextMenu, the menu now grows out of the finger as iOS 26's does: it starts small at the press point and grows into its place beside the lifted trigger, overshooting slightly, as it fades in. Only its position, scale and opacity move, on the compositor. Under Reduce Motion the menu cross-fades in where it is instead, in 200 ms: nothing moves or grows.

@vjeux
10 changes: 10 additions & 0 deletions .changeset/contextmenu-lift-presentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@astryxdesign/core': patch
'@astryxdesign/cli': patch
---

[feat] Under a finger, on every touch device (iOS and Android alike), a ContextMenu opened by a held finger now presents as iOS 26's does. A block trigger itself lifts out of the page, with no copy and with its spot in the page held: it grows on from the press to 26 px larger on its longer side (15% at most), with the theme's high shadow fading in under it, over the theme's overlay, and it stays inside the layer runtime's viewport gutter. A tap on the tint closes the menu; while the lift is still growing, a tap or a drag closes nothing and reaches nothing under it, and the menu finishes opening (keys still work). The menu sits 16 px from the lifted trigger, below it when it fits and above it otherwise, centered on it or flush with the edge it is held against (right-to-left pages included), and fades in, with no row lit until the finger moves onto one. Closing returns the trigger to its place. Under Reduce Motion the animator cross-fades everything in place instead, in 200 ms, as the reduced-motion design record asks: nothing travels or grows. Inline triggers, pointer opens and the bottom sheet are unchanged. A fine pointer keeps today's menu at the cursor.

The tint is the theme's modal overlay (`--color-overlay`).

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

[feat] Under a finger, a ContextMenu whose `presentation` is omitted now opens from a held finger on iOS's timeline (the touch model). Pass `presentation="popover"` to keep today's menu on every device: the menu at the pointer, opened by a finger held for 500 ms (the long press). Where the primary pointer is fine (a mouse or trackpad), a finger keeps that same long press.

@vjeux
8 changes: 8 additions & 0 deletions .changeset/contextmenu-press-constants.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@astryxdesign/core': patch
'@astryxdesign/cli': patch
---

[chore] The UIKit constants table gains ContextMenu's touch timeline as measured on iOS 26.2: the press feedback starts at 150 ms, the press commits at 400 ms, and the menu displays at 735 ms. It also records the drift tolerance, and the press feedback's growth, spring and display latency. A closed-form press-feedback curve, checked against UIKit's per-frame presentation, comes with them. ContextMenu's touch timeline uses them.

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

[feat] ContextMenu opens from a held finger on iOS 26's measured timeline, on every touch device (a coarse primary pointer, iOS and Android alike). The trigger starts to grow at 150 ms (the onset of core's one press machine), following UIKit's measured press curve on the compositor, and the hold runs on useLongPress's detector with UIKit's measured moments. At 400 ms the press takes the finger: its lift no longer sends a click, and the page cannot scroll under it. The menu opens at 735 ms if the finger is still down, or as soon as it lifts after 400 ms. A finger that lifts before 400 ms, or drifts more than 11.5 px on either axis before the menu opens, gets no menu, and the trigger springs back. The page stays still while the menu is up, and the trigger returns to its size when the menu closes. A touch open lights no row: the menu takes the focus, and a row lights only under the finger, as in UIKit (keyboard and pointer opens still focus the first item). A second finger cancels the press, and Android's own long-press menu no longer opens a second menu. A fine pointer (a mouse) keeps the right-click menu, and the touch recognizer stays off there.

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

[chore] Internal: a gesture that cancels itself on a finger's move (a long press dragged past its tolerance) keeps that finger claimed until it lifts, so the page never takes the drag over midway; a resting finger is still given back when its gesture is cancelled. Not exported from the package entry point.

@vjeux
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.

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

[chore] Internal: the gesture hooks call nothing back after unmount; `usePressTracker` brakes with the host by default and keeps one tracker, so an option change or a new ref never drops a press in progress; the recognizer's arena plumbing is `protected`. Not exported from the package entry point.

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

[chore] Internal: gesture host fixes from review. A page scroll under a still finger keeps the press and its click; watchers and touches nothing can claim get passive listeners only; a claimed pen holds only its own stylus touches; an element's own `touch-action` is never widened; slotted content scrolls with its shadow-tree scroller. Not exported from the package entry point.

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

[chore] Internal: the gesture host becomes the one document-level touch owner: a scroll lock's page hold, finger scrolls, the finger count, touch gates, and a kept press for continuous-tracking controls, whose element gets `touch-action: manipulation` where the pointer is coarse. A second finger fails a one-finger pan that has not claimed, so the page can pinch. A scroll-edge pan holds a lone finger from the first move that pulls away from an edge every scroller under it is at, so those moves are cancelled before it begins; with a second finger anywhere on the screen the page keeps its pinch. Where the primary pointer is fine, the host attaches nothing and registers no listener, following the pointer when it changes; a recognizer that reads each event's pointer itself opts out with `perEventPointer`, and a press tracker with it paints a finger's press feedback only, with no control event and no mouse or pen press. A press tracker whose hold acts (a stepper's hold-repeat) can bring a selection lock for its presses, as a recognizer can. Internal, for the touch components that adopt them; not exported from the package entry point.

@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.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/gesture-pan.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: the pan gesture recognizer, with UIKit's measured hysteresis and velocity filter. Not exported from the package entry point; no component uses it yet.
[chore] Internal: the pan gesture recognizer, with UIKit's measured hysteresis and velocity filter. Not exported from the package entry point.

@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.

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

[chore] Internal: the gesture system's README for component authors, with its browser proof in Chromium and WebKit.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/gesture-recognizer-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: the gesture recognizer core for touch presentations: UIKit's recognizer state machine and the arena that settles which recognizer owns a touch. Not exported from the package entry point; no component uses it yet.
[chore] Internal: the gesture recognizer core for touch presentations: UIKit's recognizer state machine and the arena that settles which recognizer owns a touch. Not exported from the package entry point.

@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.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/gesture-tap-long-press.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: tap and long-press gesture recognizers with UIKit's measured thresholds. Not exported from the package entry point; no component uses them yet.
[chore] Internal: tap and long-press gesture recognizers with UIKit's measured thresholds. Not exported from the package entry point.

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

[chore] Internal: a recognizer created with `claimsTouches: false` is a watcher: passive listeners only, simultaneous with every recognizer, and it follows a touch the browser takes for a scroll to the lift. Not exported from the package entry point.

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

[chore] Internal: the layer runtime gains one exit copy for touch presentations that animate a popover out: a static, inert copy of the closing popover, shown only in the top layer where the popover was drawn, for the close to play on.

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

[chore] Internal: one input hold for every layer (`Layer/inputHold`). While a layer presents, a touch, a press or a click anywhere reaches nothing (keys and assistive technology still act, and a pinch still zooms the page); while it dismisses, the same, and the layer's content is inert. The gesture host holds the layer's touches through its touch gates, and `isInputShield` lets a hit test see past a hold's shield. Not exported from the package entry point; ContextMenu's touch lift uses it.

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

[chore] Internal: one opt-in lift-from-trigger presentation for touch surfaces. The trigger itself lifts into the top layer above a tinted backdrop; a surface grows out of the press beside it on the shared rect morph and shrinks back into it on the layer runtime's exit copy; the trigger returns to its place. Translate, scale and opacity only; nothing mounted at rest, four elements while lifted. Not exported from the package entry point; ContextMenu's touch lift uses it.

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

[chore] Internal: one progress module for the motion foundation. `progressCurve` gives a spring's progress from 0 to 1 as a closed-form curve, `mapProgress` maps any curve from another (a companion's dim following a sheet, a clamped range), `mapRange` is the clamped linear map they share, and `presentedProgressVelocity` reads the velocity an interrupted motion continues from. One velocity unit throughout: progress per second. Nothing public changes; ContextMenu's touch lift uses it.

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

[chore] Internal: the rect morph, one way for a touch presentation to grow out of a source rect and shrink back into it. `lerpPath` (a straight line between two rects) and `edgeGrowPath` (UIKit's popover, growing out of a point on its edge) name the rect an element shows at each progress; `morphCurves` turns a path into compositor curves (`translate`, `scale` and a companion `opacity`); `createRectMorph` presents an element along a path and dismisses it back on a copy or on itself, each continuing the other from the rect on screen with its velocity, with Reduced Motion left to the animator. It runs on new progress helpers (`progressCurve`, `mapProgress`, `mapRange`, `presentedProgressVelocity`). Not exported from the package entry point; ContextMenu's touch lift uses it.

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

[chore] An internal `usePresentation` / `readPresentation` resolves a component's `presentation` prop into the surface to render and whether its touch input modes apply, keeping an omitted value distinct from an explicit `'popover'` so a caller's choice always wins over a touch default. ContextMenu reads it; its touch behavior has its own entry.

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

[chore] Internal: Reduce Motion for the touch presentations follows design:reduced-motion beyond the animator too. `reducedMotionFade()` gives code beside the animator the animator's own fade (an opacity-only 200 ms cross-fade on a coarse pointer or after a touch release, at once on any other pointer), `animator.reducedMotion()` reports which form a change takes for feedback that plays no fade of its own, and `reducedMotion.stylex.ts` holds the fade's constants for StyleX transitions. The fade's length is not a theme motion role. Not exported from the package entry point.

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

[chore] Internal: the gesture host applies a recognizer's own `selectionLock` to that recognizer's contact and imports no lock itself; a long press brings one only when it has a hold (a `minimumPressDuration` above 0), and `selectionLock: null` opts out. Not exported from the package entry point.

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

[fix] Where the primary pointer is fine (a mouse, a trackpad, a touchscreen laptop, a desktop pen tablet), the press feedback controller no longer registers a touch listener: it reads the primary pointer at the first finger or pen press and keeps its `touchcancel` listener only while that pointer is coarse.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/uikit-constants-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: the UIKit constants table for touch presentations (springs, scroll physics, timing curves and navigation values), each value with its source and a checked list of the simulator measurements still owed. Not exported from the package entry point; no component reads it yet.
[chore] Internal: the UIKit constants table for touch presentations (springs, scroll physics, timing curves and navigation values), each value with its source and a checked list of the simulator measurements still owed. Not exported from the package entry point.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/uikit-motion-animator-pseudo-element.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: the touch presentations' animator drives a pseudo-element such as a dialog's ::backdrop: a static filling animation holds its value after a curve ends and after `set`, a custom property on its host promotes it, and a Reduce Motion dip borrows and hands back the pseudo-element's own opacity. Not exported from the package entry point.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/uikit-motion-animator.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: a compositor animator for touch presentations. It plays UIKit's springs, and scroll coasts (built by a separate coast module, so a surface that never coasts does not carry them; `decay` plays momentum, and sends a spring back from past an edge through the Reduce Motion policy: a cross-fade on a coarse pointer or after a touch release, at once elsewhere) as Web Animations on translate, rotate, scale and opacity, so they keep running while JavaScript is busy, and reads values and velocities back from the curves for interruption, retargeting and Reduce Motion cross-fades. Not exported from the package entry point; no component uses it yet.
[chore] Internal: a compositor animator for touch presentations. It plays UIKit's springs, and scroll coasts (built by a separate coast module, so a surface that never coasts does not carry them; `decay` plays momentum, and sends a spring back from past an edge through the Reduce Motion policy: a cross-fade on a coarse pointer or after a touch release, at once elsewhere) as Web Animations on translate, rotate, scale and opacity, so they keep running while JavaScript is busy, and reads values and velocities back from the curves for interruption, retargeting and Reduce Motion cross-fades. Not exported from the package entry point.

@vjeux
2 changes: 1 addition & 1 deletion .changeset/uikit-motion-math.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
'@astryxdesign/core': patch
---

[chore] Internal: the spring, decay, rubber-band and projection math of UIKit for touch presentations, as pure functions checked against an independent integration and against values read from UIKit. Not exported from the package entry point; no component uses it yet.
[chore] Internal: the spring, decay, rubber-band and projection math of UIKit for touch presentations, as pure functions checked against an independent integration and against values read from UIKit. Not exported from the package entry point.

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

[chore] Internal: useAnimator, a React wrapper around the touch presentations' animator that never re-renders per frame, and browser proofs on the interaction harness that the animator's motion keeps running through a blocked main thread in Chromium and WebKit. Not exported from the package entry point.

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

[feat] useLongPress takes `stages`: later moments of the same hold, each fired once the finger has stayed that long from the start and still within `moveCancelPx`. ContextMenu claims the finger at its long press and shows its menu at a later stage. `start` also takes the press's start time, so the deadlines can count from a touch's own timestamp.

@vjeux
Loading
Loading