@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
|
@@ -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,
|
|
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
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
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
|
|
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 (
|
|
22312
|
-
setPropIdx(
|
|
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 (
|
|
22322
|
-
setPropIdx(
|
|
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 (
|
|
22247
|
+
if (props.length > 0) {
|
|
22344
22248
|
setFocusLevel("prop");
|
|
22345
|
-
setPropIdx(
|
|
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 (
|
|
22272
|
+
} else if (props.length > 0) {
|
|
22369
22273
|
setInSlots(false);
|
|
22370
|
-
setPropIdx(
|
|
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 (
|
|
22716
|
-
rows.push({ kind: "header", label: `\u2500\u2500 PROPERTIES (${
|
|
22717
|
-
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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") + " [
|
|
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}
|
|
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-
|
|
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-
|
|
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-
|
|
55
|
-
"@contentful/experience-design-system-generation": "2.26.7-dev-build-
|
|
56
|
-
"@contentful/experience-design-system-
|
|
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 {};
|