@astryxdesign/core 0.7.3-canary.29ead98 → 0.7.3-canary.31e06f4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/core",
|
|
3
|
-
"version": "0.7.3-canary.
|
|
3
|
+
"version": "0.7.3-canary.31e06f4",
|
|
4
4
|
"displayName": "Astryx Core",
|
|
5
5
|
"description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
|
|
6
6
|
"author": "Meta Open Source",
|
|
@@ -792,8 +792,8 @@
|
|
|
792
792
|
"react-dom": ">=19.0.0"
|
|
793
793
|
},
|
|
794
794
|
"devDependencies": {
|
|
795
|
-
"@astryxdesign/a11y-spec": "0.7.3-canary.
|
|
796
|
-
"@astryxdesign/cli": "0.7.3-canary.
|
|
795
|
+
"@astryxdesign/a11y-spec": "0.7.3-canary.31e06f4",
|
|
796
|
+
"@astryxdesign/cli": "0.7.3-canary.31e06f4",
|
|
797
797
|
"@babel/cli": "^7.29.7",
|
|
798
798
|
"@babel/core": "^7.29.7",
|
|
799
799
|
"@babel/preset-react": "^7.29.7",
|
|
@@ -42,29 +42,29 @@ separately targetable surface. The status and content targets remain unchanged.
|
|
|
42
42
|
- Released default preserved: `no` — Banner no longer derives a live-region role from visual status
|
|
43
43
|
- Compatibility class: breaking accessibility-semantic correction; visual output, DOM structure, props, theming targets, and interaction behavior are unchanged
|
|
44
44
|
- Controlled/uncontrolled behavior: unchanged
|
|
45
|
-
- Migration decision: announce async outcomes in their transition handler with `useAnnounce`; add an explicit `role="status"` only for a persistent semantic mirror, and reserve `role="alert"` for genuinely urgent interruption
|
|
45
|
+
- Migration decision: announce async outcomes in their transition handler with `useAnnounce`; add an explicit `role="status"` only for a persistent semantic mirror, and reserve `role="alert"` for genuinely urgent interruption. Inside a mounted live container, `spec:AST-086` FR4 applies instead.
|
|
46
46
|
|
|
47
47
|
Consumer migration instructions belong in consumer docs and release notes.
|
|
48
48
|
|
|
49
49
|
### DEP-0007 — Deprecate live-region roles derived from `status`
|
|
50
50
|
|
|
51
|
-
| Field | Value
|
|
52
|
-
| ---------------- |
|
|
53
|
-
| id | `DEP-0007`
|
|
54
|
-
| cleanup | `CLN-0015`
|
|
55
|
-
| package | `@astryxdesign/core`
|
|
56
|
-
| surface | Default ARIA role of `Banner`: `role="alert"` for `warning` and `error`, `role="status"` for `info` and `success`, derived from `status` when the caller passes no `role`
|
|
57
|
-
| old contract | Visual `status` selects the live-region role of the Banner root
|
|
58
|
-
| replacement | A caller that announces an async outcome calls `useAnnounce` from the transition that produced it. A caller whose Banner is a persistent semantic mirror passes `role="status"`; genuinely urgent content passes `role="alert"`. Both explicit roles already reach the Banner root |
|
|
59
|
-
| direct authority | `component:Banner`. Owners: `cixzhang`, `imdreamrunner`
|
|
60
|
-
| warning | Consumer docs and the release notes name `DEP-0007` and the explicit `role` that keeps the released semantics. No runtime warning (`spec:AST-017` FR29)
|
|
61
|
-
| migration | Non-mechanical: a caller that announces an async outcome calls `useAnnounce` from the transition that produced it; a caller whose Banner is a persistent mirror or urgent content passes `role="status"` or `role="alert"` |
|
|
62
|
-
| codemod | None: whether a Banner needs an announcement, and when, depends on the transition that renders it, which only the caller knows; adding the released role everywhere would restore the coupling this cleanup removes
|
|
63
|
-
| downstream | Maintained docs teach `useAnnounce` for async outcomes and explicit `role` for persistent mirrors |
|
|
64
|
-
| transition | no prior transition
|
|
65
|
-
| state | `proposed`
|
|
66
|
-
| open decision | Banner FR and DEC entries that make `status` visual-only
|
|
67
|
-
| target plan | `CLN-0015` in the next minor release
|
|
51
|
+
| Field | Value |
|
|
52
|
+
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| id | `DEP-0007` |
|
|
54
|
+
| cleanup | `CLN-0015` |
|
|
55
|
+
| package | `@astryxdesign/core` |
|
|
56
|
+
| surface | Default ARIA role of `Banner`: `role="alert"` for `warning` and `error`, `role="status"` for `info` and `success`, derived from `status` when the caller passes no `role` |
|
|
57
|
+
| old contract | Visual `status` selects the live-region role of the Banner root |
|
|
58
|
+
| replacement | A caller that announces an async outcome calls `useAnnounce` from the transition that produced it. A caller whose Banner is a persistent semantic mirror passes `role="status"`; genuinely urgent content passes `role="alert"`. Both explicit roles already reach the Banner root. Inside a mounted live container, `spec:AST-086` FR4 applies instead. |
|
|
59
|
+
| direct authority | `component:Banner`. Owners: `cixzhang`, `imdreamrunner` |
|
|
60
|
+
| warning | Consumer docs and the release notes name `DEP-0007` and the explicit `role` that keeps the released semantics. No runtime warning (`spec:AST-017` FR29) |
|
|
61
|
+
| migration | Non-mechanical: a caller that announces an async outcome calls `useAnnounce` from the transition that produced it; a caller whose Banner is a persistent mirror or urgent content passes `role="status"` or `role="alert"`. Inside a mounted live container, `spec:AST-086` FR4 applies instead. |
|
|
62
|
+
| codemod | None: whether a Banner needs an announcement, and when, depends on the transition that renders it, which only the caller knows; adding the released role everywhere would restore the coupling this cleanup removes |
|
|
63
|
+
| downstream | Maintained docs teach `useAnnounce` for async outcomes and explicit `role` for persistent mirrors. Inside a mounted live container, `spec:AST-086` FR4 applies instead. |
|
|
64
|
+
| transition | no prior transition |
|
|
65
|
+
| state | `proposed` |
|
|
66
|
+
| open decision | Banner FR and DEC entries that make `status` visual-only |
|
|
67
|
+
| target plan | `CLN-0015` in the next minor release |
|
|
68
68
|
|
|
69
69
|
### CLN-0015 — Banner renders no live-region role by default
|
|
70
70
|
|
|
@@ -105,16 +105,16 @@ prop vocabulary or extensibility rule changes.
|
|
|
105
105
|
The requirements below describe the current implementation and its additive
|
|
106
106
|
frame target contract.
|
|
107
107
|
|
|
108
|
-
| ID | Invariant
|
|
109
|
-
| --- |
|
|
110
|
-
| FR1 | The current render places `banner` on the colored status surface, which is Banner's primary painted surface and reflects `container` and `status`.
|
|
111
|
-
| FR2 | The Banner frame receives the public ref, role, supported DOM props, `xstyle`, `className`, and `style`; it also paints the selected `boxShadow`.
|
|
112
|
-
| FR3 | An elevated `card` frame also paints the whole-banner radius. A `section` frame remains square. A non-elevated frame does not receive the frame-radius style.
|
|
113
|
-
| FR4 | Card shape is split across surface owners: the status surface owns all corners without visible content or the top corners with visible content; the content surface owns the bottom corners.
|
|
114
|
-
| FR5 | Theme-authored `borderRadius` on `banner` currently writes the private `--_banner-radius` variable on the Status surface only. CSS inheritance does not carry that value upward to the frame or sideways to the Content surface, so both keep their fallback radius.
|
|
115
|
-
| FR6 | The Banner frame exposes `banner-frame` and reflects `container` and `elevation`. The existing `banner` target remains on the Status surface rather than moving to the outermost DOM element.
|
|
116
|
-
| FR7 | `banner-frame` is additive. The existing `banner`, `banner-icon`, `banner-description`, and `banner-content` targets and their current axes remain unchanged.
|
|
117
|
-
| FR8 | `status` controls visual meaning only and MUST NOT derive `role`, `aria-live`, or an announcement. Standard DOM props MAY provide an explicit persistent role. Async outcomes MUST announce from the transition handler through `useAnnounce
|
|
108
|
+
| ID | Invariant | Basis | Contract state |
|
|
109
|
+
| --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------------------ |
|
|
110
|
+
| FR1 | The current render places `banner` on the colored status surface, which is Banner's primary painted surface and reflects `container` and `status`. | Current source, public docs, and tests | Current behavior |
|
|
111
|
+
| FR2 | The Banner frame receives the public ref, role, supported DOM props, `xstyle`, `className`, and `style`; it also paints the selected `boxShadow`. | Current source and tests | Current behavior |
|
|
112
|
+
| FR3 | An elevated `card` frame also paints the whole-banner radius. A `section` frame remains square. A non-elevated frame does not receive the frame-radius style. | Current source and elevation tests | Current behavior |
|
|
113
|
+
| FR4 | Card shape is split across surface owners: the status surface owns all corners without visible content or the top corners with visible content; the content surface owns the bottom corners. | Current source | Current behavior |
|
|
114
|
+
| FR5 | Theme-authored `borderRadius` on `banner` currently writes the private `--_banner-radius` variable on the Status surface only. CSS inheritance does not carry that value upward to the frame or sideways to the Content surface, so both keep their fallback radius. | Current compiler output and CSS inheritance | Current reachability gap |
|
|
115
|
+
| FR6 | The Banner frame exposes `banner-frame` and reflects `container` and `elevation`. The existing `banner` target remains on the Status surface rather than moving to the outermost DOM element. | Owner decision; current source and tests | Current behavior |
|
|
116
|
+
| FR7 | `banner-frame` is additive. The existing `banner`, `banner-icon`, `banner-description`, and `banner-content` targets and their current axes remain unchanged. | Current target inventory; compatibility policy | Current behavior |
|
|
117
|
+
| FR8 | `status` controls visual meaning only and MUST NOT derive `role`, `aria-live`, or an announcement. Standard DOM props MAY provide an explicit persistent role, except on a Banner added inside a mounted live container (`spec:AST-086` FR4). Async outcomes MUST announce from the transition handler through `useAnnounce`, except inside a mounted live container, where `spec:AST-086` FR4 applies; `role="alert"` is reserved for genuinely urgent interruptive content. | Accessibility Checklist §Announcements; owner decision | Current behavior |
|
|
118
118
|
|
|
119
119
|
### Allowed variation
|
|
120
120
|
|
|
@@ -154,11 +154,15 @@ runtime work.
|
|
|
154
154
|
`status` communicates visual category through color and icon; it does not choose
|
|
155
155
|
announcement urgency. Banner renders no live-region role by default. A caller may
|
|
156
156
|
provide `role="status"` through the standard DOM surface when the visible banner
|
|
157
|
-
is intentionally a persistent semantic mirror
|
|
157
|
+
is intentionally a persistent semantic mirror, except on a Banner added inside a
|
|
158
|
+
mounted live container. Async outcomes use `useAnnounce`
|
|
158
159
|
from the transition handler, which writes into a previously mounted live region;
|
|
160
|
+
inside a mounted live container, that container delivers them
|
|
161
|
+
(`spec:AST-086` FR4);
|
|
159
162
|
a Banner mounted together with its message is not a reliable announcement.
|
|
160
163
|
`role="alert"` remains available as an explicit native role, but is reserved for
|
|
161
|
-
genuinely urgent content that should interrupt current speech
|
|
164
|
+
genuinely urgent content that should interrupt current speech; it is not used on
|
|
165
|
+
a Banner added inside a mounted live container.
|
|
162
166
|
|
|
163
167
|
Dismissal focus handoff, disclosure controls, and accessible control names remain
|
|
164
168
|
unchanged.
|
|
@@ -247,8 +251,9 @@ placement and would imply that the target must remain on the outermost element.
|
|
|
247
251
|
Banner status selects color and icon only. It does not assign `role="status"` or
|
|
248
252
|
`role="alert"`. Async outcomes announce through `useAnnounce` from the transition
|
|
249
253
|
handler so the message reaches a persistent live region rather than one mounted
|
|
250
|
-
with its content. An explicit native role remains available through BaseProps for
|
|
251
|
-
a persistent semantic mirror or the rare genuinely urgent alert
|
|
254
|
+
with its content; inside a mounted live container, `spec:AST-086` FR4 applies. An explicit native role remains available through BaseProps for
|
|
255
|
+
a persistent semantic mirror or the rare genuinely urgent alert, except on a
|
|
256
|
+
Banner added inside a mounted live container.
|
|
252
257
|
|
|
253
258
|
Rejected: deriving alert urgency from `warning` or `error`. Severity and urgency
|
|
254
259
|
are independent, and a static error present on first paint is not an event that
|
|
@@ -38,7 +38,8 @@ detached presentations; consumer usage remains documented in
|
|
|
38
38
|
|
|
39
39
|
- Released default preserved: `yes`
|
|
40
40
|
- Compatibility class: additive documentation only; runtime, DOM, styling, and
|
|
41
|
-
public API remain unchanged
|
|
41
|
+
public API remain unchanged, except that delivery inside a mounted live
|
|
42
|
+
container follows `spec:AST-086` FR4
|
|
42
43
|
- Controlled/uncontrolled behavior: not applicable
|
|
43
44
|
- Migration decision: direct `FieldStatus variant="tooltip"` support is rejected.
|
|
44
45
|
`tooltip` remains a field-family sentinel that MUST be handled before rendering
|
|
@@ -127,7 +128,7 @@ intentional decision.
|
|
|
127
128
|
- **AR1 — Programmatic announcement channel.** Errors MUST update the persistent
|
|
128
129
|
assertive region; warnings and successes MUST update the persistent polite
|
|
129
130
|
region, including on first mount and when message or type changes, without
|
|
130
|
-
moving focus.
|
|
131
|
+
moving focus. Inside a mounted live container, `spec:AST-086` FR4 applies.
|
|
131
132
|
- **AR5 — Assistive-technology output.** Claims about whether, when, or how the
|
|
132
133
|
message is spoken or presented in braille MUST be verified through the real-AT
|
|
133
134
|
evidence process in `spec:AST-009`; DOM and accessibility-tree checks prove
|