@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.
@@ -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 value = element.innerText.trim();
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.jsx)("div", { className: "orion-builder-v2-canvas", ref: containerRef })
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 value = element.innerText.trim();
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__ */ jsx("div", { className: "orion-builder-v2-canvas", ref: containerRef })
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
- right: 16px;
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
@@ -1,9 +1,9 @@
1
- import {
2
- admin_app_exports
3
- } from "./chunk-RKTIFEUY.mjs";
4
1
  import {
5
2
  admin_exports
6
3
  } from "./chunk-JC3UV74N.mjs";
4
+ import {
5
+ admin_app_exports
6
+ } from "./chunk-RKTIFEUY.mjs";
7
7
  import "./chunk-W2UOCJDX.mjs";
8
8
  import {
9
9
  blocks_exports
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-studios/payload-studio",
3
- "version": "0.6.0-beta.55",
3
+ "version": "0.6.0-beta.56",
4
4
  "description": "Base CMS, builder, and custom admin toolkit for Orion Studios websites",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",