Skip to content

Commit f644ded

Browse files
author
Roy Lin
committed
docs: pin React Aria 1.19 behavior deltas
1 parent f834c22 commit f644ded

4 files changed

Lines changed: 84 additions & 4 deletions

File tree

docs/react-aria-component-matrix.json

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,37 @@
11
{
2-
"schema_version": 1,
2+
"schema_version": 2,
33
"upstream": {
44
"package": "react-aria-components",
55
"version": "1.19.0",
66
"release_date": "2026-06-18",
77
"catalog_url": "https://react-aria.adobe.com/",
8-
"release_url": "https://react-aria.adobe.com/releases/v1-19-0"
8+
"release_url": "https://react-aria.adobe.com/releases/v1-19-0",
9+
"contract_deltas": [
10+
{
11+
"id": "grid-tree-embedded-interaction",
12+
"families": ["GridList", "Tree"],
13+
"milestone": "M7",
14+
"requirement": "Support keyboardNavigationBehavior for keyboard traversal between rows and embedded interactive controls."
15+
},
16+
{
17+
"id": "menu-action-key-value",
18+
"families": ["Menu"],
19+
"milestone": "M7",
20+
"requirement": "Deliver both the item key and action value through Menu onAction without losing stable native identity."
21+
},
22+
{
23+
"id": "popover-arbitrary-target-rect",
24+
"families": ["Popover"],
25+
"milestone": "M7",
26+
"requirement": "Position Popover against an arbitrary target or character rectangle equivalent to getTargetRect."
27+
},
28+
{
29+
"id": "drag-types-multiple-wildcards",
30+
"families": ["DropZone", "GridList", "ListBox", "Table", "Tree"],
31+
"milestone": "M7",
32+
"requirement": "Match multiple MIME types and wildcard patterns in portable drag and drop type negotiation."
33+
}
34+
]
935
},
1036
"acceptance_dimensions": [
1137
"authoring",

docs/react-aria-native.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ The matrix currently establishes these facts without overstating parity:
3535
- no family may be marked `conformant` without software, macOS, Windows, and
3636
Linux evidence in addition to its semantic and accessibility tests.
3737

38+
The version gate also records behavior changes that do not add a top-level
39+
family. For 1.19.0 these are embedded-control keyboard navigation in GridList
40+
and Tree, Menu actions carrying both key and value, Popover positioning against
41+
an arbitrary target rectangle, and multi-type/wildcard drag negotiation. They
42+
are executable matrix obligations, not optional release notes.
43+
3844
`tests/react_aria_component_matrix.rs` schema-checks the file, pins the exact
3945
official family list, verifies every available A3S mapping against the built-in
4046
component registry, and rejects unsupported completion claims. Each upstream
@@ -115,6 +121,17 @@ migration evidence and are removed after equivalent self-drawn host gates pass.
115121

116122
The first shared interaction milestone is available in the portable runtime:
117123

124+
- `SelfDrawnWindowRuntime` builds its hit/focus/action index from the atomically
125+
committed Native IR and layout snapshot. Raw pointer, keyboard, Tab-focus,
126+
hover, press, cancellation, wheel, bubbling, and reducer dispatch retain
127+
stable `PlatformElementId` identity without importing a widget blueprint or
128+
platform content-control runtime.
129+
- `SelfDrawnActionInvocation` carries the committed frame revision, monotonic
130+
event sequence, target/current-target pair, modality and input context, plus
131+
static action payloads. Reducer failure restores the staged interaction
132+
session and sequence; keyed successful frames reconcile focus and transient
133+
state by stable id.
134+
118135
- `NativeInputModality` represents keyboard, mouse, touch, pen, virtual, and
119136
unknown input.
120137
- `NativeEventContext` carries modality, key modifiers, local position,
@@ -547,7 +564,7 @@ props:
547564
| Priority | Area | Required outcome |
548565
| --- | --- | --- |
549566
| P0 | Self-drawn component accounting | Keep all 51 React Aria 1.19.0 families in the executable matrix, implement the eight recorded public-part gaps, and require every upstream catalog delta to update code, matrix, tests, and milestones together. |
550-
| P0 | Shared self-drawn interaction | Route raw host input through hit testing, focus, interaction, action, and reducer state so component behavior no longer depends on AppKit, GTK4, or WinUI content controls. |
567+
| P0 | Shared self-drawn interaction | Extend the landed stable-id pointer, keyboard, Tab-focus, hover, press, cancellation, wheel, bubbling, and reducer path with long press, move/drag, focus-scope restoration, overlay gestures, text editing/IME, and accessibility activation. |
551568
| P0 | Native input conformance | WinUI's complete 98-case V1 manifest passes real OS automation. Populate the AppKit and GTK4 manifests with platform-run mouse, pen, touch where applicable, keyboard, assistive activation, disabled, cancellation, and keyed-rerender fixtures for every role currently marked native; then close or retain evidence-backed menu/item exceptions. |
552569
| P1 | Event propagation | Add platform-run conformance fixtures for conditional `Stop`/`Continue` across nested native controls. |
553570
| P1 | Focus management | Add platform-run conformance fixtures for post-mount `autoFocus`, nested containment, and restoration. |

docs/roadmap.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,9 @@ self-drawn conformance.
703703
typeahead, range selection, and collection mutation
704704
- implement ToastList and ToastContent and preserve drag/drop, focus-scope,
705705
selection-indicator, collection-section, and load-more semantic parts
706+
- close the executable 1.19.0 behavior deltas: embedded-control keyboard
707+
navigation for GridList/Tree, Menu action key plus value, arbitrary Popover
708+
target rectangles, and multi-MIME/wildcard drag type negotiation
706709

707710
### M8 - Date, color, tables, and advanced data
708711

tests/react_aria_component_matrix.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,16 @@ struct Upstream {
7676
release_date: String,
7777
catalog_url: String,
7878
release_url: String,
79+
contract_deltas: Vec<ContractDelta>,
80+
}
81+
82+
#[derive(Debug, Deserialize)]
83+
#[serde(deny_unknown_fields)]
84+
struct ContractDelta {
85+
id: String,
86+
families: Vec<String>,
87+
milestone: String,
88+
requirement: String,
7989
}
8090

8191
#[derive(Debug, Deserialize)]
@@ -106,7 +116,7 @@ fn matrix() -> ComponentMatrix {
106116
fn matrix_pins_the_complete_official_1_19_component_catalog() {
107117
let matrix = matrix();
108118

109-
assert_eq!(matrix.schema_version, 1);
119+
assert_eq!(matrix.schema_version, 2);
110120
assert_eq!(matrix.upstream.package, "react-aria-components");
111121
assert_eq!(matrix.upstream.version, "1.19.0");
112122
assert_eq!(matrix.upstream.release_date, "2026-06-18");
@@ -115,6 +125,30 @@ fn matrix_pins_the_complete_official_1_19_component_catalog() {
115125
matrix.upstream.release_url,
116126
"https://react-aria.adobe.com/releases/v1-19-0"
117127
);
128+
let contract_ids = matrix
129+
.upstream
130+
.contract_deltas
131+
.iter()
132+
.map(|delta| delta.id.as_str())
133+
.collect::<BTreeSet<_>>();
134+
assert_eq!(
135+
contract_ids,
136+
BTreeSet::from([
137+
"drag-types-multiple-wildcards",
138+
"grid-tree-embedded-interaction",
139+
"menu-action-key-value",
140+
"popover-arbitrary-target-rect",
141+
])
142+
);
143+
for delta in &matrix.upstream.contract_deltas {
144+
assert_eq!(delta.milestone, "M7");
145+
assert!(!delta.requirement.trim().is_empty());
146+
assert!(!delta.families.is_empty());
147+
assert!(delta
148+
.families
149+
.iter()
150+
.all(|family| OFFICIAL_COMPONENT_FAMILIES.contains(&family.as_str())));
151+
}
118152

119153
let names = matrix
120154
.families

0 commit comments

Comments
 (0)