@cloudgrid-io/ui 0.7.0 → 0.9.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.
@@ -80,11 +80,21 @@ export interface OnboardingOption {
80
80
  description?: string;
81
81
  disabled?: boolean;
82
82
  }
83
- /** Two columns is the Figma arrangement. One reads as a list, three as a picker. */
83
+ /**
84
+ * Two columns is the Figma arrangement. One reads as a list, three as a picker.
85
+ *
86
+ * Four is the install screen's tool grid (#124) — eight AI tools laid out 4x2,
87
+ * where the options are marks with a short caption rather than sentences, so
88
+ * they stay legible much narrower than a worded answer does. It steps
89
+ * 1 -> 2 -> 4 and deliberately skips 3: an eight-item set over three columns
90
+ * leaves a two-item orphan row, and the jump lands on the breakpoint where four
91
+ * tiles actually fit.
92
+ */
84
93
  declare const COLUMNS: {
85
94
  readonly 1: "grid-cols-1";
86
95
  readonly 2: "grid-cols-1 sm:grid-cols-2";
87
96
  readonly 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
97
+ readonly 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4";
88
98
  };
89
99
  /** Everything both modes share. The mode-specific half is the union below. */
90
100
  type OnboardingQuestionBaseProps = Omit<React.ComponentProps<"section">, "ref" | "title" | "defaultValue" | "onChange"> & {
@@ -93,11 +103,34 @@ type OnboardingQuestionBaseProps = Omit<React.ComponentProps<"section">, "ref" |
93
103
  sub?: string;
94
104
  eyebrow?: string;
95
105
  options: OnboardingOption[];
106
+ /**
107
+ * `card` is a grid of option cards. `chip` is a wrapping cloud of pills, for
108
+ * options that are single words rather than answers — see CHIP_CLASS.
109
+ * `columns` is ignored for chips, which size to their text and wrap.
110
+ */
111
+ variant?: "card" | "chip";
112
+ /**
113
+ * `stacked` puts the question above its options. `side` puts it in a column
114
+ * beside them, which is what lets two questions share one screen without two
115
+ * display-size headings competing for it (#128).
116
+ */
117
+ layout?: "stacked" | "side";
96
118
  columns?: keyof typeof COLUMNS;
97
119
  /** Forwarded to `PageHeading`. `h2` for a question inside a larger page. */
98
120
  level?: 1 | 2;
99
121
  headingSize?: React.ComponentProps<typeof PageHeading>["size"];
100
- continueLabel?: string;
122
+ /**
123
+ * `null` renders no button. Two questions sharing one screen share ONE
124
+ * Continue, so the second must be able to render without one — and a screen
125
+ * that stacks questions would otherwise grow a button per question, which is
126
+ * what the level screen did before this existed (#128).
127
+ *
128
+ * Keyed on the label rather than on `onContinue` for the reason ToolSetup
129
+ * gives: the gallery that reviews these components is a server module, so a
130
+ * handler cannot reach it, and gating the button on one makes it unrenderable
131
+ * in the only place a designer sees it.
132
+ */
133
+ continueLabel?: string | null;
101
134
  onContinue?: () => void;
102
135
  /**
103
136
  * Overrides when the button is live. Left alone it enables as soon as there is
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-question.d.ts","sourceRoot":"","sources":["../../src/blocks/onboarding-question.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,oFAAoF;AACpF,QAAA,MAAM,OAAO;;;;CAIH,CAAA;AAsFV,8EAA8E;AAC9E,KAAK,2BAA2B,GAAG,IAAI,CACrC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAC/B,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAC9C,GAAG;IACF,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,OAAO,OAAO,CAAA;IAC9B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACb,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,uBAAuB,GAAG,2BAA2B,GACxD,CACI;IACE,uEAAuE;IACvE,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CAC/C,GACD;IACE,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAC1C,CACJ,CAAA;AAEH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,qBA8GzD;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"onboarding-question.d.ts","sourceRoot":"","sources":["../../src/blocks/onboarding-question.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,OAAO;;;;;CAKH,CAAA;AA4IV,8EAA8E;AAC9E,KAAK,2BAA2B,GAAG,IAAI,CACrC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAC/B,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAC9C,GAAG;IACF,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,OAAO,OAAO,CAAA;IAC9B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACb,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9D;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,uBAAuB,GAAG,2BAA2B,GACxD,CACI;IACE,uEAAuE;IACvE,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CAC/C,GACD;IACE,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAC1C,CACJ,CAAA;AAEH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,qBA6KzD;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -10,11 +10,21 @@ import { Button } from "../ui/button.js";
10
10
  import { OptionCard } from "./option-card.js";
11
11
  import { PageHeading } from "./page-heading.js";
12
12
  import { cn } from "../lib/cloudgrid-cn.js";
13
- /** Two columns is the Figma arrangement. One reads as a list, three as a picker. */
13
+ /**
14
+ * Two columns is the Figma arrangement. One reads as a list, three as a picker.
15
+ *
16
+ * Four is the install screen's tool grid (#124) — eight AI tools laid out 4x2,
17
+ * where the options are marks with a short caption rather than sentences, so
18
+ * they stay legible much narrower than a worded answer does. It steps
19
+ * 1 -> 2 -> 4 and deliberately skips 3: an eight-item set over three columns
20
+ * leaves a two-item orphan row, and the jump lands on the breakpoint where four
21
+ * tiles actually fit.
22
+ */
14
23
  const COLUMNS = {
15
24
  1: "grid-cols-1",
16
25
  2: "grid-cols-1 sm:grid-cols-2",
17
26
  3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
27
+ 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
18
28
  };
19
29
  /**
20
30
  * The card, in both modes. Every class here is a utility over a `--cg-*` token,
@@ -26,19 +36,55 @@ const COLUMNS = {
26
36
  * fighting it.
27
37
  */
28
38
  const OPTION_CLASS = cn("group relative cursor-pointer pe-11 text-start transition-colors select-none", "hover:border-line", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", "data-checked:border-line-strong data-checked:ring-1 data-checked:ring-(--cg-border-strong)", "data-disabled:pointer-events-none data-disabled:opacity-50");
39
+ /**
40
+ * The chip, for questions whose options are single words rather than answers.
41
+ *
42
+ * The console's "Let's know each other better" screen (#128) asks two questions
43
+ * on one page, and its options are `Terminal`, `CORS`, `Docker`. A card per word
44
+ * turns nine words into a screenful; the design lays them out as a wrapping cloud
45
+ * of pills beside the question, which is what a set of words wants to be.
46
+ *
47
+ * ## Selection is a FILL here, and that is still not colour alone
48
+ *
49
+ * A card signals selection with a drawn indicator that changes shape. A chip has
50
+ * no room for one — the design fills it instead, and adding a tick inside a 38px
51
+ * pill would crowd the word it is meant to mark.
52
+ *
53
+ * That is acceptable because the flip is a LUMINANCE flip, not a hue flip: a
54
+ * near-white chip becomes a dark brand-filled one, and luminance is exactly what
55
+ * survives every form of colour blindness. Hue-only pairs — red/green at equal
56
+ * lightness — are what the rule in #121 was written against. The e2e assertion
57
+ * measures the luminance delta rather than trusting that, because "we chose two
58
+ * colours that differ enough" is a claim, and this library measures claims.
59
+ *
60
+ * `aria-checked` carries the same fact to assistive tech either way.
61
+ *
62
+ * ## Why weight does not change with selection
63
+ *
64
+ * Bolding a selected chip would be a second non-colour signal and it is the
65
+ * obvious thing to reach for. It also reflows the row: a bold word is wider, so
66
+ * picking one chip nudges every chip after it. In a wrapping cloud that can move
67
+ * a chip to another line under the user's cursor.
68
+ */
69
+ const CHIP_CLASS = cn("group relative inline-flex cursor-pointer items-center rounded-pill px-4 py-2 text-start", "border border-hairline bg-card text-body-sm text-ink transition-colors select-none", "hover:border-line", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", "data-checked:border-transparent data-checked:bg-primary data-checked:text-on-primary", "data-disabled:pointer-events-none data-disabled:opacity-50");
29
70
  /** The indicator's frame. Round for one-of, square for many-of: shape says which. */
30
71
  const INDICATOR_CLASS = cn("pointer-events-none absolute end-4 top-4 flex size-4 shrink-0 items-center justify-center", "border border-line text-ink transition-colors group-data-checked:border-line-strong");
31
- function OnboardingQuestionOption({ option, mode, name, }) {
72
+ function OnboardingQuestionOption({ option, mode, variant, name, }) {
73
+ // A chip is the render element itself, not an OptionCard: there is no title,
74
+ // body or glyph to place, and routing a bare word through a card component
75
+ // would mean overriding away every part of it.
76
+ const chip = variant === "chip";
32
77
  // `render` rather than children: Base UI merges its own role, aria-checked,
33
78
  // data-checked, tabIndex, handlers and ref INTO this element, so the option is
34
79
  // literally an OptionCard with radio or checkbox semantics rather than a
35
80
  // lookalike. className is concatenated, and OptionCard runs the result through
36
81
  // cn() last, so these utilities win the conflicts they are meant to win.
37
- const card = (_jsx(OptionCard, { title: option.label, body: option.description, glyph: option.icon }));
82
+ const element = chip ? (_jsx("span", { children: option.label })) : (_jsx(OptionCard, { title: option.label, body: option.description, glyph: option.icon }));
83
+ const optionClass = chip ? CHIP_CLASS : OPTION_CLASS;
38
84
  if (mode === "multi") {
39
- return (_jsx(Checkbox.Root, { value: option.value, name: name, disabled: option.disabled, "data-slot": "onboarding-question-option", className: OPTION_CLASS, render: card, children: _jsx("span", { "aria-hidden": "true", "data-slot": "onboarding-question-indicator", className: cn(INDICATOR_CLASS, "rounded-[4px]"), children: _jsx(Checkbox.Indicator, { className: "flex [&>svg]:size-3", children: _jsx(CheckIcon, { strokeWidth: 3 }) }) }) }));
85
+ return (_jsx(Checkbox.Root, { value: option.value, name: name, disabled: option.disabled, "data-slot": "onboarding-question-option", "data-variant": variant, className: optionClass, render: element, children: chip ? null : (_jsx("span", { "aria-hidden": "true", "data-slot": "onboarding-question-indicator", className: cn(INDICATOR_CLASS, "rounded-[4px]"), children: _jsx(Checkbox.Indicator, { className: "flex [&>svg]:size-3", children: _jsx(CheckIcon, { strokeWidth: 3 }) }) })) }));
40
86
  }
41
- return (_jsx(Radio.Root, { value: option.value, disabled: option.disabled, "data-slot": "onboarding-question-option", className: OPTION_CLASS, render: card, children: _jsx("span", { "aria-hidden": "true", "data-slot": "onboarding-question-indicator", className: cn(INDICATOR_CLASS, "rounded-pill"), children: _jsx(Radio.Indicator, { className: "size-2 rounded-pill bg-current" }) }) }));
87
+ return (_jsx(Radio.Root, { value: option.value, disabled: option.disabled, "data-slot": "onboarding-question-option", "data-variant": variant, className: optionClass, render: element, children: chip ? null : (_jsx("span", { "aria-hidden": "true", "data-slot": "onboarding-question-indicator", className: cn(INDICATOR_CLASS, "rounded-pill"), children: _jsx(Radio.Indicator, { className: "size-2 rounded-pill bg-current" }) })) }));
42
88
  }
43
89
  function OnboardingQuestion(props) {
44
90
  // Narrowed on the discriminant BEFORE destructuring, which is what keeps the
@@ -47,7 +93,7 @@ function OnboardingQuestion(props) {
47
93
  // first would collapse both into one union and hand the console a value it has
48
94
  // to unpick at every call site.
49
95
  const isMulti = props.mode === "multi";
50
- const { title, sub, eyebrow, options, columns = 2, level = 1, headingSize = "md", continueLabel = "Continue", onContinue, canContinue, footer, name, className,
96
+ const { title, sub, eyebrow, options, variant = "card", layout = "stacked", columns = 2, level = 1, headingSize = "md", continueLabel = "Continue", onContinue, canContinue, footer, name, className,
51
97
  // Held back so they cannot reach the DOM as attributes.
52
98
  mode: _mode, value: _value, defaultValue: _defaultValue, onValueChange: _onValueChange, ...rest } = props;
53
99
  // A mirror, kept for ONE reason: to know whether the button should be live.
@@ -72,15 +118,27 @@ function OnboardingQuestion(props) {
72
118
  // screen reader user needs to hear it. Labelling by the title alone would drop
73
119
  // the one sentence that says how many answers are allowed.
74
120
  const headingId = React.useId();
75
- const grid = cn("grid gap-4", COLUMNS[columns]);
76
- return (_jsxs("section", { "data-slot": "onboarding-question", className: cn("flex flex-col gap-8", className), ...rest, children: [_jsx(PageHeading, { id: headingId, eyebrow: eyebrow, title: title, sub: sub, size: headingSize, level: level }), isMulti ? (_jsx(CheckboxGroup, { "aria-labelledby": headingId, "data-slot": "onboarding-question-options", className: grid, defaultValue: props.defaultValue ?? undefined, value: props.value, onValueChange: (next) => {
77
- setPicked(next);
78
- props.onValueChange?.(next);
79
- }, children: options.map((option) => (_jsx(OnboardingQuestionOption, { option: option, mode: "multi", name: name }, option.value))) })) : (_jsx(RadioGroup, { "aria-labelledby": headingId, "data-slot": "onboarding-question-options", className: grid, name: name, defaultValue: props.defaultValue ?? undefined, value: props.value === null ? "" : props.value, onValueChange: (next) => {
80
- const answer = typeof next === "string" && next !== "" ? next : null;
81
- setPicked(answer == null ? [] : [answer]);
82
- props.onValueChange?.(answer);
83
- }, children: options.map((option) => (_jsx(OnboardingQuestionOption, { option: option, mode: "single" }, option.value))) })), _jsxs("div", { "data-slot": "onboarding-question-actions", className: "flex flex-col items-start gap-4", children: [_jsx(Button, { type: "button", size: "lg", "data-slot": "onboarding-question-continue", onClick: onContinue, disabled: !(canContinue ?? answered), children: continueLabel }), footer] })] }));
121
+ // Chips wrap; cards grid. A chip cloud in a grid would stretch every pill to a
122
+ // column width, which is the one thing a chip must not do its width IS its
123
+ // word.
124
+ const grid = variant === "chip"
125
+ ? "flex flex-wrap gap-2"
126
+ : cn("grid gap-4", COLUMNS[columns]);
127
+ // `side` is a two-column band holding the question and its options; `stacked`
128
+ // is the section's own vertical flow, so the heading and the group are simply
129
+ // siblings. Wrapping them either way keeps ONE place that decides the
130
+ // relationship, rather than two branches that each render a heading.
131
+ const band = layout === "side"
132
+ ? "grid items-start gap-4 sm:grid-cols-[minmax(0,16rem)_1fr] sm:gap-8"
133
+ : "flex flex-col gap-8";
134
+ return (_jsxs("section", { "data-slot": "onboarding-question", "data-layout": layout, className: cn("flex flex-col gap-8", className), ...rest, children: [_jsxs("div", { "data-slot": "onboarding-question-band", className: band, children: [layout === "side" ? (_jsxs("div", { id: headingId, "data-slot": "onboarding-question-label", children: [React.createElement(level === 1 ? "h1" : "h2", { className: "m-0 text-body-sm font-medium text-ink" }, title), sub ? _jsx("p", { className: "mt-1 text-caption text-faint", children: sub }) : null] })) : (_jsx(PageHeading, { id: headingId, eyebrow: eyebrow, title: title, sub: sub, size: headingSize, level: level })), isMulti ? (_jsx(CheckboxGroup, { "aria-labelledby": headingId, "data-slot": "onboarding-question-options", className: grid, defaultValue: props.defaultValue ?? undefined, value: props.value, onValueChange: (next) => {
135
+ setPicked(next);
136
+ props.onValueChange?.(next);
137
+ }, children: options.map((option) => (_jsx(OnboardingQuestionOption, { option: option, mode: "multi", variant: variant, name: name }, option.value))) })) : (_jsx(RadioGroup, { "aria-labelledby": headingId, "data-slot": "onboarding-question-options", className: grid, name: name, defaultValue: props.defaultValue ?? undefined, value: props.value === null ? "" : props.value, onValueChange: (next) => {
138
+ const answer = typeof next === "string" && next !== "" ? next : null;
139
+ setPicked(answer == null ? [] : [answer]);
140
+ props.onValueChange?.(answer);
141
+ }, children: options.map((option) => (_jsx(OnboardingQuestionOption, { option: option, mode: "single", variant: variant }, option.value))) }))] }), continueLabel !== null || footer ? (_jsxs("div", { "data-slot": "onboarding-question-actions", className: "flex flex-col items-start gap-4", children: [continueLabel !== null ? (_jsx(Button, { type: "button", size: "lg", "data-slot": "onboarding-question-continue", onClick: onContinue, disabled: !(canContinue ?? answered), children: continueLabel })) : null, footer] })) : null] }));
84
142
  }
85
143
  export { OnboardingQuestion };
86
144
  //# sourceMappingURL=onboarding-question.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-question.js","sourceRoot":"","sources":["../../src/blocks/onboarding-question.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding-question.js","sourceRoot":"","sources":["../../src/blocks/onboarding-question.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import * as React from "react";
2
+ type MarkProps = {
3
+ className?: string;
4
+ };
5
+ /** X. simple-icons. Brand hex 000000. */
6
+ export declare const XMark: ({ className }: MarkProps) => React.JSX.Element;
7
+ /** YouTube. simple-icons. Brand hex FF0000. */
8
+ export declare const YoutubeMark: ({ className }: MarkProps) => React.JSX.Element;
9
+ /** Apple Podcasts. simple-icons. Brand hex 9933CC. */
10
+ export declare const ApplePodcastsMark: ({ className }: MarkProps) => React.JSX.Element;
11
+ /** Google. simple-icons. Brand hex 4285F4. */
12
+ export declare const GoogleMark: ({ className }: MarkProps) => React.JSX.Element;
13
+ /** Keyed by the label a caller shows, the same shape as TOOL_MARKS. */
14
+ export declare const SOCIAL_MARKS: {
15
+ readonly X: {
16
+ readonly Mark: ({ className }: MarkProps) => React.JSX.Element;
17
+ readonly hex: "000000";
18
+ };
19
+ readonly YouTube: {
20
+ readonly Mark: ({ className }: MarkProps) => React.JSX.Element;
21
+ readonly hex: "FF0000";
22
+ };
23
+ readonly "Apple Podcasts": {
24
+ readonly Mark: ({ className }: MarkProps) => React.JSX.Element;
25
+ readonly hex: "9933CC";
26
+ };
27
+ readonly Google: {
28
+ readonly Mark: ({ className }: MarkProps) => React.JSX.Element;
29
+ readonly hex: "4285F4";
30
+ };
31
+ };
32
+ export type SocialMarkName = keyof typeof SOCIAL_MARKS;
33
+ export {};
34
+ //# sourceMappingURL=social-marks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-marks.d.ts","sourceRoot":"","sources":["../../src/blocks/social-marks.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,KAAK,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAavC,yCAAyC;AACzC,eAAO,MAAM,KAAK,kBAVoB,SAAS,sBAY9C,CAAA;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,kBAfc,SAAS,sBAiB9C,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,kBApBQ,SAAS,sBAsB9C,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,UAAU,kBAzBe,SAAS,sBA2B9C,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,YAAY;;uCA9Ba,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;;uCAAT,SAAS;;;CAmCrC,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // GENERATED by scripts/generate-social-marks.mjs — do not hand-edit.
3
+ // Regenerate instead: path data transcribed by hand is how a mark ends up subtly
4
+ // wrong, which is worse than no mark at all.
5
+ //
6
+ // Source: simple-icons (CC0-1.0), read programmatically.
7
+ //
8
+ // A licence covers the FILE. It never covers the trademark in it. Each vendor's
9
+ // brand guidelines still govern use: alongside our own marks, not more prominent,
10
+ // not on merchandise, not folded into our own branding.
11
+ //
12
+ // Kept apart from tool-marks.tsx on purpose. Those are tools an entity is plugged
13
+ // into and are keyed by tool name for ToolLogo; these answer "where did you hear
14
+ // about us", which is a different question with a different list. One set growing
15
+ // the other's entries is how a picker ends up offering Cursor as a referral
16
+ // source.
17
+ //
18
+ // LinkedIn is NOT here. simple-icons has no LinkedIn mark — it was removed from
19
+ // the set after a trademark request — and a vendor that had its mark pulled is
20
+ // not one to route around by sourcing the artwork elsewhere. ToolLogo renders a
21
+ // monogram when handed no mark, so the option still appears without artwork.
22
+ import * as React from "react";
23
+ /** One mark. `currentColor` so ToolLogo's tone rule can recolour it on ink. */
24
+ function mark(path, viewBox = "0 0 24 24") {
25
+ return function Mark({ className }) {
26
+ return (_jsx("svg", { viewBox: viewBox, fill: "currentColor", "aria-hidden": "true", className: className, children: _jsx("path", { d: path }) }));
27
+ };
28
+ }
29
+ /** X. simple-icons. Brand hex 000000. */
30
+ export const XMark = mark("M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z");
31
+ /** YouTube. simple-icons. Brand hex FF0000. */
32
+ export const YoutubeMark = mark("M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z");
33
+ /** Apple Podcasts. simple-icons. Brand hex 9933CC. */
34
+ export const ApplePodcastsMark = mark("M5.34 0A5.328 5.328 0 000 5.34v13.32A5.328 5.328 0 005.34 24h13.32A5.328 5.328 0 0024 18.66V5.34A5.328 5.328 0 0018.66 0zm6.525 2.568c2.336 0 4.448.902 6.056 2.587 1.224 1.272 1.912 2.619 2.264 4.392.12.59.12 2.2.007 2.864a8.506 8.506 0 01-3.24 5.296c-.608.46-2.096 1.261-2.336 1.261-.088 0-.096-.091-.056-.46.072-.592.144-.715.48-.856.536-.224 1.448-.874 2.008-1.435a7.644 7.644 0 002.008-3.536c.208-.824.184-2.656-.048-3.504-.728-2.696-2.928-4.792-5.624-5.352-.784-.16-2.208-.16-3 0-2.728.56-4.984 2.76-5.672 5.528-.184.752-.184 2.584 0 3.336.456 1.832 1.64 3.512 3.192 4.512.304.2.672.408.824.472.336.144.408.264.472.856.04.36.03.464-.056.464-.056 0-.464-.176-.896-.384l-.04-.03c-2.472-1.216-4.056-3.274-4.632-6.012-.144-.706-.168-2.392-.03-3.04.36-1.74 1.048-3.1 2.192-4.304 1.648-1.737 3.768-2.656 6.128-2.656zm.134 2.81c.409.004.803.04 1.106.106 2.784.62 4.76 3.408 4.376 6.174-.152 1.114-.536 2.03-1.216 2.88-.336.43-1.152 1.15-1.296 1.15-.023 0-.048-.272-.048-.603v-.605l.416-.496c1.568-1.878 1.456-4.502-.256-6.224-.664-.67-1.432-1.064-2.424-1.246-.64-.118-.776-.118-1.448-.008-1.02.167-1.81.562-2.512 1.256-1.72 1.704-1.832 4.342-.264 6.222l.413.496v.608c0 .336-.027.608-.06.608-.03 0-.264-.16-.512-.36l-.034-.011c-.832-.664-1.568-1.842-1.872-2.997-.184-.698-.184-2.024.008-2.72.504-1.878 1.888-3.335 3.808-4.019.41-.145 1.133-.22 1.814-.211zm-.13 2.99c.31 0 .62.06.844.178.488.253.888.745 1.04 1.259.464 1.578-1.208 2.96-2.72 2.254h-.015c-.712-.331-1.096-.956-1.104-1.77 0-.733.408-1.371 1.112-1.745.224-.117.534-.176.844-.176zm-.011 4.728c.988-.004 1.706.349 1.97.97.198.464.124 1.932-.218 4.302-.232 1.656-.36 2.074-.68 2.356-.44.39-1.064.498-1.656.288h-.003c-.716-.257-.87-.605-1.164-2.644-.341-2.37-.416-3.838-.218-4.302.262-.616.974-.966 1.97-.97z");
35
+ /** Google. simple-icons. Brand hex 4285F4. */
36
+ export const GoogleMark = mark("M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z");
37
+ /** Keyed by the label a caller shows, the same shape as TOOL_MARKS. */
38
+ export const SOCIAL_MARKS = {
39
+ "X": { Mark: XMark, hex: "000000" },
40
+ "YouTube": { Mark: YoutubeMark, hex: "FF0000" },
41
+ "Apple Podcasts": { Mark: ApplePodcastsMark, hex: "9933CC" },
42
+ "Google": { Mark: GoogleMark, hex: "4285F4" },
43
+ };
44
+ //# sourceMappingURL=social-marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-marks.js","sourceRoot":"","sources":["../../src/blocks/social-marks.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,iFAAiF;AACjF,6CAA6C;AAC7C,EAAE;AACF,yDAAyD;AACzD,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,wDAAwD;AACxD,EAAE;AACF,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,4EAA4E;AAC5E,UAAU;AACV,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAE7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,+EAA+E;AAC/E,SAAS,IAAI,CAAC,IAAY,EAAE,OAAO,GAAG,WAAW;IAC/C,OAAO,SAAS,IAAI,CAAC,EAAE,SAAS,EAAa;QAC3C,OAAO,CACL,cAAK,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,cAAc,iBAAa,MAAM,EAAC,SAAS,EAAE,SAAS,YAChF,eAAM,CAAC,EAAE,IAAI,GAAI,GACb,CACP,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CACvB,oMAAoM,CACrM,CAAA;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAC7B,8VAA8V,CAC/V,CAAA;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CACnC,quDAAquD,CACtuD,CAAA;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAC5B,6VAA6V,CAC9V,CAAA;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE;IACnC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC/C,gBAAgB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE;CACrC,CAAA"}
@@ -0,0 +1,103 @@
1
+ import * as React from "react";
2
+ import { PageHeading } from "./page-heading.js";
3
+ /**
4
+ * Getting CloudGrid into the tool someone already works in: a tool to pick, and
5
+ * for that tool the exact thing to paste, copyable in one press.
6
+ *
7
+ * One component for two surfaces (#126). The console asks this as the last step
8
+ * of onboarding; the site serves the same thing as a public setup guide. They
9
+ * were heading for two implementations of one screen, which is how the two come
10
+ * to disagree about the same setup with nothing to catch it.
11
+ *
12
+ * ## The visual treatment here is PROVISIONAL
13
+ *
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:
17
+ *
18
+ * - **The props are the contract.** `tools`, `value`/`defaultValue`/
19
+ * `onValueChange`, `onContinue`. A redesign changes what this renders, not
20
+ * what a consumer passes, so the console and the site keep compiling.
21
+ * - **The behaviour is Base UI's, not this file's.** Roving focus, arrow-key
22
+ * traversal and the tab/panel wiring come from `Tabs`; copy and its announced
23
+ * result come from `CodeBlock`. Those are the parts that are expensive to get
24
+ * right and silent when wrong, and a redesign inherits them for free.
25
+ * - **The paint is a handful of utilities over `--cg-*` tokens** and nothing
26
+ * more. There is no bespoke geometry to unpick.
27
+ *
28
+ * Do not build anything on the internals — the slots and the class lists are
29
+ * the disposable half.
30
+ *
31
+ * ## Presentation only
32
+ *
33
+ * The line #117 and #121 drew, held again. This component carries no CloudGrid
34
+ * prompt, no MCP command, no tool list, and no idea what comes next. It renders
35
+ * the tools it is handed and reports which is selected. That is exactly what
36
+ * lets one component serve onboarding and a public guide: the strings differ,
37
+ * the screen does not.
38
+ *
39
+ * ## Why tabs and not the picker beside it
40
+ *
41
+ * `OnboardingQuestion` asks a question and reports an answer. This does not ask
42
+ * anything — every tool is a valid thing to look at, looking is free, and
43
+ * nothing is being recorded by looking. A radio group would tell assistive tech
44
+ * that an answer had been given when the user was reading. Tabs say "same
45
+ * screen, different content", which is what this is.
46
+ */
47
+ export interface ToolSetupTool {
48
+ /** What `onValueChange` reports. Stable, and never shown. */
49
+ value: string;
50
+ /** The words on the tab. Two short words wrap; they are not truncated. */
51
+ label: string;
52
+ /**
53
+ * The lead-in over the prompt — "Copy and send this to Claude Code". Written
54
+ * per tool because the sentence names the tool, and a generic one reads as
55
+ * boilerplate at the exact moment the user needs to know where the text goes.
56
+ */
57
+ instruction?: string;
58
+ /** The text to paste. Multi-line is normal here; `CodeBlock` preserves it. */
59
+ prompt: string;
60
+ /** Shown beside the instruction. For a tool with a manual path as well. */
61
+ alternative?: {
62
+ label: string;
63
+ href: string;
64
+ };
65
+ disabled?: boolean;
66
+ }
67
+ declare function ToolSetup({ tools, value, defaultValue, onValueChange, title, sub, eyebrow, level, headingSize, continueLabel, onContinue, canContinue, footer, className, ...props }: Omit<React.ComponentProps<"section">, "ref" | "title" | "defaultValue" | "onChange"> & {
68
+ tools: ToolSetupTool[];
69
+ value?: string;
70
+ defaultValue?: string;
71
+ onValueChange?: (value: string) => void;
72
+ /** Omitted, no heading renders — the site puts this under its own page title. */
73
+ title?: string;
74
+ sub?: string;
75
+ eyebrow?: string;
76
+ /** Forwarded to `PageHeading`. `h2` for a section inside a larger page. */
77
+ level?: 1 | 2;
78
+ headingSize?: React.ComponentProps<typeof PageHeading>["size"];
79
+ /**
80
+ * `null` renders no button at all. The site's copy of this screen ends at the
81
+ * prompt — there is nothing to continue to, and a dead button saying
82
+ * otherwise is worse than no button.
83
+ *
84
+ * The absence is keyed on the LABEL and not on `onContinue` deliberately. A
85
+ * handler is a function, and the gallery that reviews this component is a
86
+ * server module by design, so gating the button on one made the button
87
+ * unrenderable in the only place a designer sees it — caught by "Event
88
+ * handlers cannot be passed to Client Component props" at prerender. A
89
+ * declarative opt-out works from both.
90
+ */
91
+ continueLabel?: string | null;
92
+ onContinue?: () => void;
93
+ /**
94
+ * Defaults to `true`, unlike `OnboardingQuestion`'s. Nothing here is an answer
95
+ * — the user goes away to their tool and comes back, so gating the button on a
96
+ * selection would strand anyone who set up from the tab that was already open.
97
+ */
98
+ canContinue?: boolean;
99
+ /** Under the button. The console puts "I will do this later" here. */
100
+ footer?: React.ReactNode;
101
+ }): React.JSX.Element;
102
+ export { ToolSetup };
103
+ //# sourceMappingURL=tool-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-setup.d.ts","sourceRoot":"","sources":["../../src/blocks/tool-setup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAsBD,iBAAS,SAAS,CAAC,EACjB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,KAAK,EACL,GAAG,EACH,OAAO,EACP,KAAS,EACT,WAAkB,EAClB,aAA0B,EAC1B,UAAU,EACV,WAAkB,EAClB,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IACxF,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACb,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9D;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,sEAAsE;IACtE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB,qBA4HA;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Button } from "../ui/button.js";
5
+ import { CodeBlock } from "../ui/code-block.js";
6
+ import { PageHeading } from "./page-heading.js";
7
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs.js";
8
+ import { cn } from "../lib/cloudgrid-cn.js";
9
+ /**
10
+ * The tab. Sized for two lines because the real labels are "Claude Desktop" and
11
+ * "ChatGPT Desktop", and a strip that truncates them makes two tools read alike.
12
+ *
13
+ * The overrides earn their place: `TabsList` pins itself to `h-8` for a compact
14
+ * strip, and `TabsTrigger` sets `flex-1` and `whitespace-nowrap`. Eight tools at
15
+ * a fixed height with nowrap is a horizontal scrollbar on a laptop, so height
16
+ * goes auto and the list wraps to a second row instead.
17
+ */
18
+ const TRIGGER_CLASS = cn("h-auto min-h-[3.75rem] flex-none basis-[7.5rem] grow flex-col gap-0.5 whitespace-normal", "rounded-lg px-3 py-2 text-center text-body-sm leading-tight",
19
+ // The dark selected pill is `bg-code`/`text-on-code` — the library's OWN
20
+ // ink-surface pair, the one AgentPrompt and CodeBlock already paint with. A
21
+ // first pass invented `bg-ink-strong`/`text-on-ink`, which are not tokens:
22
+ // `--color-ink` is a TEXT colour and the other two do not exist, so Tailwind
23
+ // emitted nothing and the selected tab rendered identically to the rest.
24
+ "data-active:bg-code data-active:text-on-code");
25
+ function ToolSetup({ tools, value, defaultValue, onValueChange, title, sub, eyebrow, level = 1, headingSize = "md", continueLabel = "Continue", onContinue, canContinue = true, footer, className, ...props }) {
26
+ // Uncontrolled falls back to the first tool rather than nothing: a tab strip
27
+ // with no panel under it reads as broken, and there is no "unselected" state
28
+ // this screen means.
29
+ const first = tools[0]?.value;
30
+ const headingId = React.useId();
31
+ return (_jsxs("section", { "data-slot": "tool-setup", className: cn("flex flex-col gap-8", className), ...props, children: [title ? (_jsx(PageHeading, { id: headingId, eyebrow: eyebrow, title: title, sub: sub, size: headingSize, level: level })) : null, _jsxs(Tabs, { value: value, defaultValue: defaultValue ?? first, onValueChange: (next) => onValueChange?.(String(next)), className: "flex flex-col gap-4", children: [_jsx(TabsList
32
+ // Labelled by the lockup when there is one, so the strip is announced
33
+ // as the setup's tool list rather than an unnamed set of tabs.
34
+ , { ...(title ? { "aria-labelledby": headingId } : {}), "data-slot": "tool-setup-tabs",
35
+ // `h-auto!` — important, and that is load-bearing.
36
+ //
37
+ // `tabsListVariants` pins the strip with `group-data-horizontal/tabs:h-8`
38
+ // for a compact single row. Eight tools do not fit one row, so the list
39
+ // must grow — and a bare `h-auto` does not make it: both utilities
40
+ // survive `cn()` because they carry different variant prefixes, and the
41
+ // prefixed rule wins the cascade. Measured, not assumed:
42
+ // `getComputedStyle` reported a 32px list around a 60px tab.
43
+ //
44
+ // The consequence was invisible. The eighth tool wrapped into height
45
+ // that was never reserved and the panel painted straight over it, while
46
+ // every other assertion passed — the tab was present, focusable,
47
+ // correctly announced and correctly painted. It was simply underneath.
48
+ //
49
+ // Important settles it without depending on which utility `cn()` keeps
50
+ // or what order Tailwind emits them in.
51
+ className: "h-auto! w-full flex-wrap justify-start gap-2 bg-transparent p-0", children: tools.map((tool) => (_jsx(TabsTrigger, { value: tool.value, disabled: tool.disabled, "data-slot": "tool-setup-tab", className: TRIGGER_CLASS, children: tool.label }, tool.value))) }), tools.map((tool) => (_jsx(TabsContent, { value: tool.value, "data-slot": "tool-setup-panel", className: "rounded-lg border border-hairline bg-card p-5", children: _jsxs("div", { className: "flex flex-col gap-4", children: [tool.instruction || tool.alternative ? (_jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1", children: [tool.instruction ? (_jsx("p", { className: "m-0 text-body-sm text-body", children: tool.instruction })) : (_jsx("span", {})), tool.alternative ? (_jsx("a", { href: tool.alternative.href, "data-slot": "tool-setup-alternative",
52
+ // `--cg-link` is a token but NOT a generated utility —
53
+ // there is no `--color-link`, so `text-link` emits
54
+ // nothing and the link paints as body text. The arbitrary
55
+ // form is how the library reaches an ungenerated token,
56
+ // the same way onboarding-question writes
57
+ // `ring-(--cg-border-strong)`.
58
+ className: "text-body-sm text-(--cg-link) underline-offset-4 hover:text-(--cg-link-hover) hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring", children: tool.alternative.label })) : null] })) : null, _jsx(CodeBlock, { code: tool.prompt })] }) }, tool.value)))] }), continueLabel !== null || footer ? (_jsxs("div", { "data-slot": "tool-setup-actions", className: "flex flex-col items-start gap-4", children: [continueLabel !== null ? (_jsx(Button, { type: "button", size: "lg", "data-slot": "tool-setup-continue", onClick: onContinue, disabled: !canContinue, children: continueLabel })) : null, footer] })) : null] }));
59
+ }
60
+ export { ToolSetup };
61
+ //# sourceMappingURL=tool-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-setup.js","sourceRoot":"","sources":["../../src/blocks/tool-setup.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -40,10 +40,12 @@ export * from "./blocks/plug-method.js";
40
40
  export * from "./blocks/pricing-tier-cards.js";
41
41
  export * from "./blocks/pricing-tiers.js";
42
42
  export * from "./blocks/quote.js";
43
+ export * from "./blocks/social-marks.js";
43
44
  export * from "./blocks/rich-text.js";
44
45
  export * from "./blocks/stage-panel.js";
45
46
  export * from "./blocks/step-item.js";
46
47
  export * from "./blocks/tool-logo.js";
48
+ export * from "./blocks/tool-setup.js";
47
49
  export * from "./blocks/tool-marks.js";
48
50
  export * from "./lib/cloudgrid-cn.js";
49
51
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,uBAAuB,CAAA"}
package/dist/index.js CHANGED
@@ -57,10 +57,12 @@ export * from "./blocks/plug-method.js";
57
57
  export * from "./blocks/pricing-tier-cards.js";
58
58
  export * from "./blocks/pricing-tiers.js";
59
59
  export * from "./blocks/quote.js";
60
+ export * from "./blocks/social-marks.js";
60
61
  export * from "./blocks/rich-text.js";
61
62
  export * from "./blocks/stage-panel.js";
62
63
  export * from "./blocks/step-item.js";
63
64
  export * from "./blocks/tool-logo.js";
65
+ export * from "./blocks/tool-setup.js";
64
66
  export * from "./blocks/tool-marks.js";
65
67
  // The class-merge helper, which the components use and consumers may too.
66
68
  export * from "./lib/cloudgrid-cn.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,uEAAuE;AAEvE,cAAc;AACd,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAEtC,0EAA0E;AAC1E,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,uEAAuE;AAEvE,cAAc;AACd,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAE/B,mBAAmB;AACnB,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AAEtC,0EAA0E;AAC1E,cAAc,uBAAuB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudgrid-io/ui",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "CloudGrid design system: React components, brand design tokens, Tailwind theme, self-hosted fonts.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/",