@cueplusplus/ui 0.18.2 → 0.20.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 +100 -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 +8 -1
- package/dist/brand/motif.d.ts +32 -0
- package/dist/brand/motif.js +71 -0
- package/dist/brand/particle-logo.d.ts +50 -0
- package/dist/brand/particle-logo.js +437 -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/brand/text-scramble.d.ts +42 -0
- package/dist/brand/text-scramble.js +160 -0
- package/dist/chat/delegation-card.js +2 -1
- package/dist/chat/message.js +12 -13
- 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/color/color-area.js +2 -1
- 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/forms/_chassis.d.ts +1 -1
- package/dist/forms/_chassis.js +2 -2
- package/dist/forms/env-var-input.js +2 -1
- package/dist/forms/file-upload.js +2 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +18 -2
- package/dist/instruments/data-table.js +3 -2
- package/dist/instruments/index.js +1 -1
- package/dist/instruments/stat.js +1 -1
- package/dist/instruments/table.js +1 -1
- package/dist/instruments/terminal-frame.js +5 -2
- package/dist/layout/grid.js +4 -2
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.js +2 -1
- package/dist/layout/preview.js +4 -188
- package/dist/layout/reveal.d.ts +44 -0
- package/dist/layout/reveal.js +106 -0
- package/dist/layout/sidebar.js +88 -52
- package/dist/lib/cn.js +23 -5
- package/dist/lib/particle-field-shaders.js +236 -0
- package/dist/lib/particle-field.js +210 -0
- package/dist/midi/spectrum-visualizer.js +2 -1
- package/dist/overlays/_surface.d.ts +2 -2
- package/dist/primitives/button.js +22 -3
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/primitives/chip.js +63 -6
- package/dist/styles.css +26 -0
- package/dist/system/_scoped-pairing.js +18 -0
- package/dist/system/_stage-scope.js +199 -0
- package/dist/system/_style-check.js +1 -1
- package/dist/system/_style-chip.js +1 -1
- package/dist/system/_style-field-chassis.js +14 -1
- 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-ink.js +12 -5
- package/dist/system/_style-menu.js +1 -1
- package/dist/system/_style-page-title.js +1 -1
- package/dist/system/_style-segmented-control.js +1 -1
- package/dist/system/_style-skeleton.js +1 -1
- package/dist/system/_style-tab.js +1 -1
- package/dist/system/font-scope.d.ts +38 -0
- package/dist/system/font-scope.js +69 -0
- package/dist/system/frame-clock.d.ts +33 -0
- package/dist/system/frame-clock.js +55 -0
- package/dist/system/index.d.ts +4 -1
- package/dist/system/index.js +4 -1
- package/dist/system/portal.js +7 -1
- package/dist/system/still.d.ts +32 -0
- package/dist/system/still.js +60 -0
- 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 +2 -0
- package/manifest/components/band.json +2 -1
- package/manifest/components/bento.json +13 -13
- 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/color-area.json +10 -0
- package/manifest/components/color-field.json +3 -0
- package/manifest/components/color-picker.json +3 -0
- package/manifest/components/combobox.json +2 -0
- package/manifest/components/command-palette.json +1 -0
- package/manifest/components/composer.json +3 -0
- package/manifest/components/context-menu.json +1 -1
- package/manifest/components/data-table-pagination.json +3 -0
- package/manifest/components/data-table-toolbar.json +3 -0
- package/manifest/components/date-field.json +3 -0
- package/manifest/components/date-picker.json +3 -0
- package/manifest/components/date-range-picker.json +3 -0
- package/manifest/components/delegation-card.json +6 -0
- 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/env-var-input.json +3 -0
- package/manifest/components/file-upload.json +5 -0
- package/manifest/components/font-scope.json +82 -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/input-group.json +3 -0
- package/manifest/components/input.json +3 -0
- package/manifest/components/kbd.json +1 -0
- package/manifest/components/keyword.json +67 -0
- package/manifest/components/ledger.json +5 -5
- package/manifest/components/logo-strip.json +93 -0
- package/manifest/components/markdown-text.json +3 -3
- package/manifest/components/menubar.json +1 -1
- package/manifest/components/message.json +8 -0
- package/manifest/components/motif.json +90 -0
- package/manifest/components/multi-select.json +2 -0
- package/manifest/components/musical-time-input.json +3 -0
- package/manifest/components/navigation-menu.json +1 -0
- package/manifest/components/number-field.json +3 -0
- package/manifest/components/otp-field.json +3 -0
- package/manifest/components/page-shell.json +5 -0
- package/manifest/components/particle-logo.json +140 -0
- package/manifest/components/particle-mark.json +75 -0
- package/manifest/components/password-input.json +3 -0
- package/manifest/components/popover.json +1 -1
- package/manifest/components/preview.json +10 -4
- package/manifest/components/radio-group.json +0 -1
- package/manifest/components/radio.json +0 -1
- package/manifest/components/reveal.json +106 -0
- package/manifest/components/ribbon.json +65 -0
- package/manifest/components/scrollable-tabs-list.json +1 -0
- package/manifest/components/scrub-input.json +3 -0
- package/manifest/components/search-input.json +3 -0
- package/manifest/components/segmented-control.json +1 -0
- package/manifest/components/select.json +3 -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/spectrum-visualizer.json +10 -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 +2 -2
- package/manifest/components/tabs.json +1 -0
- package/manifest/components/tags-input.json +2 -0
- package/manifest/components/text-scramble.json +90 -0
- package/manifest/components/textarea.json +3 -0
- package/manifest/components/theme-configurator.json +1 -0
- package/manifest/components/theme-provider.json +10 -4
- package/manifest/components/time-field.json +3 -0
- package/manifest/components/toast.json +1 -0
- package/manifest/components/tooltip.json +1 -1
- package/manifest/fixtures.json +18 -0
- package/manifest/manifest.json +368 -80
- package/manifest/tokens.json +93 -3
- package/package.json +6 -6
- package/dist/system/_paint-ground-pattern.js +0 -30
|
@@ -104,12 +104,14 @@
|
|
|
104
104
|
"--cue-paint-stroke-to",
|
|
105
105
|
"--cue-paint-stroke-width",
|
|
106
106
|
"--cue-radius-control",
|
|
107
|
+
"--cue-radius-scale",
|
|
107
108
|
"--cue-space-2",
|
|
108
109
|
"--cue-space-3",
|
|
109
110
|
"--cue-space-4",
|
|
110
111
|
"--cue-space-5",
|
|
111
112
|
"--cue-style-body-weight",
|
|
112
113
|
"--cue-style-check-edge",
|
|
114
|
+
"--cue-style-control-radius",
|
|
113
115
|
"--cue-style-control-step-size",
|
|
114
116
|
"--cue-style-disabled-edge",
|
|
115
117
|
"--cue-style-disabled-fill",
|
|
@@ -118,6 +120,7 @@
|
|
|
118
120
|
"--cue-style-field-focus-offset",
|
|
119
121
|
"--cue-style-field-hover-edge",
|
|
120
122
|
"--cue-style-field-pad",
|
|
123
|
+
"--cue-style-field-radius",
|
|
121
124
|
"--cue-style-focus-edge",
|
|
122
125
|
"--cue-style-focus-width",
|
|
123
126
|
"--cue-style-glyph-ink",
|
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
"--cue-paint-stroke-to",
|
|
137
137
|
"--cue-paint-stroke-width",
|
|
138
138
|
"--cue-radius-control",
|
|
139
|
+
"--cue-radius-scale",
|
|
139
140
|
"--cue-space-1",
|
|
140
141
|
"--cue-space-2",
|
|
141
142
|
"--cue-space-3",
|
|
@@ -143,6 +144,7 @@
|
|
|
143
144
|
"--cue-space-5",
|
|
144
145
|
"--cue-style-body-weight",
|
|
145
146
|
"--cue-style-check-edge",
|
|
147
|
+
"--cue-style-control-radius",
|
|
146
148
|
"--cue-style-control-step-size",
|
|
147
149
|
"--cue-style-disabled-edge",
|
|
148
150
|
"--cue-style-disabled-fill",
|
|
@@ -151,6 +153,7 @@
|
|
|
151
153
|
"--cue-style-field-focus-offset",
|
|
152
154
|
"--cue-style-field-hover-edge",
|
|
153
155
|
"--cue-style-field-pad",
|
|
156
|
+
"--cue-style-field-radius",
|
|
154
157
|
"--cue-style-focus-edge",
|
|
155
158
|
"--cue-style-focus-width",
|
|
156
159
|
"--cue-style-input-face",
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"variants": {},
|
|
88
88
|
"defaultVariants": {},
|
|
89
89
|
"tokensUsed": [
|
|
90
|
+
"--cue-border",
|
|
90
91
|
"--cue-fg",
|
|
91
92
|
"--cue-fg-muted",
|
|
92
93
|
"--cue-font-mono",
|
|
@@ -100,11 +101,15 @@
|
|
|
100
101
|
"--cue-space-7",
|
|
101
102
|
"--cue-style-body-face",
|
|
102
103
|
"--cue-style-body-weight",
|
|
104
|
+
"--cue-style-display-case",
|
|
103
105
|
"--cue-style-display-variation",
|
|
106
|
+
"--cue-style-frame-lines-content",
|
|
107
|
+
"--cue-style-grid-lines-content",
|
|
104
108
|
"--cue-style-heading-ink",
|
|
105
109
|
"--cue-style-lede-ink",
|
|
106
110
|
"--cue-style-lede-leading",
|
|
107
111
|
"--cue-style-lede-size",
|
|
112
|
+
"--cue-style-page-frame-position",
|
|
108
113
|
"--cue-style-page-title-face",
|
|
109
114
|
"--cue-style-page-title-leading",
|
|
110
115
|
"--cue-style-page-title-size",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ParticleLogo",
|
|
3
|
+
"slug": "particle-logo",
|
|
4
|
+
"group": "brand",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A mark drawn as a field of particles that wiggle, flip colour in sweeping waves and scatter\nfrom the pointer — cueplusplus.com's hero logo, ported from three.js to raw WebGL2 with its\nshaders unchanged (spec 2026-10-04-cue-site-verbatim §4.1).\n\nThe camera, the mesh scale, the textures, the blending and the wave and touch timings are the\nsource's, copied: a 50° camera at z = 300, the mark 26% of the canvas's height, a wave every\n4–8s that sweeps in 2s and fades to white over 3s, a pointer trail that ages over 80 rendered\nupdates. It renders at about 30fps and costs nothing off screen or in a hidden tab.\n\n**Without WebGL2, or held still** (a thumbnail, or a reader who prefers reduced motion), it\ndraws the source image itself, still, at the same fit — a picture of the mark rather than of\nthe particles, which the docs say. A lost context draws the still until it is restored.\n\nDecorative: the canvas is hidden from assistive technology; name the mark on the element\naround it.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "src",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The mark to draw in particles: an image URL, PNG or SVG, light on transparent or on black.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "string"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "fit",
|
|
22
|
+
"type": "\"logo\" | \"contain\"",
|
|
23
|
+
"required": false,
|
|
24
|
+
"defaultValue": "logo",
|
|
25
|
+
"description": "`logo` (the default): the mark is 26% of the canvas's height, as cueplusplus.com's hero\ndraws it. `contain`: the mark fits inside the canvas, scaled by `containFill`.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "enum",
|
|
28
|
+
"members": [
|
|
29
|
+
"logo",
|
|
30
|
+
"contain"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "containFill",
|
|
36
|
+
"type": "number",
|
|
37
|
+
"required": false,
|
|
38
|
+
"defaultValue": "0.85",
|
|
39
|
+
"description": "How much of the canvas a `contain` mark fills. Defaults to `0.85`.",
|
|
40
|
+
"control": {
|
|
41
|
+
"kind": "number"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "particleSize",
|
|
46
|
+
"type": "number",
|
|
47
|
+
"required": false,
|
|
48
|
+
"defaultValue": "0.5",
|
|
49
|
+
"description": "Each particle's size. Defaults to `0.5`.",
|
|
50
|
+
"control": {
|
|
51
|
+
"kind": "number"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "randomSpread",
|
|
56
|
+
"type": "number",
|
|
57
|
+
"required": false,
|
|
58
|
+
"defaultValue": "2",
|
|
59
|
+
"description": "How far particles scatter from their pixel. Defaults to `2`.",
|
|
60
|
+
"control": {
|
|
61
|
+
"kind": "number"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "skipRatio",
|
|
66
|
+
"type": "number",
|
|
67
|
+
"required": false,
|
|
68
|
+
"defaultValue": "36",
|
|
69
|
+
"description": "One particle every this many pixels of the 600px-wide raster. Defaults to `36`.",
|
|
70
|
+
"control": {
|
|
71
|
+
"kind": "number"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "waveColors",
|
|
76
|
+
"type": "readonly string[]",
|
|
77
|
+
"required": false,
|
|
78
|
+
"defaultValue": null,
|
|
79
|
+
"description": "The colours a wave sweeps the mark into, as hex. Defaults to the Look's own accent and\nsignal colours, read off the element; cueplusplus.com passes its eight. A palette with\nnothing different to offer falls back to the default.",
|
|
80
|
+
"control": {
|
|
81
|
+
"kind": "array",
|
|
82
|
+
"fixture": "agent.transcript"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"typeReferences": [
|
|
87
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
88
|
+
],
|
|
89
|
+
"subcomponents": [],
|
|
90
|
+
"parts": [],
|
|
91
|
+
"variants": {},
|
|
92
|
+
"defaultVariants": {},
|
|
93
|
+
"tokensUsed": [
|
|
94
|
+
"--cue-accent",
|
|
95
|
+
"--cue-busy",
|
|
96
|
+
"--cue-danger",
|
|
97
|
+
"--cue-fg",
|
|
98
|
+
"--cue-info",
|
|
99
|
+
"--cue-ok",
|
|
100
|
+
"--cue-stream",
|
|
101
|
+
"--cue-warn"
|
|
102
|
+
],
|
|
103
|
+
"summary": "A mark drawn as a field of particles that wiggle, flip colour in sweeping waves and scatter from the pointer — cueplusplus.com's hero logo, in WebGL2.",
|
|
104
|
+
"examples": [
|
|
105
|
+
{
|
|
106
|
+
"title": "Usage",
|
|
107
|
+
"code": "<div role=\"img\" aria-label=\"CUE++\" className=\"h-[460px]\">\n <ParticleLogo src=\"/logo.png\" />\n</div>",
|
|
108
|
+
"language": "tsx"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"status": "stable",
|
|
112
|
+
"url": "/docs/components/particle-logo",
|
|
113
|
+
"mdUrl": "/docs/components/particle-logo.md",
|
|
114
|
+
"jsonUrl": "/r/components/particle-logo.json",
|
|
115
|
+
"whenToUse": [
|
|
116
|
+
"A product or studio site's hero, where the mark is the first thing a visitor sees and touches.",
|
|
117
|
+
"A brand moment that should answer the pointer, at about 30fps and nothing off screen."
|
|
118
|
+
],
|
|
119
|
+
"whenNotToUse": [
|
|
120
|
+
"A logo in a header, a footer or a list: use the image itself. This is one canvas per page, sized to its container.",
|
|
121
|
+
"Anywhere the mark must be read by assistive technology: it is decorative. Name it on the element around it, as `role=\"img\" aria-label`."
|
|
122
|
+
],
|
|
123
|
+
"commonMistakes": [
|
|
124
|
+
"Passing a dark mark on a transparent ground. It samples bright or opaque pixels, as the site does, so a light mark (white on transparent or on black) is what it draws.",
|
|
125
|
+
"Expecting particles in a thumbnail or for a reader who prefers reduced motion. Held still, or without WebGL2, it draws the source image instead.",
|
|
126
|
+
"Leaving `waveColors` unset and expecting cueplusplus.com's neon. By default the waves are the Look's own accent and signal colours; pass the eight hexes for the site's."
|
|
127
|
+
],
|
|
128
|
+
"specimens": [
|
|
129
|
+
{
|
|
130
|
+
"title": "ParticleLogo",
|
|
131
|
+
"group": "brand",
|
|
132
|
+
"components": [
|
|
133
|
+
"ParticleLogo"
|
|
134
|
+
],
|
|
135
|
+
"code": "<div role=\"img\" aria-label=\"CUE++\" className=\"h-48 w-full max-w-[32rem]\">\n <ParticleLogo src={CUE_LOGO_PNG} />\n</div>",
|
|
136
|
+
"note": "A mark as a field of particles that wiggle, flip colour in sweeping waves and scatter from the pointer — cueplusplus.com's hero logo, in WebGL2. Off screen or in a hidden tab it stops; held still, or without WebGL2, it draws the image itself.",
|
|
137
|
+
"interaction": "move the pointer over the mark to scatter it. Prefer reduced motion and it draws the still image."
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ParticleMark",
|
|
3
|
+
"slug": "particle-mark",
|
|
4
|
+
"group": "brand",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A word drawn as a field of dots that drift and settle — a studio site's mark\n(spec 2026-10-02 §3.4). The dots are the accent, read from the canvas's own\ncomputed style, so they follow the Look.\n\n**It costs nothing at rest.** It animates only while its element is displayed,\non screen and in a visible tab, and while {@link useStill} is false (a still\nthumbnail, or a reader who prefers reduced motion). Otherwise it draws one\nstill frame. That frame is redrawn whenever any theme axis changes anywhere above\nit, the system colour scheme flips, a face finishes loading, or it resizes, so a\npaused mark is never left in an old palette. Unmounting disconnects every\nobserver and cancels every frame.\n\nDecorative: hidden from assistive technology.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "word",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The word the dots draw, short: a name or a mark.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "string"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "seed",
|
|
22
|
+
"type": "number",
|
|
23
|
+
"required": false,
|
|
24
|
+
"defaultValue": "1",
|
|
25
|
+
"description": "Which scatter. Defaults to `1`.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "number"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"typeReferences": [
|
|
32
|
+
"React.ComponentPropsWithoutRef<\"canvas\">"
|
|
33
|
+
],
|
|
34
|
+
"subcomponents": [],
|
|
35
|
+
"parts": [],
|
|
36
|
+
"variants": {},
|
|
37
|
+
"defaultVariants": {},
|
|
38
|
+
"tokensUsed": [
|
|
39
|
+
"--cue-accent"
|
|
40
|
+
],
|
|
41
|
+
"summary": "A word drawn as drifting dots in the accent, still when it is offscreen, hidden or motion is reduced.",
|
|
42
|
+
"examples": [
|
|
43
|
+
{
|
|
44
|
+
"title": "Usage",
|
|
45
|
+
"code": "<ParticleMark word=\"CUE\" className=\"h-40 w-full\" />",
|
|
46
|
+
"language": "tsx"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"status": "stable",
|
|
50
|
+
"url": "/docs/components/particle-mark",
|
|
51
|
+
"mdUrl": "/docs/components/particle-mark.md",
|
|
52
|
+
"jsonUrl": "/r/components/particle-mark.json",
|
|
53
|
+
"whenToUse": [
|
|
54
|
+
"A studio or product site's mark in its hero."
|
|
55
|
+
],
|
|
56
|
+
"whenNotToUse": [
|
|
57
|
+
"Text a reader must read. It is decorative and hidden from assistive technology.",
|
|
58
|
+
"Many on one page. Each is a canvas; one per page is the intent."
|
|
59
|
+
],
|
|
60
|
+
"commonMistakes": [
|
|
61
|
+
"Assuming it animates in a thumbnail. Under `StillProvider still`, or with reduced motion, it draws one still frame."
|
|
62
|
+
],
|
|
63
|
+
"specimens": [
|
|
64
|
+
{
|
|
65
|
+
"title": "ParticleMark",
|
|
66
|
+
"group": "brand",
|
|
67
|
+
"components": [
|
|
68
|
+
"ParticleMark"
|
|
69
|
+
],
|
|
70
|
+
"code": "<ParticleMark word=\"CUE\" className=\"h-32 w-64\" />",
|
|
71
|
+
"note": "A word drawn as a field of dots in the accent. It costs nothing at rest: off screen, in a hidden tab or held still, it draws one frame and stops.",
|
|
72
|
+
"interaction": "none. Prefer reduced motion and it holds its still frame."
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
@@ -146,11 +146,13 @@
|
|
|
146
146
|
"--cue-paint-stroke-to",
|
|
147
147
|
"--cue-paint-stroke-width",
|
|
148
148
|
"--cue-radius-control",
|
|
149
|
+
"--cue-radius-scale",
|
|
149
150
|
"--cue-space-3",
|
|
150
151
|
"--cue-space-4",
|
|
151
152
|
"--cue-space-5",
|
|
152
153
|
"--cue-style-body-weight",
|
|
153
154
|
"--cue-style-check-edge",
|
|
155
|
+
"--cue-style-control-radius",
|
|
154
156
|
"--cue-style-control-step-size",
|
|
155
157
|
"--cue-style-disabled-edge",
|
|
156
158
|
"--cue-style-disabled-fill",
|
|
@@ -159,6 +161,7 @@
|
|
|
159
161
|
"--cue-style-field-focus-offset",
|
|
160
162
|
"--cue-style-field-hover-edge",
|
|
161
163
|
"--cue-style-field-pad",
|
|
164
|
+
"--cue-style-field-radius",
|
|
162
165
|
"--cue-style-focus-edge",
|
|
163
166
|
"--cue-style-focus-width",
|
|
164
167
|
"--cue-style-input-face",
|
|
@@ -176,7 +176,6 @@
|
|
|
176
176
|
"--cue-control-sm",
|
|
177
177
|
"--cue-fg",
|
|
178
178
|
"--cue-fg-muted",
|
|
179
|
-
"--cue-fg-subtle",
|
|
180
179
|
"--cue-font-mono",
|
|
181
180
|
"--cue-leading-ui",
|
|
182
181
|
"--cue-paint-rim-width",
|
|
@@ -204,6 +203,7 @@
|
|
|
204
203
|
"--cue-style-body-size",
|
|
205
204
|
"--cue-style-body-weight",
|
|
206
205
|
"--cue-style-control-face",
|
|
206
|
+
"--cue-style-control-radius",
|
|
207
207
|
"--cue-style-display-variation",
|
|
208
208
|
"--cue-style-group-label-ink",
|
|
209
209
|
"--cue-style-group-label-pad",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
"name": "font",
|
|
75
|
-
"type": "\"source\" | \"system\" | \"geist\" | \"geist-mono\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\" | \"inter-source\" | \"dm\" | \"calsans\"",
|
|
75
|
+
"type": "\"source\" | \"system\" | \"geist\" | \"geist-mono\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\" | \"inter-source\" | \"dm\" | \"calsans\" | \"fraunces-mono\" | \"jetbrains-mono\"",
|
|
76
76
|
"required": false,
|
|
77
77
|
"defaultValue": null,
|
|
78
78
|
"description": "A font pairing for the stage only, stamped as `data-font` and republished to\nReact, so an overlay opened on the stage wears the stage's pairing rather\nthan the page's, and `useTheme().font` read on the stage reports it. The\nstage also takes `font-sans` when a pairing is named: `data-font` re-declares\nthe family's custom properties, but `font-family` inherits as an already\ncomputed value, so unclassed text on the stage would otherwise keep the\nfamily it resolved above it. Unset, the stage inherits and adds neither.",
|
|
@@ -90,19 +90,22 @@
|
|
|
90
90
|
"office",
|
|
91
91
|
"inter-source",
|
|
92
92
|
"dm",
|
|
93
|
-
"calsans"
|
|
93
|
+
"calsans",
|
|
94
|
+
"fraunces-mono",
|
|
95
|
+
"jetbrains-mono"
|
|
94
96
|
]
|
|
95
97
|
}
|
|
96
98
|
},
|
|
97
99
|
{
|
|
98
100
|
"name": "styleSet",
|
|
99
|
-
"type": "\"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\"",
|
|
101
|
+
"type": "\"command\" | \"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\" | \"ledger\" | \"monolith\" | \"prism\"",
|
|
100
102
|
"required": false,
|
|
101
103
|
"defaultValue": null,
|
|
102
104
|
"description": "A style set for the stage only: `console`, `editorial`, `marketing` or\n`graphite`.\n\nUnset, the stage inherits and **no attribute is emitted at all** — the same\nrule the other four follow here — unless the stage names a `theme`, a `mode`\nor a `font`. Then it restates the set in force around it, because a set's\nblock declares values that read those axes (its seam ink and band rule\nread the theme, its control and display faces read the pairing) and a\ncustom property resolves where it is declared: restated, they resolve\nagainst the stage. Unlike `theme`, naming one loads nothing and needs\nnothing: every set is emitted by `@cueplusplus/tokens` into the stylesheet\nevery consumer already imports, so a stage is scoped to\n`[data-style=\"<name>\"]` and the block is on the page by construction.\n\nThe set is republished to React as well as stamped, so a popover opened on\nthe stage follows the stage rather than the page — a portal mounts on\n`<body>` and inherits nothing from the stage's DOM.",
|
|
103
105
|
"control": {
|
|
104
106
|
"kind": "enum",
|
|
105
107
|
"members": [
|
|
108
|
+
"command",
|
|
106
109
|
"console",
|
|
107
110
|
"editorial",
|
|
108
111
|
"marketing",
|
|
@@ -110,7 +113,10 @@
|
|
|
110
113
|
"tender",
|
|
111
114
|
"zine",
|
|
112
115
|
"kiln",
|
|
113
|
-
"porcelain"
|
|
116
|
+
"porcelain",
|
|
117
|
+
"ledger",
|
|
118
|
+
"monolith",
|
|
119
|
+
"prism"
|
|
114
120
|
]
|
|
115
121
|
}
|
|
116
122
|
},
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Reveal",
|
|
3
|
+
"slug": "reveal",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "Content that rises into place the first time it scrolls into view —\ncueplusplus.com's section entrance, ported (spec 2026-10-04-cue-site-verbatim\n§4.3): framer-motion's `whileInView` with `viewport: { once: true }`, from\n`opacity: 0` and `distance` px down, over `duration` ms `easeOut`.\n\nNo motion library: an `IntersectionObserver` and two inline styles. It\nwatches once and lets go. Held still, or for a reader who prefers reduced\nmotion, the content is simply there and nothing is observed — as the site's\n`initial={reduce ? false : …}` does.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "distance",
|
|
12
|
+
"type": "number",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "28",
|
|
15
|
+
"description": "How far below its resting place the content starts, in px. Defaults to `28`, the site's services blocks.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "number"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "rootMargin",
|
|
22
|
+
"type": "string",
|
|
23
|
+
"required": false,
|
|
24
|
+
"defaultValue": "-12% 0px",
|
|
25
|
+
"description": "How far inside the viewport the entry line sits, as an `IntersectionObserver`\nroot margin. Defaults to `\"-12% 0px\"`, the site's services blocks; its\nbeliefs use `\"-15% 0px\"`.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "string"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "duration",
|
|
32
|
+
"type": "number",
|
|
33
|
+
"required": false,
|
|
34
|
+
"defaultValue": "500",
|
|
35
|
+
"description": "How long the entrance takes, in ms. Defaults to `500`.",
|
|
36
|
+
"control": {
|
|
37
|
+
"kind": "number"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "stagger",
|
|
42
|
+
"type": "number",
|
|
43
|
+
"required": false,
|
|
44
|
+
"defaultValue": "0",
|
|
45
|
+
"description": "The delay between items, in ms. `0` (the default) moves the whole block as\none. Anything else leaves the block still and moves only the descendants\nmarked `data-reveal-item`, this many ms apart, in document order — the\nsite's beliefs stagger their two columns 80ms apart, and nothing inside\nthem.",
|
|
46
|
+
"control": {
|
|
47
|
+
"kind": "number"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "children",
|
|
52
|
+
"type": "ReactNode",
|
|
53
|
+
"required": false,
|
|
54
|
+
"defaultValue": null,
|
|
55
|
+
"description": "What rises into place: the block itself, or the items in it marked `data-reveal-item`.",
|
|
56
|
+
"control": {
|
|
57
|
+
"kind": "node",
|
|
58
|
+
"fixture": "children.text"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"typeReferences": [
|
|
63
|
+
"React.ComponentPropsWithoutRef<\"div\">"
|
|
64
|
+
],
|
|
65
|
+
"subcomponents": [],
|
|
66
|
+
"parts": [],
|
|
67
|
+
"variants": {},
|
|
68
|
+
"defaultVariants": {},
|
|
69
|
+
"tokensUsed": [],
|
|
70
|
+
"summary": "Content that rises into place the first time it scrolls into view, once — cueplusplus.com's section entrance, with an optional stagger over the items you mark.",
|
|
71
|
+
"examples": [
|
|
72
|
+
{
|
|
73
|
+
"title": "Usage",
|
|
74
|
+
"code": "<Reveal distance={22} rootMargin=\"-15% 0px\" stagger={80}>\n <div data-reveal-item>Stance</div>\n <div data-reveal-item>Reason</div>\n</Reveal>",
|
|
75
|
+
"language": "tsx"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"status": "stable",
|
|
79
|
+
"url": "/docs/components/reveal",
|
|
80
|
+
"mdUrl": "/docs/components/reveal.md",
|
|
81
|
+
"jsonUrl": "/r/components/reveal.json",
|
|
82
|
+
"whenToUse": [
|
|
83
|
+
"Sections of a long marketing or product page that should arrive as the reader reaches them.",
|
|
84
|
+
"A pair of columns that should land one after the other: mark each with `data-reveal-item` and set `stagger`."
|
|
85
|
+
],
|
|
86
|
+
"whenNotToUse": [
|
|
87
|
+
"Above the fold, where the content is already in view: it would only flicker in.",
|
|
88
|
+
"Application screens, forms and anything a reader returns to: motion that repeats on every visit is noise there, and Reveal plays once per mount."
|
|
89
|
+
],
|
|
90
|
+
"commonMistakes": [
|
|
91
|
+
"Marking every descendant with `data-reveal-item`. The stagger is for a few large items; bullets and words should arrive with their block.",
|
|
92
|
+
"Leaving the default root margin on a short container. `-12% 0px` waits until the content is well inside the viewport; pass `0px` for content near the bottom of a page."
|
|
93
|
+
],
|
|
94
|
+
"specimens": [
|
|
95
|
+
{
|
|
96
|
+
"title": "Reveal",
|
|
97
|
+
"group": "layout",
|
|
98
|
+
"components": [
|
|
99
|
+
"Reveal"
|
|
100
|
+
],
|
|
101
|
+
"code": "<Reveal rootMargin=\"0px\" stagger={80} className=\"grid gap-(--cue-space-3) sm:grid-cols-2\">\n <Panel data-reveal-item=\"\" className=\"p-(--cue-space-4)\">Stance</Panel>\n <Panel data-reveal-item=\"\" className=\"p-(--cue-space-4)\">Reason</Panel>\n</Reveal>",
|
|
102
|
+
"note": "Content that rises into place the first time it scrolls into view, once — cueplusplus.com's section entrance. `stagger` moves only the items it marks.",
|
|
103
|
+
"interaction": "none. Prefer reduced motion, or hold it still, and the content is simply there."
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ribbon",
|
|
3
|
+
"slug": "ribbon",
|
|
4
|
+
"group": "brand",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "A flowing ribbon of layered bands in the theme's own inks — the payments-page\nmotif (spec 2026-10-02 §3.4). Five bezier bands cross the frame on a diagonal,\neach a gradient from the accent to the foreground's mix, so it reads in every\ntheme and both modes. Decorative: hidden from assistive technology.\n\nStatic markup — no `\"use client\"`.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "seed",
|
|
12
|
+
"type": "number",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "1",
|
|
15
|
+
"description": "Which ribbon: the same seed draws the same bands. Defaults to `1`.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "number"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"typeReferences": [
|
|
22
|
+
"React.SVGProps<SVGSVGElement>"
|
|
23
|
+
],
|
|
24
|
+
"subcomponents": [],
|
|
25
|
+
"parts": [],
|
|
26
|
+
"variants": {},
|
|
27
|
+
"defaultVariants": {},
|
|
28
|
+
"tokensUsed": [
|
|
29
|
+
"--cue-accent",
|
|
30
|
+
"--cue-fg"
|
|
31
|
+
],
|
|
32
|
+
"summary": "A flowing ribbon of layered bands in the theme's inks: the payments-page motif.",
|
|
33
|
+
"examples": [
|
|
34
|
+
{
|
|
35
|
+
"title": "Usage",
|
|
36
|
+
"code": "<Ribbon seed={3} className=\"h-64 w-full\" />",
|
|
37
|
+
"language": "tsx"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"status": "stable",
|
|
41
|
+
"url": "/docs/components/ribbon",
|
|
42
|
+
"mdUrl": "/docs/components/ribbon.md",
|
|
43
|
+
"jsonUrl": "/r/components/ribbon.json",
|
|
44
|
+
"whenToUse": [
|
|
45
|
+
"Hero art on a product or payments page, at any size; it stretches to its box."
|
|
46
|
+
],
|
|
47
|
+
"whenNotToUse": [
|
|
48
|
+
"Content imagery. It is decorative and hidden from assistive technology."
|
|
49
|
+
],
|
|
50
|
+
"commonMistakes": [
|
|
51
|
+
"Changing its colours with props. It reads the theme's accent and foreground, so it follows the Look."
|
|
52
|
+
],
|
|
53
|
+
"specimens": [
|
|
54
|
+
{
|
|
55
|
+
"title": "Ribbon",
|
|
56
|
+
"group": "brand",
|
|
57
|
+
"components": [
|
|
58
|
+
"Ribbon"
|
|
59
|
+
],
|
|
60
|
+
"code": "<Specimens>\n {[1, 2, 3].map((seed) => (\n <Specimen key={seed} label={`seed ${seed}`} wide>\n <Ribbon seed={seed} className=\"h-40 w-64\" />\n </Specimen>\n ))}\n</Specimens>",
|
|
61
|
+
"note": "Layered bezier bands in the theme's own inks. The seed is the picture: the same seed draws the same ribbon on the server and in the browser.",
|
|
62
|
+
"interaction": "none."
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -231,12 +231,14 @@
|
|
|
231
231
|
"--cue-paint-stroke-to",
|
|
232
232
|
"--cue-paint-stroke-width",
|
|
233
233
|
"--cue-radius-control",
|
|
234
|
+
"--cue-radius-scale",
|
|
234
235
|
"--cue-space-2",
|
|
235
236
|
"--cue-space-3",
|
|
236
237
|
"--cue-space-4",
|
|
237
238
|
"--cue-space-5",
|
|
238
239
|
"--cue-style-body-weight",
|
|
239
240
|
"--cue-style-check-edge",
|
|
241
|
+
"--cue-style-control-radius",
|
|
240
242
|
"--cue-style-control-step-size",
|
|
241
243
|
"--cue-style-disabled-edge",
|
|
242
244
|
"--cue-style-disabled-fill",
|
|
@@ -245,6 +247,7 @@
|
|
|
245
247
|
"--cue-style-field-focus-offset",
|
|
246
248
|
"--cue-style-field-hover-edge",
|
|
247
249
|
"--cue-style-field-pad",
|
|
250
|
+
"--cue-style-field-radius",
|
|
248
251
|
"--cue-style-focus-edge",
|
|
249
252
|
"--cue-style-focus-width",
|
|
250
253
|
"--cue-style-input-face",
|
|
@@ -170,11 +170,13 @@
|
|
|
170
170
|
"--cue-paint-stroke-to",
|
|
171
171
|
"--cue-paint-stroke-width",
|
|
172
172
|
"--cue-radius-control",
|
|
173
|
+
"--cue-radius-scale",
|
|
173
174
|
"--cue-space-3",
|
|
174
175
|
"--cue-space-4",
|
|
175
176
|
"--cue-space-5",
|
|
176
177
|
"--cue-style-body-weight",
|
|
177
178
|
"--cue-style-check-edge",
|
|
179
|
+
"--cue-style-control-radius",
|
|
178
180
|
"--cue-style-control-step-size",
|
|
179
181
|
"--cue-style-disabled-edge",
|
|
180
182
|
"--cue-style-disabled-fill",
|
|
@@ -183,6 +185,7 @@
|
|
|
183
185
|
"--cue-style-field-focus-offset",
|
|
184
186
|
"--cue-style-field-hover-edge",
|
|
185
187
|
"--cue-style-field-pad",
|
|
188
|
+
"--cue-style-field-radius",
|
|
186
189
|
"--cue-style-focus-edge",
|
|
187
190
|
"--cue-style-focus-width",
|
|
188
191
|
"--cue-style-input-face",
|
|
@@ -220,6 +220,7 @@
|
|
|
220
220
|
"--cue-paint-stroke-width",
|
|
221
221
|
"--cue-radius-control",
|
|
222
222
|
"--cue-radius-overlay",
|
|
223
|
+
"--cue-radius-scale",
|
|
223
224
|
"--cue-space-1",
|
|
224
225
|
"--cue-space-2",
|
|
225
226
|
"--cue-space-3",
|
|
@@ -228,6 +229,7 @@
|
|
|
228
229
|
"--cue-style-body-weight",
|
|
229
230
|
"--cue-style-check-edge",
|
|
230
231
|
"--cue-style-control-face",
|
|
232
|
+
"--cue-style-control-radius",
|
|
231
233
|
"--cue-style-control-step-size",
|
|
232
234
|
"--cue-style-disabled-edge",
|
|
233
235
|
"--cue-style-disabled-fill",
|
|
@@ -236,6 +238,7 @@
|
|
|
236
238
|
"--cue-style-field-focus-offset",
|
|
237
239
|
"--cue-style-field-hover-edge",
|
|
238
240
|
"--cue-style-field-pad",
|
|
241
|
+
"--cue-style-field-radius",
|
|
239
242
|
"--cue-style-focus-edge",
|
|
240
243
|
"--cue-style-focus-width",
|
|
241
244
|
"--cue-style-glyph-ink",
|