@cueplusplus/ui 0.12.0 → 0.14.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 +305 -0
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +2 -19
- package/dist/agent-runtime/tool-call-card.js +2 -2
- package/dist/chat/ask-box.js +2 -2
- package/dist/chat/composer.js +1 -1
- package/dist/chat/message.js +1 -1
- package/dist/chrome/_band.js +54 -0
- package/dist/chrome/band.d.ts +106 -0
- package/dist/chrome/band.js +97 -0
- package/dist/chrome/empty-state.js +1 -1
- package/dist/chrome/footer.d.ts +13 -0
- package/dist/chrome/footer.js +17 -2
- package/dist/chrome/index.d.ts +2 -1
- package/dist/chrome/index.js +2 -1
- package/dist/chrome/navigation-menu.js +1 -1
- package/dist/chrome/page-shell.js +4 -4
- package/dist/configurator/export-dialog.js +1 -1
- package/dist/configurator/panel-sections.js +1 -1
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/agent-handoff.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chat-panel.js +1 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +2 -2
- package/dist/elements/comparison-card.js +1 -1
- package/dist/elements/confidence-marker.js +1 -1
- package/dist/elements/conversation-search.js +1 -1
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/document-reference.js +1 -1
- package/dist/elements/edit-message.js +1 -1
- package/dist/elements/elicitation-form.js +1 -1
- package/dist/elements/guardrail-notice.js +1 -1
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +2 -2
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/message-branches.js +1 -1
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/prompt-library.js +1 -1
- package/dist/elements/quote-reply.js +2 -2
- package/dist/elements/read-aloud.js +1 -1
- package/dist/elements/reasoning-panel.js +1 -1
- package/dist/elements/recommendation-card.js +1 -1
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +1 -1
- package/dist/elements/settings-panel.js +1 -1
- package/dist/elements/shared-conversation.js +1 -1
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/stopped-run.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/tool-error.js +1 -1
- package/dist/elements/voice-conversation.js +1 -1
- package/dist/forms/textarea.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -2
- package/dist/instruments/code-block.js +1 -1
- package/dist/instruments/progress.d.ts +19 -3
- package/dist/instruments/progress.js +19 -1
- package/dist/instruments/terminal-frame.js +1 -1
- package/dist/layout/_collapse.js +1 -1
- package/dist/layout/card.js +1 -1
- package/dist/layout/container.js +3 -3
- package/dist/layout/frames.d.ts +19 -1
- package/dist/layout/frames.js +21 -7
- package/dist/layout/index.d.ts +2 -2
- package/dist/layout/preview.d.ts +29 -9
- package/dist/layout/preview.js +38 -17
- package/dist/overlays/_surface.d.ts +1 -1
- package/dist/overlays/_surface.js +1 -1
- package/dist/overlays/toast.js +1 -1
- package/dist/overlays/tooltip.js +1 -1
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/system/density.d.ts +34 -6
- package/dist/system/density.js +41 -10
- package/dist/system/index.d.ts +2 -1
- package/dist/system/index.js +2 -1
- package/dist/system/portal.d.ts +8 -7
- package/dist/system/portal.js +16 -9
- package/dist/system/prepaint.d.ts +25 -5
- package/dist/system/prepaint.js +10 -2
- package/dist/system/theme-provider.d.ts +86 -7
- package/dist/system/theme-provider.js +62 -20
- package/dist/system/use-theme.d.ts +9 -2
- package/dist/system/use-theme.js +9 -2
- package/dist/system/vocabulary.d.ts +2 -1
- package/dist/system/vocabulary.js +16 -2
- package/manifest/components/accordion.json +1 -0
- package/manifest/components/agent-card.json +1 -0
- package/manifest/components/agent-handoff.json +1 -0
- package/manifest/components/alert-dialog.json +1 -0
- package/manifest/components/ask-box.json +1 -0
- package/manifest/components/autocomplete.json +1 -0
- package/manifest/components/band.json +104 -0
- package/manifest/components/canvas-split-body.json +1 -0
- package/manifest/components/canvas-split-document.json +1 -0
- package/manifest/components/canvas-split-header.json +1 -0
- package/manifest/components/canvas-split-line.json +1 -0
- package/manifest/components/canvas-split-message.json +1 -0
- package/manifest/components/canvas-split-thread.json +1 -0
- package/manifest/components/canvas-split.json +1 -0
- package/manifest/components/card.json +1 -0
- package/manifest/components/channel-matrix.json +1 -0
- package/manifest/components/chart-tooltip-content.json +1 -0
- package/manifest/components/chat-panel-assistant-message.json +1 -0
- package/manifest/components/chat-panel-composer.json +1 -0
- package/manifest/components/chat-panel-messages.json +1 -0
- package/manifest/components/chat-panel-typing.json +1 -0
- package/manifest/components/chat-panel-user-message.json +1 -0
- package/manifest/components/chat-panel.json +1 -0
- package/manifest/components/code-block.json +1 -0
- package/manifest/components/code-diff.json +1 -0
- package/manifest/components/code-runner.json +1 -0
- package/manifest/components/collapsible.json +1 -0
- package/manifest/components/colors-section.json +1 -0
- package/manifest/components/combobox.json +1 -0
- package/manifest/components/command-palette.json +1 -0
- package/manifest/components/comparison-card.json +1 -0
- package/manifest/components/composer.json +1 -0
- package/manifest/components/confidence-marker.json +1 -0
- package/manifest/components/container.json +3 -0
- package/manifest/components/context-menu.json +1 -0
- package/manifest/components/conversation-search.json +1 -0
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/day-separator.json +1 -0
- package/manifest/components/density.json +16 -1
- package/manifest/components/dialog.json +1 -0
- package/manifest/components/disclosure.json +1 -0
- package/manifest/components/dmx-bar.json +1 -0
- package/manifest/components/dmx-strip.json +1 -0
- package/manifest/components/document-reference.json +1 -0
- package/manifest/components/drawer.json +1 -0
- package/manifest/components/dropdown-menu.json +1 -0
- package/manifest/components/edit-message.json +1 -0
- package/manifest/components/elements-timeline.json +1 -0
- package/manifest/components/elicitation-form.json +1 -0
- package/manifest/components/empty-state.json +1 -0
- package/manifest/components/export-dialog.json +1 -0
- package/manifest/components/footer.json +3 -2
- package/manifest/components/frac.json +1 -0
- package/manifest/components/frames.json +14 -0
- package/manifest/components/guardrail-notice.json +1 -0
- package/manifest/components/hover-card.json +1 -0
- package/manifest/components/inline-citation.json +1 -0
- package/manifest/components/markdown-text.json +1 -0
- package/manifest/components/math-block.json +1 -0
- package/manifest/components/menubar.json +1 -0
- package/manifest/components/message-branches.json +1 -0
- package/manifest/components/message-pair.json +1 -0
- package/manifest/components/message.json +1 -0
- package/manifest/components/multi-select.json +1 -0
- package/manifest/components/navigation-menu.json +1 -0
- package/manifest/components/onboarding.json +1 -0
- package/manifest/components/page-shell.json +4 -0
- package/manifest/components/popover.json +1 -0
- package/manifest/components/preset-section.json +1 -0
- package/manifest/components/preview.json +17 -2
- package/manifest/components/progress.json +2 -2
- package/manifest/components/prompt-library.json +1 -0
- package/manifest/components/quote-reply.json +1 -0
- package/manifest/components/read-aloud.json +1 -0
- package/manifest/components/reasoning-panel.json +1 -0
- package/manifest/components/recommendation-card.json +1 -0
- package/manifest/components/research-report.json +1 -0
- package/manifest/components/retrieval-chunks.json +1 -0
- package/manifest/components/reviewable-diff.json +1 -0
- package/manifest/components/score-breakdown.json +1 -0
- package/manifest/components/scroll-anchor.json +1 -0
- package/manifest/components/settings-panel.json +1 -0
- package/manifest/components/shape-section.json +1 -0
- package/manifest/components/shared-conversation.json +1 -0
- package/manifest/components/sheet.json +1 -0
- package/manifest/components/speaker-identity.json +1 -0
- package/manifest/components/stopped-run.json +1 -0
- package/manifest/components/streaming-text.json +1 -0
- package/manifest/components/sub.json +1 -0
- package/manifest/components/sup.json +1 -0
- package/manifest/components/tags-input.json +1 -0
- package/manifest/components/terminal-frame.json +1 -0
- package/manifest/components/textarea.json +1 -0
- package/manifest/components/theme-configurator.json +1 -0
- package/manifest/components/theme-provider.json +26 -1
- package/manifest/components/toast.json +1 -0
- package/manifest/components/tool-call-card.json +1 -0
- package/manifest/components/tool-error.json +1 -0
- package/manifest/components/tooltip.json +1 -0
- package/manifest/components/voice-conversation.json +1 -0
- package/manifest/manifest.json +133 -105
- package/manifest/tokens.json +20 -1
- package/package.json +11 -9
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Band",
|
|
3
|
+
"slug": "band",
|
|
4
|
+
"group": "chrome",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
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`), 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 two of the three sets, so a `\"ground\"` paints\nnothing in three of the four states a page can be in, while `--cue-band-rule`\nis `0px` under `marketing` alone. Both 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 nested `[data-theme]`\nunder a marketing band paints the **outer** theme's `--cue-surface-1` through\nan already-resolved `--cue-band-ground`.\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
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "separation",
|
|
12
|
+
"type": "\"none\" | \"rule\" | \"ground\" | \"bleed\"",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "rule",
|
|
15
|
+
"description": "How this band separates itself from the one above it. Defaults to `\"rule\"`.\n\n- **`\"rule\"`** — a line at the top edge, `--cue-band-rule` wide, in\n `border-border`. What `Footer` has always drawn.\n- **`\"ground\"`** — a ground, `--cue-band-ground`, edge to edge. The one\n value that touches colour, and it resolves through the single carve-out\n the token layer allows a style set.\n- **`\"bleed\"`** — neither, and **no column**: the children run the band's\n full width with no measure and no gutters. The separation is the change\n of scale, which is what a full-width image or strip does. `width` has\n nothing to apply to and is ignored.\n- **`\"none\"`** — neither, column kept. Sections separate by rhythm alone,\n which is `--cue-band-y` and is what `editorial` leads with.\n\n**What a style set makes each of these do, because two of them can come out\nto nothing and there is no way for this component to warn you.** The values\nare the token layer's; `packages/ui/test/chrome/band.test.tsx` holds this\ntable to `packages/tokens/dist/axes.css`, so it cannot quietly stop being\ntrue.\n\n| set | `\"rule\"` draws | `\"ground\"` paints |\n|---|---|---|\n| *(no set)* and `console` | 1px | nothing — the ground is `transparent` |\n| `editorial` | a 0.5px hairline, **which Chromium paints at 1px at every DPR**; only retina WebKit draws it thinner | nothing — `transparent` |\n| `marketing` | **nothing — the rule is `0px`** | `--cue-surface-1` |\n\nRead the diagonal: `\"ground\"` is the marketing separation and `\"rule\"` is\neveryone else's. A band that wants to separate under *every* set separates\nby rhythm, which every set has.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "enum",
|
|
18
|
+
"members": [
|
|
19
|
+
"none",
|
|
20
|
+
"rule",
|
|
21
|
+
"ground",
|
|
22
|
+
"bleed"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "width",
|
|
28
|
+
"type": "\"narrow\" | \"wide\" | \"broad\" | \"full\" | \"prose\"",
|
|
29
|
+
"required": false,
|
|
30
|
+
"defaultValue": "prose",
|
|
31
|
+
"description": "Which measure the band's centred column takes. Defaults to `\"prose\"`.",
|
|
32
|
+
"control": {
|
|
33
|
+
"kind": "enum",
|
|
34
|
+
"members": [
|
|
35
|
+
"narrow",
|
|
36
|
+
"wide",
|
|
37
|
+
"broad",
|
|
38
|
+
"full",
|
|
39
|
+
"prose"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "columnClassName",
|
|
45
|
+
"type": "string",
|
|
46
|
+
"required": false,
|
|
47
|
+
"defaultValue": null,
|
|
48
|
+
"description": "Extra classes for the centred column. Ignored when `separation` is `\"bleed\"`.",
|
|
49
|
+
"control": {
|
|
50
|
+
"kind": "string"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "children",
|
|
55
|
+
"type": "ReactNode",
|
|
56
|
+
"required": false,
|
|
57
|
+
"defaultValue": null,
|
|
58
|
+
"description": "The band's contents.",
|
|
59
|
+
"control": {
|
|
60
|
+
"kind": "node",
|
|
61
|
+
"fixture": "children.text"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"typeReferences": [
|
|
66
|
+
"React.ComponentPropsWithoutRef<\"section\">"
|
|
67
|
+
],
|
|
68
|
+
"subcomponents": [],
|
|
69
|
+
"parts": [],
|
|
70
|
+
"variants": {},
|
|
71
|
+
"defaultVariants": {},
|
|
72
|
+
"tokensUsed": [
|
|
73
|
+
"--cue-band-ground",
|
|
74
|
+
"--cue-band-rule",
|
|
75
|
+
"--cue-band-y",
|
|
76
|
+
"--cue-border",
|
|
77
|
+
"--cue-measure-prose"
|
|
78
|
+
],
|
|
79
|
+
"summary": "A full-bleed horizontal section: the page's rhythm, its separation, and a column at the measure.",
|
|
80
|
+
"examples": [
|
|
81
|
+
{
|
|
82
|
+
"title": "Usage",
|
|
83
|
+
"code": "<Band aria-labelledby=\"pitch\">\n <h2 id=\"pitch\">One import</h2>\n <p>Everything on one token layer.</p>\n</Band>\n<Band separation=\"ground\" width=\"broad\">\n <Bento.Root cols={3}>{tiles}</Bento.Root>\n</Band>",
|
|
84
|
+
"language": "tsx"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"status": "todo-docs",
|
|
88
|
+
"url": "/docs/components/band",
|
|
89
|
+
"mdUrl": "/docs/components/band.md",
|
|
90
|
+
"jsonUrl": "/r/components/band.json",
|
|
91
|
+
"specimens": [
|
|
92
|
+
{
|
|
93
|
+
"title": "Band",
|
|
94
|
+
"group": "chrome",
|
|
95
|
+
"components": [
|
|
96
|
+
"Band"
|
|
97
|
+
],
|
|
98
|
+
"code": "<div className=\"w-full overflow-hidden rounded-(--radius-surface) border border-border bg-bg\">\n {/*\n * `separation=\"rule\"` is written out rather than left to the\n * default, and it is load-bearing rather than tidy.\n * `seedFromSpecimen` merges every `<Band>` open tag in this file\n * first-wins, so with it omitted the seed took `separation` from\n * the *second* band below and the generated `defaults` set became\n * `{ separation: \"ground\", width: \"wide\" }`. A ground is\n * `transparent` on every block but `marketing`, so the listing\n * tile — which draws the opening preset with no children — painted\n * nothing at all and `tests/browser/preview-stage.spec.ts` red with\n * \"a set drove the component to nothing\". That is the documented\n * trap in `Band`'s own docblock, landing on the library's own tile\n * before it could land on anybody else's page.\n */}\n <Band separation=\"rule\" aria-labelledby=\"bench-band-one\" width=\"wide\">\n <Stack gap={3}>\n <Eyebrow>composition</Eyebrow>\n <h3 id=\"bench-band-one\" className=\"font-mono text-(length:--cue-text-title) text-fg\">\n One markup, three attributes\n </h3>\n <p className=\"font-mono text-(length:--cue-text-body) leading-(--cue-leading-prose) text-fg-muted\">\n The measure, the line height and the rhythm of this band are the style axis’s,\n so the same markup composes three ways with no prop changing.\n </p>\n </Stack>\n </Band>\n <Band separation=\"ground\" aria-labelledby=\"bench-band-two\" width=\"wide\">\n <Stack gap={3}>\n <h3 id=\"bench-band-two\" className=\"font-mono text-(length:--cue-text-title) text-fg\">\n Separated by ground\n </h3>\n <p className=\"font-mono text-(length:--cue-text-body) leading-(--cue-leading-prose) text-fg-muted\">\n Which paints under <code>marketing</code> and is transparent everywhere else.\n </p>\n </Stack>\n </Band>\n</div>",
|
|
99
|
+
"note": "A page's horizontal section: the rhythm, the separation and the column, all three off the style axis. Four separations — a rule, a ground, a full bleed with no column, and rhythm alone. Under no style set this is exactly what Footer draws above its links.",
|
|
100
|
+
"interaction": "none; what changes it is the [data-style] attribute above it, not a pointer."
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"todo": true
|
|
104
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"importPath": "@cueplusplus/ui",
|
|
6
6
|
"peerDependencies": [],
|
|
7
7
|
"clientOnly": true,
|
|
8
|
-
"description": "Inline version of the portal contract, for portals whose container cannot be\nchosen (a third-party overlay, or content already portaled by something else).\n\nWraps `children` in a `display: contents` element carrying the same\n`data-theme` / `data-density` / `data-font` / `data-mode` / `data-cue-skin`
|
|
8
|
+
"description": "Inline version of the portal contract, for portals whose container cannot be\nchosen (a third-party overlay, or content already portaled by something else).\n\nWraps `children` in a `display: contents` element carrying the same\n`data-theme` / `data-density` / `data-font` / `data-mode` / `data-style` /\n`data-cue-skin` / `data-cue-fidelity` stamp, `--cue-font-scale` and\n`overrides` properties as {@link useCuePortalProps}. Prefer the hook — a\nstamped container costs one element per overlay instead of one per render\ntree — and reach for this only when the container prop is not available.",
|
|
9
9
|
"props": [
|
|
10
10
|
{
|
|
11
11
|
"name": "children",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"importPath": "@cueplusplus/ui",
|
|
6
6
|
"peerDependencies": [],
|
|
7
7
|
"clientOnly": true,
|
|
8
|
-
"description": "Re-scope any subtree to a different density level.\n\nRenders a plain `<div data-density=\"…\" data-cue-theme=\"…\">`: the geometry\ncustom properties are re-declared by the attribute selector and inherit\ndown, so nesting is free and needs no JS. The matching React context is\npublished alongside for the rare JS reads (`useDensity()`,\n`useControlHeight()`, portal stamping) — the DOM attributes, not the\ncontext, are what actually restyle the tree.\n\n`data-cue-theme` carries the nearest `<ThemeProvider>`'s name, or is\nomitted where there is none. It is read by nothing this island does —\ntheme and mode are deliberately *not* re-scoped here
|
|
8
|
+
"description": "Re-scope any subtree to a different density level.\n\nRenders a plain `<div data-density=\"…\" data-cue-theme=\"…\">`: the geometry\ncustom properties are re-declared by the attribute selector and inherit\ndown, so nesting is free and needs no JS. The matching React context is\npublished alongside for the rare JS reads (`useDensity()`,\n`useControlHeight()`, portal stamping) — the DOM attributes, not the\ncontext, are what actually restyle the tree.\n\n`data-cue-theme` carries the nearest `<ThemeProvider>`'s name, or is\nomitted where there is none. It is read by nothing this island does —\ntheme and mode are deliberately *not* re-scoped here; density was for a long\ntime the only axis an island could override (spec §6), and a named\n`styleSet` is the second and last — it exists so a theme's own\ngenerated CSS can address exactly this island regardless of how many\n*other* themed providers sit between it and the one it belongs to. A CSS\nancestor selector can only ask \"does some ancestor carry theme `x`\", never\n\"is `x` the *nearest* one\"; this stamp answers that question the way\n`useContext` already does, at render time, and hands the answer to CSS as\nan attribute rather than leaving it unanswerable there.\n\n`data-style` joins them when — and only when — a `styleSet` is named. Absence\nis how the axis inherits: custom properties inherit down the DOM, so an island\nthat stamped the ambient set would be restating an answer it already had, and\nan island that stamped a *default* set would silently re-point the rhythm of\nevery page that nested one.",
|
|
9
9
|
"props": [
|
|
10
10
|
{
|
|
11
11
|
"name": "density",
|
|
@@ -24,6 +24,21 @@
|
|
|
24
24
|
]
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
"name": "styleSet",
|
|
29
|
+
"type": "\"console\" | \"editorial\" | \"marketing\"",
|
|
30
|
+
"required": false,
|
|
31
|
+
"defaultValue": null,
|
|
32
|
+
"description": "A style set for this subtree: `console`, `editorial` or `marketing`.\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 an editorial or marketing page.\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.",
|
|
33
|
+
"control": {
|
|
34
|
+
"kind": "enum",
|
|
35
|
+
"members": [
|
|
36
|
+
"console",
|
|
37
|
+
"editorial",
|
|
38
|
+
"marketing"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
27
42
|
{
|
|
28
43
|
"name": "children",
|
|
29
44
|
"type": "ReactNode",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"importPath": "@cueplusplus/ui",
|
|
6
6
|
"peerDependencies": [],
|
|
7
7
|
"clientOnly": false,
|
|
8
|
-
"description": "The `contentinfo` landmark at the bottom of a document: a hairline, a\nmeasure, and room for whatever a page ends with.\n\nDeliberately **not** a link-list component. A \"complex footer\" in this system\nis `Grid` + `Stack` + `Link` inside this one — components that already exist\nand already carry the density ladder — and a `Grid` with `minItemWidth` fills\nthe row with as many columns as fit, so the footer is responsive without a\nbreakpoint and without a prop for how many columns to draw. What is left over\nis what a footer actually needs and nothing else has: the landmark, the rule\nthat separates it from the page, the measure that lines it up with the page,\nand the second rule above the fine print.\n\nThe band is full-bleed and the column inside it is centred, which is why the\nhairline runs edge to edge while the links stop at the measure. The column is\nset in the bar's register — mono, at the UI size — because a footer is\nfurniture. It paints no ground of its own: a footer is the end of the page,\nnot a bar, and the seam is the hairline. Give it `className=\"bg-surface-1\"`\nwhere a distinct band is wanted.\n\nInside `AppShell` this is a child of `AppShell.Scroller`, at the end of the\ncontent column — so it scrolls with the page and its full bleed is the\ncontent column's width, not the window's. A footer placed *beside* the\nnavigation column instead (after `AppShell.Body`) runs under the navigation\nand reads as chrome it is not. It coexists with `StatusBar`, which is the\nopposite object: a strip of the frame, always on screen, never scrolled.\n\nStatic markup — no `\"use client\"`.",
|
|
8
|
+
"description": "The `contentinfo` landmark at the bottom of a document: a hairline, a\nmeasure, and room for whatever a page ends with.\n\nDeliberately **not** a link-list component. A \"complex footer\" in this system\nis `Grid` + `Stack` + `Link` inside this one — components that already exist\nand already carry the density ladder — and a `Grid` with `minItemWidth` fills\nthe row with as many columns as fit, so the footer is responsive without a\nbreakpoint and without a prop for how many columns to draw. What is left over\nis what a footer actually needs and nothing else has: the landmark, the rule\nthat separates it from the page, the measure that lines it up with the page,\nand the second rule above the fine print.\n\nThe band is full-bleed and the column inside it is centred, which is why the\nhairline runs edge to edge while the links stop at the measure. The column is\nset in the bar's register — mono, at the UI size — because a footer is\nfurniture. It paints no ground of its own: a footer is the end of the page,\nnot a bar, and the seam is the hairline. Give it `className=\"bg-surface-1\"`\nwhere a distinct band is wanted.\n\nInside `AppShell` this is a child of `AppShell.Scroller`, at the end of the\ncontent column — so it scrolls with the page and its full bleed is the\ncontent column's width, not the window's. A footer placed *beside* the\nnavigation column instead (after `AppShell.Body`) runs under the navigation\nand reads as chrome it is not. It coexists with `StatusBar`, which is the\nopposite object: a strip of the frame, always on screen, never scrolled.\n\nUnder the skin this **is** `Band`'s recipe — `separation=\"rule\"`, spent\nthrough `bandClasses` rather than through `<Band>` itself, because `Band`\nrenders a `<section>` and this has to render the `<footer>` that makes it the\n`contentinfo` landmark. The two dimensions that recipe carries are the\nrhythm and the rule, and both are the style axis's now, the same as any other\nband: see `separation`'s table on `Band` for what each `[data-style]` set\nmakes them paint. With no set active nothing changes from what this component\nalways rendered. It does **not** reach `Band`'s other two style-owned\nspends — the ground and the reading measure — because `separation` is the\nliteral `\"rule\"` here and `width` is a `ContainerWidth`; `_band.ts`'s\ndocblock says why that is a fact about the published manifest and not only\nabout the markup.\n\nStatic markup — no `\"use client\"`.",
|
|
9
9
|
"props": [
|
|
10
10
|
{
|
|
11
11
|
"name": "width",
|
|
@@ -64,13 +64,14 @@
|
|
|
64
64
|
"variants": {},
|
|
65
65
|
"defaultVariants": {},
|
|
66
66
|
"tokensUsed": [
|
|
67
|
+
"--cue-band-rule",
|
|
68
|
+
"--cue-band-y",
|
|
67
69
|
"--cue-border",
|
|
68
70
|
"--cue-fg-subtle",
|
|
69
71
|
"--cue-font-mono",
|
|
70
72
|
"--cue-space-3",
|
|
71
73
|
"--cue-space-5",
|
|
72
74
|
"--cue-space-6",
|
|
73
|
-
"--cue-space-7",
|
|
74
75
|
"--cue-text-label",
|
|
75
76
|
"--cue-text-ui"
|
|
76
77
|
],
|
|
@@ -88,6 +88,20 @@
|
|
|
88
88
|
"control": {
|
|
89
89
|
"kind": "boolean"
|
|
90
90
|
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "layout",
|
|
94
|
+
"type": "\"column\" | \"board\"",
|
|
95
|
+
"required": false,
|
|
96
|
+
"defaultValue": "board",
|
|
97
|
+
"description": "How the frames are arranged. Defaults to `\"board\"`.\n\n`\"board\"` is the original: a short, wide, sideways scroller a reader drags\nthrough — right where the frames are a set you *browse*, on a homepage wall\nor a design surface.\n\n`\"column\"` stacks them one under the next, each at the full width it is\ngiven, and the canvas grows to whatever it holds. It exists for the page\nthat *reads*: a documentation page scrolls vertically already, and asking a\nreader to pan a second axis to reach the fifth variant of a component —\nwith that fifth variant clipped at the board's edge until they do — hides\nthe examples behind an interaction. A column has no fixed height, so\n`height` is ignored, and nothing pans, so `pan` and `hint` are moot.",
|
|
98
|
+
"control": {
|
|
99
|
+
"kind": "enum",
|
|
100
|
+
"members": [
|
|
101
|
+
"column",
|
|
102
|
+
"board"
|
|
103
|
+
]
|
|
104
|
+
}
|
|
91
105
|
}
|
|
92
106
|
],
|
|
93
107
|
"typeReferences": [
|