actual-css 0.9.2 → 0.11.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 (136) hide show
  1. package/CHANGELOG.md +169 -1
  2. package/README.md +65 -44
  3. package/components.json +35 -14
  4. package/dist/actual.full.css +877 -583
  5. package/dist/actual.full.js +1 -1
  6. package/dist/actual.full.min.css +1 -1
  7. package/docs/design-notes/app-ui.md +1 -1
  8. package/docs/design-notes/column-layout.md +103 -520
  9. package/docs/design-notes/enhancement-contract.md +16 -7
  10. package/docs/design-notes/forced-colors.md +12 -1
  11. package/docs/design-notes/naming.md +1 -1
  12. package/docs/design-notes/platform-alignment.md +8 -4
  13. package/docs/design-notes/rich-text.md +61 -0
  14. package/docs/design-notes/steps.md +2 -2
  15. package/docs/design-notes/surface-reparenting.md +8 -9
  16. package/docs/navigation.json +4 -0
  17. package/docs/pages/components/accordion.md +55 -1
  18. package/docs/pages/components/alert.md +9 -15
  19. package/docs/pages/components/aura.md +12 -13
  20. package/docs/pages/components/badge.md +16 -7
  21. package/docs/pages/components/bleed.md +42 -0
  22. package/docs/pages/components/button.md +30 -4
  23. package/docs/pages/components/card.md +21 -86
  24. package/docs/pages/components/chat.md +5 -0
  25. package/docs/pages/components/close.md +48 -0
  26. package/docs/pages/components/data-list.md +26 -1
  27. package/docs/pages/components/dialog.md +21 -18
  28. package/docs/pages/components/drawer.md +9 -9
  29. package/docs/pages/components/navbar.md +5 -5
  30. package/docs/pages/components/pagination.md +15 -15
  31. package/docs/pages/components/shimmer.md +57 -0
  32. package/docs/pages/components/skeleton.md +2 -1
  33. package/docs/pages/components/spinner.md +14 -9
  34. package/docs/pages/components/table.md +13 -0
  35. package/docs/pages/enhancements/flyout.md +2 -0
  36. package/docs/pages/enhancements/overview.md +5 -0
  37. package/docs/pages/enhancements/tabs.md +4 -0
  38. package/docs/pages/enhancements/tooltip.md +3 -1
  39. package/docs/pages/examples/overview.md +2 -1
  40. package/docs/pages/forms/choice-cards.md +116 -4
  41. package/docs/pages/forms/combobox.md +39 -12
  42. package/docs/pages/forms/joined-controls.md +2 -5
  43. package/docs/pages/forms/overview.md +10 -1
  44. package/docs/pages/forms/range.md +110 -5
  45. package/docs/pages/forms/rich-text.md +110 -0
  46. package/docs/pages/forms/validation.md +5 -1
  47. package/docs/pages/foundations/theming.md +110 -18
  48. package/docs/pages/foundations/tokens.md +41 -13
  49. package/docs/pages/guides/bootstrap.md +2 -1
  50. package/docs/pages/guides/introduction.md +15 -23
  51. package/docs/pages/guides/modular-import.md +54 -7
  52. package/docs/pages/guides/progressive-enhancement.md +19 -17
  53. package/docs/pages/guides/tailwind.md +21 -7
  54. package/docs/pages/layout/column-layout.md +92 -54
  55. package/docs/pages/layout/media.md +1 -1
  56. package/docs/pages/layout/overview.md +1 -1
  57. package/docs/pages/utilities/overview.md +1 -1
  58. package/docs/pages/utilities/sizing-wrapping.md +5 -3
  59. package/llms.txt +25 -4
  60. package/package.json +10 -6
  61. package/reserved-classes.json +6 -30
  62. package/skills/actual-css/PROJECT.md.example +65 -0
  63. package/skills/actual-css/README.md +64 -0
  64. package/skills/actual-css/SKILL.md +234 -0
  65. package/skills/actual-css/references/accessibility.md +44 -0
  66. package/skills/actual-css/references/api-and-vocabulary.md +94 -0
  67. package/skills/actual-css/references/enhancements.md +59 -0
  68. package/skills/actual-css/references/forms.md +49 -0
  69. package/skills/actual-css/references/layout-and-theming.md +82 -0
  70. package/skills/actual-css/references/review-checklist.md +51 -0
  71. package/skills/actual-css/scripts/inspect-actual-css.mjs +171 -0
  72. package/src/css/components/accordion.css +44 -7
  73. package/src/css/components/alert.css +23 -43
  74. package/src/css/components/app-nav.css +9 -0
  75. package/src/css/components/avatar.css +1 -1
  76. package/src/css/components/badge.css +11 -39
  77. package/src/css/components/bleed.css +79 -0
  78. package/src/css/components/button.css +6 -17
  79. package/src/css/components/card.css +7 -40
  80. package/src/css/components/close.css +91 -0
  81. package/src/css/components/data-list.css +18 -0
  82. package/src/css/components/drawer.css +15 -56
  83. package/src/css/components/fab.css +10 -0
  84. package/src/css/components/flyout.css +5 -1
  85. package/src/css/components/index.css +2 -0
  86. package/src/css/components/join.css +36 -20
  87. package/src/css/components/menu.css +12 -0
  88. package/src/css/components/meter.css +1 -1
  89. package/src/css/components/modal.css +10 -57
  90. package/src/css/components/navbar.css +27 -0
  91. package/src/css/components/pagination.css +3 -2
  92. package/src/css/components/rating.css +1 -1
  93. package/src/css/components/status-bar.css +2 -2
  94. package/src/css/components/steps.css +3 -3
  95. package/src/css/components/tab.css +3 -3
  96. package/src/css/components/table.css +6 -0
  97. package/src/css/components/tooltip.css +1 -1
  98. package/src/css/core/focus.css +19 -3
  99. package/src/css/core/theme.css +33 -43
  100. package/src/css/core/tokens.css +9 -5
  101. package/src/css/core/variants.css +5 -34
  102. package/src/css/effects/aura.css +51 -33
  103. package/src/css/effects/index.css +1 -0
  104. package/src/css/effects/shimmer.css +57 -0
  105. package/src/css/forms/choice-card.css +142 -24
  106. package/src/css/forms/choice.css +2 -3
  107. package/src/css/forms/control.css +17 -10
  108. package/src/css/forms/custom-select.css +4 -4
  109. package/src/css/forms/native.css +4 -4
  110. package/src/css/forms/otp.css +9 -1
  111. package/src/css/forms/range.css +72 -14
  112. package/src/css/forms/switch.css +2 -3
  113. package/src/css/layout/app-layout.css +1 -1
  114. package/src/css/layout/column-layout.css +26 -111
  115. package/src/css/utilities/extra.css +7 -6
  116. package/src/js/command.js +61 -32
  117. package/src/js/dialog.js +103 -47
  118. package/src/js/dismiss.js +1 -2
  119. package/src/js/enhance.js +91 -126
  120. package/src/js/escape.js +1 -0
  121. package/src/js/flyout.js +10 -1
  122. package/src/js/focus-group.js +2 -1
  123. package/src/js/full.js +1 -0
  124. package/src/js/keys.js +14 -0
  125. package/src/js/menu.js +2 -1
  126. package/src/js/password.js +1 -8
  127. package/src/js/range.js +151 -0
  128. package/src/js/scrollspy.js +4 -5
  129. package/src/js/status.js +21 -10
  130. package/src/js/surface.js +12 -8
  131. package/src/js/tab.js +2 -1
  132. package/src/js/tooltip.js +29 -2
  133. package/src/js/validation.js +8 -15
  134. package/dist/actual.css +0 -876
  135. package/dist/actual.js +0 -1
  136. package/dist/actual.min.css +0 -1
@@ -1,22 +1,34 @@
1
1
  # Column Layout
2
2
 
3
- `.column-layout` is an explicit twelve-column composition canvas. Place regions
4
- with `.column-span-N` and `.column-start-N`.
3
+ `.column-layout` is an explicit twelve-column composition canvas. Each direct
4
+ child places itself with two numbers: `--column-span` (how many units) and
5
+ `--column-start` (which line it begins on).
5
6
 
6
7
  Reach for it when the placement of each region **is** the design. If the regions
7
8
  are a collection, a known density, peers that switch together, or a main region
8
9
  with an aside, one of the other primitives already says so — and says it with
9
10
  intrinsic responsive behavior this one does not have.
10
11
 
12
+ ```css
13
+ .article-main {
14
+ --column-span: 8;
15
+ }
16
+
17
+ .article-aside {
18
+ --column-span: 4;
19
+ }
20
+ ```
21
+
11
22
  ```html demo
12
23
  <div class="column-layout">
13
- <main class="column-span-8 card">Main — 8 columns</main>
14
- <aside class="column-span-4 card">Aside — 4 columns</aside>
24
+ <main class="card" style="--column-span: 8">Main — 8 columns</main>
25
+ <aside class="card" style="--column-span: 4">Aside — 4 columns</aside>
15
26
  </div>
16
27
  ```
17
28
 
18
- Neither child names a start line, so grid auto-placement flows the aside into
19
- columns 9 through 12.
29
+ The hooks are plain CSS: set them from an application class, or inline as a
30
+ shortcut for a composition that never changes. Neither child names a start
31
+ line, so grid auto-placement flows the aside into columns 9 through 12.
20
32
 
21
33
  ## Spans
22
34
 
@@ -24,26 +36,26 @@ A span declares how many of the twelve units a region occupies.
24
36
 
25
37
  ```html demo
26
38
  <div class="column-layout">
27
- <div class="column-span-3 card">3</div>
28
- <div class="column-span-6 card">6</div>
29
- <div class="column-span-3 card">3</div>
39
+ <div class="card" style="--column-span: 3">3</div>
40
+ <div class="card" style="--column-span: 6">6</div>
41
+ <div class="card" style="--column-span: 3">3</div>
30
42
  </div>
31
43
  ```
32
44
 
33
- A child with no placement class spans the whole canvas, so a heading can share
34
- the canvas with placed regions without carrying a class.
45
+ A child with no coordinates spans the whole canvas, so a heading can share the
46
+ canvas with placed regions without setting anything.
35
47
 
36
48
  ```html demo
37
49
  <div class="column-layout">
38
- <h3>Full canvas — no class needed</h3>
39
- <div class="column-span-4 card">4</div>
40
- <div class="column-span-4 card">4</div>
41
- <div class="column-span-4 card">4</div>
50
+ <h3>Full canvas — nothing set</h3>
51
+ <div class="card" style="--column-span: 4">4</div>
52
+ <div class="card" style="--column-span: 4">4</div>
53
+ <div class="card" style="--column-span: 4">4</div>
42
54
  </div>
43
55
  ```
44
56
 
45
- Regions that do not fit wrap to the next row, as any grid does. Two
46
- `.column-span-8` regions need sixteen units, so the second moves down.
57
+ Regions that do not fit wrap to the next row, as any grid does. Two eight-unit
58
+ regions need sixteen units, so the second moves down.
47
59
 
48
60
  ## Starts
49
61
 
@@ -53,7 +65,7 @@ placement flips with `dir="rtl"` on its own.
53
65
 
54
66
  ```html demo
55
67
  <div class="column-layout">
56
- <article class="column-span-10 column-start-2 card">
68
+ <article class="card" style="--column-start: 2; --column-span: 10">
57
69
  Columns 2 through 11
58
70
  </article>
59
71
  </div>
@@ -63,15 +75,14 @@ Used without a span, a start runs to the end of the canvas.
63
75
 
64
76
  ```html demo
65
77
  <div class="column-layout">
66
- <aside class="column-start-9 card">Columns 9 through 12</aside>
78
+ <aside class="card" style="--column-start: 9">Columns 9 through 12</aside>
67
79
  </div>
68
80
  ```
69
81
 
70
- Keep a combined placement inside the canvas: `S + N - 1 <= 12`. So
71
- `.column-start-9 .column-span-4` is valid and `.column-start-10 .column-span-4`
72
- is not. Exceeding the canvas adds a thirteenth, content-sized column, and every
73
- other region shrinks with it — the failure is canvas-wide, not local to the
74
- region you got wrong.
82
+ Keep a combined placement inside the canvas: `start + span - 1 <= 12`. Start 9
83
+ with span 4 is valid; start 10 with span 4 is not. Exceeding the canvas adds a
84
+ thirteenth, content-sized column, and every other region shrinks with it — the
85
+ failure is canvas-wide, not local to the region you got wrong.
75
86
 
76
87
  ## Cross-section alignment
77
88
 
@@ -82,22 +93,23 @@ guarantee. This is the case no other primitive can replace.
82
93
  ```html demo
83
94
  <div class="stack">
84
95
  <div class="column-layout">
85
- <h3 class="column-span-8 column-start-3">Feature title</h3>
86
- <p class="muted column-span-8 column-start-3">Kicker aligned to the same line.</p>
96
+ <h3 style="--column-start: 3; --column-span: 8">Feature title</h3>
97
+ <p class="muted" style="--column-start: 3; --column-span: 8">Kicker aligned to the same line.</p>
87
98
  </div>
88
99
 
89
100
  <div class="column-layout">
90
- <p class="column-span-8 column-start-3">
101
+ <p style="--column-start: 3; --column-span: 8">
91
102
  Body copy starts on the same column as the title above and spans the same
92
103
  eight columns.
93
104
  </p>
94
- <aside class="column-span-2 column-start-11 card">Inline note</aside>
105
+ <aside class="card" style="--column-start: 11; --column-span: 2">Inline note</aside>
95
106
  </div>
96
107
  </div>
97
108
  ```
98
109
 
99
- Both sections name the same `column-start-3` / `column-span-8`, so their content
100
- shares a left edge and an alignment gutter without a wrapping grid.
110
+ Both sections use start 3 and span 8, so their content shares a left edge and
111
+ an alignment gutter without a wrapping grid. In an application, give that pair
112
+ one class and reuse it.
101
113
 
102
114
  ## The responsive contract
103
115
 
@@ -110,12 +122,13 @@ three regions to become two before stacking. A single framework threshold would
110
122
  be wrong more often than right, and a hidden one would have to be undone rather
111
123
  than extended.
112
124
 
113
- The simplest recomposition stacks everything:
125
+ Recomposition sets the same two hooks. The simplest one stacks everything:
114
126
 
115
127
  ```css
116
128
  @container (width < 40rem) {
117
129
  .profile-layout > * {
118
- grid-column: 1 / -1;
130
+ --column-start: 1;
131
+ --column-span: 12;
119
132
  }
120
133
  }
121
134
  ```
@@ -124,20 +137,32 @@ A coordinate system is more useful when you keep it through an intermediate
124
137
  state:
125
138
 
126
139
  ```css
140
+ .profile-main {
141
+ --column-span: 8;
142
+ }
143
+
144
+ .profile-aside {
145
+ --column-start: 9;
146
+ --column-span: 4;
147
+ }
148
+
127
149
  @container (width < 48rem) {
128
150
  .profile-main {
129
- grid-column: 1 / span 6;
151
+ --column-start: 1;
152
+ --column-span: 6;
130
153
  }
131
154
 
132
155
  .profile-aside {
133
- grid-column: 7 / span 6;
156
+ --column-start: 7;
157
+ --column-span: 6;
134
158
  }
135
159
  }
136
160
 
137
161
  @container (width < 32rem) {
138
162
  .profile-main,
139
163
  .profile-aside {
140
- grid-column: 1 / -1;
164
+ --column-start: 1;
165
+ --column-span: 12;
141
166
  }
142
167
  }
143
168
  ```
@@ -145,26 +170,40 @@ state:
145
170
  ```html
146
171
  <div class="container-query">
147
172
  <div class="column-layout profile-layout">
148
- <main class="column-span-8 profile-main">...</main>
149
- <aside class="column-span-4 column-start-9 profile-aside">...</aside>
173
+ <main class="profile-main">...</main>
174
+ <aside class="profile-aside">...</aside>
150
175
  </div>
151
176
  </div>
152
177
  ```
153
178
 
179
+ Put coordinates you recompose on a class: an inline `style` outranks every
180
+ rule, including your container query.
181
+
154
182
  The `.container-query` wrapper here enables **your** `@container` rules, not a
155
183
  hidden framework behavior. Remove your rules and the wrapper stops mattering.
156
184
  This is the opposite of a primitive whose responsive contract depends on a
157
185
  wrapper someone else has to remember.
158
186
 
159
- Placement classes carry zero specificity, so a single-class rule of your own
160
- wins without `!important` and without having to undo a framework declaration
161
- first.
187
+ ## Nesting
188
+
189
+ A child's coordinates place that child only. A nested `.column-layout` uses the
190
+ ones it carries for its own position in the parent, and its children start from
191
+ nothing.
192
+
193
+ ```html
194
+ <div class="column-layout">
195
+ <section class="column-layout" style="--column-start: 3; --column-span: 8">
196
+ <h3>Full width of the nested canvas</h3>
197
+ <div style="--column-span: 6">Half of it</div>
198
+ </section>
199
+ </div>
200
+ ```
162
201
 
163
202
  ## Narrow containers
164
203
 
165
204
  Twelve columns is a wide-context tool. With the default `--gap`, a 279px
166
205
  container spends 132px on its eleven gaps and leaves about 12px per unit — a
167
- `.column-span-4` region is 84px wide.
206
+ four-unit region is 84px wide.
168
207
 
169
208
  The framework guarantees the canvas itself never overflows its container: the
170
209
  tracks are `minmax(0, 1fr)` and every child gets `min-inline-size: 0`, so item
@@ -174,10 +213,10 @@ its track. Define a narrow representation where the composition needs one.
174
213
 
175
214
  ## Scope
176
215
 
177
- The primitive is horizontal only. There are no `.row-span-*`, `.area-*`, or
178
- `.order-*` classes, and no breakpoint variants such as `md-column-span-6` —
179
- those would move responsive strategy back into markup. For genuinely
180
- two-dimensional placement, use CSS Grid directly on your own class:
216
+ The primitive is horizontal only. There are no row, area, or order hooks, and no
217
+ breakpoint variants — those would move responsive strategy back into markup.
218
+ For genuinely two-dimensional placement, use CSS Grid directly on your own
219
+ class:
181
220
 
182
221
  ```css
183
222
  .dashboard-summary {
@@ -186,7 +225,7 @@ two-dimensional placement, use CSS Grid directly on your own class:
186
225
  ```
187
226
 
188
227
  The column count is fixed at twelve and is not configurable. Twelve is what
189
- makes the vocabulary shared and lets `6 + 6`, `4 + 4 + 4`, `3 + 3 + 3 + 3`,
228
+ makes the coordinates shared and lets `6 + 6`, `4 + 4 + 4`, `3 + 3 + 3 + 3`,
190
229
  `8 + 4`, and `2 + 8 + 2` all land on the same canvas. For a track system whose
191
230
  sizes carry meaning rather than twelve interchangeable units, use
192
231
  `--grid-columns` on `.grid`.
@@ -194,13 +233,12 @@ sizes carry meaning rather than twelve interchangeable units, use
194
233
  Unlike `.grid-N`, the track template does not read `--gap`, so the gap
195
234
  utilities are exact here at every width.
196
235
 
197
- A region carrying a placement class must generate a box. `display: contents`
198
- removes that box and promotes its descendants to grid items, which leaves the
199
- placement with nothing to apply to.
236
+ A placed region must generate a box. `display: contents` removes that box and
237
+ promotes its descendants to grid items, which leaves the placement with nothing
238
+ to apply to.
200
239
 
201
- ### Classes
240
+ ### Hooks
202
241
 
203
- - `.column-layout` establishes the twelve-column canvas.
204
- - `.column-span-1` … `.column-span-12` set the width in canvas units.
205
- - `.column-start-1` … `.column-start-12` set the starting line, running to the
206
- canvas end unless a span refines it.
242
+ - `--column-span` — width in canvas units, 1 to 12. Unset, a region runs to the
243
+ canvas end.
244
+ - `--column-start` — starting line, 1 to 12. Unset, the region is auto-placed.
@@ -25,4 +25,4 @@ Add `.items-center` to align the leading element with short trailing content. Fo
25
25
  </div>
26
26
  ```
27
27
 
28
- The media object is the underlying pattern of `.blog-author`, `.blog-comment`, and similar compositions in templates. Components can adopt it instead of repeating the grid rule. The [Workspaces example](../examples/overview.md) shows the card pattern: `card > header` with `.media` plus `hgroup`, and row actions in the header — never a third `.media` child.
28
+ The media object is the underlying pattern of `.blog-author`, `.blog-comment`, and similar compositions in templates. Components can adopt it instead of repeating the grid rule. The [Workspaces example](../examples/overview.md#page-shapes) shows the card pattern: `card > header` with `.media` plus `hgroup`, and row actions in the header — never a third `.media` child.
@@ -57,4 +57,4 @@ Prefer a parent `gap` for relationships between peers instead of encoding siblin
57
57
 
58
58
  Before adding a divider or other separating chrome, consider whether additional spacing already expresses the boundary clearly.
59
59
 
60
- Density changes the amount of space available, not the relationships that space communicates. When a composition contains local, group, and section rhythms, preserve their relative hierarchy with nested or local `--gap` values rather than relying on one inherited gap at every level. See [Stack](./stack.md) for the nesting and density mechanics.
60
+ Density changes the amount of space available, not the relationships that space communicates. When a composition contains local, group, and section rhythms, preserve their relative hierarchy with nested or local `--gap` values rather than relying on one inherited gap at every level. See [Choosing a density](./stack.md#choosing-a-density) for the nesting and density mechanics.
@@ -37,7 +37,7 @@ list the two layers as separate tables. Every other utility page is base only.
37
37
  - No color scales such as `.text-primary` or `.bg-success` — intent colors belong to components and state.
38
38
  - No breakpoint utility variants — use container queries or layout primitives.
39
39
  - No utility variants for hover, focus, dark mode, or arbitrary selectors — use component states.
40
- - No full spacing scale with every step and direction — the 17 spacing helpers across the core and extra utilities cover the most common escape hatches.
40
+ - No full spacing scale with every step and direction — the spacing helpers in base and extra cover the common escape hatches and read the inherited rhythm.
41
41
 
42
42
  ## Display escape hatches
43
43
 
@@ -8,6 +8,7 @@ Small layout corrections for controls, labels, and compact rails.
8
8
  | ------------------------- | ------- | ----------------------------------------- |
9
9
  | `.fit` | Utility | Shrinks an element to its content width. |
10
10
  | `.text-nowrap` | Utility | Keeps text on one line. |
11
+ | `.text-wrap` | Utility | Restores wrapping under a nowrap parent. |
11
12
  | `.truncate` | Utility | Ellipsizes overflowing single-line text. |
12
13
  | `.scroller` | Layout | Theme-aware scrollbar density and colour. |
13
14
  | `.scroller.stable-gutter` | Variant | Reserves inline-axis scrollbar gutter. |
@@ -22,9 +23,10 @@ Use `.fit` when a control or element should shrink to its content instead of fil
22
23
  </select>
23
24
  ```
24
25
 
25
- Use `.text-nowrap` to keep text on one line inside a cell or label. To stop a
26
- layout primitive from wrapping — for example to force a `.cluster` onto a single
27
- row — set `--cluster-wrap: nowrap`.
26
+ Use `.text-nowrap` to keep text on one line inside a cell or label, and
27
+ `.text-wrap` to let a long label wrap inside a component that keeps its text on
28
+ one line (`.badge`). To stop a layout primitive from wrapping — for example to
29
+ force a `.cluster` onto a single row — set `--cluster-wrap: nowrap`.
28
30
 
29
31
  ```html demo
30
32
  <div class="cluster compact" style="--cluster-wrap: nowrap;">
package/llms.txt CHANGED
@@ -12,12 +12,13 @@ Actual CSS uses a small public grammar: `.component [intent] [variant] [size] [m
12
12
 
13
13
  `package.json#exports` is the canonical package surface.
14
14
 
15
- - `actual-css` — the minimal core: tokens, theme contract, reset, base elements, and universal variants. Components and layout primitives are NOT included.
16
- - `actual-css/full` — the complete framework: core plus every component, form, layout, typography, effect, and utility family.
15
+ - `actual-css/css` — the source core, the recommended starting point: tokens, theme contract, reset, base elements, and universal variants. Components and layout primitives are NOT included; add them with `actual-css/css/<family>` or `actual-css/css/<family>/<module>`.
16
+ - `actual-css` / `actual-css/full` — the complete compiled framework, for zero-config and CDN use: core plus every component, form, layout, typography, effect, and utility family.
17
17
  - `actual-css/js` — the enhancement-loader entry only: it watches `data-enhance-modules` manifest blocks and imports the declared enhancers on demand.
18
18
  - `actual-css/js/full` — the complete runtime with all built-in enhancers pre-registered.
19
19
  - `actual-css/reserved-classes.json` — machine-readable list of the framework-owned class namespace. Use it to check whether a class belongs to Actual CSS and to validate claimed framework classes; application-specific classes are expected to exist outside this manifest.
20
20
  - `actual-css/components.json` — machine-readable component index, derived from the sources (CSS headers, selectors, package exports, `src/js`) by `scripts/build-catalog.js` and verified by `check:catalog`. Gives each component its import paths, owned classes, hooks, states, and registered enhancement tokens — enough to know what exists and where to read more, not a replacement for `docs/pages/components/*.md`.
21
+ - [Starter agent skill](skills/actual-css/SKILL.md) — a copyable skill for building with Actual CSS (vocabulary, hooks, layouts, enhancements); consuming projects extend it with a local `PROJECT.md`.
21
22
  - Individual families and modules are importable separately (`actual-css/css/components`, `actual-css/css/layout/grid`, `actual-css/js/dialog`, …); see [README](README.md) and [Modular imports](docs/pages/guides/modular-import.md).
22
23
 
23
24
  Forms are the one family with two aggregate entrypoints:
@@ -28,13 +29,33 @@ The composition guides in [README](README.md) and [Progressive Enhancements](doc
28
29
  show supported CSS modules and individual enhancer imports without duplicating
29
30
  the full export list here.
30
31
 
31
- Presentation (`class`) and behavior (`data-enhance`) are separate layers.
32
+ Presentation (`class`) and behavior are separate layers. `data-enhance` takes
33
+ five built-in tokens — `tabs`, `flyout`, `range`, `scrollspy`, `validation`.
34
+ Leaf behaviors whose opt-in also carries configuration use their own attribute
35
+ (`data-tooltip`, `data-mask`, `data-filter`, `data-context-menu`), and `<dialog>`
36
+ needs none. See
37
+ [when a token, when a data-*](docs/design-notes/enhancement-contract.md).
38
+
32
39
  Behaviour primitives are independently importable for building custom widgets,
33
40
  including `enhance`, `surface`, `floating`, `focus-group`, `keys`, `input`,
34
41
  `command`, `menu`, `focus`, `escape`, and `events`. See
35
- [enhancement contract](docs/design-notes/enhancement-contract.md) and
36
42
  [widget primitives](docs/design-notes/widget-primitives.md).
37
43
 
44
+ ## What the vocabulary does not have
45
+
46
+ - No compound intent classes (`.btn-primary`, `.badge-success`): intents and
47
+ variants are separate classes on the component (`.btn primary outline`).
48
+ - No breakpoint or state prefixes (`md:stack`, `hover:…`) and no arbitrary
49
+ values: layout primitives and container queries own responsiveness.
50
+ - No spacing scale (`mt-4`, `p-2`): spacing comes from `--gap`, density
51
+ (`.compact`, `.spacious`), and component hooks.
52
+ - `is-*` classes are written by the runtime, not by authors.
53
+ - Modifiers such as `.ghost`, `.link`, `.flush`, `.raised` only mean something
54
+ on their component; alone they are inert.
55
+
56
+ See [naming](docs/design-notes/naming.md) and
57
+ [utilities non-goals](docs/pages/utilities/overview.md#non-goals).
58
+
38
59
  ## Choosing a page shell
39
60
 
40
61
  Before choosing a content layout, choose the page shell:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "actual-css",
3
- "version": "0.9.2",
3
+ "version": "0.11.0",
4
4
  "description": "Plain CSS component framework with semantic classes, universal variants, small tokens, theme hooks, and progressive enhancements.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.4.2",
@@ -26,7 +26,7 @@
26
26
  "progressive-enhancement"
27
27
  ],
28
28
  "exports": {
29
- ".": "./dist/actual.min.css",
29
+ ".": "./dist/actual.full.min.css",
30
30
  "./full": "./dist/actual.full.min.css",
31
31
  "./css": "./src/css/actual.css",
32
32
  "./css/components": "./src/css/components/index.css",
@@ -66,6 +66,7 @@
66
66
  "./js/mask": "./src/js/mask.js",
67
67
  "./js/menu": "./src/js/menu.js",
68
68
  "./js/password": "./src/js/password.js",
69
+ "./js/range": "./src/js/range.js",
69
70
  "./js/scrollspy": "./src/js/scrollspy.js",
70
71
  "./js/selectors": "./src/js/selectors.js",
71
72
  "./js/tab": "./src/js/tab.js",
@@ -80,10 +81,9 @@
80
81
  "bin": {
81
82
  "actual-css": "./src/cli/actual-css.js"
82
83
  },
83
- "main": "./dist/actual.js",
84
- "style": "./dist/actual.min.css",
85
- "unpkg": "./dist/actual.min.css",
86
- "jsdelivr": "./dist/actual.min.css",
84
+ "style": "./dist/actual.full.min.css",
85
+ "unpkg": "./dist/actual.full.min.css",
86
+ "jsdelivr": "./dist/actual.full.min.css",
87
87
  "sideEffects": true,
88
88
  "files": [
89
89
  "dist",
@@ -101,6 +101,7 @@
101
101
  "reserved-classes.json",
102
102
  "components.json",
103
103
  "docs",
104
+ "skills",
104
105
  "CHANGELOG.md",
105
106
  "llms.txt",
106
107
  "LICENSE",
@@ -138,12 +139,15 @@
138
139
  "check:links": "bun scripts/check-doc-links.js",
139
140
  "check:templates": "bun scripts/check-templates.js",
140
141
  "check:markup": "bun scripts/check-markup.js",
142
+ "shot:crop": "bun scripts/shot-crop.js",
141
143
  "shot:forced": "bun scripts/forced-colors-shot.js",
142
144
  "shot:multi": "bun scripts/multi-shot.js",
143
145
  "shot:page": "bun scripts/page-shot.js",
146
+ "shot:states": "bun scripts/shot-states.js",
144
147
  "probe": "bun scripts/probe.js",
145
148
  "serve": "bun scripts/serve.js",
146
149
  "check:sync": "bun scripts/check-sync.js",
150
+ "release": "bun scripts/release.js",
147
151
  "release:notes": "bun scripts/release-notes.js",
148
152
  "test": "bun test",
149
153
  "test:changed": "bun test --changed=master",
@@ -4,7 +4,6 @@
4
4
  "admonition",
5
5
  "alert",
6
6
  "alert-body",
7
- "alert-dismiss",
8
7
  "alert-icon",
9
8
  "alert-title",
10
9
  "align-self-center",
@@ -43,43 +42,20 @@
43
42
  "chat-header",
44
43
  "chat-start",
45
44
  "check",
45
+ "chip",
46
46
  "choice",
47
47
  "choice-card",
48
48
  "circle",
49
+ "close",
49
50
  "cluster",
50
51
  "color",
51
52
  "column-gap-context",
52
53
  "column-layout",
53
- "column-span-1",
54
- "column-span-10",
55
- "column-span-11",
56
- "column-span-12",
57
- "column-span-2",
58
- "column-span-3",
59
- "column-span-4",
60
- "column-span-5",
61
- "column-span-6",
62
- "column-span-7",
63
- "column-span-8",
64
- "column-span-9",
65
- "column-start-1",
66
- "column-start-10",
67
- "column-start-11",
68
- "column-start-12",
69
- "column-start-2",
70
- "column-start-3",
71
- "column-start-4",
72
- "column-start-5",
73
- "column-start-6",
74
- "column-start-7",
75
- "column-start-8",
76
- "column-start-9",
77
54
  "compact",
78
55
  "container-query",
79
56
  "cursor-pointer",
80
57
  "danger",
81
58
  "data-list",
82
- "dialog-close",
83
59
  "dialog-confirmation",
84
60
  "dialog-icon",
85
61
  "display-block",
@@ -91,7 +67,6 @@
91
67
  "display-none",
92
68
  "dot",
93
69
  "drawer",
94
- "drawer-close",
95
70
  "fab",
96
71
  "fab-action",
97
72
  "fab-actions",
@@ -133,7 +108,6 @@
133
108
  "input",
134
109
  "input-icon",
135
110
  "intent-color",
136
- "inverted",
137
111
  "is-open",
138
112
  "is-static",
139
113
  "items-center",
@@ -229,6 +203,7 @@
229
203
  "separated",
230
204
  "shadow-context",
231
205
  "shadow-popout-context",
206
+ "shimmer",
232
207
  "sidebar-layout",
233
208
  "skeleton",
234
209
  "sm",
@@ -239,6 +214,7 @@
239
214
  "sr-only",
240
215
  "stable-gutter",
241
216
  "stack",
217
+ "stacked",
242
218
  "start",
243
219
  "status-bar",
244
220
  "step-complete",
@@ -270,6 +246,7 @@
270
246
  "text-start",
271
247
  "text-title",
272
248
  "text-uppercase",
249
+ "text-wrap",
273
250
  "textarea",
274
251
  "tooltip",
275
252
  "topbar",
@@ -278,6 +255,5 @@
278
255
  "user-select-none",
279
256
  "visibility-hidden",
280
257
  "warning",
281
- "was-validated",
282
- "white-space-normal"
258
+ "was-validated"
283
259
  ]
@@ -0,0 +1,65 @@
1
+ # Project-specific Actual CSS usage
2
+
3
+ Copy this file to `PROJECT.md` beside `SKILL.md` and keep only decisions that are true for this application.
4
+
5
+ This file narrows **how the application uses Actual CSS**. It does not redefine Actual CSS API.
6
+
7
+ ## Imports
8
+
9
+ CSS loaded by this project:
10
+
11
+ ```text
12
+ - TODO
13
+ ```
14
+
15
+ JavaScript enhancers loaded by this project:
16
+
17
+ ```text
18
+ - TODO
19
+ ```
20
+
21
+ ## Theme
22
+
23
+ Theme root / selector:
24
+
25
+ ```text
26
+ TODO
27
+ ```
28
+
29
+ Application-owned brand tokens or theme conventions:
30
+
31
+ ```text
32
+ - TODO
33
+ ```
34
+
35
+ ## Page shell and layout conventions
36
+
37
+ ```text
38
+ - TODO
39
+ ```
40
+
41
+ ## Existing application wrappers
42
+
43
+ List server-side/template components that agents should reuse before writing raw markup.
44
+
45
+ ```text
46
+ - TODO
47
+ ```
48
+
49
+ ## Application CSS conventions
50
+
51
+ ```text
52
+ - TODO
53
+ ```
54
+
55
+ ## Browser policy
56
+
57
+ If stricter than Actual CSS itself:
58
+
59
+ ```text
60
+ TODO
61
+ ```
62
+
63
+ ## Local decisions
64
+
65
+ Add only stable, reusable decisions that materially change implementation choices.