@cueplusplus/ui 0.18.1 → 0.19.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 +69 -0
- package/dist/brand/_motif-seed.js +20 -0
- package/dist/brand/gloss-object.d.ts +23 -0
- package/dist/brand/gloss-object.js +108 -0
- package/dist/brand/halftone.d.ts +23 -0
- package/dist/brand/halftone.js +54 -0
- package/dist/brand/index.d.ts +6 -1
- package/dist/brand/motif.d.ts +32 -0
- package/dist/brand/motif.js +71 -0
- package/dist/brand/particle-mark.d.ts +29 -0
- package/dist/brand/particle-mark.js +137 -0
- package/dist/brand/ribbon.d.ts +20 -0
- package/dist/brand/ribbon.js +54 -0
- package/dist/chat/message.js +1 -1
- package/dist/chrome/announcement-bar.d.ts +30 -0
- package/dist/chrome/announcement-bar.js +38 -0
- package/dist/chrome/app-bar.d.ts +4 -1
- package/dist/chrome/app-bar.js +7 -2
- package/dist/chrome/app-shell.js +8 -1
- package/dist/chrome/band.d.ts +3 -1
- package/dist/chrome/band.js +4 -3
- package/dist/chrome/hero.d.ts +61 -0
- package/dist/chrome/hero.js +108 -0
- package/dist/chrome/index.d.ts +6 -1
- package/dist/chrome/index.js +6 -1
- package/dist/chrome/keyword.d.ts +22 -0
- package/dist/chrome/keyword.js +28 -0
- package/dist/chrome/logo-strip.d.ts +23 -0
- package/dist/chrome/logo-strip.js +43 -0
- package/dist/chrome/page-shell.js +13 -1
- package/dist/chrome/stat-band.d.ts +32 -0
- package/dist/chrome/stat-band.js +39 -0
- package/dist/configurator/_overrides.js +7 -4
- package/dist/dmx/channel-matrix.js +5 -3
- package/dist/dmx/dmx-strip.js +5 -3
- package/dist/elements/animated-number.js +4 -1
- package/dist/elements/replay.d.ts +1 -1
- package/dist/elements/replay.js +5 -2
- package/dist/elements/scroll-anchor.js +4 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +14 -2
- package/dist/instruments/index.js +1 -1
- package/dist/instruments/stat.js +1 -1
- package/dist/instruments/terminal-frame.js +5 -2
- package/dist/layout/grid.js +4 -2
- package/dist/layout/link.d.ts +1 -1
- package/dist/layout/link.js +1 -1
- package/dist/layout/preview.js +4 -188
- package/dist/layout/sidebar.js +88 -52
- package/dist/overlays/_surface.d.ts +2 -2
- package/dist/primitives/button.d.ts +1 -1
- package/dist/primitives/button.js +23 -4
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/primitives/chip.js +62 -6
- package/dist/styles.css +26 -0
- package/dist/system/_paint-glass.js +1 -1
- package/dist/system/_paint-glow.js +1 -1
- package/dist/system/_scoped-pairing.js +18 -0
- package/dist/system/_stage-scope.js +199 -0
- package/dist/system/_storage.js +25 -0
- package/dist/system/_style-accordion-rule.js +1 -1
- package/dist/system/_style-app-bar.js +2 -2
- package/dist/system/_style-body-weight.js +1 -1
- package/dist/system/_style-check.js +1 -1
- package/dist/system/_style-chip.js +1 -1
- package/dist/system/_style-control.js +2 -2
- package/dist/system/_style-eyebrow.js +1 -1
- package/dist/system/_style-footer-rule.js +2 -2
- package/dist/system/_style-group-label.js +7 -3
- package/dist/system/_style-hero-title.js +41 -0
- package/dist/system/_style-kbd.js +1 -1
- package/dist/system/_style-label-case.js +2 -2
- package/dist/system/_style-label-ink.js +12 -5
- package/dist/system/_style-label-weight.js +2 -2
- package/dist/system/_style-link.js +1 -1
- package/dist/system/_style-menu.js +1 -1
- package/dist/system/_style-nav-voice.js +2 -2
- package/dist/system/_style-page-title.js +3 -3
- package/dist/system/_style-segmented-control.js +3 -3
- package/dist/system/_style-skeleton.js +1 -1
- package/dist/system/_style-tab.js +1 -1
- package/dist/system/_style-title.js +1 -1
- package/dist/system/font-scope.d.ts +38 -0
- package/dist/system/font-scope.js +69 -0
- package/dist/system/index.d.ts +3 -1
- package/dist/system/index.js +3 -1
- package/dist/system/portal.js +7 -1
- package/dist/system/still.d.ts +32 -0
- package/dist/system/still.js +47 -0
- package/dist/system/theme-provider.js +7 -4
- package/manifest/components/alert-dialog.json +1 -1
- package/manifest/components/announcement-bar.json +82 -0
- package/manifest/components/app-bar.json +3 -2
- package/manifest/components/app-shell.json +3 -0
- package/manifest/components/autocomplete.json +1 -0
- package/manifest/components/band.json +2 -1
- package/manifest/components/bento.json +12 -12
- package/manifest/components/button.json +1 -0
- package/manifest/components/channel-matrix.json +1 -0
- package/manifest/components/chart-tooltip-content.json +1 -0
- package/manifest/components/checkbox-group.json +1 -1
- package/manifest/components/checkbox.json +1 -1
- package/manifest/components/chip.json +1 -0
- package/manifest/components/combobox.json +1 -0
- package/manifest/components/command-palette.json +1 -0
- package/manifest/components/context-menu.json +1 -1
- package/manifest/components/density.json +6 -2
- package/manifest/components/dialog.json +1 -1
- package/manifest/components/dmx-bar.json +1 -1
- package/manifest/components/dmx-strip.json +1 -1
- package/manifest/components/drawer.json +1 -1
- package/manifest/components/dropdown-menu.json +1 -0
- package/manifest/components/font-scope.json +81 -0
- package/manifest/components/footer.json +0 -1
- package/manifest/components/gloss-object.json +81 -0
- package/manifest/components/grid.json +6 -6
- package/manifest/components/halftone.json +79 -0
- package/manifest/components/hero.json +204 -0
- package/manifest/components/hover-card.json +1 -1
- package/manifest/components/kbd.json +1 -0
- package/manifest/components/keyword.json +67 -0
- package/manifest/components/ledger.json +4 -4
- package/manifest/components/logo-strip.json +93 -0
- package/manifest/components/markdown-text.json +2 -2
- package/manifest/components/menubar.json +1 -1
- package/manifest/components/motif.json +90 -0
- package/manifest/components/multi-select.json +1 -0
- package/manifest/components/navigation-menu.json +1 -0
- package/manifest/components/page-shell.json +5 -0
- package/manifest/components/particle-mark.json +75 -0
- package/manifest/components/popover.json +1 -1
- package/manifest/components/preview.json +9 -4
- package/manifest/components/radio-group.json +0 -1
- package/manifest/components/radio.json +0 -1
- package/manifest/components/ribbon.json +65 -0
- package/manifest/components/scrollable-tabs-list.json +1 -0
- package/manifest/components/segmented-control.json +1 -0
- package/manifest/components/sheet.json +1 -1
- package/manifest/components/sidebar.json +1 -0
- package/manifest/components/skeleton.json +1 -0
- package/manifest/components/stack.json +4 -4
- package/manifest/components/stat-band.json +68 -0
- package/manifest/components/stat.json +1 -1
- package/manifest/components/still-provider.json +60 -0
- package/manifest/components/switch.json +0 -1
- package/manifest/components/table.json +1 -1
- package/manifest/components/tabs.json +1 -0
- package/manifest/components/tags-input.json +1 -0
- package/manifest/components/theme-configurator.json +1 -0
- package/manifest/components/theme-provider.json +9 -4
- package/manifest/components/toast.json +1 -0
- package/manifest/components/tooltip.json +1 -1
- package/manifest/fixtures.json +18 -0
- package/manifest/manifest.json +267 -55
- package/manifest/tokens.json +91 -3
- package/package.json +4 -4
- package/dist/system/_paint-ground-pattern.js +0 -30
|
@@ -171,7 +171,6 @@
|
|
|
171
171
|
"--cue-control-sm",
|
|
172
172
|
"--cue-fg",
|
|
173
173
|
"--cue-fg-muted",
|
|
174
|
-
"--cue-fg-subtle",
|
|
175
174
|
"--cue-font-mono",
|
|
176
175
|
"--cue-leading-ui",
|
|
177
176
|
"--cue-paint-rim-width",
|
|
@@ -200,6 +199,7 @@
|
|
|
200
199
|
"--cue-style-body-size",
|
|
201
200
|
"--cue-style-body-weight",
|
|
202
201
|
"--cue-style-control-face",
|
|
202
|
+
"--cue-style-control-radius",
|
|
203
203
|
"--cue-style-dialog-radius",
|
|
204
204
|
"--cue-style-display-variation",
|
|
205
205
|
"--cue-style-group-label-ink",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "AnnouncementBar",
|
|
3
|
+
"slug": "announcement-bar",
|
|
4
|
+
"group": "chrome",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "One line across the top of a page, and one link: a launch, a change, a date.\n\nFilled in the accent, centred, and as short as its line. It is not a\nnotification: it says the same thing to every reader and cannot be dismissed,\nso use `Toast` or `Alert` for anything that is about the reader.\n\nStatic markup — no `\"use client\"`.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "children",
|
|
12
|
+
"type": "ReactNode",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The one line.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "node",
|
|
18
|
+
"fixture": "children.text"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "action",
|
|
23
|
+
"type": "AnnouncementBarAction",
|
|
24
|
+
"required": false,
|
|
25
|
+
"defaultValue": null,
|
|
26
|
+
"description": "One link, read as the bar's action.",
|
|
27
|
+
"control": {
|
|
28
|
+
"kind": "opaque"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"typeReferences": [
|
|
33
|
+
"React.ComponentPropsWithoutRef<\"div\">"
|
|
34
|
+
],
|
|
35
|
+
"subcomponents": [],
|
|
36
|
+
"parts": [],
|
|
37
|
+
"variants": {},
|
|
38
|
+
"defaultVariants": {},
|
|
39
|
+
"tokensUsed": [
|
|
40
|
+
"--cue-accent-fill",
|
|
41
|
+
"--cue-accent-fill-fg",
|
|
42
|
+
"--cue-space-2",
|
|
43
|
+
"--cue-space-3",
|
|
44
|
+
"--cue-space-5",
|
|
45
|
+
"--cue-text-ui"
|
|
46
|
+
],
|
|
47
|
+
"summary": "One line across the top of a page, and one link: a launch, a change, a date.",
|
|
48
|
+
"examples": [
|
|
49
|
+
{
|
|
50
|
+
"title": "Usage",
|
|
51
|
+
"code": "<AnnouncementBar action={{ label: \"Learn more\", href: \"/changelog\" }}>Plans for teams are here.</AnnouncementBar>",
|
|
52
|
+
"language": "tsx"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"status": "stable",
|
|
56
|
+
"url": "/docs/components/announcement-bar",
|
|
57
|
+
"mdUrl": "/docs/components/announcement-bar.md",
|
|
58
|
+
"jsonUrl": "/r/components/announcement-bar.json",
|
|
59
|
+
"whenToUse": [
|
|
60
|
+
"A product page's launch or pricing news, shown to every reader.",
|
|
61
|
+
"Above a `SiteNav`-style `AppBar` on a marketing page."
|
|
62
|
+
],
|
|
63
|
+
"whenNotToUse": [
|
|
64
|
+
"Anything about the reader or their account. Use `Alert` or `Toast`.",
|
|
65
|
+
"Something the reader must dismiss or act on. This bar cannot be dismissed."
|
|
66
|
+
],
|
|
67
|
+
"commonMistakes": [
|
|
68
|
+
"Putting more than one link in it. It is one line and one action."
|
|
69
|
+
],
|
|
70
|
+
"specimens": [
|
|
71
|
+
{
|
|
72
|
+
"title": "AnnouncementBar",
|
|
73
|
+
"group": "chrome",
|
|
74
|
+
"components": [
|
|
75
|
+
"AnnouncementBar"
|
|
76
|
+
],
|
|
77
|
+
"code": "<AnnouncementBar action={{ label: \"Read the release notes\", href: \"#\" }}>\n The structural Looks are here.\n</AnnouncementBar>",
|
|
78
|
+
"note": "One line and one link, above the page's own chrome.",
|
|
79
|
+
"interaction": "the link is an ordinary anchor."
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
"name": "align",
|
|
88
88
|
"type": "\"center\" | \"end\" | \"start\"",
|
|
89
89
|
"required": false,
|
|
90
|
-
"defaultValue":
|
|
91
|
-
"description": "Where the links sit when they are narrower than the space.
|
|
90
|
+
"defaultValue": null,
|
|
91
|
+
"description": "Where the links sit when they are narrower than the space. Omitted, the style\nset's `style-nav-align` decides, and without one it is `\"end\"`.",
|
|
92
92
|
"control": {
|
|
93
93
|
"kind": "enum",
|
|
94
94
|
"members": [
|
|
@@ -290,6 +290,7 @@
|
|
|
290
290
|
"--cue-style-chrome-rule-style",
|
|
291
291
|
"--cue-style-focus-width",
|
|
292
292
|
"--cue-style-hover-ink",
|
|
293
|
+
"--cue-style-nav-align",
|
|
293
294
|
"--cue-style-nav-case",
|
|
294
295
|
"--cue-style-nav-face",
|
|
295
296
|
"--cue-style-nav-hover-ground",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"importPath": "@cueplusplus/ui",
|
|
6
6
|
"peerDependencies": [],
|
|
7
7
|
"clientOnly": false,
|
|
8
|
-
"description": "A full-bleed horizontal section: the page's rhythm, its separation, and a\ncolumn at the measure.\n\nThis is `Footer`'s recipe with the footer taken out of it — a `w-full`\nelement, a rule running edge to edge, and a centred `Container` inside so the\nline reaches the window while the words stop at the measure. `Footer` is\nbuilt on this rather than beside it; the recipe exists once.\n\nEvery dimension it spends belongs to the style axis, so the same markup\ncomposes differently under `[data-style]` without a prop changing: the\nvertical rhythm is `--cue-band-y` (one `--cue-space-7` with no set, doubled\nunder `editorial`, trebled under `marketing` and `graphite`), the column is\n`--cue-measure-prose` unless `width` names a fixed rung, and the rule and the\nground are `--cue-band-rule` and `--cue-band-ground`. Read `separation`'s own\ndocumentation before choosing one, because two of the four can come out to\nnothing and they do not vanish symmetrically: `--cue-band-ground` is\n`transparent` on `:root` and on every set but `marketing` and `kiln`, so a\n`\"ground\"` paints nothing on most pages, while `--cue-band-rule` is `0px`\nunder those two alone
|
|
8
|
+
"description": "A full-bleed horizontal section: the page's rhythm, its separation, and a\ncolumn at the measure.\n\nThis is `Footer`'s recipe with the footer taken out of it — a `w-full`\nelement, a rule running edge to edge, and a centred `Container` inside so the\nline reaches the window while the words stop at the measure. `Footer` is\nbuilt on this rather than beside it; the recipe exists once.\n\nEvery dimension it spends belongs to the style axis, so the same markup\ncomposes differently under `[data-style]` without a prop changing: the\nvertical rhythm is `--cue-band-y` (one `--cue-space-7` with no set, doubled\nunder `editorial`, trebled under `marketing` and `graphite`), the column is\n`--cue-measure-prose` unless `width` names a fixed rung, and the rule and the\nground are `--cue-band-rule` and `--cue-band-ground`. Read `separation`'s own\ndocumentation before choosing one, because two of the four can come out to\nnothing and they do not vanish symmetrically: `--cue-band-ground` is\n`transparent` on `:root` and on every set but `marketing` and `kiln`, so a\n`\"ground\"` paints nothing on most pages, while `--cue-band-rule` is `0px`\nunder those two and under `ledger` and `prism`, which separate bands by\nrhythm alone (and `prism`'s by a ground image, `style-band-ground-image`).\nBoth are deliberate and nothing warns.\n\n**Two substitution boundaries, because `--cue-band-y` is a `calc()` resolved\nat the element that declares it.** A `<Density>` island nested inside a\nstyled page moves every `--cue-space-*` and the band rhythm does **not**\nfollow it — the island inherits the rhythm already resolved above. Restate\nthe set on the island (`<Density density=\"compact\" styleSet=\"editorial\">`) to\nre-resolve it against that island's rung. Likewise a hand-stamped\n`[data-theme]` element under a marketing page paints the **outer** theme's\n`--cue-surface-1` through an already-resolved `--cue-band-ground`, and its\nrule in the outer theme's border. The library's own theme islands do not: a\nnested `ThemeProvider` that names a theme or a mode, and a `Preview` stage\nwith a theme, a mode or a pairing, restate the set in force beside it, so a\nband inside one paints that island's ground and rule.\n\nIt renders a `<section>`, which is not a landmark until it has an accessible\nname — so a band with a heading should carry `aria-labelledby` pointing at\nit, and a band without one costs the document nothing.\n\nStatic markup — no `\"use client\"`.",
|
|
9
9
|
"props": [
|
|
10
10
|
{
|
|
11
11
|
"name": "separation",
|
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
"--cue-paint-texture-blend",
|
|
86
86
|
"--cue-paint-texture-opacity",
|
|
87
87
|
"--cue-paint-texture-size",
|
|
88
|
+
"--cue-style-band-ground-image",
|
|
88
89
|
"--cue-style-band-width"
|
|
89
90
|
],
|
|
90
91
|
"summary": "A full-bleed horizontal section: a rule to the window's edge, a column at the measure.",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"control": {
|
|
28
28
|
"kind": "enum",
|
|
29
29
|
"members": [
|
|
30
|
-
4,
|
|
31
30
|
2,
|
|
32
|
-
3
|
|
31
|
+
3,
|
|
32
|
+
4
|
|
33
33
|
],
|
|
34
34
|
"min": 2,
|
|
35
35
|
"max": 4
|
|
@@ -37,17 +37,17 @@
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "rows",
|
|
40
|
-
"type": "
|
|
40
|
+
"type": "1 | 4 | 2 | 3",
|
|
41
41
|
"required": false,
|
|
42
42
|
"defaultValue": null,
|
|
43
43
|
"description": "How many rows to declare from `sm` up.\n\nOnly worth setting where a tile spans rows: a `rowSpan` over implicit\ntracks sizes itself to the tile's own content, which is not a span.",
|
|
44
44
|
"control": {
|
|
45
45
|
"kind": "enum",
|
|
46
46
|
"members": [
|
|
47
|
-
4,
|
|
48
47
|
1,
|
|
49
48
|
2,
|
|
50
|
-
3
|
|
49
|
+
3,
|
|
50
|
+
4
|
|
51
51
|
],
|
|
52
52
|
"min": 1,
|
|
53
53
|
"max": 4
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"name": "gap",
|
|
68
|
-
"type": "0 |
|
|
68
|
+
"type": "0 | 1 | 4 | 8 | 2 | 3 | 5 | 6 | 7",
|
|
69
69
|
"required": false,
|
|
70
70
|
"defaultValue": "4",
|
|
71
71
|
"description": "Which rung of the density space ladder to spend between tiles. Defaults to `4`.",
|
|
@@ -73,14 +73,14 @@
|
|
|
73
73
|
"kind": "enum",
|
|
74
74
|
"members": [
|
|
75
75
|
0,
|
|
76
|
-
4,
|
|
77
|
-
8,
|
|
78
76
|
1,
|
|
79
77
|
2,
|
|
80
78
|
3,
|
|
79
|
+
4,
|
|
81
80
|
5,
|
|
82
81
|
6,
|
|
83
|
-
7
|
|
82
|
+
7,
|
|
83
|
+
8
|
|
84
84
|
],
|
|
85
85
|
"min": 0,
|
|
86
86
|
"max": 8
|
|
@@ -109,17 +109,17 @@
|
|
|
109
109
|
"props": [
|
|
110
110
|
{
|
|
111
111
|
"name": "span",
|
|
112
|
-
"type": "
|
|
112
|
+
"type": "1 | 4 | 2 | 3",
|
|
113
113
|
"required": false,
|
|
114
114
|
"defaultValue": null,
|
|
115
115
|
"description": "How many columns to cover. Clamped by the container to its own `cols`.",
|
|
116
116
|
"control": {
|
|
117
117
|
"kind": "enum",
|
|
118
118
|
"members": [
|
|
119
|
-
4,
|
|
120
119
|
1,
|
|
121
120
|
2,
|
|
122
|
-
3
|
|
121
|
+
3,
|
|
122
|
+
4
|
|
123
123
|
],
|
|
124
124
|
"min": 1,
|
|
125
125
|
"max": 4
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"--cue-danger-fg",
|
|
37
37
|
"--cue-fg",
|
|
38
38
|
"--cue-fg-muted",
|
|
39
|
-
"--cue-fg-subtle",
|
|
40
39
|
"--cue-focus",
|
|
41
40
|
"--cue-focus-ring",
|
|
42
41
|
"--cue-font-mono",
|
|
@@ -60,6 +59,7 @@
|
|
|
60
59
|
"--cue-style-choice-gap",
|
|
61
60
|
"--cue-style-control-face",
|
|
62
61
|
"--cue-style-control-label-leading",
|
|
62
|
+
"--cue-style-control-radius",
|
|
63
63
|
"--cue-style-disabled-edge",
|
|
64
64
|
"--cue-style-disabled-fill",
|
|
65
65
|
"--cue-style-disabled-ink",
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
"--cue-danger-fg",
|
|
62
62
|
"--cue-fg",
|
|
63
63
|
"--cue-fg-muted",
|
|
64
|
-
"--cue-fg-subtle",
|
|
65
64
|
"--cue-focus",
|
|
66
65
|
"--cue-focus-ring",
|
|
67
66
|
"--cue-font-mono",
|
|
@@ -85,6 +84,7 @@
|
|
|
85
84
|
"--cue-style-choice-gap",
|
|
86
85
|
"--cue-style-control-face",
|
|
87
86
|
"--cue-style-control-label-leading",
|
|
87
|
+
"--cue-style-control-radius",
|
|
88
88
|
"--cue-style-disabled-edge",
|
|
89
89
|
"--cue-style-disabled-fill",
|
|
90
90
|
"--cue-style-disabled-ink",
|
|
@@ -92,7 +92,6 @@
|
|
|
92
92
|
"--cue-control-sm",
|
|
93
93
|
"--cue-fg",
|
|
94
94
|
"--cue-fg-muted",
|
|
95
|
-
"--cue-fg-subtle",
|
|
96
95
|
"--cue-font-mono",
|
|
97
96
|
"--cue-leading-ui",
|
|
98
97
|
"--cue-paint-rim-width",
|
|
@@ -119,6 +118,7 @@
|
|
|
119
118
|
"--cue-style-body-size",
|
|
120
119
|
"--cue-style-body-weight",
|
|
121
120
|
"--cue-style-control-face",
|
|
121
|
+
"--cue-style-control-radius",
|
|
122
122
|
"--cue-style-display-variation",
|
|
123
123
|
"--cue-style-group-label-ink",
|
|
124
124
|
"--cue-style-group-label-pad",
|
|
@@ -48,13 +48,14 @@
|
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"name": "styleSet",
|
|
51
|
-
"type": "\"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\"",
|
|
51
|
+
"type": "\"command\" | \"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\" | \"ledger\" | \"monolith\" | \"prism\"",
|
|
52
52
|
"required": false,
|
|
53
53
|
"defaultValue": null,
|
|
54
54
|
"description": "A style set for this subtree: `console`, `editorial`, `marketing` or\n`graphite`.\n\nOptional, and **absent means inherit** — an island that names none stamps no\n`data-style` and passes the ambient set straight through, exactly as a bare\n`<Density>` does today. Naming one is what makes this the library's island\nform of the fourth axis, and there are two reasons to reach for it:\n\n- `console` inside a page that is not console. That is the whole job of the\n default set: it restates the `:root` defaults, so a subtree stamped with\n it renders the ordinary look inside a page under any other set.\n- Moving the band rhythm with the rung. `--cue-band-y` is\n `calc(var(--cue-space-7) * 2)` declared on the `[data-style]` element, and\n a custom property's `var()` references are substituted where they are\n declared — so a nested density island moves `--cue-space-*` but inherits\n the rhythm already resolved above it. Restating the set here re-resolves\n it against this island's rung, which is how a denser island gets a\n proportionally tighter band instead of the outer one's.\n\nThe library restates the set for you where an island changes what a set's\nvalues read besides the rung — the theme's inks, the pairing's faces: a\nnested `ThemeProvider` that names a theme or a mode, and a `Preview` stage\nwith a theme, a mode or a pairing, stamp the set and the pack in force\nbeside it. This island changes only the rung, so it does not, and the\nrhythm above stays the opt-in the second bullet describes.",
|
|
55
55
|
"control": {
|
|
56
56
|
"kind": "enum",
|
|
57
57
|
"members": [
|
|
58
|
+
"command",
|
|
58
59
|
"console",
|
|
59
60
|
"editorial",
|
|
60
61
|
"marketing",
|
|
@@ -62,7 +63,10 @@
|
|
|
62
63
|
"tender",
|
|
63
64
|
"zine",
|
|
64
65
|
"kiln",
|
|
65
|
-
"porcelain"
|
|
66
|
+
"porcelain",
|
|
67
|
+
"ledger",
|
|
68
|
+
"monolith",
|
|
69
|
+
"prism"
|
|
66
70
|
]
|
|
67
71
|
}
|
|
68
72
|
},
|
|
@@ -166,7 +166,6 @@
|
|
|
166
166
|
"--cue-control-sm",
|
|
167
167
|
"--cue-fg",
|
|
168
168
|
"--cue-fg-muted",
|
|
169
|
-
"--cue-fg-subtle",
|
|
170
169
|
"--cue-font-mono",
|
|
171
170
|
"--cue-leading-ui",
|
|
172
171
|
"--cue-paint-rim-width",
|
|
@@ -195,6 +194,7 @@
|
|
|
195
194
|
"--cue-style-body-size",
|
|
196
195
|
"--cue-style-body-weight",
|
|
197
196
|
"--cue-style-control-face",
|
|
197
|
+
"--cue-style-control-radius",
|
|
198
198
|
"--cue-style-dialog-pad",
|
|
199
199
|
"--cue-style-dialog-radius",
|
|
200
200
|
"--cue-style-display-variation",
|
|
@@ -64,7 +64,6 @@
|
|
|
64
64
|
"--cue-data-ground",
|
|
65
65
|
"--cue-fg",
|
|
66
66
|
"--cue-fg-muted",
|
|
67
|
-
"--cue-fg-subtle",
|
|
68
67
|
"--cue-font-mono",
|
|
69
68
|
"--cue-leading-ui",
|
|
70
69
|
"--cue-paint-rim-width",
|
|
@@ -91,6 +90,7 @@
|
|
|
91
90
|
"--cue-style-body-size",
|
|
92
91
|
"--cue-style-body-weight",
|
|
93
92
|
"--cue-style-control-face",
|
|
93
|
+
"--cue-style-control-radius",
|
|
94
94
|
"--cue-style-display-variation",
|
|
95
95
|
"--cue-style-group-label-ink",
|
|
96
96
|
"--cue-style-group-label-pad",
|
|
@@ -74,7 +74,6 @@
|
|
|
74
74
|
"--cue-data-ground",
|
|
75
75
|
"--cue-fg",
|
|
76
76
|
"--cue-fg-muted",
|
|
77
|
-
"--cue-fg-subtle",
|
|
78
77
|
"--cue-font-mono",
|
|
79
78
|
"--cue-leading-ui",
|
|
80
79
|
"--cue-paint-rim-width",
|
|
@@ -101,6 +100,7 @@
|
|
|
101
100
|
"--cue-style-body-size",
|
|
102
101
|
"--cue-style-body-weight",
|
|
103
102
|
"--cue-style-control-face",
|
|
103
|
+
"--cue-style-control-radius",
|
|
104
104
|
"--cue-style-display-variation",
|
|
105
105
|
"--cue-style-group-label-ink",
|
|
106
106
|
"--cue-style-group-label-pad",
|
|
@@ -160,7 +160,6 @@
|
|
|
160
160
|
"--cue-control-sm",
|
|
161
161
|
"--cue-fg",
|
|
162
162
|
"--cue-fg-muted",
|
|
163
|
-
"--cue-fg-subtle",
|
|
164
163
|
"--cue-font-mono",
|
|
165
164
|
"--cue-leading-ui",
|
|
166
165
|
"--cue-paint-rim-width",
|
|
@@ -189,6 +188,7 @@
|
|
|
189
188
|
"--cue-style-body-size",
|
|
190
189
|
"--cue-style-body-weight",
|
|
191
190
|
"--cue-style-control-face",
|
|
191
|
+
"--cue-style-control-radius",
|
|
192
192
|
"--cue-style-dialog-radius",
|
|
193
193
|
"--cue-style-display-variation",
|
|
194
194
|
"--cue-style-group-label-ink",
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "FontScope",
|
|
3
|
+
"slug": "font-scope",
|
|
4
|
+
"group": "system",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A subtree set in another type pairing — and everything it opens with it.\n\n`ThemeProvider`'s `font` is root-level only: the pairing has no island, and a\nnested provider forwards it to the root. `data-font` on a `<div>` is enough\nfor the subtree's own tokens, and nothing more: a dialog or menu opened inside\nit mounts on `<body>`, stamped from the root's pairing, and unclassed text\nkeeps the family `<body>` computed, because a computed family does not follow\na token. `FontScope` does all three: it stamps `data-font`, asks for the\nfamily again on its own element, and republishes the pairing so every portal\nopened inside it is stamped with it and asks for the family too. It is what\n`Preview` does for a stage that names a pairing, as a component of its own.\n\nIt never calls `setFont`, so the root's pairing — and the visitor's stored\none — never moves. A gallery frame that draws a page in a Look of its own is\nthe case it exists for (structural Looks, spec 2026-10-02 §6.2).\n\nThe set and pack in force around it are restated beside `data-font`, once it\nmay restate, because their names read the pairing and a custom property's\n`var()`s are substituted where it is declared.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "font",
|
|
12
|
+
"type": "\"source\" | \"system\" | \"geist\" | \"geist-mono\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\" | \"inter-source\" | \"dm\" | \"calsans\" | \"fraunces-mono\"",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The pairing this subtree is set in.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "enum",
|
|
18
|
+
"members": [
|
|
19
|
+
"source",
|
|
20
|
+
"system",
|
|
21
|
+
"geist",
|
|
22
|
+
"geist-mono",
|
|
23
|
+
"inter",
|
|
24
|
+
"plex",
|
|
25
|
+
"roboto",
|
|
26
|
+
"apple",
|
|
27
|
+
"office",
|
|
28
|
+
"inter-source",
|
|
29
|
+
"dm",
|
|
30
|
+
"calsans",
|
|
31
|
+
"fraunces-mono"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "children",
|
|
37
|
+
"type": "ReactNode",
|
|
38
|
+
"required": true,
|
|
39
|
+
"defaultValue": null,
|
|
40
|
+
"description": "What is set in it. Every overlay opened inside it is set in it too.",
|
|
41
|
+
"control": {
|
|
42
|
+
"kind": "node",
|
|
43
|
+
"fixture": "children.text"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"typeReferences": [
|
|
48
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
49
|
+
],
|
|
50
|
+
"subcomponents": [],
|
|
51
|
+
"parts": [],
|
|
52
|
+
"variants": {},
|
|
53
|
+
"defaultVariants": {},
|
|
54
|
+
"tokensUsed": [
|
|
55
|
+
"--cue-font-sans"
|
|
56
|
+
],
|
|
57
|
+
"summary": "A subtree set in another type pairing, and every dialog or menu it opens with it, without moving the root's.",
|
|
58
|
+
"examples": [
|
|
59
|
+
{
|
|
60
|
+
"title": "Usage",
|
|
61
|
+
"code": "<FontScope font=\"inter-source\">\n <Dialog.Root>…</Dialog.Root>\n</FontScope>",
|
|
62
|
+
"language": "tsx"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"status": "stable",
|
|
66
|
+
"url": "/docs/components/font-scope",
|
|
67
|
+
"mdUrl": "/docs/components/font-scope.md",
|
|
68
|
+
"jsonUrl": "/r/components/font-scope.json",
|
|
69
|
+
"whenToUse": [
|
|
70
|
+
"A frame or specimen that draws a page in a Look of its own, where the pairing has to reach its overlays too.",
|
|
71
|
+
"A picker row or a comparison that shows one pairing beside the page's."
|
|
72
|
+
],
|
|
73
|
+
"whenNotToUse": [
|
|
74
|
+
"Changing the page's own pairing. That is `ThemeProvider`'s `font`, at the root, or its `setFont`.",
|
|
75
|
+
"A heading in another face. A class on the element is enough; a scope re-sets everything under it."
|
|
76
|
+
],
|
|
77
|
+
"commonMistakes": [
|
|
78
|
+
"Stamping `data-font` on a `<div>` and expecting a dialog opened inside it to follow. The dialog mounts on `<body>`; only the scope carries the pairing to it.",
|
|
79
|
+
"Passing `font` to a nested `ThemeProvider`. The pairing is root-level there, and a nested provider forwards it to the root."
|
|
80
|
+
]
|
|
81
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GlossObject",
|
|
3
|
+
"slug": "gloss-object",
|
|
4
|
+
"group": "brand",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "A glossy, iridescent object for a marketing hero — the chrome-ring and gloss\nlettermark look (spec 2026-10-02 §3.4). Drawn with layered radial and linear\ngradients of the theme's accent against the foreground's mix, plus a specular\nhighlight in the accent's own ink (`--cue-accent-fg`), so it is the Look's own colour and never a copied render.\nDecorative: hidden from assistive technology.\n\nStatic markup — no `\"use client\"`.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "shape",
|
|
12
|
+
"type": "\"mark\" | \"torus\" | \"knot\"",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "torus",
|
|
15
|
+
"description": "The object: a ring, a knot of two rings, or a rounded mark. Defaults to `\"torus\"`.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "enum",
|
|
18
|
+
"members": [
|
|
19
|
+
"mark",
|
|
20
|
+
"torus",
|
|
21
|
+
"knot"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "seed",
|
|
27
|
+
"type": "number",
|
|
28
|
+
"required": false,
|
|
29
|
+
"defaultValue": "1",
|
|
30
|
+
"description": "Tilts the highlight. Defaults to `1`.",
|
|
31
|
+
"control": {
|
|
32
|
+
"kind": "number"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"typeReferences": [
|
|
37
|
+
"React.SVGProps<SVGSVGElement>"
|
|
38
|
+
],
|
|
39
|
+
"subcomponents": [],
|
|
40
|
+
"parts": [],
|
|
41
|
+
"variants": {},
|
|
42
|
+
"defaultVariants": {},
|
|
43
|
+
"tokensUsed": [
|
|
44
|
+
"--cue-accent",
|
|
45
|
+
"--cue-accent-fg",
|
|
46
|
+
"--cue-fg"
|
|
47
|
+
],
|
|
48
|
+
"summary": "A glossy, iridescent object — a ring, two rings or a rounded mark — in the theme's accent.",
|
|
49
|
+
"examples": [
|
|
50
|
+
{
|
|
51
|
+
"title": "Usage",
|
|
52
|
+
"code": "<GlossObject shape=\"knot\" className=\"h-48 w-48\" />",
|
|
53
|
+
"language": "tsx"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"status": "stable",
|
|
57
|
+
"url": "/docs/components/gloss-object",
|
|
58
|
+
"mdUrl": "/docs/components/gloss-object.md",
|
|
59
|
+
"jsonUrl": "/r/components/gloss-object.json",
|
|
60
|
+
"whenToUse": [
|
|
61
|
+
"A marketing hero's centrepiece, or art between sections."
|
|
62
|
+
],
|
|
63
|
+
"whenNotToUse": [
|
|
64
|
+
"Icons or small UI marks. It is a hero-scale decoration."
|
|
65
|
+
],
|
|
66
|
+
"commonMistakes": [
|
|
67
|
+
"Expecting a 3D render. It is layered gradients, drawn in the Look's own colour."
|
|
68
|
+
],
|
|
69
|
+
"specimens": [
|
|
70
|
+
{
|
|
71
|
+
"title": "GlossObject",
|
|
72
|
+
"group": "brand",
|
|
73
|
+
"components": [
|
|
74
|
+
"GlossObject"
|
|
75
|
+
],
|
|
76
|
+
"code": "<Specimens>\n {([\"torus\", \"knot\", \"mark\"] as const).map((shape) => (\n <Specimen key={shape} label={shape}>\n <GlossObject shape={shape} className=\"size-40\" />\n </Specimen>\n ))}\n</Specimens>",
|
|
77
|
+
"note": "A glossy object of layered gradients over an authored outline, lit in the accent.",
|
|
78
|
+
"interaction": "none."
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|