@g1cloud/page-builder-editor 1.0.0-alpha.31 → 1.0.0-alpha.32

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.
@@ -1,5 +1,6 @@
1
1
  .pb-section {
2
2
  position: relative;
3
+ width: 100%;
3
4
  background-position: 50% 50%;
4
5
  background-repeat: no-repeat;
5
6
  background-size: cover;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createVNode, unref } from "vue";
2
2
  import { BSTextInput } from "@g1cloud/bluesea";
3
- import { P as PbColorPicker } from "./index-Cu4Pt-wp.js";
3
+ import { P as PbColorPicker } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-color" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = ["textContent"];
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, defineAsyncComponent } from "vue";
2
2
  import { useModal } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-Cu4Pt-wp.js";
3
+ import { u as usePageBuilderEditor } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-image flex-align-center" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = ["textContent"];
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from "vue";
2
- import { u as usePageBuilderEditor } from "./index-Cu4Pt-wp.js";
2
+ import { u as usePageBuilderEditor } from "./index-iOtzsn-m.js";
3
3
  import { useModal } from "@g1cloud/bluesea";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-image flex-align-center" };
5
5
  const _hoisted_2 = { class: "title" };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, toDisplayString, createBlock, unref } from "vue";
2
2
  import { BSMultiLangTextArea, BSTextArea } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-Cu4Pt-wp.js";
3
+ import { u as usePageBuilderEditor } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-multiline-text" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = ["textContent"];
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, toDisplayString, createBlock, unref } from "vue";
2
2
  import { BSMultiLangTextInput, BSTextInput } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-Cu4Pt-wp.js";
3
+ import { u as usePageBuilderEditor } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-text flex-align-center" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = ["textContent"];
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from "vue";
2
2
  import { useModal } from "@g1cloud/bluesea";
3
- import { s as selectYoutubeVideo } from "./index-Cu4Pt-wp.js";
3
+ import { s as selectYoutubeVideo } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-image flex-align-center" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = ["textContent"];
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, unref, withCtx, createElementVNode, createElementBlock, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { useModalHandle, BSModalFrame } from "@g1cloud/bluesea";
3
- import { w as widgetPartDefinitions } from "./index-Cu4Pt-wp.js";
3
+ import { w as widgetPartDefinitions } from "./index-iOtzsn-m.js";
4
4
  const _hoisted_1 = { class: "bs-layout-vertical pb-part-add-modal" };
5
5
  const _hoisted_2 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
6
6
  const _hoisted_3 = ["onClick", "textContent"];
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { ref, defineComponent, computed, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, toDisplayString, onMounted, onBeforeUnmount, createBlock as createBlock$1, unref, provide, inject, watch, Fragment, renderList, resolveDynamicComponent, normalizeProps, mergeProps, normalizeClass, reactive, defineAsyncComponent, withDirectives, createVNode, resolveComponent, vModelText, resolveDirective, withModifiers, renderSlot, guardReactiveProps, markRaw, toHandlers, Teleport } from "vue";
4
+ import { ref, defineComponent, computed, openBlock, createElementBlock, Fragment, createElementVNode, normalizeStyle, createCommentVNode, toDisplayString, onMounted, onBeforeUnmount, createBlock as createBlock$1, unref, provide, inject, watch, renderList, resolveDynamicComponent, normalizeProps, mergeProps, normalizeClass, reactive, defineAsyncComponent, withDirectives, createVNode, resolveComponent, vModelText, resolveDirective, withModifiers, renderSlot, guardReactiveProps, markRaw, toHandlers, Teleport } from "vue";
5
5
  import { notNull, BSTextInput, vClickOutside, useModal, BSSelect, BSTree, useContextMenu } from "@g1cloud/bluesea";
6
6
  import YouTube from "vue3-youtube";
7
7
  const create$5 = () => /* @__PURE__ */ new Map();
@@ -6693,6 +6693,10 @@ class Part {
6693
6693
  const align = ((_a = this.properties) == null ? void 0 : _a.align) || "center";
6694
6694
  if (this.isWidget()) {
6695
6695
  style.alignSelf = this.getAlignStyleValue(align);
6696
+ } else if (this.isPage()) {
6697
+ style.display = "flex";
6698
+ style.flexDirection = "column";
6699
+ style.alignItems = this.getAlignStyleValue(align);
6696
6700
  } else {
6697
6701
  const direction = isMobilePage ? (_b = this.properties) == null ? void 0 : _b.directionSm : (_c = this.properties) == null ? void 0 : _c.directionLg;
6698
6702
  if (direction === "horizontal") {
@@ -6724,10 +6728,10 @@ class Part {
6724
6728
  if ((_r = this.properties) == null ? void 0 : _r.bottom) style.bottom = this.properties.bottom;
6725
6729
  if ((_s = this.properties) == null ? void 0 : _s.width) style.width = this.properties.width;
6726
6730
  if ((_t = this.properties) == null ? void 0 : _t.height) style.height = this.properties.height;
6727
- if ((_u = this.properties) == null ? void 0 : _u.maxWidth) style.width = this.properties.maxWidth;
6728
- if ((_v = this.properties) == null ? void 0 : _v.maxHeight) style.height = this.properties.maxHeight;
6729
- if ((_w = this.properties) == null ? void 0 : _w.minWidth) style.width = this.properties.minWidth;
6730
- if ((_x = this.properties) == null ? void 0 : _x.minHeight) style.height = this.properties.minHeight;
6731
+ if ((_u = this.properties) == null ? void 0 : _u.maxWidth) style.maxWidth = this.properties.maxWidth;
6732
+ if ((_v = this.properties) == null ? void 0 : _v.maxHeight) style.maxHeight = this.properties.maxHeight;
6733
+ if ((_w = this.properties) == null ? void 0 : _w.minWidth) style.minWidth = this.properties.minWidth;
6734
+ if ((_x = this.properties) == null ? void 0 : _x.minHeight) style.minHeight = this.properties.minHeight;
6731
6735
  if ((_y = this.properties) == null ? void 0 : _y.textAlign) style.textAlign = this.properties.textAlign;
6732
6736
  if ((_z = this.properties) == null ? void 0 : _z.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6733
6737
  if ((_A = this.properties) == null ? void 0 : _A.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
@@ -6981,8 +6985,10 @@ const _sfc_main$9$1 = /* @__PURE__ */ defineComponent({
6981
6985
  };
6982
6986
  }
6983
6987
  });
6984
- const _hoisted_1$7$1 = ["alt", "src"];
6985
- const _hoisted_2$4$1 = {
6988
+ const _hoisted_1$7$1 = ["href", "target"];
6989
+ const _hoisted_2$4$1 = ["alt", "src"];
6990
+ const _hoisted_3$d = ["alt", "src"];
6991
+ const _hoisted_4$a = {
6986
6992
  key: 1,
6987
6993
  class: "placeholder"
6988
6994
  };
@@ -7015,14 +7021,27 @@ const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
7015
7021
  return {};
7016
7022
  });
7017
7023
  return (_ctx, _cache) => {
7018
- var _a, _b;
7019
- return ((_a = _ctx.part.properties) == null ? void 0 : _a.media) ? (openBlock(), createElementBlock("img", {
7020
- key: 0,
7021
- alt: altText.value,
7022
- src: ((_b = _ctx.part.properties) == null ? void 0 : _b.media).url,
7023
- style: normalizeStyle(style.value),
7024
- class: "image"
7025
- }, null, 12, _hoisted_1$7$1)) : _ctx.placeholder ? (openBlock(), createElementBlock("div", _hoisted_2$4$1, _cache[0] || (_cache[0] = [
7024
+ var _a, _b, _c, _d, _e, _f;
7025
+ return ((_a = _ctx.part.properties) == null ? void 0 : _a.media) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
7026
+ ((_b = _ctx.part.properties) == null ? void 0 : _b.link) ? (openBlock(), createElementBlock("a", {
7027
+ key: 0,
7028
+ href: (_c = _ctx.part.properties) == null ? void 0 : _c.link,
7029
+ target: (_d = _ctx.part.properties) == null ? void 0 : _d.linkTarget
7030
+ }, [
7031
+ createElementVNode("img", {
7032
+ alt: altText.value,
7033
+ src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).url,
7034
+ style: normalizeStyle(style.value),
7035
+ class: "image"
7036
+ }, null, 12, _hoisted_2$4$1)
7037
+ ], 8, _hoisted_1$7$1)) : (openBlock(), createElementBlock("img", {
7038
+ key: 1,
7039
+ alt: altText.value,
7040
+ src: ((_f = _ctx.part.properties) == null ? void 0 : _f.media).url,
7041
+ style: normalizeStyle(style.value),
7042
+ class: "image"
7043
+ }, null, 12, _hoisted_3$d))
7044
+ ], 64)) : _ctx.placeholder ? (openBlock(), createElementBlock("div", _hoisted_4$a, _cache[0] || (_cache[0] = [
7026
7045
  createElementVNode("span", { class: "font-icon" }, "image", -1)
7027
7046
  ]))) : createCommentVNode("", true);
7028
7047
  };
@@ -8102,14 +8121,14 @@ class PartManager {
8102
8121
  const defaultPartPropertyEditors = () => {
8103
8122
  return {
8104
8123
  "readonly-text": () => defineAsyncComponent(() => import("./PbPropertyEditorReadonlyText-Dgp_AVOD.js")),
8105
- "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-DPMCCfN3.js")),
8124
+ "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-9hf9BTum.js")),
8106
8125
  "number": () => defineAsyncComponent(() => import("./PbPropertyEditorNumber-DrxTz2s1.js")),
8107
- "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-BupCrg8y.js")),
8126
+ "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-4sF6PJTE.js")),
8108
8127
  "select": () => defineAsyncComponent(() => import("./PbPropertyEditorSelect-CWedbXJI.js")),
8109
- "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-CnF04lLw.js")),
8110
- "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-wnD2ZhtY.js")),
8111
- "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-DGWhLeBV.js")),
8112
- "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-CyyNcDAu.js"))
8128
+ "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-CQqLwB4B.js")),
8129
+ "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-BIxdt8XI.js")),
8130
+ "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-CeCp8qgN.js")),
8131
+ "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-B-pIw-m5.js"))
8113
8132
  };
8114
8133
  };
8115
8134
  const getPropertyValueOfParts = (parts, propertyName) => {
@@ -9320,7 +9339,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
9320
9339
  const updateWidth = (value) => updatePropertyValue({ width: value });
9321
9340
  const updateHeight = (value) => updatePropertyValue({ height: value });
9322
9341
  const updateMaxWidth = (value) => updatePropertyValue({ maxWidth: value });
9323
- const updateMaxHeight = (value) => updatePropertyValue({ maxWeight: value });
9342
+ const updateMaxHeight = (value) => updatePropertyValue({ maxHeight: value });
9324
9343
  const updateMinWidth = (value) => updatePropertyValue({ minWidth: value });
9325
9344
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9326
9345
  return (_ctx, _cache) => {
@@ -11796,22 +11815,22 @@ const sizeGroup = () => {
11796
11815
  propertyType: "text"
11797
11816
  },
11798
11817
  {
11799
- propertyName: "min-width",
11818
+ propertyName: "minWidth",
11800
11819
  caption: "Min Width",
11801
11820
  propertyType: "text"
11802
11821
  },
11803
11822
  {
11804
- propertyName: "min-height",
11823
+ propertyName: "minHeight",
11805
11824
  caption: "Min Height",
11806
11825
  propertyType: "text"
11807
11826
  },
11808
11827
  {
11809
- propertyName: "max-width",
11828
+ propertyName: "maxWidth",
11810
11829
  caption: "Max Width",
11811
11830
  propertyType: "text"
11812
11831
  },
11813
11832
  {
11814
- propertyName: "max-height",
11833
+ propertyName: "maxHeight",
11815
11834
  caption: "Max Height",
11816
11835
  propertyType: "text"
11817
11836
  }
@@ -12071,6 +12090,18 @@ const pageParts = [
12071
12090
  icon: "draft",
12072
12091
  className: "pb-page",
12073
12092
  propertyGroups: [
12093
+ {
12094
+ groupName: "size",
12095
+ caption: "Size",
12096
+ properties: [
12097
+ {
12098
+ propertyName: "maxWidth",
12099
+ caption: "Max Width",
12100
+ propertyType: "text",
12101
+ params: ""
12102
+ }
12103
+ ]
12104
+ },
12074
12105
  alignGroup(),
12075
12106
  paddingGroup(),
12076
12107
  backgroundGroup(),
@@ -12196,6 +12227,18 @@ const widgets = [
12196
12227
  caption: "Image",
12197
12228
  propertyType: "image",
12198
12229
  params: ""
12230
+ },
12231
+ {
12232
+ propertyName: "link",
12233
+ caption: "Link",
12234
+ propertyType: "text",
12235
+ params: ""
12236
+ },
12237
+ {
12238
+ propertyName: "linkTarget",
12239
+ caption: "Link Target",
12240
+ propertyType: "text",
12241
+ params: ""
12199
12242
  }
12200
12243
  ]
12201
12244
  },
@@ -12387,7 +12430,7 @@ __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
12387
12430
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
12388
12431
  const openWidgetAddModal = (modal, args, callback) => {
12389
12432
  modal.openModal({
12390
- component: defineAsyncComponent(() => import("./PbWidgetAddModal-CpkklmlZ.js")),
12433
+ component: defineAsyncComponent(() => import("./PbWidgetAddModal-CFwyR_Bq.js")),
12391
12434
  style: {
12392
12435
  width: "80%",
12393
12436
  height: "80%",
@@ -14290,7 +14333,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14290
14333
  };
14291
14334
  }
14292
14335
  });
14293
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n width: 100%;\n margin: 0 auto;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\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 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\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}\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\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\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 left: 50%;\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 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}';
14336
+ const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n width: 100%;\n margin: 0 auto;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\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 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}\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\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\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 left: 50%;\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 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}';
14294
14337
  const _hoisted_1$2 = ["height", "width"];
14295
14338
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14296
14339
  __name: "PbPageFrame",
@@ -14358,7 +14401,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14358
14401
  // width: `${width.value}px`,
14359
14402
  // height: `${height.value}px`,
14360
14403
  }));
14361
- let iframeObserver;
14404
+ let resizeObserver;
14362
14405
  const updateIframeHeight = () => {
14363
14406
  setTimeout(() => {
14364
14407
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
@@ -14371,13 +14414,15 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14371
14414
  onMounted(() => {
14372
14415
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
14373
14416
  const iframeBody = iframeRef.value.contentDocument.body;
14374
- iframeObserver = new MutationObserver(updateIframeHeight);
14375
- iframeObserver.observe(iframeBody, { childList: true, subtree: true });
14417
+ resizeObserver = new ResizeObserver(() => {
14418
+ updateIframeHeight();
14419
+ });
14420
+ resizeObserver.observe(iframeBody, {});
14376
14421
  iframeRef.value.onload = updateIframeHeight;
14377
14422
  });
14378
14423
  onBeforeUnmount(() => {
14379
- if (iframeObserver) {
14380
- iframeObserver.disconnect();
14424
+ if (resizeObserver) {
14425
+ resizeObserver.disconnect();
14381
14426
  }
14382
14427
  });
14383
14428
  return (_ctx, _cache) => {
@@ -1,4 +1,4 @@
1
- import { B, b, M, c, d, e, _, a, f, g, h, i, j, k, l, m, n, R, o, S, p, W, q, r, t, v, x, y, z, A, C } from "./index-Cu4Pt-wp.js";
1
+ import { B, b, M, c, d, e, _, a, f, g, h, i, j, k, l, m, n, R, o, S, p, W, q, r, t, v, x, y, z, A, C } from "./index-iOtzsn-m.js";
2
2
  export {
3
3
  B as BLOCK_TYPE,
4
4
  b as Block,
@@ -6694,6 +6694,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6694
6694
  const align = ((_a = this.properties) == null ? void 0 : _a.align) || "center";
6695
6695
  if (this.isWidget()) {
6696
6696
  style.alignSelf = this.getAlignStyleValue(align);
6697
+ } else if (this.isPage()) {
6698
+ style.display = "flex";
6699
+ style.flexDirection = "column";
6700
+ style.alignItems = this.getAlignStyleValue(align);
6697
6701
  } else {
6698
6702
  const direction = isMobilePage ? (_b = this.properties) == null ? void 0 : _b.directionSm : (_c = this.properties) == null ? void 0 : _c.directionLg;
6699
6703
  if (direction === "horizontal") {
@@ -6725,10 +6729,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6725
6729
  if ((_r = this.properties) == null ? void 0 : _r.bottom) style.bottom = this.properties.bottom;
6726
6730
  if ((_s = this.properties) == null ? void 0 : _s.width) style.width = this.properties.width;
6727
6731
  if ((_t = this.properties) == null ? void 0 : _t.height) style.height = this.properties.height;
6728
- if ((_u = this.properties) == null ? void 0 : _u.maxWidth) style.width = this.properties.maxWidth;
6729
- if ((_v = this.properties) == null ? void 0 : _v.maxHeight) style.height = this.properties.maxHeight;
6730
- if ((_w = this.properties) == null ? void 0 : _w.minWidth) style.width = this.properties.minWidth;
6731
- if ((_x = this.properties) == null ? void 0 : _x.minHeight) style.height = this.properties.minHeight;
6732
+ if ((_u = this.properties) == null ? void 0 : _u.maxWidth) style.maxWidth = this.properties.maxWidth;
6733
+ if ((_v = this.properties) == null ? void 0 : _v.maxHeight) style.maxHeight = this.properties.maxHeight;
6734
+ if ((_w = this.properties) == null ? void 0 : _w.minWidth) style.minWidth = this.properties.minWidth;
6735
+ if ((_x = this.properties) == null ? void 0 : _x.minHeight) style.minHeight = this.properties.minHeight;
6732
6736
  if ((_y = this.properties) == null ? void 0 : _y.textAlign) style.textAlign = this.properties.textAlign;
6733
6737
  if ((_z = this.properties) == null ? void 0 : _z.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6734
6738
  if ((_A = this.properties) == null ? void 0 : _A.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
@@ -6982,8 +6986,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6982
6986
  };
6983
6987
  }
6984
6988
  });
6985
- const _hoisted_1$7$1 = ["alt", "src"];
6986
- const _hoisted_2$4$1 = {
6989
+ const _hoisted_1$7$1 = ["href", "target"];
6990
+ const _hoisted_2$4$1 = ["alt", "src"];
6991
+ const _hoisted_3$o = ["alt", "src"];
6992
+ const _hoisted_4$e = {
6987
6993
  key: 1,
6988
6994
  class: "placeholder"
6989
6995
  };
@@ -7016,14 +7022,27 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7016
7022
  return {};
7017
7023
  });
7018
7024
  return (_ctx, _cache) => {
7019
- var _a, _b;
7020
- return ((_a = _ctx.part.properties) == null ? void 0 : _a.media) ? (vue.openBlock(), vue.createElementBlock("img", {
7021
- key: 0,
7022
- alt: altText.value,
7023
- src: ((_b = _ctx.part.properties) == null ? void 0 : _b.media).url,
7024
- style: vue.normalizeStyle(style.value),
7025
- class: "image"
7026
- }, null, 12, _hoisted_1$7$1)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4$1, _cache[0] || (_cache[0] = [
7025
+ var _a, _b, _c, _d, _e, _f;
7026
+ return ((_a = _ctx.part.properties) == null ? void 0 : _a.media) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
7027
+ ((_b = _ctx.part.properties) == null ? void 0 : _b.link) ? (vue.openBlock(), vue.createElementBlock("a", {
7028
+ key: 0,
7029
+ href: (_c = _ctx.part.properties) == null ? void 0 : _c.link,
7030
+ target: (_d = _ctx.part.properties) == null ? void 0 : _d.linkTarget
7031
+ }, [
7032
+ vue.createElementVNode("img", {
7033
+ alt: altText.value,
7034
+ src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).url,
7035
+ style: vue.normalizeStyle(style.value),
7036
+ class: "image"
7037
+ }, null, 12, _hoisted_2$4$1)
7038
+ ], 8, _hoisted_1$7$1)) : (vue.openBlock(), vue.createElementBlock("img", {
7039
+ key: 1,
7040
+ alt: altText.value,
7041
+ src: ((_f = _ctx.part.properties) == null ? void 0 : _f.media).url,
7042
+ style: vue.normalizeStyle(style.value),
7043
+ class: "image"
7044
+ }, null, 12, _hoisted_3$o))
7045
+ ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$e, _cache[0] || (_cache[0] = [
7027
7046
  vue.createElementVNode("span", { class: "font-icon" }, "image", -1)
7028
7047
  ]))) : vue.createCommentVNode("", true);
7029
7048
  };
@@ -9321,7 +9340,7 @@ ${_html.style}
9321
9340
  const updateWidth = (value) => updatePropertyValue({ width: value });
9322
9341
  const updateHeight = (value) => updatePropertyValue({ height: value });
9323
9342
  const updateMaxWidth = (value) => updatePropertyValue({ maxWidth: value });
9324
- const updateMaxHeight = (value) => updatePropertyValue({ maxWeight: value });
9343
+ const updateMaxHeight = (value) => updatePropertyValue({ maxHeight: value });
9325
9344
  const updateMinWidth = (value) => updatePropertyValue({ minWidth: value });
9326
9345
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9327
9346
  return (_ctx, _cache) => {
@@ -11797,22 +11816,22 @@ ${_html.style}
11797
11816
  propertyType: "text"
11798
11817
  },
11799
11818
  {
11800
- propertyName: "min-width",
11819
+ propertyName: "minWidth",
11801
11820
  caption: "Min Width",
11802
11821
  propertyType: "text"
11803
11822
  },
11804
11823
  {
11805
- propertyName: "min-height",
11824
+ propertyName: "minHeight",
11806
11825
  caption: "Min Height",
11807
11826
  propertyType: "text"
11808
11827
  },
11809
11828
  {
11810
- propertyName: "max-width",
11829
+ propertyName: "maxWidth",
11811
11830
  caption: "Max Width",
11812
11831
  propertyType: "text"
11813
11832
  },
11814
11833
  {
11815
- propertyName: "max-height",
11834
+ propertyName: "maxHeight",
11816
11835
  caption: "Max Height",
11817
11836
  propertyType: "text"
11818
11837
  }
@@ -12072,6 +12091,18 @@ ${_html.style}
12072
12091
  icon: "draft",
12073
12092
  className: "pb-page",
12074
12093
  propertyGroups: [
12094
+ {
12095
+ groupName: "size",
12096
+ caption: "Size",
12097
+ properties: [
12098
+ {
12099
+ propertyName: "maxWidth",
12100
+ caption: "Max Width",
12101
+ propertyType: "text",
12102
+ params: ""
12103
+ }
12104
+ ]
12105
+ },
12075
12106
  alignGroup(),
12076
12107
  paddingGroup(),
12077
12108
  backgroundGroup(),
@@ -12197,6 +12228,18 @@ ${_html.style}
12197
12228
  caption: "Image",
12198
12229
  propertyType: "image",
12199
12230
  params: ""
12231
+ },
12232
+ {
12233
+ propertyName: "link",
12234
+ caption: "Link",
12235
+ propertyType: "text",
12236
+ params: ""
12237
+ },
12238
+ {
12239
+ propertyName: "linkTarget",
12240
+ caption: "Link Target",
12241
+ propertyType: "text",
12242
+ params: ""
12200
12243
  }
12201
12244
  ]
12202
12245
  },
@@ -14291,7 +14334,7 @@ ${_html.style}
14291
14334
  };
14292
14335
  }
14293
14336
  });
14294
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n width: 100%;\n margin: 0 auto;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\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 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\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}\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\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\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 left: 50%;\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 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}';
14337
+ const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n width: 100%;\n margin: 0 auto;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\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 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}\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\n.font-icon {\n font-family: Material Symbols Outlined, monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\nhtml, body {\n font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;\n font-size: 12px;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\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 left: 50%;\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 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}';
14295
14338
  const _hoisted_1$f = ["height", "width"];
14296
14339
  const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
14297
14340
  __name: "PbPageFrame",
@@ -14359,7 +14402,7 @@ ${_html.style}
14359
14402
  // width: `${width.value}px`,
14360
14403
  // height: `${height.value}px`,
14361
14404
  }));
14362
- let iframeObserver;
14405
+ let resizeObserver;
14363
14406
  const updateIframeHeight = () => {
14364
14407
  setTimeout(() => {
14365
14408
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
@@ -14372,13 +14415,15 @@ ${_html.style}
14372
14415
  vue.onMounted(() => {
14373
14416
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
14374
14417
  const iframeBody = iframeRef.value.contentDocument.body;
14375
- iframeObserver = new MutationObserver(updateIframeHeight);
14376
- iframeObserver.observe(iframeBody, { childList: true, subtree: true });
14418
+ resizeObserver = new ResizeObserver(() => {
14419
+ updateIframeHeight();
14420
+ });
14421
+ resizeObserver.observe(iframeBody, {});
14377
14422
  iframeRef.value.onload = updateIframeHeight;
14378
14423
  });
14379
14424
  vue.onBeforeUnmount(() => {
14380
- if (iframeObserver) {
14381
- iframeObserver.disconnect();
14425
+ if (resizeObserver) {
14426
+ resizeObserver.disconnect();
14382
14427
  }
14383
14428
  });
14384
14429
  return (_ctx, _cache) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@g1cloud/page-builder-editor",
3
3
  "private": false,
4
- "version": "1.0.0-alpha.31",
4
+ "version": "1.0.0-alpha.32",
5
5
  "engins": {
6
6
  "node": ">= 20.0.0"
7
7
  },
@@ -30,7 +30,7 @@
30
30
  "vue-router": "^4.4.3",
31
31
  "vue3-click-away": "^1.2.4",
32
32
  "yjs": "^13.6.14",
33
- "@g1cloud/page-builder-viewer": "1.0.0-alpha.31"
33
+ "@g1cloud/page-builder-viewer": "1.0.0-alpha.32"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^20.12.7",