actual-css 0.12.0 → 0.13.0

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 (78) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +7 -8
  3. package/components.json +8 -2
  4. package/dist/actual.full.css +505 -233
  5. package/dist/actual.full.js +1 -1
  6. package/dist/actual.full.min.css +1 -1
  7. package/docs/design-notes/architecture.md +67 -0
  8. package/docs/design-notes/steps.md +45 -28
  9. package/docs/pages/components/avatar.md +17 -11
  10. package/docs/pages/components/breadcrumb.md +16 -2
  11. package/docs/pages/components/list.md +9 -13
  12. package/docs/pages/components/navbar.md +42 -22
  13. package/docs/pages/components/pagination.md +19 -0
  14. package/docs/pages/components/steps.md +24 -20
  15. package/docs/pages/enhancements/scrollspy.md +6 -6
  16. package/docs/pages/enhancements/tabs.md +74 -3
  17. package/docs/pages/forms/floating-field.md +21 -7
  18. package/docs/pages/forms/form-actions.md +3 -6
  19. package/docs/pages/forms/states-and-sizes.md +15 -15
  20. package/docs/pages/foundations/philosophy.md +97 -1
  21. package/docs/pages/foundations/tokens.md +40 -4
  22. package/docs/pages/guides/design-tools.md +1 -1
  23. package/docs/pages/guides/integrating-actual-css.md +74 -8
  24. package/docs/pages/guides/introduction.md +3 -2
  25. package/docs/pages/guides/modular-import.md +1 -1
  26. package/docs/pages/guides/progressive-enhancement.md +25 -7
  27. package/docs/pages/guides/upgrading.md +86 -9
  28. package/docs/pages/layout/center.md +2 -1
  29. package/docs/pages/layout/cluster.md +11 -4
  30. package/docs/pages/layout/grid.md +2 -0
  31. package/docs/pages/layout/sidebar-layout.md +3 -0
  32. package/docs/pages/layout/switcher.md +2 -0
  33. package/docs/pages/layout/topbar.md +6 -4
  34. package/docs/pages/patterns/icon-slot.md +17 -1
  35. package/docs/pages/utilities/flex.md +1 -1
  36. package/docs/pages/utilities/sizing-wrapping.md +51 -6
  37. package/package.json +5 -5
  38. package/src/cli/actual-css.js +1 -1
  39. package/src/css/components/alert.css +34 -34
  40. package/src/css/components/avatar.css +2 -18
  41. package/src/css/components/badge.css +0 -1
  42. package/src/css/components/breadcrumb.css +74 -8
  43. package/src/css/components/drawer.css +23 -42
  44. package/src/css/components/flyout.css +0 -1
  45. package/src/css/components/join.css +2 -2
  46. package/src/css/components/list.css +10 -10
  47. package/src/css/components/modal.css +17 -10
  48. package/src/css/components/navbar.css +10 -8
  49. package/src/css/components/pagination.css +5 -0
  50. package/src/css/components/scrollspy.css +1 -1
  51. package/src/css/components/steps.css +66 -12
  52. package/src/css/components/tab.css +134 -4
  53. package/src/css/core/focus.css +8 -6
  54. package/src/css/core/theme.css +6 -1
  55. package/src/css/core/tokens.css +4 -2
  56. package/src/css/forms/choice-card.css +1 -1
  57. package/src/css/forms/choice.css +1 -1
  58. package/src/css/forms/control.css +1 -1
  59. package/src/css/forms/floating-field.css +20 -18
  60. package/src/css/forms/form-actions.css +5 -8
  61. package/src/css/forms/native.css +2 -2
  62. package/src/css/forms/otp.css +4 -5
  63. package/src/css/forms/switch.css +1 -1
  64. package/src/css/forms/validation.css +23 -30
  65. package/src/css/layout/center.css +2 -0
  66. package/src/css/layout/cluster.css +14 -0
  67. package/src/css/layout/grid.css +7 -0
  68. package/src/css/layout/scroller.css +19 -3
  69. package/src/css/layout/sidebar-layout.css +3 -0
  70. package/src/css/layout/switcher.css +3 -0
  71. package/src/css/utilities/extra.css +3 -3
  72. package/src/js/full.js +4 -0
  73. package/src/js/inline-visible.js +54 -0
  74. package/src/js/parsed.js +21 -0
  75. package/src/js/tab.js +33 -7
  76. package/src/tooling/design-export.js +1 -1
  77. package/src/tooling/design-tokens.js +44 -33
  78. package/src/tooling/theme-contrast.js +32 -24
package/CHANGELOG.md CHANGED
@@ -2,6 +2,55 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.13.0] - 2026-10-06
6
+ ### Breaking changes
7
+
8
+ - `--cluster-justify`, `--cluster-align` and `--cluster-wrap` no longer inherit into nested `.cluster` rows; set them on the row itself or select nested rows.
9
+ - `--grid-columns` and `--grid-min` no longer inherit into a nested `.grid`.
10
+ - `.avatar-stack` no longer infers its size from child `.avatar.sm`/`.lg`; set `.sm`/`.lg` on the stack and omit size classes on its avatars.
11
+ - `--focus-outline` has no default value: it is a fallback-only hook that replaces the generic focus line; read `var(--focus-ring-width) solid var(--focus-outline-color)` instead.
12
+ - `data-enhance="tabs"` needs `role="tablist"` on the same element; without it the runtime warns and wires nothing.
13
+ - `.nav-link` shows its current state only for `aria-current="page"` or `"location"`, and `a.list-item` only for `"page"` or `"true"`; any other value, `"false"` included, is inert.
14
+
15
+ ### Added
16
+
17
+ - `actual-css/js/full` now exposes `enhance`, `applyEnhancement`, and `registerEnhancement` from the same runtime that registers the built-ins.
18
+ - `--tab-flex` on `.tabs` sets each tab's flex; `1 1 0` gives equal-width tabs.
19
+ - In supporting browsers, an overflowing link `.tabs` strip or `.steps-horizontal` row starts scrolled to its `aria-current` item, with no runtime (`scroll-initial-target`).
20
+ - `--border-control` sets the resting edge of fields, choices, switches, OTP cells, choice cards, `.join-addon` and the color and file inputs; it defaults to `--border`, which keeps separating surfaces.
21
+
22
+ ### Changed
23
+
24
+ - `.steps-horizontal` fits short labels on a phone, wraps (and hyphenates) long names, and aligns its outer stacked steps with the row's edges at every width.
25
+ - `.steps-horizontal` `--step-min` defaults to the marker width and only sets a wider budget; `--step-gap` also separates adjacent steps.
26
+ - `forms/form-actions` no longer has to load after `layout/cluster`: `.form-actions` relays its hooks into the row's `--cluster-*`.
27
+ - An overflowing horizontal `.tabs` strip shows its selected tab in full, at connect and whenever selection changes, scrolling the strip only.
28
+ - `.floating-field` accepts its `.field-label` before or after the control; state is read through `:has()` on the cell.
29
+ - `.list-item` regions center on the row by default; add `.items-start` to the row or the `.list` for rows with long supporting text.
30
+ - A horizontal `.tabs` strip never wraps, nor do its labels: a strip that does not fit scrolls horizontally.
31
+ - `.breadcrumb` never wraps: a trail that does not fit truncates its labels with an ellipsis, ancestors before the current page.
32
+ - A navigation flyout `.tab` shows the current state with `aria-current="true"` while its panel holds the current page.
33
+ - `.breadcrumb` ancestor labels truncate on their `<a>` or `<span>`; the current page also truncates as bare text in an `<li aria-current="page">`.
34
+ - The current `.nav-list` link trait sits inside the row's inline padding with rounded ends, instead of flush on its rounded edge.
35
+ - A horizontal `.tabs` strip hides its scrollbar; selecting or focusing the clipped tab scrolls it into view.
36
+ - An overflowing horizontal `.tabs` strip fades the edges it can still scroll toward, where scroll-driven animations are supported.
37
+ - `.scroller` no longer styles the scrollbar on touch screens, where the native overlay scrollbar, hidden at rest, stays.
38
+
39
+ ### Fixed
40
+
41
+ - `actual-css contrast --theme FILE` and `actual-css design --theme FILE` accept a theme written on `:root` and measure its own values, not the default palette.
42
+ - A default `.btn.outline` in a field `.join` takes `--border-control` like the field, not `--border`.
43
+ - The scrolling body of a `dialog.modal.scrollable` and a `dialog.drawer` keeps the focus line of its first and last controls inside its clip.
44
+ - `actual-css contrast` and `actual-css design` detect a theme written `[data-theme = "brand"]` or `[data-theme=brand]`, and ignore selectors quoted in comments.
45
+ - `actual-css contrast` measures a theme whose name contains `&` or `<` under its own name, instead of an island the name had broken.
46
+ - `actual-css contrast` and `actual-css design` reject a `--name` the theme file does not declare as `[data-theme]`, instead of measuring the framework defaults.
47
+ - A bare heading in a `dialog.modal > header` drops its block margins, so the band no longer grows and the title centers on the close.
48
+ - A `<nav>` around `.breadcrumb` or `.tabs` shrinks inside a flex or grid row, so the trail truncates or the strip scrolls instead of the page.
49
+ - An enhanced tablist no longer operates the tabs of a nested `role="tablist"` that has no `data-enhance="tabs"`.
50
+ - A tablist with `data-enhance="tabs"` sets its roving tabindex when a classic script in `<head>` connects it before its tabs are parsed.
51
+ - The generic focus line of links, `summary` and nav items follows a `--focus-ring-width` set on a `[data-theme]` island or any region, like the `.btn` ring beside it.
52
+ - The focus reserve of a scrolling dialog or drawer body is `--focus-outline-offset` + `--focus-ring-width`, no longer widened by `2 × --border-width`.
53
+
5
54
  ## [0.12.0] - 2026-10-02
6
55
  ### Breaking changes
7
56
 
package/README.md CHANGED
@@ -64,7 +64,7 @@ size is not worth optimizing:
64
64
  ```
65
65
 
66
66
  ```html
67
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/actual-css@0.12/dist/actual.full.min.css">
67
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/actual-css@0.13/dist/actual.full.min.css">
68
68
  ```
69
69
 
70
70
  ## Usage
@@ -137,7 +137,7 @@ registries:
137
137
  * **Full runtime, zero-config** — every built-in enhancer, compiled:
138
138
 
139
139
  ```html
140
- <script src="https://cdn.jsdelivr.net/npm/actual-css@0.12/dist/actual.full.js" type="module"></script>
140
+ <script src="https://cdn.jsdelivr.net/npm/actual-css@0.13/dist/actual.full.js" type="module"></script>
141
141
  ```
142
142
 
143
143
  * **Your own build** — copy the package's `src/js/full.js` as your entry,
@@ -174,14 +174,13 @@ For more conservative fallbacks, import and compose the source entrypoints direc
174
174
 
175
175
  Actual CSS is before 1.0:
176
176
 
177
- * A minor release (`0.11` → `0.12`) may remove or rename classes and hooks. Each
178
- one ships an upgrade guide; the current one is
179
- [Upgrading to 0.12](docs/pages/guides/upgrading.md).
180
- * A patch release (`0.11.0` → `0.11.1`) keeps every class and hook. It fixes
177
+ * A minor release (`0.12` → `0.13`) may remove or rename classes and hooks. Each
178
+ one adds a section to [Upgrading](docs/pages/guides/upgrading.md).
179
+ * A patch release (`0.12.0` → `0.12.1`) keeps every class and hook. It fixes
181
180
  bugs and may add hooks, so a fix can still move a rendering by a few pixels.
182
181
 
183
- The floating `@0.11` CDN path takes patches automatically. Pin the exact
184
- version (`actual-css@0.12.1`) when the rendering must not change without a
182
+ The floating `actual-css@0.13` CDN path takes patches automatically. Pin the exact
183
+ version (`actual-css@0.13.0`) when the rendering must not change without a
185
184
  review.
186
185
 
187
186
  ## Browser support
package/components.json CHANGED
@@ -74,13 +74,13 @@
74
74
  "--avatar-size",
75
75
  "--avatar-radius",
76
76
  "--avatar-font-size",
77
+ "--avatar-bg",
77
78
  "--avatar-stack-size",
78
79
  "--avatar-stack-font-size",
79
80
  "--avatar-stack-overlap",
80
81
  "--avatar-stack-ring"
81
82
  ],
82
83
  "internalHooks": [
83
- "--avatar-bg",
84
84
  "--avatar-fg",
85
85
  "--avatar-status-translate-x"
86
86
  ],
@@ -284,7 +284,8 @@
284
284
  "--drawer-closed-translate",
285
285
  "--drawer-focus-bleed",
286
286
  "--drawer-close-reserve",
287
- "--drawer-motion-duration"
287
+ "--drawer-motion-duration",
288
+ "--drawer-motion-ease"
288
289
  ],
289
290
  "states": [
290
291
  "open"
@@ -637,8 +638,13 @@
637
638
  "tabs"
638
639
  ],
639
640
  "publicHooks": [
641
+ "--tab-flex",
640
642
  "--tab-gap"
641
643
  ],
644
+ "internalHooks": [
645
+ "--tab-edge",
646
+ "--tab-fade-dir"
647
+ ],
642
648
  "states": [
643
649
  "aria-current",
644
650
  "aria-disabled",