@contentful/experience-design-system-cli 2.37.1-dev-build-c299dd61.0 → 2.37.1-dev-build-283166e5.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
@@ -3104,9 +3104,9 @@ function PreflightScreen({ onChoose, onQuit }) {
3104
3104
  ] });
3105
3105
  }
3106
3106
 
3107
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
3108
- import { useState as useState5 } from "react";
3109
- import { Box as Box10, Text as Text10 } from "ink";
3107
+ // packages/experience-design-system-cli/src/tui/shared/components/PathStepScreen.tsx
3108
+ import { useState as useState7 } from "react";
3109
+ import { Box as Box12, Text as Text12, useInput as useInput9 } from "ink";
3110
3110
 
3111
3111
  // packages/experience-design-system-cli/src/tui/shared/components/ClearableTextInput.tsx
3112
3112
  import { useRef } from "react";
@@ -3137,83 +3137,396 @@ function ClearableTextInput({ onChange, ...props }) {
3137
3137
  );
3138
3138
  }
3139
3139
 
3140
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
3141
- import { useInput as useInput7 } from "ink";
3140
+ // packages/experience-design-system-cli/src/tui/shared/components/MenuScreen.tsx
3141
+ import { useState as useState6 } from "react";
3142
+ import { Box as Box11, Text as Text11, useInput as useInput8 } from "ink";
3142
3143
 
3143
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
3144
- function shouldQuit(key) {
3145
- return key.escape;
3144
+ // packages/experience-design-system-cli/src/tui/shared/components/FieldForm.tsx
3145
+ import { useState as useState5 } from "react";
3146
+ import { Box as Box10, Text as Text10, useInput as useInput7 } from "ink";
3147
+ import { Fragment, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
3148
+ function formLabelWidth(rows) {
3149
+ return Math.max(...rows.map((row) => row.label.length));
3146
3150
  }
3147
- function toProjectPath(value) {
3148
- const projectPath = value.trim();
3149
- return projectPath === "" ? null : projectPath;
3151
+ function FormReadOnlyRow({
3152
+ label,
3153
+ labelWidth,
3154
+ children
3155
+ }) {
3156
+ return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
3157
+ /* @__PURE__ */ jsx11(Text10, { children: " " }),
3158
+ /* @__PURE__ */ jsx11(Box10, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: label }) }),
3159
+ children
3160
+ ] });
3161
+ }
3162
+ function FieldForm({
3163
+ header,
3164
+ title,
3165
+ subtitle,
3166
+ fields: fields2,
3167
+ values,
3168
+ onChange,
3169
+ onSave,
3170
+ saveLabel = "save",
3171
+ enterAdvances = false,
3172
+ onSkip,
3173
+ skipLabel: skipLabel2 = "skip",
3174
+ onQuit,
3175
+ quitLabel = "back without saving",
3176
+ actions = [],
3177
+ notice,
3178
+ busy = false,
3179
+ children
3180
+ }) {
3181
+ const [active, setActive] = useState5(0);
3182
+ const [editing, setEditing] = useState5(false);
3183
+ const [valueBeforeEdit, setValueBeforeEdit] = useState5("");
3184
+ const rowCount = fields2.length + actions.length;
3185
+ const labelWidth = formLabelWidth([...fields2, ...actions]);
3186
+ const currentField = active < fields2.length ? fields2[active] : void 0;
3187
+ const currentAction = currentField ? void 0 : actions[active - fields2.length];
3188
+ useInput7((input, key) => {
3189
+ if (busy) return;
3190
+ if (editing) {
3191
+ if (key.escape && currentField) {
3192
+ onChange(currentField.key, valueBeforeEdit);
3193
+ setEditing(false);
3194
+ }
3195
+ return;
3196
+ }
3197
+ if (key.escape || input === "q") {
3198
+ onQuit();
3199
+ return;
3200
+ }
3201
+ if (input === "s") {
3202
+ onSave();
3203
+ return;
3204
+ }
3205
+ if (input === "k" && onSkip) {
3206
+ onSkip();
3207
+ return;
3208
+ }
3209
+ if (isClearKey(input, key) && currentField) {
3210
+ onChange(currentField.key, "");
3211
+ return;
3212
+ }
3213
+ if (key.tab || key.downArrow) {
3214
+ setActive((i) => (i + 1) % rowCount);
3215
+ return;
3216
+ }
3217
+ if (key.upArrow) {
3218
+ setActive((i) => (i - 1 + rowCount) % rowCount);
3219
+ return;
3220
+ }
3221
+ if (key.return) {
3222
+ if (currentField) {
3223
+ setValueBeforeEdit(values[currentField.key]);
3224
+ setEditing(true);
3225
+ } else {
3226
+ currentAction?.onRun();
3227
+ }
3228
+ }
3229
+ });
3230
+ const isLastField = active === fields2.length - 1;
3231
+ const submitField = () => {
3232
+ if (!enterAdvances) {
3233
+ setEditing(false);
3234
+ return;
3235
+ }
3236
+ if (isLastField) {
3237
+ setEditing(false);
3238
+ onSave();
3239
+ return;
3240
+ }
3241
+ const next = fields2[active + 1];
3242
+ setValueBeforeEdit(values[next.key]);
3243
+ setActive(active + 1);
3244
+ };
3245
+ const pointer = (isActive) => /* @__PURE__ */ jsx11(Text10, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
3246
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3247
+ header,
3248
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
3249
+ /* @__PURE__ */ jsx11(Text10, { bold: true, children: title }),
3250
+ /* @__PURE__ */ jsx11(Text10, { children: " " }),
3251
+ subtitle && /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: subtitle }),
3252
+ /* @__PURE__ */ jsx11(Text10, { children: " " }),
3253
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3254
+ fields2.map((field, index) => {
3255
+ const isActive = index === active;
3256
+ const value = values[field.key];
3257
+ const display = field.masked ? "\u2022".repeat(value.length) : value;
3258
+ return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
3259
+ pointer(isActive),
3260
+ /* @__PURE__ */ jsx11(Box10, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx11(Text10, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
3261
+ isActive && editing ? /* @__PURE__ */ jsx11(
3262
+ ClearableTextInput,
3263
+ {
3264
+ value,
3265
+ onChange: (next) => onChange(field.key, next),
3266
+ onSubmit: submitField,
3267
+ mask: field.masked ? "\u2022" : void 0
3268
+ }
3269
+ ) : display ? /* @__PURE__ */ jsx11(Text10, { bold: true, children: display }) : (
3270
+ // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
3271
+ // text starts in the same column as every other row's.
3272
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
3273
+ ),
3274
+ display && field.hint && /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: field.hint })
3275
+ ] }, field.key);
3276
+ }),
3277
+ actions.map((action, index) => {
3278
+ const isActive = fields2.length + index === active;
3279
+ return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
3280
+ pointer(isActive),
3281
+ /* @__PURE__ */ jsx11(Box10, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx11(Text10, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
3282
+ /* @__PURE__ */ jsx11(Text10, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
3283
+ ] }, action.label);
3284
+ })
3285
+ ] }),
3286
+ notice && /* @__PURE__ */ jsxs10(Fragment, { children: [
3287
+ /* @__PURE__ */ jsx11(Text10, { children: " " }),
3288
+ /* @__PURE__ */ jsxs10(Text10, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
3289
+ notice.kind === "success" ? "\u2713" : "\u2717",
3290
+ " ",
3291
+ notice.text
3292
+ ] })
3293
+ ] }),
3294
+ children,
3295
+ /* @__PURE__ */ jsx11(Text10, { children: " " }),
3296
+ /* @__PURE__ */ jsx11(
3297
+ ControlHints,
3298
+ {
3299
+ hints: editing ? [
3300
+ { keys: "type", label: "edit" },
3301
+ { keys: "\u2190/\u2192", label: "move cursor" },
3302
+ { keys: "\u23CE", label: enterAdvances ? isLastField ? saveLabel : "next" : "done" },
3303
+ { keys: "Ctrl+D", label: "clear" },
3304
+ { keys: "Esc", label: "cancel edit" }
3305
+ ] : [
3306
+ { keys: "\u2191/\u2193", label: "move" },
3307
+ { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
3308
+ ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
3309
+ { keys: "s", label: saveLabel },
3310
+ ...onSkip ? [{ keys: "k", label: skipLabel2 }] : [],
3311
+ { keys: "Esc/q", label: quitLabel }
3312
+ ]
3313
+ }
3314
+ )
3315
+ ] })
3316
+ ] });
3150
3317
  }
3151
3318
 
3152
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
3153
- var WELCOME_CONTROLS = [
3154
- { keys: "Enter", label: "Continue" },
3155
- { keys: "Ctrl+D", label: "Clear" },
3156
- { keys: "Esc", label: "Back" }
3157
- ];
3158
- function useWelcomeControls(onQuit) {
3159
- useInput7((_input, key) => {
3160
- if (shouldQuit(key)) onQuit();
3319
+ // packages/experience-design-system-cli/src/tui/shared/components/MenuScreen.tsx
3320
+ import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
3321
+ function MenuScreen({
3322
+ title,
3323
+ subtitle,
3324
+ menu,
3325
+ rows = [],
3326
+ onChoose,
3327
+ onEscape,
3328
+ escapeLabel = "back",
3329
+ busy = false,
3330
+ children
3331
+ }) {
3332
+ const [focus, setFocus] = useState6(0);
3333
+ useInput8((_input, key) => {
3334
+ if (busy) return;
3335
+ if (key.escape) onEscape();
3336
+ else if (key.return) onChoose(menu[focus].choice);
3337
+ else if (key.upArrow) setFocus((current) => (current - 1 + menu.length) % menu.length);
3338
+ else if (key.downArrow || key.tab) setFocus((current) => (current + 1) % menu.length);
3161
3339
  });
3340
+ const labelWidth = formLabelWidth([...menu, ...rows]);
3341
+ return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3342
+ /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
3343
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
3344
+ /* @__PURE__ */ jsx12(Text11, { bold: true, children: title }),
3345
+ /* @__PURE__ */ jsx12(Text11, { children: " " }),
3346
+ subtitle && /* @__PURE__ */ jsxs11(Fragment2, { children: [
3347
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: subtitle }),
3348
+ /* @__PURE__ */ jsx12(Text11, { children: " " })
3349
+ ] }),
3350
+ menu.map((item, index) => {
3351
+ const focused = index === focus;
3352
+ return /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
3353
+ /* @__PURE__ */ jsx12(Text11, { color: focused ? PALETTE.accent : void 0, children: focused ? "\u276F" : " " }),
3354
+ /* @__PURE__ */ jsx12(Box11, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx12(Text11, { bold: focused, color: focused ? PALETTE.accent : PALETTE.muted, children: item.label }) }),
3355
+ /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: item.description })
3356
+ ] }, item.choice);
3357
+ }),
3358
+ rows.length > 0 && /* @__PURE__ */ jsx12(Text11, { children: " " }),
3359
+ rows.map((row) => /* @__PURE__ */ jsx12(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx12(Text11, { bold: row.value !== "", children: row.value || "(empty)" }) }, row.label)),
3360
+ children,
3361
+ /* @__PURE__ */ jsx12(Text11, { children: " " }),
3362
+ /* @__PURE__ */ jsx12(
3363
+ ControlHints,
3364
+ {
3365
+ hints: [
3366
+ { keys: "\u2191/\u2193", label: "move" },
3367
+ { keys: "\u23CE", label: menu[focus].label.toLowerCase() },
3368
+ { keys: "Esc", label: escapeLabel }
3369
+ ]
3370
+ }
3371
+ )
3372
+ ] })
3373
+ ] });
3162
3374
  }
3163
3375
 
3164
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
3165
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
3166
- function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
3167
- const [projectPath, setProjectPath] = useState5(initialPath);
3168
- useWelcomeControls(onQuit);
3169
- const submit = (value) => {
3170
- const path5 = toProjectPath(value);
3171
- if (path5) onContinue(path5);
3376
+ // packages/experience-design-system-cli/src/tui/shared/components/PathStepScreen.tsx
3377
+ import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
3378
+ var MENU = [
3379
+ { choice: "continue", label: "Continue", description: "Use this path and go on" },
3380
+ { choice: "edit", label: "Edit", description: "Change the path" },
3381
+ { choice: "back", label: "Back", description: "Go back" }
3382
+ ];
3383
+ function PathStepScreen({
3384
+ title,
3385
+ subtitle,
3386
+ label,
3387
+ initialPath = "",
3388
+ toPath,
3389
+ check,
3390
+ onContinue,
3391
+ onBack
3392
+ }) {
3393
+ const [value, setValue] = useState7(initialPath);
3394
+ const [savedValue, setSavedValue] = useState7(toPath(initialPath) === null ? "" : initialPath);
3395
+ const [editing, setEditing] = useState7(toPath(initialPath) === null);
3396
+ const [failure, setFailure] = useState7(null);
3397
+ useInput9(
3398
+ (_input, key) => {
3399
+ if (!key.escape) return;
3400
+ if (savedValue === "") {
3401
+ onBack();
3402
+ return;
3403
+ }
3404
+ setValue(savedValue);
3405
+ setFailure(null);
3406
+ setEditing(false);
3407
+ },
3408
+ { isActive: editing }
3409
+ );
3410
+ const choose = (choice) => {
3411
+ if (choice === "edit") {
3412
+ setFailure(null);
3413
+ setEditing(true);
3414
+ return;
3415
+ }
3416
+ if (choice === "back") {
3417
+ onBack();
3418
+ return;
3419
+ }
3420
+ const path5 = toPath(value);
3421
+ if (path5 === null) return;
3422
+ const result = check(path5);
3423
+ if (result.ok) onContinue(result.path);
3424
+ else setFailure({ error: result.error, resolvedPath: result.resolvedPath });
3172
3425
  };
3173
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3174
- /* @__PURE__ */ jsx11(StepHeader, { step: "setup" }),
3175
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3176
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
3177
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.text, children: "Where is your component library?" }),
3178
- /* @__PURE__ */ jsxs10(Box10, { children: [
3179
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "? " }),
3180
- /* @__PURE__ */ jsx11(Text10, { children: "Project path: " }),
3181
- /* @__PURE__ */ jsx11(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3182
- ] })
3426
+ const submit = (typed) => {
3427
+ if (toPath(typed) === null) {
3428
+ setFailure({ error: `Enter the ${label.toLowerCase()}.` });
3429
+ return;
3430
+ }
3431
+ setSavedValue(typed);
3432
+ setEditing(false);
3433
+ };
3434
+ const failureLines = failure && /* @__PURE__ */ jsxs12(Fragment3, { children: [
3435
+ /* @__PURE__ */ jsx13(Text12, { children: " " }),
3436
+ /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
3437
+ "\u2717 ",
3438
+ failure.error
3439
+ ] }),
3440
+ failure.resolvedPath && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
3441
+ " Resolved to: ",
3442
+ failure.resolvedPath
3443
+ ] })
3444
+ ] });
3445
+ if (!editing) {
3446
+ return /* @__PURE__ */ jsx13(
3447
+ MenuScreen,
3448
+ {
3449
+ title,
3450
+ subtitle,
3451
+ menu: MENU,
3452
+ rows: [{ label, value: savedValue }],
3453
+ onChoose: choose,
3454
+ onEscape: onBack,
3455
+ children: failureLines
3456
+ }
3457
+ );
3458
+ }
3459
+ return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
3460
+ /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
3461
+ /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
3462
+ /* @__PURE__ */ jsx13(Text12, { bold: true, children: title }),
3463
+ /* @__PURE__ */ jsx13(Text12, { children: " " }),
3464
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: subtitle }),
3465
+ /* @__PURE__ */ jsx13(Text12, { children: " " }),
3466
+ /* @__PURE__ */ jsxs12(Box12, { gap: 1, children: [
3467
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.accent, children: "?" }),
3468
+ /* @__PURE__ */ jsxs12(Text12, { children: [
3469
+ label,
3470
+ ":"
3471
+ ] }),
3472
+ /* @__PURE__ */ jsx13(
3473
+ ClearableTextInput,
3474
+ {
3475
+ value,
3476
+ onChange: (next) => {
3477
+ setValue(next);
3478
+ setFailure(null);
3479
+ },
3480
+ onSubmit: submit
3481
+ }
3482
+ )
3183
3483
  ] }),
3184
- /* @__PURE__ */ jsx11(Box10, { children: /* @__PURE__ */ jsx11(ControlHints, { hints: WELCOME_CONTROLS }) })
3484
+ failureLines,
3485
+ /* @__PURE__ */ jsx13(Text12, { children: " " }),
3486
+ /* @__PURE__ */ jsx13(
3487
+ ControlHints,
3488
+ {
3489
+ hints: [
3490
+ { keys: "\u23CE", label: "done" },
3491
+ { keys: "Ctrl+D", label: "clear" },
3492
+ { keys: "Esc", label: savedValue === "" ? "back" : "cancel edit" }
3493
+ ]
3494
+ }
3495
+ )
3185
3496
  ] })
3186
3497
  ] });
3187
3498
  }
3188
3499
 
3189
- // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
3190
- import { useState as useState6 } from "react";
3191
- import { Box as Box11, Text as Text11 } from "ink";
3500
+ // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
3501
+ function toProjectPath(value) {
3502
+ const projectPath = value.trim();
3503
+ return projectPath === "" ? null : projectPath;
3504
+ }
3192
3505
 
3193
- // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
3194
- import { useInput as useInput8 } from "ink";
3506
+ // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
3507
+ import { jsx as jsx14 } from "react/jsx-runtime";
3508
+ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
3509
+ return /* @__PURE__ */ jsx14(
3510
+ PathStepScreen,
3511
+ {
3512
+ title: "Where is your component library?",
3513
+ subtitle: "The folder with your components. You can use ~, relative, or absolute paths.",
3514
+ label: "Project path",
3515
+ initialPath,
3516
+ toPath: toProjectPath,
3517
+ check: (path5) => ({ ok: true, path: path5 }),
3518
+ onContinue,
3519
+ onBack: onQuit
3520
+ }
3521
+ );
3522
+ }
3195
3523
 
3196
3524
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/logic.ts
3197
- function shouldGoBack(key) {
3198
- return key.escape;
3199
- }
3200
3525
  function toTokenPath(value) {
3201
3526
  const tokenPath = value.trim();
3202
3527
  return tokenPath === "" ? null : tokenPath;
3203
3528
  }
3204
3529
 
3205
- // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
3206
- var TOKEN_INPUT_CONTROLS = [
3207
- { keys: "Enter", label: "Continue" },
3208
- { keys: "Ctrl+D", label: "Clear" },
3209
- { keys: "Esc", label: "Back" }
3210
- ];
3211
- function useTokenInputControls(onBack) {
3212
- useInput8((_input, key) => {
3213
- if (shouldGoBack(key)) onBack();
3214
- });
3215
- }
3216
-
3217
3530
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/validate-path.ts
3218
3531
  import { statSync } from "node:fs";
3219
3532
 
@@ -3254,153 +3567,26 @@ function validateTokenPath(rawPath) {
3254
3567
  }
3255
3568
 
3256
3569
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
3257
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
3570
+ import { jsx as jsx15 } from "react/jsx-runtime";
3258
3571
  function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
3259
- const [tokenPath, setTokenPath] = useState6(initialPath);
3260
- const [failure, setFailure] = useState6(null);
3261
- useTokenInputControls(onBack);
3262
- const change = (value) => {
3263
- setTokenPath(value);
3264
- setFailure(null);
3265
- };
3266
- const submit = (value) => {
3267
- const rawPath = toTokenPath(value);
3268
- if (!rawPath) {
3269
- setFailure({ error: "Enter the path to your token file." });
3270
- return;
3572
+ return /* @__PURE__ */ jsx15(
3573
+ PathStepScreen,
3574
+ {
3575
+ title: "Design tokens",
3576
+ subtitle: "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).",
3577
+ label: "Token path",
3578
+ initialPath,
3579
+ toPath: toTokenPath,
3580
+ check: validateTokenPath,
3581
+ onContinue: onConfirm,
3582
+ onBack
3271
3583
  }
3272
- const check = validateTokenPath(rawPath);
3273
- if (check.ok) onConfirm(check.path);
3274
- else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
3275
- };
3276
- return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3277
- /* @__PURE__ */ jsx12(StepHeader, { step: "setup" }),
3278
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3279
- /* @__PURE__ */ jsx12(Text11, { bold: true, children: "Design tokens" }),
3280
- /* @__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)." }),
3281
- /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3282
- /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
3283
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.accent, children: "?" }),
3284
- /* @__PURE__ */ jsx12(Text11, { children: "Token path:" }),
3285
- /* @__PURE__ */ jsx12(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
3286
- ] }),
3287
- failure && /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
3288
- /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.error, children: [
3289
- "\u2717 ",
3290
- failure.error
3291
- ] }),
3292
- failure.resolvedPath && /* @__PURE__ */ jsxs11(Text11, { color: PALETTE.muted, children: [
3293
- " Resolved to: ",
3294
- failure.resolvedPath
3295
- ] })
3296
- ] })
3297
- ] }),
3298
- /* @__PURE__ */ jsx12(Box11, { marginTop: 1, children: /* @__PURE__ */ jsx12(ControlHints, { hints: TOKEN_INPUT_CONTROLS }) })
3299
- ] })
3300
- ] });
3584
+ );
3301
3585
  }
3302
3586
 
3303
3587
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
3304
- import { useEffect as useEffect4, useMemo, useState as useState7 } from "react";
3305
- import { Box as Box12, Text as Text12 } from "ink";
3306
-
3307
- // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
3308
- import { useInput as useInput9 } from "ink";
3309
-
3310
- // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/logic.ts
3311
- var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
3312
- var ROW_LABELS = {
3313
- tsx: ".tsx files",
3314
- ts: ".ts files",
3315
- vue: ".vue files",
3316
- astro: ".astro files",
3317
- jsx: ".jsx files",
3318
- js: ".js files",
3319
- json: ".json files (design tokens)",
3320
- other: "other (ignored)"
3321
- };
3322
- var ROW_ORDER = ["tsx", "ts", "vue", "astro", "jsx", "js", "json", "other"];
3323
- function describeFailure(failure, path5) {
3324
- switch (failure) {
3325
- case "is-file":
3326
- return {
3327
- headline: "That's a file, not a directory.",
3328
- hints: [
3329
- "Provide the path to your component library's root folder, not a specific file.",
3330
- "Example: ~/projects/my-design-system"
3331
- ]
3332
- };
3333
- case "not-found":
3334
- return {
3335
- headline: `Directory not found: ${path5}`,
3336
- hints: ["Double-check the path and try again. Tip: you can use ~, relative, or absolute paths."]
3337
- };
3338
- case "permission-denied":
3339
- return {
3340
- headline: `Permission denied: ${path5}`,
3341
- hints: ["You don't have read access to this directory."]
3342
- };
3343
- case "not-directory":
3344
- return { headline: `Not a directory: ${path5}`, hints: [] };
3345
- case "unreadable":
3346
- return { headline: `Cannot access: ${path5}`, hints: [] };
3347
- }
3348
- }
3349
- function summarize(counts, { hasTokens = true } = {}) {
3350
- const rows = ROW_ORDER.filter((category) => counts[category] > 0).map((category) => {
3351
- if (category === "json" && !hasTokens) return { label: ".json files (ignored)", count: counts.json, tone: "muted" };
3352
- const tone = category === "json" ? "accent" : category === "other" ? "muted" : "default";
3353
- return { label: ROW_LABELS[category], count: counts[category], tone };
3354
- });
3355
- const componentFiles = COMPONENT_CATEGORIES.reduce((sum, category) => sum + counts[category], 0);
3356
- if (componentFiles > 0) return { total: counts.total, rows };
3357
- if (hasTokens && counts.json > 0) {
3358
- return { total: counts.total, rows, warning: "No component files found \u2014 only token files detected." };
3359
- }
3360
- return {
3361
- total: counts.total,
3362
- rows,
3363
- warning: hasTokens ? "No component or token files found. Try a different path." : "No component files found. Try a different path."
3364
- };
3365
- }
3366
- function phaseOf(scan) {
3367
- if (scan === void 0) return "scanning";
3368
- return scan.ok ? "ready" : "failed";
3369
- }
3370
- function keyAction(phase, input, key) {
3371
- if (key.escape) return "back";
3372
- if (phase === "ready") {
3373
- if (key.return) return "confirm";
3374
- if (input === "e") return "change-path";
3375
- }
3376
- if (phase === "failed" && (key.return || input === "e")) return "change-path";
3377
- return void 0;
3378
- }
3379
-
3380
- // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
3381
- var CONTROLS = {
3382
- scanning: [{ keys: "Esc", label: "Back" }],
3383
- ready: [
3384
- { keys: "Enter", label: "Yes, continue" },
3385
- { keys: "e", label: "Change path" },
3386
- { keys: "Esc", label: "Back" }
3387
- ],
3388
- failed: [
3389
- { keys: "Enter/e", label: "Try a different path" },
3390
- { keys: "Esc", label: "Back" }
3391
- ]
3392
- };
3393
- function controlsFor(phase) {
3394
- return CONTROLS[phase];
3395
- }
3396
- function usePathValidationControls(phase, handlers) {
3397
- useInput9((input, key) => {
3398
- const action = keyAction(phase, input, key);
3399
- if (action === "confirm") handlers.onConfirm();
3400
- else if (action === "change-path") handlers.onChangePath();
3401
- else if (action === "back") handlers.onBack();
3402
- });
3403
- }
3588
+ import { useEffect as useEffect4, useMemo, useState as useState8 } from "react";
3589
+ import { Box as Box13, Text as Text13 } from "ink";
3404
3590
 
3405
3591
  // packages/experience-design-system-backend-pipeline/dist/src/persistence/src/session/repositories/db.js
3406
3592
  import { DatabaseSync } from "node:sqlite";
@@ -17884,29 +18070,100 @@ async function runGenerateComponentsSession(request) {
17884
18070
  db.close();
17885
18071
  }
17886
18072
  }
17887
-
17888
- // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/helpers/scan-files.ts
17889
- function scanFiles(directory) {
17890
- return toScanResult(collectFiles(directory));
17891
- }
17892
- function toScanResult(outcome) {
17893
- if (!outcome.ok) return { ok: false, failure: outcome.failure };
18073
+
18074
+ // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/helpers/scan-files.ts
18075
+ function scanFiles(directory) {
18076
+ return toScanResult(collectFiles(directory));
18077
+ }
18078
+ function toScanResult(outcome) {
18079
+ if (!outcome.ok) return { ok: false, failure: outcome.failure };
18080
+ return {
18081
+ ok: true,
18082
+ counts: foldSvelteAndMdIntoOther(outcome.result.counts),
18083
+ filePaths: outcome.result.filePaths,
18084
+ warnings: outcome.result.warnings
18085
+ };
18086
+ }
18087
+ function foldSvelteAndMdIntoOther(counts) {
18088
+ const { svelte, md, ...rest } = counts;
18089
+ return { ...rest, other: rest.other + svelte + md };
18090
+ }
18091
+
18092
+ // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/logic.ts
18093
+ var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
18094
+ var ROW_LABELS = {
18095
+ tsx: ".tsx files",
18096
+ ts: ".ts files",
18097
+ vue: ".vue files",
18098
+ astro: ".astro files",
18099
+ jsx: ".jsx files",
18100
+ js: ".js files",
18101
+ json: ".json files (design tokens)",
18102
+ other: "other (ignored)"
18103
+ };
18104
+ var ROW_ORDER = ["tsx", "ts", "vue", "astro", "jsx", "js", "json", "other"];
18105
+ function describeFailure(failure, path5) {
18106
+ switch (failure) {
18107
+ case "is-file":
18108
+ return {
18109
+ headline: "That's a file, not a directory.",
18110
+ hints: [
18111
+ "Provide the path to your component library's root folder, not a specific file.",
18112
+ "Example: ~/projects/my-design-system"
18113
+ ]
18114
+ };
18115
+ case "not-found":
18116
+ return {
18117
+ headline: `Directory not found: ${path5}`,
18118
+ hints: ["Double-check the path and try again. Tip: you can use ~, relative, or absolute paths."]
18119
+ };
18120
+ case "permission-denied":
18121
+ return {
18122
+ headline: `Permission denied: ${path5}`,
18123
+ hints: ["You don't have read access to this directory."]
18124
+ };
18125
+ case "not-directory":
18126
+ return { headline: `Not a directory: ${path5}`, hints: [] };
18127
+ case "unreadable":
18128
+ return { headline: `Cannot access: ${path5}`, hints: [] };
18129
+ }
18130
+ }
18131
+ function summarize(counts, { hasTokens = true } = {}) {
18132
+ const rows = ROW_ORDER.filter((category) => counts[category] > 0).map((category) => {
18133
+ if (category === "json" && !hasTokens) return { label: ".json files (ignored)", count: counts.json, tone: "muted" };
18134
+ const tone = category === "json" ? "accent" : category === "other" ? "muted" : "default";
18135
+ return { label: ROW_LABELS[category], count: counts[category], tone };
18136
+ });
18137
+ const componentFiles = COMPONENT_CATEGORIES.reduce((sum, category) => sum + counts[category], 0);
18138
+ if (componentFiles > 0) return { total: counts.total, rows };
18139
+ if (hasTokens && counts.json > 0) {
18140
+ return { total: counts.total, rows, warning: "No component files found \u2014 only token files detected." };
18141
+ }
17894
18142
  return {
17895
- ok: true,
17896
- counts: foldSvelteAndMdIntoOther(outcome.result.counts),
17897
- filePaths: outcome.result.filePaths,
17898
- warnings: outcome.result.warnings
18143
+ total: counts.total,
18144
+ rows,
18145
+ warning: hasTokens ? "No component or token files found. Try a different path." : "No component files found. Try a different path."
17899
18146
  };
17900
18147
  }
17901
- function foldSvelteAndMdIntoOther(counts) {
17902
- const { svelte, md, ...rest } = counts;
17903
- return { ...rest, other: rest.other + svelte + md };
18148
+ function phaseOf(scan) {
18149
+ if (scan === void 0) return "scanning";
18150
+ return scan.ok ? "ready" : "failed";
17904
18151
  }
17905
18152
 
17906
18153
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
17907
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
18154
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
18155
+ var BACK = { choice: "back", label: "Back", description: "Go back" };
18156
+ var MENUS = {
18157
+ scanning: [BACK],
18158
+ ready: [
18159
+ { choice: "continue", label: "Continue", description: "Use these files and go on" },
18160
+ { choice: "change-path", label: "Change path", description: "Pick a different folder" },
18161
+ BACK
18162
+ ],
18163
+ failed: [{ choice: "change-path", label: "Try a different path", description: "Pick a different folder" }, BACK]
18164
+ };
17908
18165
  function Row({ row }) {
17909
- return /* @__PURE__ */ jsxs12(Text12, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
18166
+ return /* @__PURE__ */ jsxs13(Text13, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
17910
18167
  " \u2022 ",
17911
18168
  String(row.count).padStart(3),
17912
18169
  " ",
@@ -17915,12 +18172,12 @@ function Row({ row }) {
17915
18172
  }
17916
18173
  function Failure({ scan, path: path5 }) {
17917
18174
  const { headline, hints } = describeFailure(scan.failure, path5);
17918
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
17919
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.error, children: [
18175
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18176
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.error, children: [
17920
18177
  "\u2717 ",
17921
18178
  headline
17922
18179
  ] }),
17923
- hints.map((hint) => /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: hint }, hint))
18180
+ hints.map((hint) => /* @__PURE__ */ jsx16(Text13, { color: PALETTE.muted, children: hint }, hint))
17924
18181
  ] });
17925
18182
  }
17926
18183
  function Summary({
@@ -17929,24 +18186,23 @@ function Summary({
17929
18186
  hasTokens
17930
18187
  }) {
17931
18188
  const { total, rows, warning } = summarize(scan.counts, { hasTokens });
17932
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, children: [
17933
- /* @__PURE__ */ jsxs12(Text12, { children: [
18189
+ return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", gap: 1, children: [
18190
+ /* @__PURE__ */ jsxs13(Text13, { children: [
17934
18191
  "Scanned ",
17935
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: path5 })
18192
+ /* @__PURE__ */ jsx16(Text13, { bold: true, children: path5 })
17936
18193
  ] }),
17937
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
17938
- /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.success, children: [
18194
+ /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18195
+ /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.success, children: [
17939
18196
  "\u2713 Found ",
17940
18197
  total,
17941
18198
  " files:"
17942
18199
  ] }),
17943
- rows.map((row) => /* @__PURE__ */ jsx13(Row, { row }, row.label))
18200
+ rows.map((row) => /* @__PURE__ */ jsx16(Row, { row }, row.label))
17944
18201
  ] }),
17945
- warning && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.warning, children: [
18202
+ warning && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.warning, children: [
17946
18203
  "\u26A0 ",
17947
18204
  warning
17948
- ] }),
17949
- /* @__PURE__ */ jsx13(Text12, { children: "Does this look right?" })
18205
+ ] })
17950
18206
  ] });
17951
18207
  }
17952
18208
  function PathValidationScreen({
@@ -17957,211 +18213,35 @@ function PathValidationScreen({
17957
18213
  hasTokens = true
17958
18214
  }) {
17959
18215
  const resolvedPath = useMemo(() => resolveUserPath(projectPath), [projectPath]);
17960
- const [scan, setScan] = useState7();
18216
+ const [scan, setScan] = useState8();
17961
18217
  useEffect4(() => {
17962
18218
  setScan(scanFiles(resolvedPath));
17963
18219
  }, [resolvedPath]);
17964
18220
  const phase = phaseOf(scan);
17965
- usePathValidationControls(phase, {
17966
- onConfirm: () => {
18221
+ const choose = (choice) => {
18222
+ if (choice === "continue") {
17967
18223
  if (scan?.ok) onConfirm({ projectPath: resolvedPath, filePaths: scan.filePaths });
17968
- },
17969
- onChangePath,
17970
- onBack
17971
- });
17972
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
17973
- /* @__PURE__ */ jsx13(StepHeader, { step: "setup" }),
17974
- /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
17975
- scan === void 0 && /* @__PURE__ */ jsxs12(Text12, { color: PALETTE.muted, children: [
18224
+ } else if (choice === "change-path") onChangePath();
18225
+ else onBack();
18226
+ };
18227
+ return (
18228
+ // keyed by phase: the menu changes length, so its focus starts over
18229
+ /* @__PURE__ */ jsxs13(MenuScreen, { title: "Scan", menu: MENUS[phase], onChoose: choose, onEscape: onBack, children: [
18230
+ /* @__PURE__ */ jsx16(Text13, { children: " " }),
18231
+ scan === void 0 && /* @__PURE__ */ jsxs13(Text13, { color: PALETTE.muted, children: [
17976
18232
  "Scanning ",
17977
- /* @__PURE__ */ jsx13(Text12, { bold: true, children: resolvedPath }),
18233
+ /* @__PURE__ */ jsx16(Text13, { bold: true, children: resolvedPath }),
17978
18234
  "..."
17979
18235
  ] }),
17980
- scan?.ok === false && /* @__PURE__ */ jsx13(Failure, { scan, path: resolvedPath }),
17981
- scan?.ok === true && /* @__PURE__ */ jsx13(Summary, { scan, path: resolvedPath, hasTokens }),
17982
- /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(ControlHints, { hints: controlsFor(phase) }) })
17983
- ] })
17984
- ] });
18236
+ scan?.ok === false && /* @__PURE__ */ jsx16(Failure, { scan, path: resolvedPath }),
18237
+ scan?.ok === true && /* @__PURE__ */ jsx16(Summary, { scan, path: resolvedPath, hasTokens })
18238
+ ] }, phase)
18239
+ );
17985
18240
  }
17986
18241
 
17987
18242
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
17988
18243
  import { useRef as useRef2, useState as useState9 } from "react";
17989
- import { Box as Box14, Text as Text14, useInput as useInput11 } from "ink";
17990
-
17991
- // packages/experience-design-system-cli/src/tui/shared/components/FieldForm.tsx
17992
- import { useState as useState8 } from "react";
17993
- import { Box as Box13, Text as Text13, useInput as useInput10 } from "ink";
17994
- import { Fragment, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
17995
- function formLabelWidth(rows) {
17996
- return Math.max(...rows.map((row) => row.label.length));
17997
- }
17998
- function FormReadOnlyRow({
17999
- label,
18000
- labelWidth,
18001
- children
18002
- }) {
18003
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18004
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18005
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: label }) }),
18006
- children
18007
- ] });
18008
- }
18009
- function FieldForm({
18010
- header,
18011
- title,
18012
- subtitle,
18013
- fields: fields2,
18014
- values,
18015
- onChange,
18016
- onSave,
18017
- saveLabel = "save",
18018
- enterAdvances = false,
18019
- onSkip,
18020
- skipLabel: skipLabel2 = "skip",
18021
- onQuit,
18022
- quitLabel = "back without saving",
18023
- actions = [],
18024
- notice,
18025
- busy = false,
18026
- children
18027
- }) {
18028
- const [active, setActive] = useState8(0);
18029
- const [editing, setEditing] = useState8(false);
18030
- const [valueBeforeEdit, setValueBeforeEdit] = useState8("");
18031
- const rowCount = fields2.length + actions.length;
18032
- const labelWidth = formLabelWidth([...fields2, ...actions]);
18033
- const currentField = active < fields2.length ? fields2[active] : void 0;
18034
- const currentAction = currentField ? void 0 : actions[active - fields2.length];
18035
- useInput10((input, key) => {
18036
- if (busy) return;
18037
- if (editing) {
18038
- if (key.escape && currentField) {
18039
- onChange(currentField.key, valueBeforeEdit);
18040
- setEditing(false);
18041
- }
18042
- return;
18043
- }
18044
- if (key.escape || input === "q") {
18045
- onQuit();
18046
- return;
18047
- }
18048
- if (input === "s") {
18049
- onSave();
18050
- return;
18051
- }
18052
- if (input === "k" && onSkip) {
18053
- onSkip();
18054
- return;
18055
- }
18056
- if (isClearKey(input, key) && currentField) {
18057
- onChange(currentField.key, "");
18058
- return;
18059
- }
18060
- if (key.tab || key.downArrow) {
18061
- setActive((i) => (i + 1) % rowCount);
18062
- return;
18063
- }
18064
- if (key.upArrow) {
18065
- setActive((i) => (i - 1 + rowCount) % rowCount);
18066
- return;
18067
- }
18068
- if (key.return) {
18069
- if (currentField) {
18070
- setValueBeforeEdit(values[currentField.key]);
18071
- setEditing(true);
18072
- } else {
18073
- currentAction?.onRun();
18074
- }
18075
- }
18076
- });
18077
- const isLastField = active === fields2.length - 1;
18078
- const submitField = () => {
18079
- if (!enterAdvances) {
18080
- setEditing(false);
18081
- return;
18082
- }
18083
- if (isLastField) {
18084
- setEditing(false);
18085
- onSave();
18086
- return;
18087
- }
18088
- const next = fields2[active + 1];
18089
- setValueBeforeEdit(values[next.key]);
18090
- setActive(active + 1);
18091
- };
18092
- const pointer = (isActive) => /* @__PURE__ */ jsx14(Text13, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
18093
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18094
- header,
18095
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", paddingX: 2, paddingTop: header ? 0 : 1, paddingBottom: 1, children: [
18096
- /* @__PURE__ */ jsx14(Text13, { bold: true, children: title }),
18097
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18098
- subtitle && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: subtitle }),
18099
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18100
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
18101
- fields2.map((field, index) => {
18102
- const isActive = index === active;
18103
- const value = values[field.key];
18104
- const display = field.masked ? "\u2022".repeat(value.length) : value;
18105
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18106
- pointer(isActive),
18107
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
18108
- isActive && editing ? /* @__PURE__ */ jsx14(
18109
- ClearableTextInput,
18110
- {
18111
- value,
18112
- onChange: (next) => onChange(field.key, next),
18113
- onSubmit: submitField,
18114
- mask: field.masked ? "\u2022" : void 0
18115
- }
18116
- ) : display ? /* @__PURE__ */ jsx14(Text13, { bold: true, children: display }) : (
18117
- // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
18118
- // text starts in the same column as every other row's.
18119
- /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
18120
- ),
18121
- display && field.hint && /* @__PURE__ */ jsx14(Text13, { color: PALETTE.muted, children: field.hint })
18122
- ] }, field.key);
18123
- }),
18124
- actions.map((action, index) => {
18125
- const isActive = fields2.length + index === active;
18126
- return /* @__PURE__ */ jsxs13(Box13, { gap: 1, children: [
18127
- pointer(isActive),
18128
- /* @__PURE__ */ jsx14(Box13, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx14(Text13, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
18129
- /* @__PURE__ */ jsx14(Text13, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
18130
- ] }, action.label);
18131
- })
18132
- ] }),
18133
- notice && /* @__PURE__ */ jsxs13(Fragment, { children: [
18134
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18135
- /* @__PURE__ */ jsxs13(Text13, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
18136
- notice.kind === "success" ? "\u2713" : "\u2717",
18137
- " ",
18138
- notice.text
18139
- ] })
18140
- ] }),
18141
- children,
18142
- /* @__PURE__ */ jsx14(Text13, { children: " " }),
18143
- /* @__PURE__ */ jsx14(
18144
- ControlHints,
18145
- {
18146
- hints: editing ? [
18147
- { keys: "type", label: "edit" },
18148
- { keys: "\u2190/\u2192", label: "move cursor" },
18149
- { keys: "\u23CE", label: enterAdvances ? isLastField ? saveLabel : "next" : "done" },
18150
- { keys: "Ctrl+D", label: "clear" },
18151
- { keys: "Esc", label: "cancel edit" }
18152
- ] : [
18153
- { keys: "\u2191/\u2193", label: "move" },
18154
- { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
18155
- ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
18156
- { keys: "s", label: saveLabel },
18157
- ...onSkip ? [{ keys: "k", label: skipLabel2 }] : [],
18158
- { keys: "Esc/q", label: quitLabel }
18159
- ]
18160
- }
18161
- )
18162
- ] })
18163
- ] });
18164
- }
18244
+ import { Text as Text14 } from "ink";
18165
18245
 
18166
18246
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/logic.ts
18167
18247
  var FIELDS = ["spaceId", "environmentId", "cmaToken", "host"];
@@ -18219,82 +18299,19 @@ function toUserError(error, host) {
18219
18299
  }
18220
18300
 
18221
18301
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
18222
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
18302
+ import { Fragment as Fragment4, jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
18223
18303
  var FIELDS2 = [
18224
18304
  { key: "spaceId", label: "Space ID" },
18225
18305
  { key: "environmentId", label: "Environment ID" },
18226
18306
  { key: "cmaToken", label: "CMA Token", masked: true },
18227
18307
  { key: "host", label: "API Host", hint: "(default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com)" }
18228
18308
  ];
18229
- var MENU = [
18309
+ var MENU2 = [
18230
18310
  { choice: "continue", label: "Continue", description: "Check the credentials and go on" },
18231
18311
  { choice: "edit", label: "Edit", description: "Change the credentials" },
18232
18312
  { choice: "skip", label: "Skip", description: "Save files only, nothing is pushed" },
18233
18313
  { choice: "quit", label: "Quit", description: "Go back" }
18234
18314
  ];
18235
- function CredentialsReview({
18236
- values,
18237
- subtitle,
18238
- notice,
18239
- validating,
18240
- onChoose,
18241
- children
18242
- }) {
18243
- const [focus, setFocus] = useState9(0);
18244
- useInput11((_input, key) => {
18245
- if (validating) return;
18246
- if (key.escape) onChoose("quit");
18247
- else if (key.return) onChoose(MENU[focus].choice);
18248
- else if (key.upArrow) setFocus((current) => (current - 1 + MENU.length) % MENU.length);
18249
- else if (key.downArrow || key.tab) setFocus((current) => (current + 1) % MENU.length);
18250
- });
18251
- const labelWidth = formLabelWidth([...FIELDS2, ...MENU]);
18252
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
18253
- /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
18254
- /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
18255
- /* @__PURE__ */ jsx15(Text14, { bold: true, children: "Contentful Credentials" }),
18256
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18257
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: subtitle }),
18258
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18259
- MENU.map((item, index) => {
18260
- const focused = index === focus;
18261
- return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
18262
- /* @__PURE__ */ jsx15(Text14, { color: focused ? PALETTE.accent : void 0, children: focused ? "\u276F" : " " }),
18263
- /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: focused, color: focused ? PALETTE.accent : PALETTE.muted, children: item.label }) }),
18264
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: item.description })
18265
- ] }, item.choice);
18266
- }),
18267
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18268
- FIELDS2.map((field) => {
18269
- const value = values[field.key];
18270
- return /* @__PURE__ */ jsx15(FormReadOnlyRow, { label: field.label, labelWidth, children: /* @__PURE__ */ jsx15(Text14, { bold: value !== "", children: field.masked ? "\u2022".repeat(value.length) : value || "(empty)" }) }, field.key);
18271
- }),
18272
- notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18273
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18274
- /* @__PURE__ */ jsxs14(Text14, { color: PALETTE.error, children: [
18275
- "\u2717 ",
18276
- notice.text
18277
- ] })
18278
- ] }),
18279
- validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18280
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18281
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
18282
- ] }),
18283
- children,
18284
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18285
- /* @__PURE__ */ jsx15(
18286
- ControlHints,
18287
- {
18288
- hints: [
18289
- { keys: "\u2191/\u2193", label: "move" },
18290
- { keys: "\u23CE", label: MENU[focus].label.toLowerCase() },
18291
- { keys: "Esc", label: "back" }
18292
- ]
18293
- }
18294
- )
18295
- ] })
18296
- ] });
18297
- }
18298
18315
  function CredentialsScreen({
18299
18316
  onDone,
18300
18317
  onBack,
@@ -18337,15 +18354,43 @@ function CredentialsScreen({
18337
18354
  else onBack();
18338
18355
  };
18339
18356
  if (!editing) {
18340
- return /* @__PURE__ */ jsx15(CredentialsReview, { values, subtitle, notice, validating, onChoose: choose, children: !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18341
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18342
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18343
- ] }) });
18357
+ return /* @__PURE__ */ jsxs14(
18358
+ MenuScreen,
18359
+ {
18360
+ title: "Contentful Credentials",
18361
+ subtitle,
18362
+ menu: MENU2,
18363
+ rows: FIELDS2.map((field) => ({
18364
+ label: field.label,
18365
+ value: field.masked ? "\u2022".repeat(values[field.key].length) : values[field.key]
18366
+ })),
18367
+ onChoose: choose,
18368
+ onEscape: onBack,
18369
+ busy: validating,
18370
+ children: [
18371
+ notice && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18372
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18373
+ /* @__PURE__ */ jsxs14(Text14, { color: PALETTE.error, children: [
18374
+ "\u2717 ",
18375
+ notice.text
18376
+ ] })
18377
+ ] }),
18378
+ validating && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18379
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18380
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
18381
+ ] }),
18382
+ !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18383
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18384
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18385
+ ] })
18386
+ ]
18387
+ }
18388
+ );
18344
18389
  }
18345
18390
  return /* @__PURE__ */ jsxs14(
18346
18391
  FieldForm,
18347
18392
  {
18348
- header: /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
18393
+ header: /* @__PURE__ */ jsx17(StepHeader, { step: "setup" }),
18349
18394
  title: "Contentful Credentials",
18350
18395
  subtitle,
18351
18396
  fields: FIELDS2,
@@ -18362,18 +18407,18 @@ function CredentialsScreen({
18362
18407
  notice,
18363
18408
  busy: validating,
18364
18409
  children: [
18365
- !prefilled && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18366
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18367
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
18368
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
18410
+ !prefilled && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18411
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18412
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
18413
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
18369
18414
  ] }),
18370
- validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18371
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18372
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
18415
+ validating && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18416
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18417
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
18373
18418
  ] }),
18374
- !validating && !notice && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment2, { children: [
18375
- /* @__PURE__ */ jsx15(Text14, { children: " " }),
18376
- /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18419
+ !validating && !notice && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment4, { children: [
18420
+ /* @__PURE__ */ jsx17(Text14, { children: " " }),
18421
+ /* @__PURE__ */ jsx17(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
18377
18422
  ] })
18378
18423
  ]
18379
18424
  }
@@ -18462,9 +18507,9 @@ function resolveAgentChoice(flag, stored) {
18462
18507
  }
18463
18508
 
18464
18509
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
18465
- import { jsx as jsx16 } from "react/jsx-runtime";
18510
+ import { jsx as jsx18 } from "react/jsx-runtime";
18466
18511
  function ExtractionScreen({ progress, agent }) {
18467
- return /* @__PURE__ */ jsx16(
18512
+ return /* @__PURE__ */ jsx18(
18468
18513
  RunningStep,
18469
18514
  {
18470
18515
  step: "extraction",
@@ -18814,11 +18859,11 @@ function useTokensOnly(input) {
18814
18859
  }
18815
18860
 
18816
18861
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
18817
- import { Box as Box24, Text as Text25 } from "ink";
18862
+ import { Box as Box23, Text as Text25 } from "ink";
18818
18863
 
18819
18864
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
18820
18865
  import React10 from "react";
18821
- import { Box as Box16, Text as Text16 } from "ink";
18866
+ import { Box as Box15, Text as Text16 } from "ink";
18822
18867
  import figures2 from "figures";
18823
18868
 
18824
18869
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/columns.ts
@@ -18925,8 +18970,8 @@ function computeColumnWindow(total, cursor, visibleCount) {
18925
18970
  }
18926
18971
 
18927
18972
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
18928
- import { Box as Box15, Text as Text15 } from "ink";
18929
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
18973
+ import { Box as Box14, Text as Text15 } from "ink";
18974
+ import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
18930
18975
  var MIN_TERMINAL_PANEL_HEIGHT = 5;
18931
18976
  function terminalPanelHeight(rows, reservedRows = 4) {
18932
18977
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
@@ -18942,8 +18987,8 @@ function FixedPanel({
18942
18987
  clipOverflow = true,
18943
18988
  children
18944
18989
  }) {
18945
- return /* @__PURE__ */ jsx17(
18946
- Box15,
18990
+ return /* @__PURE__ */ jsx19(
18991
+ Box14,
18947
18992
  {
18948
18993
  flexDirection: "column",
18949
18994
  width,
@@ -18968,7 +19013,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
18968
19013
  ...height === void 0 ? {} : { height },
18969
19014
  focused,
18970
19015
  children: [
18971
- title && /* @__PURE__ */ jsx17(WindowedPanelHeader, { title, width, focused }),
19016
+ title && /* @__PURE__ */ jsx19(WindowedPanelHeader, { title, width, focused }),
18972
19017
  children
18973
19018
  ]
18974
19019
  }
@@ -18979,9 +19024,9 @@ function WindowedPanelHeader({
18979
19024
  width,
18980
19025
  focused
18981
19026
  }) {
18982
- return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
18983
- /* @__PURE__ */ jsx17(Text15, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
18984
- /* @__PURE__ */ jsx17(Text15, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
19027
+ return /* @__PURE__ */ jsxs15(Box14, { flexDirection: "column", children: [
19028
+ /* @__PURE__ */ jsx19(Text15, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
19029
+ /* @__PURE__ */ jsx19(Text15, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
18985
19030
  ] });
18986
19031
  }
18987
19032
  function formatWindowIndicator(direction, count) {
@@ -18990,22 +19035,22 @@ function formatWindowIndicator(direction, count) {
18990
19035
  }
18991
19036
  function WindowFooter({ above, below }) {
18992
19037
  const parts = [above > 0 ? `\u2191 ${above}` : "", below > 0 ? `\u2193 ${below}` : ""].filter(Boolean);
18993
- return /* @__PURE__ */ jsx17(Text15, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
19038
+ return /* @__PURE__ */ jsx19(Text15, { color: PALETTE.muted, children: parts.length === 0 ? " " : `${parts.join(" \xB7 ")} more` });
18994
19039
  }
18995
19040
  function WindowIndicator({ direction, count }) {
18996
- return /* @__PURE__ */ jsx17(Text15, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
19041
+ return /* @__PURE__ */ jsx19(Text15, { color: PALETTE.muted, children: formatWindowIndicator(direction, count) });
18997
19042
  }
18998
19043
 
18999
19044
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
19000
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
19045
+ import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
19001
19046
  function AddedColumn(props) {
19002
19047
  const { title, width, height, entries, cursor, focused, aiFlaggedByKey, visibleCount } = props;
19003
19048
  const reserveAiBadge = entries.some((e) => aiFlaggedByKey?.get(e.name) === true);
19004
19049
  const firstNonCycleIdx = entries.findIndex((e) => !e.isCycle);
19005
19050
  const window = computeColumnWindow(entries.length, cursor, Math.max(1, visibleCount));
19006
19051
  return /* @__PURE__ */ jsxs16(WindowedPanel, { width, height, title, focused, children: [
19007
- /* @__PURE__ */ jsx18(WindowIndicator, { direction: "up", count: window.above }),
19008
- entries.length === 0 ? /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
19052
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "up", count: window.above }),
19053
+ entries.length === 0 ? /* @__PURE__ */ jsx20(Text16, { color: PALETTE.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
19009
19054
  const i = window.start + vi;
19010
19055
  const isSelected = i === cursor;
19011
19056
  const isCursor = focused && isSelected;
@@ -19013,12 +19058,12 @@ function AddedColumn(props) {
19013
19058
  const showSeparator = firstNonCycleIdx > 0 && i === firstNonCycleIdx;
19014
19059
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
19015
19060
  return /* @__PURE__ */ jsxs16(React10.Fragment, { children: [
19016
- showSeparator && /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
19017
- /* @__PURE__ */ jsxs16(Box16, { children: [
19018
- isCursor ? /* @__PURE__ */ jsx18(Text16, { color: PALETTE.accent, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx18(Text16, { children: " " }),
19019
- reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx18(Text16, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx18(Text16, { children: " " })),
19020
- entry.isCycle && /* @__PURE__ */ jsx18(Text16, { color: isCursor ? PALETTE.accent : PALETTE.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
19021
- /* @__PURE__ */ jsx18(
19061
+ showSeparator && /* @__PURE__ */ jsx20(Text16, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
19062
+ /* @__PURE__ */ jsxs16(Box15, { children: [
19063
+ isCursor ? /* @__PURE__ */ jsx20(Text16, { color: PALETTE.accent, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx20(Text16, { children: " " }),
19064
+ reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx20(Text16, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx20(Text16, { children: " " })),
19065
+ entry.isCycle && /* @__PURE__ */ jsx20(Text16, { color: isCursor ? PALETTE.accent : PALETTE.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
19066
+ /* @__PURE__ */ jsx20(
19022
19067
  Text16,
19023
19068
  {
19024
19069
  color: style.nameColor,
@@ -19032,14 +19077,14 @@ function AddedColumn(props) {
19032
19077
  ] })
19033
19078
  ] }, entry.name);
19034
19079
  }),
19035
- /* @__PURE__ */ jsx18(WindowIndicator, { direction: "down", count: window.below })
19080
+ /* @__PURE__ */ jsx20(WindowIndicator, { direction: "down", count: window.below })
19036
19081
  ] });
19037
19082
  }
19038
19083
 
19039
19084
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
19040
- import { Box as Box17, Text as Text17 } from "ink";
19085
+ import { Box as Box16, Text as Text17 } from "ink";
19041
19086
  import figures3 from "figures";
19042
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
19087
+ import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
19043
19088
  function cycleLabel(cycle, index) {
19044
19089
  const parts = [];
19045
19090
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -19050,36 +19095,36 @@ function cycleLabel(cycle, index) {
19050
19095
  return `Cycle ${index + 1}: ${parts.join(" \u2192 ")}`;
19051
19096
  }
19052
19097
  function CyclesPanel({ cycles, cursor }) {
19053
- return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19054
- /* @__PURE__ */ jsx19(Text17, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
19055
- /* @__PURE__ */ jsx19(Text17, { children: " " }),
19098
+ return /* @__PURE__ */ jsxs17(Box16, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19099
+ /* @__PURE__ */ jsx21(Text17, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
19100
+ /* @__PURE__ */ jsx21(Text17, { children: " " }),
19056
19101
  cycles.map((cycle, i) => {
19057
19102
  const isCursor = i === cursor;
19058
19103
  return /* @__PURE__ */ jsxs17(Text17, { children: [
19059
- isCursor ? /* @__PURE__ */ jsx19(Text17, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx19(Text17, { children: " " }),
19060
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
19104
+ isCursor ? /* @__PURE__ */ jsx21(Text17, { color: PALETTE.accent, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx21(Text17, { children: " " }),
19105
+ /* @__PURE__ */ jsx21(Text17, { color: PALETTE.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
19061
19106
  ] }, i);
19062
19107
  }),
19063
- /* @__PURE__ */ jsx19(Text17, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
19108
+ /* @__PURE__ */ jsx21(Text17, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
19064
19109
  ] });
19065
19110
  }
19066
19111
 
19067
19112
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
19068
- import { Box as Box18, Text as Text18 } from "ink";
19069
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
19113
+ import { Box as Box17, Text as Text18 } from "ink";
19114
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
19070
19115
  function RejectPrompt({ pending }) {
19071
- return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19072
- /* @__PURE__ */ jsx20(Text18, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
19073
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx20(Text18, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
19074
- pending.descendants.length > 0 && /* @__PURE__ */ jsx20(Text18, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
19075
- /* @__PURE__ */ jsx20(Text18, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
19116
+ return /* @__PURE__ */ jsxs18(Box17, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
19117
+ /* @__PURE__ */ jsx22(Text18, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
19118
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx22(Text18, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
19119
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx22(Text18, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
19120
+ /* @__PURE__ */ jsx22(Text18, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
19076
19121
  ] });
19077
19122
  }
19078
19123
 
19079
19124
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CompactControlBar.tsx
19080
- import { jsx as jsx21 } from "react/jsx-runtime";
19125
+ import { jsx as jsx23 } from "react/jsx-runtime";
19081
19126
  function CompactControlBar({ hasGroupRoots, searchActive }) {
19082
- return /* @__PURE__ */ jsx21(
19127
+ return /* @__PURE__ */ jsx23(
19083
19128
  ControlHints,
19084
19129
  {
19085
19130
  hints: [
@@ -19096,8 +19141,8 @@ function CompactControlBar({ hasGroupRoots, searchActive }) {
19096
19141
  }
19097
19142
 
19098
19143
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
19099
- import { Box as Box19, Text as Text19 } from "ink";
19100
- import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
19144
+ import { Box as Box18, Text as Text19 } from "ink";
19145
+ import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
19101
19146
  function CounterStrip(props) {
19102
19147
  const { counters, totalWidth } = props;
19103
19148
  const condensed = totalWidth < 60;
@@ -19105,32 +19150,32 @@ function CounterStrip(props) {
19105
19150
  const labelRej = condensed ? "Rej" : "Rejected";
19106
19151
  const labelUnd = condensed ? "Und" : "Undecided";
19107
19152
  const sep = condensed ? " | " : " ";
19108
- return /* @__PURE__ */ jsx22(Box19, { children: /* @__PURE__ */ jsxs19(Text19, { children: [
19153
+ return /* @__PURE__ */ jsx24(Box18, { children: /* @__PURE__ */ jsxs19(Text19, { children: [
19109
19154
  /* @__PURE__ */ jsxs19(Text19, { color: PALETTE.muted, children: [
19110
19155
  labelGrp,
19111
19156
  " "
19112
19157
  ] }),
19113
- /* @__PURE__ */ jsx22(Text19, { bold: true, children: counters.groups }),
19114
- /* @__PURE__ */ jsx22(Text19, { color: PALETTE.muted, children: sep }),
19158
+ /* @__PURE__ */ jsx24(Text19, { bold: true, children: counters.groups }),
19159
+ /* @__PURE__ */ jsx24(Text19, { color: PALETTE.muted, children: sep }),
19115
19160
  /* @__PURE__ */ jsxs19(Text19, { color: PALETTE.muted, children: [
19116
19161
  labelRej,
19117
19162
  " "
19118
19163
  ] }),
19119
- /* @__PURE__ */ jsx22(Text19, { bold: true, children: counters.rejected }),
19120
- /* @__PURE__ */ jsx22(Text19, { color: PALETTE.muted, children: sep }),
19164
+ /* @__PURE__ */ jsx24(Text19, { bold: true, children: counters.rejected }),
19165
+ /* @__PURE__ */ jsx24(Text19, { color: PALETTE.muted, children: sep }),
19121
19166
  /* @__PURE__ */ jsxs19(Text19, { color: PALETTE.muted, children: [
19122
19167
  labelUnd,
19123
19168
  " "
19124
19169
  ] }),
19125
- /* @__PURE__ */ jsx22(Text19, { bold: true, children: counters.undecided }),
19126
- /* @__PURE__ */ jsx22(Text19, { color: PALETTE.muted, children: sep })
19170
+ /* @__PURE__ */ jsx24(Text19, { bold: true, children: counters.undecided }),
19171
+ /* @__PURE__ */ jsx24(Text19, { color: PALETTE.muted, children: sep })
19127
19172
  ] }) });
19128
19173
  }
19129
19174
 
19130
19175
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
19131
19176
  import figures4 from "figures";
19132
- import { Box as Box20, Text as Text20 } from "ink";
19133
- import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
19177
+ import { Box as Box19, Text as Text20 } from "ink";
19178
+ import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
19134
19179
  var DEFAULT_MAX_ROWS = 15;
19135
19180
  function windowStart(rowCount, highlightIndex, maxRows) {
19136
19181
  if (rowCount <= maxRows) return 0;
@@ -19142,8 +19187,8 @@ function windowStart(rowCount, highlightIndex, maxRows) {
19142
19187
  }
19143
19188
  function defaultRenderRow(row, index, isCursor) {
19144
19189
  return /* @__PURE__ */ jsxs20(Text20, { children: [
19145
- isCursor ? /* @__PURE__ */ jsx23(Text20, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx23(Text20, { children: " " }),
19146
- /* @__PURE__ */ jsx23(Text20, { inverse: isCursor, children: " " + row.label })
19190
+ isCursor ? /* @__PURE__ */ jsx25(Text20, { color: PALETTE.accent, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx25(Text20, { children: " " }),
19191
+ /* @__PURE__ */ jsx25(Text20, { inverse: isCursor, children: " " + row.label })
19147
19192
  ] }, index);
19148
19193
  }
19149
19194
  function GotoBanner({
@@ -19163,7 +19208,7 @@ function GotoBanner({
19163
19208
  const moreAbove = start;
19164
19209
  const moreBelow = rows.length - end;
19165
19210
  return /* @__PURE__ */ jsxs20(
19166
- Box20,
19211
+ Box19,
19167
19212
  {
19168
19213
  flexDirection: "column",
19169
19214
  borderStyle: "single",
@@ -19173,14 +19218,14 @@ function GotoBanner({
19173
19218
  width,
19174
19219
  flexShrink: 0,
19175
19220
  children: [
19176
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: title }),
19177
- moreAbove > 0 && /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
19221
+ /* @__PURE__ */ jsx25(Text20, { bold: true, children: title }),
19222
+ moreAbove > 0 && /* @__PURE__ */ jsx25(Text20, { color: PALETTE.muted, children: ` \u25B2 ${moreAbove} more` }),
19178
19223
  visible.map((row, vi) => {
19179
19224
  const i = start + vi;
19180
19225
  return renderRow(row, i, i === highlightIndex);
19181
19226
  }),
19182
- moreBelow > 0 && /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
19183
- footerHint !== void 0 && /* @__PURE__ */ jsx23(Text20, { color: PALETTE.muted, children: footerHint })
19227
+ moreBelow > 0 && /* @__PURE__ */ jsx25(Text20, { color: PALETTE.muted, children: ` \u25BC ${moreBelow} more` }),
19228
+ footerHint !== void 0 && /* @__PURE__ */ jsx25(Text20, { color: PALETTE.muted, children: footerHint })
19184
19229
  ]
19185
19230
  }
19186
19231
  );
@@ -19188,7 +19233,7 @@ function GotoBanner({
19188
19233
 
19189
19234
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
19190
19235
  import figures5 from "figures";
19191
- import { Box as Box21, Text as Text22 } from "ink";
19236
+ import { Box as Box20, Text as Text22 } from "ink";
19192
19237
 
19193
19238
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/graph/cycle-detection.ts
19194
19239
  function buildGraph(components) {
@@ -19529,7 +19574,7 @@ function findSharedDeps(closures) {
19529
19574
 
19530
19575
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
19531
19576
  import { Text as Text21 } from "ink";
19532
- import { jsx as jsx24 } from "react/jsx-runtime";
19577
+ import { jsx as jsx26 } from "react/jsx-runtime";
19533
19578
  function previewBadge(annotation) {
19534
19579
  switch (annotation) {
19535
19580
  case "new":
@@ -19548,11 +19593,11 @@ function PreviewBadge({
19548
19593
  badge,
19549
19594
  highlighted = false
19550
19595
  }) {
19551
- return badge ? /* @__PURE__ */ jsx24(Text21, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx24(Text21, { children: " " });
19596
+ return badge ? /* @__PURE__ */ jsx26(Text21, { color: !highlighted && badge.dim ? PALETTE.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx26(Text21, { children: " " });
19552
19597
  }
19553
19598
 
19554
19599
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
19555
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
19600
+ import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
19556
19601
  var GLYPH_EXPAND_COLLAPSED = "\u25B8";
19557
19602
  var GLYPH_EXPAND_EXPANDED = "\u25BE";
19558
19603
  var GLYPH_TREE_MID = "\u251C\u2500";
@@ -20008,11 +20053,11 @@ function GroupedSidebar(props) {
20008
20053
  isOwn: rs?.isOwn ?? false,
20009
20054
  isCursor
20010
20055
  });
20011
- return /* @__PURE__ */ jsxs21(Box21, { children: [
20012
- isCursor ? /* @__PURE__ */ jsx25(Text22, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx25(Text22, { children: " " }),
20013
- /* @__PURE__ */ jsx25(PreviewBadge, { badge, highlighted: isSelected }),
20014
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx25(Text22, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx25(Text22, { children: " " })),
20015
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx25(Text22, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx25(Text22, { children: " " })),
20056
+ return /* @__PURE__ */ jsxs21(Box20, { children: [
20057
+ isCursor ? /* @__PURE__ */ jsx27(Text22, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx27(Text22, { children: " " }),
20058
+ /* @__PURE__ */ jsx27(PreviewBadge, { badge, highlighted: isSelected }),
20059
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx27(Text22, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx27(Text22, { children: " " })),
20060
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx27(Text22, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx27(Text22, { children: " " })),
20016
20061
  /* @__PURE__ */ jsxs21(
20017
20062
  Text22,
20018
20063
  {
@@ -20027,16 +20072,16 @@ function GroupedSidebar(props) {
20027
20072
  ]
20028
20073
  }
20029
20074
  ),
20030
- inheritanceStyle.glyph && /* @__PURE__ */ jsx25(Text22, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
20075
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx27(Text22, { color: inheritanceStyle.dim ? PALETTE.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
20031
20076
  ] }, row.key);
20032
20077
  }),
20033
- windowed && /* @__PURE__ */ jsx25(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
20078
+ windowed && /* @__PURE__ */ jsx27(WindowFooter, { above: start, below: Math.max(0, allRows.length - end) })
20034
20079
  ] });
20035
20080
  }
20036
20081
 
20037
20082
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
20038
20083
  import React11 from "react";
20039
- import { Box as Box22, Text as Text23 } from "ink";
20084
+ import { Box as Box21, Text as Text23 } from "ink";
20040
20085
 
20041
20086
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
20042
20087
  import { useLayoutEffect, useRef as useRef5 } from "react";
@@ -20135,7 +20180,7 @@ function useTerminalSize() {
20135
20180
  }
20136
20181
 
20137
20182
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
20138
- import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
20183
+ import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
20139
20184
  function HelpOverlay(props) {
20140
20185
  const { onClose } = props;
20141
20186
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -20147,7 +20192,7 @@ function HelpOverlay(props) {
20147
20192
  }, props.handleInput !== false);
20148
20193
  if (props.sections) {
20149
20194
  return /* @__PURE__ */ jsxs22(
20150
- Box22,
20195
+ Box21,
20151
20196
  {
20152
20197
  flexDirection: "column",
20153
20198
  borderStyle: "round",
@@ -20156,11 +20201,11 @@ function HelpOverlay(props) {
20156
20201
  height: panelHeight,
20157
20202
  overflowY: "hidden",
20158
20203
  children: [
20159
- /* @__PURE__ */ jsx26(Text23, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20204
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20160
20205
  props.sections.map((section) => /* @__PURE__ */ jsxs22(React11.Fragment, { children: [
20161
- /* @__PURE__ */ jsx26(Text23, { children: " " }),
20162
- /* @__PURE__ */ jsx26(Text23, { bold: true, children: section.title }),
20163
- section.entries.map((entry) => /* @__PURE__ */ jsx26(Text23, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
20206
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
20207
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: section.title }),
20208
+ section.entries.map((entry) => /* @__PURE__ */ jsx28(Text23, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
20164
20209
  ] }, section.title))
20165
20210
  ]
20166
20211
  }
@@ -20168,7 +20213,7 @@ function HelpOverlay(props) {
20168
20213
  }
20169
20214
  const mode = props.mode;
20170
20215
  return /* @__PURE__ */ jsxs22(
20171
- Box22,
20216
+ Box21,
20172
20217
  {
20173
20218
  flexDirection: "column",
20174
20219
  borderStyle: "round",
@@ -20177,38 +20222,38 @@ function HelpOverlay(props) {
20177
20222
  height: panelHeight,
20178
20223
  overflowY: "hidden",
20179
20224
  children: [
20180
- /* @__PURE__ */ jsx26(Text23, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20181
- /* @__PURE__ */ jsx26(Text23, { children: " " }),
20182
- /* @__PURE__ */ jsx26(Text23, { bold: true, children: "Navigation" }),
20183
- /* @__PURE__ */ jsx26(Text23, { children: " \u2191 / k / PgUp Scroll up" }),
20184
- /* @__PURE__ */ jsx26(Text23, { children: " \u2193 / j / PgDn Scroll down" }),
20185
- /* @__PURE__ */ jsx26(Text23, { children: " g / Home Jump to top" }),
20186
- /* @__PURE__ */ jsx26(Text23, { children: " G / End Jump to bottom" }),
20187
- mode === "review" && /* @__PURE__ */ jsxs22(Fragment3, { children: [
20188
- /* @__PURE__ */ jsx26(Text23, { children: " " }),
20189
- /* @__PURE__ */ jsx26(Text23, { bold: true, children: "[Review mode only]" }),
20190
- /* @__PURE__ */ jsx26(Text23, { children: " Tab Toggle sidebar/detail" }),
20191
- /* @__PURE__ */ jsx26(Text23, { children: " a Accept component" }),
20192
- /* @__PURE__ */ jsx26(Text23, { children: " r Reject component" }),
20193
- /* @__PURE__ */ jsx26(Text23, { children: " e Edit proposal" }),
20194
- /* @__PURE__ */ jsx26(Text23, { children: " s Toggle source code" }),
20195
- /* @__PURE__ */ jsx26(Text23, { children: " A Approve all" }),
20196
- /* @__PURE__ */ jsx26(Text23, { children: " F Open finalize dialog" }),
20197
- /* @__PURE__ */ jsx26(Text23, { children: " Ctrl+S Save draft" }),
20198
- /* @__PURE__ */ jsx26(Text23, { children: " Ctrl+Z Undo" }),
20199
- /* @__PURE__ */ jsx26(Text23, { children: " Ctrl+Y Redo" }),
20200
- /* @__PURE__ */ jsx26(Text23, { children: " Esc Exit edit / close" })
20225
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
20226
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
20227
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Navigation" }),
20228
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2191 / k / PgUp Scroll up" }),
20229
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2193 / j / PgDn Scroll down" }),
20230
+ /* @__PURE__ */ jsx28(Text23, { children: " g / Home Jump to top" }),
20231
+ /* @__PURE__ */ jsx28(Text23, { children: " G / End Jump to bottom" }),
20232
+ mode === "review" && /* @__PURE__ */ jsxs22(Fragment5, { children: [
20233
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
20234
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "[Review mode only]" }),
20235
+ /* @__PURE__ */ jsx28(Text23, { children: " Tab Toggle sidebar/detail" }),
20236
+ /* @__PURE__ */ jsx28(Text23, { children: " a Accept component" }),
20237
+ /* @__PURE__ */ jsx28(Text23, { children: " r Reject component" }),
20238
+ /* @__PURE__ */ jsx28(Text23, { children: " e Edit proposal" }),
20239
+ /* @__PURE__ */ jsx28(Text23, { children: " s Toggle source code" }),
20240
+ /* @__PURE__ */ jsx28(Text23, { children: " A Approve all" }),
20241
+ /* @__PURE__ */ jsx28(Text23, { children: " F Open finalize dialog" }),
20242
+ /* @__PURE__ */ jsx28(Text23, { children: " Ctrl+S Save draft" }),
20243
+ /* @__PURE__ */ jsx28(Text23, { children: " Ctrl+Z Undo" }),
20244
+ /* @__PURE__ */ jsx28(Text23, { children: " Ctrl+Y Redo" }),
20245
+ /* @__PURE__ */ jsx28(Text23, { children: " Esc Exit edit / close" })
20201
20246
  ] }),
20202
- /* @__PURE__ */ jsx26(Text23, { children: " " }),
20203
- /* @__PURE__ */ jsx26(Text23, { children: " h Close help" }),
20204
- /* @__PURE__ */ jsx26(Text23, { children: " q Quit" })
20247
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
20248
+ /* @__PURE__ */ jsx28(Text23, { children: " h Close help" }),
20249
+ /* @__PURE__ */ jsx28(Text23, { children: " q Quit" })
20205
20250
  ]
20206
20251
  }
20207
20252
  );
20208
20253
  }
20209
20254
 
20210
20255
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
20211
- import { Box as Box23, Text as Text24 } from "ink";
20256
+ import { Box as Box22, Text as Text24 } from "ink";
20212
20257
 
20213
20258
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/autocomplete.ts
20214
20259
  function longestCommonPrefix(names) {
@@ -20265,7 +20310,7 @@ function formatSearchMatchSummary(matches, total) {
20265
20310
  }
20266
20311
 
20267
20312
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
20268
- import { Fragment as Fragment4, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
20313
+ import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
20269
20314
  function SearchMatchSummary({
20270
20315
  open,
20271
20316
  query,
@@ -20276,17 +20321,17 @@ function SearchMatchSummary({
20276
20321
  marginTop
20277
20322
  }) {
20278
20323
  if (hidden) return null;
20279
- return /* @__PURE__ */ jsxs23(Fragment4, { children: [
20280
- open && /* @__PURE__ */ jsxs23(Box23, { marginTop, flexDirection: "column", children: [
20324
+ return /* @__PURE__ */ jsxs23(Fragment6, { children: [
20325
+ open && /* @__PURE__ */ jsxs23(Box22, { marginTop, flexDirection: "column", children: [
20281
20326
  /* @__PURE__ */ jsxs23(Text24, { children: [
20282
20327
  `/${query}`,
20283
- /* @__PURE__ */ jsx27(Text24, { color: PALETTE.accent, children: "\u258E" }),
20284
- query && /* @__PURE__ */ jsx27(Text24, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
20285
- /* @__PURE__ */ jsx27(Text24, { children: " \xB7 [Esc] leave" })
20328
+ /* @__PURE__ */ jsx29(Text24, { color: PALETTE.accent, children: "\u258E" }),
20329
+ query && /* @__PURE__ */ jsx29(Text24, { color: PALETTE.muted, children: formatSearchMatchSummary(matches, total) }),
20330
+ /* @__PURE__ */ jsx29(Text24, { children: " \xB7 [Esc] leave" })
20286
20331
  ] }),
20287
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx27(Text24, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
20332
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx29(Text24, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
20288
20333
  ] }),
20289
- !open && query && /* @__PURE__ */ jsx27(Box23, { marginTop, children: /* @__PURE__ */ jsx27(Text24, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
20334
+ !open && query && /* @__PURE__ */ jsx29(Box22, { marginTop, children: /* @__PURE__ */ jsx29(Text24, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
20290
20335
  ] });
20291
20336
  }
20292
20337
 
@@ -21424,7 +21469,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
21424
21469
  }
21425
21470
 
21426
21471
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
21427
- import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
21472
+ import { Fragment as Fragment7, jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
21428
21473
  var HELP_SECTIONS = [
21429
21474
  {
21430
21475
  title: "Navigation",
@@ -21464,29 +21509,29 @@ var HELP_SECTIONS = [
21464
21509
  ];
21465
21510
  function ScopeGateScreen(props) {
21466
21511
  if (props.components.length === 0) {
21467
- return /* @__PURE__ */ jsx28(Box24, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx28(Text25, { color: PALETTE.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
21512
+ return /* @__PURE__ */ jsx30(Box23, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx30(Text25, { color: PALETTE.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
21468
21513
  }
21469
- return /* @__PURE__ */ jsx28(ScopeGateView, { ...props });
21514
+ return /* @__PURE__ */ jsx30(ScopeGateView, { ...props });
21470
21515
  }
21471
21516
  function ScopeGateView({ components, onConfirm, onQuit }) {
21472
21517
  const gate = useScopeGate({ components, onConfirm, onQuit });
21473
21518
  const { search, graph, columnPlan, panelLayout, counters } = gate;
21474
21519
  if (gate.showHelp) {
21475
- return /* @__PURE__ */ jsx28(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
21520
+ return /* @__PURE__ */ jsx30(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
21476
21521
  }
21477
- return /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", children: [
21478
- /* @__PURE__ */ jsx28(StepHeader, { step: "scope-gate" }),
21479
- /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", paddingX: 2, children: [
21480
- /* @__PURE__ */ jsxs24(Box24, { flexDirection: "row", flexWrap: "wrap", children: [
21481
- /* @__PURE__ */ jsx28(CounterStrip, { counters, totalWidth: gate.totalWidth }),
21522
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", children: [
21523
+ /* @__PURE__ */ jsx30(StepHeader, { step: "scope-gate" }),
21524
+ /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", paddingX: 2, children: [
21525
+ /* @__PURE__ */ jsxs24(Box23, { flexDirection: "row", flexWrap: "wrap", children: [
21526
+ /* @__PURE__ */ jsx30(CounterStrip, { counters, totalWidth: gate.totalWidth }),
21482
21527
  gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs24(Text25, { color: PALETTE.muted, children: [
21483
21528
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
21484
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
21529
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx30(Text25, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
21485
21530
  ] })
21486
21531
  ] }),
21487
- graph.cycles.length > 0 && /* @__PURE__ */ jsx28(Box24, { marginTop: 1, children: /* @__PURE__ */ jsx28(Text25, { 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." }) }),
21488
- /* @__PURE__ */ jsxs24(Box24, { flexDirection: "row", alignItems: "stretch", children: [
21489
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx28(
21532
+ graph.cycles.length > 0 && /* @__PURE__ */ jsx30(Box23, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text25, { 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." }) }),
21533
+ /* @__PURE__ */ jsxs24(Box23, { flexDirection: "row", alignItems: "stretch", children: [
21534
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx30(
21490
21535
  GotoBanner,
21491
21536
  {
21492
21537
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -21496,7 +21541,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
21496
21541
  width: columnPlan.main,
21497
21542
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
21498
21543
  }
21499
- ) : /* @__PURE__ */ jsx28(
21544
+ ) : /* @__PURE__ */ jsx30(
21500
21545
  GroupedSidebar,
21501
21546
  {
21502
21547
  items: gate.groupedItems,
@@ -21524,9 +21569,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
21524
21569
  graph: graph.nodes
21525
21570
  }
21526
21571
  ),
21527
- columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs24(Fragment5, { children: [
21528
- /* @__PURE__ */ jsx28(Box24, { width: 2, flexShrink: 0 }),
21529
- /* @__PURE__ */ jsx28(
21572
+ columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs24(Fragment7, { children: [
21573
+ /* @__PURE__ */ jsx30(Box23, { width: 2, flexShrink: 0 }),
21574
+ /* @__PURE__ */ jsx30(
21530
21575
  AddedColumn,
21531
21576
  {
21532
21577
  width: columnPlan.added,
@@ -21541,9 +21586,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
21541
21586
  )
21542
21587
  ] })
21543
21588
  ] }),
21544
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx28(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
21545
- gate.pendingRejectCascade && /* @__PURE__ */ jsx28(RejectPrompt, { pending: gate.pendingRejectCascade }),
21546
- /* @__PURE__ */ jsx28(
21589
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx30(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
21590
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx30(RejectPrompt, { pending: gate.pendingRejectCascade }),
21591
+ /* @__PURE__ */ jsx30(
21547
21592
  SearchMatchSummary,
21548
21593
  {
21549
21594
  open: search.searchOpen,
@@ -21554,7 +21599,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
21554
21599
  marginTop: 1
21555
21600
  }
21556
21601
  ),
21557
- /* @__PURE__ */ jsx28(
21602
+ /* @__PURE__ */ jsx30(
21558
21603
  CompactControlBar,
21559
21604
  {
21560
21605
  hasGroupRoots: gate.hasGroupRoots,
@@ -21664,14 +21709,14 @@ function progressRows2(progress, agent) {
21664
21709
  }
21665
21710
 
21666
21711
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
21667
- import { jsx as jsx29 } from "react/jsx-runtime";
21712
+ import { jsx as jsx31 } from "react/jsx-runtime";
21668
21713
  function GenerationScreen({
21669
21714
  progress,
21670
21715
  agent,
21671
21716
  acceptedCount,
21672
21717
  hasTokens
21673
21718
  }) {
21674
- return /* @__PURE__ */ jsx29(
21719
+ return /* @__PURE__ */ jsx31(
21675
21720
  RunningStep,
21676
21721
  {
21677
21722
  step: "generation",
@@ -21895,7 +21940,7 @@ function buildFlowStart(input) {
21895
21940
  }
21896
21941
 
21897
21942
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
21898
- import { Box as Box44 } from "ink";
21943
+ import { Box as Box43 } from "ink";
21899
21944
 
21900
21945
  // packages/experience-design-system-types/dist/src/cdf/validate.js
21901
21946
  import { Ajv as Ajv2 } from "ajv";
@@ -22215,7 +22260,7 @@ function skipLabel(matchedNames) {
22215
22260
  }
22216
22261
 
22217
22262
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
22218
- import { jsx as jsx30 } from "react/jsx-runtime";
22263
+ import { jsx as jsx32 } from "react/jsx-runtime";
22219
22264
  function PreviewValidationErrorScreen({
22220
22265
  errors,
22221
22266
  missingNames,
@@ -22224,7 +22269,7 @@ function PreviewValidationErrorScreen({
22224
22269
  onQuit
22225
22270
  }) {
22226
22271
  const matchedNames = matchedComponentNames(errors, missingNames);
22227
- return /* @__PURE__ */ jsx30(
22272
+ return /* @__PURE__ */ jsx32(
22228
22273
  GateStep,
22229
22274
  {
22230
22275
  intent: "error",
@@ -22260,7 +22305,7 @@ function getReviewJsonPanelValue(selected, showHiddenProps) {
22260
22305
  }
22261
22306
 
22262
22307
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
22263
- import { Box as Box37, Text as Text39 } from "ink";
22308
+ import { Box as Box36, Text as Text39 } from "ink";
22264
22309
 
22265
22310
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/graph/cycle-view.ts
22266
22311
  function computeCycleView(components) {
@@ -22499,12 +22544,12 @@ function enumerateCycleBreaks(cycle, components) {
22499
22544
  }
22500
22545
 
22501
22546
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
22502
- import { Box as Box31, Text as Text33 } from "ink";
22547
+ import { Box as Box30, Text as Text33 } from "ink";
22503
22548
 
22504
22549
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
22505
22550
  import React12, { useEffect as useEffect11, useLayoutEffect as useLayoutEffect2, useState as useState18 } from "react";
22506
22551
  import figures6 from "figures";
22507
- import { Box as Box25, measureElement, Text as Text26 } from "ink";
22552
+ import { Box as Box24, measureElement, Text as Text26 } from "ink";
22508
22553
 
22509
22554
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/scroll-offset.ts
22510
22555
  function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
@@ -22535,7 +22580,7 @@ function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
22535
22580
  }
22536
22581
 
22537
22582
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
22538
- import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
22583
+ import { Fragment as Fragment8, jsx as jsx33, jsxs as jsxs25 } from "react/jsx-runtime";
22539
22584
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
22540
22585
  return {
22541
22586
  selected,
@@ -22673,14 +22718,14 @@ function serializeState(state2, originalJson) {
22673
22718
  return JSON.stringify(entry, null, 2);
22674
22719
  }
22675
22720
  function Picker({ value, active }) {
22676
- return /* @__PURE__ */ jsxs25(Box25, { children: [
22677
- active && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u2039" }),
22678
- /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
22679
- active && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u203A" })
22721
+ return /* @__PURE__ */ jsxs25(Box24, { children: [
22722
+ active && /* @__PURE__ */ jsx33(Text26, { color: PALETTE.warning, children: "\u2039" }),
22723
+ /* @__PURE__ */ jsx33(Text26, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
22724
+ active && /* @__PURE__ */ jsx33(Text26, { color: PALETTE.warning, children: "\u203A" })
22680
22725
  ] });
22681
22726
  }
22682
22727
  function Toggle({ value, active }) {
22683
- return /* @__PURE__ */ jsx31(Box25, { children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
22728
+ return /* @__PURE__ */ jsx33(Box24, { children: /* @__PURE__ */ jsx33(Text26, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
22684
22729
  }
22685
22730
  function InlinePropField({
22686
22731
  label,
@@ -22689,7 +22734,7 @@ function InlinePropField({
22689
22734
  flexible = false,
22690
22735
  width
22691
22736
  }) {
22692
- return /* @__PURE__ */ jsxs25(Box25, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
22737
+ return /* @__PURE__ */ jsxs25(Box24, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
22693
22738
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
22694
22739
  focused ? "\u203A " : " ",
22695
22740
  label
@@ -22703,19 +22748,19 @@ function RequiredField({
22703
22748
  editingField,
22704
22749
  activeField
22705
22750
  }) {
22706
- return /* @__PURE__ */ jsx31(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx31(Toggle, { value, active: editingField && activeField === "required" }) });
22751
+ return /* @__PURE__ */ jsx33(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx33(Toggle, { value, active: editingField && activeField === "required" }) });
22707
22752
  }
22708
22753
  function DefaultValueRow({
22709
22754
  display,
22710
22755
  active,
22711
22756
  focused
22712
22757
  }) {
22713
- return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
22758
+ return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
22714
22759
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22715
22760
  focused ? "\u203A " : " ",
22716
22761
  "default:"
22717
22762
  ] }),
22718
- active ? /* @__PURE__ */ jsx31(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx31(Text26, { wrap: "wrap", children: display })
22763
+ active ? /* @__PURE__ */ jsx33(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx33(Text26, { wrap: "wrap", children: display })
22719
22764
  ] });
22720
22765
  }
22721
22766
  function RowLabel({
@@ -22743,10 +22788,10 @@ function ValueInputRow({
22743
22788
  valueText,
22744
22789
  cursorVisible
22745
22790
  }) {
22746
- return /* @__PURE__ */ jsxs25(Box25, { paddingLeft: 2, children: [
22747
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
22748
- /* @__PURE__ */ jsx31(Text26, { children: valueText }),
22749
- /* @__PURE__ */ jsx31(Text26, { inverse: cursorVisible, children: " " })
22791
+ return /* @__PURE__ */ jsxs25(Box24, { paddingLeft: 2, children: [
22792
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
22793
+ /* @__PURE__ */ jsx33(Text26, { children: valueText }),
22794
+ /* @__PURE__ */ jsx33(Text26, { inverse: cursorVisible, children: " " })
22750
22795
  ] });
22751
22796
  }
22752
22797
  function EditableListItem({
@@ -22759,9 +22804,9 @@ function EditableListItem({
22759
22804
  }) {
22760
22805
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
22761
22806
  if (isBeingEdited) {
22762
- return /* @__PURE__ */ jsx31(ValueInputRow, { mode: "edit", valueText, cursorVisible });
22807
+ return /* @__PURE__ */ jsx33(ValueInputRow, { mode: "edit", valueText, cursorVisible });
22763
22808
  }
22764
- return /* @__PURE__ */ jsx31(Box25, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
22809
+ return /* @__PURE__ */ jsx33(Box24, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text26, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
22765
22810
  }
22766
22811
  function EditableValueList({
22767
22812
  values,
@@ -22774,9 +22819,9 @@ function EditableValueList({
22774
22819
  emptyPaddingLeft,
22775
22820
  showAddInput
22776
22821
  }) {
22777
- return /* @__PURE__ */ jsxs25(Fragment6, { children: [
22778
- values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx31(Box25, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: emptyMessage }) })),
22779
- values.map((value, index) => /* @__PURE__ */ jsx31(
22822
+ return /* @__PURE__ */ jsxs25(Fragment8, { children: [
22823
+ values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx33(Box24, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: emptyMessage }) })),
22824
+ values.map((value, index) => /* @__PURE__ */ jsx33(
22780
22825
  EditableListItem,
22781
22826
  {
22782
22827
  value,
@@ -22788,7 +22833,7 @@ function EditableValueList({
22788
22833
  },
22789
22834
  index
22790
22835
  )),
22791
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx31(ValueInputRow, { mode: "add", valueText, cursorVisible })
22836
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx33(ValueInputRow, { mode: "add", valueText, cursorVisible })
22792
22837
  ] });
22793
22838
  }
22794
22839
  function DefaultSubRow({
@@ -22800,51 +22845,51 @@ function DefaultSubRow({
22800
22845
  }) {
22801
22846
  const cursor = cursorVisible ? "\u2588" : " ";
22802
22847
  if (prop.type === "richtext" || prop.type === "media" || prop.type === "link") {
22803
- return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
22848
+ return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22804
22849
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22805
22850
  focused ? "\u203A " : " ",
22806
22851
  "default:"
22807
22852
  ] }),
22808
- /* @__PURE__ */ jsx31(Text26, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
22853
+ /* @__PURE__ */ jsx33(Text26, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
22809
22854
  ] });
22810
22855
  }
22811
22856
  if (prop.type === "boolean") {
22812
22857
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
22813
- return /* @__PURE__ */ jsx31(DefaultValueRow, { display, active, focused });
22858
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
22814
22859
  }
22815
22860
  if (prop.type === "enum") {
22816
22861
  if (prop.values.length === 0) {
22817
- return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
22862
+ return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22818
22863
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22819
22864
  focused ? "\u203A " : " ",
22820
22865
  "default:"
22821
22866
  ] }),
22822
- /* @__PURE__ */ jsx31(Text26, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
22867
+ /* @__PURE__ */ jsx33(Text26, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
22823
22868
  ] });
22824
22869
  }
22825
22870
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
22826
- return /* @__PURE__ */ jsx31(DefaultValueRow, { display, active, focused });
22871
+ return /* @__PURE__ */ jsx33(DefaultValueRow, { display, active, focused });
22827
22872
  }
22828
22873
  const value = typeof prop.default === "string" ? prop.default : "";
22829
22874
  if (active) {
22830
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", flexShrink: 0, children: [
22875
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "row", flexShrink: 0, children: [
22831
22876
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22832
22877
  focused ? "\u203A " : " ",
22833
22878
  "default:"
22834
22879
  ] }),
22835
- /* @__PURE__ */ jsxs25(Box25, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
22836
- /* @__PURE__ */ jsx31(Text26, { children: value.slice(0, textCursor) }),
22837
- /* @__PURE__ */ jsx31(Text26, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
22838
- /* @__PURE__ */ jsx31(Text26, { children: value.slice(textCursor + 1) })
22880
+ /* @__PURE__ */ jsxs25(Box24, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
22881
+ /* @__PURE__ */ jsx33(Text26, { children: value.slice(0, textCursor) }),
22882
+ /* @__PURE__ */ jsx33(Text26, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
22883
+ /* @__PURE__ */ jsx33(Text26, { children: value.slice(textCursor + 1) })
22839
22884
  ] })
22840
22885
  ] });
22841
22886
  }
22842
- return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
22887
+ return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22843
22888
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22844
22889
  focused ? "\u203A " : " ",
22845
22890
  "default:"
22846
22891
  ] }),
22847
- /* @__PURE__ */ jsx31(Text26, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
22892
+ /* @__PURE__ */ jsx33(Text26, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
22848
22893
  ] });
22849
22894
  }
22850
22895
  function DescriptionField({
@@ -22859,20 +22904,20 @@ function DescriptionField({
22859
22904
  paddingLeft = 2
22860
22905
  }) {
22861
22906
  if (compact) {
22862
- return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22907
+ return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22863
22908
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22864
22909
  focused ? "\u203A " : " ",
22865
22910
  label
22866
22911
  ] }),
22867
- /* @__PURE__ */ jsx31(Text26, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
22912
+ /* @__PURE__ */ jsx33(Text26, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
22868
22913
  ] });
22869
22914
  }
22870
- return /* @__PURE__ */ jsxs25(Box25, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
22915
+ return /* @__PURE__ */ jsxs25(Box24, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
22871
22916
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
22872
22917
  focused ? "\u203A " : " ",
22873
22918
  label
22874
22919
  ] }),
22875
- editing ? /* @__PURE__ */ jsx31(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx31(Text26, { wrap: "wrap", children: value || "\u2014" })
22920
+ editing ? /* @__PURE__ */ jsx33(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx33(Text26, { wrap: "wrap", children: value || "\u2014" })
22876
22921
  ] });
22877
22922
  }
22878
22923
  function EditableDescription({
@@ -22882,7 +22927,7 @@ function EditableDescription({
22882
22927
  }) {
22883
22928
  return /* @__PURE__ */ jsxs25(Text26, { wrap: "wrap", children: [
22884
22929
  value.slice(0, textCursor),
22885
- /* @__PURE__ */ jsx31(Text26, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
22930
+ /* @__PURE__ */ jsx33(Text26, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
22886
22931
  value.slice(textCursor + 1)
22887
22932
  ] });
22888
22933
  }
@@ -22903,9 +22948,9 @@ function PropRow({
22903
22948
  }) {
22904
22949
  const descFocused = activeField === "description";
22905
22950
  const descActive = editingField && descFocused;
22906
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
22907
- /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: prop.name, selected }) }),
22908
- /* @__PURE__ */ jsx31(
22951
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
22952
+ /* @__PURE__ */ jsx33(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: prop.name, selected }) }),
22953
+ /* @__PURE__ */ jsx33(
22909
22954
  DescriptionField,
22910
22955
  {
22911
22956
  value: prop.description,
@@ -22918,8 +22963,8 @@ function PropRow({
22918
22963
  paddingLeft: 0
22919
22964
  }
22920
22965
  ),
22921
- /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
22922
- /* @__PURE__ */ jsx31(
22966
+ /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
22967
+ /* @__PURE__ */ jsx33(
22923
22968
  RequiredField,
22924
22969
  {
22925
22970
  value: prop.required,
@@ -22928,10 +22973,10 @@ function PropRow({
22928
22973
  activeField
22929
22974
  }
22930
22975
  ),
22931
- /* @__PURE__ */ jsx31(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx31(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx31(Text26, { children: prop.type }) })
22976
+ /* @__PURE__ */ jsx33(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx33(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx33(Text26, { children: prop.type }) })
22932
22977
  ] }),
22933
- prop.type === "token" && /* @__PURE__ */ jsx31(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx31(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx31(Text26, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
22934
- prop.type === "enum" && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22978
+ 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(Text26, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
22979
+ prop.type === "enum" && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22935
22980
  /* @__PURE__ */ jsxs25(Text26, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
22936
22981
  activeField === "values" ? "\u203A " : " ",
22937
22982
  "values:"
@@ -22942,7 +22987,7 @@ function PropRow({
22942
22987
  "]"
22943
22988
  ] })
22944
22989
  ] }),
22945
- /* @__PURE__ */ jsx31(
22990
+ /* @__PURE__ */ jsx33(
22946
22991
  DefaultSubRow,
22947
22992
  {
22948
22993
  prop,
@@ -22952,12 +22997,12 @@ function PropRow({
22952
22997
  cursorVisible
22953
22998
  }
22954
22999
  ),
22955
- prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23000
+ prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22956
23001
  /* @__PURE__ */ jsxs25(Text26, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
22957
23002
  activeField === "allowed" ? "\u203A " : " ",
22958
23003
  "allowed:"
22959
23004
  ] }),
22960
- editingField && activeField === "allowed" ? /* @__PURE__ */ jsx31(Box25, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx31(Text26, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx31(
23005
+ editingField && activeField === "allowed" ? /* @__PURE__ */ jsx33(Box24, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx33(Text26, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx33(
22961
23006
  Text26,
22962
23007
  {
22963
23008
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
@@ -22966,17 +23011,17 @@ function PropRow({
22966
23011
  }
22967
23012
  )
22968
23013
  ] }),
22969
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx31(Box25, { paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: (() => {
23014
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx33(Box24, { paddingLeft: 2, children: /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: (() => {
22970
23015
  const max = Math.max(8, width - 8);
22971
23016
  const text = `~ ${rationale}`;
22972
23017
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
22973
23018
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
22974
- selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs25(Box25, { paddingLeft: 2, flexDirection: "column", children: [
22975
- /* @__PURE__ */ jsxs25(Box25, { children: [
22976
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "values:" }),
22977
- activeField === "values" && /* @__PURE__ */ jsx31(Text26, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
23019
+ selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs25(Box24, { paddingLeft: 2, flexDirection: "column", children: [
23020
+ /* @__PURE__ */ jsxs25(Box24, { children: [
23021
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "values:" }),
23022
+ activeField === "values" && /* @__PURE__ */ jsx33(Text26, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
22978
23023
  ] }),
22979
- /* @__PURE__ */ jsx31(
23024
+ /* @__PURE__ */ jsx33(
22980
23025
  EditableValueList,
22981
23026
  {
22982
23027
  values: prop.values,
@@ -23006,9 +23051,9 @@ function SlotRow({
23006
23051
  pickerCandidates,
23007
23052
  pickerCursor
23008
23053
  }) {
23009
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
23010
- /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: slot.name, selected, trailing: false }) }),
23011
- /* @__PURE__ */ jsx31(
23054
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
23055
+ /* @__PURE__ */ jsx33(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(RowLabel, { name: slot.name, selected, trailing: false }) }),
23056
+ /* @__PURE__ */ jsx33(
23012
23057
  DescriptionField,
23013
23058
  {
23014
23059
  value: slot.description,
@@ -23021,7 +23066,7 @@ function SlotRow({
23021
23066
  paddingLeft: 0
23022
23067
  }
23023
23068
  ),
23024
- /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(
23069
+ /* @__PURE__ */ jsx33(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx33(
23025
23070
  RequiredField,
23026
23071
  {
23027
23072
  value: slot.required,
@@ -23030,7 +23075,7 @@ function SlotRow({
23030
23075
  activeField
23031
23076
  }
23032
23077
  ) }),
23033
- !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23078
+ !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
23034
23079
  /* @__PURE__ */ jsxs25(
23035
23080
  Text26,
23036
23081
  {
@@ -23042,10 +23087,10 @@ function SlotRow({
23042
23087
  ]
23043
23088
  }
23044
23089
  ),
23045
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx31(Text26, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
23090
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx33(Text26, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
23046
23091
  ] }),
23047
- selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
23048
- /* @__PURE__ */ jsxs25(Box25, { children: [
23092
+ selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", children: [
23093
+ /* @__PURE__ */ jsxs25(Box24, { children: [
23049
23094
  /* @__PURE__ */ jsxs25(
23050
23095
  Text26,
23051
23096
  {
@@ -23057,9 +23102,9 @@ function SlotRow({
23057
23102
  ]
23058
23103
  }
23059
23104
  ),
23060
- editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx31(Text26, { 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" })
23105
+ editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx33(Text26, { 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" })
23061
23106
  ] }),
23062
- /* @__PURE__ */ jsx31(
23107
+ /* @__PURE__ */ jsx33(
23063
23108
  EditableValueList,
23064
23109
  {
23065
23110
  values: slot.allowedComponents,
@@ -23073,21 +23118,21 @@ function SlotRow({
23073
23118
  showAddInput: editingField && activeField === "allowedComponents"
23074
23119
  }
23075
23120
  ),
23076
- editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx31(Box25, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
23121
+ editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx33(Box24, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
23077
23122
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
23078
23123
  if (filtered.length === 0) {
23079
- return /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
23124
+ return /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
23080
23125
  }
23081
23126
  const cursor = pickerCursor % filtered.length;
23082
23127
  const MAX_VISIBLE = 5;
23083
23128
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
23084
23129
  const slice = filtered.slice(start, start + MAX_VISIBLE);
23085
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
23086
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
23130
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", children: [
23131
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
23087
23132
  slice.map((name, i) => {
23088
23133
  const absIdx = start + i;
23089
23134
  const isCursor = absIdx === cursor;
23090
- return /* @__PURE__ */ jsx31(Text26, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
23135
+ return /* @__PURE__ */ jsx33(Text26, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures6.pointer} ${name}` : ` ${name}` }, name);
23091
23136
  })
23092
23137
  ] });
23093
23138
  })() })
@@ -23916,18 +23961,18 @@ function FieldEditor({
23916
23961
  });
23917
23962
  const innerWidth = Math.max(1, width - 2);
23918
23963
  if (parseErr) {
23919
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
23920
- /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
23921
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.error, children: parseErr }),
23922
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
23964
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
23965
+ /* @__PURE__ */ jsx33(Text26, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
23966
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.error, children: parseErr }),
23967
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
23923
23968
  ] });
23924
23969
  }
23925
23970
  if (props.length === 0 && slots.length === 0) {
23926
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
23927
- /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
23928
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
23929
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
23930
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
23971
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
23972
+ /* @__PURE__ */ jsx33(Text26, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
23973
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
23974
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
23975
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
23931
23976
  ] });
23932
23977
  }
23933
23978
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -24056,12 +24101,12 @@ function FieldEditor({
24056
24101
  const renderRow = (row, index) => {
24057
24102
  const key = rowKey(row, index);
24058
24103
  if (row.kind === "header") {
24059
- return /* @__PURE__ */ jsx31(Box25, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.success, children: row.label }) }, key);
24104
+ return /* @__PURE__ */ jsx33(Box24, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx33(Text26, { bold: true, color: PALETTE.success, children: row.label }) }, key);
24060
24105
  }
24061
24106
  if (row.kind === "component-description") {
24062
24107
  const isSelected2 = inComponentDesc && active;
24063
24108
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
24064
- return /* @__PURE__ */ jsx31(
24109
+ return /* @__PURE__ */ jsx33(
24065
24110
  DescriptionField,
24066
24111
  {
24067
24112
  value: editorState.componentDescription,
@@ -24092,7 +24137,7 @@ function FieldEditor({
24092
24137
  valueText,
24093
24138
  innerWidth
24094
24139
  );
24095
- return /* @__PURE__ */ jsx31(
24140
+ return /* @__PURE__ */ jsx33(
24096
24141
  PropRow,
24097
24142
  {
24098
24143
  prop: p,
@@ -24119,7 +24164,7 @@ function FieldEditor({
24119
24164
  valueText,
24120
24165
  innerWidth
24121
24166
  );
24122
- return /* @__PURE__ */ jsx31(
24167
+ return /* @__PURE__ */ jsx33(
24123
24168
  SlotRow,
24124
24169
  {
24125
24170
  slot: s,
@@ -24140,9 +24185,9 @@ function FieldEditor({
24140
24185
  borderStyle: "single",
24141
24186
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
24142
24187
  children: [
24143
- hasEmptyProperties && /* @__PURE__ */ jsx31(Text26, { 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." }),
24188
+ hasEmptyProperties && /* @__PURE__ */ jsx33(Text26, { 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." }),
24144
24189
  header,
24145
- /* @__PURE__ */ jsx31(Box25, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx31(
24190
+ /* @__PURE__ */ jsx33(Box24, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx33(
24146
24191
  PropRow,
24147
24192
  {
24148
24193
  prop: currentProp,
@@ -24158,7 +24203,7 @@ function FieldEditor({
24158
24203
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
24159
24204
  showRationale: showInlineRationales
24160
24205
  }
24161
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx31(
24206
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx33(
24162
24207
  SlotRow,
24163
24208
  {
24164
24209
  slot: currentSlot,
@@ -24177,8 +24222,8 @@ function FieldEditor({
24177
24222
  ) : visibleRowSlice.map((row, index) => {
24178
24223
  const absoluteIndex = scrollStart + index;
24179
24224
  const key = rowKey(row, absoluteIndex);
24180
- return /* @__PURE__ */ jsx31(
24181
- Box25,
24225
+ return /* @__PURE__ */ jsx33(
24226
+ Box24,
24182
24227
  {
24183
24228
  ref: (node) => {
24184
24229
  if (node) rowMeasureRefs.current.set(key, node);
@@ -24191,7 +24236,7 @@ function FieldEditor({
24191
24236
  `visible-${key}`
24192
24237
  );
24193
24238
  }) }),
24194
- categoryBelow && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
24239
+ categoryBelow && /* @__PURE__ */ jsx33(Text26, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
24195
24240
  sourceOpen && !onToggleSourceExternal && (() => {
24196
24241
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
24197
24242
  const start = propMeta?.sourceStartLine ?? null;
@@ -24200,49 +24245,49 @@ function FieldEditor({
24200
24245
  const src = metadata?.componentSource ?? null;
24201
24246
  const headerPath = path5 ?? "<unknown source path>";
24202
24247
  if (!start || !end2 || !src) {
24203
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24204
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
24205
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
24206
- /* @__PURE__ */ jsx31(Text26, { children: "[s] close" })
24248
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24249
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
24250
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
24251
+ /* @__PURE__ */ jsx33(Text26, { children: "[s] close" })
24207
24252
  ] });
24208
24253
  }
24209
24254
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
24210
- return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24211
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
24212
- lines.map((ln, i) => /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
24213
- /* @__PURE__ */ jsx31(Text26, { children: "[s] close \xB7 [Esc] close" })
24255
+ return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
24256
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
24257
+ lines.map((ln, i) => /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
24258
+ /* @__PURE__ */ jsx33(Text26, { children: "[s] close \xB7 [Esc] close" })
24214
24259
  ] });
24215
24260
  })(),
24216
- showHelp && /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
24217
- /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
24218
- /* @__PURE__ */ jsx31(Text26, { children: " " }),
24219
- /* @__PURE__ */ jsx31(Text26, { bold: true, children: "Row navigation" }),
24220
- /* @__PURE__ */ jsx31(Text26, { children: " \u2191/\u2193 move between rows" }),
24221
- /* @__PURE__ */ jsx31(Text26, { children: " Enter edit fields on the current row" }),
24222
- /* @__PURE__ */ jsx31(Text26, { children: " Esc exit the panel" }),
24223
- /* @__PURE__ */ jsx31(Text26, { children: " " }),
24224
- /* @__PURE__ */ jsx31(Text26, { bold: true, children: "Field editing" }),
24225
- /* @__PURE__ */ jsx31(Text26, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
24226
- /* @__PURE__ */ jsx31(Text26, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
24227
- /* @__PURE__ */ jsx31(Text26, { children: " Space/Enter toggle required" }),
24228
- /* @__PURE__ */ jsx31(Text26, { children: " Type edit description / string default" }),
24229
- /* @__PURE__ */ jsx31(Text26, { children: " Esc exit field-edit back to the row" }),
24230
- /* @__PURE__ */ jsx31(Text26, { children: " " }),
24231
- /* @__PURE__ */ jsx31(Text26, { bold: true, children: "Values / allowedComponents" }),
24232
- /* @__PURE__ */ jsx31(Text26, { children: " a / e / r add \xB7 edit \xB7 remove" }),
24233
- /* @__PURE__ */ jsx31(Text26, { children: " \u2191\u2193 navigate the list" }),
24234
- /* @__PURE__ */ jsx31(Text26, { children: " K / J reorder up \xB7 down" }),
24235
- /* @__PURE__ */ jsx31(Text26, { children: " " }),
24236
- /* @__PURE__ */ jsx31(Text26, { bold: true, children: "Panels" }),
24237
- /* @__PURE__ */ jsx31(Text26, { children: " s toggle source-view for the current prop" }),
24238
- /* @__PURE__ */ jsx31(Text26, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
24239
- /* @__PURE__ */ jsx31(Text26, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
24240
- /* @__PURE__ */ jsx31(Text26, { children: " ? toggle this overlay" }),
24241
- /* @__PURE__ */ jsx31(Text26, { children: " " }),
24242
- /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "press ? or Esc to close" })
24261
+ showHelp && /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
24262
+ /* @__PURE__ */ jsx33(Text26, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
24263
+ /* @__PURE__ */ jsx33(Text26, { children: " " }),
24264
+ /* @__PURE__ */ jsx33(Text26, { bold: true, children: "Row navigation" }),
24265
+ /* @__PURE__ */ jsx33(Text26, { children: " \u2191/\u2193 move between rows" }),
24266
+ /* @__PURE__ */ jsx33(Text26, { children: " Enter edit fields on the current row" }),
24267
+ /* @__PURE__ */ jsx33(Text26, { children: " Esc exit the panel" }),
24268
+ /* @__PURE__ */ jsx33(Text26, { children: " " }),
24269
+ /* @__PURE__ */ jsx33(Text26, { bold: true, children: "Field editing" }),
24270
+ /* @__PURE__ */ jsx33(Text26, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
24271
+ /* @__PURE__ */ jsx33(Text26, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
24272
+ /* @__PURE__ */ jsx33(Text26, { children: " Space/Enter toggle required" }),
24273
+ /* @__PURE__ */ jsx33(Text26, { children: " Type edit description / string default" }),
24274
+ /* @__PURE__ */ jsx33(Text26, { children: " Esc exit field-edit back to the row" }),
24275
+ /* @__PURE__ */ jsx33(Text26, { children: " " }),
24276
+ /* @__PURE__ */ jsx33(Text26, { bold: true, children: "Values / allowedComponents" }),
24277
+ /* @__PURE__ */ jsx33(Text26, { children: " a / e / r add \xB7 edit \xB7 remove" }),
24278
+ /* @__PURE__ */ jsx33(Text26, { children: " \u2191\u2193 navigate the list" }),
24279
+ /* @__PURE__ */ jsx33(Text26, { children: " K / J reorder up \xB7 down" }),
24280
+ /* @__PURE__ */ jsx33(Text26, { children: " " }),
24281
+ /* @__PURE__ */ jsx33(Text26, { bold: true, children: "Panels" }),
24282
+ /* @__PURE__ */ jsx33(Text26, { children: " s toggle source-view for the current prop" }),
24283
+ /* @__PURE__ */ jsx33(Text26, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
24284
+ /* @__PURE__ */ jsx33(Text26, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
24285
+ /* @__PURE__ */ jsx33(Text26, { children: " ? toggle this overlay" }),
24286
+ /* @__PURE__ */ jsx33(Text26, { children: " " }),
24287
+ /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: "press ? or Esc to close" })
24243
24288
  ] }),
24244
- validationError && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.error, children: "\u2717 " + validationError }),
24245
- /* @__PURE__ */ jsx31(Box25, { paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: modeLabel }) })
24289
+ validationError && /* @__PURE__ */ jsx33(Text26, { color: PALETTE.error, children: "\u2717 " + validationError }),
24290
+ /* @__PURE__ */ jsx33(Box24, { paddingTop: 1, children: /* @__PURE__ */ jsx33(Text26, { color: PALETTE.muted, children: modeLabel }) })
24246
24291
  ]
24247
24292
  }
24248
24293
  );
@@ -24252,7 +24297,7 @@ function FieldEditor({
24252
24297
  import { Text as Text32 } from "ink";
24253
24298
 
24254
24299
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
24255
- import { Box as Box27, Text as Text28 } from "ink";
24300
+ import { Box as Box26, Text as Text28 } from "ink";
24256
24301
 
24257
24302
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/wrap-text.ts
24258
24303
  function appendLongWordChunks(word, width, lines) {
@@ -24287,27 +24332,27 @@ function wrapText(text, innerWidth) {
24287
24332
  }
24288
24333
 
24289
24334
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
24290
- import { Box as Box26, Text as Text27 } from "ink";
24291
- import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
24335
+ import { Box as Box25, Text as Text27 } from "ink";
24336
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
24292
24337
  function RationaleLine({ line, active }) {
24293
24338
  if (line.kind === "blank") {
24294
- return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { children: " " }) });
24339
+ return /* @__PURE__ */ jsx34(Box25, { children: /* @__PURE__ */ jsx34(Text27, { children: " " }) });
24295
24340
  }
24296
24341
  if (line.kind === "heading") {
24297
- return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
24342
+ return /* @__PURE__ */ jsx34(Box25, { children: /* @__PURE__ */ jsx34(Text27, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
24298
24343
  }
24299
24344
  if (line.kind === "label") {
24300
- return /* @__PURE__ */ jsxs26(Box26, { children: [
24301
- line.prefix && /* @__PURE__ */ jsx32(Text27, { children: line.prefix }),
24302
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
24303
- line.suffix && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: line.suffix })
24345
+ return /* @__PURE__ */ jsxs26(Box25, { children: [
24346
+ line.prefix && /* @__PURE__ */ jsx34(Text27, { children: line.prefix }),
24347
+ /* @__PURE__ */ jsx34(Text27, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
24348
+ line.suffix && /* @__PURE__ */ jsx34(Text27, { color: PALETTE.muted, children: line.suffix })
24304
24349
  ] });
24305
24350
  }
24306
- return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
24351
+ return /* @__PURE__ */ jsx34(Box25, { children: /* @__PURE__ */ jsx34(Text27, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
24307
24352
  }
24308
24353
 
24309
24354
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
24310
- import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
24355
+ import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
24311
24356
  var PLACEHOLDER = "(no rationale captured)";
24312
24357
  function renderComponentRationaleLines(data, innerWidth) {
24313
24358
  const out = [];
@@ -24376,7 +24421,7 @@ function ComponentRationalePanel({
24376
24421
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
24377
24422
  const visibleEnd = Math.min(totalLines, scrollOffset + contentHeight);
24378
24423
  return /* @__PURE__ */ jsxs27(
24379
- Box27,
24424
+ Box26,
24380
24425
  {
24381
24426
  flexDirection: "column",
24382
24427
  width,
@@ -24384,27 +24429,27 @@ function ComponentRationalePanel({
24384
24429
  borderStyle: "single",
24385
24430
  borderColor: active ? PALETTE.text : void 0,
24386
24431
  children: [
24387
- /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
24388
- visible.map((line, i) => /* @__PURE__ */ jsx33(RationaleLine, { line, active }, i)),
24389
- /* @__PURE__ */ jsx33(Box27, { children: overflowed ? /* @__PURE__ */ jsx33(Text28, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx33(Text28, { children: "[I/Esc] close" }) })
24432
+ /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
24433
+ visible.map((line, i) => /* @__PURE__ */ jsx35(RationaleLine, { line, active }, i)),
24434
+ /* @__PURE__ */ jsx35(Box26, { children: overflowed ? /* @__PURE__ */ jsx35(Text28, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx35(Text28, { children: "[I/Esc] close" }) })
24390
24435
  ]
24391
24436
  }
24392
24437
  );
24393
24438
  }
24394
24439
 
24395
24440
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
24396
- import { Box as Box29 } from "ink";
24441
+ import { Box as Box28 } from "ink";
24397
24442
 
24398
24443
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
24399
24444
  import { Text as Text29 } from "ink";
24400
- import { Fragment as Fragment7, jsx as jsx34 } from "react/jsx-runtime";
24445
+ import { Fragment as Fragment9, jsx as jsx36 } from "react/jsx-runtime";
24401
24446
  function HighlightedLine({ parts }) {
24402
- return /* @__PURE__ */ jsx34(Fragment7, { children: parts.map((part, i) => /* @__PURE__ */ jsx34(Text29, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
24447
+ return /* @__PURE__ */ jsx36(Fragment9, { children: parts.map((part, i) => /* @__PURE__ */ jsx36(Text29, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
24403
24448
  }
24404
24449
 
24405
24450
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
24406
- import { Box as Box28, Text as Text30 } from "ink";
24407
- import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
24451
+ import { Box as Box27, Text as Text30 } from "ink";
24452
+ import { Fragment as Fragment10, jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
24408
24453
  function ScrollablePanel({
24409
24454
  title,
24410
24455
  width,
@@ -24417,12 +24462,12 @@ function ScrollablePanel({
24417
24462
  children
24418
24463
  }) {
24419
24464
  const overflowed = totalLines > height;
24420
- return /* @__PURE__ */ jsxs28(Box28, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
24421
- /* @__PURE__ */ jsxs28(Box28, { children: [
24422
- /* @__PURE__ */ jsx35(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
24423
- overflowed && /* @__PURE__ */ jsxs28(Fragment8, { children: [
24424
- /* @__PURE__ */ jsx35(Box28, { flexGrow: 1 }),
24425
- /* @__PURE__ */ jsx35(Text30, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
24465
+ return /* @__PURE__ */ jsxs28(Box27, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
24466
+ /* @__PURE__ */ jsxs28(Box27, { children: [
24467
+ /* @__PURE__ */ jsx37(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
24468
+ overflowed && /* @__PURE__ */ jsxs28(Fragment10, { children: [
24469
+ /* @__PURE__ */ jsx37(Box27, { flexGrow: 1 }),
24470
+ /* @__PURE__ */ jsx37(Text30, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
24426
24471
  ] })
24427
24472
  ] }),
24428
24473
  children
@@ -24430,7 +24475,7 @@ function ScrollablePanel({
24430
24475
  }
24431
24476
 
24432
24477
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
24433
- import { jsx as jsx36 } from "react/jsx-runtime";
24478
+ import { jsx as jsx38 } from "react/jsx-runtime";
24434
24479
  function highlightJson(line) {
24435
24480
  const parts = [];
24436
24481
  let remaining = line;
@@ -24468,7 +24513,7 @@ function highlightJson(line) {
24468
24513
  parts.push({ text: remaining[0] });
24469
24514
  remaining = remaining.slice(1);
24470
24515
  }
24471
- return /* @__PURE__ */ jsx36(HighlightedLine, { parts });
24516
+ return /* @__PURE__ */ jsx38(HighlightedLine, { parts });
24472
24517
  }
24473
24518
  function truncateLine(line, maxWidth) {
24474
24519
  if (line.length <= maxWidth) return line;
@@ -24481,7 +24526,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
24481
24526
  const totalLines = allLines.length;
24482
24527
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
24483
24528
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
24484
- return /* @__PURE__ */ jsx36(
24529
+ return /* @__PURE__ */ jsx38(
24485
24530
  ScrollablePanel,
24486
24531
  {
24487
24532
  title: label,
@@ -24494,14 +24539,14 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
24494
24539
  borderColor: active ? "white" : void 0,
24495
24540
  children: visibleLines.map((line, i) => {
24496
24541
  const truncated = truncateLine(line, innerWidth);
24497
- return /* @__PURE__ */ jsx36(Box29, { children: highlightJson(truncated) }, i);
24542
+ return /* @__PURE__ */ jsx38(Box28, { children: highlightJson(truncated) }, i);
24498
24543
  })
24499
24544
  }
24500
24545
  );
24501
24546
  }
24502
24547
 
24503
24548
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
24504
- import { jsx as jsx37 } from "react/jsx-runtime";
24549
+ import { jsx as jsx39 } from "react/jsx-runtime";
24505
24550
  function renderRationaleLines(rows, innerWidth) {
24506
24551
  const out = [];
24507
24552
  rows.forEach((row, idx) => {
@@ -24534,7 +24579,7 @@ function RationalePanel({
24534
24579
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
24535
24580
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
24536
24581
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
24537
- return /* @__PURE__ */ jsx37(
24582
+ return /* @__PURE__ */ jsx39(
24538
24583
  ScrollablePanel,
24539
24584
  {
24540
24585
  title: `RATIONALE \u2014 ${componentName}`,
@@ -24545,15 +24590,15 @@ function RationalePanel({
24545
24590
  visibleStart,
24546
24591
  visibleEnd,
24547
24592
  borderColor: active ? PALETTE.text : void 0,
24548
- children: visible.map((line, i) => /* @__PURE__ */ jsx37(RationaleLine, { line, active }, i))
24593
+ children: visible.map((line, i) => /* @__PURE__ */ jsx39(RationaleLine, { line, active }, i))
24549
24594
  }
24550
24595
  );
24551
24596
  }
24552
24597
 
24553
24598
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
24554
24599
  import figures7 from "figures";
24555
- import { Box as Box30, Text as Text31 } from "ink";
24556
- import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
24600
+ import { Box as Box29, Text as Text31 } from "ink";
24601
+ import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
24557
24602
  function TokenReviewPanel({
24558
24603
  componentName,
24559
24604
  suggestions,
@@ -24573,7 +24618,7 @@ function TokenReviewPanel({
24573
24618
  const visiblePaths = current.paths.slice(scrollStart, scrollStart + visibleCount);
24574
24619
  const rangeLabel = current.paths.length === 0 ? "no compatible tokens" : `${scrollStart + 1}-${scrollStart + visiblePaths.length} of ${current.paths.length}`;
24575
24620
  return /* @__PURE__ */ jsxs29(
24576
- Box30,
24621
+ Box29,
24577
24622
  {
24578
24623
  flexDirection: "column",
24579
24624
  width,
@@ -24581,15 +24626,15 @@ function TokenReviewPanel({
24581
24626
  borderStyle: "single",
24582
24627
  borderColor: active ? PALETTE.text : void 0,
24583
24628
  children: [
24584
- /* @__PURE__ */ jsx38(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
24585
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
24586
- /* @__PURE__ */ jsx38(Text31, { children: " " }),
24587
- current.paths.length === 0 && /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
24629
+ /* @__PURE__ */ jsx40(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
24630
+ /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
24631
+ /* @__PURE__ */ jsx40(Text31, { children: " " }),
24632
+ current.paths.length === 0 && /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
24588
24633
  visiblePaths.map((path5, i) => {
24589
24634
  const pathIndex = scrollStart + i;
24590
24635
  const checked = editSelection.has(path5);
24591
24636
  const focused = pathIndex === editCursor;
24592
- return /* @__PURE__ */ jsx38(Box30, { children: /* @__PURE__ */ jsx38(
24637
+ return /* @__PURE__ */ jsx40(Box29, { children: /* @__PURE__ */ jsx40(
24593
24638
  Text31,
24594
24639
  {
24595
24640
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
@@ -24599,15 +24644,15 @@ function TokenReviewPanel({
24599
24644
  }
24600
24645
  ) }, path5);
24601
24646
  }),
24602
- /* @__PURE__ */ jsx38(Text31, { children: " " }),
24603
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
24604
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
24647
+ /* @__PURE__ */ jsx40(Text31, { children: " " }),
24648
+ /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
24649
+ /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
24605
24650
  ]
24606
24651
  }
24607
24652
  );
24608
24653
  }
24609
24654
  return /* @__PURE__ */ jsxs29(
24610
- Box30,
24655
+ Box29,
24611
24656
  {
24612
24657
  flexDirection: "column",
24613
24658
  width,
@@ -24615,25 +24660,25 @@ function TokenReviewPanel({
24615
24660
  borderStyle: "single",
24616
24661
  borderColor: active ? PALETTE.text : void 0,
24617
24662
  children: [
24618
- /* @__PURE__ */ jsx38(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
24619
- suggestions.length === 0 && /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
24663
+ /* @__PURE__ */ jsx40(Text31, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
24664
+ suggestions.length === 0 && /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
24620
24665
  suggestions.map((s, i) => {
24621
24666
  const focused = i === selectedRow;
24622
- return /* @__PURE__ */ jsxs29(Box30, { flexDirection: "column", children: [
24623
- /* @__PURE__ */ jsx38(Box30, { children: /* @__PURE__ */ jsx38(Text31, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}` }) }),
24624
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
24625
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
24667
+ return /* @__PURE__ */ jsxs29(Box29, { flexDirection: "column", children: [
24668
+ /* @__PURE__ */ jsx40(Box29, { children: /* @__PURE__ */ jsx40(Text31, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}` }) }),
24669
+ /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
24670
+ /* @__PURE__ */ jsx40(Text31, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
24626
24671
  ] }, s.propName);
24627
24672
  }),
24628
- /* @__PURE__ */ jsx38(Text31, { children: " " }),
24629
- /* @__PURE__ */ jsx38(Text31, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
24673
+ /* @__PURE__ */ jsx40(Text31, { children: " " }),
24674
+ /* @__PURE__ */ jsx40(Text31, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
24630
24675
  ]
24631
24676
  }
24632
24677
  );
24633
24678
  }
24634
24679
 
24635
24680
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
24636
- import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
24681
+ import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs30 } from "react/jsx-runtime";
24637
24682
  function ReviewDetailsPanel({
24638
24683
  selectedKey,
24639
24684
  panelOpen,
@@ -24668,7 +24713,7 @@ function ReviewDetailsPanel({
24668
24713
  rationale: s.rationale ?? ""
24669
24714
  }))
24670
24715
  ];
24671
- return /* @__PURE__ */ jsx39(
24716
+ return /* @__PURE__ */ jsx41(
24672
24717
  RationalePanel,
24673
24718
  {
24674
24719
  componentName: componentRationale?.name ?? selectedKey,
@@ -24681,7 +24726,7 @@ function ReviewDetailsPanel({
24681
24726
  );
24682
24727
  }
24683
24728
  if (panelOpen === "component-rationale") {
24684
- return /* @__PURE__ */ jsx39(
24729
+ return /* @__PURE__ */ jsx41(
24685
24730
  ComponentRationalePanel,
24686
24731
  {
24687
24732
  data: componentRationale ?? {
@@ -24707,13 +24752,13 @@ function ReviewDetailsPanel({
24707
24752
  const sourceLineCount = Math.max(1, height - 4);
24708
24753
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
24709
24754
  return /* @__PURE__ */ jsxs30(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
24710
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
24711
- source ? lines.map((line, index) => /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "(no source captured)" }),
24712
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
24755
+ /* @__PURE__ */ jsx41(Text32, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
24756
+ source ? lines.map((line, index) => /* @__PURE__ */ jsx41(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx41(Text32, { color: PALETTE.muted, children: "(no source captured)" }),
24757
+ /* @__PURE__ */ jsx41(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
24713
24758
  ] });
24714
24759
  }
24715
24760
  if (panelOpen === "token-review") {
24716
- return /* @__PURE__ */ jsx39(
24761
+ return /* @__PURE__ */ jsx41(
24717
24762
  TokenReviewPanel,
24718
24763
  {
24719
24764
  componentName: selectedKey,
@@ -24729,7 +24774,7 @@ function ReviewDetailsPanel({
24729
24774
  );
24730
24775
  }
24731
24776
  if (showJson) {
24732
- return /* @__PURE__ */ jsx39(
24777
+ return /* @__PURE__ */ jsx41(
24733
24778
  JsonPanel,
24734
24779
  {
24735
24780
  label: "GENERATED DEFINITION (read-only)",
@@ -24741,11 +24786,11 @@ function ReviewDetailsPanel({
24741
24786
  }
24742
24787
  );
24743
24788
  }
24744
- return /* @__PURE__ */ jsx39(Fragment9, { children: editor });
24789
+ return /* @__PURE__ */ jsx41(Fragment11, { children: editor });
24745
24790
  }
24746
24791
 
24747
24792
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
24748
- import { jsx as jsx40 } from "react/jsx-runtime";
24793
+ import { jsx as jsx42 } from "react/jsx-runtime";
24749
24794
  import { createElement } from "react";
24750
24795
  function toFieldEditorMetadata(reviewMetadata) {
24751
24796
  if (!reviewMetadata) return void 0;
@@ -24779,7 +24824,7 @@ function ReviewDetailsEditor({
24779
24824
  jsonScrollOffset,
24780
24825
  currentTokenSuggestions
24781
24826
  } = reviewEditor;
24782
- return /* @__PURE__ */ jsx40(
24827
+ return /* @__PURE__ */ jsx42(
24783
24828
  ReviewDetailsPanel,
24784
24829
  {
24785
24830
  selectedKey,
@@ -24819,7 +24864,7 @@ function ReviewDetailsEditor({
24819
24864
  }
24820
24865
 
24821
24866
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
24822
- import { Fragment as Fragment10, jsx as jsx41, jsxs as jsxs31 } from "react/jsx-runtime";
24867
+ import { Fragment as Fragment12, jsx as jsx43, jsxs as jsxs31 } from "react/jsx-runtime";
24823
24868
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
24824
24869
  return {
24825
24870
  value: reviewEditor.draftValue || selectedJson,
@@ -24859,17 +24904,17 @@ function ReviewEmptyComponentsWarning({
24859
24904
  hidden
24860
24905
  }) {
24861
24906
  if (hidden || count === 0) return null;
24862
- return /* @__PURE__ */ jsx41(Text33, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
24907
+ return /* @__PURE__ */ jsx43(Text33, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
24863
24908
  }
24864
24909
  function ReviewNoSelection() {
24865
- return /* @__PURE__ */ jsx41(Box31, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, children: "No component selected" }) });
24910
+ return /* @__PURE__ */ jsx43(Box30, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx43(Text33, { color: PALETTE.muted, children: "No component selected" }) });
24866
24911
  }
24867
24912
  function ReviewFinalizeError({
24868
24913
  message,
24869
24914
  hidden
24870
24915
  }) {
24871
24916
  if (hidden || !message) return null;
24872
- return /* @__PURE__ */ jsx41(Text33, { color: PALETTE.error, children: `\u26A0 ${message}` });
24917
+ return /* @__PURE__ */ jsx43(Text33, { color: PALETTE.error, children: `\u26A0 ${message}` });
24873
24918
  }
24874
24919
  function ReviewPanelFooter({
24875
24920
  reviewEditor,
@@ -24878,10 +24923,10 @@ function ReviewPanelFooter({
24878
24923
  livePreview,
24879
24924
  livePreviewSpinner
24880
24925
  }) {
24881
- return /* @__PURE__ */ jsxs31(Fragment10, { children: [
24926
+ return /* @__PURE__ */ jsxs31(Fragment12, { children: [
24882
24927
  reviewEditor.panelOpen === "token-review" ? " [\u2191/\u2193] move [Enter] edit allowed [Esc] close" : sidebarFocused ? sidebarFooter : reviewEditor.showJson ? " [\u2191\u2193] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list (edit fields)" + (reviewEditor.currentTokenSuggestions().length > 0 ? " [t] token review" : ""),
24883
- livePreview.status === "running" && /* @__PURE__ */ jsx41(Text33, { children: ` ${livePreviewSpinner} live preview` }),
24884
- livePreview.disabled && /* @__PURE__ */ jsx41(Text33, { children: " \xB7 live preview disabled" })
24928
+ livePreview.status === "running" && /* @__PURE__ */ jsx43(Text33, { children: ` ${livePreviewSpinner} live preview` }),
24929
+ livePreview.disabled && /* @__PURE__ */ jsx43(Text33, { children: " \xB7 live preview disabled" })
24885
24930
  ] });
24886
24931
  }
24887
24932
  function ReviewComponentTitle({
@@ -24890,9 +24935,9 @@ function ReviewComponentTitle({
24890
24935
  slotCount,
24891
24936
  sidebarFocused
24892
24937
  }) {
24893
- return /* @__PURE__ */ jsxs31(Box31, { paddingLeft: 2, paddingBottom: 1, children: [
24894
- /* @__PURE__ */ jsx41(Text33, { bold: true, wrap: "truncate-end", children: selectedKey }),
24895
- /* @__PURE__ */ jsx41(Box31, { flexGrow: 1 }),
24938
+ return /* @__PURE__ */ jsxs31(Box30, { paddingLeft: 2, paddingBottom: 1, children: [
24939
+ /* @__PURE__ */ jsx43(Text33, { bold: true, wrap: "truncate-end", children: selectedKey }),
24940
+ /* @__PURE__ */ jsx43(Box30, { flexGrow: 1 }),
24896
24941
  /* @__PURE__ */ jsxs31(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: [
24897
24942
  propCount,
24898
24943
  " prop",
@@ -24924,8 +24969,8 @@ function ReviewComponentPanel({
24924
24969
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
24925
24970
  const contentHeight = Math.max(1, height - 2);
24926
24971
  const contentWidth = Math.max(1, width - 1);
24927
- return /* @__PURE__ */ jsx41(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs31(Box31, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
24928
- /* @__PURE__ */ jsx41(Box31, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx41(
24972
+ return /* @__PURE__ */ jsx43(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
24973
+ /* @__PURE__ */ jsx43(Box30, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx43(
24929
24974
  ReviewDetailsEditor,
24930
24975
  {
24931
24976
  selectedKey,
@@ -24938,7 +24983,7 @@ function ReviewComponentPanel({
24938
24983
  jsonValue,
24939
24984
  sidebarFocused,
24940
24985
  fieldEditor,
24941
- header: /* @__PURE__ */ jsx41(
24986
+ header: /* @__PURE__ */ jsx43(
24942
24987
  ReviewComponentTitle,
24943
24988
  {
24944
24989
  selectedKey,
@@ -24949,8 +24994,8 @@ function ReviewComponentPanel({
24949
24994
  )
24950
24995
  }
24951
24996
  ) }),
24952
- /* @__PURE__ */ jsx41(Box31, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx41(Text33, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
24953
- /* @__PURE__ */ jsx41(Box31, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx41(
24997
+ /* @__PURE__ */ jsx43(Box30, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx43(Text33, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
24998
+ /* @__PURE__ */ jsx43(Box30, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx43(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx43(
24954
24999
  ReviewPanelFooter,
24955
25000
  {
24956
25001
  reviewEditor,
@@ -24964,8 +25009,8 @@ function ReviewComponentPanel({
24964
25009
  }
24965
25010
 
24966
25011
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
24967
- import { Box as Box32, Text as Text34 } from "ink";
24968
- import { jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
25012
+ import { Box as Box31, Text as Text34 } from "ink";
25013
+ import { jsx as jsx44, jsxs as jsxs32 } from "react/jsx-runtime";
24969
25014
  function countReviewStatuses(entries) {
24970
25015
  return entries.reduce(
24971
25016
  (counts, entry) => {
@@ -24978,13 +25023,13 @@ function countReviewStatuses(entries) {
24978
25023
  );
24979
25024
  }
24980
25025
  function ReviewLoadingState() {
24981
- return /* @__PURE__ */ jsx42(Box32, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
25026
+ return /* @__PURE__ */ jsx44(Box31, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx44(Text34, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
24982
25027
  }
24983
25028
  function ReviewLoadError({ message }) {
24984
- return /* @__PURE__ */ jsxs32(Box32, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
24985
- /* @__PURE__ */ jsx42(Text34, { color: PALETTE.error, children: message }),
24986
- /* @__PURE__ */ jsx42(Text34, { children: " " }),
24987
- /* @__PURE__ */ jsx42(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
25029
+ return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
25030
+ /* @__PURE__ */ jsx44(Text34, { color: PALETTE.error, children: message }),
25031
+ /* @__PURE__ */ jsx44(Text34, { children: " " }),
25032
+ /* @__PURE__ */ jsx44(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
24988
25033
  ] });
24989
25034
  }
24990
25035
 
@@ -25184,8 +25229,8 @@ async function runLivePreview(opts) {
25184
25229
  }
25185
25230
 
25186
25231
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
25187
- import { Box as Box33, Text as Text35 } from "ink";
25188
- import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
25232
+ import { Box as Box32, Text as Text35 } from "ink";
25233
+ import { Fragment as Fragment13, jsx as jsx45, jsxs as jsxs33 } from "react/jsx-runtime";
25189
25234
  var FINALIZE_REMOVED_WINDOW = 6;
25190
25235
  function FinalizeDialog({
25191
25236
  accepted,
@@ -25214,51 +25259,51 @@ function FinalizeDialog({
25214
25259
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
25215
25260
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
25216
25261
  const hasMoreAbove = offset > 0;
25217
- return /* @__PURE__ */ jsx43(Box33, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", alignItems: "flex-start", children: [
25218
- /* @__PURE__ */ jsx43(Text35, { bold: true, children: "Finalize" }),
25219
- /* @__PURE__ */ jsx43(Text35, { children: " " }),
25262
+ return /* @__PURE__ */ jsx45(Box32, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", alignItems: "flex-start", children: [
25263
+ /* @__PURE__ */ jsx45(Text35, { bold: true, children: "Finalize" }),
25264
+ /* @__PURE__ */ jsx45(Text35, { children: " " }),
25220
25265
  /* @__PURE__ */ jsxs33(Text35, { children: [
25221
25266
  /* @__PURE__ */ jsxs33(Text35, { color: PALETTE.success, children: [
25222
25267
  accepted,
25223
25268
  " accepted"
25224
25269
  ] }),
25225
- /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
25270
+ /* @__PURE__ */ jsx45(Text35, { children: " \xB7 " }),
25226
25271
  /* @__PURE__ */ jsxs33(Text35, { color: PALETTE.error, children: [
25227
25272
  rejected,
25228
25273
  " rejected"
25229
25274
  ] }),
25230
- /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
25275
+ /* @__PURE__ */ jsx45(Text35, { children: " \xB7 " }),
25231
25276
  /* @__PURE__ */ jsxs33(Text35, { color: PALETTE.muted, children: [
25232
25277
  needsReview,
25233
25278
  " unresolved"
25234
25279
  ] })
25235
25280
  ] }),
25236
- /* @__PURE__ */ jsx43(Text35, { children: " " }),
25237
- noneAccepted && /* @__PURE__ */ jsxs33(Fragment11, { children: [
25238
- /* @__PURE__ */ jsx43(Text35, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
25239
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
25240
- /* @__PURE__ */ jsx43(Text35, { children: " " })
25281
+ /* @__PURE__ */ jsx45(Text35, { children: " " }),
25282
+ noneAccepted && /* @__PURE__ */ jsxs33(Fragment13, { children: [
25283
+ /* @__PURE__ */ jsx45(Text35, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
25284
+ /* @__PURE__ */ jsx45(Text35, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
25285
+ /* @__PURE__ */ jsx45(Text35, { children: " " })
25241
25286
  ] }),
25242
- !allResolved && /* @__PURE__ */ jsxs33(Fragment11, { children: [
25243
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
25244
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
25245
- /* @__PURE__ */ jsx43(Text35, { children: " " })
25287
+ !allResolved && /* @__PURE__ */ jsxs33(Fragment13, { children: [
25288
+ /* @__PURE__ */ jsx45(Text35, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
25289
+ /* @__PURE__ */ jsx45(Text35, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
25290
+ /* @__PURE__ */ jsx45(Text35, { children: " " })
25246
25291
  ] }),
25247
- /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", height: 2, children: [
25248
- previewStatus === "running" ? /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx43(Text35, { children: " " }),
25249
- /* @__PURE__ */ jsx43(Text35, { children: " " })
25292
+ /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", height: 2, children: [
25293
+ previewStatus === "running" ? /* @__PURE__ */ jsx45(Text35, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx45(Text35, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx45(Text35, { children: " " }),
25294
+ /* @__PURE__ */ jsx45(Text35, { children: " " })
25250
25295
  ] }),
25251
- previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs33(Fragment11, { children: [
25252
- /* @__PURE__ */ jsx43(Text35, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
25253
- hasMoreAbove && /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "\u2191 more above" }),
25254
- windowed.map((rc) => /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
25255
- hasMoreBelow && /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "\u2193 more below" }),
25256
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx43(Text35, { children: "[\u2191\u2193] scroll deletions" }),
25257
- /* @__PURE__ */ jsx43(Text35, { children: " " })
25296
+ previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs33(Fragment13, { children: [
25297
+ /* @__PURE__ */ jsx45(Text35, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
25298
+ hasMoreAbove && /* @__PURE__ */ jsx45(Text35, { color: PALETTE.muted, children: "\u2191 more above" }),
25299
+ windowed.map((rc) => /* @__PURE__ */ jsx45(Text35, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
25300
+ hasMoreBelow && /* @__PURE__ */ jsx45(Text35, { color: PALETTE.muted, children: "\u2193 more below" }),
25301
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx45(Text35, { children: "[\u2191\u2193] scroll deletions" }),
25302
+ /* @__PURE__ */ jsx45(Text35, { children: " " })
25258
25303
  ] }),
25259
- /* @__PURE__ */ jsx43(Text35, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
25260
- /* @__PURE__ */ jsx43(Text35, { children: " " }),
25261
- /* @__PURE__ */ jsx43(
25304
+ /* @__PURE__ */ jsx45(Text35, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
25305
+ /* @__PURE__ */ jsx45(Text35, { children: " " }),
25306
+ /* @__PURE__ */ jsx45(
25262
25307
  ControlHints,
25263
25308
  {
25264
25309
  hints: [
@@ -25671,11 +25716,11 @@ function useReviewSurfaceState(initialFinalizeError = null) {
25671
25716
  }
25672
25717
 
25673
25718
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
25674
- import { Box as Box35, Text as Text37 } from "ink";
25719
+ import { Box as Box34, Text as Text37 } from "ink";
25675
25720
 
25676
25721
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
25677
- import { Box as Box34, Text as Text36 } from "ink";
25678
- import { Fragment as Fragment12, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
25722
+ import { Box as Box33, Text as Text36 } from "ink";
25723
+ import { Fragment as Fragment14, jsx as jsx46, jsxs as jsxs34 } from "react/jsx-runtime";
25679
25724
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
25680
25725
  useImmediateInput((input, key) => {
25681
25726
  if (input === "y" || key.return) {
@@ -25684,16 +25729,16 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
25684
25729
  onCancel();
25685
25730
  }
25686
25731
  });
25687
- return /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
25688
- /* @__PURE__ */ jsx44(Text36, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
25689
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
25690
- hasUnsavedDrafts ? /* @__PURE__ */ jsxs34(Fragment12, { children: [
25691
- /* @__PURE__ */ jsx44(Text36, { children: "You have unsaved draft edits." }),
25692
- /* @__PURE__ */ jsx44(Text36, { children: "Session state is preserved \u2014 you can resume" }),
25693
- /* @__PURE__ */ jsx44(Text36, { children: "by running the same review command again." })
25694
- ] }) : /* @__PURE__ */ jsx44(Text36, { children: "Session is saved. Quit without finalizing?" }),
25695
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
25696
- /* @__PURE__ */ jsx44(
25732
+ return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
25733
+ /* @__PURE__ */ jsx46(Text36, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
25734
+ /* @__PURE__ */ jsx46(Text36, { children: " " }),
25735
+ hasUnsavedDrafts ? /* @__PURE__ */ jsxs34(Fragment14, { children: [
25736
+ /* @__PURE__ */ jsx46(Text36, { children: "You have unsaved draft edits." }),
25737
+ /* @__PURE__ */ jsx46(Text36, { children: "Session state is preserved \u2014 you can resume" }),
25738
+ /* @__PURE__ */ jsx46(Text36, { children: "by running the same review command again." })
25739
+ ] }) : /* @__PURE__ */ jsx46(Text36, { children: "Session is saved. Quit without finalizing?" }),
25740
+ /* @__PURE__ */ jsx46(Text36, { children: " " }),
25741
+ /* @__PURE__ */ jsx46(
25697
25742
  ControlHints,
25698
25743
  {
25699
25744
  hints: [
@@ -25706,7 +25751,7 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
25706
25751
  }
25707
25752
 
25708
25753
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
25709
- import { Fragment as Fragment13, jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
25754
+ import { Fragment as Fragment15, jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
25710
25755
  function ReviewFinalizeDialogs({
25711
25756
  showFinalize,
25712
25757
  showQuit,
@@ -25720,8 +25765,8 @@ function ReviewFinalizeDialogs({
25720
25765
  onQuitCancel
25721
25766
  }) {
25722
25767
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
25723
- return /* @__PURE__ */ jsxs35(Fragment13, { children: [
25724
- showFinalize && /* @__PURE__ */ jsx45(
25768
+ return /* @__PURE__ */ jsxs35(Fragment15, { children: [
25769
+ showFinalize && /* @__PURE__ */ jsx47(
25725
25770
  FinalizeDialog,
25726
25771
  {
25727
25772
  accepted,
@@ -25734,7 +25779,7 @@ function ReviewFinalizeDialogs({
25734
25779
  onCancel: onFinalizeCancel
25735
25780
  }
25736
25781
  ),
25737
- showQuit && /* @__PURE__ */ jsx45(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
25782
+ showQuit && /* @__PURE__ */ jsx47(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
25738
25783
  ] });
25739
25784
  }
25740
25785
  function ReviewStepDialogs({
@@ -25744,7 +25789,7 @@ function ReviewStepDialogs({
25744
25789
  onFinalize,
25745
25790
  onQuit
25746
25791
  }) {
25747
- return /* @__PURE__ */ jsx45(
25792
+ return /* @__PURE__ */ jsx47(
25748
25793
  ReviewFinalizeDialogs,
25749
25794
  {
25750
25795
  showFinalize: surfaceState.showFinalize,
@@ -25762,12 +25807,12 @@ function ReviewStepDialogs({
25762
25807
  }
25763
25808
  function ReviewReloadDialog({ open }) {
25764
25809
  if (!open) return null;
25765
- return /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
25766
- /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
25767
- /* @__PURE__ */ jsx45(Text37, { children: "Unsaved in-memory changes will be lost." }),
25768
- /* @__PURE__ */ jsx45(Text37, { children: " " }),
25769
- /* @__PURE__ */ jsx45(Text37, { children: " [Enter] Confirm" }),
25770
- /* @__PURE__ */ jsx45(Text37, { children: " [Esc] Cancel" })
25810
+ return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
25811
+ /* @__PURE__ */ jsx47(Text37, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
25812
+ /* @__PURE__ */ jsx47(Text37, { children: "Unsaved in-memory changes will be lost." }),
25813
+ /* @__PURE__ */ jsx47(Text37, { children: " " }),
25814
+ /* @__PURE__ */ jsx47(Text37, { children: " [Enter] Confirm" }),
25815
+ /* @__PURE__ */ jsx47(Text37, { children: " [Esc] Cancel" })
25771
25816
  ] });
25772
25817
  }
25773
25818
 
@@ -26134,8 +26179,8 @@ function useReviewPreview({
26134
26179
  }
26135
26180
 
26136
26181
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
26137
- import { Box as Box36, Text as Text38 } from "ink";
26138
- import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
26182
+ import { Box as Box35, Text as Text38 } from "ink";
26183
+ import { jsx as jsx48, jsxs as jsxs36 } from "react/jsx-runtime";
26139
26184
  function LivePreviewSummary({
26140
26185
  enabled,
26141
26186
  previewAnnotations,
@@ -26149,24 +26194,24 @@ function LivePreviewSummary({
26149
26194
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
26150
26195
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
26151
26196
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
26152
- if (disabled) return /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
26153
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
26197
+ if (disabled) return /* @__PURE__ */ jsx48(Text38, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
26198
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx48(Text38, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
26154
26199
  if (!hasCounts) return null;
26155
- return /* @__PURE__ */ jsxs36(Box36, { children: [
26156
- /* @__PURE__ */ jsx46(Text38, { children: "Preview: " }),
26157
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.success, children: `${counts.new} new` }),
26158
- /* @__PURE__ */ jsx46(Text38, { children: " \xB7 " }),
26159
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.warning, children: `${counts.changed} changed` }),
26160
- /* @__PURE__ */ jsx46(Text38, { children: " \xB7 " }),
26161
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: `${counts.removed} removed` }),
26162
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx46(Text38, { children: " ([d] removed list)" }),
26163
- /* @__PURE__ */ jsx46(Text38, { children: " \xB7 " }),
26164
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
26200
+ return /* @__PURE__ */ jsxs36(Box35, { children: [
26201
+ /* @__PURE__ */ jsx48(Text38, { children: "Preview: " }),
26202
+ /* @__PURE__ */ jsx48(Text38, { color: PALETTE.success, children: `${counts.new} new` }),
26203
+ /* @__PURE__ */ jsx48(Text38, { children: " \xB7 " }),
26204
+ /* @__PURE__ */ jsx48(Text38, { color: PALETTE.warning, children: `${counts.changed} changed` }),
26205
+ /* @__PURE__ */ jsx48(Text38, { children: " \xB7 " }),
26206
+ /* @__PURE__ */ jsx48(Text38, { color: PALETTE.muted, children: `${counts.removed} removed` }),
26207
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx48(Text38, { children: " ([d] removed list)" }),
26208
+ /* @__PURE__ */ jsx48(Text38, { children: " \xB7 " }),
26209
+ /* @__PURE__ */ jsx48(Text38, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
26165
26210
  ] });
26166
26211
  }
26167
26212
 
26168
26213
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
26169
- import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
26214
+ import { Fragment as Fragment16, jsx as jsx49, jsxs as jsxs37 } from "react/jsx-runtime";
26170
26215
  function sortComponentsForSidebar(components, cycleParticipants) {
26171
26216
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
26172
26217
  const tier = (c2) => {
@@ -26210,7 +26255,7 @@ function CyclePathLine({
26210
26255
  return /* @__PURE__ */ jsxs37(Text39, { color: highlightLine ? PALETTE.warning : void 0, children: [
26211
26256
  prefix,
26212
26257
  segments.map(
26213
- (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx47(Text39, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx47(Text39, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
26258
+ (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx49(Text39, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx49(Text39, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
26214
26259
  )
26215
26260
  ] });
26216
26261
  }
@@ -26222,31 +26267,31 @@ function CycleDetailPanel({
26222
26267
  height
26223
26268
  }) {
26224
26269
  const lines = [
26225
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
26226
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
26227
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
26228
- /* @__PURE__ */ jsx47(Text39, { children: " " }, "cyc-space")
26270
+ /* @__PURE__ */ jsx49(Text39, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
26271
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
26272
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
26273
+ /* @__PURE__ */ jsx49(Text39, { children: " " }, "cyc-space")
26229
26274
  ];
26230
26275
  cycles.forEach((cycle, index) => {
26231
26276
  const nodeCount = new Set(cycle.path).size;
26232
26277
  const isCursor = index === cursor;
26233
26278
  lines.push(
26234
- /* @__PURE__ */ jsx47(Text39, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
26235
- /* @__PURE__ */ jsx47(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
26279
+ /* @__PURE__ */ jsx49(Text39, { bold: true, inverse: isCursor, children: `${isCursor ? figures8.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
26280
+ /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
26236
26281
  );
26237
26282
  if (cycle.suggestedBreak) {
26238
26283
  lines.push(
26239
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
26284
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
26240
26285
  );
26241
26286
  }
26242
- lines.push(/* @__PURE__ */ jsx47(Text39, { children: " " }, `cyc-s-${index}`));
26287
+ lines.push(/* @__PURE__ */ jsx49(Text39, { children: " " }, `cyc-s-${index}`));
26243
26288
  });
26244
26289
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
26245
26290
  const viewportHeight = Math.max(1, height - 3);
26246
26291
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
26247
26292
  return /* @__PURE__ */ jsxs37(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
26248
26293
  visible,
26249
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: footer })
26294
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: footer })
26250
26295
  ] });
26251
26296
  }
26252
26297
  function BreakCyclePanel({
@@ -26258,13 +26303,13 @@ function BreakCyclePanel({
26258
26303
  height
26259
26304
  }) {
26260
26305
  return /* @__PURE__ */ jsxs37(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
26261
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
26262
- cycle && /* @__PURE__ */ jsx47(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
26263
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
26264
- /* @__PURE__ */ jsx47(Text39, { children: " " }),
26265
- edges.length > 0 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "remove slot edge:" }),
26266
- edges.map((edge, index) => /* @__PURE__ */ jsx47(Text39, { inverse: index === cursor, children: `${index === cursor ? figures8.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
26267
- confirming ? /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx47(Text39, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
26306
+ /* @__PURE__ */ jsx49(Text39, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
26307
+ cycle && /* @__PURE__ */ jsx49(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
26308
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
26309
+ /* @__PURE__ */ jsx49(Text39, { children: " " }),
26310
+ edges.length > 0 && /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: "remove slot edge:" }),
26311
+ edges.map((edge, index) => /* @__PURE__ */ jsx49(Text39, { inverse: index === cursor, children: `${index === cursor ? figures8.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
26312
+ confirming ? /* @__PURE__ */ jsx49(Text39, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx49(Text39, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
26268
26313
  ] });
26269
26314
  }
26270
26315
  var HELP_SECTIONS2 = [
@@ -26370,9 +26415,9 @@ function deriveBreakingChanges(response) {
26370
26415
  }
26371
26416
  function GenerateReviewStep(props) {
26372
26417
  if (!props.extractSessionId) {
26373
- return /* @__PURE__ */ jsx47(Box37, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
26418
+ return /* @__PURE__ */ jsx49(Box36, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx49(Text39, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
26374
26419
  }
26375
- return /* @__PURE__ */ jsx47(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
26420
+ return /* @__PURE__ */ jsx49(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
26376
26421
  }
26377
26422
  function GenerateReviewStepView({
26378
26423
  extractSessionId,
@@ -27229,13 +27274,13 @@ function GenerateReviewStepView({
27229
27274
  }
27230
27275
  });
27231
27276
  if (loading) {
27232
- return /* @__PURE__ */ jsx47(ReviewLoadingState, {});
27277
+ return /* @__PURE__ */ jsx49(ReviewLoadingState, {});
27233
27278
  }
27234
27279
  if (loadError) {
27235
- return /* @__PURE__ */ jsx47(ReviewLoadError, { message: loadError });
27280
+ return /* @__PURE__ */ jsx49(ReviewLoadError, { message: loadError });
27236
27281
  }
27237
27282
  if (showHelp) {
27238
- return /* @__PURE__ */ jsx47(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
27283
+ return /* @__PURE__ */ jsx49(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
27239
27284
  }
27240
27285
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
27241
27286
  components,
@@ -27275,9 +27320,9 @@ function GenerateReviewStepView({
27275
27320
  for (const c2 of closures.values()) if (c2.nodes.length > 1) return true;
27276
27321
  return false;
27277
27322
  })();
27278
- return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", children: [
27279
- /* @__PURE__ */ jsx47(StepHeader, { step: "review" }),
27280
- /* @__PURE__ */ jsx47(
27323
+ return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
27324
+ /* @__PURE__ */ jsx49(StepHeader, { step: "review" }),
27325
+ /* @__PURE__ */ jsx49(
27281
27326
  ReviewStepDialogs,
27282
27327
  {
27283
27328
  surfaceState: reviewSurface,
@@ -27287,15 +27332,15 @@ function GenerateReviewStepView({
27287
27332
  onQuit
27288
27333
  }
27289
27334
  ),
27290
- /* @__PURE__ */ jsx47(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
27291
- removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
27292
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
27293
- !removedBannerCollapsed && /* @__PURE__ */ jsxs37(Fragment14, { children: [
27294
- /* @__PURE__ */ jsx47(Text39, { children: " " }),
27295
- removedComponents.map((rc) => /* @__PURE__ */ jsx47(Text39, { children: removedComponentLine(rc) }, rc.id))
27335
+ /* @__PURE__ */ jsx49(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
27336
+ removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
27337
+ /* @__PURE__ */ jsx49(Text39, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
27338
+ !removedBannerCollapsed && /* @__PURE__ */ jsxs37(Fragment16, { children: [
27339
+ /* @__PURE__ */ jsx49(Text39, { children: " " }),
27340
+ removedComponents.map((rc) => /* @__PURE__ */ jsx49(Text39, { children: removedComponentLine(rc) }, rc.id))
27296
27341
  ] })
27297
27342
  ] }),
27298
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx47(Box37, { paddingX: 1, children: /* @__PURE__ */ jsx47(
27343
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx49(Box36, { paddingX: 1, children: /* @__PURE__ */ jsx49(
27299
27344
  Text39,
27300
27345
  {
27301
27346
  color: PALETTE.warning,
@@ -27306,14 +27351,14 @@ function GenerateReviewStepView({
27306
27351
  const row = breakingRows[breakingCursor];
27307
27352
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
27308
27353
  if (!comp) return null;
27309
- return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27310
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
27311
- comp.impact && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
27312
- comp.changes.length === 0 ? /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx47(Text39, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
27313
- /* @__PURE__ */ jsx47(Text39, { children: "[D/Esc] close detail" })
27354
+ return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27355
+ /* @__PURE__ */ jsx49(Text39, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
27356
+ comp.impact && /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
27357
+ comp.changes.length === 0 ? /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx49(Text39, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
27358
+ /* @__PURE__ */ jsx49(Text39, { children: "[D/Esc] close detail" })
27314
27359
  ] });
27315
27360
  })(),
27316
- !dialogOpen && /* @__PURE__ */ jsx47(
27361
+ !dialogOpen && /* @__PURE__ */ jsx49(
27317
27362
  LivePreviewSummary,
27318
27363
  {
27319
27364
  enabled: livePreview,
@@ -27332,16 +27377,16 @@ function GenerateReviewStepView({
27332
27377
  const participantSet = cycleView.structural;
27333
27378
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
27334
27379
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
27335
- return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
27336
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
27337
- members.length > 0 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
27338
- ancestors.length > 0 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
27339
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
27380
+ return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
27381
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
27382
+ members.length > 0 && /* @__PURE__ */ jsx49(Text39, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
27383
+ ancestors.length > 0 && /* @__PURE__ */ jsx49(Text39, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
27384
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
27340
27385
  ] });
27341
27386
  })(),
27342
- /* @__PURE__ */ jsx47(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
27343
- /* @__PURE__ */ jsx47(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
27344
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx47(
27387
+ /* @__PURE__ */ jsx49(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
27388
+ /* @__PURE__ */ jsx49(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
27389
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx49(
27345
27390
  BreakCyclePanel,
27346
27391
  {
27347
27392
  cycle: cycleRows[cyclesCursor],
@@ -27352,7 +27397,7 @@ function GenerateReviewStepView({
27352
27397
  height: panelHeight
27353
27398
  }
27354
27399
  ),
27355
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx47(
27400
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx49(
27356
27401
  CycleDetailPanel,
27357
27402
  {
27358
27403
  cycles: cycleRows,
@@ -27362,8 +27407,8 @@ function GenerateReviewStepView({
27362
27407
  height: panelHeight
27363
27408
  }
27364
27409
  ),
27365
- !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box37, { children: [
27366
- breakingPanel.isOpen ? /* @__PURE__ */ jsx47(
27410
+ !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box36, { children: [
27411
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx49(
27367
27412
  GotoBanner,
27368
27413
  {
27369
27414
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -27376,7 +27421,7 @@ function GenerateReviewStepView({
27376
27421
  width: sidebarWidth,
27377
27422
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
27378
27423
  }
27379
- ) : /* @__PURE__ */ jsx47(
27424
+ ) : /* @__PURE__ */ jsx49(
27380
27425
  GroupedSidebar,
27381
27426
  {
27382
27427
  items: groupedItems,
@@ -27417,7 +27462,7 @@ function GenerateReviewStepView({
27417
27462
  graph: sidebarGraph
27418
27463
  }
27419
27464
  ),
27420
- selected ? /* @__PURE__ */ jsx47(
27465
+ selected ? /* @__PURE__ */ jsx49(
27421
27466
  ReviewComponentPanel,
27422
27467
  {
27423
27468
  selectedKey: selected.key,
@@ -27449,12 +27494,12 @@ function GenerateReviewStepView({
27449
27494
  livePreview: livePreviewHook,
27450
27495
  livePreviewSpinner
27451
27496
  }
27452
- ) : /* @__PURE__ */ jsx47(ReviewNoSelection, {})
27497
+ ) : /* @__PURE__ */ jsx49(ReviewNoSelection, {})
27453
27498
  ] }),
27454
- !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", children: [
27455
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
27499
+ !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
27500
+ /* @__PURE__ */ jsx49(Text39, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
27456
27501
  cycleRows.slice(0, 3).map((cycle, idx) => {
27457
- return /* @__PURE__ */ jsx47(
27502
+ return /* @__PURE__ */ jsx49(
27458
27503
  CyclePathLine,
27459
27504
  {
27460
27505
  segments: formatCyclePathSegments2(cycle),
@@ -27465,10 +27510,10 @@ function GenerateReviewStepView({
27465
27510
  `cyc-banner-${idx}`
27466
27511
  );
27467
27512
  }),
27468
- cycleRows.length > 3 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
27469
- /* @__PURE__ */ jsx47(Text39, { children: " press [c] for detail" })
27513
+ cycleRows.length > 3 && /* @__PURE__ */ jsx49(Text39, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
27514
+ /* @__PURE__ */ jsx49(Text39, { children: " press [c] for detail" })
27470
27515
  ] }),
27471
- /* @__PURE__ */ jsx47(
27516
+ /* @__PURE__ */ jsx49(
27472
27517
  SearchMatchSummary,
27473
27518
  {
27474
27519
  open: searchOpen,
@@ -27479,27 +27524,27 @@ function GenerateReviewStepView({
27479
27524
  hidden: dialogOpen
27480
27525
  }
27481
27526
  ),
27482
- !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx47(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
27527
+ !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx49(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
27483
27528
  ] });
27484
27529
  }
27485
27530
 
27486
27531
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
27487
- import { Box as Box38, Text as Text40 } from "ink";
27488
- import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
27532
+ import { Box as Box37, Text as Text40 } from "ink";
27533
+ import { jsx as jsx50, jsxs as jsxs38 } from "react/jsx-runtime";
27489
27534
  function CustomPromptBanner({ generatePromptPath }) {
27490
27535
  if (!generatePromptPath) return null;
27491
- return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27492
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
27536
+ return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27537
+ /* @__PURE__ */ jsx50(Text40, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
27493
27538
  generatePromptPath ? /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.warning, children: [
27494
27539
  "components: ",
27495
27540
  generatePromptPath
27496
27541
  ] }) : null,
27497
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
27542
+ /* @__PURE__ */ jsx50(Text40, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
27498
27543
  ] });
27499
27544
  }
27500
27545
 
27501
27546
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
27502
- import { Box as Box40, Text as Text42 } from "ink";
27547
+ import { Box as Box39, Text as Text42 } from "ink";
27503
27548
 
27504
27549
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/contentful-urls.ts
27505
27550
  function normalizeHost(host) {
@@ -27515,26 +27560,26 @@ function buildPostPushUrl2({ host, spaceId, environmentId, view = "components" }
27515
27560
  }
27516
27561
 
27517
27562
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
27518
- import { Box as Box39, Text as Text41 } from "ink";
27519
- import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
27563
+ import { Box as Box38, Text as Text41 } from "ink";
27564
+ import { jsx as jsx51, jsxs as jsxs39 } from "react/jsx-runtime";
27520
27565
  function SpaceEnvironment({ spaceId, environmentId }) {
27521
- return /* @__PURE__ */ jsxs39(Box39, { gap: 1, marginTop: 1, children: [
27522
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "Space:" }),
27523
- /* @__PURE__ */ jsx49(Text41, { children: spaceId }),
27524
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "/" }),
27525
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "Environment:" }),
27526
- /* @__PURE__ */ jsx49(Text41, { children: environmentId })
27566
+ return /* @__PURE__ */ jsxs39(Box38, { gap: 1, marginTop: 1, children: [
27567
+ /* @__PURE__ */ jsx51(Text41, { color: PALETTE.muted, children: "Space:" }),
27568
+ /* @__PURE__ */ jsx51(Text41, { children: spaceId }),
27569
+ /* @__PURE__ */ jsx51(Text41, { color: PALETTE.muted, children: "/" }),
27570
+ /* @__PURE__ */ jsx51(Text41, { color: PALETTE.muted, children: "Environment:" }),
27571
+ /* @__PURE__ */ jsx51(Text41, { children: environmentId })
27527
27572
  ] });
27528
27573
  }
27529
27574
 
27530
27575
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
27531
- import { Fragment as Fragment15, jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
27576
+ import { Fragment as Fragment17, jsx as jsx52, jsxs as jsxs40 } from "react/jsx-runtime";
27532
27577
  var ACTIONS = ["created", "updated", "removed"];
27533
27578
  function EntityRows({ entity, label }) {
27534
27579
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
27535
- return /* @__PURE__ */ jsxs40(Fragment15, { children: [
27580
+ return /* @__PURE__ */ jsxs40(Fragment17, { children: [
27536
27581
  ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs40(Text42, { children: [
27537
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.success, children: "\u2713" }),
27582
+ /* @__PURE__ */ jsx52(Text42, { color: PALETTE.success, children: "\u2713" }),
27538
27583
  " ",
27539
27584
  plural3(entity[action]),
27540
27585
  " ",
@@ -27548,9 +27593,9 @@ function EntityRows({ entity, label }) {
27548
27593
  ] });
27549
27594
  }
27550
27595
  function LinkRow({ title, url }) {
27551
- return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
27552
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: title }),
27553
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.accent, children: url })
27596
+ return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
27597
+ /* @__PURE__ */ jsx52(Text42, { color: PALETTE.muted, children: title }),
27598
+ /* @__PURE__ */ jsx52(Text42, { color: PALETTE.accent, children: url })
27554
27599
  ] });
27555
27600
  }
27556
27601
  function DoneStep({
@@ -27574,14 +27619,14 @@ function DoneStep({
27574
27619
  const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
27575
27620
  const success = totalFailed === 0;
27576
27621
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
27577
- return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
27578
- /* @__PURE__ */ jsx50(StepHeader, { step: "done" }),
27579
- /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27580
- success ? /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
27581
- totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx50(Text42, { 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__ */ jsxs40(Box40, { flexDirection: "column", children: [
27582
- /* @__PURE__ */ jsx50(EntityRows, { entity: componentTypes, label: "Component" }),
27583
- /* @__PURE__ */ jsx50(EntityRows, { entity: designTokens, label: "Design Token" }),
27584
- summary && /* @__PURE__ */ jsx50(Box40, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
27622
+ return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
27623
+ /* @__PURE__ */ jsx52(StepHeader, { step: "done" }),
27624
+ /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27625
+ success ? /* @__PURE__ */ jsx52(Text42, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx52(Text42, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
27626
+ totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx52(Text42, { 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__ */ jsxs40(Box39, { flexDirection: "column", children: [
27627
+ /* @__PURE__ */ jsx52(EntityRows, { entity: componentTypes, label: "Component" }),
27628
+ /* @__PURE__ */ jsx52(EntityRows, { entity: designTokens, label: "Design Token" }),
27629
+ summary && /* @__PURE__ */ jsx52(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
27585
27630
  "Push result: ",
27586
27631
  summary.succeeded,
27587
27632
  "/",
@@ -27594,8 +27639,8 @@ function DoneStep({
27594
27639
  ] })
27595
27640
  ] }) })
27596
27641
  ] }),
27597
- failures.length > 0 && /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
27598
- /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.error, children: "Failure details" }),
27642
+ failures.length > 0 && /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
27643
+ /* @__PURE__ */ jsx52(Text42, { bold: true, color: PALETTE.error, children: "Failure details" }),
27599
27644
  failures.map((failure) => /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.error, children: [
27600
27645
  failure.entityType,
27601
27646
  " ",
@@ -27604,11 +27649,11 @@ function DoneStep({
27604
27649
  failure.message
27605
27650
  ] }, `${failure.entityType}:${failure.entityId}`))
27606
27651
  ] }),
27607
- /* @__PURE__ */ jsx50(SpaceEnvironment, { spaceId, environmentId }),
27608
- success && totalPushed > 0 && /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", gap: 1, children: [
27609
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
27610
- produced.components && /* @__PURE__ */ jsx50(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
27611
- produced.tokens && /* @__PURE__ */ jsx50(
27652
+ /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
27653
+ success && totalPushed > 0 && /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, children: [
27654
+ /* @__PURE__ */ jsx52(Text42, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
27655
+ produced.components && /* @__PURE__ */ jsx52(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
27656
+ produced.tokens && /* @__PURE__ */ jsx52(
27612
27657
  LinkRow,
27613
27658
  {
27614
27659
  title: "View your design tokens here:",
@@ -27616,14 +27661,14 @@ function DoneStep({
27616
27661
  }
27617
27662
  )
27618
27663
  ] }),
27619
- /* @__PURE__ */ jsx50(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
27664
+ /* @__PURE__ */ jsx52(ControlHints, { hints: [{ keys: "Enter / q", label: "Exit" }] })
27620
27665
  ] })
27621
27666
  ] });
27622
27667
  }
27623
27668
 
27624
27669
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
27625
27670
  import { useState as useState27 } from "react";
27626
- import { Box as Box41, Text as Text43 } from "ink";
27671
+ import { Box as Box40, Text as Text43 } from "ink";
27627
27672
  import { readdirSync as readdirSync3 } from "node:fs";
27628
27673
  import { dirname as dirname16, basename as basename6, join as join20 } from "node:path";
27629
27674
 
@@ -27657,7 +27702,7 @@ function useBlinkingCursor() {
27657
27702
  }
27658
27703
 
27659
27704
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
27660
- import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
27705
+ import { jsx as jsx53, jsxs as jsxs41 } from "react/jsx-runtime";
27661
27706
  function autocomplete(partial) {
27662
27707
  if (!partial) return null;
27663
27708
  const normalized = normalizePath(partial);
@@ -27714,19 +27759,19 @@ function PathPrompt({
27714
27759
  const shown = input || defaultPath;
27715
27760
  const isPlaceholder = input === "";
27716
27761
  const cursor = cursorVisible ? "\u2588" : " ";
27717
- return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
27718
- /* @__PURE__ */ jsx51(StepHeader, { step: "push" }),
27719
- /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27720
- /* @__PURE__ */ jsxs41(Box41, { gap: 1, children: [
27721
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.accent, children: "?" }),
27762
+ return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", children: [
27763
+ /* @__PURE__ */ jsx53(StepHeader, { step: "push" }),
27764
+ /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27765
+ /* @__PURE__ */ jsxs41(Box40, { gap: 1, children: [
27766
+ /* @__PURE__ */ jsx53(Text43, { color: PALETTE.accent, children: "?" }),
27722
27767
  /* @__PURE__ */ jsxs41(Text43, { bold: true, children: [
27723
27768
  label,
27724
27769
  ":"
27725
27770
  ] }),
27726
- /* @__PURE__ */ jsx51(Text43, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
27727
- /* @__PURE__ */ jsx51(Text43, { children: cursor })
27771
+ /* @__PURE__ */ jsx53(Text43, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
27772
+ /* @__PURE__ */ jsx53(Text43, { children: cursor })
27728
27773
  ] }),
27729
- /* @__PURE__ */ jsx51(
27774
+ /* @__PURE__ */ jsx53(
27730
27775
  ControlHints,
27731
27776
  {
27732
27777
  hints: [
@@ -27741,7 +27786,7 @@ function PathPrompt({
27741
27786
  }
27742
27787
 
27743
27788
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
27744
- import { Box as Box42, Text as Text44 } from "ink";
27789
+ import { Box as Box41, Text as Text44 } from "ink";
27745
27790
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
27746
27791
 
27747
27792
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/produced.ts
@@ -27759,7 +27804,7 @@ function writtenThings({ components, tokens }) {
27759
27804
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
27760
27805
  import { useEffect as useEffect19, useState as useState28 } from "react";
27761
27806
  import { Spinner as Spinner2 } from "@inkjs/ui";
27762
- import { jsx as jsx52 } from "react/jsx-runtime";
27807
+ import { jsx as jsx54 } from "react/jsx-runtime";
27763
27808
  function useTimedSpinner() {
27764
27809
  const [elapsedSeconds, setElapsedSeconds] = useState28(0);
27765
27810
  useEffect19(() => {
@@ -27771,32 +27816,32 @@ function useTimedSpinner() {
27771
27816
  const mins = Math.floor(elapsedSeconds / 60);
27772
27817
  const secs = elapsedSeconds % 60;
27773
27818
  return {
27774
- spinner: /* @__PURE__ */ jsx52(Spinner2, {}),
27819
+ spinner: /* @__PURE__ */ jsx54(Spinner2, {}),
27775
27820
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
27776
27821
  };
27777
27822
  }
27778
27823
 
27779
27824
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
27780
- import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
27825
+ import { jsx as jsx55, jsxs as jsxs42 } from "react/jsx-runtime";
27781
27826
  function PushingStep({ progress, produced }) {
27782
27827
  const { elapsed } = useTimedSpinner();
27783
27828
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
27784
27829
  const showGlobal = progress && progress.kind === "progress";
27785
27830
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
27786
- return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
27787
- /* @__PURE__ */ jsx53(StepHeader, { step: "push" }),
27788
- /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27831
+ return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", children: [
27832
+ /* @__PURE__ */ jsx55(StepHeader, { step: "push" }),
27833
+ /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27789
27834
  /* @__PURE__ */ jsxs42(Text44, { children: [
27790
27835
  "Writing ",
27791
27836
  writtenThings(produced),
27792
27837
  " to your Contentful space..."
27793
27838
  ] }),
27794
- operationId && /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
27795
- /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: "Operation:" }),
27796
- /* @__PURE__ */ jsx53(Text44, { children: operationId })
27839
+ operationId && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
27840
+ /* @__PURE__ */ jsx55(Text44, { color: PALETTE.muted, children: "Operation:" }),
27841
+ /* @__PURE__ */ jsx55(Text44, { children: operationId })
27797
27842
  ] }),
27798
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx53(Box42, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs42(Box42, { gap: 2, children: [
27799
- /* @__PURE__ */ jsx53(Box42, { width: 40, children: /* @__PURE__ */ jsx53(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx53(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
27843
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx55(Box41, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs42(Box41, { gap: 2, children: [
27844
+ /* @__PURE__ */ jsx55(Box41, { width: 40, children: /* @__PURE__ */ jsx55(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx55(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
27800
27845
  /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
27801
27846
  progress.processed,
27802
27847
  "/",
@@ -27804,11 +27849,11 @@ function PushingStep({ progress, produced }) {
27804
27849
  " entities"
27805
27850
  ] })
27806
27851
  ] }) }),
27807
- showCurrent && /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
27808
- /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: "Now processing:" }),
27809
- /* @__PURE__ */ jsx53(Text44, { children: showCurrent })
27852
+ showCurrent && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
27853
+ /* @__PURE__ */ jsx55(Text44, { color: PALETTE.muted, children: "Now processing:" }),
27854
+ /* @__PURE__ */ jsx55(Text44, { children: showCurrent })
27810
27855
  ] }),
27811
- /* @__PURE__ */ jsx53(Box42, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
27856
+ /* @__PURE__ */ jsx55(Box41, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
27812
27857
  "Elapsed: ",
27813
27858
  elapsed
27814
27859
  ] }) })
@@ -27818,7 +27863,7 @@ function PushingStep({ progress, produced }) {
27818
27863
 
27819
27864
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
27820
27865
  import { useEffect as useEffect20, useState as useState29, useMemo as useMemo5 } from "react";
27821
- import { Box as Box43, Text as Text45 } from "ink";
27866
+ import { Box as Box42, Text as Text45 } from "ink";
27822
27867
 
27823
27868
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/preview-diff.ts
27824
27869
  function computeComponentDiffLines(current, proposed, changeClassification) {
@@ -27996,7 +28041,7 @@ function usePreviewConfirmationInput(breakingWithImpact, onConfirm) {
27996
28041
  }
27997
28042
 
27998
28043
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
27999
- import { Fragment as Fragment16, jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
28044
+ import { Fragment as Fragment18, jsx as jsx56, jsxs as jsxs43 } from "react/jsx-runtime";
28000
28045
  function buildPreviewSummaryLines(preview) {
28001
28046
  const lines = [];
28002
28047
  const { components, tokens } = preview;
@@ -28248,11 +28293,11 @@ function WizardPreviewStep({
28248
28293
  return;
28249
28294
  }
28250
28295
  });
28251
- return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
28252
- /* @__PURE__ */ jsx54(StepHeader, { step: "push" }),
28253
- /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
28254
- hasAnything ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
28255
- /* @__PURE__ */ jsx54(Text45, { children: "Here's what will happen in your space:" }),
28296
+ return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
28297
+ /* @__PURE__ */ jsx56(StepHeader, { step: "push" }),
28298
+ /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
28299
+ hasAnything ? /* @__PURE__ */ jsxs43(Fragment18, { children: [
28300
+ /* @__PURE__ */ jsx56(Text45, { children: "Here's what will happen in your space:" }),
28256
28301
  /* @__PURE__ */ jsxs43(
28257
28302
  WindowedPanel,
28258
28303
  {
@@ -28261,15 +28306,15 @@ function WizardPreviewStep({
28261
28306
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
28262
28307
  focused: false,
28263
28308
  children: [
28264
- activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx54(Text45, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
28265
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
28309
+ activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx56(Text45, { color: line.color, wrap: "truncate-end", children: line.text }, line.key)),
28310
+ /* @__PURE__ */ jsx56(Text45, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
28266
28311
  ]
28267
28312
  }
28268
28313
  )
28269
- ] }) : /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
28270
- breakingWithImpact && /* @__PURE__ */ jsx54(Box43, { marginTop: 1, children: /* @__PURE__ */ jsx54(Text45, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
28271
- /* @__PURE__ */ jsx54(SpaceEnvironment, { spaceId, environmentId }),
28272
- /* @__PURE__ */ jsx54(Box43, { marginTop: 1, children: /* @__PURE__ */ jsx54(
28314
+ ] }) : /* @__PURE__ */ jsx56(Text45, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
28315
+ breakingWithImpact && /* @__PURE__ */ jsx56(Box42, { marginTop: 1, children: /* @__PURE__ */ jsx56(Text45, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
28316
+ /* @__PURE__ */ jsx56(SpaceEnvironment, { spaceId, environmentId }),
28317
+ /* @__PURE__ */ jsx56(Box42, { marginTop: 1, children: /* @__PURE__ */ jsx56(
28273
28318
  ControlHints,
28274
28319
  {
28275
28320
  hints: [
@@ -28295,7 +28340,7 @@ function buildRunTeaserLine(runId) {
28295
28340
  }
28296
28341
 
28297
28342
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
28298
- import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
28343
+ import { jsx as jsx57, jsxs as jsxs44 } from "react/jsx-runtime";
28299
28344
  function canEditFromPreview(cdf) {
28300
28345
  if (!cdf) return false;
28301
28346
  return parseCDFComponents(cdf).components.length > 0;
@@ -28312,7 +28357,7 @@ function FlowScreen({
28312
28357
  const content = (() => {
28313
28358
  switch (state2.step) {
28314
28359
  case "final-review":
28315
- return /* @__PURE__ */ jsx55(
28360
+ return /* @__PURE__ */ jsx57(
28316
28361
  GenerateReviewStep,
28317
28362
  {
28318
28363
  extractSessionId: state2.extractSessionId,
@@ -28329,10 +28374,10 @@ function FlowScreen({
28329
28374
  }
28330
28375
  );
28331
28376
  case "previewing":
28332
- return /* @__PURE__ */ jsx55(RunningStep, { step: "push", description: "Computing diff against your Contentful space..." });
28377
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: "Computing diff against your Contentful space..." });
28333
28378
  case "preview-gate":
28334
28379
  if (!state2.serverPreview) return null;
28335
- return /* @__PURE__ */ jsx55(
28380
+ return /* @__PURE__ */ jsx57(
28336
28381
  WizardPreviewStep,
28337
28382
  {
28338
28383
  preview: state2.serverPreview,
@@ -28344,9 +28389,9 @@ function FlowScreen({
28344
28389
  }
28345
28390
  );
28346
28391
  case "pushing":
28347
- return /* @__PURE__ */ jsx55(PushingStep, { progress: state2.pushProgress, produced });
28392
+ return /* @__PURE__ */ jsx57(PushingStep, { progress: state2.pushProgress, produced });
28348
28393
  case "path-prompt":
28349
- return /* @__PURE__ */ jsx55(
28394
+ return /* @__PURE__ */ jsx57(
28350
28395
  PathPrompt,
28351
28396
  {
28352
28397
  defaultPath: state2.outDir,
@@ -28355,10 +28400,10 @@ function FlowScreen({
28355
28400
  }
28356
28401
  );
28357
28402
  case "printing":
28358
- return /* @__PURE__ */ jsx55(RunningStep, { step: "push", description: "Writing output files to disk..." });
28403
+ return /* @__PURE__ */ jsx57(RunningStep, { step: "push", description: "Writing output files to disk..." });
28359
28404
  case "print-gate": {
28360
28405
  const teaser = buildRunTeaserLine(state2.lastRunId);
28361
- return /* @__PURE__ */ jsx55(
28406
+ return /* @__PURE__ */ jsx57(
28362
28407
  GateStep,
28363
28408
  {
28364
28409
  step: "push",
@@ -28373,7 +28418,7 @@ function FlowScreen({
28373
28418
  }
28374
28419
  case "done": {
28375
28420
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
28376
- return /* @__PURE__ */ jsx55(
28421
+ return /* @__PURE__ */ jsx57(
28377
28422
  DoneStep,
28378
28423
  {
28379
28424
  componentTypes: state2.pushResult.componentTypes,
@@ -28390,7 +28435,7 @@ function FlowScreen({
28390
28435
  );
28391
28436
  }
28392
28437
  case "preview-validation-error":
28393
- return /* @__PURE__ */ jsx55(
28438
+ return /* @__PURE__ */ jsx57(
28394
28439
  PreviewValidationErrorScreen,
28395
28440
  {
28396
28441
  errors: state2.previewValidationErrors,
@@ -28401,7 +28446,7 @@ function FlowScreen({
28401
28446
  }
28402
28447
  );
28403
28448
  case "error":
28404
- return /* @__PURE__ */ jsx55(
28449
+ return /* @__PURE__ */ jsx57(
28405
28450
  ErrorStep,
28406
28451
  {
28407
28452
  stepName: state2.errorStep,
@@ -28412,8 +28457,8 @@ function FlowScreen({
28412
28457
  );
28413
28458
  }
28414
28459
  })();
28415
- return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
28416
- /* @__PURE__ */ jsx55(CustomPromptBanner, { generatePromptPath }),
28460
+ return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", children: [
28461
+ /* @__PURE__ */ jsx57(CustomPromptBanner, { generatePromptPath }),
28417
28462
  content
28418
28463
  ] });
28419
28464
  }
@@ -29186,7 +29231,7 @@ function useFlow(start, options = {}) {
29186
29231
 
29187
29232
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
29188
29233
  import { useEffect as useEffect22, useState as useState30 } from "react";
29189
- import { Box as Box45, Text as Text46, useInput as useInput12 } from "ink";
29234
+ import { Box as Box44, Text as Text46, useInput as useInput10 } from "ink";
29190
29235
  init_debug_store();
29191
29236
 
29192
29237
  // packages/experience-design-system-cli/src/tui/help/help-info.ts
@@ -29247,13 +29292,13 @@ async function readHelpInfo() {
29247
29292
  }
29248
29293
 
29249
29294
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
29250
- import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
29295
+ import { Fragment as Fragment19, jsx as jsx58, jsxs as jsxs45 } from "react/jsx-runtime";
29251
29296
  function Section({ title, rows }) {
29252
- return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
29253
- /* @__PURE__ */ jsx56(Text46, { bold: true, color: PALETTE.accent, children: title }),
29254
- rows.map((row) => /* @__PURE__ */ jsxs45(Box45, { gap: 1, children: [
29255
- /* @__PURE__ */ jsx56(Box45, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: row.label }) }),
29256
- /* @__PURE__ */ jsx56(Text46, { children: row.value })
29297
+ return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
29298
+ /* @__PURE__ */ jsx58(Text46, { bold: true, color: PALETTE.accent, children: title }),
29299
+ rows.map((row) => /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
29300
+ /* @__PURE__ */ jsx58(Box44, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text46, { color: PALETTE.muted, children: row.label }) }),
29301
+ /* @__PURE__ */ jsx58(Text46, { children: row.value })
29257
29302
  ] }, row.label))
29258
29303
  ] });
29259
29304
  }
@@ -29267,7 +29312,7 @@ function HelpScreen({ onDone }) {
29267
29312
  void finishDebugRun({ outputs: {}, status: "success", exitMethod });
29268
29313
  onDone();
29269
29314
  };
29270
- useInput12((input, key) => {
29315
+ useInput10((input, key) => {
29271
29316
  if (key.return) {
29272
29317
  leave("saved");
29273
29318
  return;
@@ -29277,14 +29322,14 @@ function HelpScreen({ onDone }) {
29277
29322
  return;
29278
29323
  }
29279
29324
  });
29280
- return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
29281
- /* @__PURE__ */ jsx56(Text46, { bold: true, children: "Help" }),
29282
- info ? /* @__PURE__ */ jsxs45(Fragment17, { children: [
29283
- /* @__PURE__ */ jsx56(Section, { title: "Where things are stored", rows: info.storage }),
29284
- /* @__PURE__ */ jsx56(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
29285
- /* @__PURE__ */ jsx56(Text46, { 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." })
29286
- ] }) : /* @__PURE__ */ jsx56(Text46, { color: PALETTE.accent, children: "Loading..." }),
29287
- /* @__PURE__ */ jsx56(
29325
+ return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
29326
+ /* @__PURE__ */ jsx58(Text46, { bold: true, children: "Help" }),
29327
+ info ? /* @__PURE__ */ jsxs45(Fragment19, { children: [
29328
+ /* @__PURE__ */ jsx58(Section, { title: "Where things are stored", rows: info.storage }),
29329
+ /* @__PURE__ */ jsx58(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
29330
+ /* @__PURE__ */ jsx58(Text46, { 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." })
29331
+ ] }) : /* @__PURE__ */ jsx58(Text46, { color: PALETTE.accent, children: "Loading..." }),
29332
+ /* @__PURE__ */ jsx58(
29288
29333
  ControlHints,
29289
29334
  {
29290
29335
  hints: [
@@ -29298,8 +29343,8 @@ function HelpScreen({ onDone }) {
29298
29343
 
29299
29344
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
29300
29345
  import { useState as useState31 } from "react";
29301
- import { Box as Box46, Text as Text47, useInput as useInput13 } from "ink";
29302
- import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
29346
+ import { Box as Box45, Text as Text47, useInput as useInput11 } from "ink";
29347
+ import { jsx as jsx59, jsxs as jsxs46 } from "react/jsx-runtime";
29303
29348
  function SettingsScreen({
29304
29349
  onNavigate,
29305
29350
  onBack
@@ -29310,7 +29355,7 @@ function SettingsScreen({
29310
29355
  { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
29311
29356
  { label: "Debug Mode", screen: "settings-debug-mode" }
29312
29357
  ];
29313
- useInput13((input, key) => {
29358
+ useInput11((input, key) => {
29314
29359
  if (key.upArrow) {
29315
29360
  setFocusIdx((i) => (i - 1 + items.length) % items.length);
29316
29361
  return;
@@ -29330,15 +29375,15 @@ function SettingsScreen({
29330
29375
  onBack();
29331
29376
  }
29332
29377
  });
29333
- return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29334
- /* @__PURE__ */ jsx57(Text47, { bold: true, children: "Settings" }),
29335
- /* @__PURE__ */ jsx57(Text47, { color: PALETTE.muted, children: " " }),
29378
+ return /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29379
+ /* @__PURE__ */ jsx59(Text47, { bold: true, children: "Settings" }),
29380
+ /* @__PURE__ */ jsx59(Text47, { color: PALETTE.muted, children: " " }),
29336
29381
  items.map((item, i) => /* @__PURE__ */ jsxs46(Text47, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
29337
29382
  i === focusIdx ? "> " : " ",
29338
29383
  item.label
29339
29384
  ] }, item.label)),
29340
- /* @__PURE__ */ jsx57(Text47, { children: " " }),
29341
- /* @__PURE__ */ jsx57(
29385
+ /* @__PURE__ */ jsx59(Text47, { children: " " }),
29386
+ /* @__PURE__ */ jsx59(
29342
29387
  ControlHints,
29343
29388
  {
29344
29389
  hints: [
@@ -29353,11 +29398,11 @@ function SettingsScreen({
29353
29398
 
29354
29399
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
29355
29400
  import { useState as useState35 } from "react";
29356
- import { Box as Box50, Text as Text52, useInput as useInput16 } from "ink";
29401
+ import { Box as Box49, Text as Text52, useInput as useInput14 } from "ink";
29357
29402
 
29358
29403
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
29359
29404
  import { useEffect as useEffect24, useRef as useRef15, useState as useState33 } from "react";
29360
- import { Box as Box48, Text as Text50, useInput as useInput14 } from "ink";
29405
+ import { Box as Box47, Text as Text50, useInput as useInput12 } from "ink";
29361
29406
  init_debug_store();
29362
29407
 
29363
29408
  // packages/experience-design-system-cli/src/tui/settings/shared/debug-trail.ts
@@ -29686,11 +29731,11 @@ async function writeAgentConfig(config) {
29686
29731
 
29687
29732
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
29688
29733
  import { useEffect as useEffect23, useState as useState32 } from "react";
29689
- import { Box as Box47, Text as Text49 } from "ink";
29734
+ import { Box as Box46, Text as Text49 } from "ink";
29690
29735
 
29691
29736
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
29692
29737
  import { Text as Text48 } from "ink";
29693
- import { jsx as jsx58 } from "react/jsx-runtime";
29738
+ import { jsx as jsx60 } from "react/jsx-runtime";
29694
29739
  var TONE_COLOR = {
29695
29740
  ok: PALETTE.success,
29696
29741
  bad: PALETTE.error,
@@ -29702,7 +29747,7 @@ function AgentStatusBadge({
29702
29747
  binary
29703
29748
  }) {
29704
29749
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
29705
- return /* @__PURE__ */ jsx58(Text48, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
29750
+ return /* @__PURE__ */ jsx60(Text48, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
29706
29751
  }
29707
29752
 
29708
29753
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/apply-binary-overrides.ts
@@ -29724,16 +29769,16 @@ function applyBinaryOverrides(config) {
29724
29769
  }
29725
29770
 
29726
29771
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
29727
- import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
29772
+ import { jsx as jsx61, jsxs as jsxs47 } from "react/jsx-runtime";
29728
29773
  var fields = (name) => [
29729
29774
  { key: "binary", label: "Command path", hint: `(empty: \`${AGENT_BINARIES[name]}\` from the PATH)` },
29730
29775
  { key: "model", label: "Model", hint: `(empty: ${defaultModelLabel(name)})` }
29731
29776
  ];
29732
29777
  var INSPECT_DELAY_MS = 400;
29733
29778
  function StatusHeading() {
29734
- return /* @__PURE__ */ jsxs47(Box47, { gap: 1, children: [
29735
- /* @__PURE__ */ jsx59(Text49, { bold: true, color: PALETTE.muted, children: "STATUS" }),
29736
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "\xB7 read only" })
29779
+ return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
29780
+ /* @__PURE__ */ jsx61(Text49, { bold: true, color: PALETTE.muted, children: "STATUS" }),
29781
+ /* @__PURE__ */ jsx61(Text49, { color: PALETTE.muted, children: "\xB7 read only" })
29737
29782
  ] });
29738
29783
  }
29739
29784
  function AgentDetail({
@@ -29796,7 +29841,7 @@ function AgentDetail({
29796
29841
  };
29797
29842
  const formFields = fields(name);
29798
29843
  const labelWidth = formLabelWidth([...formFields, action]);
29799
- return /* @__PURE__ */ jsx59(
29844
+ return /* @__PURE__ */ jsx61(
29800
29845
  FieldForm,
29801
29846
  {
29802
29847
  title: `Settings \u203A Configuration \u203A Agents \u203A ${AGENT_LABELS[name]}`,
@@ -29813,16 +29858,16 @@ function AgentDetail({
29813
29858
  actions: [action],
29814
29859
  notice: testing ? null : notice,
29815
29860
  busy: saving || testing,
29816
- children: /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", marginTop: 1, children: [
29817
- /* @__PURE__ */ jsx59(StatusHeading, {}),
29818
- statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx59(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx59(Text49, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
29861
+ children: /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
29862
+ /* @__PURE__ */ jsx61(StatusHeading, {}),
29863
+ statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx61(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx61(Text49, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
29819
29864
  ] })
29820
29865
  }
29821
29866
  );
29822
29867
  }
29823
29868
 
29824
29869
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
29825
- import { Fragment as Fragment18, jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
29870
+ import { Fragment as Fragment20, jsx as jsx62, jsxs as jsxs48 } from "react/jsx-runtime";
29826
29871
  var NAME_WIDTH = 16;
29827
29872
  var PANEL_LABEL_WIDTH = "Command".length;
29828
29873
  function AgentsScreen({ onDone }) {
@@ -29900,7 +29945,7 @@ function AgentsScreen({ onDone }) {
29900
29945
  setNotice({ kind: "error", text: `Default agent not changed: ${visit.error}` });
29901
29946
  }).finally(() => setSaving(false));
29902
29947
  };
29903
- useInput14((input, key) => {
29948
+ useInput12((input, key) => {
29904
29949
  if (loadError && (key.escape || input === "q")) {
29905
29950
  endVisit(null);
29906
29951
  onDone();
@@ -29932,21 +29977,21 @@ function AgentsScreen({ onDone }) {
29932
29977
  }
29933
29978
  });
29934
29979
  if (!config) {
29935
- return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29936
- /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
29937
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29938
- loadError ? /* @__PURE__ */ jsxs48(Fragment18, { children: [
29980
+ return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29981
+ /* @__PURE__ */ jsx62(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
29982
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
29983
+ loadError ? /* @__PURE__ */ jsxs48(Fragment20, { children: [
29939
29984
  /* @__PURE__ */ jsxs48(Text50, { color: PALETTE.error, children: [
29940
29985
  "\u2717 Could not read the settings: ",
29941
29986
  loadError
29942
29987
  ] }),
29943
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29944
- /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29945
- ] }) : /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "Loading..." })
29988
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
29989
+ /* @__PURE__ */ jsx62(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29990
+ ] }) : /* @__PURE__ */ jsx62(Text50, { color: PALETTE.accent, children: "Loading..." })
29946
29991
  ] });
29947
29992
  }
29948
29993
  if (open) {
29949
- return /* @__PURE__ */ jsx60(
29994
+ return /* @__PURE__ */ jsx62(
29950
29995
  AgentDetail,
29951
29996
  {
29952
29997
  name: open,
@@ -29967,48 +30012,48 @@ function AgentsScreen({ onDone }) {
29967
30012
  );
29968
30013
  }
29969
30014
  const focusedAgent = AGENT_NAMES[focus];
29970
- return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29971
- /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
29972
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29973
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
29974
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29975
- /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
29976
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "Default agent" }),
29977
- /* @__PURE__ */ jsx60(Text50, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
29978
- saving && /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "\u2026 saving" })
30015
+ return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30016
+ /* @__PURE__ */ jsx62(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
30017
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30018
+ /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
30019
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30020
+ /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
30021
+ /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: "Default agent" }),
30022
+ /* @__PURE__ */ jsx62(Text50, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
30023
+ saving && /* @__PURE__ */ jsx62(Text50, { color: PALETTE.accent, children: "\u2026 saving" })
29979
30024
  ] }),
29980
- /* @__PURE__ */ jsxs48(Box48, { marginTop: 1, gap: 1, children: [
29981
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29982
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29983
- /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "AGENT" }) }),
29984
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "STATUS" })
30025
+ /* @__PURE__ */ jsxs48(Box47, { marginTop: 1, gap: 1, children: [
30026
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30027
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30028
+ /* @__PURE__ */ jsx62(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: "AGENT" }) }),
30029
+ /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: "STATUS" })
29985
30030
  ] }),
29986
30031
  AGENT_NAMES.map((name) => {
29987
30032
  const isFocused = focusedAgent === name;
29988
- return /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
29989
- /* @__PURE__ */ jsx60(Text50, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
29990
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
29991
- /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
29992
- /* @__PURE__ */ jsx60(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
30033
+ return /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
30034
+ /* @__PURE__ */ jsx62(Text50, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
30035
+ /* @__PURE__ */ jsx62(Text50, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
30036
+ /* @__PURE__ */ jsx62(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text50, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
30037
+ /* @__PURE__ */ jsx62(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
29993
30038
  ] }, name);
29994
30039
  }),
29995
- /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", marginTop: 1, children: [
29996
- /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
29997
- panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs48(Box48, { gap: 1, paddingLeft: 1, children: [
29998
- /* @__PURE__ */ jsx60(Box48, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: row.label }) }),
29999
- /* @__PURE__ */ jsx60(Text50, { color: TONE_COLOR[row.tone], children: row.value })
30040
+ /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", marginTop: 1, children: [
30041
+ /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
30042
+ panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs48(Box47, { gap: 1, paddingLeft: 1, children: [
30043
+ /* @__PURE__ */ jsx62(Box47, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text50, { color: PALETTE.muted, children: row.label }) }),
30044
+ /* @__PURE__ */ jsx62(Text50, { color: TONE_COLOR[row.tone], children: row.value })
30000
30045
  ] }, row.label))
30001
30046
  ] }),
30002
- notice && /* @__PURE__ */ jsxs48(Fragment18, { children: [
30003
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
30047
+ notice && /* @__PURE__ */ jsxs48(Fragment20, { children: [
30048
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30004
30049
  /* @__PURE__ */ jsxs48(Text50, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
30005
30050
  notice.kind === "success" ? "\u2713" : "\u2717",
30006
30051
  " ",
30007
30052
  notice.text
30008
30053
  ] })
30009
30054
  ] }),
30010
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
30011
- /* @__PURE__ */ jsx60(
30055
+ /* @__PURE__ */ jsx62(Text50, { children: " " }),
30056
+ /* @__PURE__ */ jsx62(
30012
30057
  ControlHints,
30013
30058
  {
30014
30059
  hints: [
@@ -30024,7 +30069,7 @@ function AgentsScreen({ onDone }) {
30024
30069
 
30025
30070
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
30026
30071
  import { useEffect as useEffect25, useRef as useRef16, useState as useState34 } from "react";
30027
- import { Box as Box49, Text as Text51, useInput as useInput15 } from "ink";
30072
+ import { Box as Box48, Text as Text51, useInput as useInput13 } from "ink";
30028
30073
  init_debug_store();
30029
30074
 
30030
30075
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/project-store.ts
@@ -30053,7 +30098,7 @@ async function writeCredentials(config) {
30053
30098
  }
30054
30099
 
30055
30100
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
30056
- import { Fragment as Fragment19, jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
30101
+ import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs49 } from "react/jsx-runtime";
30057
30102
  var FIELDS3 = [
30058
30103
  { key: "spaceId", label: "Space ID" },
30059
30104
  { key: "environmentId", label: "Environment ID" },
@@ -30126,24 +30171,24 @@ function ProjectScreen({ onDone }) {
30126
30171
  exitMethod: change.changed ? "saved" : "discarded"
30127
30172
  });
30128
30173
  };
30129
- useInput15((input, key) => {
30174
+ useInput13((input, key) => {
30130
30175
  if (!config && loadError && (key.escape || input === "q")) {
30131
30176
  endVisit(null);
30132
30177
  onDone();
30133
30178
  }
30134
30179
  });
30135
30180
  if (!config) {
30136
- return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30137
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
30138
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
30139
- loadError ? /* @__PURE__ */ jsxs49(Fragment19, { children: [
30181
+ return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30182
+ /* @__PURE__ */ jsx63(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
30183
+ /* @__PURE__ */ jsx63(Text51, { children: " " }),
30184
+ loadError ? /* @__PURE__ */ jsxs49(Fragment21, { children: [
30140
30185
  /* @__PURE__ */ jsxs49(Text51, { color: PALETTE.error, children: [
30141
30186
  "\u2717 Could not read the settings: ",
30142
30187
  loadError
30143
30188
  ] }),
30144
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
30145
- /* @__PURE__ */ jsx61(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
30146
- ] }) : /* @__PURE__ */ jsx61(Text51, { color: PALETTE.accent, children: "Loading..." })
30189
+ /* @__PURE__ */ jsx63(Text51, { children: " " }),
30190
+ /* @__PURE__ */ jsx63(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
30191
+ ] }) : /* @__PURE__ */ jsx63(Text51, { color: PALETTE.accent, children: "Loading..." })
30147
30192
  ] });
30148
30193
  }
30149
30194
  const save = () => {
@@ -30164,7 +30209,7 @@ function ProjectScreen({ onDone }) {
30164
30209
  endVisit(config);
30165
30210
  onDone();
30166
30211
  };
30167
- return /* @__PURE__ */ jsx61(
30212
+ return /* @__PURE__ */ jsx63(
30168
30213
  FieldForm,
30169
30214
  {
30170
30215
  title: "Settings \u203A Configuration \u203A Project",
@@ -30186,7 +30231,7 @@ function ProjectScreen({ onDone }) {
30186
30231
  }
30187
30232
 
30188
30233
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
30189
- import { jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
30234
+ import { jsx as jsx64, jsxs as jsxs50 } from "react/jsx-runtime";
30190
30235
  var SECTIONS = [
30191
30236
  {
30192
30237
  id: "project",
@@ -30199,7 +30244,7 @@ function ConfigurationScreen({ onDone }) {
30199
30244
  const [focus, setFocus] = useState35(0);
30200
30245
  const [open, setOpen] = useState35(null);
30201
30246
  const close = () => setOpen(null);
30202
- useInput16((input, key) => {
30247
+ useInput14((input, key) => {
30203
30248
  if (open) return;
30204
30249
  if (key.upArrow) {
30205
30250
  setFocus((i) => (i - 1 + SECTIONS.length) % SECTIONS.length);
@@ -30215,18 +30260,18 @@ function ConfigurationScreen({ onDone }) {
30215
30260
  }
30216
30261
  if (key.escape || input === "q") onDone();
30217
30262
  });
30218
- if (open === "project") return /* @__PURE__ */ jsx62(ProjectScreen, { onDone: close });
30219
- if (open === "agents") return /* @__PURE__ */ jsx62(AgentsScreen, { onDone: close });
30220
- return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30221
- /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration" }),
30222
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
30223
- SECTIONS.map((section, index) => /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
30224
- /* @__PURE__ */ jsx62(Text52, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
30225
- /* @__PURE__ */ jsx62(Box50, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
30226
- /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: section.description })
30263
+ if (open === "project") return /* @__PURE__ */ jsx64(ProjectScreen, { onDone: close });
30264
+ if (open === "agents") return /* @__PURE__ */ jsx64(AgentsScreen, { onDone: close });
30265
+ return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30266
+ /* @__PURE__ */ jsx64(Text52, { bold: true, children: "Settings \u203A Configuration" }),
30267
+ /* @__PURE__ */ jsx64(Text52, { children: " " }),
30268
+ SECTIONS.map((section, index) => /* @__PURE__ */ jsxs50(Box49, { gap: 1, children: [
30269
+ /* @__PURE__ */ jsx64(Text52, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
30270
+ /* @__PURE__ */ jsx64(Box49, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx64(Text52, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
30271
+ /* @__PURE__ */ jsx64(Text52, { color: PALETTE.muted, children: section.description })
30227
30272
  ] }, section.id)),
30228
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
30229
- /* @__PURE__ */ jsx62(
30273
+ /* @__PURE__ */ jsx64(Text52, { children: " " }),
30274
+ /* @__PURE__ */ jsx64(
30230
30275
  ControlHints,
30231
30276
  {
30232
30277
  hints: [
@@ -30241,7 +30286,7 @@ function ConfigurationScreen({ onDone }) {
30241
30286
 
30242
30287
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
30243
30288
  import { useEffect as useEffect26, useState as useState36 } from "react";
30244
- import { Box as Box51, Text as Text53, useInput as useInput17 } from "ink";
30289
+ import { Box as Box50, Text as Text53, useInput as useInput15 } from "ink";
30245
30290
 
30246
30291
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
30247
30292
  async function readAnalyticsSetting() {
@@ -30260,7 +30305,7 @@ async function writeAnalyticsSetting(setting) {
30260
30305
 
30261
30306
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
30262
30307
  init_debug_store();
30263
- import { Fragment as Fragment20, jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
30308
+ import { Fragment as Fragment22, jsx as jsx65, jsxs as jsxs51 } from "react/jsx-runtime";
30264
30309
  function OptInAnalyticsScreen({ onDone }) {
30265
30310
  const [loading, setLoading] = useState36(true);
30266
30311
  const [enabled, setEnabled] = useState36(true);
@@ -30276,7 +30321,7 @@ function OptInAnalyticsScreen({ onDone }) {
30276
30321
  });
30277
30322
  });
30278
30323
  }, []);
30279
- useInput17((input, key) => {
30324
+ useInput15((input, key) => {
30280
30325
  if (loading) return;
30281
30326
  if (key.return || input === " ") {
30282
30327
  setEnabled((current) => {
@@ -30291,21 +30336,21 @@ function OptInAnalyticsScreen({ onDone }) {
30291
30336
  onDone();
30292
30337
  }
30293
30338
  });
30294
- return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30295
- /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
30296
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
30297
- loading ? /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs51(Fragment20, { children: [
30339
+ return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30340
+ /* @__PURE__ */ jsx65(Text53, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
30341
+ /* @__PURE__ */ jsx65(Text53, { children: " " }),
30342
+ loading ? /* @__PURE__ */ jsx65(Text53, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs51(Fragment22, { children: [
30298
30343
  /* @__PURE__ */ jsxs51(Text53, { children: [
30299
30344
  "Share anonymous usage data:",
30300
30345
  " ",
30301
- /* @__PURE__ */ jsx63(Text53, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
30346
+ /* @__PURE__ */ jsx65(Text53, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
30302
30347
  ] }),
30303
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
30304
- /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
30305
- /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
30348
+ /* @__PURE__ */ jsx65(Text53, { children: " " }),
30349
+ /* @__PURE__ */ jsx65(Text53, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
30350
+ /* @__PURE__ */ jsx65(Text53, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
30306
30351
  ] }),
30307
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
30308
- /* @__PURE__ */ jsx63(
30352
+ /* @__PURE__ */ jsx65(Text53, { children: " " }),
30353
+ /* @__PURE__ */ jsx65(
30309
30354
  ControlHints,
30310
30355
  {
30311
30356
  hints: [
@@ -30319,10 +30364,10 @@ function OptInAnalyticsScreen({ onDone }) {
30319
30364
 
30320
30365
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
30321
30366
  import { useEffect as useEffect27, useRef as useRef17, useState as useState37 } from "react";
30322
- import { Box as Box52, Text as Text54, useInput as useInput18 } from "ink";
30367
+ import { Box as Box51, Text as Text54, useInput as useInput16 } from "ink";
30323
30368
  init_debug_mode_store();
30324
30369
  init_debug_store();
30325
- import { Fragment as Fragment21, jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
30370
+ import { Fragment as Fragment23, jsx as jsx66, jsxs as jsxs52 } from "react/jsx-runtime";
30326
30371
  var ROWS = ["enabled", "retentionDays"];
30327
30372
  var snapshotOf2 = (setting) => ({
30328
30373
  enabled: String(setting.enabled),
@@ -30376,7 +30421,7 @@ function DebugModeScreen({ onDone }) {
30376
30421
  exitMethod: change.changed ? "saved" : "discarded"
30377
30422
  });
30378
30423
  };
30379
- useInput18((input, key) => {
30424
+ useInput16((input, key) => {
30380
30425
  if (!setting) return;
30381
30426
  if (key.upArrow || key.downArrow) {
30382
30427
  setFocus((current) => ROWS[(ROWS.indexOf(current) + (key.downArrow ? 1 : ROWS.length - 1)) % ROWS.length]);
@@ -30403,24 +30448,24 @@ function DebugModeScreen({ onDone }) {
30403
30448
  onDone();
30404
30449
  }
30405
30450
  });
30406
- const marker = (row) => /* @__PURE__ */ jsx64(Text54, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
30407
- const label = (row, text) => /* @__PURE__ */ jsx64(Text54, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
30408
- return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30409
- /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Debug Mode" }),
30410
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
30411
- setting ? /* @__PURE__ */ jsxs52(Fragment21, { children: [
30412
- /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
30451
+ const marker = (row) => /* @__PURE__ */ jsx66(Text54, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
30452
+ const label = (row, text) => /* @__PURE__ */ jsx66(Text54, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
30453
+ return /* @__PURE__ */ jsxs52(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
30454
+ /* @__PURE__ */ jsx66(Text54, { bold: true, children: "Settings \u203A Debug Mode" }),
30455
+ /* @__PURE__ */ jsx66(Text54, { children: " " }),
30456
+ setting ? /* @__PURE__ */ jsxs52(Fragment23, { children: [
30457
+ /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
30413
30458
  marker("enabled"),
30414
30459
  label("enabled", "Debug logging:"),
30415
- /* @__PURE__ */ jsx64(Text54, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
30460
+ /* @__PURE__ */ jsx66(Text54, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
30416
30461
  ] }),
30417
- /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
30462
+ /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
30418
30463
  marker("retentionDays"),
30419
30464
  label("retentionDays", "Delete logs after:"),
30420
30465
  RETENTION_CHOICES.map((days) => {
30421
30466
  const highlighted = focus === "retentionDays" && days === pending;
30422
30467
  const saved = days === setting.retentionDays;
30423
- return /* @__PURE__ */ jsx64(
30468
+ return /* @__PURE__ */ jsx66(
30424
30469
  Text54,
30425
30470
  {
30426
30471
  bold: highlighted || saved,
@@ -30432,15 +30477,15 @@ function DebugModeScreen({ onDone }) {
30432
30477
  );
30433
30478
  })
30434
30479
  ] }),
30435
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
30480
+ /* @__PURE__ */ jsx66(Text54, { children: " " }),
30436
30481
  notice ? /* @__PURE__ */ jsxs52(Text54, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
30437
30482
  notice.kind === "success" ? "\u2713" : "\u2717",
30438
30483
  " ",
30439
30484
  notice.text
30440
- ] }) : /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
30441
- ] }) : /* @__PURE__ */ jsx64(Text54, { color: PALETTE.muted, children: "Loading\u2026" }),
30442
- /* @__PURE__ */ jsx64(Text54, { children: " " }),
30443
- /* @__PURE__ */ jsx64(
30485
+ ] }) : /* @__PURE__ */ jsx66(Text54, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
30486
+ ] }) : /* @__PURE__ */ jsx66(Text54, { color: PALETTE.muted, children: "Loading\u2026" }),
30487
+ /* @__PURE__ */ jsx66(Text54, { children: " " }),
30488
+ /* @__PURE__ */ jsx66(
30444
30489
  ControlHints,
30445
30490
  {
30446
30491
  hints: [
@@ -30457,7 +30502,7 @@ function DebugModeScreen({ onDone }) {
30457
30502
  }
30458
30503
 
30459
30504
  // packages/experience-design-system-cli/app.tsx
30460
- import { Fragment as Fragment22, jsx as jsx65 } from "react/jsx-runtime";
30505
+ import { Fragment as Fragment24, jsx as jsx67 } from "react/jsx-runtime";
30461
30506
  function App({ importOptions, inkClear }) {
30462
30507
  const [screen, setScreen] = useState38("start");
30463
30508
  const [importExitCode, setImportExitCode] = useState38();
@@ -30648,9 +30693,9 @@ function App({ importOptions, inkClear }) {
30648
30693
  };
30649
30694
  switch (screen) {
30650
30695
  case "import":
30651
- if (showImportResult) return /* @__PURE__ */ jsx65(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
30696
+ if (showImportResult) return /* @__PURE__ */ jsx67(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
30652
30697
  if (flow && flowStart) {
30653
- return /* @__PURE__ */ jsx65(
30698
+ return /* @__PURE__ */ jsx67(
30654
30699
  FlowScreen,
30655
30700
  {
30656
30701
  state: flow.state,
@@ -30660,15 +30705,15 @@ function App({ importOptions, inkClear }) {
30660
30705
  }
30661
30706
  );
30662
30707
  }
30663
- if (importDefaults === void 0) return /* @__PURE__ */ jsx65(Fragment22, {});
30708
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx67(Fragment24, {});
30664
30709
  if (target === void 0) {
30665
- return /* @__PURE__ */ jsx65(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
30710
+ return /* @__PURE__ */ jsx67(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
30666
30711
  }
30667
30712
  const inputStep = currentInputStep(target, answers);
30668
30713
  if (!extractionRun && !tokensOnlyRun && inputStep !== "credentials") {
30669
30714
  switch (inputStep) {
30670
30715
  case "project":
30671
- return /* @__PURE__ */ jsx65(
30716
+ return /* @__PURE__ */ jsx67(
30672
30717
  WelcomeScreen,
30673
30718
  {
30674
30719
  onContinue: (projectPath) => answer({ projectPath }),
@@ -30677,7 +30722,7 @@ function App({ importOptions, inkClear }) {
30677
30722
  }
30678
30723
  );
30679
30724
  case "token-file":
30680
- return /* @__PURE__ */ jsx65(
30725
+ return /* @__PURE__ */ jsx67(
30681
30726
  TokenInputScreen,
30682
30727
  {
30683
30728
  initialPath: importDefaults.tokenFile,
@@ -30686,7 +30731,7 @@ function App({ importOptions, inkClear }) {
30686
30731
  }
30687
30732
  );
30688
30733
  case "path-validation":
30689
- return /* @__PURE__ */ jsx65(
30734
+ return /* @__PURE__ */ jsx67(
30690
30735
  PathValidationScreen,
30691
30736
  {
30692
30737
  projectPath: answers.projectPath ?? "",
@@ -30700,9 +30745,9 @@ function App({ importOptions, inkClear }) {
30700
30745
  }
30701
30746
  if (tokensOnlyRun) {
30702
30747
  if (tokensOnly?.status === "done" && !tokensOnly.result.ok) {
30703
- return /* @__PURE__ */ jsx65(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
30748
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
30704
30749
  }
30705
- return /* @__PURE__ */ jsx65(
30750
+ return /* @__PURE__ */ jsx67(
30706
30751
  RunningStep,
30707
30752
  {
30708
30753
  step: "generation",
@@ -30713,19 +30758,19 @@ function App({ importOptions, inkClear }) {
30713
30758
  }
30714
30759
  if (extractionRun) {
30715
30760
  if (extraction?.status === "done" && !extraction.result.ok) {
30716
- return /* @__PURE__ */ jsx65(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
30761
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
30717
30762
  }
30718
30763
  if (extraction?.status === "running") {
30719
- return /* @__PURE__ */ jsx65(ExtractionScreen, { progress: extraction.progress, agent: extractionRun.input.agent });
30764
+ return /* @__PURE__ */ jsx67(ExtractionScreen, { progress: extraction.progress, agent: extractionRun.input.agent });
30720
30765
  }
30721
- return /* @__PURE__ */ jsx65(Fragment22, {});
30766
+ return /* @__PURE__ */ jsx67(Fragment24, {});
30722
30767
  }
30723
30768
  if (scopeRun && scopeFlow) {
30724
30769
  if (scopeFlow.status === "failed") {
30725
- return /* @__PURE__ */ jsx65(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
30770
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
30726
30771
  }
30727
30772
  if (scopeFlow.status === "deciding") {
30728
- return /* @__PURE__ */ jsx65(
30773
+ return /* @__PURE__ */ jsx67(
30729
30774
  ScopeGateScreen,
30730
30775
  {
30731
30776
  components: scopeFlow.load.components,
@@ -30735,10 +30780,10 @@ function App({ importOptions, inkClear }) {
30735
30780
  );
30736
30781
  }
30737
30782
  if (generation?.status === "done" && !generation.result.ok) {
30738
- return /* @__PURE__ */ jsx65(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
30783
+ return /* @__PURE__ */ jsx67(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
30739
30784
  }
30740
30785
  if (generation?.status === "running") {
30741
- return /* @__PURE__ */ jsx65(
30786
+ return /* @__PURE__ */ jsx67(
30742
30787
  GenerationScreen,
30743
30788
  {
30744
30789
  progress: generation.progress,
@@ -30748,9 +30793,9 @@ function App({ importOptions, inkClear }) {
30748
30793
  }
30749
30794
  );
30750
30795
  }
30751
- return /* @__PURE__ */ jsx65(Fragment22, {});
30796
+ return /* @__PURE__ */ jsx67(Fragment24, {});
30752
30797
  }
30753
- return /* @__PURE__ */ jsx65(
30798
+ return /* @__PURE__ */ jsx67(
30754
30799
  CredentialsScreen,
30755
30800
  {
30756
30801
  initial: importDefaults.credentials,
@@ -30760,17 +30805,17 @@ function App({ importOptions, inkClear }) {
30760
30805
  }
30761
30806
  );
30762
30807
  case "help":
30763
- return /* @__PURE__ */ jsx65(HelpScreen, { onDone: goToStart });
30808
+ return /* @__PURE__ */ jsx67(HelpScreen, { onDone: goToStart });
30764
30809
  case "settings":
30765
- return /* @__PURE__ */ jsx65(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
30810
+ return /* @__PURE__ */ jsx67(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
30766
30811
  case "settings-configuration":
30767
- return /* @__PURE__ */ jsx65(ConfigurationScreen, { onDone: goToSettings });
30812
+ return /* @__PURE__ */ jsx67(ConfigurationScreen, { onDone: goToSettings });
30768
30813
  case "settings-opt-in-analytics":
30769
- return /* @__PURE__ */ jsx65(OptInAnalyticsScreen, { onDone: goToSettings });
30814
+ return /* @__PURE__ */ jsx67(OptInAnalyticsScreen, { onDone: goToSettings });
30770
30815
  case "settings-debug-mode":
30771
- return /* @__PURE__ */ jsx65(DebugModeScreen, { onDone: goToSettings });
30816
+ return /* @__PURE__ */ jsx67(DebugModeScreen, { onDone: goToSettings });
30772
30817
  case "start":
30773
- return /* @__PURE__ */ jsx65(HomeScreen, { onNavigate: setScreen });
30818
+ return /* @__PURE__ */ jsx67(HomeScreen, { onNavigate: setScreen });
30774
30819
  }
30775
30820
  }
30776
30821
  async function runApp(renderApp, importOptions) {
@@ -30778,7 +30823,7 @@ async function runApp(renderApp, importOptions) {
30778
30823
  instance.clear?.();
30779
30824
  process.stdout.write("\x1B[H\x1B[0J");
30780
30825
  };
30781
- const instance = renderApp(/* @__PURE__ */ jsx65(App, { importOptions, inkClear }));
30826
+ const instance = renderApp(/* @__PURE__ */ jsx67(App, { importOptions, inkClear }));
30782
30827
  await instance.waitUntilExit();
30783
30828
  }
30784
30829
  export {