@contentful/experience-design-system-cli 2.26.7-dev-build-cdb420a.0 → 2.26.7-dev-build-6d2ed6d.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.26.7-dev-build-cdb420a.0",
3
+ "version": "2.26.7-dev-build-6d2ed6d.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -37,7 +37,6 @@ type FieldEditorProps = {
37
37
  kind: 'prop' | 'slot';
38
38
  name: string;
39
39
  };
40
- showHiddenProps?: boolean;
41
40
  };
42
41
  export declare function simulateGraphWithCandidate(projectSlotGraph: ComponentSlotInfo[], selfName: string, currentSlots: {
43
42
  name: string;
@@ -56,5 +55,5 @@ export declare function computeAllowedComponentReplacementCandidates(projectSlot
56
55
  name: string;
57
56
  allowedComponents: string[];
58
57
  }[], targetSlotName: string, replaceIndex: number): string[];
59
- export declare function FieldEditor({ value, width, height, active, onChange, onSave, onDiscard, onExit, metadata, onTogglePropRationale, propRationaleKey, onToggleComponentRationale, componentRationaleKey, onToggleSourceExternal, onTextEntryActiveChange, projectSlotGraph, currentComponentName, onDirtyChange, discardTrigger, initialFocusTarget, showHiddenProps, }: FieldEditorProps): React.ReactElement;
58
+ export declare function FieldEditor({ value, width, height, active, onChange, onSave, onDiscard, onExit, metadata, onTogglePropRationale, propRationaleKey, onToggleComponentRationale, componentRationaleKey, onToggleSourceExternal, onTextEntryActiveChange, projectSlotGraph, currentComponentName, onDirtyChange, discardTrigger, initialFocusTarget, }: FieldEditorProps): React.ReactElement;
60
59
  export {};
package/dist/src/index.js CHANGED
@@ -23,23 +23,59 @@ var init_agent_names = __esm({
23
23
 
24
24
  // packages/experience-design-system-generation/dist/src/agent-runner.js
25
25
  import { spawn } from "node:child_process";
26
- function parseSelectToolCallLines(stdout) {
27
- const calls = [];
26
+ function findJsonObjectEnd(line) {
27
+ let depth = 0;
28
+ let inString = false;
29
+ let escaped = false;
30
+ for (let i = 0; i < line.length; i++) {
31
+ const ch = line[i];
32
+ if (escaped) {
33
+ escaped = false;
34
+ } else if (ch === "\\" && inString) {
35
+ escaped = true;
36
+ } else if (ch === '"') {
37
+ inString = !inString;
38
+ } else if (!inString && ch === "{") {
39
+ depth++;
40
+ } else if (!inString && ch === "}" && --depth === 0) {
41
+ return i;
42
+ }
43
+ }
44
+ return -1;
45
+ }
46
+ function readToolCallObjects(stdout) {
47
+ const objects = [];
28
48
  const warnings = [];
29
49
  for (const raw of stdout.split("\n")) {
30
50
  const line = raw.trim();
31
51
  if (!line.startsWith("{"))
32
52
  continue;
33
- let obj;
53
+ const end = findJsonObjectEnd(line);
54
+ if (end === -1) {
55
+ warnings.push(`unparseable line: ${line.slice(0, 120)}`);
56
+ continue;
57
+ }
58
+ let parsed;
34
59
  try {
35
- obj = JSON.parse(line);
60
+ parsed = JSON.parse(line.slice(0, end + 1));
36
61
  } catch {
37
62
  warnings.push(`unparseable line: ${line.slice(0, 120)}`);
38
63
  continue;
39
64
  }
40
- if (typeof obj !== "object" || obj === null || !("tool" in obj))
41
- continue;
42
- const rec = obj;
65
+ const trailing = line.slice(end + 1);
66
+ if (trailing.trim()) {
67
+ warnings.push(`ignored trailing content after JSON: ${trailing.trim().slice(0, 120)}`);
68
+ }
69
+ if (typeof parsed === "object" && parsed !== null && "tool" in parsed) {
70
+ objects.push(parsed);
71
+ }
72
+ }
73
+ return { objects, warnings };
74
+ }
75
+ function parseSelectToolCallLines(stdout) {
76
+ const calls = [];
77
+ const { objects, warnings } = readToolCallObjects(stdout);
78
+ for (const rec of objects) {
43
79
  if (!VALID_SELECT_TOOL_NAMES.has(rec.tool))
44
80
  continue;
45
81
  if (typeof rec.name !== "string" || !rec.name) {
@@ -65,21 +101,8 @@ function parseSelectToolCallLines(stdout) {
65
101
  }
66
102
  function parseToolCallLines(stdout) {
67
103
  const calls = [];
68
- const warnings = [];
69
- for (const raw of stdout.split("\n")) {
70
- const line = raw.trim();
71
- if (!line.startsWith("{"))
72
- continue;
73
- let obj;
74
- try {
75
- obj = JSON.parse(line);
76
- } catch {
77
- warnings.push(`unparseable line: ${line.slice(0, 120)}`);
78
- continue;
79
- }
80
- if (typeof obj !== "object" || obj === null || !("tool" in obj))
81
- continue;
82
- const rec = obj;
104
+ const { objects, warnings } = readToolCallObjects(stdout);
105
+ for (const rec of objects) {
83
106
  if (!VALID_TOOL_NAMES.has(rec.tool)) {
84
107
  warnings.push(`unknown tool: ${String(rec.tool)}`);
85
108
  continue;
@@ -167,21 +190,8 @@ function parseToolCallLines(stdout) {
167
190
  }
168
191
  function parseTokenToolCallLines(stdout) {
169
192
  const calls = [];
170
- const warnings = [];
171
- for (const raw of stdout.split("\n")) {
172
- const line = raw.trim();
173
- if (!line.startsWith("{"))
174
- continue;
175
- let obj;
176
- try {
177
- obj = JSON.parse(line);
178
- } catch {
179
- warnings.push(`unparseable line: ${line.slice(0, 120)}`);
180
- continue;
181
- }
182
- if (typeof obj !== "object" || obj === null || !("tool" in obj))
183
- continue;
184
- const rec = obj;
193
+ const { objects, warnings } = readToolCallObjects(stdout);
194
+ for (const rec of objects) {
185
195
  if (!VALID_TOKEN_TOOL_NAMES.has(rec.tool))
186
196
  continue;
187
197
  if (rec.tool === "set_token") {
@@ -8554,63 +8564,6 @@ function applyDbMigrations(db) {
8554
8564
  if (!rawPropColNames.has("source_end_line")) {
8555
8565
  db.exec("ALTER TABLE raw_props ADD COLUMN source_end_line INTEGER");
8556
8566
  }
8557
- const rawPropsDdl = db.prepare(`SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'raw_props'`).get();
8558
- if (rawPropsDdl && !rawPropsDdl.sql.includes(`'unattached'`)) {
8559
- db.exec("PRAGMA foreign_keys = OFF");
8560
- try {
8561
- db.exec("BEGIN");
8562
- try {
8563
- db.exec(`
8564
- CREATE TABLE raw_props__new (
8565
- session_id TEXT NOT NULL,
8566
- component_id TEXT NOT NULL,
8567
- name TEXT NOT NULL,
8568
- type TEXT NOT NULL,
8569
- required INTEGER NOT NULL CHECK (required IN (0, 1)),
8570
- category TEXT CHECK (category IN ('content', 'design', 'state')),
8571
- default_value TEXT,
8572
- description TEXT,
8573
- token_reference TEXT,
8574
- position INTEGER NOT NULL,
8575
- cdf_type TEXT,
8576
- cdf_category TEXT CHECK (cdf_category IN ('content', 'design', 'state', 'unattached')),
8577
- cdf_token_kind TEXT,
8578
- rationale TEXT,
8579
- source_start_line INTEGER,
8580
- source_end_line INTEGER,
8581
- PRIMARY KEY (session_id, component_id, name),
8582
- FOREIGN KEY (session_id, component_id) REFERENCES raw_components(session_id, component_id) ON DELETE CASCADE
8583
- );
8584
-
8585
- INSERT INTO raw_props__new
8586
- (session_id, component_id, name, type, required, category, default_value,
8587
- description, token_reference, position, cdf_type, cdf_category, cdf_token_kind,
8588
- rationale, source_start_line, source_end_line)
8589
- SELECT
8590
- session_id, component_id, name, type, required, category, default_value,
8591
- description, token_reference, position, cdf_type, cdf_category, cdf_token_kind,
8592
- rationale, source_start_line, source_end_line
8593
- FROM raw_props;
8594
-
8595
- DROP TABLE raw_props;
8596
- ALTER TABLE raw_props__new RENAME TO raw_props;
8597
- CREATE INDEX IF NOT EXISTS idx_raw_props_session ON raw_props(session_id, component_id);
8598
-
8599
- UPDATE raw_props
8600
- SET cdf_category = 'unattached',
8601
- cdf_type = CASE WHEN type = 'boolean' THEN 'boolean' ELSE 'string' END,
8602
- required = 0
8603
- WHERE cdf_type = 'excluded';
8604
- `);
8605
- db.exec("COMMIT");
8606
- } catch (e) {
8607
- db.exec("ROLLBACK");
8608
- throw e;
8609
- }
8610
- } finally {
8611
- db.exec("PRAGMA foreign_keys = ON");
8612
- }
8613
- }
8614
8567
  if (!rawCompColNames.has("reject_reason")) {
8615
8568
  db.exec("ALTER TABLE raw_components ADD COLUMN reject_reason TEXT");
8616
8569
  }
@@ -8796,12 +8749,7 @@ function applyToolCalls(db, sessionId2, componentId, componentName, calls, incom
8796
8749
  WHERE session_id = ? AND component_id = ? AND name = ?`
8797
8750
  );
8798
8751
  const clearProp = db.prepare(
8799
- `UPDATE raw_props
8800
- SET cdf_type = CASE WHEN type = 'boolean' THEN 'boolean' ELSE 'string' END,
8801
- cdf_category = 'unattached',
8802
- cdf_token_kind = NULL,
8803
- required = 0,
8804
- rationale = ?
8752
+ `UPDATE raw_props SET cdf_type = 'excluded', cdf_category = NULL, cdf_token_kind = NULL, rationale = ?
8805
8753
  WHERE session_id = ? AND component_id = ? AND name = ?`
8806
8754
  );
8807
8755
  const deleteAllowedValues = db.prepare(
@@ -9400,7 +9348,7 @@ function loadCDFComponents(db, sessionId2) {
9400
9348
  `SELECT component_id, name, required, default_value, description,
9401
9349
  cdf_type, cdf_category, cdf_token_kind, position
9402
9350
  FROM raw_props
9403
- WHERE session_id = ? AND cdf_type IS NOT NULL
9351
+ WHERE session_id = ? AND cdf_type IS NOT NULL AND cdf_type != 'excluded'
9404
9352
  ORDER BY component_id, position`
9405
9353
  ).all(sessionId2);
9406
9354
  const allowedValues = db.prepare(
@@ -21370,27 +21318,6 @@ var init_merge_ai_decisions = __esm({
21370
21318
  }
21371
21319
  });
21372
21320
 
21373
- // packages/experience-design-system-cli/src/import/tui/steps/review-json-panel.ts
21374
- function getReviewJsonPanelValue(selected, showHiddenProps) {
21375
- if (!selected) return "";
21376
- const entry = showHiddenProps ? selected.entry : {
21377
- ...selected.entry,
21378
- $properties: Object.fromEntries(
21379
- Object.entries(selected.entry.$properties ?? {}).filter(
21380
- ([, definition]) => !HIDDEN_PROP_CATEGORIES.has(definition.$category)
21381
- )
21382
- )
21383
- };
21384
- return JSON.stringify({ [selected.key]: entry }, null, 2);
21385
- }
21386
- var HIDDEN_PROP_CATEGORIES;
21387
- var init_review_json_panel = __esm({
21388
- "packages/experience-design-system-cli/src/import/tui/steps/review-json-panel.ts"() {
21389
- "use strict";
21390
- HIDDEN_PROP_CATEGORIES = /* @__PURE__ */ new Set(["state", "unattached"]);
21391
- }
21392
- });
21393
-
21394
21321
  // packages/experience-design-system-cli/src/analyze/cycle-view.ts
21395
21322
  function computeCycleView(components) {
21396
21323
  const filtered = components.filter((c2) => c2.status !== "rejected");
@@ -21997,8 +21924,7 @@ function FieldEditor({
21997
21924
  currentComponentName,
21998
21925
  onDirtyChange,
21999
21926
  discardTrigger,
22000
- initialFocusTarget,
22001
- showHiddenProps = true
21927
+ initialFocusTarget
22002
21928
  }) {
22003
21929
  const { state: initialState, error: parseError } = parseToState(value);
22004
21930
  const [editorState, setEditorState] = useState23(initialState);
@@ -22079,34 +22005,12 @@ function FieldEditor({
22079
22005
  const [showHelp, setShowHelp] = useState23(false);
22080
22006
  const props = editorState.props;
22081
22007
  const slots = editorState.slots;
22082
- const visiblePropIndexes = React23.useMemo(
22083
- () => props.flatMap(
22084
- (prop, index) => showHiddenProps || prop.category !== "state" && prop.category !== "unattached" ? [index] : []
22085
- ),
22086
- [props, showHiddenProps]
22087
- );
22088
- const visiblePropPosition = visiblePropIndexes.indexOf(propIdx);
22089
22008
  const textEntryActive = focusLevel === "field" && activeField === "description" || focusLevel === "field" && activeField === "default" && (editorState.props[propIdx]?.type === "string" || editorState.props[propIdx]?.type === "token") || editingValue != null;
22090
22009
  React23.useEffect(() => {
22091
22010
  onTextEntryActiveChange?.(textEntryActive);
22092
22011
  }, [textEntryActive, onTextEntryActiveChange]);
22093
22012
  const currentProp = props[propIdx] ?? null;
22094
22013
  const currentSlot = slots[slotIdx] ?? null;
22095
- React23.useEffect(() => {
22096
- if (showHiddenProps || inSlots || inComponentDesc || visiblePropPosition >= 0) return;
22097
- if (visiblePropIndexes.length > 0) {
22098
- setPropIdx(visiblePropIndexes[0]);
22099
- return;
22100
- }
22101
- if (slots.length > 0) {
22102
- setInSlots(true);
22103
- setSlotIdx(0);
22104
- setFocusLevel("slot");
22105
- return;
22106
- }
22107
- setInComponentDesc(true);
22108
- setFocusLevel("componentDescription");
22109
- }, [inComponentDesc, inSlots, showHiddenProps, slots.length, visiblePropIndexes, visiblePropPosition]);
22110
22014
  const commit = (next) => {
22111
22015
  setEditorState(next);
22112
22016
  onChange(serializeState(next, value));
@@ -22308,8 +22212,8 @@ function FieldEditor({
22308
22212
  }
22309
22213
  if (focusLevel === "prop") {
22310
22214
  if (key.upArrow || input === "k") {
22311
- if (visiblePropPosition > 0) {
22312
- setPropIdx(visiblePropIndexes[visiblePropPosition - 1]);
22215
+ if (propIdx > 0) {
22216
+ setPropIdx(propIdx - 1);
22313
22217
  } else {
22314
22218
  setFocusLevel("componentDescription");
22315
22219
  setInSlots(false);
@@ -22318,8 +22222,8 @@ function FieldEditor({
22318
22222
  return;
22319
22223
  }
22320
22224
  if (key.downArrow || input === "j") {
22321
- if (visiblePropPosition >= 0 && visiblePropPosition < visiblePropIndexes.length - 1) {
22322
- setPropIdx(visiblePropIndexes[visiblePropPosition + 1]);
22225
+ if (propIdx < props.length - 1) {
22226
+ setPropIdx(propIdx + 1);
22323
22227
  } else if (slots.length > 0) {
22324
22228
  setInSlots(true);
22325
22229
  setSlotIdx(0);
@@ -22340,9 +22244,9 @@ function FieldEditor({
22340
22244
  return;
22341
22245
  }
22342
22246
  if (key.downArrow || input === "j") {
22343
- if (visiblePropIndexes.length > 0) {
22247
+ if (props.length > 0) {
22344
22248
  setFocusLevel("prop");
22345
- setPropIdx(visiblePropIndexes[0]);
22249
+ setPropIdx(0);
22346
22250
  setInSlots(false);
22347
22251
  setInComponentDesc(false);
22348
22252
  } else if (slots.length > 0) {
@@ -22365,9 +22269,9 @@ function FieldEditor({
22365
22269
  if (key.upArrow || input === "k") {
22366
22270
  if (slotIdx > 0) {
22367
22271
  setSlotIdx(slotIdx - 1);
22368
- } else if (visiblePropIndexes.length > 0) {
22272
+ } else if (props.length > 0) {
22369
22273
  setInSlots(false);
22370
- setPropIdx(visiblePropIndexes[visiblePropIndexes.length - 1]);
22274
+ setPropIdx(props.length - 1);
22371
22275
  setFocusLevel("prop");
22372
22276
  }
22373
22277
  return;
@@ -22712,9 +22616,9 @@ function FieldEditor({
22712
22616
  })();
22713
22617
  const rows = [];
22714
22618
  rows.push({ kind: "component-description" });
22715
- if (visiblePropIndexes.length > 0) {
22716
- rows.push({ kind: "header", label: `\u2500\u2500 PROPERTIES (${visiblePropIndexes.length}) `, section: "properties" });
22717
- visiblePropIndexes.forEach((idx) => rows.push({ kind: "prop", idx }));
22619
+ if (props.length > 0) {
22620
+ rows.push({ kind: "header", label: `\u2500\u2500 PROPERTIES (${props.length}) `, section: "properties" });
22621
+ props.forEach((_, i) => rows.push({ kind: "prop", idx: i }));
22718
22622
  }
22719
22623
  if (slots.length > 0) {
22720
22624
  rows.push({ kind: "header", label: `\u2500\u2500 SLOTS (${slots.length}) `, section: "slots" });
@@ -23706,7 +23610,6 @@ function GenerateReviewStep({
23706
23610
  const [showFinalize, setShowFinalize] = useState26(false);
23707
23611
  const [showQuit, setShowQuit] = useState26(false);
23708
23612
  const [showJson, setShowJson] = useState26(false);
23709
- const [showHiddenProps, setShowHiddenProps] = useState26(false);
23710
23613
  const [draftValue, setDraftValue] = useState26("");
23711
23614
  const [saveError, setSaveError] = useState26(null);
23712
23615
  const [finalizeError, setFinalizeError] = useState26(initialFinalizeError);
@@ -24656,7 +24559,7 @@ function GenerateReviewStep({
24656
24559
  }
24657
24560
  if (!sidebarFocused && showJson) {
24658
24561
  const current = components[selectedIdx];
24659
- const currentJson = getReviewJsonPanelValue(current ?? null, showHiddenProps);
24562
+ const currentJson = current ? JSON.stringify({ [current.key]: current.entry }, null, 2) : "";
24660
24563
  const totalLines = currentJson.split("\n").length;
24661
24564
  const maxOffset = Math.max(0, totalLines - PANEL_HEIGHT);
24662
24565
  if (input === "g" && !key.ctrl) {
@@ -24793,12 +24696,6 @@ function GenerateReviewStep({
24793
24696
  pendingGRef.current = false;
24794
24697
  return;
24795
24698
  }
24796
- if (input === "H") {
24797
- setShowHiddenProps((prev) => !prev);
24798
- setJsonScrollOffset(0);
24799
- pendingGRef.current = false;
24800
- return;
24801
- }
24802
24699
  if (key.return) {
24803
24700
  const current = components[selectedIdx];
24804
24701
  if (!current) return;
@@ -24899,7 +24796,6 @@ function GenerateReviewStep({
24899
24796
  }
24900
24797
  const selected = components[selectedIdx] ?? null;
24901
24798
  const selectedJson = selected ? JSON.stringify({ [selected.key]: selected.entry }, null, 2) : "";
24902
- const visibleJsonPanelValue = getReviewJsonPanelValue(selected, showHiddenProps);
24903
24799
  const isEmpty2 = (c2) => Object.keys(c2.entry.$properties).length === 0 && Object.keys(c2.entry.$slots ?? {}).length === 0;
24904
24800
  const emptyCount = components.filter(isEmpty2).length;
24905
24801
  const cycleParticipantSet = cycleView.structural;
@@ -25221,7 +25117,7 @@ function GenerateReviewStep({
25221
25117
  JsonPanel,
25222
25118
  {
25223
25119
  label: "GENERATED DEFINITION (read-only)",
25224
- value: visibleJsonPanelValue,
25120
+ value: selectedJson,
25225
25121
  scrollOffset: jsonScrollOffset,
25226
25122
  width: panelWidth,
25227
25123
  height: PANEL_HEIGHT,
@@ -25231,7 +25127,6 @@ function GenerateReviewStep({
25231
25127
  FieldEditor,
25232
25128
  {
25233
25129
  value: draftValue || selectedJson,
25234
- showHiddenProps,
25235
25130
  width: panelWidth,
25236
25131
  height: PANEL_HEIGHT,
25237
25132
  active: !sidebarFocused,
@@ -25315,7 +25210,6 @@ function GenerateReviewStep({
25315
25210
  legendEntry("[P]", "component rationale", panelOpen === "component-rationale"),
25316
25211
  legendEntry("[s]", "source", panelOpen === "source"),
25317
25212
  legendEntry("[J]", showJson ? "hide JSON" : "show JSON", showJson),
25318
- legendEntry("[H]", showHiddenProps ? "hide state/unattached" : "show state/unattached", showHiddenProps),
25319
25213
  breakingChanges.length > 0 && legendEntry("[b]", "see breaking changes", breakingPanel.isOpen),
25320
25214
  removedComponents.length > 0 && legendEntry("[d]", removedBannerCollapsed ? "show removed" : "hide removed", !removedBannerCollapsed),
25321
25215
  legendEntry("[/]", "search", searchOpen || searchQuery.length > 0),
@@ -25346,7 +25240,6 @@ var init_GenerateReviewStep = __esm({
25346
25240
  "packages/experience-design-system-cli/src/import/tui/steps/GenerateReviewStep.tsx"() {
25347
25241
  "use strict";
25348
25242
  init_theme();
25349
- init_review_json_panel();
25350
25243
  init_GroupedSidebar();
25351
25244
  init_composite_closure();
25352
25245
  init_slot_graph();
@@ -25497,7 +25390,6 @@ function AtomicGenerateReviewStep({
25497
25390
  const [showFinalize, setShowFinalize] = useState27(false);
25498
25391
  const [showQuit, setShowQuit] = useState27(false);
25499
25392
  const [showJson, setShowJson] = useState27(false);
25500
- const [showHiddenProps, setShowHiddenProps] = useState27(false);
25501
25393
  const [draftValue, setDraftValue] = useState27("");
25502
25394
  const [saveError, setSaveError] = useState27(null);
25503
25395
  const [finalizeError, setFinalizeError] = useState27(initialFinalizeError);
@@ -25861,7 +25753,7 @@ function AtomicGenerateReviewStep({
25861
25753
  }
25862
25754
  if (!sidebarFocused && showJson) {
25863
25755
  const current = components[selectedIdx];
25864
- const currentJson = getReviewJsonPanelValue(current ?? null, showHiddenProps);
25756
+ const currentJson = current ? JSON.stringify({ [current.key]: current.entry }, null, 2) : "";
25865
25757
  const totalLines = currentJson.split("\n").length;
25866
25758
  const maxOffset = Math.max(0, totalLines - PANEL_HEIGHT2);
25867
25759
  if (input === "g" && !key.ctrl) {
@@ -25917,12 +25809,6 @@ function AtomicGenerateReviewStep({
25917
25809
  pendingGRef.current = false;
25918
25810
  return;
25919
25811
  }
25920
- if (input === "H") {
25921
- setShowHiddenProps((prev) => !prev);
25922
- setJsonScrollOffset(0);
25923
- pendingGRef.current = false;
25924
- return;
25925
- }
25926
25812
  if (key.upArrow || input === "k") {
25927
25813
  setSelectedIdx((prev) => {
25928
25814
  const newIdx = Math.max(0, prev - 1);
@@ -25955,7 +25841,6 @@ function AtomicGenerateReviewStep({
25955
25841
  }
25956
25842
  const selected = components[selectedIdx] ?? null;
25957
25843
  const selectedJson = selected ? JSON.stringify({ [selected.key]: selected.entry }, null, 2) : "";
25958
- const visibleJsonPanelValue = getReviewJsonPanelValue(selected, showHiddenProps);
25959
25844
  const isEmpty2 = (c2) => Object.keys(c2.entry.$properties).length === 0;
25960
25845
  const emptyCount = components.filter(isEmpty2).length;
25961
25846
  const sidebarItems = components.map((c2) => ({
@@ -26131,7 +26016,7 @@ function AtomicGenerateReviewStep({
26131
26016
  JsonPanel,
26132
26017
  {
26133
26018
  label: "GENERATED DEFINITION (read-only)",
26134
- value: visibleJsonPanelValue,
26019
+ value: selectedJson,
26135
26020
  scrollOffset: jsonScrollOffset,
26136
26021
  width: panelWidth,
26137
26022
  height: PANEL_HEIGHT2,
@@ -26141,7 +26026,6 @@ function AtomicGenerateReviewStep({
26141
26026
  FieldEditor,
26142
26027
  {
26143
26028
  value: draftValue || selectedJson,
26144
- showHiddenProps,
26145
26029
  width: panelWidth,
26146
26030
  height: PANEL_HEIGHT2,
26147
26031
  active: !sidebarFocused,
@@ -26172,7 +26056,7 @@ function AtomicGenerateReviewStep({
26172
26056
  ),
26173
26057
  saveError && /* @__PURE__ */ jsx48(Text47, { color: PALETTE.error, children: "\u2717 " + saveError }),
26174
26058
  /* @__PURE__ */ jsxs47(Text47, { dimColor: true, children: [
26175
- sidebarFocused ? " [a] accept [r] reject [A] accept all [i] prop rationale [I] component rationale [s] source [J] " + (showJson ? "hide JSON" : "show JSON") + " [H] " + (showHiddenProps ? "hide state/unattached" : "show state/unattached") + " [^z] undo [^y] redo [^r] reload [F] finalize [e/Tab] focus panel" + (livePreview && removedComponents.length > 0 ? " [d] removed list" : "") + " [q] quit" : showJson ? " [j/k] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list (edit fields)",
26059
+ sidebarFocused ? " [a] accept [r] reject [A] accept all [i] prop rationale [I] component rationale [s] source [J] " + (showJson ? "hide JSON" : "show JSON") + " [^z] undo [^y] redo [^r] reload [F] finalize [e/Tab] focus panel" + (livePreview && removedComponents.length > 0 ? " [d] removed list" : "") + " [q] quit" : showJson ? " [j/k] scroll [Ctrl+u/d] half-page [gg/G] top/bottom [Tab] focus list" : " [Tab] focus list (edit fields)",
26176
26060
  livePreviewHook.status === "running" && /* @__PURE__ */ jsx48(Text47, { children: ` ${livePreviewSpinner} live preview` }),
26177
26061
  livePreviewHook.disabled && /* @__PURE__ */ jsx48(Text47, { children: " \xB7 live preview disabled" })
26178
26062
  ] })
@@ -26219,7 +26103,6 @@ var init_AtomicGenerateReviewStep = __esm({
26219
26103
  init_useFinalizePreview();
26220
26104
  init_scroll_offset();
26221
26105
  init_theme();
26222
- init_review_json_panel();
26223
26106
  VISIBLE_COUNT3 = 20;
26224
26107
  PANEL_HEIGHT2 = 22;
26225
26108
  }
@@ -31474,7 +31357,7 @@ async function runGenerateSkill(skill, opts, verbose = false) {
31474
31357
  const allOk = failed.length === 0;
31475
31358
  const cachedNote = cachedResults.length > 0 ? c.dim(` (${cachedResults.length} cached)`) : "";
31476
31359
  process.stderr.write(
31477
- (allOk ? c.green("\u2713") : c.yellow("\u26A0")) + ` ${generated.length + cachedResults.length}/${componentResults.length} components` + cachedNote + c.dim(` ${totalClassified} classified, ${totalExcluded} unattached`) + "\n"
31360
+ (allOk ? c.green("\u2713") : c.yellow("\u26A0")) + ` ${generated.length + cachedResults.length}/${componentResults.length} components` + cachedNote + c.dim(` ${totalClassified} classified, ${totalExcluded} excluded`) + "\n"
31478
31361
  );
31479
31362
  process.stdout.write(`renamed-slots: ${totalRenamedSlots}
31480
31363
  `);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.26.7-dev-build-cdb420a.0",
3
+ "version": "2.26.7-dev-build-6d2ed6d.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "svelte": "^5.56.4",
40
40
  "ts-morph": "^27.0.2",
41
41
  "typescript": "^5.9.3",
42
- "@contentful/experience-design-system-types": "2.26.7-dev-build-cdb420a.0"
42
+ "@contentful/experience-design-system-types": "2.26.7-dev-build-6d2ed6d.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@tsconfig/node24": "^24.0.4",
@@ -51,9 +51,9 @@
51
51
  "ink-testing-library": "^4.0.0",
52
52
  "typescript-eslint": "^8.67.0",
53
53
  "vitest": "^4.0.16",
54
- "@contentful/experience-design-system-extraction": "2.26.7-dev-build-cdb420a.0",
55
- "@contentful/experience-design-system-generation": "2.26.7-dev-build-cdb420a.0",
56
- "@contentful/experience-design-system-client": "2.26.7-dev-build-cdb420a.0"
54
+ "@contentful/experience-design-system-client": "2.26.7-dev-build-6d2ed6d.0",
55
+ "@contentful/experience-design-system-generation": "2.26.7-dev-build-6d2ed6d.0",
56
+ "@contentful/experience-design-system-extraction": "2.26.7-dev-build-6d2ed6d.0"
57
57
  },
58
58
  "repository": {
59
59
  "type": "git",
@@ -1,7 +0,0 @@
1
- import type { CDFComponentEntry } from '@contentful/experience-design-system-types';
2
- type ReviewJsonComponent = {
3
- key: string;
4
- entry: CDFComponentEntry;
5
- };
6
- export declare function getReviewJsonPanelValue(selected: ReviewJsonComponent | null, showHiddenProps: boolean): string;
7
- export {};