@vibes.diy/base 14.3.106 → 14.3.109

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 (66) hide show
  1. package/components/HomeBuildChips.d.ts +29 -0
  2. package/components/HomeBuildChips.js +152 -0
  3. package/components/HomeBuildChips.js.map +1 -0
  4. package/components/index.d.ts +1 -0
  5. package/components/index.js +1 -0
  6. package/components/index.js.map +1 -1
  7. package/components/vibe-menu/VibeMenu.js +5 -3
  8. package/components/vibe-menu/VibeMenu.js.map +1 -1
  9. package/components/vibe-menu/cards/AccountCard.d.ts +4 -0
  10. package/components/vibe-menu/cards/AccountCard.js +64 -1
  11. package/components/vibe-menu/cards/AccountCard.js.map +1 -1
  12. package/components/vibe-menu/cards/CodeCard.d.ts +2 -1
  13. package/components/vibe-menu/cards/CodeCard.js +12 -3
  14. package/components/vibe-menu/cards/CodeCard.js.map +1 -1
  15. package/components/vibe-menu/cards/CodeTabRow.d.ts +1 -1
  16. package/components/vibe-menu/cards/CodeTabRow.js +6 -0
  17. package/components/vibe-menu/cards/CodeTabRow.js.map +1 -1
  18. package/components/vibe-menu/cards/HomeCard.d.ts +8 -0
  19. package/components/vibe-menu/cards/HomeCard.js +67 -5
  20. package/components/vibe-menu/cards/HomeCard.js.map +1 -1
  21. package/components/vibe-menu/cards/ShareCard.d.ts +3 -0
  22. package/components/vibe-menu/cards/ShareCard.js +109 -16
  23. package/components/vibe-menu/cards/ShareCard.js.map +1 -1
  24. package/components/vibe-menu/index.d.ts +3 -0
  25. package/components/vibe-menu/index.js +3 -0
  26. package/components/vibe-menu/index.js.map +1 -1
  27. package/components/vibe-menu/moments.d.ts +9 -0
  28. package/components/vibe-menu/moments.js +6 -0
  29. package/components/vibe-menu/moments.js.map +1 -1
  30. package/components/vibe-menu/parts/AccessToggle.js +2 -1
  31. package/components/vibe-menu/parts/AccessToggle.js.map +1 -1
  32. package/components/vibe-menu/parts/CardTabRow.d.ts +27 -0
  33. package/components/vibe-menu/{sketches → parts}/CardTabRow.js +2 -7
  34. package/components/vibe-menu/parts/CardTabRow.js.map +1 -0
  35. package/components/vibe-menu/parts/Composer.js +2 -1
  36. package/components/vibe-menu/parts/Composer.js.map +1 -1
  37. package/components/vibe-menu/parts/MomentLine.js +10 -5
  38. package/components/vibe-menu/parts/MomentLine.js.map +1 -1
  39. package/components/vibe-menu/parts/SurveyStrip.d.ts +13 -3
  40. package/components/vibe-menu/parts/SurveyStrip.js +97 -54
  41. package/components/vibe-menu/parts/SurveyStrip.js.map +1 -1
  42. package/components/vibe-menu/parts/ThinkingLine.d.ts +24 -0
  43. package/components/vibe-menu/parts/ThinkingLine.js +77 -0
  44. package/components/vibe-menu/parts/ThinkingLine.js.map +1 -0
  45. package/components/vibe-menu/parts/brief-faces-art.d.ts +12 -0
  46. package/components/vibe-menu/parts/brief-faces-art.js +540 -0
  47. package/components/vibe-menu/parts/brief-faces-art.js.map +1 -0
  48. package/components/vibe-menu/sketches/CodeTierAudition.js +1 -1
  49. package/components/vibe-menu/sketches/CodeTierAudition.js.map +1 -1
  50. package/components/vibe-menu/slices.d.ts +5 -0
  51. package/components/vibe-menu/slices.js.map +1 -1
  52. package/components/vibe-menu/vibe-menu.styles.d.ts +1 -1
  53. package/components/vibe-menu/vibe-menu.styles.js +0 -25
  54. package/components/vibe-menu/vibe-menu.styles.js.map +1 -1
  55. package/package.json +5 -5
  56. package/components/vibe-menu/sketches/AccountTabAudition.d.ts +0 -11
  57. package/components/vibe-menu/sketches/AccountTabAudition.js +0 -90
  58. package/components/vibe-menu/sketches/AccountTabAudition.js.map +0 -1
  59. package/components/vibe-menu/sketches/CardTabRow.d.ts +0 -27
  60. package/components/vibe-menu/sketches/CardTabRow.js.map +0 -1
  61. package/components/vibe-menu/sketches/HomeTabAudition.d.ts +0 -26
  62. package/components/vibe-menu/sketches/HomeTabAudition.js +0 -87
  63. package/components/vibe-menu/sketches/HomeTabAudition.js.map +0 -1
  64. package/components/vibe-menu/sketches/ShareTabAudition.d.ts +0 -14
  65. package/components/vibe-menu/sketches/ShareTabAudition.js +0 -155
  66. package/components/vibe-menu/sketches/ShareTabAudition.js.map +0 -1
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import { Chip } from "./Chip.js";
3
3
  import { Glyph } from "./Glyph.js";
4
4
  import { nextRadioIndex } from "./radio-keys.js";
5
+ import { FacesGlyph } from "./ThinkingLine.js";
5
6
  const POSTURES = [
6
7
  { value: "restricted", label: "Restricted" },
7
8
  { value: "public", label: "Public" },
@@ -47,7 +48,7 @@ export function AccessToggle(props) {
47
48
  event.preventDefault();
48
49
  choose(next);
49
50
  } }, busy ? (React.createElement(React.Fragment, null,
50
- React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }),
51
+ React.createElement(FacesGlyph, { size: 16, ink: "current" }),
51
52
  "Securing\u2026")) : (option.label)));
52
53
  })),
53
54
  React.createElement("p", { className: "vm-access-line" },
@@ -1 +1 @@
1
- {"version":3,"file":"AccessToggle.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/AccessToggle.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccessToggle.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/AccessToggle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ import { type GlyphName } from "./Glyph.js";
3
+ export type CardTabKind = "drill" | "link" | "action";
4
+ export interface CardTabItem {
5
+ readonly key: string;
6
+ readonly label: string;
7
+ readonly glyph: GlyphName;
8
+ readonly kind: CardTabKind;
9
+ readonly href?: string;
10
+ readonly onClick?: (event: React.MouseEvent<HTMLElement>) => void;
11
+ }
12
+ export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n/* A drill or an opened log taller than the card scrolls the card; the row sticks\n on the band so it stays in view. In flow (no overflow) this changes nothing.\n Code mode's tier layout fills the card instead, so it keeps the row in flow. */\n[data-vibe-menu] .vm-ctab:not([data-tier-mode]) > .vm-cnav {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg);\n}\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer, the scroll tier and the row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab .vm-srow + .vm-cnav { margin-top: 0; }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab[data-row-drill] .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
13
+ export interface CardTabRowProps {
14
+ readonly label: string;
15
+ readonly items: readonly CardTabItem[];
16
+ readonly active: string | null;
17
+ readonly onDrill: (key: string) => void;
18
+ }
19
+ export declare function CardTabRow(props: CardTabRowProps): React.ReactElement;
20
+ export declare function MainAction(props: {
21
+ readonly children: React.ReactNode;
22
+ }): React.ReactElement;
23
+ export declare function Stretch(props: {
24
+ readonly children: React.ReactNode;
25
+ }): React.ReactElement | null;
26
+ export declare function toggleDrill(open: string | null, key: string): string | null;
27
+ export declare function isPlainLeftClick(event: React.MouseEvent<HTMLElement>): boolean;
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { CODE_TAB_ROW_CSS } from "../cards/CodeTabRow.js";
3
- import { Glyph } from "../parts/Glyph.js";
3
+ import { Glyph } from "./Glyph.js";
4
4
  export const CARD_TAB_ROW_CSS = `${CODE_TAB_ROW_CSS}
5
5
  [data-vibe-menu] .vm-cnav > a {
6
6
  position: relative; flex: 1 1 auto; min-width: 0;
@@ -11,13 +11,8 @@ export const CARD_TAB_ROW_CSS = `${CODE_TAB_ROW_CSS}
11
11
  [data-vibe-menu] .vm-cnav > * + a,
12
12
  [data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }
13
13
  [data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }
14
- [data-vibe-menu] .vm-xtab .vm-back { display: none; }
14
+ [data-vibe-menu] .vm-xtab[data-row-drill] .vm-back { display: none; }
15
15
  [data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }
16
- /* A drill taller than the card (Handles, Share settings) scrolls the card; the
17
- row sticks on the band so it stays in view, pressed. Code's row never needed
18
- this: its drills are short. In flow (no overflow) this changes nothing. */
19
- [data-vibe-menu] .vm-xtab .vm-cnav { position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg); }
20
- [data-vibe-menu] .vm-xtab .vm-drill + .vm-done { margin-top: var(--space-14); }
21
16
  /* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's
22
17
  ONE main action, then the stretch. The two zones are layout-free wrappers, so
23
18
  each card keeps its own spacing; the main action sits on the row's own top
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardTabRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/CardTabRow.tsx"],"names":[],"mappings":"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"}
@@ -2,11 +2,12 @@ import * as React from "react";
2
2
  import { ATTACHMENT_ACCEPT } from "../../../attachments/attachment-types.js";
3
3
  import { composerFileDrop } from "../../../attachments/composer-file-drop.js";
4
4
  import { Glyph } from "./Glyph.js";
5
+ import { FacesGlyph } from "./ThinkingLine.js";
5
6
  function StagedAttachments(props) {
6
7
  if (props.chips.length === 0)
7
8
  return null;
8
9
  return (React.createElement("div", { className: "vm-picks vm-attachments", "aria-live": "polite" }, props.chips.map((chip) => (React.createElement("button", { key: chip.id, className: "vm-chip is-name is-ghost", type: "button", "data-status": chip.status, title: chip.error, "aria-label": `Remove ${chip.name}`, onClick: () => props.onRemove(chip.id) },
9
- chip.status === "processing" ? React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }) : null,
10
+ chip.status === "processing" ? React.createElement(FacesGlyph, { size: 12, ink: "current" }) : null,
10
11
  React.createElement("span", null, chip.name))))));
11
12
  }
12
13
  export const STOP_GUARD_MS = 600;
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Composer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Composer.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { Chip } from "./Chip.js";
3
3
  import { Glyph } from "./Glyph.js";
4
+ import { ThinkingLine, useElapsedText } from "./ThinkingLine.js";
4
5
  const WHO_LABEL = { you: "You", built: "Built", agent: "Agent" };
5
6
  export function AgentLog(props) {
6
7
  const logRef = React.useRef(null);
@@ -32,25 +33,29 @@ function stayIfHere(e) {
32
33
  if (here === there)
33
34
  e.preventDefault();
34
35
  }
36
+ function ProgressWords(props) {
37
+ const { item } = props;
38
+ const resting = item.resting === true;
39
+ const elapsed = useElapsedText(item.startedAtMs, resting ? item.stoppedAtMs : undefined);
40
+ return React.createElement(ThinkingLine, { verb: item.text.replace(/…$/, ""), elapsed: elapsed, wrapping: resting, ink: "current" });
41
+ }
35
42
  function LiveMoment(props) {
36
43
  const logId = React.useId();
37
44
  const item = props.item;
38
45
  const kindClass = item.kind === "progress" ? "is-progress" : "is-summary";
39
- const busy = item.kind === "progress" && item.resting !== true ? React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }) : null;
46
+ const words = item.kind === "progress" ? React.createElement(ProgressWords, { item: item }) : React.createElement("span", null, item.text);
40
47
  const log = props.log;
41
48
  const link = item.link === undefined ? null : (React.createElement("a", { className: "vm-moment-link", href: item.link.href, onClick: stayIfHere }, item.link.label));
42
49
  if (log === null) {
43
50
  return (React.createElement("p", { className: `vm-moment ${kindClass}`, "data-moment": item.kind },
44
- busy,
45
- React.createElement("span", null, item.text),
51
+ words,
46
52
  link));
47
53
  }
48
54
  return (React.createElement("div", { className: "vm-live" },
49
55
  React.createElement("button", { className: `vm-moment ${kindClass} is-expander`, type: "button", "data-moment": item.kind, "aria-expanded": log.open, "aria-controls": logId, "aria-label": `Agent log: ${item.text}`, onClick: () => log.onToggle() },
50
56
  React.createElement("span", { className: log.open ? "vm-chev is-open" : "vm-chev", "data-log-chev": "" },
51
57
  React.createElement(Glyph, { name: "chevron-right" })),
52
- busy,
53
- React.createElement("span", null, item.text)),
58
+ words),
54
59
  link,
55
60
  React.createElement("div", { className: "vm-log-clip", "data-log-clip": "", "data-open": log.open ? "true" : "false", inert: log.open ? undefined : true },
56
61
  React.createElement(AgentLog, { id: logId, lines: log.lines }),
@@ -1 +1 @@
1
- {"version":3,"file":"MomentLine.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/MomentLine.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MomentLine.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/MomentLine.tsx"],"names":[],"mappings":"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"}
@@ -4,21 +4,31 @@ export interface SurveyFace {
4
4
  readonly label: string;
5
5
  readonly pitch: string;
6
6
  }
7
+ export interface SurveyChoosing {
8
+ readonly index: number;
9
+ readonly endsAtMs: number;
10
+ }
7
11
  export interface CodeSurvey {
8
12
  readonly id: string;
9
13
  readonly faces: readonly SurveyFace[];
10
14
  readonly picked?: number;
11
15
  readonly onPick?: (index: number) => void;
16
+ readonly onChoose?: (index: number) => void;
17
+ readonly onCancel?: () => void;
18
+ readonly choosing?: SurveyChoosing;
12
19
  readonly onShown?: (faces: number) => void;
13
20
  }
21
+ export declare const SURVEY_COUNTDOWN_MS = 3000;
14
22
  export declare const SURVEY_COPY: Readonly<{
15
- readonly choosing: "Want to steer the look?";
23
+ readonly choosing: "Pick a look for your app";
16
24
  readonly aside: "Optional · the build goes on";
25
+ readonly counting: "Tap again to cancel";
17
26
  readonly picked: "Building in this look";
18
- readonly pick: "Build this one";
19
27
  readonly region: "Steer the look";
20
28
  }>;
21
- export declare const SURVEY_STRIP_CSS = "\n/* Its own container: the aside steps out when the strip itself is narrow, on any host. */\n[data-vibe-menu] .vm-survey { margin: 0 0 var(--space-14); container: vm-survey / inline-size; }\n/* Code mode's card is wide and its pinned top is capped: the strip keeps the card-sized tiles. */\n[data-vibe-menu] .vm-codemode .vm-survey { margin-bottom: 10px; max-width: 420px; }\n[data-vibe-menu] .vm-survey-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-8); margin: 0 0 var(--space-8); padding: 0 var(--space-2); }\n[data-vibe-menu] .vm-survey-title { font: 600 15px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-aside { font: 400 12px/1.3 var(--font-display); color: var(--muted); white-space: nowrap; }\n[data-vibe-menu] .vm-survey-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-8); }\n/* Three readings keep the four-up tile size: the missing tile's column stays empty. */\n[data-vibe-menu] .vm-survey-strip[data-count=\"3\"] { grid-template-columns: repeat(3, minmax(0, 1fr)); padding-right: calc((100% - 24px) / 4 + 8px); }\n[data-vibe-menu] .vm-survey-tile { position: relative; padding: 0; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; }\n[data-vibe-menu] .vm-survey-tile[data-on=\"true\"] { outline: var(--stroke-focus) solid var(--accent); outline-offset: 2px; }\n[data-vibe-menu] .vm-survey-tile[aria-disabled=\"true\"] { cursor: default; }\n[data-vibe-menu] .vm-survey[data-picked] .vm-survey-tile:not([data-on=\"true\"]) { opacity: 0.35; }\n[data-vibe-menu] .vm-survey-art { display: block; width: 100%; height: 100%; object-fit: cover; }\n[data-vibe-menu] .vm-survey-foot { display: flex; align-items: center; gap: var(--space-12); margin-top: var(--space-10); padding: 0 var(--space-2); }\n[data-vibe-menu] .vm-survey-text { flex: 1 1 auto; min-width: 0; }\n[data-vibe-menu] .vm-survey-label { font: 700 14px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-pitch { margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }\n[data-vibe-menu] .vm-survey-pick { flex: none; height: 36px; padding: 0 var(--space-16); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-full); background: var(--accent); color: var(--on-accent); font: 700 14px/1 var(--font-display); cursor: pointer; white-space: nowrap; }\n[data-vibe-menu] .vm-survey-pick:disabled { opacity: 0.45; cursor: default; }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] { margin-top: var(--space-16); }\n[data-vibe-menu] .vm-survey-guide { margin: 0 0 var(--space-12); font: 600 17px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-preview { aspect-ratio: 1; overflow: hidden; border-radius: var(--radius-switch); background: var(--card-bg); border: var(--stroke-rule) solid var(--line-card); }\n[data-vibe-menu] .vm-survey-preview canvas { width: 100%; height: 100%; object-fit: contain; display: block; }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-head { margin-top: var(--space-12); margin-bottom: var(--space-12); }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-tile { min-height: 44px; }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-foot { margin-top: var(--space-16); }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-pick { width: 100%; height: 48px; font-size: 16px; }\n[data-vibe-menu] .vm-survey-direction { margin: var(--space-10) 0 0; font: 400 13px/1.4 var(--font-display); color: var(--muted); text-align: center; }\n@container vm-survey (max-width: 360px) { [data-vibe-menu] .vm-survey:not([data-presentation=\"filmstrip\"]) .vm-survey-aside { display: none; } }\n";
29
+ export declare function surveyCountdownDigit(msLeft: number): number;
30
+ export declare function surveyTileLabel(face: SurveyFace, digit: number | undefined): string;
31
+ export declare const SURVEY_STRIP_CSS = "\n/* Its own container: the aside steps out when the strip itself is narrow, on any host. */\n[data-vibe-menu] .vm-survey { margin: 0 0 var(--space-14); container: vm-survey / inline-size; }\n/* Code mode's card is wide and its pinned top is capped: the strip keeps the card-sized tiles. */\n[data-vibe-menu] .vm-codemode .vm-survey { margin-bottom: 10px; max-width: 420px; }\n[data-vibe-menu] .vm-survey-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-8); margin: 0 0 var(--space-8); padding: 0 var(--space-2); }\n[data-vibe-menu] .vm-survey-title { font: 600 15px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-aside { font: 400 12px/1.3 var(--font-display); color: var(--muted); white-space: nowrap; }\n[data-vibe-menu] .vm-survey-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-8); }\n/* Three readings keep the four-up tile size: the missing tile's column stays empty. */\n[data-vibe-menu] .vm-survey-strip[data-count=\"3\"] { grid-template-columns: repeat(3, minmax(0, 1fr)); padding-right: calc((100% - 24px) / 4 + 8px); }\n[data-vibe-menu] .vm-survey-cell { min-width: 0; }\n[data-vibe-menu] .vm-survey-tile { position: relative; display: block; width: 100%; min-height: 44px; padding: 0; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; touch-action: manipulation; }\n[data-vibe-menu] .vm-survey-tile[data-on=\"true\"] { outline: var(--stroke-focus) solid var(--accent); outline-offset: 2px; }\n[data-vibe-menu] .vm-survey-tile[aria-disabled=\"true\"] { cursor: default; }\n[data-vibe-menu] .vm-survey[data-selected] .vm-survey-cell:not([data-on=\"true\"]) .vm-survey-tile { opacity: 0.55; }\n[data-vibe-menu] .vm-survey[data-picked] .vm-survey-cell:not([data-on=\"true\"]) .vm-survey-tile { opacity: 0.35; }\n[data-vibe-menu] .vm-survey-art { display: block; width: 100%; height: 100%; object-fit: cover; }\n/* The countdown: a small chip in the corner, so the look stays in full view. */\n[data-vibe-menu] .vm-survey-count { position: absolute; top: 6px; right: 6px; display: grid; place-items: center; width: 28px; height: 28px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 14px/1 var(--font-display); font-variant-numeric: tabular-nums; pointer-events: none; }\n[data-vibe-menu] .vm-survey-count b { font: inherit; animation: vm-survey-tick 240ms ease-out; }\n@keyframes vm-survey-tick { from { transform: scale(1.35); } to { transform: scale(1); } }\n@media (prefers-reduced-motion: reduce) { [data-vibe-menu] .vm-survey-count b { animation: none; } }\n[data-vibe-menu] .vm-survey-cap { margin-top: var(--space-6); padding: 0 var(--space-2); font: 700 13px/1.25 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-foot { display: flex; align-items: center; gap: var(--space-12); margin-top: var(--space-10); padding: 0 var(--space-2); }\n[data-vibe-menu] .vm-survey-text { flex: 1 1 auto; min-width: 0; }\n[data-vibe-menu] .vm-survey-label { font: 700 14px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-survey-pitch { margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }\n[data-vibe-menu] .vm-survey-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }\n/* The first build's picker: a two-by-two grid of large tiles, each with its name. */\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] { margin-top: var(--space-16); }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-head { margin-top: var(--space-12); margin-bottom: var(--space-12); }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-title { font-size: 17px; }\n[data-vibe-menu] .vm-survey[data-presentation=\"filmstrip\"] .vm-survey-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-12) var(--space-10); padding-right: 0; }\n@container vm-survey (max-width: 360px) { [data-vibe-menu] .vm-survey:not([data-presentation=\"filmstrip\"]) .vm-survey-aside { display: none; } }\n";
22
32
  export declare function surveyMinLoaded(count: number): number;
23
33
  export declare function SurveyStrip(props: {
24
34
  readonly survey: CodeSurvey;
@@ -1,11 +1,21 @@
1
1
  import * as React from "react";
2
+ export const SURVEY_COUNTDOWN_MS = 3000;
2
3
  export const SURVEY_COPY = Object.freeze({
3
- choosing: "Want to steer the look?",
4
+ choosing: "Pick a look for your app",
4
5
  aside: "Optional · the build goes on",
6
+ counting: "Tap again to cancel",
5
7
  picked: "Building in this look",
6
- pick: "Build this one",
7
8
  region: "Steer the look",
8
9
  });
10
+ export function surveyCountdownDigit(msLeft) {
11
+ const steps = Math.round(SURVEY_COUNTDOWN_MS / 1000);
12
+ return Math.min(steps, Math.max(1, Math.ceil(msLeft / 1000)));
13
+ }
14
+ export function surveyTileLabel(face, digit) {
15
+ return digit === undefined
16
+ ? `${face.label}: ${face.pitch}`
17
+ : `${face.label}: building this look in ${digit}. ${SURVEY_COPY.counting}.`;
18
+ }
9
19
  export const SURVEY_STRIP_CSS = `
10
20
  /* Its own container: the aside steps out when the strip itself is narrow, on any host. */
11
21
  [data-vibe-menu] .vm-survey { margin: 0 0 var(--space-14); container: vm-survey / inline-size; }
@@ -17,53 +27,59 @@ export const SURVEY_STRIP_CSS = `
17
27
  [data-vibe-menu] .vm-survey-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-8); }
18
28
  /* Three readings keep the four-up tile size: the missing tile's column stays empty. */
19
29
  [data-vibe-menu] .vm-survey-strip[data-count="3"] { grid-template-columns: repeat(3, minmax(0, 1fr)); padding-right: calc((100% - 24px) / 4 + 8px); }
20
- [data-vibe-menu] .vm-survey-tile { position: relative; padding: 0; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; }
30
+ [data-vibe-menu] .vm-survey-cell { min-width: 0; }
31
+ [data-vibe-menu] .vm-survey-tile { position: relative; display: block; width: 100%; min-height: 44px; padding: 0; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; touch-action: manipulation; }
21
32
  [data-vibe-menu] .vm-survey-tile[data-on="true"] { outline: var(--stroke-focus) solid var(--accent); outline-offset: 2px; }
22
33
  [data-vibe-menu] .vm-survey-tile[aria-disabled="true"] { cursor: default; }
23
- [data-vibe-menu] .vm-survey[data-picked] .vm-survey-tile:not([data-on="true"]) { opacity: 0.35; }
34
+ [data-vibe-menu] .vm-survey[data-selected] .vm-survey-cell:not([data-on="true"]) .vm-survey-tile { opacity: 0.55; }
35
+ [data-vibe-menu] .vm-survey[data-picked] .vm-survey-cell:not([data-on="true"]) .vm-survey-tile { opacity: 0.35; }
24
36
  [data-vibe-menu] .vm-survey-art { display: block; width: 100%; height: 100%; object-fit: cover; }
37
+ /* The countdown: a small chip in the corner, so the look stays in full view. */
38
+ [data-vibe-menu] .vm-survey-count { position: absolute; top: 6px; right: 6px; display: grid; place-items: center; width: 28px; height: 28px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 14px/1 var(--font-display); font-variant-numeric: tabular-nums; pointer-events: none; }
39
+ [data-vibe-menu] .vm-survey-count b { font: inherit; animation: vm-survey-tick 240ms ease-out; }
40
+ @keyframes vm-survey-tick { from { transform: scale(1.35); } to { transform: scale(1); } }
41
+ @media (prefers-reduced-motion: reduce) { [data-vibe-menu] .vm-survey-count b { animation: none; } }
42
+ [data-vibe-menu] .vm-survey-cap { margin-top: var(--space-6); padding: 0 var(--space-2); font: 700 13px/1.25 var(--font-display); color: var(--ink); }
25
43
  [data-vibe-menu] .vm-survey-foot { display: flex; align-items: center; gap: var(--space-12); margin-top: var(--space-10); padding: 0 var(--space-2); }
26
44
  [data-vibe-menu] .vm-survey-text { flex: 1 1 auto; min-width: 0; }
27
45
  [data-vibe-menu] .vm-survey-label { font: 700 14px/1.3 var(--font-display); color: var(--ink); }
28
46
  [data-vibe-menu] .vm-survey-pitch { margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
29
- [data-vibe-menu] .vm-survey-pick { flex: none; height: 36px; padding: 0 var(--space-16); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-full); background: var(--accent); color: var(--on-accent); font: 700 14px/1 var(--font-display); cursor: pointer; white-space: nowrap; }
30
- [data-vibe-menu] .vm-survey-pick:disabled { opacity: 0.45; cursor: default; }
47
+ [data-vibe-menu] .vm-survey-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
48
+ /* The first build's picker: a two-by-two grid of large tiles, each with its name. */
31
49
  [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] { margin-top: var(--space-16); }
32
- [data-vibe-menu] .vm-survey-guide { margin: 0 0 var(--space-12); font: 600 17px/1.3 var(--font-display); color: var(--ink); }
33
- [data-vibe-menu] .vm-survey-preview { aspect-ratio: 1; overflow: hidden; border-radius: var(--radius-switch); background: var(--card-bg); border: var(--stroke-rule) solid var(--line-card); }
34
- [data-vibe-menu] .vm-survey-preview canvas { width: 100%; height: 100%; object-fit: contain; display: block; }
35
50
  [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-head { margin-top: var(--space-12); margin-bottom: var(--space-12); }
36
- [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-tile { min-height: 44px; }
37
- [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-foot { margin-top: var(--space-16); }
38
- [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-pick { width: 100%; height: 48px; font-size: 16px; }
39
- [data-vibe-menu] .vm-survey-direction { margin: var(--space-10) 0 0; font: 400 13px/1.4 var(--font-display); color: var(--muted); text-align: center; }
51
+ [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-title { font-size: 17px; }
52
+ [data-vibe-menu] .vm-survey[data-presentation="filmstrip"] .vm-survey-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-12) var(--space-10); padding-right: 0; }
40
53
  @container vm-survey (max-width: 360px) { [data-vibe-menu] .vm-survey:not([data-presentation="filmstrip"]) .vm-survey-aside { display: none; } }
41
54
  `;
42
55
  export function surveyMinLoaded(count) {
43
56
  return Math.min(count, Math.max(3, count - 1));
44
57
  }
45
- function SurveyPreview(props) {
46
- const canvas = React.useRef(null);
58
+ function useCountdownDigit(endsAtMs) {
59
+ const [digit, setDigit] = React.useState(undefined);
47
60
  React.useLayoutEffect(() => {
48
- const image = props.image;
49
- const target = canvas.current;
50
- if (target === null || image === undefined || image.naturalWidth === 0)
61
+ if (endsAtMs === undefined)
51
62
  return;
52
- target.width = image.naturalWidth;
53
- target.height = image.naturalHeight;
54
- target.getContext("2d")?.drawImage(image, 0, 0);
55
- }, [props.image]);
56
- return (React.createElement("div", { className: "vm-survey-preview" },
57
- React.createElement("canvas", { ref: canvas, role: "img", "aria-label": props.label })));
63
+ let timer;
64
+ const tick = () => {
65
+ const left = endsAtMs - Date.now();
66
+ setDigit({ endsAtMs, digit: surveyCountdownDigit(left) });
67
+ if (left > 0)
68
+ timer = setTimeout(tick, left % 1000 || 1000);
69
+ };
70
+ tick();
71
+ return () => clearTimeout(timer);
72
+ }, [endsAtMs]);
73
+ if (endsAtMs === undefined)
74
+ return undefined;
75
+ return digit?.endsAtMs === endsAtMs ? digit.digit : surveyCountdownDigit(SURVEY_COUNTDOWN_MS);
58
76
  }
59
77
  function SurveyStripBody(props) {
60
- const { faces, picked, onPick, onShown } = props.survey;
78
+ const { faces, picked, onPick, onShown, onChoose, onCancel } = props.survey;
61
79
  const filmstrip = props.presentation === "filmstrip";
62
- const images = React.useRef(new Map());
63
80
  const [loaded, setLoaded] = React.useState(() => new Set());
64
81
  const [errored, setErrored] = React.useState(() => new Set());
65
82
  const failed = new Set([...errored].filter((i) => !loaded.has(i)));
66
- const [focus, setFocus] = React.useState(undefined);
67
83
  const kept = faces.map((_, i) => i).filter((i) => !failed.has(i));
68
84
  const settled = faces.every((_, i) => loaded.has(i) || failed.has(i));
69
85
  const enough = kept.length >= surveyMinLoaded(faces.length) && (picked === undefined || !failed.has(picked));
@@ -74,39 +90,66 @@ function SurveyStripBody(props) {
74
90
  if (visible)
75
91
  onShownRef.current?.(kept.length);
76
92
  }, [visible, kept.length]);
93
+ const hosted = onChoose !== undefined;
94
+ const [own, setOwn] = React.useState(undefined);
95
+ const onPickRef = React.useRef(onPick);
96
+ onPickRef.current = onPick;
97
+ React.useEffect(() => {
98
+ if (hosted || own === undefined)
99
+ return;
100
+ const timer = setTimeout(() => {
101
+ setOwn(undefined);
102
+ onPickRef.current?.(own.index);
103
+ }, Math.max(0, own.endsAtMs - Date.now()));
104
+ return () => clearTimeout(timer);
105
+ }, [hosted, own]);
106
+ const chosen = picked !== undefined;
107
+ const counting = chosen ? undefined : hosted ? props.survey.choosing : own;
108
+ const digit = useCountdownDigit(counting?.endsAtMs);
77
109
  if (!enough)
78
110
  return null;
79
- const chosen = picked !== undefined;
80
- const shown = picked ?? focus ?? kept[0] ?? 0;
81
- const face = faces[shown];
82
- const ready = onPick !== undefined;
83
- return (React.createElement("section", { className: "vm-survey", "data-presentation": props.presentation, hidden: !visible, "data-testid": visible ? "survey-strip" : "survey-preload", "data-picked": chosen ? "" : undefined, "aria-label": SURVEY_COPY.region },
84
- filmstrip ? (React.createElement(React.Fragment, null,
85
- React.createElement("h3", { className: "vm-survey-guide" }, "Guide the look"),
86
- React.createElement(SurveyPreview, { image: images.current.get(shown), label: face?.label ?? "" }))) : null,
111
+ const ready = onPick !== undefined || hosted;
112
+ const selected = picked ?? counting?.index;
113
+ const face = selected === undefined ? undefined : faces[selected];
114
+ const tap = (i) => {
115
+ if (chosen || !ready)
116
+ return;
117
+ if (counting?.index === i) {
118
+ if (hosted)
119
+ onCancel?.();
120
+ else
121
+ setOwn(undefined);
122
+ }
123
+ else if (hosted)
124
+ onChoose(i);
125
+ else
126
+ setOwn({ index: i, endsAtMs: Date.now() + SURVEY_COUNTDOWN_MS });
127
+ };
128
+ const live = counting !== undefined && face !== undefined
129
+ ? surveyTileLabel(face, digit)
130
+ : chosen && face !== undefined
131
+ ? `${SURVEY_COPY.picked}: ${face.label}.`
132
+ : "";
133
+ return (React.createElement("section", { className: "vm-survey", "data-presentation": props.presentation, hidden: !visible, "data-testid": visible ? "survey-strip" : "survey-preload", "data-picked": chosen ? "" : undefined, "data-selected": selected === undefined ? undefined : "", "data-counting": counting === undefined ? undefined : "", "aria-label": SURVEY_COPY.region },
87
134
  React.createElement("div", { className: "vm-survey-head" },
88
- React.createElement("span", { className: "vm-survey-title" }, filmstrip ? (chosen ? "Direction queued" : face?.label) : chosen ? SURVEY_COPY.picked : SURVEY_COPY.choosing),
89
- filmstrip ? (React.createElement("span", { className: "vm-survey-aside" },
90
- kept.indexOf(shown) + 1,
91
- " / ",
92
- kept.length)) : chosen ? null : (React.createElement("span", { className: "vm-survey-aside" }, SURVEY_COPY.aside))),
135
+ React.createElement("span", { className: "vm-survey-title" }, chosen ? SURVEY_COPY.picked : SURVEY_COPY.choosing),
136
+ chosen ? null : (React.createElement("span", { className: "vm-survey-aside" }, counting === undefined ? SURVEY_COPY.aside : SURVEY_COPY.counting))),
93
137
  React.createElement("div", { className: "vm-survey-strip", role: "radiogroup", "aria-label": SURVEY_COPY.choosing, "data-count": kept.length }, kept.map((i) => {
94
138
  const f = faces[i];
95
- return (React.createElement("button", { key: i, type: "button", role: "radio", "aria-checked": shown === i, "aria-label": `${f.label}: ${f.pitch}`, "aria-disabled": chosen, className: "vm-survey-tile", "data-on": shown === i, onClick: () => {
96
- if (!chosen)
97
- setFocus(i);
98
- } },
99
- React.createElement("img", { className: "vm-survey-art", src: f.src, alt: "", draggable: false, onLoad: (event) => {
100
- images.current.set(i, event.currentTarget);
101
- setLoaded((prev) => (prev.has(i) ? prev : new Set(prev).add(i)));
102
- }, onError: () => setErrored((prev) => (prev.has(i) ? prev : new Set(prev).add(i))) })));
139
+ const on = selected === i;
140
+ const count = counting?.index === i ? digit : undefined;
141
+ return (React.createElement("div", { key: i, className: "vm-survey-cell", "data-on": on },
142
+ React.createElement("button", { type: "button", role: "radio", "aria-checked": on, "aria-label": surveyTileLabel(f, count), "aria-disabled": chosen || !ready, className: "vm-survey-tile", "data-on": on, onClick: () => tap(i) },
143
+ React.createElement("img", { className: "vm-survey-art", src: f.src, alt: "", draggable: false, onLoad: () => setLoaded((prev) => (prev.has(i) ? prev : new Set(prev).add(i))), onError: () => setErrored((prev) => (prev.has(i) ? prev : new Set(prev).add(i))) }),
144
+ count === undefined ? null : (React.createElement("span", { className: "vm-survey-count", "data-testid": "survey-countdown", "aria-hidden": "true" },
145
+ React.createElement("b", { key: count }, count)))),
146
+ filmstrip ? React.createElement("div", { className: "vm-survey-cap" }, f.label) : null));
103
147
  })),
104
- React.createElement("div", { className: "vm-survey-foot" },
105
- filmstrip ? null : (React.createElement("div", { className: "vm-survey-text", "aria-live": "polite" },
106
- React.createElement("div", { className: "vm-survey-label" }, face?.label),
107
- React.createElement("div", { className: "vm-survey-pitch" }, face?.pitch))),
108
- chosen ? null : (React.createElement("button", { type: "button", className: "vm-survey-pick", disabled: !ready, onClick: () => onPick?.(shown) }, filmstrip ? "Send this direction" : SURVEY_COPY.pick))),
109
- filmstrip ? (React.createElement("p", { className: "vm-survey-direction", "aria-live": "polite" }, chosen ? "Your direction is queued for the agent." : "Your agent will apply this look.")) : null));
148
+ filmstrip || face === undefined ? null : (React.createElement("div", { className: "vm-survey-foot" },
149
+ React.createElement("div", { className: "vm-survey-text" },
150
+ React.createElement("div", { className: "vm-survey-label" }, face.label),
151
+ React.createElement("div", { className: "vm-survey-pitch" }, face.pitch)))),
152
+ React.createElement("span", { className: "vm-survey-live", role: "status", "aria-live": "polite" }, live)));
110
153
  }
111
154
  export function SurveyStrip(props) {
112
155
  const srcs = props.survey.faces.map((f) => f.src);
@@ -1 +1 @@
1
- {"version":3,"file":"SurveyStrip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/SurveyStrip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SurveyStrip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/SurveyStrip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ export declare function formatBuildElapsed(elapsedMs: number): string;
3
+ export type FacesInk = "contrast" | "current";
4
+ export interface FacesGlyphProps {
5
+ readonly size?: number;
6
+ readonly ink?: FacesInk;
7
+ readonly style?: React.CSSProperties;
8
+ }
9
+ export declare function FacesGlyph({ size, ink, style }: FacesGlyphProps): React.JSX.Element;
10
+ export interface ThinkingLineProps {
11
+ readonly ink?: FacesInk;
12
+ readonly complete?: boolean;
13
+ readonly verb?: string;
14
+ readonly elapsed?: string;
15
+ readonly wrapping?: boolean;
16
+ }
17
+ export declare function useElapsedText(startedAtMs: number | undefined, stoppedAtMs?: number): string | undefined;
18
+ export declare function LiveThinkingLine({ verb, startedAtMs, stoppedAtMs, ink, }: {
19
+ readonly verb?: string;
20
+ readonly startedAtMs: number | undefined;
21
+ readonly stoppedAtMs?: number;
22
+ readonly ink?: FacesInk;
23
+ }): React.JSX.Element;
24
+ export declare function ThinkingLine({ verb, elapsed, complete, wrapping, ink }: ThinkingLineProps): React.JSX.Element;