@g1cloud/page-builder-editor 1.0.0-alpha.17 → 1.0.0-alpha.18

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.
@@ -6599,7 +6599,7 @@ var __publicField = (obj, key, value) => {
6599
6599
  })(shortUniqueId$1);
6600
6600
  var shortUniqueIdExports = shortUniqueId$1.exports;
6601
6601
  const ShortUniqueId = /* @__PURE__ */ getDefaultExportFromCjs(shortUniqueIdExports);
6602
- function mitt$1(n) {
6602
+ function mitt(n) {
6603
6603
  return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {
6604
6604
  var i = n.get(t);
6605
6605
  i ? i.push(e) : n.set(t, [e]);
@@ -6615,57 +6615,30 @@ var __publicField = (obj, key, value) => {
6615
6615
  });
6616
6616
  } };
6617
6617
  }
6618
- const emitter$1 = mitt$1();
6618
+ const emitter = mitt();
6619
6619
  const PageBuilderEditorEvent = {
6620
6620
  on: {
6621
6621
  modelUpdated: (listener) => {
6622
- emitter$1.on("modelUpdated", listener);
6622
+ emitter.on("modelUpdated", listener);
6623
6623
  },
6624
6624
  modelUpdatedByUI: (listener) => {
6625
- emitter$1.on("modelUpdatedByUI", listener);
6626
- },
6627
- requestImage: (listener) => {
6628
- emitter$1.on("requestImage", listener);
6629
- },
6630
- requestProducts: (listener) => {
6631
- emitter$1.on("requestProducts", listener);
6632
- },
6633
- requestLocalMarketingPartSchedule: (listener) => {
6634
- emitter$1.on("requestLocalMarketingPartSchedule", listener);
6625
+ emitter.on("modelUpdatedByUI", listener);
6635
6626
  }
6636
6627
  },
6637
6628
  off: {
6638
6629
  modelUpdated: (listener) => {
6639
- emitter$1.off("modelUpdated", listener);
6630
+ emitter.off("modelUpdated", listener);
6640
6631
  },
6641
6632
  modelUpdatedByUI: (listener) => {
6642
- emitter$1.off("modelUpdatedByUI", listener);
6643
- },
6644
- requestImage: (listener) => {
6645
- emitter$1.off("requestImage", listener);
6646
- },
6647
- requestProducts: (listener) => {
6648
- emitter$1.off("requestProducts", listener);
6649
- },
6650
- requestLocalMarketingPartSchedule: (listener) => {
6651
- emitter$1.off("requestLocalMarketingPartSchedule", listener);
6633
+ emitter.off("modelUpdatedByUI", listener);
6652
6634
  }
6653
6635
  },
6654
6636
  emit: {
6655
6637
  modelUpdated: (changes) => {
6656
- emitter$1.emit("modelUpdated", changes);
6638
+ emitter.emit("modelUpdated", changes);
6657
6639
  },
6658
6640
  modelUpdatedByUI: (changes) => {
6659
- emitter$1.emit("modelUpdatedByUI", changes);
6660
- },
6661
- requestImage: (param) => {
6662
- emitter$1.emit("requestImage", param);
6663
- },
6664
- requestProducts: (param) => {
6665
- emitter$1.emit("requestProducts", param);
6666
- },
6667
- requestLocalMarketingPartSchedule: (param) => {
6668
- emitter$1.emit("requestLocalMarketingPartSchedule", param);
6641
+ emitter.emit("modelUpdatedByUI", changes);
6669
6642
  }
6670
6643
  }
6671
6644
  };
@@ -6803,28 +6776,11 @@ var __publicField = (obj, key, value) => {
6803
6776
  }
6804
6777
  return style;
6805
6778
  }
6806
- getPageBuilderId() {
6807
- if (this.isRoot())
6808
- return this.pageBuilderId;
6809
- if (this.parent)
6810
- return this.parent.getPageBuilderId();
6811
- }
6812
- isGlobalDesignPart() {
6813
- return false;
6814
- }
6815
- isLocalDesignPart() {
6816
- return false;
6817
- }
6818
- isLocalMarketingPart() {
6819
- return false;
6820
- }
6821
6779
  }
6822
6780
  class RootPart extends Part {
6823
6781
  constructor() {
6824
6782
  super();
6825
- __publicField2(this, "pageBuilderId");
6826
6783
  __publicField2(this, "language");
6827
- this.pageBuilderId = "";
6828
6784
  this.language = "en";
6829
6785
  this.partType = ROOT_TYPE$1;
6830
6786
  this.partName = ROOT_TYPE$1;
@@ -6852,18 +6808,6 @@ var __publicField = (obj, key, value) => {
6852
6808
  isSection() {
6853
6809
  return true;
6854
6810
  }
6855
- isGlobalDesignPart() {
6856
- var _a;
6857
- return ((_a = this.properties) == null ? void 0 : _a.sectionType) === "GlobalDesignPart";
6858
- }
6859
- isLocalDesignPart() {
6860
- var _a;
6861
- return ((_a = this.properties) == null ? void 0 : _a.sectionType) === "LocalDesignPart";
6862
- }
6863
- isLocalMarketingPart() {
6864
- var _a;
6865
- return ((_a = this.properties) == null ? void 0 : _a.sectionType) === "LocalMarketingPart";
6866
- }
6867
6811
  }
6868
6812
  class Block extends Part {
6869
6813
  constructor() {
@@ -7020,9 +6964,9 @@ var __publicField = (obj, key, value) => {
7020
6964
  key: 1,
7021
6965
  class: "placeholder"
7022
6966
  };
7023
- const _hoisted_4$i = /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "image", -1);
7024
- const _hoisted_5$9 = [
7025
- _hoisted_4$i
6967
+ const _hoisted_4$h = /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "image", -1);
6968
+ const _hoisted_5$8 = [
6969
+ _hoisted_4$h
7026
6970
  ];
7027
6971
  const _sfc_main$6$1 = /* @__PURE__ */ vue.defineComponent({
7028
6972
  __name: "PbImageWidget",
@@ -7039,7 +6983,7 @@ var __publicField = (obj, key, value) => {
7039
6983
  src: (_b = _ctx.part.properties) == null ? void 0 : _b.image,
7040
6984
  alt: "",
7041
6985
  class: "image"
7042
- }, null, 8, _hoisted_2$3$1)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$3$1, _hoisted_5$9)) : vue.createCommentVNode("", true)
6986
+ }, null, 8, _hoisted_2$3$1)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$3$1, _hoisted_5$8)) : vue.createCommentVNode("", true)
7043
6987
  ]);
7044
6988
  };
7045
6989
  }
@@ -7143,8 +7087,8 @@ ${_html.style}
7143
7087
  }
7144
7088
  });
7145
7089
  const _hoisted_1$1$1 = { class: "pb-iframe-widget" };
7146
- const _hoisted_2$v = ["src"];
7147
- const _hoisted_3$s = {
7090
+ const _hoisted_2$t = ["src"];
7091
+ const _hoisted_3$q = {
7148
7092
  key: 1,
7149
7093
  class: "placeholder",
7150
7094
  textContent: "Empty URL"
@@ -7191,7 +7135,7 @@ ${_html.style}
7191
7135
  url.value ? (vue.openBlock(), vue.createElementBlock("iframe", vue.mergeProps({
7192
7136
  key: 0,
7193
7137
  src: url.value
7194
- }, style.value), null, 16, _hoisted_2$v)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$s)) : vue.createCommentVNode("", true)
7138
+ }, style.value), null, 16, _hoisted_2$t)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$q)) : vue.createCommentVNode("", true)
7195
7139
  ]);
7196
7140
  };
7197
7141
  }
@@ -7202,21 +7146,6 @@ ${_html.style}
7202
7146
  partName: "Section",
7203
7147
  creator: () => _sfc_main$7$1
7204
7148
  },
7205
- "GlobalDesignPart": {
7206
- partType: "Section",
7207
- partName: "GlobalDesignPart",
7208
- creator: () => _sfc_main$7$1
7209
- },
7210
- "LocalDesignPart": {
7211
- partType: "Section",
7212
- partName: "LocalDesignPart",
7213
- creator: () => _sfc_main$7$1
7214
- },
7215
- "LocalMarketingPart": {
7216
- partType: "Section",
7217
- partName: "LocalMarketingPart",
7218
- creator: () => _sfc_main$7$1
7219
- },
7220
7149
  "Block": {
7221
7150
  partType: "Block",
7222
7151
  partName: "Block",
@@ -7248,9 +7177,10 @@ ${_html.style}
7248
7177
  let partDefinitions$1 = { ...defaultPartDefinitions };
7249
7178
  class PageBuilderViewerImpl {
7250
7179
  constructor() {
7251
- __publicField2(this, "instanceId");
7252
7180
  __publicField2(this, "model");
7253
7181
  __publicField2(this, "locale", vue.ref("en"));
7182
+ __publicField2(this, "watchers", {});
7183
+ __publicField2(this, "providers", {});
7254
7184
  this.model = new Model$1();
7255
7185
  }
7256
7186
  getLocale() {
@@ -7264,33 +7194,45 @@ ${_html.style}
7264
7194
  plugin.widgets.forEach((v) => {
7265
7195
  const w = { ...v };
7266
7196
  w.partType = "Widget";
7267
- w.creator = () => _sfc_main$B;
7197
+ w.creator = () => _sfc_main$z;
7268
7198
  partDefinitions$1[v.partName] = w;
7269
7199
  });
7270
7200
  }
7201
+ if (plugin.watchers) {
7202
+ this.watchers = { ...this.watchers, ...plugin.watchers };
7203
+ }
7204
+ if (plugin.providers) {
7205
+ this.providers = { ...this.providers, ...plugin.providers };
7206
+ }
7271
7207
  }
7272
7208
  watchCustomWidgetData(part) {
7273
7209
  const def = partDefinitions$1[part.partName];
7274
7210
  if (!def || !def.dataWatcher)
7275
7211
  return false;
7276
- return def.dataWatcher(part.properties);
7212
+ const watcher = this.watchers[def.dataWatcher];
7213
+ if (!watcher)
7214
+ return false;
7215
+ return watcher(part.properties);
7277
7216
  }
7278
7217
  provideCustomWidgetData(part) {
7279
7218
  const def = partDefinitions$1[part.partName];
7280
7219
  if (!def || !def.dataProvider)
7281
7220
  return Promise.resolve();
7282
- return def.dataProvider(part.properties);
7221
+ const provider = this.providers[def.dataProvider];
7222
+ if (!provider)
7223
+ return Promise.resolve();
7224
+ return provider(part.properties);
7283
7225
  }
7284
7226
  render(pageContent) {
7285
- const rootPart = new RootPart();
7286
- rootPart.pageBuilderId = this.instanceId;
7287
- rootPart.children = this.parsePageContent(pageContent);
7288
- if (rootPart.children) {
7289
- for (let page of rootPart.children) {
7290
- page.parent = rootPart;
7227
+ const rootPart = this.parsePartContent(pageContent);
7228
+ if (rootPart) {
7229
+ if (rootPart.children) {
7230
+ for (let page of rootPart.children) {
7231
+ page.parent = rootPart;
7232
+ }
7291
7233
  }
7234
+ this.model.rootPart.value = rootPart;
7292
7235
  }
7293
- this.model.rootPart.value = rootPart;
7294
7236
  }
7295
7237
  parsePageContent(pageContent) {
7296
7238
  return pageContent.map((partContent) => this.parsePartContent(partContent)).filter((part) => !!part);
@@ -7312,6 +7254,8 @@ ${_html.style}
7312
7254
  }
7313
7255
  createPart(partType) {
7314
7256
  switch (partType) {
7257
+ case "Root":
7258
+ return new RootPart();
7315
7259
  case "Page":
7316
7260
  return new Page();
7317
7261
  case "Section":
@@ -7395,11 +7339,10 @@ ${_html.style}
7395
7339
  };
7396
7340
  }
7397
7341
  });
7398
- const _hoisted_1$F = { class: "pb-viewer" };
7342
+ const _hoisted_1$D = { class: "pb-viewer" };
7399
7343
  const _sfc_main$1$1 = /* @__PURE__ */ vue.defineComponent({
7400
7344
  __name: "PageBuilderViewer",
7401
7345
  props: {
7402
- instanceId: {},
7403
7346
  pageContent: {},
7404
7347
  isMobilePage: { type: Boolean },
7405
7348
  language: {},
@@ -7408,7 +7351,6 @@ ${_html.style}
7408
7351
  setup(__props) {
7409
7352
  const props = __props;
7410
7353
  const pageBuilderViewer = createPageBuilderViewer();
7411
- pageBuilderViewer.instanceId = props.instanceId;
7412
7354
  pageBuilderViewer.setLocale(props.language);
7413
7355
  if (props.plugin)
7414
7356
  pageBuilderViewer.registerCustomPlugin(props.plugin);
@@ -7429,7 +7371,7 @@ ${_html.style}
7429
7371
  }
7430
7372
  );
7431
7373
  return (_ctx, _cache) => {
7432
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$F, [
7374
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, [
7433
7375
  page.value ? (vue.openBlock(), vue.createBlock(_sfc_main$2$1, {
7434
7376
  key: 0,
7435
7377
  "is-mobile-page": _ctx.isMobilePage,
@@ -7439,7 +7381,7 @@ ${_html.style}
7439
7381
  };
7440
7382
  }
7441
7383
  });
7442
- const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
7384
+ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
7443
7385
  __name: "PbCustomWidget",
7444
7386
  props: {
7445
7387
  part: {},
@@ -7452,7 +7394,6 @@ ${_html.style}
7452
7394
  const comp = vue.computed(() => pageBuilder.getCustomWidgetComponent(props.part));
7453
7395
  const data = vue.ref({});
7454
7396
  const bind = vue.computed(() => ({
7455
- pageBuilderId: pageBuilder.instanceId,
7456
7397
  ...props.part.properties || {},
7457
7398
  placeholder: true,
7458
7399
  ...data.value || {}
@@ -7470,40 +7411,6 @@ ${_html.style}
7470
7411
  };
7471
7412
  }
7472
7413
  });
7473
- function mitt(n) {
7474
- return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {
7475
- var i = n.get(t);
7476
- i ? i.push(e) : n.set(t, [e]);
7477
- }, off: function(t, e) {
7478
- var i = n.get(t);
7479
- i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
7480
- }, emit: function(t, e) {
7481
- var i = n.get(t);
7482
- i && i.slice().map(function(n2) {
7483
- n2(e);
7484
- }), (i = n.get("*")) && i.slice().map(function(n2) {
7485
- n2(t, e);
7486
- });
7487
- } };
7488
- }
7489
- const emitter = mitt();
7490
- const PageBuilderViewerEvent = {
7491
- on: {
7492
- requestProductMapping: (listener) => {
7493
- emitter.on("requestProductMapping", listener);
7494
- }
7495
- },
7496
- off: {
7497
- requestProductMapping: (listener) => {
7498
- emitter.off("requestProductMapping", listener);
7499
- }
7500
- },
7501
- emit: {
7502
- requestProductMapping: (param) => {
7503
- emitter.emit("requestProductMapping", param);
7504
- }
7505
- }
7506
- };
7507
7414
  const PART_ID_KEY = "partId";
7508
7415
  const PART_NAME_KEY = "partName";
7509
7416
  const RESERVED_ATTRIBUTES = [PART_ID_KEY, PART_NAME_KEY];
@@ -7674,6 +7581,9 @@ ${_html.style}
7674
7581
  const createPart = (partType, partName, properties) => {
7675
7582
  let part;
7676
7583
  switch (partType) {
7584
+ case ROOT_TYPE:
7585
+ part = new RootPart();
7586
+ break;
7677
7587
  case PAGE_TYPE:
7678
7588
  part = new Page();
7679
7589
  break;
@@ -7731,10 +7641,6 @@ ${_html.style}
7731
7641
  __publicField(this, "yjsRoot");
7732
7642
  __publicField(this, "undoManager");
7733
7643
  __publicField(this, "rootPart");
7734
- __publicField(this, "serializePageModel", (partIds) => {
7735
- const parts = this.findPartsByIds(partIds);
7736
- return partsToJsonString(parts);
7737
- });
7738
7644
  this.yjsDoc = new Doc();
7739
7645
  this.yjsRoot = this.yjsDoc.get("root", YXmlElement);
7740
7646
  const rootPartId = getNewPartId();
@@ -7783,7 +7689,30 @@ ${_html.style}
7783
7689
  });
7784
7690
  return parts;
7785
7691
  }
7786
- parsePageModel(json, keepPartId = false) {
7692
+ serializeModel(mediaExtractor, providerExtractor) {
7693
+ const root = partToJsonObject(this.rootPart);
7694
+ if (mediaExtractor) {
7695
+ root.media = mediaExtractor(this.rootPart);
7696
+ }
7697
+ if (providerExtractor) {
7698
+ providerExtractor(root);
7699
+ }
7700
+ return JSON.stringify(root);
7701
+ }
7702
+ parseModel(json, keepPartId = false) {
7703
+ const root = JSON.parse(json);
7704
+ if (root.partType !== ROOT_TYPE)
7705
+ throw Error("Invalid data format");
7706
+ const rootPart = partFromJsonObject(root, keepPartId);
7707
+ if (!rootPart)
7708
+ throw new Error("Invalid data format");
7709
+ return rootPart;
7710
+ }
7711
+ serializeParts(partIds) {
7712
+ const parts = this.findPartsByIds(partIds);
7713
+ return partsToJsonString(parts);
7714
+ }
7715
+ parseParts(json, keepPartId = false) {
7787
7716
  return partsFromJsonString(json, keepPartId);
7788
7717
  }
7789
7718
  moveElements(partId, destPartId, destIndex, update, doNotChangeIndex) {
@@ -8309,22 +8238,22 @@ ${_html.style}
8309
8238
  }
8310
8239
  return target;
8311
8240
  };
8312
- const _sfc_main$A = {};
8313
- const _hoisted_1$E = { class: "pb-add-widget-button" };
8314
- const _hoisted_2$u = /* @__PURE__ */ vue.createElementVNode("span", { class: "icon material-icons-outlined" }, "add_box", -1);
8315
- const _hoisted_3$r = /* @__PURE__ */ vue.createElementVNode("span", { class: "text" }, "Add Widget", -1);
8316
- const _hoisted_4$h = [
8317
- _hoisted_2$u,
8318
- _hoisted_3$r
8241
+ const _sfc_main$y = {};
8242
+ const _hoisted_1$C = { class: "pb-add-widget-button" };
8243
+ const _hoisted_2$s = /* @__PURE__ */ vue.createElementVNode("span", { class: "icon material-icons-outlined" }, "add_box", -1);
8244
+ const _hoisted_3$p = /* @__PURE__ */ vue.createElementVNode("span", { class: "text" }, "Add Widget", -1);
8245
+ const _hoisted_4$g = [
8246
+ _hoisted_2$s,
8247
+ _hoisted_3$p
8319
8248
  ];
8320
8249
  function _sfc_render$1(_ctx, _cache) {
8321
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, [
8250
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
8322
8251
  vue.createElementVNode("button", {
8323
8252
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("add-widget", $event))
8324
- }, _hoisted_4$h)
8253
+ }, _hoisted_4$g)
8325
8254
  ]);
8326
8255
  }
8327
- const PbAddWidgetButton = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$1]]);
8256
+ const PbAddWidgetButton = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$1]]);
8328
8257
  const MOUSE_TRACKER_KEY = "mouseTracker";
8329
8258
  const MOUSE_TRACKER_NOT_FOUND = "MouseTracker not found";
8330
8259
  class MouseTracker {
@@ -8355,12 +8284,12 @@ ${_html.style}
8355
8284
  throw Error(MOUSE_TRACKER_NOT_FOUND);
8356
8285
  return mouseTracker;
8357
8286
  };
8358
- const _hoisted_1$D = ["data-model-id", "draggable"];
8359
- const _hoisted_2$t = {
8287
+ const _hoisted_1$B = ["data-model-id", "draggable"];
8288
+ const _hoisted_2$r = {
8360
8289
  key: 1,
8361
8290
  class: "children"
8362
8291
  };
8363
- const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
8292
+ const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
8364
8293
  __name: "PbWidget",
8365
8294
  props: {
8366
8295
  part: {}
@@ -8807,7 +8736,7 @@ ${_html.style}
8807
8736
  part: _ctx.part,
8808
8737
  placeholder: true
8809
8738
  }, null, 8, ["part"])) : vue.createCommentVNode("", true),
8810
- childComponents.value && childComponents.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$t, [
8739
+ childComponents.value && childComponents.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$r, [
8811
8740
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(childComponents.value, (child) => {
8812
8741
  return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(child.component), {
8813
8742
  key: child.part.partId,
@@ -8826,14 +8755,14 @@ ${_html.style}
8826
8755
  class: "resize-handle",
8827
8756
  onMousedown: _resize_mousedown
8828
8757
  }, null, 32)) : vue.createCommentVNode("", true)
8829
- ], 16, _hoisted_1$D)), [
8758
+ ], 16, _hoisted_1$B)), [
8830
8759
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
8831
8760
  ]);
8832
8761
  };
8833
8762
  }
8834
8763
  });
8835
- const _hoisted_1$C = ["data-model-id"];
8836
- const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
8764
+ const _hoisted_1$A = ["data-model-id"];
8765
+ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
8837
8766
  __name: "PbBlock",
8838
8767
  props: {
8839
8768
  part: {}
@@ -9023,19 +8952,19 @@ ${_html.style}
9023
8952
  onAddWidget: addWidget
9024
8953
  })) : vue.createCommentVNode("", true),
9025
8954
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.part.children, (child) => {
9026
- return vue.openBlock(), vue.createBlock(_sfc_main$z, {
8955
+ return vue.openBlock(), vue.createBlock(_sfc_main$x, {
9027
8956
  key: child.partId,
9028
8957
  part: child
9029
8958
  }, null, 8, ["part"]);
9030
8959
  }), 128))
9031
- ], 16, _hoisted_1$C)), [
8960
+ ], 16, _hoisted_1$A)), [
9032
8961
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
9033
8962
  ]);
9034
8963
  };
9035
8964
  }
9036
8965
  });
9037
- const _hoisted_1$B = { class: "pb-block" };
9038
- const _hoisted_2$s = /* @__PURE__ */ vue.createElementVNode("div", {
8966
+ const _hoisted_1$z = { class: "pb-block" };
8967
+ const _hoisted_2$q = /* @__PURE__ */ vue.createElementVNode("div", {
9039
8968
  class: "pb-widget",
9040
8969
  style: { "margin": "0 auto" }
9041
8970
  }, [
@@ -9043,22 +8972,22 @@ ${_html.style}
9043
8972
  /* @__PURE__ */ vue.createElementVNode("h3", null, "Login Design Part")
9044
8973
  ])
9045
8974
  ], -1);
9046
- const _hoisted_3$q = [
9047
- _hoisted_2$s
8975
+ const _hoisted_3$o = [
8976
+ _hoisted_2$q
9048
8977
  ];
9049
- const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
8978
+ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
9050
8979
  __name: "PbLoginDepart",
9051
8980
  props: {
9052
8981
  part: {}
9053
8982
  },
9054
8983
  setup(__props) {
9055
8984
  return (_ctx, _cache) => {
9056
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$B, _hoisted_3$q);
8985
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, _hoisted_3$o);
9057
8986
  };
9058
8987
  }
9059
8988
  });
9060
- const _hoisted_1$A = ["data-model-id"];
9061
- const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
8989
+ const _hoisted_1$y = ["data-model-id"];
8990
+ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
9062
8991
  __name: "PbSection",
9063
8992
  props: {
9064
8993
  part: {}
@@ -9077,13 +9006,7 @@ ${_html.style}
9077
9006
  const properties = vue.computed(() => ({ style: props.part.getStyles() }));
9078
9007
  const disabled = vue.computed(() => {
9079
9008
  var _a;
9080
- if (["static"].includes(((_a = props.part.properties) == null ? void 0 : _a.sectionType) || ""))
9081
- return true;
9082
- if (pageBuilder.editMode === "local" && props.part.isGlobalDesignPart())
9083
- return true;
9084
- if (pageBuilder.editMode === "global" && (props.part.isLocalDesignPart() || props.part.isLocalMarketingPart()))
9085
- return true;
9086
- return false;
9009
+ return ["static"].includes(((_a = props.part.properties) == null ? void 0 : _a.sectionType) || "");
9087
9010
  });
9088
9011
  const addWidget = () => {
9089
9012
  pageBuilder.commandRegistry.executeCommand(OpenAddWidgetModalCommand.COMMAND_ID);
@@ -9169,13 +9092,13 @@ ${_html.style}
9169
9092
  style: (_a = _ctx.part.properties) == null ? void 0 : _a.css
9170
9093
  }, properties.value), [
9171
9094
  ((_b = _ctx.part.properties) == null ? void 0 : _b.sectionType) === "static" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
9172
- ((_c = _ctx.part.properties) == null ? void 0 : _c.name) === "Login Design Part" ? (vue.openBlock(), vue.createBlock(_sfc_main$x, {
9095
+ ((_c = _ctx.part.properties) == null ? void 0 : _c.name) === "Login Design Part" ? (vue.openBlock(), vue.createBlock(_sfc_main$v, {
9173
9096
  key: 0,
9174
9097
  part: _ctx.part
9175
9098
  }, null, 8, ["part"])) : vue.createCommentVNode("", true)
9176
9099
  ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
9177
9100
  _ctx.part.children && _ctx.part.children.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(_ctx.part.children, (block) => {
9178
- return vue.openBlock(), vue.createBlock(_sfc_main$y, {
9101
+ return vue.openBlock(), vue.createBlock(_sfc_main$w, {
9179
9102
  key: block.partId,
9180
9103
  part: block
9181
9104
  }, null, 8, ["part"]);
@@ -9184,20 +9107,20 @@ ${_html.style}
9184
9107
  onAddWidget: addWidget
9185
9108
  }))
9186
9109
  ], 64))
9187
- ], 16, _hoisted_1$A)), [
9110
+ ], 16, _hoisted_1$y)), [
9188
9111
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
9189
9112
  ]);
9190
9113
  };
9191
9114
  }
9192
9115
  });
9193
- const _hoisted_1$z = { class: "group-editor group-editor-position" };
9194
- const _hoisted_2$r = { class: "flex-align-center" };
9195
- const _hoisted_3$p = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
9116
+ const _hoisted_1$x = { class: "group-editor group-editor-position" };
9117
+ const _hoisted_2$p = { class: "flex-align-center" };
9118
+ const _hoisted_3$n = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
9196
9119
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Position" })
9197
9120
  ], -1);
9198
- const _hoisted_4$g = { class: "flex-grow-1" };
9199
- const _hoisted_5$8 = { class: "bg-gray-100 py-5 rounded-8" };
9200
- const _hoisted_6$7 = { class: "text-center" };
9121
+ const _hoisted_4$f = { class: "flex-grow-1" };
9122
+ const _hoisted_5$7 = { class: "bg-gray-100 py-5 rounded-8" };
9123
+ const _hoisted_6$6 = { class: "text-center" };
9201
9124
  const _hoisted_7$6 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
9202
9125
  const _hoisted_8$6 = /* @__PURE__ */ vue.createElementVNode("div", {
9203
9126
  class: "d-inline-block text-center text-gray-300",
@@ -9206,7 +9129,7 @@ ${_html.style}
9206
9129
  /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "add")
9207
9130
  ], -1);
9208
9131
  const _hoisted_9$5 = { class: "text-center" };
9209
- const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
9132
+ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
9210
9133
  __name: "PbPropertyGroupEditorPosition",
9211
9134
  props: {
9212
9135
  group: {},
@@ -9230,12 +9153,12 @@ ${_html.style}
9230
9153
  const updateTop = (value) => updatePropertyValue({ top: value });
9231
9154
  const updateBottom = (value) => updatePropertyValue({ bottom: value });
9232
9155
  return (_ctx, _cache) => {
9233
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, [
9234
- vue.createElementVNode("div", _hoisted_2$r, [
9235
- _hoisted_3$p,
9236
- vue.createElementVNode("div", _hoisted_4$g, [
9237
- vue.createElementVNode("div", _hoisted_5$8, [
9238
- vue.createElementVNode("div", _hoisted_6$7, [
9156
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$x, [
9157
+ vue.createElementVNode("div", _hoisted_2$p, [
9158
+ _hoisted_3$n,
9159
+ vue.createElementVNode("div", _hoisted_4$f, [
9160
+ vue.createElementVNode("div", _hoisted_5$7, [
9161
+ vue.createElementVNode("div", _hoisted_6$6, [
9239
9162
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
9240
9163
  "model-value": top.value,
9241
9164
  class: "ml-4",
@@ -9277,13 +9200,13 @@ ${_html.style}
9277
9200
  };
9278
9201
  }
9279
9202
  });
9280
- const _hoisted_1$y = { class: "group-editor group-editor-size" };
9281
- const _hoisted_2$q = { class: "flex-align-center" };
9282
- const _hoisted_3$o = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
9203
+ const _hoisted_1$w = { class: "group-editor group-editor-size" };
9204
+ const _hoisted_2$o = { class: "flex-align-center" };
9205
+ const _hoisted_3$m = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
9283
9206
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Size" })
9284
9207
  ], -1);
9285
- const _hoisted_4$f = { class: "flex-grow-1 bs-layout-horizontal" };
9286
- const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
9208
+ const _hoisted_4$e = { class: "flex-grow-1 bs-layout-horizontal" };
9209
+ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
9287
9210
  __name: "PbPropertyGroupEditorSize",
9288
9211
  props: {
9289
9212
  group: {},
@@ -9303,10 +9226,10 @@ ${_html.style}
9303
9226
  const updateWidth = (value) => updatePropertyValue({ width: value });
9304
9227
  const updateHeight = (value) => updatePropertyValue({ height: value });
9305
9228
  return (_ctx, _cache) => {
9306
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$y, [
9307
- vue.createElementVNode("div", _hoisted_2$q, [
9308
- _hoisted_3$o,
9309
- vue.createElementVNode("div", _hoisted_4$f, [
9229
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$w, [
9230
+ vue.createElementVNode("div", _hoisted_2$o, [
9231
+ _hoisted_3$m,
9232
+ vue.createElementVNode("div", _hoisted_4$e, [
9310
9233
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
9311
9234
  "model-value": width.value,
9312
9235
  class: "flex-grow-1 mr-2",
@@ -9482,22 +9405,22 @@ ${_html.style}
9482
9405
  }
9483
9406
  }
9484
9407
  };
9485
- const _hoisted_1$x = { class: "vc-alpha" };
9486
- const _hoisted_2$p = { class: "vc-alpha-checkboard-wrap" };
9487
- const _hoisted_3$n = /* @__PURE__ */ vue.createElementVNode(
9408
+ const _hoisted_1$v = { class: "vc-alpha" };
9409
+ const _hoisted_2$n = { class: "vc-alpha-checkboard-wrap" };
9410
+ const _hoisted_3$l = /* @__PURE__ */ vue.createElementVNode(
9488
9411
  "div",
9489
9412
  { class: "vc-alpha-picker" },
9490
9413
  null,
9491
9414
  -1
9492
9415
  /* HOISTED */
9493
9416
  );
9494
- const _hoisted_4$e = [
9495
- _hoisted_3$n
9417
+ const _hoisted_4$d = [
9418
+ _hoisted_3$l
9496
9419
  ];
9497
9420
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
9498
9421
  const _component_Checkboard = vue.resolveComponent("Checkboard");
9499
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$x, [
9500
- vue.createElementVNode("div", _hoisted_2$p, [
9422
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$v, [
9423
+ vue.createElementVNode("div", _hoisted_2$n, [
9501
9424
  vue.createVNode(_component_Checkboard)
9502
9425
  ]),
9503
9426
  vue.createElementVNode(
@@ -9526,7 +9449,7 @@ ${_html.style}
9526
9449
  class: "vc-alpha-pointer",
9527
9450
  style: vue.normalizeStyle({ left: `${$options.colors.a * 100}%` })
9528
9451
  },
9529
- _hoisted_4$e,
9452
+ _hoisted_4$d,
9530
9453
  4
9531
9454
  /* STYLE */
9532
9455
  )
@@ -10600,12 +10523,12 @@ ${_html.style}
10600
10523
  // }
10601
10524
  }
10602
10525
  };
10603
- const _hoisted_1$w = { class: "vc-editable-input" };
10604
- const _hoisted_2$o = ["aria-labelledby"];
10605
- const _hoisted_3$m = ["id", "for"];
10606
- const _hoisted_4$d = { class: "vc-input__desc" };
10526
+ const _hoisted_1$u = { class: "vc-editable-input" };
10527
+ const _hoisted_2$m = ["aria-labelledby"];
10528
+ const _hoisted_3$k = ["id", "for"];
10529
+ const _hoisted_4$c = { class: "vc-input__desc" };
10607
10530
  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
10608
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$w, [
10531
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$u, [
10609
10532
  vue.withDirectives(vue.createElementVNode("input", {
10610
10533
  ref: "input",
10611
10534
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $options.val = $event),
@@ -10613,17 +10536,17 @@ ${_html.style}
10613
10536
  class: "vc-input__input",
10614
10537
  onKeydown: _cache[1] || (_cache[1] = (...args) => $options.handleKeyDown && $options.handleKeyDown(...args)),
10615
10538
  onInput: _cache[2] || (_cache[2] = (...args) => $options.update && $options.update(...args))
10616
- }, null, 40, _hoisted_2$o), [
10539
+ }, null, 40, _hoisted_2$m), [
10617
10540
  [vue.vModelText, $options.val]
10618
10541
  ]),
10619
10542
  vue.createElementVNode("span", {
10620
10543
  id: $options.labelId,
10621
10544
  for: $props.label,
10622
10545
  class: "vc-input__label"
10623
- }, vue.toDisplayString($options.labelSpanText), 9, _hoisted_3$m),
10546
+ }, vue.toDisplayString($options.labelSpanText), 9, _hoisted_3$k),
10624
10547
  vue.createElementVNode(
10625
10548
  "span",
10626
- _hoisted_4$d,
10549
+ _hoisted_4$c,
10627
10550
  vue.toDisplayString($props.desc),
10628
10551
  1
10629
10552
  /* TEXT */
@@ -10700,29 +10623,29 @@ ${_html.style}
10700
10623
  }
10701
10624
  }
10702
10625
  };
10703
- const _hoisted_1$v = /* @__PURE__ */ vue.createElementVNode(
10626
+ const _hoisted_1$t = /* @__PURE__ */ vue.createElementVNode(
10704
10627
  "div",
10705
10628
  { class: "vc-saturation--white" },
10706
10629
  null,
10707
10630
  -1
10708
10631
  /* HOISTED */
10709
10632
  );
10710
- const _hoisted_2$n = /* @__PURE__ */ vue.createElementVNode(
10633
+ const _hoisted_2$l = /* @__PURE__ */ vue.createElementVNode(
10711
10634
  "div",
10712
10635
  { class: "vc-saturation--black" },
10713
10636
  null,
10714
10637
  -1
10715
10638
  /* HOISTED */
10716
10639
  );
10717
- const _hoisted_3$l = /* @__PURE__ */ vue.createElementVNode(
10640
+ const _hoisted_3$j = /* @__PURE__ */ vue.createElementVNode(
10718
10641
  "div",
10719
10642
  { class: "vc-saturation-circle" },
10720
10643
  null,
10721
10644
  -1
10722
10645
  /* HOISTED */
10723
10646
  );
10724
- const _hoisted_4$c = [
10725
- _hoisted_3$l
10647
+ const _hoisted_4$b = [
10648
+ _hoisted_3$j
10726
10649
  ];
10727
10650
  function render$2(_ctx, _cache, $props, $setup, $data, $options) {
10728
10651
  return vue.openBlock(), vue.createElementBlock(
@@ -10736,15 +10659,15 @@ ${_html.style}
10736
10659
  onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.handleChange && $options.handleChange(...args))
10737
10660
  },
10738
10661
  [
10739
- _hoisted_1$v,
10740
- _hoisted_2$n,
10662
+ _hoisted_1$t,
10663
+ _hoisted_2$l,
10741
10664
  vue.createElementVNode(
10742
10665
  "div",
10743
10666
  {
10744
10667
  class: "vc-saturation-pointer",
10745
10668
  style: vue.normalizeStyle({ top: $options.pointerTop, left: $options.pointerLeft })
10746
10669
  },
10747
- _hoisted_4$c,
10670
+ _hoisted_4$b,
10748
10671
  4
10749
10672
  /* STYLE */
10750
10673
  )
@@ -10885,16 +10808,16 @@ ${_html.style}
10885
10808
  }
10886
10809
  }
10887
10810
  };
10888
- const _hoisted_1$u = ["aria-valuenow"];
10889
- const _hoisted_2$m = /* @__PURE__ */ vue.createElementVNode(
10811
+ const _hoisted_1$s = ["aria-valuenow"];
10812
+ const _hoisted_2$k = /* @__PURE__ */ vue.createElementVNode(
10890
10813
  "div",
10891
10814
  { class: "vc-hue-picker" },
10892
10815
  null,
10893
10816
  -1
10894
10817
  /* HOISTED */
10895
10818
  );
10896
- const _hoisted_3$k = [
10897
- _hoisted_2$m
10819
+ const _hoisted_3$i = [
10820
+ _hoisted_2$k
10898
10821
  ];
10899
10822
  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
10900
10823
  return vue.openBlock(), vue.createElementBlock(
@@ -10921,11 +10844,11 @@ ${_html.style}
10921
10844
  style: vue.normalizeStyle({ top: $options.pointerTop, left: $options.pointerLeft }),
10922
10845
  role: "presentation"
10923
10846
  },
10924
- _hoisted_3$k,
10847
+ _hoisted_3$i,
10925
10848
  4
10926
10849
  /* STYLE */
10927
10850
  )
10928
- ], 40, _hoisted_1$u)
10851
+ ], 40, _hoisted_1$s)
10929
10852
  ],
10930
10853
  2
10931
10854
  /* CLASS */
@@ -11021,15 +10944,15 @@ ${_html.style}
11021
10944
  }
11022
10945
  }
11023
10946
  };
11024
- const _hoisted_1$t = { class: "vc-sketch-saturation-wrap" };
11025
- const _hoisted_2$l = { class: "vc-sketch-controls" };
11026
- const _hoisted_3$j = { class: "vc-sketch-sliders" };
11027
- const _hoisted_4$b = { class: "vc-sketch-hue-wrap" };
11028
- const _hoisted_5$7 = {
10947
+ const _hoisted_1$r = { class: "vc-sketch-saturation-wrap" };
10948
+ const _hoisted_2$j = { class: "vc-sketch-controls" };
10949
+ const _hoisted_3$h = { class: "vc-sketch-sliders" };
10950
+ const _hoisted_4$a = { class: "vc-sketch-hue-wrap" };
10951
+ const _hoisted_5$6 = {
11029
10952
  key: 0,
11030
10953
  class: "vc-sketch-alpha-wrap"
11031
10954
  };
11032
- const _hoisted_6$6 = { class: "vc-sketch-color-wrap" };
10955
+ const _hoisted_6$5 = { class: "vc-sketch-color-wrap" };
11033
10956
  const _hoisted_7$5 = ["aria-label"];
11034
10957
  const _hoisted_8$5 = {
11035
10958
  key: 0,
@@ -11064,28 +10987,28 @@ ${_html.style}
11064
10987
  class: vue.normalizeClass(["vc-sketch", [$props.disableAlpha ? "vc-sketch__disable-alpha" : ""]])
11065
10988
  },
11066
10989
  [
11067
- vue.createElementVNode("div", _hoisted_1$t, [
10990
+ vue.createElementVNode("div", _hoisted_1$r, [
11068
10991
  vue.createVNode(_component_Saturation, {
11069
10992
  value: _ctx.colors,
11070
10993
  onChange: $options.childChange
11071
10994
  }, null, 8, ["value", "onChange"])
11072
10995
  ]),
11073
- vue.createElementVNode("div", _hoisted_2$l, [
11074
- vue.createElementVNode("div", _hoisted_3$j, [
11075
- vue.createElementVNode("div", _hoisted_4$b, [
10996
+ vue.createElementVNode("div", _hoisted_2$j, [
10997
+ vue.createElementVNode("div", _hoisted_3$h, [
10998
+ vue.createElementVNode("div", _hoisted_4$a, [
11076
10999
  vue.createVNode(_component_Hue, {
11077
11000
  value: _ctx.colors,
11078
11001
  onChange: $options.childChange
11079
11002
  }, null, 8, ["value", "onChange"])
11080
11003
  ]),
11081
- !$props.disableAlpha ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$7, [
11004
+ !$props.disableAlpha ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$6, [
11082
11005
  vue.createVNode(_component_Alpha, {
11083
11006
  value: _ctx.colors,
11084
11007
  onChange: $options.childChange
11085
11008
  }, null, 8, ["value", "onChange"])
11086
11009
  ])) : vue.createCommentVNode("v-if", true)
11087
11010
  ]),
11088
- vue.createElementVNode("div", _hoisted_6$6, [
11011
+ vue.createElementVNode("div", _hoisted_6$5, [
11089
11012
  vue.createElementVNode("div", {
11090
11013
  "aria-label": `Current color is ${$options.activeColor}`,
11091
11014
  class: "vc-sketch-active-color",
@@ -11176,7 +11099,7 @@ ${_html.style}
11176
11099
  script.render = render;
11177
11100
  script.__file = "src/components/sketch/sketch.vue";
11178
11101
  script.install = install;
11179
- const _sfc_main$t = vue.defineComponent({
11102
+ const _sfc_main$r = vue.defineComponent({
11180
11103
  name: "PbColorPicker",
11181
11104
  components: {
11182
11105
  Sketch: script
@@ -11240,12 +11163,12 @@ ${_html.style}
11240
11163
  };
11241
11164
  }
11242
11165
  });
11243
- const _hoisted_1$s = { class: "buttons" };
11244
- const _hoisted_2$k = /* @__PURE__ */ vue.createElementVNode("i", { class: "material-icons-outlined" }, "delete", -1);
11245
- const _hoisted_3$i = [
11246
- _hoisted_2$k
11166
+ const _hoisted_1$q = { class: "buttons" };
11167
+ const _hoisted_2$i = /* @__PURE__ */ vue.createElementVNode("i", { class: "material-icons-outlined" }, "delete", -1);
11168
+ const _hoisted_3$g = [
11169
+ _hoisted_2$i
11247
11170
  ];
11248
- const _hoisted_4$a = { class: "sketch-wrap" };
11171
+ const _hoisted_4$9 = { class: "sketch-wrap" };
11249
11172
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11250
11173
  const _component_Sketch = vue.resolveComponent("Sketch");
11251
11174
  const _directive_click_outside = vue.resolveDirective("click-outside");
@@ -11254,7 +11177,7 @@ ${_html.style}
11254
11177
  onKeydown: _cache[3] || (_cache[3] = vue.withModifiers(() => {
11255
11178
  }, ["stop"]))
11256
11179
  }, [
11257
- vue.createElementVNode("div", _hoisted_1$s, [
11180
+ vue.createElementVNode("div", _hoisted_1$q, [
11258
11181
  vue.renderSlot(_ctx.$slots, "button", vue.normalizeProps(vue.guardReactiveProps({ toggle: _ctx.toggle, color: _ctx.color })), () => [
11259
11182
  vue.createElementVNode("button", {
11260
11183
  class: vue.normalizeClass([{ none: !_ctx.color }, "pb-button picker-button"]),
@@ -11266,9 +11189,9 @@ ${_html.style}
11266
11189
  key: 0,
11267
11190
  class: "pb-button",
11268
11191
  onClick: _cache[1] || (_cache[1] = (...args) => _ctx.emptyColor && _ctx.emptyColor(...args))
11269
- }, _hoisted_3$i)) : vue.createCommentVNode("", true)
11192
+ }, _hoisted_3$g)) : vue.createCommentVNode("", true)
11270
11193
  ]),
11271
- vue.createElementVNode("div", _hoisted_4$a, [
11194
+ vue.createElementVNode("div", _hoisted_4$9, [
11272
11195
  _ctx.isShowColorPicker ? (vue.openBlock(), vue.createBlock(_component_Sketch, {
11273
11196
  key: 0,
11274
11197
  modelValue: _ctx.color,
@@ -11280,15 +11203,15 @@ ${_html.style}
11280
11203
  [_directive_click_outside, () => _ctx.toggle(false)]
11281
11204
  ]);
11282
11205
  }
11283
- const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render]]);
11284
- const _hoisted_1$r = { class: "group-editor group-editor-background" };
11285
- const _hoisted_2$j = { class: "flex-align-center" };
11286
- const _hoisted_3$h = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11206
+ const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render]]);
11207
+ const _hoisted_1$p = { class: "group-editor group-editor-background" };
11208
+ const _hoisted_2$h = { class: "flex-align-center" };
11209
+ const _hoisted_3$f = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11287
11210
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Background" })
11288
11211
  ], -1);
11289
- const _hoisted_4$9 = { class: "bs-layout-horizontal" };
11290
- const _hoisted_5$6 = { class: "color" };
11291
- const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
11212
+ const _hoisted_4$8 = { class: "bs-layout-horizontal" };
11213
+ const _hoisted_5$5 = { class: "color" };
11214
+ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
11292
11215
  __name: "PbPropertyGroupEditorBackground",
11293
11216
  props: {
11294
11217
  group: {},
@@ -11297,6 +11220,7 @@ ${_html.style}
11297
11220
  setup(__props) {
11298
11221
  const props = __props;
11299
11222
  const pageBuilder = usePageBuilderEditor();
11223
+ const modal = bluesea.useModal();
11300
11224
  const color = vue.computed(() => getPropertyValueOfParts(props.selectedParts, "backgroundColor"));
11301
11225
  const emptyColor = () => {
11302
11226
  };
@@ -11310,19 +11234,19 @@ ${_html.style}
11310
11234
  };
11311
11235
  const updateColor = (value) => updatePropertyValue({ backgroundColor: value });
11312
11236
  const selectImage = () => {
11313
- PageBuilderEditorEvent.emit.requestImage({
11314
- pageBuilderId: pageBuilder.instanceId,
11315
- callback: (url) => {
11237
+ const imageProvider = pageBuilder.getProvider("imageProvider");
11238
+ if (imageProvider) {
11239
+ imageProvider({ modal }, (url) => {
11316
11240
  updatePropertyValue({ backgroundImage: url });
11317
- }
11318
- });
11241
+ });
11242
+ }
11319
11243
  };
11320
11244
  return (_ctx, _cache) => {
11321
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$r, [
11322
- vue.createElementVNode("div", _hoisted_2$j, [
11323
- _hoisted_3$h,
11324
- vue.createElementVNode("div", _hoisted_4$9, [
11325
- vue.createElementVNode("div", _hoisted_5$6, [
11245
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
11246
+ vue.createElementVNode("div", _hoisted_2$h, [
11247
+ _hoisted_3$f,
11248
+ vue.createElementVNode("div", _hoisted_4$8, [
11249
+ vue.createElementVNode("div", _hoisted_5$5, [
11326
11250
  vue.createVNode(PbColorPicker, {
11327
11251
  value: color.value,
11328
11252
  "hide-delete": "",
@@ -11351,16 +11275,16 @@ ${_html.style}
11351
11275
  const TopRightCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11352
11276
  const BottomLeftCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(180)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11353
11277
  const BottomRightCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(90)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11354
- const _hoisted_1$q = { class: "group-editor group-editor-border" };
11355
- const _hoisted_2$i = { class: "flex-align-center" };
11356
- const _hoisted_3$g = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11278
+ const _hoisted_1$o = { class: "group-editor group-editor-border" };
11279
+ const _hoisted_2$g = { class: "flex-align-center" };
11280
+ const _hoisted_3$e = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11357
11281
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Border" })
11358
11282
  ], -1);
11359
- const _hoisted_4$8 = { class: "" };
11360
- const _hoisted_5$5 = /* @__PURE__ */ vue.createElementVNode("div", { class: "sub-title" }, [
11283
+ const _hoisted_4$7 = { class: "" };
11284
+ const _hoisted_5$4 = /* @__PURE__ */ vue.createElementVNode("div", { class: "sub-title" }, [
11361
11285
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Color" })
11362
11286
  ], -1);
11363
- const _hoisted_6$5 = { class: "color" };
11287
+ const _hoisted_6$4 = { class: "color" };
11364
11288
  const _hoisted_7$4 = { class: "mt-8" };
11365
11289
  const _hoisted_8$4 = /* @__PURE__ */ vue.createElementVNode("div", { class: "sub-title" }, [
11366
11290
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Border Width" })
@@ -11384,7 +11308,7 @@ ${_html.style}
11384
11308
  const _hoisted_18 = { class: "bg-gray-100 py-5 rounded-8" };
11385
11309
  const _hoisted_19 = { class: "" };
11386
11310
  const _hoisted_20 = { class: "mt-2" };
11387
- const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
11311
+ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
11388
11312
  __name: "PbPropertyGroupEditorBorder",
11389
11313
  props: {
11390
11314
  group: {},
@@ -11422,12 +11346,12 @@ ${_html.style}
11422
11346
  const updateBorderBottomLeftRadius = (value) => updatePropertyValue({ borderBottomLeftRadius: value });
11423
11347
  const updateBorderBottomRightRadius = (value) => updatePropertyValue({ borderBottomRightRadius: value });
11424
11348
  return (_ctx, _cache) => {
11425
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$q, [
11426
- vue.createElementVNode("div", _hoisted_2$i, [
11427
- _hoisted_3$g,
11428
- vue.createElementVNode("div", _hoisted_4$8, [
11429
- _hoisted_5$5,
11430
- vue.createElementVNode("div", _hoisted_6$5, [
11349
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [
11350
+ vue.createElementVNode("div", _hoisted_2$g, [
11351
+ _hoisted_3$e,
11352
+ vue.createElementVNode("div", _hoisted_4$7, [
11353
+ _hoisted_5$4,
11354
+ vue.createElementVNode("div", _hoisted_6$4, [
11431
11355
  vue.createVNode(PbColorPicker, {
11432
11356
  value: color.value,
11433
11357
  "hide-delete": "",
@@ -11531,14 +11455,14 @@ ${_html.style}
11531
11455
  };
11532
11456
  }
11533
11457
  });
11534
- const _hoisted_1$p = { class: "group-editor group-editor-margin" };
11535
- const _hoisted_2$h = { class: "flex-align-center" };
11536
- const _hoisted_3$f = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11458
+ const _hoisted_1$n = { class: "group-editor group-editor-margin" };
11459
+ const _hoisted_2$f = { class: "flex-align-center" };
11460
+ const _hoisted_3$d = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11537
11461
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Margin" })
11538
11462
  ], -1);
11539
- const _hoisted_4$7 = { class: "flex-grow-1" };
11540
- const _hoisted_5$4 = { class: "bg-gray-100 py-5 rounded-8" };
11541
- const _hoisted_6$4 = { class: "text-center" };
11463
+ const _hoisted_4$6 = { class: "flex-grow-1" };
11464
+ const _hoisted_5$3 = { class: "bg-gray-100 py-5 rounded-8" };
11465
+ const _hoisted_6$3 = { class: "text-center" };
11542
11466
  const _hoisted_7$3 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11543
11467
  const _hoisted_8$3 = /* @__PURE__ */ vue.createElementVNode("div", {
11544
11468
  class: "d-inline-block text-center text-gray-300",
@@ -11547,7 +11471,7 @@ ${_html.style}
11547
11471
  /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "add")
11548
11472
  ], -1);
11549
11473
  const _hoisted_9$2 = { class: "text-center" };
11550
- const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
11474
+ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11551
11475
  __name: "PbPropertyGroupEditorMargin",
11552
11476
  props: {
11553
11477
  group: {},
@@ -11571,12 +11495,12 @@ ${_html.style}
11571
11495
  const updateTop = (value) => updatePropertyValue({ marginTop: value });
11572
11496
  const updateBottom = (value) => updatePropertyValue({ marginBottom: value });
11573
11497
  return (_ctx, _cache) => {
11574
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
11575
- vue.createElementVNode("div", _hoisted_2$h, [
11576
- _hoisted_3$f,
11577
- vue.createElementVNode("div", _hoisted_4$7, [
11578
- vue.createElementVNode("div", _hoisted_5$4, [
11579
- vue.createElementVNode("div", _hoisted_6$4, [
11498
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [
11499
+ vue.createElementVNode("div", _hoisted_2$f, [
11500
+ _hoisted_3$d,
11501
+ vue.createElementVNode("div", _hoisted_4$6, [
11502
+ vue.createElementVNode("div", _hoisted_5$3, [
11503
+ vue.createElementVNode("div", _hoisted_6$3, [
11580
11504
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
11581
11505
  "model-value": top.value,
11582
11506
  class: "ml-4",
@@ -11618,14 +11542,14 @@ ${_html.style}
11618
11542
  };
11619
11543
  }
11620
11544
  });
11621
- const _hoisted_1$o = { class: "group-editor group-editor-padding" };
11622
- const _hoisted_2$g = { class: "flex-align-center" };
11623
- const _hoisted_3$e = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11545
+ const _hoisted_1$m = { class: "group-editor group-editor-padding" };
11546
+ const _hoisted_2$e = { class: "flex-align-center" };
11547
+ const _hoisted_3$c = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
11624
11548
  /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Padding" })
11625
11549
  ], -1);
11626
- const _hoisted_4$6 = { class: "flex-grow-1" };
11627
- const _hoisted_5$3 = { class: "bg-gray-100 py-5 rounded-8" };
11628
- const _hoisted_6$3 = { class: "text-center" };
11550
+ const _hoisted_4$5 = { class: "flex-grow-1" };
11551
+ const _hoisted_5$2 = { class: "bg-gray-100 py-5 rounded-8" };
11552
+ const _hoisted_6$2 = { class: "text-center" };
11629
11553
  const _hoisted_7$2 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11630
11554
  const _hoisted_8$2 = /* @__PURE__ */ vue.createElementVNode("div", {
11631
11555
  class: "d-inline-block text-center text-gray-300",
@@ -11634,7 +11558,7 @@ ${_html.style}
11634
11558
  /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "add")
11635
11559
  ], -1);
11636
11560
  const _hoisted_9$1 = { class: "text-center" };
11637
- const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
11561
+ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11638
11562
  __name: "PbPropertyGroupEditorPadding",
11639
11563
  props: {
11640
11564
  group: {},
@@ -11658,12 +11582,12 @@ ${_html.style}
11658
11582
  const updateTop = (value) => updatePropertyValue({ paddingTop: value });
11659
11583
  const updateBottom = (value) => updatePropertyValue({ paddingBottom: value });
11660
11584
  return (_ctx, _cache) => {
11661
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [
11662
- vue.createElementVNode("div", _hoisted_2$g, [
11663
- _hoisted_3$e,
11664
- vue.createElementVNode("div", _hoisted_4$6, [
11665
- vue.createElementVNode("div", _hoisted_5$3, [
11666
- vue.createElementVNode("div", _hoisted_6$3, [
11585
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$m, [
11586
+ vue.createElementVNode("div", _hoisted_2$e, [
11587
+ _hoisted_3$c,
11588
+ vue.createElementVNode("div", _hoisted_4$5, [
11589
+ vue.createElementVNode("div", _hoisted_5$2, [
11590
+ vue.createElementVNode("div", _hoisted_6$2, [
11667
11591
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
11668
11592
  "model-value": top.value,
11669
11593
  class: "ml-4",
@@ -11731,7 +11655,7 @@ ${_html.style}
11731
11655
  propertyType: "text"
11732
11656
  }
11733
11657
  ],
11734
- propertyGroupEditor: () => _sfc_main$v
11658
+ propertyGroupEditor: () => _sfc_main$t
11735
11659
  };
11736
11660
  };
11737
11661
  const sizeGroup = () => {
@@ -11770,7 +11694,7 @@ ${_html.style}
11770
11694
  propertyType: "text"
11771
11695
  }
11772
11696
  ],
11773
- propertyGroupEditor: () => _sfc_main$u
11697
+ propertyGroupEditor: () => _sfc_main$s
11774
11698
  };
11775
11699
  };
11776
11700
  const marginGroup = () => {
@@ -11799,7 +11723,7 @@ ${_html.style}
11799
11723
  propertyType: "text"
11800
11724
  }
11801
11725
  ],
11802
- propertyGroupEditor: () => _sfc_main$q
11726
+ propertyGroupEditor: () => _sfc_main$o
11803
11727
  };
11804
11728
  };
11805
11729
  const paddingGroup = () => {
@@ -11828,7 +11752,7 @@ ${_html.style}
11828
11752
  propertyType: "text"
11829
11753
  }
11830
11754
  ],
11831
- propertyGroupEditor: () => _sfc_main$p
11755
+ propertyGroupEditor: () => _sfc_main$n
11832
11756
  };
11833
11757
  };
11834
11758
  const commonGroup = () => {
@@ -11895,7 +11819,7 @@ ${_html.style}
11895
11819
  propertyType: "image"
11896
11820
  }
11897
11821
  ],
11898
- propertyGroupEditor: () => _sfc_main$s
11822
+ propertyGroupEditor: () => _sfc_main$q
11899
11823
  };
11900
11824
  };
11901
11825
  const borderGroup = () => {
@@ -11949,7 +11873,7 @@ ${_html.style}
11949
11873
  propertyType: "text"
11950
11874
  }
11951
11875
  ],
11952
- propertyGroupEditor: () => _sfc_main$r
11876
+ propertyGroupEditor: () => _sfc_main$p
11953
11877
  };
11954
11878
  };
11955
11879
  const defaultPropertyGroups = () => {
@@ -11958,56 +11882,6 @@ ${_html.style}
11958
11882
  const defaultWidgetPropertyGroups = () => {
11959
11883
  return [positionGroup(), sizeGroup(), marginGroup(), paddingGroup(), borderGroup(), backgroundGroup(), commonGroup()];
11960
11884
  };
11961
- const designParts = [
11962
- {
11963
- partType: "Section",
11964
- partName: "GlobalDesignPart",
11965
- caption: "Global Design Part",
11966
- icon: "rectangle",
11967
- propertyGroups: [
11968
- ...defaultPropertyGroups()
11969
- ],
11970
- initialProperties: {
11971
- sectionType: "globalDesignPart",
11972
- direction: "horizontal"
11973
- },
11974
- localized: false,
11975
- allowsChild: () => true,
11976
- creator: () => _sfc_main$w
11977
- },
11978
- {
11979
- partType: "Section",
11980
- partName: "LocalDesignPart",
11981
- caption: "Local Design Part",
11982
- icon: "rectangle",
11983
- propertyGroups: [
11984
- ...defaultPropertyGroups()
11985
- ],
11986
- initialProperties: {
11987
- sectionType: "localDesignPart",
11988
- direction: "horizontal"
11989
- },
11990
- localized: true,
11991
- allowsChild: () => true,
11992
- creator: () => _sfc_main$w
11993
- },
11994
- {
11995
- partType: "Section",
11996
- partName: "LocalMarketingPart",
11997
- caption: "Local Marketing Part",
11998
- icon: "rectangle",
11999
- propertyGroups: [
12000
- ...defaultPropertyGroups()
12001
- ],
12002
- initialProperties: {
12003
- sectionType: "localMarketingPart",
12004
- direction: "horizontal"
12005
- },
12006
- localized: true,
12007
- allowsChild: () => true,
12008
- creator: () => _sfc_main$w
12009
- }
12010
- ];
12011
11885
  const sectionParts = [
12012
11886
  {
12013
11887
  partType: "Section",
@@ -12022,7 +11896,7 @@ ${_html.style}
12022
11896
  },
12023
11897
  localized: false,
12024
11898
  allowsChild: () => true,
12025
- creator: () => _sfc_main$w
11899
+ creator: () => _sfc_main$u
12026
11900
  }
12027
11901
  ];
12028
11902
  const blockParts = [
@@ -12037,7 +11911,7 @@ ${_html.style}
12037
11911
  initialProperties: {},
12038
11912
  localized: false,
12039
11913
  allowsChild: () => true,
12040
- creator: () => _sfc_main$y
11914
+ creator: () => _sfc_main$w
12041
11915
  }
12042
11916
  ];
12043
11917
  const widgets = [
@@ -12166,9 +12040,6 @@ ${_html.style}
12166
12040
  }
12167
12041
  ];
12168
12042
  const partDefinitions = {};
12169
- for (let part of designParts) {
12170
- partDefinitions[part.partName] = part;
12171
- }
12172
12043
  for (let part of sectionParts) {
12173
12044
  partDefinitions[part.partName] = part;
12174
12045
  }
@@ -12178,13 +12049,6 @@ ${_html.style}
12178
12049
  for (let part of widgets) {
12179
12050
  partDefinitions[part.partName] = part;
12180
12051
  }
12181
- const designPartDefinitions = [
12182
- {
12183
- groupName: "DesignParts",
12184
- caption: "Design Parts",
12185
- partDefinitions: designParts
12186
- }
12187
- ];
12188
12052
  [
12189
12053
  {
12190
12054
  groupName: "Layout",
@@ -12241,19 +12105,6 @@ ${_html.style}
12241
12105
  }
12242
12106
  }
12243
12107
  }
12244
- const _OpenAddPartModalCommand = class _OpenAddPartModalCommand {
12245
- constructor(modal) {
12246
- __publicField(this, "commandId", _OpenAddPartModalCommand.COMMAND_ID);
12247
- __publicField(this, "caption", "Add Part");
12248
- this.modal = modal;
12249
- }
12250
- execute(pageBuilder, args) {
12251
- let partDefinitionGroups = designPartDefinitions;
12252
- openPartAddModal(this.modal, { pageBuilder, partDefinitionGroups, ...args || {} });
12253
- }
12254
- };
12255
- __publicField(_OpenAddPartModalCommand, "COMMAND_ID", "OpenAddPartModal");
12256
- let OpenAddPartModalCommand = _OpenAddPartModalCommand;
12257
12108
  const _OpenAddWidgetModalCommand = class _OpenAddWidgetModalCommand {
12258
12109
  constructor(modal) {
12259
12110
  __publicField(this, "commandId", _OpenAddWidgetModalCommand.COMMAND_ID);
@@ -12267,28 +12118,6 @@ ${_html.style}
12267
12118
  };
12268
12119
  __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
12269
12120
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
12270
- const openPartAddModal = (modal, args, callback) => {
12271
- modal.openModal({
12272
- component: vue.defineAsyncComponent(() => Promise.resolve().then(() => PbPartAddModal)),
12273
- style: {
12274
- width: "80%",
12275
- height: "80%",
12276
- maxWidth: "800px",
12277
- minWidth: "500px",
12278
- maxHeight: "800px"
12279
- },
12280
- bind: args,
12281
- on: {
12282
- selectHandler: (part) => {
12283
- if (callback) {
12284
- callback(part);
12285
- } else {
12286
- addPart(args.pageBuilder, part);
12287
- }
12288
- }
12289
- }
12290
- });
12291
- };
12292
12121
  const openWidgetAddModal = (modal, args, callback) => {
12293
12122
  modal.openModal({
12294
12123
  component: vue.defineAsyncComponent(() => Promise.resolve().then(() => PbWidgetAddModal)),
@@ -12303,12 +12132,12 @@ ${_html.style}
12303
12132
  on: {
12304
12133
  selectHandler: (part) => {
12305
12134
  if (["ImageWidget"].includes(part.partName)) {
12306
- PageBuilderEditorEvent.emit.requestImage({
12307
- pageBuilderId: args.pageBuilder.instanceId,
12308
- callback: (url) => {
12135
+ const imageProvider = args.pageBuilder.getProvider("imageProvider");
12136
+ if (imageProvider) {
12137
+ imageProvider({ modal }, (url) => {
12309
12138
  addPart(args.pageBuilder, part, { image: url });
12310
- }
12311
- });
12139
+ });
12140
+ }
12312
12141
  } else {
12313
12142
  if (callback) {
12314
12143
  callback(part);
@@ -12661,7 +12490,7 @@ ${_html.style}
12661
12490
  }
12662
12491
  };
12663
12492
  __publicField(_AddSectionAboveCommand, "COMMAND_ID", "AddSectionAbove");
12664
- __publicField(_AddSectionAboveCommand, "CAPTION", "Add Part Above");
12493
+ __publicField(_AddSectionAboveCommand, "CAPTION", "Add Section Above");
12665
12494
  let AddSectionAboveCommand = _AddSectionAboveCommand;
12666
12495
  const _AddSectionBelowCommand = class _AddSectionBelowCommand {
12667
12496
  constructor(modal) {
@@ -12674,7 +12503,7 @@ ${_html.style}
12674
12503
  }
12675
12504
  };
12676
12505
  __publicField(_AddSectionBelowCommand, "COMMAND_ID", "AddSectionBelow");
12677
- __publicField(_AddSectionBelowCommand, "CAPTION", "Add Part Below");
12506
+ __publicField(_AddSectionBelowCommand, "CAPTION", "Add Section Below");
12678
12507
  let AddSectionBelowCommand = _AddSectionBelowCommand;
12679
12508
  const _AddBlockLeftCommand = class _AddBlockLeftCommand {
12680
12509
  constructor() {
@@ -12823,6 +12652,20 @@ ${_html.style}
12823
12652
  __publicField(_DeletePartCommand, "COMMAND_ID", "DeletePart");
12824
12653
  __publicField(_DeletePartCommand, "CAPTION", "Delete");
12825
12654
  let DeletePartCommand = _DeletePartCommand;
12655
+ const _CopyAllCommand = class _CopyAllCommand {
12656
+ constructor() {
12657
+ __publicField(this, "commandId", _CopyAllCommand.COMMAND_ID);
12658
+ }
12659
+ async execute(pageBuilder) {
12660
+ const json = pageBuilder.model.serializeModel(
12661
+ (part) => pageBuilder.extractMedia(part),
12662
+ (partObject) => pageBuilder.extractProvider(partObject)
12663
+ );
12664
+ await navigator.clipboard.writeText(json);
12665
+ }
12666
+ };
12667
+ __publicField(_CopyAllCommand, "COMMAND_ID", "CopyAll");
12668
+ let CopyAllCommand = _CopyAllCommand;
12826
12669
  const _CopyPartCommand = class _CopyPartCommand {
12827
12670
  constructor() {
12828
12671
  __publicField(this, "commandId", _CopyPartCommand.COMMAND_ID);
@@ -12830,7 +12673,7 @@ ${_html.style}
12830
12673
  async execute(pageBuilder) {
12831
12674
  const partIds = pageBuilder.context.getSelectedParts().map((part) => part.partId);
12832
12675
  if (partIds.length > 0) {
12833
- const json = pageBuilder.model.serializePageModel(partIds);
12676
+ const json = pageBuilder.model.serializeParts(partIds);
12834
12677
  await navigator.clipboard.writeText(json);
12835
12678
  }
12836
12679
  }
@@ -12853,12 +12696,34 @@ ${_html.style}
12853
12696
  __publicField(this, "commandId", _PastePartCommand.COMMAND_ID);
12854
12697
  }
12855
12698
  async execute(pageBuilder) {
12856
- const { target, index = 0 } = findInsertTargetAndIndex(pageBuilder);
12857
- if (target) {
12858
- const json = await navigator.clipboard.readText();
12859
- const parts = pageBuilder.model.parsePageModel(json);
12860
- if (parts) {
12861
- insertParts(pageBuilder, target.partId, index, parts, false);
12699
+ const json = await navigator.clipboard.readText();
12700
+ const object = JSON.parse(json);
12701
+ if (object.partType === ROOT_TYPE) {
12702
+ const rootPart = partFromJsonObject(object, true);
12703
+ if (!rootPart)
12704
+ throw new Error("Invalid data format");
12705
+ let partIdsToDelete = void 0;
12706
+ if (pageBuilder.model.rootPart.children && pageBuilder.model.rootPart.children.length) {
12707
+ partIdsToDelete = pageBuilder.model.rootPart.children.map((v) => v.partId);
12708
+ }
12709
+ const param = {
12710
+ delete: partIdsToDelete,
12711
+ insert: [
12712
+ {
12713
+ partId: pageBuilder.model.getRootPartId(),
12714
+ index: 0,
12715
+ parts: rootPart.children || []
12716
+ }
12717
+ ]
12718
+ };
12719
+ pageBuilder.model.updateModel(param);
12720
+ } else {
12721
+ const { target, index = 0 } = findInsertTargetAndIndex(pageBuilder);
12722
+ if (target) {
12723
+ const parts = pageBuilder.model.parseParts(json);
12724
+ if (parts) {
12725
+ insertParts(pageBuilder, target.partId, index, parts, false);
12726
+ }
12862
12727
  }
12863
12728
  }
12864
12729
  }
@@ -12879,7 +12744,6 @@ ${_html.style}
12879
12744
  let SelectAllPartsCommand = _SelectAllPartsCommand;
12880
12745
  const createDefaultCommands = (modal) => {
12881
12746
  return [
12882
- new OpenAddPartModalCommand(modal),
12883
12747
  new OpenAddWidgetModalCommand(modal),
12884
12748
  new AddPartCommand(modal),
12885
12749
  new AddSectionCommand(modal),
@@ -12897,6 +12761,7 @@ ${_html.style}
12897
12761
  new AddWidgetInsideCommand(modal),
12898
12762
  new ChangePropertyCommand(),
12899
12763
  new DeletePartCommand(),
12764
+ new CopyAllCommand(),
12900
12765
  new CopyPartCommand(),
12901
12766
  new CutPartCommand(),
12902
12767
  new PastePartCommand(),
@@ -13064,17 +12929,8 @@ ${_html.style}
13064
12929
  }
13065
12930
  },
13066
12931
  {
13067
- groupId: "core:add",
13068
- commandId: OpenAddPartModalCommand.COMMAND_ID,
13069
- precedence: 10,
13070
- getMenuItem(pageBuilder) {
13071
- if (pageBuilder.context.getSelectionCount() <= 1)
13072
- return menuItemForCommand(pageBuilder, OpenAddPartModalCommand.COMMAND_ID);
13073
- }
13074
- },
13075
- {
13076
- groupId: "core:edit",
13077
- commandId: DeletePartCommand.COMMAND_ID,
12932
+ groupId: "core:edit",
12933
+ commandId: DeletePartCommand.COMMAND_ID,
13078
12934
  precedence: 10,
13079
12935
  getMenuItem(pageBuilder) {
13080
12936
  if (pageBuilder.context.hasSelection() && !pageBuilder.context.isPageSelected()) {
@@ -13146,6 +13002,12 @@ ${_html.style}
13146
13002
  icon: "redo",
13147
13003
  handler: (modeler) => modeler.redo()
13148
13004
  },
13005
+ {
13006
+ buttonId: "core:copyAll",
13007
+ caption: "Copy All",
13008
+ icon: "copy_all",
13009
+ handler: (modeler) => modeler.commandRegistry.executeCommand(CopyAllCommand.COMMAND_ID)
13010
+ },
13149
13011
  {
13150
13012
  buttonId: "core:copy",
13151
13013
  caption: "Copy",
@@ -13391,15 +13253,14 @@ ${_html.style}
13391
13253
  __publicField(this, "keyHandlers", new KeyHandlersImpl(this));
13392
13254
  __publicField(this, "toolButtonRegistry", new ToolButtonRegistryImpl());
13393
13255
  __publicField(this, "title");
13394
- __publicField(this, "editMode");
13395
13256
  __publicField(this, "scale", vue.ref(1));
13396
13257
  __publicField(this, "locale", vue.ref("en"));
13397
13258
  __publicField(this, "locales", vue.ref(["en"]));
13398
13259
  __publicField(this, "customWidgets", []);
13260
+ __publicField(this, "watchers", {});
13399
13261
  __publicField(this, "providers", {});
13400
13262
  this.model = new Model();
13401
13263
  this.context = new PageBuilderContextImpl(this);
13402
- this.editMode = "free";
13403
13264
  this.scale.value = 1;
13404
13265
  this.initPlugins();
13405
13266
  }
@@ -13428,13 +13289,19 @@ ${_html.style}
13428
13289
  const def = this.partManager.getPartDefinition(part.partName);
13429
13290
  if (!def || !def.dataWatcher)
13430
13291
  return false;
13431
- return def.dataWatcher(part.properties);
13292
+ const watcher = this.watchers[def.dataWatcher];
13293
+ if (!watcher)
13294
+ return false;
13295
+ return watcher(part.properties);
13432
13296
  }
13433
13297
  provideCustomWidgetData(part) {
13434
13298
  const def = this.partManager.getPartDefinition(part.partName);
13435
13299
  if (!def || !def.dataProvider)
13436
13300
  return Promise.resolve();
13437
- return def.dataProvider(part.properties);
13301
+ const provider = this.providers[def.dataProvider];
13302
+ if (!provider)
13303
+ return Promise.resolve();
13304
+ return provider(part.properties);
13438
13305
  }
13439
13306
  registerPlugin(plugin) {
13440
13307
  if (plugin.partDefinitions)
@@ -13458,7 +13325,7 @@ ${_html.style}
13458
13325
  plugin.widgets.forEach((v) => {
13459
13326
  const w = { ...v };
13460
13327
  w.partType = "Widget";
13461
- w.creator = () => _sfc_main$B;
13328
+ w.creator = () => _sfc_main$z;
13462
13329
  w.propertyGroups = [...w.propertyGroups, ...defaultWidgetPropertyGroups()];
13463
13330
  partDefinitions2[v.partName] = w;
13464
13331
  const found = this.customWidgets.find((x) => x.partName === v.partName);
@@ -13468,34 +13335,34 @@ ${_html.style}
13468
13335
  });
13469
13336
  this.partManager.registerPartDefinitions(partDefinitions2);
13470
13337
  }
13338
+ if (plugin.watchers) {
13339
+ this.watchers = { ...this.providers, ...plugin.watchers };
13340
+ }
13471
13341
  if (plugin.providers) {
13472
- this.providers = {
13473
- ...this.providers,
13474
- ...plugin.providers
13475
- };
13342
+ this.providers = { ...this.providers, ...plugin.providers };
13476
13343
  }
13477
13344
  if (plugin.propertyEditors) {
13478
13345
  this.partManager.registerPartPropertyEditors(plugin.propertyEditors);
13479
13346
  }
13480
13347
  }
13481
- initData(content) {
13482
- this.model.rootPart.pageBuilderId = this.instanceId;
13348
+ initData(data) {
13483
13349
  this.model.rootPart.language = this.locale.value;
13484
13350
  let parts;
13485
- if (content) {
13486
- for (const p of content) {
13487
- const page = partFromJsonObject(p, true);
13488
- if (page) {
13489
- if (!parts)
13490
- parts = [];
13491
- parts.push(page);
13492
- }
13493
- }
13351
+ if (data) {
13352
+ const rootPart = partFromJsonObject(data, true);
13353
+ if (!rootPart)
13354
+ throw new Error("Invalid data format");
13355
+ parts = rootPart.children;
13494
13356
  }
13495
13357
  if (!parts) {
13496
13358
  parts = [this.getEmptyPageContent(), this.getEmptyPageContent()];
13497
13359
  }
13360
+ let partIdsToDelete = void 0;
13361
+ if (this.model.rootPart.children && this.model.rootPart.children.length) {
13362
+ partIdsToDelete = this.model.rootPart.children.map((v) => v.partId);
13363
+ }
13498
13364
  const param = {
13365
+ delete: partIdsToDelete,
13499
13366
  insert: [
13500
13367
  {
13501
13368
  partId: this.model.getRootPartId(),
@@ -13535,8 +13402,8 @@ ${_html.style}
13535
13402
  if (screenCount !== 1)
13536
13403
  return;
13537
13404
  const part = this.model.rootPart.children[0];
13538
- const json = this.model.serializePageModel([part.partId]);
13539
- const copied = this.model.parsePageModel(json);
13405
+ const json = this.model.serializeParts([part.partId]);
13406
+ const copied = this.model.parseParts(json);
13540
13407
  if (!copied)
13541
13408
  return;
13542
13409
  this.model.updateModel({
@@ -13552,6 +13419,100 @@ ${_html.style}
13552
13419
  getCustomWidgets() {
13553
13420
  return this.customWidgets;
13554
13421
  }
13422
+ extractMedia(part) {
13423
+ const urls = /* @__PURE__ */ new Set();
13424
+ this.extractMediaFromPart(part, urls);
13425
+ return Array.from(urls);
13426
+ }
13427
+ extractProvider(part) {
13428
+ const def = this.partManager.getPartDefinition(part.partName);
13429
+ if (def && (def == null ? void 0 : def.dataProvider)) {
13430
+ part.dataProvider = def.dataProvider;
13431
+ }
13432
+ if (part.children && part.children.length) {
13433
+ for (const child of part.children) {
13434
+ this.extractProvider(child);
13435
+ }
13436
+ }
13437
+ }
13438
+ extractMediaFromPart(part, urls) {
13439
+ if (part.properties) {
13440
+ for (const name in part.properties) {
13441
+ const def = this.partManager.getPropertyDefinition(part.partName, name);
13442
+ if (def && def.propertyType === "image") {
13443
+ const value = part.properties[name];
13444
+ if (value) {
13445
+ urls.add(value);
13446
+ }
13447
+ }
13448
+ }
13449
+ if (part.properties.css) {
13450
+ this.extractMediaFromHtml(part.properties.css, urls);
13451
+ }
13452
+ if (part.partName === "HtmlWidget" && part.properties.html) {
13453
+ for (const locale in part.properties.html) {
13454
+ const html = part.properties.html[locale];
13455
+ if (html.tags)
13456
+ this.extractMediaFromHtml(html.tags, urls);
13457
+ if (html.style)
13458
+ this.extractMediaFromHtml(html.style, urls);
13459
+ }
13460
+ }
13461
+ }
13462
+ if (part.children && part.children.length) {
13463
+ for (const child of part.children) {
13464
+ this.extractMediaFromPart(child, urls);
13465
+ }
13466
+ }
13467
+ }
13468
+ extractMediaFromHtml(html, urls) {
13469
+ const imgSrcMatches = html.match(/<img[^>]+src=["']?([^"'\s>]+)["']?[^>]*>/gi);
13470
+ if (imgSrcMatches) {
13471
+ imgSrcMatches.forEach((match) => {
13472
+ const url = match.match(/src=["']?([^"'\s>]+)["']?/i);
13473
+ if (url && url[1]) {
13474
+ urls.add(url[1]);
13475
+ }
13476
+ });
13477
+ }
13478
+ const sourceSrcsetMatches = html.match(/<source[^>]+srcset=["']?([^"'>]+)["']?[^>]*>/gi);
13479
+ if (sourceSrcsetMatches) {
13480
+ sourceSrcsetMatches.forEach((match) => {
13481
+ const srcset = match.match(/srcset=["']?([^"'>]+)["']?/i);
13482
+ if (srcset && srcset[1]) {
13483
+ const _urls = srcset[1].split(",").map((item) => item.trim().split(/\s+/)[0]);
13484
+ _urls.forEach((url) => urls.add(url));
13485
+ }
13486
+ });
13487
+ }
13488
+ const inputImageMatches = html.match(/<input[^>]+type=["']image["'][^>]+src=["']?([^"'\s>]+)["']?[^>]*>/gi);
13489
+ if (inputImageMatches) {
13490
+ inputImageMatches.forEach((match) => {
13491
+ const url = match.match(/src=["']?([^"'\s>]+)["']?/i);
13492
+ if (url && url[1]) {
13493
+ urls.add(url[1]);
13494
+ }
13495
+ });
13496
+ }
13497
+ const styleUrlMatches = html.match(/style=["']?[^"'>]*(background|background-image|border-image|list-style-image|content):\s*url\(["']?([^"'\)]+)["']?\)/gi);
13498
+ if (styleUrlMatches) {
13499
+ styleUrlMatches.forEach((match) => {
13500
+ const url = match.match(/url\(["']?([^"'\)]+)["']?\)/i);
13501
+ if (url && url[1]) {
13502
+ urls.add(url[1]);
13503
+ }
13504
+ });
13505
+ }
13506
+ const styleTagUrlMatches = html.match(/(background|background-image|border-image|list-style-image|content):\s*url\(["']?([^"'\)]+)["']?\)/gi);
13507
+ if (styleTagUrlMatches) {
13508
+ styleTagUrlMatches.forEach((match) => {
13509
+ const url = match.match(/url\(["']?([^"'\)]+)["']?\)/i);
13510
+ if (url && url[1]) {
13511
+ urls.add(url[1]);
13512
+ }
13513
+ });
13514
+ }
13515
+ }
13555
13516
  getEmptyPageContent() {
13556
13517
  const block = new Block();
13557
13518
  const section = new Section();
@@ -13572,11 +13533,11 @@ ${_html.style}
13572
13533
  });
13573
13534
  }
13574
13535
  }
13575
- const _hoisted_1$n = /* @__PURE__ */ vue.createElementVNode("i", { class: "material-icons-outlined" }, "add_circle_outline", -1);
13576
- const _hoisted_2$f = [
13577
- _hoisted_1$n
13536
+ const _hoisted_1$l = /* @__PURE__ */ vue.createElementVNode("i", { class: "material-icons-outlined" }, "add_circle_outline", -1);
13537
+ const _hoisted_2$d = [
13538
+ _hoisted_1$l
13578
13539
  ];
13579
- const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
13540
+ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
13580
13541
  __name: "PbPage",
13581
13542
  props: {
13582
13543
  page: {},
@@ -13609,7 +13570,7 @@ ${_html.style}
13609
13570
  class: vue.normalizeClass([selected.value && "selected", _ctx.isMobilePage ? "mobile" : "pc", "pb-page-content"])
13610
13571
  }, [
13611
13572
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a = _ctx.page) == null ? void 0 : _a.children, (section, index) => {
13612
- return vue.openBlock(), vue.createBlock(_sfc_main$w, {
13573
+ return vue.openBlock(), vue.createBlock(_sfc_main$u, {
13613
13574
  key: section.partId,
13614
13575
  part: section
13615
13576
  }, null, 8, ["part"]);
@@ -13621,13 +13582,13 @@ ${_html.style}
13621
13582
  var _a2, _b;
13622
13583
  return insertSection(((_b = (_a2 = _ctx.page) == null ? void 0 : _a2.children) == null ? void 0 : _b.length) || 0);
13623
13584
  })
13624
- }, _hoisted_2$f)
13585
+ }, _hoisted_2$d)
13625
13586
  ], 4);
13626
13587
  };
13627
13588
  }
13628
13589
  });
13629
- const _hoisted_1$m = /* @__PURE__ */ vue.createElementVNode("div", { style: { "width": "20px" } }, null, -1);
13630
- const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
13590
+ const _hoisted_1$k = /* @__PURE__ */ vue.createElementVNode("div", { style: { "width": "20px" } }, null, -1);
13591
+ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
13631
13592
  __name: "PbCanvas",
13632
13593
  setup(__props) {
13633
13594
  const pageBuilder = usePageBuilderEditor();
@@ -13674,13 +13635,13 @@ ${_html.style}
13674
13635
  style: vue.normalizeStyle(style.value),
13675
13636
  class: "pb-canvas"
13676
13637
  }, [
13677
- vue.createVNode(_sfc_main$o, {
13638
+ vue.createVNode(_sfc_main$m, {
13678
13639
  "is-mobile-page": true,
13679
13640
  page: pageS.value,
13680
13641
  width: 420
13681
13642
  }, null, 8, ["page"]),
13682
- _hoisted_1$m,
13683
- vue.createVNode(_sfc_main$o, {
13643
+ _hoisted_1$k,
13644
+ vue.createVNode(_sfc_main$m, {
13684
13645
  "is-mobile-page": false,
13685
13646
  page: pageL.value,
13686
13647
  width: 1024
@@ -13690,9 +13651,9 @@ ${_html.style}
13690
13651
  };
13691
13652
  }
13692
13653
  });
13693
- const canvasStyle = '.pb-page {\n margin: 0 auto;\n margin-top: 20px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n.pb-page .pb-page-content.selected {\n outline: 2px solid #4998f8;\n outline-offset: 5px;\n}\n.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n.pb-section {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n.pb-section.selected {\n outline: 1px solid #e67e22;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n.pb-section-static .pb-widget {\n outline: none;\n}\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n.pb-block.selected {\n outline: 1px solid #8e44ad;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n.pb-widget.selected {\n outline: 2px solid #27ae60;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-widget .pan-handle {\n position: absolute;\n left: -6px;\n top: -6px;\n width: 12px;\n height: 12px;\n background-color: #27ae60;\n cursor: move;\n}\n.pb-widget .resize-handle {\n position: absolute;\n right: -6px;\n bottom: -6px;\n width: 12px;\n height: 12px;\n background-color: #27ae60;\n cursor: nwse-resize;\n}\n.pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-text-widget .text {\n color: #333;\n}\n.pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-image-widget {\n width: 100%;\n}\n.pb-image-widget .image {\n width: 100%;\n}\n.pb-image-widget .empty {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-image-widget .empty span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\nbody {\n background-color: white;\n height: 100%;\n margin: 0;\n}\n.pb-canvas-wrapper {\n padding: 32px 40px 56px 40px;\n height: 100%;\n background-color: #aaa;\n overflow: auto;\n}\n.pb-canvas-wrapper .pb-canvas {\n display: flex;\n flex-direction: row;\n transform-origin: top left;\n width: fit-content;\n min-width: 40px;\n min-height: 40px;\n margin: 0 auto;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n.pb-add-section-handle.bottom {\n left: 50%;\n bottom: -32px;\n}\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n.pb-add-section-handle > i {\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: -20px;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}\n.pb-button {\n background: none;\n border: none;\n cursor: pointer;\n vertical-align: middle;\n}\n.pb-guideline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.pb-guideline.selected {\n z-index: 3;\n}\n.pb-guideline.preselect {\n z-index: 4;\n}';
13694
- const _hoisted_1$l = { class: "pb-canvas-frame" };
13695
- const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
13654
+ const canvasStyle = '.pb-page {\n margin: 0 auto;\n margin-top: 20px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n.pb-page .pb-page-content.selected {\n outline: 2px solid #4998f8;\n outline-offset: 5px;\n}\n.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n.pb-section {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n.pb-section.selected {\n outline: 1px solid #e67e22;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n.pb-section-static .pb-widget {\n outline: none;\n}\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n.pb-block.selected {\n outline: 1px solid #8e44ad;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n.pb-widget.selected {\n outline: 2px solid #27ae60;\n outline-offset: 1px;\n z-index: 999;\n}\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-widget .pan-handle {\n position: absolute;\n left: -6px;\n top: -6px;\n width: 12px;\n height: 12px;\n background-color: #27ae60;\n cursor: move;\n}\n.pb-widget .resize-handle {\n position: absolute;\n right: -6px;\n bottom: -6px;\n width: 12px;\n height: 12px;\n background-color: #27ae60;\n cursor: nwse-resize;\n}\n.pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-text-widget .text {\n color: #333;\n}\n.pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-image-widget {\n width: 100%;\n}\n.pb-image-widget .image {\n width: 100%;\n}\n.pb-image-widget .empty {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-image-widget .empty span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\nbody {\n background-color: white;\n height: 100%;\n margin: 0;\n}\n.pb-canvas-wrapper {\n padding: 32px 40px 56px 40px;\n height: 100%;\n background-color: #aaa;\n overflow: auto;\n}\n.pb-canvas-wrapper .pb-canvas {\n display: flex;\n flex-direction: row;\n transform-origin: top left;\n width: fit-content;\n min-width: 40px;\n min-height: 40px;\n margin: 0 auto;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n.pb-add-section-handle.bottom {\n left: 50%;\n bottom: -32px;\n}\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n.pb-add-section-handle > i {\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}\n.pb-button {\n background: none;\n border: none;\n cursor: pointer;\n vertical-align: middle;\n}\n.pb-guideline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.pb-guideline.selected {\n z-index: 3;\n}\n.pb-guideline.preselect {\n z-index: 4;\n}';
13655
+ const _hoisted_1$j = { class: "pb-canvas-frame" };
13656
+ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
13696
13657
  __name: "PbCanvasFrame",
13697
13658
  setup(__props) {
13698
13659
  const pageBuilderEditor = usePageBuilderEditor();
@@ -13744,7 +13705,7 @@ ${_html.style}
13744
13705
  );
13745
13706
  return (_ctx, _cache) => {
13746
13707
  var _a, _b, _c, _d;
13747
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [
13708
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [
13748
13709
  vue.createElementVNode("iframe", {
13749
13710
  ref_key: "iframeRef",
13750
13711
  ref: iframeRef,
@@ -13754,14 +13715,14 @@ ${_html.style}
13754
13715
  key: 0,
13755
13716
  to: (_d = (_c = iframeRef.value) == null ? void 0 : _c.contentWindow) == null ? void 0 : _d.document.body
13756
13717
  }, [
13757
- vue.createVNode(_sfc_main$n)
13718
+ vue.createVNode(_sfc_main$l)
13758
13719
  ], 8, ["to"])) : vue.createCommentVNode("", true)
13759
13720
  ]);
13760
13721
  };
13761
13722
  }
13762
13723
  });
13763
- const _hoisted_1$k = { class: "pb-tool-button bs-layout-horizontal flex-align-center" };
13764
- const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
13724
+ const _hoisted_1$i = { class: "pb-tool-button bs-layout-horizontal flex-align-center" };
13725
+ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13765
13726
  __name: "PbToolbarButton",
13766
13727
  props: {
13767
13728
  button: {}
@@ -13774,7 +13735,7 @@ ${_html.style}
13774
13735
  (_b = (_a = props.button).handler) == null ? void 0 : _b.call(_a, pageBuilder);
13775
13736
  };
13776
13737
  return (_ctx, _cache) => {
13777
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, [
13738
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
13778
13739
  vue.createElementVNode("div", {
13779
13740
  class: "tool-button bs-clickable",
13780
13741
  onClick: handleClick
@@ -13789,17 +13750,17 @@ ${_html.style}
13789
13750
  };
13790
13751
  }
13791
13752
  });
13792
- const _hoisted_1$j = { class: "pb-tool-button-group bs-layout-horizontal flex-align-center" };
13793
- const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
13753
+ const _hoisted_1$h = { class: "pb-tool-button-group bs-layout-horizontal flex-align-center" };
13754
+ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
13794
13755
  __name: "PbToolbarButtonGroup",
13795
13756
  props: {
13796
13757
  group: {}
13797
13758
  },
13798
13759
  setup(__props) {
13799
13760
  return (_ctx, _cache) => {
13800
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [
13761
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
13801
13762
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.group.buttons, (button) => {
13802
- return vue.openBlock(), vue.createBlock(_sfc_main$l, {
13763
+ return vue.openBlock(), vue.createBlock(_sfc_main$j, {
13803
13764
  key: button.buttonId,
13804
13765
  button
13805
13766
  }, null, 8, ["button"]);
@@ -13808,11 +13769,11 @@ ${_html.style}
13808
13769
  };
13809
13770
  }
13810
13771
  });
13811
- const _hoisted_1$i = { class: "pb-toolbar bs-layout-horizontal align-items-center" };
13812
- const _hoisted_2$e = { class: "bs-layout-horizontal align-items-center" };
13813
- const _hoisted_3$d = /* @__PURE__ */ vue.createElementVNode("div", { class: "flex-grow-1" }, null, -1);
13814
- const _hoisted_4$5 = { class: "mr-8" };
13815
- const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13772
+ const _hoisted_1$g = { class: "pb-toolbar bs-layout-horizontal align-items-center" };
13773
+ const _hoisted_2$c = { class: "bs-layout-horizontal align-items-center" };
13774
+ const _hoisted_3$b = /* @__PURE__ */ vue.createElementVNode("div", { class: "flex-grow-1" }, null, -1);
13775
+ const _hoisted_4$4 = { class: "mr-8" };
13776
+ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
13816
13777
  __name: "PbToolbar",
13817
13778
  props: {
13818
13779
  plugin: {}
@@ -13863,10 +13824,10 @@ ${_html.style}
13863
13824
  });
13864
13825
  return (_ctx, _cache) => {
13865
13826
  var _a, _b, _c;
13866
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
13867
- vue.createElementVNode("div", _hoisted_2$e, [
13827
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [
13828
+ vue.createElementVNode("div", _hoisted_2$c, [
13868
13829
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(buttonGroups), (group) => {
13869
- return vue.openBlock(), vue.createBlock(_sfc_main$k, {
13830
+ return vue.openBlock(), vue.createBlock(_sfc_main$i, {
13870
13831
  key: group.groupId,
13871
13832
  group
13872
13833
  }, null, 8, ["group"]);
@@ -13888,33 +13849,33 @@ ${_html.style}
13888
13849
  placeholder: "Scale"
13889
13850
  }, null, 8, ["modelValue"])
13890
13851
  ]),
13891
- _hoisted_3$d,
13892
- vue.createElementVNode("div", _hoisted_4$5, [
13852
+ _hoisted_3$b,
13853
+ vue.createElementVNode("div", _hoisted_4$4, [
13893
13854
  _ctx.plugin ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_a = _ctx.plugin) == null ? void 0 : _a.component), vue.mergeProps({ key: 0 }, (_b = _ctx.plugin) == null ? void 0 : _b.bind, vue.toHandlers((_c = _ctx.plugin) == null ? void 0 : _c.on)), null, 16)) : vue.createCommentVNode("", true)
13894
13855
  ])
13895
13856
  ]);
13896
13857
  };
13897
13858
  }
13898
13859
  });
13899
- const _hoisted_1$h = { class: "pb-menu bs-layout-vertical" };
13900
- const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
13860
+ const _hoisted_1$f = { class: "pb-menu bs-layout-vertical" };
13861
+ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
13901
13862
  __name: "PbMenu",
13902
13863
  props: {
13903
13864
  toolbarPlugin: {}
13904
13865
  },
13905
13866
  setup(__props) {
13906
13867
  return (_ctx, _cache) => {
13907
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
13908
- vue.createVNode(_sfc_main$j, { plugin: _ctx.toolbarPlugin }, null, 8, ["plugin"])
13868
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
13869
+ vue.createVNode(_sfc_main$h, { plugin: _ctx.toolbarPlugin }, null, 8, ["plugin"])
13909
13870
  ]);
13910
13871
  };
13911
13872
  }
13912
13873
  });
13913
- const _hoisted_1$g = {
13874
+ const _hoisted_1$e = {
13914
13875
  key: 1,
13915
13876
  class: "bs-layout-vertical border"
13916
13877
  };
13917
- const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
13878
+ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
13918
13879
  __name: "PbNavigator",
13919
13880
  setup(__props) {
13920
13881
  const pageBuilder = usePageBuilderEditor();
@@ -14140,7 +14101,7 @@ ${_html.style}
14140
14101
  ], 512)
14141
14102
  ]),
14142
14103
  _: 1
14143
- }, 8, ["tab-id"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [
14104
+ }, 8, ["tab-id"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
14144
14105
  vue.createElementVNode("div", {
14145
14106
  ref_key: "treeS",
14146
14107
  ref: treeS,
@@ -14173,7 +14134,7 @@ ${_html.style}
14173
14134
  };
14174
14135
  }
14175
14136
  });
14176
- const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14137
+ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
14177
14138
  __name: "PbSidebarPropertyEditor",
14178
14139
  props: {
14179
14140
  property: {},
@@ -14184,25 +14145,6 @@ ${_html.style}
14184
14145
  const pageBuilder = usePageBuilderEditor();
14185
14146
  const propertyEditor = vue.computed(() => {
14186
14147
  var _a;
14187
- if (pageBuilder.editMode === "local" && props.selectedParts.length > 0) {
14188
- const section = pageBuilder.partManager.findNearestSection(props.selectedParts[0]);
14189
- if (section && section.isGlobalDesignPart()) {
14190
- return;
14191
- }
14192
- if (section && (section.isLocalDesignPart() || section.isLocalMarketingPart())) {
14193
- if (!props.property.localized) {
14194
- return;
14195
- }
14196
- }
14197
- }
14198
- if (pageBuilder.editMode === "template" && props.selectedParts.length > 0) {
14199
- const section = pageBuilder.partManager.findNearestSection(props.selectedParts[0]);
14200
- if (section && (section.isLocalDesignPart() || section.isLocalMarketingPart())) {
14201
- if (props.property.localized) {
14202
- return;
14203
- }
14204
- }
14205
- }
14206
14148
  if (props.property.propertyEditor) {
14207
14149
  const editor = props.property.propertyEditor(props.property, props.selectedParts);
14208
14150
  if (editor)
@@ -14228,13 +14170,13 @@ ${_html.style}
14228
14170
  };
14229
14171
  }
14230
14172
  });
14231
- const _hoisted_1$f = { class: "pb-sidebar-property-group" };
14232
- const _hoisted_2$d = {
14173
+ const _hoisted_1$d = { class: "pb-sidebar-property-group" };
14174
+ const _hoisted_2$b = {
14233
14175
  key: 0,
14234
14176
  class: "group-title"
14235
14177
  };
14236
- const _hoisted_3$c = ["textContent"];
14237
- const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
14178
+ const _hoisted_3$a = ["textContent"];
14179
+ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
14238
14180
  __name: "PbSidebarPropertyGroupEditor",
14239
14181
  props: {
14240
14182
  group: {},
@@ -14243,36 +14185,16 @@ ${_html.style}
14243
14185
  },
14244
14186
  setup(__props) {
14245
14187
  const props = __props;
14246
- const pageBuilder = usePageBuilderEditor();
14247
14188
  const groupEditor = vue.computed(() => {
14248
14189
  var _a, _b;
14249
- if (pageBuilder.editMode === "local" && props.selectedParts.length > 0) {
14250
- const section = pageBuilder.partManager.findNearestSection(props.selectedParts[0]);
14251
- if (section && section.isGlobalDesignPart()) {
14252
- return;
14253
- }
14254
- if (section && (section.isLocalDesignPart() || section.isLocalMarketingPart())) {
14255
- if (!props.group.localized) {
14256
- return;
14257
- }
14258
- }
14259
- }
14260
- if (pageBuilder.editMode === "template" && props.selectedParts.length > 0) {
14261
- const section = pageBuilder.partManager.findNearestSection(props.selectedParts[0]);
14262
- if (section && (section.isLocalDesignPart() || section.isLocalMarketingPart())) {
14263
- if (props.group.localized) {
14264
- return;
14265
- }
14266
- }
14267
- }
14268
14190
  return (_b = (_a = props.group).propertyGroupEditor) == null ? void 0 : _b.call(_a, props.group, props.selectedParts);
14269
14191
  });
14270
14192
  return (_ctx, _cache) => {
14271
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
14272
- _ctx.group.showGroupName ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$d, [
14193
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
14194
+ _ctx.group.showGroupName ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$b, [
14273
14195
  vue.createElementVNode("label", {
14274
14196
  textContent: vue.toDisplayString(_ctx.group.caption)
14275
- }, null, 8, _hoisted_3$c)
14197
+ }, null, 8, _hoisted_3$a)
14276
14198
  ])) : vue.createCommentVNode("", true),
14277
14199
  _ctx.partsKey ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
14278
14200
  groupEditor.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(groupEditor.value), {
@@ -14280,7 +14202,7 @@ ${_html.style}
14280
14202
  group: _ctx.group,
14281
14203
  "selected-parts": _ctx.selectedParts
14282
14204
  }, null, 8, ["group", "selected-parts"])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(_ctx.group.properties, (property) => {
14283
- return vue.openBlock(), vue.createBlock(_sfc_main$g, {
14205
+ return vue.openBlock(), vue.createBlock(_sfc_main$e, {
14284
14206
  key: `${_ctx.partsKey}_${property.propertyName}`,
14285
14207
  property,
14286
14208
  "selected-parts": _ctx.selectedParts
@@ -14291,106 +14213,8 @@ ${_html.style}
14291
14213
  };
14292
14214
  }
14293
14215
  });
14294
- const _hoisted_1$e = { class: "property-editor property-editor-local-part flex-align-center pt-16" };
14295
- const _hoisted_2$c = /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, [
14296
- /* @__PURE__ */ vue.createElementVNode("label", { textContent: "Display Schedule" })
14297
- ], -1);
14298
- const _hoisted_3$b = { class: "bs-layout-horizontal" };
14299
- const _hoisted_4$4 = { class: "mr-2" };
14300
- const _hoisted_5$2 = /* @__PURE__ */ vue.createElementVNode("span", { class: "font-icon" }, "more_horiz", -1);
14301
- const _hoisted_6$2 = [
14302
- _hoisted_5$2
14303
- ];
14304
- const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
14305
- __name: "PbPropertyLocalMarketingPart",
14306
- props: {
14307
- selectedPart: {}
14308
- },
14309
- emits: ["select-schedule", "update-property-value"],
14310
- setup(__props, { emit: __emit }) {
14311
- const props = __props;
14312
- bluesea.useModal();
14313
- const startDt = vue.ref("");
14314
- const endDt = vue.ref("");
14315
- const pageBuilder = usePageBuilderEditor();
14316
- const selectSchedule = () => {
14317
- PageBuilderEditorEvent.emit.requestLocalMarketingPartSchedule({
14318
- pageBuilderId: pageBuilder.instanceId,
14319
- partId: props.selectedPart.partId,
14320
- callback: (schedule) => {
14321
- startDt.value = schedule.startDt;
14322
- endDt.value = schedule.endDt;
14323
- if (props.selectedPart && props.selectedPart.isSection()) {
14324
- clearContents(props.selectedPart);
14325
- if (schedule.data) {
14326
- for (const partId in schedule.data) {
14327
- const part = findWidget(props.selectedPart, partId);
14328
- if (part) {
14329
- Object.entries(schedule.data[partId]).forEach(([key, value]) => {
14330
- if (!value)
14331
- return;
14332
- part.properties = part.properties || {};
14333
- part.properties[key] = value;
14334
- });
14335
- }
14336
- }
14337
- }
14338
- }
14339
- }
14340
- });
14341
- };
14342
- const findWidget = (part, partId) => {
14343
- if (!part)
14344
- return;
14345
- if (part.partId === partId)
14346
- return part;
14347
- if (part.children) {
14348
- for (const child of part.children) {
14349
- const found = findWidget(child, partId);
14350
- if (found)
14351
- return found;
14352
- }
14353
- }
14354
- };
14355
- const clearContents = (part) => {
14356
- if (!part)
14357
- return;
14358
- if (part.properties) {
14359
- for (const name in part.properties) {
14360
- const propertyDef = pageBuilder.partManager.getPropertyDefinition(part.partName, name);
14361
- if (propertyDef && propertyDef.localized) {
14362
- delete part.properties[name];
14363
- }
14364
- }
14365
- }
14366
- if (part.children) {
14367
- for (const child of part.children) {
14368
- clearContents(child);
14369
- }
14370
- }
14371
- };
14372
- return (_ctx, _cache) => {
14373
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
14374
- _hoisted_2$c,
14375
- vue.createElementVNode("div", _hoisted_3$b, [
14376
- vue.createElementVNode("div", _hoisted_4$4, [
14377
- vue.createVNode(vue.unref(bluesea.BSDateRange), {
14378
- "from-value": startDt.value,
14379
- "to-value": endDt.value,
14380
- resolution: "DAY",
14381
- width: "260px"
14382
- }, null, 8, ["from-value", "to-value"])
14383
- ]),
14384
- vue.createElementVNode("div", null, [
14385
- vue.createElementVNode("button", { onClick: selectSchedule }, _hoisted_6$2)
14386
- ])
14387
- ])
14388
- ]);
14389
- };
14390
- }
14391
- });
14392
- const _hoisted_1$d = { class: "pb-sidebar-properties" };
14393
- const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
14216
+ const _hoisted_1$c = { class: "pb-sidebar-properties" };
14217
+ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
14394
14218
  __name: "PbSidebarProperties",
14395
14219
  setup(__props) {
14396
14220
  const pageBuilder = usePageBuilderEditor();
@@ -14407,25 +14231,13 @@ ${_html.style}
14407
14231
  return [];
14408
14232
  }
14409
14233
  });
14410
- const showLocalMarketingPart = vue.computed(() => {
14411
- if (pageBuilder.editMode === "template")
14412
- return false;
14413
- if (!selectedParts.length || selectedParts.length !== 1)
14414
- return false;
14415
- const part = selectedParts[0];
14416
- return part.isLocalMarketingPart();
14417
- });
14418
14234
  return (_ctx, _cache) => {
14419
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
14420
- showLocalMarketingPart.value ? (vue.openBlock(), vue.createBlock(_sfc_main$e, {
14421
- key: 0,
14422
- "selected-part": vue.unref(selectedParts)[0]
14423
- }, null, 8, ["selected-part"])) : vue.createCommentVNode("", true),
14235
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
14424
14236
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(properties.value, (group) => {
14425
14237
  return vue.openBlock(), vue.createElementBlock("div", {
14426
14238
  key: `${partsKey.value}_${group.groupName}`
14427
14239
  }, [
14428
- vue.createVNode(_sfc_main$f, {
14240
+ vue.createVNode(_sfc_main$d, {
14429
14241
  group,
14430
14242
  partsKey: partsKey.value,
14431
14243
  "selected-parts": vue.unref(selectedParts)
@@ -14436,25 +14248,24 @@ ${_html.style}
14436
14248
  };
14437
14249
  }
14438
14250
  });
14439
- const _hoisted_1$c = { class: "pb-sidebar" };
14440
- const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
14251
+ const _hoisted_1$b = { class: "pb-sidebar" };
14252
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
14441
14253
  __name: "PbSidebar",
14442
14254
  setup(__props) {
14443
14255
  return (_ctx, _cache) => {
14444
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
14445
- vue.createVNode(_sfc_main$d)
14256
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
14257
+ vue.createVNode(_sfc_main$c)
14446
14258
  ]);
14447
14259
  };
14448
14260
  }
14449
14261
  });
14450
- const _hoisted_1$b = { class: "pb-editor bs-layout-vertical flex-grow-1" };
14451
- const _hoisted_2$b = { class: "pb-editor-body bs-layout-horizontal flex-grow-1" };
14452
- const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
14262
+ const _hoisted_1$a = { class: "pb-editor bs-layout-vertical flex-grow-1" };
14263
+ const _hoisted_2$a = { class: "pb-editor-body bs-layout-horizontal flex-grow-1" };
14264
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
14453
14265
  __name: "PageBuilderEditor",
14454
14266
  props: {
14455
14267
  instanceId: {},
14456
14268
  title: {},
14457
- editMode: {},
14458
14269
  pageContent: {},
14459
14270
  locales: {},
14460
14271
  locale: {},
@@ -14467,7 +14278,6 @@ ${_html.style}
14467
14278
  const pageBuilderEditor = createPageBuilderEditor();
14468
14279
  pageBuilderEditor.instanceId = props.instanceId;
14469
14280
  pageBuilderEditor.title = props.title;
14470
- pageBuilderEditor.editMode = props.editMode || "free";
14471
14281
  if (props.locales)
14472
14282
  pageBuilderEditor.setLocales(props.locales);
14473
14283
  if (props.locale)
@@ -14491,29 +14301,31 @@ ${_html.style}
14491
14301
  const colorHistory = vue.ref([]);
14492
14302
  vue.provide("colorHistory", colorHistory);
14493
14303
  const getPageContent = () => {
14494
- const partIds = (pageBuilderEditor.model.rootPart.children || []).map((v) => v.partId);
14495
- return pageBuilderEditor.model.serializePageModel(partIds);
14304
+ return pageBuilderEditor.model.serializeModel(
14305
+ (part) => pageBuilderEditor.extractMedia(part),
14306
+ (partObject) => pageBuilderEditor.extractProvider(partObject)
14307
+ );
14496
14308
  };
14497
14309
  __expose({
14498
14310
  getPageContent
14499
14311
  });
14500
14312
  return (_ctx, _cache) => {
14501
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
14502
- vue.createVNode(_sfc_main$i, { "toolbar-plugin": _ctx.toolbarPlugin }, null, 8, ["toolbar-plugin"]),
14503
- vue.createElementVNode("div", _hoisted_2$b, [
14504
- vue.createVNode(_sfc_main$h),
14505
- vue.createVNode(_sfc_main$m, { class: "flex-grow-1" }),
14506
- vue.createVNode(_sfc_main$c)
14313
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
14314
+ vue.createVNode(_sfc_main$g, { "toolbar-plugin": _ctx.toolbarPlugin }, null, 8, ["toolbar-plugin"]),
14315
+ vue.createElementVNode("div", _hoisted_2$a, [
14316
+ vue.createVNode(_sfc_main$f),
14317
+ vue.createVNode(_sfc_main$k, { class: "flex-grow-1" }),
14318
+ vue.createVNode(_sfc_main$b)
14507
14319
  ])
14508
14320
  ]);
14509
14321
  };
14510
14322
  }
14511
14323
  });
14512
- const _hoisted_1$a = { class: "property-editor property-editor-readonly-text" };
14513
- const _hoisted_2$a = { class: "title" };
14514
- const _hoisted_3$a = ["textContent"];
14324
+ const _hoisted_1$9 = { class: "property-editor property-editor-readonly-text" };
14325
+ const _hoisted_2$9 = { class: "title" };
14326
+ const _hoisted_3$9 = ["textContent"];
14515
14327
  const _hoisted_4$3 = ["textContent"];
14516
- const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
14328
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
14517
14329
  __name: "PbPropertyEditorReadonlyText",
14518
14330
  props: {
14519
14331
  property: {},
@@ -14521,11 +14333,11 @@ ${_html.style}
14521
14333
  },
14522
14334
  setup(__props) {
14523
14335
  return (_ctx, _cache) => {
14524
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
14525
- vue.createElementVNode("div", _hoisted_2$a, [
14336
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
14337
+ vue.createElementVNode("div", _hoisted_2$9, [
14526
14338
  vue.createElementVNode("label", {
14527
14339
  textContent: vue.toDisplayString(_ctx.property.caption)
14528
- }, null, 8, _hoisted_3$a)
14340
+ }, null, 8, _hoisted_3$9)
14529
14341
  ]),
14530
14342
  vue.createElementVNode("div", null, [
14531
14343
  vue.createElementVNode("div", {
@@ -14538,12 +14350,12 @@ ${_html.style}
14538
14350
  });
14539
14351
  const PbPropertyEditorReadonlyText = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14540
14352
  __proto__: null,
14541
- default: _sfc_main$a
14353
+ default: _sfc_main$9
14542
14354
  }, Symbol.toStringTag, { value: "Module" }));
14543
- const _hoisted_1$9 = { class: "property-editor property-editor-text flex-align-center" };
14544
- const _hoisted_2$9 = { class: "title" };
14545
- const _hoisted_3$9 = ["textContent"];
14546
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
14355
+ const _hoisted_1$8 = { class: "property-editor property-editor-text flex-align-center" };
14356
+ const _hoisted_2$8 = { class: "title" };
14357
+ const _hoisted_3$8 = ["textContent"];
14358
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
14547
14359
  __name: "PbPropertyEditorText",
14548
14360
  props: {
14549
14361
  property: {},
@@ -14561,11 +14373,11 @@ ${_html.style}
14561
14373
  emit("update-property-value", properties);
14562
14374
  };
14563
14375
  return (_ctx, _cache) => {
14564
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
14565
- vue.createElementVNode("div", _hoisted_2$9, [
14376
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
14377
+ vue.createElementVNode("div", _hoisted_2$8, [
14566
14378
  vue.createElementVNode("label", {
14567
14379
  textContent: vue.toDisplayString(_ctx.property.caption)
14568
- }, null, 8, _hoisted_3$9)
14380
+ }, null, 8, _hoisted_3$8)
14569
14381
  ]),
14570
14382
  vue.createElementVNode("div", null, [
14571
14383
  _ctx.property.multiLang ? (vue.openBlock(), vue.createBlock(vue.unref(bluesea.BSMultiLangTextInput), {
@@ -14587,12 +14399,12 @@ ${_html.style}
14587
14399
  });
14588
14400
  const PbPropertyEditorText = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14589
14401
  __proto__: null,
14590
- default: _sfc_main$9
14402
+ default: _sfc_main$8
14591
14403
  }, Symbol.toStringTag, { value: "Module" }));
14592
- const _hoisted_1$8 = { class: "property-editor property-editor-multiline-text" };
14593
- const _hoisted_2$8 = { class: "title" };
14594
- const _hoisted_3$8 = ["textContent"];
14595
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
14404
+ const _hoisted_1$7 = { class: "property-editor property-editor-multiline-text" };
14405
+ const _hoisted_2$7 = { class: "title" };
14406
+ const _hoisted_3$7 = ["textContent"];
14407
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
14596
14408
  __name: "PbPropertyEditorMultilineText",
14597
14409
  props: {
14598
14410
  property: {},
@@ -14618,11 +14430,11 @@ ${_html.style}
14618
14430
  emit("update-property-value", properties);
14619
14431
  };
14620
14432
  return (_ctx, _cache) => {
14621
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
14622
- vue.createElementVNode("div", _hoisted_2$8, [
14433
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
14434
+ vue.createElementVNode("div", _hoisted_2$7, [
14623
14435
  vue.createElementVNode("label", {
14624
14436
  textContent: vue.toDisplayString(_ctx.property.caption)
14625
- }, null, 8, _hoisted_3$8)
14437
+ }, null, 8, _hoisted_3$7)
14626
14438
  ]),
14627
14439
  vue.createElementVNode("div", null, [
14628
14440
  _ctx.property.multiLang ? (vue.openBlock(), vue.createBlock(vue.unref(bluesea.BSMultiLangTextArea), {
@@ -14652,12 +14464,12 @@ ${_html.style}
14652
14464
  });
14653
14465
  const PbPropertyEditorMultilineText = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14654
14466
  __proto__: null,
14655
- default: _sfc_main$8
14467
+ default: _sfc_main$7
14656
14468
  }, Symbol.toStringTag, { value: "Module" }));
14657
- const _hoisted_1$7 = { class: "property-editor property-editor-select flex-align-center" };
14658
- const _hoisted_2$7 = { class: "title" };
14659
- const _hoisted_3$7 = ["textContent"];
14660
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
14469
+ const _hoisted_1$6 = { class: "property-editor property-editor-select flex-align-center" };
14470
+ const _hoisted_2$6 = { class: "title" };
14471
+ const _hoisted_3$6 = ["textContent"];
14472
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
14661
14473
  __name: "PbPropertyEditorSelect",
14662
14474
  props: {
14663
14475
  property: {},
@@ -14676,11 +14488,11 @@ ${_html.style}
14676
14488
  emit("update-property-value", properties);
14677
14489
  };
14678
14490
  return (_ctx, _cache) => {
14679
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
14680
- vue.createElementVNode("div", _hoisted_2$7, [
14491
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
14492
+ vue.createElementVNode("div", _hoisted_2$6, [
14681
14493
  vue.createElementVNode("label", {
14682
14494
  textContent: vue.toDisplayString(_ctx.property.caption)
14683
- }, null, 8, _hoisted_3$7)
14495
+ }, null, 8, _hoisted_3$6)
14684
14496
  ]),
14685
14497
  vue.createElementVNode("div", null, [
14686
14498
  vue.createVNode(vue.unref(bluesea.BSSelect), {
@@ -14695,13 +14507,13 @@ ${_html.style}
14695
14507
  });
14696
14508
  const PbPropertyEditorSelect = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14697
14509
  __proto__: null,
14698
- default: _sfc_main$7
14510
+ default: _sfc_main$6
14699
14511
  }, Symbol.toStringTag, { value: "Module" }));
14700
- const _hoisted_1$6 = { class: "property-editor property-editor-color" };
14701
- const _hoisted_2$6 = { class: "title" };
14702
- const _hoisted_3$6 = ["textContent"];
14512
+ const _hoisted_1$5 = { class: "property-editor property-editor-color" };
14513
+ const _hoisted_2$5 = { class: "title" };
14514
+ const _hoisted_3$5 = ["textContent"];
14703
14515
  const _hoisted_4$2 = { class: "bs-layout-horizontal flex-align-center color" };
14704
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
14516
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
14705
14517
  __name: "PbPropertyEditorColor",
14706
14518
  props: {
14707
14519
  property: {},
@@ -14721,11 +14533,11 @@ ${_html.style}
14721
14533
  emit("update-property-value", properties);
14722
14534
  };
14723
14535
  return (_ctx, _cache) => {
14724
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
14725
- vue.createElementVNode("div", _hoisted_2$6, [
14536
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
14537
+ vue.createElementVNode("div", _hoisted_2$5, [
14726
14538
  vue.createElementVNode("label", {
14727
14539
  textContent: vue.toDisplayString(_ctx.property.caption)
14728
- }, null, 8, _hoisted_3$6)
14540
+ }, null, 8, _hoisted_3$5)
14729
14541
  ]),
14730
14542
  vue.createElementVNode("div", _hoisted_4$2, [
14731
14543
  vue.createVNode(PbColorPicker, {
@@ -14750,12 +14562,12 @@ ${_html.style}
14750
14562
  });
14751
14563
  const PbPropertyEditorColor = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14752
14564
  __proto__: null,
14753
- default: _sfc_main$6
14565
+ default: _sfc_main$5
14754
14566
  }, Symbol.toStringTag, { value: "Module" }));
14755
- const _hoisted_1$5 = { class: "property-editor property-editor-image flex-align-center" };
14756
- const _hoisted_2$5 = { class: "title" };
14757
- const _hoisted_3$5 = ["textContent"];
14758
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
14567
+ const _hoisted_1$4 = { class: "property-editor property-editor-image flex-align-center" };
14568
+ const _hoisted_2$4 = { class: "title" };
14569
+ const _hoisted_3$4 = ["textContent"];
14570
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
14759
14571
  __name: "PbPropertyEditorImage",
14760
14572
  props: {
14761
14573
  property: {},
@@ -14767,7 +14579,7 @@ ${_html.style}
14767
14579
  const modal = bluesea.useModal();
14768
14580
  const emit = __emit;
14769
14581
  const selectImage = () => {
14770
- const imageProvider = pageBuilder.getProvider("image");
14582
+ const imageProvider = pageBuilder.getProvider("imageProvider");
14771
14583
  if (imageProvider) {
14772
14584
  imageProvider({ modal }, (url) => {
14773
14585
  emit("update-property-value", { image: url });
@@ -14775,11 +14587,11 @@ ${_html.style}
14775
14587
  }
14776
14588
  };
14777
14589
  return (_ctx, _cache) => {
14778
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
14779
- vue.createElementVNode("div", _hoisted_2$5, [
14590
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
14591
+ vue.createElementVNode("div", _hoisted_2$4, [
14780
14592
  vue.createElementVNode("label", {
14781
14593
  textContent: vue.toDisplayString(_ctx.property.caption)
14782
- }, null, 8, _hoisted_3$5)
14594
+ }, null, 8, _hoisted_3$4)
14783
14595
  ]),
14784
14596
  vue.createElementVNode("div", null, [
14785
14597
  vue.createElementVNode("button", { onClick: selectImage }, "Select Image")
@@ -14790,12 +14602,12 @@ ${_html.style}
14790
14602
  });
14791
14603
  const PbPropertyEditorImage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14792
14604
  __proto__: null,
14793
- default: _sfc_main$5
14605
+ default: _sfc_main$4
14794
14606
  }, Symbol.toStringTag, { value: "Module" }));
14795
- const _hoisted_1$4 = { class: "property-editor property-editor-image flex-align-center" };
14796
- const _hoisted_2$4 = { class: "title" };
14797
- const _hoisted_3$4 = ["textContent"];
14798
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
14607
+ const _hoisted_1$3 = { class: "property-editor property-editor-image flex-align-center" };
14608
+ const _hoisted_2$3 = { class: "title" };
14609
+ const _hoisted_3$3 = ["textContent"];
14610
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
14799
14611
  __name: "PbPropertyEditorHtml",
14800
14612
  props: {
14801
14613
  property: {},
@@ -14831,11 +14643,11 @@ ${_html.style}
14831
14643
  });
14832
14644
  };
14833
14645
  return (_ctx, _cache) => {
14834
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
14835
- vue.createElementVNode("div", _hoisted_2$4, [
14646
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
14647
+ vue.createElementVNode("div", _hoisted_2$3, [
14836
14648
  vue.createElementVNode("label", {
14837
14649
  textContent: vue.toDisplayString(_ctx.property.caption)
14838
- }, null, 8, _hoisted_3$4)
14650
+ }, null, 8, _hoisted_3$3)
14839
14651
  ]),
14840
14652
  vue.createElementVNode("div", null, [
14841
14653
  vue.createElementVNode("button", { onClick: editHtml }, "Edit HTML")
@@ -14845,55 +14657,6 @@ ${_html.style}
14845
14657
  }
14846
14658
  });
14847
14659
  const PbPropertyEditorHtml = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14848
- __proto__: null,
14849
- default: _sfc_main$4
14850
- }, Symbol.toStringTag, { value: "Module" }));
14851
- const _hoisted_1$3 = { class: "bs-layout-vertical pb-part-add-modal" };
14852
- const _hoisted_2$3 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
14853
- const _hoisted_3$3 = ["onClick", "textContent"];
14854
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
14855
- __name: "PbPartAddModal",
14856
- props: {
14857
- pageBuilder: {},
14858
- partDefinitionGroups: {}
14859
- },
14860
- emits: ["selectHandler"],
14861
- setup(__props, { emit: __emit }) {
14862
- const emit = __emit;
14863
- const modalHandle = bluesea.useModalHandle();
14864
- const select = (partDefinition) => {
14865
- emit("selectHandler", partDefinition);
14866
- modalHandle.close();
14867
- };
14868
- return (_ctx, _cache) => {
14869
- return vue.openBlock(), vue.createBlock(vue.unref(bluesea.BSModalFrame), { title: "Add Design Part" }, {
14870
- default: vue.withCtx(() => [
14871
- vue.createElementVNode("div", _hoisted_1$3, [
14872
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.partDefinitionGroups, (group) => {
14873
- return vue.openBlock(), vue.createElementBlock("div", {
14874
- key: group.groupName,
14875
- class: "group mb-16"
14876
- }, [
14877
- vue.createElementVNode("div", _hoisted_2$3, [
14878
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(group.partDefinitions, (part) => {
14879
- return vue.openBlock(), vue.createElementBlock("div", {
14880
- key: part.partName,
14881
- class: "part",
14882
- onClick: ($event) => select(part),
14883
- textContent: vue.toDisplayString(part.caption)
14884
- }, null, 8, _hoisted_3$3);
14885
- }), 128))
14886
- ])
14887
- ]);
14888
- }), 128))
14889
- ])
14890
- ]),
14891
- _: 1
14892
- });
14893
- };
14894
- }
14895
- });
14896
- const PbPartAddModal = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
14897
14660
  __proto__: null,
14898
14661
  default: _sfc_main$3
14899
14662
  }, Symbol.toStringTag, { value: "Module" }));
@@ -15176,12 +14939,11 @@ ${_html.style}
15176
14939
  exports2.PAGE_BUILDER_KEY = PAGE_BUILDER_KEY;
15177
14940
  exports2.PAGE_TYPE = PAGE_TYPE$1;
15178
14941
  exports2.Page = Page;
15179
- exports2.PageBuilderEditor = _sfc_main$b;
14942
+ exports2.PageBuilderEditor = _sfc_main$a;
15180
14943
  exports2.PageBuilderEditorEvent = PageBuilderEditorEvent;
15181
14944
  exports2.PageBuilderViewer = _sfc_main$1$1;
15182
- exports2.PageBuilderViewerEvent = PageBuilderViewerEvent;
15183
14945
  exports2.Part = Part;
15184
- exports2.PbCustomWidget = _sfc_main$B;
14946
+ exports2.PbCustomWidget = _sfc_main$z;
15185
14947
  exports2.PbHtmlWidget = _sfc_main$4$1;
15186
14948
  exports2.PbIframeWidget = _sfc_main$3$1;
15187
14949
  exports2.PbImageWidget = _sfc_main$6$1;