@g1cloud/page-builder-editor 1.0.0-alpha.44 → 1.0.0-alpha.46

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.
@@ -6880,8 +6880,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6880
6880
  this.rootPart = vue.ref(new RootPart());
6881
6881
  }
6882
6882
  };
6883
- const _hoisted_1$a$1 = ["data-part-id"];
6884
- const _sfc_main$b$1 = /* @__PURE__ */ vue.defineComponent({
6883
+ const _hoisted_1$b$1 = ["data-part-id"];
6884
+ const _sfc_main$c$1 = /* @__PURE__ */ vue.defineComponent({
6885
6885
  __name: "PbWidget",
6886
6886
  props: {
6887
6887
  part: {}
@@ -6918,15 +6918,15 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6918
6918
  part: _ctx.part,
6919
6919
  "onUpdate:visible": updateVisible
6920
6920
  }, null, 40, ["part"])) : vue.createCommentVNode("", true)
6921
- ], 14, _hoisted_1$a$1), [
6921
+ ], 14, _hoisted_1$b$1), [
6922
6922
  [vue.vShow, visible.value]
6923
6923
  ])
6924
6924
  ], 64);
6925
6925
  };
6926
6926
  }
6927
6927
  });
6928
- const _hoisted_1$9$1 = ["data-part-id"];
6929
- const _sfc_main$a$1 = /* @__PURE__ */ vue.defineComponent({
6928
+ const _hoisted_1$a$1 = ["data-part-id"];
6929
+ const _sfc_main$b$1 = /* @__PURE__ */ vue.defineComponent({
6930
6930
  __name: "PbBlock",
6931
6931
  props: {
6932
6932
  part: {},
@@ -6961,21 +6961,21 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6961
6961
  style: vue.normalizeStyle(style.value)
6962
6962
  }, [
6963
6963
  _ctx.part.children && _ctx.part.children.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(_ctx.part.children, (child) => {
6964
- return vue.openBlock(), vue.createBlock(_sfc_main$b$1, {
6964
+ return vue.openBlock(), vue.createBlock(_sfc_main$c$1, {
6965
6965
  key: child.partId,
6966
6966
  part: child,
6967
6967
  "onUpdate:visible": (value) => updateVisible(child.partId, value)
6968
6968
  }, null, 8, ["part", "onUpdate:visible"]);
6969
6969
  }), 128)) : vue.createCommentVNode("", true)
6970
- ], 14, _hoisted_1$9$1), [
6970
+ ], 14, _hoisted_1$a$1), [
6971
6971
  [vue.vShow, visible.value]
6972
6972
  ])
6973
6973
  ], 64);
6974
6974
  };
6975
6975
  }
6976
6976
  });
6977
- const _hoisted_1$8$1 = ["data-part-id"];
6978
- const _sfc_main$9$1 = /* @__PURE__ */ vue.defineComponent({
6977
+ const _hoisted_1$9$1 = ["data-part-id"];
6978
+ const _sfc_main$a$1 = /* @__PURE__ */ vue.defineComponent({
6979
6979
  __name: "PbSection",
6980
6980
  props: {
6981
6981
  part: {},
@@ -7007,28 +7007,28 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7007
7007
  style: vue.normalizeStyle(style.value)
7008
7008
  }, [
7009
7009
  _ctx.part.children && _ctx.part.children.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(_ctx.part.children, (child) => {
7010
- return vue.openBlock(), vue.createBlock(_sfc_main$a$1, {
7010
+ return vue.openBlock(), vue.createBlock(_sfc_main$b$1, {
7011
7011
  key: child.partId,
7012
7012
  "is-mobile-page": _ctx.isMobilePage,
7013
7013
  part: child,
7014
7014
  "onUpdate:visible": (value) => updateVisible(child.partId, value)
7015
7015
  }, null, 8, ["is-mobile-page", "part", "onUpdate:visible"]);
7016
7016
  }), 128)) : vue.createCommentVNode("", true)
7017
- ], 14, _hoisted_1$8$1), [
7017
+ ], 14, _hoisted_1$9$1), [
7018
7018
  [vue.vShow, visible.value]
7019
7019
  ])
7020
7020
  ], 64);
7021
7021
  };
7022
7022
  }
7023
7023
  });
7024
- const _hoisted_1$7$1 = ["href", "target"];
7025
- const _hoisted_2$4$1 = ["alt", "src"];
7026
- const _hoisted_3$o = ["alt", "src"];
7027
- const _hoisted_4$e = {
7024
+ const _hoisted_1$8$1 = ["href", "target"];
7025
+ const _hoisted_2$5$1 = ["alt", "src"];
7026
+ const _hoisted_3$1$1 = ["alt", "src"];
7027
+ const _hoisted_4$1$1 = {
7028
7028
  key: 1,
7029
7029
  class: "placeholder"
7030
7030
  };
7031
- const _sfc_main$8$1 = /* @__PURE__ */ vue.defineComponent({
7031
+ const _sfc_main$9$1 = /* @__PURE__ */ vue.defineComponent({
7032
7032
  __name: "PbImageWidget",
7033
7033
  props: {
7034
7034
  part: {},
@@ -7069,20 +7069,103 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7069
7069
  src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).url,
7070
7070
  style: vue.normalizeStyle(style.value),
7071
7071
  class: "image"
7072
- }, null, 12, _hoisted_2$4$1)
7073
- ], 8, _hoisted_1$7$1)) : (vue.openBlock(), vue.createElementBlock("img", {
7072
+ }, null, 12, _hoisted_2$5$1)
7073
+ ], 8, _hoisted_1$8$1)) : (vue.openBlock(), vue.createElementBlock("img", {
7074
7074
  key: 1,
7075
7075
  alt: altText.value,
7076
7076
  src: ((_f = _ctx.part.properties) == null ? void 0 : _f.media).url,
7077
7077
  style: vue.normalizeStyle(style.value),
7078
7078
  class: "image"
7079
- }, null, 12, _hoisted_3$o))
7080
- ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$e, _cache[0] || (_cache[0] = [
7079
+ }, null, 12, _hoisted_3$1$1))
7080
+ ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1$1, _cache[0] || (_cache[0] = [
7081
7081
  vue.createElementVNode("span", { class: "font-icon" }, "image", -1)
7082
7082
  ]))) : vue.createCommentVNode("", true);
7083
7083
  };
7084
7084
  }
7085
7085
  });
7086
+ const _hoisted_1$7$1 = ["href", "target"];
7087
+ const _hoisted_2$4$1 = ["alt", "src"];
7088
+ const _hoisted_3$o = ["alt", "src"];
7089
+ const _hoisted_4$e = ["poster"];
7090
+ const _hoisted_5$8 = ["src"];
7091
+ const _hoisted_6$8 = {
7092
+ key: 1,
7093
+ class: "placeholder"
7094
+ };
7095
+ const _hoisted_7$8 = { class: "font-icon" };
7096
+ const _sfc_main$8$1 = /* @__PURE__ */ vue.defineComponent({
7097
+ __name: "PbMediaWidget",
7098
+ props: {
7099
+ part: {},
7100
+ placeholder: { type: Boolean }
7101
+ },
7102
+ setup(__props) {
7103
+ const props = __props;
7104
+ const pageBuilder = usePageBuilder();
7105
+ const media = vue.computed(() => {
7106
+ var _a;
7107
+ return (_a = props.part.properties) == null ? void 0 : _a.media;
7108
+ });
7109
+ const altText = vue.computed(() => {
7110
+ if (media.value && media.value.altText) {
7111
+ const locale = pageBuilder.getLocale();
7112
+ return media.value.altText[locale] || "";
7113
+ }
7114
+ return "";
7115
+ });
7116
+ const placeholderIcon = vue.computed(() => {
7117
+ var _a;
7118
+ return ((_a = media.value) == null ? void 0 : _a.mediaType) === "Video" ? "smart_display" : "image";
7119
+ });
7120
+ const style = vue.computed(() => {
7121
+ var _a;
7122
+ const media2 = (_a = props.part.properties) == null ? void 0 : _a.media;
7123
+ if (media2.width && media2.height) {
7124
+ return {
7125
+ aspectRatio: media2.width / media2.height
7126
+ };
7127
+ }
7128
+ return {};
7129
+ });
7130
+ return (_ctx, _cache) => {
7131
+ var _a, _b, _c, _d, _e, _f;
7132
+ return media.value ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
7133
+ media.value.mediaType === "Image" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
7134
+ ((_a = _ctx.part.properties) == null ? void 0 : _a.link) ? (vue.openBlock(), vue.createElementBlock("a", {
7135
+ key: 0,
7136
+ href: (_b = _ctx.part.properties) == null ? void 0 : _b.link,
7137
+ target: (_c = _ctx.part.properties) == null ? void 0 : _c.linkTarget
7138
+ }, [
7139
+ vue.createElementVNode("img", {
7140
+ alt: altText.value,
7141
+ src: ((_d = _ctx.part.properties) == null ? void 0 : _d.media).url,
7142
+ style: vue.normalizeStyle(style.value),
7143
+ class: "image"
7144
+ }, null, 12, _hoisted_2$4$1)
7145
+ ], 8, _hoisted_1$7$1)) : (vue.openBlock(), vue.createElementBlock("img", {
7146
+ key: 1,
7147
+ alt: altText.value,
7148
+ src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).url,
7149
+ style: vue.normalizeStyle(style.value),
7150
+ class: "image"
7151
+ }, null, 12, _hoisted_3$o))
7152
+ ], 64)) : media.value.mediaType === "Video" ? (vue.openBlock(), vue.createElementBlock("video", {
7153
+ key: 1,
7154
+ ref: "video",
7155
+ poster: (_f = _ctx.part.properties) == null ? void 0 : _f.thumbnail,
7156
+ class: "video",
7157
+ controls: ""
7158
+ }, [
7159
+ vue.createElementVNode("source", {
7160
+ src: `${media.value.url}#t=0.01`
7161
+ }, null, 8, _hoisted_5$8)
7162
+ ], 8, _hoisted_4$e)) : vue.createCommentVNode("", true)
7163
+ ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$8, [
7164
+ vue.createElementVNode("span", _hoisted_7$8, vue.toDisplayString(placeholderIcon.value), 1)
7165
+ ])) : vue.createCommentVNode("", true);
7166
+ };
7167
+ }
7168
+ });
7086
7169
  const _hoisted_1$6$1 = ["textContent"];
7087
7170
  const _hoisted_2$3$1 = {
7088
7171
  key: 1,
@@ -7244,7 +7327,7 @@ ${_html.style}
7244
7327
  const isYTReady = vue.ref(false);
7245
7328
  vue.onMounted(() => {
7246
7329
  const interval = setInterval(() => {
7247
- if (window.YT) {
7330
+ if (window && window.YT) {
7248
7331
  isYTReady.value = true;
7249
7332
  clearInterval(interval);
7250
7333
  }
@@ -7280,13 +7363,13 @@ ${_html.style}
7280
7363
  partType: "Section",
7281
7364
  partName: "Section",
7282
7365
  className: "pb-section",
7283
- creator: () => _sfc_main$9$1
7366
+ creator: () => _sfc_main$a$1
7284
7367
  },
7285
7368
  "Block": {
7286
7369
  partType: "Block",
7287
7370
  partName: "Block",
7288
7371
  className: "pb-block",
7289
- creator: () => _sfc_main$a$1
7372
+ creator: () => _sfc_main$b$1
7290
7373
  },
7291
7374
  "TextWidget": {
7292
7375
  partType: "Widget",
@@ -7298,6 +7381,12 @@ ${_html.style}
7298
7381
  partType: "Widget",
7299
7382
  partName: "ImageWidget",
7300
7383
  className: "pb-image-widget",
7384
+ creator: () => _sfc_main$9$1
7385
+ },
7386
+ "MediaWidget": {
7387
+ partType: "Widget",
7388
+ partName: "MediaWidget",
7389
+ className: "pb-media-widget",
7301
7390
  creator: () => _sfc_main$8$1
7302
7391
  },
7303
7392
  "HtmlWidget": {
@@ -7349,7 +7438,7 @@ ${_html.style}
7349
7438
  plugin.widgets.forEach((v) => {
7350
7439
  const w = { ...v };
7351
7440
  w.partType = "Widget";
7352
- w.creator = () => _sfc_main$E;
7441
+ w.creator = () => _sfc_main$F;
7353
7442
  partDefinitions$1[v.partName] = w;
7354
7443
  });
7355
7444
  }
@@ -7491,7 +7580,7 @@ ${_html.style}
7491
7580
  style: vue.normalizeStyle(style.value)
7492
7581
  }, [
7493
7582
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.part.children, (section) => {
7494
- return vue.openBlock(), vue.createBlock(_sfc_main$9$1, {
7583
+ return vue.openBlock(), vue.createBlock(_sfc_main$a$1, {
7495
7584
  key: section.partId,
7496
7585
  "is-mobile-page": _ctx.isMobilePage,
7497
7586
  part: section
@@ -7555,7 +7644,7 @@ ${_html.style}
7555
7644
  };
7556
7645
  }
7557
7646
  });
7558
- const _hoisted_1$H = {
7647
+ const _hoisted_1$I = {
7559
7648
  key: 1,
7560
7649
  class: "placeholder",
7561
7650
  textContent: "Empty Widget"
@@ -7576,11 +7665,11 @@ ${_html.style}
7576
7665
  key: child.part.partId,
7577
7666
  part: child.part
7578
7667
  }, null, 8, ["part"]);
7579
- }), 128)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$H)) : vue.createCommentVNode("", true);
7668
+ }), 128)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$I)) : vue.createCommentVNode("", true);
7580
7669
  };
7581
7670
  }
7582
7671
  });
7583
- const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
7672
+ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
7584
7673
  __name: "PbCustomWidget",
7585
7674
  props: {
7586
7675
  part: {},
@@ -8434,10 +8523,10 @@ ${_html.style}
8434
8523
  }
8435
8524
  return target;
8436
8525
  };
8437
- const _sfc_main$D = {};
8438
- const _hoisted_1$G = { class: "pb-add-widget-button" };
8526
+ const _sfc_main$E = {};
8527
+ const _hoisted_1$H = { class: "pb-add-widget-button" };
8439
8528
  function _sfc_render$1(_ctx, _cache) {
8440
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$G, [
8529
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$H, [
8441
8530
  vue.createElementVNode("button", {
8442
8531
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("add-widget", $event))
8443
8532
  }, _cache[1] || (_cache[1] = [
@@ -8446,7 +8535,7 @@ ${_html.style}
8446
8535
  ]))
8447
8536
  ]);
8448
8537
  }
8449
- const PbAddWidgetButton = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["render", _sfc_render$1]]);
8538
+ const PbAddWidgetButton = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["render", _sfc_render$1]]);
8450
8539
  const MOUSE_TRACKER_KEY = "mouseTracker";
8451
8540
  const MOUSE_TRACKER_NOT_FOUND = "MouseTracker not found";
8452
8541
  class MouseTracker {
@@ -8474,8 +8563,8 @@ ${_html.style}
8474
8563
  if (!mouseTracker) throw Error(MOUSE_TRACKER_NOT_FOUND);
8475
8564
  return mouseTracker;
8476
8565
  };
8477
- const _hoisted_1$F = ["data-part-id", "draggable"];
8478
- const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
8566
+ const _hoisted_1$G = ["data-part-id", "draggable"];
8567
+ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
8479
8568
  __name: "PbWidget",
8480
8569
  props: {
8481
8570
  part: {},
@@ -8911,15 +9000,15 @@ ${_html.style}
8911
9000
  class: "resize-handle",
8912
9001
  onMousedown: resizeChild
8913
9002
  }, null, 32)) : vue.createCommentVNode("", true)
8914
- ], 14, _hoisted_1$F)), [
9003
+ ], 14, _hoisted_1$G)), [
8915
9004
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
8916
9005
  ])
8917
9006
  ], 64);
8918
9007
  };
8919
9008
  }
8920
9009
  });
8921
- const _hoisted_1$E = ["data-part-id"];
8922
- const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
9010
+ const _hoisted_1$F = ["data-part-id"];
9011
+ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
8923
9012
  __name: "PbBlock",
8924
9013
  props: {
8925
9014
  part: {},
@@ -9110,27 +9199,27 @@ ${_html.style}
9110
9199
  onAddWidget: addWidget
9111
9200
  })) : vue.createCommentVNode("", true),
9112
9201
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.part.children, (child) => {
9113
- return vue.openBlock(), vue.createBlock(_sfc_main$C, {
9202
+ return vue.openBlock(), vue.createBlock(_sfc_main$D, {
9114
9203
  key: child.partId,
9115
9204
  part: child
9116
9205
  }, null, 8, ["part"]);
9117
9206
  }), 128))
9118
- ], 16, _hoisted_1$E)), [
9207
+ ], 16, _hoisted_1$F)), [
9119
9208
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
9120
9209
  ])
9121
9210
  ], 64);
9122
9211
  };
9123
9212
  }
9124
9213
  });
9125
- const _hoisted_1$D = { class: "pb-block" };
9126
- const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
9214
+ const _hoisted_1$E = { class: "pb-block" };
9215
+ const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
9127
9216
  __name: "PbLoginDepart",
9128
9217
  props: {
9129
9218
  part: {}
9130
9219
  },
9131
9220
  setup(__props) {
9132
9221
  return (_ctx, _cache) => {
9133
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, _cache[0] || (_cache[0] = [
9222
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, _cache[0] || (_cache[0] = [
9134
9223
  vue.createElementVNode("div", {
9135
9224
  class: "pb-widget",
9136
9225
  style: { "margin": "0 auto" }
@@ -9143,8 +9232,8 @@ ${_html.style}
9143
9232
  };
9144
9233
  }
9145
9234
  });
9146
- const _hoisted_1$C = ["data-part-id"];
9147
- const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
9235
+ const _hoisted_1$D = ["data-part-id"];
9236
+ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
9148
9237
  __name: "PbSection",
9149
9238
  props: {
9150
9239
  part: {},
@@ -9255,13 +9344,13 @@ ${_html.style}
9255
9344
  style: (_a = _ctx.part.properties) == null ? void 0 : _a.css
9256
9345
  }, properties.value), [
9257
9346
  ((_b = _ctx.part.properties) == null ? void 0 : _b.sectionType) === "static" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
9258
- ((_c = _ctx.part.properties) == null ? void 0 : _c.name) === "Login Design Part" ? (vue.openBlock(), vue.createBlock(_sfc_main$A, {
9347
+ ((_c = _ctx.part.properties) == null ? void 0 : _c.name) === "Login Design Part" ? (vue.openBlock(), vue.createBlock(_sfc_main$B, {
9259
9348
  key: 0,
9260
9349
  part: _ctx.part
9261
9350
  }, null, 8, ["part"])) : vue.createCommentVNode("", true)
9262
9351
  ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
9263
9352
  _ctx.part.children && _ctx.part.children.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(_ctx.part.children, (block) => {
9264
- return vue.openBlock(), vue.createBlock(_sfc_main$B, {
9353
+ return vue.openBlock(), vue.createBlock(_sfc_main$C, {
9265
9354
  key: block.partId,
9266
9355
  "is-mobile-page": _ctx.isMobilePage,
9267
9356
  part: block
@@ -9271,21 +9360,21 @@ ${_html.style}
9271
9360
  onAddWidget: addWidget
9272
9361
  }))
9273
9362
  ], 64))
9274
- ], 16, _hoisted_1$C)), [
9363
+ ], 16, _hoisted_1$D)), [
9275
9364
  [vue.unref(vPartHandler), { pageBuilder: vue.unref(pageBuilder), part: _ctx.part, droppable: true, locatePositionMark, calculateDropIndex, acceptChildPart }]
9276
9365
  ])
9277
9366
  ], 64);
9278
9367
  };
9279
9368
  }
9280
9369
  });
9281
- const _hoisted_1$B = { class: "group-editor group-editor-position" };
9370
+ const _hoisted_1$C = { class: "group-editor group-editor-position" };
9282
9371
  const _hoisted_2$s = { class: "flex-align-center" };
9283
9372
  const _hoisted_3$n = { class: "flex-grow-1" };
9284
9373
  const _hoisted_4$d = { class: "bg-gray-100 py-5 rounded-8" };
9285
9374
  const _hoisted_5$7 = { class: "text-center" };
9286
9375
  const _hoisted_6$7 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
9287
9376
  const _hoisted_7$7 = { class: "text-center" };
9288
- const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
9377
+ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
9289
9378
  __name: "PbPropertyGroupEditorPosition",
9290
9379
  props: {
9291
9380
  group: {},
@@ -9309,7 +9398,7 @@ ${_html.style}
9309
9398
  const updateTop = (value) => updatePropertyValue({ top: value });
9310
9399
  const updateBottom = (value) => updatePropertyValue({ bottom: value });
9311
9400
  return (_ctx, _cache) => {
9312
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$B, [
9401
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
9313
9402
  vue.createElementVNode("div", _hoisted_2$s, [
9314
9403
  _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "title" }, [
9315
9404
  vue.createElementVNode("label", { textContent: "Position" })
@@ -9363,14 +9452,14 @@ ${_html.style}
9363
9452
  };
9364
9453
  }
9365
9454
  });
9366
- const _hoisted_1$A = { class: "group-editor group-editor-size" };
9455
+ const _hoisted_1$B = { class: "group-editor group-editor-size" };
9367
9456
  const _hoisted_2$r = { class: "flex-align-center" };
9368
9457
  const _hoisted_3$m = { class: "flex-grow-1 bs-layout-horizontal" };
9369
9458
  const _hoisted_4$c = { class: "flex-align-center mt-12" };
9370
9459
  const _hoisted_5$6 = { class: "flex-grow-1 bs-layout-horizontal" };
9371
9460
  const _hoisted_6$6 = { class: "flex-align-center mt-12" };
9372
9461
  const _hoisted_7$6 = { class: "flex-grow-1 bs-layout-horizontal" };
9373
- const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
9462
+ const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
9374
9463
  __name: "PbPropertyGroupEditorSize",
9375
9464
  props: {
9376
9465
  group: {},
@@ -9398,7 +9487,7 @@ ${_html.style}
9398
9487
  const updateMinWidth = (value) => updatePropertyValue({ minWidth: value });
9399
9488
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9400
9489
  return (_ctx, _cache) => {
9401
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$A, [
9490
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$B, [
9402
9491
  vue.createElementVNode("div", _hoisted_2$r, [
9403
9492
  _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "title" }, [
9404
9493
  vue.createElementVNode("label", { textContent: "Size" })
@@ -9616,7 +9705,7 @@ ${_html.style}
9616
9705
  }
9617
9706
  }
9618
9707
  };
9619
- const _hoisted_1$z = { class: "vc-alpha" };
9708
+ const _hoisted_1$A = { class: "vc-alpha" };
9620
9709
  const _hoisted_2$q = { class: "vc-alpha-checkboard-wrap" };
9621
9710
  const _hoisted_3$l = /* @__PURE__ */ vue.createElementVNode(
9622
9711
  "div",
@@ -9630,7 +9719,7 @@ ${_html.style}
9630
9719
  ];
9631
9720
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
9632
9721
  const _component_Checkboard = vue.resolveComponent("Checkboard");
9633
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, [
9722
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$A, [
9634
9723
  vue.createElementVNode("div", _hoisted_2$q, [
9635
9724
  vue.createVNode(_component_Checkboard)
9636
9725
  ]),
@@ -10734,12 +10823,12 @@ ${_html.style}
10734
10823
  // }
10735
10824
  }
10736
10825
  };
10737
- const _hoisted_1$y = { class: "vc-editable-input" };
10826
+ const _hoisted_1$z = { class: "vc-editable-input" };
10738
10827
  const _hoisted_2$p = ["aria-labelledby"];
10739
10828
  const _hoisted_3$k = ["id", "for"];
10740
10829
  const _hoisted_4$a = { class: "vc-input__desc" };
10741
10830
  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
10742
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$y, [
10831
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, [
10743
10832
  vue.withDirectives(vue.createElementVNode("input", {
10744
10833
  ref: "input",
10745
10834
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $options.val = $event),
@@ -10834,7 +10923,7 @@ ${_html.style}
10834
10923
  }
10835
10924
  }
10836
10925
  };
10837
- const _hoisted_1$x = /* @__PURE__ */ vue.createElementVNode(
10926
+ const _hoisted_1$y = /* @__PURE__ */ vue.createElementVNode(
10838
10927
  "div",
10839
10928
  { class: "vc-saturation--white" },
10840
10929
  null,
@@ -10870,7 +10959,7 @@ ${_html.style}
10870
10959
  onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.handleChange && $options.handleChange(...args))
10871
10960
  },
10872
10961
  [
10873
- _hoisted_1$x,
10962
+ _hoisted_1$y,
10874
10963
  _hoisted_2$o,
10875
10964
  vue.createElementVNode(
10876
10965
  "div",
@@ -11019,7 +11108,7 @@ ${_html.style}
11019
11108
  }
11020
11109
  }
11021
11110
  };
11022
- const _hoisted_1$w = ["aria-valuenow"];
11111
+ const _hoisted_1$x = ["aria-valuenow"];
11023
11112
  const _hoisted_2$n = /* @__PURE__ */ vue.createElementVNode(
11024
11113
  "div",
11025
11114
  { class: "vc-hue-picker" },
@@ -11059,7 +11148,7 @@ ${_html.style}
11059
11148
  4
11060
11149
  /* STYLE */
11061
11150
  )
11062
- ], 40, _hoisted_1$w)
11151
+ ], 40, _hoisted_1$x)
11063
11152
  ],
11064
11153
  2
11065
11154
  /* CLASS */
@@ -11155,7 +11244,7 @@ ${_html.style}
11155
11244
  }
11156
11245
  }
11157
11246
  };
11158
- const _hoisted_1$v = { class: "vc-sketch-saturation-wrap" };
11247
+ const _hoisted_1$w = { class: "vc-sketch-saturation-wrap" };
11159
11248
  const _hoisted_2$m = { class: "vc-sketch-controls" };
11160
11249
  const _hoisted_3$h = { class: "vc-sketch-sliders" };
11161
11250
  const _hoisted_4$8 = { class: "vc-sketch-hue-wrap" };
@@ -11198,7 +11287,7 @@ ${_html.style}
11198
11287
  class: vue.normalizeClass(["vc-sketch", [$props.disableAlpha ? "vc-sketch__disable-alpha" : ""]])
11199
11288
  },
11200
11289
  [
11201
- vue.createElementVNode("div", _hoisted_1$v, [
11290
+ vue.createElementVNode("div", _hoisted_1$w, [
11202
11291
  vue.createVNode(_component_Saturation, {
11203
11292
  value: _ctx.colors,
11204
11293
  onChange: $options.childChange
@@ -11310,7 +11399,7 @@ ${_html.style}
11310
11399
  script.render = render;
11311
11400
  script.__file = "src/components/sketch/sketch.vue";
11312
11401
  script.install = install;
11313
- const _sfc_main$w = vue.defineComponent({
11402
+ const _sfc_main$x = vue.defineComponent({
11314
11403
  name: "PbColorPicker",
11315
11404
  components: {
11316
11405
  Sketch: script
@@ -11370,7 +11459,7 @@ ${_html.style}
11370
11459
  };
11371
11460
  }
11372
11461
  });
11373
- const _hoisted_1$u = { class: "buttons" };
11462
+ const _hoisted_1$v = { class: "buttons" };
11374
11463
  const _hoisted_2$l = { class: "sketch-wrap" };
11375
11464
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11376
11465
  const _component_Sketch = vue.resolveComponent("Sketch");
@@ -11380,7 +11469,7 @@ ${_html.style}
11380
11469
  onKeydown: _cache[3] || (_cache[3] = vue.withModifiers(() => {
11381
11470
  }, ["stop"]))
11382
11471
  }, [
11383
- vue.createElementVNode("div", _hoisted_1$u, [
11472
+ vue.createElementVNode("div", _hoisted_1$v, [
11384
11473
  vue.renderSlot(_ctx.$slots, "button", vue.normalizeProps(vue.guardReactiveProps({ toggle: _ctx.toggle, color: _ctx.color })), () => [
11385
11474
  vue.createElementVNode("button", {
11386
11475
  class: vue.normalizeClass([{ none: !_ctx.color }, "picker-button"]),
@@ -11407,12 +11496,12 @@ ${_html.style}
11407
11496
  [_directive_click_outside, () => _ctx.toggle(false)]
11408
11497
  ]);
11409
11498
  }
11410
- const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render]]);
11411
- const _hoisted_1$t = { class: "group-editor group-editor-background" };
11499
+ const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render]]);
11500
+ const _hoisted_1$u = { class: "group-editor group-editor-background" };
11412
11501
  const _hoisted_2$k = { class: "flex-align-center" };
11413
11502
  const _hoisted_3$g = { class: "bs-layout-horizontal" };
11414
11503
  const _hoisted_4$7 = { class: "color" };
11415
- const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
11504
+ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
11416
11505
  __name: "PbPropertyGroupEditorBackground",
11417
11506
  props: {
11418
11507
  group: {},
@@ -11445,7 +11534,7 @@ ${_html.style}
11445
11534
  }
11446
11535
  };
11447
11536
  return (_ctx, _cache) => {
11448
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$t, [
11537
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$u, [
11449
11538
  vue.createElementVNode("div", _hoisted_2$k, [
11450
11539
  _cache[3] || (_cache[3] = vue.createElementVNode("div", { class: "title" }, [
11451
11540
  vue.createElementVNode("label", { textContent: "Background" })
@@ -11480,7 +11569,7 @@ ${_html.style}
11480
11569
  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";
11481
11570
  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";
11482
11571
  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";
11483
- const _hoisted_1$s = { class: "group-editor group-editor-border" };
11572
+ const _hoisted_1$t = { class: "group-editor group-editor-border" };
11484
11573
  const _hoisted_2$j = { class: "flex-align-center" };
11485
11574
  const _hoisted_3$f = { class: "" };
11486
11575
  const _hoisted_4$6 = { class: "color" };
@@ -11495,7 +11584,7 @@ ${_html.style}
11495
11584
  const _hoisted_13 = { class: "bg-gray-100 py-5 rounded-8" };
11496
11585
  const _hoisted_14 = { class: "" };
11497
11586
  const _hoisted_15 = { class: "mt-2" };
11498
- const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
11587
+ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
11499
11588
  __name: "PbPropertyGroupEditorBorder",
11500
11589
  props: {
11501
11590
  group: {},
@@ -11533,7 +11622,7 @@ ${_html.style}
11533
11622
  const updateBorderBottomLeftRadius = (value) => updatePropertyValue({ borderBottomLeftRadius: value });
11534
11623
  const updateBorderBottomRightRadius = (value) => updatePropertyValue({ borderBottomRightRadius: value });
11535
11624
  return (_ctx, _cache) => {
11536
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$s, [
11625
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$t, [
11537
11626
  vue.createElementVNode("div", _hoisted_2$j, [
11538
11627
  _cache[7] || (_cache[7] = vue.createElementVNode("div", { class: "title" }, [
11539
11628
  vue.createElementVNode("label", { textContent: "Border" })
@@ -11655,14 +11744,14 @@ ${_html.style}
11655
11744
  };
11656
11745
  }
11657
11746
  });
11658
- const _hoisted_1$r = { class: "group-editor group-editor-margin" };
11747
+ const _hoisted_1$s = { class: "group-editor group-editor-margin" };
11659
11748
  const _hoisted_2$i = { class: "flex-align-center" };
11660
11749
  const _hoisted_3$e = { class: "flex-grow-1" };
11661
11750
  const _hoisted_4$5 = { class: "bg-gray-100 py-5 rounded-8" };
11662
11751
  const _hoisted_5$3 = { class: "text-center" };
11663
11752
  const _hoisted_6$3 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11664
11753
  const _hoisted_7$3 = { class: "text-center" };
11665
- const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
11754
+ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
11666
11755
  __name: "PbPropertyGroupEditorMargin",
11667
11756
  props: {
11668
11757
  group: {},
@@ -11686,7 +11775,7 @@ ${_html.style}
11686
11775
  const updateTop = (value) => updatePropertyValue({ marginTop: value });
11687
11776
  const updateBottom = (value) => updatePropertyValue({ marginBottom: value });
11688
11777
  return (_ctx, _cache) => {
11689
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$r, [
11778
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$s, [
11690
11779
  vue.createElementVNode("div", _hoisted_2$i, [
11691
11780
  _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "title" }, [
11692
11781
  vue.createElementVNode("label", { textContent: "Margin" })
@@ -11740,14 +11829,14 @@ ${_html.style}
11740
11829
  };
11741
11830
  }
11742
11831
  });
11743
- const _hoisted_1$q = { class: "group-editor group-editor-padding" };
11832
+ const _hoisted_1$r = { class: "group-editor group-editor-padding" };
11744
11833
  const _hoisted_2$h = { class: "flex-align-center" };
11745
11834
  const _hoisted_3$d = { class: "flex-grow-1" };
11746
11835
  const _hoisted_4$4 = { class: "bg-gray-100 py-5 rounded-8" };
11747
11836
  const _hoisted_5$2 = { class: "text-center" };
11748
11837
  const _hoisted_6$2 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11749
11838
  const _hoisted_7$2 = { class: "text-center" };
11750
- const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
11839
+ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
11751
11840
  __name: "PbPropertyGroupEditorPadding",
11752
11841
  props: {
11753
11842
  group: {},
@@ -11771,7 +11860,7 @@ ${_html.style}
11771
11860
  const updateTop = (value) => updatePropertyValue({ paddingTop: value });
11772
11861
  const updateBottom = (value) => updatePropertyValue({ paddingBottom: value });
11773
11862
  return (_ctx, _cache) => {
11774
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$q, [
11863
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$r, [
11775
11864
  vue.createElementVNode("div", _hoisted_2$h, [
11776
11865
  _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "title" }, [
11777
11866
  vue.createElementVNode("label", { textContent: "Padding" })
@@ -11851,7 +11940,7 @@ ${_html.style}
11851
11940
  propertyType: "text"
11852
11941
  }
11853
11942
  ],
11854
- propertyGroupEditor: () => _sfc_main$y
11943
+ propertyGroupEditor: () => _sfc_main$z
11855
11944
  };
11856
11945
  };
11857
11946
  const sizeGroup = () => {
@@ -11890,7 +11979,7 @@ ${_html.style}
11890
11979
  propertyType: "text"
11891
11980
  }
11892
11981
  ],
11893
- propertyGroupEditor: () => _sfc_main$x
11982
+ propertyGroupEditor: () => _sfc_main$y
11894
11983
  };
11895
11984
  };
11896
11985
  const marginGroup = () => {
@@ -11919,7 +12008,7 @@ ${_html.style}
11919
12008
  propertyType: "text"
11920
12009
  }
11921
12010
  ],
11922
- propertyGroupEditor: () => _sfc_main$t
12011
+ propertyGroupEditor: () => _sfc_main$u
11923
12012
  };
11924
12013
  };
11925
12014
  const paddingGroup = () => {
@@ -11948,7 +12037,7 @@ ${_html.style}
11948
12037
  propertyType: "text"
11949
12038
  }
11950
12039
  ],
11951
- propertyGroupEditor: () => _sfc_main$s
12040
+ propertyGroupEditor: () => _sfc_main$t
11952
12041
  };
11953
12042
  };
11954
12043
  const commonGroup = () => {
@@ -12084,7 +12173,7 @@ ${_html.style}
12084
12173
  propertyType: "image"
12085
12174
  }
12086
12175
  ],
12087
- propertyGroupEditor: () => _sfc_main$v
12176
+ propertyGroupEditor: () => _sfc_main$w
12088
12177
  };
12089
12178
  };
12090
12179
  const borderGroup = () => {
@@ -12138,7 +12227,7 @@ ${_html.style}
12138
12227
  propertyType: "text"
12139
12228
  }
12140
12229
  ],
12141
- propertyGroupEditor: () => _sfc_main$u
12230
+ propertyGroupEditor: () => _sfc_main$v
12142
12231
  };
12143
12232
  };
12144
12233
  const defaultPropertyGroups = () => {
@@ -12147,7 +12236,7 @@ ${_html.style}
12147
12236
  const defaultWidgetPropertyGroups = () => {
12148
12237
  return [alignSelfGroup(), positionGroup(), sizeGroup(), marginGroup(), paddingGroup(), borderGroup(), backgroundGroup(), commonGroup()];
12149
12238
  };
12150
- const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12239
+ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
12151
12240
  __name: "PbContainerWidget",
12152
12241
  props: {
12153
12242
  part: {},
@@ -12162,7 +12251,7 @@ ${_html.style}
12162
12251
  var _a;
12163
12252
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
12164
12253
  _ctx.part.children ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(_ctx.part.children, (child) => {
12165
- return vue.openBlock(), vue.createBlock(_sfc_main$C, {
12254
+ return vue.openBlock(), vue.createBlock(_sfc_main$D, {
12166
12255
  key: child.partId,
12167
12256
  "is-mobile-page": false,
12168
12257
  part: child
@@ -12176,6 +12265,111 @@ ${_html.style}
12176
12265
  };
12177
12266
  }
12178
12267
  });
12268
+ const _hoisted_1$q = { class: "group-editor group-editor-media" };
12269
+ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12270
+ __name: "PbPropertyGroupEditorMedia",
12271
+ props: {
12272
+ property: {},
12273
+ value: {}
12274
+ },
12275
+ setup(__props) {
12276
+ const pageBuilder = usePageBuilderEditor();
12277
+ const part = pageBuilder.context.getSelectedParts();
12278
+ const modal = bluesea.useModal();
12279
+ const selectMedia = () => {
12280
+ const imageProvider = pageBuilder.getProvider("imageProvider");
12281
+ if (imageProvider) {
12282
+ imageProvider({ modal }, (media2) => {
12283
+ if (media2.mediaType === "Image") {
12284
+ updateProperty({ media: media2, altText: media2.altText, thumbnail: "" });
12285
+ } else if (media2.mediaType === "Video") {
12286
+ updateProperty({ media: media2, altText: media2.altText, link: "", linkTarget: "" });
12287
+ }
12288
+ });
12289
+ }
12290
+ };
12291
+ const updateProperty = (properties) => {
12292
+ pageBuilder.commandRegistry.executeCommand(ChangePropertyCommand.COMMAND_ID, { properties, targetParts: part });
12293
+ };
12294
+ const locales = vue.computed(() => pageBuilder.getLocales());
12295
+ const media = vue.computed(() => {
12296
+ var _a, _b;
12297
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.media;
12298
+ });
12299
+ const altText = vue.computed(() => {
12300
+ var _a, _b;
12301
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.altText;
12302
+ });
12303
+ const link = vue.computed(() => {
12304
+ var _a, _b;
12305
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.link;
12306
+ });
12307
+ const linkTarget = vue.computed(() => {
12308
+ var _a, _b;
12309
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.linkTarget;
12310
+ });
12311
+ const thumbnail = vue.computed(() => {
12312
+ var _a, _b;
12313
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.thumbnail;
12314
+ });
12315
+ return (_ctx, _cache) => {
12316
+ var _a, _b;
12317
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$q, [
12318
+ _cache[8] || (_cache[8] = vue.createElementVNode("div", { class: "title" }, [
12319
+ vue.createElementVNode("label", { textContent: "Media" })
12320
+ ], -1)),
12321
+ vue.createElementVNode("div", null, [
12322
+ vue.createElementVNode("button", { onClick: selectMedia }, "Select Media")
12323
+ ]),
12324
+ ((_a = media.value) == null ? void 0 : _a.mediaType) === "Image" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
12325
+ _cache[4] || (_cache[4] = vue.createElementVNode("div", { class: "title mt-12" }, [
12326
+ vue.createElementVNode("label", { textContent: "Alt Text" })
12327
+ ], -1)),
12328
+ vue.createElementVNode("div", null, [
12329
+ vue.createVNode(vue.unref(bluesea.BSMultiLangTextInput), {
12330
+ locales: locales.value,
12331
+ "model-value": altText.value,
12332
+ width: "100%",
12333
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (value) => updateProperty({ altText: value }))
12334
+ }, null, 8, ["locales", "model-value"])
12335
+ ]),
12336
+ _cache[5] || (_cache[5] = vue.createElementVNode("div", { class: "title mt-12" }, [
12337
+ vue.createElementVNode("label", { textContent: "Link" })
12338
+ ], -1)),
12339
+ vue.createElementVNode("div", null, [
12340
+ vue.createVNode(vue.unref(bluesea.BSTextInput), {
12341
+ "model-value": link.value,
12342
+ width: "100%",
12343
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = (value) => updateProperty({ link: value }))
12344
+ }, null, 8, ["model-value"])
12345
+ ]),
12346
+ _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "title mt-12" }, [
12347
+ vue.createElementVNode("label", { textContent: "Link Target" })
12348
+ ], -1)),
12349
+ vue.createElementVNode("div", null, [
12350
+ vue.createVNode(vue.unref(bluesea.BSTextInput), {
12351
+ "model-value": linkTarget.value,
12352
+ width: "100%",
12353
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (value) => updateProperty({ linkTarget: value }))
12354
+ }, null, 8, ["model-value"])
12355
+ ])
12356
+ ], 64)) : vue.createCommentVNode("", true),
12357
+ ((_b = media.value) == null ? void 0 : _b.mediaType) === "Video" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
12358
+ _cache[7] || (_cache[7] = vue.createElementVNode("div", { class: "title mt-12" }, [
12359
+ vue.createElementVNode("label", { textContent: "Thumbnail" })
12360
+ ], -1)),
12361
+ vue.createElementVNode("div", null, [
12362
+ vue.createVNode(vue.unref(bluesea.BSTextInput), {
12363
+ "model-value": thumbnail.value,
12364
+ width: "100%",
12365
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = (value) => updateProperty({ thumbnail: value }))
12366
+ }, null, 8, ["model-value"])
12367
+ ])
12368
+ ], 64)) : vue.createCommentVNode("", true)
12369
+ ]);
12370
+ };
12371
+ }
12372
+ });
12179
12373
  const pageParts = [
12180
12374
  {
12181
12375
  partType: "Page",
@@ -12185,7 +12379,7 @@ ${_html.style}
12185
12379
  className: "pb-page",
12186
12380
  propertyGroups: [
12187
12381
  {
12188
- groupName: "size",
12382
+ groupName: "Size",
12189
12383
  caption: "Size",
12190
12384
  properties: [
12191
12385
  {
@@ -12205,7 +12399,7 @@ ${_html.style}
12205
12399
  alignItems: "center"
12206
12400
  },
12207
12401
  allowsChild: () => true,
12208
- creator: () => _sfc_main$z
12402
+ creator: () => _sfc_main$A
12209
12403
  }
12210
12404
  ];
12211
12405
  const sectionParts = [
@@ -12224,7 +12418,7 @@ ${_html.style}
12224
12418
  justifyContent: "start"
12225
12419
  },
12226
12420
  allowsChild: () => true,
12227
- creator: () => _sfc_main$z
12421
+ creator: () => _sfc_main$A
12228
12422
  }
12229
12423
  ];
12230
12424
  const blockParts = [
@@ -12243,7 +12437,7 @@ ${_html.style}
12243
12437
  justifyContent: "start"
12244
12438
  },
12245
12439
  allowsChild: () => true,
12246
- creator: () => _sfc_main$B
12440
+ creator: () => _sfc_main$C
12247
12441
  }
12248
12442
  ];
12249
12443
  const widgets = [
@@ -12255,7 +12449,7 @@ ${_html.style}
12255
12449
  className: "pb-text-widget",
12256
12450
  propertyGroups: [
12257
12451
  {
12258
- groupName: "text",
12452
+ groupName: "Text",
12259
12453
  caption: "Text",
12260
12454
  properties: [
12261
12455
  {
@@ -12309,11 +12503,11 @@ ${_html.style}
12309
12503
  partType: "Widget",
12310
12504
  partName: "ImageWidget",
12311
12505
  caption: "Image",
12312
- icon: "imagesmode",
12506
+ icon: "image",
12313
12507
  className: "pb-image-widget",
12314
12508
  propertyGroups: [
12315
12509
  {
12316
- groupName: "image",
12510
+ groupName: "Image",
12317
12511
  caption: "Image",
12318
12512
  properties: [
12319
12513
  {
@@ -12347,6 +12541,53 @@ ${_html.style}
12347
12541
  ],
12348
12542
  initialProperties: {},
12349
12543
  allowsChild: () => false,
12544
+ creator: () => _sfc_main$9$1
12545
+ },
12546
+ {
12547
+ partType: "Widget",
12548
+ partName: "MediaWidget",
12549
+ caption: "Media",
12550
+ icon: "smart_display",
12551
+ className: "pb-media-widget",
12552
+ propertyGroups: [
12553
+ {
12554
+ groupName: "Media",
12555
+ caption: "Media",
12556
+ properties: [
12557
+ {
12558
+ propertyName: "Media",
12559
+ caption: "Media",
12560
+ propertyType: "media"
12561
+ },
12562
+ {
12563
+ propertyName: "altText",
12564
+ caption: "Alt Text",
12565
+ propertyType: "text",
12566
+ multiLang: true
12567
+ },
12568
+ {
12569
+ propertyName: "link",
12570
+ caption: "Link",
12571
+ propertyType: "text"
12572
+ },
12573
+ {
12574
+ propertyName: "linkTarget",
12575
+ caption: "Link Target",
12576
+ propertyType: "text"
12577
+ },
12578
+ {
12579
+ propertyName: "thumbnail",
12580
+ caption: "Thumbnail URL",
12581
+ propertyType: "text",
12582
+ readonly: true
12583
+ }
12584
+ ],
12585
+ propertyGroupEditor: () => _sfc_main$r
12586
+ },
12587
+ ...defaultWidgetPropertyGroups()
12588
+ ],
12589
+ initialProperties: {},
12590
+ allowsChild: () => false,
12350
12591
  creator: () => _sfc_main$8$1
12351
12592
  },
12352
12593
  {
@@ -12357,7 +12598,7 @@ ${_html.style}
12357
12598
  className: "pb-html-widget",
12358
12599
  propertyGroups: [
12359
12600
  {
12360
- groupName: "html",
12601
+ groupName: "HTML",
12361
12602
  caption: "HTML",
12362
12603
  properties: [
12363
12604
  {
@@ -12383,7 +12624,7 @@ ${_html.style}
12383
12624
  className: "pb-iframe-widget",
12384
12625
  propertyGroups: [
12385
12626
  {
12386
- groupName: "iframe",
12627
+ groupName: "Iframe",
12387
12628
  caption: "Iframe",
12388
12629
  properties: [
12389
12630
  {
@@ -12409,7 +12650,7 @@ ${_html.style}
12409
12650
  className: "pb-youtube-widget",
12410
12651
  propertyGroups: [
12411
12652
  {
12412
- groupName: "youtube",
12653
+ groupName: "Youtube",
12413
12654
  caption: "Youtube",
12414
12655
  properties: [
12415
12656
  {
@@ -12442,7 +12683,7 @@ ${_html.style}
12442
12683
  className: "pb-container-widget",
12443
12684
  propertyGroups: [
12444
12685
  {
12445
- groupName: "container",
12686
+ groupName: "Container",
12446
12687
  caption: "Container",
12447
12688
  properties: []
12448
12689
  },
@@ -12452,7 +12693,7 @@ ${_html.style}
12452
12693
  height: "300px"
12453
12694
  },
12454
12695
  allowsChild: () => true,
12455
- creator: () => _sfc_main$r
12696
+ creator: () => _sfc_main$s
12456
12697
  }
12457
12698
  ];
12458
12699
  const partDefinitions = {};
@@ -12572,40 +12813,6 @@ ${_html.style}
12572
12813
  }
12573
12814
  });
12574
12815
  };
12575
- const findInsertTargetAndIndex = (pageBuilder, partType) => {
12576
- var _a, _b, _c;
12577
- const selected = pageBuilder.context.getSelectedParts()[0];
12578
- const page = pageBuilder.context.getSelectedPage();
12579
- if (!page) return {};
12580
- if (partType === SECTION_TYPE) {
12581
- const section = pageBuilder.partManager.findNearestSection(selected);
12582
- return {
12583
- target: page,
12584
- index: section ? page.children.indexOf(section) + 1 : (_a = page.children) == null ? void 0 : _a.length
12585
- };
12586
- } else if (partType === BLOCK_TYPE) {
12587
- let section = pageBuilder.partManager.findNearestSection(selected);
12588
- let block = pageBuilder.partManager.findNearestBlock(selected);
12589
- if (!section) {
12590
- section = page.children[page.children.length - 1];
12591
- }
12592
- return {
12593
- target: section,
12594
- index: block ? section.children.indexOf(block) + 1 : (_b = section.children) == null ? void 0 : _b.length
12595
- };
12596
- } else {
12597
- let block = pageBuilder.partManager.findNearestBlock(selected);
12598
- let widget = selected.parent.isWidget() ? selected.parent : selected;
12599
- if (!block) {
12600
- const section = page.children[page.children.length - 1];
12601
- block = section.children[section.children.length - 1];
12602
- }
12603
- return {
12604
- target: block,
12605
- index: widget ? block.children.indexOf(widget) + 1 : (_c = block.children) == null ? void 0 : _c.length
12606
- };
12607
- }
12608
- };
12609
12816
  const createPartWithDefinition = (def, properties) => {
12610
12817
  const part = createPart(def.partType, def.partName, def.initialProperties);
12611
12818
  if (part && properties) {
@@ -13134,7 +13341,7 @@ ${_html.style}
13134
13341
  __publicField(this, "commandId", _PastePartCommand.COMMAND_ID);
13135
13342
  }
13136
13343
  async execute(pageBuilder) {
13137
- var _a;
13344
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
13138
13345
  const json = await navigator.clipboard.readText();
13139
13346
  const object = JSON.parse(json);
13140
13347
  if (object.partType === ROOT_TYPE) {
@@ -13202,7 +13409,7 @@ ${_html.style}
13202
13409
  else if (part.partType === WIDGET_TYPE && !pasteType) pasteType = WIDGET_TYPE;
13203
13410
  });
13204
13411
  if (!pasteType) return;
13205
- const partsToInsert = parts.map((part) => {
13412
+ const partsToPaste = parts.map((part) => {
13206
13413
  if (pasteType === SECTION_TYPE) {
13207
13414
  if (part.partType === SECTION_TYPE) {
13208
13415
  return part;
@@ -13233,11 +13440,76 @@ ${_html.style}
13233
13440
  return part;
13234
13441
  }
13235
13442
  }).filter(bluesea.notNull);
13236
- const targetType = pasteType === SECTION_TYPE ? SECTION_TYPE : pasteType === BLOCK_TYPE ? BLOCK_TYPE : WIDGET_TYPE;
13237
- const { target, index } = findInsertTargetAndIndex(pageBuilder, targetType);
13238
- if (target && index !== void 0 && partsToInsert) {
13239
- insertParts(pageBuilder, target.partId, index, partsToInsert, false);
13443
+ const selectedPage = pageBuilder.context.getSelectedPage();
13444
+ const selected = pageBuilder.context.getSelectedParts()[0] || selectedPage;
13445
+ if (!selectedPage || !selected) return;
13446
+ let selectedWidget;
13447
+ if (selected && selected.isWidget()) selectedWidget = selected;
13448
+ if (selectedWidget && selectedWidget.isNestedWidget()) selectedWidget = selectedWidget.parent;
13449
+ let selectedBlock;
13450
+ if (selectedWidget) selectedBlock = selectedWidget.parent;
13451
+ else if (selected && selected.isBlock()) selectedBlock = selected;
13452
+ let selectedSection;
13453
+ if (selectedBlock) selectedSection = selectedBlock.parent;
13454
+ else if (selected && selected.isSection()) selectedSection = selected;
13455
+ let targetPartId;
13456
+ let targetIndex = -1;
13457
+ let partsToInsert;
13458
+ if (pasteType === SECTION_TYPE) {
13459
+ targetPartId = selectedPage.partId;
13460
+ targetIndex = selectedSection ? selectedPage.children.indexOf(selectedSection) + 1 : ((_b = selectedPage.children) == null ? void 0 : _b.length) || 0;
13461
+ partsToInsert = partsToPaste;
13462
+ } else if (pasteType === BLOCK_TYPE) {
13463
+ if (selectedSection) {
13464
+ targetPartId = selectedSection.partId;
13465
+ targetIndex = selectedBlock ? selectedSection.children.indexOf(selectedBlock) + 1 : ((_c = selectedSection.children) == null ? void 0 : _c.length) || 0;
13466
+ partsToInsert = partsToPaste;
13467
+ } else if ((_d = selectedPage.children) == null ? void 0 : _d.length) {
13468
+ selectedSection = selectedPage.children[selectedPage.children.length - 1];
13469
+ targetPartId = selectedSection.partId;
13470
+ targetIndex = ((_e = selectedSection.children) == null ? void 0 : _e.length) || 0;
13471
+ partsToInsert = partsToPaste;
13472
+ } else {
13473
+ const newSection = createSection(pageBuilder);
13474
+ if (!newSection) return;
13475
+ newSection.children = partsToPaste;
13476
+ targetPartId = selectedPage.partId;
13477
+ targetIndex = 0;
13478
+ partsToInsert = [newSection];
13479
+ }
13480
+ } else if (pasteType === WIDGET_TYPE) {
13481
+ if (selectedBlock) {
13482
+ targetPartId = selectedBlock.partId;
13483
+ targetIndex = selectedWidget ? selectedBlock.children.indexOf(selectedWidget) + 1 : ((_f = selectedBlock.children) == null ? void 0 : _f.length) || 0;
13484
+ partsToInsert = partsToPaste;
13485
+ } else if (selectedSection || ((_g = selectedPage.children) == null ? void 0 : _g.length)) {
13486
+ if (!selectedSection) selectedSection = selectedPage.children[selectedPage.children.length - 1];
13487
+ if ((_h = selectedSection.children) == null ? void 0 : _h.length) {
13488
+ selectedBlock = selectedSection.children[selectedSection.children.length - 1];
13489
+ targetPartId = selectedBlock.partId;
13490
+ targetIndex = ((_i = selectedBlock.children) == null ? void 0 : _i.length) || 0;
13491
+ partsToInsert = partsToPaste;
13492
+ } else {
13493
+ const newBlock = createBlock(pageBuilder);
13494
+ if (!newBlock) return;
13495
+ newBlock.children = partsToPaste;
13496
+ targetPartId = selectedSection.partId;
13497
+ targetIndex = 0;
13498
+ partsToInsert = [newBlock];
13499
+ }
13500
+ } else {
13501
+ const newBlock = createBlock(pageBuilder);
13502
+ const newSection = createSection(pageBuilder);
13503
+ if (!newBlock || !newSection) return;
13504
+ newSection.children = [newBlock];
13505
+ newBlock.children = partsToPaste;
13506
+ targetPartId = selectedPage.partId;
13507
+ targetIndex = 0;
13508
+ partsToInsert = [newSection];
13509
+ }
13240
13510
  }
13511
+ if (!targetPartId || targetIndex < 0 || !partsToInsert) return;
13512
+ insertParts(pageBuilder, targetPartId, targetIndex, partsToInsert, false);
13241
13513
  }
13242
13514
  }
13243
13515
  };
@@ -13642,8 +13914,8 @@ ${_html.style}
13642
13914
  const pages = this.model.rootPart.children;
13643
13915
  let part = this.selection[0];
13644
13916
  if (!part) return pages && pages[0];
13645
- while (part.parent) {
13646
- if (part.parent.isPage()) return part.parent;
13917
+ while (part) {
13918
+ if (part.isPage()) return part;
13647
13919
  part = part.parent;
13648
13920
  }
13649
13921
  }
@@ -13830,7 +14102,7 @@ ${_html.style}
13830
14102
  group.partDefinitions.forEach((part) => {
13831
14103
  const p = { ...part };
13832
14104
  p.partType = "Widget";
13833
- p.creator = () => _sfc_main$E;
14105
+ p.creator = () => _sfc_main$F;
13834
14106
  p.propertyGroups = [...p.propertyGroups, ...defaultWidgetPropertyGroups()];
13835
14107
  partDefinitions2[p.partName] = p;
13836
14108
  g.partDefinitions.push(p);
@@ -14433,11 +14705,15 @@ ${_html.style}
14433
14705
  group: _ctx.group,
14434
14706
  "selected-parts": _ctx.selectedParts
14435
14707
  }, null, 8, ["group", "selected-parts"])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(_ctx.group.properties, (property) => {
14436
- return vue.openBlock(), vue.createBlock(_sfc_main$l, {
14437
- key: `${_ctx.partsKey}_${property.propertyName}`,
14438
- property,
14439
- "selected-parts": _ctx.selectedParts
14440
- }, null, 8, ["property", "selected-parts"]);
14708
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
14709
+ key: `${_ctx.partsKey}_${property.propertyName}`
14710
+ }, [
14711
+ !property.readonly ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
14712
+ key: 0,
14713
+ property,
14714
+ "selected-parts": _ctx.selectedParts
14715
+ }, null, 8, ["property", "selected-parts"])) : vue.createCommentVNode("", true)
14716
+ ], 64);
14441
14717
  }), 128))
14442
14718
  ], 64)) : vue.createCommentVNode("", true)
14443
14719
  ]);
@@ -14563,7 +14839,7 @@ ${_html.style}
14563
14839
  style: vue.normalizeStyle(contentStyle.value)
14564
14840
  }, [
14565
14841
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b = _ctx.part) == null ? void 0 : _b.children, (section, index) => {
14566
- return vue.openBlock(), vue.createBlock(_sfc_main$z, {
14842
+ return vue.openBlock(), vue.createBlock(_sfc_main$A, {
14567
14843
  key: section.partId,
14568
14844
  "is-mobile-page": _ctx.isMobilePage,
14569
14845
  part: section
@@ -14581,7 +14857,7 @@ ${_html.style}
14581
14857
  };
14582
14858
  }
14583
14859
  });
14584
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\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\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\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\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\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\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\n.pb-section-static .pb-widget {\n outline: none;\n}\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\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\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 pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\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 pointer-events: auto !important;\n}\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 pointer-events: auto !important;\n}\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\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n.pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-text-widget .text {\n color: #333;\n}\n\n.pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-image-widget {\n width: 100%;\n}\n\n.pb-image-widget .image {\n width: 100%;\n}\n\n.pb-image-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-image-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\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\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\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\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\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\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\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\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\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\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\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\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\n.pb-add-section-handle > i {\n font-style: normal;\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}';
14860
+ const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\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\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\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\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\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\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\n.pb-section-static .pb-widget {\n outline: none;\n}\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\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\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 pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\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 pointer-events: auto !important;\n}\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 pointer-events: auto !important;\n}\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\n.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n.pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-text-widget .text {\n color: #333;\n}\n\n.pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-image-widget {\n width: 100%;\n}\n\n.pb-image-widget .image {\n width: 100%;\n}\n\n.pb-image-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-image-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-media-widget {\n width: 100%;\n}\n\n.pb-media-widget .image {\n width: 100%;\n}\n\n.pb-media-widget .video {\n width: 100%;\n}\n\n.pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\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\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\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\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\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\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\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\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\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\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\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\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\n.pb-add-section-handle > i {\n font-style: normal;\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}';
14585
14861
  const _hoisted_1$g = ["width"];
14586
14862
  const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14587
14863
  __name: "PbPageFrame",
@@ -15682,10 +15958,11 @@ ${_html.tags}` : "";
15682
15958
  exports2.PageBuilderViewer = _sfc_main$2$1;
15683
15959
  exports2.Part = Part;
15684
15960
  exports2.PbContainerWidget = _sfc_main$1$1;
15685
- exports2.PbCustomWidget = _sfc_main$E;
15961
+ exports2.PbCustomWidget = _sfc_main$F;
15686
15962
  exports2.PbHtmlWidget = _sfc_main$6$1;
15687
15963
  exports2.PbIframeWidget = _sfc_main$5$1;
15688
- exports2.PbImageWidget = _sfc_main$8$1;
15964
+ exports2.PbImageWidget = _sfc_main$9$1;
15965
+ exports2.PbMediaWidget = _sfc_main$8$1;
15689
15966
  exports2.PbTextWidget = _sfc_main$7$1;
15690
15967
  exports2.PbYoutubeWidget = _sfc_main$4$1;
15691
15968
  exports2.ROOT_TYPE = ROOT_TYPE$1;