@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/app.js CHANGED
@@ -2614,38 +2614,10 @@ function ImportScreen({ exitCode, onDone }) {
2614
2614
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
2615
2615
  import { useState as useState3 } from "react";
2616
2616
  import { Box as Box3, Text as Text4 } from "ink";
2617
-
2618
- // packages/experience-design-system-cli/src/tui/ClearableTextInput.tsx
2619
- import { useRef } from "react";
2620
- import { useInput as useInput3 } from "ink";
2621
2617
  import TextInput from "ink-text-input";
2622
- import { jsx as jsx4 } from "react/jsx-runtime";
2623
- function isClearKey(input, key) {
2624
- return key.ctrl && input === "d";
2625
- }
2626
- function ClearableTextInput({ onChange, ...props }) {
2627
- const justCleared = useRef(false);
2628
- useInput3((input, key) => {
2629
- if (!isClearKey(input, key)) return;
2630
- justCleared.current = true;
2631
- setTimeout(() => {
2632
- justCleared.current = false;
2633
- }, 0);
2634
- onChange("");
2635
- });
2636
- return /* @__PURE__ */ jsx4(
2637
- TextInput,
2638
- {
2639
- ...props,
2640
- onChange: (value) => {
2641
- if (!justCleared.current) onChange(value);
2642
- }
2643
- }
2644
- );
2645
- }
2646
2618
 
2647
2619
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
2648
- import { useInput as useInput4 } from "ink";
2620
+ import { useInput as useInput3 } from "ink";
2649
2621
 
2650
2622
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
2651
2623
  function shouldQuit(key) {
@@ -2659,17 +2631,16 @@ function toProjectPath(value) {
2659
2631
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
2660
2632
  var WELCOME_CONTROLS = [
2661
2633
  { keys: "Enter", label: "Continue" },
2662
- { keys: "Ctrl+D", label: "Clear" },
2663
2634
  { keys: "Esc", label: "Back to menu" }
2664
2635
  ];
2665
2636
  function useWelcomeControls(onQuit) {
2666
- useInput4((_input, key) => {
2637
+ useInput3((_input, key) => {
2667
2638
  if (shouldQuit(key)) onQuit();
2668
2639
  });
2669
2640
  }
2670
2641
 
2671
2642
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
2672
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
2643
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
2673
2644
  var OVERVIEW_BOX_MAX_WIDTH = 90;
2674
2645
  var AI_MARKER = "\u273B";
2675
2646
  var OVERVIEW = [
@@ -2698,8 +2669,8 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
2698
2669
  if (path5) onContinue(path5);
2699
2670
  };
2700
2671
  return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2701
- /* @__PURE__ */ jsx5(Text4, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
2702
- /* @__PURE__ */ jsx5(Box3, { flexDirection: "row", children: /* @__PURE__ */ jsxs3(
2672
+ /* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
2673
+ /* @__PURE__ */ jsx4(Box3, { flexDirection: "row", children: /* @__PURE__ */ jsxs3(
2703
2674
  Box3,
2704
2675
  {
2705
2676
  flexDirection: "column",
@@ -2711,29 +2682,29 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
2711
2682
  flexShrink: 1,
2712
2683
  children: [
2713
2684
  OVERVIEW.map((item) => /* @__PURE__ */ jsxs3(Box3, { gap: 1, children: [
2714
- /* @__PURE__ */ jsx5(Box3, { flexShrink: 0, children: /* @__PURE__ */ jsx5(Text4, { bold: true, children: item.label }) }),
2715
- /* @__PURE__ */ jsx5(Text4, { color: PALETTE.muted, wrap: "truncate-end", children: item.description }),
2716
- item.ai && /* @__PURE__ */ jsx5(Text4, { bold: true, color: PALETTE.accent, children: AI_MARKER })
2685
+ /* @__PURE__ */ jsx4(Box3, { flexShrink: 0, children: /* @__PURE__ */ jsx4(Text4, { bold: true, children: item.label }) }),
2686
+ /* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, wrap: "truncate-end", children: item.description }),
2687
+ item.ai && /* @__PURE__ */ jsx4(Text4, { bold: true, color: PALETTE.accent, children: AI_MARKER })
2717
2688
  ] }, item.label)),
2718
2689
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", marginTop: 1, children: [
2719
2690
  /* @__PURE__ */ jsxs3(Text4, { bold: true, children: [
2720
- /* @__PURE__ */ jsx5(Text4, { color: PALETTE.accent, children: AI_MARKER }),
2691
+ /* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: AI_MARKER }),
2721
2692
  " AI disclosure"
2722
2693
  ] }),
2723
- AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx5(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
2694
+ AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx4(Text4, { color: PALETTE.muted, children: paragraph }, paragraph))
2724
2695
  ] })
2725
2696
  ]
2726
2697
  }
2727
2698
  ) }),
2728
2699
  /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", gap: 1, children: [
2729
- /* @__PURE__ */ jsx5(Text4, { children: "Where is your component library?" }),
2700
+ /* @__PURE__ */ jsx4(Text4, { children: "Where is your component library?" }),
2730
2701
  /* @__PURE__ */ jsxs3(Box3, { children: [
2731
- /* @__PURE__ */ jsx5(Text4, { color: PALETTE.accent, children: "? " }),
2732
- /* @__PURE__ */ jsx5(Text4, { children: "Project path: " }),
2733
- /* @__PURE__ */ jsx5(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
2702
+ /* @__PURE__ */ jsx4(Text4, { color: PALETTE.accent, children: "? " }),
2703
+ /* @__PURE__ */ jsx4(Text4, { children: "Project path: " }),
2704
+ /* @__PURE__ */ jsx4(TextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
2734
2705
  ] })
2735
2706
  ] }),
2736
- /* @__PURE__ */ jsx5(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
2707
+ /* @__PURE__ */ jsx4(Box3, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs3(Text4, { children: [
2737
2708
  "[",
2738
2709
  control.keys,
2739
2710
  "] ",
@@ -2745,9 +2716,10 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
2745
2716
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
2746
2717
  import { useState as useState4 } from "react";
2747
2718
  import { Box as Box4, Text as Text5 } from "ink";
2719
+ import TextInput2 from "ink-text-input";
2748
2720
 
2749
2721
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
2750
- import { useInput as useInput5 } from "ink";
2722
+ import { useInput as useInput4 } from "ink";
2751
2723
 
2752
2724
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/logic.ts
2753
2725
  function shouldGoBack(key) {
@@ -2761,11 +2733,10 @@ function toTokenPath(value) {
2761
2733
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
2762
2734
  var TOKEN_INPUT_CONTROLS = [
2763
2735
  { keys: "Enter", label: "Continue" },
2764
- { keys: "Ctrl+D", label: "Clear" },
2765
2736
  { keys: "Esc", label: "Back" }
2766
2737
  ];
2767
2738
  function useTokenInputControls(onBack) {
2768
- useInput5((_input, key) => {
2739
+ useInput4((_input, key) => {
2769
2740
  if (shouldGoBack(key)) onBack();
2770
2741
  });
2771
2742
  }
@@ -2810,7 +2781,7 @@ function validateTokenPath(rawPath) {
2810
2781
  }
2811
2782
 
2812
2783
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
2813
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
2784
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
2814
2785
  function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2815
2786
  const [tokenPath, setTokenPath] = useState4(initialPath);
2816
2787
  const [failure, setFailure] = useState4(null);
@@ -2830,13 +2801,13 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2830
2801
  else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
2831
2802
  };
2832
2803
  return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2833
- /* @__PURE__ */ jsx6(Text5, { bold: true, children: "Design tokens" }),
2834
- /* @__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)." }),
2804
+ /* @__PURE__ */ jsx5(Text5, { bold: true, children: "Design tokens" }),
2805
+ /* @__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)." }),
2835
2806
  /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
2836
2807
  /* @__PURE__ */ jsxs4(Box4, { gap: 1, children: [
2837
- /* @__PURE__ */ jsx6(Text5, { color: PALETTE.accent, children: "?" }),
2838
- /* @__PURE__ */ jsx6(Text5, { children: "Token path:" }),
2839
- /* @__PURE__ */ jsx6(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
2808
+ /* @__PURE__ */ jsx5(Text5, { color: PALETTE.accent, children: "?" }),
2809
+ /* @__PURE__ */ jsx5(Text5, { children: "Token path:" }),
2810
+ /* @__PURE__ */ jsx5(TextInput2, { value: tokenPath, onChange: change, onSubmit: submit })
2840
2811
  ] }),
2841
2812
  failure && /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
2842
2813
  /* @__PURE__ */ jsxs4(Text5, { color: PALETTE.error, children: [
@@ -2849,7 +2820,7 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2849
2820
  ] })
2850
2821
  ] })
2851
2822
  ] }),
2852
- /* @__PURE__ */ jsx6(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
2823
+ /* @__PURE__ */ jsx5(Box4, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
2853
2824
  "[",
2854
2825
  control.keys,
2855
2826
  "] ",
@@ -2863,7 +2834,7 @@ import { useEffect as useEffect3, useMemo, useState as useState5 } from "react";
2863
2834
  import { Box as Box5, Text as Text6 } from "ink";
2864
2835
 
2865
2836
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
2866
- import { useInput as useInput6 } from "ink";
2837
+ import { useInput as useInput5 } from "ink";
2867
2838
 
2868
2839
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/logic.ts
2869
2840
  var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
@@ -2951,7 +2922,7 @@ function controlsFor(phase) {
2951
2922
  return CONTROLS[phase];
2952
2923
  }
2953
2924
  function usePathValidationControls(phase, handlers) {
2954
- useInput6((input, key) => {
2925
+ useInput5((input, key) => {
2955
2926
  const action = keyAction(phase, input, key);
2956
2927
  if (action === "confirm") handlers.onConfirm();
2957
2928
  else if (action === "change-path") handlers.onChangePath();
@@ -16737,7 +16708,7 @@ function foldSvelteAndMdIntoOther(counts) {
16737
16708
  }
16738
16709
 
16739
16710
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
16740
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
16711
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
16741
16712
  function Row({ row }) {
16742
16713
  return /* @__PURE__ */ jsxs5(Text6, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
16743
16714
  " \u2022 ",
@@ -16753,7 +16724,7 @@ function Failure({ scan, path: path5 }) {
16753
16724
  "\u2717 ",
16754
16725
  headline
16755
16726
  ] }),
16756
- hints.map((hint) => /* @__PURE__ */ jsx7(Text6, { color: PALETTE.muted, children: hint }, hint))
16727
+ hints.map((hint) => /* @__PURE__ */ jsx6(Text6, { color: PALETTE.muted, children: hint }, hint))
16757
16728
  ] });
16758
16729
  }
16759
16730
  function Summary({ scan, path: path5 }) {
@@ -16761,7 +16732,7 @@ function Summary({ scan, path: path5 }) {
16761
16732
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, children: [
16762
16733
  /* @__PURE__ */ jsxs5(Text6, { children: [
16763
16734
  "Scanned ",
16764
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: path5 })
16735
+ /* @__PURE__ */ jsx6(Text6, { bold: true, children: path5 })
16765
16736
  ] }),
16766
16737
  /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
16767
16738
  /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.success, children: [
@@ -16769,13 +16740,13 @@ function Summary({ scan, path: path5 }) {
16769
16740
  total,
16770
16741
  " files:"
16771
16742
  ] }),
16772
- rows.map((row) => /* @__PURE__ */ jsx7(Row, { row }, row.label))
16743
+ rows.map((row) => /* @__PURE__ */ jsx6(Row, { row }, row.label))
16773
16744
  ] }),
16774
16745
  warning && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.warning, children: [
16775
16746
  "\u26A0 ",
16776
16747
  warning
16777
16748
  ] }),
16778
- /* @__PURE__ */ jsx7(Text6, { children: "Does this look right?" })
16749
+ /* @__PURE__ */ jsx6(Text6, { children: "Does this look right?" })
16779
16750
  ] });
16780
16751
  }
16781
16752
  function PathValidationScreen({
@@ -16800,12 +16771,12 @@ function PathValidationScreen({
16800
16771
  return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
16801
16772
  scan === void 0 && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
16802
16773
  "Scanning ",
16803
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: resolvedPath }),
16774
+ /* @__PURE__ */ jsx6(Text6, { bold: true, children: resolvedPath }),
16804
16775
  "..."
16805
16776
  ] }),
16806
- scan?.ok === false && /* @__PURE__ */ jsx7(Failure, { scan, path: resolvedPath }),
16807
- scan?.ok === true && /* @__PURE__ */ jsx7(Summary, { scan, path: resolvedPath }),
16808
- /* @__PURE__ */ jsx7(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
16777
+ scan?.ok === false && /* @__PURE__ */ jsx6(Failure, { scan, path: resolvedPath }),
16778
+ scan?.ok === true && /* @__PURE__ */ jsx6(Summary, { scan, path: resolvedPath }),
16779
+ /* @__PURE__ */ jsx6(Box5, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
16809
16780
  "[",
16810
16781
  control.keys,
16811
16782
  "] ",
@@ -16815,12 +16786,12 @@ function PathValidationScreen({
16815
16786
  }
16816
16787
 
16817
16788
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
16818
- import { useRef as useRef2, useState as useState6 } from "react";
16789
+ import { useRef, useState as useState6 } from "react";
16819
16790
  import { Box as Box6, Text as Text7 } from "ink";
16820
- import TextInput2 from "ink-text-input";
16791
+ import TextInput3 from "ink-text-input";
16821
16792
 
16822
16793
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/controls.ts
16823
- import { useInput as useInput7 } from "ink";
16794
+ import { useInput as useInput6 } from "ink";
16824
16795
 
16825
16796
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/logic.ts
16826
16797
  var FIELDS = ["spaceId", "environmentId", "cmaToken", "host"];
@@ -16856,7 +16827,7 @@ var CREDENTIALS_CONTROLS = [
16856
16827
  { keys: "Esc", label: "Back" }
16857
16828
  ];
16858
16829
  function useCredentialsControls(handlers) {
16859
- useInput7((input, key) => {
16830
+ useInput6((input, key) => {
16860
16831
  if (handlers.disabled) return;
16861
16832
  const action = keyAction2(input, key);
16862
16833
  if (action === "back") handlers.onBack();
@@ -16900,7 +16871,7 @@ function toUserError(error, host) {
16900
16871
  }
16901
16872
 
16902
16873
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
16903
- import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
16874
+ import { Fragment, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
16904
16875
  var LABELS = {
16905
16876
  spaceId: "Space ID",
16906
16877
  environmentId: "Environment",
@@ -16913,7 +16884,7 @@ function CredentialsScreen({
16913
16884
  initial = {},
16914
16885
  validate: validate3 = validateCredentials
16915
16886
  }) {
16916
- const initialValues = useRef2(
16887
+ const initialValues = useRef(
16917
16888
  normalize({
16918
16889
  spaceId: initial.spaceId ?? "",
16919
16890
  environmentId: initial.environmentId || "master",
@@ -16954,21 +16925,21 @@ function CredentialsScreen({
16954
16925
  };
16955
16926
  return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
16956
16927
  /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
16957
- /* @__PURE__ */ jsx8(Text7, { bold: true, children: "Contentful credentials" }),
16958
- /* @__PURE__ */ jsx8(Text7, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
16928
+ /* @__PURE__ */ jsx7(Text7, { bold: true, children: "Contentful credentials" }),
16929
+ /* @__PURE__ */ jsx7(Text7, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
16959
16930
  !prefilled && /* @__PURE__ */ jsxs6(Fragment, { children: [
16960
- /* @__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." }),
16961
- /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
16931
+ /* @__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." }),
16932
+ /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
16962
16933
  ] })
16963
16934
  ] }),
16964
- /* @__PURE__ */ jsx8(Box6, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs6(Box6, { gap: 1, children: [
16965
- /* @__PURE__ */ jsx8(Text7, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
16935
+ /* @__PURE__ */ jsx7(Box6, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs6(Box6, { gap: 1, children: [
16936
+ /* @__PURE__ */ jsx7(Text7, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
16966
16937
  /* @__PURE__ */ jsxs6(Text7, { bold: active === field, children: [
16967
16938
  LABELS[field],
16968
16939
  ":"
16969
16940
  ] }),
16970
- /* @__PURE__ */ jsx8(
16971
- TextInput2,
16941
+ /* @__PURE__ */ jsx7(
16942
+ TextInput3,
16972
16943
  {
16973
16944
  value: values[field],
16974
16945
  focus: active === field && !validating,
@@ -16979,14 +16950,14 @@ function CredentialsScreen({
16979
16950
  }
16980
16951
  )
16981
16952
  ] }, field)) }),
16982
- active === "host" && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
16953
+ active === "host" && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
16983
16954
  error && /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.error, children: [
16984
16955
  "\u2717 ",
16985
16956
  error
16986
16957
  ] }),
16987
- validating && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.accent, children: "Validating credentials..." }),
16988
- !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
16989
- /* @__PURE__ */ jsx8(Box6, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
16958
+ validating && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.accent, children: "Validating credentials..." }),
16959
+ !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
16960
+ /* @__PURE__ */ jsx7(Box6, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
16990
16961
  "[",
16991
16962
  control.keys,
16992
16963
  "] ",
@@ -16999,7 +16970,7 @@ function CredentialsScreen({
16999
16970
  import { Box as Box7, Text as Text8 } from "ink";
17000
16971
 
17001
16972
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
17002
- import { useInput as useInput8 } from "ink";
16973
+ import { useInput as useInput7 } from "ink";
17003
16974
 
17004
16975
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/logic.ts
17005
16976
  function errorAction(input, key, available) {
@@ -17018,7 +16989,7 @@ function errorControls(available) {
17018
16989
 
17019
16990
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
17020
16991
  function useErrorControls(handlers) {
17021
- useInput8((input, key) => {
16992
+ useInput7((input, key) => {
17022
16993
  const action = errorAction(input, key, {
17023
16994
  canRetry: handlers.onRetry !== void 0,
17024
16995
  canAcknowledge: handlers.onAcknowledge !== void 0
@@ -17030,7 +17001,7 @@ function useErrorControls(handlers) {
17030
17001
  }
17031
17002
 
17032
17003
  // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
17033
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
17004
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
17034
17005
  function ErrorStep({
17035
17006
  stepName,
17036
17007
  message,
@@ -17049,8 +17020,8 @@ function ErrorStep({
17049
17020
  stepName,
17050
17021
  " failed"
17051
17022
  ] }),
17052
- /* @__PURE__ */ jsx9(Text8, { color: PALETTE.error, children: message }),
17053
- /* @__PURE__ */ jsx9(Box7, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
17023
+ /* @__PURE__ */ jsx8(Text8, { color: PALETTE.error, children: message }),
17024
+ /* @__PURE__ */ jsx8(Box7, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
17054
17025
  "[",
17055
17026
  control.keys,
17056
17027
  "] ",
@@ -17063,7 +17034,7 @@ function ErrorStep({
17063
17034
  import { Box as Box8, Text as Text9 } from "ink";
17064
17035
 
17065
17036
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
17066
- import { useInput as useInput9 } from "ink";
17037
+ import { useInput as useInput8 } from "ink";
17067
17038
 
17068
17039
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/logic.ts
17069
17040
  function gateAction(input, key, canSkip) {
@@ -17082,7 +17053,7 @@ function gateControls(continueLabel, skipLabel2, canSkip) {
17082
17053
 
17083
17054
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
17084
17055
  function useGateControls(handlers) {
17085
- useInput9((input, key) => {
17056
+ useInput8((input, key) => {
17086
17057
  const action = gateAction(input, key, handlers.canSkip);
17087
17058
  if (action === "continue") handlers.onContinue();
17088
17059
  else if (action === "skip") handlers.onSkip();
@@ -17091,7 +17062,7 @@ function useGateControls(handlers) {
17091
17062
  }
17092
17063
 
17093
17064
  // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
17094
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
17065
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
17095
17066
  function GateStep({
17096
17067
  message,
17097
17068
  onContinue,
@@ -17113,9 +17084,9 @@ function GateStep({
17113
17084
  " ",
17114
17085
  message
17115
17086
  ] }),
17116
- summary && /* @__PURE__ */ jsx10(Text9, { color: PALETTE.muted, children: summary }),
17117
- context && /* @__PURE__ */ jsx10(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx10(Text9, { children: context }) }),
17118
- /* @__PURE__ */ jsx10(Box8, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs8(Text9, { color: PALETTE.muted, children: [
17087
+ summary && /* @__PURE__ */ jsx9(Text9, { color: PALETTE.muted, children: summary }),
17088
+ context && /* @__PURE__ */ jsx9(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx9(Text9, { children: context }) }),
17089
+ /* @__PURE__ */ jsx9(Box8, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs8(Text9, { color: PALETTE.muted, children: [
17119
17090
  "[",
17120
17091
  control.keys,
17121
17092
  "] ",
@@ -17166,25 +17137,25 @@ function useElapsed() {
17166
17137
  }
17167
17138
 
17168
17139
  // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
17169
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
17140
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
17170
17141
  var RULE = "\u2500".repeat(40);
17171
17142
  function Line({ line }) {
17172
17143
  if (line.progress) {
17173
17144
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, children: [
17174
17145
  /* @__PURE__ */ jsxs9(Box9, { gap: 2, children: [
17175
- /* @__PURE__ */ jsx11(Box9, { width: 40, children: /* @__PURE__ */ jsx11(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx11(ProgressBar, { value: progressPercent(line.progress) }) }) }),
17146
+ /* @__PURE__ */ jsx10(Box9, { width: 40, children: /* @__PURE__ */ jsx10(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx10(ProgressBar, { value: progressPercent(line.progress) }) }) }),
17176
17147
  /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
17177
17148
  line.progress.done,
17178
17149
  "/",
17179
17150
  line.progress.total
17180
17151
  ] })
17181
17152
  ] }),
17182
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
17153
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
17183
17154
  ] });
17184
17155
  }
17185
17156
  return /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
17186
- line.complete ? /* @__PURE__ */ jsx11(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx11(Spinner, {}),
17187
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: line.text })
17157
+ line.complete ? /* @__PURE__ */ jsx10(Text10, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx10(Spinner, {}),
17158
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: line.text })
17188
17159
  ] });
17189
17160
  }
17190
17161
  function RunningStep({
@@ -17197,13 +17168,13 @@ function RunningStep({
17197
17168
  const elapsed = useElapsed();
17198
17169
  return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17199
17170
  /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
17200
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: RULE }),
17201
- /* @__PURE__ */ jsx11(Text10, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
17202
- /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: RULE })
17171
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: RULE }),
17172
+ /* @__PURE__ */ jsx10(Text10, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
17173
+ /* @__PURE__ */ jsx10(Text10, { color: PALETTE.muted, children: RULE })
17203
17174
  ] }),
17204
- /* @__PURE__ */ jsx11(Text10, { children: description }),
17205
- /* @__PURE__ */ jsx11(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx11(Line, { line }, index)) }),
17206
- /* @__PURE__ */ jsx11(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
17175
+ /* @__PURE__ */ jsx10(Text10, { children: description }),
17176
+ /* @__PURE__ */ jsx10(Box9, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx10(Line, { line }, index)) }),
17177
+ /* @__PURE__ */ jsx10(Box9, { marginTop: 1, children: /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
17207
17178
  "Elapsed: ",
17208
17179
  elapsed
17209
17180
  ] }) })
@@ -17257,7 +17228,7 @@ Tokens Path: ${tokensPath}`;
17257
17228
  }
17258
17229
 
17259
17230
  // packages/experience-design-system-cli/src/tui/import/steps/05-token-reuse/screen.tsx
17260
- import { jsx as jsx12 } from "react/jsx-runtime";
17231
+ import { jsx as jsx11 } from "react/jsx-runtime";
17261
17232
  function TokenReuseScreen({
17262
17233
  tokensPath,
17263
17234
  sourceChanged,
@@ -17266,7 +17237,7 @@ function TokenReuseScreen({
17266
17237
  onQuit
17267
17238
  }) {
17268
17239
  const { summary, context } = gateText({ tokensPath, sourceChanged });
17269
- return /* @__PURE__ */ jsx12(
17240
+ return /* @__PURE__ */ jsx11(
17270
17241
  GateStep,
17271
17242
  {
17272
17243
  message: "Existing tokens.json found",
@@ -17370,14 +17341,14 @@ function resolveAgentChoice(flag, stored) {
17370
17341
  }
17371
17342
 
17372
17343
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
17373
- import { jsx as jsx13 } from "react/jsx-runtime";
17344
+ import { jsx as jsx12 } from "react/jsx-runtime";
17374
17345
  function ExtractionScreen({
17375
17346
  progress,
17376
17347
  agent,
17377
17348
  stepNumber,
17378
17349
  totalSteps
17379
17350
  }) {
17380
- return /* @__PURE__ */ jsx13(
17351
+ return /* @__PURE__ */ jsx12(
17381
17352
  RunningStep,
17382
17353
  {
17383
17354
  stepNumber,
@@ -17393,7 +17364,7 @@ function ExtractionScreen({
17393
17364
  init_config();
17394
17365
 
17395
17366
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/use-extraction.ts
17396
- import { useEffect as useEffect5, useRef as useRef3, useState as useState8 } from "react";
17367
+ import { useEffect as useEffect5, useRef as useRef2, useState as useState8 } from "react";
17397
17368
 
17398
17369
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/run.ts
17399
17370
  import { mkdir as mkdir7 } from "node:fs/promises";
@@ -17651,7 +17622,7 @@ async function resolveSelectionPrompt(overrides) {
17651
17622
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/use-extraction.ts
17652
17623
  function useExtraction(input) {
17653
17624
  const [state2, setState] = useState8();
17654
- const current = useRef3();
17625
+ const current = useRef2();
17655
17626
  useEffect5(() => {
17656
17627
  current.current = input;
17657
17628
  if (!input) {
@@ -17682,7 +17653,7 @@ function useExtraction(input) {
17682
17653
  import { Box as Box20, Text as Text22 } from "ink";
17683
17654
 
17684
17655
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
17685
- import React7 from "react";
17656
+ import React6 from "react";
17686
17657
  import { Box as Box11, Text as Text12 } from "ink";
17687
17658
  import figures from "figures";
17688
17659
 
@@ -17801,7 +17772,7 @@ function computeColumnWindow(total, cursor, visibleCount) {
17801
17772
 
17802
17773
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
17803
17774
  import { Box as Box10, Text as Text11 } from "ink";
17804
- import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
17775
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
17805
17776
  var MIN_TERMINAL_PANEL_HEIGHT = 5;
17806
17777
  function terminalPanelHeight(rows, reservedRows = 4) {
17807
17778
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
@@ -17817,7 +17788,7 @@ function FixedPanel({
17817
17788
  clipOverflow = true,
17818
17789
  children
17819
17790
  }) {
17820
- return /* @__PURE__ */ jsx14(
17791
+ return /* @__PURE__ */ jsx13(
17821
17792
  Box10,
17822
17793
  {
17823
17794
  flexDirection: "column",
@@ -17843,7 +17814,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
17843
17814
  ...height === void 0 ? {} : { height },
17844
17815
  focused,
17845
17816
  children: [
17846
- title && /* @__PURE__ */ jsx14(WindowedPanelHeader, { title, width, focused }),
17817
+ title && /* @__PURE__ */ jsx13(WindowedPanelHeader, { title, width, focused }),
17847
17818
  children
17848
17819
  ]
17849
17820
  }
@@ -17855,8 +17826,8 @@ function WindowedPanelHeader({
17855
17826
  focused
17856
17827
  }) {
17857
17828
  return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
17858
- /* @__PURE__ */ jsx14(Text11, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
17859
- /* @__PURE__ */ jsx14(Text11, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
17829
+ /* @__PURE__ */ jsx13(Text11, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
17830
+ /* @__PURE__ */ jsx13(Text11, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
17860
17831
  ] });
17861
17832
  }
17862
17833
  function formatWindowIndicator(direction, count) {
@@ -17864,32 +17835,32 @@ function formatWindowIndicator(direction, count) {
17864
17835
  return `${direction === "up" ? "\u2191" : "\u2193"} ${count} more`;
17865
17836
  }
17866
17837
  function WindowIndicator({ direction, count }) {
17867
- return /* @__PURE__ */ jsx14(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
17838
+ return /* @__PURE__ */ jsx13(Text11, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
17868
17839
  }
17869
17840
 
17870
17841
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
17871
- import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
17842
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
17872
17843
  function AddedColumn(props) {
17873
17844
  const { title, width, height, entries, cursor, focused, aiFlaggedByKey, visibleCount } = props;
17874
17845
  const reserveAiBadge = entries.some((e) => aiFlaggedByKey?.get(e.name) === true);
17875
17846
  const firstNonCycleIdx = entries.findIndex((e) => !e.isCycle);
17876
17847
  const window = computeColumnWindow(entries.length, cursor, Math.max(1, visibleCount));
17877
17848
  return /* @__PURE__ */ jsxs11(WindowedPanel, { width, height, title, focused, children: [
17878
- /* @__PURE__ */ jsx15(WindowIndicator, { direction: "up", count: window.above }),
17879
- entries.length === 0 ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
17849
+ /* @__PURE__ */ jsx14(WindowIndicator, { direction: "up", count: window.above }),
17850
+ entries.length === 0 ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
17880
17851
  const i = window.start + vi;
17881
17852
  const isSelected = i === cursor;
17882
17853
  const isCursor = focused && isSelected;
17883
17854
  const aiFlagged = aiFlaggedByKey?.get(entry.name) === true;
17884
17855
  const showSeparator = firstNonCycleIdx > 0 && i === firstNonCycleIdx;
17885
17856
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
17886
- return /* @__PURE__ */ jsxs11(React7.Fragment, { children: [
17887
- showSeparator && /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
17857
+ return /* @__PURE__ */ jsxs11(React6.Fragment, { children: [
17858
+ showSeparator && /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
17888
17859
  /* @__PURE__ */ jsxs11(Box11, { children: [
17889
- isCursor ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx15(Text12, { children: " " }),
17890
- reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx15(Text12, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx15(Text12, { children: " " })),
17891
- entry.isCycle && /* @__PURE__ */ jsx15(Text12, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
17892
- /* @__PURE__ */ jsx15(
17860
+ isCursor ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx14(Text12, { children: " " }),
17861
+ reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx14(Text12, { children: " " })),
17862
+ entry.isCycle && /* @__PURE__ */ jsx14(Text12, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
17863
+ /* @__PURE__ */ jsx14(
17893
17864
  Text12,
17894
17865
  {
17895
17866
  color: style.nameColor,
@@ -17903,14 +17874,14 @@ function AddedColumn(props) {
17903
17874
  ] })
17904
17875
  ] }, entry.name);
17905
17876
  }),
17906
- /* @__PURE__ */ jsx15(WindowIndicator, { direction: "down", count: window.below })
17877
+ /* @__PURE__ */ jsx14(WindowIndicator, { direction: "down", count: window.below })
17907
17878
  ] });
17908
17879
  }
17909
17880
 
17910
17881
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
17911
17882
  import { Box as Box12, Text as Text13 } from "ink";
17912
17883
  import figures2 from "figures";
17913
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
17884
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
17914
17885
  function cycleLabel(cycle, index) {
17915
17886
  const parts = [];
17916
17887
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -17922,28 +17893,28 @@ function cycleLabel(cycle, index) {
17922
17893
  }
17923
17894
  function CyclesPanel({ cycles, cursor }) {
17924
17895
  return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
17925
- /* @__PURE__ */ jsx16(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
17926
- /* @__PURE__ */ jsx16(Text13, { children: " " }),
17896
+ /* @__PURE__ */ jsx15(Text13, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
17897
+ /* @__PURE__ */ jsx15(Text13, { children: " " }),
17927
17898
  cycles.map((cycle, i) => {
17928
17899
  const isCursor = i === cursor;
17929
17900
  return /* @__PURE__ */ jsxs12(Text13, { children: [
17930
- isCursor ? /* @__PURE__ */ jsx16(Text13, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx16(Text13, { children: " " }),
17931
- /* @__PURE__ */ jsx16(Text13, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
17901
+ isCursor ? /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx15(Text13, { children: " " }),
17902
+ /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
17932
17903
  ] }, i);
17933
17904
  }),
17934
- /* @__PURE__ */ jsx16(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
17905
+ /* @__PURE__ */ jsx15(Text13, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
17935
17906
  ] });
17936
17907
  }
17937
17908
 
17938
17909
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
17939
17910
  import { Box as Box13, Text as Text14 } from "ink";
17940
- import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
17911
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
17941
17912
  function RejectPrompt({ pending }) {
17942
17913
  return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
17943
- /* @__PURE__ */ jsx17(Text14, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
17944
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx17(Text14, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
17945
- pending.descendants.length > 0 && /* @__PURE__ */ jsx17(Text14, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
17946
- /* @__PURE__ */ jsx17(Text14, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
17914
+ /* @__PURE__ */ jsx16(Text14, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
17915
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx16(Text14, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
17916
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx16(Text14, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
17917
+ /* @__PURE__ */ jsx16(Text14, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
17947
17918
  ] });
17948
17919
  }
17949
17920
 
@@ -17952,11 +17923,11 @@ import { Box as Box14 } from "ink";
17952
17923
 
17953
17924
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/LegendEntry.tsx
17954
17925
  import { Text as Text15 } from "ink";
17955
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
17926
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
17956
17927
  function legendEntry(keyBracket, label, active = false) {
17957
17928
  return /* @__PURE__ */ jsxs14(Text15, { children: [
17958
- /* @__PURE__ */ jsx18(Text15, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
17959
- /* @__PURE__ */ jsx18(Text15, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
17929
+ /* @__PURE__ */ jsx17(Text15, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
17930
+ /* @__PURE__ */ jsx17(Text15, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
17960
17931
  ] }, keyBracket + label);
17961
17932
  }
17962
17933
 
@@ -17976,7 +17947,7 @@ function CompactControlBar({ hasGroupRoots, searchActive }) {
17976
17947
 
17977
17948
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
17978
17949
  import { Box as Box15, Text as Text16 } from "ink";
17979
- import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
17950
+ import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
17980
17951
  function CounterStrip(props) {
17981
17952
  const { counters, totalWidth } = props;
17982
17953
  const condensed = totalWidth < 60;
@@ -17984,32 +17955,32 @@ function CounterStrip(props) {
17984
17955
  const labelRej = condensed ? "Rej" : "Rejected";
17985
17956
  const labelUnd = condensed ? "Und" : "Undecided";
17986
17957
  const sep = condensed ? " | " : " ";
17987
- return /* @__PURE__ */ jsx19(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
17958
+ return /* @__PURE__ */ jsx18(Box15, { children: /* @__PURE__ */ jsxs16(Text16, { children: [
17988
17959
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
17989
17960
  labelGrp,
17990
17961
  " "
17991
17962
  ] }),
17992
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.groups }),
17993
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
17963
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.groups }),
17964
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
17994
17965
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
17995
17966
  labelRej,
17996
17967
  " "
17997
17968
  ] }),
17998
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.rejected }),
17999
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep }),
17969
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.rejected }),
17970
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep }),
18000
17971
  /* @__PURE__ */ jsxs16(Text16, { color: PALETTE2.muted, children: [
18001
17972
  labelUnd,
18002
17973
  " "
18003
17974
  ] }),
18004
- /* @__PURE__ */ jsx19(Text16, { bold: true, children: counters.undecided }),
18005
- /* @__PURE__ */ jsx19(Text16, { color: PALETTE2.muted, children: sep })
17975
+ /* @__PURE__ */ jsx18(Text16, { bold: true, children: counters.undecided }),
17976
+ /* @__PURE__ */ jsx18(Text16, { color: PALETTE2.muted, children: sep })
18006
17977
  ] }) });
18007
17978
  }
18008
17979
 
18009
17980
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
18010
17981
  import figures3 from "figures";
18011
17982
  import { Box as Box16, Text as Text17 } from "ink";
18012
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
17983
+ import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
18013
17984
  var DEFAULT_MAX_ROWS = 15;
18014
17985
  function windowStart(rowCount, highlightIndex, maxRows) {
18015
17986
  if (rowCount <= maxRows) return 0;
@@ -18021,8 +17992,8 @@ function windowStart(rowCount, highlightIndex, maxRows) {
18021
17992
  }
18022
17993
  function defaultRenderRow(row, index, isCursor) {
18023
17994
  return /* @__PURE__ */ jsxs17(Text17, { children: [
18024
- isCursor ? /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx20(Text17, { children: " " }),
18025
- /* @__PURE__ */ jsx20(Text17, { inverse: isCursor, children: " " + row.label })
17995
+ isCursor ? /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx19(Text17, { children: " " }),
17996
+ /* @__PURE__ */ jsx19(Text17, { inverse: isCursor, children: " " + row.label })
18026
17997
  ] }, index);
18027
17998
  }
18028
17999
  function GotoBanner({
@@ -18052,14 +18023,14 @@ function GotoBanner({
18052
18023
  width,
18053
18024
  flexShrink: 0,
18054
18025
  children: [
18055
- /* @__PURE__ */ jsx20(Text17, { bold: true, children: title }),
18056
- moreAbove > 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
18026
+ /* @__PURE__ */ jsx19(Text17, { bold: true, children: title }),
18027
+ moreAbove > 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
18057
18028
  visible.map((row, vi) => {
18058
18029
  const i = start + vi;
18059
18030
  return renderRow(row, i, i === highlightIndex);
18060
18031
  }),
18061
- moreBelow > 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
18062
- footerHint !== void 0 && /* @__PURE__ */ jsx20(Text17, { color: PALETTE2.muted, children: footerHint })
18032
+ moreBelow > 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
18033
+ footerHint !== void 0 && /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: footerHint })
18063
18034
  ]
18064
18035
  }
18065
18036
  );
@@ -18408,7 +18379,7 @@ function findSharedDeps(closures) {
18408
18379
 
18409
18380
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
18410
18381
  import { Text as Text18 } from "ink";
18411
- import { jsx as jsx21 } from "react/jsx-runtime";
18382
+ import { jsx as jsx20 } from "react/jsx-runtime";
18412
18383
  function previewBadge(annotation) {
18413
18384
  switch (annotation) {
18414
18385
  case "new":
@@ -18427,17 +18398,20 @@ function PreviewBadge({
18427
18398
  badge,
18428
18399
  highlighted = false
18429
18400
  }) {
18430
- return badge ? /* @__PURE__ */ jsx21(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx21(Text18, { children: " " });
18401
+ return badge ? /* @__PURE__ */ jsx20(Text18, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx20(Text18, { children: " " });
18431
18402
  }
18432
18403
 
18433
18404
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
18434
- import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
18405
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
18435
18406
  var GLYPH_EXPAND_COLLAPSED = "\u25B8";
18436
18407
  var GLYPH_EXPAND_EXPANDED = "\u25BE";
18437
18408
  var GLYPH_TREE_MID = "\u251C\u2500";
18438
18409
  var GLYPH_TREE_LAST = "\u2514\u2500";
18439
18410
  var GLYPH_WARN = "\u26A0";
18440
18411
  var GLYPH_ERROR = "\u2717";
18412
+ function hasDirectChild(node) {
18413
+ return node.slots.some((slot) => (slot.allowedComponents ?? []).some((target) => target !== node.name));
18414
+ }
18441
18415
  function isEmpty(entry) {
18442
18416
  return Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
18443
18417
  }
@@ -18480,10 +18454,12 @@ function buildVisibleRows(props) {
18480
18454
  otherKeys2.sort();
18481
18455
  const otherKeySet2 = new Set(otherKeys2);
18482
18456
  const flatGraph = graph.filter((n) => otherKeySet2.has(n.name));
18483
- const closures2 = computeAllClosures(flatGraph);
18484
18457
  const depCountByKey = /* @__PURE__ */ new Map();
18485
- for (const [name, closure] of closures2) {
18486
- if (closure.nodes.length > 1) depCountByKey.set(name, closure.nodes.length - 1);
18458
+ for (const node of flatGraph) {
18459
+ const direct = new Set(
18460
+ node.slots.flatMap((slot) => slot.allowedComponents ?? []).filter((t) => t !== node.name && otherKeySet2.has(t))
18461
+ );
18462
+ if (direct.size > 0) depCountByKey.set(node.name, direct.size);
18487
18463
  }
18488
18464
  for (const key of cycleKeys2) {
18489
18465
  const rec = itemByKey2.get(key);
@@ -18528,28 +18504,11 @@ function buildVisibleRows(props) {
18528
18504
  const seenCycleTierChildOccurrence = /* @__PURE__ */ new Set();
18529
18505
  const computeCycleMemberSubtree = (root) => {
18530
18506
  const out = [];
18531
- const visited = /* @__PURE__ */ new Set([root]);
18532
- const queue = [{ name: root, depth: 0 }];
18533
- while (queue.length > 0) {
18534
- const cur = queue.shift();
18535
- const parentItem = itemByKey.get(cur.name)?.it;
18536
- if (!parentItem) continue;
18537
- const slotTargets2 = [];
18538
- const seenTarget = /* @__PURE__ */ new Set();
18539
- for (const target of allowedComponentNames(parentItem.entry)) {
18540
- if (!itemByKey.has(target)) continue;
18541
- if (seenTarget.has(target)) continue;
18542
- seenTarget.add(target);
18543
- slotTargets2.push(target);
18544
- }
18545
- slotTargets2.sort();
18546
- for (const target of slotTargets2) {
18547
- if (visited.has(target)) continue;
18548
- visited.add(target);
18549
- const isCycleMember = cycleParticipants.has(target);
18550
- out.push({ name: target, depth: cur.depth + 1, isCycleMember });
18551
- queue.push({ name: target, depth: cur.depth + 1 });
18552
- }
18507
+ const parentItem = itemByKey.get(root)?.it;
18508
+ if (!parentItem) return out;
18509
+ const slotTargets2 = [...new Set(allowedComponentNames(parentItem.entry))].filter((target) => target !== root && itemByKey.has(target)).sort();
18510
+ for (const target of slotTargets2) {
18511
+ out.push({ name: target, depth: 1, isCycleMember: cycleParticipants.has(target) });
18553
18512
  }
18554
18513
  return out;
18555
18514
  };
@@ -18611,7 +18570,15 @@ function buildVisibleRows(props) {
18611
18570
  }
18612
18571
  const otherKeySet = new Set(otherKeys);
18613
18572
  const subgraph = graph.filter((n) => otherKeySet.has(n.name));
18614
- const closures = computeAllClosures(subgraph);
18573
+ const closures = /* @__PURE__ */ new Map();
18574
+ const parentNames = /* @__PURE__ */ new Set([
18575
+ ...findRoots(subgraph),
18576
+ ...subgraph.filter((n) => hasDirectChild(n)).map((n) => n.name)
18577
+ ]);
18578
+ for (const name of [...parentNames].sort()) {
18579
+ const full = computeClosure(name, subgraph);
18580
+ closures.set(name, { ...full, nodes: full.nodes.filter((n) => n.depth <= 1) });
18581
+ }
18615
18582
  const sharedDeps = findSharedDeps(closures);
18616
18583
  const hasCycleDepDirect = (name) => {
18617
18584
  const it = itemByKey.get(name)?.it;
@@ -18648,7 +18615,6 @@ function buildVisibleRows(props) {
18648
18615
  }
18649
18616
  };
18650
18617
  countInjections(root);
18651
- for (const n of closure.nodes) if (n.name !== root) countInjections(n.name);
18652
18618
  const depCount = closure.nodes.length - 1 + injectedCycleCount;
18653
18619
  const expanded = alwaysExpanded ? true : props.expandedGroups.has(root);
18654
18620
  const glyphExpand = expanded ? GLYPH_EXPAND_EXPANDED : GLYPH_EXPAND_COLLAPSED;
@@ -18684,7 +18650,6 @@ function buildVisibleRows(props) {
18684
18650
  emitCycleChildrenOf(root, 0);
18685
18651
  for (const c2 of closureChildren) {
18686
18652
  injectedChildren.push({ name: c2.name, depth: c2.depth, isCycleChild: false });
18687
- emitCycleChildrenOf(c2.name, c2.depth);
18688
18653
  }
18689
18654
  const isLastAtDepth = (idx) => {
18690
18655
  const own = injectedChildren[idx].depth;
@@ -18867,7 +18832,7 @@ function GroupedSidebar(props) {
18867
18832
  " ",
18868
18833
  emptyMessage
18869
18834
  ] }),
18870
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "up", count: start }),
18835
+ windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "up", count: start }),
18871
18836
  rows.map((row, i) => {
18872
18837
  const absoluteRowIdx = start + i;
18873
18838
  const isSelected = selectedRowIdx !== void 0 ? absoluteRowIdx === selectedRowIdx && row.itemIdx >= 0 : row.itemIdx >= 0 && row.itemIdx === selectedIdx;
@@ -18895,10 +18860,10 @@ function GroupedSidebar(props) {
18895
18860
  isCursor
18896
18861
  });
18897
18862
  return /* @__PURE__ */ jsxs18(Box17, { children: [
18898
- isCursor ? /* @__PURE__ */ jsx22(Text19, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx22(Text19, { children: " " }),
18899
- /* @__PURE__ */ jsx22(PreviewBadge, { badge, highlighted: isSelected }),
18900
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx22(Text19, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx22(Text19, { children: " " })),
18901
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx22(Text19, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx22(Text19, { children: " " })),
18863
+ isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
18864
+ /* @__PURE__ */ jsx21(PreviewBadge, { badge, highlighted: isSelected }),
18865
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx21(Text19, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
18866
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx21(Text19, { children: " " })),
18902
18867
  /* @__PURE__ */ jsxs18(
18903
18868
  Text19,
18904
18869
  {
@@ -18913,19 +18878,19 @@ function GroupedSidebar(props) {
18913
18878
  ]
18914
18879
  }
18915
18880
  ),
18916
- inheritanceStyle.glyph && /* @__PURE__ */ jsx22(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
18881
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx21(Text19, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
18917
18882
  ] }, row.key);
18918
18883
  }),
18919
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "down", count: allRows.length - end })
18884
+ windowed && /* @__PURE__ */ jsx21(WindowIndicator, { direction: "down", count: allRows.length - end })
18920
18885
  ] });
18921
18886
  }
18922
18887
 
18923
18888
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
18924
- import React8 from "react";
18889
+ import React7 from "react";
18925
18890
  import { Box as Box18, Text as Text20 } from "ink";
18926
18891
 
18927
18892
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
18928
- import { useLayoutEffect, useRef as useRef4 } from "react";
18893
+ import { useLayoutEffect, useRef as useRef3 } from "react";
18929
18894
  import { useStdin } from "ink";
18930
18895
  function parseInput(data) {
18931
18896
  const isShiftTab = data === "\x1B[Z";
@@ -18988,7 +18953,7 @@ function registerInputHandler(stdin, setRawMode, handler) {
18988
18953
  }
18989
18954
  function useImmediateInput(handler, enabled = true) {
18990
18955
  const { stdin, setRawMode } = useStdin();
18991
- const handlerRef = useRef4(handler);
18956
+ const handlerRef = useRef3(handler);
18992
18957
  handlerRef.current = handler;
18993
18958
  useLayoutEffect(() => {
18994
18959
  if (!enabled) return;
@@ -19021,7 +18986,7 @@ function useTerminalSize() {
19021
18986
  }
19022
18987
 
19023
18988
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
19024
- import { Fragment as Fragment2, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
18989
+ import { Fragment as Fragment2, jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
19025
18990
  function HelpOverlay(props) {
19026
18991
  const { onClose } = props;
19027
18992
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -19042,11 +19007,11 @@ function HelpOverlay(props) {
19042
19007
  height: panelHeight,
19043
19008
  overflowY: "hidden",
19044
19009
  children: [
19045
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19046
- props.sections.map((section) => /* @__PURE__ */ jsxs19(React8.Fragment, { children: [
19047
- /* @__PURE__ */ jsx23(Text20, { children: " " }),
19048
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: section.title }),
19049
- section.entries.map((entry) => /* @__PURE__ */ jsx23(Text20, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
19010
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19011
+ props.sections.map((section) => /* @__PURE__ */ jsxs19(React7.Fragment, { children: [
19012
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
19013
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: section.title }),
19014
+ section.entries.map((entry) => /* @__PURE__ */ jsx22(Text20, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
19050
19015
  ] }, section.title))
19051
19016
  ]
19052
19017
  }
@@ -19063,31 +19028,31 @@ function HelpOverlay(props) {
19063
19028
  height: panelHeight,
19064
19029
  overflowY: "hidden",
19065
19030
  children: [
19066
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19067
- /* @__PURE__ */ jsx23(Text20, { children: " " }),
19068
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: "Navigation" }),
19069
- /* @__PURE__ */ jsx23(Text20, { children: " \u2191 / k / PgUp Scroll up" }),
19070
- /* @__PURE__ */ jsx23(Text20, { children: " \u2193 / j / PgDn Scroll down" }),
19071
- /* @__PURE__ */ jsx23(Text20, { children: " g / Home Jump to top" }),
19072
- /* @__PURE__ */ jsx23(Text20, { children: " G / End Jump to bottom" }),
19031
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19032
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
19033
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "Navigation" }),
19034
+ /* @__PURE__ */ jsx22(Text20, { children: " \u2191 / k / PgUp Scroll up" }),
19035
+ /* @__PURE__ */ jsx22(Text20, { children: " \u2193 / j / PgDn Scroll down" }),
19036
+ /* @__PURE__ */ jsx22(Text20, { children: " g / Home Jump to top" }),
19037
+ /* @__PURE__ */ jsx22(Text20, { children: " G / End Jump to bottom" }),
19073
19038
  mode === "review" && /* @__PURE__ */ jsxs19(Fragment2, { children: [
19074
- /* @__PURE__ */ jsx23(Text20, { children: " " }),
19075
- /* @__PURE__ */ jsx23(Text20, { bold: true, children: "[Review mode only]" }),
19076
- /* @__PURE__ */ jsx23(Text20, { children: " Tab Toggle sidebar/detail" }),
19077
- /* @__PURE__ */ jsx23(Text20, { children: " a Accept component" }),
19078
- /* @__PURE__ */ jsx23(Text20, { children: " r Reject component" }),
19079
- /* @__PURE__ */ jsx23(Text20, { children: " e Edit proposal" }),
19080
- /* @__PURE__ */ jsx23(Text20, { children: " s Toggle source code" }),
19081
- /* @__PURE__ */ jsx23(Text20, { children: " A Approve all" }),
19082
- /* @__PURE__ */ jsx23(Text20, { children: " F Open finalize dialog" }),
19083
- /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+S Save draft" }),
19084
- /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+Z Undo" }),
19085
- /* @__PURE__ */ jsx23(Text20, { children: " Ctrl+Y Redo" }),
19086
- /* @__PURE__ */ jsx23(Text20, { children: " Esc Exit edit / close" })
19039
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
19040
+ /* @__PURE__ */ jsx22(Text20, { bold: true, children: "[Review mode only]" }),
19041
+ /* @__PURE__ */ jsx22(Text20, { children: " Tab Toggle sidebar/detail" }),
19042
+ /* @__PURE__ */ jsx22(Text20, { children: " a Accept component" }),
19043
+ /* @__PURE__ */ jsx22(Text20, { children: " r Reject component" }),
19044
+ /* @__PURE__ */ jsx22(Text20, { children: " e Edit proposal" }),
19045
+ /* @__PURE__ */ jsx22(Text20, { children: " s Toggle source code" }),
19046
+ /* @__PURE__ */ jsx22(Text20, { children: " A Approve all" }),
19047
+ /* @__PURE__ */ jsx22(Text20, { children: " F Open finalize dialog" }),
19048
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+S Save draft" }),
19049
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Z Undo" }),
19050
+ /* @__PURE__ */ jsx22(Text20, { children: " Ctrl+Y Redo" }),
19051
+ /* @__PURE__ */ jsx22(Text20, { children: " Esc Exit edit / close" })
19087
19052
  ] }),
19088
- /* @__PURE__ */ jsx23(Text20, { children: " " }),
19089
- /* @__PURE__ */ jsx23(Text20, { children: " h Close help" }),
19090
- /* @__PURE__ */ jsx23(Text20, { children: " q Quit" })
19053
+ /* @__PURE__ */ jsx22(Text20, { children: " " }),
19054
+ /* @__PURE__ */ jsx22(Text20, { children: " h Close help" }),
19055
+ /* @__PURE__ */ jsx22(Text20, { children: " q Quit" })
19091
19056
  ]
19092
19057
  }
19093
19058
  );
@@ -19151,7 +19116,7 @@ function formatSearchMatchSummary(matches, total) {
19151
19116
  }
19152
19117
 
19153
19118
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
19154
- import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
19119
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
19155
19120
  function SearchMatchSummary({
19156
19121
  open,
19157
19122
  query,
@@ -19166,13 +19131,13 @@ function SearchMatchSummary({
19166
19131
  open && /* @__PURE__ */ jsxs20(Box19, { marginTop, flexDirection: "column", children: [
19167
19132
  /* @__PURE__ */ jsxs20(Text21, { children: [
19168
19133
  `/${query}`,
19169
- /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.info, children: "\u258E" }),
19170
- query && /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
19171
- /* @__PURE__ */ jsx24(Text21, { children: " \xB7 [Esc] leave" })
19134
+ /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.info, children: "\u258E" }),
19135
+ query && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
19136
+ /* @__PURE__ */ jsx23(Text21, { children: " \xB7 [Esc] leave" })
19172
19137
  ] }),
19173
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx24(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
19138
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
19174
19139
  ] }),
19175
- !open && query && /* @__PURE__ */ jsx24(Box19, { marginTop, children: /* @__PURE__ */ jsx24(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19140
+ !open && query && /* @__PURE__ */ jsx23(Box19, { marginTop, children: /* @__PURE__ */ jsx23(Text21, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19176
19141
  ] });
19177
19142
  }
19178
19143
 
@@ -19192,7 +19157,7 @@ function createSidebarViewsHelpSection(includeBreaking) {
19192
19157
  }
19193
19158
 
19194
19159
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate.ts
19195
- import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef5, useState as useState12 } from "react";
19160
+ import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef4, useState as useState12 } from "react";
19196
19161
 
19197
19162
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/graph/search-neighborhood.ts
19198
19163
  function computeDirectNeighborhood(matches, graph) {
@@ -19886,7 +19851,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
19886
19851
  for (const p of cycleParticipants) seed.add(p);
19887
19852
  return seed;
19888
19853
  });
19889
- const seededGroupsRef = useRef5(closures.size > 0 || cycleParticipants.size > 0);
19854
+ const seededGroupsRef = useRef4(closures.size > 0 || cycleParticipants.size > 0);
19890
19855
  useEffect7(() => {
19891
19856
  if (seededGroupsRef.current) return;
19892
19857
  if (closures.size === 0 && cycleParticipants.size === 0) return;
@@ -20309,7 +20274,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
20309
20274
  }
20310
20275
 
20311
20276
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
20312
- import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
20277
+ import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
20313
20278
  var HELP_SECTIONS = [
20314
20279
  {
20315
20280
  title: "Navigation",
@@ -20349,27 +20314,27 @@ var HELP_SECTIONS = [
20349
20314
  ];
20350
20315
  function ScopeGateScreen(props) {
20351
20316
  if (props.components.length === 0) {
20352
- 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." }) });
20317
+ 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." }) });
20353
20318
  }
20354
- return /* @__PURE__ */ jsx25(ScopeGateView, { ...props });
20319
+ return /* @__PURE__ */ jsx24(ScopeGateView, { ...props });
20355
20320
  }
20356
20321
  function ScopeGateView({ components, onConfirm, onQuit }) {
20357
20322
  const gate = useScopeGate({ components, onConfirm, onQuit });
20358
20323
  const { search, graph, columnPlan, panelLayout, counters } = gate;
20359
20324
  if (gate.showHelp) {
20360
- return /* @__PURE__ */ jsx25(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
20325
+ return /* @__PURE__ */ jsx24(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
20361
20326
  }
20362
20327
  return /* @__PURE__ */ jsxs21(Box20, { flexDirection: "column", paddingX: 2, children: [
20363
20328
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", flexWrap: "wrap", children: [
20364
- /* @__PURE__ */ jsx25(CounterStrip, { counters, totalWidth: gate.totalWidth }),
20329
+ /* @__PURE__ */ jsx24(CounterStrip, { counters, totalWidth: gate.totalWidth }),
20365
20330
  gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs21(Text22, { color: PALETTE2.muted, children: [
20366
20331
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
20367
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx25(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
20332
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
20368
20333
  ] })
20369
20334
  ] }),
20370
- 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." }) }),
20335
+ 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." }) }),
20371
20336
  /* @__PURE__ */ jsxs21(Box20, { flexDirection: "row", alignItems: "stretch", children: [
20372
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx25(
20337
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx24(
20373
20338
  GotoBanner,
20374
20339
  {
20375
20340
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -20379,7 +20344,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20379
20344
  width: columnPlan.main,
20380
20345
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
20381
20346
  }
20382
- ) : /* @__PURE__ */ jsx25(
20347
+ ) : /* @__PURE__ */ jsx24(
20383
20348
  GroupedSidebar,
20384
20349
  {
20385
20350
  items: gate.groupedItems,
@@ -20408,8 +20373,8 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20408
20373
  }
20409
20374
  ),
20410
20375
  columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs21(Fragment4, { children: [
20411
- /* @__PURE__ */ jsx25(Box20, { width: 2, flexShrink: 0 }),
20412
- /* @__PURE__ */ jsx25(
20376
+ /* @__PURE__ */ jsx24(Box20, { width: 2, flexShrink: 0 }),
20377
+ /* @__PURE__ */ jsx24(
20413
20378
  AddedColumn,
20414
20379
  {
20415
20380
  width: columnPlan.added,
@@ -20424,9 +20389,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20424
20389
  )
20425
20390
  ] })
20426
20391
  ] }),
20427
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx25(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
20428
- gate.pendingRejectCascade && /* @__PURE__ */ jsx25(RejectPrompt, { pending: gate.pendingRejectCascade }),
20429
- /* @__PURE__ */ jsx25(
20392
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx24(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
20393
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx24(RejectPrompt, { pending: gate.pendingRejectCascade }),
20394
+ /* @__PURE__ */ jsx24(
20430
20395
  SearchMatchSummary,
20431
20396
  {
20432
20397
  open: search.searchOpen,
@@ -20437,7 +20402,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20437
20402
  marginTop: 1
20438
20403
  }
20439
20404
  ),
20440
- /* @__PURE__ */ jsx25(
20405
+ /* @__PURE__ */ jsx24(
20441
20406
  CompactControlBar,
20442
20407
  {
20443
20408
  hasGroupRoots: gate.hasGroupRoots,
@@ -20448,7 +20413,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20448
20413
  }
20449
20414
 
20450
20415
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/use-scope-gate-flow.ts
20451
- import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef6, useState as useState13 } from "react";
20416
+ import { useEffect as useEffect8, useMemo as useMemo3, useRef as useRef5, useState as useState13 } from "react";
20452
20417
 
20453
20418
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/cache-check.ts
20454
20419
  async function checkGenerationCache(input) {
@@ -20495,7 +20460,7 @@ var realDeps2 = { load: loadScopeGate, checkCache: checkGenerationCache };
20495
20460
  function useScopeGateFlow(input, deps = realDeps2) {
20496
20461
  const sessionId = input?.sessionId;
20497
20462
  const loaded = useMemo3(() => sessionId ? deps.load(sessionId) : void 0, [sessionId]);
20498
- const cacheCheck = useRef6(void 0);
20463
+ const cacheCheck = useRef5(void 0);
20499
20464
  const [confirmed, setConfirmed] = useState13();
20500
20465
  useEffect8(() => {
20501
20466
  if (!input || !loaded?.ok || cacheCheck.current) return;
@@ -20546,7 +20511,7 @@ function progressRows2(progress, agent) {
20546
20511
  }
20547
20512
 
20548
20513
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
20549
- import { jsx as jsx26 } from "react/jsx-runtime";
20514
+ import { jsx as jsx25 } from "react/jsx-runtime";
20550
20515
  function GenerationScreen({
20551
20516
  progress,
20552
20517
  agent,
@@ -20555,7 +20520,7 @@ function GenerationScreen({
20555
20520
  stepNumber,
20556
20521
  totalSteps
20557
20522
  }) {
20558
- return /* @__PURE__ */ jsx26(
20523
+ return /* @__PURE__ */ jsx25(
20559
20524
  RunningStep,
20560
20525
  {
20561
20526
  stepNumber,
@@ -20568,7 +20533,7 @@ function GenerationScreen({
20568
20533
  }
20569
20534
 
20570
20535
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/use-generation.ts
20571
- import { useEffect as useEffect9, useRef as useRef7, useState as useState14 } from "react";
20536
+ import { useEffect as useEffect9, useRef as useRef6, useState as useState14 } from "react";
20572
20537
 
20573
20538
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/run.ts
20574
20539
  import { resolve as resolve23 } from "node:path";
@@ -20733,7 +20698,7 @@ function applyProgressEvent2(event, previous, total) {
20733
20698
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/use-generation.ts
20734
20699
  function useGeneration(input) {
20735
20700
  const [state2, setState] = useState14();
20736
- const current = useRef7();
20701
+ const current = useRef6();
20737
20702
  useEffect9(() => {
20738
20703
  current.current = input;
20739
20704
  if (!input) {
@@ -21100,7 +21065,7 @@ function skipLabel(matchedNames) {
21100
21065
  }
21101
21066
 
21102
21067
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
21103
- import { jsx as jsx27 } from "react/jsx-runtime";
21068
+ import { jsx as jsx26 } from "react/jsx-runtime";
21104
21069
  function PreviewValidationErrorScreen({
21105
21070
  errors,
21106
21071
  missingNames,
@@ -21109,7 +21074,7 @@ function PreviewValidationErrorScreen({
21109
21074
  onQuit
21110
21075
  }) {
21111
21076
  const matchedNames = matchedComponentNames(errors, missingNames);
21112
- return /* @__PURE__ */ jsx27(
21077
+ return /* @__PURE__ */ jsx26(
21113
21078
  GateStep,
21114
21079
  {
21115
21080
  intent: "error",
@@ -21126,7 +21091,7 @@ function PreviewValidationErrorScreen({
21126
21091
  }
21127
21092
 
21128
21093
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
21129
- import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef12, useState as useState22 } from "react";
21094
+ import { useCallback as useCallback5, useEffect as useEffect16, useMemo as useMemo4, useRef as useRef11, useState as useState22 } from "react";
21130
21095
  import figures7 from "figures";
21131
21096
 
21132
21097
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-json-panel.ts
@@ -21387,7 +21352,7 @@ function enumerateCycleBreaks(cycle, components) {
21387
21352
  import { Box as Box27, Text as Text30 } from "ink";
21388
21353
 
21389
21354
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
21390
- import React9, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
21355
+ import React8, { useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useState as useState15 } from "react";
21391
21356
  import figures5 from "figures";
21392
21357
  import { Box as Box21, measureElement, Text as Text23 } from "ink";
21393
21358
 
@@ -21420,7 +21385,7 @@ function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
21420
21385
  }
21421
21386
 
21422
21387
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
21423
- import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
21388
+ import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
21424
21389
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
21425
21390
  return {
21426
21391
  selected,
@@ -21559,13 +21524,13 @@ function serializeState(state2, originalJson) {
21559
21524
  }
21560
21525
  function Picker({ value, active }) {
21561
21526
  return /* @__PURE__ */ jsxs22(Box21, { children: [
21562
- active && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u2039" }),
21563
- /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
21564
- active && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u203A" })
21527
+ active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u2039" }),
21528
+ /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
21529
+ active && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u203A" })
21565
21530
  ] });
21566
21531
  }
21567
21532
  function Toggle({ value, active }) {
21568
- return /* @__PURE__ */ jsx28(Box21, { children: /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21533
+ return /* @__PURE__ */ jsx27(Box21, { children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21569
21534
  }
21570
21535
  function InlinePropField({
21571
21536
  label,
@@ -21588,7 +21553,7 @@ function RequiredField({
21588
21553
  editingField,
21589
21554
  activeField
21590
21555
  }) {
21591
- return /* @__PURE__ */ jsx28(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx28(Toggle, { value, active: editingField && activeField === "required" }) });
21556
+ return /* @__PURE__ */ jsx27(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx27(Toggle, { value, active: editingField && activeField === "required" }) });
21592
21557
  }
21593
21558
  function DefaultValueRow({
21594
21559
  display,
@@ -21600,7 +21565,7 @@ function DefaultValueRow({
21600
21565
  focused ? "\u203A " : " ",
21601
21566
  "default:"
21602
21567
  ] }),
21603
- active ? /* @__PURE__ */ jsx28(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: display })
21568
+ active ? /* @__PURE__ */ jsx27(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: display })
21604
21569
  ] });
21605
21570
  }
21606
21571
  function RowLabel({
@@ -21629,9 +21594,9 @@ function ValueInputRow({
21629
21594
  cursorVisible
21630
21595
  }) {
21631
21596
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, children: [
21632
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
21633
- /* @__PURE__ */ jsx28(Text23, { children: valueText }),
21634
- /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: " " })
21597
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
21598
+ /* @__PURE__ */ jsx27(Text23, { children: valueText }),
21599
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: " " })
21635
21600
  ] });
21636
21601
  }
21637
21602
  function EditableListItem({
@@ -21644,9 +21609,9 @@ function EditableListItem({
21644
21609
  }) {
21645
21610
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
21646
21611
  if (isBeingEdited) {
21647
- return /* @__PURE__ */ jsx28(ValueInputRow, { mode: "edit", valueText, cursorVisible });
21612
+ return /* @__PURE__ */ jsx27(ValueInputRow, { mode: "edit", valueText, cursorVisible });
21648
21613
  }
21649
- return /* @__PURE__ */ jsx28(Box21, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text23, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
21614
+ return /* @__PURE__ */ jsx27(Box21, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
21650
21615
  }
21651
21616
  function EditableValueList({
21652
21617
  values,
@@ -21660,8 +21625,8 @@ function EditableValueList({
21660
21625
  showAddInput
21661
21626
  }) {
21662
21627
  return /* @__PURE__ */ jsxs22(Fragment5, { children: [
21663
- 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 }) })),
21664
- values.map((value, index) => /* @__PURE__ */ jsx28(
21628
+ 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 }) })),
21629
+ values.map((value, index) => /* @__PURE__ */ jsx27(
21665
21630
  EditableListItem,
21666
21631
  {
21667
21632
  value,
@@ -21673,7 +21638,7 @@ function EditableValueList({
21673
21638
  },
21674
21639
  index
21675
21640
  )),
21676
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx28(ValueInputRow, { mode: "add", valueText, cursorVisible })
21641
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx27(ValueInputRow, { mode: "add", valueText, cursorVisible })
21677
21642
  ] });
21678
21643
  }
21679
21644
  function DefaultSubRow({
@@ -21690,12 +21655,12 @@ function DefaultSubRow({
21690
21655
  focused ? "\u203A " : " ",
21691
21656
  "default:"
21692
21657
  ] }),
21693
- /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
21658
+ /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
21694
21659
  ] });
21695
21660
  }
21696
21661
  if (prop.type === "boolean") {
21697
21662
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
21698
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
21663
+ return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
21699
21664
  }
21700
21665
  if (prop.type === "enum") {
21701
21666
  if (prop.values.length === 0) {
@@ -21704,11 +21669,11 @@ function DefaultSubRow({
21704
21669
  focused ? "\u203A " : " ",
21705
21670
  "default:"
21706
21671
  ] }),
21707
- /* @__PURE__ */ jsx28(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
21672
+ /* @__PURE__ */ jsx27(Text23, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
21708
21673
  ] });
21709
21674
  }
21710
21675
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
21711
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
21676
+ return /* @__PURE__ */ jsx27(DefaultValueRow, { display, active, focused });
21712
21677
  }
21713
21678
  const value = typeof prop.default === "string" ? prop.default : "";
21714
21679
  if (active) {
@@ -21718,9 +21683,9 @@ function DefaultSubRow({
21718
21683
  "default:"
21719
21684
  ] }),
21720
21685
  /* @__PURE__ */ jsxs22(Box21, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
21721
- /* @__PURE__ */ jsx28(Text23, { children: value.slice(0, textCursor) }),
21722
- /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
21723
- /* @__PURE__ */ jsx28(Text23, { children: value.slice(textCursor + 1) })
21686
+ /* @__PURE__ */ jsx27(Text23, { children: value.slice(0, textCursor) }),
21687
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
21688
+ /* @__PURE__ */ jsx27(Text23, { children: value.slice(textCursor + 1) })
21724
21689
  ] })
21725
21690
  ] });
21726
21691
  }
@@ -21729,7 +21694,7 @@ function DefaultSubRow({
21729
21694
  focused ? "\u203A " : " ",
21730
21695
  "default:"
21731
21696
  ] }),
21732
- /* @__PURE__ */ jsx28(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
21697
+ /* @__PURE__ */ jsx27(Text23, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
21733
21698
  ] });
21734
21699
  }
21735
21700
  function DescriptionField({
@@ -21749,7 +21714,7 @@ function DescriptionField({
21749
21714
  focused ? "\u203A " : " ",
21750
21715
  label
21751
21716
  ] }),
21752
- /* @__PURE__ */ jsx28(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
21717
+ /* @__PURE__ */ jsx27(Text23, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
21753
21718
  ] });
21754
21719
  }
21755
21720
  return /* @__PURE__ */ jsxs22(Box21, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
@@ -21757,7 +21722,7 @@ function DescriptionField({
21757
21722
  focused ? "\u203A " : " ",
21758
21723
  label
21759
21724
  ] }),
21760
- editing ? /* @__PURE__ */ jsx28(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: value || "\u2014" })
21725
+ editing ? /* @__PURE__ */ jsx27(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: value || "\u2014" })
21761
21726
  ] });
21762
21727
  }
21763
21728
  function EditableDescription({
@@ -21767,7 +21732,7 @@ function EditableDescription({
21767
21732
  }) {
21768
21733
  return /* @__PURE__ */ jsxs22(Text23, { wrap: "wrap", children: [
21769
21734
  value.slice(0, textCursor),
21770
- /* @__PURE__ */ jsx28(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
21735
+ /* @__PURE__ */ jsx27(Text23, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
21771
21736
  value.slice(textCursor + 1)
21772
21737
  ] });
21773
21738
  }
@@ -21789,8 +21754,8 @@ function PropRow({
21789
21754
  const descFocused = activeField === "description";
21790
21755
  const descActive = editingField && descFocused;
21791
21756
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
21792
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: prop.name, selected }) }),
21793
- /* @__PURE__ */ jsx28(
21757
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: prop.name, selected }) }),
21758
+ /* @__PURE__ */ jsx27(
21794
21759
  DescriptionField,
21795
21760
  {
21796
21761
  value: prop.description,
@@ -21804,7 +21769,7 @@ function PropRow({
21804
21769
  }
21805
21770
  ),
21806
21771
  /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
21807
- /* @__PURE__ */ jsx28(
21772
+ /* @__PURE__ */ jsx27(
21808
21773
  RequiredField,
21809
21774
  {
21810
21775
  value: prop.required,
@@ -21813,9 +21778,9 @@ function PropRow({
21813
21778
  activeField
21814
21779
  }
21815
21780
  ),
21816
- /* @__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 }) })
21781
+ /* @__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 }) })
21817
21782
  ] }),
21818
- 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" }) }),
21783
+ 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" }) }),
21819
21784
  prop.type === "enum" && /* @__PURE__ */ jsxs22(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21820
21785
  /* @__PURE__ */ jsxs22(Text23, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
21821
21786
  activeField === "values" ? "\u203A " : " ",
@@ -21827,7 +21792,7 @@ function PropRow({
21827
21792
  "]"
21828
21793
  ] })
21829
21794
  ] }),
21830
- /* @__PURE__ */ jsx28(
21795
+ /* @__PURE__ */ jsx27(
21831
21796
  DefaultSubRow,
21832
21797
  {
21833
21798
  prop,
@@ -21842,7 +21807,7 @@ function PropRow({
21842
21807
  activeField === "allowed" ? "\u203A " : " ",
21843
21808
  "allowed:"
21844
21809
  ] }),
21845
- 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(
21810
+ 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(
21846
21811
  Text23,
21847
21812
  {
21848
21813
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
@@ -21851,17 +21816,17 @@ function PropRow({
21851
21816
  }
21852
21817
  )
21853
21818
  ] }),
21854
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx28(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: (() => {
21819
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx27(Box21, { paddingLeft: 2, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: (() => {
21855
21820
  const max = Math.max(8, width - 8);
21856
21821
  const text = `~ ${rationale}`;
21857
21822
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
21858
21823
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
21859
21824
  selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs22(Box21, { paddingLeft: 2, flexDirection: "column", children: [
21860
21825
  /* @__PURE__ */ jsxs22(Box21, { children: [
21861
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "values:" }),
21862
- activeField === "values" && /* @__PURE__ */ jsx28(Text23, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
21826
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "values:" }),
21827
+ activeField === "values" && /* @__PURE__ */ jsx27(Text23, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
21863
21828
  ] }),
21864
- /* @__PURE__ */ jsx28(
21829
+ /* @__PURE__ */ jsx27(
21865
21830
  EditableValueList,
21866
21831
  {
21867
21832
  values: prop.values,
@@ -21892,8 +21857,8 @@ function SlotRow({
21892
21857
  pickerCursor
21893
21858
  }) {
21894
21859
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, flexShrink: 0, children: [
21895
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: slot.name, selected, trailing: false }) }),
21896
- /* @__PURE__ */ jsx28(
21860
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(RowLabel, { name: slot.name, selected, trailing: false }) }),
21861
+ /* @__PURE__ */ jsx27(
21897
21862
  DescriptionField,
21898
21863
  {
21899
21864
  value: slot.description,
@@ -21906,7 +21871,7 @@ function SlotRow({
21906
21871
  paddingLeft: 0
21907
21872
  }
21908
21873
  ),
21909
- /* @__PURE__ */ jsx28(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(
21874
+ /* @__PURE__ */ jsx27(Box21, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx27(
21910
21875
  RequiredField,
21911
21876
  {
21912
21877
  value: slot.required,
@@ -21927,7 +21892,7 @@ function SlotRow({
21927
21892
  ]
21928
21893
  }
21929
21894
  ),
21930
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx28(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
21895
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx27(Text23, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
21931
21896
  ] }),
21932
21897
  selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
21933
21898
  /* @__PURE__ */ jsxs22(Box21, { children: [
@@ -21942,9 +21907,9 @@ function SlotRow({
21942
21907
  ]
21943
21908
  }
21944
21909
  ),
21945
- 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" })
21910
+ 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" })
21946
21911
  ] }),
21947
- /* @__PURE__ */ jsx28(
21912
+ /* @__PURE__ */ jsx27(
21948
21913
  EditableValueList,
21949
21914
  {
21950
21915
  values: slot.allowedComponents,
@@ -21958,21 +21923,21 @@ function SlotRow({
21958
21923
  showAddInput: editingField && activeField === "allowedComponents"
21959
21924
  }
21960
21925
  ),
21961
- 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)" }) : (() => {
21926
+ 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)" }) : (() => {
21962
21927
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
21963
21928
  if (filtered.length === 0) {
21964
- return /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
21929
+ return /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
21965
21930
  }
21966
21931
  const cursor = pickerCursor % filtered.length;
21967
21932
  const MAX_VISIBLE = 5;
21968
21933
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
21969
21934
  const slice = filtered.slice(start, start + MAX_VISIBLE);
21970
21935
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", children: [
21971
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
21936
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
21972
21937
  slice.map((name, i) => {
21973
21938
  const absIdx = start + i;
21974
21939
  const isCursor = absIdx === cursor;
21975
- return /* @__PURE__ */ jsx28(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
21940
+ return /* @__PURE__ */ jsx27(Text23, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
21976
21941
  })
21977
21942
  ] });
21978
21943
  })() })
@@ -22098,9 +22063,9 @@ function FieldEditor({
22098
22063
  const [editorState, setEditorState] = useState15(initialState);
22099
22064
  const [parseErr] = useState15(parseError);
22100
22065
  const [listScrollStart, setListScrollStart] = useState15(0);
22101
- const initialFocusScrollApplied = React9.useRef(false);
22066
+ const initialFocusScrollApplied = React8.useRef(false);
22102
22067
  const [rowHeights, setRowHeights] = useState15({});
22103
- const rowMeasureRefs = React9.useRef(/* @__PURE__ */ new Map());
22068
+ const rowMeasureRefs = React8.useRef(/* @__PURE__ */ new Map());
22104
22069
  const initialFocus = (() => {
22105
22070
  if (initialFocusTarget?.kind === "description") {
22106
22071
  return {
@@ -22187,23 +22152,23 @@ function FieldEditor({
22187
22152
  const [showHelp, setShowHelp] = useState15(false);
22188
22153
  const props = editorState.props;
22189
22154
  const slots = editorState.slots;
22190
- const contentPropIndexes = React9.useMemo(
22155
+ const contentPropIndexes = React8.useMemo(
22191
22156
  () => props.flatMap((prop, index) => prop.category === "content" ? [index] : []),
22192
22157
  [props]
22193
22158
  );
22194
- const designPropIndexes = React9.useMemo(
22159
+ const designPropIndexes = React8.useMemo(
22195
22160
  () => props.flatMap((prop, index) => prop.category === "design" ? [index] : []),
22196
22161
  [props]
22197
22162
  );
22198
- const hiddenPropIndexes = React9.useMemo(
22163
+ const hiddenPropIndexes = React8.useMemo(
22199
22164
  () => showHiddenProps ? props.flatMap((prop, index) => prop.category === "state" || prop.category === "unattached" ? [index] : []) : [],
22200
22165
  [props, showHiddenProps]
22201
22166
  );
22202
- const visiblePropIndexes = React9.useMemo(
22167
+ const visiblePropIndexes = React8.useMemo(
22203
22168
  () => [...contentPropIndexes, ...designPropIndexes, ...hiddenPropIndexes],
22204
22169
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
22205
22170
  );
22206
- const propGroups = React9.useMemo(
22171
+ const propGroups = React8.useMemo(
22207
22172
  () => [
22208
22173
  {
22209
22174
  kind: "content",
@@ -22223,7 +22188,7 @@ function FieldEditor({
22223
22188
  ],
22224
22189
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes]
22225
22190
  );
22226
- const selectableRows = React9.useMemo(
22191
+ const selectableRows = React8.useMemo(
22227
22192
  () => [
22228
22193
  ...contentPropIndexes.map((idx) => ({ kind: "prop", idx })),
22229
22194
  ...designPropIndexes.map((idx) => ({ kind: "prop", idx })),
@@ -22233,7 +22198,7 @@ function FieldEditor({
22233
22198
  [contentPropIndexes, designPropIndexes, hiddenPropIndexes, slots]
22234
22199
  );
22235
22200
  const visiblePropPosition = visiblePropIndexes.indexOf(propIdx);
22236
- const selectedSelectableIndex = React9.useMemo(
22201
+ const selectedSelectableIndex = React8.useMemo(
22237
22202
  () => selectableRows.findIndex(
22238
22203
  (row) => inSlots ? row.kind === "slot" && row.idx === slotIdx : row.kind === "prop" && row.idx === propIdx
22239
22204
  ),
@@ -22252,12 +22217,12 @@ function FieldEditor({
22252
22217
  }
22253
22218
  };
22254
22219
  const textEntryActive = focusLevel === "field" && editingField && activeField === "description" || focusLevel === "field" && editingField && activeField === "default" && (editorState.props[propIdx]?.type === "string" || editorState.props[propIdx]?.type === "token") || editingValue != null;
22255
- React9.useEffect(() => {
22220
+ React8.useEffect(() => {
22256
22221
  onTextEntryActiveChange?.(textEntryActive);
22257
22222
  }, [textEntryActive, onTextEntryActiveChange]);
22258
22223
  const currentProp = props[propIdx] ?? null;
22259
22224
  const currentSlot = slots[slotIdx] ?? null;
22260
- React9.useEffect(() => {
22225
+ React8.useEffect(() => {
22261
22226
  if (showHiddenProps || inSlots || inComponentDesc || visiblePropPosition >= 0) return;
22262
22227
  if (visiblePropIndexes.length > 0) {
22263
22228
  setPropIdx(visiblePropIndexes[0]);
@@ -22276,22 +22241,22 @@ function FieldEditor({
22276
22241
  setEditorState(next);
22277
22242
  onChange(serializeState(next, value));
22278
22243
  };
22279
- const canonicalize = React9.useCallback((json) => {
22244
+ const canonicalize = React8.useCallback((json) => {
22280
22245
  try {
22281
22246
  return JSON.stringify(JSON.parse(json));
22282
22247
  } catch {
22283
22248
  return `__unparseable__:${json}`;
22284
22249
  }
22285
22250
  }, []);
22286
- const initialStateRef = React9.useRef(initialState);
22251
+ const initialStateRef = React8.useRef(initialState);
22287
22252
  const baselineCanonical = canonicalize(serializeState(initialStateRef.current, value));
22288
22253
  const currentCanonical = canonicalize(serializeState(editorState, value));
22289
22254
  const isDirty = currentCanonical !== baselineCanonical;
22290
- React9.useEffect(() => {
22255
+ React8.useEffect(() => {
22291
22256
  onDirtyChange?.(isDirty);
22292
22257
  }, [isDirty, onDirtyChange]);
22293
- const lastDiscardTriggerRef = React9.useRef(discardTrigger);
22294
- React9.useEffect(() => {
22258
+ const lastDiscardTriggerRef = React8.useRef(discardTrigger);
22259
+ React8.useEffect(() => {
22295
22260
  if (discardTrigger === void 0) return;
22296
22261
  if (discardTrigger === lastDiscardTriggerRef.current) return;
22297
22262
  lastDiscardTriggerRef.current = discardTrigger;
@@ -22802,17 +22767,17 @@ function FieldEditor({
22802
22767
  const innerWidth = Math.max(1, width - 2);
22803
22768
  if (parseErr) {
22804
22769
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
22805
- /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
22806
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.error, children: parseErr }),
22807
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
22770
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
22771
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: parseErr }),
22772
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
22808
22773
  ] });
22809
22774
  }
22810
22775
  if (props.length === 0 && slots.length === 0) {
22811
22776
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
22812
- /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
22813
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
22814
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
22815
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
22777
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
22778
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
22779
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
22780
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
22816
22781
  ] });
22817
22782
  }
22818
22783
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -22941,12 +22906,12 @@ function FieldEditor({
22941
22906
  const renderRow = (row, index) => {
22942
22907
  const key = rowKey(row, index);
22943
22908
  if (row.kind === "header") {
22944
- return /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
22909
+ return /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.success, children: row.label }) }, key);
22945
22910
  }
22946
22911
  if (row.kind === "component-description") {
22947
22912
  const isSelected2 = inComponentDesc && active;
22948
22913
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
22949
- return /* @__PURE__ */ jsx28(
22914
+ return /* @__PURE__ */ jsx27(
22950
22915
  DescriptionField,
22951
22916
  {
22952
22917
  value: editorState.componentDescription,
@@ -22977,7 +22942,7 @@ function FieldEditor({
22977
22942
  valueText,
22978
22943
  innerWidth
22979
22944
  );
22980
- return /* @__PURE__ */ jsx28(
22945
+ return /* @__PURE__ */ jsx27(
22981
22946
  PropRow,
22982
22947
  {
22983
22948
  prop: p,
@@ -23004,7 +22969,7 @@ function FieldEditor({
23004
22969
  valueText,
23005
22970
  innerWidth
23006
22971
  );
23007
- return /* @__PURE__ */ jsx28(
22972
+ return /* @__PURE__ */ jsx27(
23008
22973
  SlotRow,
23009
22974
  {
23010
22975
  slot: s,
@@ -23025,9 +22990,9 @@ function FieldEditor({
23025
22990
  borderStyle: "single",
23026
22991
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
23027
22992
  children: [
23028
- 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." }),
22993
+ 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." }),
23029
22994
  header,
23030
- /* @__PURE__ */ jsx28(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx28(
22995
+ /* @__PURE__ */ jsx27(Box21, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx27(
23031
22996
  PropRow,
23032
22997
  {
23033
22998
  prop: currentProp,
@@ -23043,7 +23008,7 @@ function FieldEditor({
23043
23008
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
23044
23009
  showRationale: showInlineRationales
23045
23010
  }
23046
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx28(
23011
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx27(
23047
23012
  SlotRow,
23048
23013
  {
23049
23014
  slot: currentSlot,
@@ -23062,7 +23027,7 @@ function FieldEditor({
23062
23027
  ) : visibleRowSlice.map((row, index) => {
23063
23028
  const absoluteIndex = scrollStart + index;
23064
23029
  const key = rowKey(row, absoluteIndex);
23065
- return /* @__PURE__ */ jsx28(
23030
+ return /* @__PURE__ */ jsx27(
23066
23031
  Box21,
23067
23032
  {
23068
23033
  ref: (node) => {
@@ -23076,7 +23041,7 @@ function FieldEditor({
23076
23041
  `visible-${key}`
23077
23042
  );
23078
23043
  }) }),
23079
- categoryBelow && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
23044
+ categoryBelow && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
23080
23045
  sourceOpen && !onToggleSourceExternal && (() => {
23081
23046
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
23082
23047
  const start = propMeta?.sourceStartLine ?? null;
@@ -23086,48 +23051,48 @@ function FieldEditor({
23086
23051
  const headerPath = path5 ?? "<unknown source path>";
23087
23052
  if (!start || !end2 || !src) {
23088
23053
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23089
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
23090
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
23091
- /* @__PURE__ */ jsx28(Text23, { children: "[s] close" })
23054
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
23055
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
23056
+ /* @__PURE__ */ jsx27(Text23, { children: "[s] close" })
23092
23057
  ] });
23093
23058
  }
23094
23059
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
23095
23060
  return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23096
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
23097
- lines.map((ln, i) => /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
23098
- /* @__PURE__ */ jsx28(Text23, { children: "[s] close \xB7 [Esc] close" })
23061
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
23062
+ lines.map((ln, i) => /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
23063
+ /* @__PURE__ */ jsx27(Text23, { children: "[s] close \xB7 [Esc] close" })
23099
23064
  ] });
23100
23065
  })(),
23101
23066
  showHelp && /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
23102
- /* @__PURE__ */ jsx28(Text23, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
23103
- /* @__PURE__ */ jsx28(Text23, { children: " " }),
23104
- /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Row navigation" }),
23105
- /* @__PURE__ */ jsx28(Text23, { children: " \u2191/\u2193 move between rows" }),
23106
- /* @__PURE__ */ jsx28(Text23, { children: " Enter edit fields on the current row" }),
23107
- /* @__PURE__ */ jsx28(Text23, { children: " Esc exit the panel" }),
23108
- /* @__PURE__ */ jsx28(Text23, { children: " " }),
23109
- /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Field editing" }),
23110
- /* @__PURE__ */ jsx28(Text23, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
23111
- /* @__PURE__ */ jsx28(Text23, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
23112
- /* @__PURE__ */ jsx28(Text23, { children: " Space/Enter toggle required" }),
23113
- /* @__PURE__ */ jsx28(Text23, { children: " Type edit description / string default" }),
23114
- /* @__PURE__ */ jsx28(Text23, { children: " Esc exit field-edit back to the row" }),
23115
- /* @__PURE__ */ jsx28(Text23, { children: " " }),
23116
- /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Values / allowedComponents" }),
23117
- /* @__PURE__ */ jsx28(Text23, { children: " a / e / r add \xB7 edit \xB7 remove" }),
23118
- /* @__PURE__ */ jsx28(Text23, { children: " \u2191\u2193 navigate the list" }),
23119
- /* @__PURE__ */ jsx28(Text23, { children: " K / J reorder up \xB7 down" }),
23120
- /* @__PURE__ */ jsx28(Text23, { children: " " }),
23121
- /* @__PURE__ */ jsx28(Text23, { bold: true, children: "Panels" }),
23122
- /* @__PURE__ */ jsx28(Text23, { children: " s toggle source-view for the current prop" }),
23123
- /* @__PURE__ */ jsx28(Text23, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
23124
- /* @__PURE__ */ jsx28(Text23, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
23125
- /* @__PURE__ */ jsx28(Text23, { children: " ? toggle this overlay" }),
23126
- /* @__PURE__ */ jsx28(Text23, { children: " " }),
23127
- /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: "press ? or Esc to close" })
23067
+ /* @__PURE__ */ jsx27(Text23, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
23068
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
23069
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Row navigation" }),
23070
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193 move between rows" }),
23071
+ /* @__PURE__ */ jsx27(Text23, { children: " Enter edit fields on the current row" }),
23072
+ /* @__PURE__ */ jsx27(Text23, { children: " Esc exit the panel" }),
23073
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
23074
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Field editing" }),
23075
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
23076
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
23077
+ /* @__PURE__ */ jsx27(Text23, { children: " Space/Enter toggle required" }),
23078
+ /* @__PURE__ */ jsx27(Text23, { children: " Type edit description / string default" }),
23079
+ /* @__PURE__ */ jsx27(Text23, { children: " Esc exit field-edit back to the row" }),
23080
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
23081
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Values / allowedComponents" }),
23082
+ /* @__PURE__ */ jsx27(Text23, { children: " a / e / r add \xB7 edit \xB7 remove" }),
23083
+ /* @__PURE__ */ jsx27(Text23, { children: " \u2191\u2193 navigate the list" }),
23084
+ /* @__PURE__ */ jsx27(Text23, { children: " K / J reorder up \xB7 down" }),
23085
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
23086
+ /* @__PURE__ */ jsx27(Text23, { bold: true, children: "Panels" }),
23087
+ /* @__PURE__ */ jsx27(Text23, { children: " s toggle source-view for the current prop" }),
23088
+ /* @__PURE__ */ jsx27(Text23, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
23089
+ /* @__PURE__ */ jsx27(Text23, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
23090
+ /* @__PURE__ */ jsx27(Text23, { children: " ? toggle this overlay" }),
23091
+ /* @__PURE__ */ jsx27(Text23, { children: " " }),
23092
+ /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: "press ? or Esc to close" })
23128
23093
  ] }),
23129
- validationError && /* @__PURE__ */ jsx28(Text23, { color: PALETTE.error, children: "\u2717 " + validationError }),
23130
- /* @__PURE__ */ jsx28(Box21, { paddingTop: 1, children: /* @__PURE__ */ jsx28(Text23, { color: PALETTE.muted, children: modeLabel }) })
23094
+ validationError && /* @__PURE__ */ jsx27(Text23, { color: PALETTE.error, children: "\u2717 " + validationError }),
23095
+ /* @__PURE__ */ jsx27(Box21, { paddingTop: 1, children: /* @__PURE__ */ jsx27(Text23, { color: PALETTE.muted, children: modeLabel }) })
23131
23096
  ]
23132
23097
  }
23133
23098
  );
@@ -23173,26 +23138,26 @@ function wrapText(text, innerWidth) {
23173
23138
 
23174
23139
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
23175
23140
  import { Box as Box22, Text as Text24 } from "ink";
23176
- import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
23141
+ import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
23177
23142
  function RationaleLine({ line, active }) {
23178
23143
  if (line.kind === "blank") {
23179
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { children: " " }) });
23144
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { children: " " }) });
23180
23145
  }
23181
23146
  if (line.kind === "heading") {
23182
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23147
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23183
23148
  }
23184
23149
  if (line.kind === "label") {
23185
23150
  return /* @__PURE__ */ jsxs23(Box22, { children: [
23186
- line.prefix && /* @__PURE__ */ jsx29(Text24, { children: line.prefix }),
23187
- /* @__PURE__ */ jsx29(Text24, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
23188
- line.suffix && /* @__PURE__ */ jsx29(Text24, { color: PALETTE.muted, children: line.suffix })
23151
+ line.prefix && /* @__PURE__ */ jsx28(Text24, { children: line.prefix }),
23152
+ /* @__PURE__ */ jsx28(Text24, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
23153
+ line.suffix && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: line.suffix })
23189
23154
  ] });
23190
23155
  }
23191
- return /* @__PURE__ */ jsx29(Box22, { children: /* @__PURE__ */ jsx29(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23156
+ return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23192
23157
  }
23193
23158
 
23194
23159
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
23195
- import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
23160
+ import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
23196
23161
  var PLACEHOLDER = "(no rationale captured)";
23197
23162
  function renderComponentRationaleLines(data, innerWidth) {
23198
23163
  const out = [];
@@ -23269,9 +23234,9 @@ function ComponentRationalePanel({
23269
23234
  borderStyle: "single",
23270
23235
  borderColor: active ? PALETTE.text : void 0,
23271
23236
  children: [
23272
- /* @__PURE__ */ jsx30(Box23, { children: /* @__PURE__ */ jsx30(Text25, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23273
- visible.map((line, i) => /* @__PURE__ */ jsx30(RationaleLine, { line, active }, i)),
23274
- /* @__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" }) })
23237
+ /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23238
+ visible.map((line, i) => /* @__PURE__ */ jsx29(RationaleLine, { line, active }, i)),
23239
+ /* @__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" }) })
23275
23240
  ]
23276
23241
  }
23277
23242
  );
@@ -23282,14 +23247,14 @@ import { Box as Box25 } from "ink";
23282
23247
 
23283
23248
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
23284
23249
  import { Text as Text26 } from "ink";
23285
- import { Fragment as Fragment6, jsx as jsx31 } from "react/jsx-runtime";
23250
+ import { Fragment as Fragment6, jsx as jsx30 } from "react/jsx-runtime";
23286
23251
  function HighlightedLine({ parts }) {
23287
- return /* @__PURE__ */ jsx31(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx31(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
23252
+ return /* @__PURE__ */ jsx30(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx30(Text26, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
23288
23253
  }
23289
23254
 
23290
23255
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
23291
23256
  import { Box as Box24, Text as Text27 } from "ink";
23292
- import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
23257
+ import { Fragment as Fragment7, jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
23293
23258
  function ScrollablePanel({
23294
23259
  title,
23295
23260
  width,
@@ -23304,10 +23269,10 @@ function ScrollablePanel({
23304
23269
  const overflowed = totalLines > height;
23305
23270
  return /* @__PURE__ */ jsxs25(Box24, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
23306
23271
  /* @__PURE__ */ jsxs25(Box24, { children: [
23307
- /* @__PURE__ */ jsx32(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
23272
+ /* @__PURE__ */ jsx31(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
23308
23273
  overflowed && /* @__PURE__ */ jsxs25(Fragment7, { children: [
23309
- /* @__PURE__ */ jsx32(Box24, { flexGrow: 1 }),
23310
- /* @__PURE__ */ jsx32(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
23274
+ /* @__PURE__ */ jsx31(Box24, { flexGrow: 1 }),
23275
+ /* @__PURE__ */ jsx31(Text27, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
23311
23276
  ] })
23312
23277
  ] }),
23313
23278
  children
@@ -23315,7 +23280,7 @@ function ScrollablePanel({
23315
23280
  }
23316
23281
 
23317
23282
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
23318
- import { jsx as jsx33 } from "react/jsx-runtime";
23283
+ import { jsx as jsx32 } from "react/jsx-runtime";
23319
23284
  function highlightJson(line) {
23320
23285
  const parts = [];
23321
23286
  let remaining = line;
@@ -23353,7 +23318,7 @@ function highlightJson(line) {
23353
23318
  parts.push({ text: remaining[0] });
23354
23319
  remaining = remaining.slice(1);
23355
23320
  }
23356
- return /* @__PURE__ */ jsx33(HighlightedLine, { parts });
23321
+ return /* @__PURE__ */ jsx32(HighlightedLine, { parts });
23357
23322
  }
23358
23323
  function truncateLine(line, maxWidth) {
23359
23324
  if (line.length <= maxWidth) return line;
@@ -23366,7 +23331,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
23366
23331
  const totalLines = allLines.length;
23367
23332
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23368
23333
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
23369
- return /* @__PURE__ */ jsx33(
23334
+ return /* @__PURE__ */ jsx32(
23370
23335
  ScrollablePanel,
23371
23336
  {
23372
23337
  title: label,
@@ -23379,14 +23344,14 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
23379
23344
  borderColor: active ? "white" : void 0,
23380
23345
  children: visibleLines.map((line, i) => {
23381
23346
  const truncated = truncateLine(line, innerWidth);
23382
- return /* @__PURE__ */ jsx33(Box25, { children: highlightJson(truncated) }, i);
23347
+ return /* @__PURE__ */ jsx32(Box25, { children: highlightJson(truncated) }, i);
23383
23348
  })
23384
23349
  }
23385
23350
  );
23386
23351
  }
23387
23352
 
23388
23353
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
23389
- import { jsx as jsx34 } from "react/jsx-runtime";
23354
+ import { jsx as jsx33 } from "react/jsx-runtime";
23390
23355
  function renderRationaleLines(rows, innerWidth) {
23391
23356
  const out = [];
23392
23357
  rows.forEach((row, idx) => {
@@ -23419,7 +23384,7 @@ function RationalePanel({
23419
23384
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
23420
23385
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23421
23386
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
23422
- return /* @__PURE__ */ jsx34(
23387
+ return /* @__PURE__ */ jsx33(
23423
23388
  ScrollablePanel,
23424
23389
  {
23425
23390
  title: `RATIONALE \u2014 ${componentName}`,
@@ -23430,7 +23395,7 @@ function RationalePanel({
23430
23395
  visibleStart,
23431
23396
  visibleEnd,
23432
23397
  borderColor: active ? PALETTE.text : void 0,
23433
- children: visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i))
23398
+ children: visible.map((line, i) => /* @__PURE__ */ jsx33(RationaleLine, { line, active }, i))
23434
23399
  }
23435
23400
  );
23436
23401
  }
@@ -23438,7 +23403,7 @@ function RationalePanel({
23438
23403
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
23439
23404
  import figures6 from "figures";
23440
23405
  import { Box as Box26, Text as Text28 } from "ink";
23441
- import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
23406
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
23442
23407
  function TokenReviewPanel({
23443
23408
  componentName,
23444
23409
  suggestions,
@@ -23466,15 +23431,15 @@ function TokenReviewPanel({
23466
23431
  borderStyle: "single",
23467
23432
  borderColor: active ? PALETTE.text : void 0,
23468
23433
  children: [
23469
- /* @__PURE__ */ jsx35(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
23470
- /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
23471
- /* @__PURE__ */ jsx35(Text28, { children: " " }),
23472
- current.paths.length === 0 && /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
23434
+ /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
23435
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
23436
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
23437
+ current.paths.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
23473
23438
  visiblePaths.map((path5, i) => {
23474
23439
  const pathIndex = scrollStart + i;
23475
23440
  const checked = editSelection.has(path5);
23476
23441
  const focused = pathIndex === editCursor;
23477
- return /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(
23442
+ return /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(
23478
23443
  Text28,
23479
23444
  {
23480
23445
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
@@ -23484,9 +23449,9 @@ function TokenReviewPanel({
23484
23449
  }
23485
23450
  ) }, path5);
23486
23451
  }),
23487
- /* @__PURE__ */ jsx35(Text28, { children: " " }),
23488
- /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
23489
- /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
23452
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
23453
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
23454
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
23490
23455
  ]
23491
23456
  }
23492
23457
  );
@@ -23500,25 +23465,25 @@ function TokenReviewPanel({
23500
23465
  borderStyle: "single",
23501
23466
  borderColor: active ? PALETTE.text : void 0,
23502
23467
  children: [
23503
- /* @__PURE__ */ jsx35(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
23504
- suggestions.length === 0 && /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
23468
+ /* @__PURE__ */ jsx34(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
23469
+ suggestions.length === 0 && /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
23505
23470
  suggestions.map((s, i) => {
23506
23471
  const focused = i === selectedRow;
23507
23472
  return /* @__PURE__ */ jsxs26(Box26, { flexDirection: "column", children: [
23508
- /* @__PURE__ */ jsx35(Box26, { children: /* @__PURE__ */ jsx35(Text28, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
23509
- /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
23510
- /* @__PURE__ */ jsx35(Text28, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
23473
+ /* @__PURE__ */ jsx34(Box26, { children: /* @__PURE__ */ jsx34(Text28, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
23474
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
23475
+ /* @__PURE__ */ jsx34(Text28, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
23511
23476
  ] }, s.propName);
23512
23477
  }),
23513
- /* @__PURE__ */ jsx35(Text28, { children: " " }),
23514
- /* @__PURE__ */ jsx35(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
23478
+ /* @__PURE__ */ jsx34(Text28, { children: " " }),
23479
+ /* @__PURE__ */ jsx34(Text28, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
23515
23480
  ]
23516
23481
  }
23517
23482
  );
23518
23483
  }
23519
23484
 
23520
23485
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
23521
- import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
23486
+ import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
23522
23487
  function ReviewDetailsPanel({
23523
23488
  selectedKey,
23524
23489
  panelOpen,
@@ -23553,7 +23518,7 @@ function ReviewDetailsPanel({
23553
23518
  rationale: s.rationale ?? ""
23554
23519
  }))
23555
23520
  ];
23556
- return /* @__PURE__ */ jsx36(
23521
+ return /* @__PURE__ */ jsx35(
23557
23522
  RationalePanel,
23558
23523
  {
23559
23524
  componentName: componentRationale?.name ?? selectedKey,
@@ -23566,7 +23531,7 @@ function ReviewDetailsPanel({
23566
23531
  );
23567
23532
  }
23568
23533
  if (panelOpen === "component-rationale") {
23569
- return /* @__PURE__ */ jsx36(
23534
+ return /* @__PURE__ */ jsx35(
23570
23535
  ComponentRationalePanel,
23571
23536
  {
23572
23537
  data: componentRationale ?? {
@@ -23592,13 +23557,13 @@ function ReviewDetailsPanel({
23592
23557
  const sourceLineCount = Math.max(1, height - 4);
23593
23558
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
23594
23559
  return /* @__PURE__ */ jsxs27(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
23595
- /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
23596
- 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)" }),
23597
- /* @__PURE__ */ jsx36(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
23560
+ /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
23561
+ 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)" }),
23562
+ /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
23598
23563
  ] });
23599
23564
  }
23600
23565
  if (panelOpen === "token-review") {
23601
- return /* @__PURE__ */ jsx36(
23566
+ return /* @__PURE__ */ jsx35(
23602
23567
  TokenReviewPanel,
23603
23568
  {
23604
23569
  componentName: selectedKey,
@@ -23614,7 +23579,7 @@ function ReviewDetailsPanel({
23614
23579
  );
23615
23580
  }
23616
23581
  if (showJson) {
23617
- return /* @__PURE__ */ jsx36(
23582
+ return /* @__PURE__ */ jsx35(
23618
23583
  JsonPanel,
23619
23584
  {
23620
23585
  label: "GENERATED DEFINITION (read-only)",
@@ -23626,11 +23591,11 @@ function ReviewDetailsPanel({
23626
23591
  }
23627
23592
  );
23628
23593
  }
23629
- return /* @__PURE__ */ jsx36(Fragment8, { children: editor });
23594
+ return /* @__PURE__ */ jsx35(Fragment8, { children: editor });
23630
23595
  }
23631
23596
 
23632
23597
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
23633
- import { jsx as jsx37 } from "react/jsx-runtime";
23598
+ import { jsx as jsx36 } from "react/jsx-runtime";
23634
23599
  import { createElement } from "react";
23635
23600
  function toFieldEditorMetadata(reviewMetadata) {
23636
23601
  if (!reviewMetadata) return void 0;
@@ -23664,7 +23629,7 @@ function ReviewDetailsEditor({
23664
23629
  jsonScrollOffset,
23665
23630
  currentTokenSuggestions
23666
23631
  } = reviewEditor;
23667
- return /* @__PURE__ */ jsx37(
23632
+ return /* @__PURE__ */ jsx36(
23668
23633
  ReviewDetailsPanel,
23669
23634
  {
23670
23635
  selectedKey,
@@ -23704,7 +23669,7 @@ function ReviewDetailsEditor({
23704
23669
  }
23705
23670
 
23706
23671
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
23707
- import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs28 } from "react/jsx-runtime";
23672
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
23708
23673
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
23709
23674
  return {
23710
23675
  value: reviewEditor.draftValue || selectedJson,
@@ -23744,17 +23709,17 @@ function ReviewEmptyComponentsWarning({
23744
23709
  hidden
23745
23710
  }) {
23746
23711
  if (hidden || count === 0) return null;
23747
- return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
23712
+ return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
23748
23713
  }
23749
23714
  function ReviewNoSelection() {
23750
- return /* @__PURE__ */ jsx38(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx38(Text30, { color: PALETTE.muted, children: "No component selected" }) });
23715
+ return /* @__PURE__ */ jsx37(Box27, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, children: "No component selected" }) });
23751
23716
  }
23752
23717
  function ReviewFinalizeError({
23753
23718
  message,
23754
23719
  hidden
23755
23720
  }) {
23756
23721
  if (hidden || !message) return null;
23757
- return /* @__PURE__ */ jsx38(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
23722
+ return /* @__PURE__ */ jsx37(Text30, { color: PALETTE.error, children: `\u26A0 ${message}` });
23758
23723
  }
23759
23724
  function ReviewPanelFooter({
23760
23725
  reviewEditor,
@@ -23765,8 +23730,8 @@ function ReviewPanelFooter({
23765
23730
  }) {
23766
23731
  return /* @__PURE__ */ jsxs28(Fragment9, { children: [
23767
23732
  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" : ""),
23768
- livePreview.status === "running" && /* @__PURE__ */ jsx38(Text30, { children: ` ${livePreviewSpinner} live preview` }),
23769
- livePreview.disabled && /* @__PURE__ */ jsx38(Text30, { children: " \xB7 live preview disabled" })
23733
+ livePreview.status === "running" && /* @__PURE__ */ jsx37(Text30, { children: ` ${livePreviewSpinner} live preview` }),
23734
+ livePreview.disabled && /* @__PURE__ */ jsx37(Text30, { children: " \xB7 live preview disabled" })
23770
23735
  ] });
23771
23736
  }
23772
23737
  function ReviewComponentTitle({
@@ -23776,8 +23741,8 @@ function ReviewComponentTitle({
23776
23741
  sidebarFocused
23777
23742
  }) {
23778
23743
  return /* @__PURE__ */ jsxs28(Box27, { paddingLeft: 2, paddingBottom: 1, children: [
23779
- /* @__PURE__ */ jsx38(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
23780
- /* @__PURE__ */ jsx38(Box27, { flexGrow: 1 }),
23744
+ /* @__PURE__ */ jsx37(Text30, { bold: true, wrap: "truncate-end", children: selectedKey }),
23745
+ /* @__PURE__ */ jsx37(Box27, { flexGrow: 1 }),
23781
23746
  /* @__PURE__ */ jsxs28(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: [
23782
23747
  propCount,
23783
23748
  " prop",
@@ -23809,8 +23774,8 @@ function ReviewComponentPanel({
23809
23774
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
23810
23775
  const contentHeight = Math.max(1, height - 2);
23811
23776
  const contentWidth = Math.max(1, width - 1);
23812
- 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: [
23813
- /* @__PURE__ */ jsx38(Box27, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx38(
23777
+ 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: [
23778
+ /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx37(
23814
23779
  ReviewDetailsEditor,
23815
23780
  {
23816
23781
  selectedKey,
@@ -23823,7 +23788,7 @@ function ReviewComponentPanel({
23823
23788
  jsonValue,
23824
23789
  sidebarFocused,
23825
23790
  fieldEditor,
23826
- header: /* @__PURE__ */ jsx38(
23791
+ header: /* @__PURE__ */ jsx37(
23827
23792
  ReviewComponentTitle,
23828
23793
  {
23829
23794
  selectedKey,
@@ -23834,8 +23799,8 @@ function ReviewComponentPanel({
23834
23799
  )
23835
23800
  }
23836
23801
  ) }),
23837
- /* @__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 : " " }) }),
23838
- /* @__PURE__ */ jsx38(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx38(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx38(
23802
+ /* @__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 : " " }) }),
23803
+ /* @__PURE__ */ jsx37(Box27, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx37(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx37(
23839
23804
  ReviewPanelFooter,
23840
23805
  {
23841
23806
  reviewEditor,
@@ -23850,7 +23815,7 @@ function ReviewComponentPanel({
23850
23815
 
23851
23816
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
23852
23817
  import { Box as Box28, Text as Text31 } from "ink";
23853
- import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
23818
+ import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
23854
23819
  function countReviewStatuses(entries) {
23855
23820
  return entries.reduce(
23856
23821
  (counts, entry) => {
@@ -23863,13 +23828,13 @@ function countReviewStatuses(entries) {
23863
23828
  );
23864
23829
  }
23865
23830
  function ReviewLoadingState() {
23866
- return /* @__PURE__ */ jsx39(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx39(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
23831
+ return /* @__PURE__ */ jsx38(Box28, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
23867
23832
  }
23868
23833
  function ReviewLoadError({ message }) {
23869
23834
  return /* @__PURE__ */ jsxs29(Box28, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
23870
- /* @__PURE__ */ jsx39(Text31, { color: PALETTE.error, children: message }),
23871
- /* @__PURE__ */ jsx39(Text31, { children: " " }),
23872
- /* @__PURE__ */ jsx39(Text31, { children: "[q / Enter / Esc] Quit" })
23835
+ /* @__PURE__ */ jsx38(Text31, { color: PALETTE.error, children: message }),
23836
+ /* @__PURE__ */ jsx38(Text31, { children: " " }),
23837
+ /* @__PURE__ */ jsx38(Text31, { children: "[q / Enter / Esc] Quit" })
23873
23838
  ] });
23874
23839
  }
23875
23840
 
@@ -23956,7 +23921,7 @@ function finalizeReviewSession(extractSessionId, components) {
23956
23921
  }
23957
23922
 
23958
23923
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-session.ts
23959
- import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef9, useState as useState17 } from "react";
23924
+ import { useCallback as useCallback2, useEffect as useEffect12, useRef as useRef8, useState as useState17 } from "react";
23960
23925
 
23961
23926
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/history.ts
23962
23927
  var DEFAULT_MAX_DEPTH = 50;
@@ -24012,7 +23977,7 @@ function createHistoryStack(seed, maxDepth = DEFAULT_MAX_DEPTH) {
24012
23977
  }
24013
23978
 
24014
23979
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-finalize-preview.ts
24015
- import { useEffect as useEffect11, useRef as useRef8, useState as useState16 } from "react";
23980
+ import { useEffect as useEffect11, useRef as useRef7, useState as useState16 } from "react";
24016
23981
 
24017
23982
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/run-live-preview.ts
24018
23983
  var TimeoutError = class extends Error {
@@ -24070,7 +24035,7 @@ async function runLivePreview(opts) {
24070
24035
 
24071
24036
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
24072
24037
  import { Box as Box29, Text as Text32 } from "ink";
24073
- import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs30 } from "react/jsx-runtime";
24038
+ import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
24074
24039
  var FINALIZE_REMOVED_WINDOW = 6;
24075
24040
  function FinalizeDialog({
24076
24041
  accepted,
@@ -24099,51 +24064,51 @@ function FinalizeDialog({
24099
24064
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
24100
24065
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
24101
24066
  const hasMoreAbove = offset > 0;
24102
- return /* @__PURE__ */ jsx40(Box29, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
24103
- /* @__PURE__ */ jsx40(Text32, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
24104
- /* @__PURE__ */ jsx40(Text32, { children: " " }),
24067
+ return /* @__PURE__ */ jsx39(Box29, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
24068
+ /* @__PURE__ */ jsx39(Text32, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
24069
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
24105
24070
  /* @__PURE__ */ jsxs30(Text32, { children: [
24106
24071
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.success, children: [
24107
24072
  accepted,
24108
24073
  " accepted"
24109
24074
  ] }),
24110
- /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
24075
+ /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
24111
24076
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.error, children: [
24112
24077
  rejected,
24113
24078
  " rejected"
24114
24079
  ] }),
24115
- /* @__PURE__ */ jsx40(Text32, { children: " \xB7 " }),
24080
+ /* @__PURE__ */ jsx39(Text32, { children: " \xB7 " }),
24116
24081
  /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.muted, children: [
24117
24082
  needsReview,
24118
24083
  " unresolved"
24119
24084
  ] })
24120
24085
  ] }),
24121
- /* @__PURE__ */ jsx40(Text32, { children: " " }),
24086
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
24122
24087
  noneAccepted && /* @__PURE__ */ jsxs30(Fragment10, { children: [
24123
- /* @__PURE__ */ jsx40(Text32, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
24124
- /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
24125
- /* @__PURE__ */ jsx40(Text32, { children: " " })
24088
+ /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
24089
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
24090
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
24126
24091
  ] }),
24127
24092
  !allResolved && /* @__PURE__ */ jsxs30(Fragment10, { children: [
24128
- /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
24129
- /* @__PURE__ */ jsx40(Text32, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
24130
- /* @__PURE__ */ jsx40(Text32, { children: " " })
24093
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
24094
+ /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
24095
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
24131
24096
  ] }),
24132
24097
  /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", height: 2, children: [
24133
- 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: " " }),
24134
- /* @__PURE__ */ jsx40(Text32, { children: " " })
24098
+ 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: " " }),
24099
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
24135
24100
  ] }),
24136
24101
  previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs30(Fragment10, { children: [
24137
- /* @__PURE__ */ jsx40(Text32, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
24138
- hasMoreAbove && /* @__PURE__ */ jsx40(Text32, { color: PALETTE.muted, children: "\u2191 more above" }),
24139
- windowed.map((rc) => /* @__PURE__ */ jsx40(Text32, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
24140
- hasMoreBelow && /* @__PURE__ */ jsx40(Text32, { color: PALETTE.muted, children: "\u2193 more below" }),
24141
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx40(Text32, { children: "[\u2191\u2193] scroll deletions" }),
24142
- /* @__PURE__ */ jsx40(Text32, { children: " " })
24102
+ /* @__PURE__ */ jsx39(Text32, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
24103
+ hasMoreAbove && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2191 more above" }),
24104
+ windowed.map((rc) => /* @__PURE__ */ jsx39(Text32, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
24105
+ hasMoreBelow && /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "\u2193 more below" }),
24106
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx39(Text32, { children: "[\u2191\u2193] scroll deletions" }),
24107
+ /* @__PURE__ */ jsx39(Text32, { children: " " })
24143
24108
  ] }),
24144
- /* @__PURE__ */ jsx40(Text32, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
24145
- /* @__PURE__ */ jsx40(Text32, { children: " " }),
24146
- /* @__PURE__ */ jsx40(Text32, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
24109
+ /* @__PURE__ */ jsx39(Text32, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
24110
+ /* @__PURE__ */ jsx39(Text32, { children: " " }),
24111
+ /* @__PURE__ */ jsx39(Text32, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
24147
24112
  ] }) });
24148
24113
  }
24149
24114
 
@@ -24162,7 +24127,7 @@ function useFinalizePreview(opts) {
24162
24127
  const [status, setStatus] = useState16("idle");
24163
24128
  const [removed, setRemoved] = useState16([]);
24164
24129
  const [scrollOffset, setScrollOffset] = useState16(0);
24165
- const generationRef = useRef8(0);
24130
+ const generationRef = useRef7(0);
24166
24131
  const acceptedKey = [...acceptedKeys].sort().join("\0");
24167
24132
  useEffect11(() => {
24168
24133
  if (!open) {
@@ -24310,8 +24275,8 @@ function useReviewMetadata({ components, selectedIdx, extractSessionId }) {
24310
24275
  return { reviewMetadata, componentRationale };
24311
24276
  }
24312
24277
  function useReviewHistory({ loading, components, createSnapshot, applySnapshot }) {
24313
- const historyRef = useRef9(null);
24314
- const historySeededRef = useRef9(false);
24278
+ const historyRef = useRef8(null);
24279
+ const historySeededRef = useRef8(false);
24315
24280
  useEffect12(() => {
24316
24281
  if (loading || historySeededRef.current) return;
24317
24282
  historySeededRef.current = true;
@@ -24363,7 +24328,7 @@ function useReviewFinalize({
24363
24328
  }
24364
24329
 
24365
24330
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-review-editor.ts
24366
- import { useEffect as useEffect13, useRef as useRef10, useState as useState18 } from "react";
24331
+ import { useEffect as useEffect13, useRef as useRef9, useState as useState18 } from "react";
24367
24332
 
24368
24333
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/token-suggestions.ts
24369
24334
  function collectTokenSuggestions(entry, availableTokens = []) {
@@ -24414,8 +24379,8 @@ function useReviewEditor({
24414
24379
  const [tokenReviewEditing, setTokenReviewEditing] = useState18(false);
24415
24380
  const [tokenReviewEditCursor, setTokenReviewEditCursor] = useState18(0);
24416
24381
  const [tokenReviewEditSelection, setTokenReviewEditSelection] = useState18(/* @__PURE__ */ new Set());
24417
- const tokenReviewSuggestedRef = useRef10(/* @__PURE__ */ new Map());
24418
- const pendingGRef = useRef10(false);
24382
+ const tokenReviewSuggestedRef = useRef9(/* @__PURE__ */ new Map());
24383
+ const pendingGRef = useRef9(false);
24419
24384
  useEffect13(() => {
24420
24385
  setTokenReviewRow(0);
24421
24386
  setTokenReviewEditing(false);
@@ -24552,7 +24517,7 @@ import { Box as Box31, Text as Text34 } from "ink";
24552
24517
 
24553
24518
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
24554
24519
  import { Box as Box30, Text as Text33 } from "ink";
24555
- import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs31 } from "react/jsx-runtime";
24520
+ import { Fragment as Fragment11, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
24556
24521
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24557
24522
  useImmediateInput((input, key) => {
24558
24523
  if (input === "y" || key.return) {
@@ -24562,20 +24527,20 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24562
24527
  }
24563
24528
  });
24564
24529
  return /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
24565
- /* @__PURE__ */ jsx41(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
24566
- /* @__PURE__ */ jsx41(Text33, { children: " " }),
24530
+ /* @__PURE__ */ jsx40(Text33, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
24531
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
24567
24532
  hasUnsavedDrafts ? /* @__PURE__ */ jsxs31(Fragment11, { children: [
24568
- /* @__PURE__ */ jsx41(Text33, { children: "You have unsaved draft edits." }),
24569
- /* @__PURE__ */ jsx41(Text33, { children: "Session state is preserved \u2014 you can resume" }),
24570
- /* @__PURE__ */ jsx41(Text33, { children: "by running the same review command again." })
24571
- ] }) : /* @__PURE__ */ jsx41(Text33, { children: "Session is saved. Quit without finalizing?" }),
24572
- /* @__PURE__ */ jsx41(Text33, { children: " " }),
24573
- /* @__PURE__ */ jsx41(Text33, { children: " [y / Enter] Quit [n / Esc] Stay" })
24533
+ /* @__PURE__ */ jsx40(Text33, { children: "You have unsaved draft edits." }),
24534
+ /* @__PURE__ */ jsx40(Text33, { children: "Session state is preserved \u2014 you can resume" }),
24535
+ /* @__PURE__ */ jsx40(Text33, { children: "by running the same review command again." })
24536
+ ] }) : /* @__PURE__ */ jsx40(Text33, { children: "Session is saved. Quit without finalizing?" }),
24537
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
24538
+ /* @__PURE__ */ jsx40(Text33, { children: " [y / Enter] Quit [n / Esc] Stay" })
24574
24539
  ] });
24575
24540
  }
24576
24541
 
24577
24542
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
24578
- import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs32 } from "react/jsx-runtime";
24543
+ import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
24579
24544
  function ReviewFinalizeDialogs({
24580
24545
  showFinalize,
24581
24546
  showQuit,
@@ -24590,7 +24555,7 @@ function ReviewFinalizeDialogs({
24590
24555
  }) {
24591
24556
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
24592
24557
  return /* @__PURE__ */ jsxs32(Fragment12, { children: [
24593
- showFinalize && /* @__PURE__ */ jsx42(
24558
+ showFinalize && /* @__PURE__ */ jsx41(
24594
24559
  FinalizeDialog,
24595
24560
  {
24596
24561
  accepted,
@@ -24603,7 +24568,7 @@ function ReviewFinalizeDialogs({
24603
24568
  onCancel: onFinalizeCancel
24604
24569
  }
24605
24570
  ),
24606
- showQuit && /* @__PURE__ */ jsx42(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
24571
+ showQuit && /* @__PURE__ */ jsx41(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
24607
24572
  ] });
24608
24573
  }
24609
24574
  function ReviewStepDialogs({
@@ -24613,7 +24578,7 @@ function ReviewStepDialogs({
24613
24578
  onFinalize,
24614
24579
  onQuit
24615
24580
  }) {
24616
- return /* @__PURE__ */ jsx42(
24581
+ return /* @__PURE__ */ jsx41(
24617
24582
  ReviewFinalizeDialogs,
24618
24583
  {
24619
24584
  showFinalize: surfaceState.showFinalize,
@@ -24632,11 +24597,11 @@ function ReviewStepDialogs({
24632
24597
  function ReviewReloadDialog({ open }) {
24633
24598
  if (!open) return null;
24634
24599
  return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24635
- /* @__PURE__ */ jsx42(Text34, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
24636
- /* @__PURE__ */ jsx42(Text34, { children: "Unsaved in-memory changes will be lost." }),
24637
- /* @__PURE__ */ jsx42(Text34, { children: " " }),
24638
- /* @__PURE__ */ jsx42(Text34, { children: " [Enter] Confirm" }),
24639
- /* @__PURE__ */ jsx42(Text34, { children: " [Esc] Cancel" })
24600
+ /* @__PURE__ */ jsx41(Text34, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
24601
+ /* @__PURE__ */ jsx41(Text34, { children: "Unsaved in-memory changes will be lost." }),
24602
+ /* @__PURE__ */ jsx41(Text34, { children: " " }),
24603
+ /* @__PURE__ */ jsx41(Text34, { children: " [Enter] Confirm" }),
24604
+ /* @__PURE__ */ jsx41(Text34, { children: " [Esc] Cancel" })
24640
24605
  ] });
24641
24606
  }
24642
24607
 
@@ -24855,21 +24820,21 @@ function applyPreviewAnnotations(preview, localNames) {
24855
24820
  }
24856
24821
 
24857
24822
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/use-live-preview.ts
24858
- import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef11, useState as useState20 } from "react";
24823
+ import { useCallback as useCallback3, useEffect as useEffect14, useRef as useRef10, useState as useState20 } from "react";
24859
24824
  var DEFAULT_DEBOUNCE_MS = 500;
24860
24825
  function useLivePreview(opts) {
24861
24826
  const debounceMs = opts.debounceMs ?? DEFAULT_DEBOUNCE_MS;
24862
24827
  const [status, setStatus] = useState20("idle");
24863
24828
  const [disabled, setDisabled] = useState20(false);
24864
- const timerRef = useRef11(null);
24865
- const generationRef = useRef11(0);
24866
- const latestRef = useRef11(0);
24867
- const inflightRef = useRef11(0);
24868
- const optsRef = useRef11(opts);
24829
+ const timerRef = useRef10(null);
24830
+ const generationRef = useRef10(0);
24831
+ const latestRef = useRef10(0);
24832
+ const inflightRef = useRef10(0);
24833
+ const optsRef = useRef10(opts);
24869
24834
  useEffect14(() => {
24870
24835
  optsRef.current = opts;
24871
24836
  });
24872
- const disabledRef = useRef11(disabled);
24837
+ const disabledRef = useRef10(disabled);
24873
24838
  useEffect14(() => {
24874
24839
  disabledRef.current = disabled;
24875
24840
  }, [disabled]);
@@ -25004,7 +24969,7 @@ function useReviewPreview({
25004
24969
 
25005
24970
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
25006
24971
  import { Box as Box32, Text as Text35 } from "ink";
25007
- import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
24972
+ import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
25008
24973
  function LivePreviewSummary({
25009
24974
  enabled,
25010
24975
  previewAnnotations,
@@ -25018,24 +24983,24 @@ function LivePreviewSummary({
25018
24983
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
25019
24984
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
25020
24985
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
25021
- if (disabled) return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
25022
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
24986
+ if (disabled) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
24987
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
25023
24988
  if (!hasCounts) return null;
25024
24989
  return /* @__PURE__ */ jsxs33(Box32, { children: [
25025
- /* @__PURE__ */ jsx43(Text35, { children: "Preview: " }),
25026
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.success, children: `${counts.new} new` }),
25027
- /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
25028
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.warning, children: `${counts.changed} changed` }),
25029
- /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
25030
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.muted, children: `${counts.removed} removed` }),
25031
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx43(Text35, { children: " ([d] removed list)" }),
25032
- /* @__PURE__ */ jsx43(Text35, { children: " \xB7 " }),
25033
- /* @__PURE__ */ jsx43(Text35, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
24990
+ /* @__PURE__ */ jsx42(Text35, { children: "Preview: " }),
24991
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.success, children: `${counts.new} new` }),
24992
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
24993
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.warning, children: `${counts.changed} changed` }),
24994
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
24995
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.muted, children: `${counts.removed} removed` }),
24996
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx42(Text35, { children: " ([d] removed list)" }),
24997
+ /* @__PURE__ */ jsx42(Text35, { children: " \xB7 " }),
24998
+ /* @__PURE__ */ jsx42(Text35, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
25034
24999
  ] });
25035
25000
  }
25036
25001
 
25037
25002
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
25038
- import { Fragment as Fragment13, jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
25003
+ import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
25039
25004
  function sortComponentsForSidebar(components, cycleParticipants) {
25040
25005
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
25041
25006
  const tier = (c2) => {
@@ -25079,7 +25044,7 @@ function CyclePathLine({
25079
25044
  return /* @__PURE__ */ jsxs34(Text36, { color: highlightLine ? PALETTE.warning : void 0, children: [
25080
25045
  prefix,
25081
25046
  segments.map(
25082
- (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)
25047
+ (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)
25083
25048
  )
25084
25049
  ] });
25085
25050
  }
@@ -25091,31 +25056,31 @@ function CycleDetailPanel({
25091
25056
  height
25092
25057
  }) {
25093
25058
  const lines = [
25094
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
25095
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
25096
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
25097
- /* @__PURE__ */ jsx44(Text36, { children: " " }, "cyc-space")
25059
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
25060
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
25061
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
25062
+ /* @__PURE__ */ jsx43(Text36, { children: " " }, "cyc-space")
25098
25063
  ];
25099
25064
  cycles.forEach((cycle, index) => {
25100
25065
  const nodeCount = new Set(cycle.path).size;
25101
25066
  const isCursor = index === cursor;
25102
25067
  lines.push(
25103
- /* @__PURE__ */ jsx44(Text36, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
25104
- /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
25068
+ /* @__PURE__ */ jsx43(Text36, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
25069
+ /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
25105
25070
  );
25106
25071
  if (cycle.suggestedBreak) {
25107
25072
  lines.push(
25108
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
25073
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
25109
25074
  );
25110
25075
  }
25111
- lines.push(/* @__PURE__ */ jsx44(Text36, { children: " " }, `cyc-s-${index}`));
25076
+ lines.push(/* @__PURE__ */ jsx43(Text36, { children: " " }, `cyc-s-${index}`));
25112
25077
  });
25113
25078
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
25114
25079
  const viewportHeight = Math.max(1, height - 3);
25115
25080
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
25116
25081
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25117
25082
  visible,
25118
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: footer })
25083
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: footer })
25119
25084
  ] });
25120
25085
  }
25121
25086
  function BreakCyclePanel({
@@ -25127,13 +25092,13 @@ function BreakCyclePanel({
25127
25092
  height
25128
25093
  }) {
25129
25094
  return /* @__PURE__ */ jsxs34(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25130
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
25131
- cycle && /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
25132
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
25133
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
25134
- edges.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.muted, children: "remove slot edge:" }),
25135
- 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}`)),
25136
- 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" })
25095
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
25096
+ cycle && /* @__PURE__ */ jsx43(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
25097
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
25098
+ /* @__PURE__ */ jsx43(Text36, { children: " " }),
25099
+ edges.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "remove slot edge:" }),
25100
+ 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}`)),
25101
+ 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" })
25137
25102
  ] });
25138
25103
  }
25139
25104
  var HELP_SECTIONS2 = [
@@ -25239,9 +25204,9 @@ function deriveBreakingChanges(response) {
25239
25204
  }
25240
25205
  function GenerateReviewStep(props) {
25241
25206
  if (!props.extractSessionId) {
25242
- 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." }) });
25207
+ 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." }) });
25243
25208
  }
25244
- return /* @__PURE__ */ jsx44(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
25209
+ return /* @__PURE__ */ jsx43(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
25245
25210
  }
25246
25211
  function GenerateReviewStepView({
25247
25212
  extractSessionId,
@@ -25306,7 +25271,7 @@ function GenerateReviewStepView({
25306
25271
  setFinalizeError
25307
25272
  } = reviewSurface;
25308
25273
  const [removedBannerCollapsed, setRemovedBannerCollapsed] = useState22(false);
25309
- const removedBannerDefaultedRef = useRef12(false);
25274
+ const removedBannerDefaultedRef = useRef11(false);
25310
25275
  const [cyclePanelScroll, setCyclePanelScroll] = useState22(0);
25311
25276
  const [cyclesCursor, setCyclesCursor] = useState22(0);
25312
25277
  const cyclePanel = useOverlayPanel({
@@ -25326,7 +25291,7 @@ function GenerateReviewStepView({
25326
25291
  const [breakCursor, setBreakCursor] = useState22(0);
25327
25292
  const [breakConfirm, setBreakConfirm] = useState22(false);
25328
25293
  const [expandedGroups, setExpandedGroups] = useState22(/* @__PURE__ */ new Set());
25329
- const seededGroupsRef = useRef12(false);
25294
+ const seededGroupsRef = useRef11(false);
25330
25295
  const {
25331
25296
  searchOpen,
25332
25297
  setSearchOpen,
@@ -25350,7 +25315,7 @@ function GenerateReviewStepView({
25350
25315
  const [pendingEditorFocus, setPendingEditorFocus] = useState22(null);
25351
25316
  const [autoRejected, setAutoRejected] = useState22([]);
25352
25317
  const [undoSnapshot, setUndoSnapshot] = useState22(null);
25353
- const autoRejectFiredRef = useRef12(false);
25318
+ const autoRejectFiredRef = useRef11(false);
25354
25319
  const [showReloadDialog, setShowReloadDialog] = useState22(false);
25355
25320
  const acceptedCountForPreview = components.filter((c2) => c2.status === "accepted").length;
25356
25321
  const { previewAnnotations, removedComponents, livePreviewHook, livePreviewSpinner } = useReviewPreview({
@@ -25483,7 +25448,7 @@ function GenerateReviewStepView({
25483
25448
  }),
25484
25449
  applySnapshot: applyHistorySnapshot
25485
25450
  });
25486
- const autoRejectPushedRef = useRef12(false);
25451
+ const autoRejectPushedRef = useRef11(false);
25487
25452
  useEffect16(() => {
25488
25453
  if (loading) return;
25489
25454
  if (!historySeededRef.current) return;
@@ -26098,13 +26063,13 @@ function GenerateReviewStepView({
26098
26063
  }
26099
26064
  });
26100
26065
  if (loading) {
26101
- return /* @__PURE__ */ jsx44(ReviewLoadingState, {});
26066
+ return /* @__PURE__ */ jsx43(ReviewLoadingState, {});
26102
26067
  }
26103
26068
  if (loadError) {
26104
- return /* @__PURE__ */ jsx44(ReviewLoadError, { message: loadError });
26069
+ return /* @__PURE__ */ jsx43(ReviewLoadError, { message: loadError });
26105
26070
  }
26106
26071
  if (showHelp) {
26107
- return /* @__PURE__ */ jsx44(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
26072
+ return /* @__PURE__ */ jsx43(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
26108
26073
  }
26109
26074
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
26110
26075
  components,
@@ -26145,7 +26110,7 @@ function GenerateReviewStepView({
26145
26110
  return false;
26146
26111
  })();
26147
26112
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
26148
- /* @__PURE__ */ jsx44(
26113
+ /* @__PURE__ */ jsx43(
26149
26114
  ReviewStepDialogs,
26150
26115
  {
26151
26116
  surfaceState: reviewSurface,
@@ -26155,15 +26120,15 @@ function GenerateReviewStepView({
26155
26120
  onQuit
26156
26121
  }
26157
26122
  ),
26158
- /* @__PURE__ */ jsx44(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
26123
+ /* @__PURE__ */ jsx43(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
26159
26124
  removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
26160
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
26125
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
26161
26126
  !removedBannerCollapsed && /* @__PURE__ */ jsxs34(Fragment13, { children: [
26162
- /* @__PURE__ */ jsx44(Text36, { children: " " }),
26163
- removedComponents.map((rc) => /* @__PURE__ */ jsx44(Text36, { children: removedComponentLine(rc) }, rc.id))
26127
+ /* @__PURE__ */ jsx43(Text36, { children: " " }),
26128
+ removedComponents.map((rc) => /* @__PURE__ */ jsx43(Text36, { children: removedComponentLine(rc) }, rc.id))
26164
26129
  ] })
26165
26130
  ] }),
26166
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx44(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx44(
26131
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx43(Box33, { paddingX: 1, children: /* @__PURE__ */ jsx43(
26167
26132
  Text36,
26168
26133
  {
26169
26134
  color: PALETTE.warning,
@@ -26175,13 +26140,13 @@ function GenerateReviewStepView({
26175
26140
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
26176
26141
  if (!comp) return null;
26177
26142
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26178
- /* @__PURE__ */ jsx44(Text36, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
26179
- 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"}` }),
26180
- 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}`)),
26181
- /* @__PURE__ */ jsx44(Text36, { children: "[D/Esc] close detail" })
26143
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
26144
+ 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"}` }),
26145
+ 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}`)),
26146
+ /* @__PURE__ */ jsx43(Text36, { children: "[D/Esc] close detail" })
26182
26147
  ] });
26183
26148
  })(),
26184
- !dialogOpen && /* @__PURE__ */ jsx44(
26149
+ !dialogOpen && /* @__PURE__ */ jsx43(
26185
26150
  LivePreviewSummary,
26186
26151
  {
26187
26152
  enabled: livePreview,
@@ -26201,15 +26166,15 @@ function GenerateReviewStepView({
26201
26166
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
26202
26167
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
26203
26168
  return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
26204
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
26205
- members.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
26206
- ancestors.length > 0 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
26207
- /* @__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" })
26169
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
26170
+ members.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
26171
+ ancestors.length > 0 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
26172
+ /* @__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" })
26208
26173
  ] });
26209
26174
  })(),
26210
- /* @__PURE__ */ jsx44(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
26211
- /* @__PURE__ */ jsx44(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
26212
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx44(
26175
+ /* @__PURE__ */ jsx43(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
26176
+ /* @__PURE__ */ jsx43(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
26177
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx43(
26213
26178
  BreakCyclePanel,
26214
26179
  {
26215
26180
  cycle: cycleRows[cyclesCursor],
@@ -26220,7 +26185,7 @@ function GenerateReviewStepView({
26220
26185
  height: panelHeight
26221
26186
  }
26222
26187
  ),
26223
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx44(
26188
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx43(
26224
26189
  CycleDetailPanel,
26225
26190
  {
26226
26191
  cycles: cycleRows,
@@ -26231,7 +26196,7 @@ function GenerateReviewStepView({
26231
26196
  }
26232
26197
  ),
26233
26198
  !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { children: [
26234
- breakingPanel.isOpen ? /* @__PURE__ */ jsx44(
26199
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx43(
26235
26200
  GotoBanner,
26236
26201
  {
26237
26202
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -26244,7 +26209,7 @@ function GenerateReviewStepView({
26244
26209
  width: sidebarWidth,
26245
26210
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
26246
26211
  }
26247
- ) : /* @__PURE__ */ jsx44(
26212
+ ) : /* @__PURE__ */ jsx43(
26248
26213
  GroupedSidebar,
26249
26214
  {
26250
26215
  items: groupedItems,
@@ -26285,7 +26250,7 @@ function GenerateReviewStepView({
26285
26250
  graph: sidebarGraph
26286
26251
  }
26287
26252
  ),
26288
- selected ? /* @__PURE__ */ jsx44(
26253
+ selected ? /* @__PURE__ */ jsx43(
26289
26254
  ReviewComponentPanel,
26290
26255
  {
26291
26256
  selectedKey: selected.key,
@@ -26317,12 +26282,12 @@ function GenerateReviewStepView({
26317
26282
  livePreview: livePreviewHook,
26318
26283
  livePreviewSpinner
26319
26284
  }
26320
- ) : /* @__PURE__ */ jsx44(ReviewNoSelection, {})
26285
+ ) : /* @__PURE__ */ jsx43(ReviewNoSelection, {})
26321
26286
  ] }),
26322
26287
  !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", children: [
26323
- /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
26288
+ /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
26324
26289
  cycleRows.slice(0, 3).map((cycle, idx) => {
26325
- return /* @__PURE__ */ jsx44(
26290
+ return /* @__PURE__ */ jsx43(
26326
26291
  CyclePathLine,
26327
26292
  {
26328
26293
  segments: formatCyclePathSegments2(cycle),
@@ -26333,10 +26298,10 @@ function GenerateReviewStepView({
26333
26298
  `cyc-banner-${idx}`
26334
26299
  );
26335
26300
  }),
26336
- cycleRows.length > 3 && /* @__PURE__ */ jsx44(Text36, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
26337
- /* @__PURE__ */ jsx44(Text36, { children: " press [c] for detail" })
26301
+ cycleRows.length > 3 && /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
26302
+ /* @__PURE__ */ jsx43(Text36, { children: " press [c] for detail" })
26338
26303
  ] }),
26339
- /* @__PURE__ */ jsx44(
26304
+ /* @__PURE__ */ jsx43(
26340
26305
  SearchMatchSummary,
26341
26306
  {
26342
26307
  open: searchOpen,
@@ -26347,22 +26312,22 @@ function GenerateReviewStepView({
26347
26312
  hidden: dialogOpen
26348
26313
  }
26349
26314
  ),
26350
- !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx44(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
26315
+ !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx43(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
26351
26316
  ] });
26352
26317
  }
26353
26318
 
26354
26319
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
26355
26320
  import { Box as Box34, Text as Text37 } from "ink";
26356
- import { jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
26321
+ import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
26357
26322
  function CustomPromptBanner({ generatePromptPath }) {
26358
26323
  if (!generatePromptPath) return null;
26359
26324
  return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26360
- /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
26325
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
26361
26326
  generatePromptPath ? /* @__PURE__ */ jsxs35(Text37, { color: PALETTE.warning, children: [
26362
26327
  "components: ",
26363
26328
  generatePromptPath
26364
26329
  ] }) : null,
26365
- /* @__PURE__ */ jsx45(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
26330
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
26366
26331
  ] });
26367
26332
  }
26368
26333
 
@@ -26384,25 +26349,25 @@ function buildPostPushUrl2({ host, spaceId, environmentId, view = "components" }
26384
26349
 
26385
26350
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
26386
26351
  import { Box as Box35, Text as Text38 } from "ink";
26387
- import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
26352
+ import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
26388
26353
  function SpaceEnvironment({ spaceId, environmentId }) {
26389
26354
  return /* @__PURE__ */ jsxs36(Box35, { gap: 1, marginTop: 1, children: [
26390
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Space:" }),
26391
- /* @__PURE__ */ jsx46(Text38, { children: spaceId }),
26392
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "/" }),
26393
- /* @__PURE__ */ jsx46(Text38, { color: PALETTE.muted, children: "Environment:" }),
26394
- /* @__PURE__ */ jsx46(Text38, { children: environmentId })
26355
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Space:" }),
26356
+ /* @__PURE__ */ jsx45(Text38, { children: spaceId }),
26357
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "/" }),
26358
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Environment:" }),
26359
+ /* @__PURE__ */ jsx45(Text38, { children: environmentId })
26395
26360
  ] });
26396
26361
  }
26397
26362
 
26398
26363
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
26399
- import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
26364
+ import { Fragment as Fragment14, jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
26400
26365
  var ACTIONS = ["created", "updated", "removed"];
26401
26366
  function EntityRows({ entity, label }) {
26402
26367
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
26403
26368
  return /* @__PURE__ */ jsxs37(Fragment14, { children: [
26404
26369
  ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs37(Text39, { children: [
26405
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: "\u2713" }),
26370
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "\u2713" }),
26406
26371
  " ",
26407
26372
  plural3(entity[action]),
26408
26373
  " ",
@@ -26417,8 +26382,8 @@ function EntityRows({ entity, label }) {
26417
26382
  }
26418
26383
  function LinkRow({ title, url }) {
26419
26384
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
26420
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.muted, children: title }),
26421
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.accent, children: url })
26385
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: title }),
26386
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.accent, children: url })
26422
26387
  ] });
26423
26388
  }
26424
26389
  function DoneStep({
@@ -26441,11 +26406,11 @@ function DoneStep({
26441
26406
  const success = totalFailed === 0;
26442
26407
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
26443
26408
  return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26444
- success ? /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
26445
- 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: [
26446
- /* @__PURE__ */ jsx47(EntityRows, { entity: componentTypes, label: "Component Type" }),
26447
- /* @__PURE__ */ jsx47(EntityRows, { entity: designTokens, label: "Design Token" }),
26448
- summary && /* @__PURE__ */ jsx47(Box36, { marginTop: 1, children: /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.muted, children: [
26409
+ success ? /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
26410
+ 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: [
26411
+ /* @__PURE__ */ jsx46(EntityRows, { entity: componentTypes, label: "Component Type" }),
26412
+ /* @__PURE__ */ jsx46(EntityRows, { entity: designTokens, label: "Design Token" }),
26413
+ summary && /* @__PURE__ */ jsx46(Box36, { marginTop: 1, children: /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.muted, children: [
26449
26414
  "Push result: ",
26450
26415
  summary.succeeded,
26451
26416
  "/",
@@ -26459,7 +26424,7 @@ function DoneStep({
26459
26424
  ] }) })
26460
26425
  ] }),
26461
26426
  failures.length > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", children: [
26462
- /* @__PURE__ */ jsx47(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
26427
+ /* @__PURE__ */ jsx46(Text39, { bold: true, color: PALETTE.error, children: "Failure details" }),
26463
26428
  failures.map((failure) => /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.error, children: [
26464
26429
  failure.entityType,
26465
26430
  " ",
@@ -26468,11 +26433,11 @@ function DoneStep({
26468
26433
  failure.message
26469
26434
  ] }, `${failure.entityType}:${failure.entityId}`))
26470
26435
  ] }),
26471
- /* @__PURE__ */ jsx47(SpaceEnvironment, { spaceId, environmentId }),
26436
+ /* @__PURE__ */ jsx46(SpaceEnvironment, { spaceId, environmentId }),
26472
26437
  success && totalPushed > 0 && /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", gap: 1, children: [
26473
- /* @__PURE__ */ jsx47(Text39, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
26474
- /* @__PURE__ */ jsx47(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
26475
- /* @__PURE__ */ jsx47(
26438
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
26439
+ /* @__PURE__ */ jsx46(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
26440
+ /* @__PURE__ */ jsx46(
26476
26441
  LinkRow,
26477
26442
  {
26478
26443
  title: "View your design tokens here:",
@@ -26480,7 +26445,7 @@ function DoneStep({
26480
26445
  }
26481
26446
  )
26482
26447
  ] }),
26483
- /* @__PURE__ */ jsx47(Text39, { children: "[Enter / q] Exit" })
26448
+ /* @__PURE__ */ jsx46(Text39, { children: "[Enter / q] Exit" })
26484
26449
  ] });
26485
26450
  }
26486
26451
 
@@ -26520,7 +26485,7 @@ function useBlinkingCursor() {
26520
26485
  }
26521
26486
 
26522
26487
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
26523
- import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
26488
+ import { jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
26524
26489
  function autocomplete(partial) {
26525
26490
  if (!partial) return null;
26526
26491
  const normalized = normalizePath(partial);
@@ -26579,18 +26544,18 @@ function PathPrompt({
26579
26544
  const cursor = cursorVisible ? "\u2588" : " ";
26580
26545
  return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26581
26546
  /* @__PURE__ */ jsxs38(Box37, { gap: 1, children: [
26582
- /* @__PURE__ */ jsx48(Text40, { color: PALETTE.accent, children: "?" }),
26547
+ /* @__PURE__ */ jsx47(Text40, { color: PALETTE.accent, children: "?" }),
26583
26548
  /* @__PURE__ */ jsxs38(Text40, { bold: true, children: [
26584
26549
  label,
26585
26550
  ":"
26586
26551
  ] }),
26587
- /* @__PURE__ */ jsx48(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
26588
- /* @__PURE__ */ jsx48(Text40, { children: cursor })
26552
+ /* @__PURE__ */ jsx47(Text40, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
26553
+ /* @__PURE__ */ jsx47(Text40, { children: cursor })
26589
26554
  ] }),
26590
26555
  /* @__PURE__ */ jsxs38(Box37, { gap: 3, children: [
26591
- /* @__PURE__ */ jsx48(Text40, { children: "[Enter] Confirm" }),
26592
- /* @__PURE__ */ jsx48(Text40, { children: "[Tab] Autocomplete" }),
26593
- /* @__PURE__ */ jsx48(Text40, { children: "[Esc] Cancel" })
26556
+ /* @__PURE__ */ jsx47(Text40, { children: "[Enter] Confirm" }),
26557
+ /* @__PURE__ */ jsx47(Text40, { children: "[Tab] Autocomplete" }),
26558
+ /* @__PURE__ */ jsx47(Text40, { children: "[Esc] Cancel" })
26594
26559
  ] })
26595
26560
  ] });
26596
26561
  }
@@ -26601,10 +26566,10 @@ import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@i
26601
26566
 
26602
26567
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/StepHeader.tsx
26603
26568
  import { Box as Box38, Text as Text41 } from "ink";
26604
- import { jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
26569
+ import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
26605
26570
  function StepHeader({ stepNumber, totalSteps, title }) {
26606
26571
  return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 0, children: [
26607
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
26572
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
26608
26573
  /* @__PURE__ */ jsxs39(Box38, { gap: 1, children: [
26609
26574
  /* @__PURE__ */ jsxs39(Text41, { bold: true, children: [
26610
26575
  "Step ",
@@ -26612,17 +26577,17 @@ function StepHeader({ stepNumber, totalSteps, title }) {
26612
26577
  " of ",
26613
26578
  totalSteps
26614
26579
  ] }),
26615
- /* @__PURE__ */ jsx49(Text41, { bold: true, children: "\u2014" }),
26616
- /* @__PURE__ */ jsx49(Text41, { bold: true, children: title })
26580
+ /* @__PURE__ */ jsx48(Text41, { bold: true, children: "\u2014" }),
26581
+ /* @__PURE__ */ jsx48(Text41, { bold: true, children: title })
26617
26582
  ] }),
26618
- /* @__PURE__ */ jsx49(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
26583
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "\u2500".repeat(40) })
26619
26584
  ] });
26620
26585
  }
26621
26586
 
26622
26587
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
26623
26588
  import { useEffect as useEffect18, useState as useState25 } from "react";
26624
26589
  import { Spinner as Spinner2 } from "@inkjs/ui";
26625
- import { jsx as jsx50 } from "react/jsx-runtime";
26590
+ import { jsx as jsx49 } from "react/jsx-runtime";
26626
26591
  function useTimedSpinner() {
26627
26592
  const [elapsedSeconds, setElapsedSeconds] = useState25(0);
26628
26593
  useEffect18(() => {
@@ -26634,27 +26599,27 @@ function useTimedSpinner() {
26634
26599
  const mins = Math.floor(elapsedSeconds / 60);
26635
26600
  const secs = elapsedSeconds % 60;
26636
26601
  return {
26637
- spinner: /* @__PURE__ */ jsx50(Spinner2, {}),
26602
+ spinner: /* @__PURE__ */ jsx49(Spinner2, {}),
26638
26603
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
26639
26604
  };
26640
26605
  }
26641
26606
 
26642
26607
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
26643
- import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
26608
+ import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
26644
26609
  function PushingStep({ stepNumber, totalSteps, progress }) {
26645
26610
  const { elapsed } = useTimedSpinner();
26646
26611
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
26647
26612
  const showGlobal = progress && progress.kind === "progress";
26648
26613
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
26649
26614
  return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26650
- /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
26651
- /* @__PURE__ */ jsx51(Text42, { children: "Writing component types and design tokens to your Contentful space..." }),
26615
+ /* @__PURE__ */ jsx50(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
26616
+ /* @__PURE__ */ jsx50(Text42, { children: "Writing component types and design tokens to your Contentful space..." }),
26652
26617
  operationId && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
26653
- /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Operation:" }),
26654
- /* @__PURE__ */ jsx51(Text42, { children: operationId })
26618
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Operation:" }),
26619
+ /* @__PURE__ */ jsx50(Text42, { children: operationId })
26655
26620
  ] }),
26656
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx51(Box39, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs40(Box39, { gap: 2, children: [
26657
- /* @__PURE__ */ jsx51(Box39, { width: 40, children: /* @__PURE__ */ jsx51(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx51(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
26621
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx50(Box39, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs40(Box39, { gap: 2, children: [
26622
+ /* @__PURE__ */ jsx50(Box39, { width: 40, children: /* @__PURE__ */ jsx50(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx50(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
26658
26623
  /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
26659
26624
  progress.processed,
26660
26625
  "/",
@@ -26663,10 +26628,10 @@ function PushingStep({ stepNumber, totalSteps, progress }) {
26663
26628
  ] })
26664
26629
  ] }) }),
26665
26630
  showCurrent && /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
26666
- /* @__PURE__ */ jsx51(Text42, { color: PALETTE.muted, children: "Now processing:" }),
26667
- /* @__PURE__ */ jsx51(Text42, { children: showCurrent })
26631
+ /* @__PURE__ */ jsx50(Text42, { color: PALETTE.muted, children: "Now processing:" }),
26632
+ /* @__PURE__ */ jsx50(Text42, { children: showCurrent })
26668
26633
  ] }),
26669
- /* @__PURE__ */ jsx51(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
26634
+ /* @__PURE__ */ jsx50(Box39, { marginTop: 1, children: /* @__PURE__ */ jsxs40(Text42, { color: PALETTE.muted, children: [
26670
26635
  "Elapsed: ",
26671
26636
  elapsed
26672
26637
  ] }) })
@@ -26849,7 +26814,7 @@ function usePreviewConfirmationInput(breakingWithImpact, onConfirm) {
26849
26814
  }
26850
26815
 
26851
26816
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
26852
- import { Fragment as Fragment15, jsx as jsx52, jsxs as jsxs41 } from "react/jsx-runtime";
26817
+ import { Fragment as Fragment15, jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
26853
26818
  function buildPreviewSummaryLines(preview) {
26854
26819
  const lines = [];
26855
26820
  const { components, tokens } = preview;
@@ -27104,9 +27069,9 @@ function WizardPreviewStep({
27104
27069
  }
27105
27070
  });
27106
27071
  return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 2, children: [
27107
- /* @__PURE__ */ jsx52(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
27072
+ /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
27108
27073
  hasAnything ? /* @__PURE__ */ jsxs41(Fragment15, { children: [
27109
- /* @__PURE__ */ jsx52(Text43, { children: "Here's what will happen in your space:" }),
27074
+ /* @__PURE__ */ jsx51(Text43, { children: "Here's what will happen in your space:" }),
27110
27075
  /* @__PURE__ */ jsxs41(
27111
27076
  WindowedPanel,
27112
27077
  {
@@ -27115,24 +27080,24 @@ function WizardPreviewStep({
27115
27080
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
27116
27081
  focused: false,
27117
27082
  children: [
27118
- 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)),
27119
- /* @__PURE__ */ jsx52(Text43, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
27083
+ 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)),
27084
+ /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
27120
27085
  ]
27121
27086
  }
27122
27087
  )
27123
- ] }) : /* @__PURE__ */ jsx52(Text43, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
27124
- 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." }) }),
27125
- /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
27088
+ ] }) : /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
27089
+ 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." }) }),
27090
+ /* @__PURE__ */ jsx51(SpaceEnvironment, { spaceId, environmentId }),
27126
27091
  /* @__PURE__ */ jsxs41(Box40, { gap: 3, marginTop: 1, children: [
27127
- /* @__PURE__ */ jsx52(Text43, { children: "[Enter] Push to Contentful" }),
27092
+ /* @__PURE__ */ jsx51(Text43, { children: "[Enter] Push to Contentful" }),
27128
27093
  /* @__PURE__ */ jsxs41(Text43, { children: [
27129
27094
  "[d] ",
27130
27095
  diffExpanded ? "Hide" : "Show",
27131
27096
  " diff"
27132
27097
  ] }),
27133
- diffExpanded && /* @__PURE__ */ jsx52(Text43, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
27134
- onEdit && /* @__PURE__ */ jsx52(Text43, { children: "[e] Edit definitions" }),
27135
- /* @__PURE__ */ jsx52(Text43, { children: "[q] Cancel" })
27098
+ diffExpanded && /* @__PURE__ */ jsx51(Text43, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
27099
+ onEdit && /* @__PURE__ */ jsx51(Text43, { children: "[e] Edit definitions" }),
27100
+ /* @__PURE__ */ jsx51(Text43, { children: "[q] Cancel" })
27136
27101
  ] })
27137
27102
  ] });
27138
27103
  }
@@ -27144,7 +27109,7 @@ function buildRunTeaserLine(runId) {
27144
27109
  }
27145
27110
 
27146
27111
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
27147
- import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
27112
+ import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
27148
27113
  function totalStepsFor(state2) {
27149
27114
  const hasTokenStage = !!state2.tokensPath || !!state2.rawTokensPath;
27150
27115
  return 3 + (hasTokenStage ? 1 : 0) + 2 + (state2.mapTokensEligible === true ? 1 : 0);
@@ -27165,7 +27130,7 @@ function FlowScreen({
27165
27130
  const content = (() => {
27166
27131
  switch (state2.step) {
27167
27132
  case "final-review":
27168
- return /* @__PURE__ */ jsx53(
27133
+ return /* @__PURE__ */ jsx52(
27169
27134
  GenerateReviewStep,
27170
27135
  {
27171
27136
  extractSessionId: state2.extractSessionId,
@@ -27182,7 +27147,7 @@ function FlowScreen({
27182
27147
  }
27183
27148
  );
27184
27149
  case "previewing":
27185
- return /* @__PURE__ */ jsx53(
27150
+ return /* @__PURE__ */ jsx52(
27186
27151
  RunningStep,
27187
27152
  {
27188
27153
  stepNumber: totalSteps,
@@ -27193,7 +27158,7 @@ function FlowScreen({
27193
27158
  );
27194
27159
  case "preview-gate":
27195
27160
  if (!state2.serverPreview) return null;
27196
- return /* @__PURE__ */ jsx53(
27161
+ return /* @__PURE__ */ jsx52(
27197
27162
  WizardPreviewStep,
27198
27163
  {
27199
27164
  preview: state2.serverPreview,
@@ -27207,9 +27172,9 @@ function FlowScreen({
27207
27172
  }
27208
27173
  );
27209
27174
  case "pushing":
27210
- return /* @__PURE__ */ jsx53(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
27175
+ return /* @__PURE__ */ jsx52(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
27211
27176
  case "path-prompt":
27212
- return /* @__PURE__ */ jsx53(
27177
+ return /* @__PURE__ */ jsx52(
27213
27178
  PathPrompt,
27214
27179
  {
27215
27180
  defaultPath: state2.outDir,
@@ -27218,7 +27183,7 @@ function FlowScreen({
27218
27183
  }
27219
27184
  );
27220
27185
  case "printing":
27221
- return /* @__PURE__ */ jsx53(
27186
+ return /* @__PURE__ */ jsx52(
27222
27187
  RunningStep,
27223
27188
  {
27224
27189
  stepNumber: totalSteps,
@@ -27229,7 +27194,7 @@ function FlowScreen({
27229
27194
  );
27230
27195
  case "print-gate": {
27231
27196
  const teaser = buildRunTeaserLine(state2.lastRunId);
27232
- return /* @__PURE__ */ jsx53(
27197
+ return /* @__PURE__ */ jsx52(
27233
27198
  GateStep,
27234
27199
  {
27235
27200
  message: "Files saved",
@@ -27243,7 +27208,7 @@ function FlowScreen({
27243
27208
  }
27244
27209
  case "done": {
27245
27210
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
27246
- return /* @__PURE__ */ jsx53(
27211
+ return /* @__PURE__ */ jsx52(
27247
27212
  DoneStep,
27248
27213
  {
27249
27214
  componentTypes: state2.pushResult.componentTypes,
@@ -27258,7 +27223,7 @@ function FlowScreen({
27258
27223
  );
27259
27224
  }
27260
27225
  case "preview-validation-error":
27261
- return /* @__PURE__ */ jsx53(
27226
+ return /* @__PURE__ */ jsx52(
27262
27227
  PreviewValidationErrorScreen,
27263
27228
  {
27264
27229
  errors: state2.previewValidationErrors,
@@ -27269,7 +27234,7 @@ function FlowScreen({
27269
27234
  }
27270
27235
  );
27271
27236
  case "error":
27272
- return /* @__PURE__ */ jsx53(
27237
+ return /* @__PURE__ */ jsx52(
27273
27238
  ErrorStep,
27274
27239
  {
27275
27240
  stepName: state2.errorStep,
@@ -27281,13 +27246,13 @@ function FlowScreen({
27281
27246
  }
27282
27247
  })();
27283
27248
  return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", children: [
27284
- /* @__PURE__ */ jsx53(CustomPromptBanner, { generatePromptPath }),
27249
+ /* @__PURE__ */ jsx52(CustomPromptBanner, { generatePromptPath }),
27285
27250
  content
27286
27251
  ] });
27287
27252
  }
27288
27253
 
27289
27254
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/use-flow.ts
27290
- import { useEffect as useEffect20, useRef as useRef13, useSyncExternalStore } from "react";
27255
+ import { useEffect as useEffect20, useRef as useRef12, useSyncExternalStore } from "react";
27291
27256
 
27292
27257
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/controller.ts
27293
27258
  import { appendFileSync, writeFileSync } from "node:fs";
@@ -28024,7 +27989,7 @@ function createFlowController(start, deps) {
28024
27989
 
28025
27990
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/use-flow.ts
28026
27991
  function useFlow(start, options = {}) {
28027
- const controller = useRef13();
27992
+ const controller = useRef12();
28028
27993
  if (start && !controller.current) {
28029
27994
  try {
28030
27995
  startWizardLog();
@@ -28049,7 +28014,7 @@ function useFlow(start, options = {}) {
28049
28014
 
28050
28015
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28051
28016
  import { useEffect as useEffect21, useState as useState27 } from "react";
28052
- import { Box as Box42, Text as Text44, useInput as useInput10 } from "ink";
28017
+ import { Box as Box42, Text as Text44, useInput as useInput9 } from "ink";
28053
28018
  init_debug_store();
28054
28019
 
28055
28020
  // packages/experience-design-system-cli/src/tui/help/help-info.ts
@@ -28110,13 +28075,13 @@ async function readHelpInfo() {
28110
28075
  }
28111
28076
 
28112
28077
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28113
- import { Fragment as Fragment16, jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
28078
+ import { Fragment as Fragment16, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
28114
28079
  function Section({ title, rows }) {
28115
28080
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
28116
- /* @__PURE__ */ jsx54(Text44, { bold: true, color: PALETTE.accent, children: title }),
28081
+ /* @__PURE__ */ jsx53(Text44, { bold: true, color: PALETTE.accent, children: title }),
28117
28082
  rows.map((row) => /* @__PURE__ */ jsxs43(Box42, { gap: 1, children: [
28118
- /* @__PURE__ */ jsx54(Box42, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx54(Text44, { color: PALETTE.muted, children: row.label }) }),
28119
- /* @__PURE__ */ jsx54(Text44, { children: row.value })
28083
+ /* @__PURE__ */ jsx53(Box42, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx53(Text44, { color: PALETTE.muted, children: row.label }) }),
28084
+ /* @__PURE__ */ jsx53(Text44, { children: row.value })
28120
28085
  ] }, row.label))
28121
28086
  ] });
28122
28087
  }
@@ -28130,7 +28095,7 @@ function HelpScreen({ onDone }) {
28130
28095
  void finishDebugRun({ outputs: {}, status: "success", exitMethod });
28131
28096
  onDone();
28132
28097
  };
28133
- useInput10((input, key) => {
28098
+ useInput9((input, key) => {
28134
28099
  if (key.return) {
28135
28100
  leave("saved");
28136
28101
  return;
@@ -28141,13 +28106,13 @@ function HelpScreen({ onDone }) {
28141
28106
  }
28142
28107
  });
28143
28108
  return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
28144
- /* @__PURE__ */ jsx54(Text44, { bold: true, children: "Help" }),
28109
+ /* @__PURE__ */ jsx53(Text44, { bold: true, children: "Help" }),
28145
28110
  info ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
28146
- /* @__PURE__ */ jsx54(Section, { title: "Where things are stored", rows: info.storage }),
28147
- /* @__PURE__ */ jsx54(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
28148
- /* @__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." })
28149
- ] }) : /* @__PURE__ */ jsx54(Text44, { color: PALETTE.accent, children: "Loading..." }),
28150
- /* @__PURE__ */ jsx54(
28111
+ /* @__PURE__ */ jsx53(Section, { title: "Where things are stored", rows: info.storage }),
28112
+ /* @__PURE__ */ jsx53(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
28113
+ /* @__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." })
28114
+ ] }) : /* @__PURE__ */ jsx53(Text44, { color: PALETTE.accent, children: "Loading..." }),
28115
+ /* @__PURE__ */ jsx53(
28151
28116
  ControlHints,
28152
28117
  {
28153
28118
  hints: [
@@ -28161,8 +28126,8 @@ function HelpScreen({ onDone }) {
28161
28126
 
28162
28127
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
28163
28128
  import { useState as useState28 } from "react";
28164
- import { Box as Box43, Text as Text45, useInput as useInput11 } from "ink";
28165
- import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
28129
+ import { Box as Box43, Text as Text45, useInput as useInput10 } from "ink";
28130
+ import { jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
28166
28131
  function SettingsScreen({
28167
28132
  onNavigate,
28168
28133
  onBack
@@ -28173,7 +28138,7 @@ function SettingsScreen({
28173
28138
  { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
28174
28139
  { label: "Debug Mode", screen: "settings-debug-mode" }
28175
28140
  ];
28176
- useInput11((input, key) => {
28141
+ useInput10((input, key) => {
28177
28142
  if (key.upArrow) {
28178
28143
  setFocusIdx((i) => (i - 1 + items.length) % items.length);
28179
28144
  return;
@@ -28194,14 +28159,14 @@ function SettingsScreen({
28194
28159
  }
28195
28160
  });
28196
28161
  return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28197
- /* @__PURE__ */ jsx55(Text45, { bold: true, children: "Settings" }),
28198
- /* @__PURE__ */ jsx55(Text45, { color: PALETTE.muted, children: " " }),
28162
+ /* @__PURE__ */ jsx54(Text45, { bold: true, children: "Settings" }),
28163
+ /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: " " }),
28199
28164
  items.map((item, i) => /* @__PURE__ */ jsxs44(Text45, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
28200
28165
  i === focusIdx ? "> " : " ",
28201
28166
  item.label
28202
28167
  ] }, item.label)),
28203
- /* @__PURE__ */ jsx55(Text45, { children: " " }),
28204
- /* @__PURE__ */ jsx55(
28168
+ /* @__PURE__ */ jsx54(Text45, { children: " " }),
28169
+ /* @__PURE__ */ jsx54(
28205
28170
  ControlHints,
28206
28171
  {
28207
28172
  hints: [
@@ -28216,11 +28181,11 @@ function SettingsScreen({
28216
28181
 
28217
28182
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
28218
28183
  import { useState as useState33 } from "react";
28219
- import { Box as Box48, Text as Text51, useInput as useInput15 } from "ink";
28184
+ import { Box as Box48, Text as Text51, useInput as useInput14 } from "ink";
28220
28185
 
28221
28186
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
28222
- import { useEffect as useEffect23, useRef as useRef14, useState as useState31 } from "react";
28223
- import { Box as Box46, Text as Text49, useInput as useInput13 } from "ink";
28187
+ import { useEffect as useEffect23, useRef as useRef13, useState as useState31 } from "react";
28188
+ import { Box as Box46, Text as Text49, useInput as useInput12 } from "ink";
28224
28189
  init_debug_store();
28225
28190
 
28226
28191
  // packages/experience-design-system-cli/src/tui/settings/shared/debug-trail.ts
@@ -28553,8 +28518,9 @@ import { Box as Box45, Text as Text48 } from "ink";
28553
28518
 
28554
28519
  // packages/experience-design-system-cli/src/tui/settings/shared/FieldForm.tsx
28555
28520
  import { useState as useState29 } from "react";
28556
- import { Box as Box44, Text as Text46, useInput as useInput12 } from "ink";
28557
- import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
28521
+ import { Box as Box44, Text as Text46, useInput as useInput11 } from "ink";
28522
+ import TextInput4 from "ink-text-input";
28523
+ import { Fragment as Fragment17, jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
28558
28524
  function formLabelWidth(rows) {
28559
28525
  return Math.max(...rows.map((row) => row.label.length));
28560
28526
  }
@@ -28564,8 +28530,8 @@ function FormReadOnlyRow({
28564
28530
  children
28565
28531
  }) {
28566
28532
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
28567
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
28568
- /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: label }) }),
28533
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
28534
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: label }) }),
28569
28535
  children
28570
28536
  ] });
28571
28537
  }
@@ -28589,7 +28555,7 @@ function FieldForm({
28589
28555
  const labelWidth = formLabelWidth([...fields2, ...actions]);
28590
28556
  const currentField = active < fields2.length ? fields2[active] : void 0;
28591
28557
  const currentAction = currentField ? void 0 : actions[active - fields2.length];
28592
- useInput12((input, key) => {
28558
+ useInput11((input, key) => {
28593
28559
  if (busy) return;
28594
28560
  if (editing) {
28595
28561
  if (key.escape && currentField) {
@@ -28606,7 +28572,7 @@ function FieldForm({
28606
28572
  onSave();
28607
28573
  return;
28608
28574
  }
28609
- if (isClearKey(input, key) && currentField) {
28575
+ if (input === "c" && currentField) {
28610
28576
  onChange(currentField.key, "");
28611
28577
  return;
28612
28578
  }
@@ -28627,11 +28593,11 @@ function FieldForm({
28627
28593
  }
28628
28594
  }
28629
28595
  });
28630
- const pointer = (isActive) => /* @__PURE__ */ jsx56(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
28596
+ const pointer = (isActive) => /* @__PURE__ */ jsx55(Text46, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
28631
28597
  return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28632
- /* @__PURE__ */ jsx56(Text46, { bold: true, children: title }),
28633
- subtitle && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: subtitle }),
28634
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
28598
+ /* @__PURE__ */ jsx55(Text46, { bold: true, children: title }),
28599
+ subtitle && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: subtitle }),
28600
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
28635
28601
  /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
28636
28602
  fields2.map((field, index) => {
28637
28603
  const isActive = index === active;
@@ -28639,34 +28605,34 @@ function FieldForm({
28639
28605
  const display = field.masked ? "\u2022".repeat(value.length) : value;
28640
28606
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
28641
28607
  pointer(isActive),
28642
- /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
28643
- isActive && editing ? /* @__PURE__ */ jsx56(
28644
- ClearableTextInput,
28608
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
28609
+ isActive && editing ? /* @__PURE__ */ jsx55(
28610
+ TextInput4,
28645
28611
  {
28646
28612
  value,
28647
28613
  onChange: (next) => onChange(field.key, next),
28648
28614
  onSubmit: () => setEditing(false),
28649
28615
  mask: field.masked ? "\u2022" : void 0
28650
28616
  }
28651
- ) : display ? /* @__PURE__ */ jsx56(Text46, { bold: true, children: display }) : (
28617
+ ) : display ? /* @__PURE__ */ jsx55(Text46, { bold: true, children: display }) : (
28652
28618
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
28653
28619
  // text starts in the same column as every other row's.
28654
- /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
28620
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
28655
28621
  ),
28656
- display && field.hint && /* @__PURE__ */ jsx56(Text46, { color: PALETTE.muted, children: field.hint })
28622
+ display && field.hint && /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: field.hint })
28657
28623
  ] }, field.key);
28658
28624
  }),
28659
28625
  actions.map((action, index) => {
28660
28626
  const isActive = fields2.length + index === active;
28661
28627
  return /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
28662
28628
  pointer(isActive),
28663
- /* @__PURE__ */ jsx56(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
28664
- /* @__PURE__ */ jsx56(Text46, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
28629
+ /* @__PURE__ */ jsx55(Box44, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
28630
+ /* @__PURE__ */ jsx55(Text46, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
28665
28631
  ] }, action.label);
28666
28632
  })
28667
28633
  ] }),
28668
28634
  notice && /* @__PURE__ */ jsxs45(Fragment17, { children: [
28669
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
28635
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
28670
28636
  /* @__PURE__ */ jsxs45(Text46, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
28671
28637
  notice.kind === "success" ? "\u2713" : "\u2717",
28672
28638
  " ",
@@ -28674,20 +28640,19 @@ function FieldForm({
28674
28640
  ] })
28675
28641
  ] }),
28676
28642
  children,
28677
- /* @__PURE__ */ jsx56(Text46, { children: " " }),
28678
- /* @__PURE__ */ jsx56(
28643
+ /* @__PURE__ */ jsx55(Text46, { children: " " }),
28644
+ /* @__PURE__ */ jsx55(
28679
28645
  ControlHints,
28680
28646
  {
28681
28647
  hints: editing ? [
28682
28648
  { keys: "type", label: "edit" },
28683
28649
  { keys: "\u2190/\u2192", label: "move cursor" },
28684
28650
  { keys: "\u23CE", label: "done" },
28685
- { keys: "Ctrl+D", label: "clear" },
28686
28651
  { keys: "Esc", label: "cancel edit" }
28687
28652
  ] : [
28688
28653
  { keys: "\u2191/\u2193", label: "move" },
28689
28654
  { keys: "\u23CE", label: currentAction ? currentAction.hint : "edit" },
28690
- ...currentField ? [{ keys: "Ctrl+D", label: "clear" }] : [],
28655
+ ...currentField ? [{ keys: "c", label: "clear" }] : [],
28691
28656
  { keys: "s", label: "save" },
28692
28657
  { keys: "Esc/q", label: "back without saving" }
28693
28658
  ]
@@ -28698,7 +28663,7 @@ function FieldForm({
28698
28663
 
28699
28664
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
28700
28665
  import { Text as Text47 } from "ink";
28701
- import { jsx as jsx57 } from "react/jsx-runtime";
28666
+ import { jsx as jsx56 } from "react/jsx-runtime";
28702
28667
  var TONE_COLOR = {
28703
28668
  ok: PALETTE.success,
28704
28669
  bad: PALETTE.error,
@@ -28710,7 +28675,7 @@ function AgentStatusBadge({
28710
28675
  binary
28711
28676
  }) {
28712
28677
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
28713
- return /* @__PURE__ */ jsx57(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
28678
+ return /* @__PURE__ */ jsx56(Text47, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
28714
28679
  }
28715
28680
 
28716
28681
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/apply-binary-overrides.ts
@@ -28732,7 +28697,7 @@ function applyBinaryOverrides(config) {
28732
28697
  }
28733
28698
 
28734
28699
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
28735
- import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
28700
+ import { jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
28736
28701
  var fields = (name) => [
28737
28702
  { key: "binary", label: "Command path", hint: `(empty: \`${AGENT_BINARIES[name]}\` from the PATH)` },
28738
28703
  { key: "model", label: "Model", hint: `(empty: ${defaultModelLabel(name)})` }
@@ -28740,8 +28705,8 @@ var fields = (name) => [
28740
28705
  var INSPECT_DELAY_MS = 400;
28741
28706
  function StatusHeading() {
28742
28707
  return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
28743
- /* @__PURE__ */ jsx58(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
28744
- /* @__PURE__ */ jsx58(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
28708
+ /* @__PURE__ */ jsx57(Text48, { bold: true, color: PALETTE.muted, children: "STATUS" }),
28709
+ /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: "\xB7 read only" })
28745
28710
  ] });
28746
28711
  }
28747
28712
  function AgentDetail({
@@ -28804,7 +28769,7 @@ function AgentDetail({
28804
28769
  };
28805
28770
  const formFields = fields(name);
28806
28771
  const labelWidth = formLabelWidth([...formFields, action]);
28807
- return /* @__PURE__ */ jsx58(
28772
+ return /* @__PURE__ */ jsx57(
28808
28773
  FieldForm,
28809
28774
  {
28810
28775
  title: AGENT_LABELS[name],
@@ -28822,15 +28787,15 @@ function AgentDetail({
28822
28787
  notice: testing ? null : notice,
28823
28788
  busy: saving || testing,
28824
28789
  children: /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", marginTop: 1, children: [
28825
- /* @__PURE__ */ jsx58(StatusHeading, {}),
28826
- 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))
28790
+ /* @__PURE__ */ jsx57(StatusHeading, {}),
28791
+ 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))
28827
28792
  ] })
28828
28793
  }
28829
28794
  );
28830
28795
  }
28831
28796
 
28832
28797
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
28833
- import { Fragment as Fragment18, jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
28798
+ import { Fragment as Fragment18, jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
28834
28799
  var NAME_WIDTH = 16;
28835
28800
  var PANEL_LABEL_WIDTH = "Command".length;
28836
28801
  function AgentsScreen({ onDone }) {
@@ -28841,7 +28806,7 @@ function AgentsScreen({ onDone }) {
28841
28806
  const [saving, setSaving] = useState31(false);
28842
28807
  const [loadError, setLoadError] = useState31(null);
28843
28808
  const [checks, setChecks] = useState31({});
28844
- const visit = useRef14({
28809
+ const visit = useRef13({
28845
28810
  trail: createTrail(),
28846
28811
  before: void 0,
28847
28812
  environment: void 0,
@@ -28908,7 +28873,7 @@ function AgentsScreen({ onDone }) {
28908
28873
  setNotice({ kind: "error", text: `Default agent not changed: ${visit.error}` });
28909
28874
  }).finally(() => setSaving(false));
28910
28875
  };
28911
- useInput13((input, key) => {
28876
+ useInput12((input, key) => {
28912
28877
  if (loadError && (key.escape || input === "q")) {
28913
28878
  endVisit(null);
28914
28879
  onDone();
@@ -28941,20 +28906,20 @@ function AgentsScreen({ onDone }) {
28941
28906
  });
28942
28907
  if (!config) {
28943
28908
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28944
- /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Agents" }),
28945
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28909
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
28910
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28946
28911
  loadError ? /* @__PURE__ */ jsxs47(Fragment18, { children: [
28947
28912
  /* @__PURE__ */ jsxs47(Text49, { color: PALETTE.error, children: [
28948
28913
  "\u2717 Could not read the settings: ",
28949
28914
  loadError
28950
28915
  ] }),
28951
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28952
- /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
28953
- ] }) : /* @__PURE__ */ jsx59(Text49, { color: PALETTE.accent, children: "Loading..." })
28916
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28917
+ /* @__PURE__ */ jsx58(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
28918
+ ] }) : /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "Loading..." })
28954
28919
  ] });
28955
28920
  }
28956
28921
  if (open) {
28957
- return /* @__PURE__ */ jsx59(
28922
+ return /* @__PURE__ */ jsx58(
28958
28923
  AgentDetail,
28959
28924
  {
28960
28925
  name: open,
@@ -28976,46 +28941,46 @@ function AgentsScreen({ onDone }) {
28976
28941
  }
28977
28942
  const focusedAgent = AGENT_NAMES[focus];
28978
28943
  return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28979
- /* @__PURE__ */ jsx59(Text49, { bold: true, children: "Agents" }),
28980
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
28981
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28944
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: "Agents" }),
28945
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
28946
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28982
28947
  /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28983
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "Default agent" }),
28984
- /* @__PURE__ */ jsx59(Text49, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
28985
- saving && /* @__PURE__ */ jsx59(Text49, { color: PALETTE.accent, children: "\u2026 saving" })
28948
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "Default agent" }),
28949
+ /* @__PURE__ */ jsx58(Text49, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
28950
+ saving && /* @__PURE__ */ jsx58(Text49, { color: PALETTE.accent, children: "\u2026 saving" })
28986
28951
  ] }),
28987
28952
  /* @__PURE__ */ jsxs47(Box46, { marginTop: 1, gap: 1, children: [
28988
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28989
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28990
- /* @__PURE__ */ jsx59(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "AGENT" }) }),
28991
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: "STATUS" })
28953
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28954
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28955
+ /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "AGENT" }) }),
28956
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "STATUS" })
28992
28957
  ] }),
28993
28958
  AGENT_NAMES.map((name) => {
28994
28959
  const isFocused = focusedAgent === name;
28995
28960
  return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28996
- /* @__PURE__ */ jsx59(Text49, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
28997
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
28998
- /* @__PURE__ */ jsx59(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
28999
- /* @__PURE__ */ jsx59(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
28961
+ /* @__PURE__ */ jsx58(Text49, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
28962
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
28963
+ /* @__PURE__ */ jsx58(Box46, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
28964
+ /* @__PURE__ */ jsx58(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
29000
28965
  ] }, name);
29001
28966
  }),
29002
28967
  /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
29003
- /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
28968
+ /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
29004
28969
  panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs47(Box46, { gap: 1, paddingLeft: 1, children: [
29005
- /* @__PURE__ */ jsx59(Box46, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text49, { color: PALETTE.muted, children: row.label }) }),
29006
- /* @__PURE__ */ jsx59(Text49, { color: TONE_COLOR[row.tone], children: row.value })
28970
+ /* @__PURE__ */ jsx58(Box46, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: row.label }) }),
28971
+ /* @__PURE__ */ jsx58(Text49, { color: TONE_COLOR[row.tone], children: row.value })
29007
28972
  ] }, row.label))
29008
28973
  ] }),
29009
28974
  notice && /* @__PURE__ */ jsxs47(Fragment18, { children: [
29010
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
28975
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
29011
28976
  /* @__PURE__ */ jsxs47(Text49, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29012
28977
  notice.kind === "success" ? "\u2713" : "\u2717",
29013
28978
  " ",
29014
28979
  notice.text
29015
28980
  ] })
29016
28981
  ] }),
29017
- /* @__PURE__ */ jsx59(Text49, { children: " " }),
29018
- /* @__PURE__ */ jsx59(
28982
+ /* @__PURE__ */ jsx58(Text49, { children: " " }),
28983
+ /* @__PURE__ */ jsx58(
29019
28984
  ControlHints,
29020
28985
  {
29021
28986
  hints: [
@@ -29030,8 +28995,8 @@ function AgentsScreen({ onDone }) {
29030
28995
  }
29031
28996
 
29032
28997
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
29033
- import { useEffect as useEffect24, useRef as useRef15, useState as useState32 } from "react";
29034
- import { Box as Box47, Text as Text50, useInput as useInput14 } from "ink";
28998
+ import { useEffect as useEffect24, useRef as useRef14, useState as useState32 } from "react";
28999
+ import { Box as Box47, Text as Text50, useInput as useInput13 } from "ink";
29035
29000
  init_debug_store();
29036
29001
 
29037
29002
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/project-store.ts
@@ -29060,7 +29025,7 @@ async function writeCredentials(config) {
29060
29025
  }
29061
29026
 
29062
29027
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
29063
- import { Fragment as Fragment19, jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
29028
+ import { Fragment as Fragment19, jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
29064
29029
  var FIELDS2 = [
29065
29030
  { key: "spaceId", label: "Space ID" },
29066
29031
  { key: "environmentId", label: "Environment ID" },
@@ -29088,7 +29053,7 @@ function ProjectScreen({ onDone }) {
29088
29053
  const [saving, setSaving] = useState32(false);
29089
29054
  const [notice, setNotice] = useState32(null);
29090
29055
  const [loadError, setLoadError] = useState32(null);
29091
- const visit = useRef15({
29056
+ const visit = useRef14({
29092
29057
  trail: createTrail(),
29093
29058
  before: void 0,
29094
29059
  persisted: void 0,
@@ -29133,7 +29098,7 @@ function ProjectScreen({ onDone }) {
29133
29098
  exitMethod: change.changed ? "saved" : "discarded"
29134
29099
  });
29135
29100
  };
29136
- useInput14((input, key) => {
29101
+ useInput13((input, key) => {
29137
29102
  if (!config && loadError && (key.escape || input === "q")) {
29138
29103
  endVisit(null);
29139
29104
  onDone();
@@ -29141,16 +29106,16 @@ function ProjectScreen({ onDone }) {
29141
29106
  });
29142
29107
  if (!config) {
29143
29108
  return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29144
- /* @__PURE__ */ jsx60(Text50, { bold: true, children: "Project" }),
29145
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29109
+ /* @__PURE__ */ jsx59(Text50, { bold: true, children: "Project" }),
29110
+ /* @__PURE__ */ jsx59(Text50, { children: " " }),
29146
29111
  loadError ? /* @__PURE__ */ jsxs48(Fragment19, { children: [
29147
29112
  /* @__PURE__ */ jsxs48(Text50, { color: PALETTE.error, children: [
29148
29113
  "\u2717 Could not read the settings: ",
29149
29114
  loadError
29150
29115
  ] }),
29151
- /* @__PURE__ */ jsx60(Text50, { children: " " }),
29152
- /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29153
- ] }) : /* @__PURE__ */ jsx60(Text50, { color: PALETTE.accent, children: "Loading..." })
29116
+ /* @__PURE__ */ jsx59(Text50, { children: " " }),
29117
+ /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29118
+ ] }) : /* @__PURE__ */ jsx59(Text50, { color: PALETTE.accent, children: "Loading..." })
29154
29119
  ] });
29155
29120
  }
29156
29121
  const save = () => {
@@ -29171,7 +29136,7 @@ function ProjectScreen({ onDone }) {
29171
29136
  endVisit(config);
29172
29137
  onDone();
29173
29138
  };
29174
- return /* @__PURE__ */ jsx60(
29139
+ return /* @__PURE__ */ jsx59(
29175
29140
  FieldForm,
29176
29141
  {
29177
29142
  title: "Project",
@@ -29192,7 +29157,7 @@ function ProjectScreen({ onDone }) {
29192
29157
  }
29193
29158
 
29194
29159
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
29195
- import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
29160
+ import { jsx as jsx60, jsxs as jsxs49 } from "react/jsx-runtime";
29196
29161
  var SECTIONS = [
29197
29162
  {
29198
29163
  id: "project",
@@ -29205,7 +29170,7 @@ function ConfigurationScreen({ onDone }) {
29205
29170
  const [focus, setFocus] = useState33(0);
29206
29171
  const [open, setOpen] = useState33(null);
29207
29172
  const close = () => setOpen(null);
29208
- useInput15((input, key) => {
29173
+ useInput14((input, key) => {
29209
29174
  if (open) return;
29210
29175
  if (key.upArrow) {
29211
29176
  setFocus((i) => (i - 1 + SECTIONS.length) % SECTIONS.length);
@@ -29221,18 +29186,18 @@ function ConfigurationScreen({ onDone }) {
29221
29186
  }
29222
29187
  if (key.escape || input === "q") onDone();
29223
29188
  });
29224
- if (open === "project") return /* @__PURE__ */ jsx61(ProjectScreen, { onDone: close });
29225
- if (open === "agents") return /* @__PURE__ */ jsx61(AgentsScreen, { onDone: close });
29189
+ if (open === "project") return /* @__PURE__ */ jsx60(ProjectScreen, { onDone: close });
29190
+ if (open === "agents") return /* @__PURE__ */ jsx60(AgentsScreen, { onDone: close });
29226
29191
  return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29227
- /* @__PURE__ */ jsx61(Text51, { bold: true, children: "Configuration" }),
29228
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
29192
+ /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Configuration" }),
29193
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29229
29194
  SECTIONS.map((section, index) => /* @__PURE__ */ jsxs49(Box48, { gap: 1, children: [
29230
- /* @__PURE__ */ jsx61(Text51, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
29231
- /* @__PURE__ */ jsx61(Box48, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text51, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29232
- /* @__PURE__ */ jsx61(Text51, { color: PALETTE.muted, children: section.description })
29195
+ /* @__PURE__ */ jsx60(Text51, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
29196
+ /* @__PURE__ */ jsx60(Box48, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29197
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: section.description })
29233
29198
  ] }, section.id)),
29234
- /* @__PURE__ */ jsx61(Text51, { children: " " }),
29235
- /* @__PURE__ */ jsx61(
29199
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29200
+ /* @__PURE__ */ jsx60(
29236
29201
  ControlHints,
29237
29202
  {
29238
29203
  hints: [
@@ -29247,7 +29212,7 @@ function ConfigurationScreen({ onDone }) {
29247
29212
 
29248
29213
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
29249
29214
  import { useEffect as useEffect25, useState as useState34 } from "react";
29250
- import { Box as Box49, Text as Text52, useInput as useInput16 } from "ink";
29215
+ import { Box as Box49, Text as Text52, useInput as useInput15 } from "ink";
29251
29216
 
29252
29217
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
29253
29218
  async function readAnalyticsSetting() {
@@ -29266,7 +29231,7 @@ async function writeAnalyticsSetting(setting) {
29266
29231
 
29267
29232
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
29268
29233
  init_debug_store();
29269
- import { Fragment as Fragment20, jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
29234
+ import { Fragment as Fragment20, jsx as jsx61, jsxs as jsxs50 } from "react/jsx-runtime";
29270
29235
  function OptInAnalyticsScreen({ onDone }) {
29271
29236
  const [loading, setLoading] = useState34(true);
29272
29237
  const [enabled, setEnabled] = useState34(true);
@@ -29282,7 +29247,7 @@ function OptInAnalyticsScreen({ onDone }) {
29282
29247
  });
29283
29248
  });
29284
29249
  }, []);
29285
- useInput16((input, key) => {
29250
+ useInput15((input, key) => {
29286
29251
  if (loading) return;
29287
29252
  if (key.return || input === " ") {
29288
29253
  setEnabled((current) => {
@@ -29298,20 +29263,20 @@ function OptInAnalyticsScreen({ onDone }) {
29298
29263
  }
29299
29264
  });
29300
29265
  return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29301
- /* @__PURE__ */ jsx62(Text52, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
29302
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
29303
- loading ? /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
29266
+ /* @__PURE__ */ jsx61(Text52, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
29267
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
29268
+ loading ? /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs50(Fragment20, { children: [
29304
29269
  /* @__PURE__ */ jsxs50(Text52, { children: [
29305
29270
  "Share anonymous usage data:",
29306
29271
  " ",
29307
- /* @__PURE__ */ jsx62(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
29272
+ /* @__PURE__ */ jsx61(Text52, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
29308
29273
  ] }),
29309
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
29310
- /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
29311
- /* @__PURE__ */ jsx62(Text52, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
29274
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
29275
+ /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
29276
+ /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
29312
29277
  ] }),
29313
- /* @__PURE__ */ jsx62(Text52, { children: " " }),
29314
- /* @__PURE__ */ jsx62(
29278
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
29279
+ /* @__PURE__ */ jsx61(
29315
29280
  ControlHints,
29316
29281
  {
29317
29282
  hints: [
@@ -29324,11 +29289,11 @@ function OptInAnalyticsScreen({ onDone }) {
29324
29289
  }
29325
29290
 
29326
29291
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
29327
- import { useEffect as useEffect26, useRef as useRef16, useState as useState35 } from "react";
29328
- import { Box as Box50, Text as Text53, useInput as useInput17 } from "ink";
29292
+ import { useEffect as useEffect26, useRef as useRef15, useState as useState35 } from "react";
29293
+ import { Box as Box50, Text as Text53, useInput as useInput16 } from "ink";
29329
29294
  init_debug_mode_store();
29330
29295
  init_debug_store();
29331
- import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
29296
+ import { Fragment as Fragment21, jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
29332
29297
  var ROWS = ["enabled", "retentionDays"];
29333
29298
  var snapshotOf2 = (setting) => ({
29334
29299
  enabled: String(setting.enabled),
@@ -29341,7 +29306,7 @@ function DebugModeScreen({ onDone }) {
29341
29306
  RETENTION_CHOICES[RETENTION_CHOICES.length - 1]
29342
29307
  );
29343
29308
  const [notice, setNotice] = useState35(null);
29344
- const visit = useRef16({ trail: createTrail(), before: void 0, error: "" }).current;
29309
+ const visit = useRef15({ trail: createTrail(), before: void 0, error: "" }).current;
29345
29310
  useEffect26(() => {
29346
29311
  readDebugModeSetting().then((loaded) => {
29347
29312
  setSetting(loaded);
@@ -29382,7 +29347,7 @@ function DebugModeScreen({ onDone }) {
29382
29347
  exitMethod: change.changed ? "saved" : "discarded"
29383
29348
  });
29384
29349
  };
29385
- useInput17((input, key) => {
29350
+ useInput16((input, key) => {
29386
29351
  if (!setting) return;
29387
29352
  if (key.upArrow || key.downArrow) {
29388
29353
  setFocus((current) => ROWS[(ROWS.indexOf(current) + (key.downArrow ? 1 : ROWS.length - 1)) % ROWS.length]);
@@ -29409,16 +29374,16 @@ function DebugModeScreen({ onDone }) {
29409
29374
  onDone();
29410
29375
  }
29411
29376
  });
29412
- const marker = (row) => /* @__PURE__ */ jsx63(Text53, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
29413
- const label = (row, text) => /* @__PURE__ */ jsx63(Text53, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
29377
+ const marker = (row) => /* @__PURE__ */ jsx62(Text53, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
29378
+ const label = (row, text) => /* @__PURE__ */ jsx62(Text53, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
29414
29379
  return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29415
- /* @__PURE__ */ jsx63(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
29416
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
29380
+ /* @__PURE__ */ jsx62(Text53, { bold: true, children: "Settings \u203A Debug Mode" }),
29381
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
29417
29382
  setting ? /* @__PURE__ */ jsxs51(Fragment21, { children: [
29418
29383
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
29419
29384
  marker("enabled"),
29420
29385
  label("enabled", "Debug logging:"),
29421
- /* @__PURE__ */ jsx63(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
29386
+ /* @__PURE__ */ jsx62(Text53, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
29422
29387
  ] }),
29423
29388
  /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
29424
29389
  marker("retentionDays"),
@@ -29426,7 +29391,7 @@ function DebugModeScreen({ onDone }) {
29426
29391
  RETENTION_CHOICES.map((days) => {
29427
29392
  const highlighted = focus === "retentionDays" && days === pending;
29428
29393
  const saved = days === setting.retentionDays;
29429
- return /* @__PURE__ */ jsx63(
29394
+ return /* @__PURE__ */ jsx62(
29430
29395
  Text53,
29431
29396
  {
29432
29397
  bold: highlighted || saved,
@@ -29438,15 +29403,15 @@ function DebugModeScreen({ onDone }) {
29438
29403
  );
29439
29404
  })
29440
29405
  ] }),
29441
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
29406
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
29442
29407
  notice ? /* @__PURE__ */ jsxs51(Text53, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29443
29408
  notice.kind === "success" ? "\u2713" : "\u2717",
29444
29409
  " ",
29445
29410
  notice.text
29446
- ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
29447
- ] }) : /* @__PURE__ */ jsx63(Text53, { color: PALETTE.muted, children: "Loading\u2026" }),
29448
- /* @__PURE__ */ jsx63(Text53, { children: " " }),
29449
- /* @__PURE__ */ jsx63(
29411
+ ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
29412
+ ] }) : /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Loading\u2026" }),
29413
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
29414
+ /* @__PURE__ */ jsx62(
29450
29415
  ControlHints,
29451
29416
  {
29452
29417
  hints: [
@@ -29463,7 +29428,7 @@ function DebugModeScreen({ onDone }) {
29463
29428
  }
29464
29429
 
29465
29430
  // packages/experience-design-system-cli/app.tsx
29466
- import { Fragment as Fragment22, jsx as jsx64 } from "react/jsx-runtime";
29431
+ import { Fragment as Fragment22, jsx as jsx63 } from "react/jsx-runtime";
29467
29432
  function App({ importOptions, inkClear }) {
29468
29433
  const [screen, setScreen] = useState36("start");
29469
29434
  const [importExitCode, setImportExitCode] = useState36();
@@ -29620,9 +29585,9 @@ function App({ importOptions, inkClear }) {
29620
29585
  };
29621
29586
  switch (screen) {
29622
29587
  case "import":
29623
- if (showImportResult) return /* @__PURE__ */ jsx64(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
29588
+ if (showImportResult) return /* @__PURE__ */ jsx63(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
29624
29589
  if (flow && flowStart) {
29625
- return /* @__PURE__ */ jsx64(
29590
+ return /* @__PURE__ */ jsx63(
29626
29591
  FlowScreen,
29627
29592
  {
29628
29593
  state: flow.state,
@@ -29632,12 +29597,12 @@ function App({ importOptions, inkClear }) {
29632
29597
  }
29633
29598
  );
29634
29599
  }
29635
- if (importDefaults === void 0) return /* @__PURE__ */ jsx64(Fragment22, {});
29600
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx63(Fragment22, {});
29636
29601
  if (projectPath === void 0) {
29637
- return /* @__PURE__ */ jsx64(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
29602
+ return /* @__PURE__ */ jsx63(WelcomeScreen, { onContinue: setProjectPath, onQuit: leaveImport, initialPath: importDefaults.componentDir });
29638
29603
  }
29639
29604
  if (tokensPath === void 0) {
29640
- return /* @__PURE__ */ jsx64(
29605
+ return /* @__PURE__ */ jsx63(
29641
29606
  TokenInputScreen,
29642
29607
  {
29643
29608
  initialPath: importDefaults.tokenFile,
@@ -29647,7 +29612,7 @@ function App({ importOptions, inkClear }) {
29647
29612
  );
29648
29613
  }
29649
29614
  if (scannedFiles === void 0) {
29650
- return /* @__PURE__ */ jsx64(
29615
+ return /* @__PURE__ */ jsx63(
29651
29616
  PathValidationScreen,
29652
29617
  {
29653
29618
  projectPath,
@@ -29659,10 +29624,10 @@ function App({ importOptions, inkClear }) {
29659
29624
  }
29660
29625
  if (extractionRun) {
29661
29626
  if (extraction?.status === "done" && !extraction.result.ok) {
29662
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
29627
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
29663
29628
  }
29664
29629
  if (extraction?.status === "running") {
29665
- return /* @__PURE__ */ jsx64(
29630
+ return /* @__PURE__ */ jsx63(
29666
29631
  ExtractionScreen,
29667
29632
  {
29668
29633
  progress: extraction.progress,
@@ -29671,14 +29636,14 @@ function App({ importOptions, inkClear }) {
29671
29636
  }
29672
29637
  );
29673
29638
  }
29674
- return /* @__PURE__ */ jsx64(Fragment22, {});
29639
+ return /* @__PURE__ */ jsx63(Fragment22, {});
29675
29640
  }
29676
29641
  if (scopeRun && scopeFlow) {
29677
29642
  if (scopeFlow.status === "failed") {
29678
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
29643
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
29679
29644
  }
29680
29645
  if (scopeFlow.status === "deciding") {
29681
- return /* @__PURE__ */ jsx64(
29646
+ return /* @__PURE__ */ jsx63(
29682
29647
  ScopeGateScreen,
29683
29648
  {
29684
29649
  components: scopeFlow.load.components,
@@ -29688,7 +29653,7 @@ function App({ importOptions, inkClear }) {
29688
29653
  );
29689
29654
  }
29690
29655
  if (generation?.status === "done" && !generation.result.ok) {
29691
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
29656
+ return /* @__PURE__ */ jsx63(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
29692
29657
  }
29693
29658
  if (generation?.status === "running") {
29694
29659
  const hasRawTokens = scopeRun.input.rawTokensPath !== "";
@@ -29696,7 +29661,7 @@ function App({ importOptions, inkClear }) {
29696
29661
  hasRawTokens,
29697
29662
  mapTokensEligible: generation.progress.mapTokensEligible
29698
29663
  });
29699
- return /* @__PURE__ */ jsx64(
29664
+ return /* @__PURE__ */ jsx63(
29700
29665
  GenerationScreen,
29701
29666
  {
29702
29667
  progress: generation.progress,
@@ -29708,10 +29673,10 @@ function App({ importOptions, inkClear }) {
29708
29673
  }
29709
29674
  );
29710
29675
  }
29711
- return /* @__PURE__ */ jsx64(Fragment22, {});
29676
+ return /* @__PURE__ */ jsx63(Fragment22, {});
29712
29677
  }
29713
29678
  if (pendingLaunch?.cached) {
29714
- return /* @__PURE__ */ jsx64(
29679
+ return /* @__PURE__ */ jsx63(
29715
29680
  TokenReuseScreen,
29716
29681
  {
29717
29682
  tokensPath: pendingLaunch.cached.tokensPath,
@@ -29722,7 +29687,7 @@ function App({ importOptions, inkClear }) {
29722
29687
  }
29723
29688
  );
29724
29689
  }
29725
- return /* @__PURE__ */ jsx64(
29690
+ return /* @__PURE__ */ jsx63(
29726
29691
  CredentialsScreen,
29727
29692
  {
29728
29693
  initial: importDefaults.credentials,
@@ -29731,17 +29696,17 @@ function App({ importOptions, inkClear }) {
29731
29696
  }
29732
29697
  );
29733
29698
  case "help":
29734
- return /* @__PURE__ */ jsx64(HelpScreen, { onDone: goToStart });
29699
+ return /* @__PURE__ */ jsx63(HelpScreen, { onDone: goToStart });
29735
29700
  case "settings":
29736
- return /* @__PURE__ */ jsx64(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
29701
+ return /* @__PURE__ */ jsx63(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
29737
29702
  case "settings-configuration":
29738
- return /* @__PURE__ */ jsx64(ConfigurationScreen, { onDone: goToSettings });
29703
+ return /* @__PURE__ */ jsx63(ConfigurationScreen, { onDone: goToSettings });
29739
29704
  case "settings-opt-in-analytics":
29740
- return /* @__PURE__ */ jsx64(OptInAnalyticsScreen, { onDone: goToSettings });
29705
+ return /* @__PURE__ */ jsx63(OptInAnalyticsScreen, { onDone: goToSettings });
29741
29706
  case "settings-debug-mode":
29742
- return /* @__PURE__ */ jsx64(DebugModeScreen, { onDone: goToSettings });
29707
+ return /* @__PURE__ */ jsx63(DebugModeScreen, { onDone: goToSettings });
29743
29708
  case "start":
29744
- return /* @__PURE__ */ jsx64(HomeScreen, { onNavigate: setScreen });
29709
+ return /* @__PURE__ */ jsx63(HomeScreen, { onNavigate: setScreen });
29745
29710
  }
29746
29711
  }
29747
29712
  async function runApp(renderApp, importOptions) {
@@ -29749,7 +29714,7 @@ async function runApp(renderApp, importOptions) {
29749
29714
  instance.clear?.();
29750
29715
  process.stdout.write("\x1B[H\x1B[0J");
29751
29716
  };
29752
- const instance = renderApp(/* @__PURE__ */ jsx64(App, { importOptions, inkClear }));
29717
+ const instance = renderApp(/* @__PURE__ */ jsx63(App, { importOptions, inkClear }));
29753
29718
  await instance.waitUntilExit();
29754
29719
  }
29755
29720
  export {