actual-css 0.5.0 → 0.6.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 +17 -1
- package/dist/actual.css +1 -0
- package/dist/actual.full.css +480 -117
- package/dist/actual.full.js +1 -1
- package/dist/actual.full.min.css +1 -1
- package/dist/actual.min.css +1 -1
- package/docs/design-notes/browser-support.md +14 -14
- package/docs/design-notes/enhancement-contract.md +30 -13
- package/docs/design-notes/forced-colors.md +11 -7
- package/docs/design-notes/grid.md +4 -4
- package/docs/design-notes/naming.md +15 -9
- package/docs/design-notes/platform-alignment.md +9 -0
- package/docs/design-notes/references.md +4 -0
- package/docs/design-notes/steps.md +748 -0
- package/docs/design-notes/widget-primitives.md +32 -15
- package/docs/navigation.json +1 -0
- package/docs/pages/components/alert.md +13 -8
- package/docs/pages/components/aura.md +102 -6
- package/docs/pages/components/avatar.md +9 -6
- package/docs/pages/components/badge.md +11 -7
- package/docs/pages/components/button.md +17 -17
- package/docs/pages/components/card.md +15 -8
- package/docs/pages/components/chat.md +1 -1
- package/docs/pages/components/dialog.md +10 -7
- package/docs/pages/components/drawer.md +1 -1
- package/docs/pages/components/fab.md +12 -10
- package/docs/pages/components/indicator.md +6 -6
- package/docs/pages/components/list.md +11 -2
- package/docs/pages/components/navbar.md +1 -1
- package/docs/pages/components/pagination.md +1 -1
- package/docs/pages/components/rating.md +4 -4
- package/docs/pages/components/skeleton.md +1 -1
- package/docs/pages/components/spinner.md +1 -1
- package/docs/pages/components/steps.md +376 -52
- package/docs/pages/components/table.md +5 -5
- package/docs/pages/enhancements/flyout.md +12 -10
- package/docs/pages/enhancements/overview.md +2 -2
- package/docs/pages/enhancements/scrollspy.md +1 -1
- package/docs/pages/enhancements/tabs.md +1 -1
- package/docs/pages/examples/overview.md +2 -0
- package/docs/pages/forms/choice-cards.md +4 -4
- package/docs/pages/forms/combobox.md +87 -0
- package/docs/pages/forms/floating-field.md +5 -3
- package/docs/pages/forms/joined-controls.md +4 -4
- package/docs/pages/forms/labels.md +8 -5
- package/docs/pages/forms/overview.md +25 -18
- package/docs/pages/forms/password.md +3 -2
- package/docs/pages/forms/range.md +13 -2
- package/docs/pages/forms/states-and-sizes.md +6 -4
- package/docs/pages/forms/validation.md +13 -9
- package/docs/pages/foundations/tokens.md +9 -6
- package/docs/pages/foundations/typography.md +1 -1
- package/docs/pages/guides/bootstrap.md +3 -3
- package/docs/pages/guides/introduction.md +1 -1
- package/docs/pages/guides/modular-import.md +21 -10
- package/docs/pages/guides/progressive-enhancement.md +75 -54
- package/docs/pages/guides/tailwind.md +2 -2
- package/docs/pages/layout/app-shell.md +4 -4
- package/docs/pages/layout/choosing.md +10 -6
- package/docs/pages/layout/grid.md +11 -10
- package/docs/pages/layout/stack.md +10 -6
- package/docs/pages/patterns/structured-lists.md +7 -7
- package/docs/pages/utilities/accessibility.md +1 -1
- package/docs/pages/utilities/flex.md +20 -13
- package/docs/pages/utilities/links.md +1 -1
- package/docs/pages/utilities/list.md +1 -1
- package/docs/pages/utilities/overflow.md +14 -7
- package/docs/pages/utilities/overview.md +22 -0
- package/docs/pages/utilities/shape.md +1 -1
- package/docs/pages/utilities/sizing-wrapping.md +10 -8
- package/docs/pages/utilities/spacing.md +26 -19
- package/docs/pages/utilities/text.md +1 -1
- package/llms.txt +27 -4
- package/package.json +3 -2
- package/scripts/reserved-classes.json +4 -1
- package/src/css/components/fab.css +44 -8
- package/src/css/components/list.css +3 -1
- package/src/css/components/steps.css +277 -69
- package/src/css/core/tokens.css +1 -0
- package/src/css/effects/aura.css +101 -11
- package/src/css/forms/custom-select.css +1 -1
- package/src/css/forms/floating-field.css +8 -6
- package/src/css/layout/container-query.css +37 -13
- package/src/css/layout/grid.css +7 -7
- package/src/css/layout/index.css +1 -1
- package/src/js/password.js +1 -1
|
@@ -12,7 +12,7 @@ column count.
|
|
|
12
12
|
`.grid` fits as many columns as the available inline space permits. Incomplete
|
|
13
13
|
final rows are part of the contract.
|
|
14
14
|
|
|
15
|
-
```html demo
|
|
15
|
+
```html demo resize
|
|
16
16
|
<section class="grid">
|
|
17
17
|
<article class="card"><h3>Starter</h3><p>For small projects.</p></article>
|
|
18
18
|
<article class="card"><h3>Team</h3><p>For shared products.</p></article>
|
|
@@ -34,7 +34,7 @@ Tune the item minimum with `--grid-min`.
|
|
|
34
34
|
own: it never exceeds N columns, never overflows, and every item keeps the same
|
|
35
35
|
width.
|
|
36
36
|
|
|
37
|
-
```html demo
|
|
37
|
+
```html demo resize
|
|
38
38
|
<div class="grid-4">
|
|
39
39
|
<div class="card">Exercitation</div>
|
|
40
40
|
<div class="card">Amet mollit</div>
|
|
@@ -47,7 +47,7 @@ width.
|
|
|
47
47
|
density is `.grid-N`'s. Choose the preset that suits your item size:
|
|
48
48
|
|
|
49
49
|
| Item | Preset |
|
|
50
|
-
|
|
50
|
+
| --------------------------------- | -------------------- |
|
|
51
51
|
| large card | `.grid-2` |
|
|
52
52
|
| card with a heading and a summary | `.grid-3`, `.grid-4` |
|
|
53
53
|
| compact tile, stat, avatar | `.grid-6` |
|
|
@@ -56,9 +56,9 @@ density is `.grid-N`'s. Choose the preset that suits your item size:
|
|
|
56
56
|
|
|
57
57
|
Left alone, a preset collapses one column at a time, so a six-item `.grid-6`
|
|
58
58
|
can pass through five columns — five items and a lone sixth. The example above
|
|
59
|
-
is that bare version. Placed inside a container named **`actual-
|
|
59
|
+
is that bare version. Placed inside a container named **`actual-container`** — the
|
|
60
60
|
`.container-query` helper, or a region of your own that declares
|
|
61
|
-
`container: actual-
|
|
61
|
+
`container: actual-container / inline-size` — it only ever enters a **divisor of N**:
|
|
62
62
|
|
|
63
63
|
```text
|
|
64
64
|
.grid-2 2 → 1
|
|
@@ -69,7 +69,7 @@ is that bare version. Placed inside a container named **`actual-grid`** — the
|
|
|
69
69
|
|
|
70
70
|
Every state splits the collection evenly, and all items keep the same width.
|
|
71
71
|
|
|
72
|
-
```html demo
|
|
72
|
+
```html demo resize
|
|
73
73
|
<div class="container-query">
|
|
74
74
|
<div class="grid-6">
|
|
75
75
|
<div class="card">1</div>
|
|
@@ -89,7 +89,7 @@ not the grid's own width. Padding and borders on the container come off before
|
|
|
89
89
|
the query resolves.
|
|
90
90
|
|
|
91
91
|
| Container content box | `.grid-2` | `.grid-3` | `.grid-4` | `.grid-6` |
|
|
92
|
-
|
|
92
|
+
| --------------------- | --------- | --------- | --------- | --------- |
|
|
93
93
|
| under `28rem` | 1 | 1 | 1 | 1 |
|
|
94
94
|
| `28rem` to `48rem` | 2 | 1 | 2 | 2 |
|
|
95
95
|
| `48rem` to `64rem` | 2 | 3 | 2 | 3 |
|
|
@@ -113,9 +113,10 @@ change cannot drop the region a state.
|
|
|
113
113
|
|
|
114
114
|
Balanced subdivision is precision, never a prerequisite for responsive
|
|
115
115
|
behavior — forgetting the container costs you the exact chain, nothing else.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
`actual-container` is the framework's shared name for size-aware components,
|
|
117
|
+
so one region can serve a grid and a step flow at once. The grid responds only
|
|
118
|
+
to that name, never to an incidental query container, so a region that sets
|
|
119
|
+
`container-type: inline-size` for its own reasons leaves the grid untouched. The container has to be an
|
|
119
120
|
ancestor: an element cannot query its own size without taking inline-size
|
|
120
121
|
containment, which would collapse the grid inside a `.cluster`, a float, or any
|
|
121
122
|
shrink-to-fit box. Put it on a normal block-level wrapper for the same reason.
|
|
@@ -44,12 +44,16 @@ not as the wrapper that lays out independent full-width regions of a page.
|
|
|
44
44
|
`--gap` is the primitive's channel, and the density variants set it at the point
|
|
45
45
|
of use. Pick the one that matches how tightly the children belong together:
|
|
46
46
|
|
|
47
|
-
| Markup
|
|
48
|
-
|
|
49
|
-
| `.stack gap-none` | 0
|
|
50
|
-
| `.stack sm`
|
|
51
|
-
| `.stack`
|
|
52
|
-
| `.stack lg`
|
|
47
|
+
| Markup | Gap | Use for |
|
|
48
|
+
| ----------------- | ---- | ------------------------------------------ |
|
|
49
|
+
| `.stack gap-none` | 0 | Lines forming one typographic unit |
|
|
50
|
+
| `.stack sm` | 8px | A homogeneous series of controls |
|
|
51
|
+
| `.stack` | 12px | Normal flow between distinct elements |
|
|
52
|
+
| `.stack lg` | 24px | Sections, or blocks that read as separated |
|
|
53
|
+
|
|
54
|
+
One typographic unit means a name and a job title, or a figure and its caption.
|
|
55
|
+
A homogeneous series means a radio list, a checkbox list, or a compact vertical
|
|
56
|
+
menu.
|
|
53
57
|
|
|
54
58
|
The distinction between the first two matters. `42` above `Open issues` is
|
|
55
59
|
almost a single block of text, so it takes `gap-none`. Three `.choice` labels
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Choose list markup from the content semantics, then add only the layout or
|
|
4
4
|
component contract the collection needs.
|
|
5
5
|
|
|
6
|
-
| Need
|
|
7
|
-
|
|
|
8
|
-
| Bullets or order carry meaning
|
|
9
|
-
|
|
|
10
|
-
| Repeated
|
|
11
|
-
| A list of navigation links
|
|
12
|
-
| A richer collection with its own item structure | Native list plus
|
|
6
|
+
| Need | Use |
|
|
7
|
+
| ----------------------------------------------- | ----------------------------------- |
|
|
8
|
+
| Bullets or order carry meaning | Native `<ul>` or `<ol>` |
|
|
9
|
+
| Leading element plus flexible content | [`.media`](../layout/media.md) |
|
|
10
|
+
| Repeated rows: leading, content, trailing | [`.list`](../components/list.md) |
|
|
11
|
+
| A list of navigation links | [`.nav-list`](./navigation-list.md) |
|
|
12
|
+
| A richer collection with its own item structure | Native list plus primitives |
|
|
13
13
|
|
|
14
14
|
`.media` and `.list` are not interchangeable. `.media` is geometry for one
|
|
15
15
|
two-part composition and requires exactly two direct children. `.list` owns the
|
|
@@ -5,7 +5,7 @@ Text hidden visually but still available to assistive technology.
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
7
|
| Class | Kind | Description |
|
|
8
|
-
|
|
8
|
+
| ---------- | ------- | --------------------------------------------------------------- |
|
|
9
9
|
| `.sr-only` | Utility | Visually hides text while keeping it in the accessibility tree. |
|
|
10
10
|
|
|
11
11
|
## Screen reader only
|
|
@@ -4,19 +4,26 @@ Small flex helpers for grow behavior and other one-line needs.
|
|
|
4
4
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
| `.
|
|
12
|
-
| `.items-
|
|
13
|
-
| `.
|
|
14
|
-
| `.
|
|
15
|
-
| `.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
|
7
|
+
Base utilities:
|
|
8
|
+
|
|
9
|
+
| Class | Description |
|
|
10
|
+
| --------------- | -------------------------------------------------------------- |
|
|
11
|
+
| `.grow` | Makes an item take available flex space without overflowing. |
|
|
12
|
+
| `.items-start` | Aligns children to the block-start edge; sets `--items-align`. |
|
|
13
|
+
| `.items-center` | Centers children on the cross axis; sets `--items-align`. |
|
|
14
|
+
| `.items-end` | Aligns children to the block-end edge; sets `--items-align`. |
|
|
15
|
+
| `.dot` | Inline separator dot for metadata rows. |
|
|
16
|
+
|
|
17
|
+
Extra utilities:
|
|
18
|
+
|
|
19
|
+
| Class | Description |
|
|
20
|
+
| -------------------------------- | --------------------------------------------------------- |
|
|
21
|
+
| `.justify-content-start` | `justify-content: flex-start` and `--cluster-justify`. |
|
|
22
|
+
| `.justify-content-center` | `justify-content: center` and `--cluster-justify`. |
|
|
23
|
+
| `.justify-content-end` | `justify-content: flex-end` and `--cluster-justify`. |
|
|
24
|
+
| `.justify-content-space-between` | `justify-content: space-between` and `--cluster-justify`. |
|
|
25
|
+
| `.flex-wrap` | `flex-wrap: wrap` on any flex container. |
|
|
26
|
+
| `.flex-nowrap` | `flex-wrap: nowrap` on any flex container. |
|
|
20
27
|
|
|
21
28
|
## Grow
|
|
22
29
|
|
|
@@ -5,7 +5,7 @@ Link styling for chrome that is conceptually a link but should not look like pro
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
7
|
| Class | Kind | Description |
|
|
8
|
-
|
|
8
|
+
| ------------- | ------- | --------------------------------------------------------- |
|
|
9
9
|
| `.link-plain` | Utility | Removes the underline and inherits the surrounding color. |
|
|
10
10
|
| `.link-muted` | Utility | Muted link that shifts to the full text color on hover. |
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ Utilities for list chrome reset, readable measure, and editorial kicker labels.
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
7
|
| Class | Kind | Description |
|
|
8
|
-
|
|
8
|
+
| ------------- | --------- | ------------------------------------------------------------- |
|
|
9
9
|
| `.list-reset` | Utility | Removes native list margin, padding, and markers. |
|
|
10
10
|
| `.measure` | Utility | Caps a block at a readable width via `--measure`. |
|
|
11
11
|
| `.overline` | Component | Small editorial kicker label: muted, uppercase, letterspaced. |
|
|
@@ -4,13 +4,20 @@ Explicit overflow handling for content that may exceed its container.
|
|
|
4
4
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
| `.overflow-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
Base utilities:
|
|
8
|
+
|
|
9
|
+
| Class | Description |
|
|
10
|
+
| ---------------- | ----------------------------------------------------- |
|
|
11
|
+
| `.overflow-auto` | Enables scrolling when content exceeds the container. |
|
|
12
|
+
|
|
13
|
+
Extra utilities:
|
|
14
|
+
|
|
15
|
+
| Class | Description |
|
|
16
|
+
| ------------------ | ----------------------------------------------------- |
|
|
17
|
+
| `.overflow-hidden` | Clips overflowing content. |
|
|
18
|
+
| `.overflow-clip` | Clips overflowing content without a scroll container. |
|
|
19
|
+
| `.overflow-x-auto` | Horizontal scrolling only. |
|
|
20
|
+
| `.overflow-y-auto` | Vertical scrolling only. |
|
|
14
21
|
|
|
15
22
|
Use `.overflow-auto` when content may overflow its container, especially tables and code-like regions.
|
|
16
23
|
|
|
@@ -7,6 +7,28 @@ Utilities are a small escape hatch for common single-purpose needs. They should
|
|
|
7
7
|
- Keep utility names stable, boring, and few.
|
|
8
8
|
- Utilities should use logical properties where relevant.
|
|
9
9
|
|
|
10
|
+
## Two layers
|
|
11
|
+
|
|
12
|
+
Utilities ship in two modules, and the split is about **naming and curation**,
|
|
13
|
+
not about opting in. Importing `actual-css/css/utilities` — or
|
|
14
|
+
`actual.full.css` — gives you both.
|
|
15
|
+
|
|
16
|
+
| Module | Import | Naming |
|
|
17
|
+
| --------- | -------------------------------- | ---------------------------------- |
|
|
18
|
+
| **Base** | `actual-css/css/utilities/base` | Compact names, frequent operations |
|
|
19
|
+
| **Extra** | `actual-css/css/utilities/extra` | Explicit property/value names |
|
|
20
|
+
|
|
21
|
+
Base is the curated set, and it is where a short name is allowed: `.px`, `.py`,
|
|
22
|
+
`.mbs`, `.gap-none`. Extra spells out the property and the value — `.gap-sm`,
|
|
23
|
+
`.overflow-x-auto`, `.justify-content-center` — and never gives a base utility
|
|
24
|
+
a second spelling.
|
|
25
|
+
|
|
26
|
+
Reach for base first. Extra exists so an explicit one-off does not have to
|
|
27
|
+
become a new short name, which is the pressure that grows a utility surface.
|
|
28
|
+
|
|
29
|
+
Extra utilities are concentrated in flex, overflow and spacing; those pages
|
|
30
|
+
list the two layers as separate tables. Every other utility page is base only.
|
|
31
|
+
|
|
10
32
|
## Non-Goals
|
|
11
33
|
|
|
12
34
|
> Utilities deliberately excluded to keep the surface small and intentional.
|
|
@@ -5,7 +5,7 @@ Rare shape utilities for cases that must be perfectly round or square.
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
7
|
| Class | Kind | Description |
|
|
8
|
-
|
|
8
|
+
| --------- | ------- | --------------------------------------------------- |
|
|
9
9
|
| `.circle` | Utility | Forces a perfectly round shape via `--radius-full`. |
|
|
10
10
|
|
|
11
11
|
Shape utilities should be rare because shape is mostly theme-level.
|
|
@@ -4,13 +4,13 @@ Small layout corrections for controls, labels, and compact rails.
|
|
|
4
4
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
|
-
| Class | Kind | Description
|
|
8
|
-
|
|
9
|
-
| `.fit` | Utility | Shrinks
|
|
10
|
-
| `.text-nowrap` | Utility | Keeps text on one line.
|
|
11
|
-
| `.truncate` | Utility | Ellipsizes overflowing single-line text.
|
|
12
|
-
| `.scroller` |
|
|
13
|
-
| `.scroller.stable-gutter` | Variant | Reserves scrollbar gutter
|
|
7
|
+
| Class | Kind | Description |
|
|
8
|
+
| ------------------------- | ------- | ----------------------------------------- |
|
|
9
|
+
| `.fit` | Utility | Shrinks an element to its content width. |
|
|
10
|
+
| `.text-nowrap` | Utility | Keeps text on one line. |
|
|
11
|
+
| `.truncate` | Utility | Ellipsizes overflowing single-line text. |
|
|
12
|
+
| `.scroller` | Layout | Theme-aware scrollbar density and colour. |
|
|
13
|
+
| `.scroller.stable-gutter` | Variant | Reserves inline-axis scrollbar gutter. |
|
|
14
14
|
|
|
15
15
|
Use `.fit` when a control or element should shrink to its content instead of filling the available inline space.
|
|
16
16
|
|
|
@@ -78,7 +78,9 @@ above the capability floor. An engine that knows neither ignores both
|
|
|
78
78
|
declarations and draws its native scrollbar — the intended fallback, not a
|
|
79
79
|
broken state.
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
`.scroller` is a layout primitive, so it comes with `actual.full.css` and with
|
|
82
|
+
`actual-css/css/layout` like `.stack` or `.cluster`. A project importing module
|
|
83
|
+
by module reaches it directly:
|
|
82
84
|
|
|
83
85
|
```css
|
|
84
86
|
@import "actual-css/css/layout/scroller";
|
|
@@ -4,25 +4,32 @@ Semantic step helpers for gap, padding, and margin — the most common inline-st
|
|
|
4
4
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
| `.
|
|
12
|
-
| `.
|
|
13
|
-
| `.
|
|
14
|
-
| `.
|
|
15
|
-
| `.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
| `.
|
|
22
|
-
| `.
|
|
23
|
-
| `.
|
|
24
|
-
| `.
|
|
25
|
-
| `.
|
|
7
|
+
Base utilities:
|
|
8
|
+
|
|
9
|
+
| Class | Description |
|
|
10
|
+
| ----------- | -------------------------------------------------------- |
|
|
11
|
+
| `.gap-none` | `gap: 0` on the element itself. |
|
|
12
|
+
| `.py` | Block (vertical) padding at the current density step. |
|
|
13
|
+
| `.px` | Inline (horizontal) padding at the current density step. |
|
|
14
|
+
| `.mbs` | Block-start margin at the current density step. |
|
|
15
|
+
| `.mbe` | Block-end margin at the current density step. |
|
|
16
|
+
|
|
17
|
+
Extra utilities:
|
|
18
|
+
|
|
19
|
+
| Class | Description |
|
|
20
|
+
| --------------------------- | --------------------------------------------- |
|
|
21
|
+
| `.gap-sm` | `gap: var(--space-20)` — denser row rhythm. |
|
|
22
|
+
| `.gap-md` | `gap: var(--space-40)` — default row rhythm. |
|
|
23
|
+
| `.gap-lg` | `gap: var(--space-50)` — roomier row rhythm. |
|
|
24
|
+
| `.padding-context` | All-side padding at the current density step. |
|
|
25
|
+
| `.gap-context` | `gap: var(--gap)`. |
|
|
26
|
+
| `.row-gap-context` | `row-gap: var(--gap)`. |
|
|
27
|
+
| `.column-gap-context` | `column-gap: var(--gap)`. |
|
|
28
|
+
| `.margin-inline-auto` | Horizontally centers a block. |
|
|
29
|
+
| `.margin-inline-start-auto` | Pushes a block toward the inline end. |
|
|
30
|
+
| `.margin-inline-end-auto` | Pushes a block toward the inline start. |
|
|
31
|
+
| `.margin-block-start-auto` | Pushes content toward the block end. |
|
|
32
|
+
| `.margin-block-end-auto` | Pushes content toward the block start. |
|
|
26
33
|
|
|
27
34
|
Spacing helpers follow the density context. The default step is
|
|
28
35
|
`--space-40` (1rem); the `.sm` context tightens it to `--space-20` (0.5rem)
|
|
@@ -5,7 +5,7 @@ Lightweight helpers for muted or secondary text without a full color scale.
|
|
|
5
5
|
## Class reference
|
|
6
6
|
|
|
7
7
|
| Class | Kind | Description |
|
|
8
|
-
|
|
8
|
+
| --------------- | ------- | -------------------------------------------------------- |
|
|
9
9
|
| `.muted` | Utility | Secondary text color. |
|
|
10
10
|
| `.text-start` | Utility | Logical start-aligned text; sets `--text-align`. |
|
|
11
11
|
| `.text-center` | Utility | Centered text; sets `--text-align`. |
|
package/llms.txt
CHANGED
|
@@ -16,19 +16,37 @@ Actual CSS uses a small public grammar: `.component [intent] [variant] [size] [m
|
|
|
16
16
|
- `actual-css/full` — the complete framework: core plus every component, form, layout, typography, effect, and utility family.
|
|
17
17
|
- `actual-css/js` — the enhancement loader only; it discovers `data-enhance` markers and loads enhancers on demand.
|
|
18
18
|
- `actual-css/js/full` — the complete runtime with all built-in enhancers pre-registered.
|
|
19
|
-
- `actual-css/reserved-classes.json` — machine-readable list of
|
|
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
|
- 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).
|
|
21
21
|
|
|
22
|
+
Forms are the one family with two aggregate entrypoints:
|
|
23
|
+
`actual-css/css/forms` is the native-control baseline; use
|
|
24
|
+
`actual-css/css/forms/all` for the complete forms family.
|
|
25
|
+
|
|
22
26
|
The composition guides in [README](README.md) and [Progressive Enhancements](docs/pages/enhancements/overview.md)
|
|
23
27
|
show supported CSS modules and individual enhancer imports without duplicating
|
|
24
28
|
the full export list here.
|
|
25
29
|
|
|
26
30
|
Presentation (`class`) and behavior (`data-enhance`) are separate layers.
|
|
27
|
-
Behaviour primitives
|
|
28
|
-
`
|
|
29
|
-
|
|
31
|
+
Behaviour primitives are independently importable for building custom widgets,
|
|
32
|
+
including `enhance`, `surface`, `floating`, `focus-group`, `keys`, `input`,
|
|
33
|
+
`command`, `menu`, `focus`, `escape`, and `events`. See
|
|
34
|
+
[enhancement contract](docs/design-notes/enhancement-contract.md) and
|
|
30
35
|
[widget primitives](docs/design-notes/widget-primitives.md).
|
|
31
36
|
|
|
37
|
+
## Choosing a page shell
|
|
38
|
+
|
|
39
|
+
Before choosing a content layout, choose the page shell:
|
|
40
|
+
|
|
41
|
+
- Normal scrolling page, marketing/editorial site, or ordinary application page
|
|
42
|
+
→ semantic landmarks; optionally `.app-shell` and `.navbar`.
|
|
43
|
+
- Persistent topbar + independently scrolling main + adaptive bottom/side
|
|
44
|
+
primary navigation → `.app-layout`.
|
|
45
|
+
|
|
46
|
+
Do not choose `.app-layout` merely because the product is an application. Its
|
|
47
|
+
viewport-sized shell, internal scrolling, and adaptive navigation are one
|
|
48
|
+
combined contract. See [layout choices](docs/pages/layout/choosing.md).
|
|
49
|
+
|
|
32
50
|
## Choosing a layout primitive
|
|
33
51
|
|
|
34
52
|
Pick from the relationship between children, not the number of children in one mockup:
|
|
@@ -41,6 +59,11 @@ Pick from the relationship between children, not the number of children in one m
|
|
|
41
59
|
- Explicit region placement on a shared 12-column canvas → `.column-layout`
|
|
42
60
|
- Vertical flow → `.stack`; wrapping inline items → `.cluster`
|
|
43
61
|
|
|
62
|
+
`.container-query` establishes the framework's shared
|
|
63
|
+
`actual-container / inline-size` container for components that explicitly
|
|
64
|
+
respond to allocated space; it is not a general prerequisite for responsive
|
|
65
|
+
layouts.
|
|
66
|
+
|
|
44
67
|
Use `--grid-columns` on `.grid` for exact track templates that do not match a
|
|
45
68
|
built-in layout contract: arbitrary structural counts (seven calendar days),
|
|
46
69
|
asymmetric fractional tracks, or mixed intrinsic/flexible tracks. See
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "actual-css",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.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.0",
|
|
@@ -115,6 +115,7 @@
|
|
|
115
115
|
"build:docs": "bun run build:themes && bun scripts/build-docs.js",
|
|
116
116
|
"watch:docs": "bun run build:themes && bun scripts/build-docs.js --watch",
|
|
117
117
|
"check:docs": "bun scripts/check-docs.js",
|
|
118
|
+
"format:docs": "bun scripts/format-doc-tables.js",
|
|
118
119
|
"check:doc-classes": "bun scripts/check-doc-classes.js",
|
|
119
120
|
"check:compat": "bun scripts/check-compat.js",
|
|
120
121
|
"check:css-api": "bun scripts/check-css-api.js",
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"check:sync": "bun scripts/check-sync.js",
|
|
137
138
|
"test": "bun test",
|
|
138
139
|
"test:changed": "bun test --changed=master",
|
|
139
|
-
"build:all": "bun run lint && bun run build:dist && bun run build:js && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run check:sync && bun run check:links && bun run check:templates && bun run test && bun run build:size",
|
|
140
|
+
"build:all": "bun run lint && bun run build:dist && bun run build:js && bun run format:docs && bun run build:docs && bun run check:docs && bun run check:doc-classes && bun run check:compat && bun run check:css-api && bun run check:color-space && bun run check:architecture && bun run check:enhance && bun run generate:reserved && bun run check:reserved && bun run check:sync && bun run check:links && bun run check:templates && bun run test && bun run build:size",
|
|
140
141
|
"prepublishOnly": "bun run build:all"
|
|
141
142
|
},
|
|
142
143
|
"devDependencies": {
|
|
@@ -75,7 +75,6 @@
|
|
|
75
75
|
"column-start-8",
|
|
76
76
|
"column-start-9",
|
|
77
77
|
"compact",
|
|
78
|
-
"complete",
|
|
79
78
|
"container-query",
|
|
80
79
|
"cursor-pointer",
|
|
81
80
|
"danger",
|
|
@@ -243,7 +242,11 @@
|
|
|
243
242
|
"stack",
|
|
244
243
|
"start",
|
|
245
244
|
"status-bar",
|
|
245
|
+
"step-complete",
|
|
246
|
+
"step-label",
|
|
246
247
|
"steps",
|
|
248
|
+
"steps-horizontal",
|
|
249
|
+
"steps-vertical",
|
|
247
250
|
"sticky",
|
|
248
251
|
"stretch",
|
|
249
252
|
"subtle",
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Fixed floating action placement and a native-details speed dial.
|
|
3
|
-
* Button owns the
|
|
3
|
+
* Button owns the trigger's size, shape, and intent; FAB owns placement and
|
|
4
|
+
* the speed dial's structural open/close markers (--icon-plus / --icon-close).
|
|
4
5
|
*
|
|
5
6
|
* Public hooks:
|
|
6
7
|
* --fab-offset
|
|
7
8
|
* --fab-gap
|
|
9
|
+
* --fab-icon-size
|
|
8
10
|
*/
|
|
9
11
|
.fab {
|
|
10
12
|
--fab-offset: var(--space-40);
|
|
11
13
|
--fab-gap: var(--space-20);
|
|
14
|
+
--fab-icon-size: 1.5rem;
|
|
12
15
|
|
|
13
16
|
position: fixed;
|
|
14
17
|
z-index: var(--z-menu);
|
|
@@ -17,6 +20,9 @@
|
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
.fab > summary {
|
|
23
|
+
/* Centers the toggle markers: the summary is the markers' positioned
|
|
24
|
+
context, not just the app-button class. */
|
|
25
|
+
position: relative;
|
|
20
26
|
list-style: none;
|
|
21
27
|
cursor: pointer;
|
|
22
28
|
}
|
|
@@ -25,11 +31,35 @@
|
|
|
25
31
|
display: none;
|
|
26
32
|
}
|
|
27
33
|
|
|
28
|
-
/*
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
/* The speed dial trigger is an icon-only toggle. FAB owns both structural
|
|
35
|
+
markers: masked pseudo-elements swap the shared plus (closed) and close
|
|
36
|
+
(open) glyphs at the same size, so the two states never drift apart. */
|
|
37
|
+
.fab > summary::before,
|
|
38
|
+
.fab > summary::after {
|
|
39
|
+
content: "";
|
|
40
|
+
position: absolute;
|
|
41
|
+
inset: 0;
|
|
42
|
+
margin: auto;
|
|
43
|
+
inline-size: var(--fab-icon-size);
|
|
44
|
+
block-size: var(--fab-icon-size);
|
|
45
|
+
background: currentColor;
|
|
46
|
+
opacity: 0;
|
|
47
|
+
transform: scale(0.8);
|
|
48
|
+
transition:
|
|
49
|
+
opacity var(--duration),
|
|
50
|
+
transform var(--duration);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.fab > summary::before {
|
|
54
|
+
-webkit-mask: var(--icon-plus) center / contain no-repeat;
|
|
55
|
+
mask: var(--icon-plus) center / contain no-repeat;
|
|
56
|
+
opacity: 1;
|
|
57
|
+
transform: none;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.fab > summary::after {
|
|
61
|
+
-webkit-mask: var(--icon-close) center / contain no-repeat;
|
|
62
|
+
mask: var(--icon-close) center / contain no-repeat;
|
|
33
63
|
}
|
|
34
64
|
|
|
35
65
|
.fab-actions {
|
|
@@ -87,8 +117,14 @@
|
|
|
87
117
|
transition-delay: 0s;
|
|
88
118
|
}
|
|
89
119
|
|
|
90
|
-
.fab[open] > summary
|
|
91
|
-
|
|
120
|
+
.fab[open] > summary::before {
|
|
121
|
+
opacity: 0;
|
|
122
|
+
transform: scale(0.8);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.fab[open] > summary::after {
|
|
126
|
+
opacity: 1;
|
|
127
|
+
transform: none;
|
|
92
128
|
}
|
|
93
129
|
|
|
94
130
|
@media print {
|
|
@@ -33,7 +33,9 @@
|
|
|
33
33
|
.list > li > .list-item {
|
|
34
34
|
display: grid;
|
|
35
35
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
36
|
-
align
|
|
36
|
+
/* Regions align to the first line, so leading, title, and trailing controls
|
|
37
|
+
share one horizontal line while supporting text wraps beneath. */
|
|
38
|
+
align-items: start;
|
|
37
39
|
gap: var(--list-item-gap);
|
|
38
40
|
min-block-size: var(--list-item-min-size);
|
|
39
41
|
padding-block: var(--list-item-pad-block);
|