@usableapp/cardds 0.7.96 → 0.7.97
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 +7 -0
- package/LICENSE +21 -0
- package/README.md +3 -1131
- package/bin/cardds.mjs +1 -1
- package/css/actions.css +2 -2
- package/css/numbers.css +1 -1
- package/css/palette.css +1 -1
- package/css/stack.css +1 -1
- package/css/theme.template.css +2 -2
- package/css/tokens.css +2 -2
- package/dist/actions/Chip.d.ts +1 -1
- package/dist/actions/Dropdown.d.ts +1 -1
- package/dist/cardds.css +7 -7
- package/dist/cards/inkGrounds.d.ts +1 -1
- package/dist/cards/inkGrounds.js +1 -1
- package/dist/catalog.json +1 -1
- package/docs/reference.md +1137 -0
- package/lib/guide.mjs +1 -1
- package/package.json +2 -1
package/bin/cardds.mjs
CHANGED
|
@@ -78,7 +78,7 @@ In the app's entry, once:
|
|
|
78
78
|
import './theme.css'; // after cardds.css
|
|
79
79
|
|
|
80
80
|
Start a screen from a template (Walkthrough · Home · CallSheet · Splash) or compose the components —
|
|
81
|
-
import them, never copy their markup: the behaviour lives in the component. Gallery: see
|
|
81
|
+
import them, never copy their markup: the behaviour lives in the component. Gallery: see docs/reference.md.`);
|
|
82
82
|
return 0;
|
|
83
83
|
}
|
|
84
84
|
|
package/css/actions.css
CHANGED
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
/* --sm: a small LABEL (a name on a note, a tag in a tight head) — low and tight; never a tap target */
|
|
200
200
|
.chip--sm { min-height: 0; gap: var(--chip-sm-gap, var(--sp-1)); padding: var(--chip-sm-pad-y, var(--sp-0)) var(--chip-sm-pad-x, var(--sp-2)); }
|
|
201
201
|
.chip--on { background: var(--chip-on-bg, var(--accent)); --dark: var(--accent-dark); color: var(--chip-on-ink, var(--card-ink)); border-color: transparent; }
|
|
202
|
-
/* muted: an untouched default — the words wash out, the edge stays; emphasis is the difference from the neighbours (
|
|
202
|
+
/* muted: an untouched default — the words wash out, the edge stays; emphasis is the difference from the neighbours (docs/reference.md 13) */
|
|
203
203
|
.chip--muted { color: var(--chip-muted-ink, var(--card-muted)); } /* the chip's own fill's muted words: a muted chip on the dark card is still a light chip */
|
|
204
204
|
|
|
205
205
|
.chip-row { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
font-size: var(--fs-body);
|
|
230
230
|
text-align: left;
|
|
231
231
|
}
|
|
232
|
-
/* muted: the value is still the default (
|
|
232
|
+
/* muted: the value is still the default (docs/reference.md 13) */
|
|
233
233
|
.dropdown--muted .dropdown__btn { color: var(--dropdown-muted-ink, var(--action-muted)); }
|
|
234
234
|
.dropdown__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
235
235
|
.dropdown__btn > .icon { transition: rotate var(--motion-quick) ease; }
|
package/css/numbers.css
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
--_step: calc(var(--tap-base) * 2 / 3); /* 32 the round of one step */
|
|
47
47
|
--_pad: calc((var(--header-h) - var(--_step)) / 2); /* 14 round + its room = the top bar's height; the end rounds sit concentric in the pill */
|
|
48
48
|
/* the track lays down the accent fill of where it stands (the brand on a light card, the card's ink on the brand card), so it is a
|
|
49
|
-
surface of that fill's side; its steps re-point the accent to its ink, as the brand card slot does (
|
|
49
|
+
surface of that fill's side; its steps re-point the accent to its ink, as the brand card slot does (docs/reference.md rule 10) */
|
|
50
50
|
--dark: var(--accent-dark);
|
|
51
51
|
list-style: none;
|
|
52
52
|
margin: 0;
|
package/css/palette.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Apply with <html data-palette="clay"> (or <body>).
|
|
4
4
|
No attribute = wireframe grayscale from tokens.css.
|
|
5
5
|
Each palette overrides role tokens only — components never change.
|
|
6
|
-
A palette sets its grounds, its two ink sets (onlight, ondark;
|
|
6
|
+
A palette sets its grounds, its two ink sets (onlight, ondark; docs/reference.md "Ink follows its ground") and the side of any ground
|
|
7
7
|
that is not the default's (tokens.css: tones 1, 2, 4 and the paper light; tone 3, tone 5 and the brand dark). Each ink set
|
|
8
8
|
holds 4.5:1 on every ground of its side; a tone with words on its 12% tint (a banner, a step bar, today) holds them there too.
|
|
9
9
|
============================================================ */
|
package/css/stack.css
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
bottom, the headroom above is the base's (block below).
|
|
33
33
|
--flood (with --closed): an open sheet fills the whole screen, over the top bar.
|
|
34
34
|
Direct children only, five at most (slots are :nth-child below):
|
|
35
|
-
first = the back of the stack, last = the front.
|
|
35
|
+
first = the back of the stack, last = the front. docs/reference.md "Sheet stack
|
|
36
36
|
markup". The SheetStack component opens and closes a --tap stack; without it the
|
|
37
37
|
stack still renders, it just won't open.
|
|
38
38
|
============================================================ */
|
package/css/theme.template.css
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
/* --color-brand: #ef4e0b; */ /* the primary action, the strong card */
|
|
44
44
|
/* --color-on-brand: #fff4ec; */ /* the words on the brand */
|
|
45
45
|
|
|
46
|
-
/* ---- ink: two sets, ONLIGHT and ONDARK (
|
|
46
|
+
/* ---- ink: two sets, ONLIGHT and ONDARK (docs/reference.md "Ink follows its ground") ----
|
|
47
47
|
Every word and glyph on a light ground is onlight, on a dark ground ondark. Set the two sets; each one's ink and its muted shade
|
|
48
48
|
hold 4.5:1 on every ground of its side (inkGrounds() measures it). Unset, --color-ink and --color-on-brand derive them.
|
|
49
49
|
--ink-onlight --ink-onlight-muted --ink-ondark --ink-ondark-muted
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
|
|
56
56
|
/* ---- colour roles: only where a derivation is not what you want — a role set here wins over it ----
|
|
57
57
|
--surface --card-1-bg … --card-5-bg (five card tones: fills only, their words follow their side)
|
|
58
|
-
--card-border (a card's fill or its --card-border holds 3:1 on its ground: cardGrounds(),
|
|
58
|
+
--card-border (a card's fill or its --card-border holds 3:1 on its ground: cardGrounds(), docs/reference.md)
|
|
59
59
|
--accent --action-bg --action-border
|
|
60
60
|
--pos --neg --dot-a --dot-b
|
|
61
61
|
--signal-ok-onlight --signal-warn-onlight --signal-error-onlight --signal-info-onlight (the signal set: green · yellow · red ·
|
package/css/tokens.css
CHANGED
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
|
|
181
181
|
/* INK: TWO SETS, ONLIGHT AND ONDARK (Lh 2026-10-18: "there are text colours ONLIGHT and ONDARK. When the ground is light, use
|
|
182
182
|
onlight; when the ground is dark, use ondark"). Words and glyphs alike (icons, marks, dots, a check, a knob). Each set holds its
|
|
183
|
-
ink and its muted shade to 4.5:1 on every ground of its side.
|
|
183
|
+
ink and its muted shade to 4.5:1 on every ground of its side. docs/reference.md "Ink follows its ground". */
|
|
184
184
|
--ink-onlight: var(--color-ink, #141414);
|
|
185
185
|
--ink-onlight-muted: var(--_onlight-muted, #575757); /* 4.6:1 on the water note and 4.9 on tone 4's grey, the darkest light grounds */
|
|
186
186
|
--ink-ondark: var(--color-on-brand, #ffffff);
|
|
@@ -279,7 +279,7 @@
|
|
|
279
279
|
marks, dots: currentColor), --card-muted (secondary words), the four signals, --on-accent (the ink on the accent fill, whose
|
|
280
280
|
side is --accent-dark) and --accent-ink (the brand as a glyph). A piece with no fill of its own reads only these, so a dark
|
|
281
281
|
surface turns everything on it to ondark with no rule per piece. A piece with no fill that stands in for a surface (a stat
|
|
282
|
-
tile) takes its ground's side: `--dark: inherit`. inkGrounds() measures it;
|
|
282
|
+
tile) takes its ground's side: `--dark: inherit`. inkGrounds() measures it; docs/reference.md "Ink follows its ground" */
|
|
283
283
|
:where(body, [data-palette], [data-mode], .card, .tile, .modal__drawer, .postcard__front, .postcard__back, .sticky, .post-paper,
|
|
284
284
|
.float-bar__pill, .snackbar__body, .delta, .track, .tile-badge, .avatar, .bubble__body, .map__hint, .sheet--paper > .sheet__body,
|
|
285
285
|
.postcard__band, .track__step, .toggle, .chip) {
|
package/dist/actions/Chip.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type DotTone } from './Dot.js';
|
|
|
3
3
|
export interface ChipProps extends ComponentProps<'span'> {
|
|
4
4
|
/** filled accent: the selected / live state */
|
|
5
5
|
on?: boolean;
|
|
6
|
-
/** quiet: an untouched default value — muted words, the thin edge, nothing to find the eye (
|
|
6
|
+
/** quiet: an untouched default value — muted words, the thin edge, nothing to find the eye (docs/reference.md rule 13) */
|
|
7
7
|
muted?: boolean;
|
|
8
8
|
/** a leading signal dot: `a` (the accent signal), `b` (the secondary), or one of the signal set — ok · warn · error · info */
|
|
9
9
|
dot?: 'a' | 'b' | DotTone;
|
|
@@ -13,7 +13,7 @@ export interface DropdownProps extends Omit<ComponentProps<'div'>, 'onChange' |
|
|
|
13
13
|
label?: ReactNode;
|
|
14
14
|
/** right-aligned trigger: the panel grows leftwards (in TopBar actions) */
|
|
15
15
|
end?: boolean;
|
|
16
|
-
/** quiet: the value is still the default — muted words; drop it once the member picks (
|
|
16
|
+
/** quiet: the value is still the default — muted words; drop it once the member picks (docs/reference.md rule 13) */
|
|
17
17
|
muted?: boolean;
|
|
18
18
|
/** MenuItems, each with a `value` */
|
|
19
19
|
children?: ReactNode;
|
package/dist/cardds.css
CHANGED
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
|
|
222
222
|
/* INK: TWO SETS, ONLIGHT AND ONDARK (Lh 2026-10-18: "there are text colours ONLIGHT and ONDARK. When the ground is light, use
|
|
223
223
|
onlight; when the ground is dark, use ondark"). Words and glyphs alike (icons, marks, dots, a check, a knob). Each set holds its
|
|
224
|
-
ink and its muted shade to 4.5:1 on every ground of its side.
|
|
224
|
+
ink and its muted shade to 4.5:1 on every ground of its side. docs/reference.md "Ink follows its ground". */
|
|
225
225
|
--ink-onlight: var(--color-ink, #141414);
|
|
226
226
|
--ink-onlight-muted: var(--_onlight-muted, #575757); /* 4.6:1 on the water note and 4.9 on tone 4's grey, the darkest light grounds */
|
|
227
227
|
--ink-ondark: var(--color-on-brand, #ffffff);
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
marks, dots: currentColor), --card-muted (secondary words), the four signals, --on-accent (the ink on the accent fill, whose
|
|
321
321
|
side is --accent-dark) and --accent-ink (the brand as a glyph). A piece with no fill of its own reads only these, so a dark
|
|
322
322
|
surface turns everything on it to ondark with no rule per piece. A piece with no fill that stands in for a surface (a stat
|
|
323
|
-
tile) takes its ground's side: `--dark: inherit`. inkGrounds() measures it;
|
|
323
|
+
tile) takes its ground's side: `--dark: inherit`. inkGrounds() measures it; docs/reference.md "Ink follows its ground" */
|
|
324
324
|
:where(body, [data-palette], [data-mode], .card, .tile, .modal__drawer, .postcard__front, .postcard__back, .sticky, .post-paper,
|
|
325
325
|
.float-bar__pill, .snackbar__body, .delta, .track, .tile-badge, .avatar, .bubble__body, .map__hint, .sheet--paper > .sheet__body,
|
|
326
326
|
.postcard__band, .track__step, .toggle, .chip) {
|
|
@@ -356,7 +356,7 @@
|
|
|
356
356
|
Apply with <html data-palette="clay"> (or <body>).
|
|
357
357
|
No attribute = wireframe grayscale from tokens.css.
|
|
358
358
|
Each palette overrides role tokens only — components never change.
|
|
359
|
-
A palette sets its grounds, its two ink sets (onlight, ondark;
|
|
359
|
+
A palette sets its grounds, its two ink sets (onlight, ondark; docs/reference.md "Ink follows its ground") and the side of any ground
|
|
360
360
|
that is not the default's (tokens.css: tones 1, 2, 4 and the paper light; tone 3, tone 5 and the brand dark). Each ink set
|
|
361
361
|
holds 4.5:1 on every ground of its side; a tone with words on its 12% tint (a banner, a step bar, today) holds them there too.
|
|
362
362
|
============================================================ */
|
|
@@ -1125,7 +1125,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
|
|
|
1125
1125
|
bottom, the headroom above is the base's (block below).
|
|
1126
1126
|
--flood (with --closed): an open sheet fills the whole screen, over the top bar.
|
|
1127
1127
|
Direct children only, five at most (slots are :nth-child below):
|
|
1128
|
-
first = the back of the stack, last = the front.
|
|
1128
|
+
first = the back of the stack, last = the front. docs/reference.md "Sheet stack
|
|
1129
1129
|
markup". The SheetStack component opens and closes a --tap stack; without it the
|
|
1130
1130
|
stack still renders, it just won't open.
|
|
1131
1131
|
============================================================ */
|
|
@@ -2734,7 +2734,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
|
|
|
2734
2734
|
/* --sm: a small LABEL (a name on a note, a tag in a tight head) — low and tight; never a tap target */
|
|
2735
2735
|
.chip--sm { min-height: 0; gap: var(--chip-sm-gap, var(--sp-1)); padding: var(--chip-sm-pad-y, var(--sp-0)) var(--chip-sm-pad-x, var(--sp-2)); }
|
|
2736
2736
|
.chip--on { background: var(--chip-on-bg, var(--accent)); --dark: var(--accent-dark); color: var(--chip-on-ink, var(--card-ink)); border-color: transparent; }
|
|
2737
|
-
/* muted: an untouched default — the words wash out, the edge stays; emphasis is the difference from the neighbours (
|
|
2737
|
+
/* muted: an untouched default — the words wash out, the edge stays; emphasis is the difference from the neighbours (docs/reference.md 13) */
|
|
2738
2738
|
.chip--muted { color: var(--chip-muted-ink, var(--card-muted)); } /* the chip's own fill's muted words: a muted chip on the dark card is still a light chip */
|
|
2739
2739
|
|
|
2740
2740
|
.chip-row { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
|
|
@@ -2764,7 +2764,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
|
|
|
2764
2764
|
font-size: var(--fs-body);
|
|
2765
2765
|
text-align: left;
|
|
2766
2766
|
}
|
|
2767
|
-
/* muted: the value is still the default (
|
|
2767
|
+
/* muted: the value is still the default (docs/reference.md 13) */
|
|
2768
2768
|
.dropdown--muted .dropdown__btn { color: var(--dropdown-muted-ink, var(--action-muted)); }
|
|
2769
2769
|
.dropdown__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2770
2770
|
.dropdown__btn > .icon { transition: rotate var(--motion-quick) ease; }
|
|
@@ -3028,7 +3028,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
|
|
|
3028
3028
|
--_step: calc(var(--tap-base) * 2 / 3); /* 32 the round of one step */
|
|
3029
3029
|
--_pad: calc((var(--header-h) - var(--_step)) / 2); /* 14 round + its room = the top bar's height; the end rounds sit concentric in the pill */
|
|
3030
3030
|
/* the track lays down the accent fill of where it stands (the brand on a light card, the card's ink on the brand card), so it is a
|
|
3031
|
-
surface of that fill's side; its steps re-point the accent to its ink, as the brand card slot does (
|
|
3031
|
+
surface of that fill's side; its steps re-point the accent to its ink, as the brand card slot does (docs/reference.md rule 10) */
|
|
3032
3032
|
--dark: var(--accent-dark);
|
|
3033
3033
|
list-style: none;
|
|
3034
3034
|
margin: 0;
|
|
@@ -24,7 +24,7 @@ export type InkGround = {
|
|
|
24
24
|
* every glyph drawn as a fill (a dot, a day's dot, the pager's dots, a check's tick, a switch's knob, a strong calendar mark's ring) inside
|
|
25
25
|
* `root`, finds the ground it is really drawn on (each ancestor's fill, from the page down, through every opacity on the way, to the first
|
|
26
26
|
* opaque one and past it) and returns one row per piece: words 4.5:1, large words, icons and glyphs 3:1. Each row names the side its ground
|
|
27
|
-
* declares and the ink set its colour is (
|
|
27
|
+
* declares and the ink set its colour is (docs/reference.md "Ink follows its ground": light ground → onlight, dark ground → ondark). What the browser
|
|
28
28
|
* draws is what is measured, so the project's theme.css, palette and finish are in it. Not measured: a piece on a picture (a `url()` ground
|
|
29
29
|
* is not one colour; a gradient is read as decoration unless it is one colour, a fill laid as an image), a disabled control (WCAG exempts
|
|
30
30
|
* it), a hidden one, words drawn by CSS `content`. Run it where the theme is loaded:
|
package/dist/cards/inkGrounds.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* every glyph drawn as a fill (a dot, a day's dot, the pager's dots, a check's tick, a switch's knob, a strong calendar mark's ring) inside
|
|
4
4
|
* `root`, finds the ground it is really drawn on (each ancestor's fill, from the page down, through every opacity on the way, to the first
|
|
5
5
|
* opaque one and past it) and returns one row per piece: words 4.5:1, large words, icons and glyphs 3:1. Each row names the side its ground
|
|
6
|
-
* declares and the ink set its colour is (
|
|
6
|
+
* declares and the ink set its colour is (docs/reference.md "Ink follows its ground": light ground → onlight, dark ground → ondark). What the browser
|
|
7
7
|
* draws is what is measured, so the project's theme.css, palette and finish are in it. Not measured: a piece on a picture (a `url()` ground
|
|
8
8
|
* is not one colour; a gradient is read as decoration unless it is one colour, a fill laid as an image), a disabled control (WCAG exempts
|
|
9
9
|
* it), a hidden one, words drawn by CSS `content`. Run it where the theme is loaded:
|