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.
- package/CHANGELOG.md +169 -1
- package/README.md +65 -44
- package/components.json +35 -14
- package/dist/actual.full.css +877 -583
- package/dist/actual.full.js +1 -1
- package/dist/actual.full.min.css +1 -1
- package/docs/design-notes/app-ui.md +1 -1
- package/docs/design-notes/column-layout.md +103 -520
- package/docs/design-notes/enhancement-contract.md +16 -7
- package/docs/design-notes/forced-colors.md +12 -1
- package/docs/design-notes/naming.md +1 -1
- package/docs/design-notes/platform-alignment.md +8 -4
- package/docs/design-notes/rich-text.md +61 -0
- package/docs/design-notes/steps.md +2 -2
- package/docs/design-notes/surface-reparenting.md +8 -9
- package/docs/navigation.json +4 -0
- package/docs/pages/components/accordion.md +55 -1
- package/docs/pages/components/alert.md +9 -15
- package/docs/pages/components/aura.md +12 -13
- package/docs/pages/components/badge.md +16 -7
- package/docs/pages/components/bleed.md +42 -0
- package/docs/pages/components/button.md +30 -4
- package/docs/pages/components/card.md +21 -86
- package/docs/pages/components/chat.md +5 -0
- package/docs/pages/components/close.md +48 -0
- package/docs/pages/components/data-list.md +26 -1
- package/docs/pages/components/dialog.md +21 -18
- package/docs/pages/components/drawer.md +9 -9
- package/docs/pages/components/navbar.md +5 -5
- package/docs/pages/components/pagination.md +15 -15
- package/docs/pages/components/shimmer.md +57 -0
- package/docs/pages/components/skeleton.md +2 -1
- package/docs/pages/components/spinner.md +14 -9
- package/docs/pages/components/table.md +13 -0
- package/docs/pages/enhancements/flyout.md +2 -0
- package/docs/pages/enhancements/overview.md +5 -0
- package/docs/pages/enhancements/tabs.md +4 -0
- package/docs/pages/enhancements/tooltip.md +3 -1
- package/docs/pages/examples/overview.md +2 -1
- package/docs/pages/forms/choice-cards.md +116 -4
- package/docs/pages/forms/combobox.md +39 -12
- package/docs/pages/forms/joined-controls.md +2 -5
- package/docs/pages/forms/overview.md +10 -1
- package/docs/pages/forms/range.md +110 -5
- package/docs/pages/forms/rich-text.md +110 -0
- package/docs/pages/forms/validation.md +5 -1
- package/docs/pages/foundations/theming.md +110 -18
- package/docs/pages/foundations/tokens.md +41 -13
- package/docs/pages/guides/bootstrap.md +2 -1
- package/docs/pages/guides/introduction.md +15 -23
- package/docs/pages/guides/modular-import.md +54 -7
- package/docs/pages/guides/progressive-enhancement.md +19 -17
- package/docs/pages/guides/tailwind.md +21 -7
- package/docs/pages/layout/column-layout.md +92 -54
- package/docs/pages/layout/media.md +1 -1
- package/docs/pages/layout/overview.md +1 -1
- package/docs/pages/utilities/overview.md +1 -1
- package/docs/pages/utilities/sizing-wrapping.md +5 -3
- package/llms.txt +25 -4
- package/package.json +10 -6
- package/reserved-classes.json +6 -30
- package/skills/actual-css/PROJECT.md.example +65 -0
- package/skills/actual-css/README.md +64 -0
- package/skills/actual-css/SKILL.md +234 -0
- package/skills/actual-css/references/accessibility.md +44 -0
- package/skills/actual-css/references/api-and-vocabulary.md +94 -0
- package/skills/actual-css/references/enhancements.md +59 -0
- package/skills/actual-css/references/forms.md +49 -0
- package/skills/actual-css/references/layout-and-theming.md +82 -0
- package/skills/actual-css/references/review-checklist.md +51 -0
- package/skills/actual-css/scripts/inspect-actual-css.mjs +171 -0
- package/src/css/components/accordion.css +44 -7
- package/src/css/components/alert.css +23 -43
- package/src/css/components/app-nav.css +9 -0
- package/src/css/components/avatar.css +1 -1
- package/src/css/components/badge.css +11 -39
- package/src/css/components/bleed.css +79 -0
- package/src/css/components/button.css +6 -17
- package/src/css/components/card.css +7 -40
- package/src/css/components/close.css +91 -0
- package/src/css/components/data-list.css +18 -0
- package/src/css/components/drawer.css +15 -56
- package/src/css/components/fab.css +10 -0
- package/src/css/components/flyout.css +5 -1
- package/src/css/components/index.css +2 -0
- package/src/css/components/join.css +36 -20
- package/src/css/components/menu.css +12 -0
- package/src/css/components/meter.css +1 -1
- package/src/css/components/modal.css +10 -57
- package/src/css/components/navbar.css +27 -0
- package/src/css/components/pagination.css +3 -2
- package/src/css/components/rating.css +1 -1
- package/src/css/components/status-bar.css +2 -2
- package/src/css/components/steps.css +3 -3
- package/src/css/components/tab.css +3 -3
- package/src/css/components/table.css +6 -0
- package/src/css/components/tooltip.css +1 -1
- package/src/css/core/focus.css +19 -3
- package/src/css/core/theme.css +33 -43
- package/src/css/core/tokens.css +9 -5
- package/src/css/core/variants.css +5 -34
- package/src/css/effects/aura.css +51 -33
- package/src/css/effects/index.css +1 -0
- package/src/css/effects/shimmer.css +57 -0
- package/src/css/forms/choice-card.css +142 -24
- package/src/css/forms/choice.css +2 -3
- package/src/css/forms/control.css +17 -10
- package/src/css/forms/custom-select.css +4 -4
- package/src/css/forms/native.css +4 -4
- package/src/css/forms/otp.css +9 -1
- package/src/css/forms/range.css +72 -14
- package/src/css/forms/switch.css +2 -3
- package/src/css/layout/app-layout.css +1 -1
- package/src/css/layout/column-layout.css +26 -111
- package/src/css/utilities/extra.css +7 -6
- package/src/js/command.js +61 -32
- package/src/js/dialog.js +103 -47
- package/src/js/dismiss.js +1 -2
- package/src/js/enhance.js +91 -126
- package/src/js/escape.js +1 -0
- package/src/js/flyout.js +10 -1
- package/src/js/focus-group.js +2 -1
- package/src/js/full.js +1 -0
- package/src/js/keys.js +14 -0
- package/src/js/menu.js +2 -1
- package/src/js/password.js +1 -8
- package/src/js/range.js +151 -0
- package/src/js/scrollspy.js +4 -5
- package/src/js/status.js +21 -10
- package/src/js/surface.js +12 -8
- package/src/js/tab.js +2 -1
- package/src/js/tooltip.js +29 -2
- package/src/js/validation.js +8 -15
- package/dist/actual.css +0 -876
- package/dist/actual.js +0 -1
- 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.
|
|
4
|
-
with
|
|
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
|
|
14
|
-
<aside class="column-span
|
|
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
|
-
|
|
19
|
-
|
|
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
|
|
28
|
-
<div class="column-span
|
|
29
|
-
<div class="column-span
|
|
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
|
|
34
|
-
|
|
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 —
|
|
39
|
-
<div class="column-span
|
|
40
|
-
<div class="column-span
|
|
41
|
-
<div class="column-span
|
|
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
|
-
|
|
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="
|
|
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
|
|
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: `
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
86
|
-
<p class="muted column-
|
|
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
|
|
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="
|
|
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
|
|
100
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
151
|
+
--column-start: 1;
|
|
152
|
+
--column-span: 6;
|
|
130
153
|
}
|
|
131
154
|
|
|
132
155
|
.profile-aside {
|
|
133
|
-
|
|
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
|
-
|
|
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="
|
|
149
|
-
<aside class="
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
|
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
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
###
|
|
240
|
+
### Hooks
|
|
202
241
|
|
|
203
|
-
-
|
|
204
|
-
|
|
205
|
-
-
|
|
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 [
|
|
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
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
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",
|
package/reserved-classes.json
CHANGED
|
@@ -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.
|