Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1675 commits
Select commit Hold shift + click to select a range
9f6748f
fix(core): a waiting move lands on the latest node detached, and disp…
cixzhang Oct 26, 2026
a103c43
Merge #8521 (the latest detached node) into pseudo-element support
cixzhang Oct 26, 2026
07b3383
fix(core): a press another hook's isEnabled sync resolves ends after …
cixzhang Oct 26, 2026
4012259
fix(interaction): the compositor record refuses a page that opened wh…
cixzhang Oct 26, 2026
2a6b934
Merge n8548 (the compositor record refuses a page opened while it ran…
cixzhang Oct 26, 2026
9f65026
Merge n8549 (the compositor record refuses a page opened while it ran…
cixzhang Oct 26, 2026
2ec969c
fix(core): a Reduce Motion call naming the opacity a waiting dip retu…
vjeux Oct 26, 2026
298458e
Merge #8076 (2ec969c6: a Reduce Motion call naming the opacity a wait…
vjeux Oct 26, 2026
8a1f2ca
test(gestures): the isEnabled-sync press test names its refs as refs
vjeux Oct 26, 2026
1ddea08
fix(interaction): a traced wait on a missing element reports it missing
cixzhang Oct 26, 2026
213e86e
docs(motion): the Reduce Motion planner's fade length is no role, the…
vjeux Oct 26, 2026
6ef5186
perf(core): a promotion reads no style in its own task
vjeux Oct 26, 2026
c440ef6
test(gestures): a recognizer waiting on one a hook's Effect stops rep…
vjeux Oct 26, 2026
70c70e4
Merge #8061 (4c3df941: a screen-edge pan takes the axis across its ed…
vjeux Oct 26, 2026
7088243
Merge #8076 (70c70e41: her #8061 4c3df941, a screen-edge pan claims a…
vjeux Oct 26, 2026
67ff01b
fix(gestures): what a hook's Effect stop unblocks resolves just after it
vjeux Oct 26, 2026
6f4173c
test(core): the mid-dip unmount test reads the element after the defe…
cixzhang Oct 26, 2026
915f9d9
Merge #8521 (the mid-dip unmount test awaits the microtask) into pseu…
cixzhang Oct 26, 2026
d2c3c78
feat(gestures): an action group keeps working under a fine pointer, w…
cixzhang Oct 26, 2026
cc795a1
Merge d2c3c788f0 (#8072 (an action group under a fine pointer)) as a …
cixzhang Oct 26, 2026
266fa0a
Merge #8072 (d2c3c788: the action-group host exception) and #8446 (1d…
cixzhang Oct 27, 2026
8b0cb36
Merge #8309 (cc795a1e: #8072's action-group fine-pointer exception) a…
cixzhang Oct 27, 2026
a490ba1
Merge 1ddea08f3e (#8446 (the harness line's latest)) as a dependency
cixzhang Oct 27, 2026
4ec2b1a
Merge #8315 (8b0cb36f: #8309 cc795a1e, the action-group exception) in…
cixzhang Oct 27, 2026
6f73653
Merge #8315 (8b0cb36f: #8309 cc795a1e) into the gesture watcher
cixzhang Oct 27, 2026
453149e
Merge #8589 (with #8315 8b0cb36f) into the host line
cixzhang Oct 27, 2026
03d8794
Merge 266fa0af50 (#8076 266fa0af (vjeux 70c70e41, #8072 d2c3c788, #84…
cixzhang Oct 27, 2026
ecb82db
Merge #8336 (#8315 8b0cb36f: #8309's press delivery after an isEnable…
cixzhang Oct 27, 2026
8d59b3f
Merge #8309 (03d87941: #8076 266fa0af) as a dependency
cixzhang Oct 27, 2026
dbcfd32
Merge #8315 (8d59b3f3: #8309 03d87941, #8076 266fa0af) into the gestu…
cixzhang Oct 27, 2026
cc0f99a
Merge #8315 (8d59b3f3) into the host line
cixzhang Oct 27, 2026
a4f63a8
Merge #8589 (#8315 8d59b3f3) into the host line
cixzhang Oct 27, 2026
8415bf3
Merge #8336 (#8315 8d59b3f3) into the arena fixes
cixzhang Oct 27, 2026
d5958e0
test(gestures): useGestureRecognizer attaches an action group the hos…
vjeux Oct 27, 2026
ce103c7
feat(gestures): useGestureRecognizer takes actionGroup
vjeux Oct 27, 2026
25b468c
Merge main (2c4f1728: #8056 merged) into play-curves
cixzhang Oct 27, 2026
182ef2e
Merge #8521 (main with #8056) into pseudo-element support
cixzhang Oct 27, 2026
9e06328
fix(core): the host forgets a finger scroll in progress when it stops…
cixzhang Oct 27, 2026
da33639
Merge #8336 (the host forgets a finger scroll when it stops listening…
cixzhang Oct 27, 2026
2e60799
fix(gestures): under inputMode 'pointer-events' a finger is tracked o…
cixzhang Oct 27, 2026
a13314f
fix(core): a touch only watchers follow gets a passive touchend
cixzhang Oct 27, 2026
557f1b5
Merge 2e60799487 (#8072) as a dependency
cixzhang Oct 27, 2026
793c8db
build(lab): Lab reaches core only through core's exports, with no sec…
cixzhang Oct 27, 2026
6586b84
Merge #8589 (a touch only watchers follow gets a passive touchend) in…
cixzhang Oct 27, 2026
6dfa218
Merge #8336 (#8589's passive touchend for watchers) into the arena fixes
cixzhang Oct 27, 2026
056aae8
Merge 793c8dbd (#8076: Lab reaches core only through core's exports) …
cixzhang Oct 27, 2026
b9c3b0b
Merge #8522 (182ef2e9: the animator line carrying main with #8056 lan…
cixzhang Oct 27, 2026
27eeeb8
fix(core): an unmount leaves no will-change read timer on the node it…
cixzhang Oct 27, 2026
ee75f00
Merge #8076 (27eeeb8d: main with #8056 merged through her #8522, her …
vjeux Oct 27, 2026
07920f1
Merge #8076 (27eeeb8db4: main with #8056, the Lab route through core'…
vjeux Oct 27, 2026
5d56624
Merge 27eeeb8d (#8076: carries main with #8056 landed, via #8522 182e…
cixzhang Oct 27, 2026
812e60c
Merge #8309 (dd1b1244: #8076 27eeeb8d with #8056, and #8072 2e607994)…
cixzhang Oct 27, 2026
3cabc26
Merge #8315 (c1776597: #8309 dd1b1244, with #8056 via #8076) into the…
cixzhang Oct 27, 2026
8ada401
test(core): the detached-mid-dip cases read the presented start's inl…
vjeux Oct 27, 2026
1741e3d
Merge #8589 (#8315 c1776597: #8309 dd1b1244, with #8056 via #8076) in…
cixzhang Oct 27, 2026
d8ce0fd
Merge #8336 (#8315 c1776597) into the arena fixes
cixzhang Oct 27, 2026
c224bd6
Merge #8320 (cixzhang's 2b66ca5ab5: #8076 27eeeb8db4 with main's #805…
vjeux Oct 27, 2026
1a7a7ce
docs(core): drawnTranslate's note says nothing about what the inline …
vjeux Oct 27, 2026
b2445d1
Merge #8293 (#8076 27eeeb8db4) into #8356
vjeux Oct 27, 2026
1505383
Merge #8358 (#8076 27eeeb8db4) into #8360
vjeux Oct 27, 2026
e806468
fix(gestures): the action-group press listens through the shared inpu…
vjeux Oct 27, 2026
a550e04
Merge #8356 (#8076 27eeeb8db4; the action-group press on the input st…
vjeux Oct 27, 2026
5247f15
fix(gestures): the action-group press leaves its click to the click g…
vjeux Oct 27, 2026
bec2283
fix(gestures): a gesture that cancels itself on a finger's move keeps…
vjeux Oct 26, 2026
545b190
test(gestures): a scroll-edge pan cancels its first moves while every…
vjeux Oct 27, 2026
3264837
test(gestures): browser proof that a scroll-edge pull's first move is…
vjeux Oct 27, 2026
70646d5
feat(gestures): a scroll-edge pan holds its finger from the first mov…
vjeux Oct 27, 2026
dd975ae
test(gestures): real-touch states for AST-094 FR18–FR22: 9 and 10 px …
cixzhang Oct 27, 2026
a3e07d8
fix(core): the gesture host measures a screen-edge pan's view, so an …
cixzhang Oct 27, 2026
9adbe2d
fix(gestures): a strip authored at the edge region is the edge zone a…
cixzhang Oct 27, 2026
9804fa8
Merge a3e07d88 (#8076: the host's arena environment measures a view) …
cixzhang Oct 27, 2026
1a17882
Merge 9adbe2d8 (#8061: an edge strip within half a pixel of its band …
cixzhang Oct 27, 2026
b54cad3
test(gestures): the real-touch edge strip is the band's own 40.2 px, …
cixzhang Oct 27, 2026
9800eb5
fix(gestures): a scroll takes a finger only after its 10 px of travel…
cixzhang Oct 27, 2026
094f554
docs(gestures): the README's touch-action table qualifies the edge pa…
cixzhang Oct 27, 2026
e9aaf58
Merge 9800eb54 (#8072: a scroll takes a finger after 10 px; pointer-e…
cixzhang Oct 27, 2026
3d991cb
Merge #8309 (c3375f65: #8076 a3e07d88, #8061 9adbe2d8, #8072 9800eb54…
cixzhang Oct 27, 2026
b111bef
Merge #8315 (8ae65405: #8309 c3375f65 with #8076 a3e07d88, #8061 9adb…
cixzhang Oct 27, 2026
5c59af1
fix(gestures): a finger on an action group under a fine pointer reach…
cixzhang Oct 27, 2026
0e1f310
fix(core): with only watchers attached, the host's document listeners…
cixzhang Oct 27, 2026
f8007d0
Merge #8589 (#8315 8ae65405, and its passive-only listeners for watch…
cixzhang Oct 27, 2026
c69c3bd
Merge #8336 (#8315 8ae65405; vjeux's scroll-edge hold; #8589's passiv…
cixzhang Oct 27, 2026
6a315c5
Merge #8076 (a3e07d88: main with #8056 merged, her Lab route through …
vjeux Oct 27, 2026
81e52e3
Merge 5c59af12 (#8072: a finger on an action group under a fine point…
cixzhang Oct 27, 2026
8b65640
Merge #8309 (2d4b4bdc: #8072 5c59af12, an action group's finger under…
cixzhang Oct 27, 2026
195889c
Merge #8315 (10abed58: #8309 2d4b4bdc, #8072 5c59af12: an action grou…
cixzhang Oct 27, 2026
a173564
Merge #8589 (#8315 10abed58) into the host line
cixzhang Oct 27, 2026
ebf988e
Merge #8336 (#8315 10abed58) into the arena fixes
cixzhang Oct 27, 2026
cba0ad9
Merge main (a00afee502: #8521 merged) into the experimental touch layer
vjeux Oct 27, 2026
f5ac3e8
Merge #8076 (cba0ad93f6: main with #8521 merged) into the presented s…
vjeux Oct 27, 2026
3c42849
Merge #8076 (cba0ad93f6: main with #8521 merged) into the progress mo…
vjeux Oct 27, 2026
050fb02
Merge #8076 (cba0ad93f6: a3e07d889b's edge-zone measuring, main with …
vjeux Oct 27, 2026
b3b718c
Merge #8270 (#8076 cba0ad93f6) into #8309
vjeux Oct 27, 2026
fff3c94
Merge #8309 (#8076 cba0ad93f6) into #8315
vjeux Oct 27, 2026
7597a8b
Merge #8315 (#8076 cba0ad93f6) into #8336
vjeux Oct 27, 2026
5ef925e
Merge #8336 (#8076 cba0ad93f6) into #8320
vjeux Oct 27, 2026
be6c3e9
Merge #8320 (#8076 cba0ad93f6: a3e07d889b and main with #8521; her #8…
vjeux Oct 27, 2026
029dcd8
Merge #8340 (f5ac3e8904: no frame shows where a touch motion is going…
vjeux Oct 27, 2026
bb34b87
docs(core): drawnTranslate's note wraps at the file's width again
vjeux Oct 27, 2026
19b4f54
Merge #8293 (#8076 cba0ad93f6; #8340 f5ac3e8904) into #8356
vjeux Oct 27, 2026
a10f5dc
Merge #8356 (#8076 cba0ad93f6; #8340 f5ac3e8904) into #8358
vjeux Oct 27, 2026
f05de0b
Merge #8358 (#8076 cba0ad93f6; #8340 f5ac3e8904) into #8360
vjeux Oct 27, 2026
f9a51e7
test(gestures): a watcher follows a touch the browser scrolls with to…
cixzhang Oct 27, 2026
da6eff4
fix(gestures): a scroll-edge pan holds a lone finger only, so a pinch…
cixzhang Oct 27, 2026
abcb083
Merge #8589 (a watcher's real-touch browser test) into the host line
cixzhang Oct 27, 2026
778af5b
Merge #8336 (a scroll-edge pan holds a lone finger only; #8589's watc…
cixzhang Oct 27, 2026
0de626e
test(gestures): the 41 px edge-band case skips WebKit like the file's…
cixzhang Oct 27, 2026
050f9aa
Merge #8309 (c5b1e894: the 41 px edge-band case skips WebKit) as a de…
cixzhang Oct 27, 2026
1b9b194
Merge #8315 (2850d32b: #8309 c5b1e894, a WebKit test skip) into the g…
cixzhang Oct 27, 2026
c4eda24
Merge #8589 (#8315 2850d32b) into the host line
cixzhang Oct 27, 2026
6a353a3
Merge #8336 (#8315 2850d32b) into the arena fixes
cixzhang Oct 27, 2026
b23c845
Merge #8270 (#8076 cba0ad93f6) into #8309
vjeux Oct 27, 2026
ebf357b
Merge #8315 (#8076 cba0ad93f6) into #8336
vjeux Oct 27, 2026
5c2b322
Merge #8309 (#8076 cba0ad93f6) into #8315
vjeux Oct 27, 2026
19e3b68
Merge #8336 (#8076 cba0ad93f6) into #8320
vjeux Oct 27, 2026
b1773f9
Merge #8320 (her 46fb7beee4: the 41 px case skips WebKit; a scroll-ed…
vjeux Oct 27, 2026
8868ee0
Merge #8356 (#8320 46fb7beee4) into #8358
vjeux Oct 27, 2026
179413c
Merge #8293 (#8320 46fb7beee4) into #8356
vjeux Oct 27, 2026
94ad383
Merge #8358 (#8320 46fb7beee4) into #8360
vjeux Oct 27, 2026
184850b
test(gestures): a scroll-edge pan holds nothing while a second finger…
vjeux Oct 27, 2026
68d5b13
fix(gestures): a scroll-edge pan holds nothing while a second finger …
vjeux Oct 27, 2026
3bfd7c3
fix(core): the animator reads no style for a node out of the document
vjeux Oct 27, 2026
8a6db25
test(gestures): the watcher's browser test checks it reports moves af…
cixzhang Oct 27, 2026
f0873ec
Merge #8589 (the watcher's browser test checks moves after the takeov…
cixzhang Oct 27, 2026
f7b7bfa
Merge #8336 (vjeux's two-finger scroll-edge fix; #8589's watcher brow…
cixzhang Oct 27, 2026
2119cfa
Merge #8076 (3bfd7c32da: the animator reads no style for a node out o…
vjeux Oct 27, 2026
d70e066
test(core): the press feedback controller imports nothing from the ge…
vjeux Oct 27, 2026
fbed9d2
refactor(core): the coarse-pointer query moves to the environment que…
vjeux Oct 27, 2026
e585b5b
Merge #8270 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
d9299b5
Merge #8309 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
838c6bc
test(gestures): the watcher's browser test names its record type (lint)
cixzhang Oct 27, 2026
5fd7fe3
Merge #8589 (the watcher browser test's lint fix) into the host line
cixzhang Oct 27, 2026
8aa2e1b
Merge #8336 (#8589's lint fix) into the arena fixes
cixzhang Oct 27, 2026
9f724cd
test(gestures): the watcher's real-touch test reads its end before th…
vjeux Oct 27, 2026
51194e8
Merge #8315 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
b6ccec5
Merge #8336 (#8076 3bfd7c32da; the coarse-pointer query in utils/) in…
vjeux Oct 27, 2026
6277ad7
Merge #8320 (cixzhang's ea8531cd9b: the scroll-edge hold for a lone f…
vjeux Oct 27, 2026
7e040c1
Merge #8356 (#8320 ea8531cd9b; #8076 3bfd7c32da; the coarse-pointer q…
vjeux Oct 27, 2026
1d15a79
Merge #8293 (#8320 ea8531cd9b; #8076 3bfd7c32da; the coarse-pointer q…
vjeux Oct 27, 2026
c06c7fa
Merge #8358 (#8320 ea8531cd9b; #8076 3bfd7c32da; the coarse-pointer q…
vjeux Oct 27, 2026
1aade8a
test(gestures): an in-band touch on a wider element decides at 15 px …
vjeux Oct 27, 2026
3d85c30
fix(gestures): an in-band touch decides at 15 px whatever the element…
vjeux Oct 27, 2026
9d0f6f2
Merge #8061 (3d85c303e6: an in-band screen-edge touch decides at 15 p…
vjeux Oct 27, 2026
11dbebf
Merge #8641 (bec2283d0f: a gesture that cancels itself on a finger's …
vjeux Oct 27, 2026
d9a1e1a
fix(gestures): an in-band touch decides at 10 px on an element wider …
vjeux Oct 27, 2026
e6ab0b9
Merge #8061 (d9a1e1ad19: an in-band touch on an element wider than th…
vjeux Oct 27, 2026
e7b5b3c
Merge #8076 (e6ab0b9cd9: #8061 d9a1e1ad19, an in-band screen-edge tou…
vjeux Oct 27, 2026
c64fe2e
Merge #8270 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641) into #8309
vjeux Oct 27, 2026
428e63a
Merge #8315 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641) into #8336
vjeux Oct 27, 2026
9f399cc
Merge #8309 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8641's moving…
vjeux Oct 27, 2026
739083a
Merge the #8589 watcher-test fix (1b6e19f7b0: the real-touch test rea…
vjeux Oct 27, 2026
7aea004
Merge #8336 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
d8f0622
Merge #8356 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
dd9bac2
Merge #8320 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
9e51fd3
Merge #8293 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
c290e8e
test(motion): retire the gate that kept the menus off the gestures table
vjeux Oct 27, 2026
b756fdc
Merge #8358 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
47e9e85
Merge #8076 (e6ab0b9cd9: the animator reads no style for a node out o…
vjeux Oct 27, 2026
c799424
test(gestures): a finger from a browser that sends Touch Events but e…
vjeux Oct 27, 2026
1939b1d
fix(gestures): the host reads no Touch Events where it takes fingers …
vjeux Oct 27, 2026
33afe0b
Merge #8336 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
44c6430
Merge #8320 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
5c14a77
Merge #8293 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
59d580c
Merge #8356 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
05554e0
test(motion): the uikit barrel keeps UIKIT_CLICK for importers writte…
vjeux Oct 27, 2026
0949c4b
fix(motion): the uikit barrel keeps UIKIT_CLICK, with the click guard…
vjeux Oct 27, 2026
bee3d30
Merge #8358 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
34f7dfa
test(core): Core's root, hooks and utils entries carry no gesture code
vjeux Oct 27, 2026
fe40c97
fix(core): the haptic switch's attribute lives in utils, so Core's pu…
vjeux Oct 27, 2026
3fb31dd
Merge main (6aea9bda01: #8663 merged, one release policy) into the ex…
vjeux Oct 27, 2026
9718a3d
Merge #8076 (3fb31ddb3e: main 6aea9bda merged, #8663's release policy…
vjeux Oct 27, 2026
30c2216
Merge main (6aea9bda01: #8663 merged) into the motion progress module
vjeux Oct 27, 2026
170162d
Merge #8076 (main's #8663 rows in motion/README.md) into #8270
vjeux Oct 27, 2026
e001ec5
Merge #8270 (#8076: main's #8663 rows in motion/README.md) into #8309
vjeux Oct 27, 2026
52d50fd
Merge #8309 (#8076: main's #8663 rows in motion/README.md) into #8315
vjeux Oct 27, 2026
a8a3ff9
Merge #8315 (#8076: main's #8663 rows in motion/README.md) into #8336
vjeux Oct 27, 2026
cf51773
Merge #8336 (#8076: main's #8663 rows in motion/README.md) into #8320
vjeux Oct 27, 2026
466ff26
Merge #8320 (#8076: main's #8663 rows in motion/README.md; this pull …
vjeux Oct 27, 2026
cf21346
Merge #8358 (#8076: main's #8663 rows in motion/README.md) into #8360
vjeux Oct 27, 2026
2ff7aa0
Merge #8356 (#8076: main's #8663 rows in motion/README.md) into #8358
vjeux Oct 27, 2026
ddd234e
Merge #8293 (#8076: main's #8663 rows in motion/README.md) into #8356
vjeux Oct 27, 2026
389db4e
fix(core): usePressTracker rebuilds its tracker when its options change
vjeux Oct 27, 2026
b6a910d
fix(core): a presented call's curve that a later one's channel holds …
vjeux Oct 27, 2026
30b58c7
test(core): only the utils entry is pinned gesture-free; the root and…
vjeux Oct 27, 2026
3fc2983
test(gestures): a recognizer inside a shadow root gets its finger and…
vjeux Oct 27, 2026
5aab251
fix(gestures): the host resolves what an input landed on through the …
vjeux Oct 27, 2026
cc4011b
Merge #8336 (a recognizer inside a shadow root gets its finger: the h…
vjeux Oct 27, 2026
825e16d
Merge #8320 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
3e78134
Merge #8358 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
bcb4302
Merge #8356 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
2702155
Merge #8293 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
b039876
test(core): the held-dip proofs wait for the dip to finish, not for 2…
vjeux Oct 27, 2026
a3801ed
test(useMenuPress): the trigger keeps the released tolerance on a fin…
vjeux Oct 27, 2026
3c97a18
fix(useMenuPress): the trigger takes its tolerance when its press sta…
vjeux Oct 27, 2026
e20974f
test(useLongPress): the travel is measured on each axis, as its docum…
vjeux Oct 27, 2026
e0e4e7b
fix(useLongPress): the tolerance is measured on each axis again, as d…
vjeux Oct 27, 2026
6d125a3
test(gestures): a scroll and its brake see a finger inside an open sh…
vjeux Oct 27, 2026
8e4359d
fix(gestures): a scroll and its brake compare a finger along the flat…
vjeux Oct 27, 2026
1510a07
Merge #8336 (the host compares a finger with a scroller along the fla…
vjeux Oct 27, 2026
9b050f5
Merge #8320 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
b142603
Merge #8293 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
3548b57
Merge #8356 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
bdb01db
Merge #8358 (useLongPress measures its tolerance on each axis again, …
vjeux Oct 27, 2026
4dd3041
refactor(useLongPress): the per-press tolerance stays off the public …
vjeux Oct 27, 2026
e7b0676
fix(core): a motion from rest that a block delays starts after it in …
vjeux Oct 27, 2026
7f2aa46
test(core): the after-block start is judged on the first frame after …
vjeux Oct 27, 2026
4e2895d
Merge #8076 (389db4e90a: usePressTracker rebuilds its tracker when it…
vjeux Oct 27, 2026
11c3536
fix(core): a handle's finished waits while a sampler holds its animation
vjeux Oct 27, 2026
3846b6a
Merge main 70ea85903c into #8073
vjeux Oct 28, 2026
ca2543d
Merge remote-tracking branch 'origin/main' into HEAD
cixzhang 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
f24e872
Merge #8446 ca2543df75 and #8073 63128d3530 into #8076
vjeux Oct 28, 2026
9ec7a2d
Merge main (70ea8590: #8045, #8046 landed)
cixzhang Oct 28, 2026
6f994bc
docs(core): the gestures README names both writers of the press attri…
vjeux Oct 28, 2026
4d08e5f
Merge #8076 6f994bcdfb into #8360
vjeux Oct 28, 2026
4812876
docs(core): pressFeedback says paintPress writes the presses it track…
vjeux Oct 28, 2026
b2dfb97
docs(changeset): the press-tracking changeset names both writers of t…
vjeux Oct 28, 2026
f16862c
test(useMenuPress): a finger held on the trigger keeps FR29's drift a…
vjeux Oct 29, 2026
3457211
fix(useMenuPress): a finger held on the trigger keeps FR29's drift al…
vjeux Oct 29, 2026
14c8456
Merge #8360 1e1431fe2f and main 90da4a77b6 into #8340
vjeux Oct 29, 2026
9b65688
chore(gestures): the gesture files on this line have no unused bindings
vjeux Oct 29, 2026
c4fc17c
test(gestures): a rotation re-based on every change releases at its r…
vjeux Oct 29, 2026
68e52c6
fix(gestures): a re-based rotation keeps its release velocity
vjeux Oct 29, 2026
d109156
test(motion): the Reduce Motion late-dip proof reads what the dip ani…
vjeux Oct 29, 2026
34c249d
test(gestures): a finger inside an open shadow root is down in its sc…
vjeux Oct 29, 2026
6327aad
fix(gestures): a finger inside an open shadow root is compared along …
vjeux Oct 29, 2026
d251fe4
test(gestures): an element stays an action group while any of its att…
vjeux Oct 29, 2026
a4dac2a
fix(gestures): an element is an action group while any of its attachm…
vjeux Oct 29, 2026
48480c8
test(gestures): a tap on a moving sheet's shadow-root content reaches…
vjeux Oct 29, 2026
a419099
fix(gestures): the presented hit test descends into open shadow roots
vjeux Oct 29, 2026
2983b8e
test(gestures): no touch-action rule stays once the last marked eleme…
vjeux Oct 29, 2026
3ad2302
fix(gestures): a document's or shadow root's touch-action rules go wi…
vjeux Oct 29, 2026
2fbaf66
docs(gestures): presented hit testing names its review condition, and…
vjeux Oct 29, 2026
3cfaba0
docs(gestures): the README and the barrel point Lab at @astryxdesign/…
vjeux Oct 29, 2026
ba1fa21
docs(core): the input stream's notes name the stops it fixes, what st…
vjeux Oct 29, 2026
4049c67
docs(changeset): the build changeset names the treeshakeCompensation …
vjeux Oct 29, 2026
94c7b38
test(gestures): real-touch proofs for a still finger's sub-pixel jitt…
vjeux Oct 29, 2026
312be68
test(gestures): a retargeted tap with only watchers attached activate…
vjeux Oct 29, 2026
fe8f997
Merge #8360 75392b296a into #8340
vjeux Oct 29, 2026
d3ec808
docs(core): the input stream's notes no longer list click among the g…
vjeux Oct 29, 2026
63c7ae5
Merge #8360 045f666f7a and main 90da4a77b6 into #8497
vjeux Oct 29, 2026
564ac30
test(core): a start the browser dates by the call stays when its own …
vjeux Oct 29, 2026
288be7d
fix(core): only a block in a call's own task moves its start from rest
vjeux Oct 29, 2026
119a76f
test(core): a block shorter than two frames in a call's own task move…
vjeux Oct 29, 2026
881e7e8
fix(core): a call from rest starts no earlier than the end of its own…
vjeux Oct 29, 2026
b7b0809
Merge #8340 fc42d64f7e and #8497 c9ca01e134 into the morph paths
vjeux Oct 29, 2026
08d281b
feat(core): the rect morph's paths, the rect a grow-out presentation …
vjeux Oct 29, 2026
f67e575
docs(core): the morph paths' headers name nothing that is missing at …
vjeux Oct 30, 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. The `{stylexOptions}` form now passes StyleX `treeshakeCompensation: true` by default (before, its babel pass ran with StyleX's default, `false`), as the plugin form already does; pass `treeshakeCompensation: false` in `stylexOptions` to restore the old behavior.

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

[chore] Internal: the gesture recognizers and the menu press model share one guard for the browser's click after a gesture that already acted, swallowing it for 400ms or until the next press. Keyboard and assistive-technology clicks (`detail` 0) always pass.

@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: 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 scroll lock's page hold and the finger-scroll watch keep their own listeners and ask the host only about the touches it owns. 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. `paintPress` in `utils/pressFeedback.ts` writes `data-astryx-press` for every press it tracks; the action-group tracker writes its groups' presses itself. 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-recognizer-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: gesture recognizer and arena fixes from review; a pan claims nothing before it begins at 10 pt; one velocity tracker for every gesture (`spec:AST-100`: UIKit's measured blend, a scrolling surface's release through the pan's `scrollVelocity()`, and FR2's release rules). 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/input-stream.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[fix] The touch press feedback and the gesture recognizers now hear page-wide input through one shared stream on the window's capture phase, so an app's window-capture `stopPropagation`, or a document-capture `stopImmediatePropagation` registered before Core, no longer hides a touch from them. A recognizer that must claim a touch mid-gesture still needs the touch to reach its element. Each event type's listener is passive unless a subscriber cancels it (the gesture host's `touchend` and `contextmenu` while a claiming recognizer or press tracker is attached, the page hold's `touchmove` while it holds, and the click guard's `click` once it first arms), so a page of pressables registers no listener that can hold a scroll.

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

[chore] Internal: `useLongPress` (ContextMenu's long press, and the held finger that opens a menu from its trigger) takes its default duration and tolerance, 500ms and 10px on either axis, from the same source as the long-press gesture recognizer. No behavior changes.

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

[fix] A finger held on a DropdownMenu trigger may drift up to 13px on each axis and still open the menu under every primary pointer, a phone's, a tablet's and a touchscreen laptop's alike, as AST-094 FR29 allows; it cancelled past 10px. No menu, row or trigger reads the pointer query.

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

[chore] Internal: the rect morph's paths, the geometry touch presentations share when they 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, and say how an interrupted motion continues in their own law; `morphCurves` turns a path into compositor curves (`translate`, `scale` and a companion `opacity`). Not exported from the package entry point; no component uses them yet.

@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; no component imports it yet.

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

[chore] On iOS, a touch on an element the compositor animator is moving reaches what is drawn: the animator reports each moving element's offset from its layout box, and the gesture host sends the touch, press bounds and the tap's click there instead of to the layout position iOS WebKit hit-tests.

@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/use-finger-scroll.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: `useFingerScroll(scroller)` tells a finger's scroll from the program's, and the gestures README gains a guide to migrating a raw-touch drag onto the recognizers. Internal to the touch components: not exported from the package entry point or the gestures barrel.

@vjeux
Loading
Loading