@g1cloud/page-builder-editor 1.0.0-alpha.30 → 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.
@@ -141,6 +141,7 @@
141
141
  @import "./property-editor-readonly-text";
142
142
  @import "./property-editor-select";
143
143
  @import "./property-editor-text";
144
+ @import "./property-editor-number";
144
145
  @import "./property-editor-html";
145
146
 
146
147
  @import "./property-group-editor-background";
@@ -235,6 +236,10 @@
235
236
  .editor {
236
237
  width: 50%;
237
238
 
239
+ .bs-tab-sheet > :nth-child(2) {
240
+ height: 0;
241
+ }
242
+
238
243
  .tags {
239
244
  height: 60%;
240
245
 
@@ -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;
@@ -4,6 +4,11 @@
4
4
  background-position: 50% 50%;
5
5
  background-repeat: no-repeat;
6
6
  background-size: cover;
7
+ pointer-events: auto !important;
8
+
9
+ * {
10
+ pointer-events: none;
11
+ }
7
12
 
8
13
  //&.selected {
9
14
  // outline: 2px solid #4998f8;
@@ -37,6 +42,7 @@
37
42
  height: 12px;
38
43
  background-color: #27ae60;
39
44
  cursor: move;
45
+ pointer-events: auto !important;
40
46
  }
41
47
 
42
48
  .resize-handle {
@@ -47,6 +53,7 @@
47
53
  height: 12px;
48
54
  background-color: #27ae60;
49
55
  cursor: nwse-resize;
56
+ pointer-events: auto !important;
50
57
  }
51
58
  }
52
59
 
@@ -0,0 +1,10 @@
1
+ .property-editor-text {
2
+
3
+ .bs-text-input {
4
+ display: block;
5
+ }
6
+
7
+ .input-area {
8
+ height: 24px;
9
+ }
10
+ }
@@ -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-jGbCiM-P.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-jGbCiM-P.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-jGbCiM-P.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-jGbCiM-P.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"];
@@ -0,0 +1,41 @@
1
+ import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createVNode, unref } from "vue";
2
+ import { BSNumberInput } from "@g1cloud/bluesea";
3
+ const _hoisted_1 = { class: "property-editor property-editor-number flex-align-center" };
4
+ const _hoisted_2 = { class: "title" };
5
+ const _hoisted_3 = ["textContent"];
6
+ const _sfc_main = /* @__PURE__ */ defineComponent({
7
+ __name: "PbPropertyEditorNumber",
8
+ props: {
9
+ property: {},
10
+ value: {}
11
+ },
12
+ emits: ["update-property-value"],
13
+ setup(__props, { emit: __emit }) {
14
+ const props = __props;
15
+ const emit = __emit;
16
+ const emitUpdatePropertyValue = (value) => {
17
+ const properties = {};
18
+ properties[props.property.propertyName] = `${value}`;
19
+ emit("update-property-value", properties);
20
+ };
21
+ return (_ctx, _cache) => {
22
+ return openBlock(), createElementBlock("div", _hoisted_1, [
23
+ createElementVNode("div", _hoisted_2, [
24
+ createElementVNode("label", {
25
+ textContent: toDisplayString(_ctx.property.caption)
26
+ }, null, 8, _hoisted_3)
27
+ ]),
28
+ createElementVNode("div", null, [
29
+ createVNode(unref(BSNumberInput), {
30
+ "model-value": Number(_ctx.value),
31
+ width: "100%",
32
+ "onUpdate:modelValue": emitUpdatePropertyValue
33
+ }, null, 8, ["model-value"])
34
+ ])
35
+ ]);
36
+ };
37
+ }
38
+ });
39
+ export {
40
+ _sfc_main as default
41
+ };
@@ -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-jGbCiM-P.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-jGbCiM-P.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-jGbCiM-P.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"];
@@ -23,7 +23,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
23
23
  };
24
24
  return (_ctx, _cache) => {
25
25
  return openBlock(), createBlock(unref(BSModalFrame), {
26
- class: "pb-html-editor-modal",
26
+ class: "pb-youtube-modal",
27
27
  title: "Youtube Video"
28
28
  }, {
29
29
  default: withCtx(() => [
@@ -0,0 +1,23 @@
1
+ import { PartProperty } from '../../../model/part-property.ts';
2
+
3
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
+ property: PartProperty;
5
+ value?: string | undefined;
6
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
7
+ "update-property-value": (properties: Record<string, unknown>) => void;
8
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
9
+ property: PartProperty;
10
+ value?: string | undefined;
11
+ }>>> & Readonly<{
12
+ "onUpdate-property-value"?: ((properties: Record<string, unknown>) => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
14
+ export default _default;
15
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
16
+ type __VLS_TypePropsToRuntimeProps<T> = {
17
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
18
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
19
+ } : {
20
+ type: import('vue').PropType<T[K]>;
21
+ required: true;
22
+ };
23
+ };
@@ -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,13 +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-BV9QDXbJ.js")),
8106
- "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-D4ONFS76.js")),
8124
+ "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-9hf9BTum.js")),
8125
+ "number": () => defineAsyncComponent(() => import("./PbPropertyEditorNumber-DrxTz2s1.js")),
8126
+ "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-4sF6PJTE.js")),
8107
8127
  "select": () => defineAsyncComponent(() => import("./PbPropertyEditorSelect-CWedbXJI.js")),
8108
- "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-DRZ3JPbE.js")),
8109
- "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-DO7YS7Xn.js")),
8110
- "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-Cpy0eI4_.js")),
8111
- "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-C5Qzdu6N.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"))
8112
8132
  };
8113
8133
  };
8114
8134
  const getPropertyValueOfParts = (parts, propertyName) => {
@@ -8128,7 +8148,7 @@ const isCursorInElement = (event, element) => {
8128
8148
  };
8129
8149
  const selectYoutubeVideo = (modal, url, callback) => {
8130
8150
  modal.openModal({
8131
- component: defineAsyncComponent(() => import("./PbYoutubeModal-DFb6CQyW.js")),
8151
+ component: defineAsyncComponent(() => import("./PbYoutubeModal-8vQ_IPA0.js")),
8132
8152
  style: {
8133
8153
  minWidth: "500px",
8134
8154
  minHeight: "400px"
@@ -9319,7 +9339,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
9319
9339
  const updateWidth = (value) => updatePropertyValue({ width: value });
9320
9340
  const updateHeight = (value) => updatePropertyValue({ height: value });
9321
9341
  const updateMaxWidth = (value) => updatePropertyValue({ maxWidth: value });
9322
- const updateMaxHeight = (value) => updatePropertyValue({ maxWeight: value });
9342
+ const updateMaxHeight = (value) => updatePropertyValue({ maxHeight: value });
9323
9343
  const updateMinWidth = (value) => updatePropertyValue({ minWidth: value });
9324
9344
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9325
9345
  return (_ctx, _cache) => {
@@ -11795,22 +11815,22 @@ const sizeGroup = () => {
11795
11815
  propertyType: "text"
11796
11816
  },
11797
11817
  {
11798
- propertyName: "min-width",
11818
+ propertyName: "minWidth",
11799
11819
  caption: "Min Width",
11800
11820
  propertyType: "text"
11801
11821
  },
11802
11822
  {
11803
- propertyName: "min-height",
11823
+ propertyName: "minHeight",
11804
11824
  caption: "Min Height",
11805
11825
  propertyType: "text"
11806
11826
  },
11807
11827
  {
11808
- propertyName: "max-width",
11828
+ propertyName: "maxWidth",
11809
11829
  caption: "Max Width",
11810
11830
  propertyType: "text"
11811
11831
  },
11812
11832
  {
11813
- propertyName: "max-height",
11833
+ propertyName: "maxHeight",
11814
11834
  caption: "Max Height",
11815
11835
  propertyType: "text"
11816
11836
  }
@@ -12070,6 +12090,18 @@ const pageParts = [
12070
12090
  icon: "draft",
12071
12091
  className: "pb-page",
12072
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
+ },
12073
12105
  alignGroup(),
12074
12106
  paddingGroup(),
12075
12107
  backgroundGroup(),
@@ -12195,6 +12227,18 @@ const widgets = [
12195
12227
  caption: "Image",
12196
12228
  propertyType: "image",
12197
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: ""
12198
12242
  }
12199
12243
  ]
12200
12244
  },
@@ -12386,7 +12430,7 @@ __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
12386
12430
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
12387
12431
  const openWidgetAddModal = (modal, args, callback) => {
12388
12432
  modal.openModal({
12389
- component: defineAsyncComponent(() => import("./PbWidgetAddModal-9vxg06Q_.js")),
12433
+ component: defineAsyncComponent(() => import("./PbWidgetAddModal-CFwyR_Bq.js")),
12390
12434
  style: {
12391
12435
  width: "80%",
12392
12436
  height: "80%",
@@ -13581,7 +13625,7 @@ class PageBuilderEditorImpl {
13581
13625
  name: "Page (Mobile)"
13582
13626
  };
13583
13627
  parts[1].properties = {
13584
- ...parts[0].properties || {},
13628
+ ...parts[1].properties || {},
13585
13629
  name: "Page (PC)"
13586
13630
  };
13587
13631
  }
@@ -14017,7 +14061,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
14017
14061
  }
14018
14062
  };
14019
14063
  const expandParent = (part) => {
14020
- if (part.parent && part.parent.partName !== PAGE_TYPE) {
14064
+ if (part.parent && part.parent.partName !== ROOT_TYPE) {
14021
14065
  expandedRows.value.add(part.parent.partId);
14022
14066
  expandParent(part.parent);
14023
14067
  }
@@ -14289,7 +14333,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14289
14333
  };
14290
14334
  }
14291
14335
  });
14292
- 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}\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}\n\n.pb-widget .resize-handle {\n position: absolute;\n right: -6px;\n bottom: -6px;\n width: 12px;\n height: 12px;\n background-color: #27ae60;\n cursor: nwse-resize;\n}\n\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}';
14293
14337
  const _hoisted_1$2 = ["height", "width"];
14294
14338
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14295
14339
  __name: "PbPageFrame",
@@ -14357,7 +14401,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14357
14401
  // width: `${width.value}px`,
14358
14402
  // height: `${height.value}px`,
14359
14403
  }));
14360
- let iframeObserver;
14404
+ let resizeObserver;
14361
14405
  const updateIframeHeight = () => {
14362
14406
  setTimeout(() => {
14363
14407
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
@@ -14370,13 +14414,15 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14370
14414
  onMounted(() => {
14371
14415
  if (!iframeRef.value || !iframeRef.value.contentDocument) return;
14372
14416
  const iframeBody = iframeRef.value.contentDocument.body;
14373
- iframeObserver = new MutationObserver(updateIframeHeight);
14374
- iframeObserver.observe(iframeBody, { childList: true, subtree: true });
14417
+ resizeObserver = new ResizeObserver(() => {
14418
+ updateIframeHeight();
14419
+ });
14420
+ resizeObserver.observe(iframeBody, {});
14375
14421
  iframeRef.value.onload = updateIframeHeight;
14376
14422
  });
14377
14423
  onBeforeUnmount(() => {
14378
- if (iframeObserver) {
14379
- iframeObserver.disconnect();
14424
+ if (resizeObserver) {
14425
+ resizeObserver.disconnect();
14380
14426
  }
14381
14427
  });
14382
14428
  return (_ctx, _cache) => {
@@ -14387,7 +14433,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14387
14433
  }, [
14388
14434
  createVNode(unref(BSSelect), {
14389
14435
  modelValue: width.value,
14390
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => width.value = $event),
14436
+ "onUpdate:modelValue": [
14437
+ _cache[0] || (_cache[0] = ($event) => width.value = $event),
14438
+ updateIframeHeight
14439
+ ],
14391
14440
  items: [480, 768, 1024, 1280],
14392
14441
  "label-provider": (v) => `Screen Size: ${v}px`,
14393
14442
  "value-provider": (v) => v,
@@ -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-jGbCiM-P.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,