@cloudgrid-io/ui 0.29.2 → 0.30.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.
Files changed (40) hide show
  1. package/dist/blocks/agent-prompt.d.ts +17 -1
  2. package/dist/blocks/agent-prompt.d.ts.map +1 -1
  3. package/dist/blocks/agent-prompt.js +33 -3
  4. package/dist/blocks/agent-prompt.js.map +1 -1
  5. package/dist/blocks/command-field.d.ts +38 -0
  6. package/dist/blocks/command-field.d.ts.map +1 -0
  7. package/dist/blocks/command-field.js +70 -0
  8. package/dist/blocks/command-field.js.map +1 -0
  9. package/dist/blocks/drop-zone.d.ts +2 -1
  10. package/dist/blocks/drop-zone.d.ts.map +1 -1
  11. package/dist/blocks/drop-zone.js.map +1 -1
  12. package/dist/blocks/icons.d.ts +13 -0
  13. package/dist/blocks/icons.d.ts.map +1 -1
  14. package/dist/blocks/icons.js +13 -0
  15. package/dist/blocks/icons.js.map +1 -1
  16. package/dist/blocks/phosphor-marks.d.ts +4 -0
  17. package/dist/blocks/phosphor-marks.d.ts.map +1 -1
  18. package/dist/blocks/phosphor-marks.js +6 -0
  19. package/dist/blocks/phosphor-marks.js.map +1 -1
  20. package/dist/blocks/prompt-block.d.ts +49 -0
  21. package/dist/blocks/prompt-block.d.ts.map +1 -0
  22. package/dist/blocks/prompt-block.js +210 -0
  23. package/dist/blocks/prompt-block.js.map +1 -0
  24. package/dist/blocks/step-item.d.ts +21 -1
  25. package/dist/blocks/step-item.d.ts.map +1 -1
  26. package/dist/blocks/step-item.js +27 -2
  27. package/dist/blocks/step-item.js.map +1 -1
  28. package/dist/blocks/tool-setup.d.ts +83 -3
  29. package/dist/blocks/tool-setup.d.ts.map +1 -1
  30. package/dist/blocks/tool-setup.js +129 -49
  31. package/dist/blocks/tool-setup.js.map +1 -1
  32. package/dist/index.d.ts +2 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -1
  35. package/dist/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/blocks/plug-method.d.ts +0 -76
  38. package/dist/blocks/plug-method.d.ts.map +0 -1
  39. package/dist/blocks/plug-method.js +0 -30
  40. package/dist/blocks/plug-method.js.map +0 -1
@@ -0,0 +1,210 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CheckIcon, CopyIcon } from "./icons.js";
5
+ import { cn } from "../lib/cloudgrid-cn.js";
6
+ /**
7
+ * The prompt you hand an agent, as a FIELD rather than as a terminal.
8
+ *
9
+ * `CodeBlock` is the ink slab: `data-cg-surface="ink"` on a `#222` ground, for a
10
+ * command you would type. This is the other half of the pair the install blocks
11
+ * (#262) need — five lines of prose addressed to Claude Code or Cursor, sitting
12
+ * in a hairline field on whatever surface the page already is. The live block's
13
+ * own stylesheet says why in as many words: "Stays on the LIGHT subtle surface on
14
+ * purpose — --cg-surface-code is the ink #222 ground, and a black slab is not
15
+ * what this block is for."
16
+ *
17
+ * ## The grammar, and why there is one at all
18
+ *
19
+ * `ToolSetup`'s `body` takes a ReactNode precisely so the library never invents a
20
+ * text grammar (#117, #121, #126). A prompt is the exception, and the reason is
21
+ * that it is not markup at either end: it is a plain string that has to reach a
22
+ * clipboard byte for byte, and a caller who wanted emphasis inside one would have
23
+ * to hand over nodes for the screen and a second string for the clipboard, which
24
+ * is two sources for one prompt and the way they come to disagree.
25
+ *
26
+ * So two marks, both of which survive being pasted:
27
+ *
28
+ * `backticks` the segment reads as the literal it is — a command, a JSON blob,
29
+ * a path — in `--cg-text-accent` at medium weight. The fences are
30
+ * DELIMITERS: they never reach the screen and never reach the
31
+ * clipboard, the same way the `~` marker does not. CONTENT.md says
32
+ * "a line in backticks renders bold", and a delimiter you can see
33
+ * is a delimiter that was not consumed.
34
+ * ~ at line a closing aside to the agent rather than part of the
35
+ * start instruction: the muted text colour on screen, and REMOVED from
36
+ * the clipboard. The marker itself never renders.
37
+ *
38
+ * Both are parsed here, in `promptSegments` and `promptCopyText`, which are
39
+ * exported so the node suite can assert the grammar and the clipboard payload
40
+ * without a browser.
41
+ *
42
+ * ## `clip`
43
+ *
44
+ * The design clips a long prompt at five lines under a bottom fade rather than
45
+ * scrolling it: the prompt is a thing you copy, not a thing you read, and a
46
+ * scrollbar inside a column beside another column is two scroll ports fighting
47
+ * for one wheel. `clip` is opt-in because the same component renders a two-line
48
+ * prompt, where a fixed height is an empty box with a gradient in it.
49
+ *
50
+ * The fade ends on the field's own ground token rather than on a colour, so it
51
+ * flips with the surface instead of being a white-to-transparent wash that turns
52
+ * into a grey smear on ink.
53
+ *
54
+ * ## Copy feedback is announced, not merely shown
55
+ *
56
+ * `AgentPrompt`'s rule, kept: the control is ICON-only here, so there is no label
57
+ * to flip at all and a screen reader would get nothing. The accessible name stays
58
+ * stable and the result is written to a polite live region. The failure path says
59
+ * so rather than doing nothing, because `navigator.clipboard` rejects on insecure
60
+ * origins, inside some frames, and without permission.
61
+ */
62
+ /**
63
+ * THE FIELD GROUND, and why it is written as an arbitrary property.
64
+ *
65
+ * `--cg-hover` is the only ground token declared in ALL THREE scopes: a 4.5% ink
66
+ * wash on the page, 10% white on the panel, 6% white on ink. That is exactly the
67
+ * quiet tint the design draws for a field, and it is the one that flips.
68
+ *
69
+ * `bg-subtle` was the first choice and it is CLAUDE.md rule 3 in its purest form.
70
+ * `--cg-surface-subtle` is declared at `:root` only, so on ink it stays the
71
+ * lavender `#f2f1f7` — a near-white slab on a `#222` ground, with the body text
72
+ * inside it flipping to white as it should and landing at about 1.1:1. Nothing
73
+ * errors, nothing in the class list looks wrong, and it was caught by taking a
74
+ * screenshot of the ink strip. `--cg-text-placeholder` has the same shape and the
75
+ * aside used it; it is `text-faint` now, which is two steps darker on the page and
76
+ * is on the ramp in every scope.
77
+ *
78
+ * It is spelled `bg-(--cg-hover)` because theme.css deliberately declines to
79
+ * generate a utility for it: `bg-hover` sits one character from Tailwind's own
80
+ * `hover:` variant, and a name that reads as a variant is a name someone writes by
81
+ * accident. The arbitrary form is how this library reaches an ungenerated token,
82
+ * the same way `Logo` reaches `--cg-text-accent` and `SideNavItem` reaches this
83
+ * very one.
84
+ */
85
+ const FIELD = "border border-line bg-(--cg-hover)";
86
+ /**
87
+ * Split a prompt into lines and each line into runs.
88
+ *
89
+ * A code run carries its INNER text. The fences are delimiters and are dropped
90
+ * here, once, so that the screen and the clipboard cannot disagree about them —
91
+ * `promptCopyText` below is built from this same parse rather than from a second
92
+ * pass over the raw string.
93
+ *
94
+ * An UNCLOSED backtick is left as literal text rather than swallowing the rest of
95
+ * the prompt: a JSON blob or a shell line can carry one legitimately, and a
96
+ * grammar that eats everything after a stray character is a grammar that loses
97
+ * the user's prompt while looking like it worked. That lone backtick is real
98
+ * content, so it is kept.
99
+ */
100
+ export function promptSegments(prompt) {
101
+ return prompt.split("\n").map((raw) => {
102
+ const aside = raw.startsWith("~");
103
+ // The marker is a MARKER. It never renders and it is never copied, so the
104
+ // one space authors write after it goes with it.
105
+ const line = aside ? raw.slice(1).replace(/^ /, "") : raw;
106
+ const segments = [];
107
+ let rest = line;
108
+ while (rest.length > 0) {
109
+ const open = rest.indexOf("`");
110
+ if (open === -1)
111
+ break;
112
+ const close = rest.indexOf("`", open + 1);
113
+ if (close === -1)
114
+ break;
115
+ if (open > 0)
116
+ segments.push({ text: rest.slice(0, open), code: false });
117
+ // The inner text, without the fences. An EMPTY pair (``) contributes
118
+ // nothing rather than an empty accent span with nothing in it.
119
+ const inner = rest.slice(open + 1, close);
120
+ if (inner.length > 0)
121
+ segments.push({ text: inner, code: true });
122
+ rest = rest.slice(close + 1);
123
+ }
124
+ if (rest.length > 0)
125
+ segments.push({ text: rest, code: false });
126
+ return { segments, aside };
127
+ });
128
+ }
129
+ /**
130
+ * What the clipboard gets: every line that is not an aside, with the fences
131
+ * consumed.
132
+ *
133
+ * Derived from `promptSegments` rather than from a second pass over the raw
134
+ * string, deliberately. The two used to be independent and they disagreed: the
135
+ * screen showed the fences and so did the clipboard, and a payload built by its
136
+ * own rules is a payload that drifts from the paint one edit later.
137
+ *
138
+ * Trailing blank lines left behind by a stripped aside go too. A prompt that ends
139
+ * in a newline pastes into an agent's box as an empty last turn, which looks like
140
+ * the copy truncated.
141
+ */
142
+ export function promptCopyText(prompt) {
143
+ return promptSegments(prompt)
144
+ .filter((line) => !line.aside)
145
+ .map((line) => line.segments.map((segment) => segment.text).join(""))
146
+ .join("\n")
147
+ .replace(/\n+$/, "");
148
+ }
149
+ function PromptBlock({ prompt, copyLabel = "Copy prompt", clip = false, className, ...props }) {
150
+ const [state, setState] = React.useState("idle");
151
+ const timer = React.useRef(undefined);
152
+ // Cleared on unmount, or the timeout fires against a component that is gone
153
+ // when someone switches tool inside the 1600ms window.
154
+ React.useEffect(() => () => clearTimeout(timer.current), []);
155
+ async function copy() {
156
+ try {
157
+ await navigator.clipboard.writeText(promptCopyText(prompt));
158
+ setState("copied");
159
+ }
160
+ catch {
161
+ setState("blocked");
162
+ }
163
+ clearTimeout(timer.current);
164
+ timer.current = setTimeout(() => setState("idle"), 1600);
165
+ }
166
+ const lines = promptSegments(prompt);
167
+ return (_jsxs("div", { "data-slot": "prompt-block", "data-clipped": clip ? "" : undefined, className: cn("relative rounded-sm", FIELD,
168
+ // The right gutter is the copy control's room. Without it a long first
169
+ // line runs under a 28px button and the last word is simply gone.
170
+ "py-3 pr-12 pl-3.5",
171
+ // FIVE LINES of the brand's own mono ramp, plus this box's own vertical
172
+ // padding — computed rather than measured, so a change to --cg-mono-size
173
+ // or --cg-mono-line moves the clip with it instead of leaving a height
174
+ // that used to show five lines. The design's 118px was five lines of a
175
+ // 12px mono; this library's mono is 14 and the floor says it stays 14, so
176
+ // the pixel value would have shown four.
177
+ clip && "h-[calc(5*var(--cg-mono-size)*var(--cg-mono-line)+1.5rem)] overflow-hidden", className), ...props, children: [_jsx("pre", { "data-slot": "prompt-block-text", className: cn("m-0 font-mono text-mono leading-mono whitespace-pre-wrap text-body",
178
+ // `break-words`, not `break-all`: a prompt carries URLs and package
179
+ // names, and breaking mid-token makes a copied-looking string that is
180
+ // not the string.
181
+ "break-words",
182
+ // No scrollbar inside the clip. The fade says there is more and the
183
+ // copy control is what the user actually wants; a scroll port here
184
+ // competes with the page's own wheel.
185
+ clip && "h-full overflow-hidden pb-7"), children: lines.map((line, i) => (_jsxs(React.Fragment, { children: [i > 0 ? "\n" : null, line.aside ? (_jsx("span", { "data-slot": "prompt-block-aside", className: "text-faint", children: line.segments.map((s) => s.text).join("") })) : (line.segments.map((segment, j) => segment.code ? (_jsx("b", { "data-slot": "prompt-block-code",
186
+ // `--cg-text-accent` has no generated `--color-*` utility, so
187
+ // it is reached the way `Logo` and `ToolSetup` already reach
188
+ // it. It flips purple -> white -> lime across the three
189
+ // scopes, which is the one accent that is legible in all of
190
+ // them.
191
+ className: "font-medium text-(--cg-text-accent)", children: segment.text }, j)) : (_jsx(React.Fragment, { children: segment.text }, j))))] }, i))) }), clip ? (
192
+ // Decorative, and it must not swallow a click meant for the text under
193
+ // it. The gradient ends on the field's own ground rather than on a
194
+ // literal, so it flips with the surface.
195
+ _jsx("span", { "aria-hidden": "true", "data-slot": "prompt-block-fade", className: "pointer-events-none absolute inset-x-px bottom-px h-9 rounded-b-sm bg-linear-to-b from-transparent to-(--cg-hover)" })) : null, _jsx("button", { type: "button", onClick: copy, "data-slot": "prompt-block-copy", "data-state": state,
196
+ // Not `Button`. The design's control is a 28px square with a hairline and
197
+ // the card ground, and `Button`'s `icon-sm` is 28px with `bg-background`
198
+ // — which maps to `--cg-surface-page` and is deliberately NOT flipped per
199
+ // surface, so on ink it paints a white square with a white glyph on it.
200
+ // `CodeBlock` carries the same note and works around it with
201
+ // `bg-transparent`; here the control needs a ground of its own to sit on
202
+ // over the prompt text, and `bg-card` is the one that flips.
203
+ className: "absolute top-2.5 right-2.5 z-10 inline-flex size-7 items-center justify-center rounded-sm border border-line bg-card text-faint transition-colors hover:border-line-accent hover:text-(--cg-text-accent) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring", "aria-label": copyLabel, children: state === "copied" ? _jsx(CheckIcon, { className: "size-3.5" }) : _jsx(CopyIcon, { className: "size-3.5" }) }), _jsx("span", { "aria-live": "polite", className: "sr-only", children: state === "copied"
204
+ ? "Copied to the clipboard"
205
+ : state === "blocked"
206
+ ? "The browser blocked the copy"
207
+ : "" })] }));
208
+ }
209
+ export { PromptBlock };
210
+ //# sourceMappingURL=prompt-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-block.js","sourceRoot":"","sources":["../../src/blocks/prompt-block.tsx"],"names":[],"mappings":"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"}
@@ -14,11 +14,31 @@
14
14
  * One deliberate change. v0's badge is 26px, which is on no step of the 4px
15
15
  * spacing ramp. This is 24px (`size-6`), which is. Two pixels, and it stops the
16
16
  * component being the reason someone thinks the ramp has exceptions.
17
+ *
18
+ * ## `tone="outline"` (#262)
19
+ *
20
+ * The install blocks number a sequence — ChatGPT's two connector steps, Claude's
21
+ * two — inside a pane that already carries a filled brand badge on the column
22
+ * beside it. Two filled pills of two different brand colours in one pane is the
23
+ * exact collision the note above warns about ("do not put an accent button beside
24
+ * one"), so those numerals are drawn as a hairline circle with the body colour
25
+ * inside instead.
26
+ *
27
+ * It is a TONE and not a second component because everything else about the item
28
+ * — the `<li>`, the aria-hidden numeral, the title, the body slot — is identical,
29
+ * and a fork would be a second place for the `<ol>` rule to be forgotten.
30
+ * `default` paints exactly what it painted before.
17
31
  */
32
+ declare const TONES: {
33
+ readonly default: "bg-cyan font-bold text-on-accent";
34
+ readonly outline: "border border-line bg-(--cg-hover) font-medium text-body";
35
+ };
18
36
  declare function StepList({ className, ...props }: React.ComponentProps<"ol">): import("react").JSX.Element;
19
- declare function StepItem({ index, title, className, children, ...props }: React.ComponentProps<"li"> & {
37
+ declare function StepItem({ index, title, tone, className, children, ...props }: React.ComponentProps<"li"> & {
20
38
  index: number;
21
39
  title: string;
40
+ /** `outline` is the hairline numeral, for a pane that already has a filled badge. */
41
+ tone?: keyof typeof TONES;
22
42
  }): import("react").JSX.Element;
23
43
  export { StepItem, StepList };
24
44
  //# sourceMappingURL=step-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-item.d.ts","sourceRoot":"","sources":["../../src/blocks/step-item.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,+BAepE;AAED,iBAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,+BAqBA;AAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"step-item.d.ts","sourceRoot":"","sources":["../../src/blocks/step-item.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,KAAK;;;CAUD,CAAA;AAEV,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,+BAepE;AAED,iBAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,IAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAA;CAC1B,+BA0BA;AAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"}
@@ -16,7 +16,32 @@ import { cn } from "../lib/cloudgrid-cn.js";
16
16
  * One deliberate change. v0's badge is 26px, which is on no step of the 4px
17
17
  * spacing ramp. This is 24px (`size-6`), which is. Two pixels, and it stops the
18
18
  * component being the reason someone thinks the ramp has exceptions.
19
+ *
20
+ * ## `tone="outline"` (#262)
21
+ *
22
+ * The install blocks number a sequence — ChatGPT's two connector steps, Claude's
23
+ * two — inside a pane that already carries a filled brand badge on the column
24
+ * beside it. Two filled pills of two different brand colours in one pane is the
25
+ * exact collision the note above warns about ("do not put an accent button beside
26
+ * one"), so those numerals are drawn as a hairline circle with the body colour
27
+ * inside instead.
28
+ *
29
+ * It is a TONE and not a second component because everything else about the item
30
+ * — the `<li>`, the aria-hidden numeral, the title, the body slot — is identical,
31
+ * and a fork would be a second place for the `<ol>` rule to be forgotten.
32
+ * `default` paints exactly what it painted before.
19
33
  */
34
+ const TONES = {
35
+ // No border at all on the default, rather than a transparent one. `size-6`
36
+ // is a border-box, so a 1px transparent ring would quietly shrink the
37
+ // numeral's content area by two pixels on every existing step list.
38
+ default: "bg-cyan font-bold text-on-accent",
39
+ // `bg-(--cg-hover)` rather than `bg-subtle`: --cg-surface-subtle is declared at
40
+ // :root only, so on ink it freezes to a near-white lavender and the numeral
41
+ // becomes a white disc. --cg-hover is the one ground token declared in all
42
+ // three scopes. See the FIELD note in prompt-block.tsx.
43
+ outline: "border border-line bg-(--cg-hover) font-medium text-body",
44
+ };
20
45
  function StepList({ className, ...props }) {
21
46
  return (_jsx("ol", {
22
47
  // Explicit, and load-bearing. WebKit drops the implicit `list` role from an
@@ -27,8 +52,8 @@ function StepList({ className, ...props }) {
27
52
  // in review on #42.
28
53
  role: "list", "data-slot": "step-list", className: cn("flex list-none flex-col gap-5 p-0", className), ...props }));
29
54
  }
30
- function StepItem({ index, title, className, children, ...props }) {
31
- return (_jsxs("li", { "data-slot": "step-item", className: cn("flex items-start gap-4", className), ...props, children: [_jsx("span", { "aria-hidden": "true", className: "flex size-6 shrink-0 items-center justify-center rounded-pill bg-cyan text-caption font-bold text-on-accent", children: index }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [_jsx("span", { className: "text-heading-sm font-medium text-ink", children: title }), children ? _jsx("div", { className: "text-body-sm text-body", children: children }) : null] })] }));
55
+ function StepItem({ index, title, tone = "default", className, children, ...props }) {
56
+ return (_jsxs("li", { "data-slot": "step-item", className: cn("flex items-start gap-4", className), ...props, children: [_jsx("span", { "aria-hidden": "true", "data-slot": "step-item-numeral", "data-tone": tone, className: cn("flex size-6 shrink-0 items-center justify-center rounded-pill text-caption", TONES[tone]), children: index }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [_jsx("span", { className: "text-heading-sm font-medium text-ink", children: title }), children ? _jsx("div", { className: "text-body-sm text-body", children: children }) : null] })] }));
32
57
  }
33
58
  export { StepItem, StepList };
34
59
  //# sourceMappingURL=step-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-item.js","sourceRoot":"","sources":["../../src/blocks/step-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACnE,OAAO,CACL;QACE,4EAA4E;QAC5E,4EAA4E;QAC5E,wEAAwE;QACxE,2EAA2E;QAC3E,0EAA0E;QAC1E,oBAAoB;QACpB,IAAI,EAAC,MAAM,eACD,WAAW,EACrB,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,KACzD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EAIT;IACC,OAAO,CACL,2BACY,WAAW,EACrB,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,KAC9C,KAAK,aAET,8BACc,MAAM,EAClB,SAAS,EAAC,6GAA6G,YAEtH,KAAK,GACD,EACP,eAAK,SAAS,EAAC,oCAAoC,aACjD,eAAM,SAAS,EAAC,sCAAsC,YAAE,KAAK,GAAQ,EAGpE,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,IACvE,IACH,CACN,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"step-item.js","sourceRoot":"","sources":["../../src/blocks/step-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,KAAK,GAAG;IACZ,2EAA2E;IAC3E,sEAAsE;IACtE,oEAAoE;IACpE,OAAO,EAAE,kCAAkC;IAC3C,gFAAgF;IAChF,4EAA4E;IAC5E,2EAA2E;IAC3E,wDAAwD;IACxD,OAAO,EAAE,0DAA0D;CAC3D,CAAA;AAEV,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACnE,OAAO,CACL;QACE,4EAA4E;QAC5E,4EAA4E;QAC5E,wEAAwE;QACxE,2EAA2E;QAC3E,0EAA0E;QAC1E,oBAAoB;QACpB,IAAI,EAAC,MAAM,eACD,WAAW,EACrB,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,KACzD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,KAAK,EACL,KAAK,EACL,IAAI,GAAG,SAAS,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EAMT;IACC,OAAO,CACL,2BACY,WAAW,EACrB,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,KAC9C,KAAK,aAET,8BACc,MAAM,eACR,mBAAmB,eAClB,IAAI,EACf,SAAS,EAAE,EAAE,CACX,4EAA4E,EAC5E,KAAK,CAAC,IAAI,CAAC,CACZ,YAEA,KAAK,GACD,EACP,eAAK,SAAS,EAAC,oCAAoC,aACjD,eAAM,SAAS,EAAC,sCAAsC,YAAE,KAAK,GAAQ,EAGpE,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,IACvE,IACH,CACN,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"}
@@ -9,11 +9,38 @@ import { PageHeading } from "./page-heading.js";
9
9
  * were heading for two implementations of one screen, which is how the two come
10
10
  * to disagree about the same setup with nothing to catch it.
11
11
  *
12
- * ## The visual treatment here is PROVISIONAL
12
+ * ## The repaint that the PROVISIONAL note was waiting for (#262)
13
13
  *
14
14
  * Founder, 2026-08-25: a better component design exists and is not ready yet —
15
- * "make this nice and we will replace the full component shortly". So this file
16
- * is written to be *replaced*, and the effort went where replacement is cheap:
15
+ * "make this nice and we will replace the full component shortly". It arrived on
16
+ * 2026-09-23, and this file is that design: the bordered method pills, the tool
17
+ * strip with a glyph per group and a rule under it, the brand fill on the
18
+ * selected tab, the 60/40 pane with a badge per column, and `PromptBlock` and
19
+ * `CommandField` in place of an ink slab.
20
+ *
21
+ * The bet the original note made paid off exactly as written: the props were the
22
+ * contract and the class lists were the disposable half, so the repaint changed
23
+ * what this renders and not what a consumer passes. Everything the note protected
24
+ * is untouched — the methods x tools x steps engine, the render-time fallbacks,
25
+ * the two reconcile-after-paint effects, the grouping that rides on each tab's
26
+ * accessible name.
27
+ *
28
+ * ## THIS IS A COMPONENT, NOT A PAGE (founder ruling, 2026-09-23)
29
+ *
30
+ * The first pass of #262 also grew a `header` (a wordmark over a row of vendor
31
+ * logos), a `layout: "bare" | "card"`, a `prompt` slot and a `footnote` — enough
32
+ * to rebuild the marketing install page inside the library, which is what it then
33
+ * did in the gallery. Rejected in review, in as many words: *"I didn't mean you
34
+ * will design it similarly to what I showed you. The entire idea was to design it
35
+ * the way it already looks like in the UI library. The problem now is that we
36
+ * have two versions."*
37
+ *
38
+ * All four are gone. A wordmark is a page's, a hero headline is a page's, and a
39
+ * footer with source links is a page's; this renders a title, a sub, a control
40
+ * and a pane, on whichever of the library's surfaces it is dropped on. If a
41
+ * marketing page wants the rest, the page composes it around this.
42
+ *
43
+ * The original reasoning, kept because it is still why the repaint was cheap:
17
44
  *
18
45
  * - **The props are the contract.** `tools`, `value`/`defaultValue`/
19
46
  * `onValueChange`, `onContinue`. A redesign changes what this renders, not
@@ -28,6 +55,48 @@ import { PageHeading } from "./page-heading.js";
28
55
  * Do not build anything on the internals — the slots and the class lists are
29
56
  * the disposable half.
30
57
  *
58
+ * ## The selected tab is the brand FILL, and that closes #223
59
+ *
60
+ * The selected tool tab used to be `bg-code`/`text-on-code`, the library's own
61
+ * ink pair. `--cg-surface-code` is `#222` in all three scopes and that is also
62
+ * the ink GROUND, so inside `data-cg-surface="ink"` the pill was the colour of
63
+ * what sits behind it. The backlog offered two ways out — a new semantic token
64
+ * declared in all three scopes, or a ruling that this is not an ink component —
65
+ * and the design answers it a third way that needs neither: the brand fill,
66
+ * which is what `hub.html` draws (`.tab.on{background:var(--cg-primary)}`).
67
+ *
68
+ * `--cg-primary` and `--cg-text-on-primary` are declared at `:root` and
69
+ * redeclared on NEITHER surface, so the pair is one value everywhere and carries
70
+ * its own ground, exactly the construction `Button`'s `cta` variant relies on
71
+ * (#225, #236). Measured on all three gallery strips: the selected label is
72
+ * 5.84:1 on its own pill in every scope, the same number by construction.
73
+ *
74
+ * ONE CAVEAT, recorded rather than fixed. On the PURPLE PANEL the pill's ground
75
+ * is the panel's own hue, so what separates the selected tab from the strip
76
+ * around it there is the 10% white wash on the bar plus the idle labels being
77
+ * 82% white against the selected one's 100% — a much smaller margin than on the
78
+ * page or on ink, where the pill reads at a glance. The label itself is legible
79
+ * everywhere, which is the floor; "which tab is selected" is quieter on that one
80
+ * surface. Fixing it means a panel-scoped selected treatment, which is a design
81
+ * decision and not a worker's to make. The strip is on the gallery's panel
82
+ * surface so it stays visible.
83
+ *
84
+ * ## THE CALLER CHOOSES WHAT IS ON SCREEN
85
+ *
86
+ * `tools` and `methods` are lists, and every one of them is the caller's: which
87
+ * tools, which methods, and in what order. Two tools is a valid strip. One method
88
+ * is a valid axis. This component renders what it is handed and sorts nothing,
89
+ * filters nothing by its own opinion and adds nothing that was not passed —
90
+ * founder, 2026-09-23: *"it's important to pick what I want to show each time —
91
+ * not to show all if I want, only two integrations if I want, or only CLI or only
92
+ * MCP."*
93
+ *
94
+ * The one thing it decides for itself is that a control with a single option is
95
+ * not a control. Pass one method and the method axis still works — the pane is
96
+ * still read from `steps[method]` — but no pill row renders, because a row of one
97
+ * is furniture for a choice nobody has. Pass none and there is no axis at all,
98
+ * which is the older shape where a tool carries a single `prompt`.
99
+ *
31
100
  * ## Presentation only
32
101
  *
33
102
  * The line #117 and #121 drew, held again. This component carries no CloudGrid
@@ -69,6 +138,17 @@ export interface ToolSetupMethod {
69
138
  export interface ToolSetupGroup {
70
139
  value: string;
71
140
  label: string;
141
+ /**
142
+ * A glyph in place of the visible label. The design labels a run of tools with
143
+ * a terminal or a chat bubble rather than a word, so the strip stays one row.
144
+ *
145
+ * It replaces the label ON SCREEN only. The label is still required and is
146
+ * still what reaches assistive tech, through each tab's own accessible name —
147
+ * see the note on the strip below for why the visible marker cannot carry it.
148
+ * A glyph with no words behind it would take the grouping away from everyone
149
+ * who is not looking at the screen.
150
+ */
151
+ icon?: React.ReactNode;
72
152
  }
73
153
  /**
74
154
  * One step of a pane.
@@ -1 +1 @@
1
- {"version":3,"file":"tool-setup.d.ts","sourceRoot":"","sources":["../../src/blocks/tool-setup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-setup.d.ts","sourceRoot":"","sources":["../../src/blocks/tool-setup.tsx"],"names":[],"mappings":"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"}