@contentful/experience-design-system-cli 2.26.8-dev-build-5d1e683.0 → 2.26.8-dev-build-d73215a.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.8-dev-build-
|
|
3
|
+
"version": "2.26.8-dev-build-d73215a.0",
|
|
4
4
|
"description": "Contentful Experiences design system import CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"commander": "^13.1.0",
|
|
45
45
|
"ink": "^4.4.1",
|
|
46
46
|
"react": "^18.3.1",
|
|
47
|
-
"react-devtools-core": "^4.
|
|
47
|
+
"react-devtools-core": "^4.19.1",
|
|
48
48
|
"react-dom": "^18.3.1",
|
|
49
49
|
"svelte": "^5.56.4",
|
|
50
50
|
"ts-morph": "^27.0.2",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@contentful/experience-design-system-generation": "workspace:*",
|
|
57
57
|
"@tsconfig/node24": "^24.0.4",
|
|
58
58
|
"@types/node": "^24.0.3",
|
|
59
|
-
"@types/react": "^18.3.
|
|
59
|
+
"@types/react": "^18.3.24",
|
|
60
60
|
"eslint": "^9.39.5",
|
|
61
61
|
"eslint-config-prettier": "^10.1.8",
|
|
62
62
|
"eslint-plugin-prettier": "^5.5.6",
|
|
@@ -37,6 +37,7 @@ type FieldEditorProps = {
|
|
|
37
37
|
kind: 'prop' | 'slot';
|
|
38
38
|
name: string;
|
|
39
39
|
};
|
|
40
|
+
showHiddenProps?: boolean;
|
|
40
41
|
};
|
|
41
42
|
export declare function simulateGraphWithCandidate(projectSlotGraph: ComponentSlotInfo[], selfName: string, currentSlots: {
|
|
42
43
|
name: string;
|
|
@@ -55,5 +56,5 @@ export declare function computeAllowedComponentReplacementCandidates(projectSlot
|
|
|
55
56
|
name: string;
|
|
56
57
|
allowedComponents: string[];
|
|
57
58
|
}[], targetSlotName: string, replaceIndex: number): string[];
|
|
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;
|
|
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;
|
|
59
60
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
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 {};
|
package/dist/src/index.js
CHANGED
|
@@ -8564,6 +8564,63 @@ function applyDbMigrations(db) {
|
|
|
8564
8564
|
if (!rawPropColNames.has("source_end_line")) {
|
|
8565
8565
|
db.exec("ALTER TABLE raw_props ADD COLUMN source_end_line INTEGER");
|
|
8566
8566
|
}
|
|
8567
|
+
const rawPropsDdl = db.prepare(`SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'raw_props'`).get();
|
|
8568
|
+
if (rawPropsDdl && !rawPropsDdl.sql.includes(`'unattached'`)) {
|
|
8569
|
+
db.exec("PRAGMA foreign_keys = OFF");
|
|
8570
|
+
try {
|
|
8571
|
+
db.exec("BEGIN");
|
|
8572
|
+
try {
|
|
8573
|
+
db.exec(`
|
|
8574
|
+
CREATE TABLE raw_props__new (
|
|
8575
|
+
session_id TEXT NOT NULL,
|
|
8576
|
+
component_id TEXT NOT NULL,
|
|
8577
|
+
name TEXT NOT NULL,
|
|
8578
|
+
type TEXT NOT NULL,
|
|
8579
|
+
required INTEGER NOT NULL CHECK (required IN (0, 1)),
|
|
8580
|
+
category TEXT CHECK (category IN ('content', 'design', 'state')),
|
|
8581
|
+
default_value TEXT,
|
|
8582
|
+
description TEXT,
|
|
8583
|
+
token_reference TEXT,
|
|
8584
|
+
position INTEGER NOT NULL,
|
|
8585
|
+
cdf_type TEXT,
|
|
8586
|
+
cdf_category TEXT CHECK (cdf_category IN ('content', 'design', 'state', 'unattached')),
|
|
8587
|
+
cdf_token_kind TEXT,
|
|
8588
|
+
rationale TEXT,
|
|
8589
|
+
source_start_line INTEGER,
|
|
8590
|
+
source_end_line INTEGER,
|
|
8591
|
+
PRIMARY KEY (session_id, component_id, name),
|
|
8592
|
+
FOREIGN KEY (session_id, component_id) REFERENCES raw_components(session_id, component_id) ON DELETE CASCADE
|
|
8593
|
+
);
|
|
8594
|
+
|
|
8595
|
+
INSERT INTO raw_props__new
|
|
8596
|
+
(session_id, component_id, name, type, required, category, default_value,
|
|
8597
|
+
description, token_reference, position, cdf_type, cdf_category, cdf_token_kind,
|
|
8598
|
+
rationale, source_start_line, source_end_line)
|
|
8599
|
+
SELECT
|
|
8600
|
+
session_id, component_id, name, type, required, category, default_value,
|
|
8601
|
+
description, token_reference, position, cdf_type, cdf_category, cdf_token_kind,
|
|
8602
|
+
rationale, source_start_line, source_end_line
|
|
8603
|
+
FROM raw_props;
|
|
8604
|
+
|
|
8605
|
+
DROP TABLE raw_props;
|
|
8606
|
+
ALTER TABLE raw_props__new RENAME TO raw_props;
|
|
8607
|
+
CREATE INDEX IF NOT EXISTS idx_raw_props_session ON raw_props(session_id, component_id);
|
|
8608
|
+
|
|
8609
|
+
UPDATE raw_props
|
|
8610
|
+
SET cdf_category = 'unattached',
|
|
8611
|
+
cdf_type = CASE WHEN type = 'boolean' THEN 'boolean' ELSE 'string' END,
|
|
8612
|
+
required = 0
|
|
8613
|
+
WHERE cdf_type = 'excluded';
|
|
8614
|
+
`);
|
|
8615
|
+
db.exec("COMMIT");
|
|
8616
|
+
} catch (e) {
|
|
8617
|
+
db.exec("ROLLBACK");
|
|
8618
|
+
throw e;
|
|
8619
|
+
}
|
|
8620
|
+
} finally {
|
|
8621
|
+
db.exec("PRAGMA foreign_keys = ON");
|
|
8622
|
+
}
|
|
8623
|
+
}
|
|
8567
8624
|
if (!rawCompColNames.has("reject_reason")) {
|
|
8568
8625
|
db.exec("ALTER TABLE raw_components ADD COLUMN reject_reason TEXT");
|
|
8569
8626
|
}
|
|
@@ -8749,7 +8806,12 @@ function applyToolCalls(db, sessionId2, componentId, componentName, calls, incom
|
|
|
8749
8806
|
WHERE session_id = ? AND component_id = ? AND name = ?`
|
|
8750
8807
|
);
|
|
8751
8808
|
const clearProp = db.prepare(
|
|
8752
|
-
`UPDATE raw_props
|
|
8809
|
+
`UPDATE raw_props
|
|
8810
|
+
SET cdf_type = CASE WHEN type = 'boolean' THEN 'boolean' ELSE 'string' END,
|
|
8811
|
+
cdf_category = 'unattached',
|
|
8812
|
+
cdf_token_kind = NULL,
|
|
8813
|
+
required = 0,
|
|
8814
|
+
rationale = ?
|
|
8753
8815
|
WHERE session_id = ? AND component_id = ? AND name = ?`
|
|
8754
8816
|
);
|
|
8755
8817
|
const deleteAllowedValues = db.prepare(
|
|
@@ -9348,7 +9410,7 @@ function loadCDFComponents(db, sessionId2) {
|
|
|
9348
9410
|
`SELECT component_id, name, required, default_value, description,
|
|
9349
9411
|
cdf_type, cdf_category, cdf_token_kind, position
|
|
9350
9412
|
FROM raw_props
|
|
9351
|
-
WHERE session_id = ? AND cdf_type IS NOT NULL
|
|
9413
|
+
WHERE session_id = ? AND cdf_type IS NOT NULL
|
|
9352
9414
|
ORDER BY component_id, position`
|
|
9353
9415
|
).all(sessionId2);
|
|
9354
9416
|
const allowedValues = db.prepare(
|
|
@@ -21318,6 +21380,27 @@ var init_merge_ai_decisions = __esm({
|
|
|
21318
21380
|
}
|
|
21319
21381
|
});
|
|
21320
21382
|
|
|
21383
|
+
// packages/experience-design-system-cli/src/import/tui/steps/review-json-panel.ts
|
|
21384
|
+
function getReviewJsonPanelValue(selected, showHiddenProps) {
|
|
21385
|
+
if (!selected) return "";
|
|
21386
|
+
const entry = showHiddenProps ? selected.entry : {
|
|
21387
|
+
...selected.entry,
|
|
21388
|
+
$properties: Object.fromEntries(
|
|
21389
|
+
Object.entries(selected.entry.$properties ?? {}).filter(
|
|
21390
|
+
([, definition]) => !HIDDEN_PROP_CATEGORIES.has(definition.$category)
|
|
21391
|
+
)
|
|
21392
|
+
)
|
|
21393
|
+
};
|
|
21394
|
+
return JSON.stringify({ [selected.key]: entry }, null, 2);
|
|
21395
|
+
}
|
|
21396
|
+
var HIDDEN_PROP_CATEGORIES;
|
|
21397
|
+
var init_review_json_panel = __esm({
|
|
21398
|
+
"packages/experience-design-system-cli/src/import/tui/steps/review-json-panel.ts"() {
|
|
21399
|
+
"use strict";
|
|
21400
|
+
HIDDEN_PROP_CATEGORIES = /* @__PURE__ */ new Set(["state", "unattached"]);
|
|
21401
|
+
}
|
|
21402
|
+
});
|
|
21403
|
+
|
|
21321
21404
|
// packages/experience-design-system-cli/src/analyze/cycle-view.ts
|
|
21322
21405
|
function computeCycleView(components) {
|
|
21323
21406
|
const filtered = components.filter((c2) => c2.status !== "rejected");
|
|
@@ -21924,7 +22007,8 @@ function FieldEditor({
|
|
|
21924
22007
|
currentComponentName,
|
|
21925
22008
|
onDirtyChange,
|
|
21926
22009
|
discardTrigger,
|
|
21927
|
-
initialFocusTarget
|
|
22010
|
+
initialFocusTarget,
|
|
22011
|
+
showHiddenProps = true
|
|
21928
22012
|
}) {
|
|
21929
22013
|
const { state: initialState, error: parseError } = parseToState(value);
|
|
21930
22014
|
const [editorState, setEditorState] = useState23(initialState);
|
|
@@ -22005,12 +22089,34 @@ function FieldEditor({
|
|
|
22005
22089
|
const [showHelp, setShowHelp] = useState23(false);
|
|
22006
22090
|
const props = editorState.props;
|
|
22007
22091
|
const slots = editorState.slots;
|
|
22092
|
+
const visiblePropIndexes = React23.useMemo(
|
|
22093
|
+
() => props.flatMap(
|
|
22094
|
+
(prop, index) => showHiddenProps || prop.category !== "state" && prop.category !== "unattached" ? [index] : []
|
|
22095
|
+
),
|
|
22096
|
+
[props, showHiddenProps]
|
|
22097
|
+
);
|
|
22098
|
+
const visiblePropPosition = visiblePropIndexes.indexOf(propIdx);
|
|
22008
22099
|
const textEntryActive = focusLevel === "field" && activeField === "description" || focusLevel === "field" && activeField === "default" && (editorState.props[propIdx]?.type === "string" || editorState.props[propIdx]?.type === "token") || editingValue != null;
|
|
22009
22100
|
React23.useEffect(() => {
|
|
22010
22101
|
onTextEntryActiveChange?.(textEntryActive);
|
|
22011
22102
|
}, [textEntryActive, onTextEntryActiveChange]);
|
|
22012
22103
|
const currentProp = props[propIdx] ?? null;
|
|
22013
22104
|
const currentSlot = slots[slotIdx] ?? null;
|
|
22105
|
+
React23.useEffect(() => {
|
|
22106
|
+
if (showHiddenProps || inSlots || inComponentDesc || visiblePropPosition >= 0) return;
|
|
22107
|
+
if (visiblePropIndexes.length > 0) {
|
|
22108
|
+
setPropIdx(visiblePropIndexes[0]);
|
|
22109
|
+
return;
|
|
22110
|
+
}
|
|
22111
|
+
if (slots.length > 0) {
|
|
22112
|
+
setInSlots(true);
|
|
22113
|
+
setSlotIdx(0);
|
|
22114
|
+
setFocusLevel("slot");
|
|
22115
|
+
return;
|
|
22116
|
+
}
|
|
22117
|
+
setInComponentDesc(true);
|
|
22118
|
+
setFocusLevel("componentDescription");
|
|
22119
|
+
}, [inComponentDesc, inSlots, showHiddenProps, slots.length, visiblePropIndexes, visiblePropPosition]);
|
|
22014
22120
|
const commit = (next) => {
|
|
22015
22121
|
setEditorState(next);
|
|
22016
22122
|
onChange(serializeState(next, value));
|
|
@@ -22212,8 +22318,8 @@ function FieldEditor({
|
|
|
22212
22318
|
}
|
|
22213
22319
|
if (focusLevel === "prop") {
|
|
22214
22320
|
if (key.upArrow || input === "k") {
|
|
22215
|
-
if (
|
|
22216
|
-
setPropIdx(
|
|
22321
|
+
if (visiblePropPosition > 0) {
|
|
22322
|
+
setPropIdx(visiblePropIndexes[visiblePropPosition - 1]);
|
|
22217
22323
|
} else {
|
|
22218
22324
|
setFocusLevel("componentDescription");
|
|
22219
22325
|
setInSlots(false);
|
|
@@ -22222,8 +22328,8 @@ function FieldEditor({
|
|
|
22222
22328
|
return;
|
|
22223
22329
|
}
|
|
22224
22330
|
if (key.downArrow || input === "j") {
|
|
22225
|
-
if (
|
|
22226
|
-
setPropIdx(
|
|
22331
|
+
if (visiblePropPosition >= 0 && visiblePropPosition < visiblePropIndexes.length - 1) {
|
|
22332
|
+
setPropIdx(visiblePropIndexes[visiblePropPosition + 1]);
|
|
22227
22333
|
} else if (slots.length > 0) {
|
|
22228
22334
|
setInSlots(true);
|
|
22229
22335
|
setSlotIdx(0);
|
|
@@ -22244,9 +22350,9 @@ function FieldEditor({
|
|
|
22244
22350
|
return;
|
|
22245
22351
|
}
|
|
22246
22352
|
if (key.downArrow || input === "j") {
|
|
22247
|
-
if (
|
|
22353
|
+
if (visiblePropIndexes.length > 0) {
|
|
22248
22354
|
setFocusLevel("prop");
|
|
22249
|
-
setPropIdx(0);
|
|
22355
|
+
setPropIdx(visiblePropIndexes[0]);
|
|
22250
22356
|
setInSlots(false);
|
|
22251
22357
|
setInComponentDesc(false);
|
|
22252
22358
|
} else if (slots.length > 0) {
|
|
@@ -22269,9 +22375,9 @@ function FieldEditor({
|
|
|
22269
22375
|
if (key.upArrow || input === "k") {
|
|
22270
22376
|
if (slotIdx > 0) {
|
|
22271
22377
|
setSlotIdx(slotIdx - 1);
|
|
22272
|
-
} else if (
|
|
22378
|
+
} else if (visiblePropIndexes.length > 0) {
|
|
22273
22379
|
setInSlots(false);
|
|
22274
|
-
setPropIdx(
|
|
22380
|
+
setPropIdx(visiblePropIndexes[visiblePropIndexes.length - 1]);
|
|
22275
22381
|
setFocusLevel("prop");
|
|
22276
22382
|
}
|
|
22277
22383
|
return;
|
|
@@ -22616,9 +22722,9 @@ function FieldEditor({
|
|
|
22616
22722
|
})();
|
|
22617
22723
|
const rows = [];
|
|
22618
22724
|
rows.push({ kind: "component-description" });
|
|
22619
|
-
if (
|
|
22620
|
-
rows.push({ kind: "header", label: `\u2500\u2500 PROPERTIES (${
|
|
22621
|
-
|
|
22725
|
+
if (visiblePropIndexes.length > 0) {
|
|
22726
|
+
rows.push({ kind: "header", label: `\u2500\u2500 PROPERTIES (${visiblePropIndexes.length}) `, section: "properties" });
|
|
22727
|
+
visiblePropIndexes.forEach((idx) => rows.push({ kind: "prop", idx }));
|
|
22622
22728
|
}
|
|
22623
22729
|
if (slots.length > 0) {
|
|
22624
22730
|
rows.push({ kind: "header", label: `\u2500\u2500 SLOTS (${slots.length}) `, section: "slots" });
|
|
@@ -23610,6 +23716,7 @@ function GenerateReviewStep({
|
|
|
23610
23716
|
const [showFinalize, setShowFinalize] = useState26(false);
|
|
23611
23717
|
const [showQuit, setShowQuit] = useState26(false);
|
|
23612
23718
|
const [showJson, setShowJson] = useState26(false);
|
|
23719
|
+
const [showHiddenProps, setShowHiddenProps] = useState26(false);
|
|
23613
23720
|
const [draftValue, setDraftValue] = useState26("");
|
|
23614
23721
|
const [saveError, setSaveError] = useState26(null);
|
|
23615
23722
|
const [finalizeError, setFinalizeError] = useState26(initialFinalizeError);
|
|
@@ -24559,7 +24666,7 @@ function GenerateReviewStep({
|
|
|
24559
24666
|
}
|
|
24560
24667
|
if (!sidebarFocused && showJson) {
|
|
24561
24668
|
const current = components[selectedIdx];
|
|
24562
|
-
const currentJson =
|
|
24669
|
+
const currentJson = getReviewJsonPanelValue(current ?? null, showHiddenProps);
|
|
24563
24670
|
const totalLines = currentJson.split("\n").length;
|
|
24564
24671
|
const maxOffset = Math.max(0, totalLines - PANEL_HEIGHT);
|
|
24565
24672
|
if (input === "g" && !key.ctrl) {
|
|
@@ -24696,6 +24803,12 @@ function GenerateReviewStep({
|
|
|
24696
24803
|
pendingGRef.current = false;
|
|
24697
24804
|
return;
|
|
24698
24805
|
}
|
|
24806
|
+
if (input === "H") {
|
|
24807
|
+
setShowHiddenProps((prev) => !prev);
|
|
24808
|
+
setJsonScrollOffset(0);
|
|
24809
|
+
pendingGRef.current = false;
|
|
24810
|
+
return;
|
|
24811
|
+
}
|
|
24699
24812
|
if (key.return) {
|
|
24700
24813
|
const current = components[selectedIdx];
|
|
24701
24814
|
if (!current) return;
|
|
@@ -24796,6 +24909,7 @@ function GenerateReviewStep({
|
|
|
24796
24909
|
}
|
|
24797
24910
|
const selected = components[selectedIdx] ?? null;
|
|
24798
24911
|
const selectedJson = selected ? JSON.stringify({ [selected.key]: selected.entry }, null, 2) : "";
|
|
24912
|
+
const visibleJsonPanelValue = getReviewJsonPanelValue(selected, showHiddenProps);
|
|
24799
24913
|
const isEmpty2 = (c2) => Object.keys(c2.entry.$properties).length === 0 && Object.keys(c2.entry.$slots ?? {}).length === 0;
|
|
24800
24914
|
const emptyCount = components.filter(isEmpty2).length;
|
|
24801
24915
|
const cycleParticipantSet = cycleView.structural;
|
|
@@ -25117,7 +25231,7 @@ function GenerateReviewStep({
|
|
|
25117
25231
|
JsonPanel,
|
|
25118
25232
|
{
|
|
25119
25233
|
label: "GENERATED DEFINITION (read-only)",
|
|
25120
|
-
value:
|
|
25234
|
+
value: visibleJsonPanelValue,
|
|
25121
25235
|
scrollOffset: jsonScrollOffset,
|
|
25122
25236
|
width: panelWidth,
|
|
25123
25237
|
height: PANEL_HEIGHT,
|
|
@@ -25127,6 +25241,7 @@ function GenerateReviewStep({
|
|
|
25127
25241
|
FieldEditor,
|
|
25128
25242
|
{
|
|
25129
25243
|
value: draftValue || selectedJson,
|
|
25244
|
+
showHiddenProps,
|
|
25130
25245
|
width: panelWidth,
|
|
25131
25246
|
height: PANEL_HEIGHT,
|
|
25132
25247
|
active: !sidebarFocused,
|
|
@@ -25210,6 +25325,7 @@ function GenerateReviewStep({
|
|
|
25210
25325
|
legendEntry("[P]", "component rationale", panelOpen === "component-rationale"),
|
|
25211
25326
|
legendEntry("[s]", "source", panelOpen === "source"),
|
|
25212
25327
|
legendEntry("[J]", showJson ? "hide JSON" : "show JSON", showJson),
|
|
25328
|
+
legendEntry("[H]", showHiddenProps ? "hide state/unattached" : "show state/unattached", showHiddenProps),
|
|
25213
25329
|
breakingChanges.length > 0 && legendEntry("[b]", "see breaking changes", breakingPanel.isOpen),
|
|
25214
25330
|
removedComponents.length > 0 && legendEntry("[d]", removedBannerCollapsed ? "show removed" : "hide removed", !removedBannerCollapsed),
|
|
25215
25331
|
legendEntry("[/]", "search", searchOpen || searchQuery.length > 0),
|
|
@@ -25240,6 +25356,7 @@ var init_GenerateReviewStep = __esm({
|
|
|
25240
25356
|
"packages/experience-design-system-cli/src/import/tui/steps/GenerateReviewStep.tsx"() {
|
|
25241
25357
|
"use strict";
|
|
25242
25358
|
init_theme();
|
|
25359
|
+
init_review_json_panel();
|
|
25243
25360
|
init_GroupedSidebar();
|
|
25244
25361
|
init_composite_closure();
|
|
25245
25362
|
init_slot_graph();
|
|
@@ -25390,6 +25507,7 @@ function AtomicGenerateReviewStep({
|
|
|
25390
25507
|
const [showFinalize, setShowFinalize] = useState27(false);
|
|
25391
25508
|
const [showQuit, setShowQuit] = useState27(false);
|
|
25392
25509
|
const [showJson, setShowJson] = useState27(false);
|
|
25510
|
+
const [showHiddenProps, setShowHiddenProps] = useState27(false);
|
|
25393
25511
|
const [draftValue, setDraftValue] = useState27("");
|
|
25394
25512
|
const [saveError, setSaveError] = useState27(null);
|
|
25395
25513
|
const [finalizeError, setFinalizeError] = useState27(initialFinalizeError);
|
|
@@ -25753,7 +25871,7 @@ function AtomicGenerateReviewStep({
|
|
|
25753
25871
|
}
|
|
25754
25872
|
if (!sidebarFocused && showJson) {
|
|
25755
25873
|
const current = components[selectedIdx];
|
|
25756
|
-
const currentJson =
|
|
25874
|
+
const currentJson = getReviewJsonPanelValue(current ?? null, showHiddenProps);
|
|
25757
25875
|
const totalLines = currentJson.split("\n").length;
|
|
25758
25876
|
const maxOffset = Math.max(0, totalLines - PANEL_HEIGHT2);
|
|
25759
25877
|
if (input === "g" && !key.ctrl) {
|
|
@@ -25809,6 +25927,12 @@ function AtomicGenerateReviewStep({
|
|
|
25809
25927
|
pendingGRef.current = false;
|
|
25810
25928
|
return;
|
|
25811
25929
|
}
|
|
25930
|
+
if (input === "H") {
|
|
25931
|
+
setShowHiddenProps((prev) => !prev);
|
|
25932
|
+
setJsonScrollOffset(0);
|
|
25933
|
+
pendingGRef.current = false;
|
|
25934
|
+
return;
|
|
25935
|
+
}
|
|
25812
25936
|
if (key.upArrow || input === "k") {
|
|
25813
25937
|
setSelectedIdx((prev) => {
|
|
25814
25938
|
const newIdx = Math.max(0, prev - 1);
|
|
@@ -25841,6 +25965,7 @@ function AtomicGenerateReviewStep({
|
|
|
25841
25965
|
}
|
|
25842
25966
|
const selected = components[selectedIdx] ?? null;
|
|
25843
25967
|
const selectedJson = selected ? JSON.stringify({ [selected.key]: selected.entry }, null, 2) : "";
|
|
25968
|
+
const visibleJsonPanelValue = getReviewJsonPanelValue(selected, showHiddenProps);
|
|
25844
25969
|
const isEmpty2 = (c2) => Object.keys(c2.entry.$properties).length === 0;
|
|
25845
25970
|
const emptyCount = components.filter(isEmpty2).length;
|
|
25846
25971
|
const sidebarItems = components.map((c2) => ({
|
|
@@ -26016,7 +26141,7 @@ function AtomicGenerateReviewStep({
|
|
|
26016
26141
|
JsonPanel,
|
|
26017
26142
|
{
|
|
26018
26143
|
label: "GENERATED DEFINITION (read-only)",
|
|
26019
|
-
value:
|
|
26144
|
+
value: visibleJsonPanelValue,
|
|
26020
26145
|
scrollOffset: jsonScrollOffset,
|
|
26021
26146
|
width: panelWidth,
|
|
26022
26147
|
height: PANEL_HEIGHT2,
|
|
@@ -26026,6 +26151,7 @@ function AtomicGenerateReviewStep({
|
|
|
26026
26151
|
FieldEditor,
|
|
26027
26152
|
{
|
|
26028
26153
|
value: draftValue || selectedJson,
|
|
26154
|
+
showHiddenProps,
|
|
26029
26155
|
width: panelWidth,
|
|
26030
26156
|
height: PANEL_HEIGHT2,
|
|
26031
26157
|
active: !sidebarFocused,
|
|
@@ -26056,7 +26182,7 @@ function AtomicGenerateReviewStep({
|
|
|
26056
26182
|
),
|
|
26057
26183
|
saveError && /* @__PURE__ */ jsx48(Text47, { color: PALETTE.error, children: "\u2717 " + saveError }),
|
|
26058
26184
|
/* @__PURE__ */ jsxs47(Text47, { dimColor: true, children: [
|
|
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)",
|
|
26185
|
+
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)",
|
|
26060
26186
|
livePreviewHook.status === "running" && /* @__PURE__ */ jsx48(Text47, { children: ` ${livePreviewSpinner} live preview` }),
|
|
26061
26187
|
livePreviewHook.disabled && /* @__PURE__ */ jsx48(Text47, { children: " \xB7 live preview disabled" })
|
|
26062
26188
|
] })
|
|
@@ -26103,6 +26229,7 @@ var init_AtomicGenerateReviewStep = __esm({
|
|
|
26103
26229
|
init_useFinalizePreview();
|
|
26104
26230
|
init_scroll_offset();
|
|
26105
26231
|
init_theme();
|
|
26232
|
+
init_review_json_panel();
|
|
26106
26233
|
VISIBLE_COUNT3 = 20;
|
|
26107
26234
|
PANEL_HEIGHT2 = 22;
|
|
26108
26235
|
}
|
|
@@ -31357,7 +31484,7 @@ async function runGenerateSkill(skill, opts, verbose = false) {
|
|
|
31357
31484
|
const allOk = failed.length === 0;
|
|
31358
31485
|
const cachedNote = cachedResults.length > 0 ? c.dim(` (${cachedResults.length} cached)`) : "";
|
|
31359
31486
|
process.stderr.write(
|
|
31360
|
-
(allOk ? c.green("\u2713") : c.yellow("\u26A0")) + ` ${generated.length + cachedResults.length}/${componentResults.length} components` + cachedNote + c.dim(` ${totalClassified} classified, ${totalExcluded}
|
|
31487
|
+
(allOk ? c.green("\u2713") : c.yellow("\u26A0")) + ` ${generated.length + cachedResults.length}/${componentResults.length} components` + cachedNote + c.dim(` ${totalClassified} classified, ${totalExcluded} unattached`) + "\n"
|
|
31361
31488
|
);
|
|
31362
31489
|
process.stdout.write(`renamed-slots: ${totalRenamedSlots}
|
|
31363
31490
|
`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/experience-design-system-cli",
|
|
3
|
-
"version": "2.26.8-dev-build-
|
|
3
|
+
"version": "2.26.8-dev-build-d73215a.0",
|
|
4
4
|
"description": "Contentful Experiences design system import CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -34,26 +34,26 @@
|
|
|
34
34
|
"commander": "^13.1.0",
|
|
35
35
|
"ink": "^4.4.1",
|
|
36
36
|
"react": "^18.3.1",
|
|
37
|
-
"react-devtools-core": "^4.
|
|
37
|
+
"react-devtools-core": "^4.19.1",
|
|
38
38
|
"react-dom": "^18.3.1",
|
|
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.8-dev-build-
|
|
42
|
+
"@contentful/experience-design-system-types": "2.26.8-dev-build-d73215a.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@tsconfig/node24": "^24.0.4",
|
|
46
46
|
"@types/node": "^24.0.3",
|
|
47
|
-
"@types/react": "^18.3.
|
|
47
|
+
"@types/react": "^18.3.24",
|
|
48
48
|
"eslint": "^9.39.5",
|
|
49
49
|
"eslint-config-prettier": "^10.1.8",
|
|
50
50
|
"eslint-plugin-prettier": "^5.5.6",
|
|
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-client": "2.26.8-dev-build-
|
|
55
|
-
"@contentful/experience-design-system-extraction": "2.26.8-dev-build-
|
|
56
|
-
"@contentful/experience-design-system-generation": "2.26.8-dev-build-
|
|
54
|
+
"@contentful/experience-design-system-client": "2.26.8-dev-build-d73215a.0",
|
|
55
|
+
"@contentful/experience-design-system-extraction": "2.26.8-dev-build-d73215a.0",
|
|
56
|
+
"@contentful/experience-design-system-generation": "2.26.8-dev-build-d73215a.0"
|
|
57
57
|
},
|
|
58
58
|
"repository": {
|
|
59
59
|
"type": "git",
|