@antadesign/anta 0.3.19 → 0.3.20

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 (75) hide show
  1. package/README.md +1 -1
  2. package/dist/anta_helpers.d.ts +2 -2
  3. package/dist/components/Banner.d.ts +3 -3
  4. package/dist/components/Button.d.ts +1 -1
  5. package/dist/components/Calendar.d.ts +11 -12
  6. package/dist/components/Card.d.ts +1 -1
  7. package/dist/components/Card.js +1 -1
  8. package/dist/components/Checkbox.d.ts +8 -9
  9. package/dist/components/Dialog.d.ts +1 -1
  10. package/dist/components/Expander.d.ts +5 -6
  11. package/dist/components/Input.d.ts +2 -2
  12. package/dist/components/Input.js +1 -1
  13. package/dist/components/InputAutocomplete.d.ts +8 -8
  14. package/dist/components/InputTime.d.ts +3 -3
  15. package/dist/components/InputTime.js +1 -1
  16. package/dist/components/Menu.d.ts +2 -2
  17. package/dist/components/MenuItem.d.ts +1 -1
  18. package/dist/components/MenuItem.js +1 -1
  19. package/dist/components/Progress.d.ts +1 -1
  20. package/dist/components/RadioGroup.d.ts +12 -13
  21. package/dist/components/Select.d.ts +31 -38
  22. package/dist/components/Select.js +1 -1
  23. package/dist/components/SelectFaceted.d.ts +27 -33
  24. package/dist/components/Slider.d.ts +5 -5
  25. package/dist/components/Switch.d.ts +4 -4
  26. package/dist/components/Tabs.d.ts +7 -7
  27. package/dist/components/Title.d.ts +1 -1
  28. package/dist/components/Toaster.d.ts +1 -1
  29. package/dist/components/Tooltip.d.ts +1 -1
  30. package/dist/elements/a-card.css +1 -1
  31. package/dist/elements/a-dialog.css +1 -1
  32. package/dist/elements/a-expander.css +1 -1
  33. package/dist/elements/a-expander.d.ts +1 -0
  34. package/dist/elements/a-expander.js +12 -2
  35. package/dist/elements/a-progress.css +1 -1
  36. package/dist/elements/a-tooltip.css +1 -1
  37. package/dist/elements/a-tooltip.d.ts +1 -1
  38. package/dist/elements/a-tooltip.js +1 -1
  39. package/dist/elements/index.d.ts +1 -1
  40. package/dist/general_types.d.ts +22 -22
  41. package/dist/index.d.ts +3 -3
  42. package/docs/accessibility.md +4 -4
  43. package/docs/changelog.md +23 -13
  44. package/docs/comparison.md +1 -1
  45. package/docs/components/banner.md +17 -17
  46. package/docs/components/button.md +6 -6
  47. package/docs/components/card.md +5 -6
  48. package/docs/components/checkbox.md +17 -18
  49. package/docs/components/dialog.md +2 -2
  50. package/docs/components/expander.md +27 -30
  51. package/docs/components/icon.md +1 -1
  52. package/docs/components/input-autocomplete.md +15 -16
  53. package/docs/components/input-date.md +54 -59
  54. package/docs/components/input-time.md +7 -7
  55. package/docs/components/input.md +14 -14
  56. package/docs/components/menu.md +72 -8
  57. package/docs/components/progress.md +2 -2
  58. package/docs/components/radio.md +24 -25
  59. package/docs/components/select-faceted.md +95 -100
  60. package/docs/components/select.md +110 -115
  61. package/docs/components/slider.md +15 -10
  62. package/docs/components/switch.md +13 -13
  63. package/docs/components/tabs.md +23 -23
  64. package/docs/components/tag.md +5 -5
  65. package/docs/components/text.md +4 -4
  66. package/docs/components/title.md +1 -1
  67. package/docs/components/toaster.md +4 -4
  68. package/docs/components/tooltip.md +2 -2
  69. package/docs/credits.md +0 -4
  70. package/docs/index.md +1 -1
  71. package/docs/install-config.md +7 -7
  72. package/docs/normalization.md +6 -9
  73. package/docs/overview.md +1 -1
  74. package/docs/packages/stickers.md +1 -1
  75. package/package.json +1 -1
@@ -151,7 +151,7 @@ export interface AProgressAttributes extends BaseAttributes {
151
151
  value?: number | string | false;
152
152
  /** Maximum value. Defaults to 100. */
153
153
  max?: number | string;
154
- /** Colour variant, or any literal CSS colour for a custom tone (derived in
154
+ /** Color variant, or any literal CSS color for a custom tone (derived in
155
155
  * oklch). Named tones track light/dark automatically. */
156
156
  tone?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
157
157
  /** Size variant. `medium` is the default. */
@@ -435,12 +435,12 @@ export interface ATooltipAttributes extends BaseAttributes {
435
435
  * `@antadesign/anta`.
436
436
  */
437
437
  export interface ACheckboxAttributes extends BaseAttributes {
438
- /** Mark colour in every state — checked fill *and* unselected box border — or any
438
+ /** Mark color in every state — checked fill *and* unselected box border — or any
439
439
  * literal CSS color for a one-off custom tone. Named tones track light/dark mode
440
440
  * automatically. `'neutral'` is the default (same as omitting it). The label + hint
441
- * stay neutral — recolour them in plain CSS via the `--text-N-{tone}` tokens. */
441
+ * stay neutral — recolor them in plain CSS via the `--text-N-{tone}` tokens. */
442
442
  tone?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
443
- /** Like `tone`, but coloured onto the checked mark only — the empty box stays
443
+ /** Like `tone`, but colored onto the checked mark only — the empty box stays
444
444
  * neutral grey. Same value set as `tone`; if both are set, `tone` governs the
445
445
  * off-state border and `tone-selected` the checked fill. */
446
446
  'tone-selected'?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
@@ -489,9 +489,9 @@ export interface ACheckboxAttributes extends BaseAttributes {
489
489
  * wrapper supplies both.
490
490
  */
491
491
  export interface ASwitchAttributes extends BaseAttributes {
492
- /** Track and thumb colour. A tinted tone also colours the unchecked chrome. */
492
+ /** Track and thumb color. A tinted tone also colors the unchecked chrome. */
493
493
  tone?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
494
- /** Checked-track-only colour. The unchecked track and thumb stay neutral. */
494
+ /** Checked-track-only color. The unchecked track and thumb stay neutral. */
495
495
  'tone-selected'?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
496
496
  /** Size variant. `small` = 26×16px, `medium` (default) = 30×18px, `large` = 34×20px. */
497
497
  size?: 'small' | 'medium' | 'large';
@@ -547,7 +547,7 @@ export interface AInputAttributes extends BaseAttributes {
547
547
  * wrapper) the glyph. Only `critical` carries validity weight (`aria-invalid`
548
548
  * + `:state(invalid)`); the others are advisory. Omit for the neutral field. */
549
549
  status?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical';
550
- /** Custom accent colour (any literal CSS colour) — tints the resting + hover
550
+ /** Custom accent color (any literal CSS color) — tints the resting + hover
551
551
  * border via an oklch derivation. `status` overrides it for validation. */
552
552
  tone?: string;
553
553
  /** Disabled state. Presence-based. */
@@ -614,9 +614,9 @@ export interface ASliderAttributes extends BaseAttributes {
614
614
  name?: string;
615
615
  /** Disables pointer and keyboard interaction. Presence-based. */
616
616
  disabled?: boolean | '';
617
- /** Colour of the filled rail. Named tones or a literal CSS colour. */
617
+ /** Color of the filled rail. Named tones or a literal CSS color. */
618
618
  tone?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
619
- /** Colour of the thumb stroke. Named tones or a literal CSS colour. */
619
+ /** Color of the thumb stroke. Named tones or a literal CSS color. */
620
620
  'thumb-tone'?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
621
621
  /** Size variant. small=24px, medium=28px, large=32px tall. */
622
622
  size?: 'small' | 'medium' | 'large';
@@ -624,7 +624,7 @@ export interface ASliderAttributes extends BaseAttributes {
624
624
  'track-size'?: string;
625
625
  /** Diameter of the thumb as a CSS length, such as `'20px'`. */
626
626
  'thumb-size'?: string;
627
- /** Fill the thumb with its resolved border colour. Presence-based. */
627
+ /** Fill the thumb with its resolved border color. Presence-based. */
628
628
  'thumb-fill'?: boolean | '';
629
629
  /** Fully round the rail and thumb, or set both to a custom radius. */
630
630
  round?: boolean | number | string;
@@ -668,7 +668,7 @@ export interface AInputTimeAttributes extends BaseAttributes {
668
668
  max?: string;
669
669
  /** Validation/feedback tone. Only `critical` carries validity weight. */
670
670
  status?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical';
671
- /** Custom accent colour (any literal CSS colour) — tints the resting + hover
671
+ /** Custom accent color (any literal CSS color) — tints the resting + hover
672
672
  * border via an oklch derivation; `status` overrides for validation. */
673
673
  tone?: string;
674
674
  /** Disabled state. Presence-based. */
@@ -940,12 +940,12 @@ export interface ACopyAttributes extends BaseAttributes {
940
940
  export interface ARadioAttributes extends BaseAttributes {
941
941
  /** This option's identity / submitted value. */
942
942
  value?: string;
943
- /** Mark colour in every state — selected ring fill + dot *and* unselected ring
943
+ /** Mark color in every state — selected ring fill + dot *and* unselected ring
944
944
  * border — or any literal CSS color for a one-off custom tone. Named tones track
945
945
  * light/dark mode. `'neutral'` is the default. The label + hint stay neutral —
946
- * recolour them in plain CSS via the `--text-N-{tone}` tokens. */
946
+ * recolor them in plain CSS via the `--text-N-{tone}` tokens. */
947
947
  tone?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
948
- /** Like `tone`, but coloured onto the selected mark only — an unselected ring stays
948
+ /** Like `tone`, but colored onto the selected mark only — an unselected ring stays
949
949
  * neutral grey. Same value set as `tone`; if both are set, `tone` governs the
950
950
  * off-state border and `tone-selected` the selected fill. */
951
951
  'tone-selected'?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
@@ -991,17 +991,17 @@ export interface ARadioGroupAttributes extends BaseAttributes {
991
991
  /** Form field name — the group submits `name=value`. */
992
992
  name?: string;
993
993
  /** Mark tone cascaded to children that don't set their own, or any literal CSS
994
- * color for a one-off custom tone. Colours every child's ring fill + dot *and*
995
- * unselected border. The option text stays neutral — recolour it in plain CSS via
994
+ * color for a one-off custom tone. Colors every child's ring fill + dot *and*
995
+ * unselected border. The option text stays neutral — recolor it in plain CSS via
996
996
  * the `--text-N-{tone}` tokens. */
997
997
  tone?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
998
- /** Like `tone`, but coloured onto the selected option only — every unselected ring
998
+ /** Like `tone`, but colored onto the selected option only — every unselected ring
999
999
  * stays neutral grey. Cascaded to children that don't set their own. */
1000
1000
  'tone-selected'?: 'brand' | 'neutral' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
1001
1001
  /** Size cascaded to children that don't set their own. */
1002
1002
  size?: 'small' | 'medium' | 'large';
1003
1003
  /** Validation/feedback tone for the group hint — same set as `<a-input>`'s
1004
- * `status`. Recolours `<a-radio-group-hint>`; omit for the neutral default. */
1004
+ * `status`. Recolors `<a-radio-group-hint>`; omit for the neutral default. */
1005
1005
  status?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical';
1006
1006
  /** Disable the whole group. Presence-based. */
1007
1007
  disabled?: boolean | '';
@@ -1046,9 +1046,9 @@ export interface ARadioGroupAttributes extends BaseAttributes {
1046
1046
  export interface ATabAttributes extends BaseAttributes {
1047
1047
  /** This tab's identity / the value reported when it's selected. */
1048
1048
  value?: string;
1049
- /** Per-tab tone override (same vocabulary as `<a-tabs tone>`): colours this tab's
1049
+ /** Per-tab tone override (same vocabulary as `<a-tabs tone>`): colors this tab's
1050
1050
  * label + icons and, when selected, its indicator. Named tones tone the sliding
1051
- * indicator too; a custom literal colour tones the indicator only in `noslide`.
1051
+ * indicator too; a custom literal color tones the indicator only in `noslide`.
1052
1052
  * Custom tones also set `--tabs-tone-source` on the tab (via the wrapper's style). */
1053
1053
  tone?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
1054
1054
  /** Selected state — connect-time seed for the standalone render path (no tablist).
@@ -1178,7 +1178,7 @@ export interface ACardAttributes extends BaseAttributes {
1178
1178
  size?: 'small' | 'medium' | 'large';
1179
1179
  /** Which edge the full-bleed `media` slot sits on. `top` is the default. */
1180
1180
  'media-position'?: 'top' | 'bottom' | 'left' | 'right';
1181
- /** Selected / chosen state — an inset ring in the tone colour. Presence-based
1181
+ /** Selected / chosen state — an inset ring in the tone color. Presence-based
1182
1182
  * (`''` on, omit off). */
1183
1183
  selected?: boolean | '';
1184
1184
  /** Loading state — skeleton pulse, `aria-busy`, and (in link mode) navigation is
@@ -1222,7 +1222,7 @@ export interface ABannerAttributes extends BaseAttributes {
1222
1222
  * `'closed'` starts it dismissed. */
1223
1223
  'default-state'?: 'open' | 'closed';
1224
1224
  /** Semantic tone, or any literal CSS color for a one-off custom tone. Named tones
1225
- * re-point the surface + text + border colour (used if you opt into a border); a
1225
+ * re-point the surface + text + border color (used if you opt into a border); a
1226
1226
  * custom color keeps its hue with lightness/chroma pinned. `'neutral'` is the
1227
1227
  * default (same as omitting it). */
1228
1228
  tone?: 'neutral' | 'brand' | 'info' | 'success' | 'warning' | 'critical' | (string & {});
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @antadesign/anta — Antithesis Design System
2
+ * @antadesign/anta — Anta design system
3
3
  *
4
4
  * Portable UI components with web component internals and JSX wrappers.
5
5
  * Works with React, Preact (via compat or `configure()`), or any custom JSX runtime.
@@ -43,7 +43,7 @@ export type { SwitchProps, SwitchChangeAttrs } from './components/Switch';
43
43
  export { Menu } from './components/Menu';
44
44
  export type { MenuProps } from './components/Menu';
45
45
  export { MenuItem } from './components/MenuItem';
46
- export type { MenuItemProps } from './components/MenuItem';
46
+ export type { MenuItemProps, MenuItemCommonProps, MenuItemLinkMode, MenuItemActionMode, } from './components/MenuItem';
47
47
  export { MenuItemCopy } from './components/MenuItemCopy';
48
48
  export type { MenuItemCopyProps } from './components/MenuItemCopy';
49
49
  export { MenuSeparator } from './components/MenuSeparator';
@@ -71,7 +71,7 @@ export type { RadioGroupProps, RadioOption } from './components/RadioGroup';
71
71
  export { Select, optionsWithSelection } from './components/Select';
72
72
  export type { SelectProps, SelectCommonProps, OptionValue, SelectOption, SelectGroup, SelectSubmenu, SelectItem, SelectChangeAttrs, OptionState, TriggerState, EmptyState, SelectionState, SelectedOption, SelectedGroup, SelectedSubmenu, SelectedItem, } from './components/Select';
73
73
  export { SelectFaceted } from './components/SelectFaceted';
74
- export type { SelectFacetedProps, SelectFacet, SelectFacetSingle, SelectFacetMultiple, SelectFacetText, SelectFacetCustom, SelectFacetCustomContext, SelectFacetedValue, SelectFacetedChangeAttrs, SelectFacetedTriggerState, } from './components/SelectFaceted';
74
+ export type { SelectFacetedProps, SelectFacet, SelectFacetSingle, SelectFacetMultiple, SelectFacetText, SelectFacetCustom, SelectFacetCustomContext, FacetFilter, SelectFacetedValue, SelectFacetedChangeAttrs, SelectFacetedTriggerState, } from './components/SelectFaceted';
75
75
  export { Tabs } from './components/Tabs';
76
76
  export type { TabsProps, TabOption, TabsChangeAttrs } from './components/Tabs';
77
77
  export { TabPanel } from './components/TabPanel';
@@ -1,19 +1,19 @@
1
1
  # Accessibility
2
2
 
3
- A few pieces of guidance for designers and engineers using Anta.
3
+ A few guidelines for designers and engineers using Anta.
4
4
 
5
5
  ## Colors
6
6
 
7
- The matrix below renders every text level on every background for the selected tone, in the current theme. Each cell shows the WCAG 2 contrast ratio (with AA / AAA pass marks for the chosen size and weight) and the APCA Lc value. The toggles change rendering only — the underlying ratios are properties of the color pair and don't shift with size or weight; what shifts is the threshold used for pass/fail. The vision tabs apply CVD or other-condition simulations via SVG filters and CSS masks; numbers reflect normal-vision math.
7
+ The matrix renders every text level on every background for the selected tone and theme. Each cell shows the WCAG 2 contrast ratio, AA or AAA result for the selected size and weight, and APCA Lc value. The controls change rendering and pass thresholds, not the color-pair ratios. Vision tabs apply SVG-filter and CSS-mask simulations; the numbers use normal-vision math.
8
8
 
9
9
  This table uses the browser's system colors directly. It changes with the active
10
10
  forced-colors palette, so it shows the values a component can use in that mode.
11
11
 
12
12
  ## Color is not a unique communication channel
13
13
 
14
- Communicating something with just a color is an accessibility problem — the message is lost under color blindness, low contrast, low brightness, monochrome printing, sun glare, and OS dark/light flips.
14
+ A color-only message fails when a reader cannot distinguish its color. This includes color blindness, low contrast, low brightness, monochrome printing, glare, and theme changes.
15
15
 
16
- Anta's `tone` prop on `Progress` and `Text` (and tinted backgrounds, borders, etc.) is a **secondary** signal. Pair it with words and, when possible, with shape distinctions (icons that are visually distinct, not just colored differently — e.g. checkmark vs. cross, not green-circle vs. red-circle).
16
+ `tone` on `Progress`, `Text`, backgrounds, and borders is a secondary signal. Pair it with text and, where useful, a distinct icon shape such as a checkmark or cross.
17
17
 
18
18
  The simulator above makes it easy to check a candidate combination across the most common color-vision deficiencies and a handful of other vision conditions.
19
19
 
package/docs/changelog.md CHANGED
@@ -3,6 +3,16 @@
3
3
  This page tracks changes that ship in `@antadesign/anta`. Documentation-only
4
4
  changes are not listed.
5
5
 
6
+ ## 0.3.20 — August 4, 2026
7
+
8
+ ### Changed
9
+
10
+ - Package documentation and source comments use clearer, more concise language.
11
+
12
+ ### Fixed
13
+
14
+ - Expander titles can be selected without toggling the disclosure.
15
+
6
16
  ## 0.3.19 — August 3, 2026
7
17
 
8
18
  ### Added
@@ -13,7 +23,7 @@ changes are not listed.
13
23
  ### Changed
14
24
 
15
25
  - Native `data-anta` select popups now follow Menu styling for their surface,
16
- option sizing, colours, and 1px item spacing when customizable selects are
26
+ option sizing, colors, and 1px item spacing when customizable selects are
17
27
  supported.
18
28
 
19
29
  ### Fixed
@@ -81,7 +91,7 @@ changes are not listed.
81
91
 
82
92
  ### Changed
83
93
 
84
- - In forced-colors mode, Anta controls and surfaces use system colours and
94
+ - In forced-colors mode, Anta controls and surfaces use system colors and
85
95
  visible borders for their interactive, selected, and disabled states,
86
96
  including icons, inputs, buttons, tags, choice controls, tabs, Expanders,
87
97
  Cards, Dialogs, Banners, Progress, and Tooltips.
@@ -90,7 +100,7 @@ changes are not listed.
90
100
  ### Fixed
91
101
 
92
102
  - No-icon `ButtonCopy` feedback now keeps a wrapping label's width and line breaks.
93
- - Native HTML radio labels use Anta's 8px control gap and vertically centred
103
+ - Native HTML radio labels use Anta's 8px control gap and vertically centered
94
104
  alignment.
95
105
  - `InputAutocomplete` now commits the highlighted suggestion when users press
96
106
  Arrow keys then Enter.
@@ -133,7 +143,7 @@ changes are not listed.
133
143
  ### Added
134
144
 
135
145
  - Seed tokens for the neutral, brand, info, success, warning, and critical
136
- colour scales.
146
+ color scales.
137
147
  - `theme-anta.css`, an opt-in stylesheet that restores the former palette.
138
148
  - Default styling for raw `dfn` elements.
139
149
 
@@ -160,7 +170,7 @@ changes are not listed.
160
170
 
161
171
  ### Breaking
162
172
 
163
- - Copy behaviour moved from `Button` and `MenuItem` to `a-copy`. Replace
173
+ - Copy behavior moved from `Button` and `MenuItem` to `a-copy`. Replace
164
174
  `<Button copy={value}>` with `<ButtonCopy copy={value}>`, or compose
165
175
  `<a-copy>` inside a control.
166
176
 
@@ -232,7 +242,7 @@ changes are not listed.
232
242
 
233
243
  ### Changed
234
244
 
235
- - `Text` and `Title` accept custom CSS colours as `tone` values.
245
+ - `Text` and `Title` accept custom CSS colors as `tone` values.
236
246
 
237
247
  ### Fixed
238
248
 
@@ -315,7 +325,7 @@ changes are not listed.
315
325
  ### Added
316
326
 
317
327
  - `InputDate`, `Calendar`, and `Select`.
318
- - Searchable Menu combobox behaviour, selectable MenuItem rows, and Menu header
328
+ - Searchable Menu combobox behavior, selectable MenuItem rows, and Menu header
319
329
  and footer slots.
320
330
  - `round` across core components, `Tabs.options`, `toneSelected` for selection
321
331
  controls, `Input type="search"`, and more icon shapes.
@@ -334,7 +344,7 @@ changes are not listed.
334
344
 
335
345
  ### Fixed
336
346
 
337
- - Menus, Select, and Inputs retain keyboard and focus behaviour in iframes,
347
+ - Menus, Select, and Inputs retain keyboard and focus behavior in iframes,
338
348
  flyouts, and grouped rows.
339
349
  - Empty tooltips do not open. Buttons keep their configured size with non-text
340
350
  content.
@@ -354,7 +364,7 @@ changes are not listed.
354
364
  ### Changed
355
365
 
356
366
  - Checkbox and RadioGroup `tone` styles their mark. `toneText` controls label
357
- colour.
367
+ color.
358
368
  - Components use tabular figures by default. Button exposes `role="button"`.
359
369
 
360
370
  ### Fixed
@@ -413,8 +423,8 @@ changes are not listed.
413
423
  ### Breaking
414
424
 
415
425
  - Rename `list-detail-view` to `list-collapse`.
416
- - Tooltips are pinned by default. Remove `static`; pass `follow` for
417
- cursor-following behaviour.
426
+ - Tooltips are pinned by default. Remove `static`; pass `follow` to position a
427
+ tooltip next to the pointer.
418
428
 
419
429
  ### Added
420
430
 
@@ -495,11 +505,11 @@ changes are not listed.
495
505
 
496
506
  - Button defaults to `tone="neutral"`. Pass `tone="brand"` to preserve the
497
507
  former default.
498
- - `tone="custom"` is removed. Pass a CSS colour directly to `tone`.
508
+ - `tone="custom"` is removed. Pass a CSS color directly to `tone`.
499
509
 
500
510
  ### Changed
501
511
 
502
- - Button accepts custom CSS colour tones and holds its width in flex layouts.
512
+ - Button accepts custom CSS color tones and holds its width in flex layouts.
503
513
 
504
514
  ## 0.1.1-dev.4 — May 6, 2026
505
515
 
@@ -25,4 +25,4 @@ stable releases in this snapshot.
25
25
 
26
26
  Rows group components by job, so Dialog, Modal, and Drawer share one mark.
27
27
  Anta covers the common controls but remains narrower than full suites. Base UI
28
- intentionally focuses on behaviour rather than styled components.
28
+ intentionally focuses on behavior rather than styled components.
@@ -14,7 +14,7 @@ same opt-in as `Progress` ([Styling](#styling)).
14
14
  ## Tones
15
15
 
16
16
  Pick a semantic `tone` to tint the surface and text together — and the ✕ adopts the
17
- same tone (it also sets the border colour, used if you opt into a border). The set
17
+ same tone (it also sets the border color, used if you opt into a border). The set
18
18
  matches `Expander` / `Tag`: `neutral` (the default) plus `brand`, `info`, `success`,
19
19
  `warning`, and `critical`. Color comes from the theme tokens, so every tone tracks
20
20
  light and dark mode automatically.
@@ -49,7 +49,7 @@ pass a `number` (px) or a CSS length string for a custom radius.
49
49
  <Banner round={12} tone="success" message="A custom 12px radius." />
50
50
  ```
51
51
 
52
- ## Message & content
52
+ ## Message and content
53
53
 
54
54
  `message` is the leading content — a string (rendered at the banner type scale) or
55
55
  any node. `children` sit between the message and the actions, for a chip, a link,
@@ -150,17 +150,17 @@ result through `dismissed` (below).
150
150
 
151
151
  ## Controlled vs uncontrolled
152
152
 
153
- Dismissal follows Anta's shared **state contract**. Leave it *uncontrolled* (seed
154
- with `defaultDismissed`) and the banner owns its visibility — the ✕ self-dismisses.
155
- Pass `dismissed` + `onDismiss` to *control* it: the banner follows `dismissed` only,
156
- and clicking the ✕ *requests* a dismissal you apply to accept or ignore to reject.
157
- The wrapper takes booleans, the element takes a `state` string enum (closed =
158
- dismissed), and the wrapper maps between them:
153
+ Dismissal follows Anta's shared **state contract**. For uncontrolled use, pass
154
+ `defaultDismissed`; clicking ✕ then dismisses the banner. For controlled use,
155
+ pass `dismissed` and `onDismiss`. The banner follows `dismissed` and reports a
156
+ dismissal request when ✕ is clicked. Update `dismissed` to accept the request,
157
+ or leave it unchanged to reject it. The wrapper uses booleans, while the element
158
+ uses a `state` string (`closed` means dismissed):
159
159
 
160
160
  | | `<Banner>` (JSX) | `<a-banner>` (element) |
161
161
  |---|---|---|
162
- | **Uncontrolled** (element owns it) | `defaultDismissed` | `default-state="open" \| "closed"` |
163
- | **Controlled** (you own it) | `dismissed` + `onDismiss` | `state="open" \| "closed"` + `statechange` |
162
+ | **Uncontrolled** | `defaultDismissed` | `default-state="open" \| "closed"` |
163
+ | **Controlled** | `dismissed` + `onDismiss` | `state="open" \| "closed"` + `statechange` |
164
164
  | **Change signal** | `onDismiss()`, fired on a dismiss request | `statechange`, a cancelable `CustomEvent<{ next, prev }>` of `'open'` / `'closed'` |
165
165
 
166
166
  Controlling it is how you persist a dismissal (write it to storage) or re-show the
@@ -195,7 +195,7 @@ through `dismissed` instead.
195
195
  | `children?` | ReactNode | — | Free content placed BETWEEN the message and the actions. |
196
196
  | `closable?` | boolean | true | Whether the trailing ✕ dismiss button is present. `false` removes it — drive
197
197
  dismissal yourself (a controlled `dismissed`, or your own control) instead.
198
- It doesn't make the banner un-dismissible, it just drops the built-in ✕. |
198
+ It removes the built-in ✕ without making the banner un-dismissible. |
199
199
  | `defaultDismissed?` | boolean | — | Initial dismissed state for the uncontrolled case (read once on mount). |
200
200
  | `dismissed?` | boolean | — | Controlled dismissed state. When provided, the consumer owns visibility: the
201
201
  banner follows this prop only, and clicking ✕ *requests* dismissal (reject by
@@ -205,7 +205,7 @@ through `dismissed` instead.
205
205
  | `message?` | ReactNode | — | Leading message — a string (rendered at the banner type scale) or any node.
206
206
  Centered in the bar, followed by `children` and then `actions`. |
207
207
  | `onDismiss?` | () => void | — | Fired when the user dismisses the banner (clicks ✕). Uncontrolled, the banner
208
- hides itself and this just notifies. Controlled, it's how you accept the
208
+ hides itself and this notifies. Controlled, use it to accept the
209
209
  request — set `dismissed` to `true` (or ignore to reject); pair it with
210
210
  `dismissed`, or the banner can't be closed. |
211
211
  | `role?` | string | 'status' | ARIA role for the strip host. `'status'` (a polite live region, so the notice
@@ -216,10 +216,10 @@ through `dismissed` instead.
216
216
  by default. Pass a `number` (px) or a CSS length string for a custom radius. |
217
217
  | `tone?` | 'neutral' \| 'brand' \| 'info' \| 'success' \| 'warning' \| 'critical' \| (string & {}) | 'neutral' | Semantic tone, or any literal CSS color (`'#ff1493'`, `'rebeccapurple'`) for
218
218
  a one-off custom tone. Named tones re-point the surface, text, and border
219
- colour (used if you opt into a border); a custom color keeps its hue while
219
+ color (used if you opt into a border); a custom color keeps its hue while
220
220
  lightness/chroma are pinned. `'neutral'` (the default) is the same as omitting it. |
221
221
 
222
- Use this when you are not using the React or Preact wrapper and a native HTML control does not fit: construct the equivalent Anta web component from the elements below.
222
+ Use the web component directly when you are not using React or Preact and a native control does not fit.
223
223
 
224
224
  Slots hold the message, actions, and close control. A close button dispatches
225
225
  `dismissrequest` through `data-custom-event`.
@@ -236,7 +236,7 @@ Slots hold the message, actions, and close control. A close button dispatches
236
236
  ```
237
237
 
238
238
  Reach for the props first: **`tone`** sets the color (any CSS color for a custom
239
- tone — it derives the surface, text, and border colour in oklch), **`round`** the
239
+ tone — it derives the surface, text, and border color in oklch), **`round`** the
240
240
  corners. The one knob worth keeping is **`--banner-tone-source`** — the color a
241
241
  custom `tone` derives from, so set it to drive the palette from your own variable.
242
242
  Everything else is plain CSS on the host: `min-height` for a taller bar, a
@@ -247,9 +247,9 @@ Everything else is plain CSS on the host: `min-height` for a taller bar, a
247
247
  ```
248
248
 
249
249
  **Add a border.** The banner is borderless by default, but its border style and
250
- colour are preset at `0` width (the `Progress` reset), so you opt in by setting only
250
+ color are preset at `0` width (the `Progress` reset), so you opt in by setting only
251
251
  the **width** — `border-bottom-width` for a rule under the strip, `border-width` for
252
- a full outline. The colour is already tone-aware (`--banner-border`), so a toned
252
+ a full outline. The color is already tone-aware (`--banner-border`), so a toned
253
253
  banner's border matches its tone with no extra work.
254
254
 
255
255
  ```tsx
@@ -471,7 +471,7 @@ without taking ownership of `onClick`.
471
471
 
472
472
  ### Props
473
473
 
474
- Use this when you are not using the React or Preact wrapper and a native HTML control does not fit: construct the equivalent Anta web component from the elements below.
474
+ Use the web component directly when you are not using React or Preact and a native control does not fit.
475
475
 
476
476
  Set `role="button"` and `tabindex="0"` when authoring `<a-button>` directly.
477
477
 
@@ -506,7 +506,7 @@ wrapper sets them for you). A native `<button>` also carries its own default
506
506
  <button data-anta tone="critical" priority="tertiary">Delete</button>
507
507
  ```
508
508
 
509
- Reach for the props first: **`tone`** sets the colour (any CSS colour for a custom
509
+ Reach for the props first: **`tone`** sets the color (any CSS color for a custom
510
510
  tone — it derives the whole tone × priority × state curve in oklch), **`priority`**
511
511
  the emphasis, **`size`** the dimensions. The focus ring is the global
512
512
  [`--focus-ring`](../colors.md#focus-ring).
@@ -520,7 +520,7 @@ CSS (an un-layered rule beats `@layer anta` without `!important`). Set
520
520
  `background-color` / `color` **per state**, plus full type control (size,
521
521
  line-height, letter-spacing, `font-feature-settings`), padding, radius, even a
522
522
  frosted `backdrop-filter` — no need to touch a single token. **`light-dark()`** works
523
- too (Anta sets `color-scheme` from its theme toggle), so colours adapt to dark mode
523
+ too (Anta sets `color-scheme` from its theme toggle), so colors adapt to dark mode
524
524
  with no `.dark` selector. The classes below are just for the demos:
525
525
 
526
526
  ```css
@@ -537,14 +537,14 @@ a-button.checkout {
537
537
  }
538
538
  a-button.checkout:hover { background: linear-gradient(140deg, light-dark(#3a3a42, #fff), light-dark(#161618, #cacace)); }
539
539
  a-button.checkout:active { background: linear-gradient(140deg, light-dark(#000, #ececf0), light-dark(#1a1a1c, #fff)); }
540
- a-button.checkout a-button-label { /* customised label */
540
+ a-button.checkout a-button-label { /* customized label */
541
541
  text-transform: uppercase;
542
542
  letter-spacing: 0.14em;
543
543
  font-weight: 600;
544
544
  }
545
545
 
546
546
  /* Second — liquid glass: frost + translucent tint + a diagonal specular sheen,
547
- a top/bottom bevel, and a soft lift. Sits on a colourful backdrop so it reads. */
547
+ a top/bottom bevel, and a soft lift. Sits on a colorful backdrop so it reads. */
548
548
  a-button.glass {
549
549
  color: #fff;
550
550
  background-color: rgba(255, 255, 255, 0.12);
@@ -600,4 +600,4 @@ beyond the button so it can rotate behind the label without exposing an edge.
600
600
 
601
601
  Don't reach for the resolved `--button-fg` / `--button-bg`: they're recomputed per
602
602
  state, so setting one only catches a single state — restyle per state as above, or
603
- use `tone` for a full custom-colour curve.
603
+ use `tone` for a full custom-color curve.
@@ -116,10 +116,9 @@ round (`999px`, clamped to the box). Omit it for the default (`--card-radius`, 8
116
116
 
117
117
  ## Header controls
118
118
 
119
- There's no dedicated actions slot. For a control at the top-right of the header — a
120
- "more" button, a tag — pass a laid-out node as the `header` and put the title and
121
- the control in it yourself (a flex row). You own the layout, so the title and
122
- control sit exactly where you place them.
119
+ There is no dedicated actions slot. To place a control in the top-right of the
120
+ header, pass a layout node as `header`. For example, use a flex row containing
121
+ the title and a "more" button. That layout determines where both items appear.
123
122
 
124
123
  ```tsx
125
124
  <Card
@@ -179,7 +178,7 @@ out of it — its text is non-selectable and the whole surface navigates.
179
178
  href="/docs/ci"
180
179
  header={<><Icon shape="book-open" /> CI integration guide</>}
181
180
  >
182
- Wire Antithesis into your pipeline in a few minutes.
181
+ Connect your CI pipeline in a few minutes.
183
182
  </Card>
184
183
  ```
185
184
 
@@ -254,7 +253,7 @@ it also blocks navigation until the load resolves.
254
253
  color keeps its hue while lightness/chroma are pinned. `'neutral'` (the
255
254
  default) is the same as omitting it. |
256
255
 
257
- Use this when you are not using the React or Preact wrapper and a native HTML control does not fit: construct the equivalent Anta web component from the elements below.
256
+ Use the web component directly when you are not using React or Preact and a native control does not fit.
258
257
 
259
258
  Slots hold media, header, and footer content. Unslotted content is the card body.
260
259
 
@@ -6,7 +6,7 @@ The `Checkbox` wrapper renders an `<a-checkbox>` element that manages its own st
6
6
 
7
7
  ## Tone
8
8
 
9
- `tone` colours the **mark** — the checked-box fill and, for a tinted tone, the
9
+ `tone` colors the **mark** — the checked-box fill and, for a tinted tone, the
10
10
  unselected box border (a light shade of the fill that darkens on hover and active,
11
11
  like the neutral border; `neutral` keeps a grey border). The label and hint stay
12
12
  neutral. Six named tones (`neutral` default), or pass any CSS color for a custom tone.
@@ -29,7 +29,7 @@ read as a validation error. Same value set as `tone`.
29
29
  <Checkbox defaultChecked toneSelected="critical">Checked mark tinted</Checkbox>
30
30
  ```
31
31
 
32
- ## Colouring the text
32
+ ## Coloring the text
33
33
 
34
34
  There's no text-tone prop. To tint the **label**, set `color` on the checkbox with a
35
35
  theme-aware `--text-N-{tone}` token (the label inherits it); for the **hint**, add a
@@ -38,7 +38,7 @@ to tint the whole control.
38
38
 
39
39
  ```css
40
40
  /* Mark via the prop, text via a plain color rule — the label inherits the host
41
- colour, the hint is targeted directly. The class is just for the demo — swap
41
+ color, the hint is targeted directly. The class is just for the demo — swap
42
42
  your own selector. */
43
43
  a-checkbox.toned-text { color: var(--text-1-critical); }
44
44
  a-checkbox.toned-text a-checkbox-hint { color: var(--text-3-critical); }
@@ -56,7 +56,7 @@ Three sizes scale the box **and** the label + hint type together: `small`
56
56
  <Checkbox defaultChecked size="large">Large</Checkbox>
57
57
  ```
58
58
 
59
- ## Label & hint
59
+ ## Label and hint
60
60
 
61
61
  Pass the label as `children` or the `label` prop. Add a `hint` for a secondary line beneath. For a label-less checkbox (e.g. a table "select all"), pass `aria-label`.
62
62
 
@@ -177,7 +177,7 @@ Space toggles the checkbox. Follows the [WAI-ARIA checkbox pattern](https://www.
177
177
  uncontrolled checkbox. `'indeterminate'` shows the minus glyph and takes
178
178
  visual precedence; clicking it requests `true`. |
179
179
  | `defaultChecked?` | CheckboxValue | false | Initial checked state for an uncontrolled checkbox. Read once; later
180
- changes ignored (the element then owns the state). |
180
+ changes are ignored and the element updates its state after interaction. |
181
181
  | `disabled?` | boolean | — | Disable the checkbox (no interaction, dropped from the tab order). |
182
182
  | `hint?` | ReactNode | — | Secondary text rendered under the label — explanatory copy, like
183
183
  Input's hint. Not part of the accessible name. |
@@ -196,25 +196,24 @@ Space toggles the checkbox. Follows the [WAI-ARIA checkbox pattern](https://www.
196
196
  `detail` carries `{ next, prev }`. In controlled mode the element never
197
197
  self-applies — answer by updating `checked`, reject by doing nothing. |
198
198
  | `onValueChange?` | (event, attrs) => void | — | Like `onChange`, but with a `{ checked, indeterminate, name, value }` snapshot
199
- as the 2nd argument — the ergonomic "just give me the new value" callback
200
- (mirrors `Input`'s `onValueChange`). |
199
+ as the second argument, matching `Input`'s `onValueChange`. |
201
200
  | `round?` | boolean \| number \| string | — | Round the checkbox mark to a circle (`border-radius: 999px` on the box). Pass
202
201
  a `number` (px) or a CSS length string for a rounded-square mark instead. |
203
202
  | `size?` | 'small' \| 'medium' \| 'large' | 'medium' | Size variant. small=14px, medium=16px, large=18px box. |
204
- | `tone?` | 'brand' \| 'neutral' \| 'info' \| 'success' \| 'warning' \| 'critical' \| (string & {}) | 'neutral' | Colour of the **mark** in every state — the checked-box fill *and* the
203
+ | `tone?` | 'brand' \| 'neutral' \| 'info' \| 'success' \| 'warning' \| 'critical' \| (string & {}) | 'neutral' | Color of the **mark** in every state — the checked-box fill *and* the
205
204
  unselected box border. A named tone or any literal CSS color (`'#ff1493'`,
206
205
  `'rebeccapurple'`) for a one-off custom tone. Named tones track light/dark mode
207
- automatically; a custom colour keeps its hue + chroma and pins lightness to the
206
+ automatically; a custom color keeps its hue + chroma and pins lightness to the
208
207
  fill curve. Use `toneSelected` instead to tone only the checked mark and leave
209
- the empty box neutral. The label + hint stay neutral — recolour them in plain
208
+ the empty box neutral. The label + hint stay neutral — recolor them in plain
210
209
  CSS via the theme-aware `--text-N-{tone}` tokens. |
211
- | `toneSelected?` | 'brand' \| 'neutral' \| 'info' \| 'success' \| 'warning' \| 'critical' \| (string & {}) | 'neutral' | Like `tone`, but coloured onto the **checked mark only** — the empty box stays
210
+ | `toneSelected?` | 'brand' \| 'neutral' \| 'info' \| 'success' \| 'warning' \| 'critical' \| (string & {}) | 'neutral' | Like `tone`, but colored onto the **checked mark only** — the empty box stays
212
211
  neutral grey until it's checked. Prefer this over `tone` when a resting tinted
213
212
  border would read as a validation state. Same value set as `tone`; if both are
214
213
  set, `tone` governs the off-state border and `toneSelected` the checked fill. |
215
214
  | `value?` | string | "on" | Value submitted with the form when checked — like a native checkbox. |
216
215
 
217
- Use this when you are not using the React or Preact wrapper and a native HTML control does not fit: construct the equivalent Anta web component from the elements below.
216
+ Use the web component directly when you are not using React or Preact and a native control does not fit.
218
217
 
219
218
  The focusable host carries the state. Label and hint are light-DOM children.
220
219
 
@@ -242,8 +241,8 @@ treatments.
242
241
  </div>
243
242
  ```
244
243
 
245
- Reach for the props first: **`tone`** colours the mark in every state,
246
- **`toneSelected`** only the checked mark (any CSS colour for a custom tone — it
244
+ Reach for the props first: **`tone`** colors the mark in every state,
245
+ **`toneSelected`** only the checked mark (any CSS color for a custom tone — it
247
246
  derives the full rest/hover/active curve in oklch), **`size`** the dimensions + type.
248
247
  To tint the label + hint, add a `color` rule (on the host for the label, on
249
248
  `a-checkbox-hint` for the hint) with the `--text-N-{tone}` tokens — there's no
@@ -251,7 +250,7 @@ text-tone prop. The focus ring is the global
251
250
  [`--focus-ring`](../colors.md#focus-ring).
252
251
 
253
252
  ```tsx
254
- <Checkbox tone="#e0457b" defaultChecked>Custom colour</Checkbox>
253
+ <Checkbox tone="#e0457b" defaultChecked>Custom color</Checkbox>
255
254
  ```
256
255
 
257
256
  For anything else, `<a-checkbox>` is light-DOM — the **box is `::before`**, the
@@ -262,7 +261,7 @@ without `!important`). The classes below are just for the demos:
262
261
 
263
262
  ```css
264
263
  /* Outlined — an unfilled box: the checked box keeps its background and paints the
265
- border + checkmark in the tone colour (light-dark() tunes both themes at once). */
264
+ border + checkmark in the tone color (light-dark() tunes both themes at once). */
266
265
  a-checkbox.outlined:state(checked)::before {
267
266
  background: var(--checkbox-bg);
268
267
  border-color: light-dark(#5f4bc3, #7460d7);
@@ -272,7 +271,7 @@ a-checkbox.outlined:state(checked)::after {
272
271
  }
273
272
 
274
273
  /* Customized — bold label, bigger circular box, bigger checkmark.
275
- Colours use light-dark() so they're tuned for both themes at once. */
274
+ Colors use light-dark() so they're tuned for both themes at once. */
276
275
  a-checkbox.customized { font-weight: 700; }
277
276
  a-checkbox.customized::before,
278
277
  a-checkbox.customized::after { inline-size: 24px; block-size: 24px; margin-block-start: -2px; }
@@ -284,7 +283,7 @@ a-checkbox.customized:state(checked)::before {
284
283
  }
285
284
 
286
285
  /* Beautified — a full white heart mark swapped in via --checkbox-mask-check
287
- (centred by the default mask-position), sized down a touch, on a pink fill */
286
+ (centered by the default mask-position), sized down a touch, on a pink fill */
288
287
  a-checkbox.beautified {
289
288
  --checkbox-mask-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54z'/%3E%3C/svg%3E");
290
289
  }