Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2018 commits
Select commit Hold shift + click to select a range
1e44dc3
Merge #8315 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641) into #8336
vjeux Oct 27, 2026
9486526
Merge #8309 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8641's moving…
vjeux Oct 27, 2026
5f89edf
Merge #8485 (e238de662f) into #8201
vjeux Oct 27, 2026
1027e0e
Merge #8201 (5f89edff9c) into #8213
vjeux Oct 27, 2026
0f2a003
Merge #8213 (1027e0ea98) into #8228
vjeux Oct 27, 2026
03155c3
Merge the #8589 watcher-test fix (1b6e19f7b0: the real-touch test rea…
vjeux Oct 27, 2026
3d7fa2e
Merge #8336 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
82fe8b7
Merge #8356 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
d835d1c
Merge #8320 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
ee5387a
Merge #8293 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
aebbb7c
test(motion): retire the gate that kept the menus off the gestures table
vjeux Oct 27, 2026
23ade34
Merge #8358 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
9fa271e
Merge #8360 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8589's watche…
vjeux Oct 27, 2026
d535664
Merge #8336 (03155c374e: F2's fZ line on #8076 e6ab0b9cd9, with the w…
vjeux Oct 27, 2026
47e9e85
Merge #8076 (e6ab0b9cd9: the animator reads no style for a node out o…
vjeux Oct 27, 2026
e90fc8a
test(gestures): a finger from a browser that sends Touch Events but e…
vjeux Oct 27, 2026
00ab452
fix(gestures): the host reads no Touch Events where it takes fingers …
vjeux Oct 27, 2026
1d43d0d
Merge #8336 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
898d317
Merge #8320 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
169cd73
Merge #8293 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
cb552b2
Merge #8356 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
ff6a464
Merge #8342 (d535664aec) into #8485
vjeux Oct 27, 2026
49345f0
Merge #8485 (ff6a464334) into #8201
vjeux Oct 27, 2026
317687b
Merge #8201 (49345f0540) into #8213
vjeux Oct 27, 2026
3224ac3
Merge #8213 (317687bfbe) into #8228
vjeux Oct 27, 2026
11a1a2d
test(motion): the uikit barrel keeps UIKIT_CLICK for importers writte…
vjeux Oct 27, 2026
d8651c2
fix(motion): the uikit barrel keeps UIKIT_CLICK, with the click guard…
vjeux Oct 27, 2026
c246cf6
Merge #8360 (the uikit barrel keeps UIKIT_CLICK) into the every-point…
vjeux Oct 27, 2026
f562631
Merge #8358 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
22f0517
Merge #8360 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
6f56ef9
test(core): Core's root, hooks and utils entries carry no gesture code
vjeux Oct 27, 2026
57b5bbd
fix(core): the haptic switch's attribute lives in utils, so Core's pu…
vjeux Oct 27, 2026
32ccda6
test(gestures): a claiming recognizer keeps its blocking touchmove un…
vjeux Oct 27, 2026
dbf5390
fix(gestures): a claiming recognizer's element keeps its blocking tou…
vjeux Oct 27, 2026
78d4c1d
test(gestures): a mouse or a pen pan takes no text selection once it …
vjeux Oct 27, 2026
7356a69
fix(gestures): a mouse or a pen pan takes no text selection once it c…
vjeux Oct 27, 2026
c69cf92
docs(gestures): the README and changeset name the claiming touchmove,…
vjeux Oct 27, 2026
7fc24e1
test(gestures): a right click or a ctrl-click on macOS starts no pres…
vjeux Oct 27, 2026
e78b2da
fix(gestures): a ctrl-click on macOS starts no press, as a right clic…
vjeux Oct 27, 2026
f4be8f0
Merge #8360 (the haptic switch's attribute lives in utils: Core's pub…
vjeux Oct 27, 2026
092e949
test(gestures): one shared context request from a long press, a right…
vjeux Oct 27, 2026
f5bc487
feat(gestures): one shared context request from a long press, a right…
vjeux Oct 27, 2026
5f996c5
test(gestures): a real browser makes one context request per gesture …
vjeux Oct 27, 2026
895b75d
docs(changeset): the lift module, the input hold, the rect morph and …
vjeux Oct 27, 2026
c97a702
docs(changeset): the press constants and the presentation resolver ha…
vjeux Oct 27, 2026
c997f73
Merge the static-import offer on #8125 (c97a702d6f) into #8201
vjeux Oct 27, 2026
e10a362
Merge #8201 (c997f735ee) into #8213
vjeux Oct 27, 2026
efefa0b
Merge #8213 (e10a36288b) into #8228
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
1aaf2db
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
9943eca
Merge #8340 (9718a3d851: #8076 with main 6aea9bda) into the rect morp…
vjeux Oct 27, 2026
46347b2
Merge #8497 (30c22161f0: main 6aea9bda folded in) into the rect morph…
vjeux Oct 27, 2026
170162d
Merge #8076 (main's #8663 rows in motion/README.md) into #8270
vjeux Oct 27, 2026
58dbb1a
Merge #8270 (#8076: main's #8663 rows in motion/README.md) into #8309
vjeux Oct 27, 2026
2e77071
Merge #8309 (#8076: main's #8663 rows in motion/README.md) into #8315
vjeux Oct 27, 2026
3b1b26d
Merge #8315 (#8076: main's #8663 rows in motion/README.md) into #8336
vjeux Oct 27, 2026
ca71fce
Merge #8336 (#8076: main's #8663 rows in motion/README.md) into #8320
vjeux Oct 27, 2026
fe527be
Merge #8320 (#8076: main's #8663 rows in motion/README.md; this pull …
vjeux Oct 27, 2026
0dd683d
Merge #8358 (#8076: main's #8663 rows in motion/README.md) into #8360
vjeux Oct 27, 2026
c5465c2
Merge #8356 (#8076: main's #8663 rows in motion/README.md) into #8358
vjeux Oct 27, 2026
52e5eb7
Merge #8293 (#8076: main's #8663 rows in motion/README.md) into #8356
vjeux Oct 27, 2026
f785deb
Merge #8360 (#8076: main's #8663 rows in motion/README.md) into the e…
vjeux Oct 27, 2026
02b9263
Merge #8665 (#8076: main's #8663 rows in motion/README.md) into the c…
vjeux Oct 27, 2026
aba5646
Merge #8336 (3b1b26d530: F2's line on #8076 3fb31ddb3e, main with #86…
vjeux Oct 27, 2026
54d7809
test(core): a touch component's import carries its gesture code, and …
vjeux Oct 27, 2026
6ec3609
Merge #8329 (46347b2aeb) into #8485
vjeux Oct 27, 2026
f487b07
Merge #8485 (6ec3609ce3) into #8201
vjeux Oct 27, 2026
b5517ef
Merge #8201 (f487b07590) into #8213
vjeux Oct 27, 2026
d413f36
Merge #8213 (b5517ef89d) into #8228
vjeux Oct 27, 2026
b6a8347
test(core): the imports open work makes gesture users are listed; But…
vjeux Oct 27, 2026
85407d1
Merge #8186 (1aaf2db59d) into #8485
vjeux Oct 27, 2026
7ced73a
Merge #8485 (85407d128b) into #8201
vjeux Oct 27, 2026
c9190f6
Merge #8201 (7ced73aadb) into #8213
vjeux Oct 27, 2026
efda7fa
Merge #8213 (c9190f64ba) into #8228
vjeux Oct 27, 2026
1ff61f6
Merge #8670 02b926303d (the shared context request) into #8228
vjeux Oct 27, 2026
3c8168d
test(core): useMenuPress may carry the native-scroll probe
vjeux Oct 27, 2026
798809f
Merge #8342 (aba564668f) into #8485
vjeux Oct 27, 2026
2820cda
Merge #8485 (798809f3ec) into #8201
vjeux Oct 27, 2026
78e0360
Merge #8201 (2820cdab81) into #8213
vjeux Oct 27, 2026
981f544
Merge #8213 (78e0360bf0) into #8228
vjeux Oct 27, 2026
a3511eb
test(gestures): a mouse drag a pan claimed selects no page text, in W…
vjeux Oct 27, 2026
389db4e
fix(core): usePressTracker rebuilds its tracker when its options change
vjeux Oct 27, 2026
49f872a
fix(gestures): a claimed mouse or pen drag holds selection off docume…
vjeux Oct 27, 2026
c1f24bf
test(gestures): a fine-pointer finger's press on an action group ends…
vjeux Oct 27, 2026
08b5a2a
Merge #8665 (a claimed mouse or pen drag holds selection off document…
vjeux Oct 27, 2026
e7bc3d5
Merge #8670 08b5a2ab6f (#8665: a claimed mouse or pen drag holds sele…
vjeux Oct 27, 2026
b6a910d
fix(core): a presented call's curve that a later one's channel holds …
vjeux Oct 27, 2026
9adc6f2
Merge #8360 (only the utils entry is pinned gesture-free) into the ev…
vjeux Oct 27, 2026
5588013
test(core): only the utils entry is pinned gesture-free; the root and…
vjeux Oct 27, 2026
2df88be
Merge #8665 (only the utils entry is pinned gesture-free) into the co…
vjeux Oct 27, 2026
d6de77d
Merge #8670 (only the utils entry is pinned gesture-free) into the #8…
vjeux Oct 27, 2026
de288b0
test(core): the imports that open touch pull requests make gesture us…
vjeux Oct 27, 2026
b02bad3
Merge #8340 (b6a910dd40: a presented call's curve that a later one's …
vjeux Oct 27, 2026
d3624cd
Merge #8340 (b6a910dd40) into #8485
vjeux Oct 27, 2026
afbec6d
Merge #8485 (d3624cd94e) into #8201
vjeux Oct 27, 2026
b8b636d
test(ContextMenu): the long-press a11y check syncs on the lift, or th…
vjeux Oct 27, 2026
f0aac9a
Merge #8201 (b8b636df5c) into #8213
vjeux Oct 27, 2026
7048bd1
Merge #8213 (f0aac9a318) into #8228
vjeux Oct 27, 2026
0b2b013
test(gestures): a recognizer inside a shadow root gets its finger and…
vjeux Oct 27, 2026
c06acd5
fix(gestures): the host resolves what an input landed on through the …
vjeux Oct 27, 2026
fce152e
Merge #8329 (b02bad37eb) into #8485
vjeux Oct 27, 2026
03b5a7b
Merge #8485 (fce152e83d) into #8201
vjeux Oct 27, 2026
3813539
Merge #8201 (03b5a7b8be) into #8213
vjeux Oct 27, 2026
94b698e
Merge #8213 (381353978d) into #8228
vjeux Oct 27, 2026
3c8817f
test(gestures): the drag selection case reads the page once the selec…
vjeux Oct 27, 2026
8f65fea
Merge #8665 (the host resolves targets through the composed path, for…
vjeux Oct 27, 2026
7987c05
Merge #8670 (the host resolves targets through the composed path, for…
vjeux Oct 27, 2026
620fbfe
test(gestures): a recognizer inside a shadow root gets its finger and…
vjeux Oct 27, 2026
c3c119a
fix(gestures): the host resolves what an input landed on through the …
vjeux Oct 27, 2026
53a1e69
Merge #8336 (a recognizer inside a shadow root gets its finger: the h…
vjeux Oct 27, 2026
9a0d046
Merge #8320 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
6e42f12
Merge #8358 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
27d3958
Merge #8356 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
5805486
Merge #8293 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
c2cd3ba
Merge #8360 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
3d038b9
test(ContextMenu): the long-press a11y check taps outside once the pr…
vjeux Oct 27, 2026
14844cb
Merge #8201 (3d038b9b72) into #8213
vjeux Oct 27, 2026
d1176fc
Merge #8213 (14844cb94c) into #8228
vjeux Oct 27, 2026
0ab0b1b
Merge #8665 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
987fef6
Merge #8670 (#8336: a recognizer inside a shadow root gets its finger…
vjeux Oct 27, 2026
4b13b76
test(ContextMenu): the headless context menu and its hook (spec:AST-1…
vjeux Oct 27, 2026
f9c18a1
feat(ContextMenu): createContextMenu and useContextMenu, one menu at …
vjeux Oct 27, 2026
b039876
test(core): the held-dip proofs wait for the dip to finish, not for 2…
vjeux Oct 27, 2026
5e0277e
Merge #8336 (c3c119a466: the host resolves what an input landed on th…
vjeux Oct 27, 2026
20365c7
docs(ContextMenu): createContextMenu and useContextMenu pages, and th…
vjeux Oct 27, 2026
974ca77
Merge #8342 (5e0277e26a) into #8485
vjeux Oct 27, 2026
c2c6b24
Merge #8485 (974ca77efe) into #8201
vjeux Oct 27, 2026
533e881
test(hooks): the shadow-root menu check taps its host once the presen…
vjeux Oct 27, 2026
2560a03
Merge #8201 (533e88113b) into #8213
vjeux Oct 27, 2026
cab9822
Merge #8213 (2560a03224) into #8228
vjeux Oct 27, 2026
8c4c407
docs(ContextMenu): useContextMenu's page says an app's own contexts d…
vjeux Oct 27, 2026
fbb7ef4
test(gestures): a two-stage hold requests at a lift after its commit …
vjeux Oct 27, 2026
154a743
docs(docsite): the route lock gains createContextMenu's and useContex…
vjeux Oct 27, 2026
bed78c5
feat(gestures): a two-stage hold requests at a lift after its commit …
vjeux Oct 27, 2026
fce2654
Merge #8670 (a two-stage hold requests at a lift after its commit whe…
vjeux Oct 27, 2026
c1664d3
test(gestures): a hold's drift can be measured on each axis against i…
vjeux Oct 27, 2026
a7d2132
feat(gestures): a hold's drift tolerance is its own, measured as a di…
vjeux Oct 27, 2026
41d3e61
test(useMenuPress): the trigger keeps the released tolerance on a fin…
vjeux Oct 27, 2026
d06691b
fix(useMenuPress): the trigger takes its tolerance when its press sta…
vjeux Oct 27, 2026
a3527b9
test(useLongPress): the travel is measured on each axis, as its docum…
vjeux Oct 27, 2026
f62179d
fix(useLongPress): the tolerance is measured on each axis again, as d…
vjeux Oct 27, 2026
120350b
test(gestures): a scroll and its brake see a finger inside an open sh…
vjeux Oct 27, 2026
a0c57a3
fix(gestures): a scroll and its brake compare a finger along the flat…
vjeux Oct 27, 2026
a8b174a
Merge #8336 (the host compares a finger with a scroller along the fla…
vjeux Oct 27, 2026
c1186e4
Merge #8320 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
886749b
Merge #8293 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
af9cb4e
Merge #8356 (#8336: the host compares a finger with a scroller along …
vjeux Oct 27, 2026
1ffc9d8
Merge #8360 (the menu trigger takes its tolerance when its press star…
vjeux Oct 27, 2026
68b16ab
Merge #8665 (#8360: the menu trigger takes its tolerance at the press…
vjeux Oct 27, 2026
b390514
Merge #8358 (useLongPress measures its tolerance on each axis again, …
vjeux Oct 27, 2026
8c6a490
Merge #8670 (C20's per-axis hold tolerance; #8665: #8360's menu trigg…
vjeux Oct 27, 2026
0f2397e
test(gestures): a claimed pen's stylus touchend is cancelled, as a fi…
vjeux Oct 27, 2026
5a64900
fix(gestures): a claimed pen's stylus touchend is cancelled, as a fin…
vjeux Oct 27, 2026
cf9d66c
Merge #8665 (a claimed pen's stylus touchend is cancelled, as a finge…
vjeux Oct 27, 2026
af914ab
Merge #8670 (#8665: a claimed pen's stylus touchend is cancelled, as …
vjeux Oct 27, 2026
6d60ba3
feat(core): a rect morph plays on an animator it is handed, and takes…
vjeux Oct 27, 2026
d0f24e1
fix(core): a rect morph keeps the animator's dip for an element that …
vjeux Oct 27, 2026
5f6bc04
refactor(useLongPress): the per-press tolerance stays off the public …
vjeux Oct 27, 2026
6b3e60d
docs(gestures): the host's header and the host-owner changeset descri…
vjeux Oct 27, 2026
f28d42e
Merge main (6a751f7b7a: #8646's every-pointer gestures) into the rect…
vjeux Oct 27, 2026
8d7da28
test(gestures): the screen-edge pan is locked to a finger; a widened …
vjeux Oct 27, 2026
83b2084
fix(gestures): the screen-edge pan is a finger's only; its options ta…
vjeux Oct 27, 2026
bd1d489
Merge #8186 (f28d42ee0f: main 6a751f7b7a, #8646's every-pointer gestu…
vjeux Oct 27, 2026
dd431b1
Merge #8329 (d0f24e1f98) into #8485
vjeux Oct 27, 2026
a0e1620
Merge #8485 (dd431b1885) into #8201
vjeux Oct 27, 2026
94744dc
Merge #8201 (a0e1620582) into #8213
vjeux Oct 27, 2026
5e40861
Merge #8213 (94744dc90f) into #8228
vjeux Oct 27, 2026
b945455
Merge the #8670 helper (af914abea7: the hold's per-axis drift, a lift…
vjeux Oct 27, 2026
3ccf1bd
Merge #8228 (5e40861da0: main 6a751f7b7a through #8186, and the FR35 …
vjeux Oct 27, 2026
da02df9
test(selectionLock): a finger's and a pen's hold take the lock under …
vjeux Oct 27, 2026
42baf0f
fix(selectionLock): a finger's and a pen's hold take the lock under a…
vjeux Oct 27, 2026
538039c
test(clickGuard): a guard whose view goes away lets its window run ou…
vjeux Oct 27, 2026
9c1d352
test(gestures): a cancelled mouse or pen press lifts the document-wid…
vjeux Oct 27, 2026
2d365a7
fix(gestures): a click guard whose view went away drops without touch…
vjeux Oct 27, 2026
156b9d7
test(clickGuard): no guard outlives the test that armed it
vjeux Oct 27, 2026
9960efe
fix(test-utils): the shared setup disarms every click guard as each t…
vjeux Oct 27, 2026
e1b7586
test(ContextMenu): ContextMenu opens only through its trigger's conte…
vjeux Oct 27, 2026
500fd27
refactor(ContextMenu): the headless context menu's request core, shared
vjeux Oct 27, 2026
6193c2a
feat(ContextMenu): ContextMenu opens through its trigger's context re…
vjeux Oct 27, 2026
e6576c8
test(hooks): a ContextMenu in a shadow root commits its open before t…
vjeux Oct 27, 2026
65fa39d
fix(ContextMenu): a context request commits its open before the next …
vjeux Oct 27, 2026
883bf8e
docs(ContextMenu): the changesets and useLongPress's page follow Cont…
vjeux Oct 27, 2026
dec4404
test(ContextMenu): useContextMenu hands the public factory a `render`…
vjeux Oct 27, 2026
7780ee9
fix(ContextMenu): useContextMenu hands the public createContextMenu a…
vjeux Oct 27, 2026
fdab6e1
test(ContextMenu): createContextMenu's menu lives inside the element'…
vjeux Oct 27, 2026
6a791e5
fix(ContextMenu): createContextMenu's menu lives inside the element's…
vjeux Oct 27, 2026
96aa81e
Merge main 16443d084a into the headless context menu
vjeux Oct 27, 2026
b609dcc
test(ContextMenu): createContextMenu's menu stays in the element's sh…
vjeux Oct 27, 2026
1f3a940
fix(ContextMenu): createContextMenu's menu stays in the element's sha…
vjeux Oct 27, 2026
166bf05
test(ContextMenu): a layer inside useContextMenu's menuContent takes …
vjeux Oct 27, 2026
872d169
fix(ContextMenu): a layer inside useContextMenu's menuContent takes E…
vjeux Oct 27, 2026
64b21e0
Merge main dcdb3568f5 into the headless context menu
vjeux Oct 27, 2026
573b0f0
Merge #8693 (64b21e03bd: useContextMenu through the public factory; i…
vjeux Oct 27, 2026
2d0fc1c
test(ContextMenu): ContextMenu attaches the public createContextMenu,…
vjeux Oct 27, 2026
6d4267e
feat(ContextMenu): ContextMenu is built on createContextMenu (spec:AS…
vjeux Oct 27, 2026
44fba61
Merge main c86dc620c0 into the headless context menu
vjeux Oct 28, 2026
6f8ba32
test(ContextMenu): createContextMenu closes on a press outside, mouse…
vjeux Oct 28, 2026
f1431ac
Merge #8693 (6f8ba32b8d: main c86dc620c0 with #8648's ContextMenu spe…
vjeux Oct 28, 2026
d4a15a4
test(ContextMenu): unmounting while open removes everything, and Cont…
vjeux Oct 28, 2026
0e267bb
test(ContextMenu): useContextMenu follows its ref and unmounts withou…
vjeux Oct 28, 2026
31f8693
fix(ContextMenu): useContextMenu stops its menu's React roots without…
vjeux Oct 28, 2026
43089f3
fix(ContextMenu): useContextMenu follows its ref to the element it po…
vjeux Oct 28, 2026
117cd8c
fix(ContextMenu): createContextMenu's menu opens at the pointer insid…
vjeux Oct 28, 2026
5f8102f
test(ContextMenu): createContextMenu's cases attach the menu inside act
vjeux Oct 28, 2026
b84aa15
Merge #8693 (5f8102f611: useContextMenu following its ref and stoppin…
vjeux Oct 28, 2026
69c07e2
test(ContextMenu): unmounting ContextMenu logs no React error about u…
vjeux Oct 28, 2026
ad0a884
fix(ContextMenu): ContextMenu renders the factory's menu in its own tree
vjeux Oct 28, 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
8c70274
Merge main (70ea8590: #8045, #8046 landed)
cixzhang Oct 28, 2026
5c1d37f
Merge main (70ea8590: #8045, #8046 landed)
cixzhang Oct 28, 2026
7a8dda7
Merge main (70ea8590: #8045, #8046 landed)
cixzhang Oct 28, 2026
1736b4c
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
8daabc8
Merge #8076 6f994bcdfb into #8360
vjeux Oct 28, 2026
73e90c2
docs(core): pressFeedback says paintPress writes the presses it track…
vjeux Oct 28, 2026
e6ca2f0
Merge #8360 73e90c2fa6 into #8665
vjeux Oct 28, 2026
f6d575d
test(ContextMenu): createContextMenu returns focus to the element on …
vjeux Oct 28, 2026
bc59f63
Merge #8747 (ad0a884ded: ContextMenu built on createContextMenu, and …
vjeux Oct 28, 2026
f09d701
Merge #8670 (7a8dda76d7: main 70ea85903c with #8045 and #8046) into t…
vjeux Oct 28, 2026
5cf5d48
fix(ContextMenu): focus returns to the element the menu is attached t…
vjeux Oct 28, 2026
459cd11
docs(ContextMenu): createContextMenu's request effect names what it s…
vjeux Oct 28, 2026
3821e41
test(ContextMenu): a held finger on a factory element lifts a block e…
vjeux Oct 28, 2026
678490f
test(gestures): under a fine pointer the host drops its page listener…
vjeux Oct 28, 2026
64c84a3
chore: the four record changes this stack carried move to their own s…
vjeux Oct 28, 2026
5b79d91
Merge #8671 (de288b0d92: the per-import touch bundle guard) for Conte…
cixzhang Oct 28, 2026
dae08b2
fix(ContextMenu): the lift's three springs stay internal constants un…
vjeux Oct 28, 2026
061a70f
test(core): pressableCoverage counts the action-group tracker as a mo…
cixzhang Oct 28, 2026
e681d2e
Merge #8693's own fixes (061a70f6ae: #8671's per-import touch bundle …
vjeux Oct 28, 2026
c66c842
test(ContextMenu): useContextMenu is exported from the hooks entry po…
vjeux Oct 28, 2026
a71c40c
fix(ContextMenu): useContextMenu is exported from the hooks entry poi…
vjeux Oct 28, 2026
c22d219
fix(gestures): under a fine pointer the host drops its page listeners…
vjeux Oct 28, 2026
62870cd
docs(spec): AST-094 FR41 says a claimed mouse or pen drag suppresses …
vjeux Oct 28, 2026
e32bfc2
test(gestures): a pen's barrel button starts no press, as the gesture…
vjeux Oct 28, 2026
f4dae89
fix(gestures): a pen's barrel button starts no press
vjeux Oct 28, 2026
33511d9
docs(gestures): the README says what a pen does, and how the host lis…
vjeux Oct 28, 2026
ab6b3bf
Merge #8665 33511d99c2 into #8670
vjeux Oct 28, 2026
23e3eb4
test(gestures): a pen's hold makes one context request, and a hold-re…
vjeux Oct 28, 2026
042221d
fix(gestures): a pen's hold makes one context request, and a hold-rep…
vjeux Oct 28, 2026
008daf6
refactor(gestures): the context request's hold is UIKit's long press,…
vjeux Oct 28, 2026
c50651a
test(ContextMenu): a held finger opens the menu at UIKit's long press…
vjeux Oct 28, 2026
73930e9
Merge #8670 (008daf6496: the context request's hold is UIKit's long p…
vjeux Oct 28, 2026
9d0bb7e
fix(ContextMenu): a held finger opens the menu at UIKit's long press,…
vjeux Oct 28, 2026
b9608e9
test(ContextMenu): in a real browser, a held finger lifts a factory r…
vjeux Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/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/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/contextmenu-context-request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] ContextMenu is built on `createContextMenu`: it attaches the headless context menu to its own trigger, so the two open, present and dismiss alike. It opens on its trigger's context request (a right click, Shift+F10 or the context-menu key, or a finger's or a pen's hold, once per gesture), and its hold yields to a gesture that has already claimed the finger. `menuContent` still reads the caller's own contexts.

@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
7 changes: 7 additions & 0 deletions .changeset/contextmenu-headless.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[feat] `createContextMenu(element, {items | render, label?, isDisabled?, onOpenChange?, presentation?})` attaches ContextMenu's menu to an element already on the page, without React, and returns `{open(at?), close(), destroy()}`. It opens on the element's context request (a held finger or pen, a right click, Shift+F10 or the context-menu key), and the element's markup is untouched, so a list row keeps its list valid. `render(container)` fills the menu with custom content in plain DOM, once, as the menu is attached; its cleanup runs when it is destroyed. Under a finger the menu follows ContextMenu's touch model: UIKit's timeline, the press feedback and, on a block element, the lift. `useContextMenu(ref, options)`, from `@astryxdesign/core/hooks`, is its React wrapper and takes `menuContent` JSX, as ContextMenu does.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/contextmenu-lift-dismissal.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, closing a ContextMenu opened by a held finger now follows iOS 26. The menu shrinks back into the finger as it fades, on the layer runtime's exit copy, while the lifted trigger returns to its place and its shadow and the backdrop clear. A close while the menu is still growing (Escape; a tap then is swallowed) shrinks it back from where it is, keeping its motion, with no jump to its full size. Picking an action closes it the same way. A press that lands on the fading backdrop opens nothing and reaches nothing under it, even when it is held past the end of the close. Only position, scale and opacity move, on the compositor. Under Reduce Motion everything fades out where it stands instead, in 200 ms.

@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 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 press feedback 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 as on iOS, 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 is the trigger's context request: UIKit's long press. At 500 ms the press takes the finger and the menu opens: its lift sends no click, and the page cannot scroll under it. A finger that lifts before 500 ms, or drifts more than 10 px before it, 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, with no press feedback.

@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. The host follows the primary pointer when it changes; what it attaches under a fine pointer is in the every-pointer changeset (`gestures-every-pointer.md`). 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-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/gestures-context-request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: one shared context request from a long press, a right click, or Shift+F10 and the context-menu key (AST-094 FR43), reporting which input made it, one per gesture. A held finger's hold loses to a claim another gesture already made on that finger, and a control that keeps its press for a hold-repeat owns only its hold, so its right click and Shift+F10 still reach the request. A held pen's own context menu event is refused like a held finger's. The hold is UIKit's long press and requests as it begins. Not exported from the package entry point.

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

[chore] Internal: gestures attach for every pointer, a mouse, a pen and a finger alike (AST-094 FR43). Under a fine primary pointer an element that uses a gesture keeps one passive `pointerdown` listener (a recognizer that claims a moving finger also keeps its blocking `touchmove`, and a kept press gets its own only during a press), the page's listeners last only a press and go at a window blur, and a hovering mouse or pen reaches a hover recognizer through two passive listeners on its element. A pen's barrel button, like a right click, starts no press. A right click or a ctrl-click on macOS starts no press. A finger's or a pen's hold that does something keeps text unselected under any primary pointer, a touchscreen laptop's included, while a mouse keeps its released behavior (FR41). A mouse or pen drag that a recognizer claims takes no text selection from then on, anywhere on the page, and a finger is read once where the browser sends Touch Events without exposing `ontouchstart`. A press tracker takes a mouse press as a press, painting at once with no scroll brake. The screen-edge pan is a finger's only: it stays off under a mouse, a trackpad and a pen, and takes no `allowedPointerTypes`, and `perEventPointer` is accepted and does nothing. 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 listen on the window's capture phase through one shared input stream: one passive listener per event type for both. An app's own capture-phase `stopPropagation` at the document no longer starves them, and a page of pressables registers no listener that can hold a scroll.

@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/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` (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 where the primary pointer is coarse (phones and tablets), as AST-094 FR29 allows; it cancelled past 10px. Where the primary pointer is fine (a touchscreen laptop, a pen tablet), the trigger keeps its 10px. The trigger reads the pointer when its press starts, so no menu or row observes the pointer query.

@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/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
Loading