@cueplusplus/ui 0.1.0 → 0.3.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 +705 -0
- package/dist/brand/_chassis.d.ts +54 -0
- package/dist/brand/_chassis.js +81 -0
- package/dist/brand/_geometry.js +41 -0
- package/dist/brand/cue-logotype.d.ts +29 -0
- package/dist/brand/cue-logotype.js +60 -0
- package/dist/brand/cue-mark.d.ts +30 -0
- package/dist/brand/cue-mark.js +61 -0
- package/dist/brand/index.d.ts +5 -0
- package/dist/brand/plussie.d.ts +67 -0
- package/dist/brand/plussie.js +125 -0
- package/dist/chat/agent-pile.js +1 -1
- package/dist/chat/ask-box.js +2 -2
- package/dist/chat/delegation-card.js +1 -1
- package/dist/chat/message.js +2 -2
- package/dist/chrome/_edge-scroller.d.ts +45 -0
- package/dist/chrome/_edge-scroller.js +149 -0
- package/dist/chrome/_glyphs.js +19 -1
- package/dist/chrome/_tabs-scroll.d.ts +13 -8
- package/dist/chrome/_tabs-scroll.js +13 -8
- package/dist/chrome/app-bar.d.ts +103 -0
- package/dist/chrome/app-bar.js +175 -0
- package/dist/chrome/app-shell.d.ts +125 -0
- package/dist/chrome/app-shell.js +167 -0
- package/dist/chrome/footer.d.ts +75 -0
- package/dist/chrome/footer.js +68 -0
- package/dist/chrome/index.d.ts +5 -1
- package/dist/chrome/index.js +4 -1
- package/dist/chrome/navigation-menu.js +1 -1
- package/dist/chrome/page-shell.d.ts +1 -1
- package/dist/chrome/page-shell.js +15 -5
- package/dist/chrome/segmented-control.d.ts +19 -0
- package/dist/chrome/segmented-control.js +40 -21
- package/dist/chrome/tabs.js +21 -65
- package/dist/chrome/toolbar.d.ts +22 -0
- package/dist/chrome/toolbar.js +26 -5
- package/dist/configurator/_overrides.js +22 -8
- package/dist/configurator/configurator.js +1 -1
- package/dist/configurator/panel-sections.js +10 -4
- package/dist/dmx/channel-matrix.js +1 -1
- package/dist/forms/otp-field.js +1 -1
- package/dist/index.d.ts +18 -9
- package/dist/index.js +16 -10
- package/dist/instruments/data-table.js +1 -1
- package/dist/instruments/index.d.ts +2 -2
- package/dist/instruments/index.js +2 -2
- package/dist/instruments/table.d.ts +14 -1
- package/dist/instruments/table.js +20 -1
- package/dist/layout/carousel.js +1 -1
- package/dist/layout/container.d.ts +1 -1
- package/dist/layout/container.js +6 -3
- package/dist/layout/index.d.ts +3 -3
- package/dist/layout/index.js +3 -3
- package/dist/layout/pagination.js +1 -1
- package/dist/layout/sidebar.d.ts +23 -3
- package/dist/layout/sidebar.js +18 -7
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/command-palette.js +1 -1
- package/dist/overlays/dialog.js +1 -1
- package/dist/overlays/dropdown-menu.js +2 -2
- package/dist/overlays/hover-card.js +1 -1
- package/dist/overlays/index.js +1 -1
- package/dist/overlays/popover.js +1 -1
- package/dist/overlays/sheet.js +1 -1
- package/dist/overlays/toast.js +1 -1
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/primitives/index.d.ts +1 -1
- package/dist/primitives/index.js +1 -1
- package/dist/primitives/status-dot.d.ts +7 -0
- package/dist/primitives/status-dot.js +8 -1
- package/dist/styles.css +58 -2
- package/dist/system/density.d.ts +4 -1
- package/dist/system/density.js +12 -4
- package/dist/system/index.d.ts +4 -4
- package/dist/system/portal.d.ts +5 -5
- package/dist/system/portal.js +30 -11
- package/dist/system/prepaint.d.ts +34 -9
- package/dist/system/prepaint.js +48 -25
- package/dist/system/theme-provider.d.ts +48 -11
- package/dist/system/theme-provider.js +109 -35
- package/dist/system/use-density.d.ts +3 -3
- package/dist/system/use-density.js +16 -6
- package/dist/system/use-theme.d.ts +4 -2
- package/dist/system/use-theme.js +4 -2
- package/dist/theming/_presets.js +133 -5
- package/dist/theming/create-theme.d.ts +2 -2
- package/dist/theming/create-theme.js +37 -19
- package/dist/theming/serialize.d.ts +1 -1
- package/dist/theming/serialize.js +25 -1
- package/manifest/components/accordion.json +154 -0
- package/manifest/components/agent-pile.json +116 -0
- package/manifest/components/alert-dialog.json +190 -0
- package/manifest/components/app-bar.json +244 -0
- package/manifest/components/app-shell.json +291 -0
- package/manifest/components/app-window-frame.json +102 -0
- package/manifest/components/ask-box.json +209 -0
- package/manifest/components/autocomplete.json +197 -0
- package/manifest/components/avatar-group.json +72 -0
- package/manifest/components/avatar.json +95 -0
- package/manifest/components/breadcrumb.json +74 -0
- package/manifest/components/button-group.json +74 -0
- package/manifest/components/button.json +125 -0
- package/manifest/components/calendar.json +65 -0
- package/manifest/components/card.json +140 -0
- package/manifest/components/carousel.json +200 -0
- package/manifest/components/channel-matrix.json +173 -0
- package/manifest/components/chart-container.json +111 -0
- package/manifest/components/chart-ramp.json +72 -0
- package/manifest/components/chart-swatch.json +65 -0
- package/manifest/components/chart-tooltip-content.json +114 -0
- package/manifest/components/checkbox-group.json +68 -0
- package/manifest/components/checkbox.json +93 -0
- package/manifest/components/chip.json +132 -0
- package/manifest/components/collapsible.json +120 -0
- package/manifest/components/color-area.json +59 -0
- package/manifest/components/color-field.json +79 -0
- package/manifest/components/color-picker.json +175 -0
- package/manifest/components/color-slider.json +75 -0
- package/manifest/components/color-swatch.json +68 -0
- package/manifest/components/colors-section.json +66 -0
- package/manifest/components/combobox.json +198 -0
- package/manifest/components/command-palette.json +177 -0
- package/manifest/components/composer.json +176 -0
- package/manifest/components/container.json +60 -0
- package/manifest/components/context-menu.json +121 -0
- package/manifest/components/copy-button.json +93 -0
- package/manifest/components/cue-logotype.json +96 -0
- package/manifest/components/cue-mark.json +97 -0
- package/manifest/components/cue-portal-frame.json +55 -0
- package/manifest/components/data-table-pagination.json +83 -0
- package/manifest/components/data-table-toolbar.json +104 -0
- package/manifest/components/date-field.json +80 -0
- package/manifest/components/date-picker.json +191 -0
- package/manifest/components/date-range-picker.json +191 -0
- package/manifest/components/delegation-card.json +144 -0
- package/manifest/components/density.json +58 -0
- package/manifest/components/description-list.json +84 -0
- package/manifest/components/dialog.json +198 -0
- package/manifest/components/disclosure.json +109 -0
- package/manifest/components/dmx-bar.json +94 -0
- package/manifest/components/dmx-strip.json +101 -0
- package/manifest/components/drawer.json +179 -0
- package/manifest/components/dropdown-menu.json +229 -0
- package/manifest/components/empty-state.json +90 -0
- package/manifest/components/env-var-input.json +150 -0
- package/manifest/components/export-dialog.json +84 -0
- package/manifest/components/eyebrow.json +56 -0
- package/manifest/components/field-description.json +63 -0
- package/manifest/components/field-error.json +77 -0
- package/manifest/components/field-label.json +63 -0
- package/manifest/components/field.json +79 -0
- package/manifest/components/file-upload.json +159 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/footer.json +112 -0
- package/manifest/components/grid.json +81 -0
- package/manifest/components/group-bar.json +102 -0
- package/manifest/components/hover-card.json +151 -0
- package/manifest/components/icon-button.json +88 -0
- package/manifest/components/info-tip.json +98 -0
- package/manifest/components/input-group.json +91 -0
- package/manifest/components/input.json +89 -0
- package/manifest/components/item.json +129 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/link.json +81 -0
- package/manifest/components/log-viewer.json +139 -0
- package/manifest/components/menubar.json +157 -0
- package/manifest/components/message-list.json +100 -0
- package/manifest/components/message.json +116 -0
- package/manifest/components/meter.json +114 -0
- package/manifest/components/multi-select.json +190 -0
- package/manifest/components/musical-time-input.json +113 -0
- package/manifest/components/navigation-menu.json +226 -0
- package/manifest/components/node-card.json +109 -0
- package/manifest/components/node-handle.json +69 -0
- package/manifest/components/number-field.json +107 -0
- package/manifest/components/otp-field.json +128 -0
- package/manifest/components/page-shell.json +96 -0
- package/manifest/components/pagination.json +92 -0
- package/manifest/components/panel-header.json +77 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +119 -0
- package/manifest/components/piano-keyboard.json +120 -0
- package/manifest/components/plussie.json +111 -0
- package/manifest/components/popover.json +193 -0
- package/manifest/components/preset-section.json +73 -0
- package/manifest/components/progress.json +95 -0
- package/manifest/components/radio-group.json +73 -0
- package/manifest/components/radio.json +80 -0
- package/manifest/components/rating.json +141 -0
- package/manifest/components/resizable.json +88 -0
- package/manifest/components/row.json +109 -0
- package/manifest/components/scroll-area.json +91 -0
- package/manifest/components/scrollable-tabs-list.json +83 -0
- package/manifest/components/scrub-input.json +200 -0
- package/manifest/components/seam-cell.json +75 -0
- package/manifest/components/seam-grid.json +75 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +134 -0
- package/manifest/components/section-header.json +112 -0
- package/manifest/components/segmented-control.json +138 -0
- package/manifest/components/select.json +194 -0
- package/manifest/components/separator.json +53 -0
- package/manifest/components/shape-section.json +66 -0
- package/manifest/components/sheet.json +186 -0
- package/manifest/components/sidebar.json +198 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/slider.json +89 -0
- package/manifest/components/sparkline.json +76 -0
- package/manifest/components/spectrum-visualizer.json +115 -0
- package/manifest/components/spinner.json +61 -0
- package/manifest/components/stack.json +96 -0
- package/manifest/components/stat.json +87 -0
- package/manifest/components/status-bar.json +58 -0
- package/manifest/components/status-dot.json +78 -0
- package/manifest/components/stepper.json +89 -0
- package/manifest/components/switch.json +87 -0
- package/manifest/components/table-scroll-region.json +69 -0
- package/manifest/components/table.json +155 -0
- package/manifest/components/tabs.json +145 -0
- package/manifest/components/tags-input.json +190 -0
- package/manifest/components/terminal-frame.json +119 -0
- package/manifest/components/textarea.json +76 -0
- package/manifest/components/theme-configurator.json +124 -0
- package/manifest/components/theme-provider.json +134 -0
- package/manifest/components/threshold-rail.json +160 -0
- package/manifest/components/time-field.json +80 -0
- package/manifest/components/timeline-ruler.json +139 -0
- package/manifest/components/timeline.json +115 -0
- package/manifest/components/title-bar.json +82 -0
- package/manifest/components/toast.json +130 -0
- package/manifest/components/toggle-group.json +106 -0
- package/manifest/components/toggle.json +109 -0
- package/manifest/components/token-editor.json +90 -0
- package/manifest/components/toolbar.json +163 -0
- package/manifest/components/tooltip.json +164 -0
- package/manifest/components/tree-visibility-toggle.json +84 -0
- package/manifest/components/tree.json +140 -0
- package/manifest/components/two-step-button.json +113 -0
- package/manifest/components/universe-grid.json +127 -0
- package/manifest/components/usage-chart.json +124 -0
- package/manifest/manifest.json +2142 -0
- package/manifest/tokens.json +138 -0
- package/package.json +13 -5
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "DescriptionList",
|
|
3
|
+
"slug": "description-list",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "The `<dl>` family: {@link DescriptionListRoot}, `Term` and `Detail`.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [],
|
|
11
|
+
"subcomponents": [
|
|
12
|
+
"Root",
|
|
13
|
+
"Term",
|
|
14
|
+
"Detail"
|
|
15
|
+
],
|
|
16
|
+
"parts": [
|
|
17
|
+
{
|
|
18
|
+
"name": "Root",
|
|
19
|
+
"usage": "DescriptionList.Root",
|
|
20
|
+
"description": "A key/value block: the honest `<dl>`, styled for a console.\n\nTerms are set in the mono micro caption idiom shared with `SectionHeader` and\nmenu group labels, so a metadata block reads as annotation rather than as\ncompeting body text.\n\nStatic markup — no `\"use client\"`.",
|
|
21
|
+
"props": [
|
|
22
|
+
{
|
|
23
|
+
"name": "layout",
|
|
24
|
+
"type": "\"inline\" | \"stacked\"",
|
|
25
|
+
"required": false,
|
|
26
|
+
"defaultValue": "inline",
|
|
27
|
+
"description": "`\"inline\"` (default) puts the detail beside its term in a two-column grid;\n`\"stacked\"` puts it underneath. Stack when the details are long enough to\nwrap, which turns the aligned column into ragged text anyway."
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"typeReferences": [
|
|
31
|
+
"React.ComponentPropsWithoutRef<\"dl\">"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "Term",
|
|
36
|
+
"usage": "DescriptionList.Term",
|
|
37
|
+
"description": "One key. Mono, uppercase, widely tracked — annotation, not body text.",
|
|
38
|
+
"props": [],
|
|
39
|
+
"typeReferences": [
|
|
40
|
+
"React.ComponentPropsWithoutRef<\"dt\">"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "Detail",
|
|
45
|
+
"usage": "DescriptionList.Detail",
|
|
46
|
+
"description": "One value. `m-0` resets the browser's inherited `<dd>` indent, which would\notherwise push every detail 40px right of the grid column it belongs to.",
|
|
47
|
+
"props": [],
|
|
48
|
+
"typeReferences": [
|
|
49
|
+
"React.ComponentPropsWithoutRef<\"dd\">"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"variants": {},
|
|
54
|
+
"defaultVariants": {},
|
|
55
|
+
"tokensUsed": [
|
|
56
|
+
"--cue-fg",
|
|
57
|
+
"--cue-fg-subtle",
|
|
58
|
+
"--cue-font-mono",
|
|
59
|
+
"--cue-space-2",
|
|
60
|
+
"--cue-space-3",
|
|
61
|
+
"--cue-space-5",
|
|
62
|
+
"--cue-text-label",
|
|
63
|
+
"--cue-text-ui"
|
|
64
|
+
],
|
|
65
|
+
"summary": "The `<dl>` family: {@link DescriptionListRoot}, `Term` and `Detail`.",
|
|
66
|
+
"examples": [],
|
|
67
|
+
"status": "todo-docs",
|
|
68
|
+
"url": "/docs/components/description-list",
|
|
69
|
+
"mdUrl": "/docs/components/description-list.md",
|
|
70
|
+
"jsonUrl": "/r/components/description-list.json",
|
|
71
|
+
"specimens": [
|
|
72
|
+
{
|
|
73
|
+
"title": "DescriptionList",
|
|
74
|
+
"group": "layout",
|
|
75
|
+
"components": [
|
|
76
|
+
"DescriptionList"
|
|
77
|
+
],
|
|
78
|
+
"code": "<div className=\"grid w-full gap-(--cue-space-5) lg:grid-cols-2\">\n <Panel className=\"p-(--cue-space-5)\">\n <DescriptionList.Root>\n <DescriptionList.Term>Protocol</DescriptionList.Term>\n <DescriptionList.Detail>Art-Net</DescriptionList.Detail>\n <DescriptionList.Term>Host</DescriptionList.Term>\n <DescriptionList.Detail>10.0.0.42</DescriptionList.Detail>\n <DescriptionList.Term>Rate</DescriptionList.Term>\n <DescriptionList.Detail>\n <span className=\"flex items-center gap-(--cue-space-2)\">\n 44 Hz <StatusDot tone=\"ok\" label=\"Nominal\" />\n </span>\n </DescriptionList.Detail>\n </DescriptionList.Root>\n </Panel>\n <Panel className=\"p-(--cue-space-5)\">\n <DescriptionList.Root layout=\"stacked\">\n <DescriptionList.Term>Protocol</DescriptionList.Term>\n <DescriptionList.Detail>Art-Net</DescriptionList.Detail>\n <DescriptionList.Term>Host</DescriptionList.Term>\n <DescriptionList.Detail>10.0.0.42</DescriptionList.Detail>\n </DescriptionList.Root>\n </Panel>\n</div>",
|
|
79
|
+
"note": "Two layouts: inline pairs for a sidebar, stacked for a page.",
|
|
80
|
+
"interaction": "none."
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"todo": true
|
|
84
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Dialog",
|
|
3
|
+
"slug": "dialog",
|
|
4
|
+
"group": "overlays",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A modal surface for a focused task: patching a fixture, renaming a cue,\nconfirming an import.\n\nWraps Base UI's `Dialog`, so every part of the behaviour contract — focus\ntrap, focus restoration on close, Escape, outside press, scroll lock, the\n`aria-labelledby`/`aria-describedby` wiring — is the primitive's, and this\nlayer supplies only the token-driven skin plus the portal theme stamp.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [],
|
|
11
|
+
"subcomponents": [
|
|
12
|
+
"Root",
|
|
13
|
+
"Trigger",
|
|
14
|
+
"Content",
|
|
15
|
+
"Title",
|
|
16
|
+
"Description",
|
|
17
|
+
"Footer",
|
|
18
|
+
"Close"
|
|
19
|
+
],
|
|
20
|
+
"parts": [
|
|
21
|
+
{
|
|
22
|
+
"name": "Root",
|
|
23
|
+
"usage": "Dialog.Root",
|
|
24
|
+
"description": "Groups the parts of a dialog and owns its open state. Renders no element.",
|
|
25
|
+
"props": [],
|
|
26
|
+
"typeReferences": [
|
|
27
|
+
"BaseDialog.Root.Props"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "Trigger",
|
|
32
|
+
"usage": "Dialog.Trigger",
|
|
33
|
+
"description": "The control that opens the dialog. A `<button>` by default.\n\nDeliberately unstyled: pass `render={<Button />}` to give it a skin, so the\nbutton's variant classes stay the last word on how it looks. Styling the\ntrigger here would let those classes lose a `tailwind-merge` tie-break.",
|
|
34
|
+
"props": [],
|
|
35
|
+
"typeReferences": [
|
|
36
|
+
"BaseDialog.Trigger.Props"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "Content",
|
|
41
|
+
"usage": "Dialog.Content",
|
|
42
|
+
"description": "The dialog's portal, scrim and popup in one part.\n\nThe portal container comes from {@link useCuePortalProps}, so the surface\ncarries the caller's `data-theme` / `data-density` / `data-mode` even though\nit mounts at the end of `<body>` — a dialog opened from an ultra-compact\nisland stays ultra-compact.\n\nFocus trapping, focus restoration, Escape and outside-press dismissal, and\nscroll locking all come from Base UI; this layer only paints.",
|
|
43
|
+
"props": [
|
|
44
|
+
{
|
|
45
|
+
"name": "className",
|
|
46
|
+
"type": "string",
|
|
47
|
+
"required": false,
|
|
48
|
+
"defaultValue": null,
|
|
49
|
+
"description": "Extra classes for the popup surface."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "width",
|
|
53
|
+
"type": "\"sm\" | \"md\" | \"lg\"",
|
|
54
|
+
"required": false,
|
|
55
|
+
"defaultValue": "md",
|
|
56
|
+
"description": ""
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "closeLabel",
|
|
60
|
+
"type": "string",
|
|
61
|
+
"required": false,
|
|
62
|
+
"defaultValue": "Close",
|
|
63
|
+
"description": "Accessible name for the corner close affordance. Defaults to `\"Close\"`."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "keepMounted",
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"required": false,
|
|
69
|
+
"defaultValue": null,
|
|
70
|
+
"description": "Keep the popup mounted while closed, so its content is not re-created."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "backdropClassName",
|
|
74
|
+
"type": "string",
|
|
75
|
+
"required": false,
|
|
76
|
+
"defaultValue": null,
|
|
77
|
+
"description": "Extra classes for the scrim behind it."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "showCloseButton",
|
|
81
|
+
"type": "boolean",
|
|
82
|
+
"required": false,
|
|
83
|
+
"defaultValue": "true",
|
|
84
|
+
"description": "Show the corner close affordance. Defaults to `true`."
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"typeReferences": [
|
|
88
|
+
"Omit<BaseDialog.Popup.Props, \"className\">",
|
|
89
|
+
"VariantProps<typeof dialogPopupVariants>"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "Title",
|
|
94
|
+
"usage": "Dialog.Title",
|
|
95
|
+
"description": "The dialog's heading. Base UI wires it to the popup's `aria-labelledby`, so a\ndialog with a title needs no `aria-label`.",
|
|
96
|
+
"props": [],
|
|
97
|
+
"typeReferences": [
|
|
98
|
+
"BaseDialog.Title.Props"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "Description",
|
|
103
|
+
"usage": "Dialog.Description",
|
|
104
|
+
"description": "The supporting line under the title, published as `aria-describedby`.",
|
|
105
|
+
"props": [],
|
|
106
|
+
"typeReferences": [
|
|
107
|
+
"BaseDialog.Description.Props"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "Footer",
|
|
112
|
+
"usage": "Dialog.Footer",
|
|
113
|
+
"description": "The right-aligned action strip at the foot of the popup.",
|
|
114
|
+
"props": [],
|
|
115
|
+
"typeReferences": [
|
|
116
|
+
"React.ComponentPropsWithoutRef<\"div\">"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "Close",
|
|
121
|
+
"usage": "Dialog.Close",
|
|
122
|
+
"description": "A control that closes the dialog. Unstyled for the same reason as the\ntrigger — wrap it: `<Dialog.Close render={<Button>Cancel</Button>} />`.",
|
|
123
|
+
"props": [],
|
|
124
|
+
"typeReferences": [
|
|
125
|
+
"BaseDialog.Close.Props"
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"variants": {
|
|
130
|
+
"width": [
|
|
131
|
+
"sm",
|
|
132
|
+
"md",
|
|
133
|
+
"lg"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"defaultVariants": {
|
|
137
|
+
"width": "md"
|
|
138
|
+
},
|
|
139
|
+
"tokensUsed": [
|
|
140
|
+
"--cue-accent-soft",
|
|
141
|
+
"--cue-border",
|
|
142
|
+
"--cue-border-overlay",
|
|
143
|
+
"--cue-control-sm",
|
|
144
|
+
"--cue-fg",
|
|
145
|
+
"--cue-fg-muted",
|
|
146
|
+
"--cue-fg-subtle",
|
|
147
|
+
"--cue-font-mono",
|
|
148
|
+
"--cue-radius-control",
|
|
149
|
+
"--cue-radius-overlay",
|
|
150
|
+
"--cue-scrim",
|
|
151
|
+
"--cue-space-1",
|
|
152
|
+
"--cue-space-2",
|
|
153
|
+
"--cue-space-3",
|
|
154
|
+
"--cue-space-4",
|
|
155
|
+
"--cue-space-6",
|
|
156
|
+
"--cue-surface-2",
|
|
157
|
+
"--cue-text-emphasis",
|
|
158
|
+
"--cue-text-label",
|
|
159
|
+
"--cue-text-ui"
|
|
160
|
+
],
|
|
161
|
+
"summary": "The centred modal: focus trapped, page behind it inert.",
|
|
162
|
+
"examples": [
|
|
163
|
+
{
|
|
164
|
+
"title": "Usage",
|
|
165
|
+
"code": "<Dialog.Root>\n <Dialog.Trigger render={<Button>Patch</Button>} />\n <Dialog.Content>\n <Dialog.Title>Patch fixture</Dialog.Title>\n <Dialog.Description>Choose a universe and a start address.</Dialog.Description>\n <Dialog.Footer>\n <Dialog.Close render={<Button variant=\"ghost\">Cancel</Button>} />\n <Button variant=\"primary\">Patch</Button>\n </Dialog.Footer>\n </Dialog.Content>\n</Dialog.Root>",
|
|
166
|
+
"language": "tsx"
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"status": "stable",
|
|
170
|
+
"url": "/docs/components/dialog",
|
|
171
|
+
"mdUrl": "/docs/components/dialog.md",
|
|
172
|
+
"jsonUrl": "/r/components/dialog.json",
|
|
173
|
+
"whenToUse": [
|
|
174
|
+
"A task that must be finished or cancelled before the page continues.",
|
|
175
|
+
"A form too large for a popover, at one of the three width rungs."
|
|
176
|
+
],
|
|
177
|
+
"whenNotToUse": [
|
|
178
|
+
"Confirming something destructive. Use `AlertDialog`, which announces as one and keeps focus on the safe answer.",
|
|
179
|
+
"Detail that hangs off a control. Use `Popover`, `HoverCard` or `Tooltip`.",
|
|
180
|
+
"A side panel that leaves the page usable. Use `Sheet` or `Drawer`."
|
|
181
|
+
],
|
|
182
|
+
"commonMistakes": [
|
|
183
|
+
"Styling `Dialog.Trigger` directly instead of passing `render={<Button />}`, which is what keeps the button's variant classes authoritative.",
|
|
184
|
+
"Opening a second dialog on top of the first. Swap the content of the one that is already open."
|
|
185
|
+
],
|
|
186
|
+
"specimens": [
|
|
187
|
+
{
|
|
188
|
+
"title": "Dialog",
|
|
189
|
+
"group": "overlays",
|
|
190
|
+
"components": [
|
|
191
|
+
"Dialog"
|
|
192
|
+
],
|
|
193
|
+
"code": "<Specimens>\n {([\"sm\", \"md\", \"lg\"] as const).map((width) => (\n <Specimen key={width} label={width}>\n <Dialog.Root>\n <Dialog.Trigger render={<Button>Patch, {width}</Button>} />\n <Dialog.Content width={width}>\n <Dialog.Title>Patch fixture</Dialog.Title>\n <Dialog.Description>\n Universe 1, channels 1 to 8. The fixture takes the next free block.\n </Dialog.Description>\n <div className=\"flex flex-col gap-(--cue-space-5)\">\n <Field name=\"label\">\n <FieldLabel>Label</FieldLabel>\n <Input defaultValue=\"Front wash\" />\n </Field>\n <Field name=\"blend\">\n <FieldLabel>Blend</FieldLabel>\n <Select aria-label=\"Blend mode\" items={[...BLEND_MODES]} defaultValue=\"htp\" />\n </Field>\n </div>\n <Dialog.Footer>\n <Dialog.Close render={<Button>Cancel</Button>} />\n <Dialog.Close render={<Button variant=\"primary\">Patch</Button>} />\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </Specimen>\n ))}\n <Specimen label=\"no close button\">\n <Dialog.Root>\n <Dialog.Trigger render={<Button>Bare</Button>} />\n <Dialog.Content showCloseButton={false}>\n <Dialog.Title>{COPY.loading.title}</Dialog.Title>\n <Dialog.Description>{COPY.loading.hint}</Dialog.Description>\n <Dialog.Footer>\n <Dialog.Close render={<Button>Close</Button>} />\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </Specimen>\n</Specimens>",
|
|
194
|
+
"note": "Three widths, a scrim at `--cue-scrim`, and a close button that can be turned off when the footer already owns dismissal.",
|
|
195
|
+
"interaction": "focus is trapped and returns to the trigger on close; Escape and a click on the scrim both dismiss."
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Disclosure",
|
|
3
|
+
"slug": "disclosure",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "The \"advanced\" idiom: a chromeless `▸ advanced` toggle over the fields most\nusers never touch.\n\nProgressive disclosure, drawn as quietly as the system can draw anything — no\nrim, no fill, mono micro caption ink, one triangle. It is deliberately *not*\na `Collapsible`: a collapsible section is a peer of the sections around it,\nwhile this is an annotation on the form it sits in, and giving it a summary\nrow that looks like a section header is what makes forms read as twice as\nlong as they are.\n\nPorted from dmxhub's `advBtn`, which is repeated at every route editor.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "label",
|
|
12
|
+
"type": "ReactNode",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "advanced",
|
|
15
|
+
"description": "What the toggle says. Defaults to `\"advanced\"`."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "open",
|
|
19
|
+
"type": "boolean",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "Open state when controlled. Pass with `onOpenChange`."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "defaultOpen",
|
|
26
|
+
"type": "boolean",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "Initial open state when uncontrolled."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "onOpenChange",
|
|
33
|
+
"type": "((open: boolean, eventDetails: CollapsibleRootChangeEventDetails) => void)",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": null,
|
|
36
|
+
"description": "Called with the new open state."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "rootClassName",
|
|
40
|
+
"type": "string",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": null,
|
|
43
|
+
"description": "Extra classes for the frame around toggle and body."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "bodyClassName",
|
|
47
|
+
"type": "string",
|
|
48
|
+
"required": false,
|
|
49
|
+
"defaultValue": null,
|
|
50
|
+
"description": "Extra classes for the revealed body."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "children",
|
|
54
|
+
"type": "ReactNode",
|
|
55
|
+
"required": false,
|
|
56
|
+
"defaultValue": null,
|
|
57
|
+
"description": "The rarely-used fields to reveal."
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"typeReferences": [
|
|
61
|
+
"Omit<React.ComponentPropsWithoutRef<\"button\">, \"children\" | \"onChange\">"
|
|
62
|
+
],
|
|
63
|
+
"subcomponents": [],
|
|
64
|
+
"parts": [],
|
|
65
|
+
"variants": {},
|
|
66
|
+
"defaultVariants": {},
|
|
67
|
+
"tokensUsed": [
|
|
68
|
+
"--cue-accent",
|
|
69
|
+
"--cue-control-md",
|
|
70
|
+
"--cue-fg",
|
|
71
|
+
"--cue-fg-muted",
|
|
72
|
+
"--cue-fg-subtle",
|
|
73
|
+
"--cue-font-mono",
|
|
74
|
+
"--cue-icon-sm",
|
|
75
|
+
"--cue-pad-row-x",
|
|
76
|
+
"--cue-space-1",
|
|
77
|
+
"--cue-space-2",
|
|
78
|
+
"--cue-space-3",
|
|
79
|
+
"--cue-space-4",
|
|
80
|
+
"--cue-text-label",
|
|
81
|
+
"--cue-text-micro",
|
|
82
|
+
"--cue-text-ui"
|
|
83
|
+
],
|
|
84
|
+
"summary": "The \"advanced\" idiom: a chromeless `▸ advanced` toggle over the fields most users never touch.",
|
|
85
|
+
"examples": [
|
|
86
|
+
{
|
|
87
|
+
"title": "Usage",
|
|
88
|
+
"code": "<Disclosure>\n <Field label=\"failover ttl\"><NumberField /></Field>\n</Disclosure>\n<Disclosure label=\"output\" open={open} onOpenChange={setOpen}>…</Disclosure>",
|
|
89
|
+
"language": "tsx"
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"status": "todo-docs",
|
|
93
|
+
"url": "/docs/components/disclosure",
|
|
94
|
+
"mdUrl": "/docs/components/disclosure.md",
|
|
95
|
+
"jsonUrl": "/r/components/disclosure.json",
|
|
96
|
+
"specimens": [
|
|
97
|
+
{
|
|
98
|
+
"title": "Disclosure",
|
|
99
|
+
"group": "layout",
|
|
100
|
+
"components": [
|
|
101
|
+
"Disclosure"
|
|
102
|
+
],
|
|
103
|
+
"code": "<div className=\"flex w-full max-w-[36rem] flex-col gap-(--cue-space-3)\">\n <Disclosure label=\"Advanced\">\n <div className=\"flex flex-col gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg-muted\">\n <span>Refresh rate 44 Hz</span>\n <span>Full frames every 800 ms</span>\n </div>\n </Disclosure>\n <Disclosure label=\"Open by default\" defaultOpen>\n <span className=\"font-mono text-(length:--cue-text-ui) text-fg-muted\">\n Already expanded.\n </span>\n </Disclosure>\n</div>",
|
|
104
|
+
"note": "The `advanced` idiom: a chromeless mono `▸ label` toggle for the settings most people never open.",
|
|
105
|
+
"interaction": "the caret rotates; nothing else moves."
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"todo": true
|
|
109
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "DmxBar",
|
|
3
|
+
"slug": "dmx-bar",
|
|
4
|
+
"group": "dmx",
|
|
5
|
+
"importPath": "@cueplusplus/ui/dmx",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "The whole universe as one strip: 512 columns, black at 0, white at 255.\n\nPorted from dmxhub's bridge, where it sits under every node in the routing\ngraph and updates at the wire rate. Three decisions are what make it cheap\nenough to leave running:\n\n1. **It is a 512×1 texture, stretched.** One `putImageData` per frame paints\n every channel; the browser scales it. Drawing 512 rectangles would be 512\n state changes for the same picture.\n2. **The pixels are never smoothed.** `image-rendering: pixelated` keeps one\n channel one hard column. Interpolation here would invent levels between\n channels, which is the one thing a monitoring bar must not do.\n3. **The crosshair is anchored in percent, not pixels.** The bar routinely\n sits inside a zoom transform (a node graph, a canvas). A pixel offset gets\n scaled with the parent and drifts off the cursor; a percentage resolves in\n the bar's own width and lands correctly at any zoom.\n\nThe ground is `--cue-data-ground`, true black in every theme: a level of 0 is\n*nothing*, and it should not read as the panel it happens to sit on.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "data",
|
|
12
|
+
"type": "Uint8Array<ArrayBufferLike>",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The current frame: one byte per channel, 512 long.\n\nRepainting is keyed on the array's *identity*, which is what a frame decoder\nnaturally produces (a fresh buffer per packet). A buffer mutated in place\nwill not repaint — hand a new view, or use `ChannelMatrix`, which owns an\nanimation loop for exactly that case."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "height",
|
|
19
|
+
"type": "number",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": "12",
|
|
22
|
+
"description": "Bar height in px at the 16px root, emitted as `rem`. Defaults to `12`."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "live",
|
|
26
|
+
"type": "boolean",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": "true",
|
|
29
|
+
"description": "Whether frames are still arriving. Defaults to `true`. When `false` the bar\ndims and says so in its accessible name — a stalled stream and a blacked-out\nuniverse look identical otherwise."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "label",
|
|
33
|
+
"type": "string",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": null,
|
|
36
|
+
"description": "What this universe is. Defaults to `\"DMX output\"`."
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"typeReferences": [
|
|
40
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
41
|
+
],
|
|
42
|
+
"subcomponents": [],
|
|
43
|
+
"parts": [],
|
|
44
|
+
"variants": {},
|
|
45
|
+
"defaultVariants": {},
|
|
46
|
+
"tokensUsed": [
|
|
47
|
+
"--cue-accent",
|
|
48
|
+
"--cue-accent-soft",
|
|
49
|
+
"--cue-border",
|
|
50
|
+
"--cue-border-overlay",
|
|
51
|
+
"--cue-control-sm",
|
|
52
|
+
"--cue-data-ground",
|
|
53
|
+
"--cue-fg",
|
|
54
|
+
"--cue-fg-muted",
|
|
55
|
+
"--cue-fg-subtle",
|
|
56
|
+
"--cue-font-mono",
|
|
57
|
+
"--cue-radius-control",
|
|
58
|
+
"--cue-radius-overlay",
|
|
59
|
+
"--cue-scrim",
|
|
60
|
+
"--cue-space-1",
|
|
61
|
+
"--cue-space-2",
|
|
62
|
+
"--cue-space-3",
|
|
63
|
+
"--cue-surface-2",
|
|
64
|
+
"--cue-text-emphasis",
|
|
65
|
+
"--cue-text-label",
|
|
66
|
+
"--cue-text-micro",
|
|
67
|
+
"--cue-text-ui"
|
|
68
|
+
],
|
|
69
|
+
"summary": "The whole universe as one strip: 512 columns, black at 0, white at 255.",
|
|
70
|
+
"examples": [
|
|
71
|
+
{
|
|
72
|
+
"title": "Usage",
|
|
73
|
+
"code": "<DmxBar label=\"Universe 0\" data={frame} live={connected} />",
|
|
74
|
+
"language": "tsx"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"status": "todo-docs",
|
|
78
|
+
"url": "/docs/components/dmx-bar",
|
|
79
|
+
"mdUrl": "/docs/components/dmx-bar.md",
|
|
80
|
+
"jsonUrl": "/r/components/dmx-bar.json",
|
|
81
|
+
"specimens": [
|
|
82
|
+
{
|
|
83
|
+
"title": "DmxBar",
|
|
84
|
+
"group": "dmx",
|
|
85
|
+
"components": [
|
|
86
|
+
"DmxBar"
|
|
87
|
+
],
|
|
88
|
+
"code": "<div className=\"flex w-full flex-col gap-(--cue-space-5)\">\n <Panel className=\"p-(--cue-space-4)\">\n <PanelHeader\n title=\"Universe 1\"\n actions={<Chip tone=\"ok\">{activeChannels(data)} active</Chip>}\n />\n <div className=\"pt-(--cue-space-4)\">\n <DmxBar data={data} label=\"Universe 1 output\" />\n </div>\n </Panel>\n <Specimens>\n <Specimen label=\"tall\" wide>\n <DmxBar data={data} height={28} label=\"Universe 1, tall\" />\n </Specimen>\n <Specimen label=\"sparse\" wide>\n <DmxBar data={sparse} label=\"Universe 1, first 48 channels only\" />\n </Specimen>\n <Specimen label=\"no data\" wide>\n <DmxBar label=\"Universe 1, no frame\" />\n </Specimen>\n </Specimens>\n</div>",
|
|
89
|
+
"note": "The whole universe as one 512×1 texture, scaled up with `image-rendering: pixelated` on a true-black ground. Interpolating between two channels would draw levels nobody sent.",
|
|
90
|
+
"interaction": "hovering reports `CH n · v` through a portaled readout, positioned by percentage so it survives a scaled container; the number is written to a span through a ref rather than re-rendering at 40 Hz."
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"todo": true
|
|
94
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "DmxStrip",
|
|
3
|
+
"slug": "dmx-strip",
|
|
4
|
+
"group": "dmx",
|
|
5
|
+
"importPath": "@cueplusplus/ui/dmx",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "`DmxBar`'s picture with no console behind it — a lighting rig, simulated.\n\nThis is the marketing device from dmxhub's site: the same 1px-tall pixelated\ncanvas the bridge uses for real output, driven by a model of a plausible rig\ninstead of a wire. Channels are grouped into six-channel fixtures; most sit\nwhere they were left, some are dark, and every so often one re-cues and\ncrossfades to its new level. That grouping is what makes it read as *lighting*\nrather than as noise — a random 512 bytes looks like static, and a rig does\nnot.\n\nEverything about it is seeded, including the re-cues the original left to\n`Math.random()`. A screenshot, a visual-regression run and a test all see the\nsame rig from the same `seed`.\n\nUnder `prefers-reduced-motion` the strip paints its first frame and stops.\nThere is no information in the animation — the point of the component is the\ntexture — so stilling it costs the reader nothing.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "cells",
|
|
12
|
+
"type": "number",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "128",
|
|
15
|
+
"description": "Columns, one per simulated channel. Defaults to `128`."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "height",
|
|
19
|
+
"type": "number",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": "14",
|
|
22
|
+
"description": "Strip height in px at the 16px root, emitted as `rem`. Defaults to `14`."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "seed",
|
|
26
|
+
"type": "number",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": "1",
|
|
29
|
+
"description": "Seed for the whole simulation. The same seed always plays the same way. Defaults to `1`."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "simulate",
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "true",
|
|
36
|
+
"description": "Run the simulation. Defaults to `true`; `false` holds the seeded first frame."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "label",
|
|
40
|
+
"type": "string",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": null,
|
|
43
|
+
"description": "What the strip depicts. Defaults to `\"Simulated DMX activity\"`."
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"typeReferences": [
|
|
47
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
48
|
+
],
|
|
49
|
+
"subcomponents": [],
|
|
50
|
+
"parts": [],
|
|
51
|
+
"variants": {},
|
|
52
|
+
"defaultVariants": {},
|
|
53
|
+
"tokensUsed": [
|
|
54
|
+
"--cue-accent",
|
|
55
|
+
"--cue-accent-soft",
|
|
56
|
+
"--cue-border",
|
|
57
|
+
"--cue-border-overlay",
|
|
58
|
+
"--cue-control-sm",
|
|
59
|
+
"--cue-data-ground",
|
|
60
|
+
"--cue-fg",
|
|
61
|
+
"--cue-fg-muted",
|
|
62
|
+
"--cue-fg-subtle",
|
|
63
|
+
"--cue-font-mono",
|
|
64
|
+
"--cue-radius-control",
|
|
65
|
+
"--cue-radius-overlay",
|
|
66
|
+
"--cue-scrim",
|
|
67
|
+
"--cue-space-1",
|
|
68
|
+
"--cue-space-2",
|
|
69
|
+
"--cue-space-3",
|
|
70
|
+
"--cue-surface-2",
|
|
71
|
+
"--cue-text-emphasis",
|
|
72
|
+
"--cue-text-label",
|
|
73
|
+
"--cue-text-micro",
|
|
74
|
+
"--cue-text-ui"
|
|
75
|
+
],
|
|
76
|
+
"summary": "`DmxBar`'s picture with no console behind it — a lighting rig, simulated.",
|
|
77
|
+
"examples": [
|
|
78
|
+
{
|
|
79
|
+
"title": "Usage",
|
|
80
|
+
"code": "<DmxStrip seed={7} />\n<DmxStrip cells={256} simulate={false} label=\"Rig activity\" />",
|
|
81
|
+
"language": "tsx"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"status": "todo-docs",
|
|
85
|
+
"url": "/docs/components/dmx-strip",
|
|
86
|
+
"mdUrl": "/docs/components/dmx-strip.md",
|
|
87
|
+
"jsonUrl": "/r/components/dmx-strip.json",
|
|
88
|
+
"specimens": [
|
|
89
|
+
{
|
|
90
|
+
"title": "DmxStrip",
|
|
91
|
+
"group": "dmx",
|
|
92
|
+
"components": [
|
|
93
|
+
"DmxStrip"
|
|
94
|
+
],
|
|
95
|
+
"code": "<div className=\"flex w-full flex-col gap-(--cue-space-4)\">\n <DmxStrip seed={7} label=\"Simulated rig, seed 7\" />\n <DmxStrip seed={7} cells={16} height={20} label=\"Simulated rig, 16 cells\" />\n <DmxStrip seed={42} simulate={false} label=\"Simulated rig, static\" />\n</div>",
|
|
96
|
+
"note": "A seeded fixture simulation: mulberry32 from the `seed` prop, so the same seed draws the same rig every time. Values ramp rather than jump.",
|
|
97
|
+
"interaction": "the readout updates through a ref; under prefers-reduced-motion the strip paints one static frame instead of animating."
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"todo": true
|
|
101
|
+
}
|