@orion-studios/payload-studio 0.6.0-beta.47 → 0.6.0-beta.48

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.
@@ -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(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/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,16 @@ 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
+ },
654
+ renderPreview() {
655
+ const attributes = this.model.getAttributes?.() || {};
656
+ const props = propsFromAttributes(attributes);
657
+ this.model.components(previewForDefinition(definition, props));
658
+ }
612
659
  }
613
660
  });
614
661
  editor.Blocks.add(`orion-dynamic-${type}`, {
@@ -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(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/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,16 @@ 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
+ },
530
+ renderPreview() {
531
+ const attributes = this.model.getAttributes?.() || {};
532
+ const props = propsFromAttributes(attributes);
533
+ this.model.components(previewForDefinition(definition, props));
534
+ }
488
535
  }
489
536
  });
490
537
  editor.Blocks.add(`orion-dynamic-${type}`, {
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-studios/payload-studio",
3
- "version": "0.6.0-beta.47",
3
+ "version": "0.6.0-beta.48",
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",