Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2106 commits
Select commit Hold shift + click to select a range
9486526
Merge #8309 (#8076 e6ab0b9cd9: FR18 per DEC-22, #8641; #8641's moving…
vjeux Oct 27, 2026
09303ef
fix(lab): choosing another tab while searching reports the field inac…
vjeux Oct 27, 2026
844e5c8
chore(core): this stack leaves core's direction helper as main has it
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
cc7aec0
test(lab): a held finger never starts text selection on the bar
vjeux Oct 27, 2026
b87dc44
Merge the layer below into this layer
vjeux Oct 27, 2026
19bb9de
Merge the layer below into this layer
vjeux Oct 27, 2026
1ee2b33
Merge the layer below into this layer
vjeux Oct 27, 2026
ab1bd59
Merge the layer below into this layer
vjeux Oct 27, 2026
bbea92e
Merge the layer below into this layer
vjeux Oct 27, 2026
959319d
Merge the layer below into this layer
vjeux Oct 27, 2026
2589a5c
Merge the layer below into this layer
vjeux Oct 27, 2026
bfdb026
fix(lab): the search tab's focus keeps the page still
vjeux Oct 27, 2026
83d0452
Merge the gesture line's fY head (#8320 @ 2fd96979f0) into the TabBar…
vjeux Oct 27, 2026
07fe6f8
Merge the animator line (#8340 @ f5ac3e8904) into the TabBar stack
vjeux Oct 27, 2026
ff472f9
Merge Core's internal entries, re-folded onto main (#8562 @ abb3e0fb5…
vjeux Oct 27, 2026
9d0530d
refactor(lab): TabBar reads Core through its internal entries
vjeux Oct 27, 2026
ebf0be5
Merge the layer below into this layer
vjeux Oct 27, 2026
f3455e3
Merge the layer below into this layer
vjeux Oct 27, 2026
115a5e3
Merge the layer below into this layer
vjeux Oct 27, 2026
74405b7
Merge the layer below into this layer
vjeux Oct 27, 2026
dc9b953
Merge the layer below into this layer
vjeux Oct 27, 2026
f1de7db
Merge the layer below into this layer
vjeux Oct 27, 2026
aea7118
Merge the layer below into this layer
vjeux Oct 27, 2026
e1a539c
test(cli): `astryx search search` counts this layer's new search doc
vjeux Oct 27, 2026
3b8972f
Foundation for #8129's review link (not a pull request)
vjeux Oct 27, 2026
088e13a
Merge the gesture line's fZ head (#8320 @ 3d7fa2ebcb) into the TabBar…
vjeux Oct 27, 2026
80a12cb
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 27, 2026
7d96b4e
Merge the layer below into this layer
vjeux Oct 27, 2026
c88c29f
Merge the layer below into this layer
vjeux Oct 27, 2026
ffa1189
Merge the layer below into this layer
vjeux Oct 27, 2026
8492705
Merge the layer below into this layer
vjeux Oct 27, 2026
b3f86a4
Merge the layer below into this layer
vjeux Oct 27, 2026
cd6c16f
Merge the layer below into this layer
vjeux Oct 27, 2026
142e395
Merge the layer below into this layer
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
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
f562631
Merge #8358 (the host takes a finger once where it reads its pointer …
vjeux Oct 27, 2026
598be90
Merge main (a63eb54f56: #8465 merged, one shared touch module) into C…
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
4d8fbe3
Foundation for #8129's review link (not a pull request)
vjeux Oct 27, 2026
5e4795f
Merge Core's internal entries, re-folded onto main's shared touch mod…
vjeux Oct 27, 2026
493f443
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 27, 2026
6c38c4e
Merge the layer below into this layer
vjeux Oct 27, 2026
9cb76d3
Merge the layer below into this layer
vjeux Oct 27, 2026
c6a6b5f
Merge the layer below into this layer
vjeux Oct 27, 2026
aa20528
Merge the layer below into this layer
vjeux Oct 27, 2026
e5da0a3
Merge the layer below into this layer
vjeux Oct 27, 2026
5515feb
Merge the layer below into this layer
vjeux Oct 27, 2026
4466502
Merge the layer below into this layer
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
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
0705f1d
Foundation for #8129's review link (not a pull request)
vjeux Oct 27, 2026
e392692
Merge the gesture line's fZ2 head (#8320 @ ca71fce61a) into the TabBa…
vjeux Oct 27, 2026
2256331
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 27, 2026
99b2d0f
Merge the layer below into this layer
vjeux Oct 27, 2026
1ceac20
Merge the layer below into this layer
vjeux Oct 27, 2026
78dca18
Merge the layer below into this layer
vjeux Oct 27, 2026
08a2843
Merge the layer below into this layer
vjeux Oct 27, 2026
1fe8659
Merge the layer below into this layer
vjeux Oct 27, 2026
95c4a25
Merge the layer below into this layer
vjeux Oct 27, 2026
48ad61f
Merge the layer below into this layer
vjeux Oct 27, 2026
c996c19
Foundation for #8129's review link (not a pull request)
vjeux Oct 27, 2026
d5d09cc
Merge the animator line, re-folded onto the touch foundation (#8340 @…
vjeux Oct 27, 2026
60c8838
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 27, 2026
5f8da3f
Merge the layer below into this layer
vjeux Oct 27, 2026
b3eee5b
Merge the layer below into this layer
vjeux Oct 27, 2026
f972e82
Merge the layer below into this layer
vjeux Oct 27, 2026
3583f6a
Merge the layer below into this layer
vjeux Oct 27, 2026
d585c23
Merge the layer below into this layer
vjeux Oct 27, 2026
f412788
Merge the layer below into this layer
vjeux Oct 27, 2026
2d03003
Merge the layer below into this layer
vjeux Oct 27, 2026
4f8d37b
Merge main (39ed04d76f) into Core's internal entries
vjeux Oct 27, 2026
cd3ad72
test(core): resolveSnapPoint stays internal, checked against public e…
vjeux Oct 27, 2026
389db4e
fix(core): usePressTracker rebuilds its tracker when its options change
vjeux Oct 27, 2026
3901418
Foundation for #8129's review link (not a pull request)
vjeux Oct 27, 2026
68ddc2e
Merge Core's internal entries, on main 39ed04d76f (#8562 @ cd3ad72a1f…
vjeux Oct 27, 2026
c1c2ac3
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 27, 2026
e8726cd
Merge the layer below into this layer
vjeux Oct 27, 2026
6939694
Merge the layer below into this layer
vjeux Oct 27, 2026
8cadef6
Merge the layer below into this layer
vjeux Oct 27, 2026
f569200
Merge the layer below into this layer
vjeux Oct 27, 2026
4425940
Merge the layer below into this layer
vjeux Oct 27, 2026
cfb2d96
Merge the layer below into this layer
vjeux Oct 27, 2026
f8270bb
Merge the layer below into this layer
vjeux Oct 27, 2026
b6a910d
fix(core): a presented call's curve that a later one's channel holds …
vjeux Oct 27, 2026
5588013
test(core): only the utils entry is pinned gesture-free; the root and…
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
43efaf0
test(lab): the TabBar accessory's busy-window proof blocks as its mov…
vjeux Oct 27, 2026
bc3f58b
Merge the layer below into this layer
vjeux Oct 27, 2026
9efd4fd
Merge the layer below into this layer
vjeux Oct 27, 2026
6793453
Merge the layer below into this layer
vjeux Oct 27, 2026
c79ed7f
Merge the layer below into this layer
vjeux Oct 27, 2026
b039876
test(core): the held-dip proofs wait for the dip to finish, not for 2…
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
b390514
Merge #8358 (useLongPress measures its tolerance on each axis again, …
vjeux Oct 27, 2026
5f6bc04
refactor(useLongPress): the per-press tolerance stays off the public …
vjeux Oct 27, 2026
5636933
docs(core,lab): the tab-bar springs are internal motion roles (spec:A…
vjeux Oct 27, 2026
12e65cc
docs(lab): TabBar's search comments describe the field as it ships here
vjeux Oct 27, 2026
8a891e6
docs(core,lab): the tab-bar springs are internal motion roles (spec:A…
vjeux Oct 27, 2026
9574764
docs(core,lab): the tab-bar springs are internal motion roles (spec:A…
vjeux Oct 27, 2026
e2e1094
docs(core,lab): the tab-bar springs are internal motion roles (spec:A…
vjeux Oct 27, 2026
ee6bc8b
test(lab): TabBar's slide and collapse busy-window proofs block as th…
vjeux Oct 27, 2026
c83ae69
docs(core,lab): the tab-bar springs are internal motion roles (spec:A…
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
8c70274
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
323a8fd
docs(changeset): the press-tracking changeset names both writers of t…
vjeux Oct 28, 2026
f3b1290
test(useMenuPress): a finger held on the trigger keeps FR29's drift a…
vjeux Oct 29, 2026
1e1431f
fix(useMenuPress): a finger held on the trigger keeps FR29's drift al…
vjeux Oct 29, 2026
3dafeb8
Merge #8360 1e1431fe2f and main 90da4a77b6 into #8340
vjeux Oct 29, 2026
1682f96
chore(gestures): the gesture files on this line have no unused bindings
vjeux Oct 29, 2026
856c4d1
test(gestures): a rotation re-based on every change releases at its r…
vjeux Oct 29, 2026
8310bcb
fix(gestures): a re-based rotation keeps its release velocity
vjeux Oct 29, 2026
fe7f5f9
test(motion): the Reduce Motion late-dip proof reads what the dip ani…
vjeux Oct 29, 2026
e4713e8
test(gestures): a finger inside an open shadow root is down in its sc…
vjeux Oct 29, 2026
839b33c
fix(gestures): a finger inside an open shadow root is compared along …
vjeux Oct 29, 2026
01d358b
test(gestures): an element stays an action group while any of its att…
vjeux Oct 29, 2026
1251af1
fix(gestures): an element is an action group while any of its attachm…
vjeux Oct 29, 2026
826534b
test(gestures): a tap on a moving sheet's shadow-root content reaches…
vjeux Oct 29, 2026
66e17cb
fix(gestures): the presented hit test descends into open shadow roots
vjeux Oct 29, 2026
1bf9da8
test(gestures): no touch-action rule stays once the last marked eleme…
vjeux Oct 29, 2026
db3d3f7
fix(gestures): a document's or shadow root's touch-action rules go wi…
vjeux Oct 29, 2026
82579aa
docs(gestures): presented hit testing names its review condition, and…
vjeux Oct 29, 2026
955fed4
docs(gestures): the README and the barrel point Lab at @astryxdesign/…
vjeux Oct 29, 2026
38acf83
docs(core): the input stream's notes name the stops it fixes, what st…
vjeux Oct 29, 2026
121937a
docs(changeset): the build changeset names the treeshakeCompensation …
vjeux Oct 29, 2026
2e2f92a
test(gestures): real-touch proofs for a still finger's sub-pixel jitt…
vjeux Oct 29, 2026
75392b2
test(gestures): a retargeted tap with only watchers attached activate…
vjeux Oct 29, 2026
339a352
Merge #8360 75392b296a into #8340
vjeux Oct 29, 2026
045f666
docs(core): the input stream's notes no longer list click among the g…
vjeux Oct 29, 2026
becc44d
Merge #8360 @ 045f666f7a into the TabBar stack
vjeux Oct 29, 2026
d38fc3d
Merge #8340 @ 339a352e88 into the TabBar stack
vjeux Oct 29, 2026
bbc0a4a
Foundation for #8129's review link (not a pull request)
vjeux Oct 29, 2026
a4ef8f3
Merge the foundation snapshot behind #8129's review link (tree unchan…
vjeux Oct 29, 2026
fdba3c4
test(lab): TabBar's tab list is always named, and the aria naming pro…
vjeux Oct 29, 2026
1af14c0
fix(lab): TabBar's tab list is always named, and aria-label reaches it
vjeux Oct 29, 2026
de20800
docs(core,lab): the tab bar's springs play as measured
vjeux Oct 29, 2026
94bba42
docs(lab): the lens's selection Effect says what it synchronizes
vjeux Oct 29, 2026
7839692
Merge #8129's fixes into this layer
vjeux Oct 29, 2026
5347ce3
test(lab): a TabBar press ends without a choice when the tab list cha…
vjeux Oct 29, 2026
4f58312
fix(lab): a TabBar press ends without a choice when the tab list chan…
vjeux Oct 29, 2026
66273b6
Merge #8141's fixes into this layer
vjeux Oct 29, 2026
0f0448a
test(lab): TabBar's collapsed circle, scroll run and mounting
vjeux Oct 29, 2026
d287041
fix(lab): TabBar's collapsed circle is one button, and the scroll run…
vjeux Oct 29, 2026
c0f9ea0
Merge #8154's fixes into this layer
vjeux Oct 29, 2026
1fd10ed
test(lab): the bottom accessory's content stays in its glass, and a t…
vjeux Oct 29, 2026
f6716db
fix(lab): the bottom accessory's content stays in its glass, and a tu…
vjeux Oct 29, 2026
0750c50
Merge #8172's fixes into this layer
vjeux Oct 29, 2026
16b1f4b
Merge #8192's fixes into this layer
vjeux Oct 29, 2026
ad11576
test(lab): leaving search from a disabled tab returns to the enabled …
vjeux Oct 29, 2026
1811007
fix(lab): leaving search from a disabled tab returns to the enabled t…
vjeux Oct 29, 2026
91fa349
test(lab): the no-scrollend case removes the handler from the global …
vjeux Oct 29, 2026
c38bf2e
Merge #8210's fixes into this layer
vjeux Oct 29, 2026
825f774
test(lab): right to left, TabBar's More list chevrons point left
vjeux Oct 29, 2026
22fcffe
fix(lab): right to left, TabBar's More list chevrons point left
vjeux Oct 29, 2026
3205302
Merge #8222's fixes into this layer
vjeux Oct 29, 2026
de5be5e
test(lab): Cancel back to the previous tab keeps the field above the …
vjeux Oct 29, 2026
4812496
fix(lab): Cancel back to the previous tab keeps the field above the k…
vjeux Oct 29, 2026
eba4755
Merge #8154's test fix into this layer
vjeux Oct 29, 2026
a29d73a
Merge #8172's test fix into this layer
vjeux Oct 29, 2026
4bcf010
Merge #8192's test fix into this layer
vjeux Oct 29, 2026
4c55176
Merge #8210's test fix into this layer
vjeux Oct 29, 2026
1379cef
Merge #8222's test fix into this layer
vjeux Oct 29, 2026
55180a4
Restore files the #8129 merge reformatted
vjeux Oct 29, 2026
760fb10
Merge #8141's restored files into this layer
vjeux Oct 29, 2026
955acf2
Merge #8154's restored files into this layer
vjeux Oct 29, 2026
1e5b936
Merge #8172's restored files into this layer
vjeux Oct 29, 2026
5c62fb0
Merge #8192's restored files into this layer
vjeux Oct 29, 2026
587e320
Merge #8210's restored files into this layer
vjeux Oct 29, 2026
6bfa4d6
Merge #8222's restored files into this layer
vjeux Oct 29, 2026
f2e52c1
test(lab): the second-landing case sends its events back to back
vjeux Oct 29, 2026
0056d05
Merge #8141's test fixes into this layer
vjeux Oct 29, 2026
1c426ab
Merge #8154's test fixes into this layer
vjeux Oct 29, 2026
c919a39
test(lab): the accessory's turn comes early and is measured against a…
vjeux Oct 29, 2026
2724781
Merge #8172's test fixes into this layer
vjeux Oct 29, 2026
63ffde3
test(lab): the field-morph curve holds only the field's own animations
vjeux Oct 29, 2026
0ab9302
Merge #8192's test fixes into this layer
vjeux Oct 29, 2026
a9ade2b
Merge #8210's test fixes into this layer
vjeux Oct 29, 2026
0134dbb
test(lab): the RTL chevron is looked up in the More list's row
vjeux Oct 29, 2026
9989cf8
Merge #8222's test fixes into this layer
vjeux Oct 29, 2026
700067c
test(lab): the disabled-tab Escape case finds the field as a searchbox
vjeux Oct 29, 2026
3764b22
Merge #8172's test fixes into this layer
vjeux Oct 29, 2026
646c150
test(lab): the accessory's turn is predicted from its animations' sta…
vjeux Oct 29, 2026
9f369c9
Merge #8192's test fixes into this layer
vjeux Oct 29, 2026
0a42506
Merge #8210's test fixes into this layer
vjeux Oct 29, 2026
8a3df36
Merge #8222's test fixes into this layer
vjeux Oct 29, 2026
ac325b7
fix(lab): the leading circle leaves the tab order while the active se…
vjeux Oct 29, 2026
9587dd4
Merge #8192's covered-circle fix into this layer
vjeux Oct 29, 2026
9ade326
Merge #8210's covered-circle fix into this layer
vjeux Oct 29, 2026
6c4d56a
Merge #8222's covered-circle fix into this layer
vjeux Oct 29, 2026
ff6c905
docs(lab): the press Effects name what they synchronize
vjeux Oct 30, 2026
c304f0d
Merge #8141's review fixes into this layer
vjeux Oct 30, 2026
5f4e586
docs(lab): activating the collapsed circle expands the bar
vjeux Oct 30, 2026
6752122
Merge #8154's review fixes into this layer
vjeux Oct 30, 2026
f14cb6e
Merge #8172's review fixes into this layer
vjeux Oct 30, 2026
953b068
Merge #8192's review fixes into this layer
vjeux Oct 30, 2026
58d9a67
test(lab): a disabled tab is announced disabled in the accessibility …
vjeux Oct 30, 2026
2f0300b
Merge #8210's review fixes into this layer
vjeux Oct 30, 2026
eb22107
Merge #8222's review fixes into this layer
vjeux Oct 30, 2026
0c765ac
docs(lab): the active search's Cancel is a button over the search circle
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/cli-discover-search-field.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx discover` lists the experimental SearchField component from `@astryxdesign/lab`.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/cli-official-packages-tab-bar-more.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx discover` lists the lab's new TabBarMoreList among the official packages' components.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/cli-official-packages-tab-bar-search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx discover` lists the lab's new TabBarSearchTab among the official packages' components.

@vjeux
7 changes: 7 additions & 0 deletions .changeset/cli-official-packages-tab-bar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx discover` lists the lab's new TabBar and TabBarItem among the official packages' components.

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

[chore] Core's internal entries, reserved for Astryx's own packages, also give Lab components the pan recognizer, the gesture types, the touch presentation queries and the motion math and tuning tables that Core components use. Apps import nothing new.

@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/i18n-tab-bar-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[experimental] The message catalog gains `@astryx.tabBar.badgedItem` ("{label}, {badge}"): the spoken name the lab TabBar gives a tab that shows a badge, one message so a translation can reorder the two.

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

[experimental] The message catalog gains `@astryx.tabBar.more` ("More"): the label of the lab TabBar's More tab and the name of its list.

@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/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/uikit-search-bottom-frames.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: the UIKit constants table's search entries gain the iOS 26 bottom (toolbar) search field's geometry and measured motion: its resting and active insets, its 38 pt close button and gap, the 16 pt narrowing a cancel starts with, and the field's and close button's frames during activation and cancel, as measured on iOS 26.2. Not exported from the package entry point; Lab's SearchField reads them.

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

[chore] Internal: the UIKit constants table gains the iOS 26 search bar's values, measured on iOS 26.2: the activation and cancel clock (383 ms on ease-in-ease-out), the stacked field's geometry and its close button's entrance, the navigation bar's fades over an activation, the field scrolling away with the content, the bottom placement's rest above the keyboard and the clear button, each with its source. Lab's SearchField reads them. Nothing public changes: the table is not exported, and themes do not retune it.

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

[chore] Internal: the UIKit constants table's `tabBar` gains the measured values of the iOS 26 tab bar's bottom accessory: its height, its gap to the bar and to the minimized circle, and the springs it moves inline and back on. Not exported from the package entry point; the lab TabBar imports it by name.

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

[chore] Internal: the UIKit constants table's `tabBar` gains the measured values of the iOS 26 tab bar's minimize on scroll: the scroll distance that collapses it, the minimized circle's size, the lens's travel and size springs into and out of the circle, and a provisional fade spring for the items (`minimizeFade`, still a guess pending its measurement, M-TB1). Not exported from the package entry point; the lab TabBar imports it by name.

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

[chore] Internal: the UIKit constants table's `tabBar` gains the measured values of the iOS 26 tab bar's press: the selection lens's tracking and settle springs, its lift (outset, magnification, spring), the bar's flex (scale and springs) and the lens's rubber band past the first and last tabs. Not exported from the package entry point; the lab TabBar imports it by name.

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

[chore] Internal: the UIKit constants table's `tabBar` gains the measured values of the iOS 26 tab bar's active search field: its gap above the software keyboard and when its cancel button appears. The message catalog gains `@astryx.tabBar.cancelSearch` ("Cancel"). Not exported from the package entry point; the lab TabBar imports it by name.

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

[chore] Internal: the UIKit constants table's `tabBar` gains the measured values of the iOS 26 tab bar's search tab: the search circle's gap to the bar, the search field's place inline in the bar and while active, and the spring its glass moves and widens on, with the squash it starts with. Not exported from the package entry point; the lab TabBar imports it by name.

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

[chore] Internal: the UIKit constants table gains `tabBar` (each value plays as measured: `registerTabBarTable()` lists no motion role): the iOS 26 tab bar's measured geometry (capsule, items, badge), its selection lens's travel spring, each with its source. Nothing else changes. Not exported from the package entry point; the lab TabBar imports it by name.

@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