@contentful/experience-design-system-cli 2.37.1-dev-build-8a9493aa.0 → 2.37.1-dev-build-25425992.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
@@ -2519,7 +2519,7 @@ function ControlHints({ hints }) {
2519
2519
  // packages/experience-design-system-cli/src/tui/home/home.tsx
2520
2520
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
2521
2521
  var VERSION = readPackageVersion();
2522
- var HEADING = "Contentful Experiences";
2522
+ var HEADING = "Design System Import";
2523
2523
  var MIN_TERMINAL_WIDTH = 164;
2524
2524
  var START_ITEMS = [
2525
2525
  { label: "Import", screen: "import" },
@@ -2849,6 +2849,7 @@ function StepHeader({ step }) {
2849
2849
  {
2850
2850
  justifyContent: "space-between",
2851
2851
  paddingX: 2,
2852
+ paddingTop: 1,
2852
2853
  marginBottom: 1,
2853
2854
  borderStyle: "single",
2854
2855
  borderColor: PALETTE.border,
@@ -3120,17 +3121,19 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
3120
3121
  const path5 = toProjectPath(value);
3121
3122
  if (path5) onContinue(path5);
3122
3123
  };
3123
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
3124
- /* @__PURE__ */ jsx11(Text10, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
3125
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
3126
- /* @__PURE__ */ jsx11(Text10, { children: "Where is your component library?" }),
3127
- /* @__PURE__ */ jsxs10(Box10, { children: [
3128
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "? " }),
3129
- /* @__PURE__ */ jsx11(Text10, { children: "Project path: " }),
3130
- /* @__PURE__ */ jsx11(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3131
- ] })
3132
- ] }),
3133
- /* @__PURE__ */ jsx11(Box10, { children: /* @__PURE__ */ jsx11(ControlHints, { hints: WELCOME_CONTROLS }) })
3124
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
3125
+ /* @__PURE__ */ jsx11(StepHeader, { step: "setup" }),
3126
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
3127
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
3128
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.text, children: "Where is your component library?" }),
3129
+ /* @__PURE__ */ jsxs10(Box10, { children: [
3130
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "? " }),
3131
+ /* @__PURE__ */ jsx11(Text10, { children: "Project path: " }),
3132
+ /* @__PURE__ */ jsx11(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3133
+ ] })
3134
+ ] }),
3135
+ /* @__PURE__ */ jsx11(Box10, { children: /* @__PURE__ */ jsx11(ControlHints, { hints: WELCOME_CONTROLS }) })
3136
+ ] })
3134
3137
  ] });
3135
3138
  }
3136
3139
 
@@ -17210,7 +17213,7 @@ function PathValidationScreen({
17210
17213
 
17211
17214
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
17212
17215
  import { useRef as useRef2, useState as useState9 } from "react";
17213
- import { Text as Text14 } from "ink";
17216
+ import { Box as Box14, Text as Text14, useInput as useInput11 } from "ink";
17214
17217
 
17215
17218
  // packages/experience-design-system-cli/src/tui/shared/components/FieldForm.tsx
17216
17219
  import { useState as useState8 } from "react";
@@ -17239,6 +17242,9 @@ function FieldForm({
17239
17242
  onChange,
17240
17243
  onSave,
17241
17244
  saveLabel = "save",
17245
+ enterAdvances = false,
17246
+ onSkip,
17247
+ skipLabel: skipLabel2 = "skip",
17242
17248
  onQuit,
17243
17249
  quitLabel = "back without saving",
17244
17250
  actions = [],
@@ -17270,6 +17276,10 @@ function FieldForm({
17270
17276
  onSave();
17271
17277
  return;
17272
17278
  }
17279
+ if (input === "k" && onSkip) {
17280
+ onSkip();
17281
+ return;
17282
+ }
17273
17283
  if (isClearKey(input, key) && currentField) {
17274
17284
  onChange(currentField.key, "");
17275
17285
  return;
@@ -17291,6 +17301,21 @@ function FieldForm({
17291
17301
  }
17292
17302
  }
17293
17303
  });
17304
+ const isLastField = active === fields2.length - 1;
17305
+ const submitField = () => {
17306
+ if (!enterAdvances) {
17307
+ setEditing(false);
17308
+ return;
17309
+ }
17310
+ if (isLastField) {
17311
+ setEditing(false);
17312
+ onSave();
17313
+ return;
17314
+ }
17315
+ const next = fields2[active + 1];
17316
+ setValueBeforeEdit(values[next.key]);
17317
+ setActive(active + 1);
17318
+ };
17294
17319
  const pointer = (isActive) => /* @__PURE__ */ jsx14(Text13, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
17295
17320
  return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", children: [
17296
17321
  header,
@@ -17312,7 +17337,7 @@ function FieldForm({
17312
17337
  {
17313
17338
  value,
17314
17339
  onChange: (next) => onChange(field.key, next),
17315
- onSubmit: () => setEditing(false),
17340
+ onSubmit: submitField,
17316
17341
  mask: field.masked ? "\u2022" : void 0
17317
17342
  }
17318
17343
  ) : display ? /* @__PURE__ */ jsx14(Text13, { bold: true, children: display }) : (
@@ -17348,7 +17373,7 @@ function FieldForm({
17348
17373
  hints: editing ? [
17349
17374
  { keys: "type", label: "edit" },
17350
17375
  { keys: "\u2190/\u2192", label: "move cursor" },
17351
- { keys: "\u23CE", label: "done" },
17376
+ { keys: "\u23CE", label: enterAdvances ? isLastField ? saveLabel : "next" : "done" },
17352
17377
  { keys: "Ctrl+D", label: "clear" },
17353
17378
  { keys: "Esc", label: "cancel edit" }
17354
17379
  ] : [
@@ -17356,6 +17381,7 @@ function FieldForm({
17356
17381
  { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
17357
17382
  ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
17358
17383
  { keys: "s", label: saveLabel },
17384
+ ...onSkip ? [{ keys: "k", label: skipLabel2 }] : [],
17359
17385
  { keys: "Esc/q", label: quitLabel }
17360
17386
  ]
17361
17387
  }
@@ -17427,6 +17453,75 @@ var FIELDS2 = [
17427
17453
  { key: "cmaToken", label: "CMA Token", masked: true },
17428
17454
  { key: "host", label: "API Host", hint: "(default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com)" }
17429
17455
  ];
17456
+ var MENU = [
17457
+ { choice: "continue", label: "Continue", description: "Check the credentials and go on" },
17458
+ { choice: "edit", label: "Edit", description: "Change the credentials" },
17459
+ { choice: "skip", label: "Skip", description: "Save files only, nothing is pushed" },
17460
+ { choice: "quit", label: "Quit", description: "Go back" }
17461
+ ];
17462
+ function CredentialsReview({
17463
+ values,
17464
+ subtitle,
17465
+ notice,
17466
+ validating,
17467
+ onChoose,
17468
+ children
17469
+ }) {
17470
+ const [focus, setFocus] = useState9(0);
17471
+ useInput11((_input, key) => {
17472
+ if (validating) return;
17473
+ if (key.escape) onChoose("quit");
17474
+ else if (key.return) onChoose(MENU[focus].choice);
17475
+ else if (key.upArrow) setFocus((current) => (current - 1 + MENU.length) % MENU.length);
17476
+ else if (key.downArrow || key.tab) setFocus((current) => (current + 1) % MENU.length);
17477
+ });
17478
+ const labelWidth = formLabelWidth([...FIELDS2, ...MENU]);
17479
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
17480
+ /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
17481
+ /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", paddingX: 2, paddingBottom: 1, children: [
17482
+ /* @__PURE__ */ jsx15(Text14, { bold: true, children: "Contentful Credentials" }),
17483
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17484
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: subtitle }),
17485
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17486
+ MENU.map((item, index) => {
17487
+ const focused = index === focus;
17488
+ return /* @__PURE__ */ jsxs14(Box14, { gap: 1, children: [
17489
+ /* @__PURE__ */ jsx15(Text14, { color: focused ? PALETTE.accent : void 0, children: focused ? "\u276F" : " " }),
17490
+ /* @__PURE__ */ jsx15(Box14, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx15(Text14, { bold: focused, color: focused ? PALETTE.accent : PALETTE.muted, children: item.label }) }),
17491
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: item.description })
17492
+ ] }, item.choice);
17493
+ }),
17494
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17495
+ FIELDS2.map((field) => {
17496
+ const value = values[field.key];
17497
+ 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);
17498
+ }),
17499
+ notice && /* @__PURE__ */ jsxs14(Fragment2, { children: [
17500
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17501
+ /* @__PURE__ */ jsxs14(Text14, { color: PALETTE.error, children: [
17502
+ "\u2717 ",
17503
+ notice.text
17504
+ ] })
17505
+ ] }),
17506
+ validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
17507
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17508
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
17509
+ ] }),
17510
+ children,
17511
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17512
+ /* @__PURE__ */ jsx15(
17513
+ ControlHints,
17514
+ {
17515
+ hints: [
17516
+ { keys: "\u2191/\u2193", label: "move" },
17517
+ { keys: "\u23CE", label: MENU[focus].label.toLowerCase() },
17518
+ { keys: "Esc", label: "back" }
17519
+ ]
17520
+ }
17521
+ )
17522
+ ] })
17523
+ ] });
17524
+ }
17430
17525
  function CredentialsScreen({
17431
17526
  onDone,
17432
17527
  onBack,
@@ -17446,6 +17541,7 @@ function CredentialsScreen({
17446
17541
  const [notice, setNotice] = useState9(null);
17447
17542
  const [validating, setValidating] = useState9(false);
17448
17543
  const prefilled = initialValues.spaceId !== "" && initialValues.cmaToken !== "";
17544
+ const [editing, setEditing] = useState9(!prefilled);
17449
17545
  const submit = async () => {
17450
17546
  const credentials = normalize(values);
17451
17547
  if (missingField(credentials)) {
@@ -17458,38 +17554,38 @@ function CredentialsScreen({
17458
17554
  if (result.ok) onDone({ skipped: false, credentials });
17459
17555
  else setNotice({ kind: "error", text: result.error });
17460
17556
  };
17557
+ const subtitle = prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into.";
17558
+ const choose = (choice) => {
17559
+ if (choice === "continue") void submit();
17560
+ else if (choice === "edit") {
17561
+ setNotice(null);
17562
+ setEditing(true);
17563
+ } else if (choice === "skip") onDone({ skipped: true });
17564
+ else onBack();
17565
+ };
17566
+ if (!editing) {
17567
+ return /* @__PURE__ */ jsx15(CredentialsReview, { values, subtitle, notice, validating, onChoose: choose, children: !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment2, { children: [
17568
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17569
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
17570
+ ] }) });
17571
+ }
17461
17572
  return /* @__PURE__ */ jsxs14(
17462
17573
  FieldForm,
17463
17574
  {
17464
17575
  header: /* @__PURE__ */ jsx15(StepHeader, { step: "setup" }),
17465
17576
  title: "Contentful Credentials",
17466
- subtitle: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into.",
17577
+ subtitle,
17467
17578
  fields: FIELDS2,
17468
17579
  values,
17469
17580
  onChange: (key, value) => {
17470
17581
  setValues((current) => ({ ...current, [key]: value }));
17471
17582
  setNotice(null);
17472
17583
  },
17473
- actions: [
17474
- {
17475
- label: "Continue",
17476
- description: "Check the credentials and go on",
17477
- runningText: "Validating credentials...",
17478
- running: validating,
17479
- hint: "continue",
17480
- onRun: () => void submit()
17481
- },
17482
- {
17483
- label: "Skip",
17484
- description: "Save files only, nothing is pushed",
17485
- hint: "skip",
17486
- onRun: () => onDone({ skipped: true })
17487
- }
17488
- ],
17584
+ enterAdvances: true,
17489
17585
  onSave: () => void submit(),
17490
17586
  saveLabel: "continue",
17491
- onQuit: onBack,
17492
- quitLabel: "back",
17587
+ onQuit: prefilled ? () => setEditing(false) : onBack,
17588
+ quitLabel: prefilled ? "stop editing" : "back",
17493
17589
  notice,
17494
17590
  busy: validating,
17495
17591
  children: [
@@ -17498,6 +17594,10 @@ function CredentialsScreen({
17498
17594
  /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: credentialsPurpose(tokensOnly) }),
17499
17595
  /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
17500
17596
  ] }),
17597
+ validating && /* @__PURE__ */ jsxs14(Fragment2, { children: [
17598
+ /* @__PURE__ */ jsx15(Text14, { children: " " }),
17599
+ /* @__PURE__ */ jsx15(Text14, { color: PALETTE.accent, children: "Validating credentials..." })
17600
+ ] }),
17501
17601
  !validating && !notice && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsxs14(Fragment2, { children: [
17502
17602
  /* @__PURE__ */ jsx15(Text14, { children: " " }),
17503
17603
  /* @__PURE__ */ jsx15(Text14, { color: PALETTE.muted, children: "Changed values are saved after they validate." })
@@ -17941,11 +18041,11 @@ function useTokensOnly(input) {
17941
18041
  }
17942
18042
 
17943
18043
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
17944
- import { Box as Box23, Text as Text25 } from "ink";
18044
+ import { Box as Box24, Text as Text25 } from "ink";
17945
18045
 
17946
18046
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
17947
18047
  import React10 from "react";
17948
- import { Box as Box15, Text as Text16 } from "ink";
18048
+ import { Box as Box16, Text as Text16 } from "ink";
17949
18049
  import figures2 from "figures";
17950
18050
 
17951
18051
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/columns.ts
@@ -18052,7 +18152,7 @@ function computeColumnWindow(total, cursor, visibleCount) {
18052
18152
  }
18053
18153
 
18054
18154
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
18055
- import { Box as Box14, Text as Text15 } from "ink";
18155
+ import { Box as Box15, Text as Text15 } from "ink";
18056
18156
  import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
18057
18157
  var MIN_TERMINAL_PANEL_HEIGHT = 5;
18058
18158
  function terminalPanelHeight(rows, reservedRows = 4) {
@@ -18070,7 +18170,7 @@ function FixedPanel({
18070
18170
  children
18071
18171
  }) {
18072
18172
  return /* @__PURE__ */ jsx17(
18073
- Box14,
18173
+ Box15,
18074
18174
  {
18075
18175
  flexDirection: "column",
18076
18176
  width,
@@ -18106,7 +18206,7 @@ function WindowedPanelHeader({
18106
18206
  width,
18107
18207
  focused
18108
18208
  }) {
18109
- return /* @__PURE__ */ jsxs15(Box14, { flexDirection: "column", children: [
18209
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
18110
18210
  /* @__PURE__ */ jsx17(Text15, { bold: true, color: PALETTE.accent, inverse: focused, children: title }),
18111
18211
  /* @__PURE__ */ jsx17(Text15, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
18112
18212
  ] });
@@ -18141,7 +18241,7 @@ function AddedColumn(props) {
18141
18241
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
18142
18242
  return /* @__PURE__ */ jsxs16(React10.Fragment, { children: [
18143
18243
  showSeparator && /* @__PURE__ */ jsx18(Text16, { color: PALETTE.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
18144
- /* @__PURE__ */ jsxs16(Box15, { children: [
18244
+ /* @__PURE__ */ jsxs16(Box16, { children: [
18145
18245
  isCursor ? /* @__PURE__ */ jsx18(Text16, { color: PALETTE.accent, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx18(Text16, { children: " " }),
18146
18246
  reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx18(Text16, { color: PALETTE.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx18(Text16, { children: " " })),
18147
18247
  entry.isCycle && /* @__PURE__ */ jsx18(Text16, { color: isCursor ? PALETTE.accent : PALETTE.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
@@ -18164,7 +18264,7 @@ function AddedColumn(props) {
18164
18264
  }
18165
18265
 
18166
18266
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
18167
- import { Box as Box16, Text as Text17 } from "ink";
18267
+ import { Box as Box17, Text as Text17 } from "ink";
18168
18268
  import figures3 from "figures";
18169
18269
  import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
18170
18270
  function cycleLabel(cycle, index) {
@@ -18177,7 +18277,7 @@ function cycleLabel(cycle, index) {
18177
18277
  return `Cycle ${index + 1}: ${parts.join(" \u2192 ")}`;
18178
18278
  }
18179
18279
  function CyclesPanel({ cycles, cursor }) {
18180
- return /* @__PURE__ */ jsxs17(Box16, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
18280
+ return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
18181
18281
  /* @__PURE__ */ jsx19(Text17, { bold: true, color: PALETTE.warning, children: `Cycles detected (${cycles.length}):` }),
18182
18282
  /* @__PURE__ */ jsx19(Text17, { children: " " }),
18183
18283
  cycles.map((cycle, i) => {
@@ -18192,10 +18292,10 @@ function CyclesPanel({ cycles, cursor }) {
18192
18292
  }
18193
18293
 
18194
18294
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
18195
- import { Box as Box17, Text as Text18 } from "ink";
18295
+ import { Box as Box18, Text as Text18 } from "ink";
18196
18296
  import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
18197
18297
  function RejectPrompt({ pending }) {
18198
- return /* @__PURE__ */ jsxs18(Box17, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
18298
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.warning, paddingX: 1, marginTop: 1, children: [
18199
18299
  /* @__PURE__ */ jsx20(Text18, { bold: true, color: PALETTE.warning, children: `Rejecting ${pending.target} will:` }),
18200
18300
  pending.ancestors.length > 0 && /* @__PURE__ */ jsx20(Text18, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
18201
18301
  pending.descendants.length > 0 && /* @__PURE__ */ jsx20(Text18, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
@@ -18223,7 +18323,7 @@ function CompactControlBar({ hasGroupRoots, searchActive }) {
18223
18323
  }
18224
18324
 
18225
18325
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
18226
- import { Box as Box18, Text as Text19 } from "ink";
18326
+ import { Box as Box19, Text as Text19 } from "ink";
18227
18327
  import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
18228
18328
  function CounterStrip(props) {
18229
18329
  const { counters, totalWidth } = props;
@@ -18232,7 +18332,7 @@ function CounterStrip(props) {
18232
18332
  const labelRej = condensed ? "Rej" : "Rejected";
18233
18333
  const labelUnd = condensed ? "Und" : "Undecided";
18234
18334
  const sep = condensed ? " | " : " ";
18235
- return /* @__PURE__ */ jsx22(Box18, { children: /* @__PURE__ */ jsxs19(Text19, { children: [
18335
+ return /* @__PURE__ */ jsx22(Box19, { children: /* @__PURE__ */ jsxs19(Text19, { children: [
18236
18336
  /* @__PURE__ */ jsxs19(Text19, { color: PALETTE.muted, children: [
18237
18337
  labelGrp,
18238
18338
  " "
@@ -18256,7 +18356,7 @@ function CounterStrip(props) {
18256
18356
 
18257
18357
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
18258
18358
  import figures4 from "figures";
18259
- import { Box as Box19, Text as Text20 } from "ink";
18359
+ import { Box as Box20, Text as Text20 } from "ink";
18260
18360
  import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
18261
18361
  var DEFAULT_MAX_ROWS = 15;
18262
18362
  function windowStart(rowCount, highlightIndex, maxRows) {
@@ -18290,7 +18390,7 @@ function GotoBanner({
18290
18390
  const moreAbove = start;
18291
18391
  const moreBelow = rows.length - end;
18292
18392
  return /* @__PURE__ */ jsxs20(
18293
- Box19,
18393
+ Box20,
18294
18394
  {
18295
18395
  flexDirection: "column",
18296
18396
  borderStyle: "single",
@@ -18315,7 +18415,7 @@ function GotoBanner({
18315
18415
 
18316
18416
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
18317
18417
  import figures5 from "figures";
18318
- import { Box as Box20, Text as Text22 } from "ink";
18418
+ import { Box as Box21, Text as Text22 } from "ink";
18319
18419
 
18320
18420
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/graph/cycle-detection.ts
18321
18421
  function buildGraph(components) {
@@ -19135,7 +19235,7 @@ function GroupedSidebar(props) {
19135
19235
  isOwn: rs?.isOwn ?? false,
19136
19236
  isCursor
19137
19237
  });
19138
- return /* @__PURE__ */ jsxs21(Box20, { children: [
19238
+ return /* @__PURE__ */ jsxs21(Box21, { children: [
19139
19239
  isCursor ? /* @__PURE__ */ jsx25(Text22, { color: PALETTE.accent, bold: true, children: figures5.pointer }) : /* @__PURE__ */ jsx25(Text22, { children: " " }),
19140
19240
  /* @__PURE__ */ jsx25(PreviewBadge, { badge, highlighted: isSelected }),
19141
19241
  selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx25(Text22, { color: !isSelected && selDim ? PALETTE.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx25(Text22, { children: " " })),
@@ -19163,7 +19263,7 @@ function GroupedSidebar(props) {
19163
19263
 
19164
19264
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
19165
19265
  import React11 from "react";
19166
- import { Box as Box21, Text as Text23 } from "ink";
19266
+ import { Box as Box22, Text as Text23 } from "ink";
19167
19267
 
19168
19268
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
19169
19269
  import { useLayoutEffect, useRef as useRef5 } from "react";
@@ -19274,7 +19374,7 @@ function HelpOverlay(props) {
19274
19374
  }, props.handleInput !== false);
19275
19375
  if (props.sections) {
19276
19376
  return /* @__PURE__ */ jsxs22(
19277
- Box21,
19377
+ Box22,
19278
19378
  {
19279
19379
  flexDirection: "column",
19280
19380
  borderStyle: "round",
@@ -19295,7 +19395,7 @@ function HelpOverlay(props) {
19295
19395
  }
19296
19396
  const mode = props.mode;
19297
19397
  return /* @__PURE__ */ jsxs22(
19298
- Box21,
19398
+ Box22,
19299
19399
  {
19300
19400
  flexDirection: "column",
19301
19401
  borderStyle: "round",
@@ -19335,7 +19435,7 @@ function HelpOverlay(props) {
19335
19435
  }
19336
19436
 
19337
19437
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
19338
- import { Box as Box22, Text as Text24 } from "ink";
19438
+ import { Box as Box23, Text as Text24 } from "ink";
19339
19439
 
19340
19440
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/autocomplete.ts
19341
19441
  function longestCommonPrefix(names) {
@@ -19404,7 +19504,7 @@ function SearchMatchSummary({
19404
19504
  }) {
19405
19505
  if (hidden) return null;
19406
19506
  return /* @__PURE__ */ jsxs23(Fragment4, { children: [
19407
- open && /* @__PURE__ */ jsxs23(Box22, { marginTop, flexDirection: "column", children: [
19507
+ open && /* @__PURE__ */ jsxs23(Box23, { marginTop, flexDirection: "column", children: [
19408
19508
  /* @__PURE__ */ jsxs23(Text24, { children: [
19409
19509
  `/${query}`,
19410
19510
  /* @__PURE__ */ jsx27(Text24, { color: PALETTE.accent, children: "\u258E" }),
@@ -19413,7 +19513,7 @@ function SearchMatchSummary({
19413
19513
  ] }),
19414
19514
  autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx27(Text24, { color: PALETTE.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
19415
19515
  ] }),
19416
- !open && query && /* @__PURE__ */ jsx27(Box22, { marginTop, children: /* @__PURE__ */ jsx27(Text24, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19516
+ !open && query && /* @__PURE__ */ jsx27(Box23, { marginTop, children: /* @__PURE__ */ jsx27(Text24, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19417
19517
  ] });
19418
19518
  }
19419
19519
 
@@ -20591,7 +20691,7 @@ var HELP_SECTIONS = [
20591
20691
  ];
20592
20692
  function ScopeGateScreen(props) {
20593
20693
  if (props.components.length === 0) {
20594
- return /* @__PURE__ */ jsx28(Box23, { 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." }) });
20694
+ 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." }) });
20595
20695
  }
20596
20696
  return /* @__PURE__ */ jsx28(ScopeGateView, { ...props });
20597
20697
  }
@@ -20601,18 +20701,18 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20601
20701
  if (gate.showHelp) {
20602
20702
  return /* @__PURE__ */ jsx28(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
20603
20703
  }
20604
- return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", children: [
20704
+ return /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", children: [
20605
20705
  /* @__PURE__ */ jsx28(StepHeader, { step: "scope-gate" }),
20606
- /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", paddingX: 2, children: [
20607
- /* @__PURE__ */ jsxs24(Box23, { flexDirection: "row", flexWrap: "wrap", children: [
20706
+ /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", paddingX: 2, children: [
20707
+ /* @__PURE__ */ jsxs24(Box24, { flexDirection: "row", flexWrap: "wrap", children: [
20608
20708
  /* @__PURE__ */ jsx28(CounterStrip, { counters, totalWidth: gate.totalWidth }),
20609
20709
  gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs24(Text25, { color: PALETTE.muted, children: [
20610
20710
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
20611
20711
  gate.aiRows.length > 0 && /* @__PURE__ */ jsx28(Text25, { color: PALETTE.accent, children: " \u2014 press [x] to see why" })
20612
20712
  ] })
20613
20713
  ] }),
20614
- graph.cycles.length > 0 && /* @__PURE__ */ jsx28(Box23, { 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." }) }),
20615
- /* @__PURE__ */ jsxs24(Box23, { flexDirection: "row", alignItems: "stretch", children: [
20714
+ 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." }) }),
20715
+ /* @__PURE__ */ jsxs24(Box24, { flexDirection: "row", alignItems: "stretch", children: [
20616
20716
  gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx28(
20617
20717
  GotoBanner,
20618
20718
  {
@@ -20652,7 +20752,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20652
20752
  }
20653
20753
  ),
20654
20754
  columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs24(Fragment5, { children: [
20655
- /* @__PURE__ */ jsx28(Box23, { width: 2, flexShrink: 0 }),
20755
+ /* @__PURE__ */ jsx28(Box24, { width: 2, flexShrink: 0 }),
20656
20756
  /* @__PURE__ */ jsx28(
20657
20757
  AddedColumn,
20658
20758
  {
@@ -20769,7 +20869,7 @@ var capitalize = (name) => name.charAt(0).toUpperCase() + name.slice(1);
20769
20869
  function describeGeneration(input) {
20770
20870
  const agent = capitalize(input.agent);
20771
20871
  return `${formatAcceptanceSummary({ accepted: input.acceptedCount, autoRejected: 0 })}
20772
- ${agent} is mapping your selected components to Contentful's Component Definition Format (CDF).${input.hasTokens ? " Using your design tokens for prop resolution." : ""}`;
20872
+ ${agent} is reading each selected component and writing a Contentful component definition for it${input.hasTokens ? " Using your design tokens for prop resolution." : ""}`;
20773
20873
  }
20774
20874
  function progressRows2(progress, agent) {
20775
20875
  const name = capitalize(agent);
@@ -21022,7 +21122,7 @@ function buildFlowStart(input) {
21022
21122
  }
21023
21123
 
21024
21124
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
21025
- import { Box as Box43 } from "ink";
21125
+ import { Box as Box44 } from "ink";
21026
21126
 
21027
21127
  // packages/experience-design-system-types/dist/src/cdf/validate.js
21028
21128
  import { Ajv as Ajv2 } from "ajv";
@@ -21387,7 +21487,7 @@ function getReviewJsonPanelValue(selected, showHiddenProps) {
21387
21487
  }
21388
21488
 
21389
21489
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
21390
- import { Box as Box36, Text as Text39 } from "ink";
21490
+ import { Box as Box37, Text as Text39 } from "ink";
21391
21491
 
21392
21492
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/graph/cycle-view.ts
21393
21493
  function computeCycleView(components) {
@@ -21626,12 +21726,12 @@ function enumerateCycleBreaks(cycle, components) {
21626
21726
  }
21627
21727
 
21628
21728
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
21629
- import { Box as Box30, Text as Text33 } from "ink";
21729
+ import { Box as Box31, Text as Text33 } from "ink";
21630
21730
 
21631
21731
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
21632
21732
  import React12, { useEffect as useEffect11, useLayoutEffect as useLayoutEffect2, useState as useState18 } from "react";
21633
21733
  import figures6 from "figures";
21634
- import { Box as Box24, measureElement, Text as Text26 } from "ink";
21734
+ import { Box as Box25, measureElement, Text as Text26 } from "ink";
21635
21735
 
21636
21736
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/scroll-offset.ts
21637
21737
  function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
@@ -21800,14 +21900,14 @@ function serializeState(state2, originalJson) {
21800
21900
  return JSON.stringify(entry, null, 2);
21801
21901
  }
21802
21902
  function Picker({ value, active }) {
21803
- return /* @__PURE__ */ jsxs25(Box24, { children: [
21903
+ return /* @__PURE__ */ jsxs25(Box25, { children: [
21804
21904
  active && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u2039" }),
21805
21905
  /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
21806
21906
  active && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u203A" })
21807
21907
  ] });
21808
21908
  }
21809
21909
  function Toggle({ value, active }) {
21810
- return /* @__PURE__ */ jsx31(Box24, { children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21910
+ return /* @__PURE__ */ jsx31(Box25, { children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21811
21911
  }
21812
21912
  function InlinePropField({
21813
21913
  label,
@@ -21816,7 +21916,7 @@ function InlinePropField({
21816
21916
  flexible = false,
21817
21917
  width
21818
21918
  }) {
21819
- return /* @__PURE__ */ jsxs25(Box24, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
21919
+ return /* @__PURE__ */ jsxs25(Box25, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
21820
21920
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
21821
21921
  focused ? "\u203A " : " ",
21822
21922
  label
@@ -21837,7 +21937,7 @@ function DefaultValueRow({
21837
21937
  active,
21838
21938
  focused
21839
21939
  }) {
21840
- return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
21940
+ return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
21841
21941
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21842
21942
  focused ? "\u203A " : " ",
21843
21943
  "default:"
@@ -21870,7 +21970,7 @@ function ValueInputRow({
21870
21970
  valueText,
21871
21971
  cursorVisible
21872
21972
  }) {
21873
- return /* @__PURE__ */ jsxs25(Box24, { paddingLeft: 2, children: [
21973
+ return /* @__PURE__ */ jsxs25(Box25, { paddingLeft: 2, children: [
21874
21974
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
21875
21975
  /* @__PURE__ */ jsx31(Text26, { children: valueText }),
21876
21976
  /* @__PURE__ */ jsx31(Text26, { inverse: cursorVisible, children: " " })
@@ -21888,7 +21988,7 @@ function EditableListItem({
21888
21988
  if (isBeingEdited) {
21889
21989
  return /* @__PURE__ */ jsx31(ValueInputRow, { mode: "edit", valueText, cursorVisible });
21890
21990
  }
21891
- return /* @__PURE__ */ jsx31(Box24, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
21991
+ return /* @__PURE__ */ jsx31(Box25, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: active ? PALETTE.accent : void 0, children: active ? `${figures6.pointer} ${value}` : ` ${value}` }) });
21892
21992
  }
21893
21993
  function EditableValueList({
21894
21994
  values,
@@ -21902,7 +22002,7 @@ function EditableValueList({
21902
22002
  showAddInput
21903
22003
  }) {
21904
22004
  return /* @__PURE__ */ jsxs25(Fragment6, { children: [
21905
- values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx31(Box24, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: emptyMessage }) })),
22005
+ 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 }) })),
21906
22006
  values.map((value, index) => /* @__PURE__ */ jsx31(
21907
22007
  EditableListItem,
21908
22008
  {
@@ -21927,7 +22027,7 @@ function DefaultSubRow({
21927
22027
  }) {
21928
22028
  const cursor = cursorVisible ? "\u2588" : " ";
21929
22029
  if (prop.type === "richtext" || prop.type === "media" || prop.type === "link") {
21930
- return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22030
+ return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
21931
22031
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21932
22032
  focused ? "\u203A " : " ",
21933
22033
  "default:"
@@ -21941,7 +22041,7 @@ function DefaultSubRow({
21941
22041
  }
21942
22042
  if (prop.type === "enum") {
21943
22043
  if (prop.values.length === 0) {
21944
- return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22044
+ return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
21945
22045
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21946
22046
  focused ? "\u203A " : " ",
21947
22047
  "default:"
@@ -21954,19 +22054,19 @@ function DefaultSubRow({
21954
22054
  }
21955
22055
  const value = typeof prop.default === "string" ? prop.default : "";
21956
22056
  if (active) {
21957
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "row", flexShrink: 0, children: [
22057
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "row", flexShrink: 0, children: [
21958
22058
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21959
22059
  focused ? "\u203A " : " ",
21960
22060
  "default:"
21961
22061
  ] }),
21962
- /* @__PURE__ */ jsxs25(Box24, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
22062
+ /* @__PURE__ */ jsxs25(Box25, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
21963
22063
  /* @__PURE__ */ jsx31(Text26, { children: value.slice(0, textCursor) }),
21964
22064
  /* @__PURE__ */ jsx31(Text26, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
21965
22065
  /* @__PURE__ */ jsx31(Text26, { children: value.slice(textCursor + 1) })
21966
22066
  ] })
21967
22067
  ] });
21968
22068
  }
21969
- return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexShrink: 0, children: [
22069
+ return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexShrink: 0, children: [
21970
22070
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21971
22071
  focused ? "\u203A " : " ",
21972
22072
  "default:"
@@ -21986,7 +22086,7 @@ function DescriptionField({
21986
22086
  paddingLeft = 2
21987
22087
  }) {
21988
22088
  if (compact) {
21989
- return /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22089
+ return /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21990
22090
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21991
22091
  focused ? "\u203A " : " ",
21992
22092
  label
@@ -21994,7 +22094,7 @@ function DescriptionField({
21994
22094
  /* @__PURE__ */ jsx31(Text26, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
21995
22095
  ] });
21996
22096
  }
21997
- return /* @__PURE__ */ jsxs25(Box24, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
22097
+ return /* @__PURE__ */ jsxs25(Box25, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
21998
22098
  /* @__PURE__ */ jsxs25(Text26, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21999
22099
  focused ? "\u203A " : " ",
22000
22100
  label
@@ -22030,8 +22130,8 @@ function PropRow({
22030
22130
  }) {
22031
22131
  const descFocused = activeField === "description";
22032
22132
  const descActive = editingField && descFocused;
22033
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
22034
- /* @__PURE__ */ jsx31(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: prop.name, selected }) }),
22133
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
22134
+ /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: prop.name, selected }) }),
22035
22135
  /* @__PURE__ */ jsx31(
22036
22136
  DescriptionField,
22037
22137
  {
@@ -22045,7 +22145,7 @@ function PropRow({
22045
22145
  paddingLeft: 0
22046
22146
  }
22047
22147
  ),
22048
- /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
22148
+ /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
22049
22149
  /* @__PURE__ */ jsx31(
22050
22150
  RequiredField,
22051
22151
  {
@@ -22058,7 +22158,7 @@ function PropRow({
22058
22158
  /* @__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 }) })
22059
22159
  ] }),
22060
22160
  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" }) }),
22061
- prop.type === "enum" && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22161
+ prop.type === "enum" && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22062
22162
  /* @__PURE__ */ jsxs25(Text26, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
22063
22163
  activeField === "values" ? "\u203A " : " ",
22064
22164
  "values:"
@@ -22079,12 +22179,12 @@ function PropRow({
22079
22179
  cursorVisible
22080
22180
  }
22081
22181
  ),
22082
- prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22182
+ prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22083
22183
  /* @__PURE__ */ jsxs25(Text26, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
22084
22184
  activeField === "allowed" ? "\u203A " : " ",
22085
22185
  "allowed:"
22086
22186
  ] }),
22087
- editingField && activeField === "allowed" ? /* @__PURE__ */ jsx31(Box24, { 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(
22187
+ 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(
22088
22188
  Text26,
22089
22189
  {
22090
22190
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
@@ -22093,13 +22193,13 @@ function PropRow({
22093
22193
  }
22094
22194
  )
22095
22195
  ] }),
22096
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx31(Box24, { paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: (() => {
22196
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx31(Box25, { paddingLeft: 2, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: (() => {
22097
22197
  const max = Math.max(8, width - 8);
22098
22198
  const text = `~ ${rationale}`;
22099
22199
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
22100
22200
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
22101
- selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs25(Box24, { paddingLeft: 2, flexDirection: "column", children: [
22102
- /* @__PURE__ */ jsxs25(Box24, { children: [
22201
+ selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs25(Box25, { paddingLeft: 2, flexDirection: "column", children: [
22202
+ /* @__PURE__ */ jsxs25(Box25, { children: [
22103
22203
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "values:" }),
22104
22204
  activeField === "values" && /* @__PURE__ */ jsx31(Text26, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
22105
22205
  ] }),
@@ -22133,8 +22233,8 @@ function SlotRow({
22133
22233
  pickerCandidates,
22134
22234
  pickerCursor
22135
22235
  }) {
22136
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, flexShrink: 0, children: [
22137
- /* @__PURE__ */ jsx31(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: slot.name, selected, trailing: false }) }),
22236
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, flexShrink: 0, children: [
22237
+ /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(RowLabel, { name: slot.name, selected, trailing: false }) }),
22138
22238
  /* @__PURE__ */ jsx31(
22139
22239
  DescriptionField,
22140
22240
  {
@@ -22148,7 +22248,7 @@ function SlotRow({
22148
22248
  paddingLeft: 0
22149
22249
  }
22150
22250
  ),
22151
- /* @__PURE__ */ jsx31(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(
22251
+ /* @__PURE__ */ jsx31(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx31(
22152
22252
  RequiredField,
22153
22253
  {
22154
22254
  value: slot.required,
@@ -22157,7 +22257,7 @@ function SlotRow({
22157
22257
  activeField
22158
22258
  }
22159
22259
  ) }),
22160
- !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs25(Box24, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22260
+ !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs25(Box25, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22161
22261
  /* @__PURE__ */ jsxs25(
22162
22262
  Text26,
22163
22263
  {
@@ -22171,8 +22271,8 @@ function SlotRow({
22171
22271
  ),
22172
22272
  slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx31(Text26, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
22173
22273
  ] }),
22174
- selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", children: [
22175
- /* @__PURE__ */ jsxs25(Box24, { children: [
22274
+ selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
22275
+ /* @__PURE__ */ jsxs25(Box25, { children: [
22176
22276
  /* @__PURE__ */ jsxs25(
22177
22277
  Text26,
22178
22278
  {
@@ -22200,7 +22300,7 @@ function SlotRow({
22200
22300
  showAddInput: editingField && activeField === "allowedComponents"
22201
22301
  }
22202
22302
  ),
22203
- editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx31(Box24, { 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)" }) : (() => {
22303
+ 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)" }) : (() => {
22204
22304
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
22205
22305
  if (filtered.length === 0) {
22206
22306
  return /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
@@ -22209,7 +22309,7 @@ function SlotRow({
22209
22309
  const MAX_VISIBLE = 5;
22210
22310
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
22211
22311
  const slice = filtered.slice(start, start + MAX_VISIBLE);
22212
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", children: [
22312
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
22213
22313
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
22214
22314
  slice.map((name, i) => {
22215
22315
  const absIdx = start + i;
@@ -23043,14 +23143,14 @@ function FieldEditor({
23043
23143
  });
23044
23144
  const innerWidth = Math.max(1, width - 2);
23045
23145
  if (parseErr) {
23046
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
23146
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
23047
23147
  /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
23048
23148
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.error, children: parseErr }),
23049
23149
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
23050
23150
  ] });
23051
23151
  }
23052
23152
  if (props.length === 0 && slots.length === 0) {
23053
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
23153
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
23054
23154
  /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
23055
23155
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
23056
23156
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
@@ -23183,7 +23283,7 @@ function FieldEditor({
23183
23283
  const renderRow = (row, index) => {
23184
23284
  const key = rowKey(row, index);
23185
23285
  if (row.kind === "header") {
23186
- return /* @__PURE__ */ jsx31(Box24, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.success, children: row.label }) }, key);
23286
+ return /* @__PURE__ */ jsx31(Box25, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.success, children: row.label }) }, key);
23187
23287
  }
23188
23288
  if (row.kind === "component-description") {
23189
23289
  const isSelected2 = inComponentDesc && active;
@@ -23269,7 +23369,7 @@ function FieldEditor({
23269
23369
  children: [
23270
23370
  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." }),
23271
23371
  header,
23272
- /* @__PURE__ */ jsx31(Box24, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx31(
23372
+ /* @__PURE__ */ jsx31(Box25, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx31(
23273
23373
  PropRow,
23274
23374
  {
23275
23375
  prop: currentProp,
@@ -23305,7 +23405,7 @@ function FieldEditor({
23305
23405
  const absoluteIndex = scrollStart + index;
23306
23406
  const key = rowKey(row, absoluteIndex);
23307
23407
  return /* @__PURE__ */ jsx31(
23308
- Box24,
23408
+ Box25,
23309
23409
  {
23310
23410
  ref: (node) => {
23311
23411
  if (node) rowMeasureRefs.current.set(key, node);
@@ -23327,20 +23427,20 @@ function FieldEditor({
23327
23427
  const src = metadata?.componentSource ?? null;
23328
23428
  const headerPath = path5 ?? "<unknown source path>";
23329
23429
  if (!start || !end2 || !src) {
23330
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23430
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23331
23431
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
23332
23432
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
23333
23433
  /* @__PURE__ */ jsx31(Text26, { children: "[s] close" })
23334
23434
  ] });
23335
23435
  }
23336
23436
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
23337
- return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23437
+ return /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23338
23438
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
23339
23439
  lines.map((ln, i) => /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
23340
23440
  /* @__PURE__ */ jsx31(Text26, { children: "[s] close \xB7 [Esc] close" })
23341
23441
  ] });
23342
23442
  })(),
23343
- showHelp && /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
23443
+ showHelp && /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
23344
23444
  /* @__PURE__ */ jsx31(Text26, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
23345
23445
  /* @__PURE__ */ jsx31(Text26, { children: " " }),
23346
23446
  /* @__PURE__ */ jsx31(Text26, { bold: true, children: "Row navigation" }),
@@ -23369,7 +23469,7 @@ function FieldEditor({
23369
23469
  /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: "press ? or Esc to close" })
23370
23470
  ] }),
23371
23471
  validationError && /* @__PURE__ */ jsx31(Text26, { color: PALETTE.error, children: "\u2717 " + validationError }),
23372
- /* @__PURE__ */ jsx31(Box24, { paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: modeLabel }) })
23472
+ /* @__PURE__ */ jsx31(Box25, { paddingTop: 1, children: /* @__PURE__ */ jsx31(Text26, { color: PALETTE.muted, children: modeLabel }) })
23373
23473
  ]
23374
23474
  }
23375
23475
  );
@@ -23379,7 +23479,7 @@ function FieldEditor({
23379
23479
  import { Text as Text32 } from "ink";
23380
23480
 
23381
23481
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
23382
- import { Box as Box26, Text as Text28 } from "ink";
23482
+ import { Box as Box27, Text as Text28 } from "ink";
23383
23483
 
23384
23484
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/wrap-text.ts
23385
23485
  function appendLongWordChunks(word, width, lines) {
@@ -23414,23 +23514,23 @@ function wrapText(text, innerWidth) {
23414
23514
  }
23415
23515
 
23416
23516
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
23417
- import { Box as Box25, Text as Text27 } from "ink";
23517
+ import { Box as Box26, Text as Text27 } from "ink";
23418
23518
  import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
23419
23519
  function RationaleLine({ line, active }) {
23420
23520
  if (line.kind === "blank") {
23421
- return /* @__PURE__ */ jsx32(Box25, { children: /* @__PURE__ */ jsx32(Text27, { children: " " }) });
23521
+ return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { children: " " }) });
23422
23522
  }
23423
23523
  if (line.kind === "heading") {
23424
- return /* @__PURE__ */ jsx32(Box25, { children: /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23524
+ return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23425
23525
  }
23426
23526
  if (line.kind === "label") {
23427
- return /* @__PURE__ */ jsxs26(Box25, { children: [
23527
+ return /* @__PURE__ */ jsxs26(Box26, { children: [
23428
23528
  line.prefix && /* @__PURE__ */ jsx32(Text27, { children: line.prefix }),
23429
23529
  /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
23430
23530
  line.suffix && /* @__PURE__ */ jsx32(Text27, { color: PALETTE.muted, children: line.suffix })
23431
23531
  ] });
23432
23532
  }
23433
- return /* @__PURE__ */ jsx32(Box25, { children: /* @__PURE__ */ jsx32(Text27, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23533
+ return /* @__PURE__ */ jsx32(Box26, { children: /* @__PURE__ */ jsx32(Text27, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23434
23534
  }
23435
23535
 
23436
23536
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
@@ -23503,7 +23603,7 @@ function ComponentRationalePanel({
23503
23603
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23504
23604
  const visibleEnd = Math.min(totalLines, scrollOffset + contentHeight);
23505
23605
  return /* @__PURE__ */ jsxs27(
23506
- Box26,
23606
+ Box27,
23507
23607
  {
23508
23608
  flexDirection: "column",
23509
23609
  width,
@@ -23511,16 +23611,16 @@ function ComponentRationalePanel({
23511
23611
  borderStyle: "single",
23512
23612
  borderColor: active ? PALETTE.text : void 0,
23513
23613
  children: [
23514
- /* @__PURE__ */ jsx33(Box26, { children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23614
+ /* @__PURE__ */ jsx33(Box27, { children: /* @__PURE__ */ jsx33(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23515
23615
  visible.map((line, i) => /* @__PURE__ */ jsx33(RationaleLine, { line, active }, i)),
23516
- /* @__PURE__ */ jsx33(Box26, { children: overflowed ? /* @__PURE__ */ jsx33(Text28, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx33(Text28, { children: "[I/Esc] close" }) })
23616
+ /* @__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" }) })
23517
23617
  ]
23518
23618
  }
23519
23619
  );
23520
23620
  }
23521
23621
 
23522
23622
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
23523
- import { Box as Box28 } from "ink";
23623
+ import { Box as Box29 } from "ink";
23524
23624
 
23525
23625
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
23526
23626
  import { Text as Text29 } from "ink";
@@ -23530,7 +23630,7 @@ function HighlightedLine({ parts }) {
23530
23630
  }
23531
23631
 
23532
23632
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
23533
- import { Box as Box27, Text as Text30 } from "ink";
23633
+ import { Box as Box28, Text as Text30 } from "ink";
23534
23634
  import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
23535
23635
  function ScrollablePanel({
23536
23636
  title,
@@ -23544,11 +23644,11 @@ function ScrollablePanel({
23544
23644
  children
23545
23645
  }) {
23546
23646
  const overflowed = totalLines > height;
23547
- return /* @__PURE__ */ jsxs28(Box27, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
23548
- /* @__PURE__ */ jsxs28(Box27, { children: [
23647
+ return /* @__PURE__ */ jsxs28(Box28, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
23648
+ /* @__PURE__ */ jsxs28(Box28, { children: [
23549
23649
  /* @__PURE__ */ jsx35(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
23550
23650
  overflowed && /* @__PURE__ */ jsxs28(Fragment8, { children: [
23551
- /* @__PURE__ */ jsx35(Box27, { flexGrow: 1 }),
23651
+ /* @__PURE__ */ jsx35(Box28, { flexGrow: 1 }),
23552
23652
  /* @__PURE__ */ jsx35(Text30, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
23553
23653
  ] })
23554
23654
  ] }),
@@ -23621,7 +23721,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
23621
23721
  borderColor: active ? "white" : void 0,
23622
23722
  children: visibleLines.map((line, i) => {
23623
23723
  const truncated = truncateLine(line, innerWidth);
23624
- return /* @__PURE__ */ jsx36(Box28, { children: highlightJson(truncated) }, i);
23724
+ return /* @__PURE__ */ jsx36(Box29, { children: highlightJson(truncated) }, i);
23625
23725
  })
23626
23726
  }
23627
23727
  );
@@ -23679,7 +23779,7 @@ function RationalePanel({
23679
23779
 
23680
23780
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
23681
23781
  import figures7 from "figures";
23682
- import { Box as Box29, Text as Text31 } from "ink";
23782
+ import { Box as Box30, Text as Text31 } from "ink";
23683
23783
  import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
23684
23784
  function TokenReviewPanel({
23685
23785
  componentName,
@@ -23700,7 +23800,7 @@ function TokenReviewPanel({
23700
23800
  const visiblePaths = current.paths.slice(scrollStart, scrollStart + visibleCount);
23701
23801
  const rangeLabel = current.paths.length === 0 ? "no compatible tokens" : `${scrollStart + 1}-${scrollStart + visiblePaths.length} of ${current.paths.length}`;
23702
23802
  return /* @__PURE__ */ jsxs29(
23703
- Box29,
23803
+ Box30,
23704
23804
  {
23705
23805
  flexDirection: "column",
23706
23806
  width,
@@ -23716,7 +23816,7 @@ function TokenReviewPanel({
23716
23816
  const pathIndex = scrollStart + i;
23717
23817
  const checked = editSelection.has(path5);
23718
23818
  const focused = pathIndex === editCursor;
23719
- return /* @__PURE__ */ jsx38(Box29, { children: /* @__PURE__ */ jsx38(
23819
+ return /* @__PURE__ */ jsx38(Box30, { children: /* @__PURE__ */ jsx38(
23720
23820
  Text31,
23721
23821
  {
23722
23822
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
@@ -23734,7 +23834,7 @@ function TokenReviewPanel({
23734
23834
  );
23735
23835
  }
23736
23836
  return /* @__PURE__ */ jsxs29(
23737
- Box29,
23837
+ Box30,
23738
23838
  {
23739
23839
  flexDirection: "column",
23740
23840
  width,
@@ -23746,8 +23846,8 @@ function TokenReviewPanel({
23746
23846
  suggestions.length === 0 && /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
23747
23847
  suggestions.map((s, i) => {
23748
23848
  const focused = i === selectedRow;
23749
- return /* @__PURE__ */ jsxs29(Box29, { flexDirection: "column", children: [
23750
- /* @__PURE__ */ jsx38(Box29, { children: /* @__PURE__ */ jsx38(Text31, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}` }) }),
23849
+ return /* @__PURE__ */ jsxs29(Box30, { flexDirection: "column", children: [
23850
+ /* @__PURE__ */ jsx38(Box30, { children: /* @__PURE__ */ jsx38(Text31, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures7.pointer : " "} ${s.propName}` }) }),
23751
23851
  /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
23752
23852
  /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
23753
23853
  ] }, s.propName);
@@ -23989,7 +24089,7 @@ function ReviewEmptyComponentsWarning({
23989
24089
  return /* @__PURE__ */ jsx41(Text33, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
23990
24090
  }
23991
24091
  function ReviewNoSelection() {
23992
- return /* @__PURE__ */ jsx41(Box30, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, children: "No component selected" }) });
24092
+ return /* @__PURE__ */ jsx41(Box31, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, children: "No component selected" }) });
23993
24093
  }
23994
24094
  function ReviewFinalizeError({
23995
24095
  message,
@@ -24017,9 +24117,9 @@ function ReviewComponentTitle({
24017
24117
  slotCount,
24018
24118
  sidebarFocused
24019
24119
  }) {
24020
- return /* @__PURE__ */ jsxs31(Box30, { paddingLeft: 2, paddingBottom: 1, children: [
24120
+ return /* @__PURE__ */ jsxs31(Box31, { paddingLeft: 2, paddingBottom: 1, children: [
24021
24121
  /* @__PURE__ */ jsx41(Text33, { bold: true, wrap: "truncate-end", children: selectedKey }),
24022
- /* @__PURE__ */ jsx41(Box30, { flexGrow: 1 }),
24122
+ /* @__PURE__ */ jsx41(Box31, { flexGrow: 1 }),
24023
24123
  /* @__PURE__ */ jsxs31(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: [
24024
24124
  propCount,
24025
24125
  " prop",
@@ -24051,8 +24151,8 @@ function ReviewComponentPanel({
24051
24151
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
24052
24152
  const contentHeight = Math.max(1, height - 2);
24053
24153
  const contentWidth = Math.max(1, width - 1);
24054
- return /* @__PURE__ */ jsx41(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
24055
- /* @__PURE__ */ jsx41(Box30, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx41(
24154
+ 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: [
24155
+ /* @__PURE__ */ jsx41(Box31, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx41(
24056
24156
  ReviewDetailsEditor,
24057
24157
  {
24058
24158
  selectedKey,
@@ -24076,8 +24176,8 @@ function ReviewComponentPanel({
24076
24176
  )
24077
24177
  }
24078
24178
  ) }),
24079
- /* @__PURE__ */ jsx41(Box30, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx41(Text33, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
24080
- /* @__PURE__ */ jsx41(Box30, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx41(
24179
+ /* @__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 : " " }) }),
24180
+ /* @__PURE__ */ jsx41(Box31, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx41(Text33, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx41(
24081
24181
  ReviewPanelFooter,
24082
24182
  {
24083
24183
  reviewEditor,
@@ -24091,7 +24191,7 @@ function ReviewComponentPanel({
24091
24191
  }
24092
24192
 
24093
24193
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
24094
- import { Box as Box31, Text as Text34 } from "ink";
24194
+ import { Box as Box32, Text as Text34 } from "ink";
24095
24195
  import { jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
24096
24196
  function countReviewStatuses(entries) {
24097
24197
  return entries.reduce(
@@ -24105,10 +24205,10 @@ function countReviewStatuses(entries) {
24105
24205
  );
24106
24206
  }
24107
24207
  function ReviewLoadingState() {
24108
- return /* @__PURE__ */ jsx42(Box31, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
24208
+ return /* @__PURE__ */ jsx42(Box32, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx42(Text34, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
24109
24209
  }
24110
24210
  function ReviewLoadError({ message }) {
24111
- return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
24211
+ return /* @__PURE__ */ jsxs32(Box32, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
24112
24212
  /* @__PURE__ */ jsx42(Text34, { color: PALETTE.error, children: message }),
24113
24213
  /* @__PURE__ */ jsx42(Text34, { children: " " }),
24114
24214
  /* @__PURE__ */ jsx42(ControlHints, { hints: [{ keys: "q / Enter / Esc", label: "Quit" }] })
@@ -24311,7 +24411,7 @@ async function runLivePreview(opts) {
24311
24411
  }
24312
24412
 
24313
24413
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
24314
- import { Box as Box32, Text as Text35 } from "ink";
24414
+ import { Box as Box33, Text as Text35 } from "ink";
24315
24415
  import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
24316
24416
  var FINALIZE_REMOVED_WINDOW = 6;
24317
24417
  function FinalizeDialog({
@@ -24341,7 +24441,7 @@ function FinalizeDialog({
24341
24441
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
24342
24442
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
24343
24443
  const hasMoreAbove = offset > 0;
24344
- return /* @__PURE__ */ jsx43(Box32, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", alignItems: "flex-start", children: [
24444
+ return /* @__PURE__ */ jsx43(Box33, { width: "100%", paddingX: 2, children: /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", alignItems: "flex-start", children: [
24345
24445
  /* @__PURE__ */ jsx43(Text35, { bold: true, children: "Finalize" }),
24346
24446
  /* @__PURE__ */ jsx43(Text35, { children: " " }),
24347
24447
  /* @__PURE__ */ jsxs33(Text35, { children: [
@@ -24371,7 +24471,7 @@ function FinalizeDialog({
24371
24471
  /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
24372
24472
  /* @__PURE__ */ jsx43(Text35, { children: " " })
24373
24473
  ] }),
24374
- /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", height: 2, children: [
24474
+ /* @__PURE__ */ jsxs33(Box33, { flexDirection: "column", height: 2, children: [
24375
24475
  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: " " }),
24376
24476
  /* @__PURE__ */ jsx43(Text35, { children: " " })
24377
24477
  ] }),
@@ -24798,10 +24898,10 @@ function useReviewSurfaceState(initialFinalizeError = null) {
24798
24898
  }
24799
24899
 
24800
24900
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
24801
- import { Box as Box34, Text as Text37 } from "ink";
24901
+ import { Box as Box35, Text as Text37 } from "ink";
24802
24902
 
24803
24903
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
24804
- import { Box as Box33, Text as Text36 } from "ink";
24904
+ import { Box as Box34, Text as Text36 } from "ink";
24805
24905
  import { Fragment as Fragment12, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
24806
24906
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24807
24907
  useImmediateInput((input, key) => {
@@ -24811,7 +24911,7 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24811
24911
  onCancel();
24812
24912
  }
24813
24913
  });
24814
- return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
24914
+ return /* @__PURE__ */ jsxs34(Box34, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
24815
24915
  /* @__PURE__ */ jsx44(Text36, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
24816
24916
  /* @__PURE__ */ jsx44(Text36, { children: " " }),
24817
24917
  hasUnsavedDrafts ? /* @__PURE__ */ jsxs34(Fragment12, { children: [
@@ -24889,7 +24989,7 @@ function ReviewStepDialogs({
24889
24989
  }
24890
24990
  function ReviewReloadDialog({ open }) {
24891
24991
  if (!open) return null;
24892
- return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24992
+ return /* @__PURE__ */ jsxs35(Box35, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24893
24993
  /* @__PURE__ */ jsx45(Text37, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
24894
24994
  /* @__PURE__ */ jsx45(Text37, { children: "Unsaved in-memory changes will be lost." }),
24895
24995
  /* @__PURE__ */ jsx45(Text37, { children: " " }),
@@ -25261,7 +25361,7 @@ function useReviewPreview({
25261
25361
  }
25262
25362
 
25263
25363
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
25264
- import { Box as Box35, Text as Text38 } from "ink";
25364
+ import { Box as Box36, Text as Text38 } from "ink";
25265
25365
  import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
25266
25366
  function LivePreviewSummary({
25267
25367
  enabled,
@@ -25279,7 +25379,7 @@ function LivePreviewSummary({
25279
25379
  if (disabled) return /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
25280
25380
  if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
25281
25381
  if (!hasCounts) return null;
25282
- return /* @__PURE__ */ jsxs36(Box35, { children: [
25382
+ return /* @__PURE__ */ jsxs36(Box36, { children: [
25283
25383
  /* @__PURE__ */ jsx46(Text38, { children: "Preview: " }),
25284
25384
  /* @__PURE__ */ jsx46(Text38, { color: PALETTE.success, children: `${counts.new} new` }),
25285
25385
  /* @__PURE__ */ jsx46(Text38, { children: " \xB7 " }),
@@ -25497,7 +25597,7 @@ function deriveBreakingChanges(response) {
25497
25597
  }
25498
25598
  function GenerateReviewStep(props) {
25499
25599
  if (!props.extractSessionId) {
25500
- return /* @__PURE__ */ jsx47(Box36, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
25600
+ 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." }) });
25501
25601
  }
25502
25602
  return /* @__PURE__ */ jsx47(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
25503
25603
  }
@@ -26402,7 +26502,7 @@ function GenerateReviewStepView({
26402
26502
  for (const c2 of closures.values()) if (c2.nodes.length > 1) return true;
26403
26503
  return false;
26404
26504
  })();
26405
- return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
26505
+ return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", children: [
26406
26506
  /* @__PURE__ */ jsx47(StepHeader, { step: "review" }),
26407
26507
  /* @__PURE__ */ jsx47(
26408
26508
  ReviewStepDialogs,
@@ -26415,14 +26515,14 @@ function GenerateReviewStepView({
26415
26515
  }
26416
26516
  ),
26417
26517
  /* @__PURE__ */ jsx47(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
26418
- removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
26518
+ removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
26419
26519
  /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
26420
26520
  !removedBannerCollapsed && /* @__PURE__ */ jsxs37(Fragment14, { children: [
26421
26521
  /* @__PURE__ */ jsx47(Text39, { children: " " }),
26422
26522
  removedComponents.map((rc) => /* @__PURE__ */ jsx47(Text39, { children: removedComponentLine(rc) }, rc.id))
26423
26523
  ] })
26424
26524
  ] }),
26425
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx47(Box36, { paddingX: 1, children: /* @__PURE__ */ jsx47(
26525
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx47(Box37, { paddingX: 1, children: /* @__PURE__ */ jsx47(
26426
26526
  Text39,
26427
26527
  {
26428
26528
  color: PALETTE.warning,
@@ -26433,7 +26533,7 @@ function GenerateReviewStepView({
26433
26533
  const row = breakingRows[breakingCursor];
26434
26534
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
26435
26535
  if (!comp) return null;
26436
- return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26536
+ return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26437
26537
  /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
26438
26538
  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"}` }),
26439
26539
  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}`)),
@@ -26459,7 +26559,7 @@ function GenerateReviewStepView({
26459
26559
  const participantSet = cycleView.structural;
26460
26560
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
26461
26561
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
26462
- return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
26562
+ return /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
26463
26563
  /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
26464
26564
  members.length > 0 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
26465
26565
  ancestors.length > 0 && /* @__PURE__ */ jsx47(Text39, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
@@ -26489,7 +26589,7 @@ function GenerateReviewStepView({
26489
26589
  height: panelHeight
26490
26590
  }
26491
26591
  ),
26492
- !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box36, { children: [
26592
+ !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box37, { children: [
26493
26593
  breakingPanel.isOpen ? /* @__PURE__ */ jsx47(
26494
26594
  GotoBanner,
26495
26595
  {
@@ -26578,7 +26678,7 @@ function GenerateReviewStepView({
26578
26678
  }
26579
26679
  ) : /* @__PURE__ */ jsx47(ReviewNoSelection, {})
26580
26680
  ] }),
26581
- !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
26681
+ !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs37(Box37, { flexDirection: "column", children: [
26582
26682
  /* @__PURE__ */ jsx47(Text39, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
26583
26683
  cycleRows.slice(0, 3).map((cycle, idx) => {
26584
26684
  return /* @__PURE__ */ jsx47(
@@ -26611,11 +26711,11 @@ function GenerateReviewStepView({
26611
26711
  }
26612
26712
 
26613
26713
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
26614
- import { Box as Box37, Text as Text40 } from "ink";
26714
+ import { Box as Box38, Text as Text40 } from "ink";
26615
26715
  import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
26616
26716
  function CustomPromptBanner({ generatePromptPath }) {
26617
26717
  if (!generatePromptPath) return null;
26618
- return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26718
+ return /* @__PURE__ */ jsxs38(Box38, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26619
26719
  /* @__PURE__ */ jsx48(Text40, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
26620
26720
  generatePromptPath ? /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.warning, children: [
26621
26721
  "components: ",
@@ -26626,7 +26726,7 @@ function CustomPromptBanner({ generatePromptPath }) {
26626
26726
  }
26627
26727
 
26628
26728
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
26629
- import { Box as Box39, Text as Text42 } from "ink";
26729
+ import { Box as Box40, Text as Text42 } from "ink";
26630
26730
 
26631
26731
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/contentful-urls.ts
26632
26732
  function normalizeHost(host) {
@@ -26642,10 +26742,10 @@ function buildPostPushUrl2({ host, spaceId, environmentId, view = "components" }
26642
26742
  }
26643
26743
 
26644
26744
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
26645
- import { Box as Box38, Text as Text41 } from "ink";
26745
+ import { Box as Box39, Text as Text41 } from "ink";
26646
26746
  import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
26647
26747
  function SpaceEnvironment({ spaceId, environmentId }) {
26648
- return /* @__PURE__ */ jsxs39(Box38, { gap: 1, marginTop: 1, children: [
26748
+ return /* @__PURE__ */ jsxs39(Box39, { gap: 1, marginTop: 1, children: [
26649
26749
  /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "Space:" }),
26650
26750
  /* @__PURE__ */ jsx49(Text41, { children: spaceId }),
26651
26751
  /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "/" }),
@@ -26675,7 +26775,7 @@ function EntityRows({ entity, label }) {
26675
26775
  ] });
26676
26776
  }
26677
26777
  function LinkRow({ title, url }) {
26678
- return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
26778
+ return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
26679
26779
  /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: title }),
26680
26780
  /* @__PURE__ */ jsx50(Text42, { color: PALETTE.accent, children: url })
26681
26781
  ] });
@@ -26701,14 +26801,14 @@ function DoneStep({
26701
26801
  const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
26702
26802
  const success = totalFailed === 0;
26703
26803
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
26704
- return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
26804
+ return /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
26705
26805
  /* @__PURE__ */ jsx50(StepHeader, { step: "done" }),
26706
- /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
26806
+ /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
26707
26807
  success ? /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
26708
- 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(Box39, { flexDirection: "column", children: [
26709
- /* @__PURE__ */ jsx50(EntityRows, { entity: componentTypes, label: "Component Type" }),
26808
+ 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: [
26809
+ /* @__PURE__ */ jsx50(EntityRows, { entity: componentTypes, label: "Component" }),
26710
26810
  /* @__PURE__ */ jsx50(EntityRows, { entity: designTokens, label: "Design Token" }),
26711
- summary && /* @__PURE__ */ jsx50(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
26811
+ summary && /* @__PURE__ */ jsx50(Box40, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
26712
26812
  "Push result: ",
26713
26813
  summary.succeeded,
26714
26814
  "/",
@@ -26721,7 +26821,7 @@ function DoneStep({
26721
26821
  ] })
26722
26822
  ] }) })
26723
26823
  ] }),
26724
- failures.length > 0 && /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", children: [
26824
+ failures.length > 0 && /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", children: [
26725
26825
  /* @__PURE__ */ jsx50(Text42, { bold: true, color: PALETTE.error, children: "Failure details" }),
26726
26826
  failures.map((failure) => /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.error, children: [
26727
26827
  failure.entityType,
@@ -26732,7 +26832,7 @@ function DoneStep({
26732
26832
  ] }, `${failure.entityType}:${failure.entityId}`))
26733
26833
  ] }),
26734
26834
  /* @__PURE__ */ jsx50(SpaceEnvironment, { spaceId, environmentId }),
26735
- success && totalPushed > 0 && /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, children: [
26835
+ success && totalPushed > 0 && /* @__PURE__ */ jsxs40(Box40, { flexDirection: "column", gap: 1, children: [
26736
26836
  /* @__PURE__ */ jsx50(Text42, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
26737
26837
  produced.components && /* @__PURE__ */ jsx50(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
26738
26838
  produced.tokens && /* @__PURE__ */ jsx50(
@@ -26750,7 +26850,7 @@ function DoneStep({
26750
26850
 
26751
26851
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
26752
26852
  import { useState as useState27 } from "react";
26753
- import { Box as Box40, Text as Text43 } from "ink";
26853
+ import { Box as Box41, Text as Text43 } from "ink";
26754
26854
  import { readdirSync as readdirSync3 } from "node:fs";
26755
26855
  import { dirname as dirname15, basename as basename6, join as join20 } from "node:path";
26756
26856
 
@@ -26841,10 +26941,10 @@ function PathPrompt({
26841
26941
  const shown = input || defaultPath;
26842
26942
  const isPlaceholder = input === "";
26843
26943
  const cursor = cursorVisible ? "\u2588" : " ";
26844
- return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", children: [
26944
+ return /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", children: [
26845
26945
  /* @__PURE__ */ jsx51(StepHeader, { step: "push" }),
26846
- /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
26847
- /* @__PURE__ */ jsxs41(Box40, { gap: 1, children: [
26946
+ /* @__PURE__ */ jsxs41(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
26947
+ /* @__PURE__ */ jsxs41(Box41, { gap: 1, children: [
26848
26948
  /* @__PURE__ */ jsx51(Text43, { color: PALETTE.accent, children: "?" }),
26849
26949
  /* @__PURE__ */ jsxs41(Text43, { bold: true, children: [
26850
26950
  label,
@@ -26868,7 +26968,7 @@ function PathPrompt({
26868
26968
  }
26869
26969
 
26870
26970
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
26871
- import { Box as Box41, Text as Text44 } from "ink";
26971
+ import { Box as Box42, Text as Text44 } from "ink";
26872
26972
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
26873
26973
 
26874
26974
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/produced.ts
@@ -26910,20 +27010,20 @@ function PushingStep({ progress, produced }) {
26910
27010
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
26911
27011
  const showGlobal = progress && progress.kind === "progress";
26912
27012
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
26913
- return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", children: [
27013
+ return /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", children: [
26914
27014
  /* @__PURE__ */ jsx53(StepHeader, { step: "push" }),
26915
- /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
27015
+ /* @__PURE__ */ jsxs42(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 1, children: [
26916
27016
  /* @__PURE__ */ jsxs42(Text44, { children: [
26917
27017
  "Writing ",
26918
27018
  writtenThings(produced),
26919
27019
  " to your Contentful space..."
26920
27020
  ] }),
26921
- operationId && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
27021
+ operationId && /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
26922
27022
  /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: "Operation:" }),
26923
27023
  /* @__PURE__ */ jsx53(Text44, { children: operationId })
26924
27024
  ] }),
26925
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx53(Box41, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs42(Box41, { gap: 2, children: [
26926
- /* @__PURE__ */ jsx53(Box41, { width: 40, children: /* @__PURE__ */ jsx53(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx53(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
27025
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx53(Box42, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs42(Box42, { gap: 2, children: [
27026
+ /* @__PURE__ */ jsx53(Box42, { width: 40, children: /* @__PURE__ */ jsx53(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx53(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
26927
27027
  /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
26928
27028
  progress.processed,
26929
27029
  "/",
@@ -26931,11 +27031,11 @@ function PushingStep({ progress, produced }) {
26931
27031
  " entities"
26932
27032
  ] })
26933
27033
  ] }) }),
26934
- showCurrent && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
27034
+ showCurrent && /* @__PURE__ */ jsxs42(Box42, { gap: 1, children: [
26935
27035
  /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: "Now processing:" }),
26936
27036
  /* @__PURE__ */ jsx53(Text44, { children: showCurrent })
26937
27037
  ] }),
26938
- /* @__PURE__ */ jsx53(Box41, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
27038
+ /* @__PURE__ */ jsx53(Box42, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
26939
27039
  "Elapsed: ",
26940
27040
  elapsed
26941
27041
  ] }) })
@@ -26945,7 +27045,7 @@ function PushingStep({ progress, produced }) {
26945
27045
 
26946
27046
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
26947
27047
  import { useEffect as useEffect20, useState as useState29, useMemo as useMemo5 } from "react";
26948
- import { Box as Box42, Text as Text45 } from "ink";
27048
+ import { Box as Box43, Text as Text45 } from "ink";
26949
27049
 
26950
27050
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/preview-diff.ts
26951
27051
  function computeComponentDiffLines(current, proposed, changeClassification) {
@@ -27375,9 +27475,9 @@ function WizardPreviewStep({
27375
27475
  return;
27376
27476
  }
27377
27477
  });
27378
- return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
27478
+ return /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", children: [
27379
27479
  /* @__PURE__ */ jsx54(StepHeader, { step: "push" }),
27380
- /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
27480
+ /* @__PURE__ */ jsxs43(Box43, { flexDirection: "column", gap: 1, paddingX: 2, paddingBottom: 2, children: [
27381
27481
  hasAnything ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
27382
27482
  /* @__PURE__ */ jsx54(Text45, { children: "Here's what will happen in your space:" }),
27383
27483
  /* @__PURE__ */ jsxs43(
@@ -27394,9 +27494,9 @@ function WizardPreviewStep({
27394
27494
  }
27395
27495
  )
27396
27496
  ] }) : /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
27397
- breakingWithImpact && /* @__PURE__ */ jsx54(Box42, { 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." }) }),
27497
+ 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." }) }),
27398
27498
  /* @__PURE__ */ jsx54(SpaceEnvironment, { spaceId, environmentId }),
27399
- /* @__PURE__ */ jsx54(Box42, { marginTop: 1, children: /* @__PURE__ */ jsx54(
27499
+ /* @__PURE__ */ jsx54(Box43, { marginTop: 1, children: /* @__PURE__ */ jsx54(
27400
27500
  ControlHints,
27401
27501
  {
27402
27502
  hints: [
@@ -27539,7 +27639,7 @@ function FlowScreen({
27539
27639
  );
27540
27640
  }
27541
27641
  })();
27542
- return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", children: [
27642
+ return /* @__PURE__ */ jsxs44(Box44, { flexDirection: "column", children: [
27543
27643
  /* @__PURE__ */ jsx55(CustomPromptBanner, { generatePromptPath }),
27544
27644
  content
27545
27645
  ] });
@@ -28313,7 +28413,7 @@ function useFlow(start, options = {}) {
28313
28413
 
28314
28414
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28315
28415
  import { useEffect as useEffect22, useState as useState30 } from "react";
28316
- import { Box as Box44, Text as Text46, useInput as useInput11 } from "ink";
28416
+ import { Box as Box45, Text as Text46, useInput as useInput12 } from "ink";
28317
28417
  init_debug_store();
28318
28418
 
28319
28419
  // packages/experience-design-system-cli/src/tui/help/help-info.ts
@@ -28376,10 +28476,10 @@ async function readHelpInfo() {
28376
28476
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28377
28477
  import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
28378
28478
  function Section({ title, rows }) {
28379
- return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
28479
+ return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", children: [
28380
28480
  /* @__PURE__ */ jsx56(Text46, { bold: true, color: PALETTE.accent, children: title }),
28381
- rows.map((row) => /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
28382
- /* @__PURE__ */ jsx56(Box44, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: row.label }) }),
28481
+ rows.map((row) => /* @__PURE__ */ jsxs45(Box45, { gap: 1, children: [
28482
+ /* @__PURE__ */ jsx56(Box45, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: row.label }) }),
28383
28483
  /* @__PURE__ */ jsx56(Text46, { children: row.value })
28384
28484
  ] }, row.label))
28385
28485
  ] });
@@ -28394,7 +28494,7 @@ function HelpScreen({ onDone }) {
28394
28494
  void finishDebugRun({ outputs: {}, status: "success", exitMethod });
28395
28495
  onDone();
28396
28496
  };
28397
- useInput11((input, key) => {
28497
+ useInput12((input, key) => {
28398
28498
  if (key.return) {
28399
28499
  leave("saved");
28400
28500
  return;
@@ -28404,7 +28504,7 @@ function HelpScreen({ onDone }) {
28404
28504
  return;
28405
28505
  }
28406
28506
  });
28407
- return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
28507
+ return /* @__PURE__ */ jsxs45(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
28408
28508
  /* @__PURE__ */ jsx56(Text46, { bold: true, children: "Help" }),
28409
28509
  info ? /* @__PURE__ */ jsxs45(Fragment17, { children: [
28410
28510
  /* @__PURE__ */ jsx56(Section, { title: "Where things are stored", rows: info.storage }),
@@ -28425,7 +28525,7 @@ function HelpScreen({ onDone }) {
28425
28525
 
28426
28526
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
28427
28527
  import { useState as useState31 } from "react";
28428
- import { Box as Box45, Text as Text47, useInput as useInput12 } from "ink";
28528
+ import { Box as Box46, Text as Text47, useInput as useInput13 } from "ink";
28429
28529
  import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
28430
28530
  function SettingsScreen({
28431
28531
  onNavigate,
@@ -28437,7 +28537,7 @@ function SettingsScreen({
28437
28537
  { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
28438
28538
  { label: "Debug Mode", screen: "settings-debug-mode" }
28439
28539
  ];
28440
- useInput12((input, key) => {
28540
+ useInput13((input, key) => {
28441
28541
  if (key.upArrow) {
28442
28542
  setFocusIdx((i) => (i - 1 + items.length) % items.length);
28443
28543
  return;
@@ -28457,7 +28557,7 @@ function SettingsScreen({
28457
28557
  onBack();
28458
28558
  }
28459
28559
  });
28460
- return /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28560
+ return /* @__PURE__ */ jsxs46(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28461
28561
  /* @__PURE__ */ jsx57(Text47, { bold: true, children: "Settings" }),
28462
28562
  /* @__PURE__ */ jsx57(Text47, { color: PALETTE.muted, children: " " }),
28463
28563
  items.map((item, i) => /* @__PURE__ */ jsxs46(Text47, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
@@ -28480,11 +28580,11 @@ function SettingsScreen({
28480
28580
 
28481
28581
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
28482
28582
  import { useState as useState35 } from "react";
28483
- import { Box as Box49, Text as Text52, useInput as useInput15 } from "ink";
28583
+ import { Box as Box50, Text as Text52, useInput as useInput16 } from "ink";
28484
28584
 
28485
28585
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
28486
28586
  import { useEffect as useEffect24, useRef as useRef15, useState as useState33 } from "react";
28487
- import { Box as Box47, Text as Text50, useInput as useInput13 } from "ink";
28587
+ import { Box as Box48, Text as Text50, useInput as useInput14 } from "ink";
28488
28588
  init_debug_store();
28489
28589
 
28490
28590
  // packages/experience-design-system-cli/src/tui/settings/shared/debug-trail.ts
@@ -28813,7 +28913,7 @@ async function writeAgentConfig(config) {
28813
28913
 
28814
28914
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
28815
28915
  import { useEffect as useEffect23, useState as useState32 } from "react";
28816
- import { Box as Box46, Text as Text49 } from "ink";
28916
+ import { Box as Box47, Text as Text49 } from "ink";
28817
28917
 
28818
28918
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
28819
28919
  import { Text as Text48 } from "ink";
@@ -28858,7 +28958,7 @@ var fields = (name) => [
28858
28958
  ];
28859
28959
  var INSPECT_DELAY_MS = 400;
28860
28960
  function StatusHeading() {
28861
- return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28961
+ return /* @__PURE__ */ jsxs47(Box47, { gap: 1, children: [
28862
28962
  /* @__PURE__ */ jsx59(Text49, { bold: true, color: PALETTE.muted, children: "STATUS" }),
28863
28963
  /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "\xB7 read only" })
28864
28964
  ] });
@@ -28940,7 +29040,7 @@ function AgentDetail({
28940
29040
  actions: [action],
28941
29041
  notice: testing ? null : notice,
28942
29042
  busy: saving || testing,
28943
- children: /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
29043
+ children: /* @__PURE__ */ jsxs47(Box47, { flexDirection: "column", marginTop: 1, children: [
28944
29044
  /* @__PURE__ */ jsx59(StatusHeading, {}),
28945
29045
  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))
28946
29046
  ] })
@@ -29027,7 +29127,7 @@ function AgentsScreen({ onDone }) {
29027
29127
  setNotice({ kind: "error", text: `Default agent not changed: ${visit.error}` });
29028
29128
  }).finally(() => setSaving(false));
29029
29129
  };
29030
- useInput13((input, key) => {
29130
+ useInput14((input, key) => {
29031
29131
  if (loadError && (key.escape || input === "q")) {
29032
29132
  endVisit(null);
29033
29133
  onDone();
@@ -29059,7 +29159,7 @@ function AgentsScreen({ onDone }) {
29059
29159
  }
29060
29160
  });
29061
29161
  if (!config) {
29062
- return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29162
+ return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29063
29163
  /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
29064
29164
  /* @__PURE__ */ jsx60(Text50, { children: " " }),
29065
29165
  loadError ? /* @__PURE__ */ jsxs48(Fragment18, { children: [
@@ -29094,35 +29194,35 @@ function AgentsScreen({ onDone }) {
29094
29194
  );
29095
29195
  }
29096
29196
  const focusedAgent = AGENT_NAMES[focus];
29097
- return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29197
+ return /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29098
29198
  /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Settings \u203A Configuration \u203A Agents" }),
29099
29199
  /* @__PURE__ */ jsx60(Text50, { children: " " }),
29100
29200
  /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
29101
29201
  /* @__PURE__ */ jsx60(Text50, { children: " " }),
29102
- /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
29202
+ /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
29103
29203
  /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "Default agent" }),
29104
29204
  /* @__PURE__ */ jsx60(Text50, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
29105
29205
  saving && /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "\u2026 saving" })
29106
29206
  ] }),
29107
- /* @__PURE__ */ jsxs48(Box47, { marginTop: 1, gap: 1, children: [
29207
+ /* @__PURE__ */ jsxs48(Box48, { marginTop: 1, gap: 1, children: [
29108
29208
  /* @__PURE__ */ jsx60(Text50, { children: " " }),
29109
29209
  /* @__PURE__ */ jsx60(Text50, { children: " " }),
29110
- /* @__PURE__ */ jsx60(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "AGENT" }) }),
29210
+ /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "AGENT" }) }),
29111
29211
  /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: "STATUS" })
29112
29212
  ] }),
29113
29213
  AGENT_NAMES.map((name) => {
29114
29214
  const isFocused = focusedAgent === name;
29115
- return /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
29215
+ return /* @__PURE__ */ jsxs48(Box48, { gap: 1, children: [
29116
29216
  /* @__PURE__ */ jsx60(Text50, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
29117
29217
  /* @__PURE__ */ jsx60(Text50, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
29118
- /* @__PURE__ */ jsx60(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
29218
+ /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
29119
29219
  /* @__PURE__ */ jsx60(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
29120
29220
  ] }, name);
29121
29221
  }),
29122
- /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", marginTop: 1, children: [
29222
+ /* @__PURE__ */ jsxs48(Box48, { flexDirection: "column", marginTop: 1, children: [
29123
29223
  /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
29124
- panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs48(Box47, { gap: 1, paddingLeft: 1, children: [
29125
- /* @__PURE__ */ jsx60(Box47, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: row.label }) }),
29224
+ panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs48(Box48, { gap: 1, paddingLeft: 1, children: [
29225
+ /* @__PURE__ */ jsx60(Box48, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text50, { color: PALETTE.muted, children: row.label }) }),
29126
29226
  /* @__PURE__ */ jsx60(Text50, { color: TONE_COLOR[row.tone], children: row.value })
29127
29227
  ] }, row.label))
29128
29228
  ] }),
@@ -29151,7 +29251,7 @@ function AgentsScreen({ onDone }) {
29151
29251
 
29152
29252
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
29153
29253
  import { useEffect as useEffect25, useRef as useRef16, useState as useState34 } from "react";
29154
- import { Box as Box48, Text as Text51, useInput as useInput14 } from "ink";
29254
+ import { Box as Box49, Text as Text51, useInput as useInput15 } from "ink";
29155
29255
  init_debug_store();
29156
29256
 
29157
29257
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/project-store.ts
@@ -29253,14 +29353,14 @@ function ProjectScreen({ onDone }) {
29253
29353
  exitMethod: change.changed ? "saved" : "discarded"
29254
29354
  });
29255
29355
  };
29256
- useInput14((input, key) => {
29356
+ useInput15((input, key) => {
29257
29357
  if (!config && loadError && (key.escape || input === "q")) {
29258
29358
  endVisit(null);
29259
29359
  onDone();
29260
29360
  }
29261
29361
  });
29262
29362
  if (!config) {
29263
- return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29363
+ return /* @__PURE__ */ jsxs49(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29264
29364
  /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Settings \u203A Configuration \u203A Project" }),
29265
29365
  /* @__PURE__ */ jsx61(Text51, { children: " " }),
29266
29366
  loadError ? /* @__PURE__ */ jsxs49(Fragment19, { children: [
@@ -29303,6 +29403,7 @@ function ProjectScreen({ onDone }) {
29303
29403
  setNotice(null);
29304
29404
  visit.trail.record(`edited ${key}`);
29305
29405
  },
29406
+ enterAdvances: true,
29306
29407
  onSave: save,
29307
29408
  onQuit: quit,
29308
29409
  notice,
@@ -29325,7 +29426,7 @@ function ConfigurationScreen({ onDone }) {
29325
29426
  const [focus, setFocus] = useState35(0);
29326
29427
  const [open, setOpen] = useState35(null);
29327
29428
  const close = () => setOpen(null);
29328
- useInput15((input, key) => {
29429
+ useInput16((input, key) => {
29329
29430
  if (open) return;
29330
29431
  if (key.upArrow) {
29331
29432
  setFocus((i) => (i - 1 + SECTIONS.length) % SECTIONS.length);
@@ -29343,12 +29444,12 @@ function ConfigurationScreen({ onDone }) {
29343
29444
  });
29344
29445
  if (open === "project") return /* @__PURE__ */ jsx62(ProjectScreen, { onDone: close });
29345
29446
  if (open === "agents") return /* @__PURE__ */ jsx62(AgentsScreen, { onDone: close });
29346
- return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29447
+ return /* @__PURE__ */ jsxs50(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29347
29448
  /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Configuration" }),
29348
29449
  /* @__PURE__ */ jsx62(Text52, { children: " " }),
29349
- SECTIONS.map((section, index) => /* @__PURE__ */ jsxs50(Box49, { gap: 1, children: [
29450
+ SECTIONS.map((section, index) => /* @__PURE__ */ jsxs50(Box50, { gap: 1, children: [
29350
29451
  /* @__PURE__ */ jsx62(Text52, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
29351
- /* @__PURE__ */ jsx62(Box49, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29452
+ /* @__PURE__ */ jsx62(Box50, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text52, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29352
29453
  /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: section.description })
29353
29454
  ] }, section.id)),
29354
29455
  /* @__PURE__ */ jsx62(Text52, { children: " " }),
@@ -29367,7 +29468,7 @@ function ConfigurationScreen({ onDone }) {
29367
29468
 
29368
29469
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
29369
29470
  import { useEffect as useEffect26, useState as useState36 } from "react";
29370
- import { Box as Box50, Text as Text53, useInput as useInput16 } from "ink";
29471
+ import { Box as Box51, Text as Text53, useInput as useInput17 } from "ink";
29371
29472
 
29372
29473
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
29373
29474
  async function readAnalyticsSetting() {
@@ -29402,7 +29503,7 @@ function OptInAnalyticsScreen({ onDone }) {
29402
29503
  });
29403
29504
  });
29404
29505
  }, []);
29405
- useInput16((input, key) => {
29506
+ useInput17((input, key) => {
29406
29507
  if (loading) return;
29407
29508
  if (key.return || input === " ") {
29408
29509
  setEnabled((current) => {
@@ -29417,7 +29518,7 @@ function OptInAnalyticsScreen({ onDone }) {
29417
29518
  onDone();
29418
29519
  }
29419
29520
  });
29420
- return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29521
+ return /* @__PURE__ */ jsxs51(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29421
29522
  /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
29422
29523
  /* @__PURE__ */ jsx63(Text53, { children: " " }),
29423
29524
  loading ? /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs51(Fragment20, { children: [
@@ -29445,7 +29546,7 @@ function OptInAnalyticsScreen({ onDone }) {
29445
29546
 
29446
29547
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
29447
29548
  import { useEffect as useEffect27, useRef as useRef17, useState as useState37 } from "react";
29448
- import { Box as Box51, Text as Text54, useInput as useInput17 } from "ink";
29549
+ import { Box as Box52, Text as Text54, useInput as useInput18 } from "ink";
29449
29550
  init_debug_mode_store();
29450
29551
  init_debug_store();
29451
29552
  import { Fragment as Fragment21, jsx as jsx64, jsxs as jsxs52 } from "react/jsx-runtime";
@@ -29502,7 +29603,7 @@ function DebugModeScreen({ onDone }) {
29502
29603
  exitMethod: change.changed ? "saved" : "discarded"
29503
29604
  });
29504
29605
  };
29505
- useInput17((input, key) => {
29606
+ useInput18((input, key) => {
29506
29607
  if (!setting) return;
29507
29608
  if (key.upArrow || key.downArrow) {
29508
29609
  setFocus((current) => ROWS[(ROWS.indexOf(current) + (key.downArrow ? 1 : ROWS.length - 1)) % ROWS.length]);
@@ -29531,16 +29632,16 @@ function DebugModeScreen({ onDone }) {
29531
29632
  });
29532
29633
  const marker = (row) => /* @__PURE__ */ jsx64(Text54, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
29533
29634
  const label = (row, text) => /* @__PURE__ */ jsx64(Text54, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
29534
- return /* @__PURE__ */ jsxs52(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29635
+ return /* @__PURE__ */ jsxs52(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29535
29636
  /* @__PURE__ */ jsx64(Text54, { bold: true, children: "Settings \u203A Debug Mode" }),
29536
29637
  /* @__PURE__ */ jsx64(Text54, { children: " " }),
29537
29638
  setting ? /* @__PURE__ */ jsxs52(Fragment21, { children: [
29538
- /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
29639
+ /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
29539
29640
  marker("enabled"),
29540
29641
  label("enabled", "Debug logging:"),
29541
29642
  /* @__PURE__ */ jsx64(Text54, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
29542
29643
  ] }),
29543
- /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
29644
+ /* @__PURE__ */ jsxs52(Box52, { gap: 1, children: [
29544
29645
  marker("retentionDays"),
29545
29646
  label("retentionDays", "Delete logs after:"),
29546
29647
  RETENTION_CHOICES.map((days) => {