@contentful/experience-design-system-cli 2.37.1-dev-build-182ecd7e.0 → 2.37.1-dev-build-c8306cfd.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,40 +18515,6 @@ 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
-
18552
18518
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
18553
18519
  function shouldQuit(key) {
18554
18520
  return key.escape;
@@ -18564,9 +18530,9 @@ var init_logic = __esm({
18564
18530
  });
18565
18531
 
18566
18532
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
18567
- import { useInput as useInput4 } from "ink";
18533
+ import { useInput as useInput3 } from "ink";
18568
18534
  function useWelcomeControls(onQuit) {
18569
- useInput4((_input, key) => {
18535
+ useInput3((_input, key) => {
18570
18536
  if (shouldQuit(key)) onQuit();
18571
18537
  });
18572
18538
  }
@@ -18577,7 +18543,6 @@ var init_controls = __esm({
18577
18543
  init_logic();
18578
18544
  WELCOME_CONTROLS = [
18579
18545
  { keys: "Enter", label: "Continue" },
18580
- { keys: "Ctrl+D", label: "Clear" },
18581
18546
  { keys: "Esc", label: "Back to menu" }
18582
18547
  ];
18583
18548
  }
@@ -18586,7 +18551,8 @@ var init_controls = __esm({
18586
18551
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
18587
18552
  import { useState as useState3 } from "react";
18588
18553
  import { Box as Box3, Text as Text4 } from "ink";
18589
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
18554
+ import TextInput from "ink-text-input";
18555
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
18590
18556
  function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18591
18557
  const [projectPath, setProjectPath] = useState3(initialPath);
18592
18558
  useWelcomeControls(onQuit);
@@ -18595,8 +18561,8 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18595
18561
  if (path5) onContinue(path5);
18596
18562
  };
18597
18563
  return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
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(
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(
18600
18566
  Box3,
18601
18567
  {
18602
18568
  flexDirection: "column",
@@ -18608,29 +18574,29 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
18608
18574
  flexShrink: 1,
18609
18575
  children: [
18610
18576
  OVERVIEW.map((item) => /* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
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 })
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 })
18614
18580
  ] }, item.label)),
18615
18581
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", marginTop: 1, children: [
18616
18582
  /* @__PURE__ */ jsxs3(Text4, { bold: true, children: [
18617
- /* @__PURE__ */ jsx5(Text4, { color: PALETTE.accent, children: AI_MARKER }),
18583
+ /* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: AI_MARKER }),
18618
18584
  " AI disclosure"
18619
18585
  ] }),
18620
- AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx5(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
18586
+ AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
18621
18587
  ] })
18622
18588
  ]
18623
18589
  }
18624
18590
  ) }),
18625
18591
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, children: [
18626
- /* @__PURE__ */ jsx5(Text4, { children: "Where is your component library?" }),
18592
+ /* @__PURE__ */ jsx4(Text4, { children: "Where is your component library?" }),
18627
18593
  /* @__PURE__ */ jsxs3(Box3, { children: [
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 })
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 })
18631
18597
  ] })
18632
18598
  ] }),
18633
- /* @__PURE__ */ jsx5(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
18599
+ /* @__PURE__ */ jsx4(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
18634
18600
  "[",
18635
18601
  control.keys,
18636
18602
  "] ",
@@ -18643,7 +18609,6 @@ var init_screen = __esm({
18643
18609
  "packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx"() {
18644
18610
  "use strict";
18645
18611
  init_theme();
18646
- init_ClearableTextInput();
18647
18612
  init_controls();
18648
18613
  init_logic();
18649
18614
  OVERVIEW_BOX_MAX_WIDTH = 90;
@@ -18684,9 +18649,9 @@ var init_logic2 = __esm({
18684
18649
  });
18685
18650
 
18686
18651
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
18687
- import { useInput as useInput5 } from "ink";
18652
+ import { useInput as useInput4 } from "ink";
18688
18653
  function useTokenInputControls(onBack) {
18689
- useInput5((_input, key) => {
18654
+ useInput4((_input, key) => {
18690
18655
  if (shouldGoBack(key)) onBack();
18691
18656
  });
18692
18657
  }
@@ -18697,7 +18662,6 @@ var init_controls2 = __esm({
18697
18662
  init_logic2();
18698
18663
  TOKEN_INPUT_CONTROLS = [
18699
18664
  { keys: "Enter", label: "Continue" },
18700
- { keys: "Ctrl+D", label: "Clear" },
18701
18665
  { keys: "Esc", label: "Back" }
18702
18666
  ];
18703
18667
  }
@@ -18754,7 +18718,8 @@ var init_validate_path = __esm({
18754
18718
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
18755
18719
  import { useState as useState4 } from "react";
18756
18720
  import { Box as Box4, Text as Text5 } from "ink";
18757
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
18721
+ import TextInput2 from "ink-text-input";
18722
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
18758
18723
  function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18759
18724
  const [tokenPath, setTokenPath] = useState4(initialPath);
18760
18725
  const [failure, setFailure] = useState4(null);
@@ -18774,13 +18739,13 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18774
18739
  else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
18775
18740
  };
18776
18741
  return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
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)." }),
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)." }),
18779
18744
  /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
18780
18745
  /* @__PURE__ */ jsxs4(Box4, { gap: 1, children: [
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 })
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 })
18784
18749
  ] }),
18785
18750
  failure && /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
18786
18751
  /* @__PURE__ */ jsxs4(Text5, { color: PALETTE.error, children: [
@@ -18793,7 +18758,7 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
18793
18758
  ] })
18794
18759
  ] })
18795
18760
  ] }),
18796
- /* @__PURE__ */ jsx6(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
18761
+ /* @__PURE__ */ jsx5(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
18797
18762
  "[",
18798
18763
  control.keys,
18799
18764
  "] ",
@@ -18805,7 +18770,6 @@ var init_screen2 = __esm({
18805
18770
  "packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx"() {
18806
18771
  "use strict";
18807
18772
  init_theme();
18808
- init_ClearableTextInput();
18809
18773
  init_controls2();
18810
18774
  init_logic2();
18811
18775
  init_validate_path();
@@ -18888,12 +18852,12 @@ var init_logic3 = __esm({
18888
18852
  });
18889
18853
 
18890
18854
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
18891
- import { useInput as useInput6 } from "ink";
18855
+ import { useInput as useInput5 } from "ink";
18892
18856
  function controlsFor(phase) {
18893
18857
  return CONTROLS[phase];
18894
18858
  }
18895
18859
  function usePathValidationControls(phase, handlers) {
18896
- useInput6((input, key) => {
18860
+ useInput5((input, key) => {
18897
18861
  const action = keyAction(phase, input, key);
18898
18862
  if (action === "confirm") handlers.onConfirm();
18899
18863
  else if (action === "change-path") handlers.onChangePath();
@@ -18947,7 +18911,7 @@ var init_scan_files = __esm({
18947
18911
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
18948
18912
  import { useEffect as useEffect3, useMemo, useState as useState5 } from "react";
18949
18913
  import { Box as Box5, Text as Text6 } from "ink";
18950
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
18914
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
18951
18915
  function Row({ row }) {
18952
18916
  return /* @__PURE__ */ jsxs5(Text6, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
18953
18917
  " \u2022 ",
@@ -18963,7 +18927,7 @@ function Failure({ scan, path: path5 }) {
18963
18927
  "\u2717 ",
18964
18928
  headline
18965
18929
  ] }),
18966
- hints.map((hint) => /* @__PURE__ */ jsx7(Text6, { color: PALETTE.muted, children: hint }, hint))
18930
+ hints.map((hint) => /* @__PURE__ */ jsx6(Text6, { color: PALETTE.muted, children: hint }, hint))
18967
18931
  ] });
18968
18932
  }
18969
18933
  function Summary({ scan, path: path5 }) {
@@ -18971,7 +18935,7 @@ function Summary({ scan, path: path5 }) {
18971
18935
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, children: [
18972
18936
  /* @__PURE__ */ jsxs5(Text6, { children: [
18973
18937
  "Scanned ",
18974
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: path5 })
18938
+ /* @__PURE__ */ jsx6(Text6, { bold: true, children: path5 })
18975
18939
  ] }),
18976
18940
  /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
18977
18941
  /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.success, children: [
@@ -18979,13 +18943,13 @@ function Summary({ scan, path: path5 }) {
18979
18943
  total,
18980
18944
  " files:"
18981
18945
  ] }),
18982
- rows.map((row) => /* @__PURE__ */ jsx7(Row, { row }, row.label))
18946
+ rows.map((row) => /* @__PURE__ */ jsx6(Row, { row }, row.label))
18983
18947
  ] }),
18984
18948
  warning && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.warning, children: [
18985
18949
  "\u26A0 ",
18986
18950
  warning
18987
18951
  ] }),
18988
- /* @__PURE__ */ jsx7(Text6, { children: "Does this look right?" })
18952
+ /* @__PURE__ */ jsx6(Text6, { children: "Does this look right?" })
18989
18953
  ] });
18990
18954
  }
18991
18955
  function PathValidationScreen({
@@ -19010,12 +18974,12 @@ function PathValidationScreen({
19010
18974
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
19011
18975
  scan === void 0 && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
19012
18976
  "Scanning ",
19013
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: resolvedPath }),
18977
+ /* @__PURE__ */ jsx6(Text6, { bold: true, children: resolvedPath }),
19014
18978
  "..."
19015
18979
  ] }),
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: [
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: [
19019
18983
  "[",
19020
18984
  control.keys,
19021
18985
  "] ",
@@ -19068,9 +19032,9 @@ var init_logic4 = __esm({
19068
19032
  });
19069
19033
 
19070
19034
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/controls.ts
19071
- import { useInput as useInput7 } from "ink";
19035
+ import { useInput as useInput6 } from "ink";
19072
19036
  function useCredentialsControls(handlers) {
19073
- useInput7((input, key) => {
19037
+ useInput6((input, key) => {
19074
19038
  if (handlers.disabled) return;
19075
19039
  const action = keyAction2(input, key);
19076
19040
  if (action === "back") handlers.onBack();
@@ -19140,17 +19104,17 @@ var init_validate4 = __esm({
19140
19104
  });
19141
19105
 
19142
19106
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
19143
- import { useRef as useRef2, useState as useState6 } from "react";
19107
+ import { useRef, useState as useState6 } from "react";
19144
19108
  import { Box as Box6, Text as Text7 } from "ink";
19145
- import TextInput2 from "ink-text-input";
19146
- import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
19109
+ import TextInput3 from "ink-text-input";
19110
+ import { Fragment, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
19147
19111
  function CredentialsScreen({
19148
19112
  onDone,
19149
19113
  onBack,
19150
19114
  initial = {},
19151
19115
  validate: validate3 = validateCredentials
19152
19116
  }) {
19153
- const initialValues = useRef2(
19117
+ const initialValues = useRef(
19154
19118
  normalize({
19155
19119
  spaceId: initial.spaceId ?? "",
19156
19120
  environmentId: initial.environmentId || "master",
@@ -19191,21 +19155,21 @@ function CredentialsScreen({
19191
19155
  };
19192
19156
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
19193
19157
  /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
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." }),
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." }),
19196
19160
  !prefilled && /* @__PURE__ */ jsxs6(Fragment, { children: [
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." })
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." })
19199
19163
  ] })
19200
19164
  ] }),
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: "?" }),
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: "?" }),
19203
19167
  /* @__PURE__ */ jsxs6(Text7, { bold: active === field, children: [
19204
19168
  LABELS[field],
19205
19169
  ":"
19206
19170
  ] }),
19207
- /* @__PURE__ */ jsx8(
19208
- TextInput2,
19171
+ /* @__PURE__ */ jsx7(
19172
+ TextInput3,
19209
19173
  {
19210
19174
  value: values[field],
19211
19175
  focus: active === field && !validating,
@@ -19216,14 +19180,14 @@ function CredentialsScreen({
19216
19180
  }
19217
19181
  )
19218
19182
  ] }, field)) }),
19219
- active === "host" && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
19183
+ active === "host" && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
19220
19184
  error && /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.error, children: [
19221
19185
  "\u2717 ",
19222
19186
  error
19223
19187
  ] }),
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: [
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: [
19227
19191
  "[",
19228
19192
  control.keys,
19229
19193
  "] ",
@@ -19270,9 +19234,9 @@ var init_logic5 = __esm({
19270
19234
  });
19271
19235
 
19272
19236
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
19273
- import { useInput as useInput8 } from "ink";
19237
+ import { useInput as useInput7 } from "ink";
19274
19238
  function useErrorControls(handlers) {
19275
- useInput8((input, key) => {
19239
+ useInput7((input, key) => {
19276
19240
  const action = errorAction(input, key, {
19277
19241
  canRetry: handlers.onRetry !== void 0,
19278
19242
  canAcknowledge: handlers.onAcknowledge !== void 0
@@ -19291,7 +19255,7 @@ var init_controls5 = __esm({
19291
19255
 
19292
19256
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
19293
19257
  import { Box as Box7, Text as Text8 } from "ink";
19294
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
19258
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
19295
19259
  function ErrorStep({
19296
19260
  stepName,
19297
19261
  message,
@@ -19310,8 +19274,8 @@ function ErrorStep({
19310
19274
  stepName,
19311
19275
  " failed"
19312
19276
  ] }),
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: [
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: [
19315
19279
  "[",
19316
19280
  control.keys,
19317
19281
  "] ",
@@ -19349,9 +19313,9 @@ var init_logic6 = __esm({
19349
19313
  });
19350
19314
 
19351
19315
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
19352
- import { useInput as useInput9 } from "ink";
19316
+ import { useInput as useInput8 } from "ink";
19353
19317
  function useGateControls(handlers) {
19354
- useInput9((input, key) => {
19318
+ useInput8((input, key) => {
19355
19319
  const action = gateAction(input, key, handlers.canSkip);
19356
19320
  if (action === "continue") handlers.onContinue();
19357
19321
  else if (action === "skip") handlers.onSkip();
@@ -19367,7 +19331,7 @@ var init_controls6 = __esm({
19367
19331
 
19368
19332
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
19369
19333
  import { Box as Box8, Text as Text9 } from "ink";
19370
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
19334
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
19371
19335
  function GateStep({
19372
19336
  message,
19373
19337
  onContinue,
@@ -19389,9 +19353,9 @@ function GateStep({
19389
19353
  " ",
19390
19354
  message
19391
19355
  ] }),
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: [
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: [
19395
19359
  "[",
19396
19360
  control.keys,
19397
19361
  "] ",
@@ -19466,24 +19430,24 @@ var init_use_elapsed = __esm({
19466
19430
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
19467
19431
  import { Box as Box9, Text as Text10 } from "ink";
19468
19432
  import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
19469
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
19433
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
19470
19434
  function Line({ line }) {
19471
19435
  if (line.progress) {
19472
19436
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, children: [
19473
19437
  /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
19474
- /* @__PURE__ */ jsx11(Box9, { width: 40, children: /* @__PURE__ */ jsx11(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx11(ProgressBar, { value: progressPercent(line.progress) }) }) }),
19438
+ /* @__PURE__ */ jsx10(Box9, { width: 40, children: /* @__PURE__ */ jsx10(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx10(ProgressBar, { value: progressPercent(line.progress) }) }) }),
19475
19439
  /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
19476
19440
  line.progress.done,
19477
19441
  "/",
19478
19442
  line.progress.total
19479
19443
  ] })
19480
19444
  ] }),
19481
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
19445
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
19482
19446
  ] });
19483
19447
  }
19484
19448
  return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
19485
- line.complete ? /* @__PURE__ */ jsx11(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx11(Spinner, {}),
19486
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
19449
+ line.complete ? /* @__PURE__ */ jsx10(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx10(Spinner, {}),
19450
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
19487
19451
  ] });
19488
19452
  }
19489
19453
  function RunningStep({
@@ -19496,13 +19460,13 @@ function RunningStep({
19496
19460
  const elapsed = useElapsed();
19497
19461
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
19498
19462
  /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
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 })
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 })
19502
19466
  ] }),
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: [
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: [
19506
19470
  "Elapsed: ",
19507
19471
  elapsed
19508
19472
  ] }) })
@@ -19582,7 +19546,7 @@ var init_logic8 = __esm({
19582
19546
  });
19583
19547
 
19584
19548
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-reuse/screen.tsx
19585
- import { jsx as jsx12 } from "react/jsx-runtime";
19549
+ import { jsx as jsx11 } from "react/jsx-runtime";
19586
19550
  function TokenReuseScreen({
19587
19551
  tokensPath,
19588
19552
  sourceChanged,
@@ -19591,7 +19555,7 @@ function TokenReuseScreen({
19591
19555
  onQuit
19592
19556
  }) {
19593
19557
  const { summary, context } = gateText({ tokensPath, sourceChanged });
19594
- return /* @__PURE__ */ jsx12(
19558
+ return /* @__PURE__ */ jsx11(
19595
19559
  GateStep,
19596
19560
  {
19597
19561
  message: "Existing tokens.json found",
@@ -19708,14 +19672,14 @@ var init_logic9 = __esm({
19708
19672
  });
19709
19673
 
19710
19674
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
19711
- import { jsx as jsx13 } from "react/jsx-runtime";
19675
+ import { jsx as jsx12 } from "react/jsx-runtime";
19712
19676
  function ExtractionScreen({
19713
19677
  progress,
19714
19678
  agent,
19715
19679
  stepNumber,
19716
19680
  totalSteps
19717
19681
  }) {
19718
- return /* @__PURE__ */ jsx13(
19682
+ return /* @__PURE__ */ jsx12(
19719
19683
  RunningStep,
19720
19684
  {
19721
19685
  stepNumber,
@@ -20022,10 +19986,10 @@ var init_run = __esm({
20022
19986
  });
20023
19987
 
20024
19988
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/use-extraction.ts
20025
- import { useEffect as useEffect5, useRef as useRef3, useState as useState8 } from "react";
19989
+ import { useEffect as useEffect5, useRef as useRef2, useState as useState8 } from "react";
20026
19990
  function useExtraction(input) {
20027
19991
  const [state2, setState] = useState8();
20028
- const current = useRef3();
19992
+ const current = useRef2();
20029
19993
  useEffect5(() => {
20030
19994
  current.current = input;
20031
19995
  if (!input) {
@@ -20188,7 +20152,7 @@ var init_columns = __esm({
20188
20152
 
20189
20153
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
20190
20154
  import { Box as Box10, Text as Text11 } from "ink";
20191
- import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
20155
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
20192
20156
  function terminalPanelHeight(rows, reservedRows = 4) {
20193
20157
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
20194
20158
  }
@@ -20203,7 +20167,7 @@ function FixedPanel({
20203
20167
  clipOverflow = true,
20204
20168
  children
20205
20169
  }) {
20206
- return /* @__PURE__ */ jsx14(
20170
+ return /* @__PURE__ */ jsx13(
20207
20171
  Box10,
20208
20172
  {
20209
20173
  flexDirection: "column",
@@ -20229,7 +20193,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
20229
20193
  ...height === void 0 ? {} : { height },
20230
20194
  focused,
20231
20195
  children: [
20232
- title && /* @__PURE__ */ jsx14(WindowedPanelHeader, { title, width, focused }),
20196
+ title && /* @__PURE__ */ jsx13(WindowedPanelHeader, { title, width, focused }),
20233
20197
  children
20234
20198
  ]
20235
20199
  }
@@ -20241,8 +20205,8 @@ function WindowedPanelHeader({
20241
20205
  focused
20242
20206
  }) {
20243
20207
  return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
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)) })
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)) })
20246
20210
  ] });
20247
20211
  }
20248
20212
  function formatWindowIndicator(direction, count) {
@@ -20250,7 +20214,7 @@ function formatWindowIndicator(direction, count) {
20250
20214
  return `${direction === "up" ? "\u2191" : "\u2193"} ${count} more`;
20251
20215
  }
20252
20216
  function WindowIndicator({ direction, count }) {
20253
- return /* @__PURE__ */ jsx14(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
20217
+ return /* @__PURE__ */ jsx13(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
20254
20218
  }
20255
20219
  var MIN_TERMINAL_PANEL_HEIGHT;
20256
20220
  var init_windowed_panel = __esm({
@@ -20262,31 +20226,31 @@ var init_windowed_panel = __esm({
20262
20226
  });
20263
20227
 
20264
20228
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
20265
- import React7 from "react";
20229
+ import React6 from "react";
20266
20230
  import { Box as Box11, Text as Text12 } from "ink";
20267
20231
  import figures from "figures";
20268
- import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
20232
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
20269
20233
  function AddedColumn(props) {
20270
20234
  const { title, width, height, entries, cursor, focused, aiFlaggedByKey, visibleCount } = props;
20271
20235
  const reserveAiBadge = entries.some((e) => aiFlaggedByKey?.get(e.name) === true);
20272
20236
  const firstNonCycleIdx = entries.findIndex((e) => !e.isCycle);
20273
20237
  const window = computeColumnWindow(entries.length, cursor, Math.max(1, visibleCount));
20274
20238
  return /* @__PURE__ */ jsxs11(WindowedPanel, { width, height, title, focused, children: [
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) => {
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) => {
20277
20241
  const i = window.start + vi;
20278
20242
  const isSelected = i === cursor;
20279
20243
  const isCursor = focused && isSelected;
20280
20244
  const aiFlagged = aiFlaggedByKey?.get(entry.name) === true;
20281
20245
  const showSeparator = firstNonCycleIdx > 0 && i === firstNonCycleIdx;
20282
20246
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
20283
- return /* @__PURE__ */ jsxs11(React7.Fragment, { children: [
20284
- showSeparator && /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
20247
+ return /* @__PURE__ */ jsxs11(React6.Fragment, { children: [
20248
+ showSeparator && /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
20285
20249
  /* @__PURE__ */ jsxs11(Box11, { children: [
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(
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(
20290
20254
  Text12,
20291
20255
  {
20292
20256
  color: style.nameColor,
@@ -20300,7 +20264,7 @@ function AddedColumn(props) {
20300
20264
  ] })
20301
20265
  ] }, entry.name);
20302
20266
  }),
20303
- /* @__PURE__ */ jsx15(WindowIndicator, { direction: "down", count: window.below })
20267
+ /* @__PURE__ */ jsx14(WindowIndicator, { direction: "down", count: window.below })
20304
20268
  ] });
20305
20269
  }
20306
20270
  var init_added_column = __esm({
@@ -20315,7 +20279,7 @@ var init_added_column = __esm({
20315
20279
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
20316
20280
  import { Box as Box12, Text as Text13 } from "ink";
20317
20281
  import figures2 from "figures";
20318
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
20282
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
20319
20283
  function cycleLabel(cycle, index) {
20320
20284
  const parts = [];
20321
20285
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -20327,16 +20291,16 @@ function cycleLabel(cycle, index) {
20327
20291
  }
20328
20292
  function CyclesPanel({ cycles, cursor }) {
20329
20293
  return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
20330
- /* @__PURE__ */ jsx16(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
20331
- /* @__PURE__ */ jsx16(Text13, { children: " " }),
20294
+ /* @__PURE__ */ jsx15(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
20295
+ /* @__PURE__ */ jsx15(Text13, { children: " " }),
20332
20296
  cycles.map((cycle, i) => {
20333
20297
  const isCursor = i === cursor;
20334
20298
  return /* @__PURE__ */ jsxs12(Text13, { children: [
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) })
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) })
20337
20301
  ] }, i);
20338
20302
  }),
20339
- /* @__PURE__ */ jsx16(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
20303
+ /* @__PURE__ */ jsx15(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
20340
20304
  ] });
20341
20305
  }
20342
20306
  var init_cycles_panel = __esm({
@@ -20348,13 +20312,13 @@ var init_cycles_panel = __esm({
20348
20312
 
20349
20313
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
20350
20314
  import { Box as Box13, Text as Text14 } from "ink";
20351
- import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
20315
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
20352
20316
  function RejectPrompt({ pending }) {
20353
20317
  return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
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" })
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" })
20358
20322
  ] });
20359
20323
  }
20360
20324
  var init_reject_prompt = __esm({
@@ -20366,11 +20330,11 @@ var init_reject_prompt = __esm({
20366
20330
 
20367
20331
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/LegendEntry.tsx
20368
20332
  import { Text as Text15 } from "ink";
20369
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
20333
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
20370
20334
  function legendEntry(keyBracket, label, active = false) {
20371
20335
  return /* @__PURE__ */ jsxs14(Text15, { children: [
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 })
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 })
20374
20338
  ] }, keyBracket + label);
20375
20339
  }
20376
20340
  var init_LegendEntry = __esm({
@@ -20404,7 +20368,7 @@ var init_CompactControlBar = __esm({
20404
20368
 
20405
20369
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
20406
20370
  import { Box as Box15, Text as Text16 } from "ink";
20407
- import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
20371
+ import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
20408
20372
  function CounterStrip(props) {
20409
20373
  const { counters, totalWidth } = props;
20410
20374
  const condensed = totalWidth < 60;
@@ -20412,25 +20376,25 @@ function CounterStrip(props) {
20412
20376
  const labelRej = condensed ? "Rej" : "Rejected";
20413
20377
  const labelUnd = condensed ? "Und" : "Undecided";
20414
20378
  const sep = condensed ? " | " : " ";
20415
- return /* @__PURE__ */ jsx19(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
20379
+ return /* @__PURE__ */ jsx18(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
20416
20380
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20417
20381
  labelGrp,
20418
20382
  " "
20419
20383
  ] }),
20420
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.groups }),
20421
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
20384
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.groups }),
20385
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
20422
20386
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20423
20387
  labelRej,
20424
20388
  " "
20425
20389
  ] }),
20426
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.rejected }),
20427
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
20390
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.rejected }),
20391
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
20428
20392
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
20429
20393
  labelUnd,
20430
20394
  " "
20431
20395
  ] }),
20432
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.undecided }),
20433
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep })
20396
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.undecided }),
20397
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep })
20434
20398
  ] }) });
20435
20399
  }
20436
20400
  var init_CounterStrip = __esm({
@@ -20443,7 +20407,7 @@ var init_CounterStrip = __esm({
20443
20407
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
20444
20408
  import figures3 from "figures";
20445
20409
  import { Box as Box16, Text as Text17 } from "ink";
20446
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
20410
+ import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
20447
20411
  function windowStart(rowCount, highlightIndex, maxRows) {
20448
20412
  if (rowCount <= maxRows) return 0;
20449
20413
  const maxStart = rowCount - maxRows;
@@ -20454,8 +20418,8 @@ function windowStart(rowCount, highlightIndex, maxRows) {
20454
20418
  }
20455
20419
  function defaultRenderRow(row, index, isCursor) {
20456
20420
  return /* @__PURE__ */ jsxs17(Text17, { children: [
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 })
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 })
20459
20423
  ] }, index);
20460
20424
  }
20461
20425
  function GotoBanner({
@@ -20485,14 +20449,14 @@ function GotoBanner({
20485
20449
  width,
20486
20450
  flexShrink: 0,
20487
20451
  children: [
20488
- /* @__PURE__ */ jsx20(Text17, { bold: true, children: title }),
20489
- moreAbove > 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
20452
+ /* @__PURE__ */ jsx19(Text17, { bold: true, children: title }),
20453
+ moreAbove > 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
20490
20454
  visible.map((row, vi) => {
20491
20455
  const i = start + vi;
20492
20456
  return renderRow(row, i, i === highlightIndex);
20493
20457
  }),
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 })
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 })
20496
20460
  ]
20497
20461
  }
20498
20462
  );
@@ -20856,7 +20820,7 @@ var init_composite_closure = __esm({
20856
20820
 
20857
20821
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
20858
20822
  import { Text as Text18 } from "ink";
20859
- import { jsx as jsx21 } from "react/jsx-runtime";
20823
+ import { jsx as jsx20 } from "react/jsx-runtime";
20860
20824
  function previewBadge(annotation) {
20861
20825
  switch (annotation) {
20862
20826
  case "new":
@@ -20875,7 +20839,7 @@ function PreviewBadge({
20875
20839
  badge,
20876
20840
  highlighted = false
20877
20841
  }) {
20878
- return badge ? /* @__PURE__ */ jsx21(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx21(Text18, { children: " " });
20842
+ return badge ? /* @__PURE__ */ jsx20(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx20(Text18, { children: " " });
20879
20843
  }
20880
20844
  var init_badge = __esm({
20881
20845
  "packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx"() {
@@ -20887,7 +20851,10 @@ var init_badge = __esm({
20887
20851
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
20888
20852
  import figures4 from "figures";
20889
20853
  import { Box as Box17, Text as Text19 } from "ink";
20890
- import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
20854
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
20855
+ function hasDirectChild(node) {
20856
+ return node.slots.some((slot) => (slot.allowedComponents ?? []).some((target) => target !== node.name));
20857
+ }
20891
20858
  function isEmpty(entry) {
20892
20859
  return Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
20893
20860
  }
@@ -20930,10 +20897,12 @@ function buildVisibleRows(props) {
20930
20897
  otherKeys2.sort();
20931
20898
  const otherKeySet2 = new Set(otherKeys2);
20932
20899
  const flatGraph = graph.filter((n) => otherKeySet2.has(n.name));
20933
- const closures2 = computeAllClosures(flatGraph);
20934
20900
  const depCountByKey = /* @__PURE__ */ new Map();
20935
- for (const [name, closure] of closures2) {
20936
- if (closure.nodes.length > 1) depCountByKey.set(name, closure.nodes.length - 1);
20901
+ for (const node of flatGraph) {
20902
+ const direct = new Set(
20903
+ node.slots.flatMap((slot) => slot.allowedComponents ?? []).filter((t) => t !== node.name && otherKeySet2.has(t))
20904
+ );
20905
+ if (direct.size > 0) depCountByKey.set(node.name, direct.size);
20937
20906
  }
20938
20907
  for (const key of cycleKeys2) {
20939
20908
  const rec = itemByKey2.get(key);
@@ -20978,28 +20947,11 @@ function buildVisibleRows(props) {
20978
20947
  const seenCycleTierChildOccurrence = /* @__PURE__ */ new Set();
20979
20948
  const computeCycleMemberSubtree = (root) => {
20980
20949
  const out = [];
20981
- const visited = /* @__PURE__ */ new Set([root]);
20982
- const queue = [{ name: root, depth: 0 }];
20983
- while (queue.length > 0) {
20984
- const cur = queue.shift();
20985
- const parentItem = itemByKey.get(cur.name)?.it;
20986
- if (!parentItem) continue;
20987
- const slotTargets2 = [];
20988
- const seenTarget = /* @__PURE__ */ new Set();
20989
- for (const target of allowedComponentNames(parentItem.entry)) {
20990
- if (!itemByKey.has(target)) continue;
20991
- if (seenTarget.has(target)) continue;
20992
- seenTarget.add(target);
20993
- slotTargets2.push(target);
20994
- }
20995
- slotTargets2.sort();
20996
- for (const target of slotTargets2) {
20997
- if (visited.has(target)) continue;
20998
- visited.add(target);
20999
- const isCycleMember = cycleParticipants.has(target);
21000
- out.push({ name: target, depth: cur.depth + 1, isCycleMember });
21001
- queue.push({ name: target, depth: cur.depth + 1 });
21002
- }
20950
+ const parentItem = itemByKey.get(root)?.it;
20951
+ if (!parentItem) return out;
20952
+ const slotTargets2 = [...new Set(allowedComponentNames(parentItem.entry))].filter((target) => target !== root && itemByKey.has(target)).sort();
20953
+ for (const target of slotTargets2) {
20954
+ out.push({ name: target, depth: 1, isCycleMember: cycleParticipants.has(target) });
21003
20955
  }
21004
20956
  return out;
21005
20957
  };
@@ -21061,7 +21013,15 @@ function buildVisibleRows(props) {
21061
21013
  }
21062
21014
  const otherKeySet = new Set(otherKeys);
21063
21015
  const subgraph = graph.filter((n) => otherKeySet.has(n.name));
21064
- const closures = computeAllClosures(subgraph);
21016
+ const closures = /* @__PURE__ */ new Map();
21017
+ const parentNames = /* @__PURE__ */ new Set([
21018
+ ...findRoots(subgraph),
21019
+ ...subgraph.filter((n) => hasDirectChild(n)).map((n) => n.name)
21020
+ ]);
21021
+ for (const name of [...parentNames].sort()) {
21022
+ const full = computeClosure(name, subgraph);
21023
+ closures.set(name, { ...full, nodes: full.nodes.filter((n) => n.depth <= 1) });
21024
+ }
21065
21025
  const sharedDeps = findSharedDeps(closures);
21066
21026
  const hasCycleDepDirect = (name) => {
21067
21027
  const it = itemByKey.get(name)?.it;
@@ -21098,7 +21058,6 @@ function buildVisibleRows(props) {
21098
21058
  }
21099
21059
  };
21100
21060
  countInjections(root);
21101
- for (const n of closure.nodes) if (n.name !== root) countInjections(n.name);
21102
21061
  const depCount = closure.nodes.length - 1 + injectedCycleCount;
21103
21062
  const expanded = alwaysExpanded ? true : props.expandedGroups.has(root);
21104
21063
  const glyphExpand = expanded ? GLYPH_EXPAND_EXPANDED : GLYPH_EXPAND_COLLAPSED;
@@ -21134,7 +21093,6 @@ function buildVisibleRows(props) {
21134
21093
  emitCycleChildrenOf(root, 0);
21135
21094
  for (const c2 of closureChildren) {
21136
21095
  injectedChildren.push({ name: c2.name, depth: c2.depth, isCycleChild: false });
21137
- emitCycleChildrenOf(c2.name, c2.depth);
21138
21096
  }
21139
21097
  const isLastAtDepth = (idx) => {
21140
21098
  const own = injectedChildren[idx].depth;
@@ -21317,7 +21275,7 @@ function GroupedSidebar(props) {
21317
21275
  " ",
21318
21276
  emptyMessage
21319
21277
  ] }),
21320
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "up", count: start }),
21278
+ windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "up", count: start }),
21321
21279
  rows.map((row, i) => {
21322
21280
  const absoluteRowIdx = start + i;
21323
21281
  const isSelected = selectedRowIdx !== void 0 ? absoluteRowIdx === selectedRowIdx && row.itemIdx >= 0 : row.itemIdx >= 0 && row.itemIdx === selectedIdx;
@@ -21345,10 +21303,10 @@ function GroupedSidebar(props) {
21345
21303
  isCursor
21346
21304
  });
21347
21305
  return /* @__PURE__ */ jsxs18(Box17, { 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: " " })),
21306
+ isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
21307
+ /* @__PURE__ */ jsx21(PreviewBadge, { badge, highlighted: isSelected }),
21308
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx21(Text19, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
21309
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
21352
21310
  /* @__PURE__ */ jsxs18(
21353
21311
  Text19,
21354
21312
  {
@@ -21363,10 +21321,10 @@ function GroupedSidebar(props) {
21363
21321
  ]
21364
21322
  }
21365
21323
  ),
21366
- inheritanceStyle.glyph && /* @__PURE__ */ jsx22(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
21324
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx21(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
21367
21325
  ] }, row.key);
21368
21326
  }),
21369
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "down", count: allRows.length - end })
21327
+ windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "down", count: allRows.length - end })
21370
21328
  ] });
21371
21329
  }
21372
21330
  var GLYPH_EXPAND_COLLAPSED, GLYPH_EXPAND_EXPANDED, GLYPH_TREE_MID, GLYPH_TREE_LAST, GLYPH_WARN, GLYPH_ERROR;
@@ -21387,7 +21345,7 @@ var init_GroupedSidebar = __esm({
21387
21345
  });
21388
21346
 
21389
21347
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
21390
- import { useLayoutEffect, useRef as useRef4 } from "react";
21348
+ import { useLayoutEffect, useRef as useRef3 } from "react";
21391
21349
  import { useStdin } from "ink";
21392
21350
  function parseInput(data) {
21393
21351
  const isShiftTab = data === "\x1B[Z";
@@ -21449,7 +21407,7 @@ function registerInputHandler(stdin, setRawMode, handler) {
21449
21407
  }
21450
21408
  function useImmediateInput(handler, enabled = true) {
21451
21409
  const { stdin, setRawMode } = useStdin();
21452
- const handlerRef = useRef4(handler);
21410
+ const handlerRef = useRef3(handler);
21453
21411
  handlerRef.current = handler;
21454
21412
  useLayoutEffect(() => {
21455
21413
  if (!enabled) return;
@@ -21494,9 +21452,9 @@ var init_use_terminal_size = __esm({
21494
21452
  });
21495
21453
 
21496
21454
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
21497
- import React8 from "react";
21455
+ import React7 from "react";
21498
21456
  import { Box as Box18, Text as Text20 } from "ink";
21499
- import { Fragment as Fragment2, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
21457
+ import { Fragment as Fragment2, jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
21500
21458
  function HelpOverlay(props) {
21501
21459
  const { onClose } = props;
21502
21460
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -21517,11 +21475,11 @@ function HelpOverlay(props) {
21517
21475
  height: panelHeight,
21518
21476
  overflowY: "hidden",
21519
21477
  children: [
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))
21478
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21479
+ props.sections.map((section) => /* @__PURE__ */ jsxs19(React7.Fragment, { children: [
21480
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
21481
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: section.title }),
21482
+ section.entries.map((entry) => /* @__PURE__ */ jsx22(Text20, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
21525
21483
  ] }, section.title))
21526
21484
  ]
21527
21485
  }
@@ -21538,31 +21496,31 @@ function HelpOverlay(props) {
21538
21496
  height: panelHeight,
21539
21497
  overflowY: "hidden",
21540
21498
  children: [
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" }),
21499
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
21500
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
21501
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "Navigation" }),
21502
+ /* @__PURE__ */ jsx22(Text20, { children: " \u2191 / k / PgUp Scroll up" }),
21503
+ /* @__PURE__ */ jsx22(Text20, { children: " \u2193 / j / PgDn Scroll down" }),
21504
+ /* @__PURE__ */ jsx22(Text20, { children: " g / Home Jump to top" }),
21505
+ /* @__PURE__ */ jsx22(Text20, { children: " G / End Jump to bottom" }),
21548
21506
  mode === "review" && /* @__PURE__ */ jsxs19(Fragment2, { children: [
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" })
21507
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
21508
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "[Review mode only]" }),
21509
+ /* @__PURE__ */ jsx22(Text20, { children: " Tab Toggle sidebar/detail" }),
21510
+ /* @__PURE__ */ jsx22(Text20, { children: " a Accept component" }),
21511
+ /* @__PURE__ */ jsx22(Text20, { children: " r Reject component" }),
21512
+ /* @__PURE__ */ jsx22(Text20, { children: " e Edit proposal" }),
21513
+ /* @__PURE__ */ jsx22(Text20, { children: " s Toggle source code" }),
21514
+ /* @__PURE__ */ jsx22(Text20, { children: " A Approve all" }),
21515
+ /* @__PURE__ */ jsx22(Text20, { children: " F Open finalize dialog" }),
21516
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+S Save draft" }),
21517
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Z Undo" }),
21518
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Y Redo" }),
21519
+ /* @__PURE__ */ jsx22(Text20, { children: " Esc Exit edit / close" })
21562
21520
  ] }),
21563
- /* @__PURE__ */ jsx23(Text20, { children: " " }),
21564
- /* @__PURE__ */ jsx23(Text20, { children: " h Close help" }),
21565
- /* @__PURE__ */ jsx23(Text20, { children: " q Quit" })
21521
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
21522
+ /* @__PURE__ */ jsx22(Text20, { children: " h Close help" }),
21523
+ /* @__PURE__ */ jsx22(Text20, { children: " q Quit" })
21566
21524
  ]
21567
21525
  }
21568
21526
  );
@@ -21643,7 +21601,7 @@ var init_sidebar_input = __esm({
21643
21601
 
21644
21602
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
21645
21603
  import { Box as Box19, Text as Text21 } from "ink";
21646
- import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
21604
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
21647
21605
  function SearchMatchSummary({
21648
21606
  open,
21649
21607
  query,
@@ -21658,13 +21616,13 @@ function SearchMatchSummary({
21658
21616
  open && /* @__PURE__ */ jsxs20(Box19, { marginTop, flexDirection: "column", children: [
21659
21617
  /* @__PURE__ */ jsxs20(Text21, { children: [
21660
21618
  `/${query}`,
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" })
21619
+ /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.info, children: "\u258E" }),
21620
+ query && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
21621
+ /* @__PURE__ */ jsx23(Text21, { children: " \xB7 [Esc] leave" })
21664
21622
  ] }),
21665
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
21623
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
21666
21624
  ] }),
21667
- !open && query && /* @__PURE__ */ jsx24(Box19, { marginTop, children: /* @__PURE__ */ jsx24(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
21625
+ !open && query && /* @__PURE__ */ jsx23(Box19, { marginTop, children: /* @__PURE__ */ jsx23(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
21668
21626
  ] });
21669
21627
  }
21670
21628
  var init_SearchMatchSummary = __esm({
@@ -22434,7 +22392,7 @@ var init_state = __esm({
22434
22392
  });
22435
22393
 
22436
22394
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate.ts
22437
- import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef5, useState as useState12 } from "react";
22395
+ import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef4, useState as useState12 } from "react";
22438
22396
  function useScopeGate({ components, onConfirm, onQuit }) {
22439
22397
  const { columns: totalWidth, rows: terminalRows } = useTerminalSize();
22440
22398
  const columnPlan = useMemo2(() => computeColumnWidths(totalWidth), [totalWidth]);
@@ -22477,7 +22435,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
22477
22435
  for (const p of cycleParticipants) seed.add(p);
22478
22436
  return seed;
22479
22437
  });
22480
- const seededGroupsRef = useRef5(closures.size > 0 || cycleParticipants.size > 0);
22438
+ const seededGroupsRef = useRef4(closures.size > 0 || cycleParticipants.size > 0);
22481
22439
  useEffect7(() => {
22482
22440
  if (seededGroupsRef.current) return;
22483
22441
  if (closures.size === 0 && cycleParticipants.size === 0) return;
@@ -22924,30 +22882,30 @@ var init_use_scope_gate = __esm({
22924
22882
 
22925
22883
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
22926
22884
  import { Box as Box20, Text as Text22 } from "ink";
22927
- import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
22885
+ import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
22928
22886
  function ScopeGateScreen(props) {
22929
22887
  if (props.components.length === 0) {
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." }) });
22888
+ 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." }) });
22931
22889
  }
22932
- return /* @__PURE__ */ jsx25(ScopeGateView, { ...props });
22890
+ return /* @__PURE__ */ jsx24(ScopeGateView, { ...props });
22933
22891
  }
22934
22892
  function ScopeGateView({ components, onConfirm, onQuit }) {
22935
22893
  const gate = useScopeGate({ components, onConfirm, onQuit });
22936
22894
  const { search, graph, columnPlan, panelLayout, counters } = gate;
22937
22895
  if (gate.showHelp) {
22938
- return /* @__PURE__ */ jsx25(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
22896
+ return /* @__PURE__ */ jsx24(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
22939
22897
  }
22940
22898
  return /* @__PURE__ */ jsxs21(Box20, { flexDirection: "column", paddingX: 2, children: [
22941
22899
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", flexWrap: "wrap", children: [
22942
- /* @__PURE__ */ jsx25(CounterStrip, { counters, totalWidth: gate.totalWidth }),
22900
+ /* @__PURE__ */ jsx24(CounterStrip, { counters, totalWidth: gate.totalWidth }),
22943
22901
  gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs21(Text22, { color: PALETTE2.muted, children: [
22944
22902
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
22945
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
22903
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
22946
22904
  ] })
22947
22905
  ] }),
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." }) }),
22906
+ 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." }) }),
22949
22907
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", alignItems: "stretch", children: [
22950
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx25(
22908
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx24(
22951
22909
  GotoBanner,
22952
22910
  {
22953
22911
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -22957,7 +22915,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22957
22915
  width: columnPlan.main,
22958
22916
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
22959
22917
  }
22960
- ) : /* @__PURE__ */ jsx25(
22918
+ ) : /* @__PURE__ */ jsx24(
22961
22919
  GroupedSidebar,
22962
22920
  {
22963
22921
  items: gate.groupedItems,
@@ -22986,8 +22944,8 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
22986
22944
  }
22987
22945
  ),
22988
22946
  columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs21(Fragment4, { children: [
22989
- /* @__PURE__ */ jsx25(Box20, { width: 2, flexShrink: 0 }),
22990
- /* @__PURE__ */ jsx25(
22947
+ /* @__PURE__ */ jsx24(Box20, { width: 2, flexShrink: 0 }),
22948
+ /* @__PURE__ */ jsx24(
22991
22949
  AddedColumn,
22992
22950
  {
22993
22951
  width: columnPlan.added,
@@ -23002,9 +22960,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
23002
22960
  )
23003
22961
  ] })
23004
22962
  ] }),
23005
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx25(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
23006
- gate.pendingRejectCascade && /* @__PURE__ */ jsx25(RejectPrompt, { pending: gate.pendingRejectCascade }),
23007
- /* @__PURE__ */ jsx25(
22963
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx24(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
22964
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx24(RejectPrompt, { pending: gate.pendingRejectCascade }),
22965
+ /* @__PURE__ */ jsx24(
23008
22966
  SearchMatchSummary,
23009
22967
  {
23010
22968
  open: search.searchOpen,
@@ -23015,7 +22973,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
23015
22973
  marginTop: 1
23016
22974
  }
23017
22975
  ),
23018
- /* @__PURE__ */ jsx25(
22976
+ /* @__PURE__ */ jsx24(
23019
22977
  CompactControlBar,
23020
22978
  {
23021
22979
  hasGroupRoots: gate.hasGroupRoots,
@@ -23133,11 +23091,11 @@ var init_load = __esm({
23133
23091
  });
23134
23092
 
23135
23093
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate-flow.ts
23136
- import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef6, useState as useState13 } from "react";
23094
+ import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef5, useState as useState13 } from "react";
23137
23095
  function useScopeGateFlow(input, deps = realDeps2) {
23138
23096
  const sessionId = input?.sessionId;
23139
23097
  const loaded = useMemo3(() => sessionId ? deps.load(sessionId) : void 0, [sessionId]);
23140
- const cacheCheck = useRef6(void 0);
23098
+ const cacheCheck = useRef5(void 0);
23141
23099
  const [confirmed, setConfirmed] = useState13();
23142
23100
  useEffect8(() => {
23143
23101
  if (!input || !loaded?.ok || cacheCheck.current) return;
@@ -23203,7 +23161,7 @@ var init_logic10 = __esm({
23203
23161
  });
23204
23162
 
23205
23163
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
23206
- import { jsx as jsx26 } from "react/jsx-runtime";
23164
+ import { jsx as jsx25 } from "react/jsx-runtime";
23207
23165
  function GenerationScreen({
23208
23166
  progress,
23209
23167
  agent,
@@ -23212,7 +23170,7 @@ function GenerationScreen({
23212
23170
  stepNumber,
23213
23171
  totalSteps
23214
23172
  }) {
23215
- return /* @__PURE__ */ jsx26(
23173
+ return /* @__PURE__ */ jsx25(
23216
23174
  RunningStep,
23217
23175
  {
23218
23176
  stepNumber,
@@ -23414,10 +23372,10 @@ var init_run2 = __esm({
23414
23372
  });
23415
23373
 
23416
23374
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/use-generation.ts
23417
- import { useEffect as useEffect9, useRef as useRef7, useState as useState14 } from "react";
23375
+ import { useEffect as useEffect9, useRef as useRef6, useState as useState14 } from "react";
23418
23376
  function useGeneration(input) {
23419
23377
  const [state2, setState] = useState14();
23420
- const current = useRef7();
23378
+ const current = useRef6();
23421
23379
  useEffect9(() => {
23422
23380
  current.current = input;
23423
23381
  if (!input) {
@@ -23894,7 +23852,7 @@ var init_logic11 = __esm({
23894
23852
  });
23895
23853
 
23896
23854
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
23897
- import { jsx as jsx27 } from "react/jsx-runtime";
23855
+ import { jsx as jsx26 } from "react/jsx-runtime";
23898
23856
  function PreviewValidationErrorScreen({
23899
23857
  errors,
23900
23858
  missingNames,
@@ -23903,7 +23861,7 @@ function PreviewValidationErrorScreen({
23903
23861
  onQuit
23904
23862
  }) {
23905
23863
  const matchedNames = matchedComponentNames(errors, missingNames);
23906
- return /* @__PURE__ */ jsx27(
23864
+ return /* @__PURE__ */ jsx26(
23907
23865
  GateStep,
23908
23866
  {
23909
23867
  intent: "error",
@@ -24275,10 +24233,10 @@ var init_scroll_offset = __esm({
24275
24233
  });
24276
24234
 
24277
24235
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
24278
- import React9, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
24236
+ import React8, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
24279
24237
  import figures5 from "figures";
24280
24238
  import { Box as Box21, measureElement, Text as Text23 } from "ink";
24281
- import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
24239
+ import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
24282
24240
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
24283
24241
  return {
24284
24242
  selected,
@@ -24417,13 +24375,13 @@ function serializeState(state2, originalJson) {
24417
24375
  }
24418
24376
  function Picker({ value, active }) {
24419
24377
  return /* @__PURE__ */ jsxs22(Box21, { children: [
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" })
24378
+ active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u2039" }),
24379
+ /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
24380
+ active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u203A" })
24423
24381
  ] });
24424
24382
  }
24425
24383
  function Toggle({ value, active }) {
24426
- return /* @__PURE__ */ jsx28(Box21, { children: /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
24384
+ return /* @__PURE__ */ jsx27(Box21, { children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
24427
24385
  }
24428
24386
  function InlinePropField({
24429
24387
  label,
@@ -24446,7 +24404,7 @@ function RequiredField({
24446
24404
  editingField,
24447
24405
  activeField
24448
24406
  }) {
24449
- return /* @__PURE__ */ jsx28(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx28(Toggle, { value, active: editingField && activeField === "required" }) });
24407
+ return /* @__PURE__ */ jsx27(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx27(Toggle, { value, active: editingField && activeField === "required" }) });
24450
24408
  }
24451
24409
  function DefaultValueRow({
24452
24410
  display,
@@ -24458,7 +24416,7 @@ function DefaultValueRow({
24458
24416
  focused ? "\u203A " : " ",
24459
24417
  "default:"
24460
24418
  ] }),
24461
- active ? /* @__PURE__ */ jsx28(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: display })
24419
+ active ? /* @__PURE__ */ jsx27(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: display })
24462
24420
  ] });
24463
24421
  }
24464
24422
  function RowLabel({
@@ -24487,9 +24445,9 @@ function ValueInputRow({
24487
24445
  cursorVisible
24488
24446
  }) {
24489
24447
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, 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: " " })
24448
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
24449
+ /* @__PURE__ */ jsx27(Text23, { children: valueText }),
24450
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: " " })
24493
24451
  ] });
24494
24452
  }
24495
24453
  function EditableListItem({
@@ -24502,9 +24460,9 @@ function EditableListItem({
24502
24460
  }) {
24503
24461
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
24504
24462
  if (isBeingEdited) {
24505
- return /* @__PURE__ */ jsx28(ValueInputRow, { mode: "edit", valueText, cursorVisible });
24463
+ return /* @__PURE__ */ jsx27(ValueInputRow, { mode: "edit", valueText, cursorVisible });
24506
24464
  }
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}` }) });
24465
+ return /* @__PURE__ */ jsx27(Box21, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
24508
24466
  }
24509
24467
  function EditableValueList({
24510
24468
  values,
@@ -24518,8 +24476,8 @@ function EditableValueList({
24518
24476
  showAddInput
24519
24477
  }) {
24520
24478
  return /* @__PURE__ */ jsxs22(Fragment5, { children: [
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(
24479
+ 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 }) })),
24480
+ values.map((value, index) => /* @__PURE__ */ jsx27(
24523
24481
  EditableListItem,
24524
24482
  {
24525
24483
  value,
@@ -24531,7 +24489,7 @@ function EditableValueList({
24531
24489
  },
24532
24490
  index
24533
24491
  )),
24534
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx28(ValueInputRow, { mode: "add", valueText, cursorVisible })
24492
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx27(ValueInputRow, { mode: "add", valueText, cursorVisible })
24535
24493
  ] });
24536
24494
  }
24537
24495
  function DefaultSubRow({
@@ -24548,12 +24506,12 @@ function DefaultSubRow({
24548
24506
  focused ? "\u203A " : " ",
24549
24507
  "default:"
24550
24508
  ] }),
24551
- /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
24509
+ /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
24552
24510
  ] });
24553
24511
  }
24554
24512
  if (prop.type === "boolean") {
24555
24513
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
24556
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
24514
+ return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
24557
24515
  }
24558
24516
  if (prop.type === "enum") {
24559
24517
  if (prop.values.length === 0) {
@@ -24562,11 +24520,11 @@ function DefaultSubRow({
24562
24520
  focused ? "\u203A " : " ",
24563
24521
  "default:"
24564
24522
  ] }),
24565
- /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
24523
+ /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
24566
24524
  ] });
24567
24525
  }
24568
24526
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
24569
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
24527
+ return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
24570
24528
  }
24571
24529
  const value = typeof prop.default === "string" ? prop.default : "";
24572
24530
  if (active) {
@@ -24576,9 +24534,9 @@ function DefaultSubRow({
24576
24534
  "default:"
24577
24535
  ] }),
24578
24536
  /* @__PURE__ */ jsxs22(Box21, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
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) })
24537
+ /* @__PURE__ */ jsx27(Text23, { children: value.slice(0, textCursor) }),
24538
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
24539
+ /* @__PURE__ */ jsx27(Text23, { children: value.slice(textCursor + 1) })
24582
24540
  ] })
24583
24541
  ] });
24584
24542
  }
@@ -24587,7 +24545,7 @@ function DefaultSubRow({
24587
24545
  focused ? "\u203A " : " ",
24588
24546
  "default:"
24589
24547
  ] }),
24590
- /* @__PURE__ */ jsx28(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
24548
+ /* @__PURE__ */ jsx27(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
24591
24549
  ] });
24592
24550
  }
24593
24551
  function DescriptionField({
@@ -24607,7 +24565,7 @@ function DescriptionField({
24607
24565
  focused ? "\u203A " : " ",
24608
24566
  label
24609
24567
  ] }),
24610
- /* @__PURE__ */ jsx28(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
24568
+ /* @__PURE__ */ jsx27(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
24611
24569
  ] });
24612
24570
  }
24613
24571
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
@@ -24615,7 +24573,7 @@ function DescriptionField({
24615
24573
  focused ? "\u203A " : " ",
24616
24574
  label
24617
24575
  ] }),
24618
- editing ? /* @__PURE__ */ jsx28(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: value || "\u2014" })
24576
+ editing ? /* @__PURE__ */ jsx27(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: value || "\u2014" })
24619
24577
  ] });
24620
24578
  }
24621
24579
  function EditableDescription({
@@ -24625,7 +24583,7 @@ function EditableDescription({
24625
24583
  }) {
24626
24584
  return /* @__PURE__ */ jsxs22(Text23, { wrap: "wrap", children: [
24627
24585
  value.slice(0, textCursor),
24628
- /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
24586
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
24629
24587
  value.slice(textCursor + 1)
24630
24588
  ] });
24631
24589
  }
@@ -24647,8 +24605,8 @@ function PropRow({
24647
24605
  const descFocused = activeField === "description";
24648
24606
  const descActive = editingField && descFocused;
24649
24607
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24650
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: prop.name, selected }) }),
24651
- /* @__PURE__ */ jsx28(
24608
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: prop.name, selected }) }),
24609
+ /* @__PURE__ */ jsx27(
24652
24610
  DescriptionField,
24653
24611
  {
24654
24612
  value: prop.description,
@@ -24662,7 +24620,7 @@ function PropRow({
24662
24620
  }
24663
24621
  ),
24664
24622
  /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24665
- /* @__PURE__ */ jsx28(
24623
+ /* @__PURE__ */ jsx27(
24666
24624
  RequiredField,
24667
24625
  {
24668
24626
  value: prop.required,
@@ -24671,9 +24629,9 @@ function PropRow({
24671
24629
  activeField
24672
24630
  }
24673
24631
  ),
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 }) })
24632
+ /* @__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 }) })
24675
24633
  ] }),
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" }) }),
24634
+ 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" }) }),
24677
24635
  prop.type === "enum" && /* @__PURE__ */ jsxs22(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
24678
24636
  /* @__PURE__ */ jsxs22(Text23, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
24679
24637
  activeField === "values" ? "\u203A " : " ",
@@ -24685,7 +24643,7 @@ function PropRow({
24685
24643
  "]"
24686
24644
  ] })
24687
24645
  ] }),
24688
- /* @__PURE__ */ jsx28(
24646
+ /* @__PURE__ */ jsx27(
24689
24647
  DefaultSubRow,
24690
24648
  {
24691
24649
  prop,
@@ -24700,7 +24658,7 @@ function PropRow({
24700
24658
  activeField === "allowed" ? "\u203A " : " ",
24701
24659
  "allowed:"
24702
24660
  ] }),
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(
24661
+ 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(
24704
24662
  Text23,
24705
24663
  {
24706
24664
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
@@ -24709,17 +24667,17 @@ function PropRow({
24709
24667
  }
24710
24668
  )
24711
24669
  ] }),
24712
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx28(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: (() => {
24670
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx27(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: (() => {
24713
24671
  const max = Math.max(8, width - 8);
24714
24672
  const text = `~ ${rationale}`;
24715
24673
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
24716
24674
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
24717
24675
  selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, flexDirection: "column", children: [
24718
24676
  /* @__PURE__ */ jsxs22(Box21, { children: [
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" })
24677
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "values:" }),
24678
+ activeField === "values" && /* @__PURE__ */ jsx27(Text23, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
24721
24679
  ] }),
24722
- /* @__PURE__ */ jsx28(
24680
+ /* @__PURE__ */ jsx27(
24723
24681
  EditableValueList,
24724
24682
  {
24725
24683
  values: prop.values,
@@ -24750,8 +24708,8 @@ function SlotRow({
24750
24708
  pickerCursor
24751
24709
  }) {
24752
24710
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
24753
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: slot.name, selected, trailing: false }) }),
24754
- /* @__PURE__ */ jsx28(
24711
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: slot.name, selected, trailing: false }) }),
24712
+ /* @__PURE__ */ jsx27(
24755
24713
  DescriptionField,
24756
24714
  {
24757
24715
  value: slot.description,
@@ -24764,7 +24722,7 @@ function SlotRow({
24764
24722
  paddingLeft: 0
24765
24723
  }
24766
24724
  ),
24767
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(
24725
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(
24768
24726
  RequiredField,
24769
24727
  {
24770
24728
  value: slot.required,
@@ -24785,7 +24743,7 @@ function SlotRow({
24785
24743
  ]
24786
24744
  }
24787
24745
  ),
24788
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
24746
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
24789
24747
  ] }),
24790
24748
  selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
24791
24749
  /* @__PURE__ */ jsxs22(Box21, { children: [
@@ -24800,9 +24758,9 @@ function SlotRow({
24800
24758
  ]
24801
24759
  }
24802
24760
  ),
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" })
24761
+ 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" })
24804
24762
  ] }),
24805
- /* @__PURE__ */ jsx28(
24763
+ /* @__PURE__ */ jsx27(
24806
24764
  EditableValueList,
24807
24765
  {
24808
24766
  values: slot.allowedComponents,
@@ -24816,21 +24774,21 @@ function SlotRow({
24816
24774
  showAddInput: editingField && activeField === "allowedComponents"
24817
24775
  }
24818
24776
  ),
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)" }) : (() => {
24777
+ 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)" }) : (() => {
24820
24778
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
24821
24779
  if (filtered.length === 0) {
24822
- return /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
24780
+ return /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
24823
24781
  }
24824
24782
  const cursor = pickerCursor % filtered.length;
24825
24783
  const MAX_VISIBLE = 5;
24826
24784
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
24827
24785
  const slice = filtered.slice(start, start + MAX_VISIBLE);
24828
24786
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
24829
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
24787
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
24830
24788
  slice.map((name, i) => {
24831
24789
  const absIdx = start + i;
24832
24790
  const isCursor = absIdx === cursor;
24833
- return /* @__PURE__ */ jsx28(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
24791
+ return /* @__PURE__ */ jsx27(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
24834
24792
  })
24835
24793
  ] });
24836
24794
  })() })
@@ -24955,9 +24913,9 @@ function FieldEditor({
24955
24913
  const [editorState, setEditorState] = useState15(initialState);
24956
24914
  const [parseErr] = useState15(parseError);
24957
24915
  const [listScrollStart, setListScrollStart] = useState15(0);
24958
- const initialFocusScrollApplied = React9.useRef(false);
24916
+ const initialFocusScrollApplied = React8.useRef(false);
24959
24917
  const [rowHeights, setRowHeights] = useState15({});
24960
- const rowMeasureRefs = React9.useRef(/* @__PURE__ */ new Map());
24918
+ const rowMeasureRefs = React8.useRef(/* @__PURE__ */ new Map());
24961
24919
  const initialFocus = (() => {
24962
24920
  if (initialFocusTarget?.kind === "description") {
24963
24921
  return {
@@ -25044,23 +25002,23 @@ function FieldEditor({
25044
25002
  const [showHelp, setShowHelp] = useState15(false);
25045
25003
  const props = editorState.props;
25046
25004
  const slots = editorState.slots;
25047
- const contentPropIndexes = React9.useMemo(
25005
+ const contentPropIndexes = React8.useMemo(
25048
25006
  () => props.flatMap((prop, index) => prop.category === "content" ? [index] : []),
25049
25007
  [props]
25050
25008
  );
25051
- const designPropIndexes = React9.useMemo(
25009
+ const designPropIndexes = React8.useMemo(
25052
25010
  () => props.flatMap((prop, index) => prop.category === "design" ? [index] : []),
25053
25011
  [props]
25054
25012
  );
25055
- const hiddenPropIndexes = React9.useMemo(
25013
+ const hiddenPropIndexes = React8.useMemo(
25056
25014
  () => showHiddenProps ? props.flatMap((prop, index) => prop.category === "state" || prop.category === "unattached" ? [index] : []) : [],
25057
25015
  [props, showHiddenProps]
25058
25016
  );
25059
- const visiblePropIndexes = React9.useMemo(
25017
+ const visiblePropIndexes = React8.useMemo(
25060
25018
  () => [...contentPropIndexes, ...designPropIndexes, ...hiddenPropIndexes],
25061
25019
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
25062
25020
  );
25063
- const propGroups = React9.useMemo(
25021
+ const propGroups = React8.useMemo(
25064
25022
  () => [
25065
25023
  {
25066
25024
  kind: "content",
@@ -25080,7 +25038,7 @@ function FieldEditor({
25080
25038
  ],
25081
25039
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
25082
25040
  );
25083
- const selectableRows = React9.useMemo(
25041
+ const selectableRows = React8.useMemo(
25084
25042
  () => [
25085
25043
  ...contentPropIndexes.map((idx) => ({ kind: "prop", idx })),
25086
25044
  ...designPropIndexes.map((idx) => ({ kind: "prop", idx })),
@@ -25090,7 +25048,7 @@ function FieldEditor({
25090
25048
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes, slots]
25091
25049
  );
25092
25050
  const visiblePropPosition = visiblePropIndexes.indexOf(propIdx);
25093
- const selectedSelectableIndex = React9.useMemo(
25051
+ const selectedSelectableIndex = React8.useMemo(
25094
25052
  () => selectableRows.findIndex(
25095
25053
  (row) => inSlots ? row.kind === "slot" && row.idx === slotIdx : row.kind === "prop" && row.idx === propIdx
25096
25054
  ),
@@ -25109,12 +25067,12 @@ function FieldEditor({
25109
25067
  }
25110
25068
  };
25111
25069
  const textEntryActive = focusLevel === "field" && editingField && activeField === "description" || focusLevel === "field" && editingField && activeField === "default" && (editorState.props[propIdx]?.type === "string" || editorState.props[propIdx]?.type === "token") || editingValue != null;
25112
- React9.useEffect(() => {
25070
+ React8.useEffect(() => {
25113
25071
  onTextEntryActiveChange?.(textEntryActive);
25114
25072
  }, [textEntryActive, onTextEntryActiveChange]);
25115
25073
  const currentProp = props[propIdx] ?? null;
25116
25074
  const currentSlot = slots[slotIdx] ?? null;
25117
- React9.useEffect(() => {
25075
+ React8.useEffect(() => {
25118
25076
  if (showHiddenProps || inSlots || inComponentDesc || visiblePropPosition >= 0) return;
25119
25077
  if (visiblePropIndexes.length > 0) {
25120
25078
  setPropIdx(visiblePropIndexes[0]);
@@ -25133,22 +25091,22 @@ function FieldEditor({
25133
25091
  setEditorState(next);
25134
25092
  onChange(serializeState(next, value));
25135
25093
  };
25136
- const canonicalize = React9.useCallback((json) => {
25094
+ const canonicalize = React8.useCallback((json) => {
25137
25095
  try {
25138
25096
  return JSON.stringify(JSON.parse(json));
25139
25097
  } catch {
25140
25098
  return `__unparseable__:${json}`;
25141
25099
  }
25142
25100
  }, []);
25143
- const initialStateRef = React9.useRef(initialState);
25101
+ const initialStateRef = React8.useRef(initialState);
25144
25102
  const baselineCanonical = canonicalize(serializeState(initialStateRef.current, value));
25145
25103
  const currentCanonical = canonicalize(serializeState(editorState, value));
25146
25104
  const isDirty = currentCanonical !== baselineCanonical;
25147
- React9.useEffect(() => {
25105
+ React8.useEffect(() => {
25148
25106
  onDirtyChange?.(isDirty);
25149
25107
  }, [isDirty, onDirtyChange]);
25150
- const lastDiscardTriggerRef = React9.useRef(discardTrigger);
25151
- React9.useEffect(() => {
25108
+ const lastDiscardTriggerRef = React8.useRef(discardTrigger);
25109
+ React8.useEffect(() => {
25152
25110
  if (discardTrigger === void 0) return;
25153
25111
  if (discardTrigger === lastDiscardTriggerRef.current) return;
25154
25112
  lastDiscardTriggerRef.current = discardTrigger;
@@ -25659,17 +25617,17 @@ function FieldEditor({
25659
25617
  const innerWidth = Math.max(1, width - 2);
25660
25618
  if (parseErr) {
25661
25619
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
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." })
25620
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
25621
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: parseErr }),
25622
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
25665
25623
  ] });
25666
25624
  }
25667
25625
  if (props.length === 0 && slots.length === 0) {
25668
25626
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
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" })
25627
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
25628
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
25629
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
25630
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
25673
25631
  ] });
25674
25632
  }
25675
25633
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -25798,12 +25756,12 @@ function FieldEditor({
25798
25756
  const renderRow = (row, index) => {
25799
25757
  const key = rowKey(row, index);
25800
25758
  if (row.kind === "header") {
25801
- return /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
25759
+ return /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
25802
25760
  }
25803
25761
  if (row.kind === "component-description") {
25804
25762
  const isSelected2 = inComponentDesc && active;
25805
25763
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
25806
- return /* @__PURE__ */ jsx28(
25764
+ return /* @__PURE__ */ jsx27(
25807
25765
  DescriptionField,
25808
25766
  {
25809
25767
  value: editorState.componentDescription,
@@ -25834,7 +25792,7 @@ function FieldEditor({
25834
25792
  valueText,
25835
25793
  innerWidth
25836
25794
  );
25837
- return /* @__PURE__ */ jsx28(
25795
+ return /* @__PURE__ */ jsx27(
25838
25796
  PropRow,
25839
25797
  {
25840
25798
  prop: p,
@@ -25861,7 +25819,7 @@ function FieldEditor({
25861
25819
  valueText,
25862
25820
  innerWidth
25863
25821
  );
25864
- return /* @__PURE__ */ jsx28(
25822
+ return /* @__PURE__ */ jsx27(
25865
25823
  SlotRow,
25866
25824
  {
25867
25825
  slot: s,
@@ -25882,9 +25840,9 @@ function FieldEditor({
25882
25840
  borderStyle: "single",
25883
25841
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
25884
25842
  children: [
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." }),
25843
+ 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." }),
25886
25844
  header,
25887
- /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx28(
25845
+ /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx27(
25888
25846
  PropRow,
25889
25847
  {
25890
25848
  prop: currentProp,
@@ -25900,7 +25858,7 @@ function FieldEditor({
25900
25858
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
25901
25859
  showRationale: showInlineRationales
25902
25860
  }
25903
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx28(
25861
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx27(
25904
25862
  SlotRow,
25905
25863
  {
25906
25864
  slot: currentSlot,
@@ -25919,7 +25877,7 @@ function FieldEditor({
25919
25877
  ) : visibleRowSlice.map((row, index) => {
25920
25878
  const absoluteIndex = scrollStart + index;
25921
25879
  const key = rowKey(row, absoluteIndex);
25922
- return /* @__PURE__ */ jsx28(
25880
+ return /* @__PURE__ */ jsx27(
25923
25881
  Box21,
25924
25882
  {
25925
25883
  ref: (node) => {
@@ -25933,7 +25891,7 @@ function FieldEditor({
25933
25891
  `visible-${key}`
25934
25892
  );
25935
25893
  }) }),
25936
- categoryBelow && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
25894
+ categoryBelow && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
25937
25895
  sourceOpen && !onToggleSourceExternal && (() => {
25938
25896
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
25939
25897
  const start = propMeta?.sourceStartLine ?? null;
@@ -25943,48 +25901,48 @@ function FieldEditor({
25943
25901
  const headerPath = path5 ?? "<unknown source path>";
25944
25902
  if (!start || !end2 || !src) {
25945
25903
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
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" })
25904
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
25905
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
25906
+ /* @__PURE__ */ jsx27(Text23, { children: "[s] close" })
25949
25907
  ] });
25950
25908
  }
25951
25909
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
25952
25910
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
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" })
25911
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
25912
+ lines.map((ln, i) => /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
25913
+ /* @__PURE__ */ jsx27(Text23, { children: "[s] close \xB7 [Esc] close" })
25956
25914
  ] });
25957
25915
  })(),
25958
25916
  showHelp && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
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" })
25917
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
25918
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
25919
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Row navigation" }),
25920
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193 move between rows" }),
25921
+ /* @__PURE__ */ jsx27(Text23, { children: " Enter edit fields on the current row" }),
25922
+ /* @__PURE__ */ jsx27(Text23, { children: " Esc exit the panel" }),
25923
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
25924
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Field editing" }),
25925
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
25926
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
25927
+ /* @__PURE__ */ jsx27(Text23, { children: " Space/Enter toggle required" }),
25928
+ /* @__PURE__ */ jsx27(Text23, { children: " Type edit description / string default" }),
25929
+ /* @__PURE__ */ jsx27(Text23, { children: " Esc exit field-edit back to the row" }),
25930
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
25931
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Values / allowedComponents" }),
25932
+ /* @__PURE__ */ jsx27(Text23, { children: " a / e / r add \xB7 edit \xB7 remove" }),
25933
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191\u2193 navigate the list" }),
25934
+ /* @__PURE__ */ jsx27(Text23, { children: " K / J reorder up \xB7 down" }),
25935
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
25936
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Panels" }),
25937
+ /* @__PURE__ */ jsx27(Text23, { children: " s toggle source-view for the current prop" }),
25938
+ /* @__PURE__ */ jsx27(Text23, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
25939
+ /* @__PURE__ */ jsx27(Text23, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
25940
+ /* @__PURE__ */ jsx27(Text23, { children: " ? toggle this overlay" }),
25941
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
25942
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "press ? or Esc to close" })
25985
25943
  ] }),
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 }) })
25944
+ validationError && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: "\u2717 " + validationError }),
25945
+ /* @__PURE__ */ jsx27(Box21, { paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: modeLabel }) })
25988
25946
  ]
25989
25947
  }
25990
25948
  );
@@ -26042,22 +26000,22 @@ var init_wrap_text = __esm({
26042
26000
 
26043
26001
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
26044
26002
  import { Box as Box22, Text as Text24 } from "ink";
26045
- import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
26003
+ import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
26046
26004
  function RationaleLine({ line, active }) {
26047
26005
  if (line.kind === "blank") {
26048
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { children: " " }) });
26006
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { children: " " }) });
26049
26007
  }
26050
26008
  if (line.kind === "heading") {
26051
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
26009
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
26052
26010
  }
26053
26011
  if (line.kind === "label") {
26054
26012
  return /* @__PURE__ */ jsxs23(Box22, { children: [
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 })
26013
+ line.prefix && /* @__PURE__ */ jsx28(Text24, { children: line.prefix }),
26014
+ /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
26015
+ line.suffix && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: line.suffix })
26058
26016
  ] });
26059
26017
  }
26060
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
26018
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
26061
26019
  }
26062
26020
  var init_RationaleLine = __esm({
26063
26021
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx"() {
@@ -26068,7 +26026,7 @@ var init_RationaleLine = __esm({
26068
26026
 
26069
26027
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
26070
26028
  import { Box as Box23, Text as Text25 } from "ink";
26071
- import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
26029
+ import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
26072
26030
  function renderComponentRationaleLines(data, innerWidth) {
26073
26031
  const out = [];
26074
26032
  const pushSection = (heading, body) => {
@@ -26144,9 +26102,9 @@ function ComponentRationalePanel({
26144
26102
  borderStyle: "single",
26145
26103
  borderColor: active ? PALETTE.text : void 0,
26146
26104
  children: [
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" }) })
26105
+ /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
26106
+ visible.map((line, i) => /* @__PURE__ */ jsx29(RationaleLine, { line, active }, i)),
26107
+ /* @__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" }) })
26150
26108
  ]
26151
26109
  }
26152
26110
  );
@@ -26164,9 +26122,9 @@ var init_ComponentRationalePanel = __esm({
26164
26122
 
26165
26123
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
26166
26124
  import { Text as Text26 } from "ink";
26167
- import { Fragment as Fragment6, jsx as jsx31 } from "react/jsx-runtime";
26125
+ import { Fragment as Fragment6, jsx as jsx30 } from "react/jsx-runtime";
26168
26126
  function HighlightedLine({ parts }) {
26169
- return /* @__PURE__ */ jsx31(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx31(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
26127
+ return /* @__PURE__ */ jsx30(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx30(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
26170
26128
  }
26171
26129
  var init_HighlightedLine = __esm({
26172
26130
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx"() {
@@ -26177,7 +26135,7 @@ var init_HighlightedLine = __esm({
26177
26135
 
26178
26136
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
26179
26137
  import { Box as Box24, Text as Text27 } from "ink";
26180
- import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
26138
+ import { Fragment as Fragment7, jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
26181
26139
  function ScrollablePanel({
26182
26140
  title,
26183
26141
  width,
@@ -26192,10 +26150,10 @@ function ScrollablePanel({
26192
26150
  const overflowed = totalLines > height;
26193
26151
  return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
26194
26152
  /* @__PURE__ */ jsxs25(Box24, { children: [
26195
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
26153
+ /* @__PURE__ */ jsx31(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
26196
26154
  overflowed && /* @__PURE__ */ jsxs25(Fragment7, { children: [
26197
- /* @__PURE__ */ jsx32(Box24, { flexGrow: 1 }),
26198
- /* @__PURE__ */ jsx32(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
26155
+ /* @__PURE__ */ jsx31(Box24, { flexGrow: 1 }),
26156
+ /* @__PURE__ */ jsx31(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
26199
26157
  ] })
26200
26158
  ] }),
26201
26159
  children
@@ -26210,7 +26168,7 @@ var init_ScrollablePanel = __esm({
26210
26168
 
26211
26169
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
26212
26170
  import { Box as Box25 } from "ink";
26213
- import { jsx as jsx33 } from "react/jsx-runtime";
26171
+ import { jsx as jsx32 } from "react/jsx-runtime";
26214
26172
  function highlightJson(line) {
26215
26173
  const parts = [];
26216
26174
  let remaining = line;
@@ -26248,7 +26206,7 @@ function highlightJson(line) {
26248
26206
  parts.push({ text: remaining[0] });
26249
26207
  remaining = remaining.slice(1);
26250
26208
  }
26251
- return /* @__PURE__ */ jsx33(HighlightedLine, { parts });
26209
+ return /* @__PURE__ */ jsx32(HighlightedLine, { parts });
26252
26210
  }
26253
26211
  function truncateLine(line, maxWidth) {
26254
26212
  if (line.length <= maxWidth) return line;
@@ -26261,7 +26219,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
26261
26219
  const totalLines = allLines.length;
26262
26220
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
26263
26221
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
26264
- return /* @__PURE__ */ jsx33(
26222
+ return /* @__PURE__ */ jsx32(
26265
26223
  ScrollablePanel,
26266
26224
  {
26267
26225
  title: label,
@@ -26274,7 +26232,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
26274
26232
  borderColor: active ? "white" : void 0,
26275
26233
  children: visibleLines.map((line, i) => {
26276
26234
  const truncated = truncateLine(line, innerWidth);
26277
- return /* @__PURE__ */ jsx33(Box25, { children: highlightJson(truncated) }, i);
26235
+ return /* @__PURE__ */ jsx32(Box25, { children: highlightJson(truncated) }, i);
26278
26236
  })
26279
26237
  }
26280
26238
  );
@@ -26288,7 +26246,7 @@ var init_JsonPanel = __esm({
26288
26246
  });
26289
26247
 
26290
26248
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
26291
- import { jsx as jsx34 } from "react/jsx-runtime";
26249
+ import { jsx as jsx33 } from "react/jsx-runtime";
26292
26250
  function renderRationaleLines(rows, innerWidth) {
26293
26251
  const out = [];
26294
26252
  rows.forEach((row, idx) => {
@@ -26321,7 +26279,7 @@ function RationalePanel({
26321
26279
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
26322
26280
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
26323
26281
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
26324
- return /* @__PURE__ */ jsx34(
26282
+ return /* @__PURE__ */ jsx33(
26325
26283
  ScrollablePanel,
26326
26284
  {
26327
26285
  title: `RATIONALE \u2014 ${componentName}`,
@@ -26332,7 +26290,7 @@ function RationalePanel({
26332
26290
  visibleStart,
26333
26291
  visibleEnd,
26334
26292
  borderColor: active ? PALETTE.text : void 0,
26335
- children: visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i))
26293
+ children: visible.map((line, i) => /* @__PURE__ */ jsx33(RationaleLine, { line, active }, i))
26336
26294
  }
26337
26295
  );
26338
26296
  }
@@ -26349,7 +26307,7 @@ var init_RationalePanel = __esm({
26349
26307
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
26350
26308
  import figures6 from "figures";
26351
26309
  import { Box as Box26, Text as Text28 } from "ink";
26352
- import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
26310
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
26353
26311
  function TokenReviewPanel({
26354
26312
  componentName,
26355
26313
  suggestions,
@@ -26377,15 +26335,15 @@ function TokenReviewPanel({
26377
26335
  borderStyle: "single",
26378
26336
  borderColor: active ? PALETTE.text : void 0,
26379
26337
  children: [
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)" }),
26338
+ /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
26339
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
26340
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
26341
+ current.paths.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
26384
26342
  visiblePaths.map((path5, i) => {
26385
26343
  const pathIndex = scrollStart + i;
26386
26344
  const checked = editSelection.has(path5);
26387
26345
  const focused = pathIndex === editCursor;
26388
- return /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(
26346
+ return /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(
26389
26347
  Text28,
26390
26348
  {
26391
26349
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
@@ -26395,9 +26353,9 @@ function TokenReviewPanel({
26395
26353
  }
26396
26354
  ) }, path5);
26397
26355
  }),
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" })
26356
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
26357
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
26358
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
26401
26359
  ]
26402
26360
  }
26403
26361
  );
@@ -26411,18 +26369,18 @@ function TokenReviewPanel({
26411
26369
  borderStyle: "single",
26412
26370
  borderColor: active ? PALETTE.text : void 0,
26413
26371
  children: [
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)" }),
26372
+ /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
26373
+ suggestions.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
26416
26374
  suggestions.map((s, i) => {
26417
26375
  const focused = i === selectedRow;
26418
26376
  return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
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(", ")}` })
26377
+ /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(Text28, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
26378
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
26379
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
26422
26380
  ] }, s.propName);
26423
26381
  }),
26424
- /* @__PURE__ */ jsx35(Text28, { children: " " }),
26425
- /* @__PURE__ */ jsx35(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
26382
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
26383
+ /* @__PURE__ */ jsx34(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
26426
26384
  ]
26427
26385
  }
26428
26386
  );
@@ -26436,7 +26394,7 @@ var init_TokenReviewPanel = __esm({
26436
26394
 
26437
26395
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
26438
26396
  import { Text as Text29 } from "ink";
26439
- import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
26397
+ import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
26440
26398
  function ReviewDetailsPanel({
26441
26399
  selectedKey,
26442
26400
  panelOpen,
@@ -26471,7 +26429,7 @@ function ReviewDetailsPanel({
26471
26429
  rationale: s.rationale ?? ""
26472
26430
  }))
26473
26431
  ];
26474
- return /* @__PURE__ */ jsx36(
26432
+ return /* @__PURE__ */ jsx35(
26475
26433
  RationalePanel,
26476
26434
  {
26477
26435
  componentName: componentRationale?.name ?? selectedKey,
@@ -26484,7 +26442,7 @@ function ReviewDetailsPanel({
26484
26442
  );
26485
26443
  }
26486
26444
  if (panelOpen === "component-rationale") {
26487
- return /* @__PURE__ */ jsx36(
26445
+ return /* @__PURE__ */ jsx35(
26488
26446
  ComponentRationalePanel,
26489
26447
  {
26490
26448
  data: componentRationale ?? {
@@ -26510,13 +26468,13 @@ function ReviewDetailsPanel({
26510
26468
  const sourceLineCount = Math.max(1, height - 4);
26511
26469
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
26512
26470
  return /* @__PURE__ */ jsxs27(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
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" })
26471
+ /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
26472
+ 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)" }),
26473
+ /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
26516
26474
  ] });
26517
26475
  }
26518
26476
  if (panelOpen === "token-review") {
26519
- return /* @__PURE__ */ jsx36(
26477
+ return /* @__PURE__ */ jsx35(
26520
26478
  TokenReviewPanel,
26521
26479
  {
26522
26480
  componentName: selectedKey,
@@ -26532,7 +26490,7 @@ function ReviewDetailsPanel({
26532
26490
  );
26533
26491
  }
26534
26492
  if (showJson) {
26535
- return /* @__PURE__ */ jsx36(
26493
+ return /* @__PURE__ */ jsx35(
26536
26494
  JsonPanel,
26537
26495
  {
26538
26496
  label: "GENERATED DEFINITION (read-only)",
@@ -26544,7 +26502,7 @@ function ReviewDetailsPanel({
26544
26502
  }
26545
26503
  );
26546
26504
  }
26547
- return /* @__PURE__ */ jsx36(Fragment8, { children: editor });
26505
+ return /* @__PURE__ */ jsx35(Fragment8, { children: editor });
26548
26506
  }
26549
26507
  var init_review_details_panel = __esm({
26550
26508
  "packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx"() {
@@ -26559,7 +26517,7 @@ var init_review_details_panel = __esm({
26559
26517
  });
26560
26518
 
26561
26519
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
26562
- import { jsx as jsx37 } from "react/jsx-runtime";
26520
+ import { jsx as jsx36 } from "react/jsx-runtime";
26563
26521
  import { createElement } from "react";
26564
26522
  function toFieldEditorMetadata(reviewMetadata) {
26565
26523
  if (!reviewMetadata) return void 0;
@@ -26593,7 +26551,7 @@ function ReviewDetailsEditor({
26593
26551
  jsonScrollOffset,
26594
26552
  currentTokenSuggestions
26595
26553
  } = reviewEditor;
26596
- return /* @__PURE__ */ jsx37(
26554
+ return /* @__PURE__ */ jsx36(
26597
26555
  ReviewDetailsPanel,
26598
26556
  {
26599
26557
  selectedKey,
@@ -26641,7 +26599,7 @@ var init_ReviewDetailsEditor = __esm({
26641
26599
 
26642
26600
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
26643
26601
  import { Box as Box27, Text as Text30 } from "ink";
26644
- import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
26602
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
26645
26603
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
26646
26604
  return {
26647
26605
  value: reviewEditor.draftValue || selectedJson,
@@ -26681,17 +26639,17 @@ function ReviewEmptyComponentsWarning({
26681
26639
  hidden
26682
26640
  }) {
26683
26641
  if (hidden || count === 0) return null;
26684
- return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
26642
+ return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
26685
26643
  }
26686
26644
  function ReviewNoSelection() {
26687
- return /* @__PURE__ */ jsx38(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx38(Text30, { color: PALETTE.muted, children: "No component selected" }) });
26645
+ return /* @__PURE__ */ jsx37(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, children: "No component selected" }) });
26688
26646
  }
26689
26647
  function ReviewFinalizeError({
26690
26648
  message,
26691
26649
  hidden
26692
26650
  }) {
26693
26651
  if (hidden || !message) return null;
26694
- return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
26652
+ return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
26695
26653
  }
26696
26654
  function ReviewPanelFooter({
26697
26655
  reviewEditor,
@@ -26702,8 +26660,8 @@ function ReviewPanelFooter({
26702
26660
  }) {
26703
26661
  return /* @__PURE__ */ jsxs28(Fragment9, { children: [
26704
26662
  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" : ""),
26705
- livePreview.status === "running" && /* @__PURE__ */ jsx38(Text30, { children: ` ${livePreviewSpinner} live preview` }),
26706
- livePreview.disabled && /* @__PURE__ */ jsx38(Text30, { children: " \xB7 live preview disabled" })
26663
+ livePreview.status === "running" && /* @__PURE__ */ jsx37(Text30, { children: ` ${livePreviewSpinner} live preview` }),
26664
+ livePreview.disabled && /* @__PURE__ */ jsx37(Text30, { children: " \xB7 live preview disabled" })
26707
26665
  ] });
26708
26666
  }
26709
26667
  function ReviewComponentTitle({
@@ -26713,8 +26671,8 @@ function ReviewComponentTitle({
26713
26671
  sidebarFocused
26714
26672
  }) {
26715
26673
  return /* @__PURE__ */ jsxs28(Box27, { paddingLeft: 2, paddingBottom: 1, children: [
26716
- /* @__PURE__ */ jsx38(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
26717
- /* @__PURE__ */ jsx38(Box27, { flexGrow: 1 }),
26674
+ /* @__PURE__ */ jsx37(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
26675
+ /* @__PURE__ */ jsx37(Box27, { flexGrow: 1 }),
26718
26676
  /* @__PURE__ */ jsxs28(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: [
26719
26677
  propCount,
26720
26678
  " prop",
@@ -26746,8 +26704,8 @@ function ReviewComponentPanel({
26746
26704
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
26747
26705
  const contentHeight = Math.max(1, height - 2);
26748
26706
  const contentWidth = Math.max(1, width - 1);
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(
26707
+ 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: [
26708
+ /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx37(
26751
26709
  ReviewDetailsEditor,
26752
26710
  {
26753
26711
  selectedKey,
@@ -26760,7 +26718,7 @@ function ReviewComponentPanel({
26760
26718
  jsonValue,
26761
26719
  sidebarFocused,
26762
26720
  fieldEditor,
26763
- header: /* @__PURE__ */ jsx38(
26721
+ header: /* @__PURE__ */ jsx37(
26764
26722
  ReviewComponentTitle,
26765
26723
  {
26766
26724
  selectedKey,
@@ -26771,8 +26729,8 @@ function ReviewComponentPanel({
26771
26729
  )
26772
26730
  }
26773
26731
  ) }),
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(
26732
+ /* @__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 : " " }) }),
26733
+ /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx37(
26776
26734
  ReviewPanelFooter,
26777
26735
  {
26778
26736
  reviewEditor,
@@ -26796,7 +26754,7 @@ var init_ReviewComponentPanel = __esm({
26796
26754
 
26797
26755
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
26798
26756
  import { Box as Box28, Text as Text31 } from "ink";
26799
- import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
26757
+ import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
26800
26758
  function countReviewStatuses(entries) {
26801
26759
  return entries.reduce(
26802
26760
  (counts, entry) => {
@@ -26809,13 +26767,13 @@ function countReviewStatuses(entries) {
26809
26767
  );
26810
26768
  }
26811
26769
  function ReviewLoadingState() {
26812
- return /* @__PURE__ */ jsx39(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx39(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
26770
+ return /* @__PURE__ */ jsx38(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
26813
26771
  }
26814
26772
  function ReviewLoadError({ message }) {
26815
26773
  return /* @__PURE__ */ jsxs29(Box28, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
26816
- /* @__PURE__ */ jsx39(Text31, { color: PALETTE.error, children: message }),
26817
- /* @__PURE__ */ jsx39(Text31, { children: " " }),
26818
- /* @__PURE__ */ jsx39(Text31, { children: "[q / Enter / Esc] Quit" })
26774
+ /* @__PURE__ */ jsx38(Text31, { color: PALETTE.error, children: message }),
26775
+ /* @__PURE__ */ jsx38(Text31, { children: " " }),
26776
+ /* @__PURE__ */ jsx38(Text31, { children: "[q / Enter / Esc] Quit" })
26819
26777
  ] });
26820
26778
  }
26821
26779
  var init_ReviewStatus = __esm({
@@ -27039,7 +26997,7 @@ var init_run_live_preview = __esm({
27039
26997
 
27040
26998
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
27041
26999
  import { Box as Box29, Text as Text32 } from "ink";
27042
- import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs30 } from "react/jsx-runtime";
27000
+ import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
27043
27001
  function FinalizeDialog({
27044
27002
  accepted,
27045
27003
  rejected,
@@ -27067,51 +27025,51 @@ function FinalizeDialog({
27067
27025
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
27068
27026
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
27069
27027
  const hasMoreAbove = offset > 0;
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: " " }),
27028
+ return /* @__PURE__ */ jsx39(Box29, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
27029
+ /* @__PURE__ */ jsx39(Text32, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
27030
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
27073
27031
  /* @__PURE__ */ jsxs30(Text32, { children: [
27074
27032
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.success, children: [
27075
27033
  accepted,
27076
27034
  " accepted"
27077
27035
  ] }),
27078
- /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
27036
+ /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
27079
27037
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.error, children: [
27080
27038
  rejected,
27081
27039
  " rejected"
27082
27040
  ] }),
27083
- /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
27041
+ /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
27084
27042
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.muted, children: [
27085
27043
  needsReview,
27086
27044
  " unresolved"
27087
27045
  ] })
27088
27046
  ] }),
27089
- /* @__PURE__ */ jsx40(Text32, { children: " " }),
27047
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
27090
27048
  noneAccepted && /* @__PURE__ */ jsxs30(Fragment10, { 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: " " })
27049
+ /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
27050
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
27051
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
27094
27052
  ] }),
27095
27053
  !allResolved && /* @__PURE__ */ jsxs30(Fragment10, { 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: " " })
27054
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
27055
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
27056
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
27099
27057
  ] }),
27100
27058
  /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", height: 2, 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: " " })
27059
+ 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: " " }),
27060
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
27103
27061
  ] }),
27104
27062
  previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs30(Fragment10, { 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: " " })
27063
+ /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
27064
+ hasMoreAbove && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2191 more above" }),
27065
+ windowed.map((rc) => /* @__PURE__ */ jsx39(Text32, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
27066
+ hasMoreBelow && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2193 more below" }),
27067
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx39(Text32, { children: "[\u2191\u2193] scroll deletions" }),
27068
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
27111
27069
  ] }),
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" })
27070
+ /* @__PURE__ */ jsx39(Text32, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
27071
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
27072
+ /* @__PURE__ */ jsx39(Text32, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
27115
27073
  ] }) });
27116
27074
  }
27117
27075
  var FINALIZE_REMOVED_WINDOW;
@@ -27126,7 +27084,7 @@ var init_FinalizeDialog = __esm({
27126
27084
  });
27127
27085
 
27128
27086
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-finalize-preview.ts
27129
- import { useEffect as useEffect11, useRef as useRef8, useState as useState16 } from "react";
27087
+ import { useEffect as useEffect11, useRef as useRef7, useState as useState16 } from "react";
27130
27088
  function useReviewFinalizePreview({
27131
27089
  components,
27132
27090
  ...options
@@ -27141,7 +27099,7 @@ function useFinalizePreview(opts) {
27141
27099
  const [status, setStatus] = useState16("idle");
27142
27100
  const [removed, setRemoved] = useState16([]);
27143
27101
  const [scrollOffset, setScrollOffset] = useState16(0);
27144
- const generationRef = useRef8(0);
27102
+ const generationRef = useRef7(0);
27145
27103
  const acceptedKey = [...acceptedKeys].sort().join("\0");
27146
27104
  useEffect11(() => {
27147
27105
  if (!open) {
@@ -27195,7 +27153,7 @@ var init_use_finalize_preview = __esm({
27195
27153
  });
27196
27154
 
27197
27155
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-session.ts
27198
- import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef9, useState as useState17 } from "react";
27156
+ import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef8, useState as useState17 } from "react";
27199
27157
  function useReviewSession({
27200
27158
  loadSession,
27201
27159
  tokensPath,
@@ -27297,8 +27255,8 @@ function useReviewMetadata({ components, selectedIdx, extractSessionId }) {
27297
27255
  return { reviewMetadata, componentRationale };
27298
27256
  }
27299
27257
  function useReviewHistory({ loading, components, createSnapshot, applySnapshot }) {
27300
- const historyRef = useRef9(null);
27301
- const historySeededRef = useRef9(false);
27258
+ const historyRef = useRef8(null);
27259
+ const historySeededRef = useRef8(false);
27302
27260
  useEffect12(() => {
27303
27261
  if (loading || historySeededRef.current) return;
27304
27262
  historySeededRef.current = true;
@@ -27381,7 +27339,7 @@ var init_token_suggestions = __esm({
27381
27339
  });
27382
27340
 
27383
27341
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-editor.ts
27384
- import { useEffect as useEffect13, useRef as useRef10, useState as useState18 } from "react";
27342
+ import { useEffect as useEffect13, useRef as useRef9, useState as useState18 } from "react";
27385
27343
  function parseReviewEntry(draftValue) {
27386
27344
  const parsed = JSON.parse(draftValue);
27387
27345
  const keys = Object.keys(parsed);
@@ -27413,8 +27371,8 @@ function useReviewEditor({
27413
27371
  const [tokenReviewEditing, setTokenReviewEditing] = useState18(false);
27414
27372
  const [tokenReviewEditCursor, setTokenReviewEditCursor] = useState18(0);
27415
27373
  const [tokenReviewEditSelection, setTokenReviewEditSelection] = useState18(/* @__PURE__ */ new Set());
27416
- const tokenReviewSuggestedRef = useRef10(/* @__PURE__ */ new Map());
27417
- const pendingGRef = useRef10(false);
27374
+ const tokenReviewSuggestedRef = useRef9(/* @__PURE__ */ new Map());
27375
+ const pendingGRef = useRef9(false);
27418
27376
  useEffect13(() => {
27419
27377
  setTokenReviewRow(0);
27420
27378
  setTokenReviewEditing(false);
@@ -27560,7 +27518,7 @@ var init_use_review_surface_state = __esm({
27560
27518
 
27561
27519
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
27562
27520
  import { Box as Box30, Text as Text33 } from "ink";
27563
- import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs31 } from "react/jsx-runtime";
27521
+ import { Fragment as Fragment11, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
27564
27522
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
27565
27523
  useImmediateInput((input, key) => {
27566
27524
  if (input === "y" || key.return) {
@@ -27570,15 +27528,15 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
27570
27528
  }
27571
27529
  });
27572
27530
  return /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
27573
- /* @__PURE__ */ jsx41(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
27574
- /* @__PURE__ */ jsx41(Text33, { children: " " }),
27531
+ /* @__PURE__ */ jsx40(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
27532
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
27575
27533
  hasUnsavedDrafts ? /* @__PURE__ */ jsxs31(Fragment11, { children: [
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" })
27534
+ /* @__PURE__ */ jsx40(Text33, { children: "You have unsaved draft edits." }),
27535
+ /* @__PURE__ */ jsx40(Text33, { children: "Session state is preserved \u2014 you can resume" }),
27536
+ /* @__PURE__ */ jsx40(Text33, { children: "by running the same review command again." })
27537
+ ] }) : /* @__PURE__ */ jsx40(Text33, { children: "Session is saved. Quit without finalizing?" }),
27538
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
27539
+ /* @__PURE__ */ jsx40(Text33, { children: " [y / Enter] Quit [n / Esc] Stay" })
27582
27540
  ] });
27583
27541
  }
27584
27542
  var init_QuitDialog = __esm({
@@ -27590,7 +27548,7 @@ var init_QuitDialog = __esm({
27590
27548
 
27591
27549
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
27592
27550
  import { Box as Box31, Text as Text34 } from "ink";
27593
- import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
27551
+ import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
27594
27552
  function ReviewFinalizeDialogs({
27595
27553
  showFinalize,
27596
27554
  showQuit,
@@ -27605,7 +27563,7 @@ function ReviewFinalizeDialogs({
27605
27563
  }) {
27606
27564
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
27607
27565
  return /* @__PURE__ */ jsxs32(Fragment12, { children: [
27608
- showFinalize && /* @__PURE__ */ jsx42(
27566
+ showFinalize && /* @__PURE__ */ jsx41(
27609
27567
  FinalizeDialog,
27610
27568
  {
27611
27569
  accepted,
@@ -27618,7 +27576,7 @@ function ReviewFinalizeDialogs({
27618
27576
  onCancel: onFinalizeCancel
27619
27577
  }
27620
27578
  ),
27621
- showQuit && /* @__PURE__ */ jsx42(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
27579
+ showQuit && /* @__PURE__ */ jsx41(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
27622
27580
  ] });
27623
27581
  }
27624
27582
  function ReviewStepDialogs({
@@ -27628,7 +27586,7 @@ function ReviewStepDialogs({
27628
27586
  onFinalize,
27629
27587
  onQuit
27630
27588
  }) {
27631
- return /* @__PURE__ */ jsx42(
27589
+ return /* @__PURE__ */ jsx41(
27632
27590
  ReviewFinalizeDialogs,
27633
27591
  {
27634
27592
  showFinalize: surfaceState.showFinalize,
@@ -27647,11 +27605,11 @@ function ReviewStepDialogs({
27647
27605
  function ReviewReloadDialog({ open }) {
27648
27606
  if (!open) return null;
27649
27607
  return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
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" })
27608
+ /* @__PURE__ */ jsx41(Text34, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
27609
+ /* @__PURE__ */ jsx41(Text34, { children: "Unsaved in-memory changes will be lost." }),
27610
+ /* @__PURE__ */ jsx41(Text34, { children: " " }),
27611
+ /* @__PURE__ */ jsx41(Text34, { children: " [Enter] Confirm" }),
27612
+ /* @__PURE__ */ jsx41(Text34, { children: " [Esc] Cancel" })
27655
27613
  ] });
27656
27614
  }
27657
27615
  var init_ReviewDialogs = __esm({
@@ -27888,20 +27846,20 @@ var init_preview_annotations = __esm({
27888
27846
  });
27889
27847
 
27890
27848
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-live-preview.ts
27891
- import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef11, useState as useState20 } from "react";
27849
+ import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef10, useState as useState20 } from "react";
27892
27850
  function useLivePreview(opts) {
27893
27851
  const debounceMs = opts.debounceMs ?? DEFAULT_DEBOUNCE_MS;
27894
27852
  const [status, setStatus] = useState20("idle");
27895
27853
  const [disabled, setDisabled] = useState20(false);
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);
27854
+ const timerRef = useRef10(null);
27855
+ const generationRef = useRef10(0);
27856
+ const latestRef = useRef10(0);
27857
+ const inflightRef = useRef10(0);
27858
+ const optsRef = useRef10(opts);
27901
27859
  useEffect14(() => {
27902
27860
  optsRef.current = opts;
27903
27861
  });
27904
- const disabledRef = useRef11(disabled);
27862
+ const disabledRef = useRef10(disabled);
27905
27863
  useEffect14(() => {
27906
27864
  disabledRef.current = disabled;
27907
27865
  }, [disabled]);
@@ -28054,7 +28012,7 @@ var init_use_review_preview = __esm({
28054
28012
 
28055
28013
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
28056
28014
  import { Box as Box32, Text as Text35 } from "ink";
28057
- import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
28015
+ import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
28058
28016
  function LivePreviewSummary({
28059
28017
  enabled,
28060
28018
  previewAnnotations,
@@ -28068,19 +28026,19 @@ function LivePreviewSummary({
28068
28026
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
28069
28027
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
28070
28028
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
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...` });
28029
+ if (disabled) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
28030
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
28073
28031
  if (!hasCounts) return null;
28074
28032
  return /* @__PURE__ */ jsxs33(Box32, { children: [
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` })
28033
+ /* @__PURE__ */ jsx42(Text35, { children: "Preview: " }),
28034
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.success, children: `${counts.new} new` }),
28035
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28036
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.warning, children: `${counts.changed} changed` }),
28037
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28038
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `${counts.removed} removed` }),
28039
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx42(Text35, { children: " ([d] removed list)" }),
28040
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
28041
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
28084
28042
  ] });
28085
28043
  }
28086
28044
  var init_LivePreviewSummary = __esm({
@@ -28091,10 +28049,10 @@ var init_LivePreviewSummary = __esm({
28091
28049
  });
28092
28050
 
28093
28051
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
28094
- import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef12, useState as useState22 } from "react";
28052
+ import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef11, useState as useState22 } from "react";
28095
28053
  import figures7 from "figures";
28096
28054
  import { Box as Box33, Text as Text36 } from "ink";
28097
- import { Fragment as Fragment13, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
28055
+ import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
28098
28056
  function sortComponentsForSidebar(components, cycleParticipants) {
28099
28057
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
28100
28058
  const tier = (c2) => {
@@ -28138,7 +28096,7 @@ function CyclePathLine({
28138
28096
  return /* @__PURE__ */ jsxs34(Text36, { color: highlightLine ? PALETTE.warning : void 0, children: [
28139
28097
  prefix,
28140
28098
  segments.map(
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)
28099
+ (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)
28142
28100
  )
28143
28101
  ] });
28144
28102
  }
@@ -28150,31 +28108,31 @@ function CycleDetailPanel({
28150
28108
  height
28151
28109
  }) {
28152
28110
  const lines = [
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")
28111
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
28112
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
28113
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
28114
+ /* @__PURE__ */ jsx43(Text36, { children: " " }, "cyc-space")
28157
28115
  ];
28158
28116
  cycles.forEach((cycle, index) => {
28159
28117
  const nodeCount = new Set(cycle.path).size;
28160
28118
  const isCursor = index === cursor;
28161
28119
  lines.push(
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}`)
28120
+ /* @__PURE__ */ jsx43(Text36, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
28121
+ /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
28164
28122
  );
28165
28123
  if (cycle.suggestedBreak) {
28166
28124
  lines.push(
28167
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
28125
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
28168
28126
  );
28169
28127
  }
28170
- lines.push(/* @__PURE__ */ jsx44(Text36, { children: " " }, `cyc-s-${index}`));
28128
+ lines.push(/* @__PURE__ */ jsx43(Text36, { children: " " }, `cyc-s-${index}`));
28171
28129
  });
28172
28130
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
28173
28131
  const viewportHeight = Math.max(1, height - 3);
28174
28132
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
28175
28133
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
28176
28134
  visible,
28177
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: footer })
28135
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: footer })
28178
28136
  ] });
28179
28137
  }
28180
28138
  function BreakCyclePanel({
@@ -28186,13 +28144,13 @@ function BreakCyclePanel({
28186
28144
  height
28187
28145
  }) {
28188
28146
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
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" })
28147
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
28148
+ cycle && /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
28149
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
28150
+ /* @__PURE__ */ jsx43(Text36, { children: " " }),
28151
+ edges.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "remove slot edge:" }),
28152
+ 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}`)),
28153
+ 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" })
28196
28154
  ] });
28197
28155
  }
28198
28156
  function buildBreakingRows(breakingChanges) {
@@ -28238,9 +28196,9 @@ function deriveBreakingChanges(response) {
28238
28196
  }
28239
28197
  function GenerateReviewStep(props) {
28240
28198
  if (!props.extractSessionId) {
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." }) });
28199
+ 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." }) });
28242
28200
  }
28243
- return /* @__PURE__ */ jsx44(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
28201
+ return /* @__PURE__ */ jsx43(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
28244
28202
  }
28245
28203
  function GenerateReviewStepView({
28246
28204
  extractSessionId,
@@ -28305,7 +28263,7 @@ function GenerateReviewStepView({
28305
28263
  setFinalizeError
28306
28264
  } = reviewSurface;
28307
28265
  const [removedBannerCollapsed, setRemovedBannerCollapsed] = useState22(false);
28308
- const removedBannerDefaultedRef = useRef12(false);
28266
+ const removedBannerDefaultedRef = useRef11(false);
28309
28267
  const [cyclePanelScroll, setCyclePanelScroll] = useState22(0);
28310
28268
  const [cyclesCursor, setCyclesCursor] = useState22(0);
28311
28269
  const cyclePanel = useOverlayPanel({
@@ -28325,7 +28283,7 @@ function GenerateReviewStepView({
28325
28283
  const [breakCursor, setBreakCursor] = useState22(0);
28326
28284
  const [breakConfirm, setBreakConfirm] = useState22(false);
28327
28285
  const [expandedGroups, setExpandedGroups] = useState22(/* @__PURE__ */ new Set());
28328
- const seededGroupsRef = useRef12(false);
28286
+ const seededGroupsRef = useRef11(false);
28329
28287
  const {
28330
28288
  searchOpen,
28331
28289
  setSearchOpen,
@@ -28349,7 +28307,7 @@ function GenerateReviewStepView({
28349
28307
  const [pendingEditorFocus, setPendingEditorFocus] = useState22(null);
28350
28308
  const [autoRejected, setAutoRejected] = useState22([]);
28351
28309
  const [undoSnapshot, setUndoSnapshot] = useState22(null);
28352
- const autoRejectFiredRef = useRef12(false);
28310
+ const autoRejectFiredRef = useRef11(false);
28353
28311
  const [showReloadDialog, setShowReloadDialog] = useState22(false);
28354
28312
  const acceptedCountForPreview = components.filter((c2) => c2.status === "accepted").length;
28355
28313
  const { previewAnnotations, removedComponents, livePreviewHook, livePreviewSpinner } = useReviewPreview({
@@ -28482,7 +28440,7 @@ function GenerateReviewStepView({
28482
28440
  }),
28483
28441
  applySnapshot: applyHistorySnapshot
28484
28442
  });
28485
- const autoRejectPushedRef = useRef12(false);
28443
+ const autoRejectPushedRef = useRef11(false);
28486
28444
  useEffect16(() => {
28487
28445
  if (loading) return;
28488
28446
  if (!historySeededRef.current) return;
@@ -29097,13 +29055,13 @@ function GenerateReviewStepView({
29097
29055
  }
29098
29056
  });
29099
29057
  if (loading) {
29100
- return /* @__PURE__ */ jsx44(ReviewLoadingState, {});
29058
+ return /* @__PURE__ */ jsx43(ReviewLoadingState, {});
29101
29059
  }
29102
29060
  if (loadError) {
29103
- return /* @__PURE__ */ jsx44(ReviewLoadError, { message: loadError });
29061
+ return /* @__PURE__ */ jsx43(ReviewLoadError, { message: loadError });
29104
29062
  }
29105
29063
  if (showHelp) {
29106
- return /* @__PURE__ */ jsx44(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
29064
+ return /* @__PURE__ */ jsx43(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
29107
29065
  }
29108
29066
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
29109
29067
  components,
@@ -29144,7 +29102,7 @@ function GenerateReviewStepView({
29144
29102
  return false;
29145
29103
  })();
29146
29104
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
29147
- /* @__PURE__ */ jsx44(
29105
+ /* @__PURE__ */ jsx43(
29148
29106
  ReviewStepDialogs,
29149
29107
  {
29150
29108
  surfaceState: reviewSurface,
@@ -29154,15 +29112,15 @@ function GenerateReviewStepView({
29154
29112
  onQuit
29155
29113
  }
29156
29114
  ),
29157
- /* @__PURE__ */ jsx44(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
29115
+ /* @__PURE__ */ jsx43(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
29158
29116
  removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
29159
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
29117
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
29160
29118
  !removedBannerCollapsed && /* @__PURE__ */ jsxs34(Fragment13, { children: [
29161
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
29162
- removedComponents.map((rc) => /* @__PURE__ */ jsx44(Text36, { children: removedComponentLine(rc) }, rc.id))
29119
+ /* @__PURE__ */ jsx43(Text36, { children: " " }),
29120
+ removedComponents.map((rc) => /* @__PURE__ */ jsx43(Text36, { children: removedComponentLine(rc) }, rc.id))
29163
29121
  ] })
29164
29122
  ] }),
29165
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx44(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx44(
29123
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx43(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx43(
29166
29124
  Text36,
29167
29125
  {
29168
29126
  color: PALETTE.warning,
@@ -29174,13 +29132,13 @@ function GenerateReviewStepView({
29174
29132
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
29175
29133
  if (!comp) return null;
29176
29134
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
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" })
29135
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
29136
+ 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"}` }),
29137
+ 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}`)),
29138
+ /* @__PURE__ */ jsx43(Text36, { children: "[D/Esc] close detail" })
29181
29139
  ] });
29182
29140
  })(),
29183
- !dialogOpen && /* @__PURE__ */ jsx44(
29141
+ !dialogOpen && /* @__PURE__ */ jsx43(
29184
29142
  LivePreviewSummary,
29185
29143
  {
29186
29144
  enabled: livePreview,
@@ -29200,15 +29158,15 @@ function GenerateReviewStepView({
29200
29158
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
29201
29159
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
29202
29160
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
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" })
29161
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
29162
+ members.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
29163
+ ancestors.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
29164
+ /* @__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" })
29207
29165
  ] });
29208
29166
  })(),
29209
- /* @__PURE__ */ jsx44(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
29210
- /* @__PURE__ */ jsx44(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
29211
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx44(
29167
+ /* @__PURE__ */ jsx43(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
29168
+ /* @__PURE__ */ jsx43(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
29169
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx43(
29212
29170
  BreakCyclePanel,
29213
29171
  {
29214
29172
  cycle: cycleRows[cyclesCursor],
@@ -29219,7 +29177,7 @@ function GenerateReviewStepView({
29219
29177
  height: panelHeight
29220
29178
  }
29221
29179
  ),
29222
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx44(
29180
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx43(
29223
29181
  CycleDetailPanel,
29224
29182
  {
29225
29183
  cycles: cycleRows,
@@ -29230,7 +29188,7 @@ function GenerateReviewStepView({
29230
29188
  }
29231
29189
  ),
29232
29190
  !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { children: [
29233
- breakingPanel.isOpen ? /* @__PURE__ */ jsx44(
29191
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx43(
29234
29192
  GotoBanner,
29235
29193
  {
29236
29194
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -29243,7 +29201,7 @@ function GenerateReviewStepView({
29243
29201
  width: sidebarWidth,
29244
29202
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
29245
29203
  }
29246
- ) : /* @__PURE__ */ jsx44(
29204
+ ) : /* @__PURE__ */ jsx43(
29247
29205
  GroupedSidebar,
29248
29206
  {
29249
29207
  items: groupedItems,
@@ -29284,7 +29242,7 @@ function GenerateReviewStepView({
29284
29242
  graph: sidebarGraph
29285
29243
  }
29286
29244
  ),
29287
- selected ? /* @__PURE__ */ jsx44(
29245
+ selected ? /* @__PURE__ */ jsx43(
29288
29246
  ReviewComponentPanel,
29289
29247
  {
29290
29248
  selectedKey: selected.key,
@@ -29316,12 +29274,12 @@ function GenerateReviewStepView({
29316
29274
  livePreview: livePreviewHook,
29317
29275
  livePreviewSpinner
29318
29276
  }
29319
- ) : /* @__PURE__ */ jsx44(ReviewNoSelection, {})
29277
+ ) : /* @__PURE__ */ jsx43(ReviewNoSelection, {})
29320
29278
  ] }),
29321
29279
  !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
29322
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
29280
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
29323
29281
  cycleRows.slice(0, 3).map((cycle, idx) => {
29324
- return /* @__PURE__ */ jsx44(
29282
+ return /* @__PURE__ */ jsx43(
29325
29283
  CyclePathLine,
29326
29284
  {
29327
29285
  segments: formatCyclePathSegments2(cycle),
@@ -29332,10 +29290,10 @@ function GenerateReviewStepView({
29332
29290
  `cyc-banner-${idx}`
29333
29291
  );
29334
29292
  }),
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" })
29293
+ cycleRows.length > 3 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
29294
+ /* @__PURE__ */ jsx43(Text36, { children: " press [c] for detail" })
29337
29295
  ] }),
29338
- /* @__PURE__ */ jsx44(
29296
+ /* @__PURE__ */ jsx43(
29339
29297
  SearchMatchSummary,
29340
29298
  {
29341
29299
  open: searchOpen,
@@ -29346,7 +29304,7 @@ function GenerateReviewStepView({
29346
29304
  hidden: dialogOpen
29347
29305
  }
29348
29306
  ),
29349
- !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx44(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
29307
+ !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx43(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
29350
29308
  ] });
29351
29309
  }
29352
29310
  var HELP_SECTIONS2;
@@ -29462,16 +29420,16 @@ var init_generate_review_step = __esm({
29462
29420
 
29463
29421
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
29464
29422
  import { Box as Box34, Text as Text37 } from "ink";
29465
- import { jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
29423
+ import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
29466
29424
  function CustomPromptBanner({ generatePromptPath }) {
29467
29425
  if (!generatePromptPath) return null;
29468
29426
  return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
29469
- /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
29427
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
29470
29428
  generatePromptPath ? /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.warning, children: [
29471
29429
  "components: ",
29472
29430
  generatePromptPath
29473
29431
  ] }) : null,
29474
- /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
29432
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
29475
29433
  ] });
29476
29434
  }
29477
29435
  var init_CustomPromptBanner = __esm({
@@ -29501,14 +29459,14 @@ var init_contentful_urls2 = __esm({
29501
29459
 
29502
29460
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
29503
29461
  import { Box as Box35, Text as Text38 } from "ink";
29504
- import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
29462
+ import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
29505
29463
  function SpaceEnvironment({ spaceId, environmentId }) {
29506
29464
  return /* @__PURE__ */ jsxs36(Box35, { gap: 1, marginTop: 1, children: [
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 })
29465
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Space:" }),
29466
+ /* @__PURE__ */ jsx45(Text38, { children: spaceId }),
29467
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "/" }),
29468
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Environment:" }),
29469
+ /* @__PURE__ */ jsx45(Text38, { children: environmentId })
29512
29470
  ] });
29513
29471
  }
29514
29472
  var init_SpaceEnvironment = __esm({
@@ -29520,12 +29478,12 @@ var init_SpaceEnvironment = __esm({
29520
29478
 
29521
29479
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
29522
29480
  import { Box as Box36, Text as Text39 } from "ink";
29523
- import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
29481
+ import { Fragment as Fragment14, jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
29524
29482
  function EntityRows({ entity, label }) {
29525
29483
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
29526
29484
  return /* @__PURE__ */ jsxs37(Fragment14, { children: [
29527
29485
  ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs37(Text39, { children: [
29528
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: "\u2713" }),
29486
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "\u2713" }),
29529
29487
  " ",
29530
29488
  plural3(entity[action]),
29531
29489
  " ",
@@ -29540,8 +29498,8 @@ function EntityRows({ entity, label }) {
29540
29498
  }
29541
29499
  function LinkRow({ title, url }) {
29542
29500
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29543
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: title }),
29544
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.accent, children: url })
29501
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: title }),
29502
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.accent, children: url })
29545
29503
  ] });
29546
29504
  }
29547
29505
  function DoneStep({
@@ -29564,11 +29522,11 @@ function DoneStep({
29564
29522
  const success = totalFailed === 0;
29565
29523
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
29566
29524
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, 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: [
29525
+ success ? /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
29526
+ 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: [
29527
+ /* @__PURE__ */ jsx46(EntityRows, { entity: componentTypes, label: "Component Type" }),
29528
+ /* @__PURE__ */ jsx46(EntityRows, { entity: designTokens, label: "Design Token" }),
29529
+ summary && /* @__PURE__ */ jsx46(Box36, { marginTop: 1, children: /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.muted, children: [
29572
29530
  "Push result: ",
29573
29531
  summary.succeeded,
29574
29532
  "/",
@@ -29582,7 +29540,7 @@ function DoneStep({
29582
29540
  ] }) })
29583
29541
  ] }),
29584
29542
  failures.length > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
29585
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
29543
+ /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
29586
29544
  failures.map((failure) => /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.error, children: [
29587
29545
  failure.entityType,
29588
29546
  " ",
@@ -29591,11 +29549,11 @@ function DoneStep({
29591
29549
  failure.message
29592
29550
  ] }, `${failure.entityType}:${failure.entityId}`))
29593
29551
  ] }),
29594
- /* @__PURE__ */ jsx47(SpaceEnvironment, { spaceId, environmentId }),
29552
+ /* @__PURE__ */ jsx46(SpaceEnvironment, { spaceId, environmentId }),
29595
29553
  success && totalPushed > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, children: [
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(
29554
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
29555
+ /* @__PURE__ */ jsx46(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
29556
+ /* @__PURE__ */ jsx46(
29599
29557
  LinkRow,
29600
29558
  {
29601
29559
  title: "View your design tokens here:",
@@ -29603,7 +29561,7 @@ function DoneStep({
29603
29561
  }
29604
29562
  )
29605
29563
  ] }),
29606
- /* @__PURE__ */ jsx47(Text39, { children: "[Enter / q] Exit" })
29564
+ /* @__PURE__ */ jsx46(Text39, { children: "[Enter / q] Exit" })
29607
29565
  ] });
29608
29566
  }
29609
29567
  var ACTIONS;
@@ -29662,7 +29620,7 @@ import { useState as useState24 } from "react";
29662
29620
  import { Box as Box37, Text as Text40 } from "ink";
29663
29621
  import { readdirSync as readdirSync3 } from "node:fs";
29664
29622
  import { dirname as dirname15, basename as basename6, join as join22 } from "node:path";
29665
- import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
29623
+ import { jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
29666
29624
  function autocomplete(partial) {
29667
29625
  if (!partial) return null;
29668
29626
  const normalized = normalizePath(partial);
@@ -29721,18 +29679,18 @@ function PathPrompt({
29721
29679
  const cursor = cursorVisible ? "\u2588" : " ";
29722
29680
  return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
29723
29681
  /* @__PURE__ */ jsxs38(Box37, { gap: 1, children: [
29724
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.accent, children: "?" }),
29682
+ /* @__PURE__ */ jsx47(Text40, { color: PALETTE.accent, children: "?" }),
29725
29683
  /* @__PURE__ */ jsxs38(Text40, { bold: true, children: [
29726
29684
  label,
29727
29685
  ":"
29728
29686
  ] }),
29729
- /* @__PURE__ */ jsx48(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
29730
- /* @__PURE__ */ jsx48(Text40, { children: cursor })
29687
+ /* @__PURE__ */ jsx47(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
29688
+ /* @__PURE__ */ jsx47(Text40, { children: cursor })
29731
29689
  ] }),
29732
29690
  /* @__PURE__ */ jsxs38(Box37, { gap: 3, children: [
29733
- /* @__PURE__ */ jsx48(Text40, { children: "[Enter] Confirm" }),
29734
- /* @__PURE__ */ jsx48(Text40, { children: "[Tab] Autocomplete" }),
29735
- /* @__PURE__ */ jsx48(Text40, { children: "[Esc] Cancel" })
29691
+ /* @__PURE__ */ jsx47(Text40, { children: "[Enter] Confirm" }),
29692
+ /* @__PURE__ */ jsx47(Text40, { children: "[Tab] Autocomplete" }),
29693
+ /* @__PURE__ */ jsx47(Text40, { children: "[Esc] Cancel" })
29736
29694
  ] })
29737
29695
  ] });
29738
29696
  }
@@ -29748,10 +29706,10 @@ var init_PathPrompt = __esm({
29748
29706
 
29749
29707
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/StepHeader.tsx
29750
29708
  import { Box as Box38, Text as Text41 } from "ink";
29751
- import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
29709
+ import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
29752
29710
  function StepHeader({ stepNumber, totalSteps, title }) {
29753
29711
  return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 0, children: [
29754
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
29712
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
29755
29713
  /* @__PURE__ */ jsxs39(Box38, { gap: 1, children: [
29756
29714
  /* @__PURE__ */ jsxs39(Text41, { bold: true, children: [
29757
29715
  "Step ",
@@ -29759,10 +29717,10 @@ function StepHeader({ stepNumber, totalSteps, title }) {
29759
29717
  " of ",
29760
29718
  totalSteps
29761
29719
  ] }),
29762
- /* @__PURE__ */ jsx49(Text41, { bold: true, children: "\u2014" }),
29763
- /* @__PURE__ */ jsx49(Text41, { bold: true, children: title })
29720
+ /* @__PURE__ */ jsx48(Text41, { bold: true, children: "\u2014" }),
29721
+ /* @__PURE__ */ jsx48(Text41, { bold: true, children: title })
29764
29722
  ] }),
29765
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
29723
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
29766
29724
  ] });
29767
29725
  }
29768
29726
  var init_StepHeader = __esm({
@@ -29775,7 +29733,7 @@ var init_StepHeader = __esm({
29775
29733
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
29776
29734
  import { useEffect as useEffect18, useState as useState25 } from "react";
29777
29735
  import { Spinner as Spinner2 } from "@inkjs/ui";
29778
- import { jsx as jsx50 } from "react/jsx-runtime";
29736
+ import { jsx as jsx49 } from "react/jsx-runtime";
29779
29737
  function useTimedSpinner() {
29780
29738
  const [elapsedSeconds, setElapsedSeconds] = useState25(0);
29781
29739
  useEffect18(() => {
@@ -29787,7 +29745,7 @@ function useTimedSpinner() {
29787
29745
  const mins = Math.floor(elapsedSeconds / 60);
29788
29746
  const secs = elapsedSeconds % 60;
29789
29747
  return {
29790
- spinner: /* @__PURE__ */ jsx50(Spinner2, {}),
29748
+ spinner: /* @__PURE__ */ jsx49(Spinner2, {}),
29791
29749
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
29792
29750
  };
29793
29751
  }
@@ -29800,21 +29758,21 @@ var init_use_timed_spinner = __esm({
29800
29758
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
29801
29759
  import { Box as Box39, Text as Text42 } from "ink";
29802
29760
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
29803
- import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
29761
+ import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
29804
29762
  function PushingStep({ stepNumber, totalSteps, progress }) {
29805
29763
  const { elapsed } = useTimedSpinner();
29806
29764
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
29807
29765
  const showGlobal = progress && progress.kind === "progress";
29808
29766
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
29809
29767
  return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
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..." }),
29768
+ /* @__PURE__ */ jsx50(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
29769
+ /* @__PURE__ */ jsx50(Text42, { children: "Writing component types and design tokens to your Contentful space..." }),
29812
29770
  operationId && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
29813
- /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Operation:" }),
29814
- /* @__PURE__ */ jsx51(Text42, { children: operationId })
29771
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Operation:" }),
29772
+ /* @__PURE__ */ jsx50(Text42, { children: operationId })
29815
29773
  ] }),
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) }) }) }),
29774
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx50(Box39, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs40(Box39, { gap: 2, children: [
29775
+ /* @__PURE__ */ jsx50(Box39, { width: 40, children: /* @__PURE__ */ jsx50(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx50(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
29818
29776
  /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29819
29777
  progress.processed,
29820
29778
  "/",
@@ -29823,10 +29781,10 @@ function PushingStep({ stepNumber, totalSteps, progress }) {
29823
29781
  ] })
29824
29782
  ] }) }),
29825
29783
  showCurrent && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
29826
- /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Now processing:" }),
29827
- /* @__PURE__ */ jsx51(Text42, { children: showCurrent })
29784
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Now processing:" }),
29785
+ /* @__PURE__ */ jsx50(Text42, { children: showCurrent })
29828
29786
  ] }),
29829
- /* @__PURE__ */ jsx51(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29787
+ /* @__PURE__ */ jsx50(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
29830
29788
  "Elapsed: ",
29831
29789
  elapsed
29832
29790
  ] }) })
@@ -30026,7 +29984,7 @@ var init_preview_confirmation_input = __esm({
30026
29984
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
30027
29985
  import { useEffect as useEffect19, useState as useState26, useMemo as useMemo5 } from "react";
30028
29986
  import { Box as Box40, Text as Text43 } from "ink";
30029
- import { Fragment as Fragment15, jsx as jsx52, jsxs as jsxs41 } from "react/jsx-runtime";
29987
+ import { Fragment as Fragment15, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
30030
29988
  function buildPreviewSummaryLines(preview) {
30031
29989
  const lines = [];
30032
29990
  const { components, tokens } = preview;
@@ -30281,9 +30239,9 @@ function WizardPreviewStep({
30281
30239
  }
30282
30240
  });
30283
30241
  return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 2, children: [
30284
- /* @__PURE__ */ jsx52(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
30242
+ /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
30285
30243
  hasAnything ? /* @__PURE__ */ jsxs41(Fragment15, { children: [
30286
- /* @__PURE__ */ jsx52(Text43, { children: "Here's what will happen in your space:" }),
30244
+ /* @__PURE__ */ jsx51(Text43, { children: "Here's what will happen in your space:" }),
30287
30245
  /* @__PURE__ */ jsxs41(
30288
30246
  WindowedPanel,
30289
30247
  {
@@ -30292,24 +30250,24 @@ function WizardPreviewStep({
30292
30250
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
30293
30251
  focused: false,
30294
30252
  children: [
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) })
30253
+ 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)),
30254
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
30297
30255
  ]
30298
30256
  }
30299
30257
  )
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 }),
30258
+ ] }) : /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
30259
+ 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." }) }),
30260
+ /* @__PURE__ */ jsx51(SpaceEnvironment, { spaceId, environmentId }),
30303
30261
  /* @__PURE__ */ jsxs41(Box40, { gap: 3, marginTop: 1, children: [
30304
- /* @__PURE__ */ jsx52(Text43, { children: "[Enter] Push to Contentful" }),
30262
+ /* @__PURE__ */ jsx51(Text43, { children: "[Enter] Push to Contentful" }),
30305
30263
  /* @__PURE__ */ jsxs41(Text43, { children: [
30306
30264
  "[d] ",
30307
30265
  diffExpanded ? "Hide" : "Show",
30308
30266
  " diff"
30309
30267
  ] }),
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" })
30268
+ diffExpanded && /* @__PURE__ */ jsx51(Text43, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
30269
+ onEdit && /* @__PURE__ */ jsx51(Text43, { children: "[e] Edit definitions" }),
30270
+ /* @__PURE__ */ jsx51(Text43, { children: "[q] Cancel" })
30313
30271
  ] })
30314
30272
  ] });
30315
30273
  }
@@ -30341,7 +30299,7 @@ var init_run_teaser = __esm({
30341
30299
 
30342
30300
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
30343
30301
  import { Box as Box41 } from "ink";
30344
- import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
30302
+ import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
30345
30303
  function totalStepsFor(state2) {
30346
30304
  const hasTokenStage = !!state2.tokensPath || !!state2.rawTokensPath;
30347
30305
  return 3 + (hasTokenStage ? 1 : 0) + 2 + (state2.mapTokensEligible === true ? 1 : 0);
@@ -30362,7 +30320,7 @@ function FlowScreen({
30362
30320
  const content = (() => {
30363
30321
  switch (state2.step) {
30364
30322
  case "final-review":
30365
- return /* @__PURE__ */ jsx53(
30323
+ return /* @__PURE__ */ jsx52(
30366
30324
  GenerateReviewStep,
30367
30325
  {
30368
30326
  extractSessionId: state2.extractSessionId,
@@ -30379,7 +30337,7 @@ function FlowScreen({
30379
30337
  }
30380
30338
  );
30381
30339
  case "previewing":
30382
- return /* @__PURE__ */ jsx53(
30340
+ return /* @__PURE__ */ jsx52(
30383
30341
  RunningStep,
30384
30342
  {
30385
30343
  stepNumber: totalSteps,
@@ -30390,7 +30348,7 @@ function FlowScreen({
30390
30348
  );
30391
30349
  case "preview-gate":
30392
30350
  if (!state2.serverPreview) return null;
30393
- return /* @__PURE__ */ jsx53(
30351
+ return /* @__PURE__ */ jsx52(
30394
30352
  WizardPreviewStep,
30395
30353
  {
30396
30354
  preview: state2.serverPreview,
@@ -30404,9 +30362,9 @@ function FlowScreen({
30404
30362
  }
30405
30363
  );
30406
30364
  case "pushing":
30407
- return /* @__PURE__ */ jsx53(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
30365
+ return /* @__PURE__ */ jsx52(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
30408
30366
  case "path-prompt":
30409
- return /* @__PURE__ */ jsx53(
30367
+ return /* @__PURE__ */ jsx52(
30410
30368
  PathPrompt,
30411
30369
  {
30412
30370
  defaultPath: state2.outDir,
@@ -30415,7 +30373,7 @@ function FlowScreen({
30415
30373
  }
30416
30374
  );
30417
30375
  case "printing":
30418
- return /* @__PURE__ */ jsx53(
30376
+ return /* @__PURE__ */ jsx52(
30419
30377
  RunningStep,
30420
30378
  {
30421
30379
  stepNumber: totalSteps,
@@ -30426,7 +30384,7 @@ function FlowScreen({
30426
30384
  );
30427
30385
  case "print-gate": {
30428
30386
  const teaser = buildRunTeaserLine(state2.lastRunId);
30429
- return /* @__PURE__ */ jsx53(
30387
+ return /* @__PURE__ */ jsx52(
30430
30388
  GateStep,
30431
30389
  {
30432
30390
  message: "Files saved",
@@ -30440,7 +30398,7 @@ function FlowScreen({
30440
30398
  }
30441
30399
  case "done": {
30442
30400
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
30443
- return /* @__PURE__ */ jsx53(
30401
+ return /* @__PURE__ */ jsx52(
30444
30402
  DoneStep,
30445
30403
  {
30446
30404
  componentTypes: state2.pushResult.componentTypes,
@@ -30455,7 +30413,7 @@ function FlowScreen({
30455
30413
  );
30456
30414
  }
30457
30415
  case "preview-validation-error":
30458
- return /* @__PURE__ */ jsx53(
30416
+ return /* @__PURE__ */ jsx52(
30459
30417
  PreviewValidationErrorScreen,
30460
30418
  {
30461
30419
  errors: state2.previewValidationErrors,
@@ -30466,7 +30424,7 @@ function FlowScreen({
30466
30424
  }
30467
30425
  );
30468
30426
  case "error":
30469
- return /* @__PURE__ */ jsx53(
30427
+ return /* @__PURE__ */ jsx52(
30470
30428
  ErrorStep,
30471
30429
  {
30472
30430
  stepName: state2.errorStep,
@@ -30478,7 +30436,7 @@ function FlowScreen({
30478
30436
  }
30479
30437
  })();
30480
30438
  return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", children: [
30481
- /* @__PURE__ */ jsx53(CustomPromptBanner, { generatePromptPath }),
30439
+ /* @__PURE__ */ jsx52(CustomPromptBanner, { generatePromptPath }),
30482
30440
  content
30483
30441
  ] });
30484
30442
  }
@@ -31287,9 +31245,9 @@ var init_controller = __esm({
31287
31245
  });
31288
31246
 
31289
31247
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/use-flow.ts
31290
- import { useEffect as useEffect20, useRef as useRef13, useSyncExternalStore } from "react";
31248
+ import { useEffect as useEffect20, useRef as useRef12, useSyncExternalStore } from "react";
31291
31249
  function useFlow(start, options = {}) {
31292
- const controller = useRef13();
31250
+ const controller = useRef12();
31293
31251
  if (start && !controller.current) {
31294
31252
  try {
31295
31253
  startWizardLog();
@@ -31682,14 +31640,14 @@ var init_help_info = __esm({
31682
31640
 
31683
31641
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
31684
31642
  import { useEffect as useEffect21, useState as useState27 } from "react";
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";
31643
+ import { Box as Box42, Text as Text44, useInput as useInput9 } from "ink";
31644
+ import { Fragment as Fragment16, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
31687
31645
  function Section({ title, rows }) {
31688
31646
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
31689
- /* @__PURE__ */ jsx54(Text44, { bold: true, color: PALETTE.accent, children: title }),
31647
+ /* @__PURE__ */ jsx53(Text44, { bold: true, color: PALETTE.accent, children: title }),
31690
31648
  rows.map((row) => /* @__PURE__ */ jsxs43(Box42, { gap: 1, children: [
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 })
31649
+ /* @__PURE__ */ jsx53(Box42, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: row.label }) }),
31650
+ /* @__PURE__ */ jsx53(Text44, { children: row.value })
31693
31651
  ] }, row.label))
31694
31652
  ] });
31695
31653
  }
@@ -31703,7 +31661,7 @@ function HelpScreen({ onDone }) {
31703
31661
  void finishDebugRun({ outputs: {}, status: "success", exitMethod });
31704
31662
  onDone();
31705
31663
  };
31706
- useInput10((input, key) => {
31664
+ useInput9((input, key) => {
31707
31665
  if (key.return) {
31708
31666
  leave("saved");
31709
31667
  return;
@@ -31714,13 +31672,13 @@ function HelpScreen({ onDone }) {
31714
31672
  }
31715
31673
  });
31716
31674
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
31717
- /* @__PURE__ */ jsx54(Text44, { bold: true, children: "Help" }),
31675
+ /* @__PURE__ */ jsx53(Text44, { bold: true, children: "Help" }),
31718
31676
  info ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
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(
31677
+ /* @__PURE__ */ jsx53(Section, { title: "Where things are stored", rows: info.storage }),
31678
+ /* @__PURE__ */ jsx53(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
31679
+ /* @__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." })
31680
+ ] }) : /* @__PURE__ */ jsx53(Text44, { color: PALETTE.accent, children: "Loading..." }),
31681
+ /* @__PURE__ */ jsx53(
31724
31682
  ControlHints,
31725
31683
  {
31726
31684
  hints: [
@@ -31743,8 +31701,8 @@ var init_PageContainer2 = __esm({
31743
31701
 
31744
31702
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
31745
31703
  import { useState as useState28 } from "react";
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";
31704
+ import { Box as Box43, Text as Text45, useInput as useInput10 } from "ink";
31705
+ import { jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
31748
31706
  function SettingsScreen({
31749
31707
  onNavigate,
31750
31708
  onBack
@@ -31755,7 +31713,7 @@ function SettingsScreen({
31755
31713
  { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
31756
31714
  { label: "Debug Mode", screen: "settings-debug-mode" }
31757
31715
  ];
31758
- useInput11((input, key) => {
31716
+ useInput10((input, key) => {
31759
31717
  if (key.upArrow) {
31760
31718
  setFocusIdx((i) => (i - 1 + items.length) % items.length);
31761
31719
  return;
@@ -31776,14 +31734,14 @@ function SettingsScreen({
31776
31734
  }
31777
31735
  });
31778
31736
  return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
31779
- /* @__PURE__ */ jsx55(Text45, { bold: true, children: "Settings" }),
31780
- /* @__PURE__ */ jsx55(Text45, { color: PALETTE.muted, children: " " }),
31737
+ /* @__PURE__ */ jsx54(Text45, { bold: true, children: "Settings" }),
31738
+ /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: " " }),
31781
31739
  items.map((item, i) => /* @__PURE__ */ jsxs44(Text45, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
31782
31740
  i === focusIdx ? "> " : " ",
31783
31741
  item.label
31784
31742
  ] }, item.label)),
31785
- /* @__PURE__ */ jsx55(Text45, { children: " " }),
31786
- /* @__PURE__ */ jsx55(
31743
+ /* @__PURE__ */ jsx54(Text45, { children: " " }),
31744
+ /* @__PURE__ */ jsx54(
31787
31745
  ControlHints,
31788
31746
  {
31789
31747
  hints: [
@@ -32092,8 +32050,9 @@ var init_agent_debug = __esm({
32092
32050
 
32093
32051
  // packages/experience-design-system-cli/src/tui/settings/shared/FieldForm.tsx
32094
32052
  import { useState as useState29 } from "react";
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";
32053
+ import { Box as Box44, Text as Text46, useInput as useInput11 } from "ink";
32054
+ import TextInput4 from "ink-text-input";
32055
+ import { Fragment as Fragment17, jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
32097
32056
  function formLabelWidth(rows) {
32098
32057
  return Math.max(...rows.map((row) => row.label.length));
32099
32058
  }
@@ -32103,8 +32062,8 @@ function FormReadOnlyRow({
32103
32062
  children
32104
32063
  }) {
32105
32064
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32106
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
32107
- /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: label }) }),
32065
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
32066
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: label }) }),
32108
32067
  children
32109
32068
  ] });
32110
32069
  }
@@ -32128,7 +32087,7 @@ function FieldForm({
32128
32087
  const labelWidth = formLabelWidth([...fields2, ...actions]);
32129
32088
  const currentField = active < fields2.length ? fields2[active] : void 0;
32130
32089
  const currentAction = currentField ? void 0 : actions[active - fields2.length];
32131
- useInput12((input, key) => {
32090
+ useInput11((input, key) => {
32132
32091
  if (busy) return;
32133
32092
  if (editing) {
32134
32093
  if (key.escape && currentField) {
@@ -32145,7 +32104,7 @@ function FieldForm({
32145
32104
  onSave();
32146
32105
  return;
32147
32106
  }
32148
- if (isClearKey(input, key) && currentField) {
32107
+ if (input === "c" && currentField) {
32149
32108
  onChange(currentField.key, "");
32150
32109
  return;
32151
32110
  }
@@ -32166,11 +32125,11 @@ function FieldForm({
32166
32125
  }
32167
32126
  }
32168
32127
  });
32169
- const pointer = (isActive) => /* @__PURE__ */ jsx56(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
32128
+ const pointer = (isActive) => /* @__PURE__ */ jsx55(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
32170
32129
  return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32171
- /* @__PURE__ */ jsx56(Text46, { bold: true, children: title }),
32172
- subtitle && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: subtitle }),
32173
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
32130
+ /* @__PURE__ */ jsx55(Text46, { bold: true, children: title }),
32131
+ subtitle && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: subtitle }),
32132
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
32174
32133
  /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
32175
32134
  fields2.map((field, index) => {
32176
32135
  const isActive = index === active;
@@ -32178,34 +32137,34 @@ function FieldForm({
32178
32137
  const display = field.masked ? "\u2022".repeat(value.length) : value;
32179
32138
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32180
32139
  pointer(isActive),
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,
32140
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
32141
+ isActive && editing ? /* @__PURE__ */ jsx55(
32142
+ TextInput4,
32184
32143
  {
32185
32144
  value,
32186
32145
  onChange: (next) => onChange(field.key, next),
32187
32146
  onSubmit: () => setEditing(false),
32188
32147
  mask: field.masked ? "\u2022" : void 0
32189
32148
  }
32190
- ) : display ? /* @__PURE__ */ jsx56(Text46, { bold: true, children: display }) : (
32149
+ ) : display ? /* @__PURE__ */ jsx55(Text46, { bold: true, children: display }) : (
32191
32150
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
32192
32151
  // text starts in the same column as every other row's.
32193
- /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
32152
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
32194
32153
  ),
32195
- display && field.hint && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint })
32154
+ display && field.hint && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint })
32196
32155
  ] }, field.key);
32197
32156
  }),
32198
32157
  actions.map((action, index) => {
32199
32158
  const isActive = fields2.length + index === active;
32200
32159
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
32201
32160
  pointer(isActive),
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 })
32161
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
32162
+ /* @__PURE__ */ jsx55(Text46, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
32204
32163
  ] }, action.label);
32205
32164
  })
32206
32165
  ] }),
32207
32166
  notice && /* @__PURE__ */ jsxs45(Fragment17, { children: [
32208
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
32167
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
32209
32168
  /* @__PURE__ */ jsxs45(Text46, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
32210
32169
  notice.kind === "success" ? "\u2713" : "\u2717",
32211
32170
  " ",
@@ -32213,20 +32172,19 @@ function FieldForm({
32213
32172
  ] })
32214
32173
  ] }),
32215
32174
  children,
32216
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
32217
- /* @__PURE__ */ jsx56(
32175
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
32176
+ /* @__PURE__ */ jsx55(
32218
32177
  ControlHints,
32219
32178
  {
32220
32179
  hints: editing ? [
32221
32180
  { keys: "type", label: "edit" },
32222
32181
  { keys: "\u2190/\u2192", label: "move cursor" },
32223
32182
  { keys: "\u23CE", label: "done" },
32224
- { keys: "Ctrl+D", label: "clear" },
32225
32183
  { keys: "Esc", label: "cancel edit" }
32226
32184
  ] : [
32227
32185
  { keys: "\u2191/\u2193", label: "move" },
32228
32186
  { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
32229
- ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
32187
+ ...currentField ? [{ keys: "c", label: "clear" }] : [],
32230
32188
  { keys: "s", label: "save" },
32231
32189
  { keys: "Esc/q", label: "back without saving" }
32232
32190
  ]
@@ -32239,20 +32197,19 @@ var init_FieldForm = __esm({
32239
32197
  "use strict";
32240
32198
  init_theme();
32241
32199
  init_control_hints();
32242
- init_ClearableTextInput();
32243
32200
  }
32244
32201
  });
32245
32202
 
32246
32203
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
32247
32204
  import { Text as Text47 } from "ink";
32248
- import { jsx as jsx57 } from "react/jsx-runtime";
32205
+ import { jsx as jsx56 } from "react/jsx-runtime";
32249
32206
  function AgentStatusBadge({
32250
32207
  name,
32251
32208
  checks,
32252
32209
  binary
32253
32210
  }) {
32254
32211
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
32255
- return /* @__PURE__ */ jsx57(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
32212
+ return /* @__PURE__ */ jsx56(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
32256
32213
  }
32257
32214
  var TONE_COLOR;
32258
32215
  var init_AgentStatusBadge = __esm({
@@ -32271,11 +32228,11 @@ var init_AgentStatusBadge = __esm({
32271
32228
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
32272
32229
  import { useEffect as useEffect22, useState as useState30 } from "react";
32273
32230
  import { Box as Box45, Text as Text48 } from "ink";
32274
- import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
32231
+ import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
32275
32232
  function StatusHeading() {
32276
32233
  return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
32277
- /* @__PURE__ */ jsx58(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
32278
- /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
32234
+ /* @__PURE__ */ jsx57(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
32235
+ /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
32279
32236
  ] });
32280
32237
  }
32281
32238
  function AgentDetail({
@@ -32338,7 +32295,7 @@ function AgentDetail({
32338
32295
  };
32339
32296
  const formFields = fields(name);
32340
32297
  const labelWidth = formLabelWidth([...formFields, action]);
32341
- return /* @__PURE__ */ jsx58(
32298
+ return /* @__PURE__ */ jsx57(
32342
32299
  FieldForm,
32343
32300
  {
32344
32301
  title: AGENT_LABELS[name],
@@ -32356,8 +32313,8 @@ function AgentDetail({
32356
32313
  notice: testing ? null : notice,
32357
32314
  busy: saving || testing,
32358
32315
  children: /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", marginTop: 1, children: [
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))
32316
+ /* @__PURE__ */ jsx57(StatusHeading, {}),
32317
+ 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))
32361
32318
  ] })
32362
32319
  }
32363
32320
  );
@@ -32382,9 +32339,9 @@ var init_AgentDetail = __esm({
32382
32339
  });
32383
32340
 
32384
32341
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
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";
32342
+ import { useEffect as useEffect23, useRef as useRef13, useState as useState31 } from "react";
32343
+ import { Box as Box46, Text as Text49, useInput as useInput12 } from "ink";
32344
+ import { Fragment as Fragment18, jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
32388
32345
  function AgentsScreen({ onDone }) {
32389
32346
  const [config, setConfig] = useState31(null);
32390
32347
  const [focus, setFocus] = useState31(0);
@@ -32393,7 +32350,7 @@ function AgentsScreen({ onDone }) {
32393
32350
  const [saving, setSaving] = useState31(false);
32394
32351
  const [loadError, setLoadError] = useState31(null);
32395
32352
  const [checks, setChecks] = useState31({});
32396
- const visit = useRef14({
32353
+ const visit = useRef13({
32397
32354
  trail: createTrail(),
32398
32355
  before: void 0,
32399
32356
  environment: void 0,
@@ -32460,7 +32417,7 @@ function AgentsScreen({ onDone }) {
32460
32417
  setNotice({ kind: "error", text: `Default agent not changed: ${visit.error}` });
32461
32418
  }).finally(() => setSaving(false));
32462
32419
  };
32463
- useInput13((input, key) => {
32420
+ useInput12((input, key) => {
32464
32421
  if (loadError && (key.escape || input === "q")) {
32465
32422
  endVisit(null);
32466
32423
  onDone();
@@ -32493,20 +32450,20 @@ function AgentsScreen({ onDone }) {
32493
32450
  });
32494
32451
  if (!config) {
32495
32452
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32496
- /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Agents" }),
32497
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
32453
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
32454
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32498
32455
  loadError ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
32499
32456
  /* @__PURE__ */ jsxs47(Text49, { color: PALETTE.error, children: [
32500
32457
  "\u2717 Could not read the settings: ",
32501
32458
  loadError
32502
32459
  ] }),
32503
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
32504
- /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32505
- ] }) : /* @__PURE__ */ jsx59(Text49, { color: PALETTE.accent, children: "Loading..." })
32460
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32461
+ /* @__PURE__ */ jsx58(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32462
+ ] }) : /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "Loading..." })
32506
32463
  ] });
32507
32464
  }
32508
32465
  if (open) {
32509
- return /* @__PURE__ */ jsx59(
32466
+ return /* @__PURE__ */ jsx58(
32510
32467
  AgentDetail,
32511
32468
  {
32512
32469
  name: open,
@@ -32528,46 +32485,46 @@ function AgentsScreen({ onDone }) {
32528
32485
  }
32529
32486
  const focusedAgent = AGENT_NAMES[focus];
32530
32487
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, 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: " " }),
32488
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
32489
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
32490
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32534
32491
  /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
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" })
32492
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "Default agent" }),
32493
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
32494
+ saving && /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "\u2026 saving" })
32538
32495
  ] }),
32539
32496
  /* @__PURE__ */ jsxs47(Box46, { marginTop: 1, gap: 1, children: [
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" })
32497
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32498
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32499
+ /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "AGENT" }) }),
32500
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "STATUS" })
32544
32501
  ] }),
32545
32502
  AGENT_NAMES.map((name) => {
32546
32503
  const isFocused = focusedAgent === name;
32547
32504
  return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
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 })
32505
+ /* @__PURE__ */ jsx58(Text49, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
32506
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
32507
+ /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
32508
+ /* @__PURE__ */ jsx58(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
32552
32509
  ] }, name);
32553
32510
  }),
32554
32511
  /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
32555
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
32512
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
32556
32513
  panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs47(Box46, { gap: 1, paddingLeft: 1, children: [
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 })
32514
+ /* @__PURE__ */ jsx58(Box46, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: row.label }) }),
32515
+ /* @__PURE__ */ jsx58(Text49, { color: TONE_COLOR[row.tone], children: row.value })
32559
32516
  ] }, row.label))
32560
32517
  ] }),
32561
32518
  notice && /* @__PURE__ */ jsxs47(Fragment18, { children: [
32562
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
32519
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32563
32520
  /* @__PURE__ */ jsxs47(Text49, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
32564
32521
  notice.kind === "success" ? "\u2713" : "\u2717",
32565
32522
  " ",
32566
32523
  notice.text
32567
32524
  ] })
32568
32525
  ] }),
32569
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
32570
- /* @__PURE__ */ jsx59(
32526
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
32527
+ /* @__PURE__ */ jsx58(
32571
32528
  ControlHints,
32572
32529
  {
32573
32530
  hints: [
@@ -32631,9 +32588,9 @@ var init_project_store = __esm({
32631
32588
  });
32632
32589
 
32633
32590
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
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";
32591
+ import { useEffect as useEffect24, useRef as useRef14, useState as useState32 } from "react";
32592
+ import { Box as Box47, Text as Text50, useInput as useInput13 } from "ink";
32593
+ import { Fragment as Fragment19, jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
32637
32594
  function debugFields(config) {
32638
32595
  return {
32639
32596
  space_id: config?.spaceId ?? "",
@@ -32650,7 +32607,7 @@ function ProjectScreen({ onDone }) {
32650
32607
  const [saving, setSaving] = useState32(false);
32651
32608
  const [notice, setNotice] = useState32(null);
32652
32609
  const [loadError, setLoadError] = useState32(null);
32653
- const visit = useRef15({
32610
+ const visit = useRef14({
32654
32611
  trail: createTrail(),
32655
32612
  before: void 0,
32656
32613
  persisted: void 0,
@@ -32695,7 +32652,7 @@ function ProjectScreen({ onDone }) {
32695
32652
  exitMethod: change.changed ? "saved" : "discarded"
32696
32653
  });
32697
32654
  };
32698
- useInput14((input, key) => {
32655
+ useInput13((input, key) => {
32699
32656
  if (!config && loadError && (key.escape || input === "q")) {
32700
32657
  endVisit(null);
32701
32658
  onDone();
@@ -32703,16 +32660,16 @@ function ProjectScreen({ onDone }) {
32703
32660
  });
32704
32661
  if (!config) {
32705
32662
  return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32706
- /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Project" }),
32707
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
32663
+ /* @__PURE__ */ jsx59(Text50, { bold: true, children: "Project" }),
32664
+ /* @__PURE__ */ jsx59(Text50, { children: " " }),
32708
32665
  loadError ? /* @__PURE__ */ jsxs48(Fragment19, { children: [
32709
32666
  /* @__PURE__ */ jsxs48(Text50, { color: PALETTE.error, children: [
32710
32667
  "\u2717 Could not read the settings: ",
32711
32668
  loadError
32712
32669
  ] }),
32713
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
32714
- /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32715
- ] }) : /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "Loading..." })
32670
+ /* @__PURE__ */ jsx59(Text50, { children: " " }),
32671
+ /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
32672
+ ] }) : /* @__PURE__ */ jsx59(Text50, { color: PALETTE.accent, children: "Loading..." })
32716
32673
  ] });
32717
32674
  }
32718
32675
  const save = () => {
@@ -32733,7 +32690,7 @@ function ProjectScreen({ onDone }) {
32733
32690
  endVisit(config);
32734
32691
  onDone();
32735
32692
  };
32736
- return /* @__PURE__ */ jsx60(
32693
+ return /* @__PURE__ */ jsx59(
32737
32694
  FieldForm,
32738
32695
  {
32739
32696
  title: "Project",
@@ -32778,13 +32735,13 @@ var init_ProjectScreen = __esm({
32778
32735
 
32779
32736
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
32780
32737
  import { useState as useState33 } from "react";
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";
32738
+ import { Box as Box48, Text as Text51, useInput as useInput14 } from "ink";
32739
+ import { jsx as jsx60, jsxs as jsxs49 } from "react/jsx-runtime";
32783
32740
  function ConfigurationScreen({ onDone }) {
32784
32741
  const [focus, setFocus] = useState33(0);
32785
32742
  const [open, setOpen] = useState33(null);
32786
32743
  const close = () => setOpen(null);
32787
- useInput15((input, key) => {
32744
+ useInput14((input, key) => {
32788
32745
  if (open) return;
32789
32746
  if (key.upArrow) {
32790
32747
  setFocus((i) => (i - 1 + SECTIONS.length) % SECTIONS.length);
@@ -32800,18 +32757,18 @@ function ConfigurationScreen({ onDone }) {
32800
32757
  }
32801
32758
  if (key.escape || input === "q") onDone();
32802
32759
  });
32803
- if (open === "project") return /* @__PURE__ */ jsx61(ProjectScreen, { onDone: close });
32804
- if (open === "agents") return /* @__PURE__ */ jsx61(AgentsScreen, { onDone: close });
32760
+ if (open === "project") return /* @__PURE__ */ jsx60(ProjectScreen, { onDone: close });
32761
+ if (open === "agents") return /* @__PURE__ */ jsx60(AgentsScreen, { onDone: close });
32805
32762
  return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32806
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Configuration" }),
32807
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
32763
+ /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Configuration" }),
32764
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
32808
32765
  SECTIONS.map((section, index) => /* @__PURE__ */ jsxs49(Box48, { gap: 1, children: [
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 })
32766
+ /* @__PURE__ */ jsx60(Text51, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
32767
+ /* @__PURE__ */ jsx60(Box48, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
32768
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: section.description })
32812
32769
  ] }, section.id)),
32813
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
32814
- /* @__PURE__ */ jsx61(
32770
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
32771
+ /* @__PURE__ */ jsx60(
32815
32772
  ControlHints,
32816
32773
  {
32817
32774
  hints: [
@@ -32844,8 +32801,8 @@ var init_ConfigurationScreen = __esm({
32844
32801
 
32845
32802
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
32846
32803
  import { useEffect as useEffect25, useState as useState34 } from "react";
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";
32804
+ import { Box as Box49, Text as Text52, useInput as useInput15 } from "ink";
32805
+ import { Fragment as Fragment20, jsx as jsx61, jsxs as jsxs50 } from "react/jsx-runtime";
32849
32806
  function OptInAnalyticsScreen({ onDone }) {
32850
32807
  const [loading, setLoading] = useState34(true);
32851
32808
  const [enabled, setEnabled] = useState34(true);
@@ -32861,7 +32818,7 @@ function OptInAnalyticsScreen({ onDone }) {
32861
32818
  });
32862
32819
  });
32863
32820
  }, []);
32864
- useInput16((input, key) => {
32821
+ useInput15((input, key) => {
32865
32822
  if (loading) return;
32866
32823
  if (key.return || input === " ") {
32867
32824
  setEnabled((current) => {
@@ -32877,20 +32834,20 @@ function OptInAnalyticsScreen({ onDone }) {
32877
32834
  }
32878
32835
  });
32879
32836
  return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, 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: [
32837
+ /* @__PURE__ */ jsx61(Text52, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
32838
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
32839
+ loading ? /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
32883
32840
  /* @__PURE__ */ jsxs50(Text52, { children: [
32884
32841
  "Share anonymous usage data:",
32885
32842
  " ",
32886
- /* @__PURE__ */ jsx62(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
32843
+ /* @__PURE__ */ jsx61(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
32887
32844
  ] }),
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." })
32845
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
32846
+ /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
32847
+ /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
32891
32848
  ] }),
32892
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
32893
- /* @__PURE__ */ jsx62(
32849
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
32850
+ /* @__PURE__ */ jsx61(
32894
32851
  ControlHints,
32895
32852
  {
32896
32853
  hints: [
@@ -32912,9 +32869,9 @@ var init_screen11 = __esm({
32912
32869
  });
32913
32870
 
32914
32871
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
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";
32872
+ import { useEffect as useEffect26, useRef as useRef15, useState as useState35 } from "react";
32873
+ import { Box as Box50, Text as Text53, useInput as useInput16 } from "ink";
32874
+ import { Fragment as Fragment21, jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
32918
32875
  function DebugModeScreen({ onDone }) {
32919
32876
  const [setting, setSetting] = useState35(null);
32920
32877
  const [focus, setFocus] = useState35("enabled");
@@ -32922,7 +32879,7 @@ function DebugModeScreen({ onDone }) {
32922
32879
  RETENTION_CHOICES[RETENTION_CHOICES.length - 1]
32923
32880
  );
32924
32881
  const [notice, setNotice] = useState35(null);
32925
- const visit = useRef16({ trail: createTrail(), before: void 0, error: "" }).current;
32882
+ const visit = useRef15({ trail: createTrail(), before: void 0, error: "" }).current;
32926
32883
  useEffect26(() => {
32927
32884
  readDebugModeSetting().then((loaded) => {
32928
32885
  setSetting(loaded);
@@ -32963,7 +32920,7 @@ function DebugModeScreen({ onDone }) {
32963
32920
  exitMethod: change.changed ? "saved" : "discarded"
32964
32921
  });
32965
32922
  };
32966
- useInput17((input, key) => {
32923
+ useInput16((input, key) => {
32967
32924
  if (!setting) return;
32968
32925
  if (key.upArrow || key.downArrow) {
32969
32926
  setFocus((current) => ROWS[(ROWS.indexOf(current) + (key.downArrow ? 1 : ROWS.length - 1)) % ROWS.length]);
@@ -32990,16 +32947,16 @@ function DebugModeScreen({ onDone }) {
32990
32947
  onDone();
32991
32948
  }
32992
32949
  });
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 });
32950
+ const marker = (row) => /* @__PURE__ */ jsx62(Text53, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
32951
+ const label = (row, text) => /* @__PURE__ */ jsx62(Text53, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
32995
32952
  return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
32996
- /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
32997
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
32953
+ /* @__PURE__ */ jsx62(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
32954
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
32998
32955
  setting ? /* @__PURE__ */ jsxs51(Fragment21, { children: [
32999
32956
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
33000
32957
  marker("enabled"),
33001
32958
  label("enabled", "Debug logging:"),
33002
- /* @__PURE__ */ jsx63(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
32959
+ /* @__PURE__ */ jsx62(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
33003
32960
  ] }),
33004
32961
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
33005
32962
  marker("retentionDays"),
@@ -33007,7 +32964,7 @@ function DebugModeScreen({ onDone }) {
33007
32964
  RETENTION_CHOICES.map((days) => {
33008
32965
  const highlighted = focus === "retentionDays" && days === pending;
33009
32966
  const saved = days === setting.retentionDays;
33010
- return /* @__PURE__ */ jsx63(
32967
+ return /* @__PURE__ */ jsx62(
33011
32968
  Text53,
33012
32969
  {
33013
32970
  bold: highlighted || saved,
@@ -33019,15 +32976,15 @@ function DebugModeScreen({ onDone }) {
33019
32976
  );
33020
32977
  })
33021
32978
  ] }),
33022
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
32979
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
33023
32980
  notice ? /* @__PURE__ */ jsxs51(Text53, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
33024
32981
  notice.kind === "success" ? "\u2713" : "\u2717",
33025
32982
  " ",
33026
32983
  notice.text
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(
32984
+ ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
32985
+ ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Loading\u2026" }),
32986
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
32987
+ /* @__PURE__ */ jsx62(
33031
32988
  ControlHints,
33032
32989
  {
33033
32990
  hints: [
@@ -33066,7 +33023,7 @@ __export(app_exports, {
33066
33023
  });
33067
33024
  import { join as join28 } from "node:path";
33068
33025
  import { useEffect as useEffect27, useState as useState36 } from "react";
33069
- import { Fragment as Fragment22, jsx as jsx64 } from "react/jsx-runtime";
33026
+ import { Fragment as Fragment22, jsx as jsx63 } from "react/jsx-runtime";
33070
33027
  function App({ importOptions, inkClear }) {
33071
33028
  const [screen, setScreen] = useState36("start");
33072
33029
  const [importExitCode, setImportExitCode] = useState36();
@@ -33223,9 +33180,9 @@ function App({ importOptions, inkClear }) {
33223
33180
  };
33224
33181
  switch (screen) {
33225
33182
  case "import":
33226
- if (showImportResult) return /* @__PURE__ */ jsx64(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
33183
+ if (showImportResult) return /* @__PURE__ */ jsx63(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
33227
33184
  if (flow && flowStart) {
33228
- return /* @__PURE__ */ jsx64(
33185
+ return /* @__PURE__ */ jsx63(
33229
33186
  FlowScreen,
33230
33187
  {
33231
33188
  state: flow.state,
@@ -33235,12 +33192,12 @@ function App({ importOptions, inkClear }) {
33235
33192
  }
33236
33193
  );
33237
33194
  }
33238
- if (importDefaults === void 0) return /* @__PURE__ */ jsx64(Fragment22, {});
33195
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx63(Fragment22, {});
33239
33196
  if (projectPath === void 0) {
33240
- return /* @__PURE__ */ jsx64(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
33197
+ return /* @__PURE__ */ jsx63(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
33241
33198
  }
33242
33199
  if (tokensPath === void 0) {
33243
- return /* @__PURE__ */ jsx64(
33200
+ return /* @__PURE__ */ jsx63(
33244
33201
  TokenInputScreen,
33245
33202
  {
33246
33203
  initialPath: importDefaults.tokenFile,
@@ -33250,7 +33207,7 @@ function App({ importOptions, inkClear }) {
33250
33207
  );
33251
33208
  }
33252
33209
  if (scannedFiles === void 0) {
33253
- return /* @__PURE__ */ jsx64(
33210
+ return /* @__PURE__ */ jsx63(
33254
33211
  PathValidationScreen,
33255
33212
  {
33256
33213
  projectPath,
@@ -33262,10 +33219,10 @@ function App({ importOptions, inkClear }) {
33262
33219
  }
33263
33220
  if (extractionRun) {
33264
33221
  if (extraction?.status === "done" && !extraction.result.ok) {
33265
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
33222
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
33266
33223
  }
33267
33224
  if (extraction?.status === "running") {
33268
- return /* @__PURE__ */ jsx64(
33225
+ return /* @__PURE__ */ jsx63(
33269
33226
  ExtractionScreen,
33270
33227
  {
33271
33228
  progress: extraction.progress,
@@ -33274,14 +33231,14 @@ function App({ importOptions, inkClear }) {
33274
33231
  }
33275
33232
  );
33276
33233
  }
33277
- return /* @__PURE__ */ jsx64(Fragment22, {});
33234
+ return /* @__PURE__ */ jsx63(Fragment22, {});
33278
33235
  }
33279
33236
  if (scopeRun && scopeFlow) {
33280
33237
  if (scopeFlow.status === "failed") {
33281
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
33238
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
33282
33239
  }
33283
33240
  if (scopeFlow.status === "deciding") {
33284
- return /* @__PURE__ */ jsx64(
33241
+ return /* @__PURE__ */ jsx63(
33285
33242
  ScopeGateScreen,
33286
33243
  {
33287
33244
  components: scopeFlow.load.components,
@@ -33291,7 +33248,7 @@ function App({ importOptions, inkClear }) {
33291
33248
  );
33292
33249
  }
33293
33250
  if (generation?.status === "done" && !generation.result.ok) {
33294
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
33251
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
33295
33252
  }
33296
33253
  if (generation?.status === "running") {
33297
33254
  const hasRawTokens = scopeRun.input.rawTokensPath !== "";
@@ -33299,7 +33256,7 @@ function App({ importOptions, inkClear }) {
33299
33256
  hasRawTokens,
33300
33257
  mapTokensEligible: generation.progress.mapTokensEligible
33301
33258
  });
33302
- return /* @__PURE__ */ jsx64(
33259
+ return /* @__PURE__ */ jsx63(
33303
33260
  GenerationScreen,
33304
33261
  {
33305
33262
  progress: generation.progress,
@@ -33311,10 +33268,10 @@ function App({ importOptions, inkClear }) {
33311
33268
  }
33312
33269
  );
33313
33270
  }
33314
- return /* @__PURE__ */ jsx64(Fragment22, {});
33271
+ return /* @__PURE__ */ jsx63(Fragment22, {});
33315
33272
  }
33316
33273
  if (pendingLaunch?.cached) {
33317
- return /* @__PURE__ */ jsx64(
33274
+ return /* @__PURE__ */ jsx63(
33318
33275
  TokenReuseScreen,
33319
33276
  {
33320
33277
  tokensPath: pendingLaunch.cached.tokensPath,
@@ -33325,7 +33282,7 @@ function App({ importOptions, inkClear }) {
33325
33282
  }
33326
33283
  );
33327
33284
  }
33328
- return /* @__PURE__ */ jsx64(
33285
+ return /* @__PURE__ */ jsx63(
33329
33286
  CredentialsScreen,
33330
33287
  {
33331
33288
  initial: importDefaults.credentials,
@@ -33334,17 +33291,17 @@ function App({ importOptions, inkClear }) {
33334
33291
  }
33335
33292
  );
33336
33293
  case "help":
33337
- return /* @__PURE__ */ jsx64(HelpScreen, { onDone: goToStart });
33294
+ return /* @__PURE__ */ jsx63(HelpScreen, { onDone: goToStart });
33338
33295
  case "settings":
33339
- return /* @__PURE__ */ jsx64(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
33296
+ return /* @__PURE__ */ jsx63(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
33340
33297
  case "settings-configuration":
33341
- return /* @__PURE__ */ jsx64(ConfigurationScreen, { onDone: goToSettings });
33298
+ return /* @__PURE__ */ jsx63(ConfigurationScreen, { onDone: goToSettings });
33342
33299
  case "settings-opt-in-analytics":
33343
- return /* @__PURE__ */ jsx64(OptInAnalyticsScreen, { onDone: goToSettings });
33300
+ return /* @__PURE__ */ jsx63(OptInAnalyticsScreen, { onDone: goToSettings });
33344
33301
  case "settings-debug-mode":
33345
- return /* @__PURE__ */ jsx64(DebugModeScreen, { onDone: goToSettings });
33302
+ return /* @__PURE__ */ jsx63(DebugModeScreen, { onDone: goToSettings });
33346
33303
  case "start":
33347
- return /* @__PURE__ */ jsx64(HomeScreen, { onNavigate: setScreen });
33304
+ return /* @__PURE__ */ jsx63(HomeScreen, { onNavigate: setScreen });
33348
33305
  }
33349
33306
  }
33350
33307
  async function runApp(renderApp, importOptions) {
@@ -33352,7 +33309,7 @@ async function runApp(renderApp, importOptions) {
33352
33309
  instance.clear?.();
33353
33310
  process.stdout.write("\x1B[H\x1B[0J");
33354
33311
  };
33355
- const instance = renderApp(/* @__PURE__ */ jsx64(App, { importOptions, inkClear }));
33312
+ const instance = renderApp(/* @__PURE__ */ jsx63(App, { importOptions, inkClear }));
33356
33313
  await instance.waitUntilExit();
33357
33314
  }
33358
33315
  var init_app = __esm({