@contentful/experience-design-system-cli 2.42.1-dev-build-35573a04.0 → 2.42.1-dev-build-62049584.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -20138,6 +20138,19 @@ var init_overview_box = __esm({
20138
20138
  });
20139
20139
 
20140
20140
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/logic.ts
20141
+ function lineState(line) {
20142
+ if (line.state) return line.state;
20143
+ return line.complete ? "done" : "running";
20144
+ }
20145
+ function formatDuration(ms) {
20146
+ return ms < 1e3 ? "<1s" : formatElapsed(Math.round(ms / 1e3));
20147
+ }
20148
+ function trackFinished(previous, rows, elapsedMs) {
20149
+ return rows.map((row, index) => previous[index] ?? (lineState(row) === "running" ? void 0 : elapsedMs));
20150
+ }
20151
+ function withTimes(rows, rowMs) {
20152
+ return rows.map((row, index) => rowMs[index] === void 0 ? row : { ...row, ms: rowMs[index] });
20153
+ }
20141
20154
  function progressPercent(progress) {
20142
20155
  if (progress.total <= 0) return 0;
20143
20156
  return Math.min(100, Math.max(0, Math.round(progress.done / progress.total * 100)));
@@ -20189,47 +20202,126 @@ var init_use_elapsed = __esm({
20189
20202
  }
20190
20203
  });
20191
20204
 
20192
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
20205
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/activity.ts
20206
+ function panelLayout(columns) {
20207
+ return columns >= BESIDE_MIN_COLUMNS ? "beside" : "below";
20208
+ }
20209
+ function visibleActivity(items, max) {
20210
+ if (items.length <= max) return { shown: [...items], hidden: 0 };
20211
+ const chosen = items.map((item, index) => ({ index, priority: PRIORITY[item.state] })).sort((a, b) => a.priority - b.priority || b.index - a.index).slice(0, Math.max(0, max)).map(({ index }) => index).sort((a, b) => a - b);
20212
+ return { shown: chosen.map((index) => items[index]), hidden: items.length - chosen.length };
20213
+ }
20214
+ function truncate(text, max) {
20215
+ return text.length <= max ? text : `${text.slice(0, Math.max(0, max - 1))}\u2026`;
20216
+ }
20217
+ var BESIDE_MIN_COLUMNS, PANEL_COLUMNS, PRIORITY;
20218
+ var init_activity = __esm({
20219
+ "packages/experience-design-system-cli/src/tui/import/shared/running-step/activity.ts"() {
20220
+ "use strict";
20221
+ BESIDE_MIN_COLUMNS = 110;
20222
+ PANEL_COLUMNS = 46;
20223
+ PRIORITY = { failed: 0, running: 1, done: 2 };
20224
+ }
20225
+ });
20226
+
20227
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/activity-panel.tsx
20193
20228
  import { Box as Box8, Text as Text8 } from "ink";
20194
- import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
20195
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
20229
+ import { Spinner } from "@inkjs/ui";
20230
+ import { Fragment, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
20231
+ function Row({ item, width }) {
20232
+ const time = item.ms !== void 0 ? formatDuration(item.ms) : "";
20233
+ const note = item.detail ? ` ${item.detail}` : "";
20234
+ const name = truncate(`${item.name}${note}`, Math.max(8, width - 12));
20235
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
20236
+ /* @__PURE__ */ jsxs8(Box8, { gap: 1, children: [
20237
+ item.state === "running" ? /* @__PURE__ */ jsx8(Spinner, {}) : /* @__PURE__ */ jsx8(Text8, { color: COLOR[item.state], children: ICON[item.state] }),
20238
+ /* @__PURE__ */ jsx8(Text8, { color: item.state === "failed" ? PALETTE.error : PALETTE.muted, children: name }),
20239
+ time && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: time })
20240
+ ] }),
20241
+ item.state === "failed" && item.error && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.error, children: ` ${truncate(item.error, Math.max(12, width - 6))}` })
20242
+ ] });
20243
+ }
20244
+ function ActivityPanel({ title, items }) {
20245
+ const columns = useTerminalWidth();
20246
+ const width = panelLayout(columns) === "beside" ? PANEL_COLUMNS : Math.max(30, columns - 4);
20247
+ const { shown, hidden } = visibleActivity(items, MAX_ROWS);
20248
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.muted, paddingX: 1, width, children: [
20249
+ /* @__PURE__ */ jsx8(Text8, { bold: true, children: title }),
20250
+ shown.map((item, index) => /* @__PURE__ */ jsx8(Row, { item, width }, `${index}-${item.name}`)),
20251
+ hidden > 0 && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: `+ ${hidden} more` })
20252
+ ] });
20253
+ }
20254
+ function AsideLayout({
20255
+ aside,
20256
+ children
20257
+ }) {
20258
+ const columns = useTerminalWidth();
20259
+ if (!aside) return /* @__PURE__ */ jsx8(Fragment, { children });
20260
+ const beside = panelLayout(columns) === "beside";
20261
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: beside ? "row" : "column", alignItems: "flex-start", children: [
20262
+ children,
20263
+ /* @__PURE__ */ jsx8(Box8, { paddingX: beside ? 0 : 2, paddingBottom: 1, children: aside })
20264
+ ] });
20265
+ }
20266
+ var MAX_ROWS, ICON, COLOR;
20267
+ var init_activity_panel = __esm({
20268
+ "packages/experience-design-system-cli/src/tui/import/shared/running-step/activity-panel.tsx"() {
20269
+ "use strict";
20270
+ init_theme();
20271
+ init_use_terminal_width();
20272
+ init_logic4();
20273
+ init_activity();
20274
+ MAX_ROWS = 8;
20275
+ ICON = { done: "\u2713", failed: "\u2717" };
20276
+ COLOR = { done: PALETTE.success, failed: PALETTE.error };
20277
+ }
20278
+ });
20279
+
20280
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
20281
+ import { Box as Box9, Text as Text9 } from "ink";
20282
+ import { ProgressBar, Spinner as Spinner2, ThemeProvider } from "@inkjs/ui";
20283
+ import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
20196
20284
  function Line({ line }) {
20197
20285
  if (line.progress) {
20198
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, children: [
20199
- /* @__PURE__ */ jsxs8(Box8, { gap: 2, children: [
20200
- /* @__PURE__ */ jsx8(Box8, { width: 40, children: /* @__PURE__ */ jsx8(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx8(ProgressBar, { value: progressPercent(line.progress) }) }) }),
20201
- /* @__PURE__ */ jsxs8(Text8, { color: PALETTE.muted, children: [
20286
+ return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, children: [
20287
+ /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
20288
+ /* @__PURE__ */ jsx9(Box9, { width: 40, children: /* @__PURE__ */ jsx9(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx9(ProgressBar, { value: progressPercent(line.progress) }) }) }),
20289
+ /* @__PURE__ */ jsxs9(Text9, { color: PALETTE.muted, children: [
20202
20290
  line.progress.done,
20203
20291
  "/",
20204
20292
  line.progress.total
20205
20293
  ] })
20206
20294
  ] }),
20207
- /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: line.text })
20295
+ /* @__PURE__ */ jsx9(Text9, { color: textColor(lineState(line)), children: line.text })
20208
20296
  ] });
20209
20297
  }
20210
- return /* @__PURE__ */ jsxs8(Box8, { gap: 1, children: [
20211
- line.complete ? /* @__PURE__ */ jsx8(Text8, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx8(Spinner, {}),
20212
- /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: line.text })
20298
+ const state2 = lineState(line);
20299
+ return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
20300
+ state2 === "running" ? /* @__PURE__ */ jsx9(Spinner2, {}) : /* @__PURE__ */ jsx9(Text9, { color: STATE_COLOR[state2], children: STATE_ICON[state2] }),
20301
+ /* @__PURE__ */ jsx9(Text9, { color: textColor(state2), children: line.text }),
20302
+ line.ms !== void 0 && /* @__PURE__ */ jsx9(Text9, { color: PALETTE.muted, children: formatDuration(line.ms) })
20213
20303
  ] });
20214
20304
  }
20215
20305
  function RunningStep({
20216
20306
  step,
20217
20307
  description,
20218
- lines = [{ text: "Running..." }]
20308
+ lines = [{ text: "Running..." }],
20309
+ aside
20219
20310
  }) {
20220
20311
  const elapsed = useElapsed();
20221
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
20222
- /* @__PURE__ */ jsx8(StepHeader, { step }),
20223
- /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20224
- /* @__PURE__ */ jsx8(Text8, { children: description }),
20225
- /* @__PURE__ */ jsx8(Box8, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx8(Line, { line }, index)) }),
20226
- /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: /* @__PURE__ */ jsxs8(Text8, { color: PALETTE.muted, children: [
20312
+ return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
20313
+ /* @__PURE__ */ jsx9(StepHeader, { step }),
20314
+ /* @__PURE__ */ jsx9(AsideLayout, { aside, children: /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20315
+ /* @__PURE__ */ jsx9(Text9, { children: description }),
20316
+ /* @__PURE__ */ jsx9(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx9(Line, { line }, index)) }),
20317
+ /* @__PURE__ */ jsx9(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text9, { color: PALETTE.muted, children: [
20227
20318
  "Elapsed: ",
20228
20319
  elapsed
20229
20320
  ] }) })
20230
- ] })
20321
+ ] }) })
20231
20322
  ] });
20232
20323
  }
20324
+ var STATE_ICON, STATE_COLOR, textColor;
20233
20325
  var init_running_step = __esm({
20234
20326
  "packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx"() {
20235
20327
  "use strict";
@@ -20238,6 +20330,10 @@ var init_running_step = __esm({
20238
20330
  init_theme2();
20239
20331
  init_StepHeader();
20240
20332
  init_use_elapsed();
20333
+ init_activity_panel();
20334
+ STATE_ICON = { done: "\u2713", warning: "!", failed: "\u2717" };
20335
+ STATE_COLOR = { done: PALETTE.success, warning: PALETTE.warning, failed: PALETTE.error };
20336
+ textColor = (state2) => state2 === "warning" || state2 === "failed" ? STATE_COLOR[state2] : PALETTE.muted;
20241
20337
  }
20242
20338
  });
20243
20339
 
@@ -20254,8 +20350,8 @@ var init_shared2 = __esm({
20254
20350
 
20255
20351
  // packages/experience-design-system-cli/src/tui/import/steps/00-preflight/screen.tsx
20256
20352
  import { useEffect as useEffect4, useRef, useState as useState4 } from "react";
20257
- import { Box as Box9, Text as Text9 } from "ink";
20258
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
20353
+ import { Box as Box10, Text as Text10 } from "ink";
20354
+ import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
20259
20355
  function PreflightScreen({ onChoose, onQuit }) {
20260
20356
  const [focus, setFocus] = useState4(0);
20261
20357
  const viewed = useRef([optionAt(0)]).current;
@@ -20284,19 +20380,19 @@ function PreflightScreen({ onChoose, onQuit }) {
20284
20380
  onQuit();
20285
20381
  };
20286
20382
  usePreflightControls({ focus, onFocus: moveTo, onChoose: choose, onQuit: quit });
20287
- return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
20288
- /* @__PURE__ */ jsx9(StepHeader, { step: "setup" }),
20289
- /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20290
- /* @__PURE__ */ jsx9(Text9, { bold: true, color: PALETTE.text, children: "What do you want to import?" }),
20291
- /* @__PURE__ */ jsx9(Box9, { flexDirection: "column", children: IMPORT_TARGET_OPTIONS.map((option, index) => {
20383
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
20384
+ /* @__PURE__ */ jsx10(StepHeader, { step: "setup" }),
20385
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20386
+ /* @__PURE__ */ jsx10(Text10, { bold: true, color: PALETTE.text, children: "What do you want to import?" }),
20387
+ /* @__PURE__ */ jsx10(Box10, { flexDirection: "column", children: IMPORT_TARGET_OPTIONS.map((option, index) => {
20292
20388
  const focused = index === focus;
20293
- return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
20294
- /* @__PURE__ */ jsx9(Text9, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
20295
- /* @__PURE__ */ jsx9(Text9, { bold: focused, color: focused ? PALETTE.accent : void 0, children: option.label })
20389
+ return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
20390
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
20391
+ /* @__PURE__ */ jsx10(Text10, { bold: focused, color: focused ? PALETTE.accent : void 0, children: option.label })
20296
20392
  ] }, option.target);
20297
20393
  }) }),
20298
- /* @__PURE__ */ jsx9(OverviewBox, { steps: overviewFor(optionAt(focus)) }),
20299
- /* @__PURE__ */ jsx9(ControlHints, { hints: PREFLIGHT_CONTROLS })
20394
+ /* @__PURE__ */ jsx10(OverviewBox, { steps: overviewFor(optionAt(focus)) }),
20395
+ /* @__PURE__ */ jsx10(ControlHints, { hints: PREFLIGHT_CONTROLS })
20300
20396
  ] })
20301
20397
  ] });
20302
20398
  }
@@ -20319,7 +20415,7 @@ var init_screen = __esm({
20319
20415
  import { useRef as useRef2 } from "react";
20320
20416
  import { useInput as useInput6 } from "ink";
20321
20417
  import TextInput from "ink-text-input";
20322
- import { jsx as jsx10 } from "react/jsx-runtime";
20418
+ import { jsx as jsx11 } from "react/jsx-runtime";
20323
20419
  function isClearKey(input, key) {
20324
20420
  return key.ctrl && input === "d";
20325
20421
  }
@@ -20333,7 +20429,7 @@ function ClearableTextInput({ onChange, ...props }) {
20333
20429
  }, 0);
20334
20430
  onChange("");
20335
20431
  });
20336
- return /* @__PURE__ */ jsx10(
20432
+ return /* @__PURE__ */ jsx11(
20337
20433
  TextInput,
20338
20434
  {
20339
20435
  ...props,
@@ -20385,8 +20481,8 @@ var init_controls4 = __esm({
20385
20481
 
20386
20482
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
20387
20483
  import { useEffect as useEffect5, useRef as useRef3, useState as useState5 } from "react";
20388
- import { Box as Box10, Text as Text10 } from "ink";
20389
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
20484
+ import { Box as Box11, Text as Text11 } from "ink";
20485
+ import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
20390
20486
  function WelcomeScreen({ mode, onContinue, onQuit, initialPath = "" }) {
20391
20487
  const [projectPath, setProjectPath] = useState5(initialPath);
20392
20488
  const visit = useRef3({ emptySubmits: 0 }).current;
@@ -20428,18 +20524,18 @@ function WelcomeScreen({ mode, onContinue, onQuit, initialPath = "" }) {
20428
20524
  });
20429
20525
  onContinue(path5);
20430
20526
  };
20431
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
20432
- /* @__PURE__ */ jsx11(StepHeader, { step: "setup" }),
20433
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20434
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
20435
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.text, children: "Where is your component library?" }),
20436
- /* @__PURE__ */ jsxs10(Box10, { children: [
20437
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "? " }),
20438
- /* @__PURE__ */ jsx11(Text10, { children: "Project path: " }),
20439
- /* @__PURE__ */ jsx11(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
20527
+ return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
20528
+ /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
20529
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20530
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, children: [
20531
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.text, children: "Where is your component library?" }),
20532
+ /* @__PURE__ */ jsxs11(Box11, { children: [
20533
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.accent, children: "? " }),
20534
+ /* @__PURE__ */ jsx12(Text11, { children: "Project path: " }),
20535
+ /* @__PURE__ */ jsx12(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
20440
20536
  ] })
20441
20537
  ] }),
20442
- /* @__PURE__ */ jsx11(Box10, { children: /* @__PURE__ */ jsx11(ControlHints, { hints: WELCOME_CONTROLS }) })
20538
+ /* @__PURE__ */ jsx12(Box11, { children: /* @__PURE__ */ jsx12(ControlHints, { hints: WELCOME_CONTROLS }) })
20443
20539
  ] })
20444
20540
  ] });
20445
20541
  }
@@ -20540,8 +20636,8 @@ var init_validate_path = __esm({
20540
20636
 
20541
20637
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
20542
20638
  import { useEffect as useEffect6, useRef as useRef4, useState as useState6 } from "react";
20543
- import { Box as Box11, Text as Text11 } from "ink";
20544
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
20639
+ import { Box as Box12, Text as Text12 } from "ink";
20640
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
20545
20641
  function TokenInputScreen({
20546
20642
  mode,
20547
20643
  onConfirm,
@@ -20604,29 +20700,29 @@ function TokenInputScreen({
20604
20700
  });
20605
20701
  onConfirm(check.path);
20606
20702
  };
20607
- return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
20608
- /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
20609
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20610
- /* @__PURE__ */ jsx12(Text11, { bold: true, children: "Design tokens" }),
20611
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: "Point me to your raw token file (e.g. ~/design-tokens/tokens.json). You can use ~, relative, or absolute paths. Claude will map it to Design Token Group Format (DTCG)." }),
20612
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
20613
- /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
20614
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.accent, children: "?" }),
20615
- /* @__PURE__ */ jsx12(Text11, { children: "Token path:" }),
20616
- /* @__PURE__ */ jsx12(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
20703
+ return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20704
+ /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
20705
+ /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20706
+ /* @__PURE__ */ jsx13(Text12, { bold: true, children: "Design tokens" }),
20707
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: "Point me to your raw token file (e.g. ~/design-tokens/tokens.json). You can use ~, relative, or absolute paths. Claude will map it to Design Token Group Format (DTCG)." }),
20708
+ /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20709
+ /* @__PURE__ */ jsxs12(Box12, { gap: 1, children: [
20710
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.accent, children: "?" }),
20711
+ /* @__PURE__ */ jsx13(Text12, { children: "Token path:" }),
20712
+ /* @__PURE__ */ jsx13(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
20617
20713
  ] }),
20618
- failure && /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
20619
- /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.error, children: [
20714
+ failure && /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20715
+ /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
20620
20716
  "\u2717 ",
20621
20717
  failure.error
20622
20718
  ] }),
20623
- failure.resolvedPath && /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.muted, children: [
20719
+ failure.resolvedPath && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
20624
20720
  " Resolved to: ",
20625
20721
  failure.resolvedPath
20626
20722
  ] })
20627
20723
  ] })
20628
20724
  ] }),
20629
- /* @__PURE__ */ jsx12(Box11, { marginTop: 1, children: /* @__PURE__ */ jsx12(ControlHints, { hints: TOKEN_INPUT_CONTROLS }) })
20725
+ /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(ControlHints, { hints: TOKEN_INPUT_CONTROLS }) })
20630
20726
  ] })
20631
20727
  ] });
20632
20728
  }
@@ -20794,10 +20890,10 @@ var init_scan_files = __esm({
20794
20890
 
20795
20891
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
20796
20892
  import { useEffect as useEffect7, useMemo, useState as useState7 } from "react";
20797
- import { Box as Box12, Text as Text12 } from "ink";
20798
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
20799
- function Row({ row }) {
20800
- return /* @__PURE__ */ jsxs12(Text12, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
20893
+ import { Box as Box13, Text as Text13 } from "ink";
20894
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
20895
+ function Row2({ row }) {
20896
+ return /* @__PURE__ */ jsxs13(Text13, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
20801
20897
  " \u2022 ",
20802
20898
  String(row.count).padStart(3),
20803
20899
  " ",
@@ -20806,12 +20902,12 @@ function Row({ row }) {
20806
20902
  }
20807
20903
  function Failure({ scan, path: path5 }) {
20808
20904
  const { headline, hints } = describeFailure(scan.failure, path5);
20809
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20810
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
20905
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
20906
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.error, children: [
20811
20907
  "\u2717 ",
20812
20908
  headline
20813
20909
  ] }),
20814
- hints.map((hint) => /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: hint }, hint))
20910
+ hints.map((hint) => /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: hint }, hint))
20815
20911
  ] });
20816
20912
  }
20817
20913
  function Summary({
@@ -20820,24 +20916,24 @@ function Summary({
20820
20916
  hasTokens
20821
20917
  }) {
20822
20918
  const { total, rows, warning } = summarize(scan.counts, { hasTokens });
20823
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, children: [
20824
- /* @__PURE__ */ jsxs12(Text12, { children: [
20919
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", gap: 1, children: [
20920
+ /* @__PURE__ */ jsxs13(Text13, { children: [
20825
20921
  "Scanned ",
20826
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: path5 })
20922
+ /* @__PURE__ */ jsx14(Text13, { bold: true, children: path5 })
20827
20923
  ] }),
20828
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20829
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.success, children: [
20924
+ /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
20925
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.success, children: [
20830
20926
  "\u2713 Found ",
20831
20927
  total,
20832
20928
  " files:"
20833
20929
  ] }),
20834
- rows.map((row) => /* @__PURE__ */ jsx13(Row, { row }, row.label))
20930
+ rows.map((row) => /* @__PURE__ */ jsx14(Row2, { row }, row.label))
20835
20931
  ] }),
20836
- warning && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.warning, children: [
20932
+ warning && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.warning, children: [
20837
20933
  "\u26A0 ",
20838
20934
  warning
20839
20935
  ] }),
20840
- /* @__PURE__ */ jsx13(Text12, { children: "Does this look right?" })
20936
+ /* @__PURE__ */ jsx14(Text13, { children: "Does this look right?" })
20841
20937
  ] });
20842
20938
  }
20843
20939
  function PathValidationScreen({
@@ -20884,17 +20980,17 @@ function PathValidationScreen({
20884
20980
  onBack();
20885
20981
  }
20886
20982
  });
20887
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
20888
- /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
20889
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20890
- scan === void 0 && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
20983
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
20984
+ /* @__PURE__ */ jsx14(StepHeader, { step: "setup" }),
20985
+ /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
20986
+ scan === void 0 && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.muted, children: [
20891
20987
  "Scanning ",
20892
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: resolvedPath }),
20988
+ /* @__PURE__ */ jsx14(Text13, { bold: true, children: resolvedPath }),
20893
20989
  "..."
20894
20990
  ] }),
20895
- scan?.ok === false && /* @__PURE__ */ jsx13(Failure, { scan, path: resolvedPath }),
20896
- scan?.ok === true && /* @__PURE__ */ jsx13(Summary, { scan, path: resolvedPath, hasTokens }),
20897
- /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(ControlHints, { hints: controlsFor(phase) }) })
20991
+ scan?.ok === false && /* @__PURE__ */ jsx14(Failure, { scan, path: resolvedPath }),
20992
+ scan?.ok === true && /* @__PURE__ */ jsx14(Summary, { scan, path: resolvedPath, hasTokens }),
20993
+ /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(ControlHints, { hints: controlsFor(phase) }) })
20898
20994
  ] })
20899
20995
  ] });
20900
20996
  }
@@ -20914,8 +21010,8 @@ var init_screen4 = __esm({
20914
21010
 
20915
21011
  // packages/experience-design-system-cli/src/tui/shared/components/FieldForm.tsx
20916
21012
  import { useState as useState8 } from "react";
20917
- import { Box as Box13, Text as Text13, useInput as useInput10 } from "ink";
20918
- import { Fragment, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
21013
+ import { Box as Box14, Text as Text14, useInput as useInput10 } from "ink";
21014
+ import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
20919
21015
  function formLabelWidth(rows) {
20920
21016
  return Math.max(...rows.map((row) => row.label.length));
20921
21017
  }
@@ -20924,9 +21020,9 @@ function FormReadOnlyRow({
20924
21020
  labelWidth,
20925
21021
  children
20926
21022
  }) {
20927
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
20928
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
20929
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: label }) }),
21023
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
21024
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
21025
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: label }) }),
20930
21026
  children
20931
21027
  ] });
20932
21028
  }
@@ -21013,23 +21109,23 @@ function FieldForm({
21013
21109
  setValueBeforeEdit(values[next.key]);
21014
21110
  setActive(active + 1);
21015
21111
  };
21016
- const pointer = (isActive) => /* @__PURE__ */ jsx14(Text13, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
21017
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
21112
+ const pointer = (isActive) => /* @__PURE__ */ jsx15(Text14, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
21113
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
21018
21114
  header,
21019
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
21020
- /* @__PURE__ */ jsx14(Text13, { bold: true, children: title }),
21021
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
21022
- subtitle && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: subtitle }),
21023
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
21024
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
21115
+ /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
21116
+ /* @__PURE__ */ jsx15(Text14, { bold: true, children: title }),
21117
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
21118
+ subtitle && /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: subtitle }),
21119
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
21120
+ /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
21025
21121
  fields2.map((field, index) => {
21026
21122
  const isActive = index === active;
21027
21123
  const value = values[field.key];
21028
21124
  const display = field.masked ? "\u2022".repeat(value.length) : value;
21029
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
21125
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
21030
21126
  pointer(isActive),
21031
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
21032
- isActive && editing ? /* @__PURE__ */ jsx14(
21127
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
21128
+ isActive && editing ? /* @__PURE__ */ jsx15(
21033
21129
  ClearableTextInput,
21034
21130
  {
21035
21131
  value,
@@ -21037,34 +21133,34 @@ function FieldForm({
21037
21133
  onSubmit: submitField,
21038
21134
  mask: field.masked ? "\u2022" : void 0
21039
21135
  }
21040
- ) : display ? /* @__PURE__ */ jsx14(Text13, { bold: true, children: display }) : (
21136
+ ) : display ? /* @__PURE__ */ jsx15(Text14, { bold: true, children: display }) : (
21041
21137
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
21042
21138
  // text starts in the same column as every other row's.
21043
- /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
21139
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
21044
21140
  ),
21045
- display && field.hint && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint })
21141
+ display && field.hint && /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: field.hint })
21046
21142
  ] }, field.key);
21047
21143
  }),
21048
21144
  actions.map((action, index) => {
21049
21145
  const isActive = fields2.length + index === active;
21050
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
21146
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
21051
21147
  pointer(isActive),
21052
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
21053
- /* @__PURE__ */ jsx14(Text13, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
21148
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
21149
+ /* @__PURE__ */ jsx15(Text14, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
21054
21150
  ] }, action.label);
21055
21151
  })
21056
21152
  ] }),
21057
- notice && /* @__PURE__ */ jsxs13(Fragment, { children: [
21058
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
21059
- /* @__PURE__ */ jsxs13(Text13, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
21153
+ notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21154
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
21155
+ /* @__PURE__ */ jsxs14(Text14, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
21060
21156
  notice.kind === "success" ? "\u2713" : "\u2717",
21061
21157
  " ",
21062
21158
  notice.text
21063
21159
  ] })
21064
21160
  ] }),
21065
21161
  children,
21066
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
21067
- /* @__PURE__ */ jsx14(
21162
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
21163
+ /* @__PURE__ */ jsx15(
21068
21164
  ControlHints,
21069
21165
  {
21070
21166
  hints: editing ? [
@@ -21236,8 +21332,8 @@ var init_validate4 = __esm({
21236
21332
 
21237
21333
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
21238
21334
  import { useEffect as useEffect8, useRef as useRef5, useState as useState9 } from "react";
21239
- import { Box as Box14, Text as Text14, useInput as useInput11 } from "ink";
21240
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
21335
+ import { Box as Box15, Text as Text15, useInput as useInput11 } from "ink";
21336
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
21241
21337
  function CredentialsScreen({
21242
21338
  mode,
21243
21339
  onDone,
@@ -21355,24 +21451,24 @@ function CredentialsScreen({
21355
21451
  });
21356
21452
  const labelWidth = formLabelWidth([...FIELDS2, ...MENU]);
21357
21453
  const changed = !isUnchanged(normalize(values), initialValues);
21358
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
21359
- /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
21360
- /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
21361
- /* @__PURE__ */ jsx15(Text14, { bold: true, color: PALETTE.accent, children: "Contentful Credentials" }),
21362
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21363
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
21364
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21365
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Actions" }),
21454
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
21455
+ /* @__PURE__ */ jsx16(StepHeader, { step: "setup" }),
21456
+ /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
21457
+ /* @__PURE__ */ jsx16(Text15, { bold: true, color: PALETTE.accent, children: "Contentful Credentials" }),
21458
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21459
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
21460
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21461
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Actions" }),
21366
21462
  MENU.map((item, index) => {
21367
21463
  const focused = !editing && index === focus;
21368
- return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
21369
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
21370
- /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: focused, color: focused ? PALETTE.accent : editing ? PALETTE.muted : PALETTE.text, children: item.label }) }),
21371
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: item.description })
21464
+ return /* @__PURE__ */ jsxs15(Box15, { gap: 1, children: [
21465
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
21466
+ /* @__PURE__ */ jsx16(Box15, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx16(Text15, { bold: focused, color: focused ? PALETTE.accent : editing ? PALETTE.muted : PALETTE.text, children: item.label }) }),
21467
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: item.description })
21372
21468
  ] }, item.choice);
21373
21469
  }),
21374
- /* @__PURE__ */ jsxs14(
21375
- Box14,
21470
+ /* @__PURE__ */ jsxs15(
21471
+ Box15,
21376
21472
  {
21377
21473
  flexDirection: "column",
21378
21474
  marginTop: 1,
@@ -21382,15 +21478,15 @@ function CredentialsScreen({
21382
21478
  borderLeft: false,
21383
21479
  borderRight: false,
21384
21480
  children: [
21385
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Space" }),
21481
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Space" }),
21386
21482
  FIELDS2.map((field, index) => {
21387
21483
  const open = editing && index === active;
21388
21484
  const value = values[field.key];
21389
21485
  const display = field.masked ? "\u2022".repeat(value.length) : value;
21390
- return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
21391
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: open ? "\u276F" : " " }),
21392
- /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: open, color: open ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
21393
- open ? /* @__PURE__ */ jsx15(
21486
+ return /* @__PURE__ */ jsxs15(Box15, { gap: 1, children: [
21487
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: open ? "\u276F" : " " }),
21488
+ /* @__PURE__ */ jsx16(Box15, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx16(Text15, { bold: open, color: open ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
21489
+ open ? /* @__PURE__ */ jsx16(
21394
21490
  ClearableTextInput,
21395
21491
  {
21396
21492
  value,
@@ -21401,35 +21497,35 @@ function CredentialsScreen({
21401
21497
  onSubmit: stopEditing,
21402
21498
  mask: field.masked ? "\u2022" : void 0
21403
21499
  }
21404
- ) : /* @__PURE__ */ jsx15(Text14, { color: display ? PALETTE.text : PALETTE.muted, children: display || (field.hint ?? "(empty)") })
21500
+ ) : /* @__PURE__ */ jsx16(Text15, { color: display ? PALETTE.text : PALETTE.muted, children: display || (field.hint ?? "(empty)") })
21405
21501
  ] }, field.key);
21406
21502
  })
21407
21503
  ]
21408
21504
  }
21409
21505
  ),
21410
- notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21411
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21412
- /* @__PURE__ */ jsxs14(Text14, { color: PALETTE.error, children: [
21506
+ notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
21507
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21508
+ /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.error, children: [
21413
21509
  "\u2717 ",
21414
21510
  notice.text
21415
21511
  ] })
21416
21512
  ] }),
21417
- validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21418
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21419
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
21513
+ validating && /* @__PURE__ */ jsxs15(Fragment3, { children: [
21514
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21515
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: "Validating credentials..." })
21420
21516
  ] }),
21421
- !prefilled && !validating && !notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21422
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21423
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
21424
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
21517
+ !prefilled && !validating && !notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
21518
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21519
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
21520
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
21425
21521
  ] }),
21426
- changed && !validating && !notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21427
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21428
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
21522
+ changed && !validating && !notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
21523
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21524
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
21429
21525
  ] }),
21430
- editing && /* @__PURE__ */ jsxs14(Fragment2, { children: [
21431
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
21432
- /* @__PURE__ */ jsx15(
21526
+ editing && /* @__PURE__ */ jsxs15(Fragment3, { children: [
21527
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
21528
+ /* @__PURE__ */ jsx16(
21433
21529
  ControlHints,
21434
21530
  {
21435
21531
  hints: [
@@ -21535,7 +21631,7 @@ function plural(count, noun) {
21535
21631
  function compositionDone(progress) {
21536
21632
  return progress.composition === "done" || progress.composition === "cache-hit";
21537
21633
  }
21538
- function progressRows(progress, agent) {
21634
+ function progressRows(progress, agent, rowMs = []) {
21539
21635
  const { scan, composition, selection, existingEntities, tokens } = progress;
21540
21636
  const scanned = scan?.scanned ?? 0;
21541
21637
  const scanComplete = (scan?.total ?? 0) > 0;
@@ -21556,16 +21652,20 @@ function progressRows(progress, agent) {
21556
21652
  if (existingEntities !== "idle") {
21557
21653
  rows.push({
21558
21654
  text: existingEntities === "running" ? "Fetching existing components and tokens..." : existingEntities === "complete" ? "Existing components and tokens ready" : "Existing entities unavailable; continuing without them",
21559
- complete: existingEntities !== "running"
21655
+ complete: existingEntities !== "running",
21656
+ // The import carries on without them, so this is not shown as a success.
21657
+ ...existingEntities === "failed" ? { state: "warning" } : {}
21560
21658
  });
21561
21659
  }
21562
21660
  if (tokens !== "idle") {
21563
21661
  rows.push({
21564
21662
  text: tokens === "complete" ? "Token definitions ready" : tokens === "failed" ? "Token definition generation failed" : `Generating token definitions via ${agent}...`,
21565
- complete: tokens === "complete"
21663
+ complete: tokens === "complete",
21664
+ // A failed job is not still running.
21665
+ ...tokens === "failed" ? { state: "failed" } : {}
21566
21666
  });
21567
21667
  }
21568
- return rows;
21668
+ return withTimes(rows, rowMs);
21569
21669
  }
21570
21670
  function noComponentsMessage(projectPath) {
21571
21671
  return `No components found in ${projectPath}.
@@ -21596,18 +21696,19 @@ var init_logic9 = __esm({
21596
21696
  "use strict";
21597
21697
  init_src3();
21598
21698
  init_debug_trail();
21699
+ init_logic4();
21599
21700
  }
21600
21701
  });
21601
21702
 
21602
21703
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
21603
- import { jsx as jsx16 } from "react/jsx-runtime";
21604
- function ExtractionScreen({ progress, agent }) {
21605
- return /* @__PURE__ */ jsx16(
21704
+ import { jsx as jsx17 } from "react/jsx-runtime";
21705
+ function ExtractionScreen({ progress, agent, rowMs }) {
21706
+ return /* @__PURE__ */ jsx17(
21606
21707
  RunningStep,
21607
21708
  {
21608
21709
  step: "extraction",
21609
21710
  description: "Extracting context from your source files.",
21610
- lines: progressRows(progress, agent)
21711
+ lines: progressRows(progress, agent, rowMs)
21611
21712
  }
21612
21713
  );
21613
21714
  }
@@ -21684,8 +21785,8 @@ var init_load = __esm({
21684
21785
 
21685
21786
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-review/screen.tsx
21686
21787
  import { useEffect as useEffect9, useMemo as useMemo2, useState as useState10 } from "react";
21687
- import { Box as Box15, Text as Text15, useInput as useInput12 } from "ink";
21688
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
21788
+ import { Box as Box16, Text as Text16, useInput as useInput12 } from "ink";
21789
+ import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
21689
21790
  function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
21690
21791
  const loaded = useMemo2(() => loadTokenRows(tokensPath), [tokensPath]);
21691
21792
  const rows = loaded.ok ? loaded.rows : [];
@@ -21728,22 +21829,22 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
21728
21829
  const typeWidth = Math.max(4, ...rows.map((row) => row.type.length)) + COLUMN_GAP;
21729
21830
  const valueWidth = Math.max(10, innerWidth - pathWidth - typeWidth - 2);
21730
21831
  const clip = (text, width) => text.length > width ? `${text.slice(0, Math.max(0, width - 1))}\u2026` : text.padEnd(width);
21731
- return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
21732
- /* @__PURE__ */ jsx17(StepHeader, { step: "review" }),
21733
- /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
21734
- /* @__PURE__ */ jsx17(Text15, { bold: true, children: "Review design tokens" }),
21735
- /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: loaded.ok ? /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.muted, children: [
21832
+ return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", children: [
21833
+ /* @__PURE__ */ jsx18(StepHeader, { step: "review" }),
21834
+ /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
21835
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: "Review design tokens" }),
21836
+ /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: loaded.ok ? /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.muted, children: [
21736
21837
  rows.length,
21737
21838
  " ",
21738
21839
  rows.length === 1 ? "token" : "tokens",
21739
21840
  " generated from ",
21740
21841
  tokensPath
21741
- ] }) : /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.error, children: [
21842
+ ] }) : /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.error, children: [
21742
21843
  "Could not read the generated tokens: ",
21743
21844
  loaded.message
21744
21845
  ] }) }),
21745
- /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", marginTop: 1, children: [
21746
- /* @__PURE__ */ jsxs15(Text15, { bold: true, color: PALETTE.muted, wrap: "truncate-end", children: [
21846
+ /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", marginTop: 1, children: [
21847
+ /* @__PURE__ */ jsxs16(Text16, { bold: true, color: PALETTE.muted, wrap: "truncate-end", children: [
21747
21848
  " ",
21748
21849
  clip("Token name", pathWidth),
21749
21850
  " ",
@@ -21753,7 +21854,7 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
21753
21854
  ] }),
21754
21855
  rows.slice(start, end).map((row, offset) => {
21755
21856
  const active = start + offset === selected;
21756
- return /* @__PURE__ */ jsxs15(Text15, { color: active ? PALETTE.accent : void 0, bold: active, wrap: "truncate-end", children: [
21857
+ return /* @__PURE__ */ jsxs16(Text16, { color: active ? PALETTE.accent : void 0, bold: active, wrap: "truncate-end", children: [
21757
21858
  active ? "\u203A " : " ",
21758
21859
  clip(row.path, pathWidth),
21759
21860
  " ",
@@ -21763,14 +21864,14 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
21763
21864
  ] }, row.path);
21764
21865
  })
21765
21866
  ] }),
21766
- rows.length > VISIBLE_ROWS && /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.muted, children: [
21867
+ rows.length > VISIBLE_ROWS && /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.muted, children: [
21767
21868
  start + 1,
21768
21869
  "-",
21769
21870
  end,
21770
21871
  " of ",
21771
21872
  rows.length
21772
21873
  ] }) }),
21773
- /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx17(ControlHints, { hints: TOKEN_REVIEW_CONTROLS }) })
21874
+ /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: /* @__PURE__ */ jsx18(ControlHints, { hints: TOKEN_REVIEW_CONTROLS }) })
21774
21875
  ] })
21775
21876
  ] });
21776
21877
  }
@@ -22092,9 +22193,12 @@ function useExtraction(input) {
22092
22193
  progress: initialProgress({
22093
22194
  hasCredentials: input.credentials !== null,
22094
22195
  hasRawTokens: input.rawTokensPath !== ""
22095
- })
22196
+ }),
22197
+ rowMs: []
22096
22198
  });
22097
- let lastProgress;
22199
+ let lastProgress2;
22200
+ const startedAt = Date.now();
22201
+ let rowMs = [];
22098
22202
  startDebugRun({
22099
22203
  flow: "import/extraction",
22100
22204
  step: "06-extraction",
@@ -22102,12 +22206,13 @@ function useExtraction(input) {
22102
22206
  inputs: extractionLogInputs(input)
22103
22207
  });
22104
22208
  void runExtraction(input, (progress) => {
22105
- lastProgress = progress;
22106
- if (current.current === input) setState({ status: "running", progress });
22209
+ lastProgress2 = progress;
22210
+ rowMs = trackFinished(rowMs, progressRows(progress, input.agent), Date.now() - startedAt);
22211
+ if (current.current === input) setState({ status: "running", progress, rowMs });
22107
22212
  }).then((result) => {
22108
22213
  if (current.current !== input) return;
22109
22214
  void finishDebugRun({
22110
- ...extractionLogOutputs(result, lastProgress, input.credentials?.cmaToken ?? ""),
22215
+ ...extractionLogOutputs(result, lastProgress2, input.credentials?.cmaToken ?? ""),
22111
22216
  exitMethod: result.ok ? "saved" : "discarded"
22112
22217
  });
22113
22218
  setState({ status: "done", result });
@@ -22122,6 +22227,7 @@ var init_use_extraction = __esm({
22122
22227
  "packages/experience-design-system-cli/src/tui/import/steps/06-extraction/use-extraction.ts"() {
22123
22228
  "use strict";
22124
22229
  init_debug_store();
22230
+ init_logic4();
22125
22231
  init_logic9();
22126
22232
  init_run();
22127
22233
  }
@@ -22227,8 +22333,8 @@ var init_log = __esm({
22227
22333
  });
22228
22334
 
22229
22335
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
22230
- import { Box as Box16, Text as Text16 } from "ink";
22231
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
22336
+ import { Box as Box17, Text as Text17 } from "ink";
22337
+ import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
22232
22338
  function terminalPanelHeight(rows, reservedRows = 4) {
22233
22339
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
22234
22340
  }
@@ -22243,8 +22349,8 @@ function FixedPanel({
22243
22349
  clipOverflow = true,
22244
22350
  children
22245
22351
  }) {
22246
- return /* @__PURE__ */ jsx18(
22247
- Box16,
22352
+ return /* @__PURE__ */ jsx19(
22353
+ Box17,
22248
22354
  {
22249
22355
  flexDirection: "column",
22250
22356
  width,
@@ -22260,7 +22366,7 @@ function FixedPanel({
22260
22366
  );
22261
22367
  }
22262
22368
  function WindowedPanel({ width, height, title, focused, children }) {
22263
- return /* @__PURE__ */ jsxs16(
22369
+ return /* @__PURE__ */ jsxs17(
22264
22370
  FixedPanel,
22265
22371
  {
22266
22372
  width,
@@ -22269,7 +22375,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
22269
22375
  ...height === void 0 ? {} : { height },
22270
22376
  focused,
22271
22377
  children: [
22272
- title && /* @__PURE__ */ jsx18(WindowedPanelHeader, { title, width, focused }),
22378
+ title && /* @__PURE__ */ jsx19(WindowedPanelHeader, { title, width, focused }),
22273
22379
  children
22274
22380
  ]
22275
22381
  }
@@ -22280,9 +22386,9 @@ function WindowedPanelHeader({
22280
22386
  width,
22281
22387
  focused
22282
22388
  }) {
22283
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", children: [
22284
- /* @__PURE__ */ jsx18(Text16, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
22285
- /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
22389
+ return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", children: [
22390
+ /* @__PURE__ */ jsx19(Text17, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
22391
+ /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
22286
22392
  ] });
22287
22393
  }
22288
22394
  function formatWindowIndicator(direction, count) {
@@ -22291,10 +22397,10 @@ function formatWindowIndicator(direction, count) {
22291
22397
  }
22292
22398
  function WindowFooter({ above, below }) {
22293
22399
  const parts = [above > 0 ? `\u2191 ${above}` : "", below > 0 ? `\u2193 ${below}` : ""].filter(Boolean);
22294
- return /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
22400
+ return /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
22295
22401
  }
22296
22402
  function WindowIndicator({ direction, count }) {
22297
- return /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
22403
+ return /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
22298
22404
  }
22299
22405
  var MIN_TERMINAL_PANEL_HEIGHT;
22300
22406
  var init_windowed_panel = __esm({
@@ -22306,26 +22412,26 @@ var init_windowed_panel = __esm({
22306
22412
  });
22307
22413
 
22308
22414
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/tokens-column.tsx
22309
- import { Box as Box17, Text as Text17 } from "ink";
22415
+ import { Box as Box18, Text as Text18 } from "ink";
22310
22416
  import figures2 from "figures";
22311
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
22417
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
22312
22418
  function TokensColumn(props) {
22313
22419
  const { title, width, height, tokens, cursor, focused, visibleCount } = props;
22314
22420
  const nameWidth = Math.min(longestEntries(tokens).path + 2, Math.floor((width - 8) / 2));
22315
22421
  const window = computeColumnWindow(tokens.length, cursor, Math.max(1, visibleCount));
22316
- return /* @__PURE__ */ jsxs17(WindowedPanel, { width, height, title, focused, children: [
22317
- /* @__PURE__ */ jsx19(WindowIndicator, { direction: "up", count: window.above }),
22422
+ return /* @__PURE__ */ jsxs18(WindowedPanel, { width, height, title, focused, children: [
22423
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "up", count: window.above }),
22318
22424
  tokens.slice(window.start, window.end).map((token, offset) => {
22319
22425
  const isCursor = focused && window.start + offset === cursor;
22320
- return /* @__PURE__ */ jsxs17(Box17, { children: [
22321
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE.accent, bold: true, children: isCursor ? figures2.pointer : " " }),
22322
- /* @__PURE__ */ jsxs17(Text17, { wrap: "truncate-end", color: isCursor ? PALETTE.accent : void 0, bold: isCursor, children: [
22426
+ return /* @__PURE__ */ jsxs18(Box18, { children: [
22427
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE.accent, bold: true, children: isCursor ? figures2.pointer : " " }),
22428
+ /* @__PURE__ */ jsxs18(Text18, { wrap: "truncate-end", color: isCursor ? PALETTE.accent : void 0, bold: isCursor, children: [
22323
22429
  ` ${token.path.padEnd(nameWidth)}`,
22324
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: token.value })
22430
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE.muted, children: token.value })
22325
22431
  ] })
22326
22432
  ] }, token.path);
22327
22433
  }),
22328
- /* @__PURE__ */ jsx19(WindowIndicator, { direction: "down", count: window.below })
22434
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "down", count: window.below })
22329
22435
  ] });
22330
22436
  }
22331
22437
  var init_tokens_column = __esm({
@@ -22338,9 +22444,9 @@ var init_tokens_column = __esm({
22338
22444
  });
22339
22445
 
22340
22446
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
22341
- import { Box as Box18, Text as Text18 } from "ink";
22447
+ import { Box as Box19, Text as Text19 } from "ink";
22342
22448
  import figures3 from "figures";
22343
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
22449
+ import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
22344
22450
  function cycleLabel(cycle, index) {
22345
22451
  const parts = [];
22346
22452
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -22351,17 +22457,17 @@ function cycleLabel(cycle, index) {
22351
22457
  return `Cycle ${index + 1}: ${parts.join(" \u2192 ")}`;
22352
22458
  }
22353
22459
  function CyclesPanel({ cycles, cursor }) {
22354
- return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
22355
- /* @__PURE__ */ jsx20(Text18, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
22356
- /* @__PURE__ */ jsx20(Text18, { children: " " }),
22460
+ return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
22461
+ /* @__PURE__ */ jsx21(Text19, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
22462
+ /* @__PURE__ */ jsx21(Text19, { children: " " }),
22357
22463
  cycles.map((cycle, i) => {
22358
22464
  const isCursor = i === cursor;
22359
- return /* @__PURE__ */ jsxs18(Text18, { children: [
22360
- isCursor ? /* @__PURE__ */ jsx20(Text18, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx20(Text18, { children: " " }),
22361
- /* @__PURE__ */ jsx20(Text18, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
22465
+ return /* @__PURE__ */ jsxs19(Text19, { children: [
22466
+ isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
22467
+ /* @__PURE__ */ jsx21(Text19, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
22362
22468
  ] }, i);
22363
22469
  }),
22364
- /* @__PURE__ */ jsx20(Text18, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
22470
+ /* @__PURE__ */ jsx21(Text19, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
22365
22471
  ] });
22366
22472
  }
22367
22473
  var init_cycles_panel = __esm({
@@ -22372,14 +22478,14 @@ var init_cycles_panel = __esm({
22372
22478
  });
22373
22479
 
22374
22480
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
22375
- import { Box as Box19, Text as Text19 } from "ink";
22376
- import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
22481
+ import { Box as Box20, Text as Text20 } from "ink";
22482
+ import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
22377
22483
  function RejectPrompt({ pending }) {
22378
- return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
22379
- /* @__PURE__ */ jsx21(Text19, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
22380
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx21(Text19, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
22381
- pending.descendants.length > 0 && /* @__PURE__ */ jsx21(Text19, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
22382
- /* @__PURE__ */ jsx21(Text19, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
22484
+ return /* @__PURE__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
22485
+ /* @__PURE__ */ jsx22(Text20, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
22486
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx22(Text20, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
22487
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx22(Text20, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
22488
+ /* @__PURE__ */ jsx22(Text20, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
22383
22489
  ] });
22384
22490
  }
22385
22491
  var init_reject_prompt = __esm({
@@ -22390,9 +22496,9 @@ var init_reject_prompt = __esm({
22390
22496
  });
22391
22497
 
22392
22498
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CompactControlBar.tsx
22393
- import { jsx as jsx22 } from "react/jsx-runtime";
22499
+ import { jsx as jsx23 } from "react/jsx-runtime";
22394
22500
  function CompactControlBar({ hasGroupRoots, searchActive }) {
22395
- return /* @__PURE__ */ jsx22(
22501
+ return /* @__PURE__ */ jsx23(
22396
22502
  ControlHints,
22397
22503
  {
22398
22504
  hints: [
@@ -22415,8 +22521,8 @@ var init_CompactControlBar = __esm({
22415
22521
  });
22416
22522
 
22417
22523
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
22418
- import { Box as Box20, Text as Text20 } from "ink";
22419
- import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
22524
+ import { Box as Box21, Text as Text21 } from "ink";
22525
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
22420
22526
  function CounterStrip(props) {
22421
22527
  const { counters, totalWidth } = props;
22422
22528
  const condensed = totalWidth < 60;
@@ -22425,31 +22531,31 @@ function CounterStrip(props) {
22425
22531
  const labelRej = condensed ? "Rej" : "Rejected";
22426
22532
  const labelUnd = condensed ? "Und" : "Undecided";
22427
22533
  const sep = condensed ? " | " : " ";
22428
- return /* @__PURE__ */ jsx23(Box20, { children: /* @__PURE__ */ jsxs20(Text20, { children: [
22429
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
22534
+ return /* @__PURE__ */ jsx24(Box21, { children: /* @__PURE__ */ jsxs21(Text21, { children: [
22535
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
22430
22536
  labelGrp,
22431
22537
  " "
22432
22538
  ] }),
22433
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.groups }),
22434
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
22435
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
22539
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.groups }),
22540
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
22541
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
22436
22542
  labelAcc,
22437
22543
  " "
22438
22544
  ] }),
22439
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: `${counters.accepted}/${counters.total}` }),
22440
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
22441
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
22545
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: `${counters.accepted}/${counters.total}` }),
22546
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
22547
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
22442
22548
  labelRej,
22443
22549
  " "
22444
22550
  ] }),
22445
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.rejected }),
22446
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
22447
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
22551
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.rejected }),
22552
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
22553
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
22448
22554
  labelUnd,
22449
22555
  " "
22450
22556
  ] }),
22451
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.undecided }),
22452
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep })
22557
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.undecided }),
22558
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep })
22453
22559
  ] }) });
22454
22560
  }
22455
22561
  var init_CounterStrip = __esm({
@@ -22461,8 +22567,8 @@ var init_CounterStrip = __esm({
22461
22567
 
22462
22568
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
22463
22569
  import figures4 from "figures";
22464
- import { Box as Box21, Text as Text21 } from "ink";
22465
- import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
22570
+ import { Box as Box22, Text as Text22 } from "ink";
22571
+ import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
22466
22572
  function windowStart(rowCount, highlightIndex, maxRows) {
22467
22573
  if (rowCount <= maxRows) return 0;
22468
22574
  const maxStart = rowCount - maxRows;
@@ -22472,9 +22578,9 @@ function windowStart(rowCount, highlightIndex, maxRows) {
22472
22578
  return start;
22473
22579
  }
22474
22580
  function defaultRenderRow(row, index, isCursor) {
22475
- return /* @__PURE__ */ jsxs21(Text21, { children: [
22476
- isCursor ? /* @__PURE__ */ jsx24(Text21, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx24(Text21, { children: " " }),
22477
- /* @__PURE__ */ jsx24(Text21, { inverse: isCursor, children: " " + row.label })
22581
+ return /* @__PURE__ */ jsxs22(Text22, { children: [
22582
+ isCursor ? /* @__PURE__ */ jsx25(Text22, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx25(Text22, { children: " " }),
22583
+ /* @__PURE__ */ jsx25(Text22, { inverse: isCursor, children: " " + row.label })
22478
22584
  ] }, index);
22479
22585
  }
22480
22586
  function GotoBanner({
@@ -22493,8 +22599,8 @@ function GotoBanner({
22493
22599
  const visible = rows.slice(start, end);
22494
22600
  const moreAbove = start;
22495
22601
  const moreBelow = rows.length - end;
22496
- return /* @__PURE__ */ jsxs21(
22497
- Box21,
22602
+ return /* @__PURE__ */ jsxs22(
22603
+ Box22,
22498
22604
  {
22499
22605
  flexDirection: "column",
22500
22606
  borderStyle: "single",
@@ -22505,14 +22611,14 @@ function GotoBanner({
22505
22611
  width,
22506
22612
  flexShrink: 0,
22507
22613
  children: [
22508
- /* @__PURE__ */ jsx24(Text21, { bold: true, children: title }),
22509
- moreAbove > 0 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
22614
+ /* @__PURE__ */ jsx25(Text22, { bold: true, children: title }),
22615
+ moreAbove > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
22510
22616
  visible.map((row, vi) => {
22511
22617
  const i = start + vi;
22512
22618
  return renderRow(row, i, i === highlightIndex);
22513
22619
  }),
22514
- moreBelow > 0 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
22515
- footerHint !== void 0 && /* @__PURE__ */ jsx24(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: footerHint }) })
22620
+ moreBelow > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
22621
+ footerHint !== void 0 && /* @__PURE__ */ jsx25(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: footerHint }) })
22516
22622
  ]
22517
22623
  }
22518
22624
  );
@@ -22875,8 +22981,8 @@ var init_composite_closure = __esm({
22875
22981
  });
22876
22982
 
22877
22983
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
22878
- import { Text as Text22 } from "ink";
22879
- import { jsx as jsx25 } from "react/jsx-runtime";
22984
+ import { Text as Text23 } from "ink";
22985
+ import { jsx as jsx26 } from "react/jsx-runtime";
22880
22986
  function previewBadge(annotation) {
22881
22987
  switch (annotation) {
22882
22988
  case "new":
@@ -22895,7 +23001,7 @@ function PreviewBadge({
22895
23001
  badge,
22896
23002
  highlighted = false
22897
23003
  }) {
22898
- return badge ? /* @__PURE__ */ jsx25(Text22, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx25(Text22, { children: " " });
23004
+ return badge ? /* @__PURE__ */ jsx26(Text23, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx26(Text23, { children: " " });
22899
23005
  }
22900
23006
  var init_badge = __esm({
22901
23007
  "packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx"() {
@@ -22906,8 +23012,8 @@ var init_badge = __esm({
22906
23012
 
22907
23013
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
22908
23014
  import figures5 from "figures";
22909
- import { Box as Box22, Text as Text23 } from "ink";
22910
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
23015
+ import { Box as Box23, Text as Text24 } from "ink";
23016
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
22911
23017
  function hasDirectChild(node) {
22912
23018
  return node.slots.some((slot) => (slot.allowedComponents ?? []).some((target) => target !== node.name));
22913
23019
  }
@@ -23326,8 +23432,8 @@ function GroupedSidebar(props) {
23326
23432
  const start = windowed ? Math.max(0, scrollOffset ?? 0) : 0;
23327
23433
  const end = windowed ? start + (visibleCount ?? allRows.length) + 1 : allRows.length;
23328
23434
  const rows = windowed ? allRows.slice(start, end) : allRows;
23329
- return /* @__PURE__ */ jsxs22(WindowedPanel, { width, height: props.height, title, focused, children: [
23330
- allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs22(Text23, { color: PALETTE.warning, children: [
23435
+ return /* @__PURE__ */ jsxs23(WindowedPanel, { width, height: props.height, title, focused, children: [
23436
+ allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs23(Text24, { color: PALETTE.warning, children: [
23331
23437
  " ",
23332
23438
  emptyMessage
23333
23439
  ] }),
@@ -23357,13 +23463,13 @@ function GroupedSidebar(props) {
23357
23463
  isOwn: rs?.isOwn ?? false,
23358
23464
  isCursor
23359
23465
  });
23360
- return /* @__PURE__ */ jsxs22(Box22, { children: [
23361
- isCursor ? /* @__PURE__ */ jsx26(Text23, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx26(Text23, { children: " " }),
23362
- /* @__PURE__ */ jsx26(PreviewBadge, { badge, highlighted: isSelected }),
23363
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx26(Text23, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx26(Text23, { children: " " })),
23364
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx26(Text23, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx26(Text23, { children: " " })),
23365
- /* @__PURE__ */ jsxs22(
23366
- Text23,
23466
+ return /* @__PURE__ */ jsxs23(Box23, { children: [
23467
+ isCursor ? /* @__PURE__ */ jsx27(Text24, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx27(Text24, { children: " " }),
23468
+ /* @__PURE__ */ jsx27(PreviewBadge, { badge, highlighted: isSelected }),
23469
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx27(Text24, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx27(Text24, { children: " " })),
23470
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx27(Text24, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx27(Text24, { children: " " })),
23471
+ /* @__PURE__ */ jsxs23(
23472
+ Text24,
23367
23473
  {
23368
23474
  color: isSelected ? PALETTE.accent : labelStyle.dim ? PALETTE.muted : labelStyle.color,
23369
23475
  bold: isSelected || labelStyle.bold,
@@ -23376,10 +23482,10 @@ function GroupedSidebar(props) {
23376
23482
  ]
23377
23483
  }
23378
23484
  ),
23379
- inheritanceStyle.glyph && /* @__PURE__ */ jsx26(Text23, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
23485
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx27(Text24, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
23380
23486
  ] }, row.key);
23381
23487
  }),
23382
- windowed && /* @__PURE__ */ jsx26(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
23488
+ windowed && /* @__PURE__ */ jsx27(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
23383
23489
  ] });
23384
23490
  }
23385
23491
  var GLYPH_EXPAND_COLLAPSED, GLYPH_EXPAND_EXPANDED, GLYPH_TREE_MID, GLYPH_TREE_LAST, GLYPH_WARN, GLYPH_ERROR;
@@ -23508,8 +23614,8 @@ var init_use_terminal_size = __esm({
23508
23614
 
23509
23615
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
23510
23616
  import React11 from "react";
23511
- import { Box as Box23, Text as Text24 } from "ink";
23512
- import { Fragment as Fragment3, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
23617
+ import { Box as Box24, Text as Text25 } from "ink";
23618
+ import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
23513
23619
  function HelpOverlay(props) {
23514
23620
  const { onClose } = props;
23515
23621
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -23520,8 +23626,8 @@ function HelpOverlay(props) {
23520
23626
  if (input === "h" || key.escape) onClose();
23521
23627
  }, props.handleInput !== false);
23522
23628
  if (props.sections) {
23523
- return /* @__PURE__ */ jsxs23(
23524
- Box23,
23629
+ return /* @__PURE__ */ jsxs24(
23630
+ Box24,
23525
23631
  {
23526
23632
  flexDirection: "column",
23527
23633
  borderStyle: "round",
@@ -23530,19 +23636,19 @@ function HelpOverlay(props) {
23530
23636
  height: panelHeight,
23531
23637
  overflowY: "hidden",
23532
23638
  children: [
23533
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
23534
- props.sections.map((section) => /* @__PURE__ */ jsxs23(React11.Fragment, { children: [
23535
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
23536
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: section.title }),
23537
- section.entries.map((entry) => /* @__PURE__ */ jsx27(Text24, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
23639
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
23640
+ props.sections.map((section) => /* @__PURE__ */ jsxs24(React11.Fragment, { children: [
23641
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
23642
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: section.title }),
23643
+ section.entries.map((entry) => /* @__PURE__ */ jsx28(Text25, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
23538
23644
  ] }, section.title))
23539
23645
  ]
23540
23646
  }
23541
23647
  );
23542
23648
  }
23543
23649
  const mode = props.mode;
23544
- return /* @__PURE__ */ jsxs23(
23545
- Box23,
23650
+ return /* @__PURE__ */ jsxs24(
23651
+ Box24,
23546
23652
  {
23547
23653
  flexDirection: "column",
23548
23654
  borderStyle: "round",
@@ -23551,31 +23657,31 @@ function HelpOverlay(props) {
23551
23657
  height: panelHeight,
23552
23658
  overflowY: "hidden",
23553
23659
  children: [
23554
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
23555
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
23556
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "Navigation" }),
23557
- /* @__PURE__ */ jsx27(Text24, { children: " \u2191 / k / PgUp Scroll up" }),
23558
- /* @__PURE__ */ jsx27(Text24, { children: " \u2193 / j / PgDn Scroll down" }),
23559
- /* @__PURE__ */ jsx27(Text24, { children: " g / Home Jump to top" }),
23560
- /* @__PURE__ */ jsx27(Text24, { children: " G / End Jump to bottom" }),
23561
- mode === "review" && /* @__PURE__ */ jsxs23(Fragment3, { children: [
23562
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
23563
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "[Review mode only]" }),
23564
- /* @__PURE__ */ jsx27(Text24, { children: " Tab Toggle sidebar/detail" }),
23565
- /* @__PURE__ */ jsx27(Text24, { children: " a Accept component" }),
23566
- /* @__PURE__ */ jsx27(Text24, { children: " r Reject component" }),
23567
- /* @__PURE__ */ jsx27(Text24, { children: " e Edit proposal" }),
23568
- /* @__PURE__ */ jsx27(Text24, { children: " s Toggle source code" }),
23569
- /* @__PURE__ */ jsx27(Text24, { children: " A Approve all" }),
23570
- /* @__PURE__ */ jsx27(Text24, { children: " F Open finalize dialog" }),
23571
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+S Save draft" }),
23572
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+Z Undo" }),
23573
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+Y Redo" }),
23574
- /* @__PURE__ */ jsx27(Text24, { children: " Esc Exit edit / close" })
23660
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
23661
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
23662
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "Navigation" }),
23663
+ /* @__PURE__ */ jsx28(Text25, { children: " \u2191 / k / PgUp Scroll up" }),
23664
+ /* @__PURE__ */ jsx28(Text25, { children: " \u2193 / j / PgDn Scroll down" }),
23665
+ /* @__PURE__ */ jsx28(Text25, { children: " g / Home Jump to top" }),
23666
+ /* @__PURE__ */ jsx28(Text25, { children: " G / End Jump to bottom" }),
23667
+ mode === "review" && /* @__PURE__ */ jsxs24(Fragment4, { children: [
23668
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
23669
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "[Review mode only]" }),
23670
+ /* @__PURE__ */ jsx28(Text25, { children: " Tab Toggle sidebar/detail" }),
23671
+ /* @__PURE__ */ jsx28(Text25, { children: " a Accept component" }),
23672
+ /* @__PURE__ */ jsx28(Text25, { children: " r Reject component" }),
23673
+ /* @__PURE__ */ jsx28(Text25, { children: " e Edit proposal" }),
23674
+ /* @__PURE__ */ jsx28(Text25, { children: " s Toggle source code" }),
23675
+ /* @__PURE__ */ jsx28(Text25, { children: " A Approve all" }),
23676
+ /* @__PURE__ */ jsx28(Text25, { children: " F Open finalize dialog" }),
23677
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+S Save draft" }),
23678
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+Z Undo" }),
23679
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+Y Redo" }),
23680
+ /* @__PURE__ */ jsx28(Text25, { children: " Esc Exit edit / close" })
23575
23681
  ] }),
23576
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
23577
- /* @__PURE__ */ jsx27(Text24, { children: " h Close help" }),
23578
- /* @__PURE__ */ jsx27(Text24, { children: " q Quit" })
23682
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
23683
+ /* @__PURE__ */ jsx28(Text25, { children: " h Close help" }),
23684
+ /* @__PURE__ */ jsx28(Text25, { children: " q Quit" })
23579
23685
  ]
23580
23686
  }
23581
23687
  );
@@ -23655,8 +23761,8 @@ var init_sidebar_input = __esm({
23655
23761
  });
23656
23762
 
23657
23763
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
23658
- import { Box as Box24, Text as Text25 } from "ink";
23659
- import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
23764
+ import { Box as Box25, Text as Text26 } from "ink";
23765
+ import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
23660
23766
  function SearchMatchSummary({
23661
23767
  open,
23662
23768
  query,
@@ -23667,17 +23773,17 @@ function SearchMatchSummary({
23667
23773
  marginTop
23668
23774
  }) {
23669
23775
  if (hidden) return null;
23670
- return /* @__PURE__ */ jsxs24(Fragment4, { children: [
23671
- open && /* @__PURE__ */ jsxs24(Box24, { marginTop, flexDirection: "column", children: [
23672
- /* @__PURE__ */ jsxs24(Text25, { children: [
23776
+ return /* @__PURE__ */ jsxs25(Fragment5, { children: [
23777
+ open && /* @__PURE__ */ jsxs25(Box25, { marginTop, flexDirection: "column", children: [
23778
+ /* @__PURE__ */ jsxs25(Text26, { children: [
23673
23779
  `/${query}`,
23674
- /* @__PURE__ */ jsx28(Text25, { color: PALETTE.accent, children: "\u258E" }),
23675
- query && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
23676
- /* @__PURE__ */ jsx28(Text25, { children: " \xB7 [Esc] leave" })
23780
+ /* @__PURE__ */ jsx29(Text26, { color: PALETTE.accent, children: "\u258E" }),
23781
+ query && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
23782
+ /* @__PURE__ */ jsx29(Text26, { children: " \xB7 [Esc] leave" })
23677
23783
  ] }),
23678
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
23784
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
23679
23785
  ] }),
23680
- !open && query && /* @__PURE__ */ jsx28(Box24, { marginTop, children: /* @__PURE__ */ jsx28(Text25, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
23786
+ !open && query && /* @__PURE__ */ jsx29(Box25, { marginTop, children: /* @__PURE__ */ jsx29(Text26, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
23681
23787
  ] });
23682
23788
  }
23683
23789
  var init_SearchMatchSummary = __esm({
@@ -24629,7 +24735,7 @@ function useScopeGate({ components, tokenCount, tokensWidth, onConfirm, onQuit }
24629
24735
  panelOpen: false,
24630
24736
  entryCount: 0
24631
24737
  });
24632
- const panelLayout = useMemo3(() => computePanelLayout(visibleCount), [visibleCount]);
24738
+ const panelLayout2 = useMemo3(() => computePanelLayout(visibleCount), [visibleCount]);
24633
24739
  useEffect13(() => {
24634
24740
  setNav((prev) => {
24635
24741
  const maxIdx = Math.max(0, visibleRows.length - 1);
@@ -24913,7 +25019,7 @@ function useScopeGate({ components, tokenCount, tokensWidth, onConfirm, onQuit }
24913
25019
  // layout
24914
25020
  totalWidth,
24915
25021
  columnPlan,
24916
- panelLayout,
25022
+ panelLayout: panelLayout2,
24917
25023
  visibleCount,
24918
25024
  panelMaxRows,
24919
25025
  // sidebar
@@ -24976,8 +25082,8 @@ var init_use_scope_gate = __esm({
24976
25082
 
24977
25083
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
24978
25084
  import { useEffect as useEffect14, useMemo as useMemo4 } from "react";
24979
- import { Box as Box25, Text as Text26 } from "ink";
24980
- import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
25085
+ import { Box as Box26, Text as Text27 } from "ink";
25086
+ import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
24981
25087
  function ScopeGateScreen({
24982
25088
  components,
24983
25089
  tokensPath,
@@ -25014,24 +25120,24 @@ function ScopeGateScreen({
25014
25120
  onQuit();
25015
25121
  }
25016
25122
  });
25017
- const { search, graph, columnPlan, panelLayout, counters } = gate;
25123
+ const { search, graph, columnPlan, panelLayout: panelLayout2, counters } = gate;
25018
25124
  if (gate.showHelp) {
25019
- return /* @__PURE__ */ jsx29(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
25020
- }
25021
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
25022
- /* @__PURE__ */ jsx29(StepHeader, { step: "scope-gate" }),
25023
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", paddingX: 2, children: [
25024
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", flexWrap: "wrap", children: [
25025
- /* @__PURE__ */ jsx29(CounterStrip, { counters, totalWidth: gate.totalWidth }),
25026
- gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs25(Text26, { color: PALETTE.muted, children: [
25125
+ return /* @__PURE__ */ jsx30(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
25126
+ }
25127
+ return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
25128
+ /* @__PURE__ */ jsx30(StepHeader, { step: "scope-gate" }),
25129
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", paddingX: 2, children: [
25130
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", flexWrap: "wrap", children: [
25131
+ /* @__PURE__ */ jsx30(CounterStrip, { counters, totalWidth: gate.totalWidth }),
25132
+ gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs26(Text27, { color: PALETTE.muted, children: [
25027
25133
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
25028
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
25134
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx30(Text27, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
25029
25135
  ] })
25030
25136
  ] }),
25031
- tokens.length > 0 && columnPlan.layout === "single" && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: `${tokens.length} design token${tokens.length === 1 ? "" : "s"} will be imported. Widen the terminal to list them.` }),
25032
- graph.cycles.length > 0 && /* @__PURE__ */ jsx29(Box25, { marginTop: 1, children: /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: "If you must have components with cycles, select them together into the generate step and then use the editor to fix them." }) }),
25033
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", alignItems: "stretch", children: [
25034
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx29(
25137
+ tokens.length > 0 && columnPlan.layout === "single" && /* @__PURE__ */ jsx30(Text27, { color: PALETTE.muted, children: `${tokens.length} design token${tokens.length === 1 ? "" : "s"} will be imported. Widen the terminal to list them.` }),
25138
+ graph.cycles.length > 0 && /* @__PURE__ */ jsx30(Box26, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text27, { color: PALETTE.muted, children: "If you must have components with cycles, select them together into the generate step and then use the editor to fix them." }) }),
25139
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", alignItems: "stretch", children: [
25140
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx30(
25035
25141
  GotoBanner,
25036
25142
  {
25037
25143
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -25041,7 +25147,7 @@ function ScopeGateScreen({
25041
25147
  width: columnPlan.main,
25042
25148
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
25043
25149
  }
25044
- ) : /* @__PURE__ */ jsx29(
25150
+ ) : /* @__PURE__ */ jsx30(
25045
25151
  GroupedSidebar,
25046
25152
  {
25047
25153
  items: gate.groupedItems,
@@ -25053,7 +25159,7 @@ function ScopeGateScreen({
25053
25159
  expandedGroups: gate.expandedGroups,
25054
25160
  onToggleExpanded: gate.toggleExpanded,
25055
25161
  width: columnPlan.main,
25056
- height: panelLayout.height,
25162
+ height: panelLayout2.height,
25057
25163
  title: "Components",
25058
25164
  wrapLabels: true,
25059
25165
  focused: gate.focusedColumn === "main",
@@ -25069,25 +25175,25 @@ function ScopeGateScreen({
25069
25175
  graph: graph.nodes
25070
25176
  }
25071
25177
  ),
25072
- columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs25(Fragment5, { children: [
25073
- /* @__PURE__ */ jsx29(Box25, { width: 2, flexShrink: 0 }),
25074
- /* @__PURE__ */ jsx29(
25178
+ columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs26(Fragment6, { children: [
25179
+ /* @__PURE__ */ jsx30(Box26, { width: 2, flexShrink: 0 }),
25180
+ /* @__PURE__ */ jsx30(
25075
25181
  TokensColumn,
25076
25182
  {
25077
25183
  width: columnPlan.tokens,
25078
25184
  tokens,
25079
25185
  cursor: gate.safeTokensCursor,
25080
25186
  focused: gate.focusedColumn === "tokens",
25081
- height: panelLayout.height,
25187
+ height: panelLayout2.height,
25082
25188
  title: `Design tokens (${tokens.length}) \xB7 read only`,
25083
- visibleCount: panelLayout.sideVisibleCount
25189
+ visibleCount: panelLayout2.sideVisibleCount
25084
25190
  }
25085
25191
  )
25086
25192
  ] })
25087
25193
  ] }),
25088
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx29(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
25089
- gate.pendingRejectCascade && /* @__PURE__ */ jsx29(RejectPrompt, { pending: gate.pendingRejectCascade }),
25090
- /* @__PURE__ */ jsx29(
25194
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx30(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
25195
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx30(RejectPrompt, { pending: gate.pendingRejectCascade }),
25196
+ /* @__PURE__ */ jsx30(
25091
25197
  SearchMatchSummary,
25092
25198
  {
25093
25199
  open: search.searchOpen,
@@ -25098,7 +25204,7 @@ function ScopeGateScreen({
25098
25204
  marginTop: 1
25099
25205
  }
25100
25206
  ),
25101
- /* @__PURE__ */ jsx29(
25207
+ /* @__PURE__ */ jsx30(
25102
25208
  CompactControlBar,
25103
25209
  {
25104
25210
  hasGroupRoots: gate.hasGroupRoots,
@@ -25280,8 +25386,18 @@ function generationLogInputs(input) {
25280
25386
  has_tokens: input.hasTokens
25281
25387
  };
25282
25388
  }
25389
+ function lastProgress(progress) {
25390
+ const { activity, ...rest } = progress;
25391
+ const failed = activity.filter((item) => item.state === "failed");
25392
+ return {
25393
+ final_progress: rest,
25394
+ ...failed.length > 0 ? {
25395
+ failed_components: failed.slice(0, MAX_LOGGED_FAILURES).map((item) => ({ name: item.name, error: truncate(item.error ?? "", MAX_LOGGED_ERROR) }))
25396
+ } : {}
25397
+ };
25398
+ }
25283
25399
  function generationLogOutputs(result, progress) {
25284
- const last = progress ? { final_progress: progress } : {};
25400
+ const last = progress ? lastProgress(progress) : {};
25285
25401
  if (!result.ok) {
25286
25402
  return { outputs: { result: "failed", failed_step: result.step, error: result.message, ...last }, status: "error" };
25287
25403
  }
@@ -25300,7 +25416,21 @@ function generationLogOutputs(result, progress) {
25300
25416
  };
25301
25417
  }
25302
25418
  function initialProgress2() {
25303
- return { components: null, mapTokens: "idle", mapTokensEligible: null };
25419
+ return { components: null, activity: [], mapTokens: "idle", mapTokensEligible: null };
25420
+ }
25421
+ function applyActivityEvent(event, previous, now) {
25422
+ if (event.kind !== "component:started" && event.kind !== "component:completed" && event.kind !== "component:cached" && event.kind !== "component:failed") {
25423
+ return [...previous];
25424
+ }
25425
+ const index = previous.findIndex((item2) => item2.name === event.name);
25426
+ const startedAt = previous[index]?.startedAt ?? now;
25427
+ const item = event.kind === "component:started" ? {
25428
+ name: event.name,
25429
+ state: "running",
25430
+ startedAt,
25431
+ ...event.attempt > 1 ? { detail: `attempt ${event.attempt}` } : {}
25432
+ } : event.kind === "component:cached" ? { name: event.name, state: "done", detail: "cached", startedAt } : event.kind === "component:failed" ? { name: event.name, state: "failed", error: event.error, ms: now - startedAt, startedAt } : { name: event.name, state: "done", ms: now - startedAt, startedAt };
25433
+ return index >= 0 ? previous.map((existing, i) => i === index ? item : existing) : [...previous, item];
25304
25434
  }
25305
25435
  function shouldRunMapTokens(counts) {
25306
25436
  return counts.mappablePropCount > 0 && counts.rawTokenCount > 0;
@@ -25315,52 +25445,70 @@ function describeGeneration(input) {
25315
25445
  return `${formatAcceptanceSummary({ accepted: input.acceptedCount, autoRejected: 0 })}
25316
25446
  ${agent} is reading each selected component and writing a Contentful component definition for it.${input.hasTokens ? "\nUsing your design tokens for prop resolution." : ""}`;
25317
25447
  }
25318
- function progressRows2(progress, agent) {
25448
+ function componentsRow(components, name) {
25449
+ if (!components) return { text: `Starting up ${name}...`, complete: false };
25450
+ const { done, total, current, failed } = components;
25451
+ if (total > 0 && done >= total) {
25452
+ return failed > 0 ? {
25453
+ text: `Generated ${total - failed} of ${total} components, ${failed} failed`,
25454
+ complete: false,
25455
+ state: "failed"
25456
+ } : { text: `Generated ${total} component${total === 1 ? "" : "s"}`, complete: true };
25457
+ }
25458
+ return {
25459
+ text: failed > 0 ? `${current} (${failed} failed so far)` : current,
25460
+ complete: false,
25461
+ progress: { done, total },
25462
+ ...failed > 0 ? { state: "warning" } : {}
25463
+ };
25464
+ }
25465
+ function progressRows2(progress, agent, rowMs = []) {
25319
25466
  const name = capitalize(agent);
25320
25467
  const { components, mapTokens } = progress;
25321
- const rows = [
25322
- {
25323
- text: components ? components.current : `Starting up ${name}...`,
25324
- complete: false,
25325
- ...components ? { progress: { done: components.done, total: components.total } } : {}
25326
- }
25327
- ];
25468
+ const rows = [componentsRow(components, name)];
25328
25469
  if (mapTokens !== "idle") {
25329
25470
  rows.push({
25330
25471
  text: mapTokens === "running" ? `Mapping token restrictions via ${name}...` : "Token restrictions ready",
25331
25472
  complete: mapTokens === "complete"
25332
25473
  });
25333
25474
  }
25334
- return rows;
25475
+ return withTimes(rows, rowMs);
25335
25476
  }
25336
- var capitalize;
25477
+ var MAX_LOGGED_FAILURES, MAX_LOGGED_ERROR, capitalize;
25337
25478
  var init_logic11 = __esm({
25338
25479
  "packages/experience-design-system-cli/src/tui/import/steps/08-generation/logic.ts"() {
25339
25480
  "use strict";
25481
+ init_activity();
25482
+ init_logic4();
25483
+ MAX_LOGGED_FAILURES = 10;
25484
+ MAX_LOGGED_ERROR = 300;
25340
25485
  capitalize = (name) => name.charAt(0).toUpperCase() + name.slice(1);
25341
25486
  }
25342
25487
  });
25343
25488
 
25344
25489
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
25345
- import { jsx as jsx30 } from "react/jsx-runtime";
25490
+ import { jsx as jsx31 } from "react/jsx-runtime";
25346
25491
  function GenerationScreen({
25347
25492
  progress,
25348
25493
  agent,
25349
25494
  acceptedCount,
25350
- hasTokens
25495
+ hasTokens,
25496
+ rowMs
25351
25497
  }) {
25352
- return /* @__PURE__ */ jsx30(
25498
+ return /* @__PURE__ */ jsx31(
25353
25499
  RunningStep,
25354
25500
  {
25355
25501
  step: "generation",
25356
25502
  description: describeGeneration({ acceptedCount, agent, hasTokens }),
25357
- lines: progressRows2(progress, agent)
25503
+ lines: progressRows2(progress, agent, rowMs),
25504
+ aside: progress.activity.length > 0 ? /* @__PURE__ */ jsx31(ActivityPanel, { title: "Components", items: progress.activity }) : void 0
25358
25505
  }
25359
25506
  );
25360
25507
  }
25361
25508
  var init_screen9 = __esm({
25362
25509
  "packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx"() {
25363
25510
  "use strict";
25511
+ init_activity_panel();
25364
25512
  init_shared2();
25365
25513
  init_logic11();
25366
25514
  }
@@ -25418,7 +25566,7 @@ var init_save_decisions = __esm({
25418
25566
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/run.ts
25419
25567
  import { resolve as resolve25 } from "node:path";
25420
25568
  async function runGeneration(input, onProgress, deps = realDeps4) {
25421
- let progress = { components: null, mapTokens: "idle", mapTokensEligible: null };
25569
+ let progress = { components: null, activity: [], mapTokens: "idle", mapTokensEligible: null };
25422
25570
  const update = (change) => {
25423
25571
  progress = { ...progress, ...change };
25424
25572
  onProgress(progress);
@@ -25446,7 +25594,10 @@ async function runGeneration(input, onProgress, deps = realDeps4) {
25446
25594
  noCache: input.noCache,
25447
25595
  existingEntitiesPath: input.existingEntitiesPath,
25448
25596
  precomputedCachedNames: new Set(handedOverNames),
25449
- onProgress: (event) => update({ components: applyProgressEvent2(event, progress.components, accepted.length) })
25597
+ onProgress: (event) => update({
25598
+ components: applyProgressEvent2(event, progress.components, accepted.length),
25599
+ activity: applyActivityEvent(event, progress.activity, Date.now())
25600
+ })
25450
25601
  });
25451
25602
  } catch (error) {
25452
25603
  return fail2("generate components", errorMessage3(error));
@@ -25517,11 +25668,17 @@ function appendGeneratePromptOverride(input) {
25517
25668
  return [...input.promptOverrides, `generate=${input.generatePromptPath}`];
25518
25669
  }
25519
25670
  function applyProgressEvent2(event, previous, total) {
25671
+ const failed = previous?.failed ?? 0;
25520
25672
  if (event.kind === "component:started") {
25521
- return { done: previous?.done ?? 0, total: event.total || total, current: event.name };
25673
+ return { done: previous?.done ?? 0, total: event.total || total, current: event.name, failed };
25522
25674
  }
25523
25675
  if (event.kind === "component:completed" || event.kind === "component:failed" || event.kind === "component:cached") {
25524
- return { done: (previous?.done ?? 0) + 1, total: event.total || total, current: event.name };
25676
+ return {
25677
+ done: (previous?.done ?? 0) + 1,
25678
+ total: event.total || total,
25679
+ current: event.name,
25680
+ failed: failed + (event.kind === "component:failed" ? 1 : 0)
25681
+ };
25525
25682
  }
25526
25683
  return previous;
25527
25684
  }
@@ -25532,6 +25689,7 @@ var init_run2 = __esm({
25532
25689
  init_src3();
25533
25690
  init_find_skill_path();
25534
25691
  init_logic9();
25692
+ init_logic11();
25535
25693
  init_map_tokens();
25536
25694
  init_save_decisions();
25537
25695
  COMPONENTS_SKILL_PATH = findSkillPath("generate-components.md");
@@ -25559,8 +25717,10 @@ function useGeneration(input) {
25559
25717
  setState(void 0);
25560
25718
  return;
25561
25719
  }
25562
- setState({ status: "running", progress: initialProgress2() });
25563
- let lastProgress;
25720
+ setState({ status: "running", progress: initialProgress2(), rowMs: [] });
25721
+ let lastProgress2;
25722
+ const startedAt = Date.now();
25723
+ let rowMs = [];
25564
25724
  startDebugRun({
25565
25725
  flow: "import/generation",
25566
25726
  step: "08-generation",
@@ -25568,12 +25728,13 @@ function useGeneration(input) {
25568
25728
  inputs: generationLogInputs(input)
25569
25729
  });
25570
25730
  void runGeneration(input, (progress) => {
25571
- lastProgress = progress;
25572
- if (current.current === input) setState({ status: "running", progress });
25731
+ lastProgress2 = progress;
25732
+ rowMs = trackFinished(rowMs, progressRows2(progress, input.agent), Date.now() - startedAt);
25733
+ if (current.current === input) setState({ status: "running", progress, rowMs });
25573
25734
  }).then((result) => {
25574
25735
  if (current.current !== input) return;
25575
25736
  void finishDebugRun({
25576
- ...generationLogOutputs(result, lastProgress),
25737
+ ...generationLogOutputs(result, lastProgress2),
25577
25738
  exitMethod: result.ok ? "saved" : "discarded"
25578
25739
  });
25579
25740
  setState({ status: "done", result });
@@ -25588,6 +25749,7 @@ var init_use_generation = __esm({
25588
25749
  "packages/experience-design-system-cli/src/tui/import/steps/08-generation/use-generation.ts"() {
25589
25750
  "use strict";
25590
25751
  init_debug_store();
25752
+ init_logic4();
25591
25753
  init_logic11();
25592
25754
  init_run2();
25593
25755
  }
@@ -26258,7 +26420,7 @@ var init_logic12 = __esm({
26258
26420
  });
26259
26421
 
26260
26422
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
26261
- import { jsx as jsx31 } from "react/jsx-runtime";
26423
+ import { jsx as jsx32 } from "react/jsx-runtime";
26262
26424
  function PreviewValidationErrorScreen({
26263
26425
  errors,
26264
26426
  missingNames,
@@ -26267,7 +26429,7 @@ function PreviewValidationErrorScreen({
26267
26429
  onQuit
26268
26430
  }) {
26269
26431
  const matchedNames = matchedComponentNames(errors, missingNames);
26270
- return /* @__PURE__ */ jsx31(
26432
+ return /* @__PURE__ */ jsx32(
26271
26433
  GateStep,
26272
26434
  {
26273
26435
  intent: "error",
@@ -26641,8 +26803,8 @@ var init_scroll_offset = __esm({
26641
26803
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
26642
26804
  import React13, { useEffect as useEffect17, useLayoutEffect as useLayoutEffect2, useState as useState19 } from "react";
26643
26805
  import figures6 from "figures";
26644
- import { Box as Box26, measureElement, Text as Text27 } from "ink";
26645
- import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
26806
+ import { Box as Box27, measureElement, Text as Text28 } from "ink";
26807
+ import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
26646
26808
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
26647
26809
  return {
26648
26810
  selected,
@@ -26780,14 +26942,14 @@ function serializeState(state2, originalJson) {
26780
26942
  return JSON.stringify(entry, null, 2);
26781
26943
  }
26782
26944
  function Picker({ value, active }) {
26783
- return /* @__PURE__ */ jsxs26(Box26, { children: [
26784
- active && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u2039" }),
26785
- /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
26786
- active && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u203A" })
26945
+ return /* @__PURE__ */ jsxs27(Box27, { children: [
26946
+ active && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u2039" }),
26947
+ /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
26948
+ active && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u203A" })
26787
26949
  ] });
26788
26950
  }
26789
26951
  function Toggle({ value, active }) {
26790
- return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
26952
+ return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
26791
26953
  }
26792
26954
  function InlinePropField({
26793
26955
  label,
@@ -26796,8 +26958,8 @@ function InlinePropField({
26796
26958
  flexible = false,
26797
26959
  width
26798
26960
  }) {
26799
- return /* @__PURE__ */ jsxs26(Box26, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
26800
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
26961
+ return /* @__PURE__ */ jsxs27(Box27, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
26962
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
26801
26963
  focused ? "\u203A " : " ",
26802
26964
  label
26803
26965
  ] }),
@@ -26810,19 +26972,19 @@ function RequiredField({
26810
26972
  editingField,
26811
26973
  activeField
26812
26974
  }) {
26813
- return /* @__PURE__ */ jsx32(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx32(Toggle, { value, active: editingField && activeField === "required" }) });
26975
+ return /* @__PURE__ */ jsx33(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx33(Toggle, { value, active: editingField && activeField === "required" }) });
26814
26976
  }
26815
26977
  function DefaultValueRow({
26816
26978
  display,
26817
26979
  active,
26818
26980
  focused
26819
26981
  }) {
26820
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
26821
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26982
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
26983
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26822
26984
  focused ? "\u203A " : " ",
26823
26985
  "default:"
26824
26986
  ] }),
26825
- active ? /* @__PURE__ */ jsx32(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: display })
26987
+ active ? /* @__PURE__ */ jsx33(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: display })
26826
26988
  ] });
26827
26989
  }
26828
26990
  function RowLabel({
@@ -26830,8 +26992,8 @@ function RowLabel({
26830
26992
  selected,
26831
26993
  trailing = true
26832
26994
  }) {
26833
- return /* @__PURE__ */ jsxs26(
26834
- Text27,
26995
+ return /* @__PURE__ */ jsxs27(
26996
+ Text28,
26835
26997
  {
26836
26998
  color: selected ? PALETTE.onAccent : PALETTE.accent,
26837
26999
  bold: selected,
@@ -26850,10 +27012,10 @@ function ValueInputRow({
26850
27012
  valueText,
26851
27013
  cursorVisible
26852
27014
  }) {
26853
- return /* @__PURE__ */ jsxs26(Box26, { paddingLeft: 2, children: [
26854
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
26855
- /* @__PURE__ */ jsx32(Text27, { children: valueText }),
26856
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: " " })
27015
+ return /* @__PURE__ */ jsxs27(Box27, { paddingLeft: 2, children: [
27016
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
27017
+ /* @__PURE__ */ jsx33(Text28, { children: valueText }),
27018
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: " " })
26857
27019
  ] });
26858
27020
  }
26859
27021
  function EditableListItem({
@@ -26866,9 +27028,9 @@ function EditableListItem({
26866
27028
  }) {
26867
27029
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
26868
27030
  if (isBeingEdited) {
26869
- return /* @__PURE__ */ jsx32(ValueInputRow, { mode: "edit", valueText, cursorVisible });
27031
+ return /* @__PURE__ */ jsx33(ValueInputRow, { mode: "edit", valueText, cursorVisible });
26870
27032
  }
26871
- return /* @__PURE__ */ jsx32(Box26, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
27033
+ return /* @__PURE__ */ jsx33(Box27, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
26872
27034
  }
26873
27035
  function EditableValueList({
26874
27036
  values,
@@ -26881,9 +27043,9 @@ function EditableValueList({
26881
27043
  emptyPaddingLeft,
26882
27044
  showAddInput
26883
27045
  }) {
26884
- return /* @__PURE__ */ jsxs26(Fragment6, { children: [
26885
- values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx32(Box26, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: emptyMessage }) })),
26886
- values.map((value, index) => /* @__PURE__ */ jsx32(
27046
+ return /* @__PURE__ */ jsxs27(Fragment7, { children: [
27047
+ values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx33(Box27, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: emptyMessage }) })),
27048
+ values.map((value, index) => /* @__PURE__ */ jsx33(
26887
27049
  EditableListItem,
26888
27050
  {
26889
27051
  value,
@@ -26895,7 +27057,7 @@ function EditableValueList({
26895
27057
  },
26896
27058
  index
26897
27059
  )),
26898
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx32(ValueInputRow, { mode: "add", valueText, cursorVisible })
27060
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx33(ValueInputRow, { mode: "add", valueText, cursorVisible })
26899
27061
  ] });
26900
27062
  }
26901
27063
  function DefaultSubRow({
@@ -26907,51 +27069,51 @@ function DefaultSubRow({
26907
27069
  }) {
26908
27070
  const cursor = cursorVisible ? "\u2588" : " ";
26909
27071
  if (prop.type === "richtext" || prop.type === "media" || prop.type === "link") {
26910
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
26911
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27072
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
27073
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26912
27074
  focused ? "\u203A " : " ",
26913
27075
  "default:"
26914
27076
  ] }),
26915
- /* @__PURE__ */ jsx32(Text27, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
27077
+ /* @__PURE__ */ jsx33(Text28, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
26916
27078
  ] });
26917
27079
  }
26918
27080
  if (prop.type === "boolean") {
26919
27081
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
26920
- return /* @__PURE__ */ jsx32(DefaultValueRow, { display, active, focused });
27082
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
26921
27083
  }
26922
27084
  if (prop.type === "enum") {
26923
27085
  if (prop.values.length === 0) {
26924
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
26925
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27086
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
27087
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26926
27088
  focused ? "\u203A " : " ",
26927
27089
  "default:"
26928
27090
  ] }),
26929
- /* @__PURE__ */ jsx32(Text27, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
27091
+ /* @__PURE__ */ jsx33(Text28, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
26930
27092
  ] });
26931
27093
  }
26932
27094
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
26933
- return /* @__PURE__ */ jsx32(DefaultValueRow, { display, active, focused });
27095
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
26934
27096
  }
26935
27097
  const value = typeof prop.default === "string" ? prop.default : "";
26936
27098
  if (active) {
26937
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", flexShrink: 0, children: [
26938
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27099
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "row", flexShrink: 0, children: [
27100
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26939
27101
  focused ? "\u203A " : " ",
26940
27102
  "default:"
26941
27103
  ] }),
26942
- /* @__PURE__ */ jsxs26(Box26, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26943
- /* @__PURE__ */ jsx32(Text27, { children: value.slice(0, textCursor) }),
26944
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
26945
- /* @__PURE__ */ jsx32(Text27, { children: value.slice(textCursor + 1) })
27104
+ /* @__PURE__ */ jsxs27(Box27, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27105
+ /* @__PURE__ */ jsx33(Text28, { children: value.slice(0, textCursor) }),
27106
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
27107
+ /* @__PURE__ */ jsx33(Text28, { children: value.slice(textCursor + 1) })
26946
27108
  ] })
26947
27109
  ] });
26948
27110
  }
26949
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
26950
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27111
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
27112
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26951
27113
  focused ? "\u203A " : " ",
26952
27114
  "default:"
26953
27115
  ] }),
26954
- /* @__PURE__ */ jsx32(Text27, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
27116
+ /* @__PURE__ */ jsx33(Text28, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
26955
27117
  ] });
26956
27118
  }
26957
27119
  function DescriptionField({
@@ -26966,20 +27128,20 @@ function DescriptionField({
26966
27128
  paddingLeft = 2
26967
27129
  }) {
26968
27130
  if (compact) {
26969
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
26970
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27131
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27132
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26971
27133
  focused ? "\u203A " : " ",
26972
27134
  label
26973
27135
  ] }),
26974
- /* @__PURE__ */ jsx32(Text27, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
27136
+ /* @__PURE__ */ jsx33(Text28, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
26975
27137
  ] });
26976
27138
  }
26977
- return /* @__PURE__ */ jsxs26(Box26, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
26978
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
27139
+ return /* @__PURE__ */ jsxs27(Box27, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
27140
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
26979
27141
  focused ? "\u203A " : " ",
26980
27142
  label
26981
27143
  ] }),
26982
- editing ? /* @__PURE__ */ jsx32(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: value || "\u2014" })
27144
+ editing ? /* @__PURE__ */ jsx33(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: value || "\u2014" })
26983
27145
  ] });
26984
27146
  }
26985
27147
  function EditableDescription({
@@ -26987,9 +27149,9 @@ function EditableDescription({
26987
27149
  value,
26988
27150
  textCursor
26989
27151
  }) {
26990
- return /* @__PURE__ */ jsxs26(Text27, { wrap: "wrap", children: [
27152
+ return /* @__PURE__ */ jsxs27(Text28, { wrap: "wrap", children: [
26991
27153
  value.slice(0, textCursor),
26992
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
27154
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
26993
27155
  value.slice(textCursor + 1)
26994
27156
  ] });
26995
27157
  }
@@ -27010,9 +27172,9 @@ function PropRow({
27010
27172
  }) {
27011
27173
  const descFocused = activeField === "description";
27012
27174
  const descActive = editingField && descFocused;
27013
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
27014
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(RowLabel, { name: prop.name, selected }) }),
27015
- /* @__PURE__ */ jsx32(
27175
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
27176
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: prop.name, selected }) }),
27177
+ /* @__PURE__ */ jsx33(
27016
27178
  DescriptionField,
27017
27179
  {
27018
27180
  value: prop.description,
@@ -27025,8 +27187,8 @@ function PropRow({
27025
27187
  paddingLeft: 0
27026
27188
  }
27027
27189
  ),
27028
- /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
27029
- /* @__PURE__ */ jsx32(
27190
+ /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
27191
+ /* @__PURE__ */ jsx33(
27030
27192
  RequiredField,
27031
27193
  {
27032
27194
  value: prop.required,
@@ -27035,21 +27197,21 @@ function PropRow({
27035
27197
  activeField
27036
27198
  }
27037
27199
  ),
27038
- /* @__PURE__ */ jsx32(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx32(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx32(Text27, { children: prop.type }) })
27200
+ /* @__PURE__ */ jsx33(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx33(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx33(Text28, { children: prop.type }) })
27039
27201
  ] }),
27040
- prop.type === "token" && /* @__PURE__ */ jsx32(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx32(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
27041
- prop.type === "enum" && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27042
- /* @__PURE__ */ jsxs26(Text27, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
27202
+ prop.type === "token" && /* @__PURE__ */ jsx33(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx33(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
27203
+ prop.type === "enum" && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27204
+ /* @__PURE__ */ jsxs27(Text28, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
27043
27205
  activeField === "values" ? "\u203A " : " ",
27044
27206
  "values:"
27045
27207
  ] }),
27046
- /* @__PURE__ */ jsxs26(Text27, { wrap: "wrap", children: [
27208
+ /* @__PURE__ */ jsxs27(Text28, { wrap: "wrap", children: [
27047
27209
  "[",
27048
27210
  prop.values.join(", "),
27049
27211
  "]"
27050
27212
  ] })
27051
27213
  ] }),
27052
- /* @__PURE__ */ jsx32(
27214
+ /* @__PURE__ */ jsx33(
27053
27215
  DefaultSubRow,
27054
27216
  {
27055
27217
  prop,
@@ -27059,13 +27221,13 @@ function PropRow({
27059
27221
  cursorVisible
27060
27222
  }
27061
27223
  ),
27062
- prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27063
- /* @__PURE__ */ jsxs26(Text27, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
27224
+ prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27225
+ /* @__PURE__ */ jsxs27(Text28, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
27064
27226
  activeField === "allowed" ? "\u203A " : " ",
27065
27227
  "allowed:"
27066
27228
  ] }),
27067
- editingField && activeField === "allowed" ? /* @__PURE__ */ jsx32(Box26, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx32(Text27, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx32(
27068
- Text27,
27229
+ editingField && activeField === "allowed" ? /* @__PURE__ */ jsx33(Box27, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx33(Text28, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx33(
27230
+ Text28,
27069
27231
  {
27070
27232
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
27071
27233
  wrap: "wrap",
@@ -27073,17 +27235,17 @@ function PropRow({
27073
27235
  }
27074
27236
  )
27075
27237
  ] }),
27076
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx32(Box26, { paddingLeft: 2, children: /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: (() => {
27238
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx33(Box27, { paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: (() => {
27077
27239
  const max = Math.max(8, width - 8);
27078
27240
  const text = `~ ${rationale}`;
27079
27241
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
27080
27242
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
27081
- selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs26(Box26, { paddingLeft: 2, flexDirection: "column", children: [
27082
- /* @__PURE__ */ jsxs26(Box26, { children: [
27083
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "values:" }),
27084
- activeField === "values" && /* @__PURE__ */ jsx32(Text27, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
27243
+ selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs27(Box27, { paddingLeft: 2, flexDirection: "column", children: [
27244
+ /* @__PURE__ */ jsxs27(Box27, { children: [
27245
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "values:" }),
27246
+ activeField === "values" && /* @__PURE__ */ jsx33(Text28, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
27085
27247
  ] }),
27086
- /* @__PURE__ */ jsx32(
27248
+ /* @__PURE__ */ jsx33(
27087
27249
  EditableValueList,
27088
27250
  {
27089
27251
  values: prop.values,
@@ -27113,9 +27275,9 @@ function SlotRow({
27113
27275
  pickerCandidates,
27114
27276
  pickerCursor
27115
27277
  }) {
27116
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
27117
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(RowLabel, { name: slot.name, selected, trailing: false }) }),
27118
- /* @__PURE__ */ jsx32(
27278
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
27279
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: slot.name, selected, trailing: false }) }),
27280
+ /* @__PURE__ */ jsx33(
27119
27281
  DescriptionField,
27120
27282
  {
27121
27283
  value: slot.description,
@@ -27128,7 +27290,7 @@ function SlotRow({
27128
27290
  paddingLeft: 0
27129
27291
  }
27130
27292
  ),
27131
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(
27293
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(
27132
27294
  RequiredField,
27133
27295
  {
27134
27296
  value: slot.required,
@@ -27137,9 +27299,9 @@ function SlotRow({
27137
27299
  activeField
27138
27300
  }
27139
27301
  ) }),
27140
- !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27141
- /* @__PURE__ */ jsxs26(
27142
- Text27,
27302
+ !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
27303
+ /* @__PURE__ */ jsxs27(
27304
+ Text28,
27143
27305
  {
27144
27306
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
27145
27307
  bold: activeField === "allowedComponents",
@@ -27149,12 +27311,12 @@ function SlotRow({
27149
27311
  ]
27150
27312
  }
27151
27313
  ),
27152
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
27314
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
27153
27315
  ] }),
27154
- selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
27155
- /* @__PURE__ */ jsxs26(Box26, { children: [
27156
- /* @__PURE__ */ jsxs26(
27157
- Text27,
27316
+ selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", children: [
27317
+ /* @__PURE__ */ jsxs27(Box27, { children: [
27318
+ /* @__PURE__ */ jsxs27(
27319
+ Text28,
27158
27320
  {
27159
27321
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
27160
27322
  bold: activeField === "allowedComponents",
@@ -27164,9 +27326,9 @@ function SlotRow({
27164
27326
  ]
27165
27327
  }
27166
27328
  ),
27167
- editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: slot.allowedComponents.length > 0 ? " [a] add [e] edit [r] remove [\u2190\u2192] cycle [\u2191\u2193] navigate [K/J] reorder" : " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
27329
+ editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: slot.allowedComponents.length > 0 ? " [a] add [e] edit [r] remove [\u2190\u2192] cycle [\u2191\u2193] navigate [K/J] reorder" : " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
27168
27330
  ] }),
27169
- /* @__PURE__ */ jsx32(
27331
+ /* @__PURE__ */ jsx33(
27170
27332
  EditableValueList,
27171
27333
  {
27172
27334
  values: slot.allowedComponents,
@@ -27180,21 +27342,21 @@ function SlotRow({
27180
27342
  showAddInput: editingField && activeField === "allowedComponents"
27181
27343
  }
27182
27344
  ),
27183
- editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx32(Box26, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
27345
+ editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx33(Box27, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
27184
27346
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
27185
27347
  if (filtered.length === 0) {
27186
- return /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
27348
+ return /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
27187
27349
  }
27188
27350
  const cursor = pickerCursor % filtered.length;
27189
27351
  const MAX_VISIBLE = 5;
27190
27352
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
27191
27353
  const slice = filtered.slice(start, start + MAX_VISIBLE);
27192
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
27193
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
27354
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", children: [
27355
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
27194
27356
  slice.map((name, i) => {
27195
27357
  const absIdx = start + i;
27196
27358
  const isCursor = absIdx === cursor;
27197
- return /* @__PURE__ */ jsx32(Text27, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
27359
+ return /* @__PURE__ */ jsx33(Text28, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
27198
27360
  })
27199
27361
  ] });
27200
27362
  })() })
@@ -28073,18 +28235,18 @@ function FieldEditor({
28073
28235
  });
28074
28236
  const innerWidth = Math.max(1, width - 2);
28075
28237
  if (parseErr) {
28076
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
28077
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
28078
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.error, children: parseErr }),
28079
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
28238
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
28239
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
28240
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.error, children: parseErr }),
28241
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
28080
28242
  ] });
28081
28243
  }
28082
28244
  if (props.length === 0 && slots.length === 0) {
28083
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
28084
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
28085
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
28086
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
28087
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
28245
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
28246
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
28247
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
28248
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
28249
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
28088
28250
  ] });
28089
28251
  }
28090
28252
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -28217,12 +28379,12 @@ function FieldEditor({
28217
28379
  const renderRow = (row, index) => {
28218
28380
  const key = rowKey(row, index);
28219
28381
  if (row.kind === "header") {
28220
- return /* @__PURE__ */ jsx32(Box26, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.success, children: row.label }) }, key);
28382
+ return /* @__PURE__ */ jsx33(Box27, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.success, children: row.label }) }, key);
28221
28383
  }
28222
28384
  if (row.kind === "component-description") {
28223
28385
  const isSelected2 = inComponentDesc && active;
28224
28386
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
28225
- return /* @__PURE__ */ jsx32(
28387
+ return /* @__PURE__ */ jsx33(
28226
28388
  DescriptionField,
28227
28389
  {
28228
28390
  value: editorState.componentDescription,
@@ -28253,7 +28415,7 @@ function FieldEditor({
28253
28415
  valueText,
28254
28416
  innerWidth
28255
28417
  );
28256
- return /* @__PURE__ */ jsx32(
28418
+ return /* @__PURE__ */ jsx33(
28257
28419
  PropRow,
28258
28420
  {
28259
28421
  prop: p,
@@ -28280,7 +28442,7 @@ function FieldEditor({
28280
28442
  valueText,
28281
28443
  innerWidth
28282
28444
  );
28283
- return /* @__PURE__ */ jsx32(
28445
+ return /* @__PURE__ */ jsx33(
28284
28446
  SlotRow,
28285
28447
  {
28286
28448
  slot: s,
@@ -28292,7 +28454,7 @@ function FieldEditor({
28292
28454
  key
28293
28455
  );
28294
28456
  };
28295
- return /* @__PURE__ */ jsxs26(
28457
+ return /* @__PURE__ */ jsxs27(
28296
28458
  FixedPanel,
28297
28459
  {
28298
28460
  width,
@@ -28301,9 +28463,9 @@ function FieldEditor({
28301
28463
  borderStyle: "single",
28302
28464
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
28303
28465
  children: [
28304
- hasEmptyProperties && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify. Reject this component or add fields manually." }),
28466
+ hasEmptyProperties && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify. Reject this component or add fields manually." }),
28305
28467
  header,
28306
- /* @__PURE__ */ jsx32(Box26, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx32(
28468
+ /* @__PURE__ */ jsx33(Box27, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx33(
28307
28469
  PropRow,
28308
28470
  {
28309
28471
  prop: currentProp,
@@ -28319,7 +28481,7 @@ function FieldEditor({
28319
28481
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
28320
28482
  showRationale: showInlineRationales
28321
28483
  }
28322
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx32(
28484
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx33(
28323
28485
  SlotRow,
28324
28486
  {
28325
28487
  slot: currentSlot,
@@ -28338,8 +28500,8 @@ function FieldEditor({
28338
28500
  ) : visibleRowSlice.map((row, index) => {
28339
28501
  const absoluteIndex = scrollStart + index;
28340
28502
  const key = rowKey(row, absoluteIndex);
28341
- return /* @__PURE__ */ jsx32(
28342
- Box26,
28503
+ return /* @__PURE__ */ jsx33(
28504
+ Box27,
28343
28505
  {
28344
28506
  ref: (node) => {
28345
28507
  if (node) rowMeasureRefs.current.set(key, node);
@@ -28352,7 +28514,7 @@ function FieldEditor({
28352
28514
  `visible-${key}`
28353
28515
  );
28354
28516
  }) }),
28355
- categoryBelow && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
28517
+ categoryBelow && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
28356
28518
  sourceOpen && !onToggleSourceExternal && (() => {
28357
28519
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
28358
28520
  const start = propMeta?.sourceStartLine ?? null;
@@ -28361,50 +28523,50 @@ function FieldEditor({
28361
28523
  const src = metadata?.componentSource ?? null;
28362
28524
  const headerPath = path5 ?? "<unknown source path>";
28363
28525
  if (!start || !end2 || !src) {
28364
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
28365
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
28366
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
28367
- /* @__PURE__ */ jsx32(Text27, { children: "[s] close" })
28526
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
28527
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
28528
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
28529
+ /* @__PURE__ */ jsx33(Text28, { children: "[s] close" })
28368
28530
  ] });
28369
28531
  }
28370
28532
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
28371
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
28372
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
28373
- lines.map((ln, i) => /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
28374
- /* @__PURE__ */ jsx32(Text27, { children: "[s] close \xB7 [Esc] close" })
28533
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
28534
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
28535
+ lines.map((ln, i) => /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
28536
+ /* @__PURE__ */ jsx33(Text28, { children: "[s] close \xB7 [Esc] close" })
28375
28537
  ] });
28376
28538
  })(),
28377
- showHelp && /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
28378
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
28379
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
28380
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Row navigation" }),
28381
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191/\u2193 move between rows" }),
28382
- /* @__PURE__ */ jsx32(Text27, { children: " Enter edit fields on the current row" }),
28383
- /* @__PURE__ */ jsx32(Text27, { children: " d delete the current prop or slot (asks to confirm)" }),
28384
- /* @__PURE__ */ jsx32(Text27, { children: " Esc exit the panel" }),
28385
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
28386
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Field editing" }),
28387
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
28388
- /* @__PURE__ */ jsx32(Text27, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
28389
- /* @__PURE__ */ jsx32(Text27, { children: " Space/Enter toggle required" }),
28390
- /* @__PURE__ */ jsx32(Text27, { children: " Type edit description / string default" }),
28391
- /* @__PURE__ */ jsx32(Text27, { children: " Esc exit field-edit back to the row" }),
28392
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
28393
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Values / allowedComponents" }),
28394
- /* @__PURE__ */ jsx32(Text27, { children: " a / e / r add \xB7 edit \xB7 remove" }),
28395
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191\u2193 navigate the list" }),
28396
- /* @__PURE__ */ jsx32(Text27, { children: " K / J reorder up \xB7 down" }),
28397
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
28398
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Panels" }),
28399
- /* @__PURE__ */ jsx32(Text27, { children: " s toggle source-view for the current prop" }),
28400
- /* @__PURE__ */ jsx32(Text27, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
28401
- /* @__PURE__ */ jsx32(Text27, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
28402
- /* @__PURE__ */ jsx32(Text27, { children: " ? toggle this overlay" }),
28403
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
28404
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "press ? or Esc to close" })
28539
+ showHelp && /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
28540
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
28541
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
28542
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Row navigation" }),
28543
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191/\u2193 move between rows" }),
28544
+ /* @__PURE__ */ jsx33(Text28, { children: " Enter edit fields on the current row" }),
28545
+ /* @__PURE__ */ jsx33(Text28, { children: " d delete the current prop or slot (asks to confirm)" }),
28546
+ /* @__PURE__ */ jsx33(Text28, { children: " Esc exit the panel" }),
28547
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
28548
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Field editing" }),
28549
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
28550
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
28551
+ /* @__PURE__ */ jsx33(Text28, { children: " Space/Enter toggle required" }),
28552
+ /* @__PURE__ */ jsx33(Text28, { children: " Type edit description / string default" }),
28553
+ /* @__PURE__ */ jsx33(Text28, { children: " Esc exit field-edit back to the row" }),
28554
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
28555
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Values / allowedComponents" }),
28556
+ /* @__PURE__ */ jsx33(Text28, { children: " a / e / r add \xB7 edit \xB7 remove" }),
28557
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191\u2193 navigate the list" }),
28558
+ /* @__PURE__ */ jsx33(Text28, { children: " K / J reorder up \xB7 down" }),
28559
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
28560
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Panels" }),
28561
+ /* @__PURE__ */ jsx33(Text28, { children: " s toggle source-view for the current prop" }),
28562
+ /* @__PURE__ */ jsx33(Text28, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
28563
+ /* @__PURE__ */ jsx33(Text28, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
28564
+ /* @__PURE__ */ jsx33(Text28, { children: " ? toggle this overlay" }),
28565
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
28566
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "press ? or Esc to close" })
28405
28567
  ] }),
28406
- validationError && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.error, children: "\u2717 " + validationError }),
28407
- /* @__PURE__ */ jsx32(Box26, { paddingTop: 1, children: /* @__PURE__ */ jsx32(Text27, { color: pendingDelete ? PALETTE.text : PALETTE.muted, children: modeLabel }) })
28568
+ validationError && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.error, children: "\u2717 " + validationError }),
28569
+ /* @__PURE__ */ jsx33(Box27, { paddingTop: 1, children: /* @__PURE__ */ jsx33(Text28, { color: pendingDelete ? PALETTE.text : PALETTE.muted, children: modeLabel }) })
28408
28570
  ]
28409
28571
  }
28410
28572
  );
@@ -28461,23 +28623,23 @@ var init_wrap_text = __esm({
28461
28623
  });
28462
28624
 
28463
28625
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
28464
- import { Box as Box27, Text as Text28 } from "ink";
28465
- import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
28626
+ import { Box as Box28, Text as Text29 } from "ink";
28627
+ import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
28466
28628
  function RationaleLine({ line, active }) {
28467
28629
  if (line.kind === "blank") {
28468
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { children: " " }) });
28630
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { children: " " }) });
28469
28631
  }
28470
28632
  if (line.kind === "heading") {
28471
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
28633
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
28472
28634
  }
28473
28635
  if (line.kind === "label") {
28474
- return /* @__PURE__ */ jsxs27(Box27, { children: [
28475
- line.prefix && /* @__PURE__ */ jsx33(Text28, { children: line.prefix }),
28476
- /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
28477
- line.suffix && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: line.suffix })
28636
+ return /* @__PURE__ */ jsxs28(Box28, { children: [
28637
+ line.prefix && /* @__PURE__ */ jsx34(Text29, { children: line.prefix }),
28638
+ /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
28639
+ line.suffix && /* @__PURE__ */ jsx34(Text29, { color: PALETTE.muted, children: line.suffix })
28478
28640
  ] });
28479
28641
  }
28480
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
28642
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
28481
28643
  }
28482
28644
  var init_RationaleLine = __esm({
28483
28645
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx"() {
@@ -28487,8 +28649,8 @@ var init_RationaleLine = __esm({
28487
28649
  });
28488
28650
 
28489
28651
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
28490
- import { Box as Box28, Text as Text29 } from "ink";
28491
- import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
28652
+ import { Box as Box29, Text as Text30 } from "ink";
28653
+ import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
28492
28654
  function renderComponentRationaleLines(data, innerWidth) {
28493
28655
  const out = [];
28494
28656
  const pushSection = (heading, body) => {
@@ -28555,8 +28717,8 @@ function ComponentRationalePanel({
28555
28717
  const overflowed = totalLines > contentHeight;
28556
28718
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
28557
28719
  const visibleEnd = Math.min(totalLines, scrollOffset + contentHeight);
28558
- return /* @__PURE__ */ jsxs28(
28559
- Box28,
28720
+ return /* @__PURE__ */ jsxs29(
28721
+ Box29,
28560
28722
  {
28561
28723
  flexDirection: "column",
28562
28724
  width,
@@ -28564,9 +28726,9 @@ function ComponentRationalePanel({
28564
28726
  borderStyle: "single",
28565
28727
  borderColor: active ? PALETTE.text : void 0,
28566
28728
  children: [
28567
- /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
28568
- visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i)),
28569
- /* @__PURE__ */ jsx34(Box28, { children: overflowed ? /* @__PURE__ */ jsx34(Text29, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx34(Text29, { children: "[I/Esc] close" }) })
28729
+ /* @__PURE__ */ jsx35(Box29, { children: /* @__PURE__ */ jsx35(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
28730
+ visible.map((line, i) => /* @__PURE__ */ jsx35(RationaleLine, { line, active }, i)),
28731
+ /* @__PURE__ */ jsx35(Box29, { children: overflowed ? /* @__PURE__ */ jsx35(Text30, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx35(Text30, { children: "[I/Esc] close" }) })
28570
28732
  ]
28571
28733
  }
28572
28734
  );
@@ -28583,10 +28745,10 @@ var init_ComponentRationalePanel = __esm({
28583
28745
  });
28584
28746
 
28585
28747
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
28586
- import { Text as Text30 } from "ink";
28587
- import { Fragment as Fragment7, jsx as jsx35 } from "react/jsx-runtime";
28748
+ import { Text as Text31 } from "ink";
28749
+ import { Fragment as Fragment8, jsx as jsx36 } from "react/jsx-runtime";
28588
28750
  function HighlightedLine({ parts }) {
28589
- return /* @__PURE__ */ jsx35(Fragment7, { children: parts.map((part, i) => /* @__PURE__ */ jsx35(Text30, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
28751
+ return /* @__PURE__ */ jsx36(Fragment8, { children: parts.map((part, i) => /* @__PURE__ */ jsx36(Text31, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
28590
28752
  }
28591
28753
  var init_HighlightedLine = __esm({
28592
28754
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx"() {
@@ -28596,8 +28758,8 @@ var init_HighlightedLine = __esm({
28596
28758
  });
28597
28759
 
28598
28760
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
28599
- import { Box as Box29, Text as Text31 } from "ink";
28600
- import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
28761
+ import { Box as Box30, Text as Text32 } from "ink";
28762
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
28601
28763
  function ScrollablePanel({
28602
28764
  title,
28603
28765
  width,
@@ -28610,12 +28772,12 @@ function ScrollablePanel({
28610
28772
  children
28611
28773
  }) {
28612
28774
  const overflowed = totalLines > height;
28613
- return /* @__PURE__ */ jsxs29(Box29, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
28614
- /* @__PURE__ */ jsxs29(Box29, { children: [
28615
- /* @__PURE__ */ jsx36(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
28616
- overflowed && /* @__PURE__ */ jsxs29(Fragment8, { children: [
28617
- /* @__PURE__ */ jsx36(Box29, { flexGrow: 1 }),
28618
- /* @__PURE__ */ jsx36(Text31, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
28775
+ return /* @__PURE__ */ jsxs30(Box30, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
28776
+ /* @__PURE__ */ jsxs30(Box30, { children: [
28777
+ /* @__PURE__ */ jsx37(Text32, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
28778
+ overflowed && /* @__PURE__ */ jsxs30(Fragment9, { children: [
28779
+ /* @__PURE__ */ jsx37(Box30, { flexGrow: 1 }),
28780
+ /* @__PURE__ */ jsx37(Text32, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
28619
28781
  ] })
28620
28782
  ] }),
28621
28783
  children
@@ -28629,8 +28791,8 @@ var init_ScrollablePanel = __esm({
28629
28791
  });
28630
28792
 
28631
28793
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
28632
- import { Box as Box30 } from "ink";
28633
- import { jsx as jsx37 } from "react/jsx-runtime";
28794
+ import { Box as Box31 } from "ink";
28795
+ import { jsx as jsx38 } from "react/jsx-runtime";
28634
28796
  function highlightJson(line) {
28635
28797
  const parts = [];
28636
28798
  let remaining = line;
@@ -28668,7 +28830,7 @@ function highlightJson(line) {
28668
28830
  parts.push({ text: remaining[0] });
28669
28831
  remaining = remaining.slice(1);
28670
28832
  }
28671
- return /* @__PURE__ */ jsx37(HighlightedLine, { parts });
28833
+ return /* @__PURE__ */ jsx38(HighlightedLine, { parts });
28672
28834
  }
28673
28835
  function truncateLine(line, maxWidth) {
28674
28836
  if (line.length <= maxWidth) return line;
@@ -28681,7 +28843,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
28681
28843
  const totalLines = allLines.length;
28682
28844
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
28683
28845
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
28684
- return /* @__PURE__ */ jsx37(
28846
+ return /* @__PURE__ */ jsx38(
28685
28847
  ScrollablePanel,
28686
28848
  {
28687
28849
  title: label,
@@ -28694,7 +28856,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
28694
28856
  borderColor: active ? "white" : void 0,
28695
28857
  children: visibleLines.map((line, i) => {
28696
28858
  const truncated = truncateLine(line, innerWidth);
28697
- return /* @__PURE__ */ jsx37(Box30, { children: highlightJson(truncated) }, i);
28859
+ return /* @__PURE__ */ jsx38(Box31, { children: highlightJson(truncated) }, i);
28698
28860
  })
28699
28861
  }
28700
28862
  );
@@ -28708,7 +28870,7 @@ var init_JsonPanel = __esm({
28708
28870
  });
28709
28871
 
28710
28872
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
28711
- import { jsx as jsx38 } from "react/jsx-runtime";
28873
+ import { jsx as jsx39 } from "react/jsx-runtime";
28712
28874
  function renderRationaleLines(rows, innerWidth) {
28713
28875
  const out = [];
28714
28876
  rows.forEach((row, idx) => {
@@ -28741,7 +28903,7 @@ function RationalePanel({
28741
28903
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
28742
28904
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
28743
28905
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
28744
- return /* @__PURE__ */ jsx38(
28906
+ return /* @__PURE__ */ jsx39(
28745
28907
  ScrollablePanel,
28746
28908
  {
28747
28909
  title: `RATIONALE \u2014 ${componentName}`,
@@ -28752,7 +28914,7 @@ function RationalePanel({
28752
28914
  visibleStart,
28753
28915
  visibleEnd,
28754
28916
  borderColor: active ? PALETTE.text : void 0,
28755
- children: visible.map((line, i) => /* @__PURE__ */ jsx38(RationaleLine, { line, active }, i))
28917
+ children: visible.map((line, i) => /* @__PURE__ */ jsx39(RationaleLine, { line, active }, i))
28756
28918
  }
28757
28919
  );
28758
28920
  }
@@ -28768,8 +28930,8 @@ var init_RationalePanel = __esm({
28768
28930
 
28769
28931
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
28770
28932
  import figures7 from "figures";
28771
- import { Box as Box31, Text as Text32 } from "ink";
28772
- import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
28933
+ import { Box as Box32, Text as Text33 } from "ink";
28934
+ import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
28773
28935
  function TokenReviewPanel({
28774
28936
  componentName,
28775
28937
  suggestions,
@@ -28788,8 +28950,8 @@ function TokenReviewPanel({
28788
28950
  const scrollStart = Math.max(0, Math.min(editCursor - Math.floor(visibleCount / 2), maxStart));
28789
28951
  const visiblePaths = current.paths.slice(scrollStart, scrollStart + visibleCount);
28790
28952
  const rangeLabel = current.paths.length === 0 ? "no compatible tokens" : `${scrollStart + 1}-${scrollStart + visiblePaths.length} of ${current.paths.length}`;
28791
- return /* @__PURE__ */ jsxs30(
28792
- Box31,
28953
+ return /* @__PURE__ */ jsxs31(
28954
+ Box32,
28793
28955
  {
28794
28956
  flexDirection: "column",
28795
28957
  width,
@@ -28797,16 +28959,16 @@ function TokenReviewPanel({
28797
28959
  borderStyle: "single",
28798
28960
  borderColor: active ? PALETTE.text : void 0,
28799
28961
  children: [
28800
- /* @__PURE__ */ jsx39(Text32, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `Review mapped tokens \u2014 ${componentName} \xB7 ${current.propName}${current.kinds.length > 0 ? ` (${current.kinds.join(", ")})` : ""}` }),
28801
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: `Tick the tokens this property may use (${rangeLabel}).` }),
28802
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
28803
- current.paths.length === 0 && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
28962
+ /* @__PURE__ */ jsx40(Text33, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `Review mapped tokens \u2014 ${componentName} \xB7 ${current.propName}${current.kinds.length > 0 ? ` (${current.kinds.join(", ")})` : ""}` }),
28963
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: `Tick the tokens this property may use (${rangeLabel}).` }),
28964
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
28965
+ current.paths.length === 0 && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
28804
28966
  visiblePaths.map((path5, i) => {
28805
28967
  const pathIndex = scrollStart + i;
28806
28968
  const checked = editSelection.has(path5);
28807
28969
  const focused = pathIndex === editCursor;
28808
- return /* @__PURE__ */ jsx39(Box31, { children: /* @__PURE__ */ jsx39(
28809
- Text32,
28970
+ return /* @__PURE__ */ jsx40(Box32, { children: /* @__PURE__ */ jsx40(
28971
+ Text33,
28810
28972
  {
28811
28973
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
28812
28974
  bold: focused,
@@ -28815,15 +28977,15 @@ function TokenReviewPanel({
28815
28977
  }
28816
28978
  ) }, path5);
28817
28979
  }),
28818
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
28819
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
28820
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
28980
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
28981
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
28982
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
28821
28983
  ]
28822
28984
  }
28823
28985
  );
28824
28986
  }
28825
- return /* @__PURE__ */ jsxs30(
28826
- Box31,
28987
+ return /* @__PURE__ */ jsxs31(
28988
+ Box32,
28827
28989
  {
28828
28990
  flexDirection: "column",
28829
28991
  width,
@@ -28831,33 +28993,33 @@ function TokenReviewPanel({
28831
28993
  borderStyle: "single",
28832
28994
  borderColor: active ? PALETTE.text : void 0,
28833
28995
  children: [
28834
- /* @__PURE__ */ jsx39(Text32, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Review mapped tokens \u2014 ${componentName}` }),
28835
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: `${componentName} has ${suggestions.length} design ${suggestions.length === 1 ? "prop" : "props"} of type token. Select which tokens are allowed for each property.` }),
28836
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "Suggested tokens come from the agent. Allowed tokens are what editors can pick in Contentful." }),
28837
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
28838
- suggestions.length === 0 && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
28996
+ /* @__PURE__ */ jsx40(Text33, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Review mapped tokens \u2014 ${componentName}` }),
28997
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: `${componentName} has ${suggestions.length} design ${suggestions.length === 1 ? "prop" : "props"} of type token. Select which tokens are allowed for each property.` }),
28998
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "Suggested tokens come from the agent. Allowed tokens are what editors can pick in Contentful." }),
28999
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
29000
+ suggestions.length === 0 && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
28839
29001
  suggestions.map((s, i) => {
28840
29002
  const focused = i === selectedRow;
28841
- return /* @__PURE__ */ jsxs30(Box31, { flexDirection: "column", children: [
28842
- /* @__PURE__ */ jsx39(Box31, { children: /* @__PURE__ */ jsx39(Text32, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}${s.kinds.length > 0 ? ` (${s.kinds.join(", ")})` : ""}` }) }),
28843
- /* @__PURE__ */ jsx39(
28844
- Text32,
29003
+ return /* @__PURE__ */ jsxs31(Box32, { flexDirection: "column", children: [
29004
+ /* @__PURE__ */ jsx40(Box32, { children: /* @__PURE__ */ jsx40(Text33, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}${s.kinds.length > 0 ? ` (${s.kinds.join(", ")})` : ""}` }) }),
29005
+ /* @__PURE__ */ jsx40(
29006
+ Text33,
28845
29007
  {
28846
29008
  color: PALETTE.muted,
28847
29009
  children: ` suggested: ${s.suggested.length > 0 ? s.suggested.join(", ") : "none"}`
28848
29010
  }
28849
29011
  ),
28850
- /* @__PURE__ */ jsx39(
28851
- Text32,
29012
+ /* @__PURE__ */ jsx40(
29013
+ Text33,
28852
29014
  {
28853
29015
  color: PALETTE.muted,
28854
29016
  children: ` allowed: ${s.allowed.length > 0 ? s.allowed.join(", ") : "none (any token)"}`
28855
29017
  }
28856
29018
  ),
28857
- /* @__PURE__ */ jsx39(Text32, { children: " " })
29019
+ /* @__PURE__ */ jsx40(Text33, { children: " " })
28858
29020
  ] }, s.propName);
28859
29021
  }),
28860
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "[\u2191/\u2193] move [Enter] edit allowed tokens [Esc] close" })
29022
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "[\u2191/\u2193] move [Enter] edit allowed tokens [Esc] close" })
28861
29023
  ]
28862
29024
  }
28863
29025
  );
@@ -28870,8 +29032,8 @@ var init_TokenReviewPanel = __esm({
28870
29032
  });
28871
29033
 
28872
29034
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
28873
- import { Text as Text33 } from "ink";
28874
- import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
29035
+ import { Text as Text34 } from "ink";
29036
+ import { Fragment as Fragment10, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
28875
29037
  function ReviewDetailsPanel({
28876
29038
  selectedKey,
28877
29039
  panelOpen,
@@ -28906,7 +29068,7 @@ function ReviewDetailsPanel({
28906
29068
  rationale: s.rationale ?? ""
28907
29069
  }))
28908
29070
  ];
28909
- return /* @__PURE__ */ jsx40(
29071
+ return /* @__PURE__ */ jsx41(
28910
29072
  RationalePanel,
28911
29073
  {
28912
29074
  componentName: componentRationale?.name ?? selectedKey,
@@ -28919,7 +29081,7 @@ function ReviewDetailsPanel({
28919
29081
  );
28920
29082
  }
28921
29083
  if (panelOpen === "component-rationale") {
28922
- return /* @__PURE__ */ jsx40(
29084
+ return /* @__PURE__ */ jsx41(
28923
29085
  ComponentRationalePanel,
28924
29086
  {
28925
29087
  data: componentRationale ?? {
@@ -28944,14 +29106,14 @@ function ReviewDetailsPanel({
28944
29106
  const headerPath = path5 ?? "<unknown source path>";
28945
29107
  const sourceLineCount = Math.max(1, height - 4);
28946
29108
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
28947
- return /* @__PURE__ */ jsxs31(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
28948
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
28949
- source ? lines.map((line, index) => /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "(no source captured)" }),
28950
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
29109
+ return /* @__PURE__ */ jsxs32(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
29110
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
29111
+ source ? lines.map((line, index) => /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, children: "(no source captured)" }),
29112
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
28951
29113
  ] });
28952
29114
  }
28953
29115
  if (panelOpen === "token-review") {
28954
- return /* @__PURE__ */ jsx40(
29116
+ return /* @__PURE__ */ jsx41(
28955
29117
  TokenReviewPanel,
28956
29118
  {
28957
29119
  componentName: selectedKey,
@@ -28967,7 +29129,7 @@ function ReviewDetailsPanel({
28967
29129
  );
28968
29130
  }
28969
29131
  if (showJson) {
28970
- return /* @__PURE__ */ jsx40(
29132
+ return /* @__PURE__ */ jsx41(
28971
29133
  JsonPanel,
28972
29134
  {
28973
29135
  label: "GENERATED DEFINITION (read-only)",
@@ -28979,7 +29141,7 @@ function ReviewDetailsPanel({
28979
29141
  }
28980
29142
  );
28981
29143
  }
28982
- return /* @__PURE__ */ jsx40(Fragment9, { children: editor });
29144
+ return /* @__PURE__ */ jsx41(Fragment10, { children: editor });
28983
29145
  }
28984
29146
  var init_review_details_panel = __esm({
28985
29147
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx"() {
@@ -28994,7 +29156,7 @@ var init_review_details_panel = __esm({
28994
29156
  });
28995
29157
 
28996
29158
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
28997
- import { jsx as jsx41 } from "react/jsx-runtime";
29159
+ import { jsx as jsx42 } from "react/jsx-runtime";
28998
29160
  import { createElement } from "react";
28999
29161
  function toFieldEditorMetadata(reviewMetadata) {
29000
29162
  if (!reviewMetadata) return void 0;
@@ -29028,7 +29190,7 @@ function ReviewDetailsEditor({
29028
29190
  jsonScrollOffset,
29029
29191
  currentTokenSuggestions
29030
29192
  } = reviewEditor;
29031
- return /* @__PURE__ */ jsx41(
29193
+ return /* @__PURE__ */ jsx42(
29032
29194
  ReviewDetailsPanel,
29033
29195
  {
29034
29196
  selectedKey,
@@ -29075,8 +29237,8 @@ var init_ReviewDetailsEditor = __esm({
29075
29237
  });
29076
29238
 
29077
29239
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
29078
- import { Box as Box32, Text as Text34 } from "ink";
29079
- import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
29240
+ import { Box as Box33, Text as Text35 } from "ink";
29241
+ import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
29080
29242
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
29081
29243
  return {
29082
29244
  value: reviewEditor.draftValue || selectedJson,
@@ -29116,24 +29278,24 @@ function ReviewEmptyComponentsWarning({
29116
29278
  hidden
29117
29279
  }) {
29118
29280
  if (hidden || count === 0) return null;
29119
- return /* @__PURE__ */ jsx42(Text34, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
29281
+ return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
29120
29282
  }
29121
29283
  function ReviewNoSelection() {
29122
- return /* @__PURE__ */ jsx42(Box32, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, children: "No component selected" }) });
29284
+ return /* @__PURE__ */ jsx43(Box33, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "No component selected" }) });
29123
29285
  }
29124
29286
  function ReviewFinalizeError({
29125
29287
  message,
29126
29288
  hidden
29127
29289
  }) {
29128
29290
  if (hidden || !message) return null;
29129
- return /* @__PURE__ */ jsx42(Text34, { color: PALETTE.error, children: `\u26A0 ${message}` });
29291
+ return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, children: `\u26A0 ${message}` });
29130
29292
  }
29131
29293
  function ReviewPanelFooter({
29132
29294
  reviewEditor,
29133
29295
  sidebarFocused,
29134
29296
  sidebarFooter
29135
29297
  }) {
29136
- return /* @__PURE__ */ jsx42(Fragment10, { children: reviewEditor.panelOpen === "token-review" ? "" : sidebarFocused ? sidebarFooter : reviewEditor.showJson ? " [\u2191\u2193] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list [Enter] edit fields" + (reviewEditor.currentTokenSuggestions().length > 0 ? " [t] review mapped tokens" : "") });
29298
+ return /* @__PURE__ */ jsx43(Fragment11, { children: reviewEditor.panelOpen === "token-review" ? "" : sidebarFocused ? sidebarFooter : reviewEditor.showJson ? " [\u2191\u2193] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list [Enter] edit fields" + (reviewEditor.currentTokenSuggestions().length > 0 ? " [t] review mapped tokens" : "") });
29137
29299
  }
29138
29300
  function ReviewComponentTitle({
29139
29301
  selectedKey,
@@ -29141,10 +29303,10 @@ function ReviewComponentTitle({
29141
29303
  slotCount,
29142
29304
  sidebarFocused
29143
29305
  }) {
29144
- return /* @__PURE__ */ jsxs32(Box32, { paddingLeft: 2, paddingBottom: 1, children: [
29145
- /* @__PURE__ */ jsx42(Text34, { bold: true, wrap: "truncate-end", children: selectedKey }),
29146
- /* @__PURE__ */ jsx42(Box32, { flexGrow: 1 }),
29147
- /* @__PURE__ */ jsxs32(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: [
29306
+ return /* @__PURE__ */ jsxs33(Box33, { paddingLeft: 2, paddingBottom: 1, children: [
29307
+ /* @__PURE__ */ jsx43(Text35, { bold: true, wrap: "truncate-end", children: selectedKey }),
29308
+ /* @__PURE__ */ jsx43(Box33, { flexGrow: 1 }),
29309
+ /* @__PURE__ */ jsxs33(Text35, { color: PALETTE.muted, wrap: "truncate-end", children: [
29148
29310
  propCount,
29149
29311
  " prop",
29150
29312
  propCount !== 1 ? "s" : "",
@@ -29173,8 +29335,8 @@ function ReviewComponentPanel({
29173
29335
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
29174
29336
  const contentHeight = Math.max(1, height - 2);
29175
29337
  const contentWidth = Math.max(1, width - 1);
29176
- return /* @__PURE__ */ jsx42(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs32(Box32, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
29177
- /* @__PURE__ */ jsx42(Box32, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx42(
29338
+ return /* @__PURE__ */ jsx43(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
29339
+ /* @__PURE__ */ jsx43(Box33, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx43(
29178
29340
  ReviewDetailsEditor,
29179
29341
  {
29180
29342
  selectedKey,
@@ -29187,7 +29349,7 @@ function ReviewComponentPanel({
29187
29349
  jsonValue,
29188
29350
  sidebarFocused,
29189
29351
  fieldEditor,
29190
- header: /* @__PURE__ */ jsx42(
29352
+ header: /* @__PURE__ */ jsx43(
29191
29353
  ReviewComponentTitle,
29192
29354
  {
29193
29355
  selectedKey,
@@ -29198,8 +29360,8 @@ function ReviewComponentPanel({
29198
29360
  )
29199
29361
  }
29200
29362
  ) }),
29201
- /* @__PURE__ */ jsx42(Box32, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx42(Text34, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
29202
- /* @__PURE__ */ jsx42(Box32, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx42(
29363
+ /* @__PURE__ */ jsx43(Box33, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx43(Text35, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
29364
+ /* @__PURE__ */ jsx43(Box33, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx43(
29203
29365
  ReviewPanelFooter,
29204
29366
  {
29205
29367
  reviewEditor,
@@ -29220,8 +29382,8 @@ var init_ReviewComponentPanel = __esm({
29220
29382
  });
29221
29383
 
29222
29384
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
29223
- import { Box as Box33, Text as Text35 } from "ink";
29224
- import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
29385
+ import { Box as Box34, Text as Text36 } from "ink";
29386
+ import { jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
29225
29387
  function countReviewStatuses(entries) {
29226
29388
  return entries.reduce(
29227
29389
  (counts, entry) => {
@@ -29234,13 +29396,13 @@ function countReviewStatuses(entries) {
29234
29396
  );
29235
29397
  }
29236
29398
  function ReviewLoadingState() {
29237
- return /* @__PURE__ */ jsx43(Box33, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
29399
+ return /* @__PURE__ */ jsx44(Box34, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
29238
29400
  }
29239
29401
  function ReviewLoadError({ message }) {
29240
- return /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29241
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, children: message }),
29242
- /* @__PURE__ */ jsx43(Text35, { children: " " }),
29243
- /* @__PURE__ */ jsx43(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
29402
+ return /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29403
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: message }),
29404
+ /* @__PURE__ */ jsx44(Text36, { children: " " }),
29405
+ /* @__PURE__ */ jsx44(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
29244
29406
  ] });
29245
29407
  }
29246
29408
  var init_ReviewStatus = __esm({
@@ -29464,8 +29626,8 @@ var init_run_live_preview = __esm({
29464
29626
  });
29465
29627
 
29466
29628
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
29467
- import { Box as Box34, Text as Text36 } from "ink";
29468
- import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
29629
+ import { Box as Box35, Text as Text37 } from "ink";
29630
+ import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
29469
29631
  function FinalizeDialog({
29470
29632
  accepted,
29471
29633
  rejected,
@@ -29493,51 +29655,51 @@ function FinalizeDialog({
29493
29655
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
29494
29656
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
29495
29657
  const hasMoreAbove = offset > 0;
29496
- return /* @__PURE__ */ jsx44(Box34, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", alignItems: "flex-start", children: [
29497
- /* @__PURE__ */ jsx44(Text36, { bold: true, children: "Finalize" }),
29498
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
29499
- /* @__PURE__ */ jsxs34(Text36, { children: [
29500
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.success, children: [
29658
+ return /* @__PURE__ */ jsx45(Box35, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", alignItems: "flex-start", children: [
29659
+ /* @__PURE__ */ jsx45(Text37, { bold: true, children: "Finalize" }),
29660
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
29661
+ /* @__PURE__ */ jsxs35(Text37, { children: [
29662
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.success, children: [
29501
29663
  accepted,
29502
29664
  " accepted"
29503
29665
  ] }),
29504
- /* @__PURE__ */ jsx44(Text36, { children: " \xB7 " }),
29505
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.error, children: [
29666
+ /* @__PURE__ */ jsx45(Text37, { children: " \xB7 " }),
29667
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.error, children: [
29506
29668
  rejected,
29507
29669
  " rejected"
29508
29670
  ] }),
29509
- /* @__PURE__ */ jsx44(Text36, { children: " \xB7 " }),
29510
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.muted, children: [
29671
+ /* @__PURE__ */ jsx45(Text37, { children: " \xB7 " }),
29672
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.muted, children: [
29511
29673
  needsReview,
29512
29674
  " unresolved"
29513
29675
  ] })
29514
29676
  ] }),
29515
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
29516
- noneAccepted && /* @__PURE__ */ jsxs34(Fragment11, { children: [
29517
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
29518
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
29519
- /* @__PURE__ */ jsx44(Text36, { children: " " })
29677
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
29678
+ noneAccepted && /* @__PURE__ */ jsxs35(Fragment12, { children: [
29679
+ /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
29680
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
29681
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
29520
29682
  ] }),
29521
- !allResolved && /* @__PURE__ */ jsxs34(Fragment11, { children: [
29522
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
29523
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
29524
- /* @__PURE__ */ jsx44(Text36, { children: " " })
29683
+ !allResolved && /* @__PURE__ */ jsxs35(Fragment12, { children: [
29684
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
29685
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
29686
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
29525
29687
  ] }),
29526
- /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", height: 2, children: [
29527
- previewStatus === "running" ? /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx44(Text36, { children: " " }),
29528
- /* @__PURE__ */ jsx44(Text36, { children: " " })
29688
+ /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", height: 2, children: [
29689
+ previewStatus === "running" ? /* @__PURE__ */ jsx45(Text37, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx45(Text37, { children: " " }),
29690
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
29529
29691
  ] }),
29530
- previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs34(Fragment11, { children: [
29531
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
29532
- hasMoreAbove && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "\u2191 more above" }),
29533
- windowed.map((rc) => /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
29534
- hasMoreBelow && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "\u2193 more below" }),
29535
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx44(Text36, { children: "[\u2191\u2193] scroll deletions" }),
29536
- /* @__PURE__ */ jsx44(Text36, { children: " " })
29692
+ previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs35(Fragment12, { children: [
29693
+ /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
29694
+ hasMoreAbove && /* @__PURE__ */ jsx45(Text37, { color: PALETTE.muted, children: "\u2191 more above" }),
29695
+ windowed.map((rc) => /* @__PURE__ */ jsx45(Text37, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
29696
+ hasMoreBelow && /* @__PURE__ */ jsx45(Text37, { color: PALETTE.muted, children: "\u2193 more below" }),
29697
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx45(Text37, { children: "[\u2191\u2193] scroll deletions" }),
29698
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
29537
29699
  ] }),
29538
- /* @__PURE__ */ jsx44(Text36, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
29539
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
29540
- /* @__PURE__ */ jsx44(
29700
+ /* @__PURE__ */ jsx45(Text37, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
29701
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
29702
+ /* @__PURE__ */ jsx45(
29541
29703
  ControlHints,
29542
29704
  {
29543
29705
  hints: [
@@ -30005,8 +30167,8 @@ var init_use_review_surface_state = __esm({
30005
30167
  });
30006
30168
 
30007
30169
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
30008
- import { Box as Box35, Text as Text37 } from "ink";
30009
- import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
30170
+ import { Box as Box36, Text as Text38 } from "ink";
30171
+ import { Fragment as Fragment13, jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
30010
30172
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
30011
30173
  useImmediateInput((input, key) => {
30012
30174
  if (input === "y" || key.return) {
@@ -30015,16 +30177,16 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
30015
30177
  onCancel();
30016
30178
  }
30017
30179
  });
30018
- return /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
30019
- /* @__PURE__ */ jsx45(Text37, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
30020
- /* @__PURE__ */ jsx45(Text37, { children: " " }),
30021
- hasUnsavedDrafts ? /* @__PURE__ */ jsxs35(Fragment12, { children: [
30022
- /* @__PURE__ */ jsx45(Text37, { children: "You have unsaved draft edits." }),
30023
- /* @__PURE__ */ jsx45(Text37, { children: "Session state is preserved \u2014 you can resume" }),
30024
- /* @__PURE__ */ jsx45(Text37, { children: "by running the same review command again." })
30025
- ] }) : /* @__PURE__ */ jsx45(Text37, { children: "Session is saved. Quit without finalizing?" }),
30026
- /* @__PURE__ */ jsx45(Text37, { children: " " }),
30027
- /* @__PURE__ */ jsx45(
30180
+ return /* @__PURE__ */ jsxs36(Box36, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
30181
+ /* @__PURE__ */ jsx46(Text38, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
30182
+ /* @__PURE__ */ jsx46(Text38, { children: " " }),
30183
+ hasUnsavedDrafts ? /* @__PURE__ */ jsxs36(Fragment13, { children: [
30184
+ /* @__PURE__ */ jsx46(Text38, { children: "You have unsaved draft edits." }),
30185
+ /* @__PURE__ */ jsx46(Text38, { children: "Session state is preserved \u2014 you can resume" }),
30186
+ /* @__PURE__ */ jsx46(Text38, { children: "by running the same review command again." })
30187
+ ] }) : /* @__PURE__ */ jsx46(Text38, { children: "Session is saved. Quit without finalizing?" }),
30188
+ /* @__PURE__ */ jsx46(Text38, { children: " " }),
30189
+ /* @__PURE__ */ jsx46(
30028
30190
  ControlHints,
30029
30191
  {
30030
30192
  hints: [
@@ -30044,8 +30206,8 @@ var init_QuitDialog = __esm({
30044
30206
  });
30045
30207
 
30046
30208
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
30047
- import { Box as Box36, Text as Text38 } from "ink";
30048
- import { Fragment as Fragment13, jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
30209
+ import { Box as Box37, Text as Text39 } from "ink";
30210
+ import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
30049
30211
  function ReviewFinalizeDialogs({
30050
30212
  showFinalize,
30051
30213
  showQuit,
@@ -30059,8 +30221,8 @@ function ReviewFinalizeDialogs({
30059
30221
  onQuitCancel
30060
30222
  }) {
30061
30223
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
30062
- return /* @__PURE__ */ jsxs36(Fragment13, { children: [
30063
- showFinalize && /* @__PURE__ */ jsx46(
30224
+ return /* @__PURE__ */ jsxs37(Fragment14, { children: [
30225
+ showFinalize && /* @__PURE__ */ jsx47(
30064
30226
  FinalizeDialog,
30065
30227
  {
30066
30228
  accepted,
@@ -30073,7 +30235,7 @@ function ReviewFinalizeDialogs({
30073
30235
  onCancel: onFinalizeCancel
30074
30236
  }
30075
30237
  ),
30076
- showQuit && /* @__PURE__ */ jsx46(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
30238
+ showQuit && /* @__PURE__ */ jsx47(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
30077
30239
  ] });
30078
30240
  }
30079
30241
  function ReviewStepDialogs({
@@ -30083,7 +30245,7 @@ function ReviewStepDialogs({
30083
30245
  onFinalize,
30084
30246
  onQuit
30085
30247
  }) {
30086
- return /* @__PURE__ */ jsx46(
30248
+ return /* @__PURE__ */ jsx47(
30087
30249
  ReviewFinalizeDialogs,
30088
30250
  {
30089
30251
  showFinalize: surfaceState.showFinalize,
@@ -30101,12 +30263,12 @@ function ReviewStepDialogs({
30101
30263
  }
30102
30264
  function ReviewReloadDialog({ open }) {
30103
30265
  if (!open) return null;
30104
- return /* @__PURE__ */ jsxs36(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
30105
- /* @__PURE__ */ jsx46(Text38, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
30106
- /* @__PURE__ */ jsx46(Text38, { children: "Unsaved in-memory changes will be lost." }),
30107
- /* @__PURE__ */ jsx46(Text38, { children: " " }),
30108
- /* @__PURE__ */ jsx46(Text38, { children: " [Enter] Confirm" }),
30109
- /* @__PURE__ */ jsx46(Text38, { children: " [Esc] Cancel" })
30266
+ return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
30267
+ /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
30268
+ /* @__PURE__ */ jsx47(Text39, { children: "Unsaved in-memory changes will be lost." }),
30269
+ /* @__PURE__ */ jsx47(Text39, { children: " " }),
30270
+ /* @__PURE__ */ jsx47(Text39, { children: " [Enter] Confirm" }),
30271
+ /* @__PURE__ */ jsx47(Text39, { children: " [Esc] Cancel" })
30110
30272
  ] });
30111
30273
  }
30112
30274
  var init_ReviewDialogs = __esm({
@@ -30629,8 +30791,8 @@ var init_use_review_log = __esm({
30629
30791
  });
30630
30792
 
30631
30793
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
30632
- import { Box as Box37, Text as Text39 } from "ink";
30633
- import { jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
30794
+ import { Box as Box38, Text as Text40 } from "ink";
30795
+ import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
30634
30796
  function LivePreviewSummary({
30635
30797
  enabled,
30636
30798
  previewAnnotations,
@@ -30644,19 +30806,19 @@ function LivePreviewSummary({
30644
30806
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
30645
30807
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
30646
30808
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
30647
- if (disabled) return /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
30648
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
30809
+ if (disabled) return /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
30810
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
30649
30811
  if (!hasCounts) return null;
30650
- return /* @__PURE__ */ jsxs37(Box37, { children: [
30651
- /* @__PURE__ */ jsx47(Text39, { children: "Preview: " }),
30652
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: `${counts.new} new` }),
30653
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
30654
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.warning, children: `${counts.changed} changed` }),
30655
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
30656
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: `${counts.removed} removed` }),
30657
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx47(Text39, { children: " ([d] removed list)" }),
30658
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
30659
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
30812
+ return /* @__PURE__ */ jsxs38(Box38, { children: [
30813
+ /* @__PURE__ */ jsx48(Text40, { children: "Preview: " }),
30814
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.success, children: `${counts.new} new` }),
30815
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
30816
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: `${counts.changed} changed` }),
30817
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
30818
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: `${counts.removed} removed` }),
30819
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx48(Text40, { children: " ([d] removed list)" }),
30820
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
30821
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
30660
30822
  ] });
30661
30823
  }
30662
30824
  var init_LivePreviewSummary = __esm({
@@ -30669,8 +30831,8 @@ var init_LivePreviewSummary = __esm({
30669
30831
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
30670
30832
  import { useCallback as useCallback5, useEffect as useEffect24, useMemo as useMemo6, useRef as useRef17, useState as useState26 } from "react";
30671
30833
  import figures8 from "figures";
30672
- import { Box as Box38, Text as Text40 } from "ink";
30673
- import { Fragment as Fragment14, jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
30834
+ import { Box as Box39, Text as Text41 } from "ink";
30835
+ import { Fragment as Fragment15, jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
30674
30836
  function sortComponentsForSidebar(components, cycleParticipants) {
30675
30837
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
30676
30838
  const tier = (c2) => {
@@ -30711,10 +30873,10 @@ function CyclePathLine({
30711
30873
  highlightComponents = false,
30712
30874
  highlightLine = false
30713
30875
  }) {
30714
- return /* @__PURE__ */ jsxs38(Text40, { color: highlightLine ? PALETTE.warning : void 0, children: [
30876
+ return /* @__PURE__ */ jsxs39(Text41, { color: highlightLine ? PALETTE.warning : void 0, children: [
30715
30877
  prefix,
30716
30878
  segments.map(
30717
- (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx48(Text40, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx48(Text40, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
30879
+ (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx49(Text41, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx49(Text41, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
30718
30880
  )
30719
30881
  ] });
30720
30882
  }
@@ -30726,31 +30888,31 @@ function CycleDetailPanel({
30726
30888
  height
30727
30889
  }) {
30728
30890
  const lines = [
30729
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
30730
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
30731
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
30732
- /* @__PURE__ */ jsx48(Text40, { children: " " }, "cyc-space")
30891
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
30892
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
30893
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
30894
+ /* @__PURE__ */ jsx49(Text41, { children: " " }, "cyc-space")
30733
30895
  ];
30734
30896
  cycles.forEach((cycle, index) => {
30735
30897
  const nodeCount = new Set(cycle.path).size;
30736
30898
  const isCursor = index === cursor;
30737
30899
  lines.push(
30738
- /* @__PURE__ */ jsx48(Text40, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
30739
- /* @__PURE__ */ jsx48(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
30900
+ /* @__PURE__ */ jsx49(Text41, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
30901
+ /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
30740
30902
  );
30741
30903
  if (cycle.suggestedBreak) {
30742
30904
  lines.push(
30743
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
30905
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
30744
30906
  );
30745
30907
  }
30746
- lines.push(/* @__PURE__ */ jsx48(Text40, { children: " " }, `cyc-s-${index}`));
30908
+ lines.push(/* @__PURE__ */ jsx49(Text41, { children: " " }, `cyc-s-${index}`));
30747
30909
  });
30748
30910
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
30749
30911
  const viewportHeight = Math.max(1, height - 3);
30750
30912
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
30751
- return /* @__PURE__ */ jsxs38(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
30913
+ return /* @__PURE__ */ jsxs39(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
30752
30914
  visible,
30753
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: footer })
30915
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: footer })
30754
30916
  ] });
30755
30917
  }
30756
30918
  function BreakCyclePanel({
@@ -30761,14 +30923,14 @@ function BreakCyclePanel({
30761
30923
  width,
30762
30924
  height
30763
30925
  }) {
30764
- return /* @__PURE__ */ jsxs38(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
30765
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
30766
- cycle && /* @__PURE__ */ jsx48(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
30767
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
30768
- /* @__PURE__ */ jsx48(Text40, { children: " " }),
30769
- edges.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "remove slot edge:" }),
30770
- edges.map((edge, index) => /* @__PURE__ */ jsx48(Text40, { inverse: index === cursor, children: `${index === cursor ? figures8.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
30771
- confirming ? /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx48(Text40, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
30926
+ return /* @__PURE__ */ jsxs39(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
30927
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
30928
+ cycle && /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
30929
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
30930
+ /* @__PURE__ */ jsx49(Text41, { children: " " }),
30931
+ edges.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "remove slot edge:" }),
30932
+ edges.map((edge, index) => /* @__PURE__ */ jsx49(Text41, { inverse: index === cursor, children: `${index === cursor ? figures8.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
30933
+ confirming ? /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx49(Text41, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
30772
30934
  ] });
30773
30935
  }
30774
30936
  function buildBreakingRows(breakingChanges) {
@@ -30814,9 +30976,9 @@ function deriveBreakingChanges(response) {
30814
30976
  }
30815
30977
  function GenerateReviewStep(props) {
30816
30978
  if (!props.extractSessionId) {
30817
- return /* @__PURE__ */ jsx48(Box38, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
30979
+ return /* @__PURE__ */ jsx49(Box39, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
30818
30980
  }
30819
- return /* @__PURE__ */ jsx48(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
30981
+ return /* @__PURE__ */ jsx49(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
30820
30982
  }
30821
30983
  function GenerateReviewStepView({
30822
30984
  extractSessionId,
@@ -31678,13 +31840,13 @@ function GenerateReviewStepView({
31678
31840
  }
31679
31841
  });
31680
31842
  if (loading) {
31681
- return /* @__PURE__ */ jsx48(ReviewLoadingState, {});
31843
+ return /* @__PURE__ */ jsx49(ReviewLoadingState, {});
31682
31844
  }
31683
31845
  if (loadError) {
31684
- return /* @__PURE__ */ jsx48(ReviewLoadError, { message: loadError });
31846
+ return /* @__PURE__ */ jsx49(ReviewLoadError, { message: loadError });
31685
31847
  }
31686
31848
  if (showHelp) {
31687
- return /* @__PURE__ */ jsx48(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
31849
+ return /* @__PURE__ */ jsx49(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
31688
31850
  }
31689
31851
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
31690
31852
  components,
@@ -31724,9 +31886,9 @@ function GenerateReviewStepView({
31724
31886
  for (const c2 of closures.values()) if (c2.nodes.length > 1) return true;
31725
31887
  return false;
31726
31888
  })();
31727
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", children: [
31728
- /* @__PURE__ */ jsx48(StepHeader, { step: "review" }),
31729
- /* @__PURE__ */ jsx48(
31889
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", children: [
31890
+ /* @__PURE__ */ jsx49(StepHeader, { step: "review" }),
31891
+ /* @__PURE__ */ jsx49(
31730
31892
  ReviewStepDialogs,
31731
31893
  {
31732
31894
  surfaceState: reviewSurface,
@@ -31736,16 +31898,16 @@ function GenerateReviewStepView({
31736
31898
  onQuit
31737
31899
  }
31738
31900
  ),
31739
- /* @__PURE__ */ jsx48(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
31740
- removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
31741
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
31742
- !removedBannerCollapsed && /* @__PURE__ */ jsxs38(Fragment14, { children: [
31743
- /* @__PURE__ */ jsx48(Text40, { children: " " }),
31744
- removedComponents.map((rc) => /* @__PURE__ */ jsx48(Text40, { children: removedComponentLine(rc) }, rc.id))
31901
+ /* @__PURE__ */ jsx49(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
31902
+ removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
31903
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
31904
+ !removedBannerCollapsed && /* @__PURE__ */ jsxs39(Fragment15, { children: [
31905
+ /* @__PURE__ */ jsx49(Text41, { children: " " }),
31906
+ removedComponents.map((rc) => /* @__PURE__ */ jsx49(Text41, { children: removedComponentLine(rc) }, rc.id))
31745
31907
  ] })
31746
31908
  ] }),
31747
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx48(Box38, { paddingX: 1, children: /* @__PURE__ */ jsx48(
31748
- Text40,
31909
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx49(Box39, { paddingX: 1, children: /* @__PURE__ */ jsx49(
31910
+ Text41,
31749
31911
  {
31750
31912
  color: PALETTE.warning,
31751
31913
  children: `[b] ${breakingChanges.length} breaking change${breakingChanges.length === 1 ? "" : "s"}`
@@ -31755,14 +31917,14 @@ function GenerateReviewStepView({
31755
31917
  const row = breakingRows[breakingCursor];
31756
31918
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
31757
31919
  if (!comp) return null;
31758
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
31759
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
31760
- comp.impact && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
31761
- comp.changes.length === 0 ? /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx48(Text40, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
31762
- /* @__PURE__ */ jsx48(Text40, { children: "[D/Esc] close detail" })
31920
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
31921
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
31922
+ comp.impact && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
31923
+ comp.changes.length === 0 ? /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx49(Text41, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
31924
+ /* @__PURE__ */ jsx49(Text41, { children: "[D/Esc] close detail" })
31763
31925
  ] });
31764
31926
  })(),
31765
- !dialogOpen && /* @__PURE__ */ jsx48(
31927
+ !dialogOpen && /* @__PURE__ */ jsx49(
31766
31928
  LivePreviewSummary,
31767
31929
  {
31768
31930
  enabled: livePreview,
@@ -31781,16 +31943,16 @@ function GenerateReviewStepView({
31781
31943
  const participantSet = cycleView.structural;
31782
31944
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
31783
31945
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
31784
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
31785
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
31786
- members.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
31787
- ancestors.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
31788
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
31946
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
31947
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
31948
+ members.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
31949
+ ancestors.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
31950
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
31789
31951
  ] });
31790
31952
  })(),
31791
- /* @__PURE__ */ jsx48(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
31792
- /* @__PURE__ */ jsx48(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
31793
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx48(
31953
+ /* @__PURE__ */ jsx49(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
31954
+ /* @__PURE__ */ jsx49(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
31955
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx49(
31794
31956
  BreakCyclePanel,
31795
31957
  {
31796
31958
  cycle: cycleRows[cyclesCursor],
@@ -31801,7 +31963,7 @@ function GenerateReviewStepView({
31801
31963
  height: panelHeight
31802
31964
  }
31803
31965
  ),
31804
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx48(
31966
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx49(
31805
31967
  CycleDetailPanel,
31806
31968
  {
31807
31969
  cycles: cycleRows,
@@ -31811,8 +31973,8 @@ function GenerateReviewStepView({
31811
31973
  height: panelHeight
31812
31974
  }
31813
31975
  ),
31814
- !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs38(Box38, { children: [
31815
- breakingPanel.isOpen ? /* @__PURE__ */ jsx48(
31976
+ !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs39(Box39, { children: [
31977
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx49(
31816
31978
  GotoBanner,
31817
31979
  {
31818
31980
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -31825,7 +31987,7 @@ function GenerateReviewStepView({
31825
31987
  width: sidebarWidth,
31826
31988
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
31827
31989
  }
31828
- ) : /* @__PURE__ */ jsx48(
31990
+ ) : /* @__PURE__ */ jsx49(
31829
31991
  GroupedSidebar,
31830
31992
  {
31831
31993
  items: groupedItems,
@@ -31866,7 +32028,7 @@ function GenerateReviewStepView({
31866
32028
  graph: sidebarGraph
31867
32029
  }
31868
32030
  ),
31869
- selected ? /* @__PURE__ */ jsx48(
32031
+ selected ? /* @__PURE__ */ jsx49(
31870
32032
  ReviewComponentPanel,
31871
32033
  {
31872
32034
  selectedKey: selected.key,
@@ -31896,12 +32058,12 @@ function GenerateReviewStepView({
31896
32058
  ),
31897
32059
  saveError: reviewEditor.saveError
31898
32060
  }
31899
- ) : /* @__PURE__ */ jsx48(ReviewNoSelection, {})
32061
+ ) : /* @__PURE__ */ jsx49(ReviewNoSelection, {})
31900
32062
  ] }),
31901
- !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", children: [
31902
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
32063
+ !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", children: [
32064
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
31903
32065
  cycleRows.slice(0, 3).map((cycle, idx) => {
31904
- return /* @__PURE__ */ jsx48(
32066
+ return /* @__PURE__ */ jsx49(
31905
32067
  CyclePathLine,
31906
32068
  {
31907
32069
  segments: formatCyclePathSegments2(cycle),
@@ -31912,10 +32074,10 @@ function GenerateReviewStepView({
31912
32074
  `cyc-banner-${idx}`
31913
32075
  );
31914
32076
  }),
31915
- cycleRows.length > 3 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
31916
- /* @__PURE__ */ jsx48(Text40, { children: " press [c] for detail" })
32077
+ cycleRows.length > 3 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
32078
+ /* @__PURE__ */ jsx49(Text41, { children: " press [c] for detail" })
31917
32079
  ] }),
31918
- /* @__PURE__ */ jsx48(
32080
+ /* @__PURE__ */ jsx49(
31919
32081
  SearchMatchSummary,
31920
32082
  {
31921
32083
  open: searchOpen,
@@ -31926,7 +32088,7 @@ function GenerateReviewStepView({
31926
32088
  hidden: dialogOpen
31927
32089
  }
31928
32090
  ),
31929
- !dialogOpen && sidebarFocused && reviewEditor.panelOpen !== "token-review" && /* @__PURE__ */ jsx48(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
32091
+ !dialogOpen && sidebarFocused && reviewEditor.panelOpen !== "token-review" && /* @__PURE__ */ jsx49(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
31930
32092
  ] });
31931
32093
  }
31932
32094
  var HELP_SECTIONS2;
@@ -32043,17 +32205,17 @@ var init_generate_review_step = __esm({
32043
32205
  });
32044
32206
 
32045
32207
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
32046
- import { Box as Box39, Text as Text41 } from "ink";
32047
- import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
32208
+ import { Box as Box40, Text as Text42 } from "ink";
32209
+ import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
32048
32210
  function CustomPromptBanner({ generatePromptPath }) {
32049
32211
  if (!generatePromptPath) return null;
32050
- return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
32051
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
32052
- generatePromptPath ? /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.warning, children: [
32212
+ return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
32213
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
32214
+ generatePromptPath ? /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.warning, children: [
32053
32215
  "components: ",
32054
32216
  generatePromptPath
32055
32217
  ] }) : null,
32056
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
32218
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
32057
32219
  ] });
32058
32220
  }
32059
32221
  var init_CustomPromptBanner = __esm({
@@ -32082,15 +32244,15 @@ var init_contentful_urls2 = __esm({
32082
32244
  });
32083
32245
 
32084
32246
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
32085
- import { Box as Box40, Text as Text42 } from "ink";
32086
- import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
32247
+ import { Box as Box41, Text as Text43 } from "ink";
32248
+ import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
32087
32249
  function SpaceEnvironment({ spaceId, environmentId }) {
32088
- return /* @__PURE__ */ jsxs40(Box40, { gap: 1, marginTop: 1, children: [
32089
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Space:" }),
32090
- /* @__PURE__ */ jsx50(Text42, { children: spaceId }),
32091
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "/" }),
32092
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Environment:" }),
32093
- /* @__PURE__ */ jsx50(Text42, { children: environmentId })
32250
+ return /* @__PURE__ */ jsxs41(Box41, { gap: 1, marginTop: 1, children: [
32251
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Space:" }),
32252
+ /* @__PURE__ */ jsx51(Text43, { children: spaceId }),
32253
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "/" }),
32254
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Environment:" }),
32255
+ /* @__PURE__ */ jsx51(Text43, { children: environmentId })
32094
32256
  ] });
32095
32257
  }
32096
32258
  var init_SpaceEnvironment = __esm({
@@ -32101,19 +32263,19 @@ var init_SpaceEnvironment = __esm({
32101
32263
  });
32102
32264
 
32103
32265
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
32104
- import { Box as Box41, Text as Text43 } from "ink";
32105
- import { Fragment as Fragment15, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
32266
+ import { Box as Box42, Text as Text44 } from "ink";
32267
+ import { Fragment as Fragment16, jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
32106
32268
  function EntityRows({ entity, label }) {
32107
32269
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
32108
- return /* @__PURE__ */ jsxs41(Fragment15, { children: [
32109
- ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs41(Text43, { children: [
32110
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.success, children: "\u2713" }),
32270
+ return /* @__PURE__ */ jsxs42(Fragment16, { children: [
32271
+ ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs42(Text44, { children: [
32272
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.success, children: "\u2713" }),
32111
32273
  " ",
32112
32274
  plural3(entity[action]),
32113
32275
  " ",
32114
32276
  action
32115
32277
  ] }, action)),
32116
- entity.failed > 0 && /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
32278
+ entity.failed > 0 && /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
32117
32279
  "\u2717 ",
32118
32280
  plural3(entity.failed),
32119
32281
  " failed \u2014 check logs above"
@@ -32121,9 +32283,9 @@ function EntityRows({ entity, label }) {
32121
32283
  ] });
32122
32284
  }
32123
32285
  function LinkRow({ title, url }) {
32124
- return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
32125
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: title }),
32126
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.accent, children: url })
32286
+ return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
32287
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: title }),
32288
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.accent, children: url })
32127
32289
  ] });
32128
32290
  }
32129
32291
  function DoneStep({
@@ -32147,29 +32309,29 @@ function DoneStep({
32147
32309
  const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
32148
32310
  const success = totalFailed === 0;
32149
32311
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
32150
- return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
32151
- /* @__PURE__ */ jsx51(StepHeader, { step: "done" }),
32152
- /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32153
- success ? /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
32154
- totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: credentialsSkipped ? "Nothing was pushed \u2014 you skipped the Contentful credentials, so the files were only saved locally." : "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
32155
- /* @__PURE__ */ jsx51(EntityRows, { entity: componentTypes, label: "Component" }),
32156
- /* @__PURE__ */ jsx51(EntityRows, { entity: designTokens, label: "Design Token" }),
32157
- summary && /* @__PURE__ */ jsx51(Box41, { marginTop: 1, children: /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.muted, children: [
32312
+ return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
32313
+ /* @__PURE__ */ jsx52(StepHeader, { step: "done" }),
32314
+ /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32315
+ success ? /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
32316
+ totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: credentialsSkipped ? "Nothing was pushed \u2014 you skipped the Contentful credentials, so the files were only saved locally." : "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
32317
+ /* @__PURE__ */ jsx52(EntityRows, { entity: componentTypes, label: "Component" }),
32318
+ /* @__PURE__ */ jsx52(EntityRows, { entity: designTokens, label: "Design Token" }),
32319
+ summary && /* @__PURE__ */ jsx52(Box42, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
32158
32320
  "Push result: ",
32159
32321
  summary.succeeded,
32160
32322
  "/",
32161
32323
  summary.total,
32162
32324
  " succeeded",
32163
- summary.failed > 0 && /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
32325
+ summary.failed > 0 && /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
32164
32326
  ", ",
32165
32327
  summary.failed,
32166
32328
  " failed"
32167
32329
  ] })
32168
32330
  ] }) })
32169
32331
  ] }),
32170
- failures.length > 0 && /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
32171
- /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.error, children: "Failure details" }),
32172
- failures.map((failure) => /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
32332
+ failures.length > 0 && /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
32333
+ /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.error, children: "Failure details" }),
32334
+ failures.map((failure) => /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
32173
32335
  failure.entityType,
32174
32336
  " ",
32175
32337
  failure.entityId,
@@ -32177,11 +32339,11 @@ function DoneStep({
32177
32339
  failure.message
32178
32340
  ] }, `${failure.entityType}:${failure.entityId}`))
32179
32341
  ] }),
32180
- /* @__PURE__ */ jsx51(SpaceEnvironment, { spaceId, environmentId }),
32181
- success && totalPushed > 0 && /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, children: [
32182
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
32183
- produced.components && /* @__PURE__ */ jsx51(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
32184
- produced.tokens && /* @__PURE__ */ jsx51(
32342
+ /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
32343
+ success && totalPushed > 0 && /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, children: [
32344
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
32345
+ produced.components && /* @__PURE__ */ jsx52(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
32346
+ produced.tokens && /* @__PURE__ */ jsx52(
32185
32347
  LinkRow,
32186
32348
  {
32187
32349
  title: "View your design tokens here:",
@@ -32189,7 +32351,7 @@ function DoneStep({
32189
32351
  }
32190
32352
  )
32191
32353
  ] }),
32192
- /* @__PURE__ */ jsx51(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
32354
+ /* @__PURE__ */ jsx52(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
32193
32355
  ] })
32194
32356
  ] });
32195
32357
  }
@@ -32248,10 +32410,10 @@ var init_use_blinking_cursor = __esm({
32248
32410
 
32249
32411
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
32250
32412
  import { useState as useState28 } from "react";
32251
- import { Box as Box42, Text as Text44 } from "ink";
32413
+ import { Box as Box43, Text as Text45 } from "ink";
32252
32414
  import { readdirSync as readdirSync4 } from "node:fs";
32253
32415
  import { dirname as dirname17, basename as basename6, join as join23 } from "node:path";
32254
- import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
32416
+ import { jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
32255
32417
  function autocomplete(partial) {
32256
32418
  if (!partial) return null;
32257
32419
  const normalized = normalizePath(partial);
@@ -32309,20 +32471,20 @@ function PathPrompt({
32309
32471
  const shown = input || defaultPath;
32310
32472
  const isPlaceholder = input === "";
32311
32473
  const cursor = cursorVisible ? "\u2588" : " ";
32312
- return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
32313
- /* @__PURE__ */ jsx52(StepHeader, { step: "push" }),
32314
- /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32315
- summary && /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: summary }),
32316
- /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
32317
- /* @__PURE__ */ jsx52(Text44, { color: PALETTE.accent, children: "?" }),
32318
- /* @__PURE__ */ jsxs42(Text44, { bold: true, children: [
32474
+ return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
32475
+ /* @__PURE__ */ jsx53(StepHeader, { step: "push" }),
32476
+ /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32477
+ summary && /* @__PURE__ */ jsx53(Text45, { color: PALETTE.muted, children: summary }),
32478
+ /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
32479
+ /* @__PURE__ */ jsx53(Text45, { color: PALETTE.accent, children: "?" }),
32480
+ /* @__PURE__ */ jsxs43(Text45, { bold: true, children: [
32319
32481
  label,
32320
32482
  ":"
32321
32483
  ] }),
32322
- /* @__PURE__ */ jsx52(Text44, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
32323
- /* @__PURE__ */ jsx52(Text44, { children: cursor })
32484
+ /* @__PURE__ */ jsx53(Text45, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
32485
+ /* @__PURE__ */ jsx53(Text45, { children: cursor })
32324
32486
  ] }),
32325
- /* @__PURE__ */ jsx52(
32487
+ /* @__PURE__ */ jsx53(
32326
32488
  ControlHints,
32327
32489
  {
32328
32490
  hints: [
@@ -32372,8 +32534,8 @@ var init_produced = __esm({
32372
32534
 
32373
32535
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
32374
32536
  import { useEffect as useEffect26, useState as useState29 } from "react";
32375
- import { Spinner as Spinner2 } from "@inkjs/ui";
32376
- import { jsx as jsx53 } from "react/jsx-runtime";
32537
+ import { Spinner as Spinner3 } from "@inkjs/ui";
32538
+ import { jsx as jsx54 } from "react/jsx-runtime";
32377
32539
  function useTimedSpinner() {
32378
32540
  const [elapsedSeconds, setElapsedSeconds] = useState29(0);
32379
32541
  useEffect26(() => {
@@ -32385,7 +32547,7 @@ function useTimedSpinner() {
32385
32547
  const mins = Math.floor(elapsedSeconds / 60);
32386
32548
  const secs = elapsedSeconds % 60;
32387
32549
  return {
32388
- spinner: /* @__PURE__ */ jsx53(Spinner2, {}),
32550
+ spinner: /* @__PURE__ */ jsx54(Spinner3, {}),
32389
32551
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
32390
32552
  };
32391
32553
  }
@@ -32396,47 +32558,52 @@ var init_use_timed_spinner = __esm({
32396
32558
  });
32397
32559
 
32398
32560
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
32399
- import { Box as Box43, Text as Text45 } from "ink";
32561
+ import { Box as Box44, Text as Text46 } from "ink";
32400
32562
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
32401
- import { jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
32563
+ import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
32402
32564
  function PushingStep({ progress, produced, counts }) {
32403
32565
  const { spinner, elapsed } = useTimedSpinner();
32404
32566
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
32405
32567
  const showGlobal = progress && progress.kind === "progress";
32406
32568
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
32407
- return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
32408
- /* @__PURE__ */ jsx54(StepHeader, { step: "push" }),
32409
- /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32410
- /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
32569
+ const items = progress && progress.kind === "progress" ? progress.items : [];
32570
+ return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
32571
+ /* @__PURE__ */ jsx55(StepHeader, { step: "push" }),
32572
+ /* @__PURE__ */ jsx55(AsideLayout, { aside: items.length > 0 ? /* @__PURE__ */ jsx55(ActivityPanel, { title: "Entities", items }) : void 0, children: /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
32573
+ /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
32411
32574
  spinner,
32412
- /* @__PURE__ */ jsxs43(Text45, { children: [
32575
+ /* @__PURE__ */ jsxs44(Text46, { children: [
32413
32576
  "Writing ",
32414
32577
  countedThings(produced, counts),
32415
32578
  " to your Contentful space..."
32416
32579
  ] })
32417
32580
  ] }),
32418
- operationId && /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
32419
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Operation:" }),
32420
- /* @__PURE__ */ jsx54(Text45, { children: operationId })
32581
+ operationId && /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
32582
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Operation:" }),
32583
+ /* @__PURE__ */ jsx55(Text46, { children: operationId })
32421
32584
  ] }),
32422
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx54(Box43, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs43(Box43, { gap: 2, children: [
32423
- /* @__PURE__ */ jsx54(Box43, { width: 40, children: /* @__PURE__ */ jsx54(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx54(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
32424
- /* @__PURE__ */ jsxs43(Text45, { color: PALETTE.muted, children: [
32585
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx55(Box44, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs44(Box44, { gap: 2, children: [
32586
+ /* @__PURE__ */ jsx55(Box44, { width: 40, children: /* @__PURE__ */ jsx55(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx55(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
32587
+ /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.muted, children: [
32425
32588
  progress.processed,
32426
32589
  "/",
32427
32590
  progress.total,
32428
32591
  " entities"
32592
+ ] }),
32593
+ progress.failed > 0 && /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.error, children: [
32594
+ progress.failed,
32595
+ " failed"
32429
32596
  ] })
32430
32597
  ] }) }),
32431
- showCurrent && /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
32432
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Now processing:" }),
32433
- /* @__PURE__ */ jsx54(Text45, { children: showCurrent })
32598
+ showCurrent && /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
32599
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Now processing:" }),
32600
+ /* @__PURE__ */ jsx55(Text46, { children: showCurrent })
32434
32601
  ] }),
32435
- /* @__PURE__ */ jsx54(Box43, { marginTop: 1, children: /* @__PURE__ */ jsxs43(Text45, { color: PALETTE.muted, children: [
32602
+ /* @__PURE__ */ jsx55(Box44, { marginTop: 1, children: /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.muted, children: [
32436
32603
  "Elapsed: ",
32437
32604
  elapsed
32438
32605
  ] }) })
32439
- ] })
32606
+ ] }) })
32440
32607
  ] });
32441
32608
  }
32442
32609
  var init_PushingStep = __esm({
@@ -32445,6 +32612,7 @@ var init_PushingStep = __esm({
32445
32612
  init_StepHeader();
32446
32613
  init_produced();
32447
32614
  init_use_timed_spinner();
32615
+ init_activity_panel();
32448
32616
  init_theme2();
32449
32617
  init_theme();
32450
32618
  }
@@ -32646,8 +32814,8 @@ var init_preview_confirmation_input = __esm({
32646
32814
 
32647
32815
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
32648
32816
  import { useEffect as useEffect27, useState as useState30, useMemo as useMemo7 } from "react";
32649
- import { Box as Box44, Text as Text46 } from "ink";
32650
- import { Fragment as Fragment16, jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
32817
+ import { Box as Box45, Text as Text47 } from "ink";
32818
+ import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
32651
32819
  function buildPreviewSummaryLines(preview) {
32652
32820
  const lines = [];
32653
32821
  const { components, tokens } = preview;
@@ -32899,12 +33067,12 @@ function WizardPreviewStep({
32899
33067
  return;
32900
33068
  }
32901
33069
  });
32902
- return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
32903
- /* @__PURE__ */ jsx55(StepHeader, { step: "push" }),
32904
- /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
32905
- hasAnything ? /* @__PURE__ */ jsxs44(Fragment16, { children: [
32906
- /* @__PURE__ */ jsx55(Text46, { children: "Here's what will happen in your space:" }),
32907
- /* @__PURE__ */ jsxs44(
33070
+ return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
33071
+ /* @__PURE__ */ jsx56(StepHeader, { step: "push" }),
33072
+ /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
33073
+ hasAnything ? /* @__PURE__ */ jsxs45(Fragment17, { children: [
33074
+ /* @__PURE__ */ jsx56(Text47, { children: "Here's what will happen in your space:" }),
33075
+ /* @__PURE__ */ jsxs45(
32908
33076
  WindowedPanel,
32909
33077
  {
32910
33078
  width: Math.max(20, terminalColumns - 4),
@@ -32912,15 +33080,15 @@ function WizardPreviewStep({
32912
33080
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
32913
33081
  focused: false,
32914
33082
  children: [
32915
- activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx55(Text46, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
32916
- /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
33083
+ activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx56(Text47, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
33084
+ /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
32917
33085
  ]
32918
33086
  }
32919
33087
  )
32920
- ] }) : /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
32921
- breakingWithImpact && /* @__PURE__ */ jsx55(Box44, { marginTop: 1, children: /* @__PURE__ */ jsx55(Text46, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
32922
- /* @__PURE__ */ jsx55(SpaceEnvironment, { spaceId, environmentId }),
32923
- /* @__PURE__ */ jsx55(Box44, { marginTop: 1, children: /* @__PURE__ */ jsx55(
33088
+ ] }) : /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
33089
+ breakingWithImpact && /* @__PURE__ */ jsx56(Box45, { marginTop: 1, children: /* @__PURE__ */ jsx56(Text47, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
33090
+ /* @__PURE__ */ jsx56(SpaceEnvironment, { spaceId, environmentId }),
33091
+ /* @__PURE__ */ jsx56(Box45, { marginTop: 1, children: /* @__PURE__ */ jsx56(
32924
33092
  ControlHints,
32925
33093
  {
32926
33094
  hints: [
@@ -33167,8 +33335,8 @@ var init_use_flow_log = __esm({
33167
33335
  });
33168
33336
 
33169
33337
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
33170
- import { Box as Box45 } from "ink";
33171
- import { jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
33338
+ import { Box as Box46 } from "ink";
33339
+ import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
33172
33340
  function canEditFromPreview(cdf) {
33173
33341
  if (!cdf) return false;
33174
33342
  return parseCDFComponents(cdf).components.length > 0;
@@ -33188,7 +33356,7 @@ function FlowScreen({
33188
33356
  const content = (() => {
33189
33357
  switch (state2.step) {
33190
33358
  case "final-review":
33191
- return /* @__PURE__ */ jsx56(
33359
+ return /* @__PURE__ */ jsx57(
33192
33360
  GenerateReviewStep,
33193
33361
  {
33194
33362
  extractSessionId: state2.extractSessionId,
@@ -33205,10 +33373,10 @@ function FlowScreen({
33205
33373
  }
33206
33374
  );
33207
33375
  case "previewing":
33208
- return /* @__PURE__ */ jsx56(RunningStep, { step: "push", description: `Computing diff for ${things} against your Contentful space...` });
33376
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: `Computing diff for ${things} against your Contentful space...` });
33209
33377
  case "preview-gate":
33210
33378
  if (!state2.serverPreview) return null;
33211
- return /* @__PURE__ */ jsx56(
33379
+ return /* @__PURE__ */ jsx57(
33212
33380
  WizardPreviewStep,
33213
33381
  {
33214
33382
  preview: state2.serverPreview,
@@ -33220,9 +33388,9 @@ function FlowScreen({
33220
33388
  }
33221
33389
  );
33222
33390
  case "pushing":
33223
- return /* @__PURE__ */ jsx56(PushingStep, { progress: state2.pushProgress, produced, counts });
33391
+ return /* @__PURE__ */ jsx57(PushingStep, { progress: state2.pushProgress, produced, counts });
33224
33392
  case "path-prompt":
33225
- return /* @__PURE__ */ jsx56(
33393
+ return /* @__PURE__ */ jsx57(
33226
33394
  PathPrompt,
33227
33395
  {
33228
33396
  summary: `Saving ${things}${state2.credentialsSkipped ? "" : " and pushing them to your Contentful space"}.`,
@@ -33232,10 +33400,10 @@ function FlowScreen({
33232
33400
  }
33233
33401
  );
33234
33402
  case "printing":
33235
- return /* @__PURE__ */ jsx56(RunningStep, { step: "push", description: "Writing output files to disk..." });
33403
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: "Writing output files to disk..." });
33236
33404
  case "print-gate": {
33237
33405
  const teaser = buildRunTeaserLine(state2.lastRunId);
33238
- return /* @__PURE__ */ jsx56(
33406
+ return /* @__PURE__ */ jsx57(
33239
33407
  GateStep,
33240
33408
  {
33241
33409
  step: "push",
@@ -33250,7 +33418,7 @@ function FlowScreen({
33250
33418
  }
33251
33419
  case "done": {
33252
33420
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
33253
- return /* @__PURE__ */ jsx56(
33421
+ return /* @__PURE__ */ jsx57(
33254
33422
  DoneStep,
33255
33423
  {
33256
33424
  componentTypes: state2.pushResult.componentTypes,
@@ -33267,7 +33435,7 @@ function FlowScreen({
33267
33435
  );
33268
33436
  }
33269
33437
  case "preview-validation-error":
33270
- return /* @__PURE__ */ jsx56(
33438
+ return /* @__PURE__ */ jsx57(
33271
33439
  PreviewValidationErrorScreen,
33272
33440
  {
33273
33441
  errors: state2.previewValidationErrors,
@@ -33278,7 +33446,7 @@ function FlowScreen({
33278
33446
  }
33279
33447
  );
33280
33448
  case "error":
33281
- return /* @__PURE__ */ jsx56(
33449
+ return /* @__PURE__ */ jsx57(
33282
33450
  ErrorStep,
33283
33451
  {
33284
33452
  stepName: state2.errorStep,
@@ -33289,8 +33457,8 @@ function FlowScreen({
33289
33457
  );
33290
33458
  }
33291
33459
  })();
33292
- return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
33293
- /* @__PURE__ */ jsx56(CustomPromptBanner, { generatePromptPath }),
33460
+ return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", children: [
33461
+ /* @__PURE__ */ jsx57(CustomPromptBanner, { generatePromptPath }),
33294
33462
  content
33295
33463
  ] });
33296
33464
  }
@@ -33502,6 +33670,21 @@ var init_preview2 = __esm({
33502
33670
  }
33503
33671
  });
33504
33672
 
33673
+ // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/push-progress.ts
33674
+ function activityFromItems(items) {
33675
+ return items.filter((item) => item.status !== "queued").map((item) => ({
33676
+ name: item.id,
33677
+ state: item.status === "failed" ? "failed" : "done",
33678
+ detail: `${item.action} ${item.entityType === "DesignToken" ? "token" : "component"}`,
33679
+ ...item.error ? { error: typeof item.error === "string" ? item.error : item.error.message } : {}
33680
+ }));
33681
+ }
33682
+ var init_push_progress = __esm({
33683
+ "packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/push-progress.ts"() {
33684
+ "use strict";
33685
+ }
33686
+ });
33687
+
33505
33688
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/push.ts
33506
33689
  async function runPush(input, deps, onPatch) {
33507
33690
  if (shouldRefusePush(input.state)) return buildSkippedPushTransition();
@@ -33554,7 +33737,16 @@ async function runPush(input, deps, onPatch) {
33554
33737
  const items = op.items ?? [];
33555
33738
  const lastDone = items.length > 0 ? items[items.length - 1] : null;
33556
33739
  const current = lastDone && lastDone.status === "succeeded" ? lastDone.id : null;
33557
- onPatch({ pushProgress: { kind: "progress", processed: done, total: summary.total, current } });
33740
+ onPatch({
33741
+ pushProgress: {
33742
+ kind: "progress",
33743
+ processed: done,
33744
+ total: summary.total,
33745
+ failed: summary.failed,
33746
+ current,
33747
+ items: activityFromItems(items)
33748
+ }
33749
+ });
33558
33750
  }
33559
33751
  safeLog(deps, { pollTick: { attempt: pollCount, status: op.sys.status, summary: op.summary } });
33560
33752
  }
@@ -33665,6 +33857,7 @@ var init_push = __esm({
33665
33857
  init_src3();
33666
33858
  init_src4();
33667
33859
  init_user_agent();
33860
+ init_push_progress();
33668
33861
  init_wizard_state_transitions();
33669
33862
  realPushDeps = (log) => ({
33670
33863
  createClient: (options) => new ApiClient({ ...options, userAgent: cliUserAgent() }),
@@ -34210,14 +34403,14 @@ var init_help_info = __esm({
34210
34403
 
34211
34404
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
34212
34405
  import { useEffect as useEffect30, useState as useState31 } from "react";
34213
- import { Box as Box46, Text as Text47, useInput as useInput13 } from "ink";
34214
- import { Fragment as Fragment17, jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
34406
+ import { Box as Box47, Text as Text48, useInput as useInput13 } from "ink";
34407
+ import { Fragment as Fragment18, jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
34215
34408
  function Section({ title, rows }) {
34216
- return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", children: [
34217
- /* @__PURE__ */ jsx57(Text47, { bold: true, color: PALETTE.accent, children: title }),
34218
- rows.map((row) => /* @__PURE__ */ jsxs46(Box46, { gap: 1, children: [
34219
- /* @__PURE__ */ jsx57(Box46, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx57(Text47, { color: PALETTE.muted, children: row.label }) }),
34220
- /* @__PURE__ */ jsx57(Text47, { children: row.value })
34409
+ return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", children: [
34410
+ /* @__PURE__ */ jsx58(Text48, { bold: true, color: PALETTE.accent, children: title }),
34411
+ rows.map((row) => /* @__PURE__ */ jsxs47(Box47, { gap: 1, children: [
34412
+ /* @__PURE__ */ jsx58(Box47, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: row.label }) }),
34413
+ /* @__PURE__ */ jsx58(Text48, { children: row.value })
34221
34414
  ] }, row.label))
34222
34415
  ] });
34223
34416
  }
@@ -34241,14 +34434,14 @@ function HelpScreen({ onDone }) {
34241
34434
  return;
34242
34435
  }
34243
34436
  });
34244
- return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
34245
- /* @__PURE__ */ jsx57(Text47, { bold: true, children: "Help" }),
34246
- info ? /* @__PURE__ */ jsxs46(Fragment17, { children: [
34247
- /* @__PURE__ */ jsx57(Section, { title: "Where things are stored", rows: info.storage }),
34248
- /* @__PURE__ */ jsx57(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
34249
- /* @__PURE__ */ jsx57(Text47, { color: PALETTE.muted, children: "Hit a problem? Turn on Debug Mode in Settings, reproduce it, then share the session folder above. The CMA token is redacted from those logs." })
34250
- ] }) : /* @__PURE__ */ jsx57(Text47, { color: PALETTE.accent, children: "Loading..." }),
34251
- /* @__PURE__ */ jsx57(
34437
+ return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
34438
+ /* @__PURE__ */ jsx58(Text48, { bold: true, children: "Help" }),
34439
+ info ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
34440
+ /* @__PURE__ */ jsx58(Section, { title: "Where things are stored", rows: info.storage }),
34441
+ /* @__PURE__ */ jsx58(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
34442
+ /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: "Hit a problem? Turn on Debug Mode in Settings, reproduce it, then share the session folder above. The CMA token is redacted from those logs." })
34443
+ ] }) : /* @__PURE__ */ jsx58(Text48, { color: PALETTE.accent, children: "Loading..." }),
34444
+ /* @__PURE__ */ jsx58(
34252
34445
  ControlHints,
34253
34446
  {
34254
34447
  hints: [
@@ -34271,8 +34464,8 @@ var init_PageContainer2 = __esm({
34271
34464
 
34272
34465
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
34273
34466
  import { useState as useState32 } from "react";
34274
- import { Box as Box47, Text as Text48, useInput as useInput14 } from "ink";
34275
- import { jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
34467
+ import { Box as Box48, Text as Text49, useInput as useInput14 } from "ink";
34468
+ import { jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
34276
34469
  function SettingsScreen({
34277
34470
  onNavigate,
34278
34471
  onBack
@@ -34303,15 +34496,15 @@ function SettingsScreen({
34303
34496
  onBack();
34304
34497
  }
34305
34498
  });
34306
- return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
34307
- /* @__PURE__ */ jsx58(Text48, { bold: true, children: "Settings" }),
34308
- /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: " " }),
34309
- items.map((item, i) => /* @__PURE__ */ jsxs47(Text48, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
34499
+ return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
34500
+ /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Settings" }),
34501
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: " " }),
34502
+ items.map((item, i) => /* @__PURE__ */ jsxs48(Text49, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
34310
34503
  i === focusIdx ? "> " : " ",
34311
34504
  item.label
34312
34505
  ] }, item.label)),
34313
- /* @__PURE__ */ jsx58(Text48, { children: " " }),
34314
- /* @__PURE__ */ jsx58(
34506
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
34507
+ /* @__PURE__ */ jsx59(
34315
34508
  ControlHints,
34316
34509
  {
34317
34510
  hints: [
@@ -34580,15 +34773,15 @@ var init_agent_debug = __esm({
34580
34773
  });
34581
34774
 
34582
34775
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
34583
- import { Text as Text49 } from "ink";
34584
- import { jsx as jsx59 } from "react/jsx-runtime";
34776
+ import { Text as Text50 } from "ink";
34777
+ import { jsx as jsx60 } from "react/jsx-runtime";
34585
34778
  function AgentStatusBadge({
34586
34779
  name,
34587
34780
  checks,
34588
34781
  binary
34589
34782
  }) {
34590
34783
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
34591
- return /* @__PURE__ */ jsx59(Text49, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
34784
+ return /* @__PURE__ */ jsx60(Text50, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
34592
34785
  }
34593
34786
  var TONE_COLOR;
34594
34787
  var init_AgentStatusBadge = __esm({
@@ -34606,12 +34799,12 @@ var init_AgentStatusBadge = __esm({
34606
34799
 
34607
34800
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
34608
34801
  import { useEffect as useEffect31, useState as useState33 } from "react";
34609
- import { Box as Box48, Text as Text50 } from "ink";
34610
- import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
34802
+ import { Box as Box49, Text as Text51 } from "ink";
34803
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
34611
34804
  function StatusHeading() {
34612
- return /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
34613
- /* @__PURE__ */ jsx60(Text50, { bold: true, color: PALETTE.muted, children: "STATUS" }),
34614
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "\xB7 read only" })
34805
+ return /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
34806
+ /* @__PURE__ */ jsx61(Text51, { bold: true, color: PALETTE.muted, children: "STATUS" }),
34807
+ /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "\xB7 read only" })
34615
34808
  ] });
34616
34809
  }
34617
34810
  function AgentDetail({
@@ -34674,7 +34867,7 @@ function AgentDetail({
34674
34867
  };
34675
34868
  const formFields = fields(name);
34676
34869
  const labelWidth = formLabelWidth([...formFields, action]);
34677
- return /* @__PURE__ */ jsx60(
34870
+ return /* @__PURE__ */ jsx61(
34678
34871
  FieldForm,
34679
34872
  {
34680
34873
  title: `Settings \u203A Configuration \u203A Agents \u203A ${AGENT_LABELS[name]}`,
@@ -34691,9 +34884,9 @@ function AgentDetail({
34691
34884
  actions: [action],
34692
34885
  notice: testing ? null : notice,
34693
34886
  busy: saving || testing,
34694
- children: /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", marginTop: 1, children: [
34695
- /* @__PURE__ */ jsx60(StatusHeading, {}),
34696
- statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx60(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx60(Text50, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
34887
+ children: /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", marginTop: 1, children: [
34888
+ /* @__PURE__ */ jsx61(StatusHeading, {}),
34889
+ statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx61(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx61(Text51, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
34697
34890
  ] })
34698
34891
  }
34699
34892
  );
@@ -34719,8 +34912,8 @@ var init_AgentDetail = __esm({
34719
34912
 
34720
34913
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
34721
34914
  import { useEffect as useEffect32, useRef as useRef20, useState as useState34 } from "react";
34722
- import { Box as Box49, Text as Text51, useInput as useInput15 } from "ink";
34723
- import { Fragment as Fragment18, jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
34915
+ import { Box as Box50, Text as Text52, useInput as useInput15 } from "ink";
34916
+ import { Fragment as Fragment19, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
34724
34917
  function AgentsScreen({ onDone }) {
34725
34918
  const [config, setConfig] = useState34(null);
34726
34919
  const [focus, setFocus] = useState34(0);
@@ -34828,21 +35021,21 @@ function AgentsScreen({ onDone }) {
34828
35021
  }
34829
35022
  });
34830
35023
  if (!config) {
34831
- return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
34832
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
34833
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34834
- loadError ? /* @__PURE__ */ jsxs49(Fragment18, { children: [
34835
- /* @__PURE__ */ jsxs49(Text51, { color: PALETTE.error, children: [
35024
+ return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35025
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
35026
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35027
+ loadError ? /* @__PURE__ */ jsxs50(Fragment19, { children: [
35028
+ /* @__PURE__ */ jsxs50(Text52, { color: PALETTE.error, children: [
34836
35029
  "\u2717 Could not read the settings: ",
34837
35030
  loadError
34838
35031
  ] }),
34839
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34840
- /* @__PURE__ */ jsx61(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
34841
- ] }) : /* @__PURE__ */ jsx61(Text51, { color: PALETTE.accent, children: "Loading..." })
35032
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35033
+ /* @__PURE__ */ jsx62(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
35034
+ ] }) : /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "Loading..." })
34842
35035
  ] });
34843
35036
  }
34844
35037
  if (open) {
34845
- return /* @__PURE__ */ jsx61(
35038
+ return /* @__PURE__ */ jsx62(
34846
35039
  AgentDetail,
34847
35040
  {
34848
35041
  name: open,
@@ -34863,48 +35056,48 @@ function AgentsScreen({ onDone }) {
34863
35056
  );
34864
35057
  }
34865
35058
  const focusedAgent = AGENT_NAMES[focus];
34866
- return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
34867
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
34868
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34869
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
34870
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34871
- /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
34872
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "Default agent" }),
34873
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
34874
- saving && /* @__PURE__ */ jsx61(Text51, { color: PALETTE.accent, children: "\u2026 saving" })
35059
+ return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35060
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
35061
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35062
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
35063
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35064
+ /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
35065
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Default agent" }),
35066
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
35067
+ saving && /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "\u2026 saving" })
34875
35068
  ] }),
34876
- /* @__PURE__ */ jsxs49(Box49, { marginTop: 1, gap: 1, children: [
34877
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34878
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34879
- /* @__PURE__ */ jsx61(Box49, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "AGENT" }) }),
34880
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "STATUS" })
35069
+ /* @__PURE__ */ jsxs50(Box50, { marginTop: 1, gap: 1, children: [
35070
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35071
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35072
+ /* @__PURE__ */ jsx62(Box50, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "AGENT" }) }),
35073
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "STATUS" })
34881
35074
  ] }),
34882
35075
  AGENT_NAMES.map((name) => {
34883
35076
  const isFocused = focusedAgent === name;
34884
- return /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
34885
- /* @__PURE__ */ jsx61(Text51, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
34886
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
34887
- /* @__PURE__ */ jsx61(Box49, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
34888
- /* @__PURE__ */ jsx61(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
35077
+ return /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
35078
+ /* @__PURE__ */ jsx62(Text52, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
35079
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
35080
+ /* @__PURE__ */ jsx62(Box50, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
35081
+ /* @__PURE__ */ jsx62(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
34889
35082
  ] }, name);
34890
35083
  }),
34891
- /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", marginTop: 1, children: [
34892
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
34893
- panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs49(Box49, { gap: 1, paddingLeft: 1, children: [
34894
- /* @__PURE__ */ jsx61(Box49, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: row.label }) }),
34895
- /* @__PURE__ */ jsx61(Text51, { color: TONE_COLOR[row.tone], children: row.value })
35084
+ /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", marginTop: 1, children: [
35085
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
35086
+ panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs50(Box50, { gap: 1, paddingLeft: 1, children: [
35087
+ /* @__PURE__ */ jsx62(Box50, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: row.label }) }),
35088
+ /* @__PURE__ */ jsx62(Text52, { color: TONE_COLOR[row.tone], children: row.value })
34896
35089
  ] }, row.label))
34897
35090
  ] }),
34898
- notice && /* @__PURE__ */ jsxs49(Fragment18, { children: [
34899
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34900
- /* @__PURE__ */ jsxs49(Text51, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
35091
+ notice && /* @__PURE__ */ jsxs50(Fragment19, { children: [
35092
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35093
+ /* @__PURE__ */ jsxs50(Text52, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
34901
35094
  notice.kind === "success" ? "\u2713" : "\u2717",
34902
35095
  " ",
34903
35096
  notice.text
34904
35097
  ] })
34905
35098
  ] }),
34906
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
34907
- /* @__PURE__ */ jsx61(
35099
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
35100
+ /* @__PURE__ */ jsx62(
34908
35101
  ControlHints,
34909
35102
  {
34910
35103
  hints: [
@@ -34969,8 +35162,8 @@ var init_project_store = __esm({
34969
35162
 
34970
35163
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
34971
35164
  import { useEffect as useEffect33, useRef as useRef21, useState as useState35 } from "react";
34972
- import { Box as Box50, Text as Text52, useInput as useInput16 } from "ink";
34973
- import { Fragment as Fragment19, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
35165
+ import { Box as Box51, Text as Text53, useInput as useInput16 } from "ink";
35166
+ import { Fragment as Fragment20, jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
34974
35167
  function debugFields(config) {
34975
35168
  return {
34976
35169
  space_id: config?.spaceId ?? "",
@@ -35039,17 +35232,17 @@ function ProjectScreen({ onDone }) {
35039
35232
  }
35040
35233
  });
35041
35234
  if (!config) {
35042
- return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35043
- /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
35044
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
35045
- loadError ? /* @__PURE__ */ jsxs50(Fragment19, { children: [
35046
- /* @__PURE__ */ jsxs50(Text52, { color: PALETTE.error, children: [
35235
+ return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35236
+ /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
35237
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
35238
+ loadError ? /* @__PURE__ */ jsxs51(Fragment20, { children: [
35239
+ /* @__PURE__ */ jsxs51(Text53, { color: PALETTE.error, children: [
35047
35240
  "\u2717 Could not read the settings: ",
35048
35241
  loadError
35049
35242
  ] }),
35050
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
35051
- /* @__PURE__ */ jsx62(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
35052
- ] }) : /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "Loading..." })
35243
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
35244
+ /* @__PURE__ */ jsx63(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
35245
+ ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.accent, children: "Loading..." })
35053
35246
  ] });
35054
35247
  }
35055
35248
  const save = () => {
@@ -35070,7 +35263,7 @@ function ProjectScreen({ onDone }) {
35070
35263
  endVisit(config);
35071
35264
  onDone();
35072
35265
  };
35073
- return /* @__PURE__ */ jsx62(
35266
+ return /* @__PURE__ */ jsx63(
35074
35267
  FieldForm,
35075
35268
  {
35076
35269
  title: "Settings \u203A Configuration \u203A Project",
@@ -35116,8 +35309,8 @@ var init_ProjectScreen = __esm({
35116
35309
 
35117
35310
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
35118
35311
  import { useState as useState36 } from "react";
35119
- import { Box as Box51, Text as Text53, useInput as useInput17 } from "ink";
35120
- import { jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
35312
+ import { Box as Box52, Text as Text54, useInput as useInput17 } from "ink";
35313
+ import { jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
35121
35314
  function ConfigurationScreen({ onDone }) {
35122
35315
  const [focus, setFocus] = useState36(0);
35123
35316
  const [open, setOpen] = useState36(null);
@@ -35138,18 +35331,18 @@ function ConfigurationScreen({ onDone }) {
35138
35331
  }
35139
35332
  if (key.escape || input === "q") onDone();
35140
35333
  });
35141
- if (open === "project") return /* @__PURE__ */ jsx63(ProjectScreen, { onDone: close });
35142
- if (open === "agents") return /* @__PURE__ */ jsx63(AgentsScreen, { onDone: close });
35143
- return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35144
- /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Configuration" }),
35145
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
35146
- SECTIONS.map((section, index) => /* @__PURE__ */ jsxs51(Box51, { gap: 1, children: [
35147
- /* @__PURE__ */ jsx63(Text53, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
35148
- /* @__PURE__ */ jsx63(Box51, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx63(Text53, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
35149
- /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: section.description })
35334
+ if (open === "project") return /* @__PURE__ */ jsx64(ProjectScreen, { onDone: close });
35335
+ if (open === "agents") return /* @__PURE__ */ jsx64(AgentsScreen, { onDone: close });
35336
+ return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35337
+ /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Configuration" }),
35338
+ /* @__PURE__ */ jsx64(Text54, { children: " " }),
35339
+ SECTIONS.map((section, index) => /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
35340
+ /* @__PURE__ */ jsx64(Text54, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
35341
+ /* @__PURE__ */ jsx64(Box52, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx64(Text54, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
35342
+ /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: section.description })
35150
35343
  ] }, section.id)),
35151
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
35152
- /* @__PURE__ */ jsx63(
35344
+ /* @__PURE__ */ jsx64(Text54, { children: " " }),
35345
+ /* @__PURE__ */ jsx64(
35153
35346
  ControlHints,
35154
35347
  {
35155
35348
  hints: [
@@ -35182,8 +35375,8 @@ var init_ConfigurationScreen = __esm({
35182
35375
 
35183
35376
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
35184
35377
  import { useEffect as useEffect34, useState as useState37 } from "react";
35185
- import { Box as Box52, Text as Text54, useInput as useInput18 } from "ink";
35186
- import { Fragment as Fragment20, jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
35378
+ import { Box as Box53, Text as Text55, useInput as useInput18 } from "ink";
35379
+ import { Fragment as Fragment21, jsx as jsx65, jsxs as jsxs53 } from "react/jsx-runtime";
35187
35380
  function OptInAnalyticsScreen({ onDone }) {
35188
35381
  const [loading, setLoading] = useState37(true);
35189
35382
  const [enabled, setEnabled] = useState37(true);
@@ -35214,21 +35407,21 @@ function OptInAnalyticsScreen({ onDone }) {
35214
35407
  onDone();
35215
35408
  }
35216
35409
  });
35217
- return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35218
- /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
35219
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
35220
- loading ? /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs52(Fragment20, { children: [
35221
- /* @__PURE__ */ jsxs52(Text54, { children: [
35410
+ return /* @__PURE__ */ jsxs53(Box53, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35411
+ /* @__PURE__ */ jsx65(Text55, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
35412
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
35413
+ loading ? /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs53(Fragment21, { children: [
35414
+ /* @__PURE__ */ jsxs53(Text55, { children: [
35222
35415
  "Share anonymous usage data:",
35223
35416
  " ",
35224
- /* @__PURE__ */ jsx64(Text54, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
35417
+ /* @__PURE__ */ jsx65(Text55, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
35225
35418
  ] }),
35226
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
35227
- /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
35228
- /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
35419
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
35420
+ /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
35421
+ /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
35229
35422
  ] }),
35230
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
35231
- /* @__PURE__ */ jsx64(
35423
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
35424
+ /* @__PURE__ */ jsx65(
35232
35425
  ControlHints,
35233
35426
  {
35234
35427
  hints: [
@@ -35251,8 +35444,8 @@ var init_screen12 = __esm({
35251
35444
 
35252
35445
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
35253
35446
  import { useEffect as useEffect35, useRef as useRef22, useState as useState38 } from "react";
35254
- import { Box as Box53, Text as Text55, useInput as useInput19 } from "ink";
35255
- import { Fragment as Fragment21, jsx as jsx65, jsxs as jsxs53 } from "react/jsx-runtime";
35447
+ import { Box as Box54, Text as Text56, useInput as useInput19 } from "ink";
35448
+ import { Fragment as Fragment22, jsx as jsx66, jsxs as jsxs54 } from "react/jsx-runtime";
35256
35449
  function DebugModeScreen({ onDone }) {
35257
35450
  const [setting, setSetting] = useState38(null);
35258
35451
  const [focus, setFocus] = useState38("enabled");
@@ -35328,25 +35521,25 @@ function DebugModeScreen({ onDone }) {
35328
35521
  onDone();
35329
35522
  }
35330
35523
  });
35331
- const marker = (row) => /* @__PURE__ */ jsx65(Text55, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
35332
- const label = (row, text) => /* @__PURE__ */ jsx65(Text55, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
35333
- return /* @__PURE__ */ jsxs53(Box53, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35334
- /* @__PURE__ */ jsx65(Text55, { bold: true, children: "Settings \u203A Debug Mode" }),
35335
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
35336
- setting ? /* @__PURE__ */ jsxs53(Fragment21, { children: [
35337
- /* @__PURE__ */ jsxs53(Box53, { gap: 1, children: [
35524
+ const marker = (row) => /* @__PURE__ */ jsx66(Text56, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
35525
+ const label = (row, text) => /* @__PURE__ */ jsx66(Text56, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
35526
+ return /* @__PURE__ */ jsxs54(Box54, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
35527
+ /* @__PURE__ */ jsx66(Text56, { bold: true, children: "Settings \u203A Debug Mode" }),
35528
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
35529
+ setting ? /* @__PURE__ */ jsxs54(Fragment22, { children: [
35530
+ /* @__PURE__ */ jsxs54(Box54, { gap: 1, children: [
35338
35531
  marker("enabled"),
35339
35532
  label("enabled", "Debug logging:"),
35340
- /* @__PURE__ */ jsx65(Text55, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
35533
+ /* @__PURE__ */ jsx66(Text56, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
35341
35534
  ] }),
35342
- /* @__PURE__ */ jsxs53(Box53, { gap: 1, children: [
35535
+ /* @__PURE__ */ jsxs54(Box54, { gap: 1, children: [
35343
35536
  marker("retentionDays"),
35344
35537
  label("retentionDays", "Delete logs after:"),
35345
35538
  RETENTION_CHOICES.map((days) => {
35346
35539
  const highlighted = focus === "retentionDays" && days === pending;
35347
35540
  const saved = days === setting.retentionDays;
35348
- return /* @__PURE__ */ jsx65(
35349
- Text55,
35541
+ return /* @__PURE__ */ jsx66(
35542
+ Text56,
35350
35543
  {
35351
35544
  bold: highlighted || saved,
35352
35545
  underline: highlighted,
@@ -35357,15 +35550,15 @@ function DebugModeScreen({ onDone }) {
35357
35550
  );
35358
35551
  })
35359
35552
  ] }),
35360
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
35361
- notice ? /* @__PURE__ */ jsxs53(Text55, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
35553
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
35554
+ notice ? /* @__PURE__ */ jsxs54(Text56, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
35362
35555
  notice.kind === "success" ? "\u2713" : "\u2717",
35363
35556
  " ",
35364
35557
  notice.text
35365
- ] }) : /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
35366
- ] }) : /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Loading\u2026" }),
35367
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
35368
- /* @__PURE__ */ jsx65(
35558
+ ] }) : /* @__PURE__ */ jsx66(Text56, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
35559
+ ] }) : /* @__PURE__ */ jsx66(Text56, { color: PALETTE.muted, children: "Loading\u2026" }),
35560
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
35561
+ /* @__PURE__ */ jsx66(
35369
35562
  ControlHints,
35370
35563
  {
35371
35564
  hints: [
@@ -35403,7 +35596,7 @@ __export(app_exports, {
35403
35596
  runApp: () => runApp
35404
35597
  });
35405
35598
  import { useEffect as useEffect36, useState as useState39 } from "react";
35406
- import { Fragment as Fragment22, jsx as jsx66 } from "react/jsx-runtime";
35599
+ import { Fragment as Fragment23, jsx as jsx67 } from "react/jsx-runtime";
35407
35600
  function App({ importOptions, inkClear }) {
35408
35601
  const [screen, setScreen] = useState39("start");
35409
35602
  const [importExitCode, setImportExitCode] = useState39();
@@ -35604,9 +35797,9 @@ function App({ importOptions, inkClear }) {
35604
35797
  const content = (() => {
35605
35798
  switch (screen) {
35606
35799
  case "import":
35607
- if (showImportResult) return /* @__PURE__ */ jsx66(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
35800
+ if (showImportResult) return /* @__PURE__ */ jsx67(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
35608
35801
  if (flow && flowStart) {
35609
- return /* @__PURE__ */ jsx66(
35802
+ return /* @__PURE__ */ jsx67(
35610
35803
  FlowScreen,
35611
35804
  {
35612
35805
  state: flow.state,
@@ -35617,7 +35810,7 @@ function App({ importOptions, inkClear }) {
35617
35810
  );
35618
35811
  }
35619
35812
  if (tokenReview) {
35620
- return /* @__PURE__ */ jsx66(
35813
+ return /* @__PURE__ */ jsx67(
35621
35814
  TokenReviewScreen,
35622
35815
  {
35623
35816
  tokensPath: tokenReview.tokensPath,
@@ -35626,15 +35819,15 @@ function App({ importOptions, inkClear }) {
35626
35819
  }
35627
35820
  );
35628
35821
  }
35629
- if (importDefaults === void 0) return /* @__PURE__ */ jsx66(Fragment22, {});
35822
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx67(Fragment23, {});
35630
35823
  if (target === void 0) {
35631
- return /* @__PURE__ */ jsx66(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
35824
+ return /* @__PURE__ */ jsx67(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
35632
35825
  }
35633
35826
  const inputStep = currentInputStep(target, answers);
35634
35827
  if (!extractionRun && !tokensOnlyRun && inputStep !== "credentials") {
35635
35828
  switch (inputStep) {
35636
35829
  case "project":
35637
- return /* @__PURE__ */ jsx66(
35830
+ return /* @__PURE__ */ jsx67(
35638
35831
  WelcomeScreen,
35639
35832
  {
35640
35833
  mode: target,
@@ -35644,7 +35837,7 @@ function App({ importOptions, inkClear }) {
35644
35837
  }
35645
35838
  );
35646
35839
  case "token-file":
35647
- return /* @__PURE__ */ jsx66(
35840
+ return /* @__PURE__ */ jsx67(
35648
35841
  TokenInputScreen,
35649
35842
  {
35650
35843
  mode: target,
@@ -35654,7 +35847,7 @@ function App({ importOptions, inkClear }) {
35654
35847
  }
35655
35848
  );
35656
35849
  case "path-validation":
35657
- return /* @__PURE__ */ jsx66(
35850
+ return /* @__PURE__ */ jsx67(
35658
35851
  PathValidationScreen,
35659
35852
  {
35660
35853
  mode: target,
@@ -35669,9 +35862,9 @@ function App({ importOptions, inkClear }) {
35669
35862
  }
35670
35863
  if (tokensOnlyRun) {
35671
35864
  if (tokensOnly?.status === "done" && !tokensOnly.result.ok) {
35672
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
35865
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
35673
35866
  }
35674
- return /* @__PURE__ */ jsx66(
35867
+ return /* @__PURE__ */ jsx67(
35675
35868
  RunningStep,
35676
35869
  {
35677
35870
  step: "generation",
@@ -35682,19 +35875,26 @@ function App({ importOptions, inkClear }) {
35682
35875
  }
35683
35876
  if (extractionRun) {
35684
35877
  if (extraction?.status === "done" && !extraction.result.ok) {
35685
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
35878
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
35686
35879
  }
35687
35880
  if (extraction?.status === "running") {
35688
- return /* @__PURE__ */ jsx66(ExtractionScreen, { progress: extraction.progress, agent: extractionRun.input.agent });
35881
+ return /* @__PURE__ */ jsx67(
35882
+ ExtractionScreen,
35883
+ {
35884
+ progress: extraction.progress,
35885
+ agent: extractionRun.input.agent,
35886
+ rowMs: extraction.rowMs
35887
+ }
35888
+ );
35689
35889
  }
35690
- return /* @__PURE__ */ jsx66(Fragment22, {});
35890
+ return /* @__PURE__ */ jsx67(Fragment23, {});
35691
35891
  }
35692
35892
  if (scopeRun && scopeFlow) {
35693
35893
  if (scopeFlow.status === "failed") {
35694
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
35894
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
35695
35895
  }
35696
35896
  if (scopeFlow.status === "deciding") {
35697
- return /* @__PURE__ */ jsx66(
35897
+ return /* @__PURE__ */ jsx67(
35698
35898
  ScopeGateScreen,
35699
35899
  {
35700
35900
  components: scopeFlow.load.components,
@@ -35705,22 +35905,23 @@ function App({ importOptions, inkClear }) {
35705
35905
  );
35706
35906
  }
35707
35907
  if (generation?.status === "done" && !generation.result.ok) {
35708
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
35908
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
35709
35909
  }
35710
35910
  if (generation?.status === "running") {
35711
- return /* @__PURE__ */ jsx66(
35911
+ return /* @__PURE__ */ jsx67(
35712
35912
  GenerationScreen,
35713
35913
  {
35714
35914
  progress: generation.progress,
35715
35915
  agent: scopeRun.input.agent,
35716
35916
  acceptedCount: scopeFlow.decisions.accepted.length,
35717
- hasTokens: scopeRun.extraction.tokensPath !== ""
35917
+ hasTokens: scopeRun.extraction.tokensPath !== "",
35918
+ rowMs: generation.rowMs
35718
35919
  }
35719
35920
  );
35720
35921
  }
35721
- return /* @__PURE__ */ jsx66(Fragment22, {});
35922
+ return /* @__PURE__ */ jsx67(Fragment23, {});
35722
35923
  }
35723
- return /* @__PURE__ */ jsx66(
35924
+ return /* @__PURE__ */ jsx67(
35724
35925
  CredentialsScreen,
35725
35926
  {
35726
35927
  mode: target,
@@ -35731,27 +35932,27 @@ function App({ importOptions, inkClear }) {
35731
35932
  }
35732
35933
  );
35733
35934
  case "help":
35734
- return /* @__PURE__ */ jsx66(HelpScreen, { onDone: goToStart });
35935
+ return /* @__PURE__ */ jsx67(HelpScreen, { onDone: goToStart });
35735
35936
  case "settings":
35736
- return /* @__PURE__ */ jsx66(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
35937
+ return /* @__PURE__ */ jsx67(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
35737
35938
  case "settings-configuration":
35738
- return /* @__PURE__ */ jsx66(ConfigurationScreen, { onDone: goToSettings });
35939
+ return /* @__PURE__ */ jsx67(ConfigurationScreen, { onDone: goToSettings });
35739
35940
  case "settings-opt-in-analytics":
35740
- return /* @__PURE__ */ jsx66(OptInAnalyticsScreen, { onDone: goToSettings });
35941
+ return /* @__PURE__ */ jsx67(OptInAnalyticsScreen, { onDone: goToSettings });
35741
35942
  case "settings-debug-mode":
35742
- return /* @__PURE__ */ jsx66(DebugModeScreen, { onDone: goToSettings });
35943
+ return /* @__PURE__ */ jsx67(DebugModeScreen, { onDone: goToSettings });
35743
35944
  case "start":
35744
- return /* @__PURE__ */ jsx66(HomeScreen, { onNavigate: setScreen });
35945
+ return /* @__PURE__ */ jsx67(HomeScreen, { onNavigate: setScreen });
35745
35946
  }
35746
35947
  })();
35747
- return /* @__PURE__ */ jsx66(HiddenStepsContext.Provider, { value: target === "tokens" ? TOKENS_ONLY_HIDDEN_STEPS : [], children: content });
35948
+ return /* @__PURE__ */ jsx67(HiddenStepsContext.Provider, { value: target === "tokens" ? TOKENS_ONLY_HIDDEN_STEPS : [], children: content });
35748
35949
  }
35749
35950
  async function runApp(renderApp, importOptions) {
35750
35951
  const inkClear = () => {
35751
35952
  instance.clear?.();
35752
35953
  process.stdout.write("\x1B[H\x1B[0J");
35753
35954
  };
35754
- const instance = renderApp(/* @__PURE__ */ jsx66(App, { importOptions, inkClear }));
35955
+ const instance = renderApp(/* @__PURE__ */ jsx67(App, { importOptions, inkClear }));
35755
35956
  await instance.waitUntilExit();
35756
35957
  }
35757
35958
  var TOKENS_ONLY_HIDDEN_STEPS;