@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/app.js CHANGED
@@ -2711,7 +2711,7 @@ function ImportScreen({ exitCode, onDone }) {
2711
2711
 
2712
2712
  // packages/experience-design-system-cli/src/tui/import/steps/00-preflight/screen.tsx
2713
2713
  import { useEffect as useEffect4, useRef, useState as useState4 } from "react";
2714
- import { Box as Box9, Text as Text9 } from "ink";
2714
+ import { Box as Box10, Text as Text10 } from "ink";
2715
2715
  init_debug_store();
2716
2716
 
2717
2717
  // packages/experience-design-system-cli/src/tui/import/steps/00-preflight/controls.ts
@@ -3050,10 +3050,23 @@ function OverviewBox({ steps }) {
3050
3050
  }
3051
3051
 
3052
3052
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
3053
- import { Box as Box8, Text as Text8 } from "ink";
3054
- import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
3053
+ import { Box as Box9, Text as Text9 } from "ink";
3054
+ import { ProgressBar, Spinner as Spinner2, ThemeProvider } from "@inkjs/ui";
3055
3055
 
3056
3056
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/logic.ts
3057
+ function lineState(line) {
3058
+ if (line.state) return line.state;
3059
+ return line.complete ? "done" : "running";
3060
+ }
3061
+ function formatDuration(ms) {
3062
+ return ms < 1e3 ? "<1s" : formatElapsed(Math.round(ms / 1e3));
3063
+ }
3064
+ function trackFinished(previous, rows, elapsedMs) {
3065
+ return rows.map((row, index) => previous[index] ?? (lineState(row) === "running" ? void 0 : elapsedMs));
3066
+ }
3067
+ function withTimes(rows, rowMs) {
3068
+ return rows.map((row, index) => rowMs[index] === void 0 ? row : { ...row, ms: rowMs[index] });
3069
+ }
3057
3070
  function progressPercent(progress) {
3058
3071
  if (progress.total <= 0) return 0;
3059
3072
  return Math.min(100, Math.max(0, Math.round(progress.done / progress.total * 100)));
@@ -3087,48 +3100,115 @@ function useElapsed() {
3087
3100
  return formatElapsed(seconds2);
3088
3101
  }
3089
3102
 
3103
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/activity-panel.tsx
3104
+ import { Box as Box8, Text as Text8 } from "ink";
3105
+ import { Spinner } from "@inkjs/ui";
3106
+
3107
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/activity.ts
3108
+ var BESIDE_MIN_COLUMNS = 110;
3109
+ var PANEL_COLUMNS = 46;
3110
+ function panelLayout(columns) {
3111
+ return columns >= BESIDE_MIN_COLUMNS ? "beside" : "below";
3112
+ }
3113
+ var PRIORITY = { failed: 0, running: 1, done: 2 };
3114
+ function visibleActivity(items, max) {
3115
+ if (items.length <= max) return { shown: [...items], hidden: 0 };
3116
+ 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);
3117
+ return { shown: chosen.map((index) => items[index]), hidden: items.length - chosen.length };
3118
+ }
3119
+ function truncate(text, max) {
3120
+ return text.length <= max ? text : `${text.slice(0, Math.max(0, max - 1))}\u2026`;
3121
+ }
3122
+
3123
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/activity-panel.tsx
3124
+ import { Fragment, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
3125
+ var MAX_ROWS = 8;
3126
+ var ICON = { done: "\u2713", failed: "\u2717" };
3127
+ var COLOR = { done: PALETTE.success, failed: PALETTE.error };
3128
+ function Row({ item, width }) {
3129
+ const time = item.ms !== void 0 ? formatDuration(item.ms) : "";
3130
+ const note = item.detail ? ` ${item.detail}` : "";
3131
+ const name = truncate(`${item.name}${note}`, Math.max(8, width - 12));
3132
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
3133
+ /* @__PURE__ */ jsxs8(Box8, { gap: 1, children: [
3134
+ item.state === "running" ? /* @__PURE__ */ jsx8(Spinner, {}) : /* @__PURE__ */ jsx8(Text8, { color: COLOR[item.state], children: ICON[item.state] }),
3135
+ /* @__PURE__ */ jsx8(Text8, { color: item.state === "failed" ? PALETTE.error : PALETTE.muted, children: name }),
3136
+ time && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: time })
3137
+ ] }),
3138
+ item.state === "failed" && item.error && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.error, children: ` ${truncate(item.error, Math.max(12, width - 6))}` })
3139
+ ] });
3140
+ }
3141
+ function ActivityPanel({ title, items }) {
3142
+ const columns = useTerminalWidth();
3143
+ const width = panelLayout(columns) === "beside" ? PANEL_COLUMNS : Math.max(30, columns - 4);
3144
+ const { shown, hidden } = visibleActivity(items, MAX_ROWS);
3145
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.muted, paddingX: 1, width, children: [
3146
+ /* @__PURE__ */ jsx8(Text8, { bold: true, children: title }),
3147
+ shown.map((item, index) => /* @__PURE__ */ jsx8(Row, { item, width }, `${index}-${item.name}`)),
3148
+ hidden > 0 && /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: `+ ${hidden} more` })
3149
+ ] });
3150
+ }
3151
+ function AsideLayout({
3152
+ aside,
3153
+ children
3154
+ }) {
3155
+ const columns = useTerminalWidth();
3156
+ if (!aside) return /* @__PURE__ */ jsx8(Fragment, { children });
3157
+ const beside = panelLayout(columns) === "beside";
3158
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: beside ? "row" : "column", alignItems: "flex-start", children: [
3159
+ children,
3160
+ /* @__PURE__ */ jsx8(Box8, { paddingX: beside ? 0 : 2, paddingBottom: 1, children: aside })
3161
+ ] });
3162
+ }
3163
+
3090
3164
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
3091
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
3165
+ import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
3166
+ var STATE_ICON = { done: "\u2713", warning: "!", failed: "\u2717" };
3167
+ var STATE_COLOR = { done: PALETTE.success, warning: PALETTE.warning, failed: PALETTE.error };
3168
+ var textColor = (state2) => state2 === "warning" || state2 === "failed" ? STATE_COLOR[state2] : PALETTE.muted;
3092
3169
  function Line({ line }) {
3093
3170
  if (line.progress) {
3094
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, children: [
3095
- /* @__PURE__ */ jsxs8(Box8, { gap: 2, children: [
3096
- /* @__PURE__ */ jsx8(Box8, { width: 40, children: /* @__PURE__ */ jsx8(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx8(ProgressBar, { value: progressPercent(line.progress) }) }) }),
3097
- /* @__PURE__ */ jsxs8(Text8, { color: PALETTE.muted, children: [
3171
+ return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, children: [
3172
+ /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
3173
+ /* @__PURE__ */ jsx9(Box9, { width: 40, children: /* @__PURE__ */ jsx9(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx9(ProgressBar, { value: progressPercent(line.progress) }) }) }),
3174
+ /* @__PURE__ */ jsxs9(Text9, { color: PALETTE.muted, children: [
3098
3175
  line.progress.done,
3099
3176
  "/",
3100
3177
  line.progress.total
3101
3178
  ] })
3102
3179
  ] }),
3103
- /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: line.text })
3180
+ /* @__PURE__ */ jsx9(Text9, { color: textColor(lineState(line)), children: line.text })
3104
3181
  ] });
3105
3182
  }
3106
- return /* @__PURE__ */ jsxs8(Box8, { gap: 1, children: [
3107
- line.complete ? /* @__PURE__ */ jsx8(Text8, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx8(Spinner, {}),
3108
- /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: line.text })
3183
+ const state2 = lineState(line);
3184
+ return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
3185
+ state2 === "running" ? /* @__PURE__ */ jsx9(Spinner2, {}) : /* @__PURE__ */ jsx9(Text9, { color: STATE_COLOR[state2], children: STATE_ICON[state2] }),
3186
+ /* @__PURE__ */ jsx9(Text9, { color: textColor(state2), children: line.text }),
3187
+ line.ms !== void 0 && /* @__PURE__ */ jsx9(Text9, { color: PALETTE.muted, children: formatDuration(line.ms) })
3109
3188
  ] });
3110
3189
  }
3111
3190
  function RunningStep({
3112
3191
  step,
3113
3192
  description,
3114
- lines = [{ text: "Running..." }]
3193
+ lines = [{ text: "Running..." }],
3194
+ aside
3115
3195
  }) {
3116
3196
  const elapsed = useElapsed();
3117
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
3118
- /* @__PURE__ */ jsx8(StepHeader, { step }),
3119
- /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3120
- /* @__PURE__ */ jsx8(Text8, { children: description }),
3121
- /* @__PURE__ */ jsx8(Box8, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx8(Line, { line }, index)) }),
3122
- /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: /* @__PURE__ */ jsxs8(Text8, { color: PALETTE.muted, children: [
3197
+ return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
3198
+ /* @__PURE__ */ jsx9(StepHeader, { step }),
3199
+ /* @__PURE__ */ jsx9(AsideLayout, { aside, children: /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3200
+ /* @__PURE__ */ jsx9(Text9, { children: description }),
3201
+ /* @__PURE__ */ jsx9(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx9(Line, { line }, index)) }),
3202
+ /* @__PURE__ */ jsx9(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text9, { color: PALETTE.muted, children: [
3123
3203
  "Elapsed: ",
3124
3204
  elapsed
3125
3205
  ] }) })
3126
- ] })
3206
+ ] }) })
3127
3207
  ] });
3128
3208
  }
3129
3209
 
3130
3210
  // packages/experience-design-system-cli/src/tui/import/steps/00-preflight/screen.tsx
3131
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
3211
+ import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
3132
3212
  var optionAt = (index) => IMPORT_TARGET_OPTIONS[index].target;
3133
3213
  function PreflightScreen({ onChoose, onQuit }) {
3134
3214
  const [focus, setFocus] = useState4(0);
@@ -3158,33 +3238,33 @@ function PreflightScreen({ onChoose, onQuit }) {
3158
3238
  onQuit();
3159
3239
  };
3160
3240
  usePreflightControls({ focus, onFocus: moveTo, onChoose: choose, onQuit: quit });
3161
- return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
3162
- /* @__PURE__ */ jsx9(StepHeader, { step: "setup" }),
3163
- /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3164
- /* @__PURE__ */ jsx9(Text9, { bold: true, color: PALETTE.text, children: "What do you want to import?" }),
3165
- /* @__PURE__ */ jsx9(Box9, { flexDirection: "column", children: IMPORT_TARGET_OPTIONS.map((option, index) => {
3241
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3242
+ /* @__PURE__ */ jsx10(StepHeader, { step: "setup" }),
3243
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3244
+ /* @__PURE__ */ jsx10(Text10, { bold: true, color: PALETTE.text, children: "What do you want to import?" }),
3245
+ /* @__PURE__ */ jsx10(Box10, { flexDirection: "column", children: IMPORT_TARGET_OPTIONS.map((option, index) => {
3166
3246
  const focused = index === focus;
3167
- return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
3168
- /* @__PURE__ */ jsx9(Text9, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
3169
- /* @__PURE__ */ jsx9(Text9, { bold: focused, color: focused ? PALETTE.accent : void 0, children: option.label })
3247
+ return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
3248
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
3249
+ /* @__PURE__ */ jsx10(Text10, { bold: focused, color: focused ? PALETTE.accent : void 0, children: option.label })
3170
3250
  ] }, option.target);
3171
3251
  }) }),
3172
- /* @__PURE__ */ jsx9(OverviewBox, { steps: overviewFor(optionAt(focus)) }),
3173
- /* @__PURE__ */ jsx9(ControlHints, { hints: PREFLIGHT_CONTROLS })
3252
+ /* @__PURE__ */ jsx10(OverviewBox, { steps: overviewFor(optionAt(focus)) }),
3253
+ /* @__PURE__ */ jsx10(ControlHints, { hints: PREFLIGHT_CONTROLS })
3174
3254
  ] })
3175
3255
  ] });
3176
3256
  }
3177
3257
 
3178
3258
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
3179
3259
  import { useEffect as useEffect5, useRef as useRef3, useState as useState5 } from "react";
3180
- import { Box as Box10, Text as Text10 } from "ink";
3260
+ import { Box as Box11, Text as Text11 } from "ink";
3181
3261
  init_debug_store();
3182
3262
 
3183
3263
  // packages/experience-design-system-cli/src/tui/shared/components/ClearableTextInput.tsx
3184
3264
  import { useRef as useRef2 } from "react";
3185
3265
  import { useInput as useInput6 } from "ink";
3186
3266
  import TextInput from "ink-text-input";
3187
- import { jsx as jsx10 } from "react/jsx-runtime";
3267
+ import { jsx as jsx11 } from "react/jsx-runtime";
3188
3268
  function isClearKey(input, key) {
3189
3269
  return key.ctrl && input === "d";
3190
3270
  }
@@ -3198,7 +3278,7 @@ function ClearableTextInput({ onChange, ...props }) {
3198
3278
  }, 0);
3199
3279
  onChange("");
3200
3280
  });
3201
- return /* @__PURE__ */ jsx10(
3281
+ return /* @__PURE__ */ jsx11(
3202
3282
  TextInput,
3203
3283
  {
3204
3284
  ...props,
@@ -3234,7 +3314,7 @@ function useWelcomeControls(onQuit) {
3234
3314
  }
3235
3315
 
3236
3316
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
3237
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
3317
+ import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
3238
3318
  function WelcomeScreen({ mode, onContinue, onQuit, initialPath = "" }) {
3239
3319
  const [projectPath, setProjectPath] = useState5(initialPath);
3240
3320
  const visit = useRef3({ emptySubmits: 0 }).current;
@@ -3276,25 +3356,25 @@ function WelcomeScreen({ mode, onContinue, onQuit, initialPath = "" }) {
3276
3356
  });
3277
3357
  onContinue(path5);
3278
3358
  };
3279
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3280
- /* @__PURE__ */ jsx11(StepHeader, { step: "setup" }),
3281
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3282
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
3283
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.text, children: "Where is your component library?" }),
3284
- /* @__PURE__ */ jsxs10(Box10, { children: [
3285
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "? " }),
3286
- /* @__PURE__ */ jsx11(Text10, { children: "Project path: " }),
3287
- /* @__PURE__ */ jsx11(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3359
+ return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3360
+ /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
3361
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3362
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, children: [
3363
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.text, children: "Where is your component library?" }),
3364
+ /* @__PURE__ */ jsxs11(Box11, { children: [
3365
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.accent, children: "? " }),
3366
+ /* @__PURE__ */ jsx12(Text11, { children: "Project path: " }),
3367
+ /* @__PURE__ */ jsx12(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3288
3368
  ] })
3289
3369
  ] }),
3290
- /* @__PURE__ */ jsx11(Box10, { children: /* @__PURE__ */ jsx11(ControlHints, { hints: WELCOME_CONTROLS }) })
3370
+ /* @__PURE__ */ jsx12(Box11, { children: /* @__PURE__ */ jsx12(ControlHints, { hints: WELCOME_CONTROLS }) })
3291
3371
  ] })
3292
3372
  ] });
3293
3373
  }
3294
3374
 
3295
3375
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
3296
3376
  import { useEffect as useEffect6, useRef as useRef4, useState as useState6 } from "react";
3297
- import { Box as Box11, Text as Text11 } from "ink";
3377
+ import { Box as Box12, Text as Text12 } from "ink";
3298
3378
  init_debug_store();
3299
3379
 
3300
3380
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
@@ -3361,7 +3441,7 @@ function validateTokenPath(rawPath) {
3361
3441
  }
3362
3442
 
3363
3443
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
3364
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
3444
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
3365
3445
  var MAX_LOGGED_ATTEMPTS = 10;
3366
3446
  function TokenInputScreen({
3367
3447
  mode,
@@ -3425,36 +3505,36 @@ function TokenInputScreen({
3425
3505
  });
3426
3506
  onConfirm(check.path);
3427
3507
  };
3428
- return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3429
- /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
3430
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3431
- /* @__PURE__ */ jsx12(Text11, { bold: true, children: "Design tokens" }),
3432
- /* @__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)." }),
3433
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3434
- /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
3435
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.accent, children: "?" }),
3436
- /* @__PURE__ */ jsx12(Text11, { children: "Token path:" }),
3437
- /* @__PURE__ */ jsx12(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
3508
+ return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
3509
+ /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
3510
+ /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3511
+ /* @__PURE__ */ jsx13(Text12, { bold: true, children: "Design tokens" }),
3512
+ /* @__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)." }),
3513
+ /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
3514
+ /* @__PURE__ */ jsxs12(Box12, { gap: 1, children: [
3515
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.accent, children: "?" }),
3516
+ /* @__PURE__ */ jsx13(Text12, { children: "Token path:" }),
3517
+ /* @__PURE__ */ jsx13(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
3438
3518
  ] }),
3439
- failure && /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3440
- /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.error, children: [
3519
+ failure && /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
3520
+ /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
3441
3521
  "\u2717 ",
3442
3522
  failure.error
3443
3523
  ] }),
3444
- failure.resolvedPath && /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.muted, children: [
3524
+ failure.resolvedPath && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
3445
3525
  " Resolved to: ",
3446
3526
  failure.resolvedPath
3447
3527
  ] })
3448
3528
  ] })
3449
3529
  ] }),
3450
- /* @__PURE__ */ jsx12(Box11, { marginTop: 1, children: /* @__PURE__ */ jsx12(ControlHints, { hints: TOKEN_INPUT_CONTROLS }) })
3530
+ /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(ControlHints, { hints: TOKEN_INPUT_CONTROLS }) })
3451
3531
  ] })
3452
3532
  ] });
3453
3533
  }
3454
3534
 
3455
3535
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
3456
3536
  import { useEffect as useEffect7, useMemo, useState as useState7 } from "react";
3457
- import { Box as Box12, Text as Text12 } from "ink";
3537
+ import { Box as Box13, Text as Text13 } from "ink";
3458
3538
  init_debug_store();
3459
3539
 
3460
3540
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
@@ -18070,9 +18150,9 @@ function foldSvelteAndMdIntoOther(counts) {
18070
18150
  }
18071
18151
 
18072
18152
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
18073
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
18074
- function Row({ row }) {
18075
- return /* @__PURE__ */ jsxs12(Text12, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
18153
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
18154
+ function Row2({ row }) {
18155
+ return /* @__PURE__ */ jsxs13(Text13, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
18076
18156
  " \u2022 ",
18077
18157
  String(row.count).padStart(3),
18078
18158
  " ",
@@ -18081,12 +18161,12 @@ function Row({ row }) {
18081
18161
  }
18082
18162
  function Failure({ scan, path: path5 }) {
18083
18163
  const { headline, hints } = describeFailure(scan.failure, path5);
18084
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
18085
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
18164
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18165
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.error, children: [
18086
18166
  "\u2717 ",
18087
18167
  headline
18088
18168
  ] }),
18089
- hints.map((hint) => /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: hint }, hint))
18169
+ hints.map((hint) => /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: hint }, hint))
18090
18170
  ] });
18091
18171
  }
18092
18172
  function Summary({
@@ -18095,24 +18175,24 @@ function Summary({
18095
18175
  hasTokens
18096
18176
  }) {
18097
18177
  const { total, rows, warning } = summarize(scan.counts, { hasTokens });
18098
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, children: [
18099
- /* @__PURE__ */ jsxs12(Text12, { children: [
18178
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", gap: 1, children: [
18179
+ /* @__PURE__ */ jsxs13(Text13, { children: [
18100
18180
  "Scanned ",
18101
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: path5 })
18181
+ /* @__PURE__ */ jsx14(Text13, { bold: true, children: path5 })
18102
18182
  ] }),
18103
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
18104
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.success, children: [
18183
+ /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18184
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.success, children: [
18105
18185
  "\u2713 Found ",
18106
18186
  total,
18107
18187
  " files:"
18108
18188
  ] }),
18109
- rows.map((row) => /* @__PURE__ */ jsx13(Row, { row }, row.label))
18189
+ rows.map((row) => /* @__PURE__ */ jsx14(Row2, { row }, row.label))
18110
18190
  ] }),
18111
- warning && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.warning, children: [
18191
+ warning && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.warning, children: [
18112
18192
  "\u26A0 ",
18113
18193
  warning
18114
18194
  ] }),
18115
- /* @__PURE__ */ jsx13(Text12, { children: "Does this look right?" })
18195
+ /* @__PURE__ */ jsx14(Text13, { children: "Does this look right?" })
18116
18196
  ] });
18117
18197
  }
18118
18198
  function PathValidationScreen({
@@ -18159,30 +18239,30 @@ function PathValidationScreen({
18159
18239
  onBack();
18160
18240
  }
18161
18241
  });
18162
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
18163
- /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
18164
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
18165
- scan === void 0 && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
18242
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18243
+ /* @__PURE__ */ jsx14(StepHeader, { step: "setup" }),
18244
+ /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
18245
+ scan === void 0 && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.muted, children: [
18166
18246
  "Scanning ",
18167
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: resolvedPath }),
18247
+ /* @__PURE__ */ jsx14(Text13, { bold: true, children: resolvedPath }),
18168
18248
  "..."
18169
18249
  ] }),
18170
- scan?.ok === false && /* @__PURE__ */ jsx13(Failure, { scan, path: resolvedPath }),
18171
- scan?.ok === true && /* @__PURE__ */ jsx13(Summary, { scan, path: resolvedPath, hasTokens }),
18172
- /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(ControlHints, { hints: controlsFor(phase) }) })
18250
+ scan?.ok === false && /* @__PURE__ */ jsx14(Failure, { scan, path: resolvedPath }),
18251
+ scan?.ok === true && /* @__PURE__ */ jsx14(Summary, { scan, path: resolvedPath, hasTokens }),
18252
+ /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(ControlHints, { hints: controlsFor(phase) }) })
18173
18253
  ] })
18174
18254
  ] });
18175
18255
  }
18176
18256
 
18177
18257
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
18178
18258
  import { useEffect as useEffect8, useRef as useRef5, useState as useState9 } from "react";
18179
- import { Box as Box14, Text as Text14, useInput as useInput11 } from "ink";
18259
+ import { Box as Box15, Text as Text15, useInput as useInput11 } from "ink";
18180
18260
  init_debug_store();
18181
18261
 
18182
18262
  // packages/experience-design-system-cli/src/tui/shared/components/FieldForm.tsx
18183
18263
  import { useState as useState8 } from "react";
18184
- import { Box as Box13, Text as Text13, useInput as useInput10 } from "ink";
18185
- import { Fragment, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
18264
+ import { Box as Box14, Text as Text14, useInput as useInput10 } from "ink";
18265
+ import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
18186
18266
  function formLabelWidth(rows) {
18187
18267
  return Math.max(...rows.map((row) => row.label.length));
18188
18268
  }
@@ -18191,9 +18271,9 @@ function FormReadOnlyRow({
18191
18271
  labelWidth,
18192
18272
  children
18193
18273
  }) {
18194
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18195
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18196
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: label }) }),
18274
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18275
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
18276
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: label }) }),
18197
18277
  children
18198
18278
  ] });
18199
18279
  }
@@ -18280,23 +18360,23 @@ function FieldForm({
18280
18360
  setValueBeforeEdit(values[next.key]);
18281
18361
  setActive(active + 1);
18282
18362
  };
18283
- const pointer = (isActive) => /* @__PURE__ */ jsx14(Text13, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
18284
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18363
+ const pointer = (isActive) => /* @__PURE__ */ jsx15(Text14, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
18364
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
18285
18365
  header,
18286
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
18287
- /* @__PURE__ */ jsx14(Text13, { bold: true, children: title }),
18288
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18289
- subtitle && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: subtitle }),
18290
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18291
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18366
+ /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
18367
+ /* @__PURE__ */ jsx15(Text14, { bold: true, children: title }),
18368
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
18369
+ subtitle && /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: subtitle }),
18370
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
18371
+ /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
18292
18372
  fields2.map((field, index) => {
18293
18373
  const isActive = index === active;
18294
18374
  const value = values[field.key];
18295
18375
  const display = field.masked ? "\u2022".repeat(value.length) : value;
18296
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18376
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18297
18377
  pointer(isActive),
18298
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
18299
- isActive && editing ? /* @__PURE__ */ jsx14(
18378
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
18379
+ isActive && editing ? /* @__PURE__ */ jsx15(
18300
18380
  ClearableTextInput,
18301
18381
  {
18302
18382
  value,
@@ -18304,34 +18384,34 @@ function FieldForm({
18304
18384
  onSubmit: submitField,
18305
18385
  mask: field.masked ? "\u2022" : void 0
18306
18386
  }
18307
- ) : display ? /* @__PURE__ */ jsx14(Text13, { bold: true, children: display }) : (
18387
+ ) : display ? /* @__PURE__ */ jsx15(Text14, { bold: true, children: display }) : (
18308
18388
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
18309
18389
  // text starts in the same column as every other row's.
18310
- /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
18390
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
18311
18391
  ),
18312
- display && field.hint && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint })
18392
+ display && field.hint && /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: field.hint })
18313
18393
  ] }, field.key);
18314
18394
  }),
18315
18395
  actions.map((action, index) => {
18316
18396
  const isActive = fields2.length + index === active;
18317
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18397
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18318
18398
  pointer(isActive),
18319
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
18320
- /* @__PURE__ */ jsx14(Text13, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
18399
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
18400
+ /* @__PURE__ */ jsx15(Text14, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
18321
18401
  ] }, action.label);
18322
18402
  })
18323
18403
  ] }),
18324
- notice && /* @__PURE__ */ jsxs13(Fragment, { children: [
18325
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18326
- /* @__PURE__ */ jsxs13(Text13, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
18404
+ notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18405
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
18406
+ /* @__PURE__ */ jsxs14(Text14, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
18327
18407
  notice.kind === "success" ? "\u2713" : "\u2717",
18328
18408
  " ",
18329
18409
  notice.text
18330
18410
  ] })
18331
18411
  ] }),
18332
18412
  children,
18333
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18334
- /* @__PURE__ */ jsx14(
18413
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
18414
+ /* @__PURE__ */ jsx15(
18335
18415
  ControlHints,
18336
18416
  {
18337
18417
  hints: editing ? [
@@ -18467,7 +18547,7 @@ function toUserError(error, host) {
18467
18547
  }
18468
18548
 
18469
18549
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
18470
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
18550
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
18471
18551
  var FIELDS2 = [
18472
18552
  { key: "spaceId", label: "Space ID" },
18473
18553
  { key: "environmentId", label: "Environment ID" },
@@ -18596,24 +18676,24 @@ function CredentialsScreen({
18596
18676
  });
18597
18677
  const labelWidth = formLabelWidth([...FIELDS2, ...MENU]);
18598
18678
  const changed = !isUnchanged(normalize(values), initialValues);
18599
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
18600
- /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
18601
- /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
18602
- /* @__PURE__ */ jsx15(Text14, { bold: true, color: PALETTE.accent, children: "Contentful Credentials" }),
18603
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18604
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
18605
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18606
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Actions" }),
18679
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
18680
+ /* @__PURE__ */ jsx16(StepHeader, { step: "setup" }),
18681
+ /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
18682
+ /* @__PURE__ */ jsx16(Text15, { bold: true, color: PALETTE.accent, children: "Contentful Credentials" }),
18683
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18684
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
18685
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18686
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Actions" }),
18607
18687
  MENU.map((item, index) => {
18608
18688
  const focused = !editing && index === focus;
18609
- return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18610
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
18611
- /* @__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 }) }),
18612
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: item.description })
18689
+ return /* @__PURE__ */ jsxs15(Box15, { gap: 1, children: [
18690
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: focused ? "\u276F" : " " }),
18691
+ /* @__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 }) }),
18692
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: item.description })
18613
18693
  ] }, item.choice);
18614
18694
  }),
18615
- /* @__PURE__ */ jsxs14(
18616
- Box14,
18695
+ /* @__PURE__ */ jsxs15(
18696
+ Box15,
18617
18697
  {
18618
18698
  flexDirection: "column",
18619
18699
  marginTop: 1,
@@ -18623,15 +18703,15 @@ function CredentialsScreen({
18623
18703
  borderLeft: false,
18624
18704
  borderRight: false,
18625
18705
  children: [
18626
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Space" }),
18706
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Space" }),
18627
18707
  FIELDS2.map((field, index) => {
18628
18708
  const open = editing && index === active;
18629
18709
  const value = values[field.key];
18630
18710
  const display = field.masked ? "\u2022".repeat(value.length) : value;
18631
- return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18632
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: open ? "\u276F" : " " }),
18633
- /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: open, color: open ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
18634
- open ? /* @__PURE__ */ jsx15(
18711
+ return /* @__PURE__ */ jsxs15(Box15, { gap: 1, children: [
18712
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: open ? "\u276F" : " " }),
18713
+ /* @__PURE__ */ jsx16(Box15, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx16(Text15, { bold: open, color: open ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
18714
+ open ? /* @__PURE__ */ jsx16(
18635
18715
  ClearableTextInput,
18636
18716
  {
18637
18717
  value,
@@ -18642,35 +18722,35 @@ function CredentialsScreen({
18642
18722
  onSubmit: stopEditing,
18643
18723
  mask: field.masked ? "\u2022" : void 0
18644
18724
  }
18645
- ) : /* @__PURE__ */ jsx15(Text14, { color: display ? PALETTE.text : PALETTE.muted, children: display || (field.hint ?? "(empty)") })
18725
+ ) : /* @__PURE__ */ jsx16(Text15, { color: display ? PALETTE.text : PALETTE.muted, children: display || (field.hint ?? "(empty)") })
18646
18726
  ] }, field.key);
18647
18727
  })
18648
18728
  ]
18649
18729
  }
18650
18730
  ),
18651
- notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18652
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18653
- /* @__PURE__ */ jsxs14(Text14, { color: PALETTE.error, children: [
18731
+ notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
18732
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18733
+ /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.error, children: [
18654
18734
  "\u2717 ",
18655
18735
  notice.text
18656
18736
  ] })
18657
18737
  ] }),
18658
- validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18659
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18660
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
18738
+ validating && /* @__PURE__ */ jsxs15(Fragment3, { children: [
18739
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18740
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.accent, children: "Validating credentials..." })
18661
18741
  ] }),
18662
- !prefilled && !validating && !notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18663
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18664
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
18665
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
18742
+ !prefilled && !validating && !notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
18743
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18744
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
18745
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
18666
18746
  ] }),
18667
- changed && !validating && !notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18668
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18669
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18747
+ changed && !validating && !notice && /* @__PURE__ */ jsxs15(Fragment3, { children: [
18748
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18749
+ /* @__PURE__ */ jsx16(Text15, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18670
18750
  ] }),
18671
- editing && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18672
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18673
- /* @__PURE__ */ jsx15(
18751
+ editing && /* @__PURE__ */ jsxs15(Fragment3, { children: [
18752
+ /* @__PURE__ */ jsx16(Text15, { children: " " }),
18753
+ /* @__PURE__ */ jsx16(
18674
18754
  ControlHints,
18675
18755
  {
18676
18756
  hints: [
@@ -18751,7 +18831,7 @@ function plural(count, noun) {
18751
18831
  function compositionDone(progress) {
18752
18832
  return progress.composition === "done" || progress.composition === "cache-hit";
18753
18833
  }
18754
- function progressRows(progress, agent) {
18834
+ function progressRows(progress, agent, rowMs = []) {
18755
18835
  const { scan, composition, selection, existingEntities, tokens } = progress;
18756
18836
  const scanned = scan?.scanned ?? 0;
18757
18837
  const scanComplete = (scan?.total ?? 0) > 0;
@@ -18772,16 +18852,20 @@ function progressRows(progress, agent) {
18772
18852
  if (existingEntities !== "idle") {
18773
18853
  rows.push({
18774
18854
  text: existingEntities === "running" ? "Fetching existing components and tokens..." : existingEntities === "complete" ? "Existing components and tokens ready" : "Existing entities unavailable; continuing without them",
18775
- complete: existingEntities !== "running"
18855
+ complete: existingEntities !== "running",
18856
+ // The import carries on without them, so this is not shown as a success.
18857
+ ...existingEntities === "failed" ? { state: "warning" } : {}
18776
18858
  });
18777
18859
  }
18778
18860
  if (tokens !== "idle") {
18779
18861
  rows.push({
18780
18862
  text: tokens === "complete" ? "Token definitions ready" : tokens === "failed" ? "Token definition generation failed" : `Generating token definitions via ${agent}...`,
18781
- complete: tokens === "complete"
18863
+ complete: tokens === "complete",
18864
+ // A failed job is not still running.
18865
+ ...tokens === "failed" ? { state: "failed" } : {}
18782
18866
  });
18783
18867
  }
18784
- return rows;
18868
+ return withTimes(rows, rowMs);
18785
18869
  }
18786
18870
  function noComponentsMessage(projectPath) {
18787
18871
  return `No components found in ${projectPath}.
@@ -18809,21 +18893,21 @@ function resolveAgentChoice(flag, stored) {
18809
18893
  }
18810
18894
 
18811
18895
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
18812
- import { jsx as jsx16 } from "react/jsx-runtime";
18813
- function ExtractionScreen({ progress, agent }) {
18814
- return /* @__PURE__ */ jsx16(
18896
+ import { jsx as jsx17 } from "react/jsx-runtime";
18897
+ function ExtractionScreen({ progress, agent, rowMs }) {
18898
+ return /* @__PURE__ */ jsx17(
18815
18899
  RunningStep,
18816
18900
  {
18817
18901
  step: "extraction",
18818
18902
  description: "Extracting context from your source files.",
18819
- lines: progressRows(progress, agent)
18903
+ lines: progressRows(progress, agent, rowMs)
18820
18904
  }
18821
18905
  );
18822
18906
  }
18823
18907
 
18824
18908
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-review/screen.tsx
18825
18909
  import { useEffect as useEffect9, useMemo as useMemo2, useState as useState10 } from "react";
18826
- import { Box as Box15, Text as Text15, useInput as useInput12 } from "ink";
18910
+ import { Box as Box16, Text as Text16, useInput as useInput12 } from "ink";
18827
18911
  init_debug_store();
18828
18912
 
18829
18913
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-review/load.ts
@@ -18880,7 +18964,7 @@ function loadTokenRows(tokensPath) {
18880
18964
  }
18881
18965
 
18882
18966
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-review/screen.tsx
18883
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
18967
+ import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
18884
18968
  var VISIBLE_ROWS = 15;
18885
18969
  var COLUMN_GAP = 3;
18886
18970
  function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
@@ -18925,22 +19009,22 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
18925
19009
  const typeWidth = Math.max(4, ...rows.map((row) => row.type.length)) + COLUMN_GAP;
18926
19010
  const valueWidth = Math.max(10, innerWidth - pathWidth - typeWidth - 2);
18927
19011
  const clip = (text, width) => text.length > width ? `${text.slice(0, Math.max(0, width - 1))}\u2026` : text.padEnd(width);
18928
- return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
18929
- /* @__PURE__ */ jsx17(StepHeader, { step: "review" }),
18930
- /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
18931
- /* @__PURE__ */ jsx17(Text15, { bold: true, children: "Review design tokens" }),
18932
- /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: loaded.ok ? /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.muted, children: [
19012
+ return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", children: [
19013
+ /* @__PURE__ */ jsx18(StepHeader, { step: "review" }),
19014
+ /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
19015
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: "Review design tokens" }),
19016
+ /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: loaded.ok ? /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.muted, children: [
18933
19017
  rows.length,
18934
19018
  " ",
18935
19019
  rows.length === 1 ? "token" : "tokens",
18936
19020
  " generated from ",
18937
19021
  tokensPath
18938
- ] }) : /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.error, children: [
19022
+ ] }) : /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.error, children: [
18939
19023
  "Could not read the generated tokens: ",
18940
19024
  loaded.message
18941
19025
  ] }) }),
18942
- /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", marginTop: 1, children: [
18943
- /* @__PURE__ */ jsxs15(Text15, { bold: true, color: PALETTE.muted, wrap: "truncate-end", children: [
19026
+ /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", marginTop: 1, children: [
19027
+ /* @__PURE__ */ jsxs16(Text16, { bold: true, color: PALETTE.muted, wrap: "truncate-end", children: [
18944
19028
  " ",
18945
19029
  clip("Token name", pathWidth),
18946
19030
  " ",
@@ -18950,7 +19034,7 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
18950
19034
  ] }),
18951
19035
  rows.slice(start, end).map((row, offset) => {
18952
19036
  const active = start + offset === selected;
18953
- return /* @__PURE__ */ jsxs15(Text15, { color: active ? PALETTE.accent : void 0, bold: active, wrap: "truncate-end", children: [
19037
+ return /* @__PURE__ */ jsxs16(Text16, { color: active ? PALETTE.accent : void 0, bold: active, wrap: "truncate-end", children: [
18954
19038
  active ? "\u203A " : " ",
18955
19039
  clip(row.path, pathWidth),
18956
19040
  " ",
@@ -18960,14 +19044,14 @@ function TokenReviewScreen({ tokensPath, onContinue, onQuit }) {
18960
19044
  ] }, row.path);
18961
19045
  })
18962
19046
  ] }),
18963
- rows.length > VISIBLE_ROWS && /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: /* @__PURE__ */ jsxs15(Text15, { color: PALETTE.muted, children: [
19047
+ rows.length > VISIBLE_ROWS && /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: /* @__PURE__ */ jsxs16(Text16, { color: PALETTE.muted, children: [
18964
19048
  start + 1,
18965
19049
  "-",
18966
19050
  end,
18967
19051
  " of ",
18968
19052
  rows.length
18969
19053
  ] }) }),
18970
- /* @__PURE__ */ jsx17(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx17(ControlHints, { hints: TOKEN_REVIEW_CONTROLS }) })
19054
+ /* @__PURE__ */ jsx18(Box16, { marginTop: 1, children: /* @__PURE__ */ jsx18(ControlHints, { hints: TOKEN_REVIEW_CONTROLS }) })
18971
19055
  ] })
18972
19056
  ] });
18973
19057
  }
@@ -19245,9 +19329,12 @@ function useExtraction(input) {
19245
19329
  progress: initialProgress({
19246
19330
  hasCredentials: input.credentials !== null,
19247
19331
  hasRawTokens: input.rawTokensPath !== ""
19248
- })
19332
+ }),
19333
+ rowMs: []
19249
19334
  });
19250
- let lastProgress;
19335
+ let lastProgress2;
19336
+ const startedAt = Date.now();
19337
+ let rowMs = [];
19251
19338
  startDebugRun({
19252
19339
  flow: "import/extraction",
19253
19340
  step: "06-extraction",
@@ -19255,12 +19342,13 @@ function useExtraction(input) {
19255
19342
  inputs: extractionLogInputs(input)
19256
19343
  });
19257
19344
  void runExtraction(input, (progress) => {
19258
- lastProgress = progress;
19259
- if (current.current === input) setState({ status: "running", progress });
19345
+ lastProgress2 = progress;
19346
+ rowMs = trackFinished(rowMs, progressRows(progress, input.agent), Date.now() - startedAt);
19347
+ if (current.current === input) setState({ status: "running", progress, rowMs });
19260
19348
  }).then((result) => {
19261
19349
  if (current.current !== input) return;
19262
19350
  void finishDebugRun({
19263
- ...extractionLogOutputs(result, lastProgress, input.credentials?.cmaToken ?? ""),
19351
+ ...extractionLogOutputs(result, lastProgress2, input.credentials?.cmaToken ?? ""),
19264
19352
  exitMethod: result.ok ? "saved" : "discarded"
19265
19353
  });
19266
19354
  setState({ status: "done", result });
@@ -19328,7 +19416,7 @@ function useTokensOnly(input) {
19328
19416
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
19329
19417
  init_debug_store();
19330
19418
  import { useEffect as useEffect14, useMemo as useMemo4 } from "react";
19331
- import { Box as Box25, Text as Text26 } from "ink";
19419
+ import { Box as Box26, Text as Text27 } from "ink";
19332
19420
 
19333
19421
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/log.ts
19334
19422
  var MAX_NAMES = 20;
@@ -19358,12 +19446,12 @@ function scopeGateLogOutputs(components, decisions) {
19358
19446
  }
19359
19447
 
19360
19448
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/tokens-column.tsx
19361
- import { Box as Box17, Text as Text17 } from "ink";
19449
+ import { Box as Box18, Text as Text18 } from "ink";
19362
19450
  import figures2 from "figures";
19363
19451
 
19364
19452
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
19365
- import { Box as Box16, Text as Text16 } from "ink";
19366
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
19453
+ import { Box as Box17, Text as Text17 } from "ink";
19454
+ import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
19367
19455
  var MIN_TERMINAL_PANEL_HEIGHT = 5;
19368
19456
  function terminalPanelHeight(rows, reservedRows = 4) {
19369
19457
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
@@ -19379,8 +19467,8 @@ function FixedPanel({
19379
19467
  clipOverflow = true,
19380
19468
  children
19381
19469
  }) {
19382
- return /* @__PURE__ */ jsx18(
19383
- Box16,
19470
+ return /* @__PURE__ */ jsx19(
19471
+ Box17,
19384
19472
  {
19385
19473
  flexDirection: "column",
19386
19474
  width,
@@ -19396,7 +19484,7 @@ function FixedPanel({
19396
19484
  );
19397
19485
  }
19398
19486
  function WindowedPanel({ width, height, title, focused, children }) {
19399
- return /* @__PURE__ */ jsxs16(
19487
+ return /* @__PURE__ */ jsxs17(
19400
19488
  FixedPanel,
19401
19489
  {
19402
19490
  width,
@@ -19405,7 +19493,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
19405
19493
  ...height === void 0 ? {} : { height },
19406
19494
  focused,
19407
19495
  children: [
19408
- title && /* @__PURE__ */ jsx18(WindowedPanelHeader, { title, width, focused }),
19496
+ title && /* @__PURE__ */ jsx19(WindowedPanelHeader, { title, width, focused }),
19409
19497
  children
19410
19498
  ]
19411
19499
  }
@@ -19416,9 +19504,9 @@ function WindowedPanelHeader({
19416
19504
  width,
19417
19505
  focused
19418
19506
  }) {
19419
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", children: [
19420
- /* @__PURE__ */ jsx18(Text16, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
19421
- /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
19507
+ return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", children: [
19508
+ /* @__PURE__ */ jsx19(Text17, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
19509
+ /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
19422
19510
  ] });
19423
19511
  }
19424
19512
  function formatWindowIndicator(direction, count) {
@@ -19427,38 +19515,38 @@ function formatWindowIndicator(direction, count) {
19427
19515
  }
19428
19516
  function WindowFooter({ above, below }) {
19429
19517
  const parts = [above > 0 ? `\u2191 ${above}` : "", below > 0 ? `\u2193 ${below}` : ""].filter(Boolean);
19430
- return /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
19518
+ return /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
19431
19519
  }
19432
19520
  function WindowIndicator({ direction, count }) {
19433
- return /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
19521
+ return /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
19434
19522
  }
19435
19523
 
19436
19524
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/tokens-column.tsx
19437
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
19525
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
19438
19526
  function TokensColumn(props) {
19439
19527
  const { title, width, height, tokens, cursor, focused, visibleCount } = props;
19440
19528
  const nameWidth = Math.min(longestEntries(tokens).path + 2, Math.floor((width - 8) / 2));
19441
19529
  const window = computeColumnWindow(tokens.length, cursor, Math.max(1, visibleCount));
19442
- return /* @__PURE__ */ jsxs17(WindowedPanel, { width, height, title, focused, children: [
19443
- /* @__PURE__ */ jsx19(WindowIndicator, { direction: "up", count: window.above }),
19530
+ return /* @__PURE__ */ jsxs18(WindowedPanel, { width, height, title, focused, children: [
19531
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "up", count: window.above }),
19444
19532
  tokens.slice(window.start, window.end).map((token, offset) => {
19445
19533
  const isCursor = focused && window.start + offset === cursor;
19446
- return /* @__PURE__ */ jsxs17(Box17, { children: [
19447
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE.accent, bold: true, children: isCursor ? figures2.pointer : " " }),
19448
- /* @__PURE__ */ jsxs17(Text17, { wrap: "truncate-end", color: isCursor ? PALETTE.accent : void 0, bold: isCursor, children: [
19534
+ return /* @__PURE__ */ jsxs18(Box18, { children: [
19535
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE.accent, bold: true, children: isCursor ? figures2.pointer : " " }),
19536
+ /* @__PURE__ */ jsxs18(Text18, { wrap: "truncate-end", color: isCursor ? PALETTE.accent : void 0, bold: isCursor, children: [
19449
19537
  ` ${token.path.padEnd(nameWidth)}`,
19450
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE.muted, children: token.value })
19538
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE.muted, children: token.value })
19451
19539
  ] })
19452
19540
  ] }, token.path);
19453
19541
  }),
19454
- /* @__PURE__ */ jsx19(WindowIndicator, { direction: "down", count: window.below })
19542
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "down", count: window.below })
19455
19543
  ] });
19456
19544
  }
19457
19545
 
19458
19546
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
19459
- import { Box as Box18, Text as Text18 } from "ink";
19547
+ import { Box as Box19, Text as Text19 } from "ink";
19460
19548
  import figures3 from "figures";
19461
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
19549
+ import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
19462
19550
  function cycleLabel(cycle, index) {
19463
19551
  const parts = [];
19464
19552
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -19469,36 +19557,36 @@ function cycleLabel(cycle, index) {
19469
19557
  return `Cycle ${index + 1}: ${parts.join(" \u2192 ")}`;
19470
19558
  }
19471
19559
  function CyclesPanel({ cycles, cursor }) {
19472
- return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19473
- /* @__PURE__ */ jsx20(Text18, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
19474
- /* @__PURE__ */ jsx20(Text18, { children: " " }),
19560
+ return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19561
+ /* @__PURE__ */ jsx21(Text19, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
19562
+ /* @__PURE__ */ jsx21(Text19, { children: " " }),
19475
19563
  cycles.map((cycle, i) => {
19476
19564
  const isCursor = i === cursor;
19477
- return /* @__PURE__ */ jsxs18(Text18, { children: [
19478
- isCursor ? /* @__PURE__ */ jsx20(Text18, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx20(Text18, { children: " " }),
19479
- /* @__PURE__ */ jsx20(Text18, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
19565
+ return /* @__PURE__ */ jsxs19(Text19, { children: [
19566
+ isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
19567
+ /* @__PURE__ */ jsx21(Text19, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
19480
19568
  ] }, i);
19481
19569
  }),
19482
- /* @__PURE__ */ jsx20(Text18, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
19570
+ /* @__PURE__ */ jsx21(Text19, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
19483
19571
  ] });
19484
19572
  }
19485
19573
 
19486
19574
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
19487
- import { Box as Box19, Text as Text19 } from "ink";
19488
- import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
19575
+ import { Box as Box20, Text as Text20 } from "ink";
19576
+ import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
19489
19577
  function RejectPrompt({ pending }) {
19490
- return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19491
- /* @__PURE__ */ jsx21(Text19, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
19492
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx21(Text19, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
19493
- pending.descendants.length > 0 && /* @__PURE__ */ jsx21(Text19, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
19494
- /* @__PURE__ */ jsx21(Text19, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
19578
+ return /* @__PURE__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19579
+ /* @__PURE__ */ jsx22(Text20, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
19580
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx22(Text20, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
19581
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx22(Text20, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
19582
+ /* @__PURE__ */ jsx22(Text20, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
19495
19583
  ] });
19496
19584
  }
19497
19585
 
19498
19586
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CompactControlBar.tsx
19499
- import { jsx as jsx22 } from "react/jsx-runtime";
19587
+ import { jsx as jsx23 } from "react/jsx-runtime";
19500
19588
  function CompactControlBar({ hasGroupRoots, searchActive }) {
19501
- return /* @__PURE__ */ jsx22(
19589
+ return /* @__PURE__ */ jsx23(
19502
19590
  ControlHints,
19503
19591
  {
19504
19592
  hints: [
@@ -19515,8 +19603,8 @@ function CompactControlBar({ hasGroupRoots, searchActive }) {
19515
19603
  }
19516
19604
 
19517
19605
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
19518
- import { Box as Box20, Text as Text20 } from "ink";
19519
- import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
19606
+ import { Box as Box21, Text as Text21 } from "ink";
19607
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
19520
19608
  function CounterStrip(props) {
19521
19609
  const { counters, totalWidth } = props;
19522
19610
  const condensed = totalWidth < 60;
@@ -19525,38 +19613,38 @@ function CounterStrip(props) {
19525
19613
  const labelRej = condensed ? "Rej" : "Rejected";
19526
19614
  const labelUnd = condensed ? "Und" : "Undecided";
19527
19615
  const sep = condensed ? " | " : " ";
19528
- return /* @__PURE__ */ jsx23(Box20, { children: /* @__PURE__ */ jsxs20(Text20, { children: [
19529
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
19616
+ return /* @__PURE__ */ jsx24(Box21, { children: /* @__PURE__ */ jsxs21(Text21, { children: [
19617
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
19530
19618
  labelGrp,
19531
19619
  " "
19532
19620
  ] }),
19533
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.groups }),
19534
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
19535
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
19621
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.groups }),
19622
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
19623
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
19536
19624
  labelAcc,
19537
19625
  " "
19538
19626
  ] }),
19539
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: `${counters.accepted}/${counters.total}` }),
19540
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
19541
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
19627
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: `${counters.accepted}/${counters.total}` }),
19628
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
19629
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
19542
19630
  labelRej,
19543
19631
  " "
19544
19632
  ] }),
19545
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.rejected }),
19546
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep }),
19547
- /* @__PURE__ */ jsxs20(Text20, { color: PALETTE.muted, children: [
19633
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.rejected }),
19634
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep }),
19635
+ /* @__PURE__ */ jsxs21(Text21, { color: PALETTE.muted, children: [
19548
19636
  labelUnd,
19549
19637
  " "
19550
19638
  ] }),
19551
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: counters.undecided }),
19552
- /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: sep })
19639
+ /* @__PURE__ */ jsx24(Text21, { bold: true, children: counters.undecided }),
19640
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: sep })
19553
19641
  ] }) });
19554
19642
  }
19555
19643
 
19556
19644
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
19557
19645
  import figures4 from "figures";
19558
- import { Box as Box21, Text as Text21 } from "ink";
19559
- import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
19646
+ import { Box as Box22, Text as Text22 } from "ink";
19647
+ import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
19560
19648
  var DEFAULT_MAX_ROWS = 15;
19561
19649
  function windowStart(rowCount, highlightIndex, maxRows) {
19562
19650
  if (rowCount <= maxRows) return 0;
@@ -19567,9 +19655,9 @@ function windowStart(rowCount, highlightIndex, maxRows) {
19567
19655
  return start;
19568
19656
  }
19569
19657
  function defaultRenderRow(row, index, isCursor) {
19570
- return /* @__PURE__ */ jsxs21(Text21, { children: [
19571
- isCursor ? /* @__PURE__ */ jsx24(Text21, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx24(Text21, { children: " " }),
19572
- /* @__PURE__ */ jsx24(Text21, { inverse: isCursor, children: " " + row.label })
19658
+ return /* @__PURE__ */ jsxs22(Text22, { children: [
19659
+ isCursor ? /* @__PURE__ */ jsx25(Text22, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx25(Text22, { children: " " }),
19660
+ /* @__PURE__ */ jsx25(Text22, { inverse: isCursor, children: " " + row.label })
19573
19661
  ] }, index);
19574
19662
  }
19575
19663
  function GotoBanner({
@@ -19588,8 +19676,8 @@ function GotoBanner({
19588
19676
  const visible = rows.slice(start, end);
19589
19677
  const moreAbove = start;
19590
19678
  const moreBelow = rows.length - end;
19591
- return /* @__PURE__ */ jsxs21(
19592
- Box21,
19679
+ return /* @__PURE__ */ jsxs22(
19680
+ Box22,
19593
19681
  {
19594
19682
  flexDirection: "column",
19595
19683
  borderStyle: "single",
@@ -19600,14 +19688,14 @@ function GotoBanner({
19600
19688
  width,
19601
19689
  flexShrink: 0,
19602
19690
  children: [
19603
- /* @__PURE__ */ jsx24(Text21, { bold: true, children: title }),
19604
- moreAbove > 0 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
19691
+ /* @__PURE__ */ jsx25(Text22, { bold: true, children: title }),
19692
+ moreAbove > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
19605
19693
  visible.map((row, vi) => {
19606
19694
  const i = start + vi;
19607
19695
  return renderRow(row, i, i === highlightIndex);
19608
19696
  }),
19609
- moreBelow > 0 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
19610
- footerHint !== void 0 && /* @__PURE__ */ jsx24(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx24(Text21, { color: PALETTE.muted, children: footerHint }) })
19697
+ moreBelow > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
19698
+ footerHint !== void 0 && /* @__PURE__ */ jsx25(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx25(Text22, { color: PALETTE.muted, children: footerHint }) })
19611
19699
  ]
19612
19700
  }
19613
19701
  );
@@ -19615,7 +19703,7 @@ function GotoBanner({
19615
19703
 
19616
19704
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
19617
19705
  import figures5 from "figures";
19618
- import { Box as Box22, Text as Text23 } from "ink";
19706
+ import { Box as Box23, Text as Text24 } from "ink";
19619
19707
 
19620
19708
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/graph/cycle-detection.ts
19621
19709
  function buildGraph(components) {
@@ -19955,8 +20043,8 @@ function findSharedDeps(closures) {
19955
20043
  }
19956
20044
 
19957
20045
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
19958
- import { Text as Text22 } from "ink";
19959
- import { jsx as jsx25 } from "react/jsx-runtime";
20046
+ import { Text as Text23 } from "ink";
20047
+ import { jsx as jsx26 } from "react/jsx-runtime";
19960
20048
  function previewBadge(annotation) {
19961
20049
  switch (annotation) {
19962
20050
  case "new":
@@ -19975,11 +20063,11 @@ function PreviewBadge({
19975
20063
  badge,
19976
20064
  highlighted = false
19977
20065
  }) {
19978
- return badge ? /* @__PURE__ */ jsx25(Text22, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx25(Text22, { children: " " });
20066
+ return badge ? /* @__PURE__ */ jsx26(Text23, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx26(Text23, { children: " " });
19979
20067
  }
19980
20068
 
19981
20069
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
19982
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
20070
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
19983
20071
  var GLYPH_EXPAND_COLLAPSED = "\u25B8";
19984
20072
  var GLYPH_EXPAND_EXPANDED = "\u25BE";
19985
20073
  var GLYPH_TREE_MID = "\u251C\u2500";
@@ -20404,8 +20492,8 @@ function GroupedSidebar(props) {
20404
20492
  const start = windowed ? Math.max(0, scrollOffset ?? 0) : 0;
20405
20493
  const end = windowed ? start + (visibleCount ?? allRows.length) + 1 : allRows.length;
20406
20494
  const rows = windowed ? allRows.slice(start, end) : allRows;
20407
- return /* @__PURE__ */ jsxs22(WindowedPanel, { width, height: props.height, title, focused, children: [
20408
- allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs22(Text23, { color: PALETTE.warning, children: [
20495
+ return /* @__PURE__ */ jsxs23(WindowedPanel, { width, height: props.height, title, focused, children: [
20496
+ allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs23(Text24, { color: PALETTE.warning, children: [
20409
20497
  " ",
20410
20498
  emptyMessage
20411
20499
  ] }),
@@ -20435,13 +20523,13 @@ function GroupedSidebar(props) {
20435
20523
  isOwn: rs?.isOwn ?? false,
20436
20524
  isCursor
20437
20525
  });
20438
- return /* @__PURE__ */ jsxs22(Box22, { children: [
20439
- isCursor ? /* @__PURE__ */ jsx26(Text23, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx26(Text23, { children: " " }),
20440
- /* @__PURE__ */ jsx26(PreviewBadge, { badge, highlighted: isSelected }),
20441
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx26(Text23, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx26(Text23, { children: " " })),
20442
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx26(Text23, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx26(Text23, { children: " " })),
20443
- /* @__PURE__ */ jsxs22(
20444
- Text23,
20526
+ return /* @__PURE__ */ jsxs23(Box23, { children: [
20527
+ isCursor ? /* @__PURE__ */ jsx27(Text24, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx27(Text24, { children: " " }),
20528
+ /* @__PURE__ */ jsx27(PreviewBadge, { badge, highlighted: isSelected }),
20529
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx27(Text24, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx27(Text24, { children: " " })),
20530
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx27(Text24, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx27(Text24, { children: " " })),
20531
+ /* @__PURE__ */ jsxs23(
20532
+ Text24,
20445
20533
  {
20446
20534
  color: isSelected ? PALETTE.accent : labelStyle.dim ? PALETTE.muted : labelStyle.color,
20447
20535
  bold: isSelected || labelStyle.bold,
@@ -20454,16 +20542,16 @@ function GroupedSidebar(props) {
20454
20542
  ]
20455
20543
  }
20456
20544
  ),
20457
- inheritanceStyle.glyph && /* @__PURE__ */ jsx26(Text23, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
20545
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx27(Text24, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
20458
20546
  ] }, row.key);
20459
20547
  }),
20460
- windowed && /* @__PURE__ */ jsx26(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
20548
+ windowed && /* @__PURE__ */ jsx27(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
20461
20549
  ] });
20462
20550
  }
20463
20551
 
20464
20552
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
20465
20553
  import React11 from "react";
20466
- import { Box as Box23, Text as Text24 } from "ink";
20554
+ import { Box as Box24, Text as Text25 } from "ink";
20467
20555
 
20468
20556
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
20469
20557
  import { useLayoutEffect, useRef as useRef8 } from "react";
@@ -20562,7 +20650,7 @@ function useTerminalSize() {
20562
20650
  }
20563
20651
 
20564
20652
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
20565
- import { Fragment as Fragment3, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
20653
+ import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
20566
20654
  function HelpOverlay(props) {
20567
20655
  const { onClose } = props;
20568
20656
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -20573,8 +20661,8 @@ function HelpOverlay(props) {
20573
20661
  if (input === "h" || key.escape) onClose();
20574
20662
  }, props.handleInput !== false);
20575
20663
  if (props.sections) {
20576
- return /* @__PURE__ */ jsxs23(
20577
- Box23,
20664
+ return /* @__PURE__ */ jsxs24(
20665
+ Box24,
20578
20666
  {
20579
20667
  flexDirection: "column",
20580
20668
  borderStyle: "round",
@@ -20583,19 +20671,19 @@ function HelpOverlay(props) {
20583
20671
  height: panelHeight,
20584
20672
  overflowY: "hidden",
20585
20673
  children: [
20586
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20587
- props.sections.map((section) => /* @__PURE__ */ jsxs23(React11.Fragment, { children: [
20588
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
20589
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: section.title }),
20590
- section.entries.map((entry) => /* @__PURE__ */ jsx27(Text24, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
20674
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20675
+ props.sections.map((section) => /* @__PURE__ */ jsxs24(React11.Fragment, { children: [
20676
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
20677
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: section.title }),
20678
+ section.entries.map((entry) => /* @__PURE__ */ jsx28(Text25, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
20591
20679
  ] }, section.title))
20592
20680
  ]
20593
20681
  }
20594
20682
  );
20595
20683
  }
20596
20684
  const mode = props.mode;
20597
- return /* @__PURE__ */ jsxs23(
20598
- Box23,
20685
+ return /* @__PURE__ */ jsxs24(
20686
+ Box24,
20599
20687
  {
20600
20688
  flexDirection: "column",
20601
20689
  borderStyle: "round",
@@ -20604,38 +20692,38 @@ function HelpOverlay(props) {
20604
20692
  height: panelHeight,
20605
20693
  overflowY: "hidden",
20606
20694
  children: [
20607
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20608
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
20609
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "Navigation" }),
20610
- /* @__PURE__ */ jsx27(Text24, { children: " \u2191 / k / PgUp Scroll up" }),
20611
- /* @__PURE__ */ jsx27(Text24, { children: " \u2193 / j / PgDn Scroll down" }),
20612
- /* @__PURE__ */ jsx27(Text24, { children: " g / Home Jump to top" }),
20613
- /* @__PURE__ */ jsx27(Text24, { children: " G / End Jump to bottom" }),
20614
- mode === "review" && /* @__PURE__ */ jsxs23(Fragment3, { children: [
20615
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
20616
- /* @__PURE__ */ jsx27(Text24, { bold: true, children: "[Review mode only]" }),
20617
- /* @__PURE__ */ jsx27(Text24, { children: " Tab Toggle sidebar/detail" }),
20618
- /* @__PURE__ */ jsx27(Text24, { children: " a Accept component" }),
20619
- /* @__PURE__ */ jsx27(Text24, { children: " r Reject component" }),
20620
- /* @__PURE__ */ jsx27(Text24, { children: " e Edit proposal" }),
20621
- /* @__PURE__ */ jsx27(Text24, { children: " s Toggle source code" }),
20622
- /* @__PURE__ */ jsx27(Text24, { children: " A Approve all" }),
20623
- /* @__PURE__ */ jsx27(Text24, { children: " F Open finalize dialog" }),
20624
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+S Save draft" }),
20625
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+Z Undo" }),
20626
- /* @__PURE__ */ jsx27(Text24, { children: " Ctrl+Y Redo" }),
20627
- /* @__PURE__ */ jsx27(Text24, { children: " Esc Exit edit / close" })
20695
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20696
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
20697
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "Navigation" }),
20698
+ /* @__PURE__ */ jsx28(Text25, { children: " \u2191 / k / PgUp Scroll up" }),
20699
+ /* @__PURE__ */ jsx28(Text25, { children: " \u2193 / j / PgDn Scroll down" }),
20700
+ /* @__PURE__ */ jsx28(Text25, { children: " g / Home Jump to top" }),
20701
+ /* @__PURE__ */ jsx28(Text25, { children: " G / End Jump to bottom" }),
20702
+ mode === "review" && /* @__PURE__ */ jsxs24(Fragment4, { children: [
20703
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
20704
+ /* @__PURE__ */ jsx28(Text25, { bold: true, children: "[Review mode only]" }),
20705
+ /* @__PURE__ */ jsx28(Text25, { children: " Tab Toggle sidebar/detail" }),
20706
+ /* @__PURE__ */ jsx28(Text25, { children: " a Accept component" }),
20707
+ /* @__PURE__ */ jsx28(Text25, { children: " r Reject component" }),
20708
+ /* @__PURE__ */ jsx28(Text25, { children: " e Edit proposal" }),
20709
+ /* @__PURE__ */ jsx28(Text25, { children: " s Toggle source code" }),
20710
+ /* @__PURE__ */ jsx28(Text25, { children: " A Approve all" }),
20711
+ /* @__PURE__ */ jsx28(Text25, { children: " F Open finalize dialog" }),
20712
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+S Save draft" }),
20713
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+Z Undo" }),
20714
+ /* @__PURE__ */ jsx28(Text25, { children: " Ctrl+Y Redo" }),
20715
+ /* @__PURE__ */ jsx28(Text25, { children: " Esc Exit edit / close" })
20628
20716
  ] }),
20629
- /* @__PURE__ */ jsx27(Text24, { children: " " }),
20630
- /* @__PURE__ */ jsx27(Text24, { children: " h Close help" }),
20631
- /* @__PURE__ */ jsx27(Text24, { children: " q Quit" })
20717
+ /* @__PURE__ */ jsx28(Text25, { children: " " }),
20718
+ /* @__PURE__ */ jsx28(Text25, { children: " h Close help" }),
20719
+ /* @__PURE__ */ jsx28(Text25, { children: " q Quit" })
20632
20720
  ]
20633
20721
  }
20634
20722
  );
20635
20723
  }
20636
20724
 
20637
20725
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
20638
- import { Box as Box24, Text as Text25 } from "ink";
20726
+ import { Box as Box25, Text as Text26 } from "ink";
20639
20727
 
20640
20728
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/autocomplete.ts
20641
20729
  function longestCommonPrefix(names) {
@@ -20692,7 +20780,7 @@ function formatSearchMatchSummary(matches, total) {
20692
20780
  }
20693
20781
 
20694
20782
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
20695
- import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
20783
+ import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
20696
20784
  function SearchMatchSummary({
20697
20785
  open,
20698
20786
  query,
@@ -20703,17 +20791,17 @@ function SearchMatchSummary({
20703
20791
  marginTop
20704
20792
  }) {
20705
20793
  if (hidden) return null;
20706
- return /* @__PURE__ */ jsxs24(Fragment4, { children: [
20707
- open && /* @__PURE__ */ jsxs24(Box24, { marginTop, flexDirection: "column", children: [
20708
- /* @__PURE__ */ jsxs24(Text25, { children: [
20794
+ return /* @__PURE__ */ jsxs25(Fragment5, { children: [
20795
+ open && /* @__PURE__ */ jsxs25(Box25, { marginTop, flexDirection: "column", children: [
20796
+ /* @__PURE__ */ jsxs25(Text26, { children: [
20709
20797
  `/${query}`,
20710
- /* @__PURE__ */ jsx28(Text25, { color: PALETTE.accent, children: "\u258E" }),
20711
- query && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
20712
- /* @__PURE__ */ jsx28(Text25, { children: " \xB7 [Esc] leave" })
20798
+ /* @__PURE__ */ jsx29(Text26, { color: PALETTE.accent, children: "\u258E" }),
20799
+ query && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
20800
+ /* @__PURE__ */ jsx29(Text26, { children: " \xB7 [Esc] leave" })
20713
20801
  ] }),
20714
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
20802
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
20715
20803
  ] }),
20716
- !open && query && /* @__PURE__ */ jsx28(Box24, { marginTop, children: /* @__PURE__ */ jsx28(Text25, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
20804
+ !open && query && /* @__PURE__ */ jsx29(Box25, { marginTop, children: /* @__PURE__ */ jsx29(Text26, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
20717
20805
  ] });
20718
20806
  }
20719
20807
 
@@ -21560,7 +21648,7 @@ function useScopeGate({ components, tokenCount, tokensWidth, onConfirm, onQuit }
21560
21648
  panelOpen: false,
21561
21649
  entryCount: 0
21562
21650
  });
21563
- const panelLayout = useMemo3(() => computePanelLayout(visibleCount), [visibleCount]);
21651
+ const panelLayout2 = useMemo3(() => computePanelLayout(visibleCount), [visibleCount]);
21564
21652
  useEffect13(() => {
21565
21653
  setNav((prev) => {
21566
21654
  const maxIdx = Math.max(0, visibleRows.length - 1);
@@ -21844,7 +21932,7 @@ function useScopeGate({ components, tokenCount, tokensWidth, onConfirm, onQuit }
21844
21932
  // layout
21845
21933
  totalWidth,
21846
21934
  columnPlan,
21847
- panelLayout,
21935
+ panelLayout: panelLayout2,
21848
21936
  visibleCount,
21849
21937
  panelMaxRows,
21850
21938
  // sidebar
@@ -21883,7 +21971,7 @@ function useScopeGate({ components, tokenCount, tokensWidth, onConfirm, onQuit }
21883
21971
  }
21884
21972
 
21885
21973
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
21886
- import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
21974
+ import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
21887
21975
  var HELP_SECTIONS = [
21888
21976
  {
21889
21977
  title: "Navigation",
@@ -21957,24 +22045,24 @@ function ScopeGateScreen({
21957
22045
  onQuit();
21958
22046
  }
21959
22047
  });
21960
- const { search, graph, columnPlan, panelLayout, counters } = gate;
22048
+ const { search, graph, columnPlan, panelLayout: panelLayout2, counters } = gate;
21961
22049
  if (gate.showHelp) {
21962
- return /* @__PURE__ */ jsx29(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
21963
- }
21964
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
21965
- /* @__PURE__ */ jsx29(StepHeader, { step: "scope-gate" }),
21966
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", paddingX: 2, children: [
21967
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", flexWrap: "wrap", children: [
21968
- /* @__PURE__ */ jsx29(CounterStrip, { counters, totalWidth: gate.totalWidth }),
21969
- gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs25(Text26, { color: PALETTE.muted, children: [
22050
+ return /* @__PURE__ */ jsx30(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
22051
+ }
22052
+ return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
22053
+ /* @__PURE__ */ jsx30(StepHeader, { step: "scope-gate" }),
22054
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", paddingX: 2, children: [
22055
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", flexWrap: "wrap", children: [
22056
+ /* @__PURE__ */ jsx30(CounterStrip, { counters, totalWidth: gate.totalWidth }),
22057
+ gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs26(Text27, { color: PALETTE.muted, children: [
21970
22058
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
21971
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx29(Text26, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
22059
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx30(Text27, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
21972
22060
  ] })
21973
22061
  ] }),
21974
- 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.` }),
21975
- 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." }) }),
21976
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", alignItems: "stretch", children: [
21977
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx29(
22062
+ 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.` }),
22063
+ 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." }) }),
22064
+ /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", alignItems: "stretch", children: [
22065
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx30(
21978
22066
  GotoBanner,
21979
22067
  {
21980
22068
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -21984,7 +22072,7 @@ function ScopeGateScreen({
21984
22072
  width: columnPlan.main,
21985
22073
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
21986
22074
  }
21987
- ) : /* @__PURE__ */ jsx29(
22075
+ ) : /* @__PURE__ */ jsx30(
21988
22076
  GroupedSidebar,
21989
22077
  {
21990
22078
  items: gate.groupedItems,
@@ -21996,7 +22084,7 @@ function ScopeGateScreen({
21996
22084
  expandedGroups: gate.expandedGroups,
21997
22085
  onToggleExpanded: gate.toggleExpanded,
21998
22086
  width: columnPlan.main,
21999
- height: panelLayout.height,
22087
+ height: panelLayout2.height,
22000
22088
  title: "Components",
22001
22089
  wrapLabels: true,
22002
22090
  focused: gate.focusedColumn === "main",
@@ -22012,25 +22100,25 @@ function ScopeGateScreen({
22012
22100
  graph: graph.nodes
22013
22101
  }
22014
22102
  ),
22015
- columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs25(Fragment5, { children: [
22016
- /* @__PURE__ */ jsx29(Box25, { width: 2, flexShrink: 0 }),
22017
- /* @__PURE__ */ jsx29(
22103
+ columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs26(Fragment6, { children: [
22104
+ /* @__PURE__ */ jsx30(Box26, { width: 2, flexShrink: 0 }),
22105
+ /* @__PURE__ */ jsx30(
22018
22106
  TokensColumn,
22019
22107
  {
22020
22108
  width: columnPlan.tokens,
22021
22109
  tokens,
22022
22110
  cursor: gate.safeTokensCursor,
22023
22111
  focused: gate.focusedColumn === "tokens",
22024
- height: panelLayout.height,
22112
+ height: panelLayout2.height,
22025
22113
  title: `Design tokens (${tokens.length}) \xB7 read only`,
22026
- visibleCount: panelLayout.sideVisibleCount
22114
+ visibleCount: panelLayout2.sideVisibleCount
22027
22115
  }
22028
22116
  )
22029
22117
  ] })
22030
22118
  ] }),
22031
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx29(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
22032
- gate.pendingRejectCascade && /* @__PURE__ */ jsx29(RejectPrompt, { pending: gate.pendingRejectCascade }),
22033
- /* @__PURE__ */ jsx29(
22119
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx30(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
22120
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx30(RejectPrompt, { pending: gate.pendingRejectCascade }),
22121
+ /* @__PURE__ */ jsx30(
22034
22122
  SearchMatchSummary,
22035
22123
  {
22036
22124
  open: search.searchOpen,
@@ -22041,7 +22129,7 @@ function ScopeGateScreen({
22041
22129
  marginTop: 1
22042
22130
  }
22043
22131
  ),
22044
- /* @__PURE__ */ jsx29(
22132
+ /* @__PURE__ */ jsx30(
22045
22133
  CompactControlBar,
22046
22134
  {
22047
22135
  hasGroupRoots: gate.hasGroupRoots,
@@ -22145,8 +22233,20 @@ function generationLogInputs(input) {
22145
22233
  has_tokens: input.hasTokens
22146
22234
  };
22147
22235
  }
22236
+ var MAX_LOGGED_FAILURES = 10;
22237
+ var MAX_LOGGED_ERROR = 300;
22238
+ function lastProgress(progress) {
22239
+ const { activity, ...rest } = progress;
22240
+ const failed = activity.filter((item) => item.state === "failed");
22241
+ return {
22242
+ final_progress: rest,
22243
+ ...failed.length > 0 ? {
22244
+ failed_components: failed.slice(0, MAX_LOGGED_FAILURES).map((item) => ({ name: item.name, error: truncate(item.error ?? "", MAX_LOGGED_ERROR) }))
22245
+ } : {}
22246
+ };
22247
+ }
22148
22248
  function generationLogOutputs(result, progress) {
22149
- const last = progress ? { final_progress: progress } : {};
22249
+ const last = progress ? lastProgress(progress) : {};
22150
22250
  if (!result.ok) {
22151
22251
  return { outputs: { result: "failed", failed_step: result.step, error: result.message, ...last }, status: "error" };
22152
22252
  }
@@ -22165,7 +22265,21 @@ function generationLogOutputs(result, progress) {
22165
22265
  };
22166
22266
  }
22167
22267
  function initialProgress2() {
22168
- return { components: null, mapTokens: "idle", mapTokensEligible: null };
22268
+ return { components: null, activity: [], mapTokens: "idle", mapTokensEligible: null };
22269
+ }
22270
+ function applyActivityEvent(event, previous, now) {
22271
+ if (event.kind !== "component:started" && event.kind !== "component:completed" && event.kind !== "component:cached" && event.kind !== "component:failed") {
22272
+ return [...previous];
22273
+ }
22274
+ const index = previous.findIndex((item2) => item2.name === event.name);
22275
+ const startedAt = previous[index]?.startedAt ?? now;
22276
+ const item = event.kind === "component:started" ? {
22277
+ name: event.name,
22278
+ state: "running",
22279
+ startedAt,
22280
+ ...event.attempt > 1 ? { detail: `attempt ${event.attempt}` } : {}
22281
+ } : 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 };
22282
+ return index >= 0 ? previous.map((existing, i) => i === index ? item : existing) : [...previous, item];
22169
22283
  }
22170
22284
  function shouldRunMapTokens(counts) {
22171
22285
  return counts.mappablePropCount > 0 && counts.rawTokenCount > 0;
@@ -22181,39 +22295,52 @@ function describeGeneration(input) {
22181
22295
  return `${formatAcceptanceSummary({ accepted: input.acceptedCount, autoRejected: 0 })}
22182
22296
  ${agent} is reading each selected component and writing a Contentful component definition for it.${input.hasTokens ? "\nUsing your design tokens for prop resolution." : ""}`;
22183
22297
  }
22184
- function progressRows2(progress, agent) {
22298
+ function componentsRow(components, name) {
22299
+ if (!components) return { text: `Starting up ${name}...`, complete: false };
22300
+ const { done, total, current, failed } = components;
22301
+ if (total > 0 && done >= total) {
22302
+ return failed > 0 ? {
22303
+ text: `Generated ${total - failed} of ${total} components, ${failed} failed`,
22304
+ complete: false,
22305
+ state: "failed"
22306
+ } : { text: `Generated ${total} component${total === 1 ? "" : "s"}`, complete: true };
22307
+ }
22308
+ return {
22309
+ text: failed > 0 ? `${current} (${failed} failed so far)` : current,
22310
+ complete: false,
22311
+ progress: { done, total },
22312
+ ...failed > 0 ? { state: "warning" } : {}
22313
+ };
22314
+ }
22315
+ function progressRows2(progress, agent, rowMs = []) {
22185
22316
  const name = capitalize(agent);
22186
22317
  const { components, mapTokens } = progress;
22187
- const rows = [
22188
- {
22189
- text: components ? components.current : `Starting up ${name}...`,
22190
- complete: false,
22191
- ...components ? { progress: { done: components.done, total: components.total } } : {}
22192
- }
22193
- ];
22318
+ const rows = [componentsRow(components, name)];
22194
22319
  if (mapTokens !== "idle") {
22195
22320
  rows.push({
22196
22321
  text: mapTokens === "running" ? `Mapping token restrictions via ${name}...` : "Token restrictions ready",
22197
22322
  complete: mapTokens === "complete"
22198
22323
  });
22199
22324
  }
22200
- return rows;
22325
+ return withTimes(rows, rowMs);
22201
22326
  }
22202
22327
 
22203
22328
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
22204
- import { jsx as jsx30 } from "react/jsx-runtime";
22329
+ import { jsx as jsx31 } from "react/jsx-runtime";
22205
22330
  function GenerationScreen({
22206
22331
  progress,
22207
22332
  agent,
22208
22333
  acceptedCount,
22209
- hasTokens
22334
+ hasTokens,
22335
+ rowMs
22210
22336
  }) {
22211
- return /* @__PURE__ */ jsx30(
22337
+ return /* @__PURE__ */ jsx31(
22212
22338
  RunningStep,
22213
22339
  {
22214
22340
  step: "generation",
22215
22341
  description: describeGeneration({ acceptedCount, agent, hasTokens }),
22216
- lines: progressRows2(progress, agent)
22342
+ lines: progressRows2(progress, agent, rowMs),
22343
+ aside: progress.activity.length > 0 ? /* @__PURE__ */ jsx31(ActivityPanel, { title: "Components", items: progress.activity }) : void 0
22217
22344
  }
22218
22345
  );
22219
22346
  }
@@ -22274,7 +22401,7 @@ var realDeps4 = {
22274
22401
  var fail2 = (step, message) => ({ ok: false, step, message });
22275
22402
  var errorMessage3 = (error) => error instanceof Error ? error.message : String(error);
22276
22403
  async function runGeneration(input, onProgress, deps = realDeps4) {
22277
- let progress = { components: null, mapTokens: "idle", mapTokensEligible: null };
22404
+ let progress = { components: null, activity: [], mapTokens: "idle", mapTokensEligible: null };
22278
22405
  const update = (change) => {
22279
22406
  progress = { ...progress, ...change };
22280
22407
  onProgress(progress);
@@ -22302,7 +22429,10 @@ async function runGeneration(input, onProgress, deps = realDeps4) {
22302
22429
  noCache: input.noCache,
22303
22430
  existingEntitiesPath: input.existingEntitiesPath,
22304
22431
  precomputedCachedNames: new Set(handedOverNames),
22305
- onProgress: (event) => update({ components: applyProgressEvent2(event, progress.components, accepted.length) })
22432
+ onProgress: (event) => update({
22433
+ components: applyProgressEvent2(event, progress.components, accepted.length),
22434
+ activity: applyActivityEvent(event, progress.activity, Date.now())
22435
+ })
22306
22436
  });
22307
22437
  } catch (error) {
22308
22438
  return fail2("generate components", errorMessage3(error));
@@ -22373,11 +22503,17 @@ function appendGeneratePromptOverride(input) {
22373
22503
  return [...input.promptOverrides, `generate=${input.generatePromptPath}`];
22374
22504
  }
22375
22505
  function applyProgressEvent2(event, previous, total) {
22506
+ const failed = previous?.failed ?? 0;
22376
22507
  if (event.kind === "component:started") {
22377
- return { done: previous?.done ?? 0, total: event.total || total, current: event.name };
22508
+ return { done: previous?.done ?? 0, total: event.total || total, current: event.name, failed };
22378
22509
  }
22379
22510
  if (event.kind === "component:completed" || event.kind === "component:failed" || event.kind === "component:cached") {
22380
- return { done: (previous?.done ?? 0) + 1, total: event.total || total, current: event.name };
22511
+ return {
22512
+ done: (previous?.done ?? 0) + 1,
22513
+ total: event.total || total,
22514
+ current: event.name,
22515
+ failed: failed + (event.kind === "component:failed" ? 1 : 0)
22516
+ };
22381
22517
  }
22382
22518
  return previous;
22383
22519
  }
@@ -22392,8 +22528,10 @@ function useGeneration(input) {
22392
22528
  setState(void 0);
22393
22529
  return;
22394
22530
  }
22395
- setState({ status: "running", progress: initialProgress2() });
22396
- let lastProgress;
22531
+ setState({ status: "running", progress: initialProgress2(), rowMs: [] });
22532
+ let lastProgress2;
22533
+ const startedAt = Date.now();
22534
+ let rowMs = [];
22397
22535
  startDebugRun({
22398
22536
  flow: "import/generation",
22399
22537
  step: "08-generation",
@@ -22401,12 +22539,13 @@ function useGeneration(input) {
22401
22539
  inputs: generationLogInputs(input)
22402
22540
  });
22403
22541
  void runGeneration(input, (progress) => {
22404
- lastProgress = progress;
22405
- if (current.current === input) setState({ status: "running", progress });
22542
+ lastProgress2 = progress;
22543
+ rowMs = trackFinished(rowMs, progressRows2(progress, input.agent), Date.now() - startedAt);
22544
+ if (current.current === input) setState({ status: "running", progress, rowMs });
22406
22545
  }).then((result) => {
22407
22546
  if (current.current !== input) return;
22408
22547
  void finishDebugRun({
22409
- ...generationLogOutputs(result, lastProgress),
22548
+ ...generationLogOutputs(result, lastProgress2),
22410
22549
  exitMethod: result.ok ? "saved" : "discarded"
22411
22550
  });
22412
22551
  setState({ status: "done", result });
@@ -22446,7 +22585,7 @@ function buildFlowStart(input) {
22446
22585
  }
22447
22586
 
22448
22587
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
22449
- import { Box as Box45 } from "ink";
22588
+ import { Box as Box46 } from "ink";
22450
22589
 
22451
22590
  // packages/experience-design-system-types/dist/src/cdf/validate.js
22452
22591
  import { Ajv as Ajv2 } from "ajv";
@@ -22932,7 +23071,7 @@ function skipLabel(matchedNames) {
22932
23071
  }
22933
23072
 
22934
23073
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
22935
- import { jsx as jsx31 } from "react/jsx-runtime";
23074
+ import { jsx as jsx32 } from "react/jsx-runtime";
22936
23075
  function PreviewValidationErrorScreen({
22937
23076
  errors,
22938
23077
  missingNames,
@@ -22941,7 +23080,7 @@ function PreviewValidationErrorScreen({
22941
23080
  onQuit
22942
23081
  }) {
22943
23082
  const matchedNames = matchedComponentNames(errors, missingNames);
22944
- return /* @__PURE__ */ jsx31(
23083
+ return /* @__PURE__ */ jsx32(
22945
23084
  GateStep,
22946
23085
  {
22947
23086
  intent: "error",
@@ -22977,7 +23116,7 @@ function getReviewJsonPanelValue(selected, showHiddenProps) {
22977
23116
  }
22978
23117
 
22979
23118
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
22980
- import { Box as Box38, Text as Text40 } from "ink";
23119
+ import { Box as Box39, Text as Text41 } from "ink";
22981
23120
 
22982
23121
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/graph/cycle-view.ts
22983
23122
  function computeCycleView(components) {
@@ -23216,12 +23355,12 @@ function enumerateCycleBreaks(cycle, components) {
23216
23355
  }
23217
23356
 
23218
23357
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
23219
- import { Box as Box32, Text as Text34 } from "ink";
23358
+ import { Box as Box33, Text as Text35 } from "ink";
23220
23359
 
23221
23360
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
23222
23361
  import React13, { useEffect as useEffect17, useLayoutEffect as useLayoutEffect2, useState as useState19 } from "react";
23223
23362
  import figures6 from "figures";
23224
- import { Box as Box26, measureElement, Text as Text27 } from "ink";
23363
+ import { Box as Box27, measureElement, Text as Text28 } from "ink";
23225
23364
 
23226
23365
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/scroll-offset.ts
23227
23366
  function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
@@ -23252,7 +23391,7 @@ function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
23252
23391
  }
23253
23392
 
23254
23393
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
23255
- import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
23394
+ import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
23256
23395
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
23257
23396
  return {
23258
23397
  selected,
@@ -23390,14 +23529,14 @@ function serializeState(state2, originalJson) {
23390
23529
  return JSON.stringify(entry, null, 2);
23391
23530
  }
23392
23531
  function Picker({ value, active }) {
23393
- return /* @__PURE__ */ jsxs26(Box26, { children: [
23394
- active && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u2039" }),
23395
- /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
23396
- active && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u203A" })
23532
+ return /* @__PURE__ */ jsxs27(Box27, { children: [
23533
+ active && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u2039" }),
23534
+ /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
23535
+ active && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u203A" })
23397
23536
  ] });
23398
23537
  }
23399
23538
  function Toggle({ value, active }) {
23400
- return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
23539
+ return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
23401
23540
  }
23402
23541
  function InlinePropField({
23403
23542
  label,
@@ -23406,8 +23545,8 @@ function InlinePropField({
23406
23545
  flexible = false,
23407
23546
  width
23408
23547
  }) {
23409
- return /* @__PURE__ */ jsxs26(Box26, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
23410
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
23548
+ return /* @__PURE__ */ jsxs27(Box27, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
23549
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
23411
23550
  focused ? "\u203A " : " ",
23412
23551
  label
23413
23552
  ] }),
@@ -23420,19 +23559,19 @@ function RequiredField({
23420
23559
  editingField,
23421
23560
  activeField
23422
23561
  }) {
23423
- return /* @__PURE__ */ jsx32(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx32(Toggle, { value, active: editingField && activeField === "required" }) });
23562
+ return /* @__PURE__ */ jsx33(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx33(Toggle, { value, active: editingField && activeField === "required" }) });
23424
23563
  }
23425
23564
  function DefaultValueRow({
23426
23565
  display,
23427
23566
  active,
23428
23567
  focused
23429
23568
  }) {
23430
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
23431
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23569
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
23570
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23432
23571
  focused ? "\u203A " : " ",
23433
23572
  "default:"
23434
23573
  ] }),
23435
- active ? /* @__PURE__ */ jsx32(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: display })
23574
+ active ? /* @__PURE__ */ jsx33(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: display })
23436
23575
  ] });
23437
23576
  }
23438
23577
  function RowLabel({
@@ -23440,8 +23579,8 @@ function RowLabel({
23440
23579
  selected,
23441
23580
  trailing = true
23442
23581
  }) {
23443
- return /* @__PURE__ */ jsxs26(
23444
- Text27,
23582
+ return /* @__PURE__ */ jsxs27(
23583
+ Text28,
23445
23584
  {
23446
23585
  color: selected ? PALETTE.onAccent : PALETTE.accent,
23447
23586
  bold: selected,
@@ -23460,10 +23599,10 @@ function ValueInputRow({
23460
23599
  valueText,
23461
23600
  cursorVisible
23462
23601
  }) {
23463
- return /* @__PURE__ */ jsxs26(Box26, { paddingLeft: 2, children: [
23464
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
23465
- /* @__PURE__ */ jsx32(Text27, { children: valueText }),
23466
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: " " })
23602
+ return /* @__PURE__ */ jsxs27(Box27, { paddingLeft: 2, children: [
23603
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
23604
+ /* @__PURE__ */ jsx33(Text28, { children: valueText }),
23605
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: " " })
23467
23606
  ] });
23468
23607
  }
23469
23608
  function EditableListItem({
@@ -23476,9 +23615,9 @@ function EditableListItem({
23476
23615
  }) {
23477
23616
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
23478
23617
  if (isBeingEdited) {
23479
- return /* @__PURE__ */ jsx32(ValueInputRow, { mode: "edit", valueText, cursorVisible });
23618
+ return /* @__PURE__ */ jsx33(ValueInputRow, { mode: "edit", valueText, cursorVisible });
23480
23619
  }
23481
- return /* @__PURE__ */ jsx32(Box26, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx32(Text27, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
23620
+ return /* @__PURE__ */ jsx33(Box27, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text28, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
23482
23621
  }
23483
23622
  function EditableValueList({
23484
23623
  values,
@@ -23491,9 +23630,9 @@ function EditableValueList({
23491
23630
  emptyPaddingLeft,
23492
23631
  showAddInput
23493
23632
  }) {
23494
- return /* @__PURE__ */ jsxs26(Fragment6, { children: [
23495
- 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 }) })),
23496
- values.map((value, index) => /* @__PURE__ */ jsx32(
23633
+ return /* @__PURE__ */ jsxs27(Fragment7, { children: [
23634
+ 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 }) })),
23635
+ values.map((value, index) => /* @__PURE__ */ jsx33(
23497
23636
  EditableListItem,
23498
23637
  {
23499
23638
  value,
@@ -23505,7 +23644,7 @@ function EditableValueList({
23505
23644
  },
23506
23645
  index
23507
23646
  )),
23508
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx32(ValueInputRow, { mode: "add", valueText, cursorVisible })
23647
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx33(ValueInputRow, { mode: "add", valueText, cursorVisible })
23509
23648
  ] });
23510
23649
  }
23511
23650
  function DefaultSubRow({
@@ -23517,51 +23656,51 @@ function DefaultSubRow({
23517
23656
  }) {
23518
23657
  const cursor = cursorVisible ? "\u2588" : " ";
23519
23658
  if (prop.type === "richtext" || prop.type === "media" || prop.type === "link") {
23520
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
23521
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23659
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
23660
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23522
23661
  focused ? "\u203A " : " ",
23523
23662
  "default:"
23524
23663
  ] }),
23525
- /* @__PURE__ */ jsx32(Text27, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
23664
+ /* @__PURE__ */ jsx33(Text28, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
23526
23665
  ] });
23527
23666
  }
23528
23667
  if (prop.type === "boolean") {
23529
23668
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
23530
- return /* @__PURE__ */ jsx32(DefaultValueRow, { display, active, focused });
23669
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
23531
23670
  }
23532
23671
  if (prop.type === "enum") {
23533
23672
  if (prop.values.length === 0) {
23534
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
23535
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23673
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
23674
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23536
23675
  focused ? "\u203A " : " ",
23537
23676
  "default:"
23538
23677
  ] }),
23539
- /* @__PURE__ */ jsx32(Text27, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
23678
+ /* @__PURE__ */ jsx33(Text28, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
23540
23679
  ] });
23541
23680
  }
23542
23681
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
23543
- return /* @__PURE__ */ jsx32(DefaultValueRow, { display, active, focused });
23682
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
23544
23683
  }
23545
23684
  const value = typeof prop.default === "string" ? prop.default : "";
23546
23685
  if (active) {
23547
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "row", flexShrink: 0, children: [
23548
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23686
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "row", flexShrink: 0, children: [
23687
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23549
23688
  focused ? "\u203A " : " ",
23550
23689
  "default:"
23551
23690
  ] }),
23552
- /* @__PURE__ */ jsxs26(Box26, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
23553
- /* @__PURE__ */ jsx32(Text27, { children: value.slice(0, textCursor) }),
23554
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
23555
- /* @__PURE__ */ jsx32(Text27, { children: value.slice(textCursor + 1) })
23691
+ /* @__PURE__ */ jsxs27(Box27, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
23692
+ /* @__PURE__ */ jsx33(Text28, { children: value.slice(0, textCursor) }),
23693
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
23694
+ /* @__PURE__ */ jsx33(Text28, { children: value.slice(textCursor + 1) })
23556
23695
  ] })
23557
23696
  ] });
23558
23697
  }
23559
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexShrink: 0, children: [
23560
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23698
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexShrink: 0, children: [
23699
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23561
23700
  focused ? "\u203A " : " ",
23562
23701
  "default:"
23563
23702
  ] }),
23564
- /* @__PURE__ */ jsx32(Text27, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
23703
+ /* @__PURE__ */ jsx33(Text28, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
23565
23704
  ] });
23566
23705
  }
23567
23706
  function DescriptionField({
@@ -23576,20 +23715,20 @@ function DescriptionField({
23576
23715
  paddingLeft = 2
23577
23716
  }) {
23578
23717
  if (compact) {
23579
- return /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23580
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23718
+ return /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23719
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23581
23720
  focused ? "\u203A " : " ",
23582
23721
  label
23583
23722
  ] }),
23584
- /* @__PURE__ */ jsx32(Text27, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
23723
+ /* @__PURE__ */ jsx33(Text28, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
23585
23724
  ] });
23586
23725
  }
23587
- return /* @__PURE__ */ jsxs26(Box26, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
23588
- /* @__PURE__ */ jsxs26(Text27, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23726
+ return /* @__PURE__ */ jsxs27(Box27, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
23727
+ /* @__PURE__ */ jsxs27(Text28, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
23589
23728
  focused ? "\u203A " : " ",
23590
23729
  label
23591
23730
  ] }),
23592
- editing ? /* @__PURE__ */ jsx32(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: value || "\u2014" })
23731
+ editing ? /* @__PURE__ */ jsx33(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: value || "\u2014" })
23593
23732
  ] });
23594
23733
  }
23595
23734
  function EditableDescription({
@@ -23597,9 +23736,9 @@ function EditableDescription({
23597
23736
  value,
23598
23737
  textCursor
23599
23738
  }) {
23600
- return /* @__PURE__ */ jsxs26(Text27, { wrap: "wrap", children: [
23739
+ return /* @__PURE__ */ jsxs27(Text28, { wrap: "wrap", children: [
23601
23740
  value.slice(0, textCursor),
23602
- /* @__PURE__ */ jsx32(Text27, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
23741
+ /* @__PURE__ */ jsx33(Text28, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
23603
23742
  value.slice(textCursor + 1)
23604
23743
  ] });
23605
23744
  }
@@ -23620,9 +23759,9 @@ function PropRow({
23620
23759
  }) {
23621
23760
  const descFocused = activeField === "description";
23622
23761
  const descActive = editingField && descFocused;
23623
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
23624
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(RowLabel, { name: prop.name, selected }) }),
23625
- /* @__PURE__ */ jsx32(
23762
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
23763
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: prop.name, selected }) }),
23764
+ /* @__PURE__ */ jsx33(
23626
23765
  DescriptionField,
23627
23766
  {
23628
23767
  value: prop.description,
@@ -23635,8 +23774,8 @@ function PropRow({
23635
23774
  paddingLeft: 0
23636
23775
  }
23637
23776
  ),
23638
- /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
23639
- /* @__PURE__ */ jsx32(
23777
+ /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
23778
+ /* @__PURE__ */ jsx33(
23640
23779
  RequiredField,
23641
23780
  {
23642
23781
  value: prop.required,
@@ -23645,21 +23784,21 @@ function PropRow({
23645
23784
  activeField
23646
23785
  }
23647
23786
  ),
23648
- /* @__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 }) })
23787
+ /* @__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 }) })
23649
23788
  ] }),
23650
- 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" }) }),
23651
- prop.type === "enum" && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23652
- /* @__PURE__ */ jsxs26(Text27, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
23789
+ 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" }) }),
23790
+ prop.type === "enum" && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23791
+ /* @__PURE__ */ jsxs27(Text28, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
23653
23792
  activeField === "values" ? "\u203A " : " ",
23654
23793
  "values:"
23655
23794
  ] }),
23656
- /* @__PURE__ */ jsxs26(Text27, { wrap: "wrap", children: [
23795
+ /* @__PURE__ */ jsxs27(Text28, { wrap: "wrap", children: [
23657
23796
  "[",
23658
23797
  prop.values.join(", "),
23659
23798
  "]"
23660
23799
  ] })
23661
23800
  ] }),
23662
- /* @__PURE__ */ jsx32(
23801
+ /* @__PURE__ */ jsx33(
23663
23802
  DefaultSubRow,
23664
23803
  {
23665
23804
  prop,
@@ -23669,13 +23808,13 @@ function PropRow({
23669
23808
  cursorVisible
23670
23809
  }
23671
23810
  ),
23672
- prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23673
- /* @__PURE__ */ jsxs26(Text27, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
23811
+ prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23812
+ /* @__PURE__ */ jsxs27(Text28, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
23674
23813
  activeField === "allowed" ? "\u203A " : " ",
23675
23814
  "allowed:"
23676
23815
  ] }),
23677
- 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(
23678
- Text27,
23816
+ 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(
23817
+ Text28,
23679
23818
  {
23680
23819
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
23681
23820
  wrap: "wrap",
@@ -23683,17 +23822,17 @@ function PropRow({
23683
23822
  }
23684
23823
  )
23685
23824
  ] }),
23686
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx32(Box26, { paddingLeft: 2, children: /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: (() => {
23825
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx33(Box27, { paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: (() => {
23687
23826
  const max = Math.max(8, width - 8);
23688
23827
  const text = `~ ${rationale}`;
23689
23828
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
23690
23829
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
23691
- selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs26(Box26, { paddingLeft: 2, flexDirection: "column", children: [
23692
- /* @__PURE__ */ jsxs26(Box26, { children: [
23693
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "values:" }),
23694
- activeField === "values" && /* @__PURE__ */ jsx32(Text27, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
23830
+ selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs27(Box27, { paddingLeft: 2, flexDirection: "column", children: [
23831
+ /* @__PURE__ */ jsxs27(Box27, { children: [
23832
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "values:" }),
23833
+ activeField === "values" && /* @__PURE__ */ jsx33(Text28, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
23695
23834
  ] }),
23696
- /* @__PURE__ */ jsx32(
23835
+ /* @__PURE__ */ jsx33(
23697
23836
  EditableValueList,
23698
23837
  {
23699
23838
  values: prop.values,
@@ -23723,9 +23862,9 @@ function SlotRow({
23723
23862
  pickerCandidates,
23724
23863
  pickerCursor
23725
23864
  }) {
23726
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, flexShrink: 0, children: [
23727
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(RowLabel, { name: slot.name, selected, trailing: false }) }),
23728
- /* @__PURE__ */ jsx32(
23865
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, flexShrink: 0, children: [
23866
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: slot.name, selected, trailing: false }) }),
23867
+ /* @__PURE__ */ jsx33(
23729
23868
  DescriptionField,
23730
23869
  {
23731
23870
  value: slot.description,
@@ -23738,7 +23877,7 @@ function SlotRow({
23738
23877
  paddingLeft: 0
23739
23878
  }
23740
23879
  ),
23741
- /* @__PURE__ */ jsx32(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx32(
23880
+ /* @__PURE__ */ jsx33(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(
23742
23881
  RequiredField,
23743
23882
  {
23744
23883
  value: slot.required,
@@ -23747,9 +23886,9 @@ function SlotRow({
23747
23886
  activeField
23748
23887
  }
23749
23888
  ) }),
23750
- !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs26(Box26, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23751
- /* @__PURE__ */ jsxs26(
23752
- Text27,
23889
+ !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs27(Box27, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23890
+ /* @__PURE__ */ jsxs27(
23891
+ Text28,
23753
23892
  {
23754
23893
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
23755
23894
  bold: activeField === "allowedComponents",
@@ -23759,12 +23898,12 @@ function SlotRow({
23759
23898
  ]
23760
23899
  }
23761
23900
  ),
23762
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx32(Text27, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
23901
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx33(Text28, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
23763
23902
  ] }),
23764
- selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
23765
- /* @__PURE__ */ jsxs26(Box26, { children: [
23766
- /* @__PURE__ */ jsxs26(
23767
- Text27,
23903
+ selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", children: [
23904
+ /* @__PURE__ */ jsxs27(Box27, { children: [
23905
+ /* @__PURE__ */ jsxs27(
23906
+ Text28,
23768
23907
  {
23769
23908
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
23770
23909
  bold: activeField === "allowedComponents",
@@ -23774,9 +23913,9 @@ function SlotRow({
23774
23913
  ]
23775
23914
  }
23776
23915
  ),
23777
- 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" })
23916
+ 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" })
23778
23917
  ] }),
23779
- /* @__PURE__ */ jsx32(
23918
+ /* @__PURE__ */ jsx33(
23780
23919
  EditableValueList,
23781
23920
  {
23782
23921
  values: slot.allowedComponents,
@@ -23790,21 +23929,21 @@ function SlotRow({
23790
23929
  showAddInput: editingField && activeField === "allowedComponents"
23791
23930
  }
23792
23931
  ),
23793
- 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)" }) : (() => {
23932
+ 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)" }) : (() => {
23794
23933
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
23795
23934
  if (filtered.length === 0) {
23796
- return /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
23935
+ return /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
23797
23936
  }
23798
23937
  const cursor = pickerCursor % filtered.length;
23799
23938
  const MAX_VISIBLE = 5;
23800
23939
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
23801
23940
  const slice = filtered.slice(start, start + MAX_VISIBLE);
23802
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
23803
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
23941
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", children: [
23942
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
23804
23943
  slice.map((name, i) => {
23805
23944
  const absIdx = start + i;
23806
23945
  const isCursor = absIdx === cursor;
23807
- return /* @__PURE__ */ jsx32(Text27, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
23946
+ return /* @__PURE__ */ jsx33(Text28, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
23808
23947
  })
23809
23948
  ] });
23810
23949
  })() })
@@ -24684,18 +24823,18 @@ function FieldEditor({
24684
24823
  });
24685
24824
  const innerWidth = Math.max(1, width - 2);
24686
24825
  if (parseErr) {
24687
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
24688
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
24689
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.error, children: parseErr }),
24690
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
24826
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
24827
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
24828
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.error, children: parseErr }),
24829
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
24691
24830
  ] });
24692
24831
  }
24693
24832
  if (props.length === 0 && slots.length === 0) {
24694
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
24695
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
24696
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
24697
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
24698
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
24833
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
24834
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
24835
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
24836
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
24837
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
24699
24838
  ] });
24700
24839
  }
24701
24840
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -24828,12 +24967,12 @@ function FieldEditor({
24828
24967
  const renderRow = (row, index) => {
24829
24968
  const key = rowKey(row, index);
24830
24969
  if (row.kind === "header") {
24831
- return /* @__PURE__ */ jsx32(Box26, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.success, children: row.label }) }, key);
24970
+ return /* @__PURE__ */ jsx33(Box27, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.success, children: row.label }) }, key);
24832
24971
  }
24833
24972
  if (row.kind === "component-description") {
24834
24973
  const isSelected2 = inComponentDesc && active;
24835
24974
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
24836
- return /* @__PURE__ */ jsx32(
24975
+ return /* @__PURE__ */ jsx33(
24837
24976
  DescriptionField,
24838
24977
  {
24839
24978
  value: editorState.componentDescription,
@@ -24864,7 +25003,7 @@ function FieldEditor({
24864
25003
  valueText,
24865
25004
  innerWidth
24866
25005
  );
24867
- return /* @__PURE__ */ jsx32(
25006
+ return /* @__PURE__ */ jsx33(
24868
25007
  PropRow,
24869
25008
  {
24870
25009
  prop: p,
@@ -24891,7 +25030,7 @@ function FieldEditor({
24891
25030
  valueText,
24892
25031
  innerWidth
24893
25032
  );
24894
- return /* @__PURE__ */ jsx32(
25033
+ return /* @__PURE__ */ jsx33(
24895
25034
  SlotRow,
24896
25035
  {
24897
25036
  slot: s,
@@ -24903,7 +25042,7 @@ function FieldEditor({
24903
25042
  key
24904
25043
  );
24905
25044
  };
24906
- return /* @__PURE__ */ jsxs26(
25045
+ return /* @__PURE__ */ jsxs27(
24907
25046
  FixedPanel,
24908
25047
  {
24909
25048
  width,
@@ -24912,9 +25051,9 @@ function FieldEditor({
24912
25051
  borderStyle: "single",
24913
25052
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
24914
25053
  children: [
24915
- 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." }),
25054
+ 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." }),
24916
25055
  header,
24917
- /* @__PURE__ */ jsx32(Box26, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx32(
25056
+ /* @__PURE__ */ jsx33(Box27, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx33(
24918
25057
  PropRow,
24919
25058
  {
24920
25059
  prop: currentProp,
@@ -24930,7 +25069,7 @@ function FieldEditor({
24930
25069
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
24931
25070
  showRationale: showInlineRationales
24932
25071
  }
24933
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx32(
25072
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx33(
24934
25073
  SlotRow,
24935
25074
  {
24936
25075
  slot: currentSlot,
@@ -24949,8 +25088,8 @@ function FieldEditor({
24949
25088
  ) : visibleRowSlice.map((row, index) => {
24950
25089
  const absoluteIndex = scrollStart + index;
24951
25090
  const key = rowKey(row, absoluteIndex);
24952
- return /* @__PURE__ */ jsx32(
24953
- Box26,
25091
+ return /* @__PURE__ */ jsx33(
25092
+ Box27,
24954
25093
  {
24955
25094
  ref: (node) => {
24956
25095
  if (node) rowMeasureRefs.current.set(key, node);
@@ -24963,7 +25102,7 @@ function FieldEditor({
24963
25102
  `visible-${key}`
24964
25103
  );
24965
25104
  }) }),
24966
- categoryBelow && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
25105
+ categoryBelow && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
24967
25106
  sourceOpen && !onToggleSourceExternal && (() => {
24968
25107
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
24969
25108
  const start = propMeta?.sourceStartLine ?? null;
@@ -24972,60 +25111,60 @@ function FieldEditor({
24972
25111
  const src = metadata?.componentSource ?? null;
24973
25112
  const headerPath = path5 ?? "<unknown source path>";
24974
25113
  if (!start || !end2 || !src) {
24975
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24976
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
24977
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
24978
- /* @__PURE__ */ jsx32(Text27, { children: "[s] close" })
25114
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
25115
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
25116
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
25117
+ /* @__PURE__ */ jsx33(Text28, { children: "[s] close" })
24979
25118
  ] });
24980
25119
  }
24981
25120
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
24982
- return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24983
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
24984
- lines.map((ln, i) => /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
24985
- /* @__PURE__ */ jsx32(Text27, { children: "[s] close \xB7 [Esc] close" })
25121
+ return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
25122
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
25123
+ lines.map((ln, i) => /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
25124
+ /* @__PURE__ */ jsx33(Text28, { children: "[s] close \xB7 [Esc] close" })
24986
25125
  ] });
24987
25126
  })(),
24988
- showHelp && /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
24989
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
24990
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
24991
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Row navigation" }),
24992
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191/\u2193 move between rows" }),
24993
- /* @__PURE__ */ jsx32(Text27, { children: " Enter edit fields on the current row" }),
24994
- /* @__PURE__ */ jsx32(Text27, { children: " d delete the current prop or slot (asks to confirm)" }),
24995
- /* @__PURE__ */ jsx32(Text27, { children: " Esc exit the panel" }),
24996
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
24997
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Field editing" }),
24998
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
24999
- /* @__PURE__ */ jsx32(Text27, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
25000
- /* @__PURE__ */ jsx32(Text27, { children: " Space/Enter toggle required" }),
25001
- /* @__PURE__ */ jsx32(Text27, { children: " Type edit description / string default" }),
25002
- /* @__PURE__ */ jsx32(Text27, { children: " Esc exit field-edit back to the row" }),
25003
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
25004
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Values / allowedComponents" }),
25005
- /* @__PURE__ */ jsx32(Text27, { children: " a / e / r add \xB7 edit \xB7 remove" }),
25006
- /* @__PURE__ */ jsx32(Text27, { children: " \u2191\u2193 navigate the list" }),
25007
- /* @__PURE__ */ jsx32(Text27, { children: " K / J reorder up \xB7 down" }),
25008
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
25009
- /* @__PURE__ */ jsx32(Text27, { bold: true, children: "Panels" }),
25010
- /* @__PURE__ */ jsx32(Text27, { children: " s toggle source-view for the current prop" }),
25011
- /* @__PURE__ */ jsx32(Text27, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
25012
- /* @__PURE__ */ jsx32(Text27, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
25013
- /* @__PURE__ */ jsx32(Text27, { children: " ? toggle this overlay" }),
25014
- /* @__PURE__ */ jsx32(Text27, { children: " " }),
25015
- /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: "press ? or Esc to close" })
25127
+ showHelp && /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
25128
+ /* @__PURE__ */ jsx33(Text28, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
25129
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
25130
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Row navigation" }),
25131
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191/\u2193 move between rows" }),
25132
+ /* @__PURE__ */ jsx33(Text28, { children: " Enter edit fields on the current row" }),
25133
+ /* @__PURE__ */ jsx33(Text28, { children: " d delete the current prop or slot (asks to confirm)" }),
25134
+ /* @__PURE__ */ jsx33(Text28, { children: " Esc exit the panel" }),
25135
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
25136
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Field editing" }),
25137
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
25138
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
25139
+ /* @__PURE__ */ jsx33(Text28, { children: " Space/Enter toggle required" }),
25140
+ /* @__PURE__ */ jsx33(Text28, { children: " Type edit description / string default" }),
25141
+ /* @__PURE__ */ jsx33(Text28, { children: " Esc exit field-edit back to the row" }),
25142
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
25143
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Values / allowedComponents" }),
25144
+ /* @__PURE__ */ jsx33(Text28, { children: " a / e / r add \xB7 edit \xB7 remove" }),
25145
+ /* @__PURE__ */ jsx33(Text28, { children: " \u2191\u2193 navigate the list" }),
25146
+ /* @__PURE__ */ jsx33(Text28, { children: " K / J reorder up \xB7 down" }),
25147
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
25148
+ /* @__PURE__ */ jsx33(Text28, { bold: true, children: "Panels" }),
25149
+ /* @__PURE__ */ jsx33(Text28, { children: " s toggle source-view for the current prop" }),
25150
+ /* @__PURE__ */ jsx33(Text28, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
25151
+ /* @__PURE__ */ jsx33(Text28, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
25152
+ /* @__PURE__ */ jsx33(Text28, { children: " ? toggle this overlay" }),
25153
+ /* @__PURE__ */ jsx33(Text28, { children: " " }),
25154
+ /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: "press ? or Esc to close" })
25016
25155
  ] }),
25017
- validationError && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.error, children: "\u2717 " + validationError }),
25018
- /* @__PURE__ */ jsx32(Box26, { paddingTop: 1, children: /* @__PURE__ */ jsx32(Text27, { color: pendingDelete ? PALETTE.text : PALETTE.muted, children: modeLabel }) })
25156
+ validationError && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.error, children: "\u2717 " + validationError }),
25157
+ /* @__PURE__ */ jsx33(Box27, { paddingTop: 1, children: /* @__PURE__ */ jsx33(Text28, { color: pendingDelete ? PALETTE.text : PALETTE.muted, children: modeLabel }) })
25019
25158
  ]
25020
25159
  }
25021
25160
  );
25022
25161
  }
25023
25162
 
25024
25163
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
25025
- import { Text as Text33 } from "ink";
25164
+ import { Text as Text34 } from "ink";
25026
25165
 
25027
25166
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
25028
- import { Box as Box28, Text as Text29 } from "ink";
25167
+ import { Box as Box29, Text as Text30 } from "ink";
25029
25168
 
25030
25169
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/wrap-text.ts
25031
25170
  function appendLongWordChunks(word, width, lines) {
@@ -25060,27 +25199,27 @@ function wrapText(text, innerWidth) {
25060
25199
  }
25061
25200
 
25062
25201
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
25063
- import { Box as Box27, Text as Text28 } from "ink";
25064
- import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
25202
+ import { Box as Box28, Text as Text29 } from "ink";
25203
+ import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
25065
25204
  function RationaleLine({ line, active }) {
25066
25205
  if (line.kind === "blank") {
25067
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { children: " " }) });
25206
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { children: " " }) });
25068
25207
  }
25069
25208
  if (line.kind === "heading") {
25070
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
25209
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
25071
25210
  }
25072
25211
  if (line.kind === "label") {
25073
- return /* @__PURE__ */ jsxs27(Box27, { children: [
25074
- line.prefix && /* @__PURE__ */ jsx33(Text28, { children: line.prefix }),
25075
- /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
25076
- line.suffix && /* @__PURE__ */ jsx33(Text28, { color: PALETTE.muted, children: line.suffix })
25212
+ return /* @__PURE__ */ jsxs28(Box28, { children: [
25213
+ line.prefix && /* @__PURE__ */ jsx34(Text29, { children: line.prefix }),
25214
+ /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
25215
+ line.suffix && /* @__PURE__ */ jsx34(Text29, { color: PALETTE.muted, children: line.suffix })
25077
25216
  ] });
25078
25217
  }
25079
- return /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
25218
+ return /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
25080
25219
  }
25081
25220
 
25082
25221
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
25083
- import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
25222
+ import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
25084
25223
  var PLACEHOLDER = "(no rationale captured)";
25085
25224
  function renderComponentRationaleLines(data, innerWidth) {
25086
25225
  const out = [];
@@ -25148,8 +25287,8 @@ function ComponentRationalePanel({
25148
25287
  const overflowed = totalLines > contentHeight;
25149
25288
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
25150
25289
  const visibleEnd = Math.min(totalLines, scrollOffset + contentHeight);
25151
- return /* @__PURE__ */ jsxs28(
25152
- Box28,
25290
+ return /* @__PURE__ */ jsxs29(
25291
+ Box29,
25153
25292
  {
25154
25293
  flexDirection: "column",
25155
25294
  width,
@@ -25157,27 +25296,27 @@ function ComponentRationalePanel({
25157
25296
  borderStyle: "single",
25158
25297
  borderColor: active ? PALETTE.text : void 0,
25159
25298
  children: [
25160
- /* @__PURE__ */ jsx34(Box28, { children: /* @__PURE__ */ jsx34(Text29, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
25161
- visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i)),
25162
- /* @__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" }) })
25299
+ /* @__PURE__ */ jsx35(Box29, { children: /* @__PURE__ */ jsx35(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
25300
+ visible.map((line, i) => /* @__PURE__ */ jsx35(RationaleLine, { line, active }, i)),
25301
+ /* @__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" }) })
25163
25302
  ]
25164
25303
  }
25165
25304
  );
25166
25305
  }
25167
25306
 
25168
25307
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
25169
- import { Box as Box30 } from "ink";
25308
+ import { Box as Box31 } from "ink";
25170
25309
 
25171
25310
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
25172
- import { Text as Text30 } from "ink";
25173
- import { Fragment as Fragment7, jsx as jsx35 } from "react/jsx-runtime";
25311
+ import { Text as Text31 } from "ink";
25312
+ import { Fragment as Fragment8, jsx as jsx36 } from "react/jsx-runtime";
25174
25313
  function HighlightedLine({ parts }) {
25175
- return /* @__PURE__ */ jsx35(Fragment7, { children: parts.map((part, i) => /* @__PURE__ */ jsx35(Text30, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
25314
+ return /* @__PURE__ */ jsx36(Fragment8, { children: parts.map((part, i) => /* @__PURE__ */ jsx36(Text31, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
25176
25315
  }
25177
25316
 
25178
25317
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
25179
- import { Box as Box29, Text as Text31 } from "ink";
25180
- import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
25318
+ import { Box as Box30, Text as Text32 } from "ink";
25319
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
25181
25320
  function ScrollablePanel({
25182
25321
  title,
25183
25322
  width,
@@ -25190,12 +25329,12 @@ function ScrollablePanel({
25190
25329
  children
25191
25330
  }) {
25192
25331
  const overflowed = totalLines > height;
25193
- return /* @__PURE__ */ jsxs29(Box29, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
25194
- /* @__PURE__ */ jsxs29(Box29, { children: [
25195
- /* @__PURE__ */ jsx36(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
25196
- overflowed && /* @__PURE__ */ jsxs29(Fragment8, { children: [
25197
- /* @__PURE__ */ jsx36(Box29, { flexGrow: 1 }),
25198
- /* @__PURE__ */ jsx36(Text31, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
25332
+ return /* @__PURE__ */ jsxs30(Box30, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
25333
+ /* @__PURE__ */ jsxs30(Box30, { children: [
25334
+ /* @__PURE__ */ jsx37(Text32, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
25335
+ overflowed && /* @__PURE__ */ jsxs30(Fragment9, { children: [
25336
+ /* @__PURE__ */ jsx37(Box30, { flexGrow: 1 }),
25337
+ /* @__PURE__ */ jsx37(Text32, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
25199
25338
  ] })
25200
25339
  ] }),
25201
25340
  children
@@ -25203,7 +25342,7 @@ function ScrollablePanel({
25203
25342
  }
25204
25343
 
25205
25344
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
25206
- import { jsx as jsx37 } from "react/jsx-runtime";
25345
+ import { jsx as jsx38 } from "react/jsx-runtime";
25207
25346
  function highlightJson(line) {
25208
25347
  const parts = [];
25209
25348
  let remaining = line;
@@ -25241,7 +25380,7 @@ function highlightJson(line) {
25241
25380
  parts.push({ text: remaining[0] });
25242
25381
  remaining = remaining.slice(1);
25243
25382
  }
25244
- return /* @__PURE__ */ jsx37(HighlightedLine, { parts });
25383
+ return /* @__PURE__ */ jsx38(HighlightedLine, { parts });
25245
25384
  }
25246
25385
  function truncateLine(line, maxWidth) {
25247
25386
  if (line.length <= maxWidth) return line;
@@ -25254,7 +25393,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
25254
25393
  const totalLines = allLines.length;
25255
25394
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
25256
25395
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
25257
- return /* @__PURE__ */ jsx37(
25396
+ return /* @__PURE__ */ jsx38(
25258
25397
  ScrollablePanel,
25259
25398
  {
25260
25399
  title: label,
@@ -25267,14 +25406,14 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
25267
25406
  borderColor: active ? "white" : void 0,
25268
25407
  children: visibleLines.map((line, i) => {
25269
25408
  const truncated = truncateLine(line, innerWidth);
25270
- return /* @__PURE__ */ jsx37(Box30, { children: highlightJson(truncated) }, i);
25409
+ return /* @__PURE__ */ jsx38(Box31, { children: highlightJson(truncated) }, i);
25271
25410
  })
25272
25411
  }
25273
25412
  );
25274
25413
  }
25275
25414
 
25276
25415
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
25277
- import { jsx as jsx38 } from "react/jsx-runtime";
25416
+ import { jsx as jsx39 } from "react/jsx-runtime";
25278
25417
  function renderRationaleLines(rows, innerWidth) {
25279
25418
  const out = [];
25280
25419
  rows.forEach((row, idx) => {
@@ -25307,7 +25446,7 @@ function RationalePanel({
25307
25446
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
25308
25447
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
25309
25448
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
25310
- return /* @__PURE__ */ jsx38(
25449
+ return /* @__PURE__ */ jsx39(
25311
25450
  ScrollablePanel,
25312
25451
  {
25313
25452
  title: `RATIONALE \u2014 ${componentName}`,
@@ -25318,15 +25457,15 @@ function RationalePanel({
25318
25457
  visibleStart,
25319
25458
  visibleEnd,
25320
25459
  borderColor: active ? PALETTE.text : void 0,
25321
- children: visible.map((line, i) => /* @__PURE__ */ jsx38(RationaleLine, { line, active }, i))
25460
+ children: visible.map((line, i) => /* @__PURE__ */ jsx39(RationaleLine, { line, active }, i))
25322
25461
  }
25323
25462
  );
25324
25463
  }
25325
25464
 
25326
25465
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
25327
25466
  import figures7 from "figures";
25328
- import { Box as Box31, Text as Text32 } from "ink";
25329
- import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
25467
+ import { Box as Box32, Text as Text33 } from "ink";
25468
+ import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
25330
25469
  function TokenReviewPanel({
25331
25470
  componentName,
25332
25471
  suggestions,
@@ -25345,8 +25484,8 @@ function TokenReviewPanel({
25345
25484
  const scrollStart = Math.max(0, Math.min(editCursor - Math.floor(visibleCount / 2), maxStart));
25346
25485
  const visiblePaths = current.paths.slice(scrollStart, scrollStart + visibleCount);
25347
25486
  const rangeLabel = current.paths.length === 0 ? "no compatible tokens" : `${scrollStart + 1}-${scrollStart + visiblePaths.length} of ${current.paths.length}`;
25348
- return /* @__PURE__ */ jsxs30(
25349
- Box31,
25487
+ return /* @__PURE__ */ jsxs31(
25488
+ Box32,
25350
25489
  {
25351
25490
  flexDirection: "column",
25352
25491
  width,
@@ -25354,16 +25493,16 @@ function TokenReviewPanel({
25354
25493
  borderStyle: "single",
25355
25494
  borderColor: active ? PALETTE.text : void 0,
25356
25495
  children: [
25357
- /* @__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(", ")})` : ""}` }),
25358
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: `Tick the tokens this property may use (${rangeLabel}).` }),
25359
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
25360
- current.paths.length === 0 && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
25496
+ /* @__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(", ")})` : ""}` }),
25497
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: `Tick the tokens this property may use (${rangeLabel}).` }),
25498
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
25499
+ current.paths.length === 0 && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
25361
25500
  visiblePaths.map((path5, i) => {
25362
25501
  const pathIndex = scrollStart + i;
25363
25502
  const checked = editSelection.has(path5);
25364
25503
  const focused = pathIndex === editCursor;
25365
- return /* @__PURE__ */ jsx39(Box31, { children: /* @__PURE__ */ jsx39(
25366
- Text32,
25504
+ return /* @__PURE__ */ jsx40(Box32, { children: /* @__PURE__ */ jsx40(
25505
+ Text33,
25367
25506
  {
25368
25507
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
25369
25508
  bold: focused,
@@ -25372,15 +25511,15 @@ function TokenReviewPanel({
25372
25511
  }
25373
25512
  ) }, path5);
25374
25513
  }),
25375
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
25376
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
25377
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
25514
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
25515
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
25516
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
25378
25517
  ]
25379
25518
  }
25380
25519
  );
25381
25520
  }
25382
- return /* @__PURE__ */ jsxs30(
25383
- Box31,
25521
+ return /* @__PURE__ */ jsxs31(
25522
+ Box32,
25384
25523
  {
25385
25524
  flexDirection: "column",
25386
25525
  width,
@@ -25388,40 +25527,40 @@ function TokenReviewPanel({
25388
25527
  borderStyle: "single",
25389
25528
  borderColor: active ? PALETTE.text : void 0,
25390
25529
  children: [
25391
- /* @__PURE__ */ jsx39(Text32, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Review mapped tokens \u2014 ${componentName}` }),
25392
- /* @__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.` }),
25393
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate", children: "Suggested tokens come from the agent. Allowed tokens are what editors can pick in Contentful." }),
25394
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
25395
- suggestions.length === 0 && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
25530
+ /* @__PURE__ */ jsx40(Text33, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Review mapped tokens \u2014 ${componentName}` }),
25531
+ /* @__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.` }),
25532
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate", children: "Suggested tokens come from the agent. Allowed tokens are what editors can pick in Contentful." }),
25533
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
25534
+ suggestions.length === 0 && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
25396
25535
  suggestions.map((s, i) => {
25397
25536
  const focused = i === selectedRow;
25398
- return /* @__PURE__ */ jsxs30(Box31, { flexDirection: "column", children: [
25399
- /* @__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(", ")})` : ""}` }) }),
25400
- /* @__PURE__ */ jsx39(
25401
- Text32,
25537
+ return /* @__PURE__ */ jsxs31(Box32, { flexDirection: "column", children: [
25538
+ /* @__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(", ")})` : ""}` }) }),
25539
+ /* @__PURE__ */ jsx40(
25540
+ Text33,
25402
25541
  {
25403
25542
  color: PALETTE.muted,
25404
25543
  children: ` suggested: ${s.suggested.length > 0 ? s.suggested.join(", ") : "none"}`
25405
25544
  }
25406
25545
  ),
25407
- /* @__PURE__ */ jsx39(
25408
- Text32,
25546
+ /* @__PURE__ */ jsx40(
25547
+ Text33,
25409
25548
  {
25410
25549
  color: PALETTE.muted,
25411
25550
  children: ` allowed: ${s.allowed.length > 0 ? s.allowed.join(", ") : "none (any token)"}`
25412
25551
  }
25413
25552
  ),
25414
- /* @__PURE__ */ jsx39(Text32, { children: " " })
25553
+ /* @__PURE__ */ jsx40(Text33, { children: " " })
25415
25554
  ] }, s.propName);
25416
25555
  }),
25417
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "[\u2191/\u2193] move [Enter] edit allowed tokens [Esc] close" })
25556
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "[\u2191/\u2193] move [Enter] edit allowed tokens [Esc] close" })
25418
25557
  ]
25419
25558
  }
25420
25559
  );
25421
25560
  }
25422
25561
 
25423
25562
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
25424
- import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
25563
+ import { Fragment as Fragment10, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
25425
25564
  function ReviewDetailsPanel({
25426
25565
  selectedKey,
25427
25566
  panelOpen,
@@ -25456,7 +25595,7 @@ function ReviewDetailsPanel({
25456
25595
  rationale: s.rationale ?? ""
25457
25596
  }))
25458
25597
  ];
25459
- return /* @__PURE__ */ jsx40(
25598
+ return /* @__PURE__ */ jsx41(
25460
25599
  RationalePanel,
25461
25600
  {
25462
25601
  componentName: componentRationale?.name ?? selectedKey,
@@ -25469,7 +25608,7 @@ function ReviewDetailsPanel({
25469
25608
  );
25470
25609
  }
25471
25610
  if (panelOpen === "component-rationale") {
25472
- return /* @__PURE__ */ jsx40(
25611
+ return /* @__PURE__ */ jsx41(
25473
25612
  ComponentRationalePanel,
25474
25613
  {
25475
25614
  data: componentRationale ?? {
@@ -25494,14 +25633,14 @@ function ReviewDetailsPanel({
25494
25633
  const headerPath = path5 ?? "<unknown source path>";
25495
25634
  const sourceLineCount = Math.max(1, height - 4);
25496
25635
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
25497
- return /* @__PURE__ */ jsxs31(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
25498
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
25499
- 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)" }),
25500
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
25636
+ return /* @__PURE__ */ jsxs32(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
25637
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
25638
+ 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)" }),
25639
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
25501
25640
  ] });
25502
25641
  }
25503
25642
  if (panelOpen === "token-review") {
25504
- return /* @__PURE__ */ jsx40(
25643
+ return /* @__PURE__ */ jsx41(
25505
25644
  TokenReviewPanel,
25506
25645
  {
25507
25646
  componentName: selectedKey,
@@ -25517,7 +25656,7 @@ function ReviewDetailsPanel({
25517
25656
  );
25518
25657
  }
25519
25658
  if (showJson) {
25520
- return /* @__PURE__ */ jsx40(
25659
+ return /* @__PURE__ */ jsx41(
25521
25660
  JsonPanel,
25522
25661
  {
25523
25662
  label: "GENERATED DEFINITION (read-only)",
@@ -25529,11 +25668,11 @@ function ReviewDetailsPanel({
25529
25668
  }
25530
25669
  );
25531
25670
  }
25532
- return /* @__PURE__ */ jsx40(Fragment9, { children: editor });
25671
+ return /* @__PURE__ */ jsx41(Fragment10, { children: editor });
25533
25672
  }
25534
25673
 
25535
25674
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
25536
- import { jsx as jsx41 } from "react/jsx-runtime";
25675
+ import { jsx as jsx42 } from "react/jsx-runtime";
25537
25676
  import { createElement } from "react";
25538
25677
  function toFieldEditorMetadata(reviewMetadata) {
25539
25678
  if (!reviewMetadata) return void 0;
@@ -25567,7 +25706,7 @@ function ReviewDetailsEditor({
25567
25706
  jsonScrollOffset,
25568
25707
  currentTokenSuggestions
25569
25708
  } = reviewEditor;
25570
- return /* @__PURE__ */ jsx41(
25709
+ return /* @__PURE__ */ jsx42(
25571
25710
  ReviewDetailsPanel,
25572
25711
  {
25573
25712
  selectedKey,
@@ -25607,7 +25746,7 @@ function ReviewDetailsEditor({
25607
25746
  }
25608
25747
 
25609
25748
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
25610
- import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
25749
+ import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
25611
25750
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
25612
25751
  return {
25613
25752
  value: reviewEditor.draftValue || selectedJson,
@@ -25647,24 +25786,24 @@ function ReviewEmptyComponentsWarning({
25647
25786
  hidden
25648
25787
  }) {
25649
25788
  if (hidden || count === 0) return null;
25650
- return /* @__PURE__ */ jsx42(Text34, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
25789
+ return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
25651
25790
  }
25652
25791
  function ReviewNoSelection() {
25653
- return /* @__PURE__ */ jsx42(Box32, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, children: "No component selected" }) });
25792
+ return /* @__PURE__ */ jsx43(Box33, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "No component selected" }) });
25654
25793
  }
25655
25794
  function ReviewFinalizeError({
25656
25795
  message,
25657
25796
  hidden
25658
25797
  }) {
25659
25798
  if (hidden || !message) return null;
25660
- return /* @__PURE__ */ jsx42(Text34, { color: PALETTE.error, children: `\u26A0 ${message}` });
25799
+ return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, children: `\u26A0 ${message}` });
25661
25800
  }
25662
25801
  function ReviewPanelFooter({
25663
25802
  reviewEditor,
25664
25803
  sidebarFocused,
25665
25804
  sidebarFooter
25666
25805
  }) {
25667
- 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" : "") });
25806
+ 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" : "") });
25668
25807
  }
25669
25808
  function ReviewComponentTitle({
25670
25809
  selectedKey,
@@ -25672,10 +25811,10 @@ function ReviewComponentTitle({
25672
25811
  slotCount,
25673
25812
  sidebarFocused
25674
25813
  }) {
25675
- return /* @__PURE__ */ jsxs32(Box32, { paddingLeft: 2, paddingBottom: 1, children: [
25676
- /* @__PURE__ */ jsx42(Text34, { bold: true, wrap: "truncate-end", children: selectedKey }),
25677
- /* @__PURE__ */ jsx42(Box32, { flexGrow: 1 }),
25678
- /* @__PURE__ */ jsxs32(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: [
25814
+ return /* @__PURE__ */ jsxs33(Box33, { paddingLeft: 2, paddingBottom: 1, children: [
25815
+ /* @__PURE__ */ jsx43(Text35, { bold: true, wrap: "truncate-end", children: selectedKey }),
25816
+ /* @__PURE__ */ jsx43(Box33, { flexGrow: 1 }),
25817
+ /* @__PURE__ */ jsxs33(Text35, { color: PALETTE.muted, wrap: "truncate-end", children: [
25679
25818
  propCount,
25680
25819
  " prop",
25681
25820
  propCount !== 1 ? "s" : "",
@@ -25704,8 +25843,8 @@ function ReviewComponentPanel({
25704
25843
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
25705
25844
  const contentHeight = Math.max(1, height - 2);
25706
25845
  const contentWidth = Math.max(1, width - 1);
25707
- 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: [
25708
- /* @__PURE__ */ jsx42(Box32, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx42(
25846
+ 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: [
25847
+ /* @__PURE__ */ jsx43(Box33, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx43(
25709
25848
  ReviewDetailsEditor,
25710
25849
  {
25711
25850
  selectedKey,
@@ -25718,7 +25857,7 @@ function ReviewComponentPanel({
25718
25857
  jsonValue,
25719
25858
  sidebarFocused,
25720
25859
  fieldEditor,
25721
- header: /* @__PURE__ */ jsx42(
25860
+ header: /* @__PURE__ */ jsx43(
25722
25861
  ReviewComponentTitle,
25723
25862
  {
25724
25863
  selectedKey,
@@ -25729,8 +25868,8 @@ function ReviewComponentPanel({
25729
25868
  )
25730
25869
  }
25731
25870
  ) }),
25732
- /* @__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 : " " }) }),
25733
- /* @__PURE__ */ jsx42(Box32, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx42(
25871
+ /* @__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 : " " }) }),
25872
+ /* @__PURE__ */ jsx43(Box33, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx43(
25734
25873
  ReviewPanelFooter,
25735
25874
  {
25736
25875
  reviewEditor,
@@ -25742,8 +25881,8 @@ function ReviewComponentPanel({
25742
25881
  }
25743
25882
 
25744
25883
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
25745
- import { Box as Box33, Text as Text35 } from "ink";
25746
- import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
25884
+ import { Box as Box34, Text as Text36 } from "ink";
25885
+ import { jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
25747
25886
  function countReviewStatuses(entries) {
25748
25887
  return entries.reduce(
25749
25888
  (counts, entry) => {
@@ -25756,13 +25895,13 @@ function countReviewStatuses(entries) {
25756
25895
  );
25757
25896
  }
25758
25897
  function ReviewLoadingState() {
25759
- return /* @__PURE__ */ jsx43(Box33, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
25898
+ return /* @__PURE__ */ jsx44(Box34, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
25760
25899
  }
25761
25900
  function ReviewLoadError({ message }) {
25762
- return /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
25763
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, children: message }),
25764
- /* @__PURE__ */ jsx43(Text35, { children: " " }),
25765
- /* @__PURE__ */ jsx43(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
25901
+ return /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
25902
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: message }),
25903
+ /* @__PURE__ */ jsx44(Text36, { children: " " }),
25904
+ /* @__PURE__ */ jsx44(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
25766
25905
  ] });
25767
25906
  }
25768
25907
 
@@ -25962,8 +26101,8 @@ async function runLivePreview(opts) {
25962
26101
  }
25963
26102
 
25964
26103
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
25965
- import { Box as Box34, Text as Text36 } from "ink";
25966
- import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
26104
+ import { Box as Box35, Text as Text37 } from "ink";
26105
+ import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
25967
26106
  var FINALIZE_REMOVED_WINDOW = 6;
25968
26107
  function FinalizeDialog({
25969
26108
  accepted,
@@ -25992,51 +26131,51 @@ function FinalizeDialog({
25992
26131
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
25993
26132
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
25994
26133
  const hasMoreAbove = offset > 0;
25995
- return /* @__PURE__ */ jsx44(Box34, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", alignItems: "flex-start", children: [
25996
- /* @__PURE__ */ jsx44(Text36, { bold: true, children: "Finalize" }),
25997
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
25998
- /* @__PURE__ */ jsxs34(Text36, { children: [
25999
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.success, children: [
26134
+ return /* @__PURE__ */ jsx45(Box35, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", alignItems: "flex-start", children: [
26135
+ /* @__PURE__ */ jsx45(Text37, { bold: true, children: "Finalize" }),
26136
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
26137
+ /* @__PURE__ */ jsxs35(Text37, { children: [
26138
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.success, children: [
26000
26139
  accepted,
26001
26140
  " accepted"
26002
26141
  ] }),
26003
- /* @__PURE__ */ jsx44(Text36, { children: " \xB7 " }),
26004
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.error, children: [
26142
+ /* @__PURE__ */ jsx45(Text37, { children: " \xB7 " }),
26143
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.error, children: [
26005
26144
  rejected,
26006
26145
  " rejected"
26007
26146
  ] }),
26008
- /* @__PURE__ */ jsx44(Text36, { children: " \xB7 " }),
26009
- /* @__PURE__ */ jsxs34(Text36, { color: PALETTE.muted, children: [
26147
+ /* @__PURE__ */ jsx45(Text37, { children: " \xB7 " }),
26148
+ /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.muted, children: [
26010
26149
  needsReview,
26011
26150
  " unresolved"
26012
26151
  ] })
26013
26152
  ] }),
26014
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
26015
- noneAccepted && /* @__PURE__ */ jsxs34(Fragment11, { children: [
26016
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
26017
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
26018
- /* @__PURE__ */ jsx44(Text36, { children: " " })
26153
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
26154
+ noneAccepted && /* @__PURE__ */ jsxs35(Fragment12, { children: [
26155
+ /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
26156
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
26157
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
26019
26158
  ] }),
26020
- !allResolved && /* @__PURE__ */ jsxs34(Fragment11, { children: [
26021
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
26022
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
26023
- /* @__PURE__ */ jsx44(Text36, { children: " " })
26159
+ !allResolved && /* @__PURE__ */ jsxs35(Fragment12, { children: [
26160
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
26161
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
26162
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
26024
26163
  ] }),
26025
- /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", height: 2, children: [
26026
- 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: " " }),
26027
- /* @__PURE__ */ jsx44(Text36, { children: " " })
26164
+ /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", height: 2, children: [
26165
+ 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: " " }),
26166
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
26028
26167
  ] }),
26029
- previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs34(Fragment11, { children: [
26030
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
26031
- hasMoreAbove && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "\u2191 more above" }),
26032
- windowed.map((rc) => /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
26033
- hasMoreBelow && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "\u2193 more below" }),
26034
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx44(Text36, { children: "[\u2191\u2193] scroll deletions" }),
26035
- /* @__PURE__ */ jsx44(Text36, { children: " " })
26168
+ previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs35(Fragment12, { children: [
26169
+ /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
26170
+ hasMoreAbove && /* @__PURE__ */ jsx45(Text37, { color: PALETTE.muted, children: "\u2191 more above" }),
26171
+ windowed.map((rc) => /* @__PURE__ */ jsx45(Text37, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
26172
+ hasMoreBelow && /* @__PURE__ */ jsx45(Text37, { color: PALETTE.muted, children: "\u2193 more below" }),
26173
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx45(Text37, { children: "[\u2191\u2193] scroll deletions" }),
26174
+ /* @__PURE__ */ jsx45(Text37, { children: " " })
26036
26175
  ] }),
26037
- /* @__PURE__ */ jsx44(Text36, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
26038
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
26039
- /* @__PURE__ */ jsx44(
26176
+ /* @__PURE__ */ jsx45(Text37, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
26177
+ /* @__PURE__ */ jsx45(Text37, { children: " " }),
26178
+ /* @__PURE__ */ jsx45(
26040
26179
  ControlHints,
26041
26180
  {
26042
26181
  hints: [
@@ -26460,11 +26599,11 @@ function useReviewSurfaceState(initialFinalizeError = null) {
26460
26599
  }
26461
26600
 
26462
26601
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
26463
- import { Box as Box36, Text as Text38 } from "ink";
26602
+ import { Box as Box37, Text as Text39 } from "ink";
26464
26603
 
26465
26604
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
26466
- import { Box as Box35, Text as Text37 } from "ink";
26467
- import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
26605
+ import { Box as Box36, Text as Text38 } from "ink";
26606
+ import { Fragment as Fragment13, jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
26468
26607
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
26469
26608
  useImmediateInput((input, key) => {
26470
26609
  if (input === "y" || key.return) {
@@ -26473,16 +26612,16 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
26473
26612
  onCancel();
26474
26613
  }
26475
26614
  });
26476
- return /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
26477
- /* @__PURE__ */ jsx45(Text37, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
26478
- /* @__PURE__ */ jsx45(Text37, { children: " " }),
26479
- hasUnsavedDrafts ? /* @__PURE__ */ jsxs35(Fragment12, { children: [
26480
- /* @__PURE__ */ jsx45(Text37, { children: "You have unsaved draft edits." }),
26481
- /* @__PURE__ */ jsx45(Text37, { children: "Session state is preserved \u2014 you can resume" }),
26482
- /* @__PURE__ */ jsx45(Text37, { children: "by running the same review command again." })
26483
- ] }) : /* @__PURE__ */ jsx45(Text37, { children: "Session is saved. Quit without finalizing?" }),
26484
- /* @__PURE__ */ jsx45(Text37, { children: " " }),
26485
- /* @__PURE__ */ jsx45(
26615
+ return /* @__PURE__ */ jsxs36(Box36, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
26616
+ /* @__PURE__ */ jsx46(Text38, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
26617
+ /* @__PURE__ */ jsx46(Text38, { children: " " }),
26618
+ hasUnsavedDrafts ? /* @__PURE__ */ jsxs36(Fragment13, { children: [
26619
+ /* @__PURE__ */ jsx46(Text38, { children: "You have unsaved draft edits." }),
26620
+ /* @__PURE__ */ jsx46(Text38, { children: "Session state is preserved \u2014 you can resume" }),
26621
+ /* @__PURE__ */ jsx46(Text38, { children: "by running the same review command again." })
26622
+ ] }) : /* @__PURE__ */ jsx46(Text38, { children: "Session is saved. Quit without finalizing?" }),
26623
+ /* @__PURE__ */ jsx46(Text38, { children: " " }),
26624
+ /* @__PURE__ */ jsx46(
26486
26625
  ControlHints,
26487
26626
  {
26488
26627
  hints: [
@@ -26495,7 +26634,7 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
26495
26634
  }
26496
26635
 
26497
26636
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
26498
- import { Fragment as Fragment13, jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
26637
+ import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
26499
26638
  function ReviewFinalizeDialogs({
26500
26639
  showFinalize,
26501
26640
  showQuit,
@@ -26509,8 +26648,8 @@ function ReviewFinalizeDialogs({
26509
26648
  onQuitCancel
26510
26649
  }) {
26511
26650
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
26512
- return /* @__PURE__ */ jsxs36(Fragment13, { children: [
26513
- showFinalize && /* @__PURE__ */ jsx46(
26651
+ return /* @__PURE__ */ jsxs37(Fragment14, { children: [
26652
+ showFinalize && /* @__PURE__ */ jsx47(
26514
26653
  FinalizeDialog,
26515
26654
  {
26516
26655
  accepted,
@@ -26523,7 +26662,7 @@ function ReviewFinalizeDialogs({
26523
26662
  onCancel: onFinalizeCancel
26524
26663
  }
26525
26664
  ),
26526
- showQuit && /* @__PURE__ */ jsx46(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
26665
+ showQuit && /* @__PURE__ */ jsx47(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
26527
26666
  ] });
26528
26667
  }
26529
26668
  function ReviewStepDialogs({
@@ -26533,7 +26672,7 @@ function ReviewStepDialogs({
26533
26672
  onFinalize,
26534
26673
  onQuit
26535
26674
  }) {
26536
- return /* @__PURE__ */ jsx46(
26675
+ return /* @__PURE__ */ jsx47(
26537
26676
  ReviewFinalizeDialogs,
26538
26677
  {
26539
26678
  showFinalize: surfaceState.showFinalize,
@@ -26551,12 +26690,12 @@ function ReviewStepDialogs({
26551
26690
  }
26552
26691
  function ReviewReloadDialog({ open }) {
26553
26692
  if (!open) return null;
26554
- return /* @__PURE__ */ jsxs36(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26555
- /* @__PURE__ */ jsx46(Text38, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
26556
- /* @__PURE__ */ jsx46(Text38, { children: "Unsaved in-memory changes will be lost." }),
26557
- /* @__PURE__ */ jsx46(Text38, { children: " " }),
26558
- /* @__PURE__ */ jsx46(Text38, { children: " [Enter] Confirm" }),
26559
- /* @__PURE__ */ jsx46(Text38, { children: " [Esc] Cancel" })
26693
+ return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26694
+ /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
26695
+ /* @__PURE__ */ jsx47(Text39, { children: "Unsaved in-memory changes will be lost." }),
26696
+ /* @__PURE__ */ jsx47(Text39, { children: " " }),
26697
+ /* @__PURE__ */ jsx47(Text39, { children: " [Enter] Confirm" }),
26698
+ /* @__PURE__ */ jsx47(Text39, { children: " [Esc] Cancel" })
26560
26699
  ] });
26561
26700
  }
26562
26701
 
@@ -27034,8 +27173,8 @@ function useReviewLog({
27034
27173
  }
27035
27174
 
27036
27175
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
27037
- import { Box as Box37, Text as Text39 } from "ink";
27038
- import { jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
27176
+ import { Box as Box38, Text as Text40 } from "ink";
27177
+ import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
27039
27178
  function LivePreviewSummary({
27040
27179
  enabled,
27041
27180
  previewAnnotations,
@@ -27049,24 +27188,24 @@ function LivePreviewSummary({
27049
27188
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
27050
27189
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
27051
27190
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
27052
- if (disabled) return /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
27053
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
27191
+ if (disabled) return /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
27192
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
27054
27193
  if (!hasCounts) return null;
27055
- return /* @__PURE__ */ jsxs37(Box37, { children: [
27056
- /* @__PURE__ */ jsx47(Text39, { children: "Preview: " }),
27057
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: `${counts.new} new` }),
27058
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
27059
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.warning, children: `${counts.changed} changed` }),
27060
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
27061
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: `${counts.removed} removed` }),
27062
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx47(Text39, { children: " ([d] removed list)" }),
27063
- /* @__PURE__ */ jsx47(Text39, { children: " \xB7 " }),
27064
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
27194
+ return /* @__PURE__ */ jsxs38(Box38, { children: [
27195
+ /* @__PURE__ */ jsx48(Text40, { children: "Preview: " }),
27196
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.success, children: `${counts.new} new` }),
27197
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
27198
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: `${counts.changed} changed` }),
27199
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
27200
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: `${counts.removed} removed` }),
27201
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx48(Text40, { children: " ([d] removed list)" }),
27202
+ /* @__PURE__ */ jsx48(Text40, { children: " \xB7 " }),
27203
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
27065
27204
  ] });
27066
27205
  }
27067
27206
 
27068
27207
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
27069
- import { Fragment as Fragment14, jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
27208
+ import { Fragment as Fragment15, jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
27070
27209
  function sortComponentsForSidebar(components, cycleParticipants) {
27071
27210
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
27072
27211
  const tier = (c2) => {
@@ -27107,10 +27246,10 @@ function CyclePathLine({
27107
27246
  highlightComponents = false,
27108
27247
  highlightLine = false
27109
27248
  }) {
27110
- return /* @__PURE__ */ jsxs38(Text40, { color: highlightLine ? PALETTE.warning : void 0, children: [
27249
+ return /* @__PURE__ */ jsxs39(Text41, { color: highlightLine ? PALETTE.warning : void 0, children: [
27111
27250
  prefix,
27112
27251
  segments.map(
27113
- (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)
27252
+ (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)
27114
27253
  )
27115
27254
  ] });
27116
27255
  }
@@ -27122,31 +27261,31 @@ function CycleDetailPanel({
27122
27261
  height
27123
27262
  }) {
27124
27263
  const lines = [
27125
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
27126
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
27127
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
27128
- /* @__PURE__ */ jsx48(Text40, { children: " " }, "cyc-space")
27264
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
27265
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
27266
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
27267
+ /* @__PURE__ */ jsx49(Text41, { children: " " }, "cyc-space")
27129
27268
  ];
27130
27269
  cycles.forEach((cycle, index) => {
27131
27270
  const nodeCount = new Set(cycle.path).size;
27132
27271
  const isCursor = index === cursor;
27133
27272
  lines.push(
27134
- /* @__PURE__ */ jsx48(Text40, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
27135
- /* @__PURE__ */ jsx48(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
27273
+ /* @__PURE__ */ jsx49(Text41, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
27274
+ /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
27136
27275
  );
27137
27276
  if (cycle.suggestedBreak) {
27138
27277
  lines.push(
27139
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
27278
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
27140
27279
  );
27141
27280
  }
27142
- lines.push(/* @__PURE__ */ jsx48(Text40, { children: " " }, `cyc-s-${index}`));
27281
+ lines.push(/* @__PURE__ */ jsx49(Text41, { children: " " }, `cyc-s-${index}`));
27143
27282
  });
27144
27283
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
27145
27284
  const viewportHeight = Math.max(1, height - 3);
27146
27285
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
27147
- return /* @__PURE__ */ jsxs38(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
27286
+ return /* @__PURE__ */ jsxs39(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
27148
27287
  visible,
27149
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: footer })
27288
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: footer })
27150
27289
  ] });
27151
27290
  }
27152
27291
  function BreakCyclePanel({
@@ -27157,14 +27296,14 @@ function BreakCyclePanel({
27157
27296
  width,
27158
27297
  height
27159
27298
  }) {
27160
- return /* @__PURE__ */ jsxs38(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
27161
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
27162
- cycle && /* @__PURE__ */ jsx48(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
27163
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
27164
- /* @__PURE__ */ jsx48(Text40, { children: " " }),
27165
- edges.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.muted, children: "remove slot edge:" }),
27166
- 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}`)),
27167
- 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" })
27299
+ return /* @__PURE__ */ jsxs39(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
27300
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
27301
+ cycle && /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
27302
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
27303
+ /* @__PURE__ */ jsx49(Text41, { children: " " }),
27304
+ edges.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "remove slot edge:" }),
27305
+ 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}`)),
27306
+ 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" })
27168
27307
  ] });
27169
27308
  }
27170
27309
  var HELP_SECTIONS2 = [
@@ -27270,9 +27409,9 @@ function deriveBreakingChanges(response) {
27270
27409
  }
27271
27410
  function GenerateReviewStep(props) {
27272
27411
  if (!props.extractSessionId) {
27273
- 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." }) });
27412
+ 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." }) });
27274
27413
  }
27275
- return /* @__PURE__ */ jsx48(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
27414
+ return /* @__PURE__ */ jsx49(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
27276
27415
  }
27277
27416
  function GenerateReviewStepView({
27278
27417
  extractSessionId,
@@ -28134,13 +28273,13 @@ function GenerateReviewStepView({
28134
28273
  }
28135
28274
  });
28136
28275
  if (loading) {
28137
- return /* @__PURE__ */ jsx48(ReviewLoadingState, {});
28276
+ return /* @__PURE__ */ jsx49(ReviewLoadingState, {});
28138
28277
  }
28139
28278
  if (loadError) {
28140
- return /* @__PURE__ */ jsx48(ReviewLoadError, { message: loadError });
28279
+ return /* @__PURE__ */ jsx49(ReviewLoadError, { message: loadError });
28141
28280
  }
28142
28281
  if (showHelp) {
28143
- return /* @__PURE__ */ jsx48(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
28282
+ return /* @__PURE__ */ jsx49(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
28144
28283
  }
28145
28284
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
28146
28285
  components,
@@ -28180,9 +28319,9 @@ function GenerateReviewStepView({
28180
28319
  for (const c2 of closures.values()) if (c2.nodes.length > 1) return true;
28181
28320
  return false;
28182
28321
  })();
28183
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", children: [
28184
- /* @__PURE__ */ jsx48(StepHeader, { step: "review" }),
28185
- /* @__PURE__ */ jsx48(
28322
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", children: [
28323
+ /* @__PURE__ */ jsx49(StepHeader, { step: "review" }),
28324
+ /* @__PURE__ */ jsx49(
28186
28325
  ReviewStepDialogs,
28187
28326
  {
28188
28327
  surfaceState: reviewSurface,
@@ -28192,16 +28331,16 @@ function GenerateReviewStepView({
28192
28331
  onQuit
28193
28332
  }
28194
28333
  ),
28195
- /* @__PURE__ */ jsx48(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
28196
- removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
28197
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
28198
- !removedBannerCollapsed && /* @__PURE__ */ jsxs38(Fragment14, { children: [
28199
- /* @__PURE__ */ jsx48(Text40, { children: " " }),
28200
- removedComponents.map((rc) => /* @__PURE__ */ jsx48(Text40, { children: removedComponentLine(rc) }, rc.id))
28334
+ /* @__PURE__ */ jsx49(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
28335
+ removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
28336
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
28337
+ !removedBannerCollapsed && /* @__PURE__ */ jsxs39(Fragment15, { children: [
28338
+ /* @__PURE__ */ jsx49(Text41, { children: " " }),
28339
+ removedComponents.map((rc) => /* @__PURE__ */ jsx49(Text41, { children: removedComponentLine(rc) }, rc.id))
28201
28340
  ] })
28202
28341
  ] }),
28203
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx48(Box38, { paddingX: 1, children: /* @__PURE__ */ jsx48(
28204
- Text40,
28342
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx49(Box39, { paddingX: 1, children: /* @__PURE__ */ jsx49(
28343
+ Text41,
28205
28344
  {
28206
28345
  color: PALETTE.warning,
28207
28346
  children: `[b] ${breakingChanges.length} breaking change${breakingChanges.length === 1 ? "" : "s"}`
@@ -28211,14 +28350,14 @@ function GenerateReviewStepView({
28211
28350
  const row = breakingRows[breakingCursor];
28212
28351
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
28213
28352
  if (!comp) return null;
28214
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
28215
- /* @__PURE__ */ jsx48(Text40, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
28216
- 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"}` }),
28217
- 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}`)),
28218
- /* @__PURE__ */ jsx48(Text40, { children: "[D/Esc] close detail" })
28353
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
28354
+ /* @__PURE__ */ jsx49(Text41, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
28355
+ 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"}` }),
28356
+ 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}`)),
28357
+ /* @__PURE__ */ jsx49(Text41, { children: "[D/Esc] close detail" })
28219
28358
  ] });
28220
28359
  })(),
28221
- !dialogOpen && /* @__PURE__ */ jsx48(
28360
+ !dialogOpen && /* @__PURE__ */ jsx49(
28222
28361
  LivePreviewSummary,
28223
28362
  {
28224
28363
  enabled: livePreview,
@@ -28237,16 +28376,16 @@ function GenerateReviewStepView({
28237
28376
  const participantSet = cycleView.structural;
28238
28377
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
28239
28378
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
28240
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
28241
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
28242
- members.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
28243
- ancestors.length > 0 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
28244
- /* @__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" })
28379
+ return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
28380
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
28381
+ members.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
28382
+ ancestors.length > 0 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
28383
+ /* @__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" })
28245
28384
  ] });
28246
28385
  })(),
28247
- /* @__PURE__ */ jsx48(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
28248
- /* @__PURE__ */ jsx48(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
28249
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx48(
28386
+ /* @__PURE__ */ jsx49(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
28387
+ /* @__PURE__ */ jsx49(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
28388
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx49(
28250
28389
  BreakCyclePanel,
28251
28390
  {
28252
28391
  cycle: cycleRows[cyclesCursor],
@@ -28257,7 +28396,7 @@ function GenerateReviewStepView({
28257
28396
  height: panelHeight
28258
28397
  }
28259
28398
  ),
28260
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx48(
28399
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx49(
28261
28400
  CycleDetailPanel,
28262
28401
  {
28263
28402
  cycles: cycleRows,
@@ -28267,8 +28406,8 @@ function GenerateReviewStepView({
28267
28406
  height: panelHeight
28268
28407
  }
28269
28408
  ),
28270
- !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs38(Box38, { children: [
28271
- breakingPanel.isOpen ? /* @__PURE__ */ jsx48(
28409
+ !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs39(Box39, { children: [
28410
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx49(
28272
28411
  GotoBanner,
28273
28412
  {
28274
28413
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -28281,7 +28420,7 @@ function GenerateReviewStepView({
28281
28420
  width: sidebarWidth,
28282
28421
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
28283
28422
  }
28284
- ) : /* @__PURE__ */ jsx48(
28423
+ ) : /* @__PURE__ */ jsx49(
28285
28424
  GroupedSidebar,
28286
28425
  {
28287
28426
  items: groupedItems,
@@ -28322,7 +28461,7 @@ function GenerateReviewStepView({
28322
28461
  graph: sidebarGraph
28323
28462
  }
28324
28463
  ),
28325
- selected ? /* @__PURE__ */ jsx48(
28464
+ selected ? /* @__PURE__ */ jsx49(
28326
28465
  ReviewComponentPanel,
28327
28466
  {
28328
28467
  selectedKey: selected.key,
@@ -28352,12 +28491,12 @@ function GenerateReviewStepView({
28352
28491
  ),
28353
28492
  saveError: reviewEditor.saveError
28354
28493
  }
28355
- ) : /* @__PURE__ */ jsx48(ReviewNoSelection, {})
28494
+ ) : /* @__PURE__ */ jsx49(ReviewNoSelection, {})
28356
28495
  ] }),
28357
- !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", children: [
28358
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
28496
+ !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", children: [
28497
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
28359
28498
  cycleRows.slice(0, 3).map((cycle, idx) => {
28360
- return /* @__PURE__ */ jsx48(
28499
+ return /* @__PURE__ */ jsx49(
28361
28500
  CyclePathLine,
28362
28501
  {
28363
28502
  segments: formatCyclePathSegments2(cycle),
@@ -28368,10 +28507,10 @@ function GenerateReviewStepView({
28368
28507
  `cyc-banner-${idx}`
28369
28508
  );
28370
28509
  }),
28371
- cycleRows.length > 3 && /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
28372
- /* @__PURE__ */ jsx48(Text40, { children: " press [c] for detail" })
28510
+ cycleRows.length > 3 && /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
28511
+ /* @__PURE__ */ jsx49(Text41, { children: " press [c] for detail" })
28373
28512
  ] }),
28374
- /* @__PURE__ */ jsx48(
28513
+ /* @__PURE__ */ jsx49(
28375
28514
  SearchMatchSummary,
28376
28515
  {
28377
28516
  open: searchOpen,
@@ -28382,27 +28521,27 @@ function GenerateReviewStepView({
28382
28521
  hidden: dialogOpen
28383
28522
  }
28384
28523
  ),
28385
- !dialogOpen && sidebarFocused && reviewEditor.panelOpen !== "token-review" && /* @__PURE__ */ jsx48(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
28524
+ !dialogOpen && sidebarFocused && reviewEditor.panelOpen !== "token-review" && /* @__PURE__ */ jsx49(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
28386
28525
  ] });
28387
28526
  }
28388
28527
 
28389
28528
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
28390
- import { Box as Box39, Text as Text41 } from "ink";
28391
- import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
28529
+ import { Box as Box40, Text as Text42 } from "ink";
28530
+ import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
28392
28531
  function CustomPromptBanner({ generatePromptPath }) {
28393
28532
  if (!generatePromptPath) return null;
28394
- return /* @__PURE__ */ jsxs39(Box39, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
28395
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
28396
- generatePromptPath ? /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.warning, children: [
28533
+ return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
28534
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
28535
+ generatePromptPath ? /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.warning, children: [
28397
28536
  "components: ",
28398
28537
  generatePromptPath
28399
28538
  ] }) : null,
28400
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
28539
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
28401
28540
  ] });
28402
28541
  }
28403
28542
 
28404
28543
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
28405
- import { Box as Box41, Text as Text43 } from "ink";
28544
+ import { Box as Box42, Text as Text44 } from "ink";
28406
28545
 
28407
28546
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/contentful-urls.ts
28408
28547
  function normalizeHost(host) {
@@ -28418,32 +28557,32 @@ function buildPostPushUrl2({ host, spaceId, environmentId, view = "components" }
28418
28557
  }
28419
28558
 
28420
28559
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
28421
- import { Box as Box40, Text as Text42 } from "ink";
28422
- import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
28560
+ import { Box as Box41, Text as Text43 } from "ink";
28561
+ import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
28423
28562
  function SpaceEnvironment({ spaceId, environmentId }) {
28424
- return /* @__PURE__ */ jsxs40(Box40, { gap: 1, marginTop: 1, children: [
28425
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Space:" }),
28426
- /* @__PURE__ */ jsx50(Text42, { children: spaceId }),
28427
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "/" }),
28428
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Environment:" }),
28429
- /* @__PURE__ */ jsx50(Text42, { children: environmentId })
28563
+ return /* @__PURE__ */ jsxs41(Box41, { gap: 1, marginTop: 1, children: [
28564
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Space:" }),
28565
+ /* @__PURE__ */ jsx51(Text43, { children: spaceId }),
28566
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "/" }),
28567
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Environment:" }),
28568
+ /* @__PURE__ */ jsx51(Text43, { children: environmentId })
28430
28569
  ] });
28431
28570
  }
28432
28571
 
28433
28572
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
28434
- import { Fragment as Fragment15, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
28573
+ import { Fragment as Fragment16, jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
28435
28574
  var ACTIONS = ["created", "updated", "removed"];
28436
28575
  function EntityRows({ entity, label }) {
28437
28576
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
28438
- return /* @__PURE__ */ jsxs41(Fragment15, { children: [
28439
- ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs41(Text43, { children: [
28440
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.success, children: "\u2713" }),
28577
+ return /* @__PURE__ */ jsxs42(Fragment16, { children: [
28578
+ ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs42(Text44, { children: [
28579
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.success, children: "\u2713" }),
28441
28580
  " ",
28442
28581
  plural3(entity[action]),
28443
28582
  " ",
28444
28583
  action
28445
28584
  ] }, action)),
28446
- entity.failed > 0 && /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
28585
+ entity.failed > 0 && /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
28447
28586
  "\u2717 ",
28448
28587
  plural3(entity.failed),
28449
28588
  " failed \u2014 check logs above"
@@ -28451,9 +28590,9 @@ function EntityRows({ entity, label }) {
28451
28590
  ] });
28452
28591
  }
28453
28592
  function LinkRow({ title, url }) {
28454
- return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
28455
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: title }),
28456
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.accent, children: url })
28593
+ return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
28594
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: title }),
28595
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.accent, children: url })
28457
28596
  ] });
28458
28597
  }
28459
28598
  function DoneStep({
@@ -28477,29 +28616,29 @@ function DoneStep({
28477
28616
  const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
28478
28617
  const success = totalFailed === 0;
28479
28618
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
28480
- return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
28481
- /* @__PURE__ */ jsx51(StepHeader, { step: "done" }),
28482
- /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
28483
- success ? /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
28484
- 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: [
28485
- /* @__PURE__ */ jsx51(EntityRows, { entity: componentTypes, label: "Component" }),
28486
- /* @__PURE__ */ jsx51(EntityRows, { entity: designTokens, label: "Design Token" }),
28487
- summary && /* @__PURE__ */ jsx51(Box41, { marginTop: 1, children: /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.muted, children: [
28619
+ return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
28620
+ /* @__PURE__ */ jsx52(StepHeader, { step: "done" }),
28621
+ /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
28622
+ success ? /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
28623
+ 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: [
28624
+ /* @__PURE__ */ jsx52(EntityRows, { entity: componentTypes, label: "Component" }),
28625
+ /* @__PURE__ */ jsx52(EntityRows, { entity: designTokens, label: "Design Token" }),
28626
+ summary && /* @__PURE__ */ jsx52(Box42, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
28488
28627
  "Push result: ",
28489
28628
  summary.succeeded,
28490
28629
  "/",
28491
28630
  summary.total,
28492
28631
  " succeeded",
28493
- summary.failed > 0 && /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
28632
+ summary.failed > 0 && /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
28494
28633
  ", ",
28495
28634
  summary.failed,
28496
28635
  " failed"
28497
28636
  ] })
28498
28637
  ] }) })
28499
28638
  ] }),
28500
- failures.length > 0 && /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
28501
- /* @__PURE__ */ jsx51(Text43, { bold: true, color: PALETTE.error, children: "Failure details" }),
28502
- failures.map((failure) => /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.error, children: [
28639
+ failures.length > 0 && /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
28640
+ /* @__PURE__ */ jsx52(Text44, { bold: true, color: PALETTE.error, children: "Failure details" }),
28641
+ failures.map((failure) => /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.error, children: [
28503
28642
  failure.entityType,
28504
28643
  " ",
28505
28644
  failure.entityId,
@@ -28507,11 +28646,11 @@ function DoneStep({
28507
28646
  failure.message
28508
28647
  ] }, `${failure.entityType}:${failure.entityId}`))
28509
28648
  ] }),
28510
- /* @__PURE__ */ jsx51(SpaceEnvironment, { spaceId, environmentId }),
28511
- success && totalPushed > 0 && /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, children: [
28512
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
28513
- produced.components && /* @__PURE__ */ jsx51(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
28514
- produced.tokens && /* @__PURE__ */ jsx51(
28649
+ /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
28650
+ success && totalPushed > 0 && /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, children: [
28651
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
28652
+ produced.components && /* @__PURE__ */ jsx52(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
28653
+ produced.tokens && /* @__PURE__ */ jsx52(
28515
28654
  LinkRow,
28516
28655
  {
28517
28656
  title: "View your design tokens here:",
@@ -28519,14 +28658,14 @@ function DoneStep({
28519
28658
  }
28520
28659
  )
28521
28660
  ] }),
28522
- /* @__PURE__ */ jsx51(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
28661
+ /* @__PURE__ */ jsx52(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
28523
28662
  ] })
28524
28663
  ] });
28525
28664
  }
28526
28665
 
28527
28666
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
28528
28667
  import { useState as useState28 } from "react";
28529
- import { Box as Box42, Text as Text44 } from "ink";
28668
+ import { Box as Box43, Text as Text45 } from "ink";
28530
28669
  import { readdirSync as readdirSync4 } from "node:fs";
28531
28670
  import { dirname as dirname17, basename as basename6, join as join22 } from "node:path";
28532
28671
 
@@ -28560,7 +28699,7 @@ function useBlinkingCursor() {
28560
28699
  }
28561
28700
 
28562
28701
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
28563
- import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
28702
+ import { jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
28564
28703
  function autocomplete(partial) {
28565
28704
  if (!partial) return null;
28566
28705
  const normalized = normalizePath(partial);
@@ -28618,20 +28757,20 @@ function PathPrompt({
28618
28757
  const shown = input || defaultPath;
28619
28758
  const isPlaceholder = input === "";
28620
28759
  const cursor = cursorVisible ? "\u2588" : " ";
28621
- return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
28622
- /* @__PURE__ */ jsx52(StepHeader, { step: "push" }),
28623
- /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
28624
- summary && /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: summary }),
28625
- /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
28626
- /* @__PURE__ */ jsx52(Text44, { color: PALETTE.accent, children: "?" }),
28627
- /* @__PURE__ */ jsxs42(Text44, { bold: true, children: [
28760
+ return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
28761
+ /* @__PURE__ */ jsx53(StepHeader, { step: "push" }),
28762
+ /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
28763
+ summary && /* @__PURE__ */ jsx53(Text45, { color: PALETTE.muted, children: summary }),
28764
+ /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
28765
+ /* @__PURE__ */ jsx53(Text45, { color: PALETTE.accent, children: "?" }),
28766
+ /* @__PURE__ */ jsxs43(Text45, { bold: true, children: [
28628
28767
  label,
28629
28768
  ":"
28630
28769
  ] }),
28631
- /* @__PURE__ */ jsx52(Text44, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
28632
- /* @__PURE__ */ jsx52(Text44, { children: cursor })
28770
+ /* @__PURE__ */ jsx53(Text45, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
28771
+ /* @__PURE__ */ jsx53(Text45, { children: cursor })
28633
28772
  ] }),
28634
- /* @__PURE__ */ jsx52(
28773
+ /* @__PURE__ */ jsx53(
28635
28774
  ControlHints,
28636
28775
  {
28637
28776
  hints: [
@@ -28646,7 +28785,7 @@ function PathPrompt({
28646
28785
  }
28647
28786
 
28648
28787
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
28649
- import { Box as Box43, Text as Text45 } from "ink";
28788
+ import { Box as Box44, Text as Text46 } from "ink";
28650
28789
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
28651
28790
 
28652
28791
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/produced.ts
@@ -28669,8 +28808,8 @@ function countedThings({ components, tokens }, counts = {}) {
28669
28808
 
28670
28809
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
28671
28810
  import { useEffect as useEffect26, useState as useState29 } from "react";
28672
- import { Spinner as Spinner2 } from "@inkjs/ui";
28673
- import { jsx as jsx53 } from "react/jsx-runtime";
28811
+ import { Spinner as Spinner3 } from "@inkjs/ui";
28812
+ import { jsx as jsx54 } from "react/jsx-runtime";
28674
28813
  function useTimedSpinner() {
28675
28814
  const [elapsedSeconds, setElapsedSeconds] = useState29(0);
28676
28815
  useEffect26(() => {
@@ -28682,57 +28821,62 @@ function useTimedSpinner() {
28682
28821
  const mins = Math.floor(elapsedSeconds / 60);
28683
28822
  const secs = elapsedSeconds % 60;
28684
28823
  return {
28685
- spinner: /* @__PURE__ */ jsx53(Spinner2, {}),
28824
+ spinner: /* @__PURE__ */ jsx54(Spinner3, {}),
28686
28825
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
28687
28826
  };
28688
28827
  }
28689
28828
 
28690
28829
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
28691
- import { jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
28830
+ import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
28692
28831
  function PushingStep({ progress, produced, counts }) {
28693
28832
  const { spinner, elapsed } = useTimedSpinner();
28694
28833
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
28695
28834
  const showGlobal = progress && progress.kind === "progress";
28696
28835
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
28697
- return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
28698
- /* @__PURE__ */ jsx54(StepHeader, { step: "push" }),
28699
- /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
28700
- /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
28836
+ const items = progress && progress.kind === "progress" ? progress.items : [];
28837
+ return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
28838
+ /* @__PURE__ */ jsx55(StepHeader, { step: "push" }),
28839
+ /* @__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: [
28840
+ /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
28701
28841
  spinner,
28702
- /* @__PURE__ */ jsxs43(Text45, { children: [
28842
+ /* @__PURE__ */ jsxs44(Text46, { children: [
28703
28843
  "Writing ",
28704
28844
  countedThings(produced, counts),
28705
28845
  " to your Contentful space..."
28706
28846
  ] })
28707
28847
  ] }),
28708
- operationId && /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
28709
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Operation:" }),
28710
- /* @__PURE__ */ jsx54(Text45, { children: operationId })
28848
+ operationId && /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
28849
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Operation:" }),
28850
+ /* @__PURE__ */ jsx55(Text46, { children: operationId })
28711
28851
  ] }),
28712
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx54(Box43, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs43(Box43, { gap: 2, children: [
28713
- /* @__PURE__ */ jsx54(Box43, { width: 40, children: /* @__PURE__ */ jsx54(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx54(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
28714
- /* @__PURE__ */ jsxs43(Text45, { color: PALETTE.muted, children: [
28852
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx55(Box44, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs44(Box44, { gap: 2, children: [
28853
+ /* @__PURE__ */ jsx55(Box44, { width: 40, children: /* @__PURE__ */ jsx55(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx55(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
28854
+ /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.muted, children: [
28715
28855
  progress.processed,
28716
28856
  "/",
28717
28857
  progress.total,
28718
28858
  " entities"
28859
+ ] }),
28860
+ progress.failed > 0 && /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.error, children: [
28861
+ progress.failed,
28862
+ " failed"
28719
28863
  ] })
28720
28864
  ] }) }),
28721
- showCurrent && /* @__PURE__ */ jsxs43(Box43, { gap: 1, children: [
28722
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Now processing:" }),
28723
- /* @__PURE__ */ jsx54(Text45, { children: showCurrent })
28865
+ showCurrent && /* @__PURE__ */ jsxs44(Box44, { gap: 1, children: [
28866
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Now processing:" }),
28867
+ /* @__PURE__ */ jsx55(Text46, { children: showCurrent })
28724
28868
  ] }),
28725
- /* @__PURE__ */ jsx54(Box43, { marginTop: 1, children: /* @__PURE__ */ jsxs43(Text45, { color: PALETTE.muted, children: [
28869
+ /* @__PURE__ */ jsx55(Box44, { marginTop: 1, children: /* @__PURE__ */ jsxs44(Text46, { color: PALETTE.muted, children: [
28726
28870
  "Elapsed: ",
28727
28871
  elapsed
28728
28872
  ] }) })
28729
- ] })
28873
+ ] }) })
28730
28874
  ] });
28731
28875
  }
28732
28876
 
28733
28877
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
28734
28878
  import { useEffect as useEffect27, useState as useState30, useMemo as useMemo7 } from "react";
28735
- import { Box as Box44, Text as Text46 } from "ink";
28879
+ import { Box as Box45, Text as Text47 } from "ink";
28736
28880
 
28737
28881
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/preview-diff.ts
28738
28882
  function computeComponentDiffLines(current, proposed, changeClassification) {
@@ -28918,7 +29062,7 @@ function usePreviewConfirmationInput(breakingWithImpact, onConfirm) {
28918
29062
  }
28919
29063
 
28920
29064
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
28921
- import { Fragment as Fragment16, jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
29065
+ import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
28922
29066
  function buildPreviewSummaryLines(preview) {
28923
29067
  const lines = [];
28924
29068
  const { components, tokens } = preview;
@@ -29170,12 +29314,12 @@ function WizardPreviewStep({
29170
29314
  return;
29171
29315
  }
29172
29316
  });
29173
- return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
29174
- /* @__PURE__ */ jsx55(StepHeader, { step: "push" }),
29175
- /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
29176
- hasAnything ? /* @__PURE__ */ jsxs44(Fragment16, { children: [
29177
- /* @__PURE__ */ jsx55(Text46, { children: "Here's what will happen in your space:" }),
29178
- /* @__PURE__ */ jsxs44(
29317
+ return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
29318
+ /* @__PURE__ */ jsx56(StepHeader, { step: "push" }),
29319
+ /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
29320
+ hasAnything ? /* @__PURE__ */ jsxs45(Fragment17, { children: [
29321
+ /* @__PURE__ */ jsx56(Text47, { children: "Here's what will happen in your space:" }),
29322
+ /* @__PURE__ */ jsxs45(
29179
29323
  WindowedPanel,
29180
29324
  {
29181
29325
  width: Math.max(20, terminalColumns - 4),
@@ -29183,15 +29327,15 @@ function WizardPreviewStep({
29183
29327
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
29184
29328
  focused: false,
29185
29329
  children: [
29186
- activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx55(Text46, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
29187
- /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
29330
+ activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx56(Text47, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
29331
+ /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
29188
29332
  ]
29189
29333
  }
29190
29334
  )
29191
- ] }) : /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
29192
- 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." }) }),
29193
- /* @__PURE__ */ jsx55(SpaceEnvironment, { spaceId, environmentId }),
29194
- /* @__PURE__ */ jsx55(Box44, { marginTop: 1, children: /* @__PURE__ */ jsx55(
29335
+ ] }) : /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
29336
+ 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." }) }),
29337
+ /* @__PURE__ */ jsx56(SpaceEnvironment, { spaceId, environmentId }),
29338
+ /* @__PURE__ */ jsx56(Box45, { marginTop: 1, children: /* @__PURE__ */ jsx56(
29195
29339
  ControlHints,
29196
29340
  {
29197
29341
  hints: [
@@ -29407,7 +29551,7 @@ function useFlowLog(state2) {
29407
29551
  }
29408
29552
 
29409
29553
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
29410
- import { jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
29554
+ import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
29411
29555
  function canEditFromPreview(cdf) {
29412
29556
  if (!cdf) return false;
29413
29557
  return parseCDFComponents(cdf).components.length > 0;
@@ -29427,7 +29571,7 @@ function FlowScreen({
29427
29571
  const content = (() => {
29428
29572
  switch (state2.step) {
29429
29573
  case "final-review":
29430
- return /* @__PURE__ */ jsx56(
29574
+ return /* @__PURE__ */ jsx57(
29431
29575
  GenerateReviewStep,
29432
29576
  {
29433
29577
  extractSessionId: state2.extractSessionId,
@@ -29444,10 +29588,10 @@ function FlowScreen({
29444
29588
  }
29445
29589
  );
29446
29590
  case "previewing":
29447
- return /* @__PURE__ */ jsx56(RunningStep, { step: "push", description: `Computing diff for ${things} against your Contentful space...` });
29591
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: `Computing diff for ${things} against your Contentful space...` });
29448
29592
  case "preview-gate":
29449
29593
  if (!state2.serverPreview) return null;
29450
- return /* @__PURE__ */ jsx56(
29594
+ return /* @__PURE__ */ jsx57(
29451
29595
  WizardPreviewStep,
29452
29596
  {
29453
29597
  preview: state2.serverPreview,
@@ -29459,9 +29603,9 @@ function FlowScreen({
29459
29603
  }
29460
29604
  );
29461
29605
  case "pushing":
29462
- return /* @__PURE__ */ jsx56(PushingStep, { progress: state2.pushProgress, produced, counts });
29606
+ return /* @__PURE__ */ jsx57(PushingStep, { progress: state2.pushProgress, produced, counts });
29463
29607
  case "path-prompt":
29464
- return /* @__PURE__ */ jsx56(
29608
+ return /* @__PURE__ */ jsx57(
29465
29609
  PathPrompt,
29466
29610
  {
29467
29611
  summary: `Saving ${things}${state2.credentialsSkipped ? "" : " and pushing them to your Contentful space"}.`,
@@ -29471,10 +29615,10 @@ function FlowScreen({
29471
29615
  }
29472
29616
  );
29473
29617
  case "printing":
29474
- return /* @__PURE__ */ jsx56(RunningStep, { step: "push", description: "Writing output files to disk..." });
29618
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: "Writing output files to disk..." });
29475
29619
  case "print-gate": {
29476
29620
  const teaser = buildRunTeaserLine(state2.lastRunId);
29477
- return /* @__PURE__ */ jsx56(
29621
+ return /* @__PURE__ */ jsx57(
29478
29622
  GateStep,
29479
29623
  {
29480
29624
  step: "push",
@@ -29489,7 +29633,7 @@ function FlowScreen({
29489
29633
  }
29490
29634
  case "done": {
29491
29635
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
29492
- return /* @__PURE__ */ jsx56(
29636
+ return /* @__PURE__ */ jsx57(
29493
29637
  DoneStep,
29494
29638
  {
29495
29639
  componentTypes: state2.pushResult.componentTypes,
@@ -29506,7 +29650,7 @@ function FlowScreen({
29506
29650
  );
29507
29651
  }
29508
29652
  case "preview-validation-error":
29509
- return /* @__PURE__ */ jsx56(
29653
+ return /* @__PURE__ */ jsx57(
29510
29654
  PreviewValidationErrorScreen,
29511
29655
  {
29512
29656
  errors: state2.previewValidationErrors,
@@ -29517,7 +29661,7 @@ function FlowScreen({
29517
29661
  }
29518
29662
  );
29519
29663
  case "error":
29520
- return /* @__PURE__ */ jsx56(
29664
+ return /* @__PURE__ */ jsx57(
29521
29665
  ErrorStep,
29522
29666
  {
29523
29667
  stepName: state2.errorStep,
@@ -29528,8 +29672,8 @@ function FlowScreen({
29528
29672
  );
29529
29673
  }
29530
29674
  })();
29531
- return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
29532
- /* @__PURE__ */ jsx56(CustomPromptBanner, { generatePromptPath }),
29675
+ return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", children: [
29676
+ /* @__PURE__ */ jsx57(CustomPromptBanner, { generatePromptPath }),
29533
29677
  content
29534
29678
  ] });
29535
29679
  }
@@ -29718,6 +29862,16 @@ If using a custom host configuration, make sure the space exists on that host.`
29718
29862
  };
29719
29863
  }
29720
29864
 
29865
+ // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/push-progress.ts
29866
+ function activityFromItems(items) {
29867
+ return items.filter((item) => item.status !== "queued").map((item) => ({
29868
+ name: item.id,
29869
+ state: item.status === "failed" ? "failed" : "done",
29870
+ detail: `${item.action} ${item.entityType === "DesignToken" ? "token" : "component"}`,
29871
+ ...item.error ? { error: typeof item.error === "string" ? item.error : item.error.message } : {}
29872
+ }));
29873
+ }
29874
+
29721
29875
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/push.ts
29722
29876
  var realPushDeps = (log) => ({
29723
29877
  createClient: (options) => new ApiClient({ ...options, userAgent: cliUserAgent() }),
@@ -29782,7 +29936,16 @@ async function runPush(input, deps, onPatch) {
29782
29936
  const items = op.items ?? [];
29783
29937
  const lastDone = items.length > 0 ? items[items.length - 1] : null;
29784
29938
  const current = lastDone && lastDone.status === "succeeded" ? lastDone.id : null;
29785
- onPatch({ pushProgress: { kind: "progress", processed: done, total: summary.total, current } });
29939
+ onPatch({
29940
+ pushProgress: {
29941
+ kind: "progress",
29942
+ processed: done,
29943
+ total: summary.total,
29944
+ failed: summary.failed,
29945
+ current,
29946
+ items: activityFromItems(items)
29947
+ }
29948
+ });
29786
29949
  }
29787
29950
  safeLog(deps, { pollTick: { attempt: pollCount, status: op.sys.status, summary: op.summary } });
29788
29951
  }
@@ -30307,7 +30470,7 @@ function useFlow(start, options = {}) {
30307
30470
 
30308
30471
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
30309
30472
  import { useEffect as useEffect30, useState as useState31 } from "react";
30310
- import { Box as Box46, Text as Text47, useInput as useInput13 } from "ink";
30473
+ import { Box as Box47, Text as Text48, useInput as useInput13 } from "ink";
30311
30474
  init_debug_store();
30312
30475
 
30313
30476
  // packages/experience-design-system-cli/src/tui/help/help-info.ts
@@ -30368,13 +30531,13 @@ async function readHelpInfo() {
30368
30531
  }
30369
30532
 
30370
30533
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
30371
- import { Fragment as Fragment17, jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
30534
+ import { Fragment as Fragment18, jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
30372
30535
  function Section({ title, rows }) {
30373
- return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", children: [
30374
- /* @__PURE__ */ jsx57(Text47, { bold: true, color: PALETTE.accent, children: title }),
30375
- rows.map((row) => /* @__PURE__ */ jsxs46(Box46, { gap: 1, children: [
30376
- /* @__PURE__ */ jsx57(Box46, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx57(Text47, { color: PALETTE.muted, children: row.label }) }),
30377
- /* @__PURE__ */ jsx57(Text47, { children: row.value })
30536
+ return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", children: [
30537
+ /* @__PURE__ */ jsx58(Text48, { bold: true, color: PALETTE.accent, children: title }),
30538
+ rows.map((row) => /* @__PURE__ */ jsxs47(Box47, { gap: 1, children: [
30539
+ /* @__PURE__ */ jsx58(Box47, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: row.label }) }),
30540
+ /* @__PURE__ */ jsx58(Text48, { children: row.value })
30378
30541
  ] }, row.label))
30379
30542
  ] });
30380
30543
  }
@@ -30398,14 +30561,14 @@ function HelpScreen({ onDone }) {
30398
30561
  return;
30399
30562
  }
30400
30563
  });
30401
- return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
30402
- /* @__PURE__ */ jsx57(Text47, { bold: true, children: "Help" }),
30403
- info ? /* @__PURE__ */ jsxs46(Fragment17, { children: [
30404
- /* @__PURE__ */ jsx57(Section, { title: "Where things are stored", rows: info.storage }),
30405
- /* @__PURE__ */ jsx57(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
30406
- /* @__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." })
30407
- ] }) : /* @__PURE__ */ jsx57(Text47, { color: PALETTE.accent, children: "Loading..." }),
30408
- /* @__PURE__ */ jsx57(
30564
+ return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
30565
+ /* @__PURE__ */ jsx58(Text48, { bold: true, children: "Help" }),
30566
+ info ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
30567
+ /* @__PURE__ */ jsx58(Section, { title: "Where things are stored", rows: info.storage }),
30568
+ /* @__PURE__ */ jsx58(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
30569
+ /* @__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." })
30570
+ ] }) : /* @__PURE__ */ jsx58(Text48, { color: PALETTE.accent, children: "Loading..." }),
30571
+ /* @__PURE__ */ jsx58(
30409
30572
  ControlHints,
30410
30573
  {
30411
30574
  hints: [
@@ -30419,8 +30582,8 @@ function HelpScreen({ onDone }) {
30419
30582
 
30420
30583
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
30421
30584
  import { useState as useState32 } from "react";
30422
- import { Box as Box47, Text as Text48, useInput as useInput14 } from "ink";
30423
- import { jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
30585
+ import { Box as Box48, Text as Text49, useInput as useInput14 } from "ink";
30586
+ import { jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
30424
30587
  function SettingsScreen({
30425
30588
  onNavigate,
30426
30589
  onBack
@@ -30451,15 +30614,15 @@ function SettingsScreen({
30451
30614
  onBack();
30452
30615
  }
30453
30616
  });
30454
- return /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30455
- /* @__PURE__ */ jsx58(Text48, { bold: true, children: "Settings" }),
30456
- /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: " " }),
30457
- items.map((item, i) => /* @__PURE__ */ jsxs47(Text48, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
30617
+ return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30618
+ /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Settings" }),
30619
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: " " }),
30620
+ items.map((item, i) => /* @__PURE__ */ jsxs48(Text49, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
30458
30621
  i === focusIdx ? "> " : " ",
30459
30622
  item.label
30460
30623
  ] }, item.label)),
30461
- /* @__PURE__ */ jsx58(Text48, { children: " " }),
30462
- /* @__PURE__ */ jsx58(
30624
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
30625
+ /* @__PURE__ */ jsx59(
30463
30626
  ControlHints,
30464
30627
  {
30465
30628
  hints: [
@@ -30474,11 +30637,11 @@ function SettingsScreen({
30474
30637
 
30475
30638
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
30476
30639
  import { useState as useState36 } from "react";
30477
- import { Box as Box51, Text as Text53, useInput as useInput17 } from "ink";
30640
+ import { Box as Box52, Text as Text54, useInput as useInput17 } from "ink";
30478
30641
 
30479
30642
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
30480
30643
  import { useEffect as useEffect32, useRef as useRef20, useState as useState34 } from "react";
30481
- import { Box as Box49, Text as Text51, useInput as useInput15 } from "ink";
30644
+ import { Box as Box50, Text as Text52, useInput as useInput15 } from "ink";
30482
30645
  init_debug_store();
30483
30646
 
30484
30647
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/agent-status.ts
@@ -30774,11 +30937,11 @@ async function writeAgentConfig(config) {
30774
30937
 
30775
30938
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
30776
30939
  import { useEffect as useEffect31, useState as useState33 } from "react";
30777
- import { Box as Box48, Text as Text50 } from "ink";
30940
+ import { Box as Box49, Text as Text51 } from "ink";
30778
30941
 
30779
30942
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
30780
- import { Text as Text49 } from "ink";
30781
- import { jsx as jsx59 } from "react/jsx-runtime";
30943
+ import { Text as Text50 } from "ink";
30944
+ import { jsx as jsx60 } from "react/jsx-runtime";
30782
30945
  var TONE_COLOR = {
30783
30946
  ok: PALETTE.success,
30784
30947
  bad: PALETTE.error,
@@ -30790,7 +30953,7 @@ function AgentStatusBadge({
30790
30953
  binary
30791
30954
  }) {
30792
30955
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
30793
- return /* @__PURE__ */ jsx59(Text49, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
30956
+ return /* @__PURE__ */ jsx60(Text50, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
30794
30957
  }
30795
30958
 
30796
30959
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/apply-binary-overrides.ts
@@ -30812,16 +30975,16 @@ function applyBinaryOverrides(config) {
30812
30975
  }
30813
30976
 
30814
30977
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
30815
- import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
30978
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
30816
30979
  var fields = (name) => [
30817
30980
  { key: "binary", label: "Command path", hint: `(empty: \`${AGENT_BINARIES[name]}\` from the PATH)` },
30818
30981
  { key: "model", label: "Model", hint: `(empty: ${defaultModelLabel(name)})` }
30819
30982
  ];
30820
30983
  var INSPECT_DELAY_MS = 400;
30821
30984
  function StatusHeading() {
30822
- return /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
30823
- /* @__PURE__ */ jsx60(Text50, { bold: true, color: PALETTE.muted, children: "STATUS" }),
30824
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "\xB7 read only" })
30985
+ return /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
30986
+ /* @__PURE__ */ jsx61(Text51, { bold: true, color: PALETTE.muted, children: "STATUS" }),
30987
+ /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "\xB7 read only" })
30825
30988
  ] });
30826
30989
  }
30827
30990
  function AgentDetail({
@@ -30884,7 +31047,7 @@ function AgentDetail({
30884
31047
  };
30885
31048
  const formFields = fields(name);
30886
31049
  const labelWidth = formLabelWidth([...formFields, action]);
30887
- return /* @__PURE__ */ jsx60(
31050
+ return /* @__PURE__ */ jsx61(
30888
31051
  FieldForm,
30889
31052
  {
30890
31053
  title: `Settings \u203A Configuration \u203A Agents \u203A ${AGENT_LABELS[name]}`,
@@ -30901,16 +31064,16 @@ function AgentDetail({
30901
31064
  actions: [action],
30902
31065
  notice: testing ? null : notice,
30903
31066
  busy: saving || testing,
30904
- children: /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", marginTop: 1, children: [
30905
- /* @__PURE__ */ jsx60(StatusHeading, {}),
30906
- 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))
31067
+ children: /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", marginTop: 1, children: [
31068
+ /* @__PURE__ */ jsx61(StatusHeading, {}),
31069
+ 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))
30907
31070
  ] })
30908
31071
  }
30909
31072
  );
30910
31073
  }
30911
31074
 
30912
31075
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
30913
- import { Fragment as Fragment18, jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
31076
+ import { Fragment as Fragment19, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
30914
31077
  var NAME_WIDTH = 16;
30915
31078
  var PANEL_LABEL_WIDTH = "Command".length;
30916
31079
  function AgentsScreen({ onDone }) {
@@ -31020,21 +31183,21 @@ function AgentsScreen({ onDone }) {
31020
31183
  }
31021
31184
  });
31022
31185
  if (!config) {
31023
- return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31024
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
31025
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31026
- loadError ? /* @__PURE__ */ jsxs49(Fragment18, { children: [
31027
- /* @__PURE__ */ jsxs49(Text51, { color: PALETTE.error, children: [
31186
+ return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31187
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
31188
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31189
+ loadError ? /* @__PURE__ */ jsxs50(Fragment19, { children: [
31190
+ /* @__PURE__ */ jsxs50(Text52, { color: PALETTE.error, children: [
31028
31191
  "\u2717 Could not read the settings: ",
31029
31192
  loadError
31030
31193
  ] }),
31031
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31032
- /* @__PURE__ */ jsx61(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
31033
- ] }) : /* @__PURE__ */ jsx61(Text51, { color: PALETTE.accent, children: "Loading..." })
31194
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31195
+ /* @__PURE__ */ jsx62(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
31196
+ ] }) : /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "Loading..." })
31034
31197
  ] });
31035
31198
  }
31036
31199
  if (open) {
31037
- return /* @__PURE__ */ jsx61(
31200
+ return /* @__PURE__ */ jsx62(
31038
31201
  AgentDetail,
31039
31202
  {
31040
31203
  name: open,
@@ -31055,48 +31218,48 @@ function AgentsScreen({ onDone }) {
31055
31218
  );
31056
31219
  }
31057
31220
  const focusedAgent = AGENT_NAMES[focus];
31058
- return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31059
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
31060
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31061
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
31062
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31063
- /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
31064
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "Default agent" }),
31065
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
31066
- saving && /* @__PURE__ */ jsx61(Text51, { color: PALETTE.accent, children: "\u2026 saving" })
31221
+ return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31222
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
31223
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31224
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
31225
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31226
+ /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
31227
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Default agent" }),
31228
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
31229
+ saving && /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "\u2026 saving" })
31067
31230
  ] }),
31068
- /* @__PURE__ */ jsxs49(Box49, { marginTop: 1, gap: 1, children: [
31069
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31070
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31071
- /* @__PURE__ */ jsx61(Box49, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "AGENT" }) }),
31072
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: "STATUS" })
31231
+ /* @__PURE__ */ jsxs50(Box50, { marginTop: 1, gap: 1, children: [
31232
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31233
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31234
+ /* @__PURE__ */ jsx62(Box50, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "AGENT" }) }),
31235
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "STATUS" })
31073
31236
  ] }),
31074
31237
  AGENT_NAMES.map((name) => {
31075
31238
  const isFocused = focusedAgent === name;
31076
- return /* @__PURE__ */ jsxs49(Box49, { gap: 1, children: [
31077
- /* @__PURE__ */ jsx61(Text51, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
31078
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
31079
- /* @__PURE__ */ jsx61(Box49, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
31080
- /* @__PURE__ */ jsx61(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
31239
+ return /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
31240
+ /* @__PURE__ */ jsx62(Text52, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
31241
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
31242
+ /* @__PURE__ */ jsx62(Box50, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
31243
+ /* @__PURE__ */ jsx62(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
31081
31244
  ] }, name);
31082
31245
  }),
31083
- /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", marginTop: 1, children: [
31084
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
31085
- panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs49(Box49, { gap: 1, paddingLeft: 1, children: [
31086
- /* @__PURE__ */ jsx61(Box49, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: row.label }) }),
31087
- /* @__PURE__ */ jsx61(Text51, { color: TONE_COLOR[row.tone], children: row.value })
31246
+ /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", marginTop: 1, children: [
31247
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
31248
+ panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs50(Box50, { gap: 1, paddingLeft: 1, children: [
31249
+ /* @__PURE__ */ jsx62(Box50, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: row.label }) }),
31250
+ /* @__PURE__ */ jsx62(Text52, { color: TONE_COLOR[row.tone], children: row.value })
31088
31251
  ] }, row.label))
31089
31252
  ] }),
31090
- notice && /* @__PURE__ */ jsxs49(Fragment18, { children: [
31091
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31092
- /* @__PURE__ */ jsxs49(Text51, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
31253
+ notice && /* @__PURE__ */ jsxs50(Fragment19, { children: [
31254
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31255
+ /* @__PURE__ */ jsxs50(Text52, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
31093
31256
  notice.kind === "success" ? "\u2713" : "\u2717",
31094
31257
  " ",
31095
31258
  notice.text
31096
31259
  ] })
31097
31260
  ] }),
31098
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
31099
- /* @__PURE__ */ jsx61(
31261
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
31262
+ /* @__PURE__ */ jsx62(
31100
31263
  ControlHints,
31101
31264
  {
31102
31265
  hints: [
@@ -31112,7 +31275,7 @@ function AgentsScreen({ onDone }) {
31112
31275
 
31113
31276
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
31114
31277
  import { useEffect as useEffect33, useRef as useRef21, useState as useState35 } from "react";
31115
- import { Box as Box50, Text as Text52, useInput as useInput16 } from "ink";
31278
+ import { Box as Box51, Text as Text53, useInput as useInput16 } from "ink";
31116
31279
  init_debug_store();
31117
31280
 
31118
31281
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/project-store.ts
@@ -31141,7 +31304,7 @@ async function writeCredentials(config) {
31141
31304
  }
31142
31305
 
31143
31306
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
31144
- import { Fragment as Fragment19, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
31307
+ import { Fragment as Fragment20, jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
31145
31308
  var FIELDS3 = [
31146
31309
  { key: "spaceId", label: "Space ID" },
31147
31310
  { key: "environmentId", label: "Environment ID" },
@@ -31221,17 +31384,17 @@ function ProjectScreen({ onDone }) {
31221
31384
  }
31222
31385
  });
31223
31386
  if (!config) {
31224
- return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31225
- /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
31226
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
31227
- loadError ? /* @__PURE__ */ jsxs50(Fragment19, { children: [
31228
- /* @__PURE__ */ jsxs50(Text52, { color: PALETTE.error, children: [
31387
+ return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31388
+ /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
31389
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
31390
+ loadError ? /* @__PURE__ */ jsxs51(Fragment20, { children: [
31391
+ /* @__PURE__ */ jsxs51(Text53, { color: PALETTE.error, children: [
31229
31392
  "\u2717 Could not read the settings: ",
31230
31393
  loadError
31231
31394
  ] }),
31232
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
31233
- /* @__PURE__ */ jsx62(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
31234
- ] }) : /* @__PURE__ */ jsx62(Text52, { color: PALETTE.accent, children: "Loading..." })
31395
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
31396
+ /* @__PURE__ */ jsx63(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
31397
+ ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.accent, children: "Loading..." })
31235
31398
  ] });
31236
31399
  }
31237
31400
  const save = () => {
@@ -31252,7 +31415,7 @@ function ProjectScreen({ onDone }) {
31252
31415
  endVisit(config);
31253
31416
  onDone();
31254
31417
  };
31255
- return /* @__PURE__ */ jsx62(
31418
+ return /* @__PURE__ */ jsx63(
31256
31419
  FieldForm,
31257
31420
  {
31258
31421
  title: "Settings \u203A Configuration \u203A Project",
@@ -31274,7 +31437,7 @@ function ProjectScreen({ onDone }) {
31274
31437
  }
31275
31438
 
31276
31439
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
31277
- import { jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
31440
+ import { jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
31278
31441
  var SECTIONS = [
31279
31442
  {
31280
31443
  id: "project",
@@ -31303,18 +31466,18 @@ function ConfigurationScreen({ onDone }) {
31303
31466
  }
31304
31467
  if (key.escape || input === "q") onDone();
31305
31468
  });
31306
- if (open === "project") return /* @__PURE__ */ jsx63(ProjectScreen, { onDone: close });
31307
- if (open === "agents") return /* @__PURE__ */ jsx63(AgentsScreen, { onDone: close });
31308
- return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31309
- /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Configuration" }),
31310
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
31311
- SECTIONS.map((section, index) => /* @__PURE__ */ jsxs51(Box51, { gap: 1, children: [
31312
- /* @__PURE__ */ jsx63(Text53, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
31313
- /* @__PURE__ */ jsx63(Box51, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx63(Text53, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
31314
- /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: section.description })
31469
+ if (open === "project") return /* @__PURE__ */ jsx64(ProjectScreen, { onDone: close });
31470
+ if (open === "agents") return /* @__PURE__ */ jsx64(AgentsScreen, { onDone: close });
31471
+ return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31472
+ /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Configuration" }),
31473
+ /* @__PURE__ */ jsx64(Text54, { children: " " }),
31474
+ SECTIONS.map((section, index) => /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
31475
+ /* @__PURE__ */ jsx64(Text54, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
31476
+ /* @__PURE__ */ jsx64(Box52, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx64(Text54, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
31477
+ /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: section.description })
31315
31478
  ] }, section.id)),
31316
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
31317
- /* @__PURE__ */ jsx63(
31479
+ /* @__PURE__ */ jsx64(Text54, { children: " " }),
31480
+ /* @__PURE__ */ jsx64(
31318
31481
  ControlHints,
31319
31482
  {
31320
31483
  hints: [
@@ -31329,7 +31492,7 @@ function ConfigurationScreen({ onDone }) {
31329
31492
 
31330
31493
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
31331
31494
  import { useEffect as useEffect34, useState as useState37 } from "react";
31332
- import { Box as Box52, Text as Text54, useInput as useInput18 } from "ink";
31495
+ import { Box as Box53, Text as Text55, useInput as useInput18 } from "ink";
31333
31496
 
31334
31497
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
31335
31498
  async function readAnalyticsSetting() {
@@ -31348,7 +31511,7 @@ async function writeAnalyticsSetting(setting) {
31348
31511
 
31349
31512
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
31350
31513
  init_debug_store();
31351
- import { Fragment as Fragment20, jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
31514
+ import { Fragment as Fragment21, jsx as jsx65, jsxs as jsxs53 } from "react/jsx-runtime";
31352
31515
  function OptInAnalyticsScreen({ onDone }) {
31353
31516
  const [loading, setLoading] = useState37(true);
31354
31517
  const [enabled, setEnabled] = useState37(true);
@@ -31379,21 +31542,21 @@ function OptInAnalyticsScreen({ onDone }) {
31379
31542
  onDone();
31380
31543
  }
31381
31544
  });
31382
- return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31383
- /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
31384
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
31385
- loading ? /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs52(Fragment20, { children: [
31386
- /* @__PURE__ */ jsxs52(Text54, { children: [
31545
+ return /* @__PURE__ */ jsxs53(Box53, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31546
+ /* @__PURE__ */ jsx65(Text55, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
31547
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
31548
+ loading ? /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs53(Fragment21, { children: [
31549
+ /* @__PURE__ */ jsxs53(Text55, { children: [
31387
31550
  "Share anonymous usage data:",
31388
31551
  " ",
31389
- /* @__PURE__ */ jsx64(Text54, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
31552
+ /* @__PURE__ */ jsx65(Text55, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
31390
31553
  ] }),
31391
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
31392
- /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
31393
- /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
31554
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
31555
+ /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
31556
+ /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
31394
31557
  ] }),
31395
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
31396
- /* @__PURE__ */ jsx64(
31558
+ /* @__PURE__ */ jsx65(Text55, { children: " " }),
31559
+ /* @__PURE__ */ jsx65(
31397
31560
  ControlHints,
31398
31561
  {
31399
31562
  hints: [
@@ -31407,10 +31570,10 @@ function OptInAnalyticsScreen({ onDone }) {
31407
31570
 
31408
31571
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
31409
31572
  import { useEffect as useEffect35, useRef as useRef22, useState as useState38 } from "react";
31410
- import { Box as Box53, Text as Text55, useInput as useInput19 } from "ink";
31573
+ import { Box as Box54, Text as Text56, useInput as useInput19 } from "ink";
31411
31574
  init_debug_mode_store();
31412
31575
  init_debug_store();
31413
- import { Fragment as Fragment21, jsx as jsx65, jsxs as jsxs53 } from "react/jsx-runtime";
31576
+ import { Fragment as Fragment22, jsx as jsx66, jsxs as jsxs54 } from "react/jsx-runtime";
31414
31577
  var ROWS = ["enabled", "retentionDays"];
31415
31578
  var snapshotOf2 = (setting) => ({
31416
31579
  enabled: String(setting.enabled),
@@ -31491,25 +31654,25 @@ function DebugModeScreen({ onDone }) {
31491
31654
  onDone();
31492
31655
  }
31493
31656
  });
31494
- const marker = (row) => /* @__PURE__ */ jsx65(Text55, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
31495
- const label = (row, text) => /* @__PURE__ */ jsx65(Text55, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
31496
- return /* @__PURE__ */ jsxs53(Box53, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31497
- /* @__PURE__ */ jsx65(Text55, { bold: true, children: "Settings \u203A Debug Mode" }),
31498
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
31499
- setting ? /* @__PURE__ */ jsxs53(Fragment21, { children: [
31500
- /* @__PURE__ */ jsxs53(Box53, { gap: 1, children: [
31657
+ const marker = (row) => /* @__PURE__ */ jsx66(Text56, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
31658
+ const label = (row, text) => /* @__PURE__ */ jsx66(Text56, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
31659
+ return /* @__PURE__ */ jsxs54(Box54, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31660
+ /* @__PURE__ */ jsx66(Text56, { bold: true, children: "Settings \u203A Debug Mode" }),
31661
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
31662
+ setting ? /* @__PURE__ */ jsxs54(Fragment22, { children: [
31663
+ /* @__PURE__ */ jsxs54(Box54, { gap: 1, children: [
31501
31664
  marker("enabled"),
31502
31665
  label("enabled", "Debug logging:"),
31503
- /* @__PURE__ */ jsx65(Text55, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
31666
+ /* @__PURE__ */ jsx66(Text56, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
31504
31667
  ] }),
31505
- /* @__PURE__ */ jsxs53(Box53, { gap: 1, children: [
31668
+ /* @__PURE__ */ jsxs54(Box54, { gap: 1, children: [
31506
31669
  marker("retentionDays"),
31507
31670
  label("retentionDays", "Delete logs after:"),
31508
31671
  RETENTION_CHOICES.map((days) => {
31509
31672
  const highlighted = focus === "retentionDays" && days === pending;
31510
31673
  const saved = days === setting.retentionDays;
31511
- return /* @__PURE__ */ jsx65(
31512
- Text55,
31674
+ return /* @__PURE__ */ jsx66(
31675
+ Text56,
31513
31676
  {
31514
31677
  bold: highlighted || saved,
31515
31678
  underline: highlighted,
@@ -31520,15 +31683,15 @@ function DebugModeScreen({ onDone }) {
31520
31683
  );
31521
31684
  })
31522
31685
  ] }),
31523
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
31524
- notice ? /* @__PURE__ */ jsxs53(Text55, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
31686
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
31687
+ notice ? /* @__PURE__ */ jsxs54(Text56, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
31525
31688
  notice.kind === "success" ? "\u2713" : "\u2717",
31526
31689
  " ",
31527
31690
  notice.text
31528
- ] }) : /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
31529
- ] }) : /* @__PURE__ */ jsx65(Text55, { color: PALETTE.muted, children: "Loading\u2026" }),
31530
- /* @__PURE__ */ jsx65(Text55, { children: " " }),
31531
- /* @__PURE__ */ jsx65(
31691
+ ] }) : /* @__PURE__ */ jsx66(Text56, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
31692
+ ] }) : /* @__PURE__ */ jsx66(Text56, { color: PALETTE.muted, children: "Loading\u2026" }),
31693
+ /* @__PURE__ */ jsx66(Text56, { children: " " }),
31694
+ /* @__PURE__ */ jsx66(
31532
31695
  ControlHints,
31533
31696
  {
31534
31697
  hints: [
@@ -31545,7 +31708,7 @@ function DebugModeScreen({ onDone }) {
31545
31708
  }
31546
31709
 
31547
31710
  // packages/experience-design-system-cli/app.tsx
31548
- import { Fragment as Fragment22, jsx as jsx66 } from "react/jsx-runtime";
31711
+ import { Fragment as Fragment23, jsx as jsx67 } from "react/jsx-runtime";
31549
31712
  var TOKENS_ONLY_HIDDEN_STEPS = ["extraction", "scope-gate"];
31550
31713
  function App({ importOptions, inkClear }) {
31551
31714
  const [screen, setScreen] = useState39("start");
@@ -31747,9 +31910,9 @@ function App({ importOptions, inkClear }) {
31747
31910
  const content = (() => {
31748
31911
  switch (screen) {
31749
31912
  case "import":
31750
- if (showImportResult) return /* @__PURE__ */ jsx66(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
31913
+ if (showImportResult) return /* @__PURE__ */ jsx67(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
31751
31914
  if (flow && flowStart) {
31752
- return /* @__PURE__ */ jsx66(
31915
+ return /* @__PURE__ */ jsx67(
31753
31916
  FlowScreen,
31754
31917
  {
31755
31918
  state: flow.state,
@@ -31760,7 +31923,7 @@ function App({ importOptions, inkClear }) {
31760
31923
  );
31761
31924
  }
31762
31925
  if (tokenReview) {
31763
- return /* @__PURE__ */ jsx66(
31926
+ return /* @__PURE__ */ jsx67(
31764
31927
  TokenReviewScreen,
31765
31928
  {
31766
31929
  tokensPath: tokenReview.tokensPath,
@@ -31769,15 +31932,15 @@ function App({ importOptions, inkClear }) {
31769
31932
  }
31770
31933
  );
31771
31934
  }
31772
- if (importDefaults === void 0) return /* @__PURE__ */ jsx66(Fragment22, {});
31935
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx67(Fragment23, {});
31773
31936
  if (target === void 0) {
31774
- return /* @__PURE__ */ jsx66(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
31937
+ return /* @__PURE__ */ jsx67(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
31775
31938
  }
31776
31939
  const inputStep = currentInputStep(target, answers);
31777
31940
  if (!extractionRun && !tokensOnlyRun && inputStep !== "credentials") {
31778
31941
  switch (inputStep) {
31779
31942
  case "project":
31780
- return /* @__PURE__ */ jsx66(
31943
+ return /* @__PURE__ */ jsx67(
31781
31944
  WelcomeScreen,
31782
31945
  {
31783
31946
  mode: target,
@@ -31787,7 +31950,7 @@ function App({ importOptions, inkClear }) {
31787
31950
  }
31788
31951
  );
31789
31952
  case "token-file":
31790
- return /* @__PURE__ */ jsx66(
31953
+ return /* @__PURE__ */ jsx67(
31791
31954
  TokenInputScreen,
31792
31955
  {
31793
31956
  mode: target,
@@ -31797,7 +31960,7 @@ function App({ importOptions, inkClear }) {
31797
31960
  }
31798
31961
  );
31799
31962
  case "path-validation":
31800
- return /* @__PURE__ */ jsx66(
31963
+ return /* @__PURE__ */ jsx67(
31801
31964
  PathValidationScreen,
31802
31965
  {
31803
31966
  mode: target,
@@ -31812,9 +31975,9 @@ function App({ importOptions, inkClear }) {
31812
31975
  }
31813
31976
  if (tokensOnlyRun) {
31814
31977
  if (tokensOnly?.status === "done" && !tokensOnly.result.ok) {
31815
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
31978
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
31816
31979
  }
31817
- return /* @__PURE__ */ jsx66(
31980
+ return /* @__PURE__ */ jsx67(
31818
31981
  RunningStep,
31819
31982
  {
31820
31983
  step: "generation",
@@ -31825,19 +31988,26 @@ function App({ importOptions, inkClear }) {
31825
31988
  }
31826
31989
  if (extractionRun) {
31827
31990
  if (extraction?.status === "done" && !extraction.result.ok) {
31828
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
31991
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
31829
31992
  }
31830
31993
  if (extraction?.status === "running") {
31831
- return /* @__PURE__ */ jsx66(ExtractionScreen, { progress: extraction.progress, agent: extractionRun.input.agent });
31994
+ return /* @__PURE__ */ jsx67(
31995
+ ExtractionScreen,
31996
+ {
31997
+ progress: extraction.progress,
31998
+ agent: extractionRun.input.agent,
31999
+ rowMs: extraction.rowMs
32000
+ }
32001
+ );
31832
32002
  }
31833
- return /* @__PURE__ */ jsx66(Fragment22, {});
32003
+ return /* @__PURE__ */ jsx67(Fragment23, {});
31834
32004
  }
31835
32005
  if (scopeRun && scopeFlow) {
31836
32006
  if (scopeFlow.status === "failed") {
31837
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
32007
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
31838
32008
  }
31839
32009
  if (scopeFlow.status === "deciding") {
31840
- return /* @__PURE__ */ jsx66(
32010
+ return /* @__PURE__ */ jsx67(
31841
32011
  ScopeGateScreen,
31842
32012
  {
31843
32013
  components: scopeFlow.load.components,
@@ -31848,22 +32018,23 @@ function App({ importOptions, inkClear }) {
31848
32018
  );
31849
32019
  }
31850
32020
  if (generation?.status === "done" && !generation.result.ok) {
31851
- return /* @__PURE__ */ jsx66(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
32021
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
31852
32022
  }
31853
32023
  if (generation?.status === "running") {
31854
- return /* @__PURE__ */ jsx66(
32024
+ return /* @__PURE__ */ jsx67(
31855
32025
  GenerationScreen,
31856
32026
  {
31857
32027
  progress: generation.progress,
31858
32028
  agent: scopeRun.input.agent,
31859
32029
  acceptedCount: scopeFlow.decisions.accepted.length,
31860
- hasTokens: scopeRun.extraction.tokensPath !== ""
32030
+ hasTokens: scopeRun.extraction.tokensPath !== "",
32031
+ rowMs: generation.rowMs
31861
32032
  }
31862
32033
  );
31863
32034
  }
31864
- return /* @__PURE__ */ jsx66(Fragment22, {});
32035
+ return /* @__PURE__ */ jsx67(Fragment23, {});
31865
32036
  }
31866
- return /* @__PURE__ */ jsx66(
32037
+ return /* @__PURE__ */ jsx67(
31867
32038
  CredentialsScreen,
31868
32039
  {
31869
32040
  mode: target,
@@ -31874,27 +32045,27 @@ function App({ importOptions, inkClear }) {
31874
32045
  }
31875
32046
  );
31876
32047
  case "help":
31877
- return /* @__PURE__ */ jsx66(HelpScreen, { onDone: goToStart });
32048
+ return /* @__PURE__ */ jsx67(HelpScreen, { onDone: goToStart });
31878
32049
  case "settings":
31879
- return /* @__PURE__ */ jsx66(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
32050
+ return /* @__PURE__ */ jsx67(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
31880
32051
  case "settings-configuration":
31881
- return /* @__PURE__ */ jsx66(ConfigurationScreen, { onDone: goToSettings });
32052
+ return /* @__PURE__ */ jsx67(ConfigurationScreen, { onDone: goToSettings });
31882
32053
  case "settings-opt-in-analytics":
31883
- return /* @__PURE__ */ jsx66(OptInAnalyticsScreen, { onDone: goToSettings });
32054
+ return /* @__PURE__ */ jsx67(OptInAnalyticsScreen, { onDone: goToSettings });
31884
32055
  case "settings-debug-mode":
31885
- return /* @__PURE__ */ jsx66(DebugModeScreen, { onDone: goToSettings });
32056
+ return /* @__PURE__ */ jsx67(DebugModeScreen, { onDone: goToSettings });
31886
32057
  case "start":
31887
- return /* @__PURE__ */ jsx66(HomeScreen, { onNavigate: setScreen });
32058
+ return /* @__PURE__ */ jsx67(HomeScreen, { onNavigate: setScreen });
31888
32059
  }
31889
32060
  })();
31890
- return /* @__PURE__ */ jsx66(HiddenStepsContext.Provider, { value: target === "tokens" ? TOKENS_ONLY_HIDDEN_STEPS : [], children: content });
32061
+ return /* @__PURE__ */ jsx67(HiddenStepsContext.Provider, { value: target === "tokens" ? TOKENS_ONLY_HIDDEN_STEPS : [], children: content });
31891
32062
  }
31892
32063
  async function runApp(renderApp, importOptions) {
31893
32064
  const inkClear = () => {
31894
32065
  instance.clear?.();
31895
32066
  process.stdout.write("\x1B[H\x1B[0J");
31896
32067
  };
31897
- const instance = renderApp(/* @__PURE__ */ jsx66(App, { importOptions, inkClear }));
32068
+ const instance = renderApp(/* @__PURE__ */ jsx67(App, { importOptions, inkClear }));
31898
32069
  await instance.waitUntilExit();
31899
32070
  }
31900
32071
  export {