@orion-studios/payload-studio 0.6.0-beta.55 → 0.6.0-beta.56
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/builder-v2/client.js +139 -8
- package/dist/builder-v2/client.mjs +139 -8
- package/dist/builder-v2/styles.css +87 -6
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
|
@@ -679,6 +679,76 @@ var updateJsonListAttribute = ({
|
|
|
679
679
|
[listAttr]: JSON.stringify(list)
|
|
680
680
|
});
|
|
681
681
|
};
|
|
682
|
+
var addJsonListItem = ({
|
|
683
|
+
listAttr,
|
|
684
|
+
model,
|
|
685
|
+
template
|
|
686
|
+
}) => {
|
|
687
|
+
const attrs = model.getAttributes?.() || {};
|
|
688
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
689
|
+
list.push(template);
|
|
690
|
+
model.addAttributes?.({
|
|
691
|
+
[listAttr]: JSON.stringify(list)
|
|
692
|
+
});
|
|
693
|
+
};
|
|
694
|
+
var duplicateJsonListItem = ({
|
|
695
|
+
index,
|
|
696
|
+
listAttr,
|
|
697
|
+
model
|
|
698
|
+
}) => {
|
|
699
|
+
const attrs = model.getAttributes?.() || {};
|
|
700
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
701
|
+
const item = list[index];
|
|
702
|
+
if (!item) {
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
705
|
+
list.splice(index + 1, 0, {
|
|
706
|
+
...item,
|
|
707
|
+
title: typeof item.title === "string" ? `${item.title} copy` : item.title
|
|
708
|
+
});
|
|
709
|
+
model.addAttributes?.({
|
|
710
|
+
[listAttr]: JSON.stringify(list)
|
|
711
|
+
});
|
|
712
|
+
};
|
|
713
|
+
var removeJsonListItem = ({
|
|
714
|
+
index,
|
|
715
|
+
listAttr,
|
|
716
|
+
model
|
|
717
|
+
}) => {
|
|
718
|
+
const attrs = model.getAttributes?.() || {};
|
|
719
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
720
|
+
if (!list[index]) {
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
list.splice(index, 1);
|
|
724
|
+
model.addAttributes?.({
|
|
725
|
+
[listAttr]: JSON.stringify(list)
|
|
726
|
+
});
|
|
727
|
+
};
|
|
728
|
+
var parseTemplateAttribute = (value) => {
|
|
729
|
+
const decoded = decodeHtmlAttribute2(value);
|
|
730
|
+
if (!decoded) {
|
|
731
|
+
return {
|
|
732
|
+
description: "Describe this item.",
|
|
733
|
+
imageURL: "",
|
|
734
|
+
title: "New item"
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
try {
|
|
738
|
+
const parsed = JSON.parse(decoded);
|
|
739
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {
|
|
740
|
+
description: "Describe this item.",
|
|
741
|
+
imageURL: "",
|
|
742
|
+
title: "New item"
|
|
743
|
+
};
|
|
744
|
+
} catch {
|
|
745
|
+
return {
|
|
746
|
+
description: "Describe this item.",
|
|
747
|
+
imageURL: "",
|
|
748
|
+
title: "New item"
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
};
|
|
682
752
|
var chooseAsset = (editor, currentSrc, callback) => {
|
|
683
753
|
const assetManager = editor?.AssetManager;
|
|
684
754
|
if (!assetManager?.open) {
|
|
@@ -710,12 +780,54 @@ var bindEditablePreview = (view, editor) => {
|
|
|
710
780
|
if (!root) {
|
|
711
781
|
return;
|
|
712
782
|
}
|
|
783
|
+
root.querySelectorAll("[data-orion-action]").forEach((element) => {
|
|
784
|
+
const action = element.dataset.orionAction || "";
|
|
785
|
+
const listName = element.dataset.orionEditList || "";
|
|
786
|
+
const listIndex = Number(element.dataset.orionEditIndex);
|
|
787
|
+
const listAttr = listName ? propToAttrName(listName) : "";
|
|
788
|
+
element.setAttribute("title", element.getAttribute("aria-label") || element.textContent?.trim() || "Section action");
|
|
789
|
+
element.addEventListener("click", (event) => {
|
|
790
|
+
event.preventDefault();
|
|
791
|
+
event.stopPropagation();
|
|
792
|
+
editor.select?.(view.model);
|
|
793
|
+
if (!listAttr) {
|
|
794
|
+
return;
|
|
795
|
+
}
|
|
796
|
+
if (action === "add-list-item") {
|
|
797
|
+
addJsonListItem({
|
|
798
|
+
listAttr,
|
|
799
|
+
model: view.model,
|
|
800
|
+
template: parseTemplateAttribute(element.dataset.orionItemTemplate)
|
|
801
|
+
});
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
if (!Number.isInteger(listIndex)) {
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
if (action === "duplicate-list-item") {
|
|
808
|
+
duplicateJsonListItem({
|
|
809
|
+
index: listIndex,
|
|
810
|
+
listAttr,
|
|
811
|
+
model: view.model
|
|
812
|
+
});
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
if (action === "remove-list-item") {
|
|
816
|
+
removeJsonListItem({
|
|
817
|
+
index: listIndex,
|
|
818
|
+
listAttr,
|
|
819
|
+
model: view.model
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
});
|
|
823
|
+
});
|
|
713
824
|
root.querySelectorAll("[data-orion-edit-field]").forEach((element) => {
|
|
714
825
|
const field = element.dataset.orionEditField || "";
|
|
715
826
|
const listName = element.dataset.orionEditList || "";
|
|
716
827
|
const listIndex = Number(element.dataset.orionEditIndex);
|
|
717
828
|
const attrName = listName ? propToAttrName(listName) : propToAttrName(field);
|
|
718
829
|
const isImage = element.dataset.orionEditKind === "image" || element instanceof HTMLImageElement;
|
|
830
|
+
const placeholder = element.dataset.orionPlaceholder || "";
|
|
719
831
|
element.setAttribute("title", isImage ? "Click to replace image" : "Click and type to edit");
|
|
720
832
|
element.style.cursor = "text";
|
|
721
833
|
element.addEventListener("click", (event) => {
|
|
@@ -748,7 +860,8 @@ var bindEditablePreview = (view, editor) => {
|
|
|
748
860
|
element.setAttribute("contenteditable", "true");
|
|
749
861
|
element.setAttribute("spellcheck", "true");
|
|
750
862
|
const commit = () => {
|
|
751
|
-
const
|
|
863
|
+
const typedValue = element.innerText.trim();
|
|
864
|
+
const value = placeholder && typedValue === placeholder ? "" : typedValue;
|
|
752
865
|
if (listName && Number.isInteger(listIndex)) {
|
|
753
866
|
updateJsonListAttribute({
|
|
754
867
|
field,
|
|
@@ -1038,6 +1151,7 @@ function GrapesPageEditor({
|
|
|
1038
1151
|
const [selectedDevice, setSelectedDevice] = (0, import_react.useState)("desktop");
|
|
1039
1152
|
const [saving, setSaving] = (0, import_react.useState)(null);
|
|
1040
1153
|
const [saveMessage, setSaveMessage] = (0, import_react.useState)("");
|
|
1154
|
+
const [selectionSummary, setSelectionSummary] = (0, import_react.useState)(null);
|
|
1041
1155
|
const [validationIssues, setValidationIssues] = (0, import_react.useState)([]);
|
|
1042
1156
|
const editorPageBasePath = initialData?.meta?.editorPageBasePath || "/admin/pages";
|
|
1043
1157
|
const pageTree = initialData?.meta?.pageTree || [];
|
|
@@ -1116,6 +1230,7 @@ function GrapesPageEditor({
|
|
|
1116
1230
|
},
|
|
1117
1231
|
storageManager: false,
|
|
1118
1232
|
styleManager: {
|
|
1233
|
+
appendTo: "#orion-builder-v2-styles",
|
|
1119
1234
|
sectors: [
|
|
1120
1235
|
{
|
|
1121
1236
|
name: "Layout",
|
|
@@ -1163,7 +1278,16 @@ function GrapesPageEditor({
|
|
|
1163
1278
|
}
|
|
1164
1279
|
}, autosaveIntervalMs);
|
|
1165
1280
|
});
|
|
1166
|
-
editor.on("component:selected", () => {
|
|
1281
|
+
editor.on("component:selected", (component) => {
|
|
1282
|
+
const typed = component;
|
|
1283
|
+
const attrs = typed?.getAttributes?.() || {};
|
|
1284
|
+
const componentType = String(attrs["data-orion-component"] || typed?.get?.("type") || "Section");
|
|
1285
|
+
const rawName = String(typed?.get?.("name") || componentType || "Section");
|
|
1286
|
+
const label = rawName.replace(/^orion-/, "").replace(/^xo/, "XO ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/-/g, " ").trim();
|
|
1287
|
+
setSelectionSummary({
|
|
1288
|
+
label: label || "Section",
|
|
1289
|
+
type: componentType
|
|
1290
|
+
});
|
|
1167
1291
|
setSaveMessage("Selection ready");
|
|
1168
1292
|
});
|
|
1169
1293
|
setSelectedDevice(editor.getDevice() || "desktop");
|
|
@@ -1381,11 +1505,6 @@ function GrapesPageEditor({
|
|
|
1381
1505
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Drag sections into the page. Dynamic blocks render through the project adapter." }),
|
|
1382
1506
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "orion-builder-v2-blocks" })
|
|
1383
1507
|
] }),
|
|
1384
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "orion-builder-v2-panel", children: [
|
|
1385
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Inspector" }),
|
|
1386
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Selection settings, dynamic bindings, links, and labels." }),
|
|
1387
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "orion-builder-v2-traits" })
|
|
1388
|
-
] }),
|
|
1389
1508
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "orion-builder-v2-panel", children: [
|
|
1390
1509
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Validation" }),
|
|
1391
1510
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "orion-builder-v2-validation-list", children: validationIssues.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "No issues found." }) : validationIssues.map((issue) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: `orion-builder-v2-validation is-${issue.severity}`, children: [
|
|
@@ -1397,6 +1516,9 @@ function GrapesPageEditor({
|
|
|
1397
1516
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("main", { className: "orion-builder-v2-main", children: [
|
|
1398
1517
|
loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "orion-builder-v2-status", children: "Loading builder..." }) : null,
|
|
1399
1518
|
error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "orion-builder-v2-error", children: error }) : null,
|
|
1519
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "orion-builder-v2-canvas", ref: containerRef })
|
|
1520
|
+
] }),
|
|
1521
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("aside", { className: "orion-builder-v2-inspector", "aria-label": "Selected section settings", children: [
|
|
1400
1522
|
saveMessage || lastSavedAt ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "orion-builder-v2-save-status", children: [
|
|
1401
1523
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: saveMessage || "Ready" }),
|
|
1402
1524
|
lastSavedAt ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
@@ -1404,7 +1526,16 @@ function GrapesPageEditor({
|
|
|
1404
1526
|
lastSavedAt
|
|
1405
1527
|
] }) : null
|
|
1406
1528
|
] }) : null,
|
|
1407
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
1529
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "orion-builder-v2-panel", children: [
|
|
1530
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: selectionSummary ? selectionSummary.label : "No section selected" }),
|
|
1531
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: selectionSummary ? "Edit this section content, images, links, layout, and spacing." : "Select a section or element on the canvas to edit its settings." }),
|
|
1532
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "orion-builder-v2-traits" })
|
|
1533
|
+
] }),
|
|
1534
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "orion-builder-v2-panel", children: [
|
|
1535
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { children: "Design" }),
|
|
1536
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Adjust spacing, layout, typography, color, borders, and shadows for the selected section." }),
|
|
1537
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "orion-builder-v2-styles" })
|
|
1538
|
+
] })
|
|
1408
1539
|
] })
|
|
1409
1540
|
] });
|
|
1410
1541
|
}
|
|
@@ -555,6 +555,76 @@ var updateJsonListAttribute = ({
|
|
|
555
555
|
[listAttr]: JSON.stringify(list)
|
|
556
556
|
});
|
|
557
557
|
};
|
|
558
|
+
var addJsonListItem = ({
|
|
559
|
+
listAttr,
|
|
560
|
+
model,
|
|
561
|
+
template
|
|
562
|
+
}) => {
|
|
563
|
+
const attrs = model.getAttributes?.() || {};
|
|
564
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
565
|
+
list.push(template);
|
|
566
|
+
model.addAttributes?.({
|
|
567
|
+
[listAttr]: JSON.stringify(list)
|
|
568
|
+
});
|
|
569
|
+
};
|
|
570
|
+
var duplicateJsonListItem = ({
|
|
571
|
+
index,
|
|
572
|
+
listAttr,
|
|
573
|
+
model
|
|
574
|
+
}) => {
|
|
575
|
+
const attrs = model.getAttributes?.() || {};
|
|
576
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
577
|
+
const item = list[index];
|
|
578
|
+
if (!item) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
list.splice(index + 1, 0, {
|
|
582
|
+
...item,
|
|
583
|
+
title: typeof item.title === "string" ? `${item.title} copy` : item.title
|
|
584
|
+
});
|
|
585
|
+
model.addAttributes?.({
|
|
586
|
+
[listAttr]: JSON.stringify(list)
|
|
587
|
+
});
|
|
588
|
+
};
|
|
589
|
+
var removeJsonListItem = ({
|
|
590
|
+
index,
|
|
591
|
+
listAttr,
|
|
592
|
+
model
|
|
593
|
+
}) => {
|
|
594
|
+
const attrs = model.getAttributes?.() || {};
|
|
595
|
+
const list = parseJsonArray(attrs[listAttr]);
|
|
596
|
+
if (!list[index]) {
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
list.splice(index, 1);
|
|
600
|
+
model.addAttributes?.({
|
|
601
|
+
[listAttr]: JSON.stringify(list)
|
|
602
|
+
});
|
|
603
|
+
};
|
|
604
|
+
var parseTemplateAttribute = (value) => {
|
|
605
|
+
const decoded = decodeHtmlAttribute2(value);
|
|
606
|
+
if (!decoded) {
|
|
607
|
+
return {
|
|
608
|
+
description: "Describe this item.",
|
|
609
|
+
imageURL: "",
|
|
610
|
+
title: "New item"
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
try {
|
|
614
|
+
const parsed = JSON.parse(decoded);
|
|
615
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {
|
|
616
|
+
description: "Describe this item.",
|
|
617
|
+
imageURL: "",
|
|
618
|
+
title: "New item"
|
|
619
|
+
};
|
|
620
|
+
} catch {
|
|
621
|
+
return {
|
|
622
|
+
description: "Describe this item.",
|
|
623
|
+
imageURL: "",
|
|
624
|
+
title: "New item"
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
};
|
|
558
628
|
var chooseAsset = (editor, currentSrc, callback) => {
|
|
559
629
|
const assetManager = editor?.AssetManager;
|
|
560
630
|
if (!assetManager?.open) {
|
|
@@ -586,12 +656,54 @@ var bindEditablePreview = (view, editor) => {
|
|
|
586
656
|
if (!root) {
|
|
587
657
|
return;
|
|
588
658
|
}
|
|
659
|
+
root.querySelectorAll("[data-orion-action]").forEach((element) => {
|
|
660
|
+
const action = element.dataset.orionAction || "";
|
|
661
|
+
const listName = element.dataset.orionEditList || "";
|
|
662
|
+
const listIndex = Number(element.dataset.orionEditIndex);
|
|
663
|
+
const listAttr = listName ? propToAttrName(listName) : "";
|
|
664
|
+
element.setAttribute("title", element.getAttribute("aria-label") || element.textContent?.trim() || "Section action");
|
|
665
|
+
element.addEventListener("click", (event) => {
|
|
666
|
+
event.preventDefault();
|
|
667
|
+
event.stopPropagation();
|
|
668
|
+
editor.select?.(view.model);
|
|
669
|
+
if (!listAttr) {
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
if (action === "add-list-item") {
|
|
673
|
+
addJsonListItem({
|
|
674
|
+
listAttr,
|
|
675
|
+
model: view.model,
|
|
676
|
+
template: parseTemplateAttribute(element.dataset.orionItemTemplate)
|
|
677
|
+
});
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
if (!Number.isInteger(listIndex)) {
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
683
|
+
if (action === "duplicate-list-item") {
|
|
684
|
+
duplicateJsonListItem({
|
|
685
|
+
index: listIndex,
|
|
686
|
+
listAttr,
|
|
687
|
+
model: view.model
|
|
688
|
+
});
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
if (action === "remove-list-item") {
|
|
692
|
+
removeJsonListItem({
|
|
693
|
+
index: listIndex,
|
|
694
|
+
listAttr,
|
|
695
|
+
model: view.model
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
});
|
|
699
|
+
});
|
|
589
700
|
root.querySelectorAll("[data-orion-edit-field]").forEach((element) => {
|
|
590
701
|
const field = element.dataset.orionEditField || "";
|
|
591
702
|
const listName = element.dataset.orionEditList || "";
|
|
592
703
|
const listIndex = Number(element.dataset.orionEditIndex);
|
|
593
704
|
const attrName = listName ? propToAttrName(listName) : propToAttrName(field);
|
|
594
705
|
const isImage = element.dataset.orionEditKind === "image" || element instanceof HTMLImageElement;
|
|
706
|
+
const placeholder = element.dataset.orionPlaceholder || "";
|
|
595
707
|
element.setAttribute("title", isImage ? "Click to replace image" : "Click and type to edit");
|
|
596
708
|
element.style.cursor = "text";
|
|
597
709
|
element.addEventListener("click", (event) => {
|
|
@@ -624,7 +736,8 @@ var bindEditablePreview = (view, editor) => {
|
|
|
624
736
|
element.setAttribute("contenteditable", "true");
|
|
625
737
|
element.setAttribute("spellcheck", "true");
|
|
626
738
|
const commit = () => {
|
|
627
|
-
const
|
|
739
|
+
const typedValue = element.innerText.trim();
|
|
740
|
+
const value = placeholder && typedValue === placeholder ? "" : typedValue;
|
|
628
741
|
if (listName && Number.isInteger(listIndex)) {
|
|
629
742
|
updateJsonListAttribute({
|
|
630
743
|
field,
|
|
@@ -914,6 +1027,7 @@ function GrapesPageEditor({
|
|
|
914
1027
|
const [selectedDevice, setSelectedDevice] = useState("desktop");
|
|
915
1028
|
const [saving, setSaving] = useState(null);
|
|
916
1029
|
const [saveMessage, setSaveMessage] = useState("");
|
|
1030
|
+
const [selectionSummary, setSelectionSummary] = useState(null);
|
|
917
1031
|
const [validationIssues, setValidationIssues] = useState([]);
|
|
918
1032
|
const editorPageBasePath = initialData?.meta?.editorPageBasePath || "/admin/pages";
|
|
919
1033
|
const pageTree = initialData?.meta?.pageTree || [];
|
|
@@ -992,6 +1106,7 @@ function GrapesPageEditor({
|
|
|
992
1106
|
},
|
|
993
1107
|
storageManager: false,
|
|
994
1108
|
styleManager: {
|
|
1109
|
+
appendTo: "#orion-builder-v2-styles",
|
|
995
1110
|
sectors: [
|
|
996
1111
|
{
|
|
997
1112
|
name: "Layout",
|
|
@@ -1039,7 +1154,16 @@ function GrapesPageEditor({
|
|
|
1039
1154
|
}
|
|
1040
1155
|
}, autosaveIntervalMs);
|
|
1041
1156
|
});
|
|
1042
|
-
editor.on("component:selected", () => {
|
|
1157
|
+
editor.on("component:selected", (component) => {
|
|
1158
|
+
const typed = component;
|
|
1159
|
+
const attrs = typed?.getAttributes?.() || {};
|
|
1160
|
+
const componentType = String(attrs["data-orion-component"] || typed?.get?.("type") || "Section");
|
|
1161
|
+
const rawName = String(typed?.get?.("name") || componentType || "Section");
|
|
1162
|
+
const label = rawName.replace(/^orion-/, "").replace(/^xo/, "XO ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/-/g, " ").trim();
|
|
1163
|
+
setSelectionSummary({
|
|
1164
|
+
label: label || "Section",
|
|
1165
|
+
type: componentType
|
|
1166
|
+
});
|
|
1043
1167
|
setSaveMessage("Selection ready");
|
|
1044
1168
|
});
|
|
1045
1169
|
setSelectedDevice(editor.getDevice() || "desktop");
|
|
@@ -1257,11 +1381,6 @@ function GrapesPageEditor({
|
|
|
1257
1381
|
/* @__PURE__ */ jsx("p", { children: "Drag sections into the page. Dynamic blocks render through the project adapter." }),
|
|
1258
1382
|
/* @__PURE__ */ jsx("div", { id: "orion-builder-v2-blocks" })
|
|
1259
1383
|
] }),
|
|
1260
|
-
/* @__PURE__ */ jsxs("div", { className: "orion-builder-v2-panel", children: [
|
|
1261
|
-
/* @__PURE__ */ jsx("h2", { children: "Inspector" }),
|
|
1262
|
-
/* @__PURE__ */ jsx("p", { children: "Selection settings, dynamic bindings, links, and labels." }),
|
|
1263
|
-
/* @__PURE__ */ jsx("div", { id: "orion-builder-v2-traits" })
|
|
1264
|
-
] }),
|
|
1265
1384
|
/* @__PURE__ */ jsxs("div", { className: "orion-builder-v2-panel", children: [
|
|
1266
1385
|
/* @__PURE__ */ jsx("h2", { children: "Validation" }),
|
|
1267
1386
|
/* @__PURE__ */ jsx("div", { className: "orion-builder-v2-validation-list", children: validationIssues.length === 0 ? /* @__PURE__ */ jsx("p", { children: "No issues found." }) : validationIssues.map((issue) => /* @__PURE__ */ jsxs("div", { className: `orion-builder-v2-validation is-${issue.severity}`, children: [
|
|
@@ -1273,6 +1392,9 @@ function GrapesPageEditor({
|
|
|
1273
1392
|
/* @__PURE__ */ jsxs("main", { className: "orion-builder-v2-main", children: [
|
|
1274
1393
|
loading ? /* @__PURE__ */ jsx("div", { className: "orion-builder-v2-status", children: "Loading builder..." }) : null,
|
|
1275
1394
|
error ? /* @__PURE__ */ jsx("div", { className: "orion-builder-v2-error", children: error }) : null,
|
|
1395
|
+
/* @__PURE__ */ jsx("div", { className: "orion-builder-v2-canvas", ref: containerRef })
|
|
1396
|
+
] }),
|
|
1397
|
+
/* @__PURE__ */ jsxs("aside", { className: "orion-builder-v2-inspector", "aria-label": "Selected section settings", children: [
|
|
1276
1398
|
saveMessage || lastSavedAt ? /* @__PURE__ */ jsxs("div", { className: "orion-builder-v2-save-status", children: [
|
|
1277
1399
|
/* @__PURE__ */ jsx("strong", { children: saveMessage || "Ready" }),
|
|
1278
1400
|
lastSavedAt ? /* @__PURE__ */ jsxs("span", { children: [
|
|
@@ -1280,7 +1402,16 @@ function GrapesPageEditor({
|
|
|
1280
1402
|
lastSavedAt
|
|
1281
1403
|
] }) : null
|
|
1282
1404
|
] }) : null,
|
|
1283
|
-
/* @__PURE__ */
|
|
1405
|
+
/* @__PURE__ */ jsxs("div", { className: "orion-builder-v2-panel", children: [
|
|
1406
|
+
/* @__PURE__ */ jsx("h2", { children: selectionSummary ? selectionSummary.label : "No section selected" }),
|
|
1407
|
+
/* @__PURE__ */ jsx("p", { children: selectionSummary ? "Edit this section content, images, links, layout, and spacing." : "Select a section or element on the canvas to edit its settings." }),
|
|
1408
|
+
/* @__PURE__ */ jsx("div", { id: "orion-builder-v2-traits" })
|
|
1409
|
+
] }),
|
|
1410
|
+
/* @__PURE__ */ jsxs("div", { className: "orion-builder-v2-panel", children: [
|
|
1411
|
+
/* @__PURE__ */ jsx("h2", { children: "Design" }),
|
|
1412
|
+
/* @__PURE__ */ jsx("p", { children: "Adjust spacing, layout, typography, color, borders, and shadows for the selected section." }),
|
|
1413
|
+
/* @__PURE__ */ jsx("div", { id: "orion-builder-v2-styles" })
|
|
1414
|
+
] })
|
|
1284
1415
|
] })
|
|
1285
1416
|
] });
|
|
1286
1417
|
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
color: var(--builder-v2-ink);
|
|
13
13
|
display: grid;
|
|
14
14
|
font-family: var(--font-xo-sans, var(--font-body, ui-sans-serif, system-ui, sans-serif));
|
|
15
|
-
grid-template-columns: minmax(292px, 336px) 1fr;
|
|
15
|
+
grid-template-columns: minmax(292px, 336px) minmax(0, 1fr) minmax(300px, 360px);
|
|
16
16
|
grid-template-rows: auto minmax(0, 1fr);
|
|
17
17
|
height: 100dvh;
|
|
18
18
|
min-height: 640px;
|
|
@@ -94,9 +94,9 @@
|
|
|
94
94
|
color: #ffffff;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
.orion-builder-v2-sidebar
|
|
97
|
+
.orion-builder-v2-sidebar,
|
|
98
|
+
.orion-builder-v2-inspector {
|
|
98
99
|
background: #fbf7f1;
|
|
99
|
-
border-right: 1px solid var(--builder-v2-border);
|
|
100
100
|
display: grid;
|
|
101
101
|
gap: 14px;
|
|
102
102
|
grid-auto-rows: max-content;
|
|
@@ -104,6 +104,14 @@
|
|
|
104
104
|
padding: 14px;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
.orion-builder-v2-sidebar {
|
|
108
|
+
border-right: 1px solid var(--builder-v2-border);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.orion-builder-v2-inspector {
|
|
112
|
+
border-left: 1px solid var(--builder-v2-border);
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
.orion-builder-v2-panel {
|
|
108
116
|
background: var(--builder-v2-panel);
|
|
109
117
|
border: 1px solid var(--builder-v2-border);
|
|
@@ -201,7 +209,8 @@
|
|
|
201
209
|
display: grid;
|
|
202
210
|
gap: 2px;
|
|
203
211
|
left: auto;
|
|
204
|
-
|
|
212
|
+
position: static;
|
|
213
|
+
right: auto;
|
|
205
214
|
}
|
|
206
215
|
|
|
207
216
|
.orion-builder-v2-save-status span {
|
|
@@ -330,6 +339,77 @@
|
|
|
330
339
|
font-weight: 800;
|
|
331
340
|
}
|
|
332
341
|
|
|
342
|
+
.orion-builder-v2-editor .gjs-traits-label {
|
|
343
|
+
display: none;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.orion-builder-v2-editor .gjs-trt-traits {
|
|
347
|
+
display: grid;
|
|
348
|
+
gap: 10px;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.orion-builder-v2-editor .gjs-trt-trait {
|
|
352
|
+
display: grid;
|
|
353
|
+
gap: 6px;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.orion-builder-v2-editor .gjs-sm-sectors {
|
|
357
|
+
display: grid;
|
|
358
|
+
gap: 10px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.orion-builder-v2-editor .gjs-sm-sector {
|
|
362
|
+
border: 1px solid var(--builder-v2-border);
|
|
363
|
+
border-radius: 12px;
|
|
364
|
+
overflow: hidden;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.orion-builder-v2-editor .gjs-sm-properties {
|
|
368
|
+
display: grid;
|
|
369
|
+
gap: 8px;
|
|
370
|
+
padding: 10px;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.orion-builder-v2-editor .gjs-sm-property {
|
|
374
|
+
float: none;
|
|
375
|
+
margin: 0;
|
|
376
|
+
width: 100%;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.orion-builder-v2-editor .gjs-field input,
|
|
380
|
+
.orion-builder-v2-editor .gjs-field select,
|
|
381
|
+
.orion-builder-v2-editor .gjs-field textarea {
|
|
382
|
+
min-height: 36px;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.orion-builder-v2-editor .gjs-field textarea {
|
|
386
|
+
min-height: 96px;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.orion-builder-v2-editor [data-orion-placeholder] {
|
|
390
|
+
outline: 1px dashed rgba(199, 100, 61, 0.45);
|
|
391
|
+
outline-offset: 4px;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.orion-builder-v2-editor [data-orion-action] {
|
|
395
|
+
background: #fffaf4;
|
|
396
|
+
border: 1px solid #e7cbb9;
|
|
397
|
+
border-radius: 999px;
|
|
398
|
+
color: var(--builder-v2-ink);
|
|
399
|
+
cursor: pointer;
|
|
400
|
+
font: inherit;
|
|
401
|
+
font-size: 0.76rem;
|
|
402
|
+
font-weight: 900;
|
|
403
|
+
min-height: 32px;
|
|
404
|
+
padding: 6px 10px;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.orion-builder-v2-editor [data-orion-action]:hover {
|
|
408
|
+
background: var(--builder-v2-ink);
|
|
409
|
+
border-color: var(--builder-v2-ink);
|
|
410
|
+
color: #ffffff;
|
|
411
|
+
}
|
|
412
|
+
|
|
333
413
|
.orion-builder-v2-html-chunk {
|
|
334
414
|
display: contents;
|
|
335
415
|
}
|
|
@@ -939,7 +1019,7 @@
|
|
|
939
1019
|
@media (max-width: 800px) {
|
|
940
1020
|
.orion-builder-v2-editor {
|
|
941
1021
|
grid-template-columns: 1fr;
|
|
942
|
-
grid-template-rows: auto auto 1fr;
|
|
1022
|
+
grid-template-rows: auto auto 1fr auto;
|
|
943
1023
|
}
|
|
944
1024
|
|
|
945
1025
|
.orion-builder-v2-topbar {
|
|
@@ -947,7 +1027,8 @@
|
|
|
947
1027
|
flex-direction: column;
|
|
948
1028
|
}
|
|
949
1029
|
|
|
950
|
-
.orion-builder-v2-sidebar
|
|
1030
|
+
.orion-builder-v2-sidebar,
|
|
1031
|
+
.orion-builder-v2-inspector {
|
|
951
1032
|
max-height: 260px;
|
|
952
1033
|
}
|
|
953
1034
|
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED