@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.29ead98",
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.29ead98",
796
- "@astryxdesign/cli": "0.7.3-canary.29ead98",
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 | 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. Async outcomes MUST announce from the transition handler through `useAnnounce`; `role="alert"` is reserved for genuinely urgent interruptive content. | Accessibility Checklist §Announcements; owner decision | Current behavior |
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. Async outcomes use `useAnnounce`
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