@g1cloud/page-builder-editor 1.0.0-alpha.36 → 1.0.0-alpha.38

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.
@@ -208,6 +208,10 @@
208
208
  }
209
209
 
210
210
  .pb-part-add-modal {
211
+ .section-title {
212
+ font-weight: 700;
213
+ }
214
+
211
215
  .group {
212
216
 
213
217
  .part {
@@ -6,14 +6,18 @@
6
6
  .pb-page {
7
7
  display: flex;
8
8
  flex-direction: column;
9
- margin: 0 auto;
10
- padding-bottom: 100px;
9
+ align-items: center;
11
10
  width: 100%;
11
+ padding-bottom: 100px;
12
12
  background-position: 50% 50%;
13
13
  background-repeat: no-repeat;
14
14
  background-size: cover;
15
15
 
16
16
  .pb-page-content {
17
+ display: flex;
18
+ flex-direction: column;
19
+ width: 100%;
20
+
17
21
  &.selected::before {
18
22
  content: "";
19
23
  position: absolute;
package/css/page.scss CHANGED
@@ -10,11 +10,6 @@
10
10
  max-width: 1em;
11
11
  }
12
12
 
13
- html, body {
14
- font-family: Noto Sans, Noto Sans KR, Noto Sans JP, Arial, sans-serif;
15
- font-size: 12px;
16
- }
17
-
18
13
  body {
19
14
  margin: 0;
20
15
  padding: 0;
@@ -22,6 +17,12 @@ body {
22
17
  overflow: hidden;
23
18
  }
24
19
 
20
+ .font-icon {
21
+ font-family: "Material Symbols Outlined", monospace;
22
+ font-size: 1rem;
23
+ max-width: 1em;
24
+ }
25
+
25
26
  .pb-position-mark {
26
27
  background-color: #ff3333;
27
28
  opacity: 0.5;
@@ -54,7 +55,6 @@ body {
54
55
  }
55
56
 
56
57
  &.bottom {
57
- left: 50%;
58
58
  bottom: -32px;
59
59
  }
60
60
 
@@ -68,6 +68,8 @@ body {
68
68
  }
69
69
 
70
70
  > i {
71
+ font-family: "Material Symbols Outlined", monospace;
72
+ font-style: normal;
71
73
  vertical-align: middle;
72
74
  position: absolute;
73
75
  top: 50%;
@@ -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-BPKptjBm.js";
3
+ import { P as PbColorPicker } from "./index-DsIuGIwL.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-BPKptjBm.js";
3
+ import { u as usePageBuilderEditor } from "./index-DsIuGIwL.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-BPKptjBm.js";
2
+ import { u as usePageBuilderEditor } from "./index-DsIuGIwL.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-BPKptjBm.js";
3
+ import { u as usePageBuilderEditor } from "./index-DsIuGIwL.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-BPKptjBm.js";
3
+ import { u as usePageBuilderEditor } from "./index-DsIuGIwL.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-BPKptjBm.js";
3
+ import { s as selectYoutubeVideo } from "./index-DsIuGIwL.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,12 +1,13 @@
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-BPKptjBm.js";
3
+ import { w as widgetPartDefinitions } from "./index-DsIuGIwL.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"];
7
7
  const _hoisted_4 = { class: "group mb-16" };
8
- const _hoisted_5 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
9
- const _hoisted_6 = ["onClick", "textContent"];
8
+ const _hoisted_5 = ["textContent"];
9
+ const _hoisted_6 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
10
+ const _hoisted_7 = ["onClick", "textContent"];
10
11
  const _sfc_main = /* @__PURE__ */ defineComponent({
11
12
  __name: "PbWidgetAddModal",
12
13
  props: {
@@ -25,7 +26,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25
26
  modalHandle.close();
26
27
  };
27
28
  return (_ctx, _cache) => {
28
- return openBlock(), createBlock(unref(BSModalFrame), { title: "Add Block/Widget" }, {
29
+ return openBlock(), createBlock(unref(BSModalFrame), { title: "Add Widget" }, {
29
30
  default: withCtx(() => [
30
31
  createElementVNode("div", _hoisted_1, [
31
32
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(widgetPartDefinitions), (group) => {
@@ -34,14 +35,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
34
35
  class: "group mb-16"
35
36
  }, [
36
37
  _cache[0] || (_cache[0] = createElementVNode("div", {
37
- class: "mb-8",
38
+ class: "mb-8 section-title",
38
39
  textContent: "Basic Widgets"
39
40
  }, null, -1)),
40
41
  createElementVNode("div", _hoisted_2, [
41
42
  (openBlock(true), createElementBlock(Fragment, null, renderList(group.partDefinitions, (part) => {
42
43
  return openBlock(), createElementBlock("div", {
43
44
  key: part.partName,
44
- class: "part",
45
+ class: "part w-200",
45
46
  onClick: ($event) => select(part),
46
47
  textContent: toDisplayString(part.caption)
47
48
  }, null, 8, _hoisted_3);
@@ -49,22 +50,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
49
50
  ])
50
51
  ]);
51
52
  }), 128)),
52
- createElementVNode("div", _hoisted_4, [
53
- _cache[1] || (_cache[1] = createElementVNode("div", {
54
- class: "mb-8",
55
- textContent: "Custom Widgets"
56
- }, null, -1)),
57
- createElementVNode("div", _hoisted_5, [
58
- (openBlock(true), createElementBlock(Fragment, null, renderList(customWidgets.value, (part) => {
59
- return openBlock(), createElementBlock("div", {
60
- key: part.partName,
61
- class: "part",
62
- onClick: ($event) => select(part),
63
- textContent: toDisplayString(part.caption)
64
- }, null, 8, _hoisted_6);
65
- }), 128))
66
- ])
67
- ])
53
+ (openBlock(true), createElementBlock(Fragment, null, renderList(customWidgets.value, (group) => {
54
+ return openBlock(), createElementBlock("div", _hoisted_4, [
55
+ createElementVNode("div", {
56
+ class: "mb-8 section-title",
57
+ textContent: toDisplayString(group.caption)
58
+ }, null, 8, _hoisted_5),
59
+ createElementVNode("div", _hoisted_6, [
60
+ (openBlock(true), createElementBlock(Fragment, null, renderList(group.partDefinitions, (part) => {
61
+ return openBlock(), createElementBlock("div", {
62
+ key: part.partName,
63
+ class: "part w-200",
64
+ onClick: ($event) => select(part),
65
+ textContent: toDisplayString(part.caption)
66
+ }, null, 8, _hoisted_7);
67
+ }), 128))
68
+ ])
69
+ ]);
70
+ }), 256))
68
71
  ])
69
72
  ]),
70
73
  _: 1
@@ -6715,19 +6715,23 @@ class Part {
6715
6715
  }
6716
6716
  }
6717
6717
  getStyles(isMobilePage) {
6718
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q;
6718
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R;
6719
6719
  const style = {};
6720
6720
  if (((_a = this.properties) == null ? void 0 : _a.direction) === "horizontal") {
6721
6721
  style.flexDirection = "row";
6722
- } else {
6722
+ } else if (((_b = this.properties) == null ? void 0 : _b.direction) === "vertical") {
6723
+ style.flexDirection = "column";
6724
+ } else if (this.isSection()) {
6725
+ style.flexDirection = "row";
6726
+ } else if (this.isBlock()) {
6723
6727
  style.flexDirection = "column";
6724
6728
  }
6725
- if (((_b = this.properties) == null ? void 0 : _b.wrap) === "wrap") {
6729
+ if (((_c = this.properties) == null ? void 0 : _c.wrap) === "wrap") {
6726
6730
  style.flexWrap = "wrap";
6727
6731
  }
6728
- const alignItems = this.getAlignStyleValue((_c = this.properties) == null ? void 0 : _c.alignItems);
6729
- const justifyContent = this.getAlignStyleValue((_d = this.properties) == null ? void 0 : _d.justifyContent);
6730
- const alignSelf = this.getAlignStyleValue((_e = this.properties) == null ? void 0 : _e.alignSelf);
6732
+ const alignItems = this.getAlignStyleValue((_d = this.properties) == null ? void 0 : _d.alignItems);
6733
+ const justifyContent = this.getAlignStyleValue((_e = this.properties) == null ? void 0 : _e.justifyContent);
6734
+ const alignSelf = this.getAlignStyleValue((_f = this.properties) == null ? void 0 : _f.alignSelf);
6731
6735
  if (this.isWidget()) {
6732
6736
  if (alignSelf) style.alignSelf = alignSelf;
6733
6737
  } else if (this.isPage()) {
@@ -6737,51 +6741,51 @@ class Part {
6737
6741
  if (justifyContent) style.justifyContent = justifyContent;
6738
6742
  if (alignSelf) style.alignSelf = alignSelf;
6739
6743
  }
6740
- if ((_f = this.properties) == null ? void 0 : _f.margin) style.margin = this.properties.margin;
6741
- if ((_g = this.properties) == null ? void 0 : _g.marginLeft) style.marginLeft = this.properties.marginLeft;
6742
- if ((_h = this.properties) == null ? void 0 : _h.marginRight) style.marginRight = this.properties.marginRight;
6743
- if ((_i = this.properties) == null ? void 0 : _i.marginTop) style.marginTop = this.properties.marginTop;
6744
- if ((_j = this.properties) == null ? void 0 : _j.marginBottom) style.marginBottom = this.properties.marginBottom;
6745
- if ((_k = this.properties) == null ? void 0 : _k.padding) style.padding = this.properties.padding;
6746
- if ((_l = this.properties) == null ? void 0 : _l.paddingLeft) style.paddingLeft = this.properties.paddingLeft;
6747
- if ((_m = this.properties) == null ? void 0 : _m.paddingRight) style.paddingRight = this.properties.paddingRight;
6748
- if ((_n = this.properties) == null ? void 0 : _n.paddingTop) style.paddingTop = this.properties.paddingTop;
6749
- if ((_o = this.properties) == null ? void 0 : _o.paddingBottom) style.paddingBottom = this.properties.paddingBottom;
6750
- if ((_p = this.properties) == null ? void 0 : _p.left) style.left = this.properties.left;
6751
- if ((_q = this.properties) == null ? void 0 : _q.right) style.right = this.properties.right;
6752
- if ((_r = this.properties) == null ? void 0 : _r.top) style.top = this.properties.top;
6753
- if ((_s = this.properties) == null ? void 0 : _s.bottom) style.bottom = this.properties.bottom;
6754
- if ((_t = this.properties) == null ? void 0 : _t.width) style.width = this.properties.width;
6755
- if ((_u = this.properties) == null ? void 0 : _u.height) style.height = this.properties.height;
6756
- if ((_v = this.properties) == null ? void 0 : _v.maxWidth) style.maxWidth = this.properties.maxWidth;
6757
- if ((_w = this.properties) == null ? void 0 : _w.maxHeight) style.maxHeight = this.properties.maxHeight;
6758
- if ((_x = this.properties) == null ? void 0 : _x.minWidth) style.minWidth = this.properties.minWidth;
6759
- if ((_y = this.properties) == null ? void 0 : _y.minHeight) style.minHeight = this.properties.minHeight;
6760
- if ((_z = this.properties) == null ? void 0 : _z.textAlign) style.textAlign = this.properties.textAlign;
6761
- if ((_A = this.properties) == null ? void 0 : _A.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6762
- if ((_B = this.properties) == null ? void 0 : _B.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
6763
- if ((_C = this.properties) == null ? void 0 : _C.borderRightWidth) style.borderRightWidth = this.properties.borderRightWidth;
6764
- if ((_D = this.properties) == null ? void 0 : _D.borderTopWidth) style.borderTopWidth = this.properties.borderTopWidth;
6765
- if ((_E = this.properties) == null ? void 0 : _E.borderBottomWidth) style.borderBottomWidth = this.properties.borderBottomWidth;
6766
- if ((_F = this.properties) == null ? void 0 : _F.borderTopLeftRadius) style.borderTopLeftRadius = this.properties.borderTopLeftRadius;
6767
- if ((_G = this.properties) == null ? void 0 : _G.borderTopRightRadius) style.borderTopRightRadius = this.properties.borderTopRightRadius;
6768
- if ((_H = this.properties) == null ? void 0 : _H.borderBottomLeftRadius) style.borderBottomLeftRadius = this.properties.borderBottomLeftRadius;
6769
- if ((_I = this.properties) == null ? void 0 : _I.borderBottomRightRadius) style.borderBottomRightRadius = this.properties.borderBottomRightRadius;
6770
- if (((_J = this.properties) == null ? void 0 : _J.borderColor) && style.borderLeftWidth) {
6744
+ if ((_g = this.properties) == null ? void 0 : _g.margin) style.margin = this.properties.margin;
6745
+ if ((_h = this.properties) == null ? void 0 : _h.marginLeft) style.marginLeft = this.properties.marginLeft;
6746
+ if ((_i = this.properties) == null ? void 0 : _i.marginRight) style.marginRight = this.properties.marginRight;
6747
+ if ((_j = this.properties) == null ? void 0 : _j.marginTop) style.marginTop = this.properties.marginTop;
6748
+ if ((_k = this.properties) == null ? void 0 : _k.marginBottom) style.marginBottom = this.properties.marginBottom;
6749
+ if ((_l = this.properties) == null ? void 0 : _l.padding) style.padding = this.properties.padding;
6750
+ if ((_m = this.properties) == null ? void 0 : _m.paddingLeft) style.paddingLeft = this.properties.paddingLeft;
6751
+ if ((_n = this.properties) == null ? void 0 : _n.paddingRight) style.paddingRight = this.properties.paddingRight;
6752
+ if ((_o = this.properties) == null ? void 0 : _o.paddingTop) style.paddingTop = this.properties.paddingTop;
6753
+ if ((_p = this.properties) == null ? void 0 : _p.paddingBottom) style.paddingBottom = this.properties.paddingBottom;
6754
+ if ((_q = this.properties) == null ? void 0 : _q.left) style.left = this.properties.left;
6755
+ if ((_r = this.properties) == null ? void 0 : _r.right) style.right = this.properties.right;
6756
+ if ((_s = this.properties) == null ? void 0 : _s.top) style.top = this.properties.top;
6757
+ if ((_t = this.properties) == null ? void 0 : _t.bottom) style.bottom = this.properties.bottom;
6758
+ if ((_u = this.properties) == null ? void 0 : _u.width) style.width = this.properties.width;
6759
+ if ((_v = this.properties) == null ? void 0 : _v.height) style.height = this.properties.height;
6760
+ if ((_w = this.properties) == null ? void 0 : _w.maxWidth) style.maxWidth = this.properties.maxWidth;
6761
+ if ((_x = this.properties) == null ? void 0 : _x.maxHeight) style.maxHeight = this.properties.maxHeight;
6762
+ if ((_y = this.properties) == null ? void 0 : _y.minWidth) style.minWidth = this.properties.minWidth;
6763
+ if ((_z = this.properties) == null ? void 0 : _z.minHeight) style.minHeight = this.properties.minHeight;
6764
+ if ((_A = this.properties) == null ? void 0 : _A.textAlign) style.textAlign = this.properties.textAlign;
6765
+ if ((_B = this.properties) == null ? void 0 : _B.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6766
+ if ((_C = this.properties) == null ? void 0 : _C.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
6767
+ if ((_D = this.properties) == null ? void 0 : _D.borderRightWidth) style.borderRightWidth = this.properties.borderRightWidth;
6768
+ if ((_E = this.properties) == null ? void 0 : _E.borderTopWidth) style.borderTopWidth = this.properties.borderTopWidth;
6769
+ if ((_F = this.properties) == null ? void 0 : _F.borderBottomWidth) style.borderBottomWidth = this.properties.borderBottomWidth;
6770
+ if ((_G = this.properties) == null ? void 0 : _G.borderTopLeftRadius) style.borderTopLeftRadius = this.properties.borderTopLeftRadius;
6771
+ if ((_H = this.properties) == null ? void 0 : _H.borderTopRightRadius) style.borderTopRightRadius = this.properties.borderTopRightRadius;
6772
+ if ((_I = this.properties) == null ? void 0 : _I.borderBottomLeftRadius) style.borderBottomLeftRadius = this.properties.borderBottomLeftRadius;
6773
+ if ((_J = this.properties) == null ? void 0 : _J.borderBottomRightRadius) style.borderBottomRightRadius = this.properties.borderBottomRightRadius;
6774
+ if (((_K = this.properties) == null ? void 0 : _K.borderColor) && style.borderLeftWidth) {
6771
6775
  style.borderLeftStyle = "solid";
6772
- style.borderLeftColor = (_K = this.properties) == null ? void 0 : _K.borderColor;
6776
+ style.borderLeftColor = (_L = this.properties) == null ? void 0 : _L.borderColor;
6773
6777
  }
6774
- if (((_L = this.properties) == null ? void 0 : _L.borderColor) && style.borderRightWidth) {
6778
+ if (((_M = this.properties) == null ? void 0 : _M.borderColor) && style.borderRightWidth) {
6775
6779
  style.borderRightStyle = "solid";
6776
- style.borderRightColor = (_M = this.properties) == null ? void 0 : _M.borderColor;
6780
+ style.borderRightColor = (_N = this.properties) == null ? void 0 : _N.borderColor;
6777
6781
  }
6778
- if (((_N = this.properties) == null ? void 0 : _N.borderColor) && style.borderTopWidth) {
6782
+ if (((_O = this.properties) == null ? void 0 : _O.borderColor) && style.borderTopWidth) {
6779
6783
  style.borderTopStyle = "solid";
6780
- style.borderTopColor = (_O = this.properties) == null ? void 0 : _O.borderColor;
6784
+ style.borderTopColor = (_P = this.properties) == null ? void 0 : _P.borderColor;
6781
6785
  }
6782
- if (((_P = this.properties) == null ? void 0 : _P.borderColor) && style.borderBottomWidth) {
6786
+ if (((_Q = this.properties) == null ? void 0 : _Q.borderColor) && style.borderBottomWidth) {
6783
6787
  style.borderBottomStyle = "solid";
6784
- style.borderBottomColor = (_Q = this.properties) == null ? void 0 : _Q.borderColor;
6788
+ style.borderBottomColor = (_R = this.properties) == null ? void 0 : _R.borderColor;
6785
6789
  }
6786
6790
  return style;
6787
6791
  }
@@ -7454,17 +7458,13 @@ const _sfc_main$3$1 = /* @__PURE__ */ defineComponent({
7454
7458
  "data-part-id": _ctx.part.partId,
7455
7459
  style: normalizeStyle(style.value)
7456
7460
  }, [
7457
- createElementVNode("div", {
7458
- class: normalizeClass([[_ctx.isMobilePage ? "mobile" : "pc"], "pb-page-content"])
7459
- }, [
7460
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.part.children, (section) => {
7461
- return openBlock(), createBlock$1(_sfc_main$9$1, {
7462
- key: section.partId,
7463
- "is-mobile-page": _ctx.isMobilePage,
7464
- part: section
7465
- }, null, 8, ["is-mobile-page", "part"]);
7466
- }), 128))
7467
- ], 2)
7461
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.part.children, (section) => {
7462
+ return openBlock(), createBlock$1(_sfc_main$9$1, {
7463
+ key: section.partId,
7464
+ "is-mobile-page": _ctx.isMobilePage,
7465
+ part: section
7466
+ }, null, 8, ["is-mobile-page", "part"]);
7467
+ }), 128))
7468
7468
  ], 14, _hoisted_1$2$1)
7469
7469
  ], 64);
7470
7470
  };
@@ -8145,15 +8145,15 @@ class PartManager {
8145
8145
  const defaultPartPropertyEditors = () => {
8146
8146
  return {
8147
8147
  "readonly-text": () => defineAsyncComponent(() => import("./PbPropertyEditorReadonlyText-Dgp_AVOD.js")),
8148
- "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-OLBLie3k.js")),
8148
+ "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-Dv0fJMe9.js")),
8149
8149
  "number": () => defineAsyncComponent(() => import("./PbPropertyEditorNumber-TTgo0zbQ.js")),
8150
8150
  "boolean": () => defineAsyncComponent(() => import("./PbPropertyEditorBoolean-C7-iSAtn.js")),
8151
- "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-BaMj-tr_.js")),
8151
+ "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-CNr5khDs.js")),
8152
8152
  "select": () => defineAsyncComponent(() => import("./PbPropertyEditorSelect-CWedbXJI.js")),
8153
- "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-BPku9nyl.js")),
8154
- "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-DnUH6vkj.js")),
8155
- "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-eYbeszpS.js")),
8156
- "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-DRCsiJt3.js"))
8153
+ "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-w19UyXyL.js")),
8154
+ "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-C5nERuUJ.js")),
8155
+ "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-DXWHj2CD.js")),
8156
+ "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-DrPrai1y.js"))
8157
8157
  };
8158
8158
  };
8159
8159
  const getPropertyValueOfParts = (parts, propertyName) => {
@@ -12487,7 +12487,7 @@ __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
12487
12487
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
12488
12488
  const openWidgetAddModal = (modal, args, callback) => {
12489
12489
  modal.openModal({
12490
- component: defineAsyncComponent(() => import("./PbWidgetAddModal-CvBeNnPx.js")),
12490
+ component: defineAsyncComponent(() => import("./PbWidgetAddModal-D3QjBrfz.js")),
12491
12491
  style: {
12492
12492
  width: "80%",
12493
12493
  height: "80%",
@@ -13245,7 +13245,7 @@ const enableAddBlockMenu = (pageBuilder, direction, commandId, caption) => {
13245
13245
  var _a, _b;
13246
13246
  const selected = pageBuilder.context.getSelectedParts()[0];
13247
13247
  const block = pageBuilder.partManager.findNearestBlock(selected);
13248
- if (block && ((_b = (_a = block.parent) == null ? void 0 : _a.properties) == null ? void 0 : _b.direction) === direction) {
13248
+ if (block && (((_b = (_a = block.parent) == null ? void 0 : _a.properties) == null ? void 0 : _b.direction) || "vertical") === direction) {
13249
13249
  return menuItemForCommand(pageBuilder, commandId, caption);
13250
13250
  }
13251
13251
  };
@@ -13253,7 +13253,7 @@ const enableAddWidgetMenu = (pageBuilder, direction, commandId, caption) => {
13253
13253
  var _a, _b, _c;
13254
13254
  const selected = pageBuilder.context.getSelectedParts()[0];
13255
13255
  if (selected) {
13256
- if (((_a = selected.parent) == null ? void 0 : _a.isBlock()) && ((_c = (_b = selected.parent) == null ? void 0 : _b.properties) == null ? void 0 : _c.direction) === direction || !selected.isNestedWidget() && !direction) {
13256
+ if (((_a = selected.parent) == null ? void 0 : _a.isBlock()) && (((_c = (_b = selected.parent) == null ? void 0 : _b.properties) == null ? void 0 : _c.direction) || "horizontal") === direction || !selected.isNestedWidget() && !direction) {
13257
13257
  return menuItemForCommand(pageBuilder, commandId, caption);
13258
13258
  }
13259
13259
  }
@@ -13713,7 +13713,6 @@ class PageBuilderEditorImpl {
13713
13713
  __publicField(this, "locale", ref("en"));
13714
13714
  __publicField(this, "locales", ref(["en"]));
13715
13715
  __publicField(this, "customWidgets", []);
13716
- __publicField(this, "watchers", {});
13717
13716
  __publicField(this, "providers", {});
13718
13717
  __publicField(this, "externalCssLinks", []);
13719
13718
  __publicField(this, "externalCssContent", "");
@@ -13755,22 +13754,28 @@ class PageBuilderEditorImpl {
13755
13754
  registerCustomPlugin(plugin) {
13756
13755
  if (plugin.widgets) {
13757
13756
  const partDefinitions2 = {};
13758
- plugin.widgets.forEach((v) => {
13759
- const w = { ...v };
13760
- w.partType = "Widget";
13761
- w.creator = () => _sfc_main$q;
13762
- w.propertyGroups = [...w.propertyGroups, ...defaultWidgetPropertyGroups()];
13763
- partDefinitions2[v.partName] = w;
13764
- const found = this.customWidgets.find((x) => x.partName === v.partName);
13765
- if (!found) {
13766
- this.customWidgets.push(w);
13757
+ plugin.widgets.forEach((group) => {
13758
+ if (group.partDefinitions && group.partDefinitions.length) {
13759
+ const g = {
13760
+ groupName: group.groupName,
13761
+ caption: group.caption,
13762
+ partDefinitions: []
13763
+ };
13764
+ group.partDefinitions.forEach((part) => {
13765
+ const p = { ...part };
13766
+ p.partType = "Widget";
13767
+ p.creator = () => _sfc_main$q;
13768
+ p.propertyGroups = [...p.propertyGroups, ...defaultWidgetPropertyGroups()];
13769
+ partDefinitions2[p.partName] = p;
13770
+ g.partDefinitions.push(p);
13771
+ });
13772
+ if (g.partDefinitions && g.partDefinitions.length) {
13773
+ this.customWidgets.push(g);
13774
+ }
13767
13775
  }
13768
13776
  });
13769
13777
  this.partManager.registerPartDefinitions(partDefinitions2);
13770
13778
  }
13771
- if (plugin.watchers) {
13772
- this.watchers = { ...this.providers, ...plugin.watchers };
13773
- }
13774
13779
  if (plugin.providers) {
13775
13780
  this.providers = { ...this.providers, ...plugin.providers };
13776
13781
  }
@@ -14440,13 +14445,11 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14440
14445
  minHeight: ((_b = (_a = props.part) == null ? void 0 : _a.children) == null ? void 0 : _b.length) ? void 0 : "200px"
14441
14446
  };
14442
14447
  });
14443
- const properties = computed(() => {
14448
+ const contentStyle = computed(() => {
14444
14449
  var _a, _b;
14445
14450
  return {
14446
- style: {
14447
- ...(_a = props.part) == null ? void 0 : _a.getStyles(props.isMobilePage),
14448
- ...(_b = props.part) == null ? void 0 : _b.getInlineStyles()
14449
- }
14451
+ ...(_a = props.part) == null ? void 0 : _a.getStyles(props.isMobilePage),
14452
+ ...(_b = props.part) == null ? void 0 : _b.getInlineStyles()
14450
14453
  };
14451
14454
  });
14452
14455
  const selected = computed(() => !!props.part && editor.context.isSelected(props.part));
@@ -14487,9 +14490,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14487
14490
  onContextmenu: showContextMenu,
14488
14491
  onMousedown: withModifiers(handleClick, ["stop"])
14489
14492
  }, [
14490
- createElementVNode("div", mergeProps({
14491
- class: [selected.value && "selected", _ctx.isMobilePage ? "mobile" : "pc", "pb-page-content"]
14492
- }, properties.value), [
14493
+ createElementVNode("div", {
14494
+ class: normalizeClass([selected.value && "selected", _ctx.isMobilePage ? "mobile" : "pc", "pb-page-content"]),
14495
+ style: normalizeStyle(contentStyle.value)
14496
+ }, [
14493
14497
  (openBlock(true), createElementBlock(Fragment, null, renderList((_b = _ctx.part) == null ? void 0 : _b.children, (section, index) => {
14494
14498
  return openBlock(), createBlock$1(_sfc_main$l, {
14495
14499
  key: section.partId,
@@ -14497,7 +14501,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14497
14501
  part: section
14498
14502
  }, null, 8, ["is-mobile-page", "part"]);
14499
14503
  }), 128))
14500
- ], 16),
14504
+ ], 6),
14501
14505
  createElementVNode("div", {
14502
14506
  class: "pb-add-section-handle bottom",
14503
14507
  onClick: addSection
@@ -14509,7 +14513,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14509
14513
  };
14510
14514
  }
14511
14515
  });
14512
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n padding-bottom: 100px;\n width: 100%;\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 display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n}\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}';
14516
+ const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n}\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\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-family: "Material Symbols Outlined", monospace;\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14513
14517
  const _hoisted_1$2 = ["width"];
14514
14518
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14515
14519
  __name: "PbPageFrame",
@@ -14534,24 +14538,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14534
14538
  const head = (_e = (_d = iframeRef.value) == null ? void 0 : _d.contentWindow) == null ? void 0 : _e.document.head;
14535
14539
  head.innerHTML = `
14536
14540
  <meta charset="UTF-8"/>
14537
- <link href="https://fonts.googleapis.com" rel="preconnect">
14538
- <link crossorigin href="https://fonts.gstatic.com" rel="preconnect">
14539
- <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500&display=swap" rel="stylesheet">
14540
- <link
14541
- href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500&family=Noto+Sans:wght@400;500&display=swap"
14542
- rel="stylesheet">
14543
- <link
14544
- href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500&family=Noto+Sans+KR:wght@400;500&family=Noto+Sans:wght@400;500&display=swap"
14545
- rel="stylesheet">
14546
14541
  <link
14547
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block"
14548
- rel="stylesheet"/>
14549
- <link href="https://fonts.googleapis.com/css2?family=Material+Icons+Outlined" rel="stylesheet" />
14550
-
14551
- <link href="https://bluesea5.g1project.net/assets/index-DjQFWKLW.css" rel="stylesheet" />
14552
-
14542
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block"
14543
+ rel="stylesheet"/>
14553
14544
  ${externalCss}
14554
-
14555
14545
  <style>${canvasStyle}</style>
14556
14546
  `;
14557
14547
  const script2 = (_g = (_f = iframeRef.value) == null ? void 0 : _f.contentWindow) == null ? void 0 : _g.document.createElement("script");
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { PartDefinition, PartDefinitionGroup } from './model/part-definintion.ts';
1
2
  import { PartProperty } from './model/part-property.ts';
2
3
 
3
4
  export { default as PageBuilderEditor } from './PageBuilderEditor.vue';
4
- export type { PartProperty };
5
+ export type { PartProperty, PartDefinitionGroup, PartDefinition };
5
6
  export * from './model/event';
6
7
  export * from './model/plugin';
7
8
  export * from '@g1cloud/page-builder-viewer';
@@ -1,4 +1,4 @@
1
- import { PartDefinition } from './part-definintion.ts';
1
+ import { PartDefinitionGroup } from './part-definintion.ts';
2
2
  import { ContextMenuRegistry, ContextMenuRegistryImpl, KeyHandlers, PageBuilderContext, PageBuilderContextImpl } from './context.ts';
3
3
  import { ToolButtonRegistry } from './toolbar.ts';
4
4
  import { PageBuilderPlugin } from './plugin.ts';
@@ -36,7 +36,7 @@ export interface PageBuilderEditor extends PageBuilder {
36
36
  setLocales(locales?: string[]): void;
37
37
  makeSingleScreen(screenToKeep: number): void;
38
38
  makeMultipleScreen(): void;
39
- getCustomWidgets(): PartDefinition[];
39
+ getCustomWidgets(): PartDefinitionGroup[];
40
40
  getProvider(name: string): (args?: any, callback?: (result?: any) => void) => unknown;
41
41
  extractMedia(part: IPart): string[];
42
42
  }
@@ -53,8 +53,7 @@ export declare class PageBuilderEditorImpl implements PageBuilderEditor {
53
53
  scale: Ref<number>;
54
54
  locale: Ref<string>;
55
55
  locales: Ref<string[]>;
56
- customWidgets: PartDefinition[];
57
- watchers: Record<string, unknown>;
56
+ customWidgets: PartDefinitionGroup[];
58
57
  providers: Record<string, unknown>;
59
58
  externalCssLinks: string[];
60
59
  externalCssContent: string;
@@ -73,7 +72,7 @@ export declare class PageBuilderEditorImpl implements PageBuilderEditor {
73
72
  zoom(scale: number): void;
74
73
  makeSingleScreen(screenToKeep: number): void;
75
74
  makeMultipleScreen(): void;
76
- getCustomWidgets(): PartDefinition[];
75
+ getCustomWidgets(): PartDefinitionGroup[];
77
76
  extractMedia(part: IPart): string[];
78
77
  getExternalCss(): string;
79
78
  private extractMediaFromPart;
@@ -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-BPKptjBm.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-DsIuGIwL.js";
2
2
  export {
3
3
  B as BLOCK_TYPE,
4
4
  b as Block,
@@ -6716,19 +6716,23 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6716
6716
  }
6717
6717
  }
6718
6718
  getStyles(isMobilePage) {
6719
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q;
6719
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R;
6720
6720
  const style = {};
6721
6721
  if (((_a = this.properties) == null ? void 0 : _a.direction) === "horizontal") {
6722
6722
  style.flexDirection = "row";
6723
- } else {
6723
+ } else if (((_b = this.properties) == null ? void 0 : _b.direction) === "vertical") {
6724
+ style.flexDirection = "column";
6725
+ } else if (this.isSection()) {
6726
+ style.flexDirection = "row";
6727
+ } else if (this.isBlock()) {
6724
6728
  style.flexDirection = "column";
6725
6729
  }
6726
- if (((_b = this.properties) == null ? void 0 : _b.wrap) === "wrap") {
6730
+ if (((_c = this.properties) == null ? void 0 : _c.wrap) === "wrap") {
6727
6731
  style.flexWrap = "wrap";
6728
6732
  }
6729
- const alignItems = this.getAlignStyleValue((_c = this.properties) == null ? void 0 : _c.alignItems);
6730
- const justifyContent = this.getAlignStyleValue((_d = this.properties) == null ? void 0 : _d.justifyContent);
6731
- const alignSelf = this.getAlignStyleValue((_e = this.properties) == null ? void 0 : _e.alignSelf);
6733
+ const alignItems = this.getAlignStyleValue((_d = this.properties) == null ? void 0 : _d.alignItems);
6734
+ const justifyContent = this.getAlignStyleValue((_e = this.properties) == null ? void 0 : _e.justifyContent);
6735
+ const alignSelf = this.getAlignStyleValue((_f = this.properties) == null ? void 0 : _f.alignSelf);
6732
6736
  if (this.isWidget()) {
6733
6737
  if (alignSelf) style.alignSelf = alignSelf;
6734
6738
  } else if (this.isPage()) {
@@ -6738,51 +6742,51 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6738
6742
  if (justifyContent) style.justifyContent = justifyContent;
6739
6743
  if (alignSelf) style.alignSelf = alignSelf;
6740
6744
  }
6741
- if ((_f = this.properties) == null ? void 0 : _f.margin) style.margin = this.properties.margin;
6742
- if ((_g = this.properties) == null ? void 0 : _g.marginLeft) style.marginLeft = this.properties.marginLeft;
6743
- if ((_h = this.properties) == null ? void 0 : _h.marginRight) style.marginRight = this.properties.marginRight;
6744
- if ((_i = this.properties) == null ? void 0 : _i.marginTop) style.marginTop = this.properties.marginTop;
6745
- if ((_j = this.properties) == null ? void 0 : _j.marginBottom) style.marginBottom = this.properties.marginBottom;
6746
- if ((_k = this.properties) == null ? void 0 : _k.padding) style.padding = this.properties.padding;
6747
- if ((_l = this.properties) == null ? void 0 : _l.paddingLeft) style.paddingLeft = this.properties.paddingLeft;
6748
- if ((_m = this.properties) == null ? void 0 : _m.paddingRight) style.paddingRight = this.properties.paddingRight;
6749
- if ((_n = this.properties) == null ? void 0 : _n.paddingTop) style.paddingTop = this.properties.paddingTop;
6750
- if ((_o = this.properties) == null ? void 0 : _o.paddingBottom) style.paddingBottom = this.properties.paddingBottom;
6751
- if ((_p = this.properties) == null ? void 0 : _p.left) style.left = this.properties.left;
6752
- if ((_q = this.properties) == null ? void 0 : _q.right) style.right = this.properties.right;
6753
- if ((_r = this.properties) == null ? void 0 : _r.top) style.top = this.properties.top;
6754
- if ((_s = this.properties) == null ? void 0 : _s.bottom) style.bottom = this.properties.bottom;
6755
- if ((_t = this.properties) == null ? void 0 : _t.width) style.width = this.properties.width;
6756
- if ((_u = this.properties) == null ? void 0 : _u.height) style.height = this.properties.height;
6757
- if ((_v = this.properties) == null ? void 0 : _v.maxWidth) style.maxWidth = this.properties.maxWidth;
6758
- if ((_w = this.properties) == null ? void 0 : _w.maxHeight) style.maxHeight = this.properties.maxHeight;
6759
- if ((_x = this.properties) == null ? void 0 : _x.minWidth) style.minWidth = this.properties.minWidth;
6760
- if ((_y = this.properties) == null ? void 0 : _y.minHeight) style.minHeight = this.properties.minHeight;
6761
- if ((_z = this.properties) == null ? void 0 : _z.textAlign) style.textAlign = this.properties.textAlign;
6762
- if ((_A = this.properties) == null ? void 0 : _A.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6763
- if ((_B = this.properties) == null ? void 0 : _B.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
6764
- if ((_C = this.properties) == null ? void 0 : _C.borderRightWidth) style.borderRightWidth = this.properties.borderRightWidth;
6765
- if ((_D = this.properties) == null ? void 0 : _D.borderTopWidth) style.borderTopWidth = this.properties.borderTopWidth;
6766
- if ((_E = this.properties) == null ? void 0 : _E.borderBottomWidth) style.borderBottomWidth = this.properties.borderBottomWidth;
6767
- if ((_F = this.properties) == null ? void 0 : _F.borderTopLeftRadius) style.borderTopLeftRadius = this.properties.borderTopLeftRadius;
6768
- if ((_G = this.properties) == null ? void 0 : _G.borderTopRightRadius) style.borderTopRightRadius = this.properties.borderTopRightRadius;
6769
- if ((_H = this.properties) == null ? void 0 : _H.borderBottomLeftRadius) style.borderBottomLeftRadius = this.properties.borderBottomLeftRadius;
6770
- if ((_I = this.properties) == null ? void 0 : _I.borderBottomRightRadius) style.borderBottomRightRadius = this.properties.borderBottomRightRadius;
6771
- if (((_J = this.properties) == null ? void 0 : _J.borderColor) && style.borderLeftWidth) {
6745
+ if ((_g = this.properties) == null ? void 0 : _g.margin) style.margin = this.properties.margin;
6746
+ if ((_h = this.properties) == null ? void 0 : _h.marginLeft) style.marginLeft = this.properties.marginLeft;
6747
+ if ((_i = this.properties) == null ? void 0 : _i.marginRight) style.marginRight = this.properties.marginRight;
6748
+ if ((_j = this.properties) == null ? void 0 : _j.marginTop) style.marginTop = this.properties.marginTop;
6749
+ if ((_k = this.properties) == null ? void 0 : _k.marginBottom) style.marginBottom = this.properties.marginBottom;
6750
+ if ((_l = this.properties) == null ? void 0 : _l.padding) style.padding = this.properties.padding;
6751
+ if ((_m = this.properties) == null ? void 0 : _m.paddingLeft) style.paddingLeft = this.properties.paddingLeft;
6752
+ if ((_n = this.properties) == null ? void 0 : _n.paddingRight) style.paddingRight = this.properties.paddingRight;
6753
+ if ((_o = this.properties) == null ? void 0 : _o.paddingTop) style.paddingTop = this.properties.paddingTop;
6754
+ if ((_p = this.properties) == null ? void 0 : _p.paddingBottom) style.paddingBottom = this.properties.paddingBottom;
6755
+ if ((_q = this.properties) == null ? void 0 : _q.left) style.left = this.properties.left;
6756
+ if ((_r = this.properties) == null ? void 0 : _r.right) style.right = this.properties.right;
6757
+ if ((_s = this.properties) == null ? void 0 : _s.top) style.top = this.properties.top;
6758
+ if ((_t = this.properties) == null ? void 0 : _t.bottom) style.bottom = this.properties.bottom;
6759
+ if ((_u = this.properties) == null ? void 0 : _u.width) style.width = this.properties.width;
6760
+ if ((_v = this.properties) == null ? void 0 : _v.height) style.height = this.properties.height;
6761
+ if ((_w = this.properties) == null ? void 0 : _w.maxWidth) style.maxWidth = this.properties.maxWidth;
6762
+ if ((_x = this.properties) == null ? void 0 : _x.maxHeight) style.maxHeight = this.properties.maxHeight;
6763
+ if ((_y = this.properties) == null ? void 0 : _y.minWidth) style.minWidth = this.properties.minWidth;
6764
+ if ((_z = this.properties) == null ? void 0 : _z.minHeight) style.minHeight = this.properties.minHeight;
6765
+ if ((_A = this.properties) == null ? void 0 : _A.textAlign) style.textAlign = this.properties.textAlign;
6766
+ if ((_B = this.properties) == null ? void 0 : _B.backgroundColor) style.backgroundColor = this.properties.backgroundColor;
6767
+ if ((_C = this.properties) == null ? void 0 : _C.borderLeftWidth) style.borderLeftWidth = this.properties.borderLeftWidth;
6768
+ if ((_D = this.properties) == null ? void 0 : _D.borderRightWidth) style.borderRightWidth = this.properties.borderRightWidth;
6769
+ if ((_E = this.properties) == null ? void 0 : _E.borderTopWidth) style.borderTopWidth = this.properties.borderTopWidth;
6770
+ if ((_F = this.properties) == null ? void 0 : _F.borderBottomWidth) style.borderBottomWidth = this.properties.borderBottomWidth;
6771
+ if ((_G = this.properties) == null ? void 0 : _G.borderTopLeftRadius) style.borderTopLeftRadius = this.properties.borderTopLeftRadius;
6772
+ if ((_H = this.properties) == null ? void 0 : _H.borderTopRightRadius) style.borderTopRightRadius = this.properties.borderTopRightRadius;
6773
+ if ((_I = this.properties) == null ? void 0 : _I.borderBottomLeftRadius) style.borderBottomLeftRadius = this.properties.borderBottomLeftRadius;
6774
+ if ((_J = this.properties) == null ? void 0 : _J.borderBottomRightRadius) style.borderBottomRightRadius = this.properties.borderBottomRightRadius;
6775
+ if (((_K = this.properties) == null ? void 0 : _K.borderColor) && style.borderLeftWidth) {
6772
6776
  style.borderLeftStyle = "solid";
6773
- style.borderLeftColor = (_K = this.properties) == null ? void 0 : _K.borderColor;
6777
+ style.borderLeftColor = (_L = this.properties) == null ? void 0 : _L.borderColor;
6774
6778
  }
6775
- if (((_L = this.properties) == null ? void 0 : _L.borderColor) && style.borderRightWidth) {
6779
+ if (((_M = this.properties) == null ? void 0 : _M.borderColor) && style.borderRightWidth) {
6776
6780
  style.borderRightStyle = "solid";
6777
- style.borderRightColor = (_M = this.properties) == null ? void 0 : _M.borderColor;
6781
+ style.borderRightColor = (_N = this.properties) == null ? void 0 : _N.borderColor;
6778
6782
  }
6779
- if (((_N = this.properties) == null ? void 0 : _N.borderColor) && style.borderTopWidth) {
6783
+ if (((_O = this.properties) == null ? void 0 : _O.borderColor) && style.borderTopWidth) {
6780
6784
  style.borderTopStyle = "solid";
6781
- style.borderTopColor = (_O = this.properties) == null ? void 0 : _O.borderColor;
6785
+ style.borderTopColor = (_P = this.properties) == null ? void 0 : _P.borderColor;
6782
6786
  }
6783
- if (((_P = this.properties) == null ? void 0 : _P.borderColor) && style.borderBottomWidth) {
6787
+ if (((_Q = this.properties) == null ? void 0 : _Q.borderColor) && style.borderBottomWidth) {
6784
6788
  style.borderBottomStyle = "solid";
6785
- style.borderBottomColor = (_Q = this.properties) == null ? void 0 : _Q.borderColor;
6789
+ style.borderBottomColor = (_R = this.properties) == null ? void 0 : _R.borderColor;
6786
6790
  }
6787
6791
  return style;
6788
6792
  }
@@ -7455,17 +7459,13 @@ ${_html.style}
7455
7459
  "data-part-id": _ctx.part.partId,
7456
7460
  style: vue.normalizeStyle(style.value)
7457
7461
  }, [
7458
- vue.createElementVNode("div", {
7459
- class: vue.normalizeClass([[_ctx.isMobilePage ? "mobile" : "pc"], "pb-page-content"])
7460
- }, [
7461
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.part.children, (section) => {
7462
- return vue.openBlock(), vue.createBlock(_sfc_main$9$1, {
7463
- key: section.partId,
7464
- "is-mobile-page": _ctx.isMobilePage,
7465
- part: section
7466
- }, null, 8, ["is-mobile-page", "part"]);
7467
- }), 128))
7468
- ], 2)
7462
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.part.children, (section) => {
7463
+ return vue.openBlock(), vue.createBlock(_sfc_main$9$1, {
7464
+ key: section.partId,
7465
+ "is-mobile-page": _ctx.isMobilePage,
7466
+ part: section
7467
+ }, null, 8, ["is-mobile-page", "part"]);
7468
+ }), 128))
7469
7469
  ], 14, _hoisted_1$2$1)
7470
7470
  ], 64);
7471
7471
  };
@@ -9253,7 +9253,7 @@ ${_html.style}
9253
9253
  const _hoisted_4$d = { class: "bg-gray-100 py-5 rounded-8" };
9254
9254
  const _hoisted_5$7 = { class: "text-center" };
9255
9255
  const _hoisted_6$7 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
9256
- const _hoisted_7$6 = { class: "text-center" };
9256
+ const _hoisted_7$7 = { class: "text-center" };
9257
9257
  const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
9258
9258
  __name: "PbPropertyGroupEditorPosition",
9259
9259
  props: {
@@ -9316,7 +9316,7 @@ ${_html.style}
9316
9316
  "onUpdate:modelValue": updateRight
9317
9317
  }, null, 8, ["model-value"])
9318
9318
  ]),
9319
- vue.createElementVNode("div", _hoisted_7$6, [
9319
+ vue.createElementVNode("div", _hoisted_7$7, [
9320
9320
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
9321
9321
  "model-value": bottom.value,
9322
9322
  class: "ml-4",
@@ -9338,7 +9338,7 @@ ${_html.style}
9338
9338
  const _hoisted_4$c = { class: "flex-align-center mt-12" };
9339
9339
  const _hoisted_5$6 = { class: "flex-grow-1 bs-layout-horizontal" };
9340
9340
  const _hoisted_6$6 = { class: "flex-align-center mt-12" };
9341
- const _hoisted_7$5 = { class: "flex-grow-1 bs-layout-horizontal" };
9341
+ const _hoisted_7$6 = { class: "flex-grow-1 bs-layout-horizontal" };
9342
9342
  const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
9343
9343
  __name: "PbPropertyGroupEditorSize",
9344
9344
  props: {
@@ -9410,7 +9410,7 @@ ${_html.style}
9410
9410
  _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "title" }, [
9411
9411
  vue.createElementVNode("label", { textContent: "Min Size" })
9412
9412
  ], -1)),
9413
- vue.createElementVNode("div", _hoisted_7$5, [
9413
+ vue.createElementVNode("div", _hoisted_7$6, [
9414
9414
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
9415
9415
  "model-value": minWidth.value,
9416
9416
  class: "flex-grow-1 mr-2",
@@ -11133,7 +11133,7 @@ ${_html.style}
11133
11133
  class: "vc-sketch-alpha-wrap"
11134
11134
  };
11135
11135
  const _hoisted_6$5 = { class: "vc-sketch-color-wrap" };
11136
- const _hoisted_7$4 = ["aria-label"];
11136
+ const _hoisted_7$5 = ["aria-label"];
11137
11137
  const _hoisted_8$2 = {
11138
11138
  key: 0,
11139
11139
  class: "vc-sketch-field"
@@ -11193,7 +11193,7 @@ ${_html.style}
11193
11193
  "aria-label": `Current color is ${$options.activeColor}`,
11194
11194
  class: "vc-sketch-active-color",
11195
11195
  style: vue.normalizeStyle({ background: $options.activeColor })
11196
- }, null, 12, _hoisted_7$4),
11196
+ }, null, 12, _hoisted_7$5),
11197
11197
  vue.createVNode(_component_Checkboard)
11198
11198
  ])
11199
11199
  ]),
@@ -11455,7 +11455,7 @@ ${_html.style}
11455
11455
  const _hoisted_4$6 = { class: "color" };
11456
11456
  const _hoisted_5$4 = { class: "mt-8" };
11457
11457
  const _hoisted_6$4 = { class: "flex-grow-1 mt-4" };
11458
- const _hoisted_7$3 = { class: "bg-gray-100 py-5 rounded-8" };
11458
+ const _hoisted_7$4 = { class: "bg-gray-100 py-5 rounded-8" };
11459
11459
  const _hoisted_8$1 = { class: "text-center" };
11460
11460
  const _hoisted_9 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11461
11461
  const _hoisted_10 = { class: "text-center" };
@@ -11534,7 +11534,7 @@ ${_html.style}
11534
11534
  vue.createElementVNode("label", { textContent: "Border Width" })
11535
11535
  ], -1)),
11536
11536
  vue.createElementVNode("div", _hoisted_6$4, [
11537
- vue.createElementVNode("div", _hoisted_7$3, [
11537
+ vue.createElementVNode("div", _hoisted_7$4, [
11538
11538
  vue.createElementVNode("div", _hoisted_8$1, [
11539
11539
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
11540
11540
  "model-value": borderTopWidth.value,
@@ -11630,7 +11630,7 @@ ${_html.style}
11630
11630
  const _hoisted_4$5 = { class: "bg-gray-100 py-5 rounded-8" };
11631
11631
  const _hoisted_5$3 = { class: "text-center" };
11632
11632
  const _hoisted_6$3 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11633
- const _hoisted_7$2 = { class: "text-center" };
11633
+ const _hoisted_7$3 = { class: "text-center" };
11634
11634
  const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
11635
11635
  __name: "PbPropertyGroupEditorMargin",
11636
11636
  props: {
@@ -11693,7 +11693,7 @@ ${_html.style}
11693
11693
  "onUpdate:modelValue": updateRight
11694
11694
  }, null, 8, ["model-value"])
11695
11695
  ]),
11696
- vue.createElementVNode("div", _hoisted_7$2, [
11696
+ vue.createElementVNode("div", _hoisted_7$3, [
11697
11697
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
11698
11698
  "model-value": bottom.value,
11699
11699
  class: "ml-4",
@@ -11715,7 +11715,7 @@ ${_html.style}
11715
11715
  const _hoisted_4$4 = { class: "bg-gray-100 py-5 rounded-8" };
11716
11716
  const _hoisted_5$2 = { class: "text-center" };
11717
11717
  const _hoisted_6$2 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
11718
- const _hoisted_7$1 = { class: "text-center" };
11718
+ const _hoisted_7$2 = { class: "text-center" };
11719
11719
  const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
11720
11720
  __name: "PbPropertyGroupEditorPadding",
11721
11721
  props: {
@@ -11778,7 +11778,7 @@ ${_html.style}
11778
11778
  "onUpdate:modelValue": updateRight
11779
11779
  }, null, 8, ["model-value"])
11780
11780
  ]),
11781
- vue.createElementVNode("div", _hoisted_7$1, [
11781
+ vue.createElementVNode("div", _hoisted_7$2, [
11782
11782
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
11783
11783
  "model-value": bottom.value,
11784
11784
  class: "ml-4",
@@ -13246,7 +13246,7 @@ ${_html.style}
13246
13246
  var _a, _b;
13247
13247
  const selected = pageBuilder.context.getSelectedParts()[0];
13248
13248
  const block = pageBuilder.partManager.findNearestBlock(selected);
13249
- if (block && ((_b = (_a = block.parent) == null ? void 0 : _a.properties) == null ? void 0 : _b.direction) === direction) {
13249
+ if (block && (((_b = (_a = block.parent) == null ? void 0 : _a.properties) == null ? void 0 : _b.direction) || "vertical") === direction) {
13250
13250
  return menuItemForCommand(pageBuilder, commandId, caption);
13251
13251
  }
13252
13252
  };
@@ -13254,7 +13254,7 @@ ${_html.style}
13254
13254
  var _a, _b, _c;
13255
13255
  const selected = pageBuilder.context.getSelectedParts()[0];
13256
13256
  if (selected) {
13257
- if (((_a = selected.parent) == null ? void 0 : _a.isBlock()) && ((_c = (_b = selected.parent) == null ? void 0 : _b.properties) == null ? void 0 : _c.direction) === direction || !selected.isNestedWidget() && !direction) {
13257
+ if (((_a = selected.parent) == null ? void 0 : _a.isBlock()) && (((_c = (_b = selected.parent) == null ? void 0 : _b.properties) == null ? void 0 : _c.direction) || "horizontal") === direction || !selected.isNestedWidget() && !direction) {
13258
13258
  return menuItemForCommand(pageBuilder, commandId, caption);
13259
13259
  }
13260
13260
  }
@@ -13714,7 +13714,6 @@ ${_html.style}
13714
13714
  __publicField(this, "locale", vue.ref("en"));
13715
13715
  __publicField(this, "locales", vue.ref(["en"]));
13716
13716
  __publicField(this, "customWidgets", []);
13717
- __publicField(this, "watchers", {});
13718
13717
  __publicField(this, "providers", {});
13719
13718
  __publicField(this, "externalCssLinks", []);
13720
13719
  __publicField(this, "externalCssContent", "");
@@ -13756,22 +13755,28 @@ ${_html.style}
13756
13755
  registerCustomPlugin(plugin) {
13757
13756
  if (plugin.widgets) {
13758
13757
  const partDefinitions2 = {};
13759
- plugin.widgets.forEach((v) => {
13760
- const w = { ...v };
13761
- w.partType = "Widget";
13762
- w.creator = () => _sfc_main$E;
13763
- w.propertyGroups = [...w.propertyGroups, ...defaultWidgetPropertyGroups()];
13764
- partDefinitions2[v.partName] = w;
13765
- const found = this.customWidgets.find((x) => x.partName === v.partName);
13766
- if (!found) {
13767
- this.customWidgets.push(w);
13758
+ plugin.widgets.forEach((group) => {
13759
+ if (group.partDefinitions && group.partDefinitions.length) {
13760
+ const g = {
13761
+ groupName: group.groupName,
13762
+ caption: group.caption,
13763
+ partDefinitions: []
13764
+ };
13765
+ group.partDefinitions.forEach((part) => {
13766
+ const p = { ...part };
13767
+ p.partType = "Widget";
13768
+ p.creator = () => _sfc_main$E;
13769
+ p.propertyGroups = [...p.propertyGroups, ...defaultWidgetPropertyGroups()];
13770
+ partDefinitions2[p.partName] = p;
13771
+ g.partDefinitions.push(p);
13772
+ });
13773
+ if (g.partDefinitions && g.partDefinitions.length) {
13774
+ this.customWidgets.push(g);
13775
+ }
13768
13776
  }
13769
13777
  });
13770
13778
  this.partManager.registerPartDefinitions(partDefinitions2);
13771
13779
  }
13772
- if (plugin.watchers) {
13773
- this.watchers = { ...this.providers, ...plugin.watchers };
13774
- }
13775
13780
  if (plugin.providers) {
13776
13781
  this.providers = { ...this.providers, ...plugin.providers };
13777
13782
  }
@@ -14441,13 +14446,11 @@ ${_html.style}
14441
14446
  minHeight: ((_b = (_a = props.part) == null ? void 0 : _a.children) == null ? void 0 : _b.length) ? void 0 : "200px"
14442
14447
  };
14443
14448
  });
14444
- const properties = vue.computed(() => {
14449
+ const contentStyle = vue.computed(() => {
14445
14450
  var _a, _b;
14446
14451
  return {
14447
- style: {
14448
- ...(_a = props.part) == null ? void 0 : _a.getStyles(props.isMobilePage),
14449
- ...(_b = props.part) == null ? void 0 : _b.getInlineStyles()
14450
- }
14452
+ ...(_a = props.part) == null ? void 0 : _a.getStyles(props.isMobilePage),
14453
+ ...(_b = props.part) == null ? void 0 : _b.getInlineStyles()
14451
14454
  };
14452
14455
  });
14453
14456
  const selected = vue.computed(() => !!props.part && editor.context.isSelected(props.part));
@@ -14488,9 +14491,10 @@ ${_html.style}
14488
14491
  onContextmenu: showContextMenu,
14489
14492
  onMousedown: vue.withModifiers(handleClick, ["stop"])
14490
14493
  }, [
14491
- vue.createElementVNode("div", vue.mergeProps({
14492
- class: [selected.value && "selected", _ctx.isMobilePage ? "mobile" : "pc", "pb-page-content"]
14493
- }, properties.value), [
14494
+ vue.createElementVNode("div", {
14495
+ class: vue.normalizeClass([selected.value && "selected", _ctx.isMobilePage ? "mobile" : "pc", "pb-page-content"]),
14496
+ style: vue.normalizeStyle(contentStyle.value)
14497
+ }, [
14494
14498
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b = _ctx.part) == null ? void 0 : _b.children, (section, index) => {
14495
14499
  return vue.openBlock(), vue.createBlock(_sfc_main$z, {
14496
14500
  key: section.partId,
@@ -14498,7 +14502,7 @@ ${_html.style}
14498
14502
  part: section
14499
14503
  }, null, 8, ["is-mobile-page", "part"]);
14500
14504
  }), 128))
14501
- ], 16),
14505
+ ], 6),
14502
14506
  vue.createElementVNode("div", {
14503
14507
  class: "pb-add-section-handle bottom",
14504
14508
  onClick: addSection
@@ -14510,7 +14514,7 @@ ${_html.style}
14510
14514
  };
14511
14515
  }
14512
14516
  });
14513
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n padding-bottom: 100px;\n width: 100%;\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 display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n}\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}';
14517
+ const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n}\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\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-family: "Material Symbols Outlined", monospace;\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14514
14518
  const _hoisted_1$g = ["width"];
14515
14519
  const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14516
14520
  __name: "PbPageFrame",
@@ -14535,24 +14539,10 @@ ${_html.style}
14535
14539
  const head = (_e = (_d = iframeRef.value) == null ? void 0 : _d.contentWindow) == null ? void 0 : _e.document.head;
14536
14540
  head.innerHTML = `
14537
14541
  <meta charset="UTF-8"/>
14538
- <link href="https://fonts.googleapis.com" rel="preconnect">
14539
- <link crossorigin href="https://fonts.gstatic.com" rel="preconnect">
14540
- <link href="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500&display=swap" rel="stylesheet">
14541
14542
  <link
14542
- href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500&family=Noto+Sans:wght@400;500&display=swap"
14543
- rel="stylesheet">
14544
- <link
14545
- href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500&family=Noto+Sans+KR:wght@400;500&family=Noto+Sans:wght@400;500&display=swap"
14546
- rel="stylesheet">
14547
- <link
14548
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block"
14549
- rel="stylesheet"/>
14550
- <link href="https://fonts.googleapis.com/css2?family=Material+Icons+Outlined" rel="stylesheet" />
14551
-
14552
- <link href="https://bluesea5.g1project.net/assets/index-DjQFWKLW.css" rel="stylesheet" />
14553
-
14543
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block"
14544
+ rel="stylesheet"/>
14554
14545
  ${externalCss}
14555
-
14556
14546
  <style>${canvasStyle}</style>
14557
14547
  `;
14558
14548
  const script2 = (_g = (_f = iframeRef.value) == null ? void 0 : _f.contentWindow) == null ? void 0 : _g.document.createElement("script");
@@ -15280,8 +15270,9 @@ ${_html.style}
15280
15270
  const _hoisted_2$2 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
15281
15271
  const _hoisted_3$1 = ["onClick", "textContent"];
15282
15272
  const _hoisted_4$1 = { class: "group mb-16" };
15283
- const _hoisted_5$1 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
15284
- const _hoisted_6$1 = ["onClick", "textContent"];
15273
+ const _hoisted_5$1 = ["textContent"];
15274
+ const _hoisted_6$1 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
15275
+ const _hoisted_7$1 = ["onClick", "textContent"];
15285
15276
  const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
15286
15277
  __name: "PbWidgetAddModal",
15287
15278
  props: {
@@ -15300,7 +15291,7 @@ ${_html.style}
15300
15291
  modalHandle.close();
15301
15292
  };
15302
15293
  return (_ctx, _cache) => {
15303
- return vue.openBlock(), vue.createBlock(vue.unref(bluesea.BSModalFrame), { title: "Add Block/Widget" }, {
15294
+ return vue.openBlock(), vue.createBlock(vue.unref(bluesea.BSModalFrame), { title: "Add Widget" }, {
15304
15295
  default: vue.withCtx(() => [
15305
15296
  vue.createElementVNode("div", _hoisted_1$2, [
15306
15297
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(widgetPartDefinitions), (group) => {
@@ -15309,14 +15300,14 @@ ${_html.style}
15309
15300
  class: "group mb-16"
15310
15301
  }, [
15311
15302
  _cache[0] || (_cache[0] = vue.createElementVNode("div", {
15312
- class: "mb-8",
15303
+ class: "mb-8 section-title",
15313
15304
  textContent: "Basic Widgets"
15314
15305
  }, null, -1)),
15315
15306
  vue.createElementVNode("div", _hoisted_2$2, [
15316
15307
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(group.partDefinitions, (part) => {
15317
15308
  return vue.openBlock(), vue.createElementBlock("div", {
15318
15309
  key: part.partName,
15319
- class: "part",
15310
+ class: "part w-200",
15320
15311
  onClick: ($event) => select(part),
15321
15312
  textContent: vue.toDisplayString(part.caption)
15322
15313
  }, null, 8, _hoisted_3$1);
@@ -15324,22 +15315,24 @@ ${_html.style}
15324
15315
  ])
15325
15316
  ]);
15326
15317
  }), 128)),
15327
- vue.createElementVNode("div", _hoisted_4$1, [
15328
- _cache[1] || (_cache[1] = vue.createElementVNode("div", {
15329
- class: "mb-8",
15330
- textContent: "Custom Widgets"
15331
- }, null, -1)),
15332
- vue.createElementVNode("div", _hoisted_5$1, [
15333
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(customWidgets.value, (part) => {
15334
- return vue.openBlock(), vue.createElementBlock("div", {
15335
- key: part.partName,
15336
- class: "part",
15337
- onClick: ($event) => select(part),
15338
- textContent: vue.toDisplayString(part.caption)
15339
- }, null, 8, _hoisted_6$1);
15340
- }), 128))
15341
- ])
15342
- ])
15318
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(customWidgets.value, (group) => {
15319
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
15320
+ vue.createElementVNode("div", {
15321
+ class: "mb-8 section-title",
15322
+ textContent: vue.toDisplayString(group.caption)
15323
+ }, null, 8, _hoisted_5$1),
15324
+ vue.createElementVNode("div", _hoisted_6$1, [
15325
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(group.partDefinitions, (part) => {
15326
+ return vue.openBlock(), vue.createElementBlock("div", {
15327
+ key: part.partName,
15328
+ class: "part w-200",
15329
+ onClick: ($event) => select(part),
15330
+ textContent: vue.toDisplayString(part.caption)
15331
+ }, null, 8, _hoisted_7$1);
15332
+ }), 128))
15333
+ ])
15334
+ ]);
15335
+ }), 256))
15343
15336
  ])
15344
15337
  ]),
15345
15338
  _: 1
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.36",
4
+ "version": "1.0.0-alpha.38",
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.36"
33
+ "@g1cloud/page-builder-viewer": "1.0.0-alpha.38"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^20.12.7",