@antadesign/anta 0.3.33 → 0.3.35

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.
Files changed (205) hide show
  1. package/LICENSE.md +14 -1
  2. package/README.md +9 -0
  3. package/dist/anta_helpers.d.ts +46 -30
  4. package/dist/anta_helpers.js +66 -25
  5. package/dist/bundle.css +1 -1
  6. package/dist/bundle.js +2 -1353
  7. package/dist/components/Banner.d.ts +25 -40
  8. package/dist/components/Banner.js +15 -17
  9. package/dist/components/Breadcrumbs.d.ts +0 -1
  10. package/dist/components/Breadcrumbs.js +0 -1
  11. package/dist/components/Button.d.ts +2 -3
  12. package/dist/components/Button.js +1 -0
  13. package/dist/components/ButtonCopy.js +3 -2
  14. package/dist/components/Calendar.js +13 -13
  15. package/dist/components/Card.d.ts +9 -17
  16. package/dist/components/Card.js +50 -46
  17. package/dist/components/Dialog.d.ts +1 -0
  18. package/dist/components/Dialog.js +16 -10
  19. package/dist/components/Expander.d.ts +6 -21
  20. package/dist/components/Expander.js +24 -23
  21. package/dist/components/Icon.d.ts +8 -14
  22. package/dist/components/Input.d.ts +77 -96
  23. package/dist/components/Input.js +23 -27
  24. package/dist/components/InputAutocomplete.d.ts +29 -10
  25. package/dist/components/InputAutocomplete.js +25 -8
  26. package/dist/components/InputDate.d.ts +0 -1
  27. package/dist/components/InputDate.js +2 -3
  28. package/dist/components/InputTime.d.ts +10 -4
  29. package/dist/components/InputTime.js +20 -16
  30. package/dist/components/Loader.d.ts +2 -2
  31. package/dist/components/Menu.d.ts +5 -4
  32. package/dist/components/Menu.js +13 -8
  33. package/dist/components/MenuItem.js +1 -14
  34. package/dist/components/MenuItemCopy.js +2 -2
  35. package/dist/components/Panel.d.ts +3 -1
  36. package/dist/components/Panel.js +17 -11
  37. package/dist/components/Progress.d.ts +21 -23
  38. package/dist/components/Progress.js +13 -9
  39. package/dist/components/RadioGroup.js +6 -8
  40. package/dist/components/{select-parts.css → Select.css} +1 -1
  41. package/dist/components/Select.d.ts +53 -36
  42. package/dist/components/Select.js +53 -98
  43. package/dist/components/SelectFaceted.d.ts +7 -4
  44. package/dist/components/SelectFaceted.js +21 -10
  45. package/dist/components/Slider.d.ts +28 -11
  46. package/dist/components/Slider.js +20 -20
  47. package/dist/components/Steps.css +1 -1
  48. package/dist/components/Steps.d.ts +0 -1
  49. package/dist/components/Steps.js +1 -12
  50. package/dist/components/Tabs.d.ts +17 -20
  51. package/dist/components/Tabs.js +7 -9
  52. package/dist/components/Text.d.ts +55 -36
  53. package/dist/components/Text.js +35 -22
  54. package/dist/components/Title.d.ts +19 -27
  55. package/dist/components/Title.js +2 -1
  56. package/dist/components/Toaster.js +9 -2
  57. package/dist/components/Tooltip.d.ts +10 -15
  58. package/dist/components/copy-props.d.ts +14 -3
  59. package/dist/components/copy-props.js +14 -3
  60. package/dist/components/select-tree.d.ts +24 -0
  61. package/dist/components/select-tree.js +35 -0
  62. package/dist/element-base.d.ts +10 -0
  63. package/dist/element-base.js +15 -0
  64. package/dist/elements/a-avatar.css +1 -1
  65. package/dist/elements/a-avatar.js +2 -28
  66. package/dist/elements/a-banner.css +1 -1
  67. package/dist/elements/a-banner.d.ts +4 -1
  68. package/dist/elements/a-banner.js +22 -112
  69. package/dist/elements/a-breadcrumbs.d.ts +1 -0
  70. package/dist/elements/a-breadcrumbs.js +1 -0
  71. package/dist/elements/a-button.css +1 -1
  72. package/dist/elements/a-button.d.ts +10 -7
  73. package/dist/elements/a-button.js +18 -1
  74. package/dist/elements/a-calendar.d.ts +14 -13
  75. package/dist/elements/a-calendar.js +29 -24
  76. package/dist/elements/a-card.css +1 -1
  77. package/dist/elements/a-card.d.ts +0 -9
  78. package/dist/elements/a-card.js +0 -184
  79. package/dist/elements/a-checkbox.css +1 -1
  80. package/dist/elements/a-copy.css +1 -1
  81. package/dist/elements/a-copy.d.ts +1 -5
  82. package/dist/elements/a-copy.js +129 -108
  83. package/dist/elements/a-dialog.css +1 -1
  84. package/dist/elements/a-dialog.d.ts +1 -1
  85. package/dist/elements/a-dialog.js +68 -194
  86. package/dist/elements/a-expander.css +1 -1
  87. package/dist/elements/a-expander.d.ts +4 -30
  88. package/dist/elements/a-expander.js +85 -344
  89. package/dist/elements/a-icon.d.ts +5 -23
  90. package/dist/elements/a-icon.js +1 -2
  91. package/dist/elements/a-input-date.d.ts +1 -0
  92. package/dist/elements/a-input-date.js +1 -0
  93. package/dist/elements/a-input-time.css +1 -1
  94. package/dist/elements/a-input-time.d.ts +2 -1
  95. package/dist/elements/a-input-time.js +101 -168
  96. package/dist/elements/a-input.css +1 -1
  97. package/dist/elements/a-input.d.ts +10 -8
  98. package/dist/elements/a-input.js +155 -230
  99. package/dist/elements/a-loader.d.ts +5 -8
  100. package/dist/elements/a-loader.js +1 -2
  101. package/dist/elements/a-menu-item.css +1 -1
  102. package/dist/elements/a-menu-item.d.ts +5 -3
  103. package/dist/elements/a-menu-item.js +5 -1
  104. package/dist/elements/a-menu.css +1 -1
  105. package/dist/elements/a-menu.d.ts +5 -7
  106. package/dist/elements/a-menu.js +383 -299
  107. package/dist/elements/a-panel.css +1 -1
  108. package/dist/elements/a-panel.js +19 -37
  109. package/dist/elements/a-progress.css +1 -1
  110. package/dist/elements/a-progress.d.ts +0 -22
  111. package/dist/elements/a-progress.js +0 -100
  112. package/dist/elements/a-radio-group.d.ts +1 -1
  113. package/dist/elements/a-radio-group.js +6 -4
  114. package/dist/elements/a-select-faceted.d.ts +1 -0
  115. package/dist/elements/a-select-faceted.js +1 -0
  116. package/dist/elements/a-select.d.ts +1 -0
  117. package/dist/elements/a-select.js +1 -0
  118. package/dist/elements/a-slider.css +1 -1
  119. package/dist/elements/a-slider.d.ts +11 -3
  120. package/dist/elements/a-slider.js +244 -242
  121. package/dist/elements/a-steps.d.ts +1 -0
  122. package/dist/elements/a-steps.js +1 -0
  123. package/dist/elements/a-switch.css +1 -1
  124. package/dist/elements/a-tab.css +1 -1
  125. package/dist/elements/a-tabpanel.d.ts +2 -2
  126. package/dist/elements/a-tabpanel.js +13 -3
  127. package/dist/elements/a-tabs.css +1 -1
  128. package/dist/elements/a-tabs.d.ts +1 -1
  129. package/dist/elements/a-tabs.js +6 -4
  130. package/dist/elements/a-tag.css +1 -1
  131. package/dist/elements/a-tag.d.ts +1 -0
  132. package/dist/elements/a-tag.js +1 -0
  133. package/dist/elements/a-text.css +1 -1
  134. package/dist/elements/a-text.d.ts +6 -43
  135. package/dist/elements/a-text.js +110 -193
  136. package/dist/elements/a-title.css +1 -1
  137. package/dist/elements/a-title.d.ts +1 -0
  138. package/dist/elements/a-title.js +1 -0
  139. package/dist/elements/a-toast.css +1 -1
  140. package/dist/elements/a-toast.d.ts +10 -45
  141. package/dist/elements/a-toast.js +80 -66
  142. package/dist/elements/a-toaster.css +1 -1
  143. package/dist/elements/a-toaster.js +9 -44
  144. package/dist/elements/a-tooltip.css +1 -1
  145. package/dist/elements/a-tooltip.d.ts +1 -1
  146. package/dist/elements/a-tooltip.js +142 -136
  147. package/dist/elements/copy-behavior.d.ts +1 -1
  148. package/dist/elements/copy-behavior.js +21 -21
  149. package/dist/elements/index.d.ts +9 -3
  150. package/dist/elements/index.js +6 -6
  151. package/dist/elements/input-focus-modality.d.ts +15 -0
  152. package/dist/elements/input-focus-modality.js +44 -0
  153. package/dist/elements/input-trailing-actions.d.ts +5 -0
  154. package/dist/elements/input-trailing-actions.js +38 -0
  155. package/dist/elements/shadow-aria.d.ts +2 -0
  156. package/dist/elements/shadow-aria.js +2 -1
  157. package/dist/elements/value-input.d.ts +3 -0
  158. package/dist/elements/value-input.js +12 -0
  159. package/dist/general_types.d.ts +103 -96
  160. package/dist/index.d.ts +1 -1
  161. package/dist/input-events.d.ts +4 -0
  162. package/dist/input-events.js +15 -0
  163. package/dist/jsx-runtime.d.ts +70 -23
  164. package/dist/jsx-runtime.js +26 -19
  165. package/dist/native-event-props.d.ts +2 -0
  166. package/dist/native-event-props.js +10 -0
  167. package/dist/reset.css +1 -1
  168. package/dist/theme-antithesis.css +10 -1
  169. package/dist/theme-antune.css +1 -1
  170. package/docs/accessibility.md +17 -3
  171. package/docs/changelog.md +384 -2
  172. package/docs/comparison.md +2 -2
  173. package/docs/components/avatar.md +5 -0
  174. package/docs/components/banner.md +117 -187
  175. package/docs/components/breadcrumbs.md +9 -6
  176. package/docs/components/button.md +22 -0
  177. package/docs/components/card.md +74 -28
  178. package/docs/components/checkbox.md +9 -10
  179. package/docs/components/dialog.md +83 -32
  180. package/docs/components/expander.md +198 -435
  181. package/docs/components/icon.md +11 -17
  182. package/docs/components/input-autocomplete.md +152 -52
  183. package/docs/components/input-date.md +175 -148
  184. package/docs/components/input-time.md +81 -38
  185. package/docs/components/input.md +343 -349
  186. package/docs/components/loader.md +2 -1
  187. package/docs/components/menu.md +35 -6
  188. package/docs/components/panel.md +18 -0
  189. package/docs/components/progress.md +83 -49
  190. package/docs/components/radio.md +39 -43
  191. package/docs/components/select-faceted.md +54 -7
  192. package/docs/components/select.md +390 -386
  193. package/docs/components/slider.md +136 -19
  194. package/docs/components/steps.md +6 -3
  195. package/docs/components/switch.md +8 -9
  196. package/docs/components/tabs.md +110 -104
  197. package/docs/components/text.md +110 -86
  198. package/docs/components/title.md +47 -33
  199. package/docs/components/toaster.md +242 -84
  200. package/docs/components/tooltip.md +204 -113
  201. package/docs/install-config.md +461 -96
  202. package/docs/packages/plot.md +228 -143
  203. package/docs/theming.md +29 -13
  204. package/package.json +43 -4
  205. package/theme-antithesis-license.md +66 -0
package/docs/changelog.md CHANGED
@@ -3,6 +3,388 @@
3
3
  This page tracks changes that ship in `@antadesign/anta`. Documentation-only
4
4
  changes are not listed.
5
5
 
6
+ ## 0.3.35 — October 18, 2026
7
+
8
+ ### Added
9
+
10
+ - [Panel's layout placeholder](/panel/#styling) exposes `::part(placeholder)`
11
+ for styling the reserved region while maximized.
12
+
13
+ - [Text's inert expansion mode](/text/#truncation-and-expansion):
14
+ `expandableInert` makes the folded, overflowing preview one expand target and
15
+ skips content interactions until expanded. Text that fits remains interactive.
16
+
17
+ - [Input button fields](/input/#styling) expose `::part(input-label)` for their
18
+ value or placeholder. [Select](/select/#migrate-field-styles) uses the same part.
19
+
20
+ - [Select's `dimActions` prop](/select/) controls its trigger adornments. Pass
21
+ `false` to keep them visible instead of dimming them until hover or focus.
22
+
23
+ - [Menu's header and footer slots](/menu/#styling) expose styling parts, and
24
+ [Dialog's optional regions](/dialog/#styling) expose CSS states for assigned
25
+ header and footer content.
26
+
27
+ - [Title typeface](/title/#typeface): `font` sets a title in `serif`, `sans-serif`,
28
+ or `monospace` and overrides the theme's level default.
29
+
30
+ ### Breaking
31
+
32
+ - [Icon](/icon/) and [Loader](/loader/) imports load styles without registering
33
+ custom element classes. If an integration requires a defined tag, call the
34
+ existing `register_a_icon()` or `register_a_loader()` export explicitly.
35
+
36
+ - [Calendar selection](/input-date/#calendar) leaves authored input attributes
37
+ unchanged during uncontrolled picks, reset, and restoration. Its `.value`
38
+ getter now returns `null` when empty; InputDate retains its empty text value
39
+ (`''`).
40
+
41
+ - [Slider controlled values](/slider/#managing-the-value) change only when the
42
+ application updates `value`, including on form reset. Callbacks report requested
43
+ values; read the element's `value` for its applied result. Uncontrolled
44
+ interaction, reset, and restoration no longer rewrite input attributes. Remove
45
+ `value` to release control while retaining the applied number.
46
+
47
+ - [Browser support](/install/#browser-support) requires Chrome/Edge 135+ and
48
+ Firefox 136+. Safari/iOS Safari remains 17.4+. Input labels and hints use live
49
+ ARIA element references without a copied-text fallback.
50
+
51
+ - [Browser hydration](/install/#browser-hydration) requires
52
+ `configure(h, Fragment, hooks, { hydratingEvents: true })` before mounting.
53
+ Client-only apps and worker renderers forward handlers immediately by default,
54
+ without an extra render for listener setup.
55
+
56
+ - [Custom renderer configuration](/install/#preact-without-compat) replaces the
57
+ hooks object as a whole. Pass your runtime's hooks rather than selecting a few;
58
+ missing hooks report an error instead of using another renderer's hooks.
59
+
60
+ - [Panel inside an application shadow root](/panel/#styling) now requires a
61
+ stylesheet link to `@antadesign/anta/elements/a-panel.css` inside that root
62
+ for its maximized layout. Document styles cannot reach its internal parts.
63
+
64
+ - Normal part overrides for [Dialog](/dialog/#styling), [Menu](/menu/#styling),
65
+ [Slider](/slider/#styling), and [Panel](/panel/#styling) follow Anta's document
66
+ cascade layers. Move overrides from `base` to `components`, `utilities`, or
67
+ unlayered CSS.
68
+
69
+ - [Select single selection](/select/#managing-the-value) uses `null` for a
70
+ controlled empty value, and Clear reports `null` instead of `undefined`. Use
71
+ `V | null` for single-select state and callbacks; reset with `value={null}`.
72
+ Omitted or `undefined` values remain uncontrolled, and multiple selection
73
+ continues to use arrays with `[]` for an empty selection.
74
+
75
+ - [Select's default field](/select/#migrate-field-styles) uses `a-input[button]`,
76
+ which receives `className` and `style`. Replace `a-select-field > a-button`
77
+ selectors with `.my-select::part(field)` on your field class, and use
78
+ `.my-select::part(input-label)` instead of `a-button-label` for selected text.
79
+ Existing raw `a-select-field` compositions retain their CSS, JSX types, and
80
+ label and hint behavior.
81
+
82
+ - [SelectFaceted text editors](/select-faceted/#styling) use the CSS-only
83
+ `a-select-faceted-text` wrapper. Replace selectors such as
84
+ `a-menu div[data-menu-open] > a-input` with
85
+ `a-menu a-select-faceted-text > a-input`, and move selectors that depend on the
86
+ former inline `style` attribute to the region tag.
87
+
88
+ - [InputTime slot groups](/input-time/#styling) use `a-input-time-*` tags. Update
89
+ selectors that target their former spans; existing slot and part names remain.
90
+
91
+ - [Expander raw markup](/expander/#web-component) uses named regions instead of
92
+ slot attributes. Put `level` on `a-expander-summary`, select built-in artwork
93
+ with `a-expander-indicator shape="chevron"`, and place that region before the
94
+ title or after the actions to choose its position.
95
+
96
+ - [Banner raw markup](/banner/#web-component) uses light-DOM regions instead of
97
+ shadow slots and `::part()`. Group actions in `a-banner-actions`.
98
+
99
+ - [Progress styling](/progress/#styling) uses light-DOM selectors instead of
100
+ `::part()`. `AProgressElement` and `register_a_progress` are removed; raw HTML
101
+ supplies its own ARIA.
102
+
103
+ - Expandable [Text](/text/#expand-raw-html) requires
104
+ `@antadesign/anta/elements/a-button` when importing elements individually. The
105
+ full bundle and elements barrel include it. JSX creates the expansion control;
106
+ raw HTML authors supply it using the linked example.
107
+
108
+ - [Card raw markup](/card/#migrate-from-shadow-parts) uses `a-card-*` regions
109
+ instead of shadow slots and `::part()`. Link Cards use
110
+ `a[data-anta-card-link] > a-card-layout`. `ACardElement` and `register_a_card`
111
+ are removed.
112
+
113
+ - The [Antithesis theme](/theming/) is copyright Antithesis Operations LLC and
114
+ now has a separate license. Noncommercial use is free; commercial use requires
115
+ prior written permission. Earlier MIT-licensed copies keep their original terms.
116
+ Antune and the default styles remain MIT licensed.
117
+
118
+ ### Changed
119
+
120
+ - Default styles for [Input](/input/#styling), [InputTime](/input-time/#styling),
121
+ [Menu](/menu/#styling), [Dialog](/dialog/#styling), [Tooltip](/tooltip/#styling),
122
+ [Copy feedback](/button/#copy-feedback), [Toaster](/toaster/#styling),
123
+ [Expander](/expander/#styling), [Slider](/slider/#styling), and
124
+ [Panel](/panel/#styling) load from external CSS under strict CSP.
125
+
126
+ - [Input's native decorations](/input/#styling) may remain visible in some
127
+ browsers, including number steppers in Chrome 135 and raw HTML search controls.
128
+
129
+ - [Banner](/banner/) renders its layout before registration. Dismissal leaves
130
+ children mounted.
131
+
132
+ - [Card](/card/) renders its layout and native link directly in HTML. Generic
133
+ anchor display rules preserve its media and content arrangement.
134
+
135
+ - [Progress](/progress/) renders its fill and loading animation without
136
+ JavaScript. Native `<progress data-anta>` remains a standalone control.
137
+
138
+ - [Text](/text/) renders and truncates in light DOM. Expansion preserves authored
139
+ markup, and one-way expansion hides its control instead of removing it.
140
+
141
+ - [Expander rounding](/expander/#round-and-outdent) uses a `1rem` radius when
142
+ `round` is `true`, independent of title level and header height. Explicit
143
+ radius values remain supported, and native `details[data-anta][round]` uses the
144
+ same default.
145
+
146
+ - [Select's shared stylesheet](/select/#styling) is named `components/Select.css`.
147
+ The previous `components/select.css` and `components/select-parts.css` imports
148
+ remain supported.
149
+
150
+ - [Tabs rounding](/tabs/#styling): a custom `round` radius applies to the tabs
151
+ and sliding indicator as well as the primary track.
152
+
153
+ - [Tabs sizing](/tabs/#size) in the Antithesis theme matches text buttons'
154
+ horizontal padding: 10px, 12px, and 14px per side for small, medium, and large.
155
+
156
+ ### Fixed
157
+
158
+ #### Banner
159
+
160
+ - [Visibility and dismissal](/banner/#controlled-vs-uncontrolled) work after an
161
+ initially dismissed notice and after moving between documents. Nested banners
162
+ keep their alignment and close styling independent, and empty action regions
163
+ take no layout space.
164
+
165
+ #### Calendar
166
+
167
+ - [Default values](/input-date/#calendar) return `null` when `.defaultValue` is
168
+ unset, so writing it back preserves the absence of a default.
169
+ - [Property inputs](/input-date/#calendar) assigned before registration take
170
+ effect when the element upgrades, including while detached.
171
+ - [Unbounded year menus](/input-date/#calendar) center on the displayed year, including
172
+ dates supplied through `value` and `defaultValue`.
173
+ - [Controlled selection](/input-date/#calendar) keeps form values in sync in
174
+ React and Preact, including selecting a previous date again.
175
+
176
+ #### Copy feedback
177
+
178
+ - [Copying](/button/#copy-feedback) remains available while feedback CSS loads.
179
+ Disconnecting clears feedback and prevents stale clipboard results from
180
+ reopening it after reconnection.
181
+
182
+ #### Dialog
183
+
184
+ - [Accessible names](/dialog/) follow header text edits in place, including
185
+ React and Preact updates after hydration.
186
+ - [Named triggers](/dialog/#triggers) release their listeners on removal
187
+ and document adoption.
188
+
189
+ #### Expander
190
+
191
+ - [Expansion](/expander/) keeps content clipped until opening finishes, then
192
+ restores overflow. Reconnection preserves applied state.
193
+
194
+ #### Input
195
+
196
+ - [Clear and trailing actions](/input/#leading-trailing-and-clear) fit Anta
197
+ buttons to the field height while preserving padding and natural text width.
198
+ Icon-only Button and ButtonCopy actions are square, and raw Anta buttons can
199
+ opt in with `data-anta-icon-only`.
200
+ - [Multiline layout](/input/#multiline) applies when `rows` is set without
201
+ `multiline`, keeping actions aligned to the first line.
202
+ - [Trailing spacing](/input/#styling) honors inherited `--input-trailing-inset`
203
+ overrides for text and actions. Mixed content and nested buttons keep the text
204
+ inset by default.
205
+ - [Form names](/input/#forms) reflect to the host attribute, preserving named
206
+ form lookup and name-based selectors in React 19.
207
+ - [Focus rings](/input/#styling) follow the focused field, and typing in large
208
+ forms no longer refreshes focus across unrelated Inputs. Focus tracking releases
209
+ listeners when fields disconnect.
210
+ - [Clear actions](/input/#events) affect only their owning field, including
211
+ nested Inputs.
212
+ - [Button-backed fields](/input/) and [Select](/select/) describe the value
213
+ only when a separate label supplies the accessible name. Empty fields keep
214
+ placeholders out of the value description.
215
+ - [WebKit multiline sizing](/input/#multiline) uses JS autosizing to avoid crashes
216
+ in collapsed disclosures. Fallback measurements preserve page and textarea
217
+ scroll positions.
218
+
219
+ #### InputAutocomplete
220
+
221
+ - [Value ownership](/input-autocomplete/#managing-the-value) retains the latest
222
+ text, including `''`, when `value` is omitted or becomes `undefined`.
223
+ Uncontrolled editing resumes from that text; form reset still restores
224
+ `defaultValue`.
225
+ - [Field callbacks](/input-autocomplete/#events) run alongside text updates and
226
+ popup handling. Form reset restores the supplied default text without opening
227
+ suggestions or moving focus from another control.
228
+ - [Suggestion interaction](/input-autocomplete/#keyboard-interaction) leaves
229
+ composition keys with the input method and keeps rows out of Tab order.
230
+ Editing or result changes, including label and hint edits, clear stale active
231
+ suggestions.
232
+ - [Popup interaction](/input-autocomplete/#keyboard-interaction) keeps field focus
233
+ on padding clicks and preserves keyboard selection when a nested control's
234
+ disabled state changes. Results stay dismissed after focus leaves.
235
+
236
+ #### InputDate
237
+
238
+ - [Calendar triggers](/input-date/) ignore label and hint clicks. The underlying
239
+ [Menu field anchors](/menu/) respond only to clicks within their field part.
240
+
241
+ #### InputTime
242
+
243
+ - [Touch editing](/input-time/#the-field) waits for a completed tap before
244
+ focusing field padding. Canceled gestures no longer affect later segment
245
+ selection.
246
+ - [Editing and clearing](/input-time/) retain incomplete edits on reconnection,
247
+ preserve a custom tone with neutral status, and use live label and hint
248
+ references. Read-only fields prevent edits, and `onClearClick` can cancel clear
249
+ actions.
250
+ - [Blur commits](/input-time/#web-component) finish when a field is removed.
251
+ Read-only focus visits emit `change` only for a pending edit, and disabling a
252
+ parent fieldset clears keyboard focus state.
253
+ - [AM/PM labels](/input-time/) reserve space for the locale's longest label
254
+ without native autosizing, so switching periods keeps the field width.
255
+
256
+ #### Menu
257
+
258
+ - [Custom selection indicators](/select/#custom-indicators) use external layout
259
+ styles, preserving alignment and row activation under a strict CSP.
260
+
261
+ - [Trigger replacement](/menu/) preserves keyboard interaction, popup
262
+ relationships, and open state, including [Select custom triggers](/select/#custom-trigger).
263
+ Anchored popovers reposition to follow their replacement.
264
+ - [Positioning and dismissal](/menu/) keep RTL menus within the viewport and
265
+ open stacks independent between documents. Closing or removing a menu clears
266
+ pending navigation and positioning work.
267
+ - [Custom rounding](/menu/#styling) applies to the container in every theme.
268
+ - [Combobox cursor events](/menu/) report a cleared autocomplete cursor once,
269
+ including when an edit also updates the suggestion rows.
270
+
271
+ #### Panel
272
+
273
+ - [Maximization](/panel/#styling) restores normal layout and focus handling
274
+ if native popover opening fails or is canceled.
275
+ - [React hydration](/panel/#controlled) retains state-change callbacks.
276
+
277
+ #### Progress
278
+
279
+ - [Loading stripes](/progress/) match their travel distance to the bar's width
280
+ during playback and resizing. Their blurred edges stay outside the track,
281
+ preventing jumps and edge flicker when the animation repeats.
282
+
283
+ #### Select
284
+
285
+ - [Field layout and validation](/select/#styling) preserve leading content and
286
+ the chevron's status color in server-rendered HTML under `style-src-attr 'none'`.
287
+
288
+ #### SelectFaceted
289
+
290
+ - [Text-editor padding](/select-faceted/#styling) survives server rendering under
291
+ `style-src-attr 'none'`.
292
+ - [Searches and text drafts](/select-faceted/) keep working when React defers
293
+ state updates.
294
+
295
+ #### Slider
296
+
297
+ - [Dragging](/slider/#relative-dragging) honors consumer cancellation and ends
298
+ when disabled or disconnected. Parent updates remain applied during a drag,
299
+ and rebasing preserves the final commit. Ancestor propagation boundaries no
300
+ longer disable pointer or keyboard input.
301
+ - [Accessible names](/slider/#range-values) follow live label text, and scalar
302
+ disabled state is exposed to accessibility tools.
303
+ - [Inherited RTL](/slider/#relative-dragging), including CSS `direction`, aligns
304
+ pointer movement, thumbs, value bubbles, and markers with the rail.
305
+ - [Numeric bounds](/slider/#managing-the-value) contain small decimal values.
306
+ - [Property inputs](/slider/#managing-the-value) assigned before registration
307
+ take effect when the element upgrades, including while detached. A runtime
308
+ `value={null}` uses uncontrolled defaults and the matching scalar or range
309
+ presentation.
310
+ - [Restored ranges](/slider/#range-values) keep each thumb on its restored
311
+ endpoint when the application takes control.
312
+
313
+ #### RadioGroup and Tabs
314
+
315
+ - [RadioGroup](/radio/) and [Tabs](/tabs/) retain the latest applied selection
316
+ when the JSX `value` prop is omitted or the raw `state` attribute is removed.
317
+ The keyboard tab stop and active tab panel follow the retained selection.
318
+ - [Per-option tones](/tabs/#tone) color the selected indicator without recoloring
319
+ the track. An explicit neutral option resets the indicator on a toned strip.
320
+
321
+ #### Steps
322
+
323
+ - [Vertical panels](/steps/#orientation) follow the selected step using external
324
+ CSS, including when a Content Security Policy blocks inline style attributes.
325
+
326
+ #### Text
327
+
328
+ - [Keyboard order](/text/#truncation-and-expansion) places expansion controls
329
+ before content links. Raw HTML authors place the control before `a-text-content`.
330
+ - [Folded content](/text/#truncation-and-expansion) stays in place when a clipped
331
+ link receives focus and remains selectable.
332
+ - [Mixed imports](/text/#truncation-and-expansion) preserve expansion controls'
333
+ accessible names and expanded state when granular entries load before the bundle.
334
+ - [Control layout](/text/#truncation-and-expansion) spans the full width for
335
+ multiline text and the inline end for single-line text. Collapse controls leave
336
+ revealed links clickable without adding padding to folded text or changing its
337
+ width on expansion.
338
+
339
+ #### Toaster
340
+
341
+ - [Countdown progress](/toaster/) survives interrupted exits and reconnection.
342
+ Reattaching an already-dismissed toast emits completion for its new owner.
343
+ - [DOM-node content](/toaster/#web-component) clears to `null` when its prop is
344
+ removed. Refilled fragments can be assigned again to replace their previous
345
+ children.
346
+
347
+ #### Tooltip
348
+
349
+ - [Interactive content](/tooltip/) stays open during keyboard travel, and
350
+ reduced motion disables fades.
351
+
352
+ ## 0.3.34 — October 5, 2026
353
+
354
+ ### Added
355
+
356
+ - [Title](/title/) and [Tag](/tag/) have granular `elements/a-title` and
357
+ `elements/a-tag` entries that load their CSS without registering custom elements.
358
+
359
+ ### Changed
360
+
361
+ - [Reference themes](/theming/#fonts-in-a-theme) no longer load hosted fonts or
362
+ replace the system font stacks. Load your chosen fonts in an application-owned
363
+ stylesheet; font-specific features and variation axes are also application-owned.
364
+ - JSX wrapper imports no longer load CSS. For granular usage, load composed
365
+ layout styles in the UI thread through `elements/a-breadcrumbs`,
366
+ `elements/a-steps`, `elements/a-input-date`, `elements/a-select`, or
367
+ `elements/a-select-faceted`, alongside their nested browser elements.
368
+ Full bundle usage is unchanged.
369
+ - The Antithesis theme adds an interactive color layer: `--fill-*`, `--stroke-*`
370
+ and `--label-*`, named by step, tone and state. [Buttons](/button/),
371
+ [Checkboxes](/checkbox/), [Radios](/radio/) and [Inputs](/input/) read their
372
+ colors from it. It replaces the theme's `--fill-{tone}` and `--control-*`
373
+ variables. Inputs in this theme draw a 1px border and a 2px focus ring inside
374
+ the field.
375
+ - Selected paddingless [Buttons](/button/#paddingless) draw their 1px selection
376
+ ring outside the label. Their corner radius is capped at 3px, including when
377
+ `round` requests a larger radius.
378
+
379
+ ### Fixed
380
+
381
+ - [Avatar](/avatar/) images and generated pictures keep their size, rounding,
382
+ and badge layout under `style-src 'self'` without allowing inline styles.
383
+ - Individual element stylesheets resolve through `@antadesign/anta/elements/*.css`,
384
+ including imports with a bundler's `?raw` query.
385
+ - [Tab panels](/tabs/#panels) follow their own strip when multiple `Tabs` share a
386
+ parent, including when another `Tabs` appears before an outer panel.
387
+
6
388
  ## 0.3.33 — September 28, 2026
7
389
 
8
390
  ### Added
@@ -32,7 +414,7 @@ changes are not listed.
32
414
 
33
415
  ### Added
34
416
 
35
- - [Expander indicators](/expander/#indicator) can sit after header actions and
417
+ - [Expander indicators](/expander/#actions-and-indicators) can sit after header actions and
36
418
  use built-in chevron, triangle, or plus visuals. Custom indicators can rotate
37
419
  as one node or switch between closed and open nodes.
38
420
  - [Box measurements](/box/#measurements) can include
@@ -53,7 +435,7 @@ changes are not listed.
53
435
 
54
436
  ### Fixed
55
437
 
56
- - [Expander indicators](/expander/#indicator) leave the mark empty for
438
+ - [Expander indicators](/expander/#actions-and-indicators) leave the mark empty for
57
439
  unrecognized strings and numbers instead of displaying them as text.
58
440
  - [Menu submenus](/menu/#submenus) stay open when a nested
59
441
  date picker closes under the pointer outside the submenu. Hover dismissal
@@ -6,7 +6,7 @@
6
6
 
7
7
  | System | Version | Frameworks | Styling | License | Browser baseline | Browser policy |
8
8
  | --- | --- | --- | --- | --- | --- | --- |
9
- | [Anta](https://anta.design) | @antadesign/anta 0.3.26 | Web components; React and Preact wrappers | Plain CSS + CSS-variable tokens | MIT | 2024 | Chrome / Edge 125 (2024), Safari 17.4 (2024), and Firefox 126 (2024), or later. Requires custom elements, ElementInternals, Popover, and modern CSS. |
9
+ | [Anta](https://anta.design) | @antadesign/anta 0.3.26 | Web components; React and Preact wrappers | Plain CSS + CSS-variable tokens | MIT | 2025 | Chrome / Edge 135 (2025), Safari 17.4 (2024), and Firefox 136 (2025), or later. Requires custom elements, ElementInternals, ARIA element references, custom states, Popover, and modern CSS. |
10
10
  | [MUI (Material UI)](https://mui.com/material-ui/) | @mui/material 9.4.0 | React | CSS-in-JS (Emotion) | MIT core + paid MUI X | 2024 | Chrome 117 (2023), Edge 121 (2024), Firefox 121 (2024), and Safari 17.0 (2023), or later. |
11
11
  | [Mantine](https://mantine.dev) | @mantine/core 9.6.0 | React | CSS Modules + CSS variables | MIT | 2022 | Tested on Chromium 108 (2022), Firefox 101 (2022), and Safari 15.4 (2022), or later. |
12
12
  | [Astryx](https://astryx.atmeta.com) | @astryxdesign/core 0.5.3 | React | StyleX (precompiled atomic CSS) | MIT | 2024 / 2026 | Two documented tiers: functional support at Baseline 2024 and full fidelity at Baseline 2026. Older functional-tier browsers need a positioning fallback for anchored overlays. |
@@ -48,7 +48,7 @@ download costs.
48
48
  | Gzipped size | ~100 KiB |
49
49
  | Measured version | @antadesign/anta 0.3.16 |
50
50
  | Measurement scope | Wrappers, elements, CSS, tokens, and reset. Excludes React, the branded theme, and stickers. |
51
- | Browser support | Chrome / Edge 125 (2024), Safari 17.4 (2024), and Firefox 126 (2024), or later. Requires custom elements, ElementInternals, Popover, and modern CSS. |
51
+ | Browser support | Chrome / Edge 135 (2025), Safari 17.4 (2024), and Firefox 136 (2025), or later. Requires custom elements, ElementInternals, ARIA element references, custom states, Popover, and modern CSS. |
52
52
 
53
53
  #### Strengths
54
54
 
@@ -301,6 +301,11 @@ Reach for the props first: **`size`** sets the dimensions and **`generator`** th
301
301
  generated look. Everything else is `--avatar-*` custom properties on the host and
302
302
  `::part()` on the shadow content.
303
303
 
304
+ Numeric `size`, custom `round`, and literal `badge` colors serialize inline styles
305
+ during server rendering. If your policy uses `style-src-attr 'none'`, omit those
306
+ customization props and set the values through a class and an allowed stylesheet.
307
+ See [Content Security Policy](../install-config.md#content-security-policy).
308
+
304
309
  The container is a rounded square by default; `round` makes it a circle and takes
305
310
  a length for a custom radius, so reach for the prop before the custom property.
306
311
  The badge is sized and placed with `--avatar-badge-ratio` (its size as a fraction