@contentful/experience-design-system-cli 2.37.1-dev-build-bdab4dbe.0 → 2.37.1-dev-build-182ecd7e.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -18515,6 +18515,40 @@ var init_PageContainer = __esm({
18515
18515
  }
18516
18516
  });
18517
18517
 
18518
+ // packages/experience-design-system-cli/src/tui/ClearableTextInput.tsx
18519
+ import { useRef } from "react";
18520
+ import { useInput as useInput3 } from "ink";
18521
+ import TextInput from "ink-text-input";
18522
+ import { jsx as jsx4 } from "react/jsx-runtime";
18523
+ function isClearKey(input, key) {
18524
+ return key.ctrl && input === "d";
18525
+ }
18526
+ function ClearableTextInput({ onChange, ...props }) {
18527
+ const justCleared = useRef(false);
18528
+ useInput3((input, key) => {
18529
+ if (!isClearKey(input, key)) return;
18530
+ justCleared.current = true;
18531
+ setTimeout(() => {
18532
+ justCleared.current = false;
18533
+ }, 0);
18534
+ onChange("");
18535
+ });
18536
+ return /* @__PURE__ */ jsx4(
18537
+ TextInput,
18538
+ {
18539
+ ...props,
18540
+ onChange: (value) => {
18541
+ if (!justCleared.current) onChange(value);
18542
+ }
18543
+ }
18544
+ );
18545
+ }
18546
+ var init_ClearableTextInput = __esm({
18547
+ "packages/experience-design-system-cli/src/tui/ClearableTextInput.tsx"() {
18548
+ "use strict";
18549
+ }
18550
+ });
18551
+
18518
18552
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
18519
18553
  function shouldQuit(key) {
18520
18554
  return key.escape;
@@ -18530,9 +18564,9 @@ var init_logic = __esm({
18530
18564
  });
18531
18565
 
18532
18566
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
18533
- import { useInput as useInput3 } from "ink";
18567
+ import { useInput as useInput4 } from "ink";
18534
18568
  function useWelcomeControls(onQuit) {
18535
- useInput3((_input, key) => {
18569
+ useInput4((_input, key) => {
18536
18570
  if (shouldQuit(key)) onQuit();
18537
18571
  });
18538
18572
  }
@@ -18543,6 +18577,7 @@ var init_controls = __esm({
18543
18577
  init_logic();
18544
18578
  WELCOME_CONTROLS = [
18545
18579
  { keys: "Enter", label: "Continue" },
18580
+ { keys: "Ctrl+D", label: "Clear" },
18546
18581
  { keys: "Esc", label: "Back to menu" }
18547
18582
  ];
18548
18583
  }
@@ -18551,8 +18586,7 @@ var init_controls = __esm({
18551
18586
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
18552
18587
  import { useState as useState3 } from "react";
18553
18588
  import { Box as Box3, Text as Text4 } from "ink";
18554
- import TextInput from "ink-text-input";
18555
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
18589
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
18556
18590
  function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18557
18591
  const [projectPath, setProjectPath] = useState3(initialPath);
18558
18592
  useWelcomeControls(onQuit);
@@ -18561,8 +18595,8 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18561
18595
  if (path5) onContinue(path5);
18562
18596
  };
18563
18597
  return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
18564
- /* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
18565
- /* @__PURE__ */ jsx4(Box3, { flexDirection: "row", children: /* @__PURE__ */ jsxs3(
18598
+ /* @__PURE__ */ jsx5(Text4, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
18599
+ /* @__PURE__ */ jsx5(Box3, { flexDirection: "row", children: /* @__PURE__ */ jsxs3(
18566
18600
  Box3,
18567
18601
  {
18568
18602
  flexDirection: "column",
@@ -18574,29 +18608,29 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18574
18608
  flexShrink: 1,
18575
18609
  children: [
18576
18610
  OVERVIEW.map((item) => /* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
18577
- /* @__PURE__ */ jsx4(Box3, { flexShrink: 0, children: /* @__PURE__ */ jsx4(Text4, { bold: true, children: item.label }) }),
18578
- /* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, wrap: "truncate-end", children: item.description }),
18579
- item.ai && /* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.accent, children: AI_MARKER })
18611
+ /* @__PURE__ */ jsx5(Box3, { flexShrink: 0, children: /* @__PURE__ */ jsx5(Text4, { bold: true, children: item.label }) }),
18612
+ /* @__PURE__ */ jsx5(Text4, { color: PALETTE.muted, wrap: "truncate-end", children: item.description }),
18613
+ item.ai && /* @__PURE__ */ jsx5(Text4, { bold: true, color: PALETTE.accent, children: AI_MARKER })
18580
18614
  ] }, item.label)),
18581
18615
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", marginTop: 1, children: [
18582
18616
  /* @__PURE__ */ jsxs3(Text4, { bold: true, children: [
18583
- /* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: AI_MARKER }),
18617
+ /* @__PURE__ */ jsx5(Text4, { color: PALETTE.accent, children: AI_MARKER }),
18584
18618
  " AI disclosure"
18585
18619
  ] }),
18586
- AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
18620
+ AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx5(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
18587
18621
  ] })
18588
18622
  ]
18589
18623
  }
18590
18624
  ) }),
18591
18625
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, children: [
18592
- /* @__PURE__ */ jsx4(Text4, { children: "Where is your component library?" }),
18626
+ /* @__PURE__ */ jsx5(Text4, { children: "Where is your component library?" }),
18593
18627
  /* @__PURE__ */ jsxs3(Box3, { children: [
18594
- /* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: "? " }),
18595
- /* @__PURE__ */ jsx4(Text4, { children: "Project path: " }),
18596
- /* @__PURE__ */ jsx4(TextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
18628
+ /* @__PURE__ */ jsx5(Text4, { color: PALETTE.accent, children: "? " }),
18629
+ /* @__PURE__ */ jsx5(Text4, { children: "Project path: " }),
18630
+ /* @__PURE__ */ jsx5(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
18597
18631
  ] })
18598
18632
  ] }),
18599
- /* @__PURE__ */ jsx4(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
18633
+ /* @__PURE__ */ jsx5(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
18600
18634
  "[",
18601
18635
  control.keys,
18602
18636
  "] ",
@@ -18609,6 +18643,7 @@ var init_screen = __esm({
18609
18643
  "packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx"() {
18610
18644
  "use strict";
18611
18645
  init_theme();
18646
+ init_ClearableTextInput();
18612
18647
  init_controls();
18613
18648
  init_logic();
18614
18649
  OVERVIEW_BOX_MAX_WIDTH = 90;
@@ -18649,9 +18684,9 @@ var init_logic2 = __esm({
18649
18684
  });
18650
18685
 
18651
18686
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
18652
- import { useInput as useInput4 } from "ink";
18687
+ import { useInput as useInput5 } from "ink";
18653
18688
  function useTokenInputControls(onBack) {
18654
- useInput4((_input, key) => {
18689
+ useInput5((_input, key) => {
18655
18690
  if (shouldGoBack(key)) onBack();
18656
18691
  });
18657
18692
  }
@@ -18662,6 +18697,7 @@ var init_controls2 = __esm({
18662
18697
  init_logic2();
18663
18698
  TOKEN_INPUT_CONTROLS = [
18664
18699
  { keys: "Enter", label: "Continue" },
18700
+ { keys: "Ctrl+D", label: "Clear" },
18665
18701
  { keys: "Esc", label: "Back" }
18666
18702
  ];
18667
18703
  }
@@ -18718,8 +18754,7 @@ var init_validate_path = __esm({
18718
18754
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
18719
18755
  import { useState as useState4 } from "react";
18720
18756
  import { Box as Box4, Text as Text5 } from "ink";
18721
- import TextInput2 from "ink-text-input";
18722
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
18757
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
18723
18758
  function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18724
18759
  const [tokenPath, setTokenPath] = useState4(initialPath);
18725
18760
  const [failure, setFailure] = useState4(null);
@@ -18739,13 +18774,13 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18739
18774
  else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
18740
18775
  };
18741
18776
  return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
18742
- /* @__PURE__ */ jsx5(Text5, { bold: true, children: "Design tokens" }),
18743
- /* @__PURE__ */ jsx5(Text5, { color: PALETTE.muted, children: "Point me to your raw token file (e.g. ~/design-tokens/tokens.json). You can use ~, relative, or absolute paths. Claude will map it to Design Token Group Format (DTCG)." }),
18777
+ /* @__PURE__ */ jsx6(Text5, { bold: true, children: "Design tokens" }),
18778
+ /* @__PURE__ */ jsx6(Text5, { color: PALETTE.muted, children: "Point me to your raw token file (e.g. ~/design-tokens/tokens.json). You can use ~, relative, or absolute paths. Claude will map it to Design Token Group Format (DTCG)." }),
18744
18779
  /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
18745
18780
  /* @__PURE__ */ jsxs4(Box4, { gap: 1, children: [
18746
- /* @__PURE__ */ jsx5(Text5, { color: PALETTE.accent, children: "?" }),
18747
- /* @__PURE__ */ jsx5(Text5, { children: "Token path:" }),
18748
- /* @__PURE__ */ jsx5(TextInput2, { value: tokenPath, onChange: change, onSubmit: submit })
18781
+ /* @__PURE__ */ jsx6(Text5, { color: PALETTE.accent, children: "?" }),
18782
+ /* @__PURE__ */ jsx6(Text5, { children: "Token path:" }),
18783
+ /* @__PURE__ */ jsx6(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
18749
18784
  ] }),
18750
18785
  failure && /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
18751
18786
  /* @__PURE__ */ jsxs4(Text5, { color: PALETTE.error, children: [
@@ -18758,7 +18793,7 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18758
18793
  ] })
18759
18794
  ] })
18760
18795
  ] }),
18761
- /* @__PURE__ */ jsx5(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
18796
+ /* @__PURE__ */ jsx6(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
18762
18797
  "[",
18763
18798
  control.keys,
18764
18799
  "] ",
@@ -18770,6 +18805,7 @@ var init_screen2 = __esm({
18770
18805
  "packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx"() {
18771
18806
  "use strict";
18772
18807
  init_theme();
18808
+ init_ClearableTextInput();
18773
18809
  init_controls2();
18774
18810
  init_logic2();
18775
18811
  init_validate_path();
@@ -18852,12 +18888,12 @@ var init_logic3 = __esm({
18852
18888
  });
18853
18889
 
18854
18890
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
18855
- import { useInput as useInput5 } from "ink";
18891
+ import { useInput as useInput6 } from "ink";
18856
18892
  function controlsFor(phase) {
18857
18893
  return CONTROLS[phase];
18858
18894
  }
18859
18895
  function usePathValidationControls(phase, handlers) {
18860
- useInput5((input, key) => {
18896
+ useInput6((input, key) => {
18861
18897
  const action = keyAction(phase, input, key);
18862
18898
  if (action === "confirm") handlers.onConfirm();
18863
18899
  else if (action === "change-path") handlers.onChangePath();
@@ -18911,7 +18947,7 @@ var init_scan_files = __esm({
18911
18947
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
18912
18948
  import { useEffect as useEffect3, useMemo, useState as useState5 } from "react";
18913
18949
  import { Box as Box5, Text as Text6 } from "ink";
18914
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
18950
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
18915
18951
  function Row({ row }) {
18916
18952
  return /* @__PURE__ */ jsxs5(Text6, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
18917
18953
  " \u2022 ",
@@ -18927,7 +18963,7 @@ function Failure({ scan, path: path5 }) {
18927
18963
  "\u2717 ",
18928
18964
  headline
18929
18965
  ] }),
18930
- hints.map((hint) => /* @__PURE__ */ jsx6(Text6, { color: PALETTE.muted, children: hint }, hint))
18966
+ hints.map((hint) => /* @__PURE__ */ jsx7(Text6, { color: PALETTE.muted, children: hint }, hint))
18931
18967
  ] });
18932
18968
  }
18933
18969
  function Summary({ scan, path: path5 }) {
@@ -18935,7 +18971,7 @@ function Summary({ scan, path: path5 }) {
18935
18971
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, children: [
18936
18972
  /* @__PURE__ */ jsxs5(Text6, { children: [
18937
18973
  "Scanned ",
18938
- /* @__PURE__ */ jsx6(Text6, { bold: true, children: path5 })
18974
+ /* @__PURE__ */ jsx7(Text6, { bold: true, children: path5 })
18939
18975
  ] }),
18940
18976
  /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
18941
18977
  /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.success, children: [
@@ -18943,13 +18979,13 @@ function Summary({ scan, path: path5 }) {
18943
18979
  total,
18944
18980
  " files:"
18945
18981
  ] }),
18946
- rows.map((row) => /* @__PURE__ */ jsx6(Row, { row }, row.label))
18982
+ rows.map((row) => /* @__PURE__ */ jsx7(Row, { row }, row.label))
18947
18983
  ] }),
18948
18984
  warning && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.warning, children: [
18949
18985
  "\u26A0 ",
18950
18986
  warning
18951
18987
  ] }),
18952
- /* @__PURE__ */ jsx6(Text6, { children: "Does this look right?" })
18988
+ /* @__PURE__ */ jsx7(Text6, { children: "Does this look right?" })
18953
18989
  ] });
18954
18990
  }
18955
18991
  function PathValidationScreen({
@@ -18974,12 +19010,12 @@ function PathValidationScreen({
18974
19010
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
18975
19011
  scan === void 0 && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
18976
19012
  "Scanning ",
18977
- /* @__PURE__ */ jsx6(Text6, { bold: true, children: resolvedPath }),
19013
+ /* @__PURE__ */ jsx7(Text6, { bold: true, children: resolvedPath }),
18978
19014
  "..."
18979
19015
  ] }),
18980
- scan?.ok === false && /* @__PURE__ */ jsx6(Failure, { scan, path: resolvedPath }),
18981
- scan?.ok === true && /* @__PURE__ */ jsx6(Summary, { scan, path: resolvedPath }),
18982
- /* @__PURE__ */ jsx6(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
19016
+ scan?.ok === false && /* @__PURE__ */ jsx7(Failure, { scan, path: resolvedPath }),
19017
+ scan?.ok === true && /* @__PURE__ */ jsx7(Summary, { scan, path: resolvedPath }),
19018
+ /* @__PURE__ */ jsx7(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
18983
19019
  "[",
18984
19020
  control.keys,
18985
19021
  "] ",
@@ -19032,9 +19068,9 @@ var init_logic4 = __esm({
19032
19068
  });
19033
19069
 
19034
19070
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/controls.ts
19035
- import { useInput as useInput6 } from "ink";
19071
+ import { useInput as useInput7 } from "ink";
19036
19072
  function useCredentialsControls(handlers) {
19037
- useInput6((input, key) => {
19073
+ useInput7((input, key) => {
19038
19074
  if (handlers.disabled) return;
19039
19075
  const action = keyAction2(input, key);
19040
19076
  if (action === "back") handlers.onBack();
@@ -19104,17 +19140,17 @@ var init_validate4 = __esm({
19104
19140
  });
19105
19141
 
19106
19142
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
19107
- import { useRef, useState as useState6 } from "react";
19143
+ import { useRef as useRef2, useState as useState6 } from "react";
19108
19144
  import { Box as Box6, Text as Text7 } from "ink";
19109
- import TextInput3 from "ink-text-input";
19110
- import { Fragment, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
19145
+ import TextInput2 from "ink-text-input";
19146
+ import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
19111
19147
  function CredentialsScreen({
19112
19148
  onDone,
19113
19149
  onBack,
19114
19150
  initial = {},
19115
19151
  validate: validate3 = validateCredentials
19116
19152
  }) {
19117
- const initialValues = useRef(
19153
+ const initialValues = useRef2(
19118
19154
  normalize({
19119
19155
  spaceId: initial.spaceId ?? "",
19120
19156
  environmentId: initial.environmentId || "master",
@@ -19155,21 +19191,21 @@ function CredentialsScreen({
19155
19191
  };
19156
19192
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
19157
19193
  /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
19158
- /* @__PURE__ */ jsx7(Text7, { bold: true, children: "Contentful credentials" }),
19159
- /* @__PURE__ */ jsx7(Text7, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
19194
+ /* @__PURE__ */ jsx8(Text7, { bold: true, children: "Contentful credentials" }),
19195
+ /* @__PURE__ */ jsx8(Text7, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
19160
19196
  !prefilled && /* @__PURE__ */ jsxs6(Fragment, { children: [
19161
- /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "We use it to check what components already exist and to push your import. If you skip, files are saved locally and nothing is pushed." }),
19162
- /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
19197
+ /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "We use it to check what components already exist and to push your import. If you skip, files are saved locally and nothing is pushed." }),
19198
+ /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
19163
19199
  ] })
19164
19200
  ] }),
19165
- /* @__PURE__ */ jsx7(Box6, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs6(Box6, { gap: 1, children: [
19166
- /* @__PURE__ */ jsx7(Text7, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
19201
+ /* @__PURE__ */ jsx8(Box6, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs6(Box6, { gap: 1, children: [
19202
+ /* @__PURE__ */ jsx8(Text7, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
19167
19203
  /* @__PURE__ */ jsxs6(Text7, { bold: active === field, children: [
19168
19204
  LABELS[field],
19169
19205
  ":"
19170
19206
  ] }),
19171
- /* @__PURE__ */ jsx7(
19172
- TextInput3,
19207
+ /* @__PURE__ */ jsx8(
19208
+ TextInput2,
19173
19209
  {
19174
19210
  value: values[field],
19175
19211
  focus: active === field && !validating,
@@ -19180,14 +19216,14 @@ function CredentialsScreen({
19180
19216
  }
19181
19217
  )
19182
19218
  ] }, field)) }),
19183
- active === "host" && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
19219
+ active === "host" && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
19184
19220
  error && /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.error, children: [
19185
19221
  "\u2717 ",
19186
19222
  error
19187
19223
  ] }),
19188
- validating && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.accent, children: "Validating credentials..." }),
19189
- !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
19190
- /* @__PURE__ */ jsx7(Box6, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
19224
+ validating && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.accent, children: "Validating credentials..." }),
19225
+ !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
19226
+ /* @__PURE__ */ jsx8(Box6, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
19191
19227
  "[",
19192
19228
  control.keys,
19193
19229
  "] ",
@@ -19234,9 +19270,9 @@ var init_logic5 = __esm({
19234
19270
  });
19235
19271
 
19236
19272
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
19237
- import { useInput as useInput7 } from "ink";
19273
+ import { useInput as useInput8 } from "ink";
19238
19274
  function useErrorControls(handlers) {
19239
- useInput7((input, key) => {
19275
+ useInput8((input, key) => {
19240
19276
  const action = errorAction(input, key, {
19241
19277
  canRetry: handlers.onRetry !== void 0,
19242
19278
  canAcknowledge: handlers.onAcknowledge !== void 0
@@ -19255,7 +19291,7 @@ var init_controls5 = __esm({
19255
19291
 
19256
19292
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
19257
19293
  import { Box as Box7, Text as Text8 } from "ink";
19258
- import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
19294
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
19259
19295
  function ErrorStep({
19260
19296
  stepName,
19261
19297
  message,
@@ -19274,8 +19310,8 @@ function ErrorStep({
19274
19310
  stepName,
19275
19311
  " failed"
19276
19312
  ] }),
19277
- /* @__PURE__ */ jsx8(Text8, { color: PALETTE.error, children: message }),
19278
- /* @__PURE__ */ jsx8(Box7, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
19313
+ /* @__PURE__ */ jsx9(Text8, { color: PALETTE.error, children: message }),
19314
+ /* @__PURE__ */ jsx9(Box7, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
19279
19315
  "[",
19280
19316
  control.keys,
19281
19317
  "] ",
@@ -19313,9 +19349,9 @@ var init_logic6 = __esm({
19313
19349
  });
19314
19350
 
19315
19351
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
19316
- import { useInput as useInput8 } from "ink";
19352
+ import { useInput as useInput9 } from "ink";
19317
19353
  function useGateControls(handlers) {
19318
- useInput8((input, key) => {
19354
+ useInput9((input, key) => {
19319
19355
  const action = gateAction(input, key, handlers.canSkip);
19320
19356
  if (action === "continue") handlers.onContinue();
19321
19357
  else if (action === "skip") handlers.onSkip();
@@ -19331,7 +19367,7 @@ var init_controls6 = __esm({
19331
19367
 
19332
19368
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
19333
19369
  import { Box as Box8, Text as Text9 } from "ink";
19334
- import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
19370
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
19335
19371
  function GateStep({
19336
19372
  message,
19337
19373
  onContinue,
@@ -19353,9 +19389,9 @@ function GateStep({
19353
19389
  " ",
19354
19390
  message
19355
19391
  ] }),
19356
- summary && /* @__PURE__ */ jsx9(Text9, { color: PALETTE.muted, children: summary }),
19357
- context && /* @__PURE__ */ jsx9(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx9(Text9, { children: context }) }),
19358
- /* @__PURE__ */ jsx9(Box8, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs8(Text9, { color: PALETTE.muted, children: [
19392
+ summary && /* @__PURE__ */ jsx10(Text9, { color: PALETTE.muted, children: summary }),
19393
+ context && /* @__PURE__ */ jsx10(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx10(Text9, { children: context }) }),
19394
+ /* @__PURE__ */ jsx10(Box8, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs8(Text9, { color: PALETTE.muted, children: [
19359
19395
  "[",
19360
19396
  control.keys,
19361
19397
  "] ",
@@ -19430,24 +19466,24 @@ var init_use_elapsed = __esm({
19430
19466
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
19431
19467
  import { Box as Box9, Text as Text10 } from "ink";
19432
19468
  import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
19433
- import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
19469
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
19434
19470
  function Line({ line }) {
19435
19471
  if (line.progress) {
19436
19472
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, children: [
19437
19473
  /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
19438
- /* @__PURE__ */ jsx10(Box9, { width: 40, children: /* @__PURE__ */ jsx10(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx10(ProgressBar, { value: progressPercent(line.progress) }) }) }),
19474
+ /* @__PURE__ */ jsx11(Box9, { width: 40, children: /* @__PURE__ */ jsx11(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx11(ProgressBar, { value: progressPercent(line.progress) }) }) }),
19439
19475
  /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
19440
19476
  line.progress.done,
19441
19477
  "/",
19442
19478
  line.progress.total
19443
19479
  ] })
19444
19480
  ] }),
19445
- /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
19481
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
19446
19482
  ] });
19447
19483
  }
19448
19484
  return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
19449
- line.complete ? /* @__PURE__ */ jsx10(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx10(Spinner, {}),
19450
- /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
19485
+ line.complete ? /* @__PURE__ */ jsx11(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx11(Spinner, {}),
19486
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
19451
19487
  ] });
19452
19488
  }
19453
19489
  function RunningStep({
@@ -19460,13 +19496,13 @@ function RunningStep({
19460
19496
  const elapsed = useElapsed();
19461
19497
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
19462
19498
  /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
19463
- /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: RULE }),
19464
- /* @__PURE__ */ jsx10(Text10, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
19465
- /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: RULE })
19499
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: RULE }),
19500
+ /* @__PURE__ */ jsx11(Text10, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
19501
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: RULE })
19466
19502
  ] }),
19467
- /* @__PURE__ */ jsx10(Text10, { children: description }),
19468
- /* @__PURE__ */ jsx10(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx10(Line, { line }, index)) }),
19469
- /* @__PURE__ */ jsx10(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
19503
+ /* @__PURE__ */ jsx11(Text10, { children: description }),
19504
+ /* @__PURE__ */ jsx11(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx11(Line, { line }, index)) }),
19505
+ /* @__PURE__ */ jsx11(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
19470
19506
  "Elapsed: ",
19471
19507
  elapsed
19472
19508
  ] }) })
@@ -19546,7 +19582,7 @@ var init_logic8 = __esm({
19546
19582
  });
19547
19583
 
19548
19584
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-reuse/screen.tsx
19549
- import { jsx as jsx11 } from "react/jsx-runtime";
19585
+ import { jsx as jsx12 } from "react/jsx-runtime";
19550
19586
  function TokenReuseScreen({
19551
19587
  tokensPath,
19552
19588
  sourceChanged,
@@ -19555,7 +19591,7 @@ function TokenReuseScreen({
19555
19591
  onQuit
19556
19592
  }) {
19557
19593
  const { summary, context } = gateText({ tokensPath, sourceChanged });
19558
- return /* @__PURE__ */ jsx11(
19594
+ return /* @__PURE__ */ jsx12(
19559
19595
  GateStep,
19560
19596
  {
19561
19597
  message: "Existing tokens.json found",
@@ -19672,14 +19708,14 @@ var init_logic9 = __esm({
19672
19708
  });
19673
19709
 
19674
19710
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
19675
- import { jsx as jsx12 } from "react/jsx-runtime";
19711
+ import { jsx as jsx13 } from "react/jsx-runtime";
19676
19712
  function ExtractionScreen({
19677
19713
  progress,
19678
19714
  agent,
19679
19715
  stepNumber,
19680
19716
  totalSteps
19681
19717
  }) {
19682
- return /* @__PURE__ */ jsx12(
19718
+ return /* @__PURE__ */ jsx13(
19683
19719
  RunningStep,
19684
19720
  {
19685
19721
  stepNumber,
@@ -19986,10 +20022,10 @@ var init_run = __esm({
19986
20022
  });
19987
20023
 
19988
20024
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/use-extraction.ts
19989
- import { useEffect as useEffect5, useRef as useRef2, useState as useState8 } from "react";
20025
+ import { useEffect as useEffect5, useRef as useRef3, useState as useState8 } from "react";
19990
20026
  function useExtraction(input) {
19991
20027
  const [state2, setState] = useState8();
19992
- const current = useRef2();
20028
+ const current = useRef3();
19993
20029
  useEffect5(() => {
19994
20030
  current.current = input;
19995
20031
  if (!input) {
@@ -20152,7 +20188,7 @@ var init_columns = __esm({
20152
20188
 
20153
20189
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
20154
20190
  import { Box as Box10, Text as Text11 } from "ink";
20155
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
20191
+ import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
20156
20192
  function terminalPanelHeight(rows, reservedRows = 4) {
20157
20193
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
20158
20194
  }
@@ -20167,7 +20203,7 @@ function FixedPanel({
20167
20203
  clipOverflow = true,
20168
20204
  children
20169
20205
  }) {
20170
- return /* @__PURE__ */ jsx13(
20206
+ return /* @__PURE__ */ jsx14(
20171
20207
  Box10,
20172
20208
  {
20173
20209
  flexDirection: "column",
@@ -20193,7 +20229,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
20193
20229
  ...height === void 0 ? {} : { height },
20194
20230
  focused,
20195
20231
  children: [
20196
- title && /* @__PURE__ */ jsx13(WindowedPanelHeader, { title, width, focused }),
20232
+ title && /* @__PURE__ */ jsx14(WindowedPanelHeader, { title, width, focused }),
20197
20233
  children
20198
20234
  ]
20199
20235
  }
@@ -20205,8 +20241,8 @@ function WindowedPanelHeader({
20205
20241
  focused
20206
20242
  }) {
20207
20243
  return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
20208
- /* @__PURE__ */ jsx13(Text11, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
20209
- /* @__PURE__ */ jsx13(Text11, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
20244
+ /* @__PURE__ */ jsx14(Text11, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
20245
+ /* @__PURE__ */ jsx14(Text11, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
20210
20246
  ] });
20211
20247
  }
20212
20248
  function formatWindowIndicator(direction, count) {
@@ -20214,7 +20250,7 @@ function formatWindowIndicator(direction, count) {
20214
20250
  return `${direction === "up" ? "\u2191" : "\u2193"} ${count} more`;
20215
20251
  }
20216
20252
  function WindowIndicator({ direction, count }) {
20217
- return /* @__PURE__ */ jsx13(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
20253
+ return /* @__PURE__ */ jsx14(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
20218
20254
  }
20219
20255
  var MIN_TERMINAL_PANEL_HEIGHT;
20220
20256
  var init_windowed_panel = __esm({
@@ -20226,31 +20262,31 @@ var init_windowed_panel = __esm({
20226
20262
  });
20227
20263
 
20228
20264
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
20229
- import React6 from "react";
20265
+ import React7 from "react";
20230
20266
  import { Box as Box11, Text as Text12 } from "ink";
20231
20267
  import figures from "figures";
20232
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
20268
+ import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
20233
20269
  function AddedColumn(props) {
20234
20270
  const { title, width, height, entries, cursor, focused, aiFlaggedByKey, visibleCount } = props;
20235
20271
  const reserveAiBadge = entries.some((e) => aiFlaggedByKey?.get(e.name) === true);
20236
20272
  const firstNonCycleIdx = entries.findIndex((e) => !e.isCycle);
20237
20273
  const window = computeColumnWindow(entries.length, cursor, Math.max(1, visibleCount));
20238
20274
  return /* @__PURE__ */ jsxs11(WindowedPanel, { width, height, title, focused, children: [
20239
- /* @__PURE__ */ jsx14(WindowIndicator, { direction: "up", count: window.above }),
20240
- entries.length === 0 ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
20275
+ /* @__PURE__ */ jsx15(WindowIndicator, { direction: "up", count: window.above }),
20276
+ entries.length === 0 ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
20241
20277
  const i = window.start + vi;
20242
20278
  const isSelected = i === cursor;
20243
20279
  const isCursor = focused && isSelected;
20244
20280
  const aiFlagged = aiFlaggedByKey?.get(entry.name) === true;
20245
20281
  const showSeparator = firstNonCycleIdx > 0 && i === firstNonCycleIdx;
20246
20282
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
20247
- return /* @__PURE__ */ jsxs11(React6.Fragment, { children: [
20248
- showSeparator && /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
20283
+ return /* @__PURE__ */ jsxs11(React7.Fragment, { children: [
20284
+ showSeparator && /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
20249
20285
  /* @__PURE__ */ jsxs11(Box11, { children: [
20250
- isCursor ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx14(Text12, { children: " " }),
20251
- reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx14(Text12, { children: " " })),
20252
- entry.isCycle && /* @__PURE__ */ jsx14(Text12, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
20253
- /* @__PURE__ */ jsx14(
20286
+ isCursor ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx15(Text12, { children: " " }),
20287
+ reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx15(Text12, { children: " " })),
20288
+ entry.isCycle && /* @__PURE__ */ jsx15(Text12, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
20289
+ /* @__PURE__ */ jsx15(
20254
20290
  Text12,
20255
20291
  {
20256
20292
  color: style.nameColor,
@@ -20264,7 +20300,7 @@ function AddedColumn(props) {
20264
20300
  ] })
20265
20301
  ] }, entry.name);
20266
20302
  }),
20267
- /* @__PURE__ */ jsx14(WindowIndicator, { direction: "down", count: window.below })
20303
+ /* @__PURE__ */ jsx15(WindowIndicator, { direction: "down", count: window.below })
20268
20304
  ] });
20269
20305
  }
20270
20306
  var init_added_column = __esm({
@@ -20279,7 +20315,7 @@ var init_added_column = __esm({
20279
20315
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
20280
20316
  import { Box as Box12, Text as Text13 } from "ink";
20281
20317
  import figures2 from "figures";
20282
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
20318
+ import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
20283
20319
  function cycleLabel(cycle, index) {
20284
20320
  const parts = [];
20285
20321
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -20291,16 +20327,16 @@ function cycleLabel(cycle, index) {
20291
20327
  }
20292
20328
  function CyclesPanel({ cycles, cursor }) {
20293
20329
  return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
20294
- /* @__PURE__ */ jsx15(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
20295
- /* @__PURE__ */ jsx15(Text13, { children: " " }),
20330
+ /* @__PURE__ */ jsx16(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
20331
+ /* @__PURE__ */ jsx16(Text13, { children: " " }),
20296
20332
  cycles.map((cycle, i) => {
20297
20333
  const isCursor = i === cursor;
20298
20334
  return /* @__PURE__ */ jsxs12(Text13, { children: [
20299
- isCursor ? /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx15(Text13, { children: " " }),
20300
- /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
20335
+ isCursor ? /* @__PURE__ */ jsx16(Text13, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx16(Text13, { children: " " }),
20336
+ /* @__PURE__ */ jsx16(Text13, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
20301
20337
  ] }, i);
20302
20338
  }),
20303
- /* @__PURE__ */ jsx15(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
20339
+ /* @__PURE__ */ jsx16(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
20304
20340
  ] });
20305
20341
  }
20306
20342
  var init_cycles_panel = __esm({
@@ -20312,13 +20348,13 @@ var init_cycles_panel = __esm({
20312
20348
 
20313
20349
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
20314
20350
  import { Box as Box13, Text as Text14 } from "ink";
20315
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
20351
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
20316
20352
  function RejectPrompt({ pending }) {
20317
20353
  return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
20318
- /* @__PURE__ */ jsx16(Text14, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
20319
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx16(Text14, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
20320
- pending.descendants.length > 0 && /* @__PURE__ */ jsx16(Text14, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
20321
- /* @__PURE__ */ jsx16(Text14, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
20354
+ /* @__PURE__ */ jsx17(Text14, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
20355
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx17(Text14, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
20356
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx17(Text14, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
20357
+ /* @__PURE__ */ jsx17(Text14, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
20322
20358
  ] });
20323
20359
  }
20324
20360
  var init_reject_prompt = __esm({
@@ -20330,11 +20366,11 @@ var init_reject_prompt = __esm({
20330
20366
 
20331
20367
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/LegendEntry.tsx
20332
20368
  import { Text as Text15 } from "ink";
20333
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
20369
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
20334
20370
  function legendEntry(keyBracket, label, active = false) {
20335
20371
  return /* @__PURE__ */ jsxs14(Text15, { children: [
20336
- /* @__PURE__ */ jsx17(Text15, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
20337
- /* @__PURE__ */ jsx17(Text15, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
20372
+ /* @__PURE__ */ jsx18(Text15, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
20373
+ /* @__PURE__ */ jsx18(Text15, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
20338
20374
  ] }, keyBracket + label);
20339
20375
  }
20340
20376
  var init_LegendEntry = __esm({
@@ -20368,7 +20404,7 @@ var init_CompactControlBar = __esm({
20368
20404
 
20369
20405
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
20370
20406
  import { Box as Box15, Text as Text16 } from "ink";
20371
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
20407
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
20372
20408
  function CounterStrip(props) {
20373
20409
  const { counters, totalWidth } = props;
20374
20410
  const condensed = totalWidth < 60;
@@ -20376,25 +20412,25 @@ function CounterStrip(props) {
20376
20412
  const labelRej = condensed ? "Rej" : "Rejected";
20377
20413
  const labelUnd = condensed ? "Und" : "Undecided";
20378
20414
  const sep = condensed ? " | " : " ";
20379
- return /* @__PURE__ */ jsx18(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
20415
+ return /* @__PURE__ */ jsx19(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
20380
20416
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20381
20417
  labelGrp,
20382
20418
  " "
20383
20419
  ] }),
20384
- /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.groups }),
20385
- /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
20420
+ /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.groups }),
20421
+ /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
20386
20422
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20387
20423
  labelRej,
20388
20424
  " "
20389
20425
  ] }),
20390
- /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.rejected }),
20391
- /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
20426
+ /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.rejected }),
20427
+ /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
20392
20428
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20393
20429
  labelUnd,
20394
20430
  " "
20395
20431
  ] }),
20396
- /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.undecided }),
20397
- /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep })
20432
+ /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.undecided }),
20433
+ /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep })
20398
20434
  ] }) });
20399
20435
  }
20400
20436
  var init_CounterStrip = __esm({
@@ -20407,7 +20443,7 @@ var init_CounterStrip = __esm({
20407
20443
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
20408
20444
  import figures3 from "figures";
20409
20445
  import { Box as Box16, Text as Text17 } from "ink";
20410
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
20446
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
20411
20447
  function windowStart(rowCount, highlightIndex, maxRows) {
20412
20448
  if (rowCount <= maxRows) return 0;
20413
20449
  const maxStart = rowCount - maxRows;
@@ -20418,8 +20454,8 @@ function windowStart(rowCount, highlightIndex, maxRows) {
20418
20454
  }
20419
20455
  function defaultRenderRow(row, index, isCursor) {
20420
20456
  return /* @__PURE__ */ jsxs17(Text17, { children: [
20421
- isCursor ? /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx19(Text17, { children: " " }),
20422
- /* @__PURE__ */ jsx19(Text17, { inverse: isCursor, children: " " + row.label })
20457
+ isCursor ? /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx20(Text17, { children: " " }),
20458
+ /* @__PURE__ */ jsx20(Text17, { inverse: isCursor, children: " " + row.label })
20423
20459
  ] }, index);
20424
20460
  }
20425
20461
  function GotoBanner({
@@ -20449,14 +20485,14 @@ function GotoBanner({
20449
20485
  width,
20450
20486
  flexShrink: 0,
20451
20487
  children: [
20452
- /* @__PURE__ */ jsx19(Text17, { bold: true, children: title }),
20453
- moreAbove > 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
20488
+ /* @__PURE__ */ jsx20(Text17, { bold: true, children: title }),
20489
+ moreAbove > 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
20454
20490
  visible.map((row, vi) => {
20455
20491
  const i = start + vi;
20456
20492
  return renderRow(row, i, i === highlightIndex);
20457
20493
  }),
20458
- moreBelow > 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
20459
- footerHint !== void 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: footerHint })
20494
+ moreBelow > 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
20495
+ footerHint !== void 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: footerHint })
20460
20496
  ]
20461
20497
  }
20462
20498
  );
@@ -20820,7 +20856,7 @@ var init_composite_closure = __esm({
20820
20856
 
20821
20857
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
20822
20858
  import { Text as Text18 } from "ink";
20823
- import { jsx as jsx20 } from "react/jsx-runtime";
20859
+ import { jsx as jsx21 } from "react/jsx-runtime";
20824
20860
  function previewBadge(annotation) {
20825
20861
  switch (annotation) {
20826
20862
  case "new":
@@ -20839,7 +20875,7 @@ function PreviewBadge({
20839
20875
  badge,
20840
20876
  highlighted = false
20841
20877
  }) {
20842
- return badge ? /* @__PURE__ */ jsx20(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx20(Text18, { children: " " });
20878
+ return badge ? /* @__PURE__ */ jsx21(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx21(Text18, { children: " " });
20843
20879
  }
20844
20880
  var init_badge = __esm({
20845
20881
  "packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx"() {
@@ -20851,7 +20887,7 @@ var init_badge = __esm({
20851
20887
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
20852
20888
  import figures4 from "figures";
20853
20889
  import { Box as Box17, Text as Text19 } from "ink";
20854
- import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
20890
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
20855
20891
  function isEmpty(entry) {
20856
20892
  return Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
20857
20893
  }
@@ -21281,7 +21317,7 @@ function GroupedSidebar(props) {
21281
21317
  " ",
21282
21318
  emptyMessage
21283
21319
  ] }),
21284
- windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "up", count: start }),
21320
+ windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "up", count: start }),
21285
21321
  rows.map((row, i) => {
21286
21322
  const absoluteRowIdx = start + i;
21287
21323
  const isSelected = selectedRowIdx !== void 0 ? absoluteRowIdx === selectedRowIdx && row.itemIdx >= 0 : row.itemIdx >= 0 && row.itemIdx === selectedIdx;
@@ -21309,10 +21345,10 @@ function GroupedSidebar(props) {
21309
21345
  isCursor
21310
21346
  });
21311
21347
  return /* @__PURE__ */ jsxs18(Box17, { children: [
21312
- isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
21313
- /* @__PURE__ */ jsx21(PreviewBadge, { badge, highlighted: isSelected }),
21314
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx21(Text19, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
21315
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
21348
+ isCursor ? /* @__PURE__ */ jsx22(Text19, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx22(Text19, { children: " " }),
21349
+ /* @__PURE__ */ jsx22(PreviewBadge, { badge, highlighted: isSelected }),
21350
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx22(Text19, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx22(Text19, { children: " " })),
21351
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx22(Text19, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx22(Text19, { children: " " })),
21316
21352
  /* @__PURE__ */ jsxs18(
21317
21353
  Text19,
21318
21354
  {
@@ -21327,10 +21363,10 @@ function GroupedSidebar(props) {
21327
21363
  ]
21328
21364
  }
21329
21365
  ),
21330
- inheritanceStyle.glyph && /* @__PURE__ */ jsx21(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
21366
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx22(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
21331
21367
  ] }, row.key);
21332
21368
  }),
21333
- windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "down", count: allRows.length - end })
21369
+ windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "down", count: allRows.length - end })
21334
21370
  ] });
21335
21371
  }
21336
21372
  var GLYPH_EXPAND_COLLAPSED, GLYPH_EXPAND_EXPANDED, GLYPH_TREE_MID, GLYPH_TREE_LAST, GLYPH_WARN, GLYPH_ERROR;
@@ -21351,7 +21387,7 @@ var init_GroupedSidebar = __esm({
21351
21387
  });
21352
21388
 
21353
21389
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
21354
- import { useLayoutEffect, useRef as useRef3 } from "react";
21390
+ import { useLayoutEffect, useRef as useRef4 } from "react";
21355
21391
  import { useStdin } from "ink";
21356
21392
  function parseInput(data) {
21357
21393
  const isShiftTab = data === "\x1B[Z";
@@ -21413,7 +21449,7 @@ function registerInputHandler(stdin, setRawMode, handler) {
21413
21449
  }
21414
21450
  function useImmediateInput(handler, enabled = true) {
21415
21451
  const { stdin, setRawMode } = useStdin();
21416
- const handlerRef = useRef3(handler);
21452
+ const handlerRef = useRef4(handler);
21417
21453
  handlerRef.current = handler;
21418
21454
  useLayoutEffect(() => {
21419
21455
  if (!enabled) return;
@@ -21458,9 +21494,9 @@ var init_use_terminal_size = __esm({
21458
21494
  });
21459
21495
 
21460
21496
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
21461
- import React7 from "react";
21497
+ import React8 from "react";
21462
21498
  import { Box as Box18, Text as Text20 } from "ink";
21463
- import { Fragment as Fragment2, jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
21499
+ import { Fragment as Fragment2, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
21464
21500
  function HelpOverlay(props) {
21465
21501
  const { onClose } = props;
21466
21502
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -21481,11 +21517,11 @@ function HelpOverlay(props) {
21481
21517
  height: panelHeight,
21482
21518
  overflowY: "hidden",
21483
21519
  children: [
21484
- /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21485
- props.sections.map((section) => /* @__PURE__ */ jsxs19(React7.Fragment, { children: [
21486
- /* @__PURE__ */ jsx22(Text20, { children: " " }),
21487
- /* @__PURE__ */ jsx22(Text20, { bold: true, children: section.title }),
21488
- section.entries.map((entry) => /* @__PURE__ */ jsx22(Text20, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
21520
+ /* @__PURE__ */ jsx23(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21521
+ props.sections.map((section) => /* @__PURE__ */ jsxs19(React8.Fragment, { children: [
21522
+ /* @__PURE__ */ jsx23(Text20, { children: " " }),
21523
+ /* @__PURE__ */ jsx23(Text20, { bold: true, children: section.title }),
21524
+ section.entries.map((entry) => /* @__PURE__ */ jsx23(Text20, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
21489
21525
  ] }, section.title))
21490
21526
  ]
21491
21527
  }
@@ -21502,31 +21538,31 @@ function HelpOverlay(props) {
21502
21538
  height: panelHeight,
21503
21539
  overflowY: "hidden",
21504
21540
  children: [
21505
- /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21506
- /* @__PURE__ */ jsx22(Text20, { children: " " }),
21507
- /* @__PURE__ */ jsx22(Text20, { bold: true, children: "Navigation" }),
21508
- /* @__PURE__ */ jsx22(Text20, { children: " \u2191 / k / PgUp Scroll up" }),
21509
- /* @__PURE__ */ jsx22(Text20, { children: " \u2193 / j / PgDn Scroll down" }),
21510
- /* @__PURE__ */ jsx22(Text20, { children: " g / Home Jump to top" }),
21511
- /* @__PURE__ */ jsx22(Text20, { children: " G / End Jump to bottom" }),
21541
+ /* @__PURE__ */ jsx23(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21542
+ /* @__PURE__ */ jsx23(Text20, { children: " " }),
21543
+ /* @__PURE__ */ jsx23(Text20, { bold: true, children: "Navigation" }),
21544
+ /* @__PURE__ */ jsx23(Text20, { children: " \u2191 / k / PgUp Scroll up" }),
21545
+ /* @__PURE__ */ jsx23(Text20, { children: " \u2193 / j / PgDn Scroll down" }),
21546
+ /* @__PURE__ */ jsx23(Text20, { children: " g / Home Jump to top" }),
21547
+ /* @__PURE__ */ jsx23(Text20, { children: " G / End Jump to bottom" }),
21512
21548
  mode === "review" && /* @__PURE__ */ jsxs19(Fragment2, { children: [
21513
- /* @__PURE__ */ jsx22(Text20, { children: " " }),
21514
- /* @__PURE__ */ jsx22(Text20, { bold: true, children: "[Review mode only]" }),
21515
- /* @__PURE__ */ jsx22(Text20, { children: " Tab Toggle sidebar/detail" }),
21516
- /* @__PURE__ */ jsx22(Text20, { children: " a Accept component" }),
21517
- /* @__PURE__ */ jsx22(Text20, { children: " r Reject component" }),
21518
- /* @__PURE__ */ jsx22(Text20, { children: " e Edit proposal" }),
21519
- /* @__PURE__ */ jsx22(Text20, { children: " s Toggle source code" }),
21520
- /* @__PURE__ */ jsx22(Text20, { children: " A Approve all" }),
21521
- /* @__PURE__ */ jsx22(Text20, { children: " F Open finalize dialog" }),
21522
- /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+S Save draft" }),
21523
- /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Z Undo" }),
21524
- /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Y Redo" }),
21525
- /* @__PURE__ */ jsx22(Text20, { children: " Esc Exit edit / close" })
21549
+ /* @__PURE__ */ jsx23(Text20, { children: " " }),
21550
+ /* @__PURE__ */ jsx23(Text20, { bold: true, children: "[Review mode only]" }),
21551
+ /* @__PURE__ */ jsx23(Text20, { children: " Tab Toggle sidebar/detail" }),
21552
+ /* @__PURE__ */ jsx23(Text20, { children: " a Accept component" }),
21553
+ /* @__PURE__ */ jsx23(Text20, { children: " r Reject component" }),
21554
+ /* @__PURE__ */ jsx23(Text20, { children: " e Edit proposal" }),
21555
+ /* @__PURE__ */ jsx23(Text20, { children: " s Toggle source code" }),
21556
+ /* @__PURE__ */ jsx23(Text20, { children: " A Approve all" }),
21557
+ /* @__PURE__ */ jsx23(Text20, { children: " F Open finalize dialog" }),
21558
+ /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+S Save draft" }),
21559
+ /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+Z Undo" }),
21560
+ /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+Y Redo" }),
21561
+ /* @__PURE__ */ jsx23(Text20, { children: " Esc Exit edit / close" })
21526
21562
  ] }),
21527
- /* @__PURE__ */ jsx22(Text20, { children: " " }),
21528
- /* @__PURE__ */ jsx22(Text20, { children: " h Close help" }),
21529
- /* @__PURE__ */ jsx22(Text20, { children: " q Quit" })
21563
+ /* @__PURE__ */ jsx23(Text20, { children: " " }),
21564
+ /* @__PURE__ */ jsx23(Text20, { children: " h Close help" }),
21565
+ /* @__PURE__ */ jsx23(Text20, { children: " q Quit" })
21530
21566
  ]
21531
21567
  }
21532
21568
  );
@@ -21607,7 +21643,7 @@ var init_sidebar_input = __esm({
21607
21643
 
21608
21644
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
21609
21645
  import { Box as Box19, Text as Text21 } from "ink";
21610
- import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
21646
+ import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
21611
21647
  function SearchMatchSummary({
21612
21648
  open,
21613
21649
  query,
@@ -21622,13 +21658,13 @@ function SearchMatchSummary({
21622
21658
  open && /* @__PURE__ */ jsxs20(Box19, { marginTop, flexDirection: "column", children: [
21623
21659
  /* @__PURE__ */ jsxs20(Text21, { children: [
21624
21660
  `/${query}`,
21625
- /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.info, children: "\u258E" }),
21626
- query && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
21627
- /* @__PURE__ */ jsx23(Text21, { children: " \xB7 [Esc] leave" })
21661
+ /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.info, children: "\u258E" }),
21662
+ query && /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
21663
+ /* @__PURE__ */ jsx24(Text21, { children: " \xB7 [Esc] leave" })
21628
21664
  ] }),
21629
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
21665
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
21630
21666
  ] }),
21631
- !open && query && /* @__PURE__ */ jsx23(Box19, { marginTop, children: /* @__PURE__ */ jsx23(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
21667
+ !open && query && /* @__PURE__ */ jsx24(Box19, { marginTop, children: /* @__PURE__ */ jsx24(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
21632
21668
  ] });
21633
21669
  }
21634
21670
  var init_SearchMatchSummary = __esm({
@@ -22398,7 +22434,7 @@ var init_state = __esm({
22398
22434
  });
22399
22435
 
22400
22436
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate.ts
22401
- import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef4, useState as useState12 } from "react";
22437
+ import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef5, useState as useState12 } from "react";
22402
22438
  function useScopeGate({ components, onConfirm, onQuit }) {
22403
22439
  const { columns: totalWidth, rows: terminalRows } = useTerminalSize();
22404
22440
  const columnPlan = useMemo2(() => computeColumnWidths(totalWidth), [totalWidth]);
@@ -22441,7 +22477,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
22441
22477
  for (const p of cycleParticipants) seed.add(p);
22442
22478
  return seed;
22443
22479
  });
22444
- const seededGroupsRef = useRef4(closures.size > 0 || cycleParticipants.size > 0);
22480
+ const seededGroupsRef = useRef5(closures.size > 0 || cycleParticipants.size > 0);
22445
22481
  useEffect7(() => {
22446
22482
  if (seededGroupsRef.current) return;
22447
22483
  if (closures.size === 0 && cycleParticipants.size === 0) return;
@@ -22888,30 +22924,30 @@ var init_use_scope_gate = __esm({
22888
22924
 
22889
22925
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
22890
22926
  import { Box as Box20, Text as Text22 } from "ink";
22891
- import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
22927
+ import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
22892
22928
  function ScopeGateScreen(props) {
22893
22929
  if (props.components.length === 0) {
22894
- return /* @__PURE__ */ jsx24(Box20, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
22930
+ return /* @__PURE__ */ jsx25(Box20, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx25(Text22, { color: PALETTE2.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
22895
22931
  }
22896
- return /* @__PURE__ */ jsx24(ScopeGateView, { ...props });
22932
+ return /* @__PURE__ */ jsx25(ScopeGateView, { ...props });
22897
22933
  }
22898
22934
  function ScopeGateView({ components, onConfirm, onQuit }) {
22899
22935
  const gate = useScopeGate({ components, onConfirm, onQuit });
22900
22936
  const { search, graph, columnPlan, panelLayout, counters } = gate;
22901
22937
  if (gate.showHelp) {
22902
- return /* @__PURE__ */ jsx24(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
22938
+ return /* @__PURE__ */ jsx25(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
22903
22939
  }
22904
22940
  return /* @__PURE__ */ jsxs21(Box20, { flexDirection: "column", paddingX: 2, children: [
22905
22941
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", flexWrap: "wrap", children: [
22906
- /* @__PURE__ */ jsx24(CounterStrip, { counters, totalWidth: gate.totalWidth }),
22942
+ /* @__PURE__ */ jsx25(CounterStrip, { counters, totalWidth: gate.totalWidth }),
22907
22943
  gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs21(Text22, { color: PALETTE2.muted, children: [
22908
22944
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
22909
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
22945
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
22910
22946
  ] })
22911
22947
  ] }),
22912
- graph.cycles.length > 0 && /* @__PURE__ */ jsx24(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.muted, children: "If you must have components with cycles, select them together into the generate step and then use the editor to fix them." }) }),
22948
+ graph.cycles.length > 0 && /* @__PURE__ */ jsx25(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx25(Text22, { color: PALETTE2.muted, children: "If you must have components with cycles, select them together into the generate step and then use the editor to fix them." }) }),
22913
22949
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", alignItems: "stretch", children: [
22914
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx24(
22950
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx25(
22915
22951
  GotoBanner,
22916
22952
  {
22917
22953
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -22921,7 +22957,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22921
22957
  width: columnPlan.main,
22922
22958
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
22923
22959
  }
22924
- ) : /* @__PURE__ */ jsx24(
22960
+ ) : /* @__PURE__ */ jsx25(
22925
22961
  GroupedSidebar,
22926
22962
  {
22927
22963
  items: gate.groupedItems,
@@ -22950,8 +22986,8 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22950
22986
  }
22951
22987
  ),
22952
22988
  columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs21(Fragment4, { children: [
22953
- /* @__PURE__ */ jsx24(Box20, { width: 2, flexShrink: 0 }),
22954
- /* @__PURE__ */ jsx24(
22989
+ /* @__PURE__ */ jsx25(Box20, { width: 2, flexShrink: 0 }),
22990
+ /* @__PURE__ */ jsx25(
22955
22991
  AddedColumn,
22956
22992
  {
22957
22993
  width: columnPlan.added,
@@ -22966,9 +23002,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22966
23002
  )
22967
23003
  ] })
22968
23004
  ] }),
22969
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx24(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
22970
- gate.pendingRejectCascade && /* @__PURE__ */ jsx24(RejectPrompt, { pending: gate.pendingRejectCascade }),
22971
- /* @__PURE__ */ jsx24(
23005
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx25(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
23006
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx25(RejectPrompt, { pending: gate.pendingRejectCascade }),
23007
+ /* @__PURE__ */ jsx25(
22972
23008
  SearchMatchSummary,
22973
23009
  {
22974
23010
  open: search.searchOpen,
@@ -22979,7 +23015,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22979
23015
  marginTop: 1
22980
23016
  }
22981
23017
  ),
22982
- /* @__PURE__ */ jsx24(
23018
+ /* @__PURE__ */ jsx25(
22983
23019
  CompactControlBar,
22984
23020
  {
22985
23021
  hasGroupRoots: gate.hasGroupRoots,
@@ -23097,11 +23133,11 @@ var init_load = __esm({
23097
23133
  });
23098
23134
 
23099
23135
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate-flow.ts
23100
- import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef5, useState as useState13 } from "react";
23136
+ import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef6, useState as useState13 } from "react";
23101
23137
  function useScopeGateFlow(input, deps = realDeps2) {
23102
23138
  const sessionId = input?.sessionId;
23103
23139
  const loaded = useMemo3(() => sessionId ? deps.load(sessionId) : void 0, [sessionId]);
23104
- const cacheCheck = useRef5(void 0);
23140
+ const cacheCheck = useRef6(void 0);
23105
23141
  const [confirmed, setConfirmed] = useState13();
23106
23142
  useEffect8(() => {
23107
23143
  if (!input || !loaded?.ok || cacheCheck.current) return;
@@ -23167,7 +23203,7 @@ var init_logic10 = __esm({
23167
23203
  });
23168
23204
 
23169
23205
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
23170
- import { jsx as jsx25 } from "react/jsx-runtime";
23206
+ import { jsx as jsx26 } from "react/jsx-runtime";
23171
23207
  function GenerationScreen({
23172
23208
  progress,
23173
23209
  agent,
@@ -23176,7 +23212,7 @@ function GenerationScreen({
23176
23212
  stepNumber,
23177
23213
  totalSteps
23178
23214
  }) {
23179
- return /* @__PURE__ */ jsx25(
23215
+ return /* @__PURE__ */ jsx26(
23180
23216
  RunningStep,
23181
23217
  {
23182
23218
  stepNumber,
@@ -23378,10 +23414,10 @@ var init_run2 = __esm({
23378
23414
  });
23379
23415
 
23380
23416
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/use-generation.ts
23381
- import { useEffect as useEffect9, useRef as useRef6, useState as useState14 } from "react";
23417
+ import { useEffect as useEffect9, useRef as useRef7, useState as useState14 } from "react";
23382
23418
  function useGeneration(input) {
23383
23419
  const [state2, setState] = useState14();
23384
- const current = useRef6();
23420
+ const current = useRef7();
23385
23421
  useEffect9(() => {
23386
23422
  current.current = input;
23387
23423
  if (!input) {
@@ -23858,7 +23894,7 @@ var init_logic11 = __esm({
23858
23894
  });
23859
23895
 
23860
23896
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
23861
- import { jsx as jsx26 } from "react/jsx-runtime";
23897
+ import { jsx as jsx27 } from "react/jsx-runtime";
23862
23898
  function PreviewValidationErrorScreen({
23863
23899
  errors,
23864
23900
  missingNames,
@@ -23867,7 +23903,7 @@ function PreviewValidationErrorScreen({
23867
23903
  onQuit
23868
23904
  }) {
23869
23905
  const matchedNames = matchedComponentNames(errors, missingNames);
23870
- return /* @__PURE__ */ jsx26(
23906
+ return /* @__PURE__ */ jsx27(
23871
23907
  GateStep,
23872
23908
  {
23873
23909
  intent: "error",
@@ -24239,10 +24275,10 @@ var init_scroll_offset = __esm({
24239
24275
  });
24240
24276
 
24241
24277
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
24242
- import React8, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
24278
+ import React9, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
24243
24279
  import figures5 from "figures";
24244
24280
  import { Box as Box21, measureElement, Text as Text23 } from "ink";
24245
- import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
24281
+ import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
24246
24282
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
24247
24283
  return {
24248
24284
  selected,
@@ -24381,13 +24417,13 @@ function serializeState(state2, originalJson) {
24381
24417
  }
24382
24418
  function Picker({ value, active }) {
24383
24419
  return /* @__PURE__ */ jsxs22(Box21, { children: [
24384
- active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u2039" }),
24385
- /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
24386
- active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u203A" })
24420
+ active && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u2039" }),
24421
+ /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
24422
+ active && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u203A" })
24387
24423
  ] });
24388
24424
  }
24389
24425
  function Toggle({ value, active }) {
24390
- return /* @__PURE__ */ jsx27(Box21, { children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
24426
+ return /* @__PURE__ */ jsx28(Box21, { children: /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
24391
24427
  }
24392
24428
  function InlinePropField({
24393
24429
  label,
@@ -24410,7 +24446,7 @@ function RequiredField({
24410
24446
  editingField,
24411
24447
  activeField
24412
24448
  }) {
24413
- return /* @__PURE__ */ jsx27(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx27(Toggle, { value, active: editingField && activeField === "required" }) });
24449
+ return /* @__PURE__ */ jsx28(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx28(Toggle, { value, active: editingField && activeField === "required" }) });
24414
24450
  }
24415
24451
  function DefaultValueRow({
24416
24452
  display,
@@ -24422,7 +24458,7 @@ function DefaultValueRow({
24422
24458
  focused ? "\u203A " : " ",
24423
24459
  "default:"
24424
24460
  ] }),
24425
- active ? /* @__PURE__ */ jsx27(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: display })
24461
+ active ? /* @__PURE__ */ jsx28(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: display })
24426
24462
  ] });
24427
24463
  }
24428
24464
  function RowLabel({
@@ -24451,9 +24487,9 @@ function ValueInputRow({
24451
24487
  cursorVisible
24452
24488
  }) {
24453
24489
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, children: [
24454
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
24455
- /* @__PURE__ */ jsx27(Text23, { children: valueText }),
24456
- /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: " " })
24490
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
24491
+ /* @__PURE__ */ jsx28(Text23, { children: valueText }),
24492
+ /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: " " })
24457
24493
  ] });
24458
24494
  }
24459
24495
  function EditableListItem({
@@ -24466,9 +24502,9 @@ function EditableListItem({
24466
24502
  }) {
24467
24503
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
24468
24504
  if (isBeingEdited) {
24469
- return /* @__PURE__ */ jsx27(ValueInputRow, { mode: "edit", valueText, cursorVisible });
24505
+ return /* @__PURE__ */ jsx28(ValueInputRow, { mode: "edit", valueText, cursorVisible });
24470
24506
  }
24471
- return /* @__PURE__ */ jsx27(Box21, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
24507
+ return /* @__PURE__ */ jsx28(Box21, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
24472
24508
  }
24473
24509
  function EditableValueList({
24474
24510
  values,
@@ -24482,8 +24518,8 @@ function EditableValueList({
24482
24518
  showAddInput
24483
24519
  }) {
24484
24520
  return /* @__PURE__ */ jsxs22(Fragment5, { children: [
24485
- values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx27(Box21, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: emptyMessage }) })),
24486
- values.map((value, index) => /* @__PURE__ */ jsx27(
24521
+ values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx28(Box21, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: emptyMessage }) })),
24522
+ values.map((value, index) => /* @__PURE__ */ jsx28(
24487
24523
  EditableListItem,
24488
24524
  {
24489
24525
  value,
@@ -24495,7 +24531,7 @@ function EditableValueList({
24495
24531
  },
24496
24532
  index
24497
24533
  )),
24498
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx27(ValueInputRow, { mode: "add", valueText, cursorVisible })
24534
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx28(ValueInputRow, { mode: "add", valueText, cursorVisible })
24499
24535
  ] });
24500
24536
  }
24501
24537
  function DefaultSubRow({
@@ -24512,12 +24548,12 @@ function DefaultSubRow({
24512
24548
  focused ? "\u203A " : " ",
24513
24549
  "default:"
24514
24550
  ] }),
24515
- /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
24551
+ /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
24516
24552
  ] });
24517
24553
  }
24518
24554
  if (prop.type === "boolean") {
24519
24555
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
24520
- return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
24556
+ return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
24521
24557
  }
24522
24558
  if (prop.type === "enum") {
24523
24559
  if (prop.values.length === 0) {
@@ -24526,11 +24562,11 @@ function DefaultSubRow({
24526
24562
  focused ? "\u203A " : " ",
24527
24563
  "default:"
24528
24564
  ] }),
24529
- /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
24565
+ /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
24530
24566
  ] });
24531
24567
  }
24532
24568
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
24533
- return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
24569
+ return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
24534
24570
  }
24535
24571
  const value = typeof prop.default === "string" ? prop.default : "";
24536
24572
  if (active) {
@@ -24540,9 +24576,9 @@ function DefaultSubRow({
24540
24576
  "default:"
24541
24577
  ] }),
24542
24578
  /* @__PURE__ */ jsxs22(Box21, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24543
- /* @__PURE__ */ jsx27(Text23, { children: value.slice(0, textCursor) }),
24544
- /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
24545
- /* @__PURE__ */ jsx27(Text23, { children: value.slice(textCursor + 1) })
24579
+ /* @__PURE__ */ jsx28(Text23, { children: value.slice(0, textCursor) }),
24580
+ /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
24581
+ /* @__PURE__ */ jsx28(Text23, { children: value.slice(textCursor + 1) })
24546
24582
  ] })
24547
24583
  ] });
24548
24584
  }
@@ -24551,7 +24587,7 @@ function DefaultSubRow({
24551
24587
  focused ? "\u203A " : " ",
24552
24588
  "default:"
24553
24589
  ] }),
24554
- /* @__PURE__ */ jsx27(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
24590
+ /* @__PURE__ */ jsx28(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
24555
24591
  ] });
24556
24592
  }
24557
24593
  function DescriptionField({
@@ -24571,7 +24607,7 @@ function DescriptionField({
24571
24607
  focused ? "\u203A " : " ",
24572
24608
  label
24573
24609
  ] }),
24574
- /* @__PURE__ */ jsx27(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
24610
+ /* @__PURE__ */ jsx28(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
24575
24611
  ] });
24576
24612
  }
24577
24613
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
@@ -24579,7 +24615,7 @@ function DescriptionField({
24579
24615
  focused ? "\u203A " : " ",
24580
24616
  label
24581
24617
  ] }),
24582
- editing ? /* @__PURE__ */ jsx27(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: value || "\u2014" })
24618
+ editing ? /* @__PURE__ */ jsx28(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: value || "\u2014" })
24583
24619
  ] });
24584
24620
  }
24585
24621
  function EditableDescription({
@@ -24589,7 +24625,7 @@ function EditableDescription({
24589
24625
  }) {
24590
24626
  return /* @__PURE__ */ jsxs22(Text23, { wrap: "wrap", children: [
24591
24627
  value.slice(0, textCursor),
24592
- /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
24628
+ /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
24593
24629
  value.slice(textCursor + 1)
24594
24630
  ] });
24595
24631
  }
@@ -24611,8 +24647,8 @@ function PropRow({
24611
24647
  const descFocused = activeField === "description";
24612
24648
  const descActive = editingField && descFocused;
24613
24649
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24614
- /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: prop.name, selected }) }),
24615
- /* @__PURE__ */ jsx27(
24650
+ /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: prop.name, selected }) }),
24651
+ /* @__PURE__ */ jsx28(
24616
24652
  DescriptionField,
24617
24653
  {
24618
24654
  value: prop.description,
@@ -24626,7 +24662,7 @@ function PropRow({
24626
24662
  }
24627
24663
  ),
24628
24664
  /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24629
- /* @__PURE__ */ jsx27(
24665
+ /* @__PURE__ */ jsx28(
24630
24666
  RequiredField,
24631
24667
  {
24632
24668
  value: prop.required,
@@ -24635,9 +24671,9 @@ function PropRow({
24635
24671
  activeField
24636
24672
  }
24637
24673
  ),
24638
- /* @__PURE__ */ jsx27(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx27(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx27(Text23, { children: prop.type }) })
24674
+ /* @__PURE__ */ jsx28(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx28(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx28(Text23, { children: prop.type }) })
24639
24675
  ] }),
24640
- prop.type === "token" && /* @__PURE__ */ jsx27(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx27(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
24676
+ prop.type === "token" && /* @__PURE__ */ jsx28(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx28(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
24641
24677
  prop.type === "enum" && /* @__PURE__ */ jsxs22(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
24642
24678
  /* @__PURE__ */ jsxs22(Text23, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
24643
24679
  activeField === "values" ? "\u203A " : " ",
@@ -24649,7 +24685,7 @@ function PropRow({
24649
24685
  "]"
24650
24686
  ] })
24651
24687
  ] }),
24652
- /* @__PURE__ */ jsx27(
24688
+ /* @__PURE__ */ jsx28(
24653
24689
  DefaultSubRow,
24654
24690
  {
24655
24691
  prop,
@@ -24664,7 +24700,7 @@ function PropRow({
24664
24700
  activeField === "allowed" ? "\u203A " : " ",
24665
24701
  "allowed:"
24666
24702
  ] }),
24667
- editingField && activeField === "allowed" ? /* @__PURE__ */ jsx27(Box21, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx27(Text23, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx27(
24703
+ editingField && activeField === "allowed" ? /* @__PURE__ */ jsx28(Box21, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx28(Text23, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx28(
24668
24704
  Text23,
24669
24705
  {
24670
24706
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
@@ -24673,17 +24709,17 @@ function PropRow({
24673
24709
  }
24674
24710
  )
24675
24711
  ] }),
24676
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx27(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: (() => {
24712
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx28(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: (() => {
24677
24713
  const max = Math.max(8, width - 8);
24678
24714
  const text = `~ ${rationale}`;
24679
24715
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
24680
24716
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
24681
24717
  selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, flexDirection: "column", children: [
24682
24718
  /* @__PURE__ */ jsxs22(Box21, { children: [
24683
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "values:" }),
24684
- activeField === "values" && /* @__PURE__ */ jsx27(Text23, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
24719
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "values:" }),
24720
+ activeField === "values" && /* @__PURE__ */ jsx28(Text23, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
24685
24721
  ] }),
24686
- /* @__PURE__ */ jsx27(
24722
+ /* @__PURE__ */ jsx28(
24687
24723
  EditableValueList,
24688
24724
  {
24689
24725
  values: prop.values,
@@ -24714,8 +24750,8 @@ function SlotRow({
24714
24750
  pickerCursor
24715
24751
  }) {
24716
24752
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24717
- /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: slot.name, selected, trailing: false }) }),
24718
- /* @__PURE__ */ jsx27(
24753
+ /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: slot.name, selected, trailing: false }) }),
24754
+ /* @__PURE__ */ jsx28(
24719
24755
  DescriptionField,
24720
24756
  {
24721
24757
  value: slot.description,
@@ -24728,7 +24764,7 @@ function SlotRow({
24728
24764
  paddingLeft: 0
24729
24765
  }
24730
24766
  ),
24731
- /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(
24767
+ /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(
24732
24768
  RequiredField,
24733
24769
  {
24734
24770
  value: slot.required,
@@ -24749,7 +24785,7 @@ function SlotRow({
24749
24785
  ]
24750
24786
  }
24751
24787
  ),
24752
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
24788
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
24753
24789
  ] }),
24754
24790
  selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
24755
24791
  /* @__PURE__ */ jsxs22(Box21, { children: [
@@ -24764,9 +24800,9 @@ function SlotRow({
24764
24800
  ]
24765
24801
  }
24766
24802
  ),
24767
- editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: slot.allowedComponents.length > 0 ? " [a] add [e] edit [r] remove [\u2190\u2192] cycle [\u2191\u2193] navigate [K/J] reorder" : " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
24803
+ editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: slot.allowedComponents.length > 0 ? " [a] add [e] edit [r] remove [\u2190\u2192] cycle [\u2191\u2193] navigate [K/J] reorder" : " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
24768
24804
  ] }),
24769
- /* @__PURE__ */ jsx27(
24805
+ /* @__PURE__ */ jsx28(
24770
24806
  EditableValueList,
24771
24807
  {
24772
24808
  values: slot.allowedComponents,
@@ -24780,21 +24816,21 @@ function SlotRow({
24780
24816
  showAddInput: editingField && activeField === "allowedComponents"
24781
24817
  }
24782
24818
  ),
24783
- editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx27(Box21, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
24819
+ editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx28(Box21, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
24784
24820
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
24785
24821
  if (filtered.length === 0) {
24786
- return /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
24822
+ return /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
24787
24823
  }
24788
24824
  const cursor = pickerCursor % filtered.length;
24789
24825
  const MAX_VISIBLE = 5;
24790
24826
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
24791
24827
  const slice = filtered.slice(start, start + MAX_VISIBLE);
24792
24828
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
24793
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
24829
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
24794
24830
  slice.map((name, i) => {
24795
24831
  const absIdx = start + i;
24796
24832
  const isCursor = absIdx === cursor;
24797
- return /* @__PURE__ */ jsx27(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
24833
+ return /* @__PURE__ */ jsx28(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
24798
24834
  })
24799
24835
  ] });
24800
24836
  })() })
@@ -24919,9 +24955,9 @@ function FieldEditor({
24919
24955
  const [editorState, setEditorState] = useState15(initialState);
24920
24956
  const [parseErr] = useState15(parseError);
24921
24957
  const [listScrollStart, setListScrollStart] = useState15(0);
24922
- const initialFocusScrollApplied = React8.useRef(false);
24958
+ const initialFocusScrollApplied = React9.useRef(false);
24923
24959
  const [rowHeights, setRowHeights] = useState15({});
24924
- const rowMeasureRefs = React8.useRef(/* @__PURE__ */ new Map());
24960
+ const rowMeasureRefs = React9.useRef(/* @__PURE__ */ new Map());
24925
24961
  const initialFocus = (() => {
24926
24962
  if (initialFocusTarget?.kind === "description") {
24927
24963
  return {
@@ -25008,23 +25044,23 @@ function FieldEditor({
25008
25044
  const [showHelp, setShowHelp] = useState15(false);
25009
25045
  const props = editorState.props;
25010
25046
  const slots = editorState.slots;
25011
- const contentPropIndexes = React8.useMemo(
25047
+ const contentPropIndexes = React9.useMemo(
25012
25048
  () => props.flatMap((prop, index) => prop.category === "content" ? [index] : []),
25013
25049
  [props]
25014
25050
  );
25015
- const designPropIndexes = React8.useMemo(
25051
+ const designPropIndexes = React9.useMemo(
25016
25052
  () => props.flatMap((prop, index) => prop.category === "design" ? [index] : []),
25017
25053
  [props]
25018
25054
  );
25019
- const hiddenPropIndexes = React8.useMemo(
25055
+ const hiddenPropIndexes = React9.useMemo(
25020
25056
  () => showHiddenProps ? props.flatMap((prop, index) => prop.category === "state" || prop.category === "unattached" ? [index] : []) : [],
25021
25057
  [props, showHiddenProps]
25022
25058
  );
25023
- const visiblePropIndexes = React8.useMemo(
25059
+ const visiblePropIndexes = React9.useMemo(
25024
25060
  () => [...contentPropIndexes, ...designPropIndexes, ...hiddenPropIndexes],
25025
25061
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
25026
25062
  );
25027
- const propGroups = React8.useMemo(
25063
+ const propGroups = React9.useMemo(
25028
25064
  () => [
25029
25065
  {
25030
25066
  kind: "content",
@@ -25044,7 +25080,7 @@ function FieldEditor({
25044
25080
  ],
25045
25081
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
25046
25082
  );
25047
- const selectableRows = React8.useMemo(
25083
+ const selectableRows = React9.useMemo(
25048
25084
  () => [
25049
25085
  ...contentPropIndexes.map((idx) => ({ kind: "prop", idx })),
25050
25086
  ...designPropIndexes.map((idx) => ({ kind: "prop", idx })),
@@ -25054,7 +25090,7 @@ function FieldEditor({
25054
25090
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes, slots]
25055
25091
  );
25056
25092
  const visiblePropPosition = visiblePropIndexes.indexOf(propIdx);
25057
- const selectedSelectableIndex = React8.useMemo(
25093
+ const selectedSelectableIndex = React9.useMemo(
25058
25094
  () => selectableRows.findIndex(
25059
25095
  (row) => inSlots ? row.kind === "slot" && row.idx === slotIdx : row.kind === "prop" && row.idx === propIdx
25060
25096
  ),
@@ -25073,12 +25109,12 @@ function FieldEditor({
25073
25109
  }
25074
25110
  };
25075
25111
  const textEntryActive = focusLevel === "field" && editingField && activeField === "description" || focusLevel === "field" && editingField && activeField === "default" && (editorState.props[propIdx]?.type === "string" || editorState.props[propIdx]?.type === "token") || editingValue != null;
25076
- React8.useEffect(() => {
25112
+ React9.useEffect(() => {
25077
25113
  onTextEntryActiveChange?.(textEntryActive);
25078
25114
  }, [textEntryActive, onTextEntryActiveChange]);
25079
25115
  const currentProp = props[propIdx] ?? null;
25080
25116
  const currentSlot = slots[slotIdx] ?? null;
25081
- React8.useEffect(() => {
25117
+ React9.useEffect(() => {
25082
25118
  if (showHiddenProps || inSlots || inComponentDesc || visiblePropPosition >= 0) return;
25083
25119
  if (visiblePropIndexes.length > 0) {
25084
25120
  setPropIdx(visiblePropIndexes[0]);
@@ -25097,22 +25133,22 @@ function FieldEditor({
25097
25133
  setEditorState(next);
25098
25134
  onChange(serializeState(next, value));
25099
25135
  };
25100
- const canonicalize = React8.useCallback((json) => {
25136
+ const canonicalize = React9.useCallback((json) => {
25101
25137
  try {
25102
25138
  return JSON.stringify(JSON.parse(json));
25103
25139
  } catch {
25104
25140
  return `__unparseable__:${json}`;
25105
25141
  }
25106
25142
  }, []);
25107
- const initialStateRef = React8.useRef(initialState);
25143
+ const initialStateRef = React9.useRef(initialState);
25108
25144
  const baselineCanonical = canonicalize(serializeState(initialStateRef.current, value));
25109
25145
  const currentCanonical = canonicalize(serializeState(editorState, value));
25110
25146
  const isDirty = currentCanonical !== baselineCanonical;
25111
- React8.useEffect(() => {
25147
+ React9.useEffect(() => {
25112
25148
  onDirtyChange?.(isDirty);
25113
25149
  }, [isDirty, onDirtyChange]);
25114
- const lastDiscardTriggerRef = React8.useRef(discardTrigger);
25115
- React8.useEffect(() => {
25150
+ const lastDiscardTriggerRef = React9.useRef(discardTrigger);
25151
+ React9.useEffect(() => {
25116
25152
  if (discardTrigger === void 0) return;
25117
25153
  if (discardTrigger === lastDiscardTriggerRef.current) return;
25118
25154
  lastDiscardTriggerRef.current = discardTrigger;
@@ -25623,17 +25659,17 @@ function FieldEditor({
25623
25659
  const innerWidth = Math.max(1, width - 2);
25624
25660
  if (parseErr) {
25625
25661
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
25626
- /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
25627
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: parseErr }),
25628
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
25662
+ /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
25663
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.error, children: parseErr }),
25664
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
25629
25665
  ] });
25630
25666
  }
25631
25667
  if (props.length === 0 && slots.length === 0) {
25632
25668
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
25633
- /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
25634
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
25635
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
25636
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
25669
+ /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
25670
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
25671
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
25672
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
25637
25673
  ] });
25638
25674
  }
25639
25675
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -25762,12 +25798,12 @@ function FieldEditor({
25762
25798
  const renderRow = (row, index) => {
25763
25799
  const key = rowKey(row, index);
25764
25800
  if (row.kind === "header") {
25765
- return /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
25801
+ return /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
25766
25802
  }
25767
25803
  if (row.kind === "component-description") {
25768
25804
  const isSelected2 = inComponentDesc && active;
25769
25805
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
25770
- return /* @__PURE__ */ jsx27(
25806
+ return /* @__PURE__ */ jsx28(
25771
25807
  DescriptionField,
25772
25808
  {
25773
25809
  value: editorState.componentDescription,
@@ -25798,7 +25834,7 @@ function FieldEditor({
25798
25834
  valueText,
25799
25835
  innerWidth
25800
25836
  );
25801
- return /* @__PURE__ */ jsx27(
25837
+ return /* @__PURE__ */ jsx28(
25802
25838
  PropRow,
25803
25839
  {
25804
25840
  prop: p,
@@ -25825,7 +25861,7 @@ function FieldEditor({
25825
25861
  valueText,
25826
25862
  innerWidth
25827
25863
  );
25828
- return /* @__PURE__ */ jsx27(
25864
+ return /* @__PURE__ */ jsx28(
25829
25865
  SlotRow,
25830
25866
  {
25831
25867
  slot: s,
@@ -25846,9 +25882,9 @@ function FieldEditor({
25846
25882
  borderStyle: "single",
25847
25883
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
25848
25884
  children: [
25849
- hasEmptyProperties && /* @__PURE__ */ jsx27(Text23, { 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." }),
25885
+ hasEmptyProperties && /* @__PURE__ */ jsx28(Text23, { 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." }),
25850
25886
  header,
25851
- /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx27(
25887
+ /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx28(
25852
25888
  PropRow,
25853
25889
  {
25854
25890
  prop: currentProp,
@@ -25864,7 +25900,7 @@ function FieldEditor({
25864
25900
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
25865
25901
  showRationale: showInlineRationales
25866
25902
  }
25867
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx27(
25903
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx28(
25868
25904
  SlotRow,
25869
25905
  {
25870
25906
  slot: currentSlot,
@@ -25883,7 +25919,7 @@ function FieldEditor({
25883
25919
  ) : visibleRowSlice.map((row, index) => {
25884
25920
  const absoluteIndex = scrollStart + index;
25885
25921
  const key = rowKey(row, absoluteIndex);
25886
- return /* @__PURE__ */ jsx27(
25922
+ return /* @__PURE__ */ jsx28(
25887
25923
  Box21,
25888
25924
  {
25889
25925
  ref: (node) => {
@@ -25897,7 +25933,7 @@ function FieldEditor({
25897
25933
  `visible-${key}`
25898
25934
  );
25899
25935
  }) }),
25900
- categoryBelow && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
25936
+ categoryBelow && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
25901
25937
  sourceOpen && !onToggleSourceExternal && (() => {
25902
25938
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
25903
25939
  const start = propMeta?.sourceStartLine ?? null;
@@ -25907,48 +25943,48 @@ function FieldEditor({
25907
25943
  const headerPath = path5 ?? "<unknown source path>";
25908
25944
  if (!start || !end2 || !src) {
25909
25945
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
25910
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
25911
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
25912
- /* @__PURE__ */ jsx27(Text23, { children: "[s] close" })
25946
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
25947
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
25948
+ /* @__PURE__ */ jsx28(Text23, { children: "[s] close" })
25913
25949
  ] });
25914
25950
  }
25915
25951
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
25916
25952
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
25917
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
25918
- lines.map((ln, i) => /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
25919
- /* @__PURE__ */ jsx27(Text23, { children: "[s] close \xB7 [Esc] close" })
25953
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
25954
+ lines.map((ln, i) => /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
25955
+ /* @__PURE__ */ jsx28(Text23, { children: "[s] close \xB7 [Esc] close" })
25920
25956
  ] });
25921
25957
  })(),
25922
25958
  showHelp && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
25923
- /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
25924
- /* @__PURE__ */ jsx27(Text23, { children: " " }),
25925
- /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Row navigation" }),
25926
- /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193 move between rows" }),
25927
- /* @__PURE__ */ jsx27(Text23, { children: " Enter edit fields on the current row" }),
25928
- /* @__PURE__ */ jsx27(Text23, { children: " Esc exit the panel" }),
25929
- /* @__PURE__ */ jsx27(Text23, { children: " " }),
25930
- /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Field editing" }),
25931
- /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
25932
- /* @__PURE__ */ jsx27(Text23, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
25933
- /* @__PURE__ */ jsx27(Text23, { children: " Space/Enter toggle required" }),
25934
- /* @__PURE__ */ jsx27(Text23, { children: " Type edit description / string default" }),
25935
- /* @__PURE__ */ jsx27(Text23, { children: " Esc exit field-edit back to the row" }),
25936
- /* @__PURE__ */ jsx27(Text23, { children: " " }),
25937
- /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Values / allowedComponents" }),
25938
- /* @__PURE__ */ jsx27(Text23, { children: " a / e / r add \xB7 edit \xB7 remove" }),
25939
- /* @__PURE__ */ jsx27(Text23, { children: " \u2191\u2193 navigate the list" }),
25940
- /* @__PURE__ */ jsx27(Text23, { children: " K / J reorder up \xB7 down" }),
25941
- /* @__PURE__ */ jsx27(Text23, { children: " " }),
25942
- /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Panels" }),
25943
- /* @__PURE__ */ jsx27(Text23, { children: " s toggle source-view for the current prop" }),
25944
- /* @__PURE__ */ jsx27(Text23, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
25945
- /* @__PURE__ */ jsx27(Text23, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
25946
- /* @__PURE__ */ jsx27(Text23, { children: " ? toggle this overlay" }),
25947
- /* @__PURE__ */ jsx27(Text23, { children: " " }),
25948
- /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "press ? or Esc to close" })
25959
+ /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
25960
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
25961
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Row navigation" }),
25962
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2191/\u2193 move between rows" }),
25963
+ /* @__PURE__ */ jsx28(Text23, { children: " Enter edit fields on the current row" }),
25964
+ /* @__PURE__ */ jsx28(Text23, { children: " Esc exit the panel" }),
25965
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
25966
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Field editing" }),
25967
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
25968
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
25969
+ /* @__PURE__ */ jsx28(Text23, { children: " Space/Enter toggle required" }),
25970
+ /* @__PURE__ */ jsx28(Text23, { children: " Type edit description / string default" }),
25971
+ /* @__PURE__ */ jsx28(Text23, { children: " Esc exit field-edit back to the row" }),
25972
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
25973
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Values / allowedComponents" }),
25974
+ /* @__PURE__ */ jsx28(Text23, { children: " a / e / r add \xB7 edit \xB7 remove" }),
25975
+ /* @__PURE__ */ jsx28(Text23, { children: " \u2191\u2193 navigate the list" }),
25976
+ /* @__PURE__ */ jsx28(Text23, { children: " K / J reorder up \xB7 down" }),
25977
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
25978
+ /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Panels" }),
25979
+ /* @__PURE__ */ jsx28(Text23, { children: " s toggle source-view for the current prop" }),
25980
+ /* @__PURE__ */ jsx28(Text23, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
25981
+ /* @__PURE__ */ jsx28(Text23, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
25982
+ /* @__PURE__ */ jsx28(Text23, { children: " ? toggle this overlay" }),
25983
+ /* @__PURE__ */ jsx28(Text23, { children: " " }),
25984
+ /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "press ? or Esc to close" })
25949
25985
  ] }),
25950
- validationError && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: "\u2717 " + validationError }),
25951
- /* @__PURE__ */ jsx27(Box21, { paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: modeLabel }) })
25986
+ validationError && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.error, children: "\u2717 " + validationError }),
25987
+ /* @__PURE__ */ jsx28(Box21, { paddingTop: 1, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: modeLabel }) })
25952
25988
  ]
25953
25989
  }
25954
25990
  );
@@ -26006,22 +26042,22 @@ var init_wrap_text = __esm({
26006
26042
 
26007
26043
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
26008
26044
  import { Box as Box22, Text as Text24 } from "ink";
26009
- import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
26045
+ import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
26010
26046
  function RationaleLine({ line, active }) {
26011
26047
  if (line.kind === "blank") {
26012
- return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { children: " " }) });
26048
+ return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { children: " " }) });
26013
26049
  }
26014
26050
  if (line.kind === "heading") {
26015
- return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
26051
+ return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
26016
26052
  }
26017
26053
  if (line.kind === "label") {
26018
26054
  return /* @__PURE__ */ jsxs23(Box22, { children: [
26019
- line.prefix && /* @__PURE__ */ jsx28(Text24, { children: line.prefix }),
26020
- /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
26021
- line.suffix && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: line.suffix })
26055
+ line.prefix && /* @__PURE__ */ jsx29(Text24, { children: line.prefix }),
26056
+ /* @__PURE__ */ jsx29(Text24, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
26057
+ line.suffix && /* @__PURE__ */ jsx29(Text24, { color: PALETTE.muted, children: line.suffix })
26022
26058
  ] });
26023
26059
  }
26024
- return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
26060
+ return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
26025
26061
  }
26026
26062
  var init_RationaleLine = __esm({
26027
26063
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx"() {
@@ -26032,7 +26068,7 @@ var init_RationaleLine = __esm({
26032
26068
 
26033
26069
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
26034
26070
  import { Box as Box23, Text as Text25 } from "ink";
26035
- import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
26071
+ import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
26036
26072
  function renderComponentRationaleLines(data, innerWidth) {
26037
26073
  const out = [];
26038
26074
  const pushSection = (heading, body) => {
@@ -26108,9 +26144,9 @@ function ComponentRationalePanel({
26108
26144
  borderStyle: "single",
26109
26145
  borderColor: active ? PALETTE.text : void 0,
26110
26146
  children: [
26111
- /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
26112
- visible.map((line, i) => /* @__PURE__ */ jsx29(RationaleLine, { line, active }, i)),
26113
- /* @__PURE__ */ jsx29(Box23, { children: overflowed ? /* @__PURE__ */ jsx29(Text25, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx29(Text25, { children: "[I/Esc] close" }) })
26147
+ /* @__PURE__ */ jsx30(Box23, { children: /* @__PURE__ */ jsx30(Text25, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
26148
+ visible.map((line, i) => /* @__PURE__ */ jsx30(RationaleLine, { line, active }, i)),
26149
+ /* @__PURE__ */ jsx30(Box23, { children: overflowed ? /* @__PURE__ */ jsx30(Text25, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx30(Text25, { children: "[I/Esc] close" }) })
26114
26150
  ]
26115
26151
  }
26116
26152
  );
@@ -26128,9 +26164,9 @@ var init_ComponentRationalePanel = __esm({
26128
26164
 
26129
26165
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
26130
26166
  import { Text as Text26 } from "ink";
26131
- import { Fragment as Fragment6, jsx as jsx30 } from "react/jsx-runtime";
26167
+ import { Fragment as Fragment6, jsx as jsx31 } from "react/jsx-runtime";
26132
26168
  function HighlightedLine({ parts }) {
26133
- return /* @__PURE__ */ jsx30(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx30(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
26169
+ return /* @__PURE__ */ jsx31(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx31(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
26134
26170
  }
26135
26171
  var init_HighlightedLine = __esm({
26136
26172
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx"() {
@@ -26141,7 +26177,7 @@ var init_HighlightedLine = __esm({
26141
26177
 
26142
26178
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
26143
26179
  import { Box as Box24, Text as Text27 } from "ink";
26144
- import { Fragment as Fragment7, jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
26180
+ import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
26145
26181
  function ScrollablePanel({
26146
26182
  title,
26147
26183
  width,
@@ -26156,10 +26192,10 @@ function ScrollablePanel({
26156
26192
  const overflowed = totalLines > height;
26157
26193
  return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
26158
26194
  /* @__PURE__ */ jsxs25(Box24, { children: [
26159
- /* @__PURE__ */ jsx31(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
26195
+ /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
26160
26196
  overflowed && /* @__PURE__ */ jsxs25(Fragment7, { children: [
26161
- /* @__PURE__ */ jsx31(Box24, { flexGrow: 1 }),
26162
- /* @__PURE__ */ jsx31(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
26197
+ /* @__PURE__ */ jsx32(Box24, { flexGrow: 1 }),
26198
+ /* @__PURE__ */ jsx32(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
26163
26199
  ] })
26164
26200
  ] }),
26165
26201
  children
@@ -26174,7 +26210,7 @@ var init_ScrollablePanel = __esm({
26174
26210
 
26175
26211
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
26176
26212
  import { Box as Box25 } from "ink";
26177
- import { jsx as jsx32 } from "react/jsx-runtime";
26213
+ import { jsx as jsx33 } from "react/jsx-runtime";
26178
26214
  function highlightJson(line) {
26179
26215
  const parts = [];
26180
26216
  let remaining = line;
@@ -26212,7 +26248,7 @@ function highlightJson(line) {
26212
26248
  parts.push({ text: remaining[0] });
26213
26249
  remaining = remaining.slice(1);
26214
26250
  }
26215
- return /* @__PURE__ */ jsx32(HighlightedLine, { parts });
26251
+ return /* @__PURE__ */ jsx33(HighlightedLine, { parts });
26216
26252
  }
26217
26253
  function truncateLine(line, maxWidth) {
26218
26254
  if (line.length <= maxWidth) return line;
@@ -26225,7 +26261,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
26225
26261
  const totalLines = allLines.length;
26226
26262
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
26227
26263
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
26228
- return /* @__PURE__ */ jsx32(
26264
+ return /* @__PURE__ */ jsx33(
26229
26265
  ScrollablePanel,
26230
26266
  {
26231
26267
  title: label,
@@ -26238,7 +26274,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
26238
26274
  borderColor: active ? "white" : void 0,
26239
26275
  children: visibleLines.map((line, i) => {
26240
26276
  const truncated = truncateLine(line, innerWidth);
26241
- return /* @__PURE__ */ jsx32(Box25, { children: highlightJson(truncated) }, i);
26277
+ return /* @__PURE__ */ jsx33(Box25, { children: highlightJson(truncated) }, i);
26242
26278
  })
26243
26279
  }
26244
26280
  );
@@ -26252,7 +26288,7 @@ var init_JsonPanel = __esm({
26252
26288
  });
26253
26289
 
26254
26290
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
26255
- import { jsx as jsx33 } from "react/jsx-runtime";
26291
+ import { jsx as jsx34 } from "react/jsx-runtime";
26256
26292
  function renderRationaleLines(rows, innerWidth) {
26257
26293
  const out = [];
26258
26294
  rows.forEach((row, idx) => {
@@ -26285,7 +26321,7 @@ function RationalePanel({
26285
26321
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
26286
26322
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
26287
26323
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
26288
- return /* @__PURE__ */ jsx33(
26324
+ return /* @__PURE__ */ jsx34(
26289
26325
  ScrollablePanel,
26290
26326
  {
26291
26327
  title: `RATIONALE \u2014 ${componentName}`,
@@ -26296,7 +26332,7 @@ function RationalePanel({
26296
26332
  visibleStart,
26297
26333
  visibleEnd,
26298
26334
  borderColor: active ? PALETTE.text : void 0,
26299
- children: visible.map((line, i) => /* @__PURE__ */ jsx33(RationaleLine, { line, active }, i))
26335
+ children: visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i))
26300
26336
  }
26301
26337
  );
26302
26338
  }
@@ -26313,7 +26349,7 @@ var init_RationalePanel = __esm({
26313
26349
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
26314
26350
  import figures6 from "figures";
26315
26351
  import { Box as Box26, Text as Text28 } from "ink";
26316
- import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
26352
+ import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
26317
26353
  function TokenReviewPanel({
26318
26354
  componentName,
26319
26355
  suggestions,
@@ -26341,15 +26377,15 @@ function TokenReviewPanel({
26341
26377
  borderStyle: "single",
26342
26378
  borderColor: active ? PALETTE.text : void 0,
26343
26379
  children: [
26344
- /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
26345
- /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
26346
- /* @__PURE__ */ jsx34(Text28, { children: " " }),
26347
- current.paths.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
26380
+ /* @__PURE__ */ jsx35(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
26381
+ /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
26382
+ /* @__PURE__ */ jsx35(Text28, { children: " " }),
26383
+ current.paths.length === 0 && /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
26348
26384
  visiblePaths.map((path5, i) => {
26349
26385
  const pathIndex = scrollStart + i;
26350
26386
  const checked = editSelection.has(path5);
26351
26387
  const focused = pathIndex === editCursor;
26352
- return /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(
26388
+ return /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(
26353
26389
  Text28,
26354
26390
  {
26355
26391
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
@@ -26359,9 +26395,9 @@ function TokenReviewPanel({
26359
26395
  }
26360
26396
  ) }, path5);
26361
26397
  }),
26362
- /* @__PURE__ */ jsx34(Text28, { children: " " }),
26363
- /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
26364
- /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
26398
+ /* @__PURE__ */ jsx35(Text28, { children: " " }),
26399
+ /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
26400
+ /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
26365
26401
  ]
26366
26402
  }
26367
26403
  );
@@ -26375,18 +26411,18 @@ function TokenReviewPanel({
26375
26411
  borderStyle: "single",
26376
26412
  borderColor: active ? PALETTE.text : void 0,
26377
26413
  children: [
26378
- /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
26379
- suggestions.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
26414
+ /* @__PURE__ */ jsx35(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
26415
+ suggestions.length === 0 && /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
26380
26416
  suggestions.map((s, i) => {
26381
26417
  const focused = i === selectedRow;
26382
26418
  return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
26383
- /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(Text28, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
26384
- /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
26385
- /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
26419
+ /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(Text28, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
26420
+ /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
26421
+ /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
26386
26422
  ] }, s.propName);
26387
26423
  }),
26388
- /* @__PURE__ */ jsx34(Text28, { children: " " }),
26389
- /* @__PURE__ */ jsx34(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
26424
+ /* @__PURE__ */ jsx35(Text28, { children: " " }),
26425
+ /* @__PURE__ */ jsx35(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
26390
26426
  ]
26391
26427
  }
26392
26428
  );
@@ -26400,7 +26436,7 @@ var init_TokenReviewPanel = __esm({
26400
26436
 
26401
26437
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
26402
26438
  import { Text as Text29 } from "ink";
26403
- import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
26439
+ import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
26404
26440
  function ReviewDetailsPanel({
26405
26441
  selectedKey,
26406
26442
  panelOpen,
@@ -26435,7 +26471,7 @@ function ReviewDetailsPanel({
26435
26471
  rationale: s.rationale ?? ""
26436
26472
  }))
26437
26473
  ];
26438
- return /* @__PURE__ */ jsx35(
26474
+ return /* @__PURE__ */ jsx36(
26439
26475
  RationalePanel,
26440
26476
  {
26441
26477
  componentName: componentRationale?.name ?? selectedKey,
@@ -26448,7 +26484,7 @@ function ReviewDetailsPanel({
26448
26484
  );
26449
26485
  }
26450
26486
  if (panelOpen === "component-rationale") {
26451
- return /* @__PURE__ */ jsx35(
26487
+ return /* @__PURE__ */ jsx36(
26452
26488
  ComponentRationalePanel,
26453
26489
  {
26454
26490
  data: componentRationale ?? {
@@ -26474,13 +26510,13 @@ function ReviewDetailsPanel({
26474
26510
  const sourceLineCount = Math.max(1, height - 4);
26475
26511
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
26476
26512
  return /* @__PURE__ */ jsxs27(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
26477
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
26478
- source ? lines.map((line, index) => /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, children: "(no source captured)" }),
26479
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
26513
+ /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
26514
+ source ? lines.map((line, index) => /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, children: "(no source captured)" }),
26515
+ /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
26480
26516
  ] });
26481
26517
  }
26482
26518
  if (panelOpen === "token-review") {
26483
- return /* @__PURE__ */ jsx35(
26519
+ return /* @__PURE__ */ jsx36(
26484
26520
  TokenReviewPanel,
26485
26521
  {
26486
26522
  componentName: selectedKey,
@@ -26496,7 +26532,7 @@ function ReviewDetailsPanel({
26496
26532
  );
26497
26533
  }
26498
26534
  if (showJson) {
26499
- return /* @__PURE__ */ jsx35(
26535
+ return /* @__PURE__ */ jsx36(
26500
26536
  JsonPanel,
26501
26537
  {
26502
26538
  label: "GENERATED DEFINITION (read-only)",
@@ -26508,7 +26544,7 @@ function ReviewDetailsPanel({
26508
26544
  }
26509
26545
  );
26510
26546
  }
26511
- return /* @__PURE__ */ jsx35(Fragment8, { children: editor });
26547
+ return /* @__PURE__ */ jsx36(Fragment8, { children: editor });
26512
26548
  }
26513
26549
  var init_review_details_panel = __esm({
26514
26550
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx"() {
@@ -26523,7 +26559,7 @@ var init_review_details_panel = __esm({
26523
26559
  });
26524
26560
 
26525
26561
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
26526
- import { jsx as jsx36 } from "react/jsx-runtime";
26562
+ import { jsx as jsx37 } from "react/jsx-runtime";
26527
26563
  import { createElement } from "react";
26528
26564
  function toFieldEditorMetadata(reviewMetadata) {
26529
26565
  if (!reviewMetadata) return void 0;
@@ -26557,7 +26593,7 @@ function ReviewDetailsEditor({
26557
26593
  jsonScrollOffset,
26558
26594
  currentTokenSuggestions
26559
26595
  } = reviewEditor;
26560
- return /* @__PURE__ */ jsx36(
26596
+ return /* @__PURE__ */ jsx37(
26561
26597
  ReviewDetailsPanel,
26562
26598
  {
26563
26599
  selectedKey,
@@ -26605,7 +26641,7 @@ var init_ReviewDetailsEditor = __esm({
26605
26641
 
26606
26642
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
26607
26643
  import { Box as Box27, Text as Text30 } from "ink";
26608
- import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
26644
+ import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
26609
26645
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
26610
26646
  return {
26611
26647
  value: reviewEditor.draftValue || selectedJson,
@@ -26645,17 +26681,17 @@ function ReviewEmptyComponentsWarning({
26645
26681
  hidden
26646
26682
  }) {
26647
26683
  if (hidden || count === 0) return null;
26648
- return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
26684
+ return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
26649
26685
  }
26650
26686
  function ReviewNoSelection() {
26651
- return /* @__PURE__ */ jsx37(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, children: "No component selected" }) });
26687
+ return /* @__PURE__ */ jsx38(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx38(Text30, { color: PALETTE.muted, children: "No component selected" }) });
26652
26688
  }
26653
26689
  function ReviewFinalizeError({
26654
26690
  message,
26655
26691
  hidden
26656
26692
  }) {
26657
26693
  if (hidden || !message) return null;
26658
- return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
26694
+ return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
26659
26695
  }
26660
26696
  function ReviewPanelFooter({
26661
26697
  reviewEditor,
@@ -26666,8 +26702,8 @@ function ReviewPanelFooter({
26666
26702
  }) {
26667
26703
  return /* @__PURE__ */ jsxs28(Fragment9, { children: [
26668
26704
  reviewEditor.panelOpen === "token-review" ? " [\u2191/\u2193] move [Enter] edit allowed [Esc] close" : sidebarFocused ? sidebarFooter : reviewEditor.showJson ? " [\u2191\u2193] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list (edit fields)" + (reviewEditor.currentTokenSuggestions().length > 0 ? " [t] token review" : ""),
26669
- livePreview.status === "running" && /* @__PURE__ */ jsx37(Text30, { children: ` ${livePreviewSpinner} live preview` }),
26670
- livePreview.disabled && /* @__PURE__ */ jsx37(Text30, { children: " \xB7 live preview disabled" })
26705
+ livePreview.status === "running" && /* @__PURE__ */ jsx38(Text30, { children: ` ${livePreviewSpinner} live preview` }),
26706
+ livePreview.disabled && /* @__PURE__ */ jsx38(Text30, { children: " \xB7 live preview disabled" })
26671
26707
  ] });
26672
26708
  }
26673
26709
  function ReviewComponentTitle({
@@ -26677,8 +26713,8 @@ function ReviewComponentTitle({
26677
26713
  sidebarFocused
26678
26714
  }) {
26679
26715
  return /* @__PURE__ */ jsxs28(Box27, { paddingLeft: 2, paddingBottom: 1, children: [
26680
- /* @__PURE__ */ jsx37(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
26681
- /* @__PURE__ */ jsx37(Box27, { flexGrow: 1 }),
26716
+ /* @__PURE__ */ jsx38(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
26717
+ /* @__PURE__ */ jsx38(Box27, { flexGrow: 1 }),
26682
26718
  /* @__PURE__ */ jsxs28(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: [
26683
26719
  propCount,
26684
26720
  " prop",
@@ -26710,8 +26746,8 @@ function ReviewComponentPanel({
26710
26746
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
26711
26747
  const contentHeight = Math.max(1, height - 2);
26712
26748
  const contentWidth = Math.max(1, width - 1);
26713
- return /* @__PURE__ */ jsx37(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs28(Box27, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
26714
- /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx37(
26749
+ return /* @__PURE__ */ jsx38(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs28(Box27, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
26750
+ /* @__PURE__ */ jsx38(Box27, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx38(
26715
26751
  ReviewDetailsEditor,
26716
26752
  {
26717
26753
  selectedKey,
@@ -26724,7 +26760,7 @@ function ReviewComponentPanel({
26724
26760
  jsonValue,
26725
26761
  sidebarFocused,
26726
26762
  fieldEditor,
26727
- header: /* @__PURE__ */ jsx37(
26763
+ header: /* @__PURE__ */ jsx38(
26728
26764
  ReviewComponentTitle,
26729
26765
  {
26730
26766
  selectedKey,
@@ -26735,8 +26771,8 @@ function ReviewComponentPanel({
26735
26771
  )
26736
26772
  }
26737
26773
  ) }),
26738
- /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx37(Text30, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
26739
- /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx37(
26774
+ /* @__PURE__ */ jsx38(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx38(Text30, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
26775
+ /* @__PURE__ */ jsx38(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx38(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx38(
26740
26776
  ReviewPanelFooter,
26741
26777
  {
26742
26778
  reviewEditor,
@@ -26760,7 +26796,7 @@ var init_ReviewComponentPanel = __esm({
26760
26796
 
26761
26797
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
26762
26798
  import { Box as Box28, Text as Text31 } from "ink";
26763
- import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
26799
+ import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
26764
26800
  function countReviewStatuses(entries) {
26765
26801
  return entries.reduce(
26766
26802
  (counts, entry) => {
@@ -26773,13 +26809,13 @@ function countReviewStatuses(entries) {
26773
26809
  );
26774
26810
  }
26775
26811
  function ReviewLoadingState() {
26776
- return /* @__PURE__ */ jsx38(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
26812
+ return /* @__PURE__ */ jsx39(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx39(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
26777
26813
  }
26778
26814
  function ReviewLoadError({ message }) {
26779
26815
  return /* @__PURE__ */ jsxs29(Box28, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
26780
- /* @__PURE__ */ jsx38(Text31, { color: PALETTE.error, children: message }),
26781
- /* @__PURE__ */ jsx38(Text31, { children: " " }),
26782
- /* @__PURE__ */ jsx38(Text31, { children: "[q / Enter / Esc] Quit" })
26816
+ /* @__PURE__ */ jsx39(Text31, { color: PALETTE.error, children: message }),
26817
+ /* @__PURE__ */ jsx39(Text31, { children: " " }),
26818
+ /* @__PURE__ */ jsx39(Text31, { children: "[q / Enter / Esc] Quit" })
26783
26819
  ] });
26784
26820
  }
26785
26821
  var init_ReviewStatus = __esm({
@@ -27003,7 +27039,7 @@ var init_run_live_preview = __esm({
27003
27039
 
27004
27040
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
27005
27041
  import { Box as Box29, Text as Text32 } from "ink";
27006
- import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
27042
+ import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs30 } from "react/jsx-runtime";
27007
27043
  function FinalizeDialog({
27008
27044
  accepted,
27009
27045
  rejected,
@@ -27031,51 +27067,51 @@ function FinalizeDialog({
27031
27067
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
27032
27068
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
27033
27069
  const hasMoreAbove = offset > 0;
27034
- return /* @__PURE__ */ jsx39(Box29, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
27035
- /* @__PURE__ */ jsx39(Text32, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
27036
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
27070
+ return /* @__PURE__ */ jsx40(Box29, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
27071
+ /* @__PURE__ */ jsx40(Text32, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
27072
+ /* @__PURE__ */ jsx40(Text32, { children: " " }),
27037
27073
  /* @__PURE__ */ jsxs30(Text32, { children: [
27038
27074
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.success, children: [
27039
27075
  accepted,
27040
27076
  " accepted"
27041
27077
  ] }),
27042
- /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
27078
+ /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
27043
27079
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.error, children: [
27044
27080
  rejected,
27045
27081
  " rejected"
27046
27082
  ] }),
27047
- /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
27083
+ /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
27048
27084
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.muted, children: [
27049
27085
  needsReview,
27050
27086
  " unresolved"
27051
27087
  ] })
27052
27088
  ] }),
27053
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
27089
+ /* @__PURE__ */ jsx40(Text32, { children: " " }),
27054
27090
  noneAccepted && /* @__PURE__ */ jsxs30(Fragment10, { children: [
27055
- /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
27056
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
27057
- /* @__PURE__ */ jsx39(Text32, { children: " " })
27091
+ /* @__PURE__ */ jsx40(Text32, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
27092
+ /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
27093
+ /* @__PURE__ */ jsx40(Text32, { children: " " })
27058
27094
  ] }),
27059
27095
  !allResolved && /* @__PURE__ */ jsxs30(Fragment10, { children: [
27060
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
27061
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
27062
- /* @__PURE__ */ jsx39(Text32, { children: " " })
27096
+ /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
27097
+ /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
27098
+ /* @__PURE__ */ jsx40(Text32, { children: " " })
27063
27099
  ] }),
27064
27100
  /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", height: 2, children: [
27065
- previewStatus === "running" ? /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx39(Text32, { children: " " }),
27066
- /* @__PURE__ */ jsx39(Text32, { children: " " })
27101
+ previewStatus === "running" ? /* @__PURE__ */ jsx40(Text32, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx40(Text32, { children: " " }),
27102
+ /* @__PURE__ */ jsx40(Text32, { children: " " })
27067
27103
  ] }),
27068
27104
  previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs30(Fragment10, { children: [
27069
- /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
27070
- hasMoreAbove && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2191 more above" }),
27071
- windowed.map((rc) => /* @__PURE__ */ jsx39(Text32, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
27072
- hasMoreBelow && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2193 more below" }),
27073
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx39(Text32, { children: "[\u2191\u2193] scroll deletions" }),
27074
- /* @__PURE__ */ jsx39(Text32, { children: " " })
27105
+ /* @__PURE__ */ jsx40(Text32, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
27106
+ hasMoreAbove && /* @__PURE__ */ jsx40(Text32, { color: PALETTE.muted, children: "\u2191 more above" }),
27107
+ windowed.map((rc) => /* @__PURE__ */ jsx40(Text32, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
27108
+ hasMoreBelow && /* @__PURE__ */ jsx40(Text32, { color: PALETTE.muted, children: "\u2193 more below" }),
27109
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx40(Text32, { children: "[\u2191\u2193] scroll deletions" }),
27110
+ /* @__PURE__ */ jsx40(Text32, { children: " " })
27075
27111
  ] }),
27076
- /* @__PURE__ */ jsx39(Text32, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
27077
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
27078
- /* @__PURE__ */ jsx39(Text32, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
27112
+ /* @__PURE__ */ jsx40(Text32, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
27113
+ /* @__PURE__ */ jsx40(Text32, { children: " " }),
27114
+ /* @__PURE__ */ jsx40(Text32, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
27079
27115
  ] }) });
27080
27116
  }
27081
27117
  var FINALIZE_REMOVED_WINDOW;
@@ -27090,7 +27126,7 @@ var init_FinalizeDialog = __esm({
27090
27126
  });
27091
27127
 
27092
27128
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-finalize-preview.ts
27093
- import { useEffect as useEffect11, useRef as useRef7, useState as useState16 } from "react";
27129
+ import { useEffect as useEffect11, useRef as useRef8, useState as useState16 } from "react";
27094
27130
  function useReviewFinalizePreview({
27095
27131
  components,
27096
27132
  ...options
@@ -27105,7 +27141,7 @@ function useFinalizePreview(opts) {
27105
27141
  const [status, setStatus] = useState16("idle");
27106
27142
  const [removed, setRemoved] = useState16([]);
27107
27143
  const [scrollOffset, setScrollOffset] = useState16(0);
27108
- const generationRef = useRef7(0);
27144
+ const generationRef = useRef8(0);
27109
27145
  const acceptedKey = [...acceptedKeys].sort().join("\0");
27110
27146
  useEffect11(() => {
27111
27147
  if (!open) {
@@ -27159,7 +27195,7 @@ var init_use_finalize_preview = __esm({
27159
27195
  });
27160
27196
 
27161
27197
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-session.ts
27162
- import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef8, useState as useState17 } from "react";
27198
+ import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef9, useState as useState17 } from "react";
27163
27199
  function useReviewSession({
27164
27200
  loadSession,
27165
27201
  tokensPath,
@@ -27261,8 +27297,8 @@ function useReviewMetadata({ components, selectedIdx, extractSessionId }) {
27261
27297
  return { reviewMetadata, componentRationale };
27262
27298
  }
27263
27299
  function useReviewHistory({ loading, components, createSnapshot, applySnapshot }) {
27264
- const historyRef = useRef8(null);
27265
- const historySeededRef = useRef8(false);
27300
+ const historyRef = useRef9(null);
27301
+ const historySeededRef = useRef9(false);
27266
27302
  useEffect12(() => {
27267
27303
  if (loading || historySeededRef.current) return;
27268
27304
  historySeededRef.current = true;
@@ -27345,7 +27381,7 @@ var init_token_suggestions = __esm({
27345
27381
  });
27346
27382
 
27347
27383
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-editor.ts
27348
- import { useEffect as useEffect13, useRef as useRef9, useState as useState18 } from "react";
27384
+ import { useEffect as useEffect13, useRef as useRef10, useState as useState18 } from "react";
27349
27385
  function parseReviewEntry(draftValue) {
27350
27386
  const parsed = JSON.parse(draftValue);
27351
27387
  const keys = Object.keys(parsed);
@@ -27377,8 +27413,8 @@ function useReviewEditor({
27377
27413
  const [tokenReviewEditing, setTokenReviewEditing] = useState18(false);
27378
27414
  const [tokenReviewEditCursor, setTokenReviewEditCursor] = useState18(0);
27379
27415
  const [tokenReviewEditSelection, setTokenReviewEditSelection] = useState18(/* @__PURE__ */ new Set());
27380
- const tokenReviewSuggestedRef = useRef9(/* @__PURE__ */ new Map());
27381
- const pendingGRef = useRef9(false);
27416
+ const tokenReviewSuggestedRef = useRef10(/* @__PURE__ */ new Map());
27417
+ const pendingGRef = useRef10(false);
27382
27418
  useEffect13(() => {
27383
27419
  setTokenReviewRow(0);
27384
27420
  setTokenReviewEditing(false);
@@ -27524,7 +27560,7 @@ var init_use_review_surface_state = __esm({
27524
27560
 
27525
27561
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
27526
27562
  import { Box as Box30, Text as Text33 } from "ink";
27527
- import { Fragment as Fragment11, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
27563
+ import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs31 } from "react/jsx-runtime";
27528
27564
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
27529
27565
  useImmediateInput((input, key) => {
27530
27566
  if (input === "y" || key.return) {
@@ -27534,15 +27570,15 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
27534
27570
  }
27535
27571
  });
27536
27572
  return /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
27537
- /* @__PURE__ */ jsx40(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
27538
- /* @__PURE__ */ jsx40(Text33, { children: " " }),
27573
+ /* @__PURE__ */ jsx41(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
27574
+ /* @__PURE__ */ jsx41(Text33, { children: " " }),
27539
27575
  hasUnsavedDrafts ? /* @__PURE__ */ jsxs31(Fragment11, { children: [
27540
- /* @__PURE__ */ jsx40(Text33, { children: "You have unsaved draft edits." }),
27541
- /* @__PURE__ */ jsx40(Text33, { children: "Session state is preserved \u2014 you can resume" }),
27542
- /* @__PURE__ */ jsx40(Text33, { children: "by running the same review command again." })
27543
- ] }) : /* @__PURE__ */ jsx40(Text33, { children: "Session is saved. Quit without finalizing?" }),
27544
- /* @__PURE__ */ jsx40(Text33, { children: " " }),
27545
- /* @__PURE__ */ jsx40(Text33, { children: " [y / Enter] Quit [n / Esc] Stay" })
27576
+ /* @__PURE__ */ jsx41(Text33, { children: "You have unsaved draft edits." }),
27577
+ /* @__PURE__ */ jsx41(Text33, { children: "Session state is preserved \u2014 you can resume" }),
27578
+ /* @__PURE__ */ jsx41(Text33, { children: "by running the same review command again." })
27579
+ ] }) : /* @__PURE__ */ jsx41(Text33, { children: "Session is saved. Quit without finalizing?" }),
27580
+ /* @__PURE__ */ jsx41(Text33, { children: " " }),
27581
+ /* @__PURE__ */ jsx41(Text33, { children: " [y / Enter] Quit [n / Esc] Stay" })
27546
27582
  ] });
27547
27583
  }
27548
27584
  var init_QuitDialog = __esm({
@@ -27554,7 +27590,7 @@ var init_QuitDialog = __esm({
27554
27590
 
27555
27591
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
27556
27592
  import { Box as Box31, Text as Text34 } from "ink";
27557
- import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
27593
+ import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
27558
27594
  function ReviewFinalizeDialogs({
27559
27595
  showFinalize,
27560
27596
  showQuit,
@@ -27569,7 +27605,7 @@ function ReviewFinalizeDialogs({
27569
27605
  }) {
27570
27606
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
27571
27607
  return /* @__PURE__ */ jsxs32(Fragment12, { children: [
27572
- showFinalize && /* @__PURE__ */ jsx41(
27608
+ showFinalize && /* @__PURE__ */ jsx42(
27573
27609
  FinalizeDialog,
27574
27610
  {
27575
27611
  accepted,
@@ -27582,7 +27618,7 @@ function ReviewFinalizeDialogs({
27582
27618
  onCancel: onFinalizeCancel
27583
27619
  }
27584
27620
  ),
27585
- showQuit && /* @__PURE__ */ jsx41(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
27621
+ showQuit && /* @__PURE__ */ jsx42(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
27586
27622
  ] });
27587
27623
  }
27588
27624
  function ReviewStepDialogs({
@@ -27592,7 +27628,7 @@ function ReviewStepDialogs({
27592
27628
  onFinalize,
27593
27629
  onQuit
27594
27630
  }) {
27595
- return /* @__PURE__ */ jsx41(
27631
+ return /* @__PURE__ */ jsx42(
27596
27632
  ReviewFinalizeDialogs,
27597
27633
  {
27598
27634
  showFinalize: surfaceState.showFinalize,
@@ -27611,11 +27647,11 @@ function ReviewStepDialogs({
27611
27647
  function ReviewReloadDialog({ open }) {
27612
27648
  if (!open) return null;
27613
27649
  return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
27614
- /* @__PURE__ */ jsx41(Text34, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
27615
- /* @__PURE__ */ jsx41(Text34, { children: "Unsaved in-memory changes will be lost." }),
27616
- /* @__PURE__ */ jsx41(Text34, { children: " " }),
27617
- /* @__PURE__ */ jsx41(Text34, { children: " [Enter] Confirm" }),
27618
- /* @__PURE__ */ jsx41(Text34, { children: " [Esc] Cancel" })
27650
+ /* @__PURE__ */ jsx42(Text34, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
27651
+ /* @__PURE__ */ jsx42(Text34, { children: "Unsaved in-memory changes will be lost." }),
27652
+ /* @__PURE__ */ jsx42(Text34, { children: " " }),
27653
+ /* @__PURE__ */ jsx42(Text34, { children: " [Enter] Confirm" }),
27654
+ /* @__PURE__ */ jsx42(Text34, { children: " [Esc] Cancel" })
27619
27655
  ] });
27620
27656
  }
27621
27657
  var init_ReviewDialogs = __esm({
@@ -27852,20 +27888,20 @@ var init_preview_annotations = __esm({
27852
27888
  });
27853
27889
 
27854
27890
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-live-preview.ts
27855
- import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef10, useState as useState20 } from "react";
27891
+ import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef11, useState as useState20 } from "react";
27856
27892
  function useLivePreview(opts) {
27857
27893
  const debounceMs = opts.debounceMs ?? DEFAULT_DEBOUNCE_MS;
27858
27894
  const [status, setStatus] = useState20("idle");
27859
27895
  const [disabled, setDisabled] = useState20(false);
27860
- const timerRef = useRef10(null);
27861
- const generationRef = useRef10(0);
27862
- const latestRef = useRef10(0);
27863
- const inflightRef = useRef10(0);
27864
- const optsRef = useRef10(opts);
27896
+ const timerRef = useRef11(null);
27897
+ const generationRef = useRef11(0);
27898
+ const latestRef = useRef11(0);
27899
+ const inflightRef = useRef11(0);
27900
+ const optsRef = useRef11(opts);
27865
27901
  useEffect14(() => {
27866
27902
  optsRef.current = opts;
27867
27903
  });
27868
- const disabledRef = useRef10(disabled);
27904
+ const disabledRef = useRef11(disabled);
27869
27905
  useEffect14(() => {
27870
27906
  disabledRef.current = disabled;
27871
27907
  }, [disabled]);
@@ -28018,7 +28054,7 @@ var init_use_review_preview = __esm({
28018
28054
 
28019
28055
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
28020
28056
  import { Box as Box32, Text as Text35 } from "ink";
28021
- import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
28057
+ import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
28022
28058
  function LivePreviewSummary({
28023
28059
  enabled,
28024
28060
  previewAnnotations,
@@ -28032,19 +28068,19 @@ function LivePreviewSummary({
28032
28068
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
28033
28069
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
28034
28070
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
28035
- if (disabled) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
28036
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
28071
+ if (disabled) return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
28072
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
28037
28073
  if (!hasCounts) return null;
28038
28074
  return /* @__PURE__ */ jsxs33(Box32, { children: [
28039
- /* @__PURE__ */ jsx42(Text35, { children: "Preview: " }),
28040
- /* @__PURE__ */ jsx42(Text35, { color: PALETTE.success, children: `${counts.new} new` }),
28041
- /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28042
- /* @__PURE__ */ jsx42(Text35, { color: PALETTE.warning, children: `${counts.changed} changed` }),
28043
- /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28044
- /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `${counts.removed} removed` }),
28045
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx42(Text35, { children: " ([d] removed list)" }),
28046
- /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28047
- /* @__PURE__ */ jsx42(Text35, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
28075
+ /* @__PURE__ */ jsx43(Text35, { children: "Preview: " }),
28076
+ /* @__PURE__ */ jsx43(Text35, { color: PALETTE.success, children: `${counts.new} new` }),
28077
+ /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
28078
+ /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: `${counts.changed} changed` }),
28079
+ /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
28080
+ /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: `${counts.removed} removed` }),
28081
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx43(Text35, { children: " ([d] removed list)" }),
28082
+ /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
28083
+ /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
28048
28084
  ] });
28049
28085
  }
28050
28086
  var init_LivePreviewSummary = __esm({
@@ -28055,10 +28091,10 @@ var init_LivePreviewSummary = __esm({
28055
28091
  });
28056
28092
 
28057
28093
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
28058
- import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef11, useState as useState22 } from "react";
28094
+ import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef12, useState as useState22 } from "react";
28059
28095
  import figures7 from "figures";
28060
28096
  import { Box as Box33, Text as Text36 } from "ink";
28061
- import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
28097
+ import { Fragment as Fragment13, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
28062
28098
  function sortComponentsForSidebar(components, cycleParticipants) {
28063
28099
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
28064
28100
  const tier = (c2) => {
@@ -28102,7 +28138,7 @@ function CyclePathLine({
28102
28138
  return /* @__PURE__ */ jsxs34(Text36, { color: highlightLine ? PALETTE.warning : void 0, children: [
28103
28139
  prefix,
28104
28140
  segments.map(
28105
- (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx43(Text36, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx43(Text36, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
28141
+ (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx44(Text36, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx44(Text36, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
28106
28142
  )
28107
28143
  ] });
28108
28144
  }
@@ -28114,31 +28150,31 @@ function CycleDetailPanel({
28114
28150
  height
28115
28151
  }) {
28116
28152
  const lines = [
28117
- /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
28118
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
28119
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
28120
- /* @__PURE__ */ jsx43(Text36, { children: " " }, "cyc-space")
28153
+ /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
28154
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
28155
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
28156
+ /* @__PURE__ */ jsx44(Text36, { children: " " }, "cyc-space")
28121
28157
  ];
28122
28158
  cycles.forEach((cycle, index) => {
28123
28159
  const nodeCount = new Set(cycle.path).size;
28124
28160
  const isCursor = index === cursor;
28125
28161
  lines.push(
28126
- /* @__PURE__ */ jsx43(Text36, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
28127
- /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
28162
+ /* @__PURE__ */ jsx44(Text36, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
28163
+ /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
28128
28164
  );
28129
28165
  if (cycle.suggestedBreak) {
28130
28166
  lines.push(
28131
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
28167
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
28132
28168
  );
28133
28169
  }
28134
- lines.push(/* @__PURE__ */ jsx43(Text36, { children: " " }, `cyc-s-${index}`));
28170
+ lines.push(/* @__PURE__ */ jsx44(Text36, { children: " " }, `cyc-s-${index}`));
28135
28171
  });
28136
28172
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
28137
28173
  const viewportHeight = Math.max(1, height - 3);
28138
28174
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
28139
28175
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
28140
28176
  visible,
28141
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: footer })
28177
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: footer })
28142
28178
  ] });
28143
28179
  }
28144
28180
  function BreakCyclePanel({
@@ -28150,13 +28186,13 @@ function BreakCyclePanel({
28150
28186
  height
28151
28187
  }) {
28152
28188
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
28153
- /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
28154
- cycle && /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
28155
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
28156
- /* @__PURE__ */ jsx43(Text36, { children: " " }),
28157
- edges.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "remove slot edge:" }),
28158
- edges.map((edge, index) => /* @__PURE__ */ jsx43(Text36, { inverse: index === cursor, children: `${index === cursor ? figures7.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
28159
- confirming ? /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx43(Text36, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
28189
+ /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
28190
+ cycle && /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
28191
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
28192
+ /* @__PURE__ */ jsx44(Text36, { children: " " }),
28193
+ edges.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "remove slot edge:" }),
28194
+ edges.map((edge, index) => /* @__PURE__ */ jsx44(Text36, { inverse: index === cursor, children: `${index === cursor ? figures7.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
28195
+ confirming ? /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx44(Text36, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
28160
28196
  ] });
28161
28197
  }
28162
28198
  function buildBreakingRows(breakingChanges) {
@@ -28202,9 +28238,9 @@ function deriveBreakingChanges(response) {
28202
28238
  }
28203
28239
  function GenerateReviewStep(props) {
28204
28240
  if (!props.extractSessionId) {
28205
- return /* @__PURE__ */ jsx43(Box33, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
28241
+ return /* @__PURE__ */ jsx44(Box33, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
28206
28242
  }
28207
- return /* @__PURE__ */ jsx43(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
28243
+ return /* @__PURE__ */ jsx44(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
28208
28244
  }
28209
28245
  function GenerateReviewStepView({
28210
28246
  extractSessionId,
@@ -28269,7 +28305,7 @@ function GenerateReviewStepView({
28269
28305
  setFinalizeError
28270
28306
  } = reviewSurface;
28271
28307
  const [removedBannerCollapsed, setRemovedBannerCollapsed] = useState22(false);
28272
- const removedBannerDefaultedRef = useRef11(false);
28308
+ const removedBannerDefaultedRef = useRef12(false);
28273
28309
  const [cyclePanelScroll, setCyclePanelScroll] = useState22(0);
28274
28310
  const [cyclesCursor, setCyclesCursor] = useState22(0);
28275
28311
  const cyclePanel = useOverlayPanel({
@@ -28289,7 +28325,7 @@ function GenerateReviewStepView({
28289
28325
  const [breakCursor, setBreakCursor] = useState22(0);
28290
28326
  const [breakConfirm, setBreakConfirm] = useState22(false);
28291
28327
  const [expandedGroups, setExpandedGroups] = useState22(/* @__PURE__ */ new Set());
28292
- const seededGroupsRef = useRef11(false);
28328
+ const seededGroupsRef = useRef12(false);
28293
28329
  const {
28294
28330
  searchOpen,
28295
28331
  setSearchOpen,
@@ -28313,7 +28349,7 @@ function GenerateReviewStepView({
28313
28349
  const [pendingEditorFocus, setPendingEditorFocus] = useState22(null);
28314
28350
  const [autoRejected, setAutoRejected] = useState22([]);
28315
28351
  const [undoSnapshot, setUndoSnapshot] = useState22(null);
28316
- const autoRejectFiredRef = useRef11(false);
28352
+ const autoRejectFiredRef = useRef12(false);
28317
28353
  const [showReloadDialog, setShowReloadDialog] = useState22(false);
28318
28354
  const acceptedCountForPreview = components.filter((c2) => c2.status === "accepted").length;
28319
28355
  const { previewAnnotations, removedComponents, livePreviewHook, livePreviewSpinner } = useReviewPreview({
@@ -28446,7 +28482,7 @@ function GenerateReviewStepView({
28446
28482
  }),
28447
28483
  applySnapshot: applyHistorySnapshot
28448
28484
  });
28449
- const autoRejectPushedRef = useRef11(false);
28485
+ const autoRejectPushedRef = useRef12(false);
28450
28486
  useEffect16(() => {
28451
28487
  if (loading) return;
28452
28488
  if (!historySeededRef.current) return;
@@ -29061,13 +29097,13 @@ function GenerateReviewStepView({
29061
29097
  }
29062
29098
  });
29063
29099
  if (loading) {
29064
- return /* @__PURE__ */ jsx43(ReviewLoadingState, {});
29100
+ return /* @__PURE__ */ jsx44(ReviewLoadingState, {});
29065
29101
  }
29066
29102
  if (loadError) {
29067
- return /* @__PURE__ */ jsx43(ReviewLoadError, { message: loadError });
29103
+ return /* @__PURE__ */ jsx44(ReviewLoadError, { message: loadError });
29068
29104
  }
29069
29105
  if (showHelp) {
29070
- return /* @__PURE__ */ jsx43(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
29106
+ return /* @__PURE__ */ jsx44(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
29071
29107
  }
29072
29108
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
29073
29109
  components,
@@ -29108,7 +29144,7 @@ function GenerateReviewStepView({
29108
29144
  return false;
29109
29145
  })();
29110
29146
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
29111
- /* @__PURE__ */ jsx43(
29147
+ /* @__PURE__ */ jsx44(
29112
29148
  ReviewStepDialogs,
29113
29149
  {
29114
29150
  surfaceState: reviewSurface,
@@ -29118,15 +29154,15 @@ function GenerateReviewStepView({
29118
29154
  onQuit
29119
29155
  }
29120
29156
  ),
29121
- /* @__PURE__ */ jsx43(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
29157
+ /* @__PURE__ */ jsx44(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
29122
29158
  removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
29123
- /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
29159
+ /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
29124
29160
  !removedBannerCollapsed && /* @__PURE__ */ jsxs34(Fragment13, { children: [
29125
- /* @__PURE__ */ jsx43(Text36, { children: " " }),
29126
- removedComponents.map((rc) => /* @__PURE__ */ jsx43(Text36, { children: removedComponentLine(rc) }, rc.id))
29161
+ /* @__PURE__ */ jsx44(Text36, { children: " " }),
29162
+ removedComponents.map((rc) => /* @__PURE__ */ jsx44(Text36, { children: removedComponentLine(rc) }, rc.id))
29127
29163
  ] })
29128
29164
  ] }),
29129
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx43(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx43(
29165
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx44(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx44(
29130
29166
  Text36,
29131
29167
  {
29132
29168
  color: PALETTE.warning,
@@ -29138,13 +29174,13 @@ function GenerateReviewStepView({
29138
29174
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
29139
29175
  if (!comp) return null;
29140
29176
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
29141
- /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
29142
- comp.impact && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
29143
- comp.changes.length === 0 ? /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx43(Text36, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
29144
- /* @__PURE__ */ jsx43(Text36, { children: "[D/Esc] close detail" })
29177
+ /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
29178
+ comp.impact && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
29179
+ comp.changes.length === 0 ? /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx44(Text36, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
29180
+ /* @__PURE__ */ jsx44(Text36, { children: "[D/Esc] close detail" })
29145
29181
  ] });
29146
29182
  })(),
29147
- !dialogOpen && /* @__PURE__ */ jsx43(
29183
+ !dialogOpen && /* @__PURE__ */ jsx44(
29148
29184
  LivePreviewSummary,
29149
29185
  {
29150
29186
  enabled: livePreview,
@@ -29164,15 +29200,15 @@ function GenerateReviewStepView({
29164
29200
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
29165
29201
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
29166
29202
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
29167
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
29168
- members.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
29169
- ancestors.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
29170
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
29203
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
29204
+ members.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
29205
+ ancestors.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
29206
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
29171
29207
  ] });
29172
29208
  })(),
29173
- /* @__PURE__ */ jsx43(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
29174
- /* @__PURE__ */ jsx43(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
29175
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx43(
29209
+ /* @__PURE__ */ jsx44(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
29210
+ /* @__PURE__ */ jsx44(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
29211
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx44(
29176
29212
  BreakCyclePanel,
29177
29213
  {
29178
29214
  cycle: cycleRows[cyclesCursor],
@@ -29183,7 +29219,7 @@ function GenerateReviewStepView({
29183
29219
  height: panelHeight
29184
29220
  }
29185
29221
  ),
29186
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx43(
29222
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx44(
29187
29223
  CycleDetailPanel,
29188
29224
  {
29189
29225
  cycles: cycleRows,
@@ -29194,7 +29230,7 @@ function GenerateReviewStepView({
29194
29230
  }
29195
29231
  ),
29196
29232
  !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { children: [
29197
- breakingPanel.isOpen ? /* @__PURE__ */ jsx43(
29233
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx44(
29198
29234
  GotoBanner,
29199
29235
  {
29200
29236
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -29207,7 +29243,7 @@ function GenerateReviewStepView({
29207
29243
  width: sidebarWidth,
29208
29244
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
29209
29245
  }
29210
- ) : /* @__PURE__ */ jsx43(
29246
+ ) : /* @__PURE__ */ jsx44(
29211
29247
  GroupedSidebar,
29212
29248
  {
29213
29249
  items: groupedItems,
@@ -29248,7 +29284,7 @@ function GenerateReviewStepView({
29248
29284
  graph: sidebarGraph
29249
29285
  }
29250
29286
  ),
29251
- selected ? /* @__PURE__ */ jsx43(
29287
+ selected ? /* @__PURE__ */ jsx44(
29252
29288
  ReviewComponentPanel,
29253
29289
  {
29254
29290
  selectedKey: selected.key,
@@ -29280,12 +29316,12 @@ function GenerateReviewStepView({
29280
29316
  livePreview: livePreviewHook,
29281
29317
  livePreviewSpinner
29282
29318
  }
29283
- ) : /* @__PURE__ */ jsx43(ReviewNoSelection, {})
29319
+ ) : /* @__PURE__ */ jsx44(ReviewNoSelection, {})
29284
29320
  ] }),
29285
29321
  !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
29286
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
29322
+ /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
29287
29323
  cycleRows.slice(0, 3).map((cycle, idx) => {
29288
- return /* @__PURE__ */ jsx43(
29324
+ return /* @__PURE__ */ jsx44(
29289
29325
  CyclePathLine,
29290
29326
  {
29291
29327
  segments: formatCyclePathSegments2(cycle),
@@ -29296,10 +29332,10 @@ function GenerateReviewStepView({
29296
29332
  `cyc-banner-${idx}`
29297
29333
  );
29298
29334
  }),
29299
- cycleRows.length > 3 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
29300
- /* @__PURE__ */ jsx43(Text36, { children: " press [c] for detail" })
29335
+ cycleRows.length > 3 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
29336
+ /* @__PURE__ */ jsx44(Text36, { children: " press [c] for detail" })
29301
29337
  ] }),
29302
- /* @__PURE__ */ jsx43(
29338
+ /* @__PURE__ */ jsx44(
29303
29339
  SearchMatchSummary,
29304
29340
  {
29305
29341
  open: searchOpen,
@@ -29310,7 +29346,7 @@ function GenerateReviewStepView({
29310
29346
  hidden: dialogOpen
29311
29347
  }
29312
29348
  ),
29313
- !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx43(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
29349
+ !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx44(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
29314
29350
  ] });
29315
29351
  }
29316
29352
  var HELP_SECTIONS2;
@@ -29426,16 +29462,16 @@ var init_generate_review_step = __esm({
29426
29462
 
29427
29463
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
29428
29464
  import { Box as Box34, Text as Text37 } from "ink";
29429
- import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
29465
+ import { jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
29430
29466
  function CustomPromptBanner({ generatePromptPath }) {
29431
29467
  if (!generatePromptPath) return null;
29432
29468
  return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
29433
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
29469
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
29434
29470
  generatePromptPath ? /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.warning, children: [
29435
29471
  "components: ",
29436
29472
  generatePromptPath
29437
29473
  ] }) : null,
29438
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
29474
+ /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
29439
29475
  ] });
29440
29476
  }
29441
29477
  var init_CustomPromptBanner = __esm({
@@ -29465,14 +29501,14 @@ var init_contentful_urls2 = __esm({
29465
29501
 
29466
29502
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
29467
29503
  import { Box as Box35, Text as Text38 } from "ink";
29468
- import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
29504
+ import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
29469
29505
  function SpaceEnvironment({ spaceId, environmentId }) {
29470
29506
  return /* @__PURE__ */ jsxs36(Box35, { gap: 1, marginTop: 1, children: [
29471
- /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Space:" }),
29472
- /* @__PURE__ */ jsx45(Text38, { children: spaceId }),
29473
- /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "/" }),
29474
- /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Environment:" }),
29475
- /* @__PURE__ */ jsx45(Text38, { children: environmentId })
29507
+ /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Space:" }),
29508
+ /* @__PURE__ */ jsx46(Text38, { children: spaceId }),
29509
+ /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "/" }),
29510
+ /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Environment:" }),
29511
+ /* @__PURE__ */ jsx46(Text38, { children: environmentId })
29476
29512
  ] });
29477
29513
  }
29478
29514
  var init_SpaceEnvironment = __esm({
@@ -29484,12 +29520,12 @@ var init_SpaceEnvironment = __esm({
29484
29520
 
29485
29521
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
29486
29522
  import { Box as Box36, Text as Text39 } from "ink";
29487
- import { Fragment as Fragment14, jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
29523
+ import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
29488
29524
  function EntityRows({ entity, label }) {
29489
29525
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
29490
29526
  return /* @__PURE__ */ jsxs37(Fragment14, { children: [
29491
29527
  ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs37(Text39, { children: [
29492
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "\u2713" }),
29528
+ /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: "\u2713" }),
29493
29529
  " ",
29494
29530
  plural3(entity[action]),
29495
29531
  " ",
@@ -29504,8 +29540,8 @@ function EntityRows({ entity, label }) {
29504
29540
  }
29505
29541
  function LinkRow({ title, url }) {
29506
29542
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29507
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: title }),
29508
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.accent, children: url })
29543
+ /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: title }),
29544
+ /* @__PURE__ */ jsx47(Text39, { color: PALETTE.accent, children: url })
29509
29545
  ] });
29510
29546
  }
29511
29547
  function DoneStep({
@@ -29528,11 +29564,11 @@ function DoneStep({
29528
29564
  const success = totalFailed === 0;
29529
29565
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
29530
29566
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
29531
- success ? /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
29532
- totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29533
- /* @__PURE__ */ jsx46(EntityRows, { entity: componentTypes, label: "Component Type" }),
29534
- /* @__PURE__ */ jsx46(EntityRows, { entity: designTokens, label: "Design Token" }),
29535
- summary && /* @__PURE__ */ jsx46(Box36, { marginTop: 1, children: /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.muted, children: [
29567
+ success ? /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
29568
+ totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29569
+ /* @__PURE__ */ jsx47(EntityRows, { entity: componentTypes, label: "Component Type" }),
29570
+ /* @__PURE__ */ jsx47(EntityRows, { entity: designTokens, label: "Design Token" }),
29571
+ summary && /* @__PURE__ */ jsx47(Box36, { marginTop: 1, children: /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.muted, children: [
29536
29572
  "Push result: ",
29537
29573
  summary.succeeded,
29538
29574
  "/",
@@ -29546,7 +29582,7 @@ function DoneStep({
29546
29582
  ] }) })
29547
29583
  ] }),
29548
29584
  failures.length > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29549
- /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
29585
+ /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
29550
29586
  failures.map((failure) => /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.error, children: [
29551
29587
  failure.entityType,
29552
29588
  " ",
@@ -29555,11 +29591,11 @@ function DoneStep({
29555
29591
  failure.message
29556
29592
  ] }, `${failure.entityType}:${failure.entityId}`))
29557
29593
  ] }),
29558
- /* @__PURE__ */ jsx46(SpaceEnvironment, { spaceId, environmentId }),
29594
+ /* @__PURE__ */ jsx47(SpaceEnvironment, { spaceId, environmentId }),
29559
29595
  success && totalPushed > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, children: [
29560
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
29561
- /* @__PURE__ */ jsx46(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
29562
- /* @__PURE__ */ jsx46(
29596
+ /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
29597
+ /* @__PURE__ */ jsx47(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
29598
+ /* @__PURE__ */ jsx47(
29563
29599
  LinkRow,
29564
29600
  {
29565
29601
  title: "View your design tokens here:",
@@ -29567,7 +29603,7 @@ function DoneStep({
29567
29603
  }
29568
29604
  )
29569
29605
  ] }),
29570
- /* @__PURE__ */ jsx46(Text39, { children: "[Enter / q] Exit" })
29606
+ /* @__PURE__ */ jsx47(Text39, { children: "[Enter / q] Exit" })
29571
29607
  ] });
29572
29608
  }
29573
29609
  var ACTIONS;
@@ -29626,7 +29662,7 @@ import { useState as useState24 } from "react";
29626
29662
  import { Box as Box37, Text as Text40 } from "ink";
29627
29663
  import { readdirSync as readdirSync3 } from "node:fs";
29628
29664
  import { dirname as dirname15, basename as basename6, join as join22 } from "node:path";
29629
- import { jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
29665
+ import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
29630
29666
  function autocomplete(partial) {
29631
29667
  if (!partial) return null;
29632
29668
  const normalized = normalizePath(partial);
@@ -29685,18 +29721,18 @@ function PathPrompt({
29685
29721
  const cursor = cursorVisible ? "\u2588" : " ";
29686
29722
  return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
29687
29723
  /* @__PURE__ */ jsxs38(Box37, { gap: 1, children: [
29688
- /* @__PURE__ */ jsx47(Text40, { color: PALETTE.accent, children: "?" }),
29724
+ /* @__PURE__ */ jsx48(Text40, { color: PALETTE.accent, children: "?" }),
29689
29725
  /* @__PURE__ */ jsxs38(Text40, { bold: true, children: [
29690
29726
  label,
29691
29727
  ":"
29692
29728
  ] }),
29693
- /* @__PURE__ */ jsx47(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
29694
- /* @__PURE__ */ jsx47(Text40, { children: cursor })
29729
+ /* @__PURE__ */ jsx48(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
29730
+ /* @__PURE__ */ jsx48(Text40, { children: cursor })
29695
29731
  ] }),
29696
29732
  /* @__PURE__ */ jsxs38(Box37, { gap: 3, children: [
29697
- /* @__PURE__ */ jsx47(Text40, { children: "[Enter] Confirm" }),
29698
- /* @__PURE__ */ jsx47(Text40, { children: "[Tab] Autocomplete" }),
29699
- /* @__PURE__ */ jsx47(Text40, { children: "[Esc] Cancel" })
29733
+ /* @__PURE__ */ jsx48(Text40, { children: "[Enter] Confirm" }),
29734
+ /* @__PURE__ */ jsx48(Text40, { children: "[Tab] Autocomplete" }),
29735
+ /* @__PURE__ */ jsx48(Text40, { children: "[Esc] Cancel" })
29700
29736
  ] })
29701
29737
  ] });
29702
29738
  }
@@ -29712,10 +29748,10 @@ var init_PathPrompt = __esm({
29712
29748
 
29713
29749
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/StepHeader.tsx
29714
29750
  import { Box as Box38, Text as Text41 } from "ink";
29715
- import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
29751
+ import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
29716
29752
  function StepHeader({ stepNumber, totalSteps, title }) {
29717
29753
  return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 0, children: [
29718
- /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
29754
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
29719
29755
  /* @__PURE__ */ jsxs39(Box38, { gap: 1, children: [
29720
29756
  /* @__PURE__ */ jsxs39(Text41, { bold: true, children: [
29721
29757
  "Step ",
@@ -29723,10 +29759,10 @@ function StepHeader({ stepNumber, totalSteps, title }) {
29723
29759
  " of ",
29724
29760
  totalSteps
29725
29761
  ] }),
29726
- /* @__PURE__ */ jsx48(Text41, { bold: true, children: "\u2014" }),
29727
- /* @__PURE__ */ jsx48(Text41, { bold: true, children: title })
29762
+ /* @__PURE__ */ jsx49(Text41, { bold: true, children: "\u2014" }),
29763
+ /* @__PURE__ */ jsx49(Text41, { bold: true, children: title })
29728
29764
  ] }),
29729
- /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
29765
+ /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
29730
29766
  ] });
29731
29767
  }
29732
29768
  var init_StepHeader = __esm({
@@ -29739,7 +29775,7 @@ var init_StepHeader = __esm({
29739
29775
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
29740
29776
  import { useEffect as useEffect18, useState as useState25 } from "react";
29741
29777
  import { Spinner as Spinner2 } from "@inkjs/ui";
29742
- import { jsx as jsx49 } from "react/jsx-runtime";
29778
+ import { jsx as jsx50 } from "react/jsx-runtime";
29743
29779
  function useTimedSpinner() {
29744
29780
  const [elapsedSeconds, setElapsedSeconds] = useState25(0);
29745
29781
  useEffect18(() => {
@@ -29751,7 +29787,7 @@ function useTimedSpinner() {
29751
29787
  const mins = Math.floor(elapsedSeconds / 60);
29752
29788
  const secs = elapsedSeconds % 60;
29753
29789
  return {
29754
- spinner: /* @__PURE__ */ jsx49(Spinner2, {}),
29790
+ spinner: /* @__PURE__ */ jsx50(Spinner2, {}),
29755
29791
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
29756
29792
  };
29757
29793
  }
@@ -29764,21 +29800,21 @@ var init_use_timed_spinner = __esm({
29764
29800
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
29765
29801
  import { Box as Box39, Text as Text42 } from "ink";
29766
29802
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
29767
- import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
29803
+ import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
29768
29804
  function PushingStep({ stepNumber, totalSteps, progress }) {
29769
29805
  const { elapsed } = useTimedSpinner();
29770
29806
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
29771
29807
  const showGlobal = progress && progress.kind === "progress";
29772
29808
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
29773
29809
  return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
29774
- /* @__PURE__ */ jsx50(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
29775
- /* @__PURE__ */ jsx50(Text42, { children: "Writing component types and design tokens to your Contentful space..." }),
29810
+ /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
29811
+ /* @__PURE__ */ jsx51(Text42, { children: "Writing component types and design tokens to your Contentful space..." }),
29776
29812
  operationId && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
29777
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Operation:" }),
29778
- /* @__PURE__ */ jsx50(Text42, { children: operationId })
29813
+ /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Operation:" }),
29814
+ /* @__PURE__ */ jsx51(Text42, { children: operationId })
29779
29815
  ] }),
29780
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx50(Box39, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs40(Box39, { gap: 2, children: [
29781
- /* @__PURE__ */ jsx50(Box39, { width: 40, children: /* @__PURE__ */ jsx50(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx50(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
29816
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx51(Box39, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs40(Box39, { gap: 2, children: [
29817
+ /* @__PURE__ */ jsx51(Box39, { width: 40, children: /* @__PURE__ */ jsx51(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx51(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
29782
29818
  /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29783
29819
  progress.processed,
29784
29820
  "/",
@@ -29787,10 +29823,10 @@ function PushingStep({ stepNumber, totalSteps, progress }) {
29787
29823
  ] })
29788
29824
  ] }) }),
29789
29825
  showCurrent && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
29790
- /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Now processing:" }),
29791
- /* @__PURE__ */ jsx50(Text42, { children: showCurrent })
29826
+ /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Now processing:" }),
29827
+ /* @__PURE__ */ jsx51(Text42, { children: showCurrent })
29792
29828
  ] }),
29793
- /* @__PURE__ */ jsx50(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29829
+ /* @__PURE__ */ jsx51(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29794
29830
  "Elapsed: ",
29795
29831
  elapsed
29796
29832
  ] }) })
@@ -29990,7 +30026,7 @@ var init_preview_confirmation_input = __esm({
29990
30026
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
29991
30027
  import { useEffect as useEffect19, useState as useState26, useMemo as useMemo5 } from "react";
29992
30028
  import { Box as Box40, Text as Text43 } from "ink";
29993
- import { Fragment as Fragment15, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
30029
+ import { Fragment as Fragment15, jsx as jsx52, jsxs as jsxs41 } from "react/jsx-runtime";
29994
30030
  function buildPreviewSummaryLines(preview) {
29995
30031
  const lines = [];
29996
30032
  const { components, tokens } = preview;
@@ -30245,9 +30281,9 @@ function WizardPreviewStep({
30245
30281
  }
30246
30282
  });
30247
30283
  return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 2, children: [
30248
- /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
30284
+ /* @__PURE__ */ jsx52(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
30249
30285
  hasAnything ? /* @__PURE__ */ jsxs41(Fragment15, { children: [
30250
- /* @__PURE__ */ jsx51(Text43, { children: "Here's what will happen in your space:" }),
30286
+ /* @__PURE__ */ jsx52(Text43, { children: "Here's what will happen in your space:" }),
30251
30287
  /* @__PURE__ */ jsxs41(
30252
30288
  WindowedPanel,
30253
30289
  {
@@ -30256,24 +30292,24 @@ function WizardPreviewStep({
30256
30292
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
30257
30293
  focused: false,
30258
30294
  children: [
30259
- activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx51(Text43, { color: line.color === "gray" ? PALETTE.muted : line.color, wrap: "truncate-end", children: line.text }, line.key)),
30260
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
30295
+ activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx52(Text43, { color: line.color === "gray" ? PALETTE.muted : line.color, wrap: "truncate-end", children: line.text }, line.key)),
30296
+ /* @__PURE__ */ jsx52(Text43, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
30261
30297
  ]
30262
30298
  }
30263
30299
  )
30264
- ] }) : /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
30265
- breakingWithImpact && /* @__PURE__ */ jsx51(Box40, { marginTop: 1, children: /* @__PURE__ */ jsx51(Text43, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
30266
- /* @__PURE__ */ jsx51(SpaceEnvironment, { spaceId, environmentId }),
30300
+ ] }) : /* @__PURE__ */ jsx52(Text43, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
30301
+ breakingWithImpact && /* @__PURE__ */ jsx52(Box40, { marginTop: 1, children: /* @__PURE__ */ jsx52(Text43, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
30302
+ /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
30267
30303
  /* @__PURE__ */ jsxs41(Box40, { gap: 3, marginTop: 1, children: [
30268
- /* @__PURE__ */ jsx51(Text43, { children: "[Enter] Push to Contentful" }),
30304
+ /* @__PURE__ */ jsx52(Text43, { children: "[Enter] Push to Contentful" }),
30269
30305
  /* @__PURE__ */ jsxs41(Text43, { children: [
30270
30306
  "[d] ",
30271
30307
  diffExpanded ? "Hide" : "Show",
30272
30308
  " diff"
30273
30309
  ] }),
30274
- diffExpanded && /* @__PURE__ */ jsx51(Text43, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
30275
- onEdit && /* @__PURE__ */ jsx51(Text43, { children: "[e] Edit definitions" }),
30276
- /* @__PURE__ */ jsx51(Text43, { children: "[q] Cancel" })
30310
+ diffExpanded && /* @__PURE__ */ jsx52(Text43, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
30311
+ onEdit && /* @__PURE__ */ jsx52(Text43, { children: "[e] Edit definitions" }),
30312
+ /* @__PURE__ */ jsx52(Text43, { children: "[q] Cancel" })
30277
30313
  ] })
30278
30314
  ] });
30279
30315
  }
@@ -30305,7 +30341,7 @@ var init_run_teaser = __esm({
30305
30341
 
30306
30342
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
30307
30343
  import { Box as Box41 } from "ink";
30308
- import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
30344
+ import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
30309
30345
  function totalStepsFor(state2) {
30310
30346
  const hasTokenStage = !!state2.tokensPath || !!state2.rawTokensPath;
30311
30347
  return 3 + (hasTokenStage ? 1 : 0) + 2 + (state2.mapTokensEligible === true ? 1 : 0);
@@ -30326,7 +30362,7 @@ function FlowScreen({
30326
30362
  const content = (() => {
30327
30363
  switch (state2.step) {
30328
30364
  case "final-review":
30329
- return /* @__PURE__ */ jsx52(
30365
+ return /* @__PURE__ */ jsx53(
30330
30366
  GenerateReviewStep,
30331
30367
  {
30332
30368
  extractSessionId: state2.extractSessionId,
@@ -30343,7 +30379,7 @@ function FlowScreen({
30343
30379
  }
30344
30380
  );
30345
30381
  case "previewing":
30346
- return /* @__PURE__ */ jsx52(
30382
+ return /* @__PURE__ */ jsx53(
30347
30383
  RunningStep,
30348
30384
  {
30349
30385
  stepNumber: totalSteps,
@@ -30354,7 +30390,7 @@ function FlowScreen({
30354
30390
  );
30355
30391
  case "preview-gate":
30356
30392
  if (!state2.serverPreview) return null;
30357
- return /* @__PURE__ */ jsx52(
30393
+ return /* @__PURE__ */ jsx53(
30358
30394
  WizardPreviewStep,
30359
30395
  {
30360
30396
  preview: state2.serverPreview,
@@ -30368,9 +30404,9 @@ function FlowScreen({
30368
30404
  }
30369
30405
  );
30370
30406
  case "pushing":
30371
- return /* @__PURE__ */ jsx52(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
30407
+ return /* @__PURE__ */ jsx53(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
30372
30408
  case "path-prompt":
30373
- return /* @__PURE__ */ jsx52(
30409
+ return /* @__PURE__ */ jsx53(
30374
30410
  PathPrompt,
30375
30411
  {
30376
30412
  defaultPath: state2.outDir,
@@ -30379,7 +30415,7 @@ function FlowScreen({
30379
30415
  }
30380
30416
  );
30381
30417
  case "printing":
30382
- return /* @__PURE__ */ jsx52(
30418
+ return /* @__PURE__ */ jsx53(
30383
30419
  RunningStep,
30384
30420
  {
30385
30421
  stepNumber: totalSteps,
@@ -30390,7 +30426,7 @@ function FlowScreen({
30390
30426
  );
30391
30427
  case "print-gate": {
30392
30428
  const teaser = buildRunTeaserLine(state2.lastRunId);
30393
- return /* @__PURE__ */ jsx52(
30429
+ return /* @__PURE__ */ jsx53(
30394
30430
  GateStep,
30395
30431
  {
30396
30432
  message: "Files saved",
@@ -30404,7 +30440,7 @@ function FlowScreen({
30404
30440
  }
30405
30441
  case "done": {
30406
30442
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
30407
- return /* @__PURE__ */ jsx52(
30443
+ return /* @__PURE__ */ jsx53(
30408
30444
  DoneStep,
30409
30445
  {
30410
30446
  componentTypes: state2.pushResult.componentTypes,
@@ -30419,7 +30455,7 @@ function FlowScreen({
30419
30455
  );
30420
30456
  }
30421
30457
  case "preview-validation-error":
30422
- return /* @__PURE__ */ jsx52(
30458
+ return /* @__PURE__ */ jsx53(
30423
30459
  PreviewValidationErrorScreen,
30424
30460
  {
30425
30461
  errors: state2.previewValidationErrors,
@@ -30430,7 +30466,7 @@ function FlowScreen({
30430
30466
  }
30431
30467
  );
30432
30468
  case "error":
30433
- return /* @__PURE__ */ jsx52(
30469
+ return /* @__PURE__ */ jsx53(
30434
30470
  ErrorStep,
30435
30471
  {
30436
30472
  stepName: state2.errorStep,
@@ -30442,7 +30478,7 @@ function FlowScreen({
30442
30478
  }
30443
30479
  })();
30444
30480
  return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", children: [
30445
- /* @__PURE__ */ jsx52(CustomPromptBanner, { generatePromptPath }),
30481
+ /* @__PURE__ */ jsx53(CustomPromptBanner, { generatePromptPath }),
30446
30482
  content
30447
30483
  ] });
30448
30484
  }
@@ -31251,9 +31287,9 @@ var init_controller = __esm({
31251
31287
  });
31252
31288
 
31253
31289
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/use-flow.ts
31254
- import { useEffect as useEffect20, useRef as useRef12, useSyncExternalStore } from "react";
31290
+ import { useEffect as useEffect20, useRef as useRef13, useSyncExternalStore } from "react";
31255
31291
  function useFlow(start, options = {}) {
31256
- const controller = useRef12();
31292
+ const controller = useRef13();
31257
31293
  if (start && !controller.current) {
31258
31294
  try {
31259
31295
  startWizardLog();
@@ -31302,7 +31338,7 @@ var init_debug_mode_store = __esm({
31302
31338
  "packages/experience-design-system-cli/src/tui/settings/debug-mode/debug-mode-store.ts"() {
31303
31339
  "use strict";
31304
31340
  init_config();
31305
- RETENTION_CHOICES = [3, 14, 30];
31341
+ RETENTION_CHOICES = [7, 14, 30];
31306
31342
  DEFAULT_RETENTION_DAYS = 30;
31307
31343
  }
31308
31344
  });
@@ -31646,14 +31682,14 @@ var init_help_info = __esm({
31646
31682
 
31647
31683
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
31648
31684
  import { useEffect as useEffect21, useState as useState27 } from "react";
31649
- import { Box as Box42, Text as Text44, useInput as useInput9 } from "ink";
31650
- import { Fragment as Fragment16, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
31685
+ import { Box as Box42, Text as Text44, useInput as useInput10 } from "ink";
31686
+ import { Fragment as Fragment16, jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
31651
31687
  function Section({ title, rows }) {
31652
31688
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
31653
- /* @__PURE__ */ jsx53(Text44, { bold: true, color: PALETTE.accent, children: title }),
31689
+ /* @__PURE__ */ jsx54(Text44, { bold: true, color: PALETTE.accent, children: title }),
31654
31690
  rows.map((row) => /* @__PURE__ */ jsxs43(Box42, { gap: 1, children: [
31655
- /* @__PURE__ */ jsx53(Box42, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: row.label }) }),
31656
- /* @__PURE__ */ jsx53(Text44, { children: row.value })
31691
+ /* @__PURE__ */ jsx54(Box42, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx54(Text44, { color: PALETTE.muted, children: row.label }) }),
31692
+ /* @__PURE__ */ jsx54(Text44, { children: row.value })
31657
31693
  ] }, row.label))
31658
31694
  ] });
31659
31695
  }
@@ -31667,7 +31703,7 @@ function HelpScreen({ onDone }) {
31667
31703
  void finishDebugRun({ outputs: {}, status: "success", exitMethod });
31668
31704
  onDone();
31669
31705
  };
31670
- useInput9((input, key) => {
31706
+ useInput10((input, key) => {
31671
31707
  if (key.return) {
31672
31708
  leave("saved");
31673
31709
  return;
@@ -31678,13 +31714,13 @@ function HelpScreen({ onDone }) {
31678
31714
  }
31679
31715
  });
31680
31716
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
31681
- /* @__PURE__ */ jsx53(Text44, { bold: true, children: "Help" }),
31717
+ /* @__PURE__ */ jsx54(Text44, { bold: true, children: "Help" }),
31682
31718
  info ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
31683
- /* @__PURE__ */ jsx53(Section, { title: "Where things are stored", rows: info.storage }),
31684
- /* @__PURE__ */ jsx53(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
31685
- /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: "Hit a problem? Turn on Debug Mode in Settings, reproduce it, then share the session folder above. The CMA token is redacted from those logs." })
31686
- ] }) : /* @__PURE__ */ jsx53(Text44, { color: PALETTE.accent, children: "Loading..." }),
31687
- /* @__PURE__ */ jsx53(
31719
+ /* @__PURE__ */ jsx54(Section, { title: "Where things are stored", rows: info.storage }),
31720
+ /* @__PURE__ */ jsx54(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
31721
+ /* @__PURE__ */ jsx54(Text44, { color: PALETTE.muted, children: "Hit a problem? Turn on Debug Mode in Settings, reproduce it, then share the session folder above. The CMA token is redacted from those logs." })
31722
+ ] }) : /* @__PURE__ */ jsx54(Text44, { color: PALETTE.accent, children: "Loading..." }),
31723
+ /* @__PURE__ */ jsx54(
31688
31724
  ControlHints,
31689
31725
  {
31690
31726
  hints: [
@@ -31707,8 +31743,8 @@ var init_PageContainer2 = __esm({
31707
31743
 
31708
31744
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
31709
31745
  import { useState as useState28 } from "react";
31710
- import { Box as Box43, Text as Text45, useInput as useInput10 } from "ink";
31711
- import { jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
31746
+ import { Box as Box43, Text as Text45, useInput as useInput11 } from "ink";
31747
+ import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
31712
31748
  function SettingsScreen({
31713
31749
  onNavigate,
31714
31750
  onBack
@@ -31719,7 +31755,7 @@ function SettingsScreen({
31719
31755
  { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
31720
31756
  { label: "Debug Mode", screen: "settings-debug-mode" }
31721
31757
  ];
31722
- useInput10((input, key) => {
31758
+ useInput11((input, key) => {
31723
31759
  if (key.upArrow) {
31724
31760
  setFocusIdx((i) => (i - 1 + items.length) % items.length);
31725
31761
  return;
@@ -31740,14 +31776,14 @@ function SettingsScreen({
31740
31776
  }
31741
31777
  });
31742
31778
  return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31743
- /* @__PURE__ */ jsx54(Text45, { bold: true, children: "Settings" }),
31744
- /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: " " }),
31779
+ /* @__PURE__ */ jsx55(Text45, { bold: true, children: "Settings" }),
31780
+ /* @__PURE__ */ jsx55(Text45, { color: PALETTE.muted, children: " " }),
31745
31781
  items.map((item, i) => /* @__PURE__ */ jsxs44(Text45, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
31746
31782
  i === focusIdx ? "> " : " ",
31747
31783
  item.label
31748
31784
  ] }, item.label)),
31749
- /* @__PURE__ */ jsx54(Text45, { children: " " }),
31750
- /* @__PURE__ */ jsx54(
31785
+ /* @__PURE__ */ jsx55(Text45, { children: " " }),
31786
+ /* @__PURE__ */ jsx55(
31751
31787
  ControlHints,
31752
31788
  {
31753
31789
  hints: [
@@ -32056,9 +32092,8 @@ var init_agent_debug = __esm({
32056
32092
 
32057
32093
  // packages/experience-design-system-cli/src/tui/settings/shared/FieldForm.tsx
32058
32094
  import { useState as useState29 } from "react";
32059
- import { Box as Box44, Text as Text46, useInput as useInput11 } from "ink";
32060
- import TextInput4 from "ink-text-input";
32061
- import { Fragment as Fragment17, jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
32095
+ import { Box as Box44, Text as Text46, useInput as useInput12 } from "ink";
32096
+ import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
32062
32097
  function formLabelWidth(rows) {
32063
32098
  return Math.max(...rows.map((row) => row.label.length));
32064
32099
  }
@@ -32068,8 +32103,8 @@ function FormReadOnlyRow({
32068
32103
  children
32069
32104
  }) {
32070
32105
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32071
- /* @__PURE__ */ jsx55(Text46, { children: " " }),
32072
- /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: label }) }),
32106
+ /* @__PURE__ */ jsx56(Text46, { children: " " }),
32107
+ /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: label }) }),
32073
32108
  children
32074
32109
  ] });
32075
32110
  }
@@ -32093,7 +32128,7 @@ function FieldForm({
32093
32128
  const labelWidth = formLabelWidth([...fields2, ...actions]);
32094
32129
  const currentField = active < fields2.length ? fields2[active] : void 0;
32095
32130
  const currentAction = currentField ? void 0 : actions[active - fields2.length];
32096
- useInput11((input, key) => {
32131
+ useInput12((input, key) => {
32097
32132
  if (busy) return;
32098
32133
  if (editing) {
32099
32134
  if (key.escape && currentField) {
@@ -32110,7 +32145,7 @@ function FieldForm({
32110
32145
  onSave();
32111
32146
  return;
32112
32147
  }
32113
- if (input === "c" && currentField) {
32148
+ if (isClearKey(input, key) && currentField) {
32114
32149
  onChange(currentField.key, "");
32115
32150
  return;
32116
32151
  }
@@ -32131,11 +32166,11 @@ function FieldForm({
32131
32166
  }
32132
32167
  }
32133
32168
  });
32134
- const pointer = (isActive) => /* @__PURE__ */ jsx55(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
32169
+ const pointer = (isActive) => /* @__PURE__ */ jsx56(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
32135
32170
  return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32136
- /* @__PURE__ */ jsx55(Text46, { bold: true, children: title }),
32137
- subtitle && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: subtitle }),
32138
- /* @__PURE__ */ jsx55(Text46, { children: " " }),
32171
+ /* @__PURE__ */ jsx56(Text46, { bold: true, children: title }),
32172
+ subtitle && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: subtitle }),
32173
+ /* @__PURE__ */ jsx56(Text46, { children: " " }),
32139
32174
  /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
32140
32175
  fields2.map((field, index) => {
32141
32176
  const isActive = index === active;
@@ -32143,34 +32178,34 @@ function FieldForm({
32143
32178
  const display = field.masked ? "\u2022".repeat(value.length) : value;
32144
32179
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32145
32180
  pointer(isActive),
32146
- /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
32147
- isActive && editing ? /* @__PURE__ */ jsx55(
32148
- TextInput4,
32181
+ /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
32182
+ isActive && editing ? /* @__PURE__ */ jsx56(
32183
+ ClearableTextInput,
32149
32184
  {
32150
32185
  value,
32151
32186
  onChange: (next) => onChange(field.key, next),
32152
32187
  onSubmit: () => setEditing(false),
32153
32188
  mask: field.masked ? "\u2022" : void 0
32154
32189
  }
32155
- ) : display ? /* @__PURE__ */ jsx55(Text46, { bold: true, children: display }) : (
32190
+ ) : display ? /* @__PURE__ */ jsx56(Text46, { bold: true, children: display }) : (
32156
32191
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
32157
32192
  // text starts in the same column as every other row's.
32158
- /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
32193
+ /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
32159
32194
  ),
32160
- display && field.hint && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint })
32195
+ display && field.hint && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint })
32161
32196
  ] }, field.key);
32162
32197
  }),
32163
32198
  actions.map((action, index) => {
32164
32199
  const isActive = fields2.length + index === active;
32165
32200
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32166
32201
  pointer(isActive),
32167
- /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
32168
- /* @__PURE__ */ jsx55(Text46, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
32202
+ /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
32203
+ /* @__PURE__ */ jsx56(Text46, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
32169
32204
  ] }, action.label);
32170
32205
  })
32171
32206
  ] }),
32172
32207
  notice && /* @__PURE__ */ jsxs45(Fragment17, { children: [
32173
- /* @__PURE__ */ jsx55(Text46, { children: " " }),
32208
+ /* @__PURE__ */ jsx56(Text46, { children: " " }),
32174
32209
  /* @__PURE__ */ jsxs45(Text46, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
32175
32210
  notice.kind === "success" ? "\u2713" : "\u2717",
32176
32211
  " ",
@@ -32178,19 +32213,20 @@ function FieldForm({
32178
32213
  ] })
32179
32214
  ] }),
32180
32215
  children,
32181
- /* @__PURE__ */ jsx55(Text46, { children: " " }),
32182
- /* @__PURE__ */ jsx55(
32216
+ /* @__PURE__ */ jsx56(Text46, { children: " " }),
32217
+ /* @__PURE__ */ jsx56(
32183
32218
  ControlHints,
32184
32219
  {
32185
32220
  hints: editing ? [
32186
32221
  { keys: "type", label: "edit" },
32187
32222
  { keys: "\u2190/\u2192", label: "move cursor" },
32188
32223
  { keys: "\u23CE", label: "done" },
32224
+ { keys: "Ctrl+D", label: "clear" },
32189
32225
  { keys: "Esc", label: "cancel edit" }
32190
32226
  ] : [
32191
32227
  { keys: "\u2191/\u2193", label: "move" },
32192
32228
  { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
32193
- ...currentField ? [{ keys: "c", label: "clear" }] : [],
32229
+ ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
32194
32230
  { keys: "s", label: "save" },
32195
32231
  { keys: "Esc/q", label: "back without saving" }
32196
32232
  ]
@@ -32203,19 +32239,20 @@ var init_FieldForm = __esm({
32203
32239
  "use strict";
32204
32240
  init_theme();
32205
32241
  init_control_hints();
32242
+ init_ClearableTextInput();
32206
32243
  }
32207
32244
  });
32208
32245
 
32209
32246
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
32210
32247
  import { Text as Text47 } from "ink";
32211
- import { jsx as jsx56 } from "react/jsx-runtime";
32248
+ import { jsx as jsx57 } from "react/jsx-runtime";
32212
32249
  function AgentStatusBadge({
32213
32250
  name,
32214
32251
  checks,
32215
32252
  binary
32216
32253
  }) {
32217
32254
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
32218
- return /* @__PURE__ */ jsx56(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
32255
+ return /* @__PURE__ */ jsx57(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
32219
32256
  }
32220
32257
  var TONE_COLOR;
32221
32258
  var init_AgentStatusBadge = __esm({
@@ -32234,11 +32271,11 @@ var init_AgentStatusBadge = __esm({
32234
32271
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
32235
32272
  import { useEffect as useEffect22, useState as useState30 } from "react";
32236
32273
  import { Box as Box45, Text as Text48 } from "ink";
32237
- import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
32274
+ import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
32238
32275
  function StatusHeading() {
32239
32276
  return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
32240
- /* @__PURE__ */ jsx57(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
32241
- /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
32277
+ /* @__PURE__ */ jsx58(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
32278
+ /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
32242
32279
  ] });
32243
32280
  }
32244
32281
  function AgentDetail({
@@ -32301,7 +32338,7 @@ function AgentDetail({
32301
32338
  };
32302
32339
  const formFields = fields(name);
32303
32340
  const labelWidth = formLabelWidth([...formFields, action]);
32304
- return /* @__PURE__ */ jsx57(
32341
+ return /* @__PURE__ */ jsx58(
32305
32342
  FieldForm,
32306
32343
  {
32307
32344
  title: AGENT_LABELS[name],
@@ -32319,8 +32356,8 @@ function AgentDetail({
32319
32356
  notice: testing ? null : notice,
32320
32357
  busy: saving || testing,
32321
32358
  children: /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", marginTop: 1, children: [
32322
- /* @__PURE__ */ jsx57(StatusHeading, {}),
32323
- statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx57(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx57(Text48, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
32359
+ /* @__PURE__ */ jsx58(StatusHeading, {}),
32360
+ statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx58(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx58(Text48, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
32324
32361
  ] })
32325
32362
  }
32326
32363
  );
@@ -32345,9 +32382,9 @@ var init_AgentDetail = __esm({
32345
32382
  });
32346
32383
 
32347
32384
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
32348
- import { useEffect as useEffect23, useRef as useRef13, useState as useState31 } from "react";
32349
- import { Box as Box46, Text as Text49, useInput as useInput12 } from "ink";
32350
- import { Fragment as Fragment18, jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
32385
+ import { useEffect as useEffect23, useRef as useRef14, useState as useState31 } from "react";
32386
+ import { Box as Box46, Text as Text49, useInput as useInput13 } from "ink";
32387
+ import { Fragment as Fragment18, jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
32351
32388
  function AgentsScreen({ onDone }) {
32352
32389
  const [config, setConfig] = useState31(null);
32353
32390
  const [focus, setFocus] = useState31(0);
@@ -32356,7 +32393,7 @@ function AgentsScreen({ onDone }) {
32356
32393
  const [saving, setSaving] = useState31(false);
32357
32394
  const [loadError, setLoadError] = useState31(null);
32358
32395
  const [checks, setChecks] = useState31({});
32359
- const visit = useRef13({
32396
+ const visit = useRef14({
32360
32397
  trail: createTrail(),
32361
32398
  before: void 0,
32362
32399
  environment: void 0,
@@ -32423,7 +32460,7 @@ function AgentsScreen({ onDone }) {
32423
32460
  setNotice({ kind: "error", text: `Default agent not changed: ${visit.error}` });
32424
32461
  }).finally(() => setSaving(false));
32425
32462
  };
32426
- useInput12((input, key) => {
32463
+ useInput13((input, key) => {
32427
32464
  if (loadError && (key.escape || input === "q")) {
32428
32465
  endVisit(null);
32429
32466
  onDone();
@@ -32456,20 +32493,20 @@ function AgentsScreen({ onDone }) {
32456
32493
  });
32457
32494
  if (!config) {
32458
32495
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32459
- /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
32460
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32496
+ /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Agents" }),
32497
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32461
32498
  loadError ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
32462
32499
  /* @__PURE__ */ jsxs47(Text49, { color: PALETTE.error, children: [
32463
32500
  "\u2717 Could not read the settings: ",
32464
32501
  loadError
32465
32502
  ] }),
32466
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32467
- /* @__PURE__ */ jsx58(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32468
- ] }) : /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "Loading..." })
32503
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32504
+ /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32505
+ ] }) : /* @__PURE__ */ jsx59(Text49, { color: PALETTE.accent, children: "Loading..." })
32469
32506
  ] });
32470
32507
  }
32471
32508
  if (open) {
32472
- return /* @__PURE__ */ jsx58(
32509
+ return /* @__PURE__ */ jsx59(
32473
32510
  AgentDetail,
32474
32511
  {
32475
32512
  name: open,
@@ -32491,46 +32528,46 @@ function AgentsScreen({ onDone }) {
32491
32528
  }
32492
32529
  const focusedAgent = AGENT_NAMES[focus];
32493
32530
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32494
- /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
32495
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
32496
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32531
+ /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Agents" }),
32532
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
32533
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32497
32534
  /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
32498
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "Default agent" }),
32499
- /* @__PURE__ */ jsx58(Text49, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
32500
- saving && /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "\u2026 saving" })
32535
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "Default agent" }),
32536
+ /* @__PURE__ */ jsx59(Text49, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
32537
+ saving && /* @__PURE__ */ jsx59(Text49, { color: PALETTE.accent, children: "\u2026 saving" })
32501
32538
  ] }),
32502
32539
  /* @__PURE__ */ jsxs47(Box46, { marginTop: 1, gap: 1, children: [
32503
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32504
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32505
- /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "AGENT" }) }),
32506
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "STATUS" })
32540
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32541
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32542
+ /* @__PURE__ */ jsx59(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "AGENT" }) }),
32543
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "STATUS" })
32507
32544
  ] }),
32508
32545
  AGENT_NAMES.map((name) => {
32509
32546
  const isFocused = focusedAgent === name;
32510
32547
  return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
32511
- /* @__PURE__ */ jsx58(Text49, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
32512
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
32513
- /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
32514
- /* @__PURE__ */ jsx58(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
32548
+ /* @__PURE__ */ jsx59(Text49, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
32549
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
32550
+ /* @__PURE__ */ jsx59(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
32551
+ /* @__PURE__ */ jsx59(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
32515
32552
  ] }, name);
32516
32553
  }),
32517
32554
  /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
32518
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
32555
+ /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
32519
32556
  panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs47(Box46, { gap: 1, paddingLeft: 1, children: [
32520
- /* @__PURE__ */ jsx58(Box46, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: row.label }) }),
32521
- /* @__PURE__ */ jsx58(Text49, { color: TONE_COLOR[row.tone], children: row.value })
32557
+ /* @__PURE__ */ jsx59(Box46, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: row.label }) }),
32558
+ /* @__PURE__ */ jsx59(Text49, { color: TONE_COLOR[row.tone], children: row.value })
32522
32559
  ] }, row.label))
32523
32560
  ] }),
32524
32561
  notice && /* @__PURE__ */ jsxs47(Fragment18, { children: [
32525
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32562
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32526
32563
  /* @__PURE__ */ jsxs47(Text49, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
32527
32564
  notice.kind === "success" ? "\u2713" : "\u2717",
32528
32565
  " ",
32529
32566
  notice.text
32530
32567
  ] })
32531
32568
  ] }),
32532
- /* @__PURE__ */ jsx58(Text49, { children: " " }),
32533
- /* @__PURE__ */ jsx58(
32569
+ /* @__PURE__ */ jsx59(Text49, { children: " " }),
32570
+ /* @__PURE__ */ jsx59(
32534
32571
  ControlHints,
32535
32572
  {
32536
32573
  hints: [
@@ -32594,9 +32631,9 @@ var init_project_store = __esm({
32594
32631
  });
32595
32632
 
32596
32633
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
32597
- import { useEffect as useEffect24, useRef as useRef14, useState as useState32 } from "react";
32598
- import { Box as Box47, Text as Text50, useInput as useInput13 } from "ink";
32599
- import { Fragment as Fragment19, jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
32634
+ import { useEffect as useEffect24, useRef as useRef15, useState as useState32 } from "react";
32635
+ import { Box as Box47, Text as Text50, useInput as useInput14 } from "ink";
32636
+ import { Fragment as Fragment19, jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
32600
32637
  function debugFields(config) {
32601
32638
  return {
32602
32639
  space_id: config?.spaceId ?? "",
@@ -32613,7 +32650,7 @@ function ProjectScreen({ onDone }) {
32613
32650
  const [saving, setSaving] = useState32(false);
32614
32651
  const [notice, setNotice] = useState32(null);
32615
32652
  const [loadError, setLoadError] = useState32(null);
32616
- const visit = useRef14({
32653
+ const visit = useRef15({
32617
32654
  trail: createTrail(),
32618
32655
  before: void 0,
32619
32656
  persisted: void 0,
@@ -32658,7 +32695,7 @@ function ProjectScreen({ onDone }) {
32658
32695
  exitMethod: change.changed ? "saved" : "discarded"
32659
32696
  });
32660
32697
  };
32661
- useInput13((input, key) => {
32698
+ useInput14((input, key) => {
32662
32699
  if (!config && loadError && (key.escape || input === "q")) {
32663
32700
  endVisit(null);
32664
32701
  onDone();
@@ -32666,16 +32703,16 @@ function ProjectScreen({ onDone }) {
32666
32703
  });
32667
32704
  if (!config) {
32668
32705
  return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32669
- /* @__PURE__ */ jsx59(Text50, { bold: true, children: "Project" }),
32670
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
32706
+ /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Project" }),
32707
+ /* @__PURE__ */ jsx60(Text50, { children: " " }),
32671
32708
  loadError ? /* @__PURE__ */ jsxs48(Fragment19, { children: [
32672
32709
  /* @__PURE__ */ jsxs48(Text50, { color: PALETTE.error, children: [
32673
32710
  "\u2717 Could not read the settings: ",
32674
32711
  loadError
32675
32712
  ] }),
32676
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
32677
- /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32678
- ] }) : /* @__PURE__ */ jsx59(Text50, { color: PALETTE.accent, children: "Loading..." })
32713
+ /* @__PURE__ */ jsx60(Text50, { children: " " }),
32714
+ /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32715
+ ] }) : /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "Loading..." })
32679
32716
  ] });
32680
32717
  }
32681
32718
  const save = () => {
@@ -32696,7 +32733,7 @@ function ProjectScreen({ onDone }) {
32696
32733
  endVisit(config);
32697
32734
  onDone();
32698
32735
  };
32699
- return /* @__PURE__ */ jsx59(
32736
+ return /* @__PURE__ */ jsx60(
32700
32737
  FieldForm,
32701
32738
  {
32702
32739
  title: "Project",
@@ -32741,13 +32778,13 @@ var init_ProjectScreen = __esm({
32741
32778
 
32742
32779
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
32743
32780
  import { useState as useState33 } from "react";
32744
- import { Box as Box48, Text as Text51, useInput as useInput14 } from "ink";
32745
- import { jsx as jsx60, jsxs as jsxs49 } from "react/jsx-runtime";
32781
+ import { Box as Box48, Text as Text51, useInput as useInput15 } from "ink";
32782
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
32746
32783
  function ConfigurationScreen({ onDone }) {
32747
32784
  const [focus, setFocus] = useState33(0);
32748
32785
  const [open, setOpen] = useState33(null);
32749
32786
  const close = () => setOpen(null);
32750
- useInput14((input, key) => {
32787
+ useInput15((input, key) => {
32751
32788
  if (open) return;
32752
32789
  if (key.upArrow) {
32753
32790
  setFocus((i) => (i - 1 + SECTIONS.length) % SECTIONS.length);
@@ -32763,18 +32800,18 @@ function ConfigurationScreen({ onDone }) {
32763
32800
  }
32764
32801
  if (key.escape || input === "q") onDone();
32765
32802
  });
32766
- if (open === "project") return /* @__PURE__ */ jsx60(ProjectScreen, { onDone: close });
32767
- if (open === "agents") return /* @__PURE__ */ jsx60(AgentsScreen, { onDone: close });
32803
+ if (open === "project") return /* @__PURE__ */ jsx61(ProjectScreen, { onDone: close });
32804
+ if (open === "agents") return /* @__PURE__ */ jsx61(AgentsScreen, { onDone: close });
32768
32805
  return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32769
- /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Configuration" }),
32770
- /* @__PURE__ */ jsx60(Text51, { children: " " }),
32806
+ /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Configuration" }),
32807
+ /* @__PURE__ */ jsx61(Text51, { children: " " }),
32771
32808
  SECTIONS.map((section, index) => /* @__PURE__ */ jsxs49(Box48, { gap: 1, children: [
32772
- /* @__PURE__ */ jsx60(Text51, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
32773
- /* @__PURE__ */ jsx60(Box48, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
32774
- /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: section.description })
32809
+ /* @__PURE__ */ jsx61(Text51, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
32810
+ /* @__PURE__ */ jsx61(Box48, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
32811
+ /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: section.description })
32775
32812
  ] }, section.id)),
32776
- /* @__PURE__ */ jsx60(Text51, { children: " " }),
32777
- /* @__PURE__ */ jsx60(
32813
+ /* @__PURE__ */ jsx61(Text51, { children: " " }),
32814
+ /* @__PURE__ */ jsx61(
32778
32815
  ControlHints,
32779
32816
  {
32780
32817
  hints: [
@@ -32807,8 +32844,8 @@ var init_ConfigurationScreen = __esm({
32807
32844
 
32808
32845
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
32809
32846
  import { useEffect as useEffect25, useState as useState34 } from "react";
32810
- import { Box as Box49, Text as Text52, useInput as useInput15 } from "ink";
32811
- import { Fragment as Fragment20, jsx as jsx61, jsxs as jsxs50 } from "react/jsx-runtime";
32847
+ import { Box as Box49, Text as Text52, useInput as useInput16 } from "ink";
32848
+ import { Fragment as Fragment20, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
32812
32849
  function OptInAnalyticsScreen({ onDone }) {
32813
32850
  const [loading, setLoading] = useState34(true);
32814
32851
  const [enabled, setEnabled] = useState34(true);
@@ -32824,7 +32861,7 @@ function OptInAnalyticsScreen({ onDone }) {
32824
32861
  });
32825
32862
  });
32826
32863
  }, []);
32827
- useInput15((input, key) => {
32864
+ useInput16((input, key) => {
32828
32865
  if (loading) return;
32829
32866
  if (key.return || input === " ") {
32830
32867
  setEnabled((current) => {
@@ -32840,20 +32877,20 @@ function OptInAnalyticsScreen({ onDone }) {
32840
32877
  }
32841
32878
  });
32842
32879
  return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32843
- /* @__PURE__ */ jsx61(Text52, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
32844
- /* @__PURE__ */ jsx61(Text52, { children: " " }),
32845
- loading ? /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
32880
+ /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
32881
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
32882
+ loading ? /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
32846
32883
  /* @__PURE__ */ jsxs50(Text52, { children: [
32847
32884
  "Share anonymous usage data:",
32848
32885
  " ",
32849
- /* @__PURE__ */ jsx61(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
32886
+ /* @__PURE__ */ jsx62(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
32850
32887
  ] }),
32851
- /* @__PURE__ */ jsx61(Text52, { children: " " }),
32852
- /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
32853
- /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
32888
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
32889
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
32890
+ /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
32854
32891
  ] }),
32855
- /* @__PURE__ */ jsx61(Text52, { children: " " }),
32856
- /* @__PURE__ */ jsx61(
32892
+ /* @__PURE__ */ jsx62(Text52, { children: " " }),
32893
+ /* @__PURE__ */ jsx62(
32857
32894
  ControlHints,
32858
32895
  {
32859
32896
  hints: [
@@ -32875,9 +32912,9 @@ var init_screen11 = __esm({
32875
32912
  });
32876
32913
 
32877
32914
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
32878
- import { useEffect as useEffect26, useRef as useRef15, useState as useState35 } from "react";
32879
- import { Box as Box50, Text as Text53, useInput as useInput16 } from "ink";
32880
- import { Fragment as Fragment21, jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
32915
+ import { useEffect as useEffect26, useRef as useRef16, useState as useState35 } from "react";
32916
+ import { Box as Box50, Text as Text53, useInput as useInput17 } from "ink";
32917
+ import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
32881
32918
  function DebugModeScreen({ onDone }) {
32882
32919
  const [setting, setSetting] = useState35(null);
32883
32920
  const [focus, setFocus] = useState35("enabled");
@@ -32885,7 +32922,7 @@ function DebugModeScreen({ onDone }) {
32885
32922
  RETENTION_CHOICES[RETENTION_CHOICES.length - 1]
32886
32923
  );
32887
32924
  const [notice, setNotice] = useState35(null);
32888
- const visit = useRef15({ trail: createTrail(), before: void 0, error: "" }).current;
32925
+ const visit = useRef16({ trail: createTrail(), before: void 0, error: "" }).current;
32889
32926
  useEffect26(() => {
32890
32927
  readDebugModeSetting().then((loaded) => {
32891
32928
  setSetting(loaded);
@@ -32926,7 +32963,7 @@ function DebugModeScreen({ onDone }) {
32926
32963
  exitMethod: change.changed ? "saved" : "discarded"
32927
32964
  });
32928
32965
  };
32929
- useInput16((input, key) => {
32966
+ useInput17((input, key) => {
32930
32967
  if (!setting) return;
32931
32968
  if (key.upArrow || key.downArrow) {
32932
32969
  setFocus((current) => ROWS[(ROWS.indexOf(current) + (key.downArrow ? 1 : ROWS.length - 1)) % ROWS.length]);
@@ -32953,16 +32990,16 @@ function DebugModeScreen({ onDone }) {
32953
32990
  onDone();
32954
32991
  }
32955
32992
  });
32956
- const marker = (row) => /* @__PURE__ */ jsx62(Text53, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
32957
- const label = (row, text) => /* @__PURE__ */ jsx62(Text53, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
32993
+ const marker = (row) => /* @__PURE__ */ jsx63(Text53, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
32994
+ const label = (row, text) => /* @__PURE__ */ jsx63(Text53, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
32958
32995
  return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32959
- /* @__PURE__ */ jsx62(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
32960
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
32996
+ /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
32997
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
32961
32998
  setting ? /* @__PURE__ */ jsxs51(Fragment21, { children: [
32962
32999
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
32963
33000
  marker("enabled"),
32964
33001
  label("enabled", "Debug logging:"),
32965
- /* @__PURE__ */ jsx62(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
33002
+ /* @__PURE__ */ jsx63(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
32966
33003
  ] }),
32967
33004
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
32968
33005
  marker("retentionDays"),
@@ -32970,7 +33007,7 @@ function DebugModeScreen({ onDone }) {
32970
33007
  RETENTION_CHOICES.map((days) => {
32971
33008
  const highlighted = focus === "retentionDays" && days === pending;
32972
33009
  const saved = days === setting.retentionDays;
32973
- return /* @__PURE__ */ jsx62(
33010
+ return /* @__PURE__ */ jsx63(
32974
33011
  Text53,
32975
33012
  {
32976
33013
  bold: highlighted || saved,
@@ -32982,15 +33019,15 @@ function DebugModeScreen({ onDone }) {
32982
33019
  );
32983
33020
  })
32984
33021
  ] }),
32985
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
33022
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
32986
33023
  notice ? /* @__PURE__ */ jsxs51(Text53, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
32987
33024
  notice.kind === "success" ? "\u2713" : "\u2717",
32988
33025
  " ",
32989
33026
  notice.text
32990
- ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
32991
- ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Loading\u2026" }),
32992
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
32993
- /* @__PURE__ */ jsx62(
33027
+ ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
33028
+ ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Loading\u2026" }),
33029
+ /* @__PURE__ */ jsx63(Text53, { children: " " }),
33030
+ /* @__PURE__ */ jsx63(
32994
33031
  ControlHints,
32995
33032
  {
32996
33033
  hints: [
@@ -33029,7 +33066,7 @@ __export(app_exports, {
33029
33066
  });
33030
33067
  import { join as join28 } from "node:path";
33031
33068
  import { useEffect as useEffect27, useState as useState36 } from "react";
33032
- import { Fragment as Fragment22, jsx as jsx63 } from "react/jsx-runtime";
33069
+ import { Fragment as Fragment22, jsx as jsx64 } from "react/jsx-runtime";
33033
33070
  function App({ importOptions, inkClear }) {
33034
33071
  const [screen, setScreen] = useState36("start");
33035
33072
  const [importExitCode, setImportExitCode] = useState36();
@@ -33186,9 +33223,9 @@ function App({ importOptions, inkClear }) {
33186
33223
  };
33187
33224
  switch (screen) {
33188
33225
  case "import":
33189
- if (showImportResult) return /* @__PURE__ */ jsx63(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
33226
+ if (showImportResult) return /* @__PURE__ */ jsx64(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
33190
33227
  if (flow && flowStart) {
33191
- return /* @__PURE__ */ jsx63(
33228
+ return /* @__PURE__ */ jsx64(
33192
33229
  FlowScreen,
33193
33230
  {
33194
33231
  state: flow.state,
@@ -33198,12 +33235,12 @@ function App({ importOptions, inkClear }) {
33198
33235
  }
33199
33236
  );
33200
33237
  }
33201
- if (importDefaults === void 0) return /* @__PURE__ */ jsx63(Fragment22, {});
33238
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx64(Fragment22, {});
33202
33239
  if (projectPath === void 0) {
33203
- return /* @__PURE__ */ jsx63(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
33240
+ return /* @__PURE__ */ jsx64(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
33204
33241
  }
33205
33242
  if (tokensPath === void 0) {
33206
- return /* @__PURE__ */ jsx63(
33243
+ return /* @__PURE__ */ jsx64(
33207
33244
  TokenInputScreen,
33208
33245
  {
33209
33246
  initialPath: importDefaults.tokenFile,
@@ -33213,7 +33250,7 @@ function App({ importOptions, inkClear }) {
33213
33250
  );
33214
33251
  }
33215
33252
  if (scannedFiles === void 0) {
33216
- return /* @__PURE__ */ jsx63(
33253
+ return /* @__PURE__ */ jsx64(
33217
33254
  PathValidationScreen,
33218
33255
  {
33219
33256
  projectPath,
@@ -33225,10 +33262,10 @@ function App({ importOptions, inkClear }) {
33225
33262
  }
33226
33263
  if (extractionRun) {
33227
33264
  if (extraction?.status === "done" && !extraction.result.ok) {
33228
- return /* @__PURE__ */ jsx63(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
33265
+ return /* @__PURE__ */ jsx64(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
33229
33266
  }
33230
33267
  if (extraction?.status === "running") {
33231
- return /* @__PURE__ */ jsx63(
33268
+ return /* @__PURE__ */ jsx64(
33232
33269
  ExtractionScreen,
33233
33270
  {
33234
33271
  progress: extraction.progress,
@@ -33237,14 +33274,14 @@ function App({ importOptions, inkClear }) {
33237
33274
  }
33238
33275
  );
33239
33276
  }
33240
- return /* @__PURE__ */ jsx63(Fragment22, {});
33277
+ return /* @__PURE__ */ jsx64(Fragment22, {});
33241
33278
  }
33242
33279
  if (scopeRun && scopeFlow) {
33243
33280
  if (scopeFlow.status === "failed") {
33244
- return /* @__PURE__ */ jsx63(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
33281
+ return /* @__PURE__ */ jsx64(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
33245
33282
  }
33246
33283
  if (scopeFlow.status === "deciding") {
33247
- return /* @__PURE__ */ jsx63(
33284
+ return /* @__PURE__ */ jsx64(
33248
33285
  ScopeGateScreen,
33249
33286
  {
33250
33287
  components: scopeFlow.load.components,
@@ -33254,7 +33291,7 @@ function App({ importOptions, inkClear }) {
33254
33291
  );
33255
33292
  }
33256
33293
  if (generation?.status === "done" && !generation.result.ok) {
33257
- return /* @__PURE__ */ jsx63(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
33294
+ return /* @__PURE__ */ jsx64(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
33258
33295
  }
33259
33296
  if (generation?.status === "running") {
33260
33297
  const hasRawTokens = scopeRun.input.rawTokensPath !== "";
@@ -33262,7 +33299,7 @@ function App({ importOptions, inkClear }) {
33262
33299
  hasRawTokens,
33263
33300
  mapTokensEligible: generation.progress.mapTokensEligible
33264
33301
  });
33265
- return /* @__PURE__ */ jsx63(
33302
+ return /* @__PURE__ */ jsx64(
33266
33303
  GenerationScreen,
33267
33304
  {
33268
33305
  progress: generation.progress,
@@ -33274,10 +33311,10 @@ function App({ importOptions, inkClear }) {
33274
33311
  }
33275
33312
  );
33276
33313
  }
33277
- return /* @__PURE__ */ jsx63(Fragment22, {});
33314
+ return /* @__PURE__ */ jsx64(Fragment22, {});
33278
33315
  }
33279
33316
  if (pendingLaunch?.cached) {
33280
- return /* @__PURE__ */ jsx63(
33317
+ return /* @__PURE__ */ jsx64(
33281
33318
  TokenReuseScreen,
33282
33319
  {
33283
33320
  tokensPath: pendingLaunch.cached.tokensPath,
@@ -33288,7 +33325,7 @@ function App({ importOptions, inkClear }) {
33288
33325
  }
33289
33326
  );
33290
33327
  }
33291
- return /* @__PURE__ */ jsx63(
33328
+ return /* @__PURE__ */ jsx64(
33292
33329
  CredentialsScreen,
33293
33330
  {
33294
33331
  initial: importDefaults.credentials,
@@ -33297,17 +33334,17 @@ function App({ importOptions, inkClear }) {
33297
33334
  }
33298
33335
  );
33299
33336
  case "help":
33300
- return /* @__PURE__ */ jsx63(HelpScreen, { onDone: goToStart });
33337
+ return /* @__PURE__ */ jsx64(HelpScreen, { onDone: goToStart });
33301
33338
  case "settings":
33302
- return /* @__PURE__ */ jsx63(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
33339
+ return /* @__PURE__ */ jsx64(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
33303
33340
  case "settings-configuration":
33304
- return /* @__PURE__ */ jsx63(ConfigurationScreen, { onDone: goToSettings });
33341
+ return /* @__PURE__ */ jsx64(ConfigurationScreen, { onDone: goToSettings });
33305
33342
  case "settings-opt-in-analytics":
33306
- return /* @__PURE__ */ jsx63(OptInAnalyticsScreen, { onDone: goToSettings });
33343
+ return /* @__PURE__ */ jsx64(OptInAnalyticsScreen, { onDone: goToSettings });
33307
33344
  case "settings-debug-mode":
33308
- return /* @__PURE__ */ jsx63(DebugModeScreen, { onDone: goToSettings });
33345
+ return /* @__PURE__ */ jsx64(DebugModeScreen, { onDone: goToSettings });
33309
33346
  case "start":
33310
- return /* @__PURE__ */ jsx63(HomeScreen, { onNavigate: setScreen });
33347
+ return /* @__PURE__ */ jsx64(HomeScreen, { onNavigate: setScreen });
33311
33348
  }
33312
33349
  }
33313
33350
  async function runApp(renderApp, importOptions) {
@@ -33315,7 +33352,7 @@ async function runApp(renderApp, importOptions) {
33315
33352
  instance.clear?.();
33316
33353
  process.stdout.write("\x1B[H\x1B[0J");
33317
33354
  };
33318
- const instance = renderApp(/* @__PURE__ */ jsx63(App, { importOptions, inkClear }));
33355
+ const instance = renderApp(/* @__PURE__ */ jsx64(App, { importOptions, inkClear }));
33319
33356
  await instance.waitUntilExit();
33320
33357
  }
33321
33358
  var init_app = __esm({