@orion-studios/payload-studio 0.6.0-beta.47 → 0.6.0-beta.49
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 +48 -1
- package/dist/builder-v2/client.mjs +48 -1
- package/dist/builder-v2/index.js +12 -0
- package/dist/builder-v2/index.mjs +12 -0
- package/dist/builder-v2/styles.css +225 -0
- package/package.json +1 -1
|
@@ -190,6 +190,18 @@ var parseAttributes = (value) => {
|
|
|
190
190
|
if (name === "data-orion-component" || name === "data-orion-id") {
|
|
191
191
|
continue;
|
|
192
192
|
}
|
|
193
|
+
if (name === "data-orion-props") {
|
|
194
|
+
const decoded = decodeHtmlAttribute(rawValue);
|
|
195
|
+
try {
|
|
196
|
+
const parsed = JSON.parse(decoded);
|
|
197
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
198
|
+
Object.assign(props, parsed);
|
|
199
|
+
}
|
|
200
|
+
} catch {
|
|
201
|
+
props.propsJson = decoded;
|
|
202
|
+
}
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
193
205
|
const propName = name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
194
206
|
props[propName] = decodeHtmlAttribute(rawValue);
|
|
195
207
|
}
|
|
@@ -577,6 +589,31 @@ var normalizeDefinition = (type, value) => {
|
|
|
577
589
|
type: value.type || type
|
|
578
590
|
};
|
|
579
591
|
};
|
|
592
|
+
var decodeHtmlAttribute2 = (value) => typeof value === "string" ? value.replace(/"/g, '"').replace(/'/g, "'").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") : "";
|
|
593
|
+
var attrToPropName = (name) => name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
594
|
+
var propsFromAttributes = (attributes = {}) => {
|
|
595
|
+
const props = {};
|
|
596
|
+
Object.keys(attributes).forEach((name) => {
|
|
597
|
+
if (!name.startsWith("data-") || name === "data-orion-component" || name === "data-orion-id") {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
const value = decodeHtmlAttribute2(attributes[name]);
|
|
601
|
+
if (name === "data-orion-props") {
|
|
602
|
+
try {
|
|
603
|
+
const parsed = JSON.parse(value);
|
|
604
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
605
|
+
Object.assign(props, parsed);
|
|
606
|
+
}
|
|
607
|
+
} catch {
|
|
608
|
+
props.propsJson = value;
|
|
609
|
+
}
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
props[attrToPropName(name)] = value;
|
|
613
|
+
});
|
|
614
|
+
return props;
|
|
615
|
+
};
|
|
616
|
+
var previewForDefinition = (definition, props) => definition.editorPreview?.(props) || `<div class="orion-builder-v2-dynamic-placeholder"><strong>${definition.label}</strong></div>`;
|
|
580
617
|
var registerProjectDynamicComponents = (editor, adapter) => {
|
|
581
618
|
const components = adapter?.components || {};
|
|
582
619
|
Object.keys(components).forEach((type) => {
|
|
@@ -609,6 +646,17 @@ var registerProjectDynamicComponents = (editor, adapter) => {
|
|
|
609
646
|
}))
|
|
610
647
|
]
|
|
611
648
|
}
|
|
649
|
+
},
|
|
650
|
+
view: {
|
|
651
|
+
init() {
|
|
652
|
+
this.listenTo(this.model, "change:attributes", this.renderPreview);
|
|
653
|
+
this.renderPreview();
|
|
654
|
+
},
|
|
655
|
+
renderPreview() {
|
|
656
|
+
const attributes = this.model.getAttributes?.() || {};
|
|
657
|
+
const props = propsFromAttributes(attributes);
|
|
658
|
+
this.model.components(previewForDefinition(definition, props));
|
|
659
|
+
}
|
|
612
660
|
}
|
|
613
661
|
});
|
|
614
662
|
editor.Blocks.add(`orion-dynamic-${type}`, {
|
|
@@ -822,7 +870,6 @@ function GrapesPageEditor({
|
|
|
822
870
|
panels: {
|
|
823
871
|
defaults: []
|
|
824
872
|
},
|
|
825
|
-
projectData,
|
|
826
873
|
selectorManager: {
|
|
827
874
|
componentFirst: true
|
|
828
875
|
},
|
|
@@ -66,6 +66,18 @@ var parseAttributes = (value) => {
|
|
|
66
66
|
if (name === "data-orion-component" || name === "data-orion-id") {
|
|
67
67
|
continue;
|
|
68
68
|
}
|
|
69
|
+
if (name === "data-orion-props") {
|
|
70
|
+
const decoded = decodeHtmlAttribute(rawValue);
|
|
71
|
+
try {
|
|
72
|
+
const parsed = JSON.parse(decoded);
|
|
73
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
74
|
+
Object.assign(props, parsed);
|
|
75
|
+
}
|
|
76
|
+
} catch {
|
|
77
|
+
props.propsJson = decoded;
|
|
78
|
+
}
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
69
81
|
const propName = name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
70
82
|
props[propName] = decodeHtmlAttribute(rawValue);
|
|
71
83
|
}
|
|
@@ -453,6 +465,31 @@ var normalizeDefinition = (type, value) => {
|
|
|
453
465
|
type: value.type || type
|
|
454
466
|
};
|
|
455
467
|
};
|
|
468
|
+
var decodeHtmlAttribute2 = (value) => typeof value === "string" ? value.replace(/"/g, '"').replace(/'/g, "'").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") : "";
|
|
469
|
+
var attrToPropName = (name) => name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
470
|
+
var propsFromAttributes = (attributes = {}) => {
|
|
471
|
+
const props = {};
|
|
472
|
+
Object.keys(attributes).forEach((name) => {
|
|
473
|
+
if (!name.startsWith("data-") || name === "data-orion-component" || name === "data-orion-id") {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
const value = decodeHtmlAttribute2(attributes[name]);
|
|
477
|
+
if (name === "data-orion-props") {
|
|
478
|
+
try {
|
|
479
|
+
const parsed = JSON.parse(value);
|
|
480
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
481
|
+
Object.assign(props, parsed);
|
|
482
|
+
}
|
|
483
|
+
} catch {
|
|
484
|
+
props.propsJson = value;
|
|
485
|
+
}
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
props[attrToPropName(name)] = value;
|
|
489
|
+
});
|
|
490
|
+
return props;
|
|
491
|
+
};
|
|
492
|
+
var previewForDefinition = (definition, props) => definition.editorPreview?.(props) || `<div class="orion-builder-v2-dynamic-placeholder"><strong>${definition.label}</strong></div>`;
|
|
456
493
|
var registerProjectDynamicComponents = (editor, adapter) => {
|
|
457
494
|
const components = adapter?.components || {};
|
|
458
495
|
Object.keys(components).forEach((type) => {
|
|
@@ -485,6 +522,17 @@ var registerProjectDynamicComponents = (editor, adapter) => {
|
|
|
485
522
|
}))
|
|
486
523
|
]
|
|
487
524
|
}
|
|
525
|
+
},
|
|
526
|
+
view: {
|
|
527
|
+
init() {
|
|
528
|
+
this.listenTo(this.model, "change:attributes", this.renderPreview);
|
|
529
|
+
this.renderPreview();
|
|
530
|
+
},
|
|
531
|
+
renderPreview() {
|
|
532
|
+
const attributes = this.model.getAttributes?.() || {};
|
|
533
|
+
const props = propsFromAttributes(attributes);
|
|
534
|
+
this.model.components(previewForDefinition(definition, props));
|
|
535
|
+
}
|
|
488
536
|
}
|
|
489
537
|
});
|
|
490
538
|
editor.Blocks.add(`orion-dynamic-${type}`, {
|
|
@@ -698,7 +746,6 @@ function GrapesPageEditor({
|
|
|
698
746
|
panels: {
|
|
699
747
|
defaults: []
|
|
700
748
|
},
|
|
701
|
-
projectData,
|
|
702
749
|
selectorManager: {
|
|
703
750
|
componentFirst: true
|
|
704
751
|
},
|
package/dist/builder-v2/index.js
CHANGED
|
@@ -200,6 +200,18 @@ var parseAttributes = (value) => {
|
|
|
200
200
|
if (name === "data-orion-component" || name === "data-orion-id") {
|
|
201
201
|
continue;
|
|
202
202
|
}
|
|
203
|
+
if (name === "data-orion-props") {
|
|
204
|
+
const decoded = decodeHtmlAttribute(rawValue);
|
|
205
|
+
try {
|
|
206
|
+
const parsed = JSON.parse(decoded);
|
|
207
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
208
|
+
Object.assign(props, parsed);
|
|
209
|
+
}
|
|
210
|
+
} catch {
|
|
211
|
+
props.propsJson = decoded;
|
|
212
|
+
}
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
203
215
|
const propName = name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
204
216
|
props[propName] = decodeHtmlAttribute(rawValue);
|
|
205
217
|
}
|
|
@@ -151,6 +151,18 @@ var parseAttributes = (value) => {
|
|
|
151
151
|
if (name === "data-orion-component" || name === "data-orion-id") {
|
|
152
152
|
continue;
|
|
153
153
|
}
|
|
154
|
+
if (name === "data-orion-props") {
|
|
155
|
+
const decoded = decodeHtmlAttribute(rawValue);
|
|
156
|
+
try {
|
|
157
|
+
const parsed = JSON.parse(decoded);
|
|
158
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
159
|
+
Object.assign(props, parsed);
|
|
160
|
+
}
|
|
161
|
+
} catch {
|
|
162
|
+
props.propsJson = decoded;
|
|
163
|
+
}
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
154
166
|
const propName = name.replace(/^data-orion-/, "").replace(/^data-/, "").replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
155
167
|
props[propName] = decodeHtmlAttribute(rawValue);
|
|
156
168
|
}
|
|
@@ -725,6 +725,217 @@
|
|
|
725
725
|
width: 100%;
|
|
726
726
|
}
|
|
727
727
|
|
|
728
|
+
.xo-builder-preview {
|
|
729
|
+
box-sizing: border-box;
|
|
730
|
+
color: #2e2a27;
|
|
731
|
+
font-family: var(--font-xo-sans, "Nunito Sans", "Segoe UI", sans-serif);
|
|
732
|
+
letter-spacing: 0;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
.xo-builder-preview *,
|
|
736
|
+
.xo-builder-preview *::before,
|
|
737
|
+
.xo-builder-preview *::after {
|
|
738
|
+
box-sizing: border-box;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
.xo-builder-preview p,
|
|
742
|
+
.xo-builder-preview span,
|
|
743
|
+
.xo-builder-preview small {
|
|
744
|
+
color: inherit;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
.xo-builder-preview h1,
|
|
748
|
+
.xo-builder-preview h2,
|
|
749
|
+
.xo-builder-preview h3 {
|
|
750
|
+
color: #243654;
|
|
751
|
+
font-family: var(--font-xo-serif, Georgia, serif);
|
|
752
|
+
font-weight: 500;
|
|
753
|
+
letter-spacing: 0;
|
|
754
|
+
line-height: 1.04;
|
|
755
|
+
margin: 0;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
.xo-builder-preview p {
|
|
759
|
+
line-height: 1.65;
|
|
760
|
+
margin: 0;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
.xo-builder-preview-hero {
|
|
764
|
+
align-items: end;
|
|
765
|
+
background-color: #243654;
|
|
766
|
+
background-position: center;
|
|
767
|
+
background-size: cover;
|
|
768
|
+
display: grid;
|
|
769
|
+
min-height: 560px;
|
|
770
|
+
overflow: hidden;
|
|
771
|
+
padding: 0;
|
|
772
|
+
position: relative;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
.xo-builder-preview-hero::before {
|
|
776
|
+
background: linear-gradient(180deg, rgba(8, 16, 30, 0.08), rgba(8, 16, 30, 0.18));
|
|
777
|
+
content: "";
|
|
778
|
+
inset: 0;
|
|
779
|
+
position: absolute;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
.xo-builder-preview-hero > div {
|
|
783
|
+
align-self: end;
|
|
784
|
+
background: rgba(255, 253, 249, 0.92);
|
|
785
|
+
border-top: 1px solid rgba(234, 215, 202, 0.9);
|
|
786
|
+
display: grid;
|
|
787
|
+
gap: 10px;
|
|
788
|
+
padding: 24px 34px;
|
|
789
|
+
position: relative;
|
|
790
|
+
width: 100%;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.xo-builder-preview-hero p {
|
|
794
|
+
color: #9f5f45;
|
|
795
|
+
font-size: 0.78rem;
|
|
796
|
+
font-weight: 900;
|
|
797
|
+
letter-spacing: 0.08em;
|
|
798
|
+
text-transform: uppercase;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
.xo-builder-preview-hero h1 {
|
|
802
|
+
color: #243654;
|
|
803
|
+
font-size: 3.4rem;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
.xo-builder-preview-hero span {
|
|
807
|
+
color: #5f574f;
|
|
808
|
+
font-size: 1.05rem;
|
|
809
|
+
line-height: 1.55;
|
|
810
|
+
max-width: 720px;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.xo-builder-preview-section {
|
|
814
|
+
background: #fbfaf7;
|
|
815
|
+
padding: 68px 32px;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.xo-builder-preview-section > p,
|
|
819
|
+
.xo-builder-preview-cta > p {
|
|
820
|
+
color: #9f5f45;
|
|
821
|
+
font-size: 0.78rem;
|
|
822
|
+
font-weight: 900;
|
|
823
|
+
letter-spacing: 0.08em;
|
|
824
|
+
margin: 0 0 10px;
|
|
825
|
+
text-transform: uppercase;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.xo-builder-preview-section h2,
|
|
829
|
+
.xo-builder-preview-cta h2 {
|
|
830
|
+
font-size: 3rem;
|
|
831
|
+
margin: 0;
|
|
832
|
+
max-width: 980px;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
.xo-builder-preview-section > span {
|
|
836
|
+
color: #5b4f44;
|
|
837
|
+
display: block;
|
|
838
|
+
font-size: 1.04rem;
|
|
839
|
+
line-height: 1.7;
|
|
840
|
+
margin-top: 14px;
|
|
841
|
+
max-width: 780px;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
.xo-builder-preview-grid {
|
|
845
|
+
display: grid;
|
|
846
|
+
gap: 22px;
|
|
847
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
848
|
+
margin-top: 32px;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
.xo-builder-preview-grid article {
|
|
852
|
+
background: #fffdf9;
|
|
853
|
+
border: 1px solid rgba(143, 111, 67, 0.2);
|
|
854
|
+
border-radius: 28px;
|
|
855
|
+
box-shadow: 0 18px 50px rgba(114, 87, 60, 0.08);
|
|
856
|
+
overflow: hidden;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.xo-builder-preview-grid img {
|
|
860
|
+
aspect-ratio: 4 / 3;
|
|
861
|
+
display: block;
|
|
862
|
+
height: auto;
|
|
863
|
+
object-fit: cover;
|
|
864
|
+
width: 100%;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
.xo-builder-preview-grid strong {
|
|
868
|
+
color: #243654;
|
|
869
|
+
display: block;
|
|
870
|
+
font-family: var(--font-xo-serif, Georgia, serif);
|
|
871
|
+
font-size: 1.9rem;
|
|
872
|
+
font-weight: 500;
|
|
873
|
+
line-height: 1.08;
|
|
874
|
+
padding: 20px 20px 0;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
.xo-builder-preview-grid small {
|
|
878
|
+
color: #5a4d40;
|
|
879
|
+
display: block;
|
|
880
|
+
font-size: 0.96rem;
|
|
881
|
+
line-height: 1.6;
|
|
882
|
+
padding: 12px 20px 22px;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
.xo-builder-preview-cta {
|
|
886
|
+
background: #243654;
|
|
887
|
+
color: #ffffff;
|
|
888
|
+
padding: 76px 32px;
|
|
889
|
+
text-align: center;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
.xo-builder-preview-cta h2,
|
|
893
|
+
.xo-builder-preview-cta p {
|
|
894
|
+
color: #ffffff;
|
|
895
|
+
margin-left: auto;
|
|
896
|
+
margin-right: auto;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
.xo-builder-preview-cta button {
|
|
900
|
+
background: #ffd082;
|
|
901
|
+
border: 0;
|
|
902
|
+
border-radius: 999px;
|
|
903
|
+
color: #263a57;
|
|
904
|
+
font: inherit;
|
|
905
|
+
font-size: 0.86rem;
|
|
906
|
+
font-weight: 900;
|
|
907
|
+
margin-top: 26px;
|
|
908
|
+
min-height: 44px;
|
|
909
|
+
padding: 0 28px;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.xo-builder-preview-section details {
|
|
913
|
+
background: #fffdf9;
|
|
914
|
+
border: 1px solid rgba(143, 111, 67, 0.2);
|
|
915
|
+
border-radius: 18px;
|
|
916
|
+
margin-top: 12px;
|
|
917
|
+
padding: 18px 20px;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
.xo-builder-preview-section summary {
|
|
921
|
+
color: #243654;
|
|
922
|
+
cursor: pointer;
|
|
923
|
+
font-weight: 900;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
.xo-builder-preview-form {
|
|
927
|
+
background: #fffdf9;
|
|
928
|
+
border: 1px dashed rgba(159, 95, 69, 0.4);
|
|
929
|
+
margin: 48px auto;
|
|
930
|
+
max-width: 980px;
|
|
931
|
+
padding: 46px 32px;
|
|
932
|
+
text-align: center;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
.xo-builder-preview-form h2 {
|
|
936
|
+
font-size: 2.4rem;
|
|
937
|
+
}
|
|
938
|
+
|
|
728
939
|
@media (max-width: 800px) {
|
|
729
940
|
.orion-builder-v2-editor {
|
|
730
941
|
grid-template-columns: 1fr;
|
|
@@ -772,6 +983,20 @@
|
|
|
772
983
|
grid-template-columns: 1fr;
|
|
773
984
|
}
|
|
774
985
|
|
|
986
|
+
.xo-builder-preview-grid {
|
|
987
|
+
grid-template-columns: 1fr;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
.xo-builder-preview-hero {
|
|
991
|
+
min-height: 460px;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
.xo-builder-preview-hero h1,
|
|
995
|
+
.xo-builder-preview-section h2,
|
|
996
|
+
.xo-builder-preview-cta h2 {
|
|
997
|
+
font-size: 2.1rem;
|
|
998
|
+
}
|
|
999
|
+
|
|
775
1000
|
.orion-builder-v2-nav,
|
|
776
1001
|
.orion-builder-v2-footer {
|
|
777
1002
|
align-items: flex-start;
|
package/package.json
CHANGED