@contentful/experience-design-system-cli 2.37.1-dev-build-8f86e838.0 → 2.37.1-dev-build-7e007460.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
@@ -2623,6 +2623,11 @@ var IMPORT_TARGET_OPTIONS = [
2623
2623
  { target: "tokens", label: "Tokens only" },
2624
2624
  { target: "components", label: "Components only" }
2625
2625
  ];
2626
+ var TOKENS_ONLY_OVERVIEW = [
2627
+ { description: "Generate design tokens from your token file", ai: true },
2628
+ { description: "Push to Contentful", ai: false }
2629
+ ];
2630
+ var TOKENS_ONLY_STEP_COUNT = TOKENS_ONLY_OVERVIEW.length;
2626
2631
  var STEPS = {
2627
2632
  both: [
2628
2633
  "project",
@@ -2729,8 +2734,8 @@ function PreflightScreen({ onChoose, onQuit }) {
2729
2734
  }
2730
2735
 
2731
2736
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
2732
- import { useState as useState4 } from "react";
2733
- import { Box as Box4, Text as Text5 } from "ink";
2737
+ import { useState as useState5 } from "react";
2738
+ import { Box as Box8, Text as Text9 } from "ink";
2734
2739
 
2735
2740
  // packages/experience-design-system-cli/src/tui/ClearableTextInput.tsx
2736
2741
  import { useRef } from "react";
@@ -2761,9 +2766,264 @@ function ClearableTextInput({ onChange, ...props }) {
2761
2766
  );
2762
2767
  }
2763
2768
 
2764
- // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
2769
+ // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
2770
+ import { Box as Box4, Text as Text5 } from "ink";
2771
+
2772
+ // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
2765
2773
  import { useInput as useInput5 } from "ink";
2766
2774
 
2775
+ // packages/experience-design-system-cli/src/tui/import/shared/error-step/logic.ts
2776
+ function errorAction(input, key, available) {
2777
+ if (key.return && available.canAcknowledge) return "acknowledge";
2778
+ if (input === "r" && available.canRetry) return "retry";
2779
+ if (key.return || key.escape) return "exit";
2780
+ return null;
2781
+ }
2782
+ function errorControls(available) {
2783
+ return [
2784
+ available.canAcknowledge ? { keys: "Enter", label: "Acknowledge and apply" } : { keys: "Enter", label: "Exit" },
2785
+ ...available.canAcknowledge ? [{ keys: "Esc", label: "Exit" }] : [],
2786
+ ...available.canRetry ? [{ keys: "r", label: "Re-enter credentials" }] : []
2787
+ ];
2788
+ }
2789
+
2790
+ // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
2791
+ function useErrorControls(handlers) {
2792
+ useInput5((input, key) => {
2793
+ const action = errorAction(input, key, {
2794
+ canRetry: handlers.onRetry !== void 0,
2795
+ canAcknowledge: handlers.onAcknowledge !== void 0
2796
+ });
2797
+ if (action === "acknowledge") handlers.onAcknowledge?.();
2798
+ else if (action === "retry") handlers.onRetry?.();
2799
+ else if (action === "exit") handlers.onExit();
2800
+ });
2801
+ }
2802
+
2803
+ // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
2804
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
2805
+ function ErrorStep({
2806
+ stepName,
2807
+ message,
2808
+ onExit,
2809
+ onRetryCredentials,
2810
+ onAcknowledgeBreakingChanges
2811
+ }) {
2812
+ useErrorControls({ onExit, onRetry: onRetryCredentials, onAcknowledge: onAcknowledgeBreakingChanges });
2813
+ const controls = errorControls({
2814
+ canRetry: onRetryCredentials !== void 0,
2815
+ canAcknowledge: onAcknowledgeBreakingChanges !== void 0
2816
+ });
2817
+ return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2818
+ /* @__PURE__ */ jsxs4(Text5, { bold: true, color: PALETTE.error, children: [
2819
+ "\u2717 ",
2820
+ stepName,
2821
+ " failed"
2822
+ ] }),
2823
+ /* @__PURE__ */ jsx6(Text5, { color: PALETTE.error, children: message }),
2824
+ /* @__PURE__ */ jsx6(Box4, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs4(Text5, { color: PALETTE.muted, children: [
2825
+ "[",
2826
+ control.keys,
2827
+ "] ",
2828
+ control.label
2829
+ ] }, control.keys)) })
2830
+ ] });
2831
+ }
2832
+
2833
+ // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
2834
+ import { Box as Box5, Text as Text6 } from "ink";
2835
+
2836
+ // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
2837
+ import { useInput as useInput6 } from "ink";
2838
+
2839
+ // packages/experience-design-system-cli/src/tui/import/shared/gate-step/logic.ts
2840
+ function gateAction(input, key, canSkip) {
2841
+ if (key.return) return "continue";
2842
+ if (input === "a" && canSkip) return "skip";
2843
+ if (key.escape) return "quit";
2844
+ return null;
2845
+ }
2846
+ function gateControls(continueLabel, skipLabel2, canSkip) {
2847
+ return [
2848
+ { keys: "Enter", label: continueLabel },
2849
+ ...canSkip ? [{ keys: "a", label: skipLabel2 }] : [],
2850
+ { keys: "Esc", label: "Quit" }
2851
+ ];
2852
+ }
2853
+
2854
+ // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
2855
+ function useGateControls(handlers) {
2856
+ useInput6((input, key) => {
2857
+ const action = gateAction(input, key, handlers.canSkip);
2858
+ if (action === "continue") handlers.onContinue();
2859
+ else if (action === "skip") handlers.onSkip();
2860
+ else if (action === "quit") handlers.onQuit();
2861
+ });
2862
+ }
2863
+
2864
+ // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
2865
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
2866
+ function GateStep({
2867
+ message,
2868
+ onContinue,
2869
+ onQuit,
2870
+ summary,
2871
+ context,
2872
+ continueLabel = "Continue",
2873
+ skipLabel: skipLabel2 = "Approve all and skip",
2874
+ onSkip,
2875
+ intent = "success"
2876
+ }) {
2877
+ useGateControls({ canSkip: onSkip !== void 0, onContinue, onSkip: onSkip ?? (() => {
2878
+ }), onQuit });
2879
+ const color = intent === "error" ? PALETTE.error : PALETTE.success;
2880
+ const icon = intent === "error" ? "\u2717" : "\u2713";
2881
+ return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2882
+ /* @__PURE__ */ jsxs5(Text6, { color, children: [
2883
+ icon,
2884
+ " ",
2885
+ message
2886
+ ] }),
2887
+ summary && /* @__PURE__ */ jsx7(Text6, { color: PALETTE.muted, children: summary }),
2888
+ context && /* @__PURE__ */ jsx7(Box5, { marginTop: 1, children: /* @__PURE__ */ jsx7(Text6, { children: context }) }),
2889
+ /* @__PURE__ */ jsx7(Box5, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
2890
+ "[",
2891
+ control.keys,
2892
+ "] ",
2893
+ control.label
2894
+ ] }, control.keys)) })
2895
+ ] });
2896
+ }
2897
+
2898
+ // packages/experience-design-system-cli/src/tui/import/shared/overview-box/overview-box.tsx
2899
+ import { Box as Box6, Text as Text7 } from "ink";
2900
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
2901
+ var OVERVIEW_BOX_MAX_WIDTH = 90;
2902
+ var AI_MARKER = "\u273B";
2903
+ var AI_DISCLOSURE = [
2904
+ "Steps marked \u273B use your local AI agent, which may send relevant code to your AI provider under your agreement with them. Contentful does not receive that code, or the prompts and responses. AI suggestions can be wrong or incomplete, so review and edit them before importing."
2905
+ ];
2906
+ function OverviewBox({ steps }) {
2907
+ return /* @__PURE__ */ jsx8(Box6, { flexDirection: "row", children: /* @__PURE__ */ jsxs6(
2908
+ Box6,
2909
+ {
2910
+ flexDirection: "column",
2911
+ borderStyle: "round",
2912
+ borderColor: PALETTE.border,
2913
+ paddingX: 2,
2914
+ paddingY: 1,
2915
+ width: OVERVIEW_BOX_MAX_WIDTH,
2916
+ flexShrink: 1,
2917
+ children: [
2918
+ steps.map((step, index) => /* @__PURE__ */ jsxs6(Box6, { gap: 1, children: [
2919
+ /* @__PURE__ */ jsx8(Box6, { flexShrink: 0, children: /* @__PURE__ */ jsxs6(Text7, { bold: true, children: [
2920
+ "Step ",
2921
+ index + 1
2922
+ ] }) }),
2923
+ /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, wrap: "truncate-end", children: step.description }),
2924
+ step.ai && /* @__PURE__ */ jsx8(Text7, { bold: true, color: PALETTE.accent, children: AI_MARKER })
2925
+ ] }, step.description)),
2926
+ /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", marginTop: 1, children: [
2927
+ /* @__PURE__ */ jsxs6(Text7, { bold: true, children: [
2928
+ /* @__PURE__ */ jsx8(Text7, { color: PALETTE.accent, children: AI_MARKER }),
2929
+ " AI disclosure"
2930
+ ] }),
2931
+ AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: paragraph }, paragraph))
2932
+ ] })
2933
+ ]
2934
+ }
2935
+ ) });
2936
+ }
2937
+
2938
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
2939
+ import { Box as Box7, Text as Text8 } from "ink";
2940
+ import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
2941
+
2942
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/logic.ts
2943
+ function progressPercent(progress) {
2944
+ if (progress.total <= 0) return 0;
2945
+ return Math.min(100, Math.max(0, Math.round(progress.done / progress.total * 100)));
2946
+ }
2947
+ function formatElapsed(totalSeconds) {
2948
+ const minutes = Math.floor(totalSeconds / 60);
2949
+ const seconds = totalSeconds % 60;
2950
+ return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
2951
+ }
2952
+ function stepLabel(stepNumber, totalSteps, title) {
2953
+ return `Step ${stepNumber} of ${totalSteps} \u2014 ${title}`;
2954
+ }
2955
+
2956
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/theme.ts
2957
+ import { defaultTheme, extendTheme } from "@inkjs/ui";
2958
+ var PROGRESS_THEME = extendTheme(defaultTheme, {
2959
+ components: {
2960
+ ProgressBar: {
2961
+ styles: {
2962
+ completed: () => ({ color: PALETTE.accent })
2963
+ }
2964
+ }
2965
+ }
2966
+ });
2967
+
2968
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/use-elapsed.ts
2969
+ import { useEffect as useEffect3, useState as useState4 } from "react";
2970
+ function useElapsed() {
2971
+ const [seconds, setSeconds] = useState4(0);
2972
+ useEffect3(() => {
2973
+ const timer = setInterval(() => setSeconds((current) => current + 1), 1e3);
2974
+ return () => clearInterval(timer);
2975
+ }, []);
2976
+ return formatElapsed(seconds);
2977
+ }
2978
+
2979
+ // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
2980
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
2981
+ var RULE = "\u2500".repeat(40);
2982
+ function Line({ line }) {
2983
+ if (line.progress) {
2984
+ return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", gap: 1, children: [
2985
+ /* @__PURE__ */ jsxs7(Box7, { gap: 2, children: [
2986
+ /* @__PURE__ */ jsx9(Box7, { width: 40, children: /* @__PURE__ */ jsx9(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx9(ProgressBar, { value: progressPercent(line.progress) }) }) }),
2987
+ /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
2988
+ line.progress.done,
2989
+ "/",
2990
+ line.progress.total
2991
+ ] })
2992
+ ] }),
2993
+ /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: line.text })
2994
+ ] });
2995
+ }
2996
+ return /* @__PURE__ */ jsxs7(Box7, { gap: 1, children: [
2997
+ line.complete ? /* @__PURE__ */ jsx9(Text8, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx9(Spinner, {}),
2998
+ /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: line.text })
2999
+ ] });
3000
+ }
3001
+ function RunningStep({
3002
+ stepNumber,
3003
+ totalSteps,
3004
+ title,
3005
+ description,
3006
+ lines = [{ text: "Running..." }]
3007
+ }) {
3008
+ const elapsed = useElapsed();
3009
+ return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
3010
+ /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
3011
+ /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: RULE }),
3012
+ /* @__PURE__ */ jsx9(Text8, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
3013
+ /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: RULE })
3014
+ ] }),
3015
+ /* @__PURE__ */ jsx9(Text8, { children: description }),
3016
+ /* @__PURE__ */ jsx9(Box7, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx9(Line, { line }, index)) }),
3017
+ /* @__PURE__ */ jsx9(Box7, { marginTop: 1, children: /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
3018
+ "Elapsed: ",
3019
+ elapsed
3020
+ ] }) })
3021
+ ] });
3022
+ }
3023
+
3024
+ // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/controls.ts
3025
+ import { useInput as useInput7 } from "ink";
3026
+
2767
3027
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/logic.ts
2768
3028
  function shouldQuit(key) {
2769
3029
  return key.escape;
@@ -2780,77 +3040,39 @@ var WELCOME_CONTROLS = [
2780
3040
  { keys: "Esc", label: "Back" }
2781
3041
  ];
2782
3042
  function useWelcomeControls(onQuit) {
2783
- useInput5((_input, key) => {
3043
+ useInput7((_input, key) => {
2784
3044
  if (shouldQuit(key)) onQuit();
2785
3045
  });
2786
3046
  }
2787
3047
 
2788
3048
  // packages/experience-design-system-cli/src/tui/import/steps/01-welcome/screen.tsx
2789
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
2790
- var OVERVIEW_BOX_MAX_WIDTH = 90;
2791
- var AI_MARKER = "\u273B";
3049
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
2792
3050
  var OVERVIEW = [
2793
- {
2794
- label: "Step 1",
2795
- description: "Extract components from your codebase",
2796
- ai: true
2797
- },
2798
- { label: "Step 2", description: "Review what was extracted", ai: false },
2799
- {
2800
- label: "Step 3",
2801
- description: "Generate component definitions",
2802
- ai: true
2803
- },
2804
- { label: "Step 4", description: "Review generated definitions", ai: false },
2805
- { label: "Step 5", description: "Push to Contentful", ai: false }
2806
- ];
2807
- var AI_DISCLOSURE = [
2808
- "Steps marked \u273B use your local AI agent, which may send relevant code to your AI provider under your agreement with them. Contentful does not receive that code, or the prompts and responses. AI suggestions can be wrong or incomplete, so review and edit them before importing."
3051
+ { description: "Extract components from your codebase", ai: true },
3052
+ { description: "Review what was extracted", ai: false },
3053
+ { description: "Generate component definitions", ai: true },
3054
+ { description: "Review generated definitions", ai: false },
3055
+ { description: "Push to Contentful", ai: false }
2809
3056
  ];
2810
3057
  function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
2811
- const [projectPath, setProjectPath] = useState4(initialPath);
3058
+ const [projectPath, setProjectPath] = useState5(initialPath);
2812
3059
  useWelcomeControls(onQuit);
2813
3060
  const submit = (value) => {
2814
3061
  const path5 = toProjectPath(value);
2815
3062
  if (path5) onContinue(path5);
2816
3063
  };
2817
- return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2818
- /* @__PURE__ */ jsx6(Text5, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
2819
- /* @__PURE__ */ jsx6(Box4, { flexDirection: "row", children: /* @__PURE__ */ jsxs4(
2820
- Box4,
2821
- {
2822
- flexDirection: "column",
2823
- borderStyle: "round",
2824
- borderColor: PALETTE.border,
2825
- paddingX: 2,
2826
- paddingY: 1,
2827
- width: OVERVIEW_BOX_MAX_WIDTH,
2828
- flexShrink: 1,
2829
- children: [
2830
- OVERVIEW.map((item) => /* @__PURE__ */ jsxs4(Box4, { gap: 1, children: [
2831
- /* @__PURE__ */ jsx6(Box4, { flexShrink: 0, children: /* @__PURE__ */ jsx6(Text5, { bold: true, children: item.label }) }),
2832
- /* @__PURE__ */ jsx6(Text5, { color: PALETTE.muted, wrap: "truncate-end", children: item.description }),
2833
- item.ai && /* @__PURE__ */ jsx6(Text5, { bold: true, color: PALETTE.accent, children: AI_MARKER })
2834
- ] }, item.label)),
2835
- /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", marginTop: 1, children: [
2836
- /* @__PURE__ */ jsxs4(Text5, { bold: true, children: [
2837
- /* @__PURE__ */ jsx6(Text5, { color: PALETTE.accent, children: AI_MARKER }),
2838
- " AI disclosure"
2839
- ] }),
2840
- AI_DISCLOSURE.map((paragraph) => /* @__PURE__ */ jsx6(Text5, { color: PALETTE.muted, children: paragraph }, paragraph))
2841
- ] })
2842
- ]
2843
- }
2844
- ) }),
2845
- /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", gap: 1, children: [
2846
- /* @__PURE__ */ jsx6(Text5, { children: "Where is your component library?" }),
2847
- /* @__PURE__ */ jsxs4(Box4, { children: [
2848
- /* @__PURE__ */ jsx6(Text5, { color: PALETTE.accent, children: "? " }),
2849
- /* @__PURE__ */ jsx6(Text5, { children: "Project path: " }),
2850
- /* @__PURE__ */ jsx6(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
3064
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
3065
+ /* @__PURE__ */ jsx10(Text9, { bold: true, color: PALETTE.accent, children: "Let's import your design system into Contentful." }),
3066
+ /* @__PURE__ */ jsx10(OverviewBox, { steps: OVERVIEW }),
3067
+ /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, children: [
3068
+ /* @__PURE__ */ jsx10(Text9, { children: "Where is your component library?" }),
3069
+ /* @__PURE__ */ jsxs8(Box8, { children: [
3070
+ /* @__PURE__ */ jsx10(Text9, { color: PALETTE.accent, children: "? " }),
3071
+ /* @__PURE__ */ jsx10(Text9, { children: "Project path: " }),
3072
+ /* @__PURE__ */ jsx10(ClearableTextInput, { value: projectPath, onChange: setProjectPath, onSubmit: submit })
2851
3073
  ] })
2852
3074
  ] }),
2853
- /* @__PURE__ */ jsx6(Box4, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs4(Text5, { children: [
3075
+ /* @__PURE__ */ jsx10(Box8, { gap: 3, children: WELCOME_CONTROLS.map((control) => /* @__PURE__ */ jsxs8(Text9, { children: [
2854
3076
  "[",
2855
3077
  control.keys,
2856
3078
  "] ",
@@ -2860,11 +3082,11 @@ function WelcomeScreen({ onContinue, onQuit, initialPath = "" }) {
2860
3082
  }
2861
3083
 
2862
3084
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
2863
- import { useState as useState5 } from "react";
2864
- import { Box as Box5, Text as Text6 } from "ink";
3085
+ import { useState as useState6 } from "react";
3086
+ import { Box as Box9, Text as Text10 } from "ink";
2865
3087
 
2866
3088
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/controls.ts
2867
- import { useInput as useInput6 } from "ink";
3089
+ import { useInput as useInput8 } from "ink";
2868
3090
 
2869
3091
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/logic.ts
2870
3092
  function shouldGoBack(key) {
@@ -2882,7 +3104,7 @@ var TOKEN_INPUT_CONTROLS = [
2882
3104
  { keys: "Esc", label: "Back" }
2883
3105
  ];
2884
3106
  function useTokenInputControls(onBack) {
2885
- useInput6((_input, key) => {
3107
+ useInput8((_input, key) => {
2886
3108
  if (shouldGoBack(key)) onBack();
2887
3109
  });
2888
3110
  }
@@ -2927,10 +3149,15 @@ function validateTokenPath(rawPath) {
2927
3149
  }
2928
3150
 
2929
3151
  // packages/experience-design-system-cli/src/tui/import/steps/02-token-input/screen.tsx
2930
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
2931
- function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2932
- const [tokenPath, setTokenPath] = useState5(initialPath);
2933
- const [failure, setFailure] = useState5(null);
3152
+ import { Fragment, jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
3153
+ function TokenInputScreen({
3154
+ onConfirm,
3155
+ onBack,
3156
+ initialPath = "",
3157
+ overview
3158
+ }) {
3159
+ const [tokenPath, setTokenPath] = useState6(initialPath);
3160
+ const [failure, setFailure] = useState6(null);
2934
3161
  useTokenInputControls(onBack);
2935
3162
  const change = (value) => {
2936
3163
  setTokenPath(value);
@@ -2946,27 +3173,31 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2946
3173
  if (check.ok) onConfirm(check.path);
2947
3174
  else setFailure({ error: check.error, resolvedPath: check.resolvedPath });
2948
3175
  };
2949
- return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
2950
- /* @__PURE__ */ jsx7(Text6, { bold: true, children: "Design tokens" }),
2951
- /* @__PURE__ */ jsx7(Text6, { 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)." }),
2952
- /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
2953
- /* @__PURE__ */ jsxs5(Box5, { gap: 1, children: [
2954
- /* @__PURE__ */ jsx7(Text6, { color: PALETTE.accent, children: "?" }),
2955
- /* @__PURE__ */ jsx7(Text6, { children: "Token path:" }),
2956
- /* @__PURE__ */ jsx7(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
3176
+ return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
3177
+ overview && /* @__PURE__ */ jsxs9(Fragment, { children: [
3178
+ /* @__PURE__ */ jsx11(Text10, { bold: true, color: PALETTE.accent, children: "Let's import your design tokens into Contentful." }),
3179
+ /* @__PURE__ */ jsx11(OverviewBox, { steps: overview })
3180
+ ] }),
3181
+ /* @__PURE__ */ jsx11(Text10, { bold: true, children: "Design tokens" }),
3182
+ /* @__PURE__ */ jsx11(Text10, { 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)." }),
3183
+ /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
3184
+ /* @__PURE__ */ jsxs9(Box9, { gap: 1, children: [
3185
+ /* @__PURE__ */ jsx11(Text10, { color: PALETTE.accent, children: "?" }),
3186
+ /* @__PURE__ */ jsx11(Text10, { children: "Token path:" }),
3187
+ /* @__PURE__ */ jsx11(ClearableTextInput, { value: tokenPath, onChange: change, onSubmit: submit })
2957
3188
  ] }),
2958
- failure && /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
2959
- /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.error, children: [
3189
+ failure && /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", children: [
3190
+ /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.error, children: [
2960
3191
  "\u2717 ",
2961
3192
  failure.error
2962
3193
  ] }),
2963
- failure.resolvedPath && /* @__PURE__ */ jsxs5(Text6, { color: PALETTE.muted, children: [
3194
+ failure.resolvedPath && /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
2964
3195
  " Resolved to: ",
2965
3196
  failure.resolvedPath
2966
3197
  ] })
2967
3198
  ] })
2968
3199
  ] }),
2969
- /* @__PURE__ */ jsx7(Box5, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs5(Text6, { children: [
3200
+ /* @__PURE__ */ jsx11(Box9, { marginTop: 1, gap: 3, children: TOKEN_INPUT_CONTROLS.map((control) => /* @__PURE__ */ jsxs9(Text10, { children: [
2970
3201
  "[",
2971
3202
  control.keys,
2972
3203
  "] ",
@@ -2976,11 +3207,11 @@ function TokenInputScreen({ onConfirm, onBack, initialPath = "" }) {
2976
3207
  }
2977
3208
 
2978
3209
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
2979
- import { useEffect as useEffect3, useMemo, useState as useState6 } from "react";
2980
- import { Box as Box6, Text as Text7 } from "ink";
3210
+ import { useEffect as useEffect4, useMemo, useState as useState7 } from "react";
3211
+ import { Box as Box10, Text as Text11 } from "ink";
2981
3212
 
2982
3213
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/controls.ts
2983
- import { useInput as useInput7 } from "ink";
3214
+ import { useInput as useInput9 } from "ink";
2984
3215
 
2985
3216
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/logic.ts
2986
3217
  var COMPONENT_CATEGORIES = ["tsx", "ts", "vue", "astro", "jsx", "js"];
@@ -3068,7 +3299,7 @@ function controlsFor(phase) {
3068
3299
  return CONTROLS[phase];
3069
3300
  }
3070
3301
  function usePathValidationControls(phase, handlers) {
3071
- useInput7((input, key) => {
3302
+ useInput9((input, key) => {
3072
3303
  const action = keyAction(phase, input, key);
3073
3304
  if (action === "confirm") handlers.onConfirm();
3074
3305
  else if (action === "change-path") handlers.onChangePath();
@@ -16854,9 +17085,9 @@ function foldSvelteAndMdIntoOther(counts) {
16854
17085
  }
16855
17086
 
16856
17087
  // packages/experience-design-system-cli/src/tui/import/steps/03-path-validation/screen.tsx
16857
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
17088
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
16858
17089
  function Row({ row }) {
16859
- return /* @__PURE__ */ jsxs6(Text7, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
17090
+ return /* @__PURE__ */ jsxs10(Text11, { color: row.tone === "accent" ? PALETTE.accent : row.tone === "muted" ? PALETTE.muted : void 0, children: [
16860
17091
  " \u2022 ",
16861
17092
  String(row.count).padStart(3),
16862
17093
  " ",
@@ -16865,34 +17096,34 @@ function Row({ row }) {
16865
17096
  }
16866
17097
  function Failure({ scan, path: path5 }) {
16867
17098
  const { headline, hints } = describeFailure(scan.failure, path5);
16868
- return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
16869
- /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.error, children: [
17099
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
17100
+ /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.error, children: [
16870
17101
  "\u2717 ",
16871
17102
  headline
16872
17103
  ] }),
16873
- hints.map((hint) => /* @__PURE__ */ jsx8(Text7, { color: PALETTE.muted, children: hint }, hint))
17104
+ hints.map((hint) => /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: hint }, hint))
16874
17105
  ] });
16875
17106
  }
16876
17107
  function Summary({ scan, path: path5 }) {
16877
17108
  const { total, rows, warning } = summarize(scan.counts);
16878
- return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", gap: 1, children: [
16879
- /* @__PURE__ */ jsxs6(Text7, { children: [
17109
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
17110
+ /* @__PURE__ */ jsxs10(Text11, { children: [
16880
17111
  "Scanned ",
16881
- /* @__PURE__ */ jsx8(Text7, { bold: true, children: path5 })
17112
+ /* @__PURE__ */ jsx12(Text11, { bold: true, children: path5 })
16882
17113
  ] }),
16883
- /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
16884
- /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.success, children: [
17114
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
17115
+ /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.success, children: [
16885
17116
  "\u2713 Found ",
16886
17117
  total,
16887
17118
  " files:"
16888
17119
  ] }),
16889
- rows.map((row) => /* @__PURE__ */ jsx8(Row, { row }, row.label))
17120
+ rows.map((row) => /* @__PURE__ */ jsx12(Row, { row }, row.label))
16890
17121
  ] }),
16891
- warning && /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.warning, children: [
17122
+ warning && /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.warning, children: [
16892
17123
  "\u26A0 ",
16893
17124
  warning
16894
17125
  ] }),
16895
- /* @__PURE__ */ jsx8(Text7, { children: "Does this look right?" })
17126
+ /* @__PURE__ */ jsx12(Text11, { children: "Does this look right?" })
16896
17127
  ] });
16897
17128
  }
16898
17129
  function PathValidationScreen({
@@ -16902,8 +17133,8 @@ function PathValidationScreen({
16902
17133
  onBack
16903
17134
  }) {
16904
17135
  const resolvedPath = useMemo(() => resolveUserPath(projectPath), [projectPath]);
16905
- const [scan, setScan] = useState6();
16906
- useEffect3(() => {
17136
+ const [scan, setScan] = useState7();
17137
+ useEffect4(() => {
16907
17138
  setScan(scanFiles(resolvedPath));
16908
17139
  }, [resolvedPath]);
16909
17140
  const phase = phaseOf(scan);
@@ -16914,15 +17145,15 @@ function PathValidationScreen({
16914
17145
  onChangePath,
16915
17146
  onBack
16916
17147
  });
16917
- return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
16918
- scan === void 0 && /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
17148
+ return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17149
+ scan === void 0 && /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.muted, children: [
16919
17150
  "Scanning ",
16920
- /* @__PURE__ */ jsx8(Text7, { bold: true, children: resolvedPath }),
17151
+ /* @__PURE__ */ jsx12(Text11, { bold: true, children: resolvedPath }),
16921
17152
  "..."
16922
17153
  ] }),
16923
- scan?.ok === false && /* @__PURE__ */ jsx8(Failure, { scan, path: resolvedPath }),
16924
- scan?.ok === true && /* @__PURE__ */ jsx8(Summary, { scan, path: resolvedPath }),
16925
- /* @__PURE__ */ jsx8(Box6, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs6(Text7, { color: PALETTE.muted, children: [
17154
+ scan?.ok === false && /* @__PURE__ */ jsx12(Failure, { scan, path: resolvedPath }),
17155
+ scan?.ok === true && /* @__PURE__ */ jsx12(Summary, { scan, path: resolvedPath }),
17156
+ /* @__PURE__ */ jsx12(Box10, { marginTop: 1, gap: 3, children: controlsFor(phase).map((control) => /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.muted, children: [
16926
17157
  "[",
16927
17158
  control.keys,
16928
17159
  "] ",
@@ -16932,12 +17163,12 @@ function PathValidationScreen({
16932
17163
  }
16933
17164
 
16934
17165
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
16935
- import { useRef as useRef2, useState as useState7 } from "react";
16936
- import { Box as Box7, Text as Text8 } from "ink";
17166
+ import { useRef as useRef2, useState as useState8 } from "react";
17167
+ import { Box as Box11, Text as Text12 } from "ink";
16937
17168
  import TextInput2 from "ink-text-input";
16938
17169
 
16939
17170
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/controls.ts
16940
- import { useInput as useInput8 } from "ink";
17171
+ import { useInput as useInput10 } from "ink";
16941
17172
 
16942
17173
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/logic.ts
16943
17174
  var FIELDS = ["spaceId", "environmentId", "cmaToken", "host"];
@@ -16973,7 +17204,7 @@ var CREDENTIALS_CONTROLS = [
16973
17204
  { keys: "Esc", label: "Back" }
16974
17205
  ];
16975
17206
  function useCredentialsControls(handlers) {
16976
- useInput8((input, key) => {
17207
+ useInput10((input, key) => {
16977
17208
  if (handlers.disabled) return;
16978
17209
  const action = keyAction2(input, key);
16979
17210
  if (action === "back") handlers.onBack();
@@ -17017,7 +17248,7 @@ function toUserError(error, host) {
17017
17248
  }
17018
17249
 
17019
17250
  // packages/experience-design-system-cli/src/tui/import/steps/04-credentials/screen.tsx
17020
- import { Fragment, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
17251
+ import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
17021
17252
  var LABELS = {
17022
17253
  spaceId: "Space ID",
17023
17254
  environmentId: "Environment",
@@ -17038,10 +17269,10 @@ function CredentialsScreen({
17038
17269
  host: initial.host ?? ""
17039
17270
  })
17040
17271
  ).current;
17041
- const [values, setValues] = useState7(initialValues);
17042
- const [active, setActive] = useState7("spaceId");
17043
- const [error, setError] = useState7(null);
17044
- const [validating, setValidating] = useState7(false);
17272
+ const [values, setValues] = useState8(initialValues);
17273
+ const [active, setActive] = useState8("spaceId");
17274
+ const [error, setError] = useState8(null);
17275
+ const [validating, setValidating] = useState8(false);
17045
17276
  const prefilled = initialValues.spaceId !== "" && initialValues.cmaToken !== "";
17046
17277
  useCredentialsControls({
17047
17278
  disabled: validating,
@@ -17069,22 +17300,22 @@ function CredentialsScreen({
17069
17300
  if (result.ok) onDone({ skipped: false, credentials });
17070
17301
  else setError(result.error);
17071
17302
  };
17072
- return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17073
- /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
17074
- /* @__PURE__ */ jsx9(Text8, { bold: true, children: "Contentful credentials" }),
17075
- /* @__PURE__ */ jsx9(Text8, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
17076
- !prefilled && /* @__PURE__ */ jsxs7(Fragment, { children: [
17077
- /* @__PURE__ */ jsx9(Text8, { 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." }),
17078
- /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
17303
+ return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17304
+ /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
17305
+ /* @__PURE__ */ jsx13(Text12, { bold: true, children: "Contentful credentials" }),
17306
+ /* @__PURE__ */ jsx13(Text12, { children: prefilled ? "Credentials pre-filled from the configuration settings." : "Enter the Contentful space you want to import into." }),
17307
+ !prefilled && /* @__PURE__ */ jsxs11(Fragment2, { children: [
17308
+ /* @__PURE__ */ jsx13(Text12, { 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." }),
17309
+ /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: "Tip: save these under Settings \u2192 Configuration so they pre-fill here." })
17079
17310
  ] })
17080
17311
  ] }),
17081
- /* @__PURE__ */ jsx9(Box7, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs7(Box7, { gap: 1, children: [
17082
- /* @__PURE__ */ jsx9(Text8, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
17083
- /* @__PURE__ */ jsxs7(Text8, { bold: active === field, children: [
17312
+ /* @__PURE__ */ jsx13(Box11, { flexDirection: "column", children: FIELDS.map((field) => /* @__PURE__ */ jsxs11(Box11, { gap: 1, children: [
17313
+ /* @__PURE__ */ jsx13(Text12, { color: active === field ? PALETTE.accent : void 0, children: "?" }),
17314
+ /* @__PURE__ */ jsxs11(Text12, { bold: active === field, children: [
17084
17315
  LABELS[field],
17085
17316
  ":"
17086
17317
  ] }),
17087
- /* @__PURE__ */ jsx9(
17318
+ /* @__PURE__ */ jsx13(
17088
17319
  TextInput2,
17089
17320
  {
17090
17321
  value: values[field],
@@ -17096,143 +17327,14 @@ function CredentialsScreen({
17096
17327
  }
17097
17328
  )
17098
17329
  ] }, field)) }),
17099
- active === "host" && /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
17100
- error && /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.error, children: [
17330
+ active === "host" && /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: "Default: api.contentful.com \xB7 EU spaces: api.eu.contentful.com" }),
17331
+ error && /* @__PURE__ */ jsxs11(Text12, { color: PALETTE.error, children: [
17101
17332
  "\u2717 ",
17102
17333
  error
17103
17334
  ] }),
17104
- validating && /* @__PURE__ */ jsx9(Text8, { color: PALETTE.accent, children: "Validating credentials..." }),
17105
- !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx9(Text8, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
17106
- /* @__PURE__ */ jsx9(Box7, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs7(Text8, { color: PALETTE.muted, children: [
17107
- "[",
17108
- control.keys,
17109
- "] ",
17110
- control.label
17111
- ] }, control.keys)) })
17112
- ] });
17113
- }
17114
-
17115
- // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
17116
- import { Box as Box8, Text as Text9 } from "ink";
17117
-
17118
- // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
17119
- import { useInput as useInput9 } from "ink";
17120
-
17121
- // packages/experience-design-system-cli/src/tui/import/shared/error-step/logic.ts
17122
- function errorAction(input, key, available) {
17123
- if (key.return && available.canAcknowledge) return "acknowledge";
17124
- if (input === "r" && available.canRetry) return "retry";
17125
- if (key.return || key.escape) return "exit";
17126
- return null;
17127
- }
17128
- function errorControls(available) {
17129
- return [
17130
- available.canAcknowledge ? { keys: "Enter", label: "Acknowledge and apply" } : { keys: "Enter", label: "Exit" },
17131
- ...available.canAcknowledge ? [{ keys: "Esc", label: "Exit" }] : [],
17132
- ...available.canRetry ? [{ keys: "r", label: "Re-enter credentials" }] : []
17133
- ];
17134
- }
17135
-
17136
- // packages/experience-design-system-cli/src/tui/import/shared/error-step/controls.ts
17137
- function useErrorControls(handlers) {
17138
- useInput9((input, key) => {
17139
- const action = errorAction(input, key, {
17140
- canRetry: handlers.onRetry !== void 0,
17141
- canAcknowledge: handlers.onAcknowledge !== void 0
17142
- });
17143
- if (action === "acknowledge") handlers.onAcknowledge?.();
17144
- else if (action === "retry") handlers.onRetry?.();
17145
- else if (action === "exit") handlers.onExit();
17146
- });
17147
- }
17148
-
17149
- // packages/experience-design-system-cli/src/tui/import/shared/error-step/error-step.tsx
17150
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
17151
- function ErrorStep({
17152
- stepName,
17153
- message,
17154
- onExit,
17155
- onRetryCredentials,
17156
- onAcknowledgeBreakingChanges
17157
- }) {
17158
- useErrorControls({ onExit, onRetry: onRetryCredentials, onAcknowledge: onAcknowledgeBreakingChanges });
17159
- const controls = errorControls({
17160
- canRetry: onRetryCredentials !== void 0,
17161
- canAcknowledge: onAcknowledgeBreakingChanges !== void 0
17162
- });
17163
- return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17164
- /* @__PURE__ */ jsxs8(Text9, { bold: true, color: PALETTE.error, children: [
17165
- "\u2717 ",
17166
- stepName,
17167
- " failed"
17168
- ] }),
17169
- /* @__PURE__ */ jsx10(Text9, { color: PALETTE.error, children: message }),
17170
- /* @__PURE__ */ jsx10(Box8, { marginTop: 1, gap: 3, children: controls.map((control) => /* @__PURE__ */ jsxs8(Text9, { color: PALETTE.muted, children: [
17171
- "[",
17172
- control.keys,
17173
- "] ",
17174
- control.label
17175
- ] }, control.keys)) })
17176
- ] });
17177
- }
17178
-
17179
- // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
17180
- import { Box as Box9, Text as Text10 } from "ink";
17181
-
17182
- // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
17183
- import { useInput as useInput10 } from "ink";
17184
-
17185
- // packages/experience-design-system-cli/src/tui/import/shared/gate-step/logic.ts
17186
- function gateAction(input, key, canSkip) {
17187
- if (key.return) return "continue";
17188
- if (input === "a" && canSkip) return "skip";
17189
- if (key.escape) return "quit";
17190
- return null;
17191
- }
17192
- function gateControls(continueLabel, skipLabel2, canSkip) {
17193
- return [
17194
- { keys: "Enter", label: continueLabel },
17195
- ...canSkip ? [{ keys: "a", label: skipLabel2 }] : [],
17196
- { keys: "Esc", label: "Quit" }
17197
- ];
17198
- }
17199
-
17200
- // packages/experience-design-system-cli/src/tui/import/shared/gate-step/controls.ts
17201
- function useGateControls(handlers) {
17202
- useInput10((input, key) => {
17203
- const action = gateAction(input, key, handlers.canSkip);
17204
- if (action === "continue") handlers.onContinue();
17205
- else if (action === "skip") handlers.onSkip();
17206
- else if (action === "quit") handlers.onQuit();
17207
- });
17208
- }
17209
-
17210
- // packages/experience-design-system-cli/src/tui/import/shared/gate-step/gate-step.tsx
17211
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
17212
- function GateStep({
17213
- message,
17214
- onContinue,
17215
- onQuit,
17216
- summary,
17217
- context,
17218
- continueLabel = "Continue",
17219
- skipLabel: skipLabel2 = "Approve all and skip",
17220
- onSkip,
17221
- intent = "success"
17222
- }) {
17223
- useGateControls({ canSkip: onSkip !== void 0, onContinue, onSkip: onSkip ?? (() => {
17224
- }), onQuit });
17225
- const color = intent === "error" ? PALETTE.error : PALETTE.success;
17226
- const icon = intent === "error" ? "\u2717" : "\u2713";
17227
- return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17228
- /* @__PURE__ */ jsxs9(Text10, { color, children: [
17229
- icon,
17230
- " ",
17231
- message
17232
- ] }),
17233
- summary && /* @__PURE__ */ jsx11(Text10, { color: PALETTE.muted, children: summary }),
17234
- context && /* @__PURE__ */ jsx11(Box9, { marginTop: 1, children: /* @__PURE__ */ jsx11(Text10, { children: context }) }),
17235
- /* @__PURE__ */ jsx11(Box9, { marginTop: 1, gap: 3, children: gateControls(continueLabel, skipLabel2, onSkip !== void 0).map((control) => /* @__PURE__ */ jsxs9(Text10, { color: PALETTE.muted, children: [
17335
+ validating && /* @__PURE__ */ jsx13(Text12, { color: PALETTE.accent, children: "Validating credentials..." }),
17336
+ !validating && !error && !isUnchanged(normalize(values), initialValues) && /* @__PURE__ */ jsx13(Text12, { color: PALETTE.muted, children: "Changed values are saved after they validate." }),
17337
+ /* @__PURE__ */ jsx13(Box11, { marginTop: 1, gap: 3, children: CREDENTIALS_CONTROLS.map((control) => /* @__PURE__ */ jsxs11(Text12, { color: PALETTE.muted, children: [
17236
17338
  "[",
17237
17339
  control.keys,
17238
17340
  "] ",
@@ -17241,92 +17343,6 @@ function GateStep({
17241
17343
  ] });
17242
17344
  }
17243
17345
 
17244
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
17245
- import { Box as Box10, Text as Text11 } from "ink";
17246
- import { ProgressBar, Spinner, ThemeProvider } from "@inkjs/ui";
17247
-
17248
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/logic.ts
17249
- function progressPercent(progress) {
17250
- if (progress.total <= 0) return 0;
17251
- return Math.min(100, Math.max(0, Math.round(progress.done / progress.total * 100)));
17252
- }
17253
- function formatElapsed(totalSeconds) {
17254
- const minutes = Math.floor(totalSeconds / 60);
17255
- const seconds = totalSeconds % 60;
17256
- return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
17257
- }
17258
- function stepLabel(stepNumber, totalSteps, title) {
17259
- return `Step ${stepNumber} of ${totalSteps} \u2014 ${title}`;
17260
- }
17261
-
17262
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/theme.ts
17263
- import { defaultTheme, extendTheme } from "@inkjs/ui";
17264
- var PROGRESS_THEME = extendTheme(defaultTheme, {
17265
- components: {
17266
- ProgressBar: {
17267
- styles: {
17268
- completed: () => ({ color: PALETTE.accent })
17269
- }
17270
- }
17271
- }
17272
- });
17273
-
17274
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/use-elapsed.ts
17275
- import { useEffect as useEffect4, useState as useState8 } from "react";
17276
- function useElapsed() {
17277
- const [seconds, setSeconds] = useState8(0);
17278
- useEffect4(() => {
17279
- const timer = setInterval(() => setSeconds((current) => current + 1), 1e3);
17280
- return () => clearInterval(timer);
17281
- }, []);
17282
- return formatElapsed(seconds);
17283
- }
17284
-
17285
- // packages/experience-design-system-cli/src/tui/import/shared/running-step/running-step.tsx
17286
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
17287
- var RULE = "\u2500".repeat(40);
17288
- function Line({ line }) {
17289
- if (line.progress) {
17290
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, children: [
17291
- /* @__PURE__ */ jsxs10(Box10, { gap: 2, children: [
17292
- /* @__PURE__ */ jsx12(Box10, { width: 40, children: /* @__PURE__ */ jsx12(ThemeProvider, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx12(ProgressBar, { value: progressPercent(line.progress) }) }) }),
17293
- /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.muted, children: [
17294
- line.progress.done,
17295
- "/",
17296
- line.progress.total
17297
- ] })
17298
- ] }),
17299
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: line.text })
17300
- ] });
17301
- }
17302
- return /* @__PURE__ */ jsxs10(Box10, { gap: 1, children: [
17303
- line.complete ? /* @__PURE__ */ jsx12(Text11, { color: PALETTE.success, children: "\u2713" }) : /* @__PURE__ */ jsx12(Spinner, {}),
17304
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: line.text })
17305
- ] });
17306
- }
17307
- function RunningStep({
17308
- stepNumber,
17309
- totalSteps,
17310
- title,
17311
- description,
17312
- lines = [{ text: "Running..." }]
17313
- }) {
17314
- const elapsed = useElapsed();
17315
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
17316
- /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", children: [
17317
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: RULE }),
17318
- /* @__PURE__ */ jsx12(Text11, { bold: true, children: stepLabel(stepNumber, totalSteps, title) }),
17319
- /* @__PURE__ */ jsx12(Text11, { color: PALETTE.muted, children: RULE })
17320
- ] }),
17321
- /* @__PURE__ */ jsx12(Text11, { children: description }),
17322
- /* @__PURE__ */ jsx12(Box10, { marginTop: 1, flexDirection: "column", gap: 1, children: lines.map((line, index) => /* @__PURE__ */ jsx12(Line, { line }, index)) }),
17323
- /* @__PURE__ */ jsx12(Box10, { marginTop: 1, children: /* @__PURE__ */ jsxs10(Text11, { color: PALETTE.muted, children: [
17324
- "Elapsed: ",
17325
- elapsed
17326
- ] }) })
17327
- ] });
17328
- }
17329
-
17330
17346
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/logic.ts
17331
17347
  function initialProgress(input) {
17332
17348
  return {
@@ -17416,14 +17432,14 @@ function resolveAgentChoice(flag, stored) {
17416
17432
  }
17417
17433
 
17418
17434
  // packages/experience-design-system-cli/src/tui/import/steps/06-extraction/screen.tsx
17419
- import { jsx as jsx13 } from "react/jsx-runtime";
17435
+ import { jsx as jsx14 } from "react/jsx-runtime";
17420
17436
  function ExtractionScreen({
17421
17437
  progress,
17422
17438
  agent,
17423
17439
  stepNumber,
17424
17440
  totalSteps
17425
17441
  }) {
17426
- return /* @__PURE__ */ jsx13(
17442
+ return /* @__PURE__ */ jsx14(
17427
17443
  RunningStep,
17428
17444
  {
17429
17445
  stepNumber,
@@ -17778,11 +17794,11 @@ function useTokensOnly(input) {
17778
17794
  }
17779
17795
 
17780
17796
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
17781
- import { Box as Box21, Text as Text23 } from "ink";
17797
+ import { Box as Box22, Text as Text24 } from "ink";
17782
17798
 
17783
17799
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
17784
17800
  import React8 from "react";
17785
- import { Box as Box12, Text as Text13 } from "ink";
17801
+ import { Box as Box13, Text as Text14 } from "ink";
17786
17802
  import figures from "figures";
17787
17803
 
17788
17804
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/theme.ts
@@ -17899,8 +17915,8 @@ function computeColumnWindow(total, cursor, visibleCount) {
17899
17915
  }
17900
17916
 
17901
17917
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/windowed-panel.tsx
17902
- import { Box as Box11, Text as Text12 } from "ink";
17903
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
17918
+ import { Box as Box12, Text as Text13 } from "ink";
17919
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
17904
17920
  var MIN_TERMINAL_PANEL_HEIGHT = 5;
17905
17921
  function terminalPanelHeight(rows, reservedRows = 4) {
17906
17922
  return Math.max(MIN_TERMINAL_PANEL_HEIGHT, rows - reservedRows);
@@ -17916,8 +17932,8 @@ function FixedPanel({
17916
17932
  clipOverflow = true,
17917
17933
  children
17918
17934
  }) {
17919
- return /* @__PURE__ */ jsx14(
17920
- Box11,
17935
+ return /* @__PURE__ */ jsx15(
17936
+ Box12,
17921
17937
  {
17922
17938
  flexDirection: "column",
17923
17939
  width,
@@ -17933,7 +17949,7 @@ function FixedPanel({
17933
17949
  );
17934
17950
  }
17935
17951
  function WindowedPanel({ width, height, title, focused, children }) {
17936
- return /* @__PURE__ */ jsxs11(
17952
+ return /* @__PURE__ */ jsxs12(
17937
17953
  FixedPanel,
17938
17954
  {
17939
17955
  width,
@@ -17942,7 +17958,7 @@ function WindowedPanel({ width, height, title, focused, children }) {
17942
17958
  ...height === void 0 ? {} : { height },
17943
17959
  focused,
17944
17960
  children: [
17945
- title && /* @__PURE__ */ jsx14(WindowedPanelHeader, { title, width, focused }),
17961
+ title && /* @__PURE__ */ jsx15(WindowedPanelHeader, { title, width, focused }),
17946
17962
  children
17947
17963
  ]
17948
17964
  }
@@ -17953,9 +17969,9 @@ function WindowedPanelHeader({
17953
17969
  width,
17954
17970
  focused
17955
17971
  }) {
17956
- return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "column", children: [
17957
- /* @__PURE__ */ jsx14(Text12, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
17958
- /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
17972
+ return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", children: [
17973
+ /* @__PURE__ */ jsx15(Text13, { bold: true, color: PALETTE2.info, inverse: focused, children: title }),
17974
+ /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) })
17959
17975
  ] });
17960
17976
  }
17961
17977
  function formatWindowIndicator(direction, count) {
@@ -17963,33 +17979,33 @@ function formatWindowIndicator(direction, count) {
17963
17979
  return `${direction === "up" ? "\u2191" : "\u2193"} ${count} more`;
17964
17980
  }
17965
17981
  function WindowIndicator({ direction, count }) {
17966
- return /* @__PURE__ */ jsx14(Text12, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
17982
+ return /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.muted, children: formatWindowIndicator(direction, count) });
17967
17983
  }
17968
17984
 
17969
17985
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/added-column.tsx
17970
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
17986
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
17971
17987
  function AddedColumn(props) {
17972
17988
  const { title, width, height, entries, cursor, focused, aiFlaggedByKey, visibleCount } = props;
17973
17989
  const reserveAiBadge = entries.some((e) => aiFlaggedByKey?.get(e.name) === true);
17974
17990
  const firstNonCycleIdx = entries.findIndex((e) => !e.isCycle);
17975
17991
  const window = computeColumnWindow(entries.length, cursor, Math.max(1, visibleCount));
17976
- return /* @__PURE__ */ jsxs12(WindowedPanel, { width, height, title, focused, children: [
17977
- /* @__PURE__ */ jsx15(WindowIndicator, { direction: "up", count: window.above }),
17978
- entries.length === 0 ? /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
17992
+ return /* @__PURE__ */ jsxs13(WindowedPanel, { width, height, title, focused, children: [
17993
+ /* @__PURE__ */ jsx16(WindowIndicator, { direction: "up", count: window.above }),
17994
+ entries.length === 0 ? /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.muted, children: "(none)" }) : entries.slice(window.start, window.end).map((entry, vi) => {
17979
17995
  const i = window.start + vi;
17980
17996
  const isSelected = i === cursor;
17981
17997
  const isCursor = focused && isSelected;
17982
17998
  const aiFlagged = aiFlaggedByKey?.get(entry.name) === true;
17983
17999
  const showSeparator = firstNonCycleIdx > 0 && i === firstNonCycleIdx;
17984
18000
  const style = sideColumnLabelStyle({ isCycle: entry.isCycle, isSelected, focused });
17985
- return /* @__PURE__ */ jsxs12(React8.Fragment, { children: [
17986
- showSeparator && /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
17987
- /* @__PURE__ */ jsxs12(Box12, { children: [
17988
- isCursor ? /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx15(Text13, { children: " " }),
17989
- reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx15(Text13, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx15(Text13, { children: " " })),
17990
- entry.isCycle && /* @__PURE__ */ jsx15(Text13, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
17991
- /* @__PURE__ */ jsx15(
17992
- Text13,
18001
+ return /* @__PURE__ */ jsxs13(React8.Fragment, { children: [
18002
+ showSeparator && /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.muted, children: "\u2500".repeat(Math.max(0, width - 2)) }),
18003
+ /* @__PURE__ */ jsxs13(Box13, { children: [
18004
+ isCursor ? /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.info, bold: true, children: figures.pointer }) : /* @__PURE__ */ jsx16(Text14, { children: " " }),
18005
+ reserveAiBadge && (aiFlagged ? /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx16(Text14, { children: " " })),
18006
+ entry.isCycle && /* @__PURE__ */ jsx16(Text14, { color: isCursor ? PALETTE2.info : PALETTE2.warning, bold: true, underline: style.nameUnderline, children: " \u26A0" }),
18007
+ /* @__PURE__ */ jsx16(
18008
+ Text14,
17993
18009
  {
17994
18010
  color: style.nameColor,
17995
18011
  bold: style.nameBold,
@@ -18002,14 +18018,14 @@ function AddedColumn(props) {
18002
18018
  ] })
18003
18019
  ] }, entry.name);
18004
18020
  }),
18005
- /* @__PURE__ */ jsx15(WindowIndicator, { direction: "down", count: window.below })
18021
+ /* @__PURE__ */ jsx16(WindowIndicator, { direction: "down", count: window.below })
18006
18022
  ] });
18007
18023
  }
18008
18024
 
18009
18025
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/cycles-panel.tsx
18010
- import { Box as Box13, Text as Text14 } from "ink";
18026
+ import { Box as Box14, Text as Text15 } from "ink";
18011
18027
  import figures2 from "figures";
18012
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
18028
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
18013
18029
  function cycleLabel(cycle, index) {
18014
18030
  const parts = [];
18015
18031
  for (let i = 0; i < cycle.edges.length; i++) {
@@ -18020,49 +18036,49 @@ function cycleLabel(cycle, index) {
18020
18036
  return `Cycle ${index + 1}: ${parts.join(" \u2192 ")}`;
18021
18037
  }
18022
18038
  function CyclesPanel({ cycles, cursor }) {
18023
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
18024
- /* @__PURE__ */ jsx16(Text14, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
18025
- /* @__PURE__ */ jsx16(Text14, { children: " " }),
18039
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
18040
+ /* @__PURE__ */ jsx17(Text15, { bold: true, color: PALETTE2.warning, children: `Cycles detected (${cycles.length}):` }),
18041
+ /* @__PURE__ */ jsx17(Text15, { children: " " }),
18026
18042
  cycles.map((cycle, i) => {
18027
18043
  const isCursor = i === cursor;
18028
- return /* @__PURE__ */ jsxs13(Text14, { children: [
18029
- isCursor ? /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx16(Text14, { children: " " }),
18030
- /* @__PURE__ */ jsx16(Text14, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
18044
+ return /* @__PURE__ */ jsxs14(Text15, { children: [
18045
+ isCursor ? /* @__PURE__ */ jsx17(Text15, { color: PALETTE2.info, bold: true, children: figures2.pointer }) : /* @__PURE__ */ jsx17(Text15, { children: " " }),
18046
+ /* @__PURE__ */ jsx17(Text15, { color: PALETTE2.warning, inverse: isCursor, children: " " + cycleLabel(cycle, i) })
18031
18047
  ] }, i);
18032
18048
  }),
18033
- /* @__PURE__ */ jsx16(Text14, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
18049
+ /* @__PURE__ */ jsx17(Text15, { children: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [c/Esc] close" })
18034
18050
  ] });
18035
18051
  }
18036
18052
 
18037
18053
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/panels/reject-prompt.tsx
18038
- import { Box as Box14, Text as Text15 } from "ink";
18039
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
18054
+ import { Box as Box15, Text as Text16 } from "ink";
18055
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
18040
18056
  function RejectPrompt({ pending }) {
18041
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
18042
- /* @__PURE__ */ jsx17(Text15, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
18043
- pending.ancestors.length > 0 && /* @__PURE__ */ jsx17(Text15, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
18044
- pending.descendants.length > 0 && /* @__PURE__ */ jsx17(Text15, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
18045
- /* @__PURE__ */ jsx17(Text15, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
18057
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE2.warning, paddingX: 1, marginTop: 1, children: [
18058
+ /* @__PURE__ */ jsx18(Text16, { bold: true, color: PALETTE2.warning, children: `Rejecting ${pending.target} will:` }),
18059
+ pending.ancestors.length > 0 && /* @__PURE__ */ jsx18(Text16, { children: `- Reject ancestors: ${pending.ancestors.join(", ")}` }),
18060
+ pending.descendants.length > 0 && /* @__PURE__ */ jsx18(Text16, { children: `- Deselect descendants: ${pending.descendants.join(", ")}` }),
18061
+ /* @__PURE__ */ jsx18(Text16, { children: "[y] confirm \xB7 [n]/[Esc] cancel" })
18046
18062
  ] });
18047
18063
  }
18048
18064
 
18049
18065
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CompactControlBar.tsx
18050
- import { Box as Box15 } from "ink";
18066
+ import { Box as Box16 } from "ink";
18051
18067
 
18052
18068
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/LegendEntry.tsx
18053
- import { Text as Text16 } from "ink";
18054
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
18069
+ import { Text as Text17 } from "ink";
18070
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
18055
18071
  function legendEntry(keyBracket, label, active = false) {
18056
- return /* @__PURE__ */ jsxs15(Text16, { children: [
18057
- /* @__PURE__ */ jsx18(Text16, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
18058
- /* @__PURE__ */ jsx18(Text16, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
18072
+ return /* @__PURE__ */ jsxs16(Text17, { children: [
18073
+ /* @__PURE__ */ jsx19(Text17, { color: active ? PALETTE2.warning : PALETTE2.info, inverse: active, children: keyBracket }),
18074
+ /* @__PURE__ */ jsx19(Text17, { color: active ? PALETTE2.warning : void 0, inverse: active, children: " " + label })
18059
18075
  ] }, keyBracket + label);
18060
18076
  }
18061
18077
 
18062
18078
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CompactControlBar.tsx
18063
- import { jsxs as jsxs16 } from "react/jsx-runtime";
18079
+ import { jsxs as jsxs17 } from "react/jsx-runtime";
18064
18080
  function CompactControlBar({ hasGroupRoots, searchActive }) {
18065
- return /* @__PURE__ */ jsxs16(Box15, { borderStyle: "single", borderColor: PALETTE2.border, paddingX: 1, flexWrap: "wrap", columnGap: 2, children: [
18081
+ return /* @__PURE__ */ jsxs17(Box16, { borderStyle: "single", borderColor: PALETTE2.border, paddingX: 1, flexWrap: "wrap", columnGap: 2, children: [
18066
18082
  legendEntry("[\u2191/\u2193]", "move"),
18067
18083
  legendEntry("[a/r]", "accept/reject"),
18068
18084
  legendEntry("[f]", "continue/finalize"),
@@ -18074,8 +18090,8 @@ function CompactControlBar({ hasGroupRoots, searchActive }) {
18074
18090
  }
18075
18091
 
18076
18092
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/CounterStrip.tsx
18077
- import { Box as Box16, Text as Text17 } from "ink";
18078
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
18093
+ import { Box as Box17, Text as Text18 } from "ink";
18094
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
18079
18095
  function CounterStrip(props) {
18080
18096
  const { counters, totalWidth } = props;
18081
18097
  const condensed = totalWidth < 60;
@@ -18083,32 +18099,32 @@ function CounterStrip(props) {
18083
18099
  const labelRej = condensed ? "Rej" : "Rejected";
18084
18100
  const labelUnd = condensed ? "Und" : "Undecided";
18085
18101
  const sep = condensed ? " | " : " ";
18086
- return /* @__PURE__ */ jsx19(Box16, { children: /* @__PURE__ */ jsxs17(Text17, { children: [
18087
- /* @__PURE__ */ jsxs17(Text17, { color: PALETTE2.muted, children: [
18102
+ return /* @__PURE__ */ jsx20(Box17, { children: /* @__PURE__ */ jsxs18(Text18, { children: [
18103
+ /* @__PURE__ */ jsxs18(Text18, { color: PALETTE2.muted, children: [
18088
18104
  labelGrp,
18089
18105
  " "
18090
18106
  ] }),
18091
- /* @__PURE__ */ jsx19(Text17, { bold: true, children: counters.groups }),
18092
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: sep }),
18093
- /* @__PURE__ */ jsxs17(Text17, { color: PALETTE2.muted, children: [
18107
+ /* @__PURE__ */ jsx20(Text18, { bold: true, children: counters.groups }),
18108
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: sep }),
18109
+ /* @__PURE__ */ jsxs18(Text18, { color: PALETTE2.muted, children: [
18094
18110
  labelRej,
18095
18111
  " "
18096
18112
  ] }),
18097
- /* @__PURE__ */ jsx19(Text17, { bold: true, children: counters.rejected }),
18098
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: sep }),
18099
- /* @__PURE__ */ jsxs17(Text17, { color: PALETTE2.muted, children: [
18113
+ /* @__PURE__ */ jsx20(Text18, { bold: true, children: counters.rejected }),
18114
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: sep }),
18115
+ /* @__PURE__ */ jsxs18(Text18, { color: PALETTE2.muted, children: [
18100
18116
  labelUnd,
18101
18117
  " "
18102
18118
  ] }),
18103
- /* @__PURE__ */ jsx19(Text17, { bold: true, children: counters.undecided }),
18104
- /* @__PURE__ */ jsx19(Text17, { color: PALETTE2.muted, children: sep })
18119
+ /* @__PURE__ */ jsx20(Text18, { bold: true, children: counters.undecided }),
18120
+ /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: sep })
18105
18121
  ] }) });
18106
18122
  }
18107
18123
 
18108
18124
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GotoBanner.tsx
18109
18125
  import figures3 from "figures";
18110
- import { Box as Box17, Text as Text18 } from "ink";
18111
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
18126
+ import { Box as Box18, Text as Text19 } from "ink";
18127
+ import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
18112
18128
  var DEFAULT_MAX_ROWS = 15;
18113
18129
  function windowStart(rowCount, highlightIndex, maxRows) {
18114
18130
  if (rowCount <= maxRows) return 0;
@@ -18119,9 +18135,9 @@ function windowStart(rowCount, highlightIndex, maxRows) {
18119
18135
  return start;
18120
18136
  }
18121
18137
  function defaultRenderRow(row, index, isCursor) {
18122
- return /* @__PURE__ */ jsxs18(Text18, { children: [
18123
- isCursor ? /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx20(Text18, { children: " " }),
18124
- /* @__PURE__ */ jsx20(Text18, { inverse: isCursor, children: " " + row.label })
18138
+ return /* @__PURE__ */ jsxs19(Text19, { children: [
18139
+ isCursor ? /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.info, bold: true, children: figures3.pointer }) : /* @__PURE__ */ jsx21(Text19, { children: " " }),
18140
+ /* @__PURE__ */ jsx21(Text19, { inverse: isCursor, children: " " + row.label })
18125
18141
  ] }, index);
18126
18142
  }
18127
18143
  function GotoBanner({
@@ -18140,8 +18156,8 @@ function GotoBanner({
18140
18156
  const visible = rows.slice(start, end);
18141
18157
  const moreAbove = start;
18142
18158
  const moreBelow = rows.length - end;
18143
- return /* @__PURE__ */ jsxs18(
18144
- Box17,
18159
+ return /* @__PURE__ */ jsxs19(
18160
+ Box18,
18145
18161
  {
18146
18162
  flexDirection: "column",
18147
18163
  borderStyle: "single",
@@ -18151,14 +18167,14 @@ function GotoBanner({
18151
18167
  width,
18152
18168
  flexShrink: 0,
18153
18169
  children: [
18154
- /* @__PURE__ */ jsx20(Text18, { bold: true, children: title }),
18155
- moreAbove > 0 && /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
18170
+ /* @__PURE__ */ jsx21(Text19, { bold: true, children: title }),
18171
+ moreAbove > 0 && /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.muted, children: ` \u25B2 ${moreAbove} more` }),
18156
18172
  visible.map((row, vi) => {
18157
18173
  const i = start + vi;
18158
18174
  return renderRow(row, i, i === highlightIndex);
18159
18175
  }),
18160
- moreBelow > 0 && /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
18161
- footerHint !== void 0 && /* @__PURE__ */ jsx20(Text18, { color: PALETTE2.muted, children: footerHint })
18176
+ moreBelow > 0 && /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.muted, children: ` \u25BC ${moreBelow} more` }),
18177
+ footerHint !== void 0 && /* @__PURE__ */ jsx21(Text19, { color: PALETTE2.muted, children: footerHint })
18162
18178
  ]
18163
18179
  }
18164
18180
  );
@@ -18166,7 +18182,7 @@ function GotoBanner({
18166
18182
 
18167
18183
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
18168
18184
  import figures4 from "figures";
18169
- import { Box as Box18, Text as Text20 } from "ink";
18185
+ import { Box as Box19, Text as Text21 } from "ink";
18170
18186
 
18171
18187
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/graph/cycle-detection.ts
18172
18188
  function buildGraph(components) {
@@ -18506,8 +18522,8 @@ function findSharedDeps(closures) {
18506
18522
  }
18507
18523
 
18508
18524
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/badge.tsx
18509
- import { Text as Text19 } from "ink";
18510
- import { jsx as jsx21 } from "react/jsx-runtime";
18525
+ import { Text as Text20 } from "ink";
18526
+ import { jsx as jsx22 } from "react/jsx-runtime";
18511
18527
  function previewBadge(annotation) {
18512
18528
  switch (annotation) {
18513
18529
  case "new":
@@ -18526,11 +18542,11 @@ function PreviewBadge({
18526
18542
  badge,
18527
18543
  highlighted = false
18528
18544
  }) {
18529
- return badge ? /* @__PURE__ */ jsx21(Text19, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx21(Text19, { children: " " });
18545
+ return badge ? /* @__PURE__ */ jsx22(Text20, { color: !highlighted && badge.dim ? PALETTE2.muted : badge.color, bold: badge.bold, children: badge.char }) : /* @__PURE__ */ jsx22(Text20, { children: " " });
18530
18546
  }
18531
18547
 
18532
18548
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/GroupedSidebar.tsx
18533
- import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
18549
+ import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
18534
18550
  var GLYPH_EXPAND_COLLAPSED = "\u25B8";
18535
18551
  var GLYPH_EXPAND_EXPANDED = "\u25BE";
18536
18552
  var GLYPH_TREE_MID = "\u251C\u2500";
@@ -18955,12 +18971,12 @@ function GroupedSidebar(props) {
18955
18971
  const start = windowed ? Math.max(0, scrollOffset ?? 0) : 0;
18956
18972
  const end = windowed ? start + (visibleCount ?? allRows.length) : allRows.length;
18957
18973
  const rows = windowed ? allRows.slice(start, end) : allRows;
18958
- return /* @__PURE__ */ jsxs19(WindowedPanel, { width, height: props.height, title, focused, children: [
18959
- allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs19(Text20, { color: PALETTE2.warning, children: [
18974
+ return /* @__PURE__ */ jsxs20(WindowedPanel, { width, height: props.height, title, focused, children: [
18975
+ allRows.length === 0 && emptyMessage !== void 0 && /* @__PURE__ */ jsxs20(Text21, { color: PALETTE2.warning, children: [
18960
18976
  " ",
18961
18977
  emptyMessage
18962
18978
  ] }),
18963
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "up", count: start }),
18979
+ windowed && /* @__PURE__ */ jsx23(WindowIndicator, { direction: "up", count: start }),
18964
18980
  rows.map((row, i) => {
18965
18981
  const absoluteRowIdx = start + i;
18966
18982
  const isSelected = selectedRowIdx !== void 0 ? absoluteRowIdx === selectedRowIdx && row.itemIdx >= 0 : row.itemIdx >= 0 && row.itemIdx === selectedIdx;
@@ -18987,13 +19003,13 @@ function GroupedSidebar(props) {
18987
19003
  isOwn: rs?.isOwn ?? false,
18988
19004
  isCursor
18989
19005
  });
18990
- return /* @__PURE__ */ jsxs19(Box18, { children: [
18991
- isCursor ? /* @__PURE__ */ jsx22(Text20, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx22(Text20, { children: " " }),
18992
- /* @__PURE__ */ jsx22(PreviewBadge, { badge, highlighted: isSelected }),
18993
- selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx22(Text20, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx22(Text20, { children: " " })),
18994
- aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx22(Text20, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx22(Text20, { children: " " })),
18995
- /* @__PURE__ */ jsxs19(
18996
- Text20,
19006
+ return /* @__PURE__ */ jsxs20(Box19, { children: [
19007
+ isCursor ? /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.info, bold: true, children: figures4.pointer }) : /* @__PURE__ */ jsx23(Text21, { children: " " }),
19008
+ /* @__PURE__ */ jsx23(PreviewBadge, { badge, highlighted: isSelected }),
19009
+ selectionStateByKey !== void 0 && (selGlyph && !isSynthetic ? /* @__PURE__ */ jsx23(Text21, { color: !isSelected && selDim ? PALETTE2.muted : selColor, bold: selBold, children: " " + selGlyph }) : /* @__PURE__ */ jsx23(Text21, { children: " " })),
19010
+ aiFlaggedByKey !== void 0 && (aiFlagged ? /* @__PURE__ */ jsx23(Text21, { color: PALETTE2.warning, bold: true, children: " [\xD7]" }) : /* @__PURE__ */ jsx23(Text21, { children: " " })),
19011
+ /* @__PURE__ */ jsxs20(
19012
+ Text21,
18997
19013
  {
18998
19014
  color: isSelected ? PALETTE2.info : labelStyle.dim ? PALETTE2.muted : labelStyle.color,
18999
19015
  bold: isSelected || labelStyle.bold,
@@ -19006,16 +19022,16 @@ function GroupedSidebar(props) {
19006
19022
  ]
19007
19023
  }
19008
19024
  ),
19009
- inheritanceStyle.glyph && /* @__PURE__ */ jsx22(Text20, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
19025
+ inheritanceStyle.glyph && /* @__PURE__ */ jsx23(Text21, { color: inheritanceStyle.dim ? PALETTE2.muted : inheritanceStyle.color, bold: inheritanceStyle.bold, children: " " + inheritanceStyle.glyph })
19010
19026
  ] }, row.key);
19011
19027
  }),
19012
- windowed && /* @__PURE__ */ jsx22(WindowIndicator, { direction: "down", count: allRows.length - end })
19028
+ windowed && /* @__PURE__ */ jsx23(WindowIndicator, { direction: "down", count: allRows.length - end })
19013
19029
  ] });
19014
19030
  }
19015
19031
 
19016
19032
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
19017
19033
  import React9 from "react";
19018
- import { Box as Box19, Text as Text21 } from "ink";
19034
+ import { Box as Box20, Text as Text22 } from "ink";
19019
19035
 
19020
19036
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/hooks/useImmediateInput.ts
19021
19037
  import { useLayoutEffect, useRef as useRef5 } from "react";
@@ -19114,7 +19130,7 @@ function useTerminalSize() {
19114
19130
  }
19115
19131
 
19116
19132
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/HelpOverlay.tsx
19117
- import { Fragment as Fragment2, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
19133
+ import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
19118
19134
  function HelpOverlay(props) {
19119
19135
  const { onClose } = props;
19120
19136
  const { columns: terminalColumns, rows: terminalRows } = useTerminalSize();
@@ -19125,8 +19141,8 @@ function HelpOverlay(props) {
19125
19141
  if (input === "h" || key.escape) onClose();
19126
19142
  }, props.handleInput !== false);
19127
19143
  if (props.sections) {
19128
- return /* @__PURE__ */ jsxs20(
19129
- Box19,
19144
+ return /* @__PURE__ */ jsxs21(
19145
+ Box20,
19130
19146
  {
19131
19147
  flexDirection: "column",
19132
19148
  borderStyle: "round",
@@ -19135,19 +19151,19 @@ function HelpOverlay(props) {
19135
19151
  height: panelHeight,
19136
19152
  overflowY: "hidden",
19137
19153
  children: [
19138
- /* @__PURE__ */ jsx23(Text21, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19139
- props.sections.map((section) => /* @__PURE__ */ jsxs20(React9.Fragment, { children: [
19140
- /* @__PURE__ */ jsx23(Text21, { children: " " }),
19141
- /* @__PURE__ */ jsx23(Text21, { bold: true, children: section.title }),
19142
- section.entries.map((entry) => /* @__PURE__ */ jsx23(Text21, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
19154
+ /* @__PURE__ */ jsx24(Text22, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19155
+ props.sections.map((section) => /* @__PURE__ */ jsxs21(React9.Fragment, { children: [
19156
+ /* @__PURE__ */ jsx24(Text22, { children: " " }),
19157
+ /* @__PURE__ */ jsx24(Text22, { bold: true, children: section.title }),
19158
+ section.entries.map((entry) => /* @__PURE__ */ jsx24(Text22, { children: entry.keys ? " " + entry.keys.padEnd(16) + " " + entry.label : " " + entry.label }, entry.keys + entry.label))
19143
19159
  ] }, section.title))
19144
19160
  ]
19145
19161
  }
19146
19162
  );
19147
19163
  }
19148
19164
  const mode = props.mode;
19149
- return /* @__PURE__ */ jsxs20(
19150
- Box19,
19165
+ return /* @__PURE__ */ jsxs21(
19166
+ Box20,
19151
19167
  {
19152
19168
  flexDirection: "column",
19153
19169
  borderStyle: "round",
@@ -19156,38 +19172,38 @@ function HelpOverlay(props) {
19156
19172
  height: panelHeight,
19157
19173
  overflowY: "hidden",
19158
19174
  children: [
19159
- /* @__PURE__ */ jsx23(Text21, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19160
- /* @__PURE__ */ jsx23(Text21, { children: " " }),
19161
- /* @__PURE__ */ jsx23(Text21, { bold: true, children: "Navigation" }),
19162
- /* @__PURE__ */ jsx23(Text21, { children: " \u2191 / k / PgUp Scroll up" }),
19163
- /* @__PURE__ */ jsx23(Text21, { children: " \u2193 / j / PgDn Scroll down" }),
19164
- /* @__PURE__ */ jsx23(Text21, { children: " g / Home Jump to top" }),
19165
- /* @__PURE__ */ jsx23(Text21, { children: " G / End Jump to bottom" }),
19166
- mode === "review" && /* @__PURE__ */ jsxs20(Fragment2, { children: [
19167
- /* @__PURE__ */ jsx23(Text21, { children: " " }),
19168
- /* @__PURE__ */ jsx23(Text21, { bold: true, children: "[Review mode only]" }),
19169
- /* @__PURE__ */ jsx23(Text21, { children: " Tab Toggle sidebar/detail" }),
19170
- /* @__PURE__ */ jsx23(Text21, { children: " a Accept component" }),
19171
- /* @__PURE__ */ jsx23(Text21, { children: " r Reject component" }),
19172
- /* @__PURE__ */ jsx23(Text21, { children: " e Edit proposal" }),
19173
- /* @__PURE__ */ jsx23(Text21, { children: " s Toggle source code" }),
19174
- /* @__PURE__ */ jsx23(Text21, { children: " A Approve all" }),
19175
- /* @__PURE__ */ jsx23(Text21, { children: " F Open finalize dialog" }),
19176
- /* @__PURE__ */ jsx23(Text21, { children: " Ctrl+S Save draft" }),
19177
- /* @__PURE__ */ jsx23(Text21, { children: " Ctrl+Z Undo" }),
19178
- /* @__PURE__ */ jsx23(Text21, { children: " Ctrl+Y Redo" }),
19179
- /* @__PURE__ */ jsx23(Text21, { children: " Esc Exit edit / close" })
19175
+ /* @__PURE__ */ jsx24(Text22, { bold: true, children: "\u2500".repeat(titleRule) + " Help " + "\u2500".repeat(titleRule) }),
19176
+ /* @__PURE__ */ jsx24(Text22, { children: " " }),
19177
+ /* @__PURE__ */ jsx24(Text22, { bold: true, children: "Navigation" }),
19178
+ /* @__PURE__ */ jsx24(Text22, { children: " \u2191 / k / PgUp Scroll up" }),
19179
+ /* @__PURE__ */ jsx24(Text22, { children: " \u2193 / j / PgDn Scroll down" }),
19180
+ /* @__PURE__ */ jsx24(Text22, { children: " g / Home Jump to top" }),
19181
+ /* @__PURE__ */ jsx24(Text22, { children: " G / End Jump to bottom" }),
19182
+ mode === "review" && /* @__PURE__ */ jsxs21(Fragment3, { children: [
19183
+ /* @__PURE__ */ jsx24(Text22, { children: " " }),
19184
+ /* @__PURE__ */ jsx24(Text22, { bold: true, children: "[Review mode only]" }),
19185
+ /* @__PURE__ */ jsx24(Text22, { children: " Tab Toggle sidebar/detail" }),
19186
+ /* @__PURE__ */ jsx24(Text22, { children: " a Accept component" }),
19187
+ /* @__PURE__ */ jsx24(Text22, { children: " r Reject component" }),
19188
+ /* @__PURE__ */ jsx24(Text22, { children: " e Edit proposal" }),
19189
+ /* @__PURE__ */ jsx24(Text22, { children: " s Toggle source code" }),
19190
+ /* @__PURE__ */ jsx24(Text22, { children: " A Approve all" }),
19191
+ /* @__PURE__ */ jsx24(Text22, { children: " F Open finalize dialog" }),
19192
+ /* @__PURE__ */ jsx24(Text22, { children: " Ctrl+S Save draft" }),
19193
+ /* @__PURE__ */ jsx24(Text22, { children: " Ctrl+Z Undo" }),
19194
+ /* @__PURE__ */ jsx24(Text22, { children: " Ctrl+Y Redo" }),
19195
+ /* @__PURE__ */ jsx24(Text22, { children: " Esc Exit edit / close" })
19180
19196
  ] }),
19181
- /* @__PURE__ */ jsx23(Text21, { children: " " }),
19182
- /* @__PURE__ */ jsx23(Text21, { children: " h Close help" }),
19183
- /* @__PURE__ */ jsx23(Text21, { children: " q Quit" })
19197
+ /* @__PURE__ */ jsx24(Text22, { children: " " }),
19198
+ /* @__PURE__ */ jsx24(Text22, { children: " h Close help" }),
19199
+ /* @__PURE__ */ jsx24(Text22, { children: " q Quit" })
19184
19200
  ]
19185
19201
  }
19186
19202
  );
19187
19203
  }
19188
19204
 
19189
19205
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
19190
- import { Box as Box20, Text as Text22 } from "ink";
19206
+ import { Box as Box21, Text as Text23 } from "ink";
19191
19207
 
19192
19208
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/autocomplete.ts
19193
19209
  function longestCommonPrefix(names) {
@@ -19244,7 +19260,7 @@ function formatSearchMatchSummary(matches, total) {
19244
19260
  }
19245
19261
 
19246
19262
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/sidebar/components/SearchMatchSummary.tsx
19247
- import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
19263
+ import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
19248
19264
  function SearchMatchSummary({
19249
19265
  open,
19250
19266
  query,
@@ -19255,17 +19271,17 @@ function SearchMatchSummary({
19255
19271
  marginTop
19256
19272
  }) {
19257
19273
  if (hidden) return null;
19258
- return /* @__PURE__ */ jsxs21(Fragment3, { children: [
19259
- open && /* @__PURE__ */ jsxs21(Box20, { marginTop, flexDirection: "column", children: [
19260
- /* @__PURE__ */ jsxs21(Text22, { children: [
19274
+ return /* @__PURE__ */ jsxs22(Fragment4, { children: [
19275
+ open && /* @__PURE__ */ jsxs22(Box21, { marginTop, flexDirection: "column", children: [
19276
+ /* @__PURE__ */ jsxs22(Text23, { children: [
19261
19277
  `/${query}`,
19262
- /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.info, children: "\u258E" }),
19263
- query && /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
19264
- /* @__PURE__ */ jsx24(Text22, { children: " \xB7 [Esc] leave" })
19278
+ /* @__PURE__ */ jsx25(Text23, { color: PALETTE2.info, children: "\u258E" }),
19279
+ query && /* @__PURE__ */ jsx25(Text23, { color: PALETTE2.muted, children: formatSearchMatchSummary(matches, total) }),
19280
+ /* @__PURE__ */ jsx25(Text23, { children: " \xB7 [Esc] leave" })
19265
19281
  ] }),
19266
- autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx24(Text22, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
19282
+ autocompleteCandidates.length > 1 && /* @__PURE__ */ jsx25(Text23, { color: PALETTE2.muted, children: ` possibilities: ${autocompleteCandidates.join(" \xB7 ").slice(0, 120)}` })
19267
19283
  ] }),
19268
- !open && query && /* @__PURE__ */ jsx24(Box20, { marginTop, children: /* @__PURE__ */ jsx24(Text22, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19284
+ !open && query && /* @__PURE__ */ jsx25(Box21, { marginTop, children: /* @__PURE__ */ jsx25(Text23, { children: `/${query}${formatSearchMatchSummary(matches, total)} \xB7 [Esc] clear` }) })
19269
19285
  ] });
19270
19286
  }
19271
19287
 
@@ -20402,7 +20418,7 @@ function useScopeGate({ components, onConfirm, onQuit }) {
20402
20418
  }
20403
20419
 
20404
20420
  // packages/experience-design-system-cli/src/tui/import/steps/07-scope-gate/screen.tsx
20405
- import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
20421
+ import { Fragment as Fragment5, jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
20406
20422
  var HELP_SECTIONS = [
20407
20423
  {
20408
20424
  title: "Navigation",
@@ -20442,27 +20458,27 @@ var HELP_SECTIONS = [
20442
20458
  ];
20443
20459
  function ScopeGateScreen(props) {
20444
20460
  if (props.components.length === 0) {
20445
- return /* @__PURE__ */ jsx25(Box21, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx25(Text23, { color: PALETTE2.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
20461
+ return /* @__PURE__ */ jsx26(Box22, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx26(Text24, { color: PALETTE2.error, children: "Error: no components found for this session \u2014 please re-run analyze extract." }) });
20446
20462
  }
20447
- return /* @__PURE__ */ jsx25(ScopeGateView, { ...props });
20463
+ return /* @__PURE__ */ jsx26(ScopeGateView, { ...props });
20448
20464
  }
20449
20465
  function ScopeGateView({ components, onConfirm, onQuit }) {
20450
20466
  const gate = useScopeGate({ components, onConfirm, onQuit });
20451
20467
  const { search, graph, columnPlan, panelLayout, counters } = gate;
20452
20468
  if (gate.showHelp) {
20453
- return /* @__PURE__ */ jsx25(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
20469
+ return /* @__PURE__ */ jsx26(HelpOverlay, { sections: HELP_SECTIONS, handleInput: false, onClose: gate.closeHelp });
20454
20470
  }
20455
- return /* @__PURE__ */ jsxs22(Box21, { flexDirection: "column", paddingX: 2, children: [
20456
- /* @__PURE__ */ jsxs22(Box21, { flexDirection: "row", flexWrap: "wrap", children: [
20457
- /* @__PURE__ */ jsx25(CounterStrip, { counters, totalWidth: gate.totalWidth }),
20458
- gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs22(Text23, { color: PALETTE2.muted, children: [
20471
+ return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", paddingX: 2, children: [
20472
+ /* @__PURE__ */ jsxs23(Box22, { flexDirection: "row", flexWrap: "wrap", children: [
20473
+ /* @__PURE__ */ jsx26(CounterStrip, { counters, totalWidth: gate.totalWidth }),
20474
+ gate.aiExcludedCount > 0 && /* @__PURE__ */ jsxs23(Text24, { color: PALETTE2.muted, children: [
20459
20475
  `${gate.aiExcludedCount} component${gate.aiExcludedCount === 1 ? "" : "s"} flagged by AI`,
20460
- gate.aiRows.length > 0 && /* @__PURE__ */ jsx25(Text23, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
20476
+ gate.aiRows.length > 0 && /* @__PURE__ */ jsx26(Text24, { color: PALETTE2.info, children: " \u2014 press [x] to see why" })
20461
20477
  ] })
20462
20478
  ] }),
20463
- graph.cycles.length > 0 && /* @__PURE__ */ jsx25(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx25(Text23, { 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." }) }),
20464
- /* @__PURE__ */ jsxs22(Box21, { flexDirection: "row", alignItems: "stretch", children: [
20465
- gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx25(
20479
+ graph.cycles.length > 0 && /* @__PURE__ */ jsx26(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx26(Text24, { 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." }) }),
20480
+ /* @__PURE__ */ jsxs23(Box22, { flexDirection: "row", alignItems: "stretch", children: [
20481
+ gate.aiRationalePanelOpen ? /* @__PURE__ */ jsx26(
20466
20482
  GotoBanner,
20467
20483
  {
20468
20484
  title: `Review flags (${gate.aiExcludedCount})`,
@@ -20472,7 +20488,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20472
20488
  width: columnPlan.main,
20473
20489
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [x/Esc] close"
20474
20490
  }
20475
- ) : /* @__PURE__ */ jsx25(
20491
+ ) : /* @__PURE__ */ jsx26(
20476
20492
  GroupedSidebar,
20477
20493
  {
20478
20494
  items: gate.groupedItems,
@@ -20500,9 +20516,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20500
20516
  graph: graph.nodes
20501
20517
  }
20502
20518
  ),
20503
- columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs22(Fragment4, { children: [
20504
- /* @__PURE__ */ jsx25(Box21, { width: 2, flexShrink: 0 }),
20505
- /* @__PURE__ */ jsx25(
20519
+ columnPlan.layout === "two-column" && /* @__PURE__ */ jsxs23(Fragment5, { children: [
20520
+ /* @__PURE__ */ jsx26(Box22, { width: 2, flexShrink: 0 }),
20521
+ /* @__PURE__ */ jsx26(
20506
20522
  AddedColumn,
20507
20523
  {
20508
20524
  width: columnPlan.added,
@@ -20517,9 +20533,9 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20517
20533
  )
20518
20534
  ] })
20519
20535
  ] }),
20520
- gate.cyclesPanelOpen && /* @__PURE__ */ jsx25(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
20521
- gate.pendingRejectCascade && /* @__PURE__ */ jsx25(RejectPrompt, { pending: gate.pendingRejectCascade }),
20522
- /* @__PURE__ */ jsx25(
20536
+ gate.cyclesPanelOpen && /* @__PURE__ */ jsx26(CyclesPanel, { cycles: gate.slotCycles, cursor: gate.cyclesCursor }),
20537
+ gate.pendingRejectCascade && /* @__PURE__ */ jsx26(RejectPrompt, { pending: gate.pendingRejectCascade }),
20538
+ /* @__PURE__ */ jsx26(
20523
20539
  SearchMatchSummary,
20524
20540
  {
20525
20541
  open: search.searchOpen,
@@ -20530,7 +20546,7 @@ function ScopeGateView({ components, onConfirm, onQuit }) {
20530
20546
  marginTop: 1
20531
20547
  }
20532
20548
  ),
20533
- /* @__PURE__ */ jsx25(
20549
+ /* @__PURE__ */ jsx26(
20534
20550
  CompactControlBar,
20535
20551
  {
20536
20552
  hasGroupRoots: gate.hasGroupRoots,
@@ -20639,7 +20655,7 @@ function progressRows2(progress, agent) {
20639
20655
  }
20640
20656
 
20641
20657
  // packages/experience-design-system-cli/src/tui/import/steps/08-generation/screen.tsx
20642
- import { jsx as jsx26 } from "react/jsx-runtime";
20658
+ import { jsx as jsx27 } from "react/jsx-runtime";
20643
20659
  function GenerationScreen({
20644
20660
  progress,
20645
20661
  agent,
@@ -20648,7 +20664,7 @@ function GenerationScreen({
20648
20664
  stepNumber,
20649
20665
  totalSteps
20650
20666
  }) {
20651
- return /* @__PURE__ */ jsx26(
20667
+ return /* @__PURE__ */ jsx27(
20652
20668
  RunningStep,
20653
20669
  {
20654
20670
  stepNumber,
@@ -20874,7 +20890,7 @@ function buildFlowStart(input) {
20874
20890
  }
20875
20891
 
20876
20892
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
20877
- import { Box as Box42 } from "ink";
20893
+ import { Box as Box43 } from "ink";
20878
20894
 
20879
20895
  // packages/experience-design-system-types/dist/src/cdf/validate.js
20880
20896
  import { Ajv as Ajv2 } from "ajv";
@@ -21194,7 +21210,7 @@ function skipLabel(matchedNames) {
21194
21210
  }
21195
21211
 
21196
21212
  // packages/experience-design-system-cli/src/tui/import/steps/preview-validation-error/screen.tsx
21197
- import { jsx as jsx27 } from "react/jsx-runtime";
21213
+ import { jsx as jsx28 } from "react/jsx-runtime";
21198
21214
  function PreviewValidationErrorScreen({
21199
21215
  errors,
21200
21216
  missingNames,
@@ -21203,7 +21219,7 @@ function PreviewValidationErrorScreen({
21203
21219
  onQuit
21204
21220
  }) {
21205
21221
  const matchedNames = matchedComponentNames(errors, missingNames);
21206
- return /* @__PURE__ */ jsx27(
21222
+ return /* @__PURE__ */ jsx28(
21207
21223
  GateStep,
21208
21224
  {
21209
21225
  intent: "error",
@@ -21239,7 +21255,7 @@ function getReviewJsonPanelValue(selected, showHiddenProps) {
21239
21255
  }
21240
21256
 
21241
21257
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
21242
- import { Box as Box34, Text as Text37 } from "ink";
21258
+ import { Box as Box35, Text as Text38 } from "ink";
21243
21259
 
21244
21260
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/graph/cycle-view.ts
21245
21261
  function computeCycleView(components) {
@@ -21478,12 +21494,12 @@ function enumerateCycleBreaks(cycle, components) {
21478
21494
  }
21479
21495
 
21480
21496
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
21481
- import { Box as Box28, Text as Text31 } from "ink";
21497
+ import { Box as Box29, Text as Text32 } from "ink";
21482
21498
 
21483
21499
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
21484
21500
  import React10, { useEffect as useEffect11, useLayoutEffect as useLayoutEffect2, useState as useState17 } from "react";
21485
21501
  import figures5 from "figures";
21486
- import { Box as Box22, measureElement, Text as Text24 } from "ink";
21502
+ import { Box as Box23, measureElement, Text as Text25 } from "ink";
21487
21503
 
21488
21504
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/scroll-offset.ts
21489
21505
  function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
@@ -21514,7 +21530,7 @@ function computeNextScrollOffset(current, input, key, totalLines, panelHeight) {
21514
21530
  }
21515
21531
 
21516
21532
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FieldEditor.tsx
21517
- import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
21533
+ import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
21518
21534
  function createCommonRowProps(selected, focusLevel, editingField, textCursor, valueCursor, cursorVisible, editingValue, valueText, width) {
21519
21535
  return {
21520
21536
  selected,
@@ -21652,14 +21668,14 @@ function serializeState(state2, originalJson) {
21652
21668
  return JSON.stringify(entry, null, 2);
21653
21669
  }
21654
21670
  function Picker({ value, active }) {
21655
- return /* @__PURE__ */ jsxs23(Box22, { children: [
21656
- active && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.warning, children: "\u2039" }),
21657
- /* @__PURE__ */ jsx28(Text24, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
21658
- active && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.warning, children: "\u203A" })
21671
+ return /* @__PURE__ */ jsxs24(Box23, { children: [
21672
+ active && /* @__PURE__ */ jsx29(Text25, { color: PALETTE.warning, children: "\u2039" }),
21673
+ /* @__PURE__ */ jsx29(Text25, { color: active ? PALETTE.warning : void 0, bold: active, children: value }),
21674
+ active && /* @__PURE__ */ jsx29(Text25, { color: PALETTE.warning, children: "\u203A" })
21659
21675
  ] });
21660
21676
  }
21661
21677
  function Toggle({ value, active }) {
21662
- return /* @__PURE__ */ jsx28(Box22, { children: /* @__PURE__ */ jsx28(Text24, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21678
+ return /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { color: active ? PALETTE.warning : value ? PALETTE.success : PALETTE.border, children: value ? "[\u2713]" : "[ ]" }) });
21663
21679
  }
21664
21680
  function InlinePropField({
21665
21681
  label,
@@ -21668,8 +21684,8 @@ function InlinePropField({
21668
21684
  flexible = false,
21669
21685
  width
21670
21686
  }) {
21671
- return /* @__PURE__ */ jsxs23(Box22, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
21672
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
21687
+ return /* @__PURE__ */ jsxs24(Box23, { width, gap: 1, flexShrink: flexible ? 1 : 0, flexGrow: flexible ? 1 : 0, flexWrap: "wrap", children: [
21688
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, wrap: "truncate-end", children: [
21673
21689
  focused ? "\u203A " : " ",
21674
21690
  label
21675
21691
  ] }),
@@ -21682,19 +21698,19 @@ function RequiredField({
21682
21698
  editingField,
21683
21699
  activeField
21684
21700
  }) {
21685
- return /* @__PURE__ */ jsx28(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx28(Toggle, { value, active: editingField && activeField === "required" }) });
21701
+ return /* @__PURE__ */ jsx29(InlinePropField, { label: "req:", focused, children: /* @__PURE__ */ jsx29(Toggle, { value, active: editingField && activeField === "required" }) });
21686
21702
  }
21687
21703
  function DefaultValueRow({
21688
21704
  display,
21689
21705
  active,
21690
21706
  focused
21691
21707
  }) {
21692
- return /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
21693
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21708
+ return /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexWrap: "wrap", flexShrink: 0, children: [
21709
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21694
21710
  focused ? "\u203A " : " ",
21695
21711
  "default:"
21696
21712
  ] }),
21697
- active ? /* @__PURE__ */ jsx28(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx28(Text24, { wrap: "wrap", children: display })
21713
+ active ? /* @__PURE__ */ jsx29(Picker, { value: display, active: true }) : /* @__PURE__ */ jsx29(Text25, { wrap: "wrap", children: display })
21698
21714
  ] });
21699
21715
  }
21700
21716
  function RowLabel({
@@ -21702,8 +21718,8 @@ function RowLabel({
21702
21718
  selected,
21703
21719
  trailing = true
21704
21720
  }) {
21705
- return /* @__PURE__ */ jsxs23(
21706
- Text24,
21721
+ return /* @__PURE__ */ jsxs24(
21722
+ Text25,
21707
21723
  {
21708
21724
  color: selected ? "#FFFFFF" : PALETTE.accent,
21709
21725
  bold: selected,
@@ -21722,10 +21738,10 @@ function ValueInputRow({
21722
21738
  valueText,
21723
21739
  cursorVisible
21724
21740
  }) {
21725
- return /* @__PURE__ */ jsxs23(Box22, { paddingLeft: 2, children: [
21726
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
21727
- /* @__PURE__ */ jsx28(Text24, { children: valueText }),
21728
- /* @__PURE__ */ jsx28(Text24, { inverse: cursorVisible, children: " " })
21741
+ return /* @__PURE__ */ jsxs24(Box23, { paddingLeft: 2, children: [
21742
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.accent, children: mode === "edit" ? "\u270E " : "+ " }),
21743
+ /* @__PURE__ */ jsx29(Text25, { children: valueText }),
21744
+ /* @__PURE__ */ jsx29(Text25, { inverse: cursorVisible, children: " " })
21729
21745
  ] });
21730
21746
  }
21731
21747
  function EditableListItem({
@@ -21738,9 +21754,9 @@ function EditableListItem({
21738
21754
  }) {
21739
21755
  const isBeingEdited = editingValue?.mode === "edit" && editingValue.index === index;
21740
21756
  if (isBeingEdited) {
21741
- return /* @__PURE__ */ jsx28(ValueInputRow, { mode: "edit", valueText, cursorVisible });
21757
+ return /* @__PURE__ */ jsx29(ValueInputRow, { mode: "edit", valueText, cursorVisible });
21742
21758
  }
21743
- return /* @__PURE__ */ jsx28(Box22, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text24, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
21759
+ return /* @__PURE__ */ jsx29(Box23, { gap: 1, paddingLeft: 2, children: /* @__PURE__ */ jsx29(Text25, { color: active ? PALETTE.accent : void 0, children: active ? `${figures5.pointer} ${value}` : ` ${value}` }) });
21744
21760
  }
21745
21761
  function EditableValueList({
21746
21762
  values,
@@ -21753,9 +21769,9 @@ function EditableValueList({
21753
21769
  emptyPaddingLeft,
21754
21770
  showAddInput
21755
21771
  }) {
21756
- return /* @__PURE__ */ jsxs23(Fragment5, { children: [
21757
- values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx28(Box22, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: emptyMessage }) })),
21758
- values.map((value, index) => /* @__PURE__ */ jsx28(
21772
+ return /* @__PURE__ */ jsxs24(Fragment6, { children: [
21773
+ values.length === 0 && !editingValue && (emptyPaddingLeft === void 0 ? /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: emptyMessage }) : /* @__PURE__ */ jsx29(Box23, { paddingLeft: emptyPaddingLeft, children: /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: emptyMessage }) })),
21774
+ values.map((value, index) => /* @__PURE__ */ jsx29(
21759
21775
  EditableListItem,
21760
21776
  {
21761
21777
  value,
@@ -21767,7 +21783,7 @@ function EditableValueList({
21767
21783
  },
21768
21784
  index
21769
21785
  )),
21770
- showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx28(ValueInputRow, { mode: "add", valueText, cursorVisible })
21786
+ showAddInput && editingValue?.mode === "add" && /* @__PURE__ */ jsx29(ValueInputRow, { mode: "add", valueText, cursorVisible })
21771
21787
  ] });
21772
21788
  }
21773
21789
  function DefaultSubRow({
@@ -21779,51 +21795,51 @@ function DefaultSubRow({
21779
21795
  }) {
21780
21796
  const cursor = cursorVisible ? "\u2588" : " ";
21781
21797
  if (prop.type === "richtext" || prop.type === "media" || prop.type === "link") {
21782
- return /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexShrink: 0, children: [
21783
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21798
+ return /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexShrink: 0, children: [
21799
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21784
21800
  focused ? "\u203A " : " ",
21785
21801
  "default:"
21786
21802
  ] }),
21787
- /* @__PURE__ */ jsx28(Text24, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
21803
+ /* @__PURE__ */ jsx29(Text25, { color: focused ? void 0 : PALETTE.muted, children: "(not applicable)" })
21788
21804
  ] });
21789
21805
  }
21790
21806
  if (prop.type === "boolean") {
21791
21807
  const display = prop.default === true ? "true" : prop.default === false ? "false" : "(unset)";
21792
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
21808
+ return /* @__PURE__ */ jsx29(DefaultValueRow, { display, active, focused });
21793
21809
  }
21794
21810
  if (prop.type === "enum") {
21795
21811
  if (prop.values.length === 0) {
21796
- return /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexShrink: 0, children: [
21797
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21812
+ return /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexShrink: 0, children: [
21813
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21798
21814
  focused ? "\u203A " : " ",
21799
21815
  "default:"
21800
21816
  ] }),
21801
- /* @__PURE__ */ jsx28(Text24, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
21817
+ /* @__PURE__ */ jsx29(Text25, { color: focused ? void 0 : PALETTE.muted, children: "(no values defined)" })
21802
21818
  ] });
21803
21819
  }
21804
21820
  const display = typeof prop.default === "string" && prop.default !== "" ? prop.default : "(unset)";
21805
- return /* @__PURE__ */ jsx28(DefaultValueRow, { display, active, focused });
21821
+ return /* @__PURE__ */ jsx29(DefaultValueRow, { display, active, focused });
21806
21822
  }
21807
21823
  const value = typeof prop.default === "string" ? prop.default : "";
21808
21824
  if (active) {
21809
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "row", flexShrink: 0, children: [
21810
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21825
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "row", flexShrink: 0, children: [
21826
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21811
21827
  focused ? "\u203A " : " ",
21812
21828
  "default:"
21813
21829
  ] }),
21814
- /* @__PURE__ */ jsxs23(Box22, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
21815
- /* @__PURE__ */ jsx28(Text24, { children: value.slice(0, textCursor) }),
21816
- /* @__PURE__ */ jsx28(Text24, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
21817
- /* @__PURE__ */ jsx28(Text24, { children: value.slice(textCursor + 1) })
21830
+ /* @__PURE__ */ jsxs24(Box23, { flexGrow: 1, borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
21831
+ /* @__PURE__ */ jsx29(Text25, { children: value.slice(0, textCursor) }),
21832
+ /* @__PURE__ */ jsx29(Text25, { inverse: cursorVisible, children: value[textCursor] ?? cursor }),
21833
+ /* @__PURE__ */ jsx29(Text25, { children: value.slice(textCursor + 1) })
21818
21834
  ] })
21819
21835
  ] });
21820
21836
  }
21821
- return /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexShrink: 0, children: [
21822
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21837
+ return /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexShrink: 0, children: [
21838
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21823
21839
  focused ? "\u203A " : " ",
21824
21840
  "default:"
21825
21841
  ] }),
21826
- /* @__PURE__ */ jsx28(Text24, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
21842
+ /* @__PURE__ */ jsx29(Text25, { color: focused || value ? void 0 : PALETTE.muted, children: value || "(none)" })
21827
21843
  ] });
21828
21844
  }
21829
21845
  function DescriptionField({
@@ -21838,20 +21854,20 @@ function DescriptionField({
21838
21854
  paddingLeft = 2
21839
21855
  }) {
21840
21856
  if (compact) {
21841
- return /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21842
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21857
+ return /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21858
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21843
21859
  focused ? "\u203A " : " ",
21844
21860
  label
21845
21861
  ] }),
21846
- /* @__PURE__ */ jsx28(Text24, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
21862
+ /* @__PURE__ */ jsx29(Text25, { wrap: "truncate-end", color: value ? void 0 : PALETTE.muted, children: value || "\u2014" })
21847
21863
  ] });
21848
21864
  }
21849
- return /* @__PURE__ */ jsxs23(Box22, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
21850
- /* @__PURE__ */ jsxs23(Text24, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21865
+ return /* @__PURE__ */ jsxs24(Box23, { paddingLeft, flexDirection: "column", width, flexShrink: 0, children: [
21866
+ /* @__PURE__ */ jsxs24(Text25, { color: focused ? PALETTE.warning : PALETTE.muted, bold: focused, children: [
21851
21867
  focused ? "\u203A " : " ",
21852
21868
  label
21853
21869
  ] }),
21854
- editing ? /* @__PURE__ */ jsx28(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx28(Text24, { wrap: "wrap", children: value || "\u2014" })
21870
+ editing ? /* @__PURE__ */ jsx29(EditableDescription, { cursorVisible, value, textCursor }) : /* @__PURE__ */ jsx29(Text25, { wrap: "wrap", children: value || "\u2014" })
21855
21871
  ] });
21856
21872
  }
21857
21873
  function EditableDescription({
@@ -21859,9 +21875,9 @@ function EditableDescription({
21859
21875
  value,
21860
21876
  textCursor
21861
21877
  }) {
21862
- return /* @__PURE__ */ jsxs23(Text24, { wrap: "wrap", children: [
21878
+ return /* @__PURE__ */ jsxs24(Text25, { wrap: "wrap", children: [
21863
21879
  value.slice(0, textCursor),
21864
- /* @__PURE__ */ jsx28(Text24, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
21880
+ /* @__PURE__ */ jsx29(Text25, { inverse: cursorVisible, children: value[textCursor] ?? " " }),
21865
21881
  value.slice(textCursor + 1)
21866
21882
  ] });
21867
21883
  }
@@ -21882,9 +21898,9 @@ function PropRow({
21882
21898
  }) {
21883
21899
  const descFocused = activeField === "description";
21884
21900
  const descActive = editingField && descFocused;
21885
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", width, flexShrink: 0, children: [
21886
- /* @__PURE__ */ jsx28(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: prop.name, selected }) }),
21887
- /* @__PURE__ */ jsx28(
21901
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", width, flexShrink: 0, children: [
21902
+ /* @__PURE__ */ jsx29(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx29(RowLabel, { name: prop.name, selected }) }),
21903
+ /* @__PURE__ */ jsx29(
21888
21904
  DescriptionField,
21889
21905
  {
21890
21906
  value: prop.description,
@@ -21897,8 +21913,8 @@ function PropRow({
21897
21913
  paddingLeft: 0
21898
21914
  }
21899
21915
  ),
21900
- /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", width, flexShrink: 0, children: [
21901
- /* @__PURE__ */ jsx28(
21916
+ /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", width, flexShrink: 0, children: [
21917
+ /* @__PURE__ */ jsx29(
21902
21918
  RequiredField,
21903
21919
  {
21904
21920
  value: prop.required,
@@ -21907,21 +21923,21 @@ function PropRow({
21907
21923
  activeField
21908
21924
  }
21909
21925
  ),
21910
- /* @__PURE__ */ jsx28(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx28(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx28(Text24, { children: prop.type }) })
21926
+ /* @__PURE__ */ jsx29(InlinePropField, { label: "type:", focused: activeField === "type", children: editingField && activeField === "type" ? /* @__PURE__ */ jsx29(Picker, { value: prop.type, active: true }) : /* @__PURE__ */ jsx29(Text25, { children: prop.type }) })
21911
21927
  ] }),
21912
- 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(Text24, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
21913
- prop.type === "enum" && /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21914
- /* @__PURE__ */ jsxs23(Text24, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
21928
+ prop.type === "token" && /* @__PURE__ */ jsx29(InlinePropField, { label: "kind:", focused: activeField === "tokenKind", width, children: editingField && activeField === "tokenKind" ? /* @__PURE__ */ jsx29(Picker, { value: prop.tokenKind || DESIGN_TOKEN_TYPES2[0], active: true }) : /* @__PURE__ */ jsx29(Text25, { wrap: "wrap", children: prop.tokenKind || "\u2014" }) }),
21929
+ prop.type === "enum" && /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21930
+ /* @__PURE__ */ jsxs24(Text25, { color: activeField === "values" ? PALETTE.warning : PALETTE.muted, bold: activeField === "values", children: [
21915
21931
  activeField === "values" ? "\u203A " : " ",
21916
21932
  "values:"
21917
21933
  ] }),
21918
- /* @__PURE__ */ jsxs23(Text24, { wrap: "wrap", children: [
21934
+ /* @__PURE__ */ jsxs24(Text25, { wrap: "wrap", children: [
21919
21935
  "[",
21920
21936
  prop.values.join(", "),
21921
21937
  "]"
21922
21938
  ] })
21923
21939
  ] }),
21924
- /* @__PURE__ */ jsx28(
21940
+ /* @__PURE__ */ jsx29(
21925
21941
  DefaultSubRow,
21926
21942
  {
21927
21943
  prop,
@@ -21931,13 +21947,13 @@ function PropRow({
21931
21947
  cursorVisible
21932
21948
  }
21933
21949
  ),
21934
- prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21935
- /* @__PURE__ */ jsxs23(Text24, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
21950
+ prop.type === "token" && prop.category === "design" && /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
21951
+ /* @__PURE__ */ jsxs24(Text25, { color: activeField === "allowed" ? PALETTE.warning : PALETTE.muted, bold: activeField === "allowed", children: [
21936
21952
  activeField === "allowed" ? "\u203A " : " ",
21937
21953
  "allowed:"
21938
21954
  ] }),
21939
- editingField && activeField === "allowed" ? /* @__PURE__ */ jsx28(Box22, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx28(Text24, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx28(
21940
- Text24,
21955
+ editingField && activeField === "allowed" ? /* @__PURE__ */ jsx29(Box23, { width: Math.max(1, width - 4), borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: /* @__PURE__ */ jsx29(Text25, { children: "press [t] to edit allowed tokens" }) }) : /* @__PURE__ */ jsx29(
21956
+ Text25,
21941
21957
  {
21942
21958
  color: activeField !== "allowed" && prop.allowed.length === 0 ? PALETTE.muted : void 0,
21943
21959
  wrap: "wrap",
@@ -21945,17 +21961,17 @@ function PropRow({
21945
21961
  }
21946
21962
  )
21947
21963
  ] }),
21948
- selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx28(Box22, { paddingLeft: 2, children: /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: (() => {
21964
+ selected && showRationale && rationale && rationale.trim().length > 0 && /* @__PURE__ */ jsx29(Box23, { paddingLeft: 2, children: /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: (() => {
21949
21965
  const max = Math.max(8, width - 8);
21950
21966
  const text = `~ ${rationale}`;
21951
21967
  return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
21952
21968
  })() }) }, rowKey ? `rationale-${rowKey}` : void 0),
21953
- selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs23(Box22, { paddingLeft: 2, flexDirection: "column", children: [
21954
- /* @__PURE__ */ jsxs23(Box22, { children: [
21955
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "values:" }),
21956
- activeField === "values" && /* @__PURE__ */ jsx28(Text24, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
21969
+ selected && prop.type === "enum" && activeField === "values" && /* @__PURE__ */ jsxs24(Box23, { paddingLeft: 2, flexDirection: "column", children: [
21970
+ /* @__PURE__ */ jsxs24(Box23, { children: [
21971
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "values:" }),
21972
+ activeField === "values" && /* @__PURE__ */ jsx29(Text25, { children: " [a] add [e] edit [r] remove [\u2191\u2193] navigate [K/J] reorder" })
21957
21973
  ] }),
21958
- /* @__PURE__ */ jsx28(
21974
+ /* @__PURE__ */ jsx29(
21959
21975
  EditableValueList,
21960
21976
  {
21961
21977
  values: prop.values,
@@ -21985,9 +22001,9 @@ function SlotRow({
21985
22001
  pickerCandidates,
21986
22002
  pickerCursor
21987
22003
  }) {
21988
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", width, flexShrink: 0, children: [
21989
- /* @__PURE__ */ jsx28(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(RowLabel, { name: slot.name, selected, trailing: false }) }),
21990
- /* @__PURE__ */ jsx28(
22004
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", width, flexShrink: 0, children: [
22005
+ /* @__PURE__ */ jsx29(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx29(RowLabel, { name: slot.name, selected, trailing: false }) }),
22006
+ /* @__PURE__ */ jsx29(
21991
22007
  DescriptionField,
21992
22008
  {
21993
22009
  value: slot.description,
@@ -22000,7 +22016,7 @@ function SlotRow({
22000
22016
  paddingLeft: 0
22001
22017
  }
22002
22018
  ),
22003
- /* @__PURE__ */ jsx28(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx28(
22019
+ /* @__PURE__ */ jsx29(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: /* @__PURE__ */ jsx29(
22004
22020
  RequiredField,
22005
22021
  {
22006
22022
  value: slot.required,
@@ -22009,9 +22025,9 @@ function SlotRow({
22009
22025
  activeField
22010
22026
  }
22011
22027
  ) }),
22012
- !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs23(Box22, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22013
- /* @__PURE__ */ jsxs23(
22014
- Text24,
22028
+ !(selected && editingField && activeField === "allowedComponents") && /* @__PURE__ */ jsxs24(Box23, { gap: 1, flexWrap: "wrap", width, flexShrink: 0, children: [
22029
+ /* @__PURE__ */ jsxs24(
22030
+ Text25,
22015
22031
  {
22016
22032
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
22017
22033
  bold: activeField === "allowedComponents",
@@ -22021,12 +22037,12 @@ function SlotRow({
22021
22037
  ]
22022
22038
  }
22023
22039
  ),
22024
- slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx28(Text24, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
22040
+ slot.allowedComponents.length === 0 ? /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "(any)" }) : /* @__PURE__ */ jsx29(Text25, { wrap: "wrap", children: slot.allowedComponents.join(", ") })
22025
22041
  ] }),
22026
- selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", children: [
22027
- /* @__PURE__ */ jsxs23(Box22, { children: [
22028
- /* @__PURE__ */ jsxs23(
22029
- Text24,
22042
+ selected && editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", children: [
22043
+ /* @__PURE__ */ jsxs24(Box23, { children: [
22044
+ /* @__PURE__ */ jsxs24(
22045
+ Text25,
22030
22046
  {
22031
22047
  color: activeField === "allowedComponents" ? PALETTE.warning : PALETTE.muted,
22032
22048
  bold: activeField === "allowedComponents",
@@ -22036,9 +22052,9 @@ function SlotRow({
22036
22052
  ]
22037
22053
  }
22038
22054
  ),
22039
- editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx28(Text24, { 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" })
22055
+ editingField && activeField === "allowedComponents" && /* @__PURE__ */ jsx29(Text25, { 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" })
22040
22056
  ] }),
22041
- /* @__PURE__ */ jsx28(
22057
+ /* @__PURE__ */ jsx29(
22042
22058
  EditableValueList,
22043
22059
  {
22044
22060
  values: slot.allowedComponents,
@@ -22052,21 +22068,21 @@ function SlotRow({
22052
22068
  showAddInput: editingField && activeField === "allowedComponents"
22053
22069
  }
22054
22070
  ),
22055
- editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx28(Box22, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
22071
+ editingField && editingValue?.mode === "add" && activeField === "allowedComponents" && pickerCandidates !== null && /* @__PURE__ */ jsx29(Box23, { paddingLeft: 2, flexDirection: "column", children: pickerCandidates.length === 0 ? /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "(no valid components to add \u2014 all remaining candidates would create cycles)" }) : (() => {
22056
22072
  const filtered = valueText.length === 0 ? pickerCandidates : pickerCandidates.filter((n) => n.toLowerCase().includes(valueText.toLowerCase()));
22057
22073
  if (filtered.length === 0) {
22058
- return /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
22074
+ return /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "(no candidates match \u2014 Enter to add as free text)" });
22059
22075
  }
22060
22076
  const cursor = pickerCursor % filtered.length;
22061
22077
  const MAX_VISIBLE = 5;
22062
22078
  const start = Math.max(0, Math.min(filtered.length - MAX_VISIBLE, cursor - 2));
22063
22079
  const slice = filtered.slice(start, start + MAX_VISIBLE);
22064
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", children: [
22065
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
22080
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", children: [
22081
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: " candidates (\u2191\u2193 cycle, Enter to add):" }),
22066
22082
  slice.map((name, i) => {
22067
22083
  const absIdx = start + i;
22068
22084
  const isCursor = absIdx === cursor;
22069
- return /* @__PURE__ */ jsx28(Text24, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
22085
+ return /* @__PURE__ */ jsx29(Text25, { color: isCursor ? PALETTE.accent : PALETTE.muted, children: isCursor ? ` ${figures5.pointer} ${name}` : ` ${name}` }, name);
22070
22086
  })
22071
22087
  ] });
22072
22088
  })() })
@@ -22895,18 +22911,18 @@ function FieldEditor({
22895
22911
  });
22896
22912
  const innerWidth = Math.max(1, width - 2);
22897
22913
  if (parseErr) {
22898
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
22899
- /* @__PURE__ */ jsx28(Text24, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
22900
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.error, children: parseErr }),
22901
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
22914
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.error, children: [
22915
+ /* @__PURE__ */ jsx29(Text25, { bold: true, color: PALETTE.error, children: "FIELD EDITOR \u2014 parse error" }),
22916
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.error, children: parseErr }),
22917
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "Cannot display structured editor. Fix the JSON first." })
22902
22918
  ] });
22903
22919
  }
22904
22920
  if (props.length === 0 && slots.length === 0) {
22905
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
22906
- /* @__PURE__ */ jsx28(Text24, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
22907
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
22908
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
22909
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
22921
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", width, borderStyle: "single", borderColor: PALETTE.warning, children: [
22922
+ /* @__PURE__ */ jsx29(Text25, { bold: true, color: PALETTE.warning, children: "FIELD EDITOR \u2014 no fields" }),
22923
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.warning, children: "\u26A0 No properties classified for this component. The LLM didn't find anything to classify." }),
22924
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "You can add fields manually below or reject this component." }),
22925
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "Enter to save \xB7 Esc to discard" })
22910
22926
  ] });
22911
22927
  }
22912
22928
  const hasEmptyProperties = props.length === 0 && slots.length === 0;
@@ -23035,12 +23051,12 @@ function FieldEditor({
23035
23051
  const renderRow = (row, index) => {
23036
23052
  const key = rowKey(row, index);
23037
23053
  if (row.kind === "header") {
23038
- return /* @__PURE__ */ jsx28(Box22, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx28(Text24, { bold: true, color: PALETTE.success, children: row.label }) }, key);
23054
+ return /* @__PURE__ */ jsx29(Box23, { flexDirection: "column", paddingTop: 1, children: /* @__PURE__ */ jsx29(Text25, { bold: true, color: PALETTE.success, children: row.label }) }, key);
23039
23055
  }
23040
23056
  if (row.kind === "component-description") {
23041
23057
  const isSelected2 = inComponentDesc && active;
23042
23058
  const isEditing = isSelected2 && focusLevel === "field" && editingField && activeField === "description";
23043
- return /* @__PURE__ */ jsx28(
23059
+ return /* @__PURE__ */ jsx29(
23044
23060
  DescriptionField,
23045
23061
  {
23046
23062
  value: editorState.componentDescription,
@@ -23071,7 +23087,7 @@ function FieldEditor({
23071
23087
  valueText,
23072
23088
  innerWidth
23073
23089
  );
23074
- return /* @__PURE__ */ jsx28(
23090
+ return /* @__PURE__ */ jsx29(
23075
23091
  PropRow,
23076
23092
  {
23077
23093
  prop: p,
@@ -23098,7 +23114,7 @@ function FieldEditor({
23098
23114
  valueText,
23099
23115
  innerWidth
23100
23116
  );
23101
- return /* @__PURE__ */ jsx28(
23117
+ return /* @__PURE__ */ jsx29(
23102
23118
  SlotRow,
23103
23119
  {
23104
23120
  slot: s,
@@ -23110,7 +23126,7 @@ function FieldEditor({
23110
23126
  key
23111
23127
  );
23112
23128
  };
23113
- return /* @__PURE__ */ jsxs23(
23129
+ return /* @__PURE__ */ jsxs24(
23114
23130
  FixedPanel,
23115
23131
  {
23116
23132
  width,
@@ -23119,9 +23135,9 @@ function FieldEditor({
23119
23135
  borderStyle: "single",
23120
23136
  borderColor: hasEmptyProperties ? PALETTE.warning : active ? PALETTE.accent : PALETTE.border,
23121
23137
  children: [
23122
- hasEmptyProperties && /* @__PURE__ */ jsx28(Text24, { 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." }),
23138
+ hasEmptyProperties && /* @__PURE__ */ jsx29(Text25, { 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." }),
23123
23139
  header,
23124
- /* @__PURE__ */ jsx28(Box22, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx28(
23140
+ /* @__PURE__ */ jsx29(Box23, { flexDirection: "column", width: innerWidth, flexShrink: 0, children: focusLevel === "field" && !inComponentDesc && currentProp ? /* @__PURE__ */ jsx29(
23125
23141
  PropRow,
23126
23142
  {
23127
23143
  prop: currentProp,
@@ -23137,7 +23153,7 @@ function FieldEditor({
23137
23153
  rationale: metadata?.props?.[currentProp.name]?.rationale ?? null,
23138
23154
  showRationale: showInlineRationales
23139
23155
  }
23140
- ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx28(
23156
+ ) : focusLevel === "field" && inSlots && currentSlot ? /* @__PURE__ */ jsx29(
23141
23157
  SlotRow,
23142
23158
  {
23143
23159
  slot: currentSlot,
@@ -23156,8 +23172,8 @@ function FieldEditor({
23156
23172
  ) : visibleRowSlice.map((row, index) => {
23157
23173
  const absoluteIndex = scrollStart + index;
23158
23174
  const key = rowKey(row, absoluteIndex);
23159
- return /* @__PURE__ */ jsx28(
23160
- Box22,
23175
+ return /* @__PURE__ */ jsx29(
23176
+ Box23,
23161
23177
  {
23162
23178
  ref: (node) => {
23163
23179
  if (node) rowMeasureRefs.current.set(key, node);
@@ -23170,7 +23186,7 @@ function FieldEditor({
23170
23186
  `visible-${key}`
23171
23187
  );
23172
23188
  }) }),
23173
- categoryBelow && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
23189
+ categoryBelow && /* @__PURE__ */ jsx29(Text25, { color: PALETTE.success, bold: true, children: `(${categoryBelow} below)` }),
23174
23190
  sourceOpen && !onToggleSourceExternal && (() => {
23175
23191
  const propMeta = !inSlots && !inComponentDesc && currentProp ? metadata?.props?.[currentProp.name] : void 0;
23176
23192
  const start = propMeta?.sourceStartLine ?? null;
@@ -23179,59 +23195,59 @@ function FieldEditor({
23179
23195
  const src = metadata?.componentSource ?? null;
23180
23196
  const headerPath = path5 ?? "<unknown source path>";
23181
23197
  if (!start || !end2 || !src) {
23182
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23183
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
23184
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
23185
- /* @__PURE__ */ jsx28(Text24, { children: "[s] close" })
23198
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23199
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, bold: true, children: `source: ${headerPath}` }),
23200
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "(no source location captured for this prop)" }),
23201
+ /* @__PURE__ */ jsx29(Text25, { children: "[s] close" })
23186
23202
  ] });
23187
23203
  }
23188
23204
  const lines = src.split("\n").slice(Math.max(0, start - 1), end2);
23189
- return /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23190
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
23191
- lines.map((ln, i) => /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
23192
- /* @__PURE__ */ jsx28(Text24, { children: "[s] close \xB7 [Esc] close" })
23205
+ return /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [
23206
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, bold: true, children: `${headerPath}: lines ${start}\u2013${end2}` }),
23207
+ lines.map((ln, i) => /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: ln }, `source-line-${i}`)),
23208
+ /* @__PURE__ */ jsx29(Text25, { children: "[s] close \xB7 [Esc] close" })
23193
23209
  ] });
23194
23210
  })(),
23195
- showHelp && /* @__PURE__ */ jsxs23(Box22, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
23196
- /* @__PURE__ */ jsx28(Text24, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
23197
- /* @__PURE__ */ jsx28(Text24, { children: " " }),
23198
- /* @__PURE__ */ jsx28(Text24, { bold: true, children: "Row navigation" }),
23199
- /* @__PURE__ */ jsx28(Text24, { children: " \u2191/\u2193 move between rows" }),
23200
- /* @__PURE__ */ jsx28(Text24, { children: " Enter edit fields on the current row" }),
23201
- /* @__PURE__ */ jsx28(Text24, { children: " Esc exit the panel" }),
23202
- /* @__PURE__ */ jsx28(Text24, { children: " " }),
23203
- /* @__PURE__ */ jsx28(Text24, { bold: true, children: "Field editing" }),
23204
- /* @__PURE__ */ jsx28(Text24, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
23205
- /* @__PURE__ */ jsx28(Text24, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
23206
- /* @__PURE__ */ jsx28(Text24, { children: " Space/Enter toggle required" }),
23207
- /* @__PURE__ */ jsx28(Text24, { children: " Type edit description / string default" }),
23208
- /* @__PURE__ */ jsx28(Text24, { children: " Esc exit field-edit back to the row" }),
23209
- /* @__PURE__ */ jsx28(Text24, { children: " " }),
23210
- /* @__PURE__ */ jsx28(Text24, { bold: true, children: "Values / allowedComponents" }),
23211
- /* @__PURE__ */ jsx28(Text24, { children: " a / e / r add \xB7 edit \xB7 remove" }),
23212
- /* @__PURE__ */ jsx28(Text24, { children: " \u2191\u2193 navigate the list" }),
23213
- /* @__PURE__ */ jsx28(Text24, { children: " K / J reorder up \xB7 down" }),
23214
- /* @__PURE__ */ jsx28(Text24, { children: " " }),
23215
- /* @__PURE__ */ jsx28(Text24, { bold: true, children: "Panels" }),
23216
- /* @__PURE__ */ jsx28(Text24, { children: " s toggle source-view for the current prop" }),
23217
- /* @__PURE__ */ jsx28(Text24, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
23218
- /* @__PURE__ */ jsx28(Text24, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
23219
- /* @__PURE__ */ jsx28(Text24, { children: " ? toggle this overlay" }),
23220
- /* @__PURE__ */ jsx28(Text24, { children: " " }),
23221
- /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: "press ? or Esc to close" })
23211
+ showHelp && /* @__PURE__ */ jsxs24(Box23, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.accent, paddingX: 1, children: [
23212
+ /* @__PURE__ */ jsx29(Text25, { bold: true, color: PALETTE.accent, children: "Keybindings" }),
23213
+ /* @__PURE__ */ jsx29(Text25, { children: " " }),
23214
+ /* @__PURE__ */ jsx29(Text25, { bold: true, children: "Row navigation" }),
23215
+ /* @__PURE__ */ jsx29(Text25, { children: " \u2191/\u2193 move between rows" }),
23216
+ /* @__PURE__ */ jsx29(Text25, { children: " Enter edit fields on the current row" }),
23217
+ /* @__PURE__ */ jsx29(Text25, { children: " Esc exit the panel" }),
23218
+ /* @__PURE__ */ jsx29(Text25, { children: " " }),
23219
+ /* @__PURE__ */ jsx29(Text25, { bold: true, children: "Field editing" }),
23220
+ /* @__PURE__ */ jsx29(Text25, { children: " \u2191/\u2193/\u2190\u2192 cycle through fields" }),
23221
+ /* @__PURE__ */ jsx29(Text25, { children: " \u2190/\u2192 cycle picker values \xB7 move cursor in text inputs" }),
23222
+ /* @__PURE__ */ jsx29(Text25, { children: " Space/Enter toggle required" }),
23223
+ /* @__PURE__ */ jsx29(Text25, { children: " Type edit description / string default" }),
23224
+ /* @__PURE__ */ jsx29(Text25, { children: " Esc exit field-edit back to the row" }),
23225
+ /* @__PURE__ */ jsx29(Text25, { children: " " }),
23226
+ /* @__PURE__ */ jsx29(Text25, { bold: true, children: "Values / allowedComponents" }),
23227
+ /* @__PURE__ */ jsx29(Text25, { children: " a / e / r add \xB7 edit \xB7 remove" }),
23228
+ /* @__PURE__ */ jsx29(Text25, { children: " \u2191\u2193 navigate the list" }),
23229
+ /* @__PURE__ */ jsx29(Text25, { children: " K / J reorder up \xB7 down" }),
23230
+ /* @__PURE__ */ jsx29(Text25, { children: " " }),
23231
+ /* @__PURE__ */ jsx29(Text25, { bold: true, children: "Panels" }),
23232
+ /* @__PURE__ */ jsx29(Text25, { children: " s toggle source-view for the current prop" }),
23233
+ /* @__PURE__ */ jsx29(Text25, { children: " " + propRationaleKey.padEnd(16) + " toggle prop rationale panel" }),
23234
+ /* @__PURE__ */ jsx29(Text25, { children: " " + componentRationaleKey.padEnd(16) + " toggle component rationale panel" }),
23235
+ /* @__PURE__ */ jsx29(Text25, { children: " ? toggle this overlay" }),
23236
+ /* @__PURE__ */ jsx29(Text25, { children: " " }),
23237
+ /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: "press ? or Esc to close" })
23222
23238
  ] }),
23223
- validationError && /* @__PURE__ */ jsx28(Text24, { color: PALETTE.error, children: "\u2717 " + validationError }),
23224
- /* @__PURE__ */ jsx28(Box22, { paddingTop: 1, children: /* @__PURE__ */ jsx28(Text24, { color: PALETTE.muted, children: modeLabel }) })
23239
+ validationError && /* @__PURE__ */ jsx29(Text25, { color: PALETTE.error, children: "\u2717 " + validationError }),
23240
+ /* @__PURE__ */ jsx29(Box23, { paddingTop: 1, children: /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: modeLabel }) })
23225
23241
  ]
23226
23242
  }
23227
23243
  );
23228
23244
  }
23229
23245
 
23230
23246
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
23231
- import { Text as Text30 } from "ink";
23247
+ import { Text as Text31 } from "ink";
23232
23248
 
23233
23249
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
23234
- import { Box as Box24, Text as Text26 } from "ink";
23250
+ import { Box as Box25, Text as Text27 } from "ink";
23235
23251
 
23236
23252
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/wrap-text.ts
23237
23253
  function appendLongWordChunks(word, width, lines) {
@@ -23266,27 +23282,27 @@ function wrapText(text, innerWidth) {
23266
23282
  }
23267
23283
 
23268
23284
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationaleLine.tsx
23269
- import { Box as Box23, Text as Text25 } from "ink";
23270
- import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
23285
+ import { Box as Box24, Text as Text26 } from "ink";
23286
+ import { jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
23271
23287
  function RationaleLine({ line, active }) {
23272
23288
  if (line.kind === "blank") {
23273
- return /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { children: " " }) });
23289
+ return /* @__PURE__ */ jsx30(Box24, { children: /* @__PURE__ */ jsx30(Text26, { children: " " }) });
23274
23290
  }
23275
23291
  if (line.kind === "heading") {
23276
- return /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23292
+ return /* @__PURE__ */ jsx30(Box24, { children: /* @__PURE__ */ jsx30(Text26, { bold: true, color: active ? PALETTE.accent : PALETTE.muted, children: line.text }) });
23277
23293
  }
23278
23294
  if (line.kind === "label") {
23279
- return /* @__PURE__ */ jsxs24(Box23, { children: [
23280
- line.prefix && /* @__PURE__ */ jsx29(Text25, { children: line.prefix }),
23281
- /* @__PURE__ */ jsx29(Text25, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
23282
- line.suffix && /* @__PURE__ */ jsx29(Text25, { color: PALETTE.muted, children: line.suffix })
23295
+ return /* @__PURE__ */ jsxs25(Box24, { children: [
23296
+ line.prefix && /* @__PURE__ */ jsx30(Text26, { children: line.prefix }),
23297
+ /* @__PURE__ */ jsx30(Text26, { bold: true, color: active ? line.color : PALETTE.muted, children: line.text }),
23298
+ line.suffix && /* @__PURE__ */ jsx30(Text26, { color: PALETTE.muted, children: line.suffix })
23283
23299
  ] });
23284
23300
  }
23285
- return /* @__PURE__ */ jsx29(Box23, { children: /* @__PURE__ */ jsx29(Text25, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23301
+ return /* @__PURE__ */ jsx30(Box24, { children: /* @__PURE__ */ jsx30(Text26, { color: !active || line.dim ? PALETTE.muted : void 0, children: line.text }) });
23286
23302
  }
23287
23303
 
23288
23304
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ComponentRationalePanel.tsx
23289
- import { jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
23305
+ import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
23290
23306
  var PLACEHOLDER = "(no rationale captured)";
23291
23307
  function renderComponentRationaleLines(data, innerWidth) {
23292
23308
  const out = [];
@@ -23354,8 +23370,8 @@ function ComponentRationalePanel({
23354
23370
  const overflowed = totalLines > contentHeight;
23355
23371
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23356
23372
  const visibleEnd = Math.min(totalLines, scrollOffset + contentHeight);
23357
- return /* @__PURE__ */ jsxs25(
23358
- Box24,
23373
+ return /* @__PURE__ */ jsxs26(
23374
+ Box25,
23359
23375
  {
23360
23376
  flexDirection: "column",
23361
23377
  width,
@@ -23363,27 +23379,27 @@ function ComponentRationalePanel({
23363
23379
  borderStyle: "single",
23364
23380
  borderColor: active ? PALETTE.text : void 0,
23365
23381
  children: [
23366
- /* @__PURE__ */ jsx30(Box24, { children: /* @__PURE__ */ jsx30(Text26, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23367
- visible.map((line, i) => /* @__PURE__ */ jsx30(RationaleLine, { line, active }, i)),
23368
- /* @__PURE__ */ jsx30(Box24, { children: overflowed ? /* @__PURE__ */ jsx30(Text26, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx30(Text26, { children: "[I/Esc] close" }) })
23382
+ /* @__PURE__ */ jsx31(Box25, { children: /* @__PURE__ */ jsx31(Text27, { bold: true, color: active ? void 0 : PALETTE.muted, children: `Component rationale: ${data.name}` }) }),
23383
+ visible.map((line, i) => /* @__PURE__ */ jsx31(RationaleLine, { line, active }, i)),
23384
+ /* @__PURE__ */ jsx31(Box25, { children: overflowed ? /* @__PURE__ */ jsx31(Text27, { children: `${visibleStart}-${visibleEnd}/${totalLines} [\u2191\u2193] scroll [I/Esc] close` }) : /* @__PURE__ */ jsx31(Text27, { children: "[I/Esc] close" }) })
23369
23385
  ]
23370
23386
  }
23371
23387
  );
23372
23388
  }
23373
23389
 
23374
23390
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
23375
- import { Box as Box26 } from "ink";
23391
+ import { Box as Box27 } from "ink";
23376
23392
 
23377
23393
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/HighlightedLine.tsx
23378
- import { Text as Text27 } from "ink";
23379
- import { Fragment as Fragment6, jsx as jsx31 } from "react/jsx-runtime";
23394
+ import { Text as Text28 } from "ink";
23395
+ import { Fragment as Fragment7, jsx as jsx32 } from "react/jsx-runtime";
23380
23396
  function HighlightedLine({ parts }) {
23381
- return /* @__PURE__ */ jsx31(Fragment6, { children: parts.map((part, i) => /* @__PURE__ */ jsx31(Text27, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
23397
+ return /* @__PURE__ */ jsx32(Fragment7, { children: parts.map((part, i) => /* @__PURE__ */ jsx32(Text28, { color: part.dim ? PALETTE.muted : part.color, children: part.text }, i)) });
23382
23398
  }
23383
23399
 
23384
23400
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ScrollablePanel.tsx
23385
- import { Box as Box25, Text as Text28 } from "ink";
23386
- import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
23401
+ import { Box as Box26, Text as Text29 } from "ink";
23402
+ import { Fragment as Fragment8, jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
23387
23403
  function ScrollablePanel({
23388
23404
  title,
23389
23405
  width,
@@ -23396,12 +23412,12 @@ function ScrollablePanel({
23396
23412
  children
23397
23413
  }) {
23398
23414
  const overflowed = totalLines > height;
23399
- return /* @__PURE__ */ jsxs26(Box25, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
23400
- /* @__PURE__ */ jsxs26(Box25, { children: [
23401
- /* @__PURE__ */ jsx32(Text28, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
23402
- overflowed && /* @__PURE__ */ jsxs26(Fragment7, { children: [
23403
- /* @__PURE__ */ jsx32(Box25, { flexGrow: 1 }),
23404
- /* @__PURE__ */ jsx32(Text28, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
23415
+ return /* @__PURE__ */ jsxs27(Box26, { flexDirection: "column", width, height: height + 2, borderStyle: "single", borderColor, children: [
23416
+ /* @__PURE__ */ jsxs27(Box26, { children: [
23417
+ /* @__PURE__ */ jsx33(Text29, { bold: true, color: active ? void 0 : PALETTE.muted, children: title }),
23418
+ overflowed && /* @__PURE__ */ jsxs27(Fragment8, { children: [
23419
+ /* @__PURE__ */ jsx33(Box26, { flexGrow: 1 }),
23420
+ /* @__PURE__ */ jsx33(Text29, { color: active ? void 0 : PALETTE.muted, children: `\u2195 ${visibleStart}-${visibleEnd}/${totalLines}` })
23405
23421
  ] })
23406
23422
  ] }),
23407
23423
  children
@@ -23409,7 +23425,7 @@ function ScrollablePanel({
23409
23425
  }
23410
23426
 
23411
23427
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/JsonPanel.tsx
23412
- import { jsx as jsx33 } from "react/jsx-runtime";
23428
+ import { jsx as jsx34 } from "react/jsx-runtime";
23413
23429
  function highlightJson(line) {
23414
23430
  const parts = [];
23415
23431
  let remaining = line;
@@ -23447,7 +23463,7 @@ function highlightJson(line) {
23447
23463
  parts.push({ text: remaining[0] });
23448
23464
  remaining = remaining.slice(1);
23449
23465
  }
23450
- return /* @__PURE__ */ jsx33(HighlightedLine, { parts });
23466
+ return /* @__PURE__ */ jsx34(HighlightedLine, { parts });
23451
23467
  }
23452
23468
  function truncateLine(line, maxWidth) {
23453
23469
  if (line.length <= maxWidth) return line;
@@ -23460,7 +23476,7 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
23460
23476
  const totalLines = allLines.length;
23461
23477
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23462
23478
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
23463
- return /* @__PURE__ */ jsx33(
23479
+ return /* @__PURE__ */ jsx34(
23464
23480
  ScrollablePanel,
23465
23481
  {
23466
23482
  title: label,
@@ -23473,14 +23489,14 @@ function JsonPanel({ label, value, scrollOffset, width, height, active }) {
23473
23489
  borderColor: active ? "white" : void 0,
23474
23490
  children: visibleLines.map((line, i) => {
23475
23491
  const truncated = truncateLine(line, innerWidth);
23476
- return /* @__PURE__ */ jsx33(Box26, { children: highlightJson(truncated) }, i);
23492
+ return /* @__PURE__ */ jsx34(Box27, { children: highlightJson(truncated) }, i);
23477
23493
  })
23478
23494
  }
23479
23495
  );
23480
23496
  }
23481
23497
 
23482
23498
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/RationalePanel.tsx
23483
- import { jsx as jsx34 } from "react/jsx-runtime";
23499
+ import { jsx as jsx35 } from "react/jsx-runtime";
23484
23500
  function renderRationaleLines(rows, innerWidth) {
23485
23501
  const out = [];
23486
23502
  rows.forEach((row, idx) => {
@@ -23513,7 +23529,7 @@ function RationalePanel({
23513
23529
  const visible = allLines.slice(scrollOffset, scrollOffset + height);
23514
23530
  const visibleStart = totalLines === 0 ? 0 : scrollOffset + 1;
23515
23531
  const visibleEnd = Math.min(totalLines, scrollOffset + height);
23516
- return /* @__PURE__ */ jsx34(
23532
+ return /* @__PURE__ */ jsx35(
23517
23533
  ScrollablePanel,
23518
23534
  {
23519
23535
  title: `RATIONALE \u2014 ${componentName}`,
@@ -23524,15 +23540,15 @@ function RationalePanel({
23524
23540
  visibleStart,
23525
23541
  visibleEnd,
23526
23542
  borderColor: active ? PALETTE.text : void 0,
23527
- children: visible.map((line, i) => /* @__PURE__ */ jsx34(RationaleLine, { line, active }, i))
23543
+ children: visible.map((line, i) => /* @__PURE__ */ jsx35(RationaleLine, { line, active }, i))
23528
23544
  }
23529
23545
  );
23530
23546
  }
23531
23547
 
23532
23548
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/TokenReviewPanel.tsx
23533
23549
  import figures6 from "figures";
23534
- import { Box as Box27, Text as Text29 } from "ink";
23535
- import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
23550
+ import { Box as Box28, Text as Text30 } from "ink";
23551
+ import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
23536
23552
  function TokenReviewPanel({
23537
23553
  componentName,
23538
23554
  suggestions,
@@ -23551,8 +23567,8 @@ function TokenReviewPanel({
23551
23567
  const scrollStart = Math.max(0, Math.min(editCursor - Math.floor(visibleCount / 2), maxStart));
23552
23568
  const visiblePaths = current.paths.slice(scrollStart, scrollStart + visibleCount);
23553
23569
  const rangeLabel = current.paths.length === 0 ? "no compatible tokens" : `${scrollStart + 1}-${scrollStart + visiblePaths.length} of ${current.paths.length}`;
23554
- return /* @__PURE__ */ jsxs27(
23555
- Box27,
23570
+ return /* @__PURE__ */ jsxs28(
23571
+ Box28,
23556
23572
  {
23557
23573
  flexDirection: "column",
23558
23574
  width,
@@ -23560,16 +23576,16 @@ function TokenReviewPanel({
23560
23576
  borderStyle: "single",
23561
23577
  borderColor: active ? PALETTE.text : void 0,
23562
23578
  children: [
23563
- /* @__PURE__ */ jsx35(Text29, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
23564
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
23565
- /* @__PURE__ */ jsx35(Text29, { children: " " }),
23566
- current.paths.length === 0 && /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
23579
+ /* @__PURE__ */ jsx36(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, wrap: "truncate", children: `TOKEN REVIEW \u2014 ${componentName} \xB7 ${current.propName} (edit allowed)` }),
23580
+ /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, wrap: "truncate", children: `select which tokens are allowed (${rangeLabel})` }),
23581
+ /* @__PURE__ */ jsx36(Text30, { children: " " }),
23582
+ current.paths.length === 0 && /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, children: "(no compatible tokens found for this token kind)" }),
23567
23583
  visiblePaths.map((path5, i) => {
23568
23584
  const pathIndex = scrollStart + i;
23569
23585
  const checked = editSelection.has(path5);
23570
23586
  const focused = pathIndex === editCursor;
23571
- return /* @__PURE__ */ jsx35(Box27, { children: /* @__PURE__ */ jsx35(
23572
- Text29,
23587
+ return /* @__PURE__ */ jsx36(Box28, { children: /* @__PURE__ */ jsx36(
23588
+ Text30,
23573
23589
  {
23574
23590
  color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted,
23575
23591
  bold: focused,
@@ -23578,15 +23594,15 @@ function TokenReviewPanel({
23578
23594
  }
23579
23595
  ) }, path5);
23580
23596
  }),
23581
- /* @__PURE__ */ jsx35(Text29, { children: " " }),
23582
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
23583
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
23597
+ /* @__PURE__ */ jsx36(Text30, { children: " " }),
23598
+ /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, wrap: "truncate", children: "[\u2191/\u2193] move [Space] toggle" }),
23599
+ /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, wrap: "truncate", children: "[Ctrl+S] save [Esc] cancel" })
23584
23600
  ]
23585
23601
  }
23586
23602
  );
23587
23603
  }
23588
- return /* @__PURE__ */ jsxs27(
23589
- Box27,
23604
+ return /* @__PURE__ */ jsxs28(
23605
+ Box28,
23590
23606
  {
23591
23607
  flexDirection: "column",
23592
23608
  width,
@@ -23594,25 +23610,25 @@ function TokenReviewPanel({
23594
23610
  borderStyle: "single",
23595
23611
  borderColor: active ? PALETTE.text : void 0,
23596
23612
  children: [
23597
- /* @__PURE__ */ jsx35(Text29, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
23598
- suggestions.length === 0 && /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
23613
+ /* @__PURE__ */ jsx36(Text30, { bold: true, color: active ? void 0 : PALETTE.muted, children: `TOKEN REVIEW \u2014 ${componentName}` }),
23614
+ suggestions.length === 0 && /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, children: "(no token suggestions for this component)" }),
23599
23615
  suggestions.map((s, i) => {
23600
23616
  const focused = i === selectedRow;
23601
- return /* @__PURE__ */ jsxs27(Box27, { flexDirection: "column", children: [
23602
- /* @__PURE__ */ jsx35(Box27, { children: /* @__PURE__ */ jsx35(Text29, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
23603
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
23604
- /* @__PURE__ */ jsx35(Text29, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
23617
+ return /* @__PURE__ */ jsxs28(Box28, { flexDirection: "column", children: [
23618
+ /* @__PURE__ */ jsx36(Box28, { children: /* @__PURE__ */ jsx36(Text30, { color: focused ? PALETTE.accent : active ? void 0 : PALETTE.muted, bold: focused, children: `${focused ? figures6.pointer : " "} ${s.propName}` }) }),
23619
+ /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, children: ` suggested: ${s.suggested.join(", ")}` }),
23620
+ /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, children: ` allowed: ${s.allowed.join(", ")}` })
23605
23621
  ] }, s.propName);
23606
23622
  }),
23607
- /* @__PURE__ */ jsx35(Text29, { children: " " }),
23608
- /* @__PURE__ */ jsx35(Text29, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
23623
+ /* @__PURE__ */ jsx36(Text30, { children: " " }),
23624
+ /* @__PURE__ */ jsx36(Text30, { children: "[\u2191/\u2193] move [Enter] edit allowed [Esc] close" })
23609
23625
  ]
23610
23626
  }
23611
23627
  );
23612
23628
  }
23613
23629
 
23614
23630
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/review-details-panel.tsx
23615
- import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
23631
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
23616
23632
  function ReviewDetailsPanel({
23617
23633
  selectedKey,
23618
23634
  panelOpen,
@@ -23647,7 +23663,7 @@ function ReviewDetailsPanel({
23647
23663
  rationale: s.rationale ?? ""
23648
23664
  }))
23649
23665
  ];
23650
- return /* @__PURE__ */ jsx36(
23666
+ return /* @__PURE__ */ jsx37(
23651
23667
  RationalePanel,
23652
23668
  {
23653
23669
  componentName: componentRationale?.name ?? selectedKey,
@@ -23660,7 +23676,7 @@ function ReviewDetailsPanel({
23660
23676
  );
23661
23677
  }
23662
23678
  if (panelOpen === "component-rationale") {
23663
- return /* @__PURE__ */ jsx36(
23679
+ return /* @__PURE__ */ jsx37(
23664
23680
  ComponentRationalePanel,
23665
23681
  {
23666
23682
  data: componentRationale ?? {
@@ -23685,14 +23701,14 @@ function ReviewDetailsPanel({
23685
23701
  const headerPath = path5 ?? "<unknown source path>";
23686
23702
  const sourceLineCount = Math.max(1, height - 4);
23687
23703
  const lines = source ? source.split("\n").slice(panelScrollOffset, panelScrollOffset + sourceLineCount) : [];
23688
- return /* @__PURE__ */ jsxs28(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
23689
- /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
23690
- source ? lines.map((line, index) => /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, children: "(no source captured)" }),
23691
- /* @__PURE__ */ jsx36(Text30, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
23704
+ return /* @__PURE__ */ jsxs29(FixedPanel, { width, height, borderStyle: "single", borderColor: sourceBorderColor, paddingLeft: 1, children: [
23705
+ /* @__PURE__ */ jsx37(Text31, { color: PALETTE.muted, bold: true, wrap: "truncate-end", children: `source: ${headerPath}` }),
23706
+ source ? lines.map((line, index) => /* @__PURE__ */ jsx37(Text31, { color: PALETTE.muted, wrap: "truncate-end", children: line }, `source-line-${index}`)) : /* @__PURE__ */ jsx37(Text31, { color: PALETTE.muted, children: "(no source captured)" }),
23707
+ /* @__PURE__ */ jsx37(Text31, { color: PALETTE.muted, wrap: "truncate-end", children: "[s/Esc] close" })
23692
23708
  ] });
23693
23709
  }
23694
23710
  if (panelOpen === "token-review") {
23695
- return /* @__PURE__ */ jsx36(
23711
+ return /* @__PURE__ */ jsx37(
23696
23712
  TokenReviewPanel,
23697
23713
  {
23698
23714
  componentName: selectedKey,
@@ -23708,7 +23724,7 @@ function ReviewDetailsPanel({
23708
23724
  );
23709
23725
  }
23710
23726
  if (showJson) {
23711
- return /* @__PURE__ */ jsx36(
23727
+ return /* @__PURE__ */ jsx37(
23712
23728
  JsonPanel,
23713
23729
  {
23714
23730
  label: "GENERATED DEFINITION (read-only)",
@@ -23720,11 +23736,11 @@ function ReviewDetailsPanel({
23720
23736
  }
23721
23737
  );
23722
23738
  }
23723
- return /* @__PURE__ */ jsx36(Fragment8, { children: editor });
23739
+ return /* @__PURE__ */ jsx37(Fragment9, { children: editor });
23724
23740
  }
23725
23741
 
23726
23742
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDetailsEditor.tsx
23727
- import { jsx as jsx37 } from "react/jsx-runtime";
23743
+ import { jsx as jsx38 } from "react/jsx-runtime";
23728
23744
  import { createElement } from "react";
23729
23745
  function toFieldEditorMetadata(reviewMetadata) {
23730
23746
  if (!reviewMetadata) return void 0;
@@ -23758,7 +23774,7 @@ function ReviewDetailsEditor({
23758
23774
  jsonScrollOffset,
23759
23775
  currentTokenSuggestions
23760
23776
  } = reviewEditor;
23761
- return /* @__PURE__ */ jsx37(
23777
+ return /* @__PURE__ */ jsx38(
23762
23778
  ReviewDetailsPanel,
23763
23779
  {
23764
23780
  selectedKey,
@@ -23798,7 +23814,7 @@ function ReviewDetailsEditor({
23798
23814
  }
23799
23815
 
23800
23816
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewComponentPanel.tsx
23801
- import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
23817
+ import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
23802
23818
  function buildReviewFieldEditor(reviewEditor, selectedJson, onExit, overrides = {}) {
23803
23819
  return {
23804
23820
  value: reviewEditor.draftValue || selectedJson,
@@ -23838,17 +23854,17 @@ function ReviewEmptyComponentsWarning({
23838
23854
  hidden
23839
23855
  }) {
23840
23856
  if (hidden || count === 0) return null;
23841
- return /* @__PURE__ */ jsx38(Text31, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
23857
+ return /* @__PURE__ */ jsx39(Text32, { color: PALETTE.warning, children: `\u26A0 ${count} component${count === 1 ? "" : "s"} had no classifiable props \u2014 review with care` });
23842
23858
  }
23843
23859
  function ReviewNoSelection() {
23844
- return /* @__PURE__ */ jsx38(Box28, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, children: "No component selected" }) });
23860
+ return /* @__PURE__ */ jsx39(Box29, { flexGrow: 1, paddingLeft: 1, flexDirection: "column", children: /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "No component selected" }) });
23845
23861
  }
23846
23862
  function ReviewFinalizeError({
23847
23863
  message,
23848
23864
  hidden
23849
23865
  }) {
23850
23866
  if (hidden || !message) return null;
23851
- return /* @__PURE__ */ jsx38(Text31, { color: PALETTE.error, children: `\u26A0 ${message}` });
23867
+ return /* @__PURE__ */ jsx39(Text32, { color: PALETTE.error, children: `\u26A0 ${message}` });
23852
23868
  }
23853
23869
  function ReviewPanelFooter({
23854
23870
  reviewEditor,
@@ -23857,10 +23873,10 @@ function ReviewPanelFooter({
23857
23873
  livePreview,
23858
23874
  livePreviewSpinner
23859
23875
  }) {
23860
- return /* @__PURE__ */ jsxs29(Fragment9, { children: [
23876
+ return /* @__PURE__ */ jsxs30(Fragment10, { children: [
23861
23877
  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" : ""),
23862
- livePreview.status === "running" && /* @__PURE__ */ jsx38(Text31, { children: ` ${livePreviewSpinner} live preview` }),
23863
- livePreview.disabled && /* @__PURE__ */ jsx38(Text31, { children: " \xB7 live preview disabled" })
23878
+ livePreview.status === "running" && /* @__PURE__ */ jsx39(Text32, { children: ` ${livePreviewSpinner} live preview` }),
23879
+ livePreview.disabled && /* @__PURE__ */ jsx39(Text32, { children: " \xB7 live preview disabled" })
23864
23880
  ] });
23865
23881
  }
23866
23882
  function ReviewComponentTitle({
@@ -23869,10 +23885,10 @@ function ReviewComponentTitle({
23869
23885
  slotCount,
23870
23886
  sidebarFocused
23871
23887
  }) {
23872
- return /* @__PURE__ */ jsxs29(Box28, { paddingLeft: 2, paddingBottom: 1, children: [
23873
- /* @__PURE__ */ jsx38(Text31, { bold: true, wrap: "truncate-end", children: selectedKey }),
23874
- /* @__PURE__ */ jsx38(Box28, { flexGrow: 1 }),
23875
- /* @__PURE__ */ jsxs29(Text31, { color: PALETTE.muted, wrap: "truncate-end", children: [
23888
+ return /* @__PURE__ */ jsxs30(Box29, { paddingLeft: 2, paddingBottom: 1, children: [
23889
+ /* @__PURE__ */ jsx39(Text32, { bold: true, wrap: "truncate-end", children: selectedKey }),
23890
+ /* @__PURE__ */ jsx39(Box29, { flexGrow: 1 }),
23891
+ /* @__PURE__ */ jsxs30(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: [
23876
23892
  propCount,
23877
23893
  " prop",
23878
23894
  propCount !== 1 ? "s" : "",
@@ -23903,8 +23919,8 @@ function ReviewComponentPanel({
23903
23919
  const slotCount = selectedEntry.$slots ? Object.keys(selectedEntry.$slots).length : 0;
23904
23920
  const contentHeight = Math.max(1, height - 2);
23905
23921
  const contentWidth = Math.max(1, width - 1);
23906
- return /* @__PURE__ */ jsx38(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs29(Box28, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
23907
- /* @__PURE__ */ jsx38(Box28, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx38(
23922
+ return /* @__PURE__ */ jsx39(FixedPanel, { width, height, borderStyle: void 0, paddingLeft: 1, children: /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", width: contentWidth, height, flexShrink: 0, overflowY: "hidden", children: [
23923
+ /* @__PURE__ */ jsx39(Box29, { width: contentWidth, height: contentHeight, flexShrink: 0, overflowY: "hidden", children: /* @__PURE__ */ jsx39(
23908
23924
  ReviewDetailsEditor,
23909
23925
  {
23910
23926
  selectedKey,
@@ -23917,7 +23933,7 @@ function ReviewComponentPanel({
23917
23933
  jsonValue,
23918
23934
  sidebarFocused,
23919
23935
  fieldEditor,
23920
- header: /* @__PURE__ */ jsx38(
23936
+ header: /* @__PURE__ */ jsx39(
23921
23937
  ReviewComponentTitle,
23922
23938
  {
23923
23939
  selectedKey,
@@ -23928,8 +23944,8 @@ function ReviewComponentPanel({
23928
23944
  )
23929
23945
  }
23930
23946
  ) }),
23931
- /* @__PURE__ */ jsx38(Box28, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx38(Text31, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
23932
- /* @__PURE__ */ jsx38(Box28, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx38(Text31, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx38(
23947
+ /* @__PURE__ */ jsx39(Box29, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx39(Text32, { color: saveError ? PALETTE.error : void 0, wrap: "truncate-end", children: saveError ? "\u2717 " + saveError : " " }) }),
23948
+ /* @__PURE__ */ jsx39(Box29, { width: contentWidth, height: 1, flexShrink: 0, children: /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, wrap: "truncate-end", children: /* @__PURE__ */ jsx39(
23933
23949
  ReviewPanelFooter,
23934
23950
  {
23935
23951
  reviewEditor,
@@ -23943,8 +23959,8 @@ function ReviewComponentPanel({
23943
23959
  }
23944
23960
 
23945
23961
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewStatus.tsx
23946
- import { Box as Box29, Text as Text32 } from "ink";
23947
- import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
23962
+ import { Box as Box30, Text as Text33 } from "ink";
23963
+ import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
23948
23964
  function countReviewStatuses(entries) {
23949
23965
  return entries.reduce(
23950
23966
  (counts, entry) => {
@@ -23957,13 +23973,13 @@ function countReviewStatuses(entries) {
23957
23973
  );
23958
23974
  }
23959
23975
  function ReviewLoadingState() {
23960
- return /* @__PURE__ */ jsx39(Box29, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx39(Text32, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
23976
+ return /* @__PURE__ */ jsx40(Box30, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "Loading generated definitions..." }) });
23961
23977
  }
23962
23978
  function ReviewLoadError({ message }) {
23963
- return /* @__PURE__ */ jsxs30(Box29, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
23964
- /* @__PURE__ */ jsx39(Text32, { color: PALETTE.error, children: message }),
23965
- /* @__PURE__ */ jsx39(Text32, { children: " " }),
23966
- /* @__PURE__ */ jsx39(Text32, { children: "[q / Enter / Esc] Quit" })
23979
+ return /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
23980
+ /* @__PURE__ */ jsx40(Text33, { color: PALETTE.error, children: message }),
23981
+ /* @__PURE__ */ jsx40(Text33, { children: " " }),
23982
+ /* @__PURE__ */ jsx40(Text33, { children: "[q / Enter / Esc] Quit" })
23967
23983
  ] });
23968
23984
  }
23969
23985
 
@@ -24163,8 +24179,8 @@ async function runLivePreview(opts) {
24163
24179
  }
24164
24180
 
24165
24181
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/FinalizeDialog.tsx
24166
- import { Box as Box30, Text as Text33 } from "ink";
24167
- import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
24182
+ import { Box as Box31, Text as Text34 } from "ink";
24183
+ import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
24168
24184
  var FINALIZE_REMOVED_WINDOW = 6;
24169
24185
  function FinalizeDialog({
24170
24186
  accepted,
@@ -24193,51 +24209,51 @@ function FinalizeDialog({
24193
24209
  const windowed = removed.slice(offset, offset + FINALIZE_REMOVED_WINDOW);
24194
24210
  const hasMoreBelow = offset + FINALIZE_REMOVED_WINDOW < removed.length;
24195
24211
  const hasMoreAbove = offset > 0;
24196
- return /* @__PURE__ */ jsx40(Box30, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
24197
- /* @__PURE__ */ jsx40(Text33, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
24198
- /* @__PURE__ */ jsx40(Text33, { children: " " }),
24199
- /* @__PURE__ */ jsxs31(Text33, { children: [
24200
- /* @__PURE__ */ jsxs31(Text33, { color: PALETTE.success, children: [
24212
+ return /* @__PURE__ */ jsx41(Box31, { width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", alignItems: "center", borderStyle: "round", padding: 1, width: 58, children: [
24213
+ /* @__PURE__ */ jsx41(Text34, { bold: true, children: "\u2500".repeat(22) + " Finalize " + "\u2500".repeat(22) }),
24214
+ /* @__PURE__ */ jsx41(Text34, { children: " " }),
24215
+ /* @__PURE__ */ jsxs32(Text34, { children: [
24216
+ /* @__PURE__ */ jsxs32(Text34, { color: PALETTE.success, children: [
24201
24217
  accepted,
24202
24218
  " accepted"
24203
24219
  ] }),
24204
- /* @__PURE__ */ jsx40(Text33, { children: " \xB7 " }),
24205
- /* @__PURE__ */ jsxs31(Text33, { color: PALETTE.error, children: [
24220
+ /* @__PURE__ */ jsx41(Text34, { children: " \xB7 " }),
24221
+ /* @__PURE__ */ jsxs32(Text34, { color: PALETTE.error, children: [
24206
24222
  rejected,
24207
24223
  " rejected"
24208
24224
  ] }),
24209
- /* @__PURE__ */ jsx40(Text33, { children: " \xB7 " }),
24210
- /* @__PURE__ */ jsxs31(Text33, { color: PALETTE.muted, children: [
24225
+ /* @__PURE__ */ jsx41(Text34, { children: " \xB7 " }),
24226
+ /* @__PURE__ */ jsxs32(Text34, { color: PALETTE.muted, children: [
24211
24227
  needsReview,
24212
24228
  " unresolved"
24213
24229
  ] })
24214
24230
  ] }),
24215
- /* @__PURE__ */ jsx40(Text33, { children: " " }),
24216
- noneAccepted && /* @__PURE__ */ jsxs31(Fragment10, { children: [
24217
- /* @__PURE__ */ jsx40(Text33, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
24218
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
24219
- /* @__PURE__ */ jsx40(Text33, { children: " " })
24231
+ /* @__PURE__ */ jsx41(Text34, { children: " " }),
24232
+ noneAccepted && /* @__PURE__ */ jsxs32(Fragment11, { children: [
24233
+ /* @__PURE__ */ jsx41(Text34, { bold: true, color: PALETTE.warning, children: "\u26A0 No components are accepted \u2014 nothing will be pushed." }),
24234
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.warning, children: "Accept at least one component ([a] a row, [A] accept all) to push." }),
24235
+ /* @__PURE__ */ jsx41(Text34, { children: " " })
24220
24236
  ] }),
24221
- !allResolved && /* @__PURE__ */ jsxs31(Fragment10, { children: [
24222
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
24223
- /* @__PURE__ */ jsx40(Text33, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
24224
- /* @__PURE__ */ jsx40(Text33, { children: " " })
24237
+ !allResolved && /* @__PURE__ */ jsxs32(Fragment11, { children: [
24238
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.warning, children: "\u26A0 " + needsReview + " unresolved component" + (needsReview === 1 ? "" : "s") + " will not be pushed." }),
24239
+ /* @__PURE__ */ jsx41(Text34, { color: PALETTE.warning, children: "Only explicitly accepted components ship." }),
24240
+ /* @__PURE__ */ jsx41(Text34, { children: " " })
24225
24241
  ] }),
24226
- /* @__PURE__ */ jsxs31(Box30, { flexDirection: "column", height: 2, children: [
24227
- previewStatus === "running" ? /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx40(Text33, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx40(Text33, { children: " " }),
24228
- /* @__PURE__ */ jsx40(Text33, { children: " " })
24242
+ /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", height: 2, children: [
24243
+ previewStatus === "running" ? /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, children: "Previewing deletions against the target space\u2026" }) : previewStatus === "error" ? /* @__PURE__ */ jsx41(Text34, { color: PALETTE.warning, children: "\u26A0 Could not preview deletions (the push will still proceed)." }) : /* @__PURE__ */ jsx41(Text34, { children: " " }),
24244
+ /* @__PURE__ */ jsx41(Text34, { children: " " })
24229
24245
  ] }),
24230
- previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs31(Fragment10, { children: [
24231
- /* @__PURE__ */ jsx40(Text33, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
24232
- hasMoreAbove && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "\u2191 more above" }),
24233
- windowed.map((rc) => /* @__PURE__ */ jsx40(Text33, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
24234
- hasMoreBelow && /* @__PURE__ */ jsx40(Text33, { color: PALETTE.muted, children: "\u2193 more below" }),
24235
- removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx40(Text33, { children: "[\u2191\u2193] scroll deletions" }),
24236
- /* @__PURE__ */ jsx40(Text33, { children: " " })
24246
+ previewStatus === "done" && removed.length > 0 && /* @__PURE__ */ jsxs32(Fragment11, { children: [
24247
+ /* @__PURE__ */ jsx41(Text34, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removed.length, false) }),
24248
+ hasMoreAbove && /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, children: "\u2191 more above" }),
24249
+ windowed.map((rc) => /* @__PURE__ */ jsx41(Text34, { color: PALETTE.error, children: removedComponentLine(rc) }, rc.id)),
24250
+ hasMoreBelow && /* @__PURE__ */ jsx41(Text34, { color: PALETTE.muted, children: "\u2193 more below" }),
24251
+ removed.length > FINALIZE_REMOVED_WINDOW && /* @__PURE__ */ jsx41(Text34, { children: "[\u2191\u2193] scroll deletions" }),
24252
+ /* @__PURE__ */ jsx41(Text34, { children: " " })
24237
24253
  ] }),
24238
- /* @__PURE__ */ jsx40(Text33, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
24239
- /* @__PURE__ */ jsx40(Text33, { children: " " }),
24240
- /* @__PURE__ */ jsx40(Text33, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
24254
+ /* @__PURE__ */ jsx41(Text34, { children: noneAccepted ? "Confirm exit with nothing accepted?" : allResolved ? "Save decisions and exit? All components resolved." : "Save decisions and exit?" }),
24255
+ /* @__PURE__ */ jsx41(Text34, { children: " " }),
24256
+ /* @__PURE__ */ jsx41(Text34, { children: "[y / Enter] Confirm [n / Esc] Cancel" })
24241
24257
  ] }) });
24242
24258
  }
24243
24259
 
@@ -24642,11 +24658,11 @@ function useReviewSurfaceState(initialFinalizeError = null) {
24642
24658
  }
24643
24659
 
24644
24660
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
24645
- import { Box as Box32, Text as Text35 } from "ink";
24661
+ import { Box as Box33, Text as Text36 } from "ink";
24646
24662
 
24647
24663
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/QuitDialog.tsx
24648
- import { Box as Box31, Text as Text34 } from "ink";
24649
- import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
24664
+ import { Box as Box32, Text as Text35 } from "ink";
24665
+ import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
24650
24666
  function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24651
24667
  useImmediateInput((input, key) => {
24652
24668
  if (input === "y" || key.return) {
@@ -24655,21 +24671,21 @@ function QuitDialog({ hasUnsavedDrafts, onConfirm, onCancel }) {
24655
24671
  onCancel();
24656
24672
  }
24657
24673
  });
24658
- return /* @__PURE__ */ jsxs32(Box31, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
24659
- /* @__PURE__ */ jsx41(Text34, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
24660
- /* @__PURE__ */ jsx41(Text34, { children: " " }),
24661
- hasUnsavedDrafts ? /* @__PURE__ */ jsxs32(Fragment11, { children: [
24662
- /* @__PURE__ */ jsx41(Text34, { children: "You have unsaved draft edits." }),
24663
- /* @__PURE__ */ jsx41(Text34, { children: "Session state is preserved \u2014 you can resume" }),
24664
- /* @__PURE__ */ jsx41(Text34, { children: "by running the same review command again." })
24665
- ] }) : /* @__PURE__ */ jsx41(Text34, { children: "Session is saved. Quit without finalizing?" }),
24666
- /* @__PURE__ */ jsx41(Text34, { children: " " }),
24667
- /* @__PURE__ */ jsx41(Text34, { children: " [y / Enter] Quit [n / Esc] Stay" })
24674
+ return /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", borderStyle: "round", padding: 1, width: 50, children: [
24675
+ /* @__PURE__ */ jsx42(Text35, { bold: true, children: "\u2500".repeat(19) + " Quit " + "\u2500".repeat(19) }),
24676
+ /* @__PURE__ */ jsx42(Text35, { children: " " }),
24677
+ hasUnsavedDrafts ? /* @__PURE__ */ jsxs33(Fragment12, { children: [
24678
+ /* @__PURE__ */ jsx42(Text35, { children: "You have unsaved draft edits." }),
24679
+ /* @__PURE__ */ jsx42(Text35, { children: "Session state is preserved \u2014 you can resume" }),
24680
+ /* @__PURE__ */ jsx42(Text35, { children: "by running the same review command again." })
24681
+ ] }) : /* @__PURE__ */ jsx42(Text35, { children: "Session is saved. Quit without finalizing?" }),
24682
+ /* @__PURE__ */ jsx42(Text35, { children: " " }),
24683
+ /* @__PURE__ */ jsx42(Text35, { children: " [y / Enter] Quit [n / Esc] Stay" })
24668
24684
  ] });
24669
24685
  }
24670
24686
 
24671
24687
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/ReviewDialogs.tsx
24672
- import { Fragment as Fragment12, jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
24688
+ import { Fragment as Fragment13, jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
24673
24689
  function ReviewFinalizeDialogs({
24674
24690
  showFinalize,
24675
24691
  showQuit,
@@ -24683,8 +24699,8 @@ function ReviewFinalizeDialogs({
24683
24699
  onQuitCancel
24684
24700
  }) {
24685
24701
  const { accepted, rejected, needsReview } = countReviewStatuses(components);
24686
- return /* @__PURE__ */ jsxs33(Fragment12, { children: [
24687
- showFinalize && /* @__PURE__ */ jsx42(
24702
+ return /* @__PURE__ */ jsxs34(Fragment13, { children: [
24703
+ showFinalize && /* @__PURE__ */ jsx43(
24688
24704
  FinalizeDialog,
24689
24705
  {
24690
24706
  accepted,
@@ -24697,7 +24713,7 @@ function ReviewFinalizeDialogs({
24697
24713
  onCancel: onFinalizeCancel
24698
24714
  }
24699
24715
  ),
24700
- showQuit && /* @__PURE__ */ jsx42(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
24716
+ showQuit && /* @__PURE__ */ jsx43(QuitDialog, { hasUnsavedDrafts: false, onConfirm: onQuitConfirm, onCancel: onQuitCancel })
24701
24717
  ] });
24702
24718
  }
24703
24719
  function ReviewStepDialogs({
@@ -24707,7 +24723,7 @@ function ReviewStepDialogs({
24707
24723
  onFinalize,
24708
24724
  onQuit
24709
24725
  }) {
24710
- return /* @__PURE__ */ jsx42(
24726
+ return /* @__PURE__ */ jsx43(
24711
24727
  ReviewFinalizeDialogs,
24712
24728
  {
24713
24729
  showFinalize: surfaceState.showFinalize,
@@ -24725,12 +24741,12 @@ function ReviewStepDialogs({
24725
24741
  }
24726
24742
  function ReviewReloadDialog({ open }) {
24727
24743
  if (!open) return null;
24728
- return /* @__PURE__ */ jsxs33(Box32, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24729
- /* @__PURE__ */ jsx42(Text35, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
24730
- /* @__PURE__ */ jsx42(Text35, { children: "Unsaved in-memory changes will be lost." }),
24731
- /* @__PURE__ */ jsx42(Text35, { children: " " }),
24732
- /* @__PURE__ */ jsx42(Text35, { children: " [Enter] Confirm" }),
24733
- /* @__PURE__ */ jsx42(Text35, { children: " [Esc] Cancel" })
24744
+ return /* @__PURE__ */ jsxs34(Box33, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
24745
+ /* @__PURE__ */ jsx43(Text36, { bold: true, color: PALETTE.warning, children: "Reload from saved state?" }),
24746
+ /* @__PURE__ */ jsx43(Text36, { children: "Unsaved in-memory changes will be lost." }),
24747
+ /* @__PURE__ */ jsx43(Text36, { children: " " }),
24748
+ /* @__PURE__ */ jsx43(Text36, { children: " [Enter] Confirm" }),
24749
+ /* @__PURE__ */ jsx43(Text36, { children: " [Esc] Cancel" })
24734
24750
  ] });
24735
24751
  }
24736
24752
 
@@ -25097,8 +25113,8 @@ function useReviewPreview({
25097
25113
  }
25098
25114
 
25099
25115
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/components/LivePreviewSummary.tsx
25100
- import { Box as Box33, Text as Text36 } from "ink";
25101
- import { jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
25116
+ import { Box as Box34, Text as Text37 } from "ink";
25117
+ import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
25102
25118
  function LivePreviewSummary({
25103
25119
  enabled,
25104
25120
  previewAnnotations,
@@ -25112,24 +25128,24 @@ function LivePreviewSummary({
25112
25128
  const counts = { new: 0, changed: 0, removed: 0, breaking: 0 };
25113
25129
  for (const annotation of previewAnnotations.values()) counts[annotation] += 1;
25114
25130
  const hasCounts = counts.new + counts.changed + counts.removed + counts.breaking > 0;
25115
- if (disabled) return /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
25116
- if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
25131
+ if (disabled) return /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: "Preview: disabled (creds rejected)" });
25132
+ if (status === "running" && !hasCounts) return /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: `Preview: ${spinner} running...` });
25117
25133
  if (!hasCounts) return null;
25118
- return /* @__PURE__ */ jsxs34(Box33, { children: [
25119
- /* @__PURE__ */ jsx43(Text36, { children: "Preview: " }),
25120
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.success, children: `${counts.new} new` }),
25121
- /* @__PURE__ */ jsx43(Text36, { children: " \xB7 " }),
25122
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.warning, children: `${counts.changed} changed` }),
25123
- /* @__PURE__ */ jsx43(Text36, { children: " \xB7 " }),
25124
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.muted, children: `${counts.removed} removed` }),
25125
- showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx43(Text36, { children: " ([d] removed list)" }),
25126
- /* @__PURE__ */ jsx43(Text36, { children: " \xB7 " }),
25127
- /* @__PURE__ */ jsx43(Text36, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
25134
+ return /* @__PURE__ */ jsxs35(Box34, { children: [
25135
+ /* @__PURE__ */ jsx44(Text37, { children: "Preview: " }),
25136
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.success, children: `${counts.new} new` }),
25137
+ /* @__PURE__ */ jsx44(Text37, { children: " \xB7 " }),
25138
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: `${counts.changed} changed` }),
25139
+ /* @__PURE__ */ jsx44(Text37, { children: " \xB7 " }),
25140
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: `${counts.removed} removed` }),
25141
+ showRemovedListHint && removedCount > 0 && /* @__PURE__ */ jsx44(Text37, { children: " ([d] removed list)" }),
25142
+ /* @__PURE__ */ jsx44(Text37, { children: " \xB7 " }),
25143
+ /* @__PURE__ */ jsx44(Text37, { color: PALETTE.error, bold: true, children: `${counts.breaking} breaking` })
25128
25144
  ] });
25129
25145
  }
25130
25146
 
25131
25147
  // packages/experience-design-system-cli/src/tui/import/steps/09-review/generate-review-step.tsx
25132
- import { Fragment as Fragment13, jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
25148
+ import { Fragment as Fragment14, jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
25133
25149
  function sortComponentsForSidebar(components, cycleParticipants) {
25134
25150
  const isEmpty2 = (entry) => Object.keys(entry.$properties ?? {}).length === 0 && Object.keys(entry.$slots ?? {}).length === 0;
25135
25151
  const tier = (c2) => {
@@ -25170,10 +25186,10 @@ function CyclePathLine({
25170
25186
  highlightComponents = false,
25171
25187
  highlightLine = false
25172
25188
  }) {
25173
- return /* @__PURE__ */ jsxs35(Text37, { color: highlightLine ? PALETTE.warning : void 0, children: [
25189
+ return /* @__PURE__ */ jsxs36(Text38, { color: highlightLine ? PALETTE.warning : void 0, children: [
25174
25190
  prefix,
25175
25191
  segments.map(
25176
- (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx44(Text37, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx44(Text37, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
25192
+ (segment, index) => segment.kind === "slot" ? /* @__PURE__ */ jsx45(Text38, { color: PALETTE.accent, children: segment.text }, index) : segment.kind === "arrow" ? /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: segment.text }, index) : /* @__PURE__ */ jsx45(Text38, { color: highlightComponents ? PALETTE.warning : void 0, children: segment.text }, index)
25177
25193
  )
25178
25194
  ] });
25179
25195
  }
@@ -25185,31 +25201,31 @@ function CycleDetailPanel({
25185
25201
  height
25186
25202
  }) {
25187
25203
  const lines = [
25188
- /* @__PURE__ */ jsx44(Text37, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
25189
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
25190
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
25191
- /* @__PURE__ */ jsx44(Text37, { children: " " }, "cyc-space")
25204
+ /* @__PURE__ */ jsx45(Text38, { bold: true, color: PALETTE.warning, children: `SLOT DEPENDENCY CYCLES (${cycles.length})` }, "cyc-title"),
25205
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "push will fail until these are resolved" }, "cyc-sub"),
25206
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "Reject a cycle member or remove a slot edge to break the cycle." }, "cyc-guidance"),
25207
+ /* @__PURE__ */ jsx45(Text38, { children: " " }, "cyc-space")
25192
25208
  ];
25193
25209
  cycles.forEach((cycle, index) => {
25194
25210
  const nodeCount = new Set(cycle.path).size;
25195
25211
  const isCursor = index === cursor;
25196
25212
  lines.push(
25197
- /* @__PURE__ */ jsx44(Text37, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
25198
- /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
25213
+ /* @__PURE__ */ jsx45(Text38, { bold: true, inverse: isCursor, children: `${isCursor ? figures7.pointer : " "} Cycle ${index + 1} (${nodeCount} component${nodeCount === 1 ? "" : "s"}):` }, `cyc-h-${index}`),
25214
+ /* @__PURE__ */ jsx45(CyclePathLine, { segments: formatCyclePathSegments2(cycle, 16), prefix: " " }, `cyc-p-${index}`)
25199
25215
  );
25200
25216
  if (cycle.suggestedBreak) {
25201
25217
  lines.push(
25202
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
25218
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: ` Suggested fix: remove [${cycle.suggestedBreak.slotName}] from ${cycle.suggestedBreak.fromComponent}` }, `cyc-fix-${index}`)
25203
25219
  );
25204
25220
  }
25205
- lines.push(/* @__PURE__ */ jsx44(Text37, { children: " " }, `cyc-s-${index}`));
25221
+ lines.push(/* @__PURE__ */ jsx45(Text38, { children: " " }, `cyc-s-${index}`));
25206
25222
  });
25207
25223
  const footer = "[\u2191\u2193] move [Enter] fix cycle [c/q/Esc] close";
25208
25224
  const viewportHeight = Math.max(1, height - 3);
25209
25225
  const visible = lines.slice(scrollOffset, scrollOffset + viewportHeight - 1);
25210
- return /* @__PURE__ */ jsxs35(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25226
+ return /* @__PURE__ */ jsxs36(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25211
25227
  visible,
25212
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: footer })
25228
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: footer })
25213
25229
  ] });
25214
25230
  }
25215
25231
  function BreakCyclePanel({
@@ -25220,14 +25236,14 @@ function BreakCyclePanel({
25220
25236
  width,
25221
25237
  height
25222
25238
  }) {
25223
- return /* @__PURE__ */ jsxs35(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25224
- /* @__PURE__ */ jsx44(Text37, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
25225
- cycle && /* @__PURE__ */ jsx44(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
25226
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
25227
- /* @__PURE__ */ jsx44(Text37, { children: " " }),
25228
- edges.length > 0 && /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: "remove slot edge:" }),
25229
- edges.map((edge, index) => /* @__PURE__ */ jsx44(Text37, { inverse: index === cursor, children: `${index === cursor ? figures7.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
25230
- confirming ? /* @__PURE__ */ jsx44(Text37, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx44(Text37, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
25239
+ return /* @__PURE__ */ jsxs36(FixedPanel, { width, height, borderStyle: "round", borderColor: PALETTE.warning, paddingLeft: 1, children: [
25240
+ /* @__PURE__ */ jsx45(Text38, { bold: true, color: PALETTE.warning, children: "BREAK CYCLE \u2014 remove a slot edge" }),
25241
+ cycle && /* @__PURE__ */ jsx45(CyclePathLine, { segments: formatCyclePathSegments2(cycle), prefix: " ", highlightComponents: true }),
25242
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: cycle ? "Deleting an edge removes it from $allowedComponents (undo with Ctrl+Z)." : "No cycle highlighted." }),
25243
+ /* @__PURE__ */ jsx45(Text38, { children: " " }),
25244
+ edges.length > 0 && /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: "remove slot edge:" }),
25245
+ edges.map((edge, index) => /* @__PURE__ */ jsx45(Text38, { inverse: index === cursor, children: `${index === cursor ? figures7.pointer : " "} remove '${edge.toComponent}' from ${edge.fromComponent}.$slots.${edge.slotName}.$allowedComponents` }, `${edge.fromComponent}-${edge.slotName}-${edge.toComponent}`)),
25246
+ confirming ? /* @__PURE__ */ jsx45(Text38, { bold: true, color: PALETTE.warning, children: "Delete this slot edge? [y] confirm [n] cancel" }) : /* @__PURE__ */ jsx45(Text38, { children: "[\u2191\u2193] move [Enter] delete [x/Esc] close" })
25231
25247
  ] });
25232
25248
  }
25233
25249
  var HELP_SECTIONS2 = [
@@ -25333,9 +25349,9 @@ function deriveBreakingChanges(response) {
25333
25349
  }
25334
25350
  function GenerateReviewStep(props) {
25335
25351
  if (!props.extractSessionId) {
25336
- return /* @__PURE__ */ jsx44(Box34, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx44(Text37, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
25352
+ return /* @__PURE__ */ jsx45(Box35, { paddingX: 2, paddingY: 1, children: /* @__PURE__ */ jsx45(Text38, { color: PALETTE.error, children: "Error: no session ID \u2014 cannot load generated definitions." }) });
25337
25353
  }
25338
- return /* @__PURE__ */ jsx44(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
25354
+ return /* @__PURE__ */ jsx45(GenerateReviewStepView, { ...props, extractSessionId: props.extractSessionId });
25339
25355
  }
25340
25356
  function GenerateReviewStepView({
25341
25357
  extractSessionId,
@@ -26192,13 +26208,13 @@ function GenerateReviewStepView({
26192
26208
  }
26193
26209
  });
26194
26210
  if (loading) {
26195
- return /* @__PURE__ */ jsx44(ReviewLoadingState, {});
26211
+ return /* @__PURE__ */ jsx45(ReviewLoadingState, {});
26196
26212
  }
26197
26213
  if (loadError) {
26198
- return /* @__PURE__ */ jsx44(ReviewLoadError, { message: loadError });
26214
+ return /* @__PURE__ */ jsx45(ReviewLoadError, { message: loadError });
26199
26215
  }
26200
26216
  if (showHelp) {
26201
- return /* @__PURE__ */ jsx44(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
26217
+ return /* @__PURE__ */ jsx45(HelpOverlay, { sections: HELP_SECTIONS2, handleInput: false, onClose: () => setShowHelp(false) });
26202
26218
  }
26203
26219
  const { selected, selectedJson, visibleJsonPanelValue } = getReviewSelectionState(
26204
26220
  components,
@@ -26238,8 +26254,8 @@ function GenerateReviewStepView({
26238
26254
  for (const c2 of closures.values()) if (c2.nodes.length > 1) return true;
26239
26255
  return false;
26240
26256
  })();
26241
- return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", children: [
26242
- /* @__PURE__ */ jsx44(
26257
+ return /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", children: [
26258
+ /* @__PURE__ */ jsx45(
26243
26259
  ReviewStepDialogs,
26244
26260
  {
26245
26261
  surfaceState: reviewSurface,
@@ -26249,16 +26265,16 @@ function GenerateReviewStepView({
26249
26265
  onQuit
26250
26266
  }
26251
26267
  ),
26252
- /* @__PURE__ */ jsx44(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
26253
- removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
26254
- /* @__PURE__ */ jsx44(Text37, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
26255
- !removedBannerCollapsed && /* @__PURE__ */ jsxs35(Fragment13, { children: [
26256
- /* @__PURE__ */ jsx44(Text37, { children: " " }),
26257
- removedComponents.map((rc) => /* @__PURE__ */ jsx44(Text37, { children: removedComponentLine(rc) }, rc.id))
26268
+ /* @__PURE__ */ jsx45(ReviewReloadDialog, { open: showReloadDialog && !dialogOpen }),
26269
+ removedComponents.length > 0 && !dialogOpen && /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.error, paddingX: 1, children: [
26270
+ /* @__PURE__ */ jsx45(Text38, { bold: true, color: PALETTE.error, children: removedComponentsHeader(removedComponents.length, true) }),
26271
+ !removedBannerCollapsed && /* @__PURE__ */ jsxs36(Fragment14, { children: [
26272
+ /* @__PURE__ */ jsx45(Text38, { children: " " }),
26273
+ removedComponents.map((rc) => /* @__PURE__ */ jsx45(Text38, { children: removedComponentLine(rc) }, rc.id))
26258
26274
  ] })
26259
26275
  ] }),
26260
- breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx44(Box34, { paddingX: 1, children: /* @__PURE__ */ jsx44(
26261
- Text37,
26276
+ breakingChanges.length > 0 && !dialogOpen && /* @__PURE__ */ jsx45(Box35, { paddingX: 1, children: /* @__PURE__ */ jsx45(
26277
+ Text38,
26262
26278
  {
26263
26279
  color: PALETTE.warning,
26264
26280
  children: `[b] ${breakingChanges.length} breaking change${breakingChanges.length === 1 ? "" : "s"}`
@@ -26268,14 +26284,14 @@ function GenerateReviewStepView({
26268
26284
  const row = breakingRows[breakingCursor];
26269
26285
  const comp = row ? breakingChanges.find((b) => b.componentName === row.componentName) : void 0;
26270
26286
  if (!comp) return null;
26271
- return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26272
- /* @__PURE__ */ jsx44(Text37, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
26273
- comp.impact && /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
26274
- comp.changes.length === 0 ? /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx44(Text37, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
26275
- /* @__PURE__ */ jsx44(Text37, { children: "[D/Esc] close detail" })
26287
+ return /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26288
+ /* @__PURE__ */ jsx45(Text38, { bold: true, color: PALETTE.warning, children: `Breaking changes \u2014 ${comp.componentName}` }),
26289
+ comp.impact && /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: ` affects ${comp.impact.affectedExperiences} experience${comp.impact.affectedExperiences === 1 ? "" : "s"}, ${comp.impact.affectedFragments} fragment${comp.impact.affectedFragments === 1 ? "" : "s"}` }),
26290
+ comp.changes.length === 0 ? /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: " (no enumerated changes)" }) : comp.changes.map((change, ci) => /* @__PURE__ */ jsx45(Text38, { children: ` \u2022 ${formatBreakingChange(change, comp.current)}` }, `bd-detail-${ci}`)),
26291
+ /* @__PURE__ */ jsx45(Text38, { children: "[D/Esc] close detail" })
26276
26292
  ] });
26277
26293
  })(),
26278
- !dialogOpen && /* @__PURE__ */ jsx44(
26294
+ !dialogOpen && /* @__PURE__ */ jsx45(
26279
26295
  LivePreviewSummary,
26280
26296
  {
26281
26297
  enabled: livePreview,
@@ -26294,16 +26310,16 @@ function GenerateReviewStepView({
26294
26310
  const participantSet = cycleView.structural;
26295
26311
  const members = stillRejected.filter((n) => participantSet.has(n)).sort();
26296
26312
  const ancestors = stillRejected.filter((n) => !participantSet.has(n)).sort();
26297
- return /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
26298
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
26299
- members.length > 0 && /* @__PURE__ */ jsx44(Text37, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
26300
- ancestors.length > 0 && /* @__PURE__ */ jsx44(Text37, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
26301
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
26313
+ return /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", borderStyle: "single", borderColor: PALETTE.error, paddingX: 1, children: [
26314
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.error, bold: true, children: `Cyclic component graph \u2014 auto-rejected ${stillRejected.length} component${stillRejected.length === 1 ? "" : "s"}:` }),
26315
+ members.length > 0 && /* @__PURE__ */ jsx45(Text38, { color: PALETTE.error, children: ` Cycle members: ${members.join(", ")}` }),
26316
+ ancestors.length > 0 && /* @__PURE__ */ jsx45(Text38, { color: PALETTE.error, children: ` Ancestors: ${ancestors.join(", ")}` }),
26317
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.muted, children: undoSnapshot ? " [Ctrl+Z] undo \xB7 [r]/[a] manually toggle \xB7 [F] continue" : " [r]/[a] manually toggle \xB7 [F] continue" })
26302
26318
  ] });
26303
26319
  })(),
26304
- /* @__PURE__ */ jsx44(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
26305
- /* @__PURE__ */ jsx44(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
26306
- !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx44(
26320
+ /* @__PURE__ */ jsx45(ReviewEmptyComponentsWarning, { count: emptyCount, hidden: dialogOpen }),
26321
+ /* @__PURE__ */ jsx45(ReviewFinalizeError, { message: finalizeError, hidden: dialogOpen }),
26322
+ !dialogOpen && breakPanel.isOpen && /* @__PURE__ */ jsx45(
26307
26323
  BreakCyclePanel,
26308
26324
  {
26309
26325
  cycle: cycleRows[cyclesCursor],
@@ -26314,7 +26330,7 @@ function GenerateReviewStepView({
26314
26330
  height: panelHeight
26315
26331
  }
26316
26332
  ),
26317
- !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx44(
26333
+ !dialogOpen && cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsx45(
26318
26334
  CycleDetailPanel,
26319
26335
  {
26320
26336
  cycles: cycleRows,
@@ -26324,8 +26340,8 @@ function GenerateReviewStepView({
26324
26340
  height: panelHeight
26325
26341
  }
26326
26342
  ),
26327
- !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs35(Box34, { children: [
26328
- breakingPanel.isOpen ? /* @__PURE__ */ jsx44(
26343
+ !dialogOpen && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs36(Box35, { children: [
26344
+ breakingPanel.isOpen ? /* @__PURE__ */ jsx45(
26329
26345
  GotoBanner,
26330
26346
  {
26331
26347
  title: `Breaking changes \u2014 ${breakingRows[breakingCursor]?.componentName ?? "unknown component"}`,
@@ -26338,7 +26354,7 @@ function GenerateReviewStepView({
26338
26354
  width: sidebarWidth,
26339
26355
  footerHint: "[\u2191/\u2193] move \xB7 [Enter] jump \xB7 [D] detail \xB7 [Esc] close"
26340
26356
  }
26341
- ) : /* @__PURE__ */ jsx44(
26357
+ ) : /* @__PURE__ */ jsx45(
26342
26358
  GroupedSidebar,
26343
26359
  {
26344
26360
  items: groupedItems,
@@ -26379,7 +26395,7 @@ function GenerateReviewStepView({
26379
26395
  graph: sidebarGraph
26380
26396
  }
26381
26397
  ),
26382
- selected ? /* @__PURE__ */ jsx44(
26398
+ selected ? /* @__PURE__ */ jsx45(
26383
26399
  ReviewComponentPanel,
26384
26400
  {
26385
26401
  selectedKey: selected.key,
@@ -26411,12 +26427,12 @@ function GenerateReviewStepView({
26411
26427
  livePreview: livePreviewHook,
26412
26428
  livePreviewSpinner
26413
26429
  }
26414
- ) : /* @__PURE__ */ jsx44(ReviewNoSelection, {})
26430
+ ) : /* @__PURE__ */ jsx45(ReviewNoSelection, {})
26415
26431
  ] }),
26416
- !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs35(Box34, { flexDirection: "column", children: [
26417
- /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
26432
+ !dialogOpen && cycleRows.length > 0 && !cyclePanel.isOpen && !breakPanel.isOpen && /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", children: [
26433
+ /* @__PURE__ */ jsx45(Text38, { color: PALETTE.warning, children: `\u26A0 ${cycleRows.length} slot dependency cycle${cycleRows.length === 1 ? "" : "s"} detected \u2014 push will fail` }),
26418
26434
  cycleRows.slice(0, 3).map((cycle, idx) => {
26419
- return /* @__PURE__ */ jsx44(
26435
+ return /* @__PURE__ */ jsx45(
26420
26436
  CyclePathLine,
26421
26437
  {
26422
26438
  segments: formatCyclePathSegments2(cycle),
@@ -26427,10 +26443,10 @@ function GenerateReviewStepView({
26427
26443
  `cyc-banner-${idx}`
26428
26444
  );
26429
26445
  }),
26430
- cycleRows.length > 3 && /* @__PURE__ */ jsx44(Text37, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
26431
- /* @__PURE__ */ jsx44(Text37, { children: " press [c] for detail" })
26446
+ cycleRows.length > 3 && /* @__PURE__ */ jsx45(Text38, { color: PALETTE.warning, children: ` \u2026${cycleRows.length - 3} more` }),
26447
+ /* @__PURE__ */ jsx45(Text38, { children: " press [c] for detail" })
26432
26448
  ] }),
26433
- /* @__PURE__ */ jsx44(
26449
+ /* @__PURE__ */ jsx45(
26434
26450
  SearchMatchSummary,
26435
26451
  {
26436
26452
  open: searchOpen,
@@ -26441,27 +26457,27 @@ function GenerateReviewStepView({
26441
26457
  hidden: dialogOpen
26442
26458
  }
26443
26459
  ),
26444
- !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx44(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
26460
+ !dialogOpen && sidebarFocused && /* @__PURE__ */ jsx45(CompactControlBar, { hasGroupRoots, searchActive: searchOpen || searchQuery.length > 0 })
26445
26461
  ] });
26446
26462
  }
26447
26463
 
26448
26464
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/CustomPromptBanner.tsx
26449
- import { Box as Box35, Text as Text38 } from "ink";
26450
- import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
26465
+ import { Box as Box36, Text as Text39 } from "ink";
26466
+ import { jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
26451
26467
  function CustomPromptBanner({ generatePromptPath }) {
26452
26468
  if (!generatePromptPath) return null;
26453
- return /* @__PURE__ */ jsxs36(Box35, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26454
- /* @__PURE__ */ jsx45(Text38, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
26455
- generatePromptPath ? /* @__PURE__ */ jsxs36(Text38, { color: PALETTE.warning, children: [
26469
+ return /* @__PURE__ */ jsxs37(Box36, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.warning, paddingX: 1, children: [
26470
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.warning, bold: true, children: "WARNING: Custom prompt active" }),
26471
+ generatePromptPath ? /* @__PURE__ */ jsxs37(Text39, { color: PALETTE.warning, children: [
26456
26472
  "components: ",
26457
26473
  generatePromptPath
26458
26474
  ] }) : null,
26459
- /* @__PURE__ */ jsx45(Text38, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
26475
+ /* @__PURE__ */ jsx46(Text39, { color: PALETTE.warning, children: "Bundled invariants (utility-wrapper rejection, description content rules) do NOT apply." })
26460
26476
  ] });
26461
26477
  }
26462
26478
 
26463
26479
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
26464
- import { Box as Box37, Text as Text40 } from "ink";
26480
+ import { Box as Box38, Text as Text41 } from "ink";
26465
26481
 
26466
26482
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/contentful-urls.ts
26467
26483
  function normalizeHost(host) {
@@ -26477,32 +26493,32 @@ function buildPostPushUrl2({ host, spaceId, environmentId, view = "components" }
26477
26493
  }
26478
26494
 
26479
26495
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/SpaceEnvironment.tsx
26480
- import { Box as Box36, Text as Text39 } from "ink";
26481
- import { jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
26496
+ import { Box as Box37, Text as Text40 } from "ink";
26497
+ import { jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
26482
26498
  function SpaceEnvironment({ spaceId, environmentId }) {
26483
- return /* @__PURE__ */ jsxs37(Box36, { gap: 1, marginTop: 1, children: [
26484
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: "Space:" }),
26485
- /* @__PURE__ */ jsx46(Text39, { children: spaceId }),
26486
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: "/" }),
26487
- /* @__PURE__ */ jsx46(Text39, { color: PALETTE.muted, children: "Environment:" }),
26488
- /* @__PURE__ */ jsx46(Text39, { children: environmentId })
26499
+ return /* @__PURE__ */ jsxs38(Box37, { gap: 1, marginTop: 1, children: [
26500
+ /* @__PURE__ */ jsx47(Text40, { color: PALETTE.muted, children: "Space:" }),
26501
+ /* @__PURE__ */ jsx47(Text40, { children: spaceId }),
26502
+ /* @__PURE__ */ jsx47(Text40, { color: PALETTE.muted, children: "/" }),
26503
+ /* @__PURE__ */ jsx47(Text40, { color: PALETTE.muted, children: "Environment:" }),
26504
+ /* @__PURE__ */ jsx47(Text40, { children: environmentId })
26489
26505
  ] });
26490
26506
  }
26491
26507
 
26492
26508
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/DoneStep.tsx
26493
- import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
26509
+ import { Fragment as Fragment15, jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
26494
26510
  var ACTIONS = ["created", "updated", "removed"];
26495
26511
  function EntityRows({ entity, label }) {
26496
26512
  const plural3 = (n) => `${n} ${label}${n !== 1 ? "s" : ""}`;
26497
- return /* @__PURE__ */ jsxs38(Fragment14, { children: [
26498
- ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs38(Text40, { children: [
26499
- /* @__PURE__ */ jsx47(Text40, { color: PALETTE.success, children: "\u2713" }),
26513
+ return /* @__PURE__ */ jsxs39(Fragment15, { children: [
26514
+ ACTIONS.filter((action) => entity[action] > 0).map((action) => /* @__PURE__ */ jsxs39(Text41, { children: [
26515
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.success, children: "\u2713" }),
26500
26516
  " ",
26501
26517
  plural3(entity[action]),
26502
26518
  " ",
26503
26519
  action
26504
26520
  ] }, action)),
26505
- entity.failed > 0 && /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.error, children: [
26521
+ entity.failed > 0 && /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.error, children: [
26506
26522
  "\u2717 ",
26507
26523
  plural3(entity.failed),
26508
26524
  " failed \u2014 check logs above"
@@ -26510,9 +26526,9 @@ function EntityRows({ entity, label }) {
26510
26526
  ] });
26511
26527
  }
26512
26528
  function LinkRow({ title, url }) {
26513
- return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", children: [
26514
- /* @__PURE__ */ jsx47(Text40, { color: PALETTE.muted, children: title }),
26515
- /* @__PURE__ */ jsx47(Text40, { color: PALETTE.accent, children: url })
26529
+ return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", children: [
26530
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: title }),
26531
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.accent, children: url })
26516
26532
  ] });
26517
26533
  }
26518
26534
  function DoneStep({
@@ -26534,27 +26550,27 @@ function DoneStep({
26534
26550
  const totalPushed = componentTypes.created + componentTypes.updated + componentTypes.removed + designTokens.created + designTokens.updated + designTokens.removed;
26535
26551
  const success = totalFailed === 0;
26536
26552
  const urlArgs = { host: host ?? "api.contentful.com", spaceId, environmentId };
26537
- return /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26538
- success ? /* @__PURE__ */ jsx47(Text40, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx47(Text40, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
26539
- totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx47(Text40, { color: PALETTE.muted, children: "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", children: [
26540
- /* @__PURE__ */ jsx47(EntityRows, { entity: componentTypes, label: "Component Type" }),
26541
- /* @__PURE__ */ jsx47(EntityRows, { entity: designTokens, label: "Design Token" }),
26542
- summary && /* @__PURE__ */ jsx47(Box37, { marginTop: 1, children: /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.muted, children: [
26553
+ return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26554
+ success ? /* @__PURE__ */ jsx48(Text41, { bold: true, color: PALETTE.success, children: "Done!" }) : /* @__PURE__ */ jsx48(Text41, { bold: true, color: PALETTE.warning, children: "\u26A0 Finished with errors" }),
26555
+ totalPushed === 0 && totalFailed === 0 && !summary ? /* @__PURE__ */ jsx48(Text41, { color: PALETTE.muted, children: "Nothing was pushed \u2014 everything was already up to date." }) : /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", children: [
26556
+ /* @__PURE__ */ jsx48(EntityRows, { entity: componentTypes, label: "Component Type" }),
26557
+ /* @__PURE__ */ jsx48(EntityRows, { entity: designTokens, label: "Design Token" }),
26558
+ summary && /* @__PURE__ */ jsx48(Box38, { marginTop: 1, children: /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.muted, children: [
26543
26559
  "Push result: ",
26544
26560
  summary.succeeded,
26545
26561
  "/",
26546
26562
  summary.total,
26547
26563
  " succeeded",
26548
- summary.failed > 0 && /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.error, children: [
26564
+ summary.failed > 0 && /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.error, children: [
26549
26565
  ", ",
26550
26566
  summary.failed,
26551
26567
  " failed"
26552
26568
  ] })
26553
26569
  ] }) })
26554
26570
  ] }),
26555
- failures.length > 0 && /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", children: [
26556
- /* @__PURE__ */ jsx47(Text40, { bold: true, color: PALETTE.error, children: "Failure details" }),
26557
- failures.map((failure) => /* @__PURE__ */ jsxs38(Text40, { color: PALETTE.error, children: [
26571
+ failures.length > 0 && /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", children: [
26572
+ /* @__PURE__ */ jsx48(Text41, { bold: true, color: PALETTE.error, children: "Failure details" }),
26573
+ failures.map((failure) => /* @__PURE__ */ jsxs39(Text41, { color: PALETTE.error, children: [
26558
26574
  failure.entityType,
26559
26575
  " ",
26560
26576
  failure.entityId,
@@ -26562,11 +26578,11 @@ function DoneStep({
26562
26578
  failure.message
26563
26579
  ] }, `${failure.entityType}:${failure.entityId}`))
26564
26580
  ] }),
26565
- /* @__PURE__ */ jsx47(SpaceEnvironment, { spaceId, environmentId }),
26566
- success && totalPushed > 0 && /* @__PURE__ */ jsxs38(Box37, { flexDirection: "column", gap: 1, children: [
26567
- /* @__PURE__ */ jsx47(Text40, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
26568
- /* @__PURE__ */ jsx47(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
26569
- /* @__PURE__ */ jsx47(
26581
+ /* @__PURE__ */ jsx48(SpaceEnvironment, { spaceId, environmentId }),
26582
+ success && totalPushed > 0 && /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 1, children: [
26583
+ /* @__PURE__ */ jsx48(Text41, { color: PALETTE.success, children: "Your design system is now in Contentful Experiences." }),
26584
+ /* @__PURE__ */ jsx48(LinkRow, { title: "View your components here:", url: buildPostPushUrl2(urlArgs) }),
26585
+ /* @__PURE__ */ jsx48(
26570
26586
  LinkRow,
26571
26587
  {
26572
26588
  title: "View your design tokens here:",
@@ -26574,13 +26590,13 @@ function DoneStep({
26574
26590
  }
26575
26591
  )
26576
26592
  ] }),
26577
- /* @__PURE__ */ jsx47(Text40, { children: "[Enter / q] Exit" })
26593
+ /* @__PURE__ */ jsx48(Text41, { children: "[Enter / q] Exit" })
26578
26594
  ] });
26579
26595
  }
26580
26596
 
26581
26597
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
26582
26598
  import { useState as useState26 } from "react";
26583
- import { Box as Box38, Text as Text41 } from "ink";
26599
+ import { Box as Box39, Text as Text42 } from "ink";
26584
26600
  import { readdirSync as readdirSync3 } from "node:fs";
26585
26601
  import { dirname as dirname15, basename as basename6, join as join20 } from "node:path";
26586
26602
 
@@ -26614,7 +26630,7 @@ function useBlinkingCursor() {
26614
26630
  }
26615
26631
 
26616
26632
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PathPrompt.tsx
26617
- import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
26633
+ import { jsx as jsx49, jsxs as jsxs40 } from "react/jsx-runtime";
26618
26634
  function autocomplete(partial) {
26619
26635
  if (!partial) return null;
26620
26636
  const normalized = normalizePath(partial);
@@ -26671,52 +26687,52 @@ function PathPrompt({
26671
26687
  const shown = input || defaultPath;
26672
26688
  const isPlaceholder = input === "";
26673
26689
  const cursor = cursorVisible ? "\u2588" : " ";
26674
- return /* @__PURE__ */ jsxs39(Box38, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26675
- /* @__PURE__ */ jsxs39(Box38, { gap: 1, children: [
26676
- /* @__PURE__ */ jsx48(Text41, { color: PALETTE.accent, children: "?" }),
26677
- /* @__PURE__ */ jsxs39(Text41, { bold: true, children: [
26690
+ return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26691
+ /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
26692
+ /* @__PURE__ */ jsx49(Text42, { color: PALETTE.accent, children: "?" }),
26693
+ /* @__PURE__ */ jsxs40(Text42, { bold: true, children: [
26678
26694
  label,
26679
26695
  ":"
26680
26696
  ] }),
26681
- /* @__PURE__ */ jsx48(Text41, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
26682
- /* @__PURE__ */ jsx48(Text41, { children: cursor })
26697
+ /* @__PURE__ */ jsx49(Text42, { color: isPlaceholder ? PALETTE.muted : void 0, children: shown }),
26698
+ /* @__PURE__ */ jsx49(Text42, { children: cursor })
26683
26699
  ] }),
26684
- /* @__PURE__ */ jsxs39(Box38, { gap: 3, children: [
26685
- /* @__PURE__ */ jsx48(Text41, { children: "[Enter] Confirm" }),
26686
- /* @__PURE__ */ jsx48(Text41, { children: "[Tab] Autocomplete" }),
26687
- /* @__PURE__ */ jsx48(Text41, { children: "[Esc] Cancel" })
26700
+ /* @__PURE__ */ jsxs40(Box39, { gap: 3, children: [
26701
+ /* @__PURE__ */ jsx49(Text42, { children: "[Enter] Confirm" }),
26702
+ /* @__PURE__ */ jsx49(Text42, { children: "[Tab] Autocomplete" }),
26703
+ /* @__PURE__ */ jsx49(Text42, { children: "[Esc] Cancel" })
26688
26704
  ] })
26689
26705
  ] });
26690
26706
  }
26691
26707
 
26692
26708
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
26693
- import { Box as Box40, Text as Text43 } from "ink";
26709
+ import { Box as Box41, Text as Text44 } from "ink";
26694
26710
  import { ProgressBar as ProgressBar2, ThemeProvider as ThemeProvider2 } from "@inkjs/ui";
26695
26711
 
26696
26712
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/components/StepHeader.tsx
26697
- import { Box as Box39, Text as Text42 } from "ink";
26698
- import { jsx as jsx49, jsxs as jsxs40 } from "react/jsx-runtime";
26713
+ import { Box as Box40, Text as Text43 } from "ink";
26714
+ import { jsx as jsx50, jsxs as jsxs41 } from "react/jsx-runtime";
26699
26715
  function StepHeader({ stepNumber, totalSteps, title }) {
26700
- return /* @__PURE__ */ jsxs40(Box39, { flexDirection: "column", gap: 0, children: [
26701
- /* @__PURE__ */ jsx49(Text42, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
26702
- /* @__PURE__ */ jsxs40(Box39, { gap: 1, children: [
26703
- /* @__PURE__ */ jsxs40(Text42, { bold: true, children: [
26716
+ return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 0, children: [
26717
+ /* @__PURE__ */ jsx50(Text43, { color: PALETTE.muted, children: "\u2500".repeat(40) }),
26718
+ /* @__PURE__ */ jsxs41(Box40, { gap: 1, children: [
26719
+ /* @__PURE__ */ jsxs41(Text43, { bold: true, children: [
26704
26720
  "Step ",
26705
26721
  stepNumber,
26706
26722
  " of ",
26707
26723
  totalSteps
26708
26724
  ] }),
26709
- /* @__PURE__ */ jsx49(Text42, { bold: true, children: "\u2014" }),
26710
- /* @__PURE__ */ jsx49(Text42, { bold: true, children: title })
26725
+ /* @__PURE__ */ jsx50(Text43, { bold: true, children: "\u2014" }),
26726
+ /* @__PURE__ */ jsx50(Text43, { bold: true, children: title })
26711
26727
  ] }),
26712
- /* @__PURE__ */ jsx49(Text42, { color: PALETTE.muted, children: "\u2500".repeat(40) })
26728
+ /* @__PURE__ */ jsx50(Text43, { color: PALETTE.muted, children: "\u2500".repeat(40) })
26713
26729
  ] });
26714
26730
  }
26715
26731
 
26716
26732
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/use-timed-spinner.tsx
26717
26733
  import { useEffect as useEffect19, useState as useState27 } from "react";
26718
26734
  import { Spinner as Spinner2 } from "@inkjs/ui";
26719
- import { jsx as jsx50 } from "react/jsx-runtime";
26735
+ import { jsx as jsx51 } from "react/jsx-runtime";
26720
26736
  function useTimedSpinner() {
26721
26737
  const [elapsedSeconds, setElapsedSeconds] = useState27(0);
26722
26738
  useEffect19(() => {
@@ -26728,39 +26744,39 @@ function useTimedSpinner() {
26728
26744
  const mins = Math.floor(elapsedSeconds / 60);
26729
26745
  const secs = elapsedSeconds % 60;
26730
26746
  return {
26731
- spinner: /* @__PURE__ */ jsx50(Spinner2, {}),
26747
+ spinner: /* @__PURE__ */ jsx51(Spinner2, {}),
26732
26748
  elapsed: mins > 0 ? `${mins}m ${secs}s` : `${secs}s`
26733
26749
  };
26734
26750
  }
26735
26751
 
26736
26752
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/PushingStep.tsx
26737
- import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
26753
+ import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
26738
26754
  function PushingStep({ stepNumber, totalSteps, progress }) {
26739
26755
  const { elapsed } = useTimedSpinner();
26740
26756
  const operationId = progress && progress.kind === "queued" ? progress.operationId : null;
26741
26757
  const showGlobal = progress && progress.kind === "progress";
26742
26758
  const showCurrent = progress && progress.kind === "progress" && progress.current ? progress.current : null;
26743
- return /* @__PURE__ */ jsxs41(Box40, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26744
- /* @__PURE__ */ jsx51(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
26745
- /* @__PURE__ */ jsx51(Text43, { children: "Writing component types and design tokens to your Contentful space..." }),
26746
- operationId && /* @__PURE__ */ jsxs41(Box40, { gap: 1, children: [
26747
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Operation:" }),
26748
- /* @__PURE__ */ jsx51(Text43, { children: operationId })
26759
+ return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 1, children: [
26760
+ /* @__PURE__ */ jsx52(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
26761
+ /* @__PURE__ */ jsx52(Text44, { children: "Writing component types and design tokens to your Contentful space..." }),
26762
+ operationId && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
26763
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: "Operation:" }),
26764
+ /* @__PURE__ */ jsx52(Text44, { children: operationId })
26749
26765
  ] }),
26750
- showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx51(Box40, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs41(Box40, { gap: 2, children: [
26751
- /* @__PURE__ */ jsx51(Box40, { width: 40, children: /* @__PURE__ */ jsx51(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx51(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
26752
- /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.muted, children: [
26766
+ showGlobal && progress && progress.kind === "progress" && /* @__PURE__ */ jsx52(Box41, { gap: 1, flexDirection: "column", children: /* @__PURE__ */ jsxs42(Box41, { gap: 2, children: [
26767
+ /* @__PURE__ */ jsx52(Box41, { width: 40, children: /* @__PURE__ */ jsx52(ThemeProvider2, { theme: PROGRESS_THEME, children: /* @__PURE__ */ jsx52(ProgressBar2, { value: Math.round(progress.processed / progress.total * 100) }) }) }),
26768
+ /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
26753
26769
  progress.processed,
26754
26770
  "/",
26755
26771
  progress.total,
26756
26772
  " entities"
26757
26773
  ] })
26758
26774
  ] }) }),
26759
- showCurrent && /* @__PURE__ */ jsxs41(Box40, { gap: 1, children: [
26760
- /* @__PURE__ */ jsx51(Text43, { color: PALETTE.muted, children: "Now processing:" }),
26761
- /* @__PURE__ */ jsx51(Text43, { children: showCurrent })
26775
+ showCurrent && /* @__PURE__ */ jsxs42(Box41, { gap: 1, children: [
26776
+ /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: "Now processing:" }),
26777
+ /* @__PURE__ */ jsx52(Text44, { children: showCurrent })
26762
26778
  ] }),
26763
- /* @__PURE__ */ jsx51(Box40, { marginTop: 1, children: /* @__PURE__ */ jsxs41(Text43, { color: PALETTE.muted, children: [
26779
+ /* @__PURE__ */ jsx52(Box41, { marginTop: 1, children: /* @__PURE__ */ jsxs42(Text44, { color: PALETTE.muted, children: [
26764
26780
  "Elapsed: ",
26765
26781
  elapsed
26766
26782
  ] }) })
@@ -26769,7 +26785,7 @@ function PushingStep({ stepNumber, totalSteps, progress }) {
26769
26785
 
26770
26786
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
26771
26787
  import { useEffect as useEffect20, useState as useState28, useMemo as useMemo5 } from "react";
26772
- import { Box as Box41, Text as Text44 } from "ink";
26788
+ import { Box as Box42, Text as Text45 } from "ink";
26773
26789
 
26774
26790
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/support/preview-diff.ts
26775
26791
  function computeComponentDiffLines(current, proposed, changeClassification) {
@@ -26943,7 +26959,7 @@ function usePreviewConfirmationInput(breakingWithImpact, onConfirm) {
26943
26959
  }
26944
26960
 
26945
26961
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/screens/WizardPreviewStep.tsx
26946
- import { Fragment as Fragment15, jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
26962
+ import { Fragment as Fragment16, jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
26947
26963
  function buildPreviewSummaryLines(preview) {
26948
26964
  const lines = [];
26949
26965
  const { components, tokens } = preview;
@@ -27197,11 +27213,11 @@ function WizardPreviewStep({
27197
27213
  return;
27198
27214
  }
27199
27215
  });
27200
- return /* @__PURE__ */ jsxs42(Box41, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 2, children: [
27201
- /* @__PURE__ */ jsx52(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
27202
- hasAnything ? /* @__PURE__ */ jsxs42(Fragment15, { children: [
27203
- /* @__PURE__ */ jsx52(Text44, { children: "Here's what will happen in your space:" }),
27204
- /* @__PURE__ */ jsxs42(
27216
+ return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", gap: 1, paddingX: 2, paddingY: 2, children: [
27217
+ /* @__PURE__ */ jsx53(StepHeader, { stepNumber, totalSteps, title: "Push to Contentful" }),
27218
+ hasAnything ? /* @__PURE__ */ jsxs43(Fragment16, { children: [
27219
+ /* @__PURE__ */ jsx53(Text45, { children: "Here's what will happen in your space:" }),
27220
+ /* @__PURE__ */ jsxs43(
27205
27221
  WindowedPanel,
27206
27222
  {
27207
27223
  width: Math.max(20, terminalColumns - 4),
@@ -27209,24 +27225,24 @@ function WizardPreviewStep({
27209
27225
  title: diffExpanded ? `Diff (${diffLines.length} lines)` : "",
27210
27226
  focused: false,
27211
27227
  children: [
27212
- activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx52(Text44, { color: line.color === "gray" ? PALETTE.muted : line.color, wrap: "truncate-end", children: line.text }, line.key)),
27213
- /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
27228
+ activeLines.slice(boundedScrollOffset, boundedScrollOffset + viewportHeight).map((line) => /* @__PURE__ */ jsx53(Text45, { color: line.color === "gray" ? PALETTE.muted : line.color, wrap: "truncate-end", children: line.text }, line.key)),
27229
+ /* @__PURE__ */ jsx53(Text45, { color: PALETTE.muted, wrap: "truncate-end", children: formatPreviewScrollIndicator(activeLines.length, boundedScrollOffset, viewportHeight) })
27214
27230
  ]
27215
27231
  }
27216
27232
  )
27217
- ] }) : /* @__PURE__ */ jsx52(Text44, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
27218
- breakingWithImpact && /* @__PURE__ */ jsx52(Box41, { marginTop: 1, children: /* @__PURE__ */ jsx52(Text44, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
27219
- /* @__PURE__ */ jsx52(SpaceEnvironment, { spaceId, environmentId }),
27220
- /* @__PURE__ */ jsxs42(Box41, { gap: 3, marginTop: 1, children: [
27221
- /* @__PURE__ */ jsx52(Text44, { children: "[Enter] Push to Contentful" }),
27222
- /* @__PURE__ */ jsxs42(Text44, { children: [
27233
+ ] }) : /* @__PURE__ */ jsx53(Text45, { color: PALETTE.muted, children: "Nothing to push \u2014 everything is already up to date." }),
27234
+ breakingWithImpact && /* @__PURE__ */ jsx53(Box42, { marginTop: 1, children: /* @__PURE__ */ jsx53(Text45, { color: PALETTE.error, bold: true, children: "\u26A0 Breaking changes will affect downstream entities. Press Enter to acknowledge and apply." }) }),
27235
+ /* @__PURE__ */ jsx53(SpaceEnvironment, { spaceId, environmentId }),
27236
+ /* @__PURE__ */ jsxs43(Box42, { gap: 3, marginTop: 1, children: [
27237
+ /* @__PURE__ */ jsx53(Text45, { children: "[Enter] Push to Contentful" }),
27238
+ /* @__PURE__ */ jsxs43(Text45, { children: [
27223
27239
  "[d] ",
27224
27240
  diffExpanded ? "Hide" : "Show",
27225
27241
  " diff"
27226
27242
  ] }),
27227
- diffExpanded && /* @__PURE__ */ jsx52(Text44, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
27228
- onEdit && /* @__PURE__ */ jsx52(Text44, { children: "[e] Edit definitions" }),
27229
- /* @__PURE__ */ jsx52(Text44, { children: "[q] Cancel" })
27243
+ diffExpanded && /* @__PURE__ */ jsx53(Text45, { children: "[\u2191\u2193] Scroll [f/b] Page" }),
27244
+ onEdit && /* @__PURE__ */ jsx53(Text45, { children: "[e] Edit definitions" }),
27245
+ /* @__PURE__ */ jsx53(Text45, { children: "[q] Cancel" })
27230
27246
  ] })
27231
27247
  ] });
27232
27248
  }
@@ -27238,9 +27254,9 @@ function buildRunTeaserLine(runId) {
27238
27254
  }
27239
27255
 
27240
27256
  // packages/experience-design-system-cli/src/tui/import/steps/10-flow/flow/screen.tsx
27241
- import { jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
27257
+ import { jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
27242
27258
  function totalStepsFor(state2) {
27243
- if (!state2.extractSessionId) return 2;
27259
+ if (!state2.extractSessionId) return TOKENS_ONLY_STEP_COUNT;
27244
27260
  const hasTokenStage = !!state2.tokensPath || !!state2.rawTokensPath;
27245
27261
  return 3 + (hasTokenStage ? 1 : 0) + 2 + (state2.mapTokensEligible === true ? 1 : 0);
27246
27262
  }
@@ -27260,7 +27276,7 @@ function FlowScreen({
27260
27276
  const content = (() => {
27261
27277
  switch (state2.step) {
27262
27278
  case "final-review":
27263
- return /* @__PURE__ */ jsx53(
27279
+ return /* @__PURE__ */ jsx54(
27264
27280
  GenerateReviewStep,
27265
27281
  {
27266
27282
  extractSessionId: state2.extractSessionId,
@@ -27277,7 +27293,7 @@ function FlowScreen({
27277
27293
  }
27278
27294
  );
27279
27295
  case "previewing":
27280
- return /* @__PURE__ */ jsx53(
27296
+ return /* @__PURE__ */ jsx54(
27281
27297
  RunningStep,
27282
27298
  {
27283
27299
  stepNumber: totalSteps,
@@ -27288,7 +27304,7 @@ function FlowScreen({
27288
27304
  );
27289
27305
  case "preview-gate":
27290
27306
  if (!state2.serverPreview) return null;
27291
- return /* @__PURE__ */ jsx53(
27307
+ return /* @__PURE__ */ jsx54(
27292
27308
  WizardPreviewStep,
27293
27309
  {
27294
27310
  preview: state2.serverPreview,
@@ -27302,9 +27318,9 @@ function FlowScreen({
27302
27318
  }
27303
27319
  );
27304
27320
  case "pushing":
27305
- return /* @__PURE__ */ jsx53(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
27321
+ return /* @__PURE__ */ jsx54(PushingStep, { stepNumber: totalSteps, totalSteps, progress: state2.pushProgress });
27306
27322
  case "path-prompt":
27307
- return /* @__PURE__ */ jsx53(
27323
+ return /* @__PURE__ */ jsx54(
27308
27324
  PathPrompt,
27309
27325
  {
27310
27326
  defaultPath: state2.outDir,
@@ -27313,7 +27329,7 @@ function FlowScreen({
27313
27329
  }
27314
27330
  );
27315
27331
  case "printing":
27316
- return /* @__PURE__ */ jsx53(
27332
+ return /* @__PURE__ */ jsx54(
27317
27333
  RunningStep,
27318
27334
  {
27319
27335
  stepNumber: totalSteps,
@@ -27324,7 +27340,7 @@ function FlowScreen({
27324
27340
  );
27325
27341
  case "print-gate": {
27326
27342
  const teaser = buildRunTeaserLine(state2.lastRunId);
27327
- return /* @__PURE__ */ jsx53(
27343
+ return /* @__PURE__ */ jsx54(
27328
27344
  GateStep,
27329
27345
  {
27330
27346
  message: "Files saved",
@@ -27338,7 +27354,7 @@ function FlowScreen({
27338
27354
  }
27339
27355
  case "done": {
27340
27356
  const totalFailed = state2.pushResult.componentTypes.failed + state2.pushResult.designTokens.failed;
27341
- return /* @__PURE__ */ jsx53(
27357
+ return /* @__PURE__ */ jsx54(
27342
27358
  DoneStep,
27343
27359
  {
27344
27360
  componentTypes: state2.pushResult.componentTypes,
@@ -27353,7 +27369,7 @@ function FlowScreen({
27353
27369
  );
27354
27370
  }
27355
27371
  case "preview-validation-error":
27356
- return /* @__PURE__ */ jsx53(
27372
+ return /* @__PURE__ */ jsx54(
27357
27373
  PreviewValidationErrorScreen,
27358
27374
  {
27359
27375
  errors: state2.previewValidationErrors,
@@ -27364,7 +27380,7 @@ function FlowScreen({
27364
27380
  }
27365
27381
  );
27366
27382
  case "error":
27367
- return /* @__PURE__ */ jsx53(
27383
+ return /* @__PURE__ */ jsx54(
27368
27384
  ErrorStep,
27369
27385
  {
27370
27386
  stepName: state2.errorStep,
@@ -27375,8 +27391,8 @@ function FlowScreen({
27375
27391
  );
27376
27392
  }
27377
27393
  })();
27378
- return /* @__PURE__ */ jsxs43(Box42, { flexDirection: "column", children: [
27379
- /* @__PURE__ */ jsx53(CustomPromptBanner, { generatePromptPath }),
27394
+ return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", children: [
27395
+ /* @__PURE__ */ jsx54(CustomPromptBanner, { generatePromptPath }),
27380
27396
  content
27381
27397
  ] });
27382
27398
  }
@@ -28149,7 +28165,7 @@ function useFlow(start, options = {}) {
28149
28165
 
28150
28166
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28151
28167
  import { useEffect as useEffect22, useState as useState29 } from "react";
28152
- import { Box as Box43, Text as Text45, useInput as useInput11 } from "ink";
28168
+ import { Box as Box44, Text as Text46, useInput as useInput11 } from "ink";
28153
28169
  init_debug_store();
28154
28170
 
28155
28171
  // packages/experience-design-system-cli/src/tui/help/help-info.ts
@@ -28210,13 +28226,13 @@ async function readHelpInfo() {
28210
28226
  }
28211
28227
 
28212
28228
  // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
28213
- import { Fragment as Fragment16, jsx as jsx54, jsxs as jsxs44 } from "react/jsx-runtime";
28229
+ import { Fragment as Fragment17, jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
28214
28230
  function Section({ title, rows }) {
28215
- return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", children: [
28216
- /* @__PURE__ */ jsx54(Text45, { bold: true, color: PALETTE.accent, children: title }),
28217
- rows.map((row) => /* @__PURE__ */ jsxs44(Box43, { gap: 1, children: [
28218
- /* @__PURE__ */ jsx54(Box43, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx54(Text45, { color: PALETTE.muted, children: row.label }) }),
28219
- /* @__PURE__ */ jsx54(Text45, { children: row.value })
28231
+ return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", children: [
28232
+ /* @__PURE__ */ jsx55(Text46, { bold: true, color: PALETTE.accent, children: title }),
28233
+ rows.map((row) => /* @__PURE__ */ jsxs45(Box44, { gap: 1, children: [
28234
+ /* @__PURE__ */ jsx55(Box44, { width: 16, flexShrink: 0, children: /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: row.label }) }),
28235
+ /* @__PURE__ */ jsx55(Text46, { children: row.value })
28220
28236
  ] }, row.label))
28221
28237
  ] });
28222
28238
  }
@@ -28240,14 +28256,14 @@ function HelpScreen({ onDone }) {
28240
28256
  return;
28241
28257
  }
28242
28258
  });
28243
- return /* @__PURE__ */ jsxs44(Box43, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
28244
- /* @__PURE__ */ jsx54(Text45, { bold: true, children: "Help" }),
28245
- info ? /* @__PURE__ */ jsxs44(Fragment16, { children: [
28246
- /* @__PURE__ */ jsx54(Section, { title: "Where things are stored", rows: info.storage }),
28247
- /* @__PURE__ */ jsx54(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
28248
- /* @__PURE__ */ jsx54(Text45, { 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." })
28249
- ] }) : /* @__PURE__ */ jsx54(Text45, { color: PALETTE.accent, children: "Loading..." }),
28250
- /* @__PURE__ */ jsx54(
28259
+ return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, gap: 1, children: [
28260
+ /* @__PURE__ */ jsx55(Text46, { bold: true, children: "Help" }),
28261
+ info ? /* @__PURE__ */ jsxs45(Fragment17, { children: [
28262
+ /* @__PURE__ */ jsx55(Section, { title: "Where things are stored", rows: info.storage }),
28263
+ /* @__PURE__ */ jsx55(Section, { title: "Troubleshooting", rows: info.troubleshooting }),
28264
+ /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: "Hit a problem? Turn on Debug Mode in Settings, reproduce it, then share the session folder above. The CMA token is redacted from those logs." })
28265
+ ] }) : /* @__PURE__ */ jsx55(Text46, { color: PALETTE.accent, children: "Loading..." }),
28266
+ /* @__PURE__ */ jsx55(
28251
28267
  ControlHints,
28252
28268
  {
28253
28269
  hints: [
@@ -28261,8 +28277,8 @@ function HelpScreen({ onDone }) {
28261
28277
 
28262
28278
  // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
28263
28279
  import { useState as useState30 } from "react";
28264
- import { Box as Box44, Text as Text46, useInput as useInput12 } from "ink";
28265
- import { jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
28280
+ import { Box as Box45, Text as Text47, useInput as useInput12 } from "ink";
28281
+ import { jsx as jsx56, jsxs as jsxs46 } from "react/jsx-runtime";
28266
28282
  function SettingsScreen({
28267
28283
  onNavigate,
28268
28284
  onBack
@@ -28293,15 +28309,15 @@ function SettingsScreen({
28293
28309
  onBack();
28294
28310
  }
28295
28311
  });
28296
- return /* @__PURE__ */ jsxs45(Box44, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28297
- /* @__PURE__ */ jsx55(Text46, { bold: true, children: "Settings" }),
28298
- /* @__PURE__ */ jsx55(Text46, { color: PALETTE.muted, children: " " }),
28299
- items.map((item, i) => /* @__PURE__ */ jsxs45(Text46, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
28312
+ return /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28313
+ /* @__PURE__ */ jsx56(Text47, { bold: true, children: "Settings" }),
28314
+ /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: " " }),
28315
+ items.map((item, i) => /* @__PURE__ */ jsxs46(Text47, { color: i === focusIdx ? PALETTE.accent : void 0, children: [
28300
28316
  i === focusIdx ? "> " : " ",
28301
28317
  item.label
28302
28318
  ] }, item.label)),
28303
- /* @__PURE__ */ jsx55(Text46, { children: " " }),
28304
- /* @__PURE__ */ jsx55(
28319
+ /* @__PURE__ */ jsx56(Text47, { children: " " }),
28320
+ /* @__PURE__ */ jsx56(
28305
28321
  ControlHints,
28306
28322
  {
28307
28323
  hints: [
@@ -28316,11 +28332,11 @@ function SettingsScreen({
28316
28332
 
28317
28333
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
28318
28334
  import { useState as useState35 } from "react";
28319
- import { Box as Box49, Text as Text52, useInput as useInput16 } from "ink";
28335
+ import { Box as Box50, Text as Text53, useInput as useInput16 } from "ink";
28320
28336
 
28321
28337
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
28322
28338
  import { useEffect as useEffect24, useRef as useRef15, useState as useState33 } from "react";
28323
- import { Box as Box47, Text as Text50, useInput as useInput14 } from "ink";
28339
+ import { Box as Box48, Text as Text51, useInput as useInput14 } from "ink";
28324
28340
  init_debug_store();
28325
28341
 
28326
28342
  // packages/experience-design-system-cli/src/tui/settings/shared/debug-trail.ts
@@ -28649,12 +28665,12 @@ async function writeAgentConfig(config) {
28649
28665
 
28650
28666
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
28651
28667
  import { useEffect as useEffect23, useState as useState32 } from "react";
28652
- import { Box as Box46, Text as Text49 } from "ink";
28668
+ import { Box as Box47, Text as Text50 } from "ink";
28653
28669
 
28654
28670
  // packages/experience-design-system-cli/src/tui/settings/shared/FieldForm.tsx
28655
28671
  import { useState as useState31 } from "react";
28656
- import { Box as Box45, Text as Text47, useInput as useInput13 } from "ink";
28657
- import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs46 } from "react/jsx-runtime";
28672
+ import { Box as Box46, Text as Text48, useInput as useInput13 } from "ink";
28673
+ import { Fragment as Fragment18, jsx as jsx57, jsxs as jsxs47 } from "react/jsx-runtime";
28658
28674
  function formLabelWidth(rows) {
28659
28675
  return Math.max(...rows.map((row) => row.label.length));
28660
28676
  }
@@ -28663,9 +28679,9 @@ function FormReadOnlyRow({
28663
28679
  labelWidth,
28664
28680
  children
28665
28681
  }) {
28666
- return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
28667
- /* @__PURE__ */ jsx56(Text47, { children: " " }),
28668
- /* @__PURE__ */ jsx56(Box45, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: label }) }),
28682
+ return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28683
+ /* @__PURE__ */ jsx57(Text48, { children: " " }),
28684
+ /* @__PURE__ */ jsx57(Box46, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: label }) }),
28669
28685
  children
28670
28686
  ] });
28671
28687
  }
@@ -28727,20 +28743,20 @@ function FieldForm({
28727
28743
  }
28728
28744
  }
28729
28745
  });
28730
- const pointer = (isActive) => /* @__PURE__ */ jsx56(Text47, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
28731
- return /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28732
- /* @__PURE__ */ jsx56(Text47, { bold: true, children: title }),
28733
- subtitle && /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: subtitle }),
28734
- /* @__PURE__ */ jsx56(Text47, { children: " " }),
28735
- /* @__PURE__ */ jsxs46(Box45, { flexDirection: "column", children: [
28746
+ const pointer = (isActive) => /* @__PURE__ */ jsx57(Text48, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " });
28747
+ return /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
28748
+ /* @__PURE__ */ jsx57(Text48, { bold: true, children: title }),
28749
+ subtitle && /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: subtitle }),
28750
+ /* @__PURE__ */ jsx57(Text48, { children: " " }),
28751
+ /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", children: [
28736
28752
  fields2.map((field, index) => {
28737
28753
  const isActive = index === active;
28738
28754
  const value = values[field.key];
28739
28755
  const display = field.masked ? "\u2022".repeat(value.length) : value;
28740
- return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
28756
+ return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28741
28757
  pointer(isActive),
28742
- /* @__PURE__ */ jsx56(Box45, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text47, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
28743
- isActive && editing ? /* @__PURE__ */ jsx56(
28758
+ /* @__PURE__ */ jsx57(Box46, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx57(Text48, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: field.label }) }),
28759
+ isActive && editing ? /* @__PURE__ */ jsx57(
28744
28760
  ClearableTextInput,
28745
28761
  {
28746
28762
  value,
@@ -28748,34 +28764,34 @@ function FieldForm({
28748
28764
  onSubmit: () => setEditing(false),
28749
28765
  mask: field.masked ? "\u2022" : void 0
28750
28766
  }
28751
- ) : display ? /* @__PURE__ */ jsx56(Text47, { bold: true, children: display }) : (
28767
+ ) : display ? /* @__PURE__ */ jsx57(Text48, { bold: true, children: display }) : (
28752
28768
  // An empty value shows its hint (or "(empty)") in the value's place, not after an empty element, so the
28753
28769
  // text starts in the same column as every other row's.
28754
- /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
28770
+ /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: field.hint ?? "(empty)" })
28755
28771
  ),
28756
- display && field.hint && /* @__PURE__ */ jsx56(Text47, { color: PALETTE.muted, children: field.hint })
28772
+ display && field.hint && /* @__PURE__ */ jsx57(Text48, { color: PALETTE.muted, children: field.hint })
28757
28773
  ] }, field.key);
28758
28774
  }),
28759
28775
  actions.map((action, index) => {
28760
28776
  const isActive = fields2.length + index === active;
28761
- return /* @__PURE__ */ jsxs46(Box45, { gap: 1, children: [
28777
+ return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28762
28778
  pointer(isActive),
28763
- /* @__PURE__ */ jsx56(Box45, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx56(Text47, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
28764
- /* @__PURE__ */ jsx56(Text47, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
28779
+ /* @__PURE__ */ jsx57(Box46, { width: labelWidth, flexShrink: 0, children: /* @__PURE__ */ jsx57(Text48, { bold: isActive, color: isActive ? PALETTE.accent : PALETTE.muted, children: action.label }) }),
28780
+ /* @__PURE__ */ jsx57(Text48, { color: action.running ? PALETTE.accent : PALETTE.muted, children: action.running ? action.runningText ?? "running..." : action.description })
28765
28781
  ] }, action.label);
28766
28782
  })
28767
28783
  ] }),
28768
- notice && /* @__PURE__ */ jsxs46(Fragment17, { children: [
28769
- /* @__PURE__ */ jsx56(Text47, { children: " " }),
28770
- /* @__PURE__ */ jsxs46(Text47, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
28784
+ notice && /* @__PURE__ */ jsxs47(Fragment18, { children: [
28785
+ /* @__PURE__ */ jsx57(Text48, { children: " " }),
28786
+ /* @__PURE__ */ jsxs47(Text48, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
28771
28787
  notice.kind === "success" ? "\u2713" : "\u2717",
28772
28788
  " ",
28773
28789
  notice.text
28774
28790
  ] })
28775
28791
  ] }),
28776
28792
  children,
28777
- /* @__PURE__ */ jsx56(Text47, { children: " " }),
28778
- /* @__PURE__ */ jsx56(
28793
+ /* @__PURE__ */ jsx57(Text48, { children: " " }),
28794
+ /* @__PURE__ */ jsx57(
28779
28795
  ControlHints,
28780
28796
  {
28781
28797
  hints: editing ? [
@@ -28797,8 +28813,8 @@ function FieldForm({
28797
28813
  }
28798
28814
 
28799
28815
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentStatusBadge.tsx
28800
- import { Text as Text48 } from "ink";
28801
- import { jsx as jsx57 } from "react/jsx-runtime";
28816
+ import { Text as Text49 } from "ink";
28817
+ import { jsx as jsx58 } from "react/jsx-runtime";
28802
28818
  var TONE_COLOR = {
28803
28819
  ok: PALETTE.success,
28804
28820
  bad: PALETTE.error,
@@ -28810,7 +28826,7 @@ function AgentStatusBadge({
28810
28826
  binary
28811
28827
  }) {
28812
28828
  const { symbol, text, tone } = LIST_STATUS[checks ? statusFromChecks(name, checks, binary) : "checking"];
28813
- return /* @__PURE__ */ jsx57(Text48, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
28829
+ return /* @__PURE__ */ jsx58(Text49, { color: TONE_COLOR[tone], children: `${symbol} ${text}` });
28814
28830
  }
28815
28831
 
28816
28832
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/apply-binary-overrides.ts
@@ -28832,16 +28848,16 @@ function applyBinaryOverrides(config) {
28832
28848
  }
28833
28849
 
28834
28850
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentDetail.tsx
28835
- import { jsx as jsx58, jsxs as jsxs47 } from "react/jsx-runtime";
28851
+ import { jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
28836
28852
  var fields = (name) => [
28837
28853
  { key: "binary", label: "Command path", hint: `(empty: \`${AGENT_BINARIES[name]}\` from the PATH)` },
28838
28854
  { key: "model", label: "Model", hint: `(empty: ${defaultModelLabel(name)})` }
28839
28855
  ];
28840
28856
  var INSPECT_DELAY_MS = 400;
28841
28857
  function StatusHeading() {
28842
- return /* @__PURE__ */ jsxs47(Box46, { gap: 1, children: [
28843
- /* @__PURE__ */ jsx58(Text49, { bold: true, color: PALETTE.muted, children: "STATUS" }),
28844
- /* @__PURE__ */ jsx58(Text49, { color: PALETTE.muted, children: "\xB7 read only" })
28858
+ return /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
28859
+ /* @__PURE__ */ jsx59(Text50, { bold: true, color: PALETTE.muted, children: "STATUS" }),
28860
+ /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: "\xB7 read only" })
28845
28861
  ] });
28846
28862
  }
28847
28863
  function AgentDetail({
@@ -28904,7 +28920,7 @@ function AgentDetail({
28904
28920
  };
28905
28921
  const formFields = fields(name);
28906
28922
  const labelWidth = formLabelWidth([...formFields, action]);
28907
- return /* @__PURE__ */ jsx58(
28923
+ return /* @__PURE__ */ jsx59(
28908
28924
  FieldForm,
28909
28925
  {
28910
28926
  title: AGENT_LABELS[name],
@@ -28921,16 +28937,16 @@ function AgentDetail({
28921
28937
  actions: [action],
28922
28938
  notice: testing ? null : notice,
28923
28939
  busy: saving || testing,
28924
- children: /* @__PURE__ */ jsxs47(Box46, { flexDirection: "column", marginTop: 1, children: [
28925
- /* @__PURE__ */ jsx58(StatusHeading, {}),
28926
- statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx58(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx58(Text49, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
28940
+ children: /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", marginTop: 1, children: [
28941
+ /* @__PURE__ */ jsx59(StatusHeading, {}),
28942
+ statusRows(name, checks, settings.binary).map((row) => /* @__PURE__ */ jsx59(FormReadOnlyRow, { label: row.label, labelWidth, children: /* @__PURE__ */ jsx59(Text50, { color: TONE_COLOR[row.tone], children: row.value }) }, row.label))
28927
28943
  ] })
28928
28944
  }
28929
28945
  );
28930
28946
  }
28931
28947
 
28932
28948
  // packages/experience-design-system-cli/src/tui/settings/configuration/agents/AgentsScreen.tsx
28933
- import { Fragment as Fragment18, jsx as jsx59, jsxs as jsxs48 } from "react/jsx-runtime";
28949
+ import { Fragment as Fragment19, jsx as jsx60, jsxs as jsxs49 } from "react/jsx-runtime";
28934
28950
  var NAME_WIDTH = 16;
28935
28951
  var PANEL_LABEL_WIDTH = "Command".length;
28936
28952
  function AgentsScreen({ onDone }) {
@@ -29040,21 +29056,21 @@ function AgentsScreen({ onDone }) {
29040
29056
  }
29041
29057
  });
29042
29058
  if (!config) {
29043
- return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29044
- /* @__PURE__ */ jsx59(Text50, { bold: true, children: "Agents" }),
29045
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29046
- loadError ? /* @__PURE__ */ jsxs48(Fragment18, { children: [
29047
- /* @__PURE__ */ jsxs48(Text50, { color: PALETTE.error, children: [
29059
+ return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29060
+ /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Agents" }),
29061
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29062
+ loadError ? /* @__PURE__ */ jsxs49(Fragment19, { children: [
29063
+ /* @__PURE__ */ jsxs49(Text51, { color: PALETTE.error, children: [
29048
29064
  "\u2717 Could not read the settings: ",
29049
29065
  loadError
29050
29066
  ] }),
29051
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29052
- /* @__PURE__ */ jsx59(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29053
- ] }) : /* @__PURE__ */ jsx59(Text50, { color: PALETTE.accent, children: "Loading..." })
29067
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29068
+ /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29069
+ ] }) : /* @__PURE__ */ jsx60(Text51, { color: PALETTE.accent, children: "Loading..." })
29054
29070
  ] });
29055
29071
  }
29056
29072
  if (open) {
29057
- return /* @__PURE__ */ jsx59(
29073
+ return /* @__PURE__ */ jsx60(
29058
29074
  AgentDetail,
29059
29075
  {
29060
29076
  name: open,
@@ -29075,47 +29091,47 @@ function AgentsScreen({ onDone }) {
29075
29091
  );
29076
29092
  }
29077
29093
  const focusedAgent = AGENT_NAMES[focus];
29078
- return /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29079
- /* @__PURE__ */ jsx59(Text50, { bold: true, children: "Agents" }),
29080
- /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
29081
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29082
- /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
29083
- /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: "Default agent" }),
29084
- /* @__PURE__ */ jsx59(Text50, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
29085
- saving && /* @__PURE__ */ jsx59(Text50, { color: PALETTE.accent, children: "\u2026 saving" })
29094
+ return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29095
+ /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Agents" }),
29096
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: "The coding agent the CLI runs, and what was found for each one." }),
29097
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29098
+ /* @__PURE__ */ jsxs49(Box48, { gap: 1, children: [
29099
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: "Default agent" }),
29100
+ /* @__PURE__ */ jsx60(Text51, { bold: true, children: AGENT_LABELS[config.defaultAgent] }),
29101
+ saving && /* @__PURE__ */ jsx60(Text51, { color: PALETTE.accent, children: "\u2026 saving" })
29086
29102
  ] }),
29087
- /* @__PURE__ */ jsxs48(Box47, { marginTop: 1, gap: 1, children: [
29088
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29089
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29090
- /* @__PURE__ */ jsx59(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: "AGENT" }) }),
29091
- /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: "STATUS" })
29103
+ /* @__PURE__ */ jsxs49(Box48, { marginTop: 1, gap: 1, children: [
29104
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29105
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29106
+ /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: "AGENT" }) }),
29107
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: "STATUS" })
29092
29108
  ] }),
29093
29109
  AGENT_NAMES.map((name) => {
29094
29110
  const isFocused = focusedAgent === name;
29095
- return /* @__PURE__ */ jsxs48(Box47, { gap: 1, children: [
29096
- /* @__PURE__ */ jsx59(Text50, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
29097
- /* @__PURE__ */ jsx59(Text50, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
29098
- /* @__PURE__ */ jsx59(Box47, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text50, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
29099
- /* @__PURE__ */ jsx59(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
29111
+ return /* @__PURE__ */ jsxs49(Box48, { gap: 1, children: [
29112
+ /* @__PURE__ */ jsx60(Text51, { color: isFocused ? PALETTE.accent : void 0, children: isFocused ? "\u276F" : " " }),
29113
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.success, children: name === config.defaultAgent ? "\u2605" : " " }),
29114
+ /* @__PURE__ */ jsx60(Box48, { width: NAME_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { bold: isFocused, color: isFocused ? PALETTE.accent : void 0, children: AGENT_LABELS[name] }) }),
29115
+ /* @__PURE__ */ jsx60(AgentStatusBadge, { name, checks: checks[name], binary: config.agents[name].binary })
29100
29116
  ] }, name);
29101
29117
  }),
29102
- /* @__PURE__ */ jsxs48(Box47, { flexDirection: "column", marginTop: 1, children: [
29103
- /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
29104
- panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs48(Box47, { gap: 1, paddingLeft: 1, children: [
29105
- /* @__PURE__ */ jsx59(Box47, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx59(Text50, { color: PALETTE.muted, children: row.label }) }),
29106
- /* @__PURE__ */ jsx59(Text50, { color: TONE_COLOR[row.tone], children: row.value })
29118
+ /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", marginTop: 1, children: [
29119
+ /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: `\u2500 ${AGENT_LABELS[focusedAgent]} ${"\u2500".repeat(30)}` }),
29120
+ panelRows(focusedAgent, checks[focusedAgent], config.agents[focusedAgent]).map((row) => /* @__PURE__ */ jsxs49(Box48, { gap: 1, paddingLeft: 1, children: [
29121
+ /* @__PURE__ */ jsx60(Box48, { width: PANEL_LABEL_WIDTH, flexShrink: 0, children: /* @__PURE__ */ jsx60(Text51, { color: PALETTE.muted, children: row.label }) }),
29122
+ /* @__PURE__ */ jsx60(Text51, { color: TONE_COLOR[row.tone], children: row.value })
29107
29123
  ] }, row.label))
29108
29124
  ] }),
29109
- notice && /* @__PURE__ */ jsxs48(Fragment18, { children: [
29110
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29111
- /* @__PURE__ */ jsxs48(Text50, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29125
+ notice && /* @__PURE__ */ jsxs49(Fragment19, { children: [
29126
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29127
+ /* @__PURE__ */ jsxs49(Text51, { bold: true, color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29112
29128
  notice.kind === "success" ? "\u2713" : "\u2717",
29113
29129
  " ",
29114
29130
  notice.text
29115
29131
  ] })
29116
29132
  ] }),
29117
- /* @__PURE__ */ jsx59(Text50, { children: " " }),
29118
- /* @__PURE__ */ jsx59(
29133
+ /* @__PURE__ */ jsx60(Text51, { children: " " }),
29134
+ /* @__PURE__ */ jsx60(
29119
29135
  ControlHints,
29120
29136
  {
29121
29137
  hints: [
@@ -29131,7 +29147,7 @@ function AgentsScreen({ onDone }) {
29131
29147
 
29132
29148
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
29133
29149
  import { useEffect as useEffect25, useRef as useRef16, useState as useState34 } from "react";
29134
- import { Box as Box48, Text as Text51, useInput as useInput15 } from "ink";
29150
+ import { Box as Box49, Text as Text52, useInput as useInput15 } from "ink";
29135
29151
  init_debug_store();
29136
29152
 
29137
29153
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/project-store.ts
@@ -29160,7 +29176,7 @@ async function writeCredentials(config) {
29160
29176
  }
29161
29177
 
29162
29178
  // packages/experience-design-system-cli/src/tui/settings/configuration/project/ProjectScreen.tsx
29163
- import { Fragment as Fragment19, jsx as jsx60, jsxs as jsxs49 } from "react/jsx-runtime";
29179
+ import { Fragment as Fragment20, jsx as jsx61, jsxs as jsxs50 } from "react/jsx-runtime";
29164
29180
  var FIELDS2 = [
29165
29181
  { key: "spaceId", label: "Space ID" },
29166
29182
  { key: "environmentId", label: "Environment ID" },
@@ -29240,17 +29256,17 @@ function ProjectScreen({ onDone }) {
29240
29256
  }
29241
29257
  });
29242
29258
  if (!config) {
29243
- return /* @__PURE__ */ jsxs49(Box48, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29244
- /* @__PURE__ */ jsx60(Text51, { bold: true, children: "Project" }),
29245
- /* @__PURE__ */ jsx60(Text51, { children: " " }),
29246
- loadError ? /* @__PURE__ */ jsxs49(Fragment19, { children: [
29247
- /* @__PURE__ */ jsxs49(Text51, { color: PALETTE.error, children: [
29259
+ return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29260
+ /* @__PURE__ */ jsx61(Text52, { bold: true, children: "Project" }),
29261
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
29262
+ loadError ? /* @__PURE__ */ jsxs50(Fragment20, { children: [
29263
+ /* @__PURE__ */ jsxs50(Text52, { color: PALETTE.error, children: [
29248
29264
  "\u2717 Could not read the settings: ",
29249
29265
  loadError
29250
29266
  ] }),
29251
- /* @__PURE__ */ jsx60(Text51, { children: " " }),
29252
- /* @__PURE__ */ jsx60(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29253
- ] }) : /* @__PURE__ */ jsx60(Text51, { color: PALETTE.accent, children: "Loading..." })
29267
+ /* @__PURE__ */ jsx61(Text52, { children: " " }),
29268
+ /* @__PURE__ */ jsx61(ControlHints, { hints: [{ keys: "Esc/q", label: "back" }] })
29269
+ ] }) : /* @__PURE__ */ jsx61(Text52, { color: PALETTE.accent, children: "Loading..." })
29254
29270
  ] });
29255
29271
  }
29256
29272
  const save = () => {
@@ -29271,7 +29287,7 @@ function ProjectScreen({ onDone }) {
29271
29287
  endVisit(config);
29272
29288
  onDone();
29273
29289
  };
29274
- return /* @__PURE__ */ jsx60(
29290
+ return /* @__PURE__ */ jsx61(
29275
29291
  FieldForm,
29276
29292
  {
29277
29293
  title: "Project",
@@ -29292,7 +29308,7 @@ function ProjectScreen({ onDone }) {
29292
29308
  }
29293
29309
 
29294
29310
  // packages/experience-design-system-cli/src/tui/settings/configuration/ConfigurationScreen.tsx
29295
- import { jsx as jsx61, jsxs as jsxs50 } from "react/jsx-runtime";
29311
+ import { jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
29296
29312
  var SECTIONS = [
29297
29313
  {
29298
29314
  id: "project",
@@ -29321,18 +29337,18 @@ function ConfigurationScreen({ onDone }) {
29321
29337
  }
29322
29338
  if (key.escape || input === "q") onDone();
29323
29339
  });
29324
- if (open === "project") return /* @__PURE__ */ jsx61(ProjectScreen, { onDone: close });
29325
- if (open === "agents") return /* @__PURE__ */ jsx61(AgentsScreen, { onDone: close });
29326
- return /* @__PURE__ */ jsxs50(Box49, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29327
- /* @__PURE__ */ jsx61(Text52, { bold: true, children: "Configuration" }),
29328
- /* @__PURE__ */ jsx61(Text52, { children: " " }),
29329
- SECTIONS.map((section, index) => /* @__PURE__ */ jsxs50(Box49, { gap: 1, children: [
29330
- /* @__PURE__ */ jsx61(Text52, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
29331
- /* @__PURE__ */ jsx61(Box49, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx61(Text52, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29332
- /* @__PURE__ */ jsx61(Text52, { color: PALETTE.muted, children: section.description })
29340
+ if (open === "project") return /* @__PURE__ */ jsx62(ProjectScreen, { onDone: close });
29341
+ if (open === "agents") return /* @__PURE__ */ jsx62(AgentsScreen, { onDone: close });
29342
+ return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29343
+ /* @__PURE__ */ jsx62(Text53, { bold: true, children: "Configuration" }),
29344
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
29345
+ SECTIONS.map((section, index) => /* @__PURE__ */ jsxs51(Box50, { gap: 1, children: [
29346
+ /* @__PURE__ */ jsx62(Text53, { color: index === focus ? PALETTE.accent : void 0, children: index === focus ? "\u276F" : " " }),
29347
+ /* @__PURE__ */ jsx62(Box50, { width: 9, flexShrink: 0, children: /* @__PURE__ */ jsx62(Text53, { bold: index === focus, color: index === focus ? PALETTE.accent : void 0, children: section.label }) }),
29348
+ /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: section.description })
29333
29349
  ] }, section.id)),
29334
- /* @__PURE__ */ jsx61(Text52, { children: " " }),
29335
- /* @__PURE__ */ jsx61(
29350
+ /* @__PURE__ */ jsx62(Text53, { children: " " }),
29351
+ /* @__PURE__ */ jsx62(
29336
29352
  ControlHints,
29337
29353
  {
29338
29354
  hints: [
@@ -29347,7 +29363,7 @@ function ConfigurationScreen({ onDone }) {
29347
29363
 
29348
29364
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
29349
29365
  import { useEffect as useEffect26, useState as useState36 } from "react";
29350
- import { Box as Box50, Text as Text53, useInput as useInput17 } from "ink";
29366
+ import { Box as Box51, Text as Text54, useInput as useInput17 } from "ink";
29351
29367
 
29352
29368
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
29353
29369
  async function readAnalyticsSetting() {
@@ -29366,7 +29382,7 @@ async function writeAnalyticsSetting(setting) {
29366
29382
 
29367
29383
  // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
29368
29384
  init_debug_store();
29369
- import { Fragment as Fragment20, jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
29385
+ import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs52 } from "react/jsx-runtime";
29370
29386
  function OptInAnalyticsScreen({ onDone }) {
29371
29387
  const [loading, setLoading] = useState36(true);
29372
29388
  const [enabled, setEnabled] = useState36(true);
@@ -29397,21 +29413,21 @@ function OptInAnalyticsScreen({ onDone }) {
29397
29413
  onDone();
29398
29414
  }
29399
29415
  });
29400
- return /* @__PURE__ */ jsxs51(Box50, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29401
- /* @__PURE__ */ jsx62(Text53, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
29402
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
29403
- loading ? /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs51(Fragment20, { children: [
29404
- /* @__PURE__ */ jsxs51(Text53, { children: [
29416
+ return /* @__PURE__ */ jsxs52(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29417
+ /* @__PURE__ */ jsx63(Text54, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
29418
+ /* @__PURE__ */ jsx63(Text54, { children: " " }),
29419
+ loading ? /* @__PURE__ */ jsx63(Text54, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs52(Fragment21, { children: [
29420
+ /* @__PURE__ */ jsxs52(Text54, { children: [
29405
29421
  "Share anonymous usage data:",
29406
29422
  " ",
29407
- /* @__PURE__ */ jsx62(Text53, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
29423
+ /* @__PURE__ */ jsx63(Text54, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
29408
29424
  ] }),
29409
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
29410
- /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
29411
- /* @__PURE__ */ jsx62(Text53, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
29425
+ /* @__PURE__ */ jsx63(Text54, { children: " " }),
29426
+ /* @__PURE__ */ jsx63(Text54, { color: PALETTE.muted, children: "Shares which CLI commands are used and where imports succeed or fail." }),
29427
+ /* @__PURE__ */ jsx63(Text54, { color: PALETTE.muted, children: "Never includes source code, file paths, credentials, or authored content." })
29412
29428
  ] }),
29413
- /* @__PURE__ */ jsx62(Text53, { children: " " }),
29414
- /* @__PURE__ */ jsx62(
29429
+ /* @__PURE__ */ jsx63(Text54, { children: " " }),
29430
+ /* @__PURE__ */ jsx63(
29415
29431
  ControlHints,
29416
29432
  {
29417
29433
  hints: [
@@ -29425,10 +29441,10 @@ function OptInAnalyticsScreen({ onDone }) {
29425
29441
 
29426
29442
  // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
29427
29443
  import { useEffect as useEffect27, useRef as useRef17, useState as useState37 } from "react";
29428
- import { Box as Box51, Text as Text54, useInput as useInput18 } from "ink";
29444
+ import { Box as Box52, Text as Text55, useInput as useInput18 } from "ink";
29429
29445
  init_debug_mode_store();
29430
29446
  init_debug_store();
29431
- import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs52 } from "react/jsx-runtime";
29447
+ import { Fragment as Fragment22, jsx as jsx64, jsxs as jsxs53 } from "react/jsx-runtime";
29432
29448
  var ROWS = ["enabled", "retentionDays"];
29433
29449
  var snapshotOf2 = (setting) => ({
29434
29450
  enabled: String(setting.enabled),
@@ -29509,25 +29525,25 @@ function DebugModeScreen({ onDone }) {
29509
29525
  onDone();
29510
29526
  }
29511
29527
  });
29512
- const marker = (row) => /* @__PURE__ */ jsx63(Text54, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
29513
- const label = (row, text) => /* @__PURE__ */ jsx63(Text54, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
29514
- return /* @__PURE__ */ jsxs52(Box51, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29515
- /* @__PURE__ */ jsx63(Text54, { bold: true, children: "Settings \u203A Debug Mode" }),
29516
- /* @__PURE__ */ jsx63(Text54, { children: " " }),
29517
- setting ? /* @__PURE__ */ jsxs52(Fragment21, { children: [
29518
- /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
29528
+ const marker = (row) => /* @__PURE__ */ jsx64(Text55, { color: focus === row ? PALETTE.accent : void 0, children: focus === row ? "\u276F" : " " });
29529
+ const label = (row, text) => /* @__PURE__ */ jsx64(Text55, { bold: focus === row, color: focus === row ? PALETTE.accent : PALETTE.muted, children: text });
29530
+ return /* @__PURE__ */ jsxs53(Box52, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
29531
+ /* @__PURE__ */ jsx64(Text55, { bold: true, children: "Settings \u203A Debug Mode" }),
29532
+ /* @__PURE__ */ jsx64(Text55, { children: " " }),
29533
+ setting ? /* @__PURE__ */ jsxs53(Fragment22, { children: [
29534
+ /* @__PURE__ */ jsxs53(Box52, { gap: 1, children: [
29519
29535
  marker("enabled"),
29520
29536
  label("enabled", "Debug logging:"),
29521
- /* @__PURE__ */ jsx63(Text54, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
29537
+ /* @__PURE__ */ jsx64(Text55, { bold: true, color: setting.enabled ? PALETTE.success : PALETTE.muted, children: setting.enabled ? "On" : "Off" })
29522
29538
  ] }),
29523
- /* @__PURE__ */ jsxs52(Box51, { gap: 1, children: [
29539
+ /* @__PURE__ */ jsxs53(Box52, { gap: 1, children: [
29524
29540
  marker("retentionDays"),
29525
29541
  label("retentionDays", "Delete logs after:"),
29526
29542
  RETENTION_CHOICES.map((days) => {
29527
29543
  const highlighted = focus === "retentionDays" && days === pending;
29528
29544
  const saved = days === setting.retentionDays;
29529
- return /* @__PURE__ */ jsx63(
29530
- Text54,
29545
+ return /* @__PURE__ */ jsx64(
29546
+ Text55,
29531
29547
  {
29532
29548
  bold: highlighted || saved,
29533
29549
  underline: highlighted,
@@ -29538,15 +29554,15 @@ function DebugModeScreen({ onDone }) {
29538
29554
  );
29539
29555
  })
29540
29556
  ] }),
29541
- /* @__PURE__ */ jsx63(Text54, { children: " " }),
29542
- notice ? /* @__PURE__ */ jsxs52(Text54, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29557
+ /* @__PURE__ */ jsx64(Text55, { children: " " }),
29558
+ notice ? /* @__PURE__ */ jsxs53(Text55, { color: notice.kind === "success" ? PALETTE.success : PALETTE.error, children: [
29543
29559
  notice.kind === "success" ? "\u2713" : "\u2717",
29544
29560
  " ",
29545
29561
  notice.text
29546
- ] }) : /* @__PURE__ */ jsx63(Text54, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
29547
- ] }) : /* @__PURE__ */ jsx63(Text54, { color: PALETTE.muted, children: "Loading\u2026" }),
29548
- /* @__PURE__ */ jsx63(Text54, { children: " " }),
29549
- /* @__PURE__ */ jsx63(
29562
+ ] }) : /* @__PURE__ */ jsx64(Text55, { color: PALETTE.muted, children: "\u2713 marks what is saved. Older logs are deleted the next time the CLI starts." })
29563
+ ] }) : /* @__PURE__ */ jsx64(Text55, { color: PALETTE.muted, children: "Loading\u2026" }),
29564
+ /* @__PURE__ */ jsx64(Text55, { children: " " }),
29565
+ /* @__PURE__ */ jsx64(
29550
29566
  ControlHints,
29551
29567
  {
29552
29568
  hints: [
@@ -29563,7 +29579,7 @@ function DebugModeScreen({ onDone }) {
29563
29579
  }
29564
29580
 
29565
29581
  // packages/experience-design-system-cli/app.tsx
29566
- import { Fragment as Fragment22, jsx as jsx64 } from "react/jsx-runtime";
29582
+ import { Fragment as Fragment23, jsx as jsx65 } from "react/jsx-runtime";
29567
29583
  function App({ importOptions, inkClear }) {
29568
29584
  const [screen, setScreen] = useState38("start");
29569
29585
  const [importExitCode, setImportExitCode] = useState38();
@@ -29755,9 +29771,9 @@ function App({ importOptions, inkClear }) {
29755
29771
  };
29756
29772
  switch (screen) {
29757
29773
  case "import":
29758
- if (showImportResult) return /* @__PURE__ */ jsx64(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
29774
+ if (showImportResult) return /* @__PURE__ */ jsx65(ImportScreen, { exitCode: importExitCode, onDone: finishImportResult });
29759
29775
  if (flow && flowStart) {
29760
- return /* @__PURE__ */ jsx64(
29776
+ return /* @__PURE__ */ jsx65(
29761
29777
  FlowScreen,
29762
29778
  {
29763
29779
  state: flow.state,
@@ -29767,15 +29783,15 @@ function App({ importOptions, inkClear }) {
29767
29783
  }
29768
29784
  );
29769
29785
  }
29770
- if (importDefaults === void 0) return /* @__PURE__ */ jsx64(Fragment22, {});
29786
+ if (importDefaults === void 0) return /* @__PURE__ */ jsx65(Fragment23, {});
29771
29787
  if (target === void 0) {
29772
- return /* @__PURE__ */ jsx64(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
29788
+ return /* @__PURE__ */ jsx65(PreflightScreen, { onChoose: setTarget, onQuit: leaveImport });
29773
29789
  }
29774
29790
  const inputStep = currentInputStep(target, answers);
29775
29791
  if (!extractionRun && !tokensOnlyRun && inputStep !== "credentials") {
29776
29792
  switch (inputStep) {
29777
29793
  case "project":
29778
- return /* @__PURE__ */ jsx64(
29794
+ return /* @__PURE__ */ jsx65(
29779
29795
  WelcomeScreen,
29780
29796
  {
29781
29797
  onContinue: (projectPath) => answer({ projectPath }),
@@ -29784,16 +29800,17 @@ function App({ importOptions, inkClear }) {
29784
29800
  }
29785
29801
  );
29786
29802
  case "token-file":
29787
- return /* @__PURE__ */ jsx64(
29803
+ return /* @__PURE__ */ jsx65(
29788
29804
  TokenInputScreen,
29789
29805
  {
29806
+ ...target === "tokens" ? { overview: TOKENS_ONLY_OVERVIEW } : {},
29790
29807
  initialPath: importDefaults.tokenFile,
29791
29808
  onConfirm: (tokensPath) => answer({ tokensPath }),
29792
29809
  onBack: () => goBackFrom("token-file")
29793
29810
  }
29794
29811
  );
29795
29812
  case "path-validation":
29796
- return /* @__PURE__ */ jsx64(
29813
+ return /* @__PURE__ */ jsx65(
29797
29814
  PathValidationScreen,
29798
29815
  {
29799
29816
  projectPath: answers.projectPath ?? "",
@@ -29806,13 +29823,13 @@ function App({ importOptions, inkClear }) {
29806
29823
  }
29807
29824
  if (tokensOnlyRun) {
29808
29825
  if (tokensOnly?.status === "done" && !tokensOnly.result.ok) {
29809
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
29826
+ return /* @__PURE__ */ jsx65(ErrorStep, { stepName: tokensOnly.result.step, message: tokensOnly.result.message, onExit: leaveImport });
29810
29827
  }
29811
- return /* @__PURE__ */ jsx64(
29828
+ return /* @__PURE__ */ jsx65(
29812
29829
  RunningStep,
29813
29830
  {
29814
29831
  stepNumber: 1,
29815
- totalSteps: 2,
29832
+ totalSteps: TOKENS_ONLY_STEP_COUNT,
29816
29833
  title: "Generating design tokens",
29817
29834
  description: "Generating design tokens from your token file.",
29818
29835
  lines: [{ text: `Generating token definitions via ${tokensOnlyRun.input.agent}...`, complete: false }]
@@ -29821,10 +29838,10 @@ function App({ importOptions, inkClear }) {
29821
29838
  }
29822
29839
  if (extractionRun) {
29823
29840
  if (extraction?.status === "done" && !extraction.result.ok) {
29824
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
29841
+ return /* @__PURE__ */ jsx65(ErrorStep, { stepName: extraction.result.step, message: extraction.result.message, onExit: leaveImport });
29825
29842
  }
29826
29843
  if (extraction?.status === "running") {
29827
- return /* @__PURE__ */ jsx64(
29844
+ return /* @__PURE__ */ jsx65(
29828
29845
  ExtractionScreen,
29829
29846
  {
29830
29847
  progress: extraction.progress,
@@ -29833,14 +29850,14 @@ function App({ importOptions, inkClear }) {
29833
29850
  }
29834
29851
  );
29835
29852
  }
29836
- return /* @__PURE__ */ jsx64(Fragment22, {});
29853
+ return /* @__PURE__ */ jsx65(Fragment23, {});
29837
29854
  }
29838
29855
  if (scopeRun && scopeFlow) {
29839
29856
  if (scopeFlow.status === "failed") {
29840
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
29857
+ return /* @__PURE__ */ jsx65(ErrorStep, { stepName: "scope gate", message: scopeFlow.message, onExit: leaveImport });
29841
29858
  }
29842
29859
  if (scopeFlow.status === "deciding") {
29843
- return /* @__PURE__ */ jsx64(
29860
+ return /* @__PURE__ */ jsx65(
29844
29861
  ScopeGateScreen,
29845
29862
  {
29846
29863
  components: scopeFlow.load.components,
@@ -29850,7 +29867,7 @@ function App({ importOptions, inkClear }) {
29850
29867
  );
29851
29868
  }
29852
29869
  if (generation?.status === "done" && !generation.result.ok) {
29853
- return /* @__PURE__ */ jsx64(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
29870
+ return /* @__PURE__ */ jsx65(ErrorStep, { stepName: generation.result.step, message: generation.result.message, onExit: leaveImport });
29854
29871
  }
29855
29872
  if (generation?.status === "running") {
29856
29873
  const hasRawTokens = scopeRun.input.rawTokensPath !== "";
@@ -29858,7 +29875,7 @@ function App({ importOptions, inkClear }) {
29858
29875
  hasRawTokens,
29859
29876
  mapTokensEligible: generation.progress.mapTokensEligible
29860
29877
  });
29861
- return /* @__PURE__ */ jsx64(
29878
+ return /* @__PURE__ */ jsx65(
29862
29879
  GenerationScreen,
29863
29880
  {
29864
29881
  progress: generation.progress,
@@ -29870,9 +29887,9 @@ function App({ importOptions, inkClear }) {
29870
29887
  }
29871
29888
  );
29872
29889
  }
29873
- return /* @__PURE__ */ jsx64(Fragment22, {});
29890
+ return /* @__PURE__ */ jsx65(Fragment23, {});
29874
29891
  }
29875
- return /* @__PURE__ */ jsx64(
29892
+ return /* @__PURE__ */ jsx65(
29876
29893
  CredentialsScreen,
29877
29894
  {
29878
29895
  initial: importDefaults.credentials,
@@ -29881,17 +29898,17 @@ function App({ importOptions, inkClear }) {
29881
29898
  }
29882
29899
  );
29883
29900
  case "help":
29884
- return /* @__PURE__ */ jsx64(HelpScreen, { onDone: goToStart });
29901
+ return /* @__PURE__ */ jsx65(HelpScreen, { onDone: goToStart });
29885
29902
  case "settings":
29886
- return /* @__PURE__ */ jsx64(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
29903
+ return /* @__PURE__ */ jsx65(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
29887
29904
  case "settings-configuration":
29888
- return /* @__PURE__ */ jsx64(ConfigurationScreen, { onDone: goToSettings });
29905
+ return /* @__PURE__ */ jsx65(ConfigurationScreen, { onDone: goToSettings });
29889
29906
  case "settings-opt-in-analytics":
29890
- return /* @__PURE__ */ jsx64(OptInAnalyticsScreen, { onDone: goToSettings });
29907
+ return /* @__PURE__ */ jsx65(OptInAnalyticsScreen, { onDone: goToSettings });
29891
29908
  case "settings-debug-mode":
29892
- return /* @__PURE__ */ jsx64(DebugModeScreen, { onDone: goToSettings });
29909
+ return /* @__PURE__ */ jsx65(DebugModeScreen, { onDone: goToSettings });
29893
29910
  case "start":
29894
- return /* @__PURE__ */ jsx64(HomeScreen, { onNavigate: setScreen });
29911
+ return /* @__PURE__ */ jsx65(HomeScreen, { onNavigate: setScreen });
29895
29912
  }
29896
29913
  }
29897
29914
  async function runApp(renderApp, importOptions) {
@@ -29899,7 +29916,7 @@ async function runApp(renderApp, importOptions) {
29899
29916
  instance.clear?.();
29900
29917
  process.stdout.write("\x1B[H\x1B[0J");
29901
29918
  };
29902
- const instance = renderApp(/* @__PURE__ */ jsx64(App, { importOptions, inkClear }));
29919
+ const instance = renderApp(/* @__PURE__ */ jsx65(App, { importOptions, inkClear }));
29903
29920
  await instance.waitUntilExit();
29904
29921
  }
29905
29922
  export {