@g1cloud/page-builder-editor 1.0.0-alpha.70 → 1.0.0-alpha.72

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.
package/css/canvas.scss CHANGED
@@ -6,6 +6,7 @@
6
6
  width: 0;
7
7
  height: 100%;
8
8
  padding: 20px;
9
+ outline: none;
9
10
  overflow: auto;
10
11
  }
11
12
 
@@ -17,6 +17,7 @@
17
17
  display: flex;
18
18
  flex-direction: column;
19
19
  width: 100%;
20
+ background-color: #fff;
20
21
 
21
22
  &.selected::before {
22
23
  content: "";
@@ -6,18 +6,15 @@
6
6
  background-repeat: no-repeat;
7
7
  background-size: cover;
8
8
  outline: 1px dashed #ccc;
9
- background-color: #fff;
9
+
10
+ &:empty {
11
+ background-color: #fff;
12
+ }
10
13
 
11
14
  &:hover:not(:has(.pb-block:hover)) {
12
15
  background-color: #f0f0f0;
13
16
  }
14
17
 
15
- //&.selected {
16
- // outline: 2px solid #4998f8;
17
- // outline-offset: -2px;
18
- // z-index: 999;
19
- //}
20
-
21
18
  &.selected::before {
22
19
  content: "";
23
20
  position: absolute;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, withDirectives, unref, createVNode } from "vue";
2
2
  import { vT, BSTextInput } from "@g1cloud/bluesea";
3
- import { P as PbColorPicker } from "./index-BPFPSrrb.js";
3
+ import { P as PbColorPicker } from "./index-DzZG-nX6.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-color" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _hoisted_3 = { class: "bs-layout-horizontal flex-align-center color" };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, withDirectives, unref, createTextVNode, defineAsyncComponent } from "vue";
2
2
  import { useModal, vT } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-BPFPSrrb.js";
3
+ import { u as usePageBuilderEditor } from "./index-DzZG-nX6.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-html flex-align-center" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, withDirectives, unref, createTextVNode, toDisplayString, createVNode, createCommentVNode, Fragment } from "vue";
2
- import { u as usePageBuilderEditor, C as ChangePropertyCommand } from "./index-BPFPSrrb.js";
2
+ import { u as usePageBuilderEditor, C as ChangePropertyCommand } from "./index-DzZG-nX6.js";
3
3
  import { useModal, vT, BSButton, BSMultiLangTextInput, showNotification } from "@g1cloud/bluesea";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-image" };
5
5
  const _hoisted_2 = { class: "title" };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, withDirectives, unref, createBlock } from "vue";
2
2
  import { vT, BSMultiLangTextArea, BSTextArea } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-BPFPSrrb.js";
3
+ import { u as usePageBuilderEditor } from "./index-DzZG-nX6.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-multiline-text" };
5
5
  const _hoisted_2 = { class: "title" };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, withDirectives, unref, createBlock } from "vue";
2
2
  import { vT, BSMultiLangTextInput, BSTextInput } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-BPFPSrrb.js";
3
+ import { u as usePageBuilderEditor } from "./index-DzZG-nX6.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 _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, openBlock, createElementBlock, createElementVNode, withDirectives, unref } from "vue";
2
2
  import { useModal, vT } from "@g1cloud/bluesea";
3
- import { s as selectYoutubeVideo } from "./index-BPFPSrrb.js";
3
+ import { s as selectYoutubeVideo } from "./index-DzZG-nX6.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 _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, unref, withCtx, createElementVNode, createElementBlock, Fragment, renderList, toDisplayString } from "vue";
2
2
  import { useModalHandle, BSModalFrame } from "@g1cloud/bluesea";
3
- import { w as widgetPartDefinitions } from "./index-BPFPSrrb.js";
3
+ import { w as widgetPartDefinitions } from "./index-DzZG-nX6.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"];
@@ -6957,7 +6957,7 @@ const _sfc_main$a$1 = /* @__PURE__ */ defineComponent({
6957
6957
  innerHTML: styleTag.value
6958
6958
  }, null, 8, ["innerHTML"])) : createCommentVNode("", true),
6959
6959
  withDirectives(createElementVNode("div", {
6960
- class: normalizeClass([classNames.value, "pb-block"]),
6960
+ class: normalizeClass(classNames.value),
6961
6961
  "data-part-id": _ctx.part.partId,
6962
6962
  style: normalizeStyle(style.value)
6963
6963
  }, [
@@ -7003,7 +7003,7 @@ const _sfc_main$9$1 = /* @__PURE__ */ defineComponent({
7003
7003
  innerHTML: styleTag.value
7004
7004
  }, null, 8, ["innerHTML"])) : createCommentVNode("", true),
7005
7005
  withDirectives(createElementVNode("div", {
7006
- class: normalizeClass([classNames.value, "pb-section"]),
7006
+ class: normalizeClass(classNames.value),
7007
7007
  "data-part-id": _ctx.part.partId,
7008
7008
  style: normalizeStyle(style.value)
7009
7009
  }, [
@@ -7533,7 +7533,7 @@ const _sfc_main$3$1 = /* @__PURE__ */ defineComponent({
7533
7533
  }
7534
7534
  });
7535
7535
  const _hoisted_1$1$1 = ["innerHTML"];
7536
- const _hoisted_2$i = { class: "pb-viewer" };
7536
+ const _hoisted_2$h = { class: "pb-viewer" };
7537
7537
  const _sfc_main$2$1 = /* @__PURE__ */ defineComponent({
7538
7538
  __name: "PageBuilderViewer",
7539
7539
  props: {
@@ -7574,7 +7574,7 @@ const _sfc_main$2$1 = /* @__PURE__ */ defineComponent({
7574
7574
  key: 0,
7575
7575
  innerHTML: unref(externalCss)
7576
7576
  }, null, 8, _hoisted_1$1$1)) : createCommentVNode("", true),
7577
- createElementVNode("div", _hoisted_2$i, [
7577
+ createElementVNode("div", _hoisted_2$h, [
7578
7578
  part.value ? (openBlock(), createBlock$1(_sfc_main$3$1, {
7579
7579
  key: 0,
7580
7580
  "is-mobile-page": _ctx.isMobilePage,
@@ -8210,15 +8210,15 @@ class PartManager {
8210
8210
  const defaultPartPropertyEditors = () => {
8211
8211
  return {
8212
8212
  "readonly-text": () => defineAsyncComponent(() => import("./PbPropertyEditorReadonlyText-BJ5qx69O.js")),
8213
- "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-BgQ4kpmo.js")),
8213
+ "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-16gz06lQ.js")),
8214
8214
  "number": () => defineAsyncComponent(() => import("./PbPropertyEditorNumber-B76ArSb5.js")),
8215
8215
  "boolean": () => defineAsyncComponent(() => import("./PbPropertyEditorBoolean-c5CNiTpt.js")),
8216
- "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-B9-aaBcF.js")),
8216
+ "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-Cmn1qGxH.js")),
8217
8217
  "select": () => defineAsyncComponent(() => import("./PbPropertyEditorSelect-B5sfulvx.js")),
8218
- "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-BNKJfa-T.js")),
8219
- "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-3icZAidw.js")),
8220
- "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-CQaImN-U.js")),
8221
- "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-DoRAsJTL.js"))
8218
+ "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-KzGXbFkR.js")),
8219
+ "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-DFz4UHO9.js")),
8220
+ "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-BBQDmW24.js")),
8221
+ "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-BdQ3Y7P6.js"))
8222
8222
  };
8223
8223
  };
8224
8224
  const getPropertyValueOfParts = (parts, propertyName) => {
@@ -8508,7 +8508,7 @@ const useMouseTracker = () => {
8508
8508
  return mouseTracker;
8509
8509
  };
8510
8510
  const _hoisted_1$s = ["data-part-id", "draggable"];
8511
- const _hoisted_2$h = {
8511
+ const _hoisted_2$g = {
8512
8512
  key: 1,
8513
8513
  class: "invalid-widget",
8514
8514
  textContent: "Invalid Widget"
@@ -8938,7 +8938,7 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
8938
8938
  draggable: draggable.value,
8939
8939
  style: normalizeStyle(style.value)
8940
8940
  }, [
8941
- component.value ? (openBlock(), createBlock$1(resolveDynamicComponent(component.value), normalizeProps(mergeProps({ key: 0 }, bind.value)), null, 16)) : (openBlock(), createElementBlock("div", _hoisted_2$h)),
8941
+ component.value ? (openBlock(), createBlock$1(resolveDynamicComponent(component.value), normalizeProps(mergeProps({ key: 0 }, bind.value)), null, 16)) : (openBlock(), createElementBlock("div", _hoisted_2$g)),
8942
8942
  selected.value && _ctx.part.isNestedWidget() ? (openBlock(), createElementBlock("div", {
8943
8943
  key: 2,
8944
8944
  class: "pan-handle",
@@ -9317,7 +9317,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
9317
9317
  }
9318
9318
  });
9319
9319
  const _hoisted_1$o = { class: "group-editor group-editor-position" };
9320
- const _hoisted_2$g = { class: "flex-align-center" };
9320
+ const _hoisted_2$f = { class: "flex-align-center" };
9321
9321
  const _hoisted_3$c = { class: "title" };
9322
9322
  const _hoisted_4$a = { class: "flex-grow-1" };
9323
9323
  const _hoisted_5$7 = { class: "bg-gray-100 py-5 rounded-8" };
@@ -9349,7 +9349,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
9349
9349
  const updateBottom = (value) => updatePropertyValue({ bottom: value });
9350
9350
  return (_ctx, _cache) => {
9351
9351
  return openBlock(), createElementBlock("div", _hoisted_1$o, [
9352
- createElementVNode("div", _hoisted_2$g, [
9352
+ createElementVNode("div", _hoisted_2$f, [
9353
9353
  createElementVNode("div", _hoisted_3$c, [
9354
9354
  withDirectives(createElementVNode("label", null, null, 512), [
9355
9355
  [unref(vT), { key: "pb.prop.position" }]
@@ -9405,7 +9405,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
9405
9405
  }
9406
9406
  });
9407
9407
  const _hoisted_1$n = { class: "group-editor group-editor-size" };
9408
- const _hoisted_2$f = { class: "flex-align-center" };
9408
+ const _hoisted_2$e = { class: "flex-align-center" };
9409
9409
  const _hoisted_3$b = { class: "title" };
9410
9410
  const _hoisted_4$9 = { class: "flex-grow-1 bs-layout-horizontal" };
9411
9411
  const _hoisted_5$6 = { class: "flex-align-center mt-12" };
@@ -9443,7 +9443,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
9443
9443
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9444
9444
  return (_ctx, _cache) => {
9445
9445
  return openBlock(), createElementBlock("div", _hoisted_1$n, [
9446
- createElementVNode("div", _hoisted_2$f, [
9446
+ createElementVNode("div", _hoisted_2$e, [
9447
9447
  createElementVNode("div", _hoisted_3$b, [
9448
9448
  withDirectives(createElementVNode("label", null, null, 512), [
9449
9449
  [unref(vT), { key: "pb.prop.size" }]
@@ -9667,7 +9667,7 @@ var script$4 = {
9667
9667
  }
9668
9668
  };
9669
9669
  const _hoisted_1$m = { class: "vc-alpha" };
9670
- const _hoisted_2$e = { class: "vc-alpha-checkboard-wrap" };
9670
+ const _hoisted_2$d = { class: "vc-alpha-checkboard-wrap" };
9671
9671
  const _hoisted_3$a = /* @__PURE__ */ createElementVNode(
9672
9672
  "div",
9673
9673
  { class: "vc-alpha-picker" },
@@ -9681,7 +9681,7 @@ const _hoisted_4$8 = [
9681
9681
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
9682
9682
  const _component_Checkboard = resolveComponent("Checkboard");
9683
9683
  return openBlock(), createElementBlock("div", _hoisted_1$m, [
9684
- createElementVNode("div", _hoisted_2$e, [
9684
+ createElementVNode("div", _hoisted_2$d, [
9685
9685
  createVNode(_component_Checkboard)
9686
9686
  ]),
9687
9687
  createElementVNode(
@@ -10785,7 +10785,7 @@ var script$3 = {
10785
10785
  }
10786
10786
  };
10787
10787
  const _hoisted_1$l = { class: "vc-editable-input" };
10788
- const _hoisted_2$d = ["aria-labelledby"];
10788
+ const _hoisted_2$c = ["aria-labelledby"];
10789
10789
  const _hoisted_3$9 = ["id", "for"];
10790
10790
  const _hoisted_4$7 = { class: "vc-input__desc" };
10791
10791
  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
@@ -10797,7 +10797,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
10797
10797
  class: "vc-input__input",
10798
10798
  onKeydown: _cache[1] || (_cache[1] = (...args) => $options.handleKeyDown && $options.handleKeyDown(...args)),
10799
10799
  onInput: _cache[2] || (_cache[2] = (...args) => $options.update && $options.update(...args))
10800
- }, null, 40, _hoisted_2$d), [
10800
+ }, null, 40, _hoisted_2$c), [
10801
10801
  [vModelText, $options.val]
10802
10802
  ]),
10803
10803
  createElementVNode("span", {
@@ -10891,7 +10891,7 @@ const _hoisted_1$k = /* @__PURE__ */ createElementVNode(
10891
10891
  -1
10892
10892
  /* HOISTED */
10893
10893
  );
10894
- const _hoisted_2$c = /* @__PURE__ */ createElementVNode(
10894
+ const _hoisted_2$b = /* @__PURE__ */ createElementVNode(
10895
10895
  "div",
10896
10896
  { class: "vc-saturation--black" },
10897
10897
  null,
@@ -10921,7 +10921,7 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
10921
10921
  },
10922
10922
  [
10923
10923
  _hoisted_1$k,
10924
- _hoisted_2$c,
10924
+ _hoisted_2$b,
10925
10925
  createElementVNode(
10926
10926
  "div",
10927
10927
  {
@@ -11070,7 +11070,7 @@ var script$1 = {
11070
11070
  }
11071
11071
  };
11072
11072
  const _hoisted_1$j = ["aria-valuenow"];
11073
- const _hoisted_2$b = /* @__PURE__ */ createElementVNode(
11073
+ const _hoisted_2$a = /* @__PURE__ */ createElementVNode(
11074
11074
  "div",
11075
11075
  { class: "vc-hue-picker" },
11076
11076
  null,
@@ -11078,7 +11078,7 @@ const _hoisted_2$b = /* @__PURE__ */ createElementVNode(
11078
11078
  /* HOISTED */
11079
11079
  );
11080
11080
  const _hoisted_3$7 = [
11081
- _hoisted_2$b
11081
+ _hoisted_2$a
11082
11082
  ];
11083
11083
  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
11084
11084
  return openBlock(), createElementBlock(
@@ -11206,7 +11206,7 @@ var script = {
11206
11206
  }
11207
11207
  };
11208
11208
  const _hoisted_1$i = { class: "vc-sketch-saturation-wrap" };
11209
- const _hoisted_2$a = { class: "vc-sketch-controls" };
11209
+ const _hoisted_2$9 = { class: "vc-sketch-controls" };
11210
11210
  const _hoisted_3$6 = { class: "vc-sketch-sliders" };
11211
11211
  const _hoisted_4$5 = { class: "vc-sketch-hue-wrap" };
11212
11212
  const _hoisted_5$5 = {
@@ -11254,7 +11254,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
11254
11254
  onChange: $options.childChange
11255
11255
  }, null, 8, ["value", "onChange"])
11256
11256
  ]),
11257
- createElementVNode("div", _hoisted_2$a, [
11257
+ createElementVNode("div", _hoisted_2$9, [
11258
11258
  createElementVNode("div", _hoisted_3$6, [
11259
11259
  createElementVNode("div", _hoisted_4$5, [
11260
11260
  createVNode(_component_Hue, {
@@ -11421,7 +11421,7 @@ const _sfc_main$i = defineComponent({
11421
11421
  }
11422
11422
  });
11423
11423
  const _hoisted_1$h = { class: "buttons" };
11424
- const _hoisted_2$9 = { class: "sketch-wrap" };
11424
+ const _hoisted_2$8 = { class: "sketch-wrap" };
11425
11425
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11426
11426
  const _component_Sketch = resolveComponent("Sketch");
11427
11427
  const _directive_click_outside = resolveDirective("click-outside");
@@ -11445,7 +11445,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11445
11445
  createElementVNode("i", { class: "material-icons-outlined" }, "delete", -1)
11446
11446
  ]))) : createCommentVNode("", true)
11447
11447
  ]),
11448
- createElementVNode("div", _hoisted_2$9, [
11448
+ createElementVNode("div", _hoisted_2$8, [
11449
11449
  _ctx.isShowColorPicker ? (openBlock(), createBlock$1(_component_Sketch, {
11450
11450
  key: 0,
11451
11451
  modelValue: _ctx.color,
@@ -11459,7 +11459,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11459
11459
  }
11460
11460
  const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render]]);
11461
11461
  const _hoisted_1$g = { class: "group-editor group-editor-background" };
11462
- const _hoisted_2$8 = { class: "flex-align-center" };
11462
+ const _hoisted_2$7 = { class: "flex-align-center" };
11463
11463
  const _hoisted_3$5 = { class: "title" };
11464
11464
  const _hoisted_4$4 = { class: "bs-layout-horizontal" };
11465
11465
  const _hoisted_5$4 = { class: "color" };
@@ -11498,7 +11498,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
11498
11498
  };
11499
11499
  return (_ctx, _cache) => {
11500
11500
  return openBlock(), createElementBlock("div", _hoisted_1$g, [
11501
- createElementVNode("div", _hoisted_2$8, [
11501
+ createElementVNode("div", _hoisted_2$7, [
11502
11502
  createElementVNode("div", _hoisted_3$5, [
11503
11503
  withDirectives(createElementVNode("label", null, null, 512), [
11504
11504
  [unref(vT), { key: "pb.prop.background" }]
@@ -11537,7 +11537,7 @@ const TopRightCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//
11537
11537
  const BottomLeftCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(180)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11538
11538
  const BottomRightCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(90)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11539
11539
  const _hoisted_1$f = { class: "group-editor group-editor-border" };
11540
- const _hoisted_2$7 = { class: "flex-align-center" };
11540
+ const _hoisted_2$6 = { class: "flex-align-center" };
11541
11541
  const _hoisted_3$4 = { class: "title" };
11542
11542
  const _hoisted_4$3 = { class: "" };
11543
11543
  const _hoisted_5$3 = { class: "sub-title" };
@@ -11594,7 +11594,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
11594
11594
  const updateBorderBottomRightRadius = (value) => updatePropertyValue({ borderBottomRightRadius: value });
11595
11595
  return (_ctx, _cache) => {
11596
11596
  return openBlock(), createElementBlock("div", _hoisted_1$f, [
11597
- createElementVNode("div", _hoisted_2$7, [
11597
+ createElementVNode("div", _hoisted_2$6, [
11598
11598
  createElementVNode("div", _hoisted_3$4, [
11599
11599
  withDirectives(createElementVNode("label", null, null, 512), [
11600
11600
  [unref(vT), { key: "pb.prop.border" }]
@@ -11724,7 +11724,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
11724
11724
  }
11725
11725
  });
11726
11726
  const _hoisted_1$e = { class: "group-editor group-editor-margin" };
11727
- const _hoisted_2$6 = { class: "flex-align-center" };
11727
+ const _hoisted_2$5 = { class: "flex-align-center" };
11728
11728
  const _hoisted_3$3 = { class: "title" };
11729
11729
  const _hoisted_4$2 = { class: "flex-grow-1" };
11730
11730
  const _hoisted_5$2 = { class: "bg-gray-100 py-5 rounded-8" };
@@ -11756,7 +11756,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
11756
11756
  const updateBottom = (value) => updatePropertyValue({ marginBottom: value });
11757
11757
  return (_ctx, _cache) => {
11758
11758
  return openBlock(), createElementBlock("div", _hoisted_1$e, [
11759
- createElementVNode("div", _hoisted_2$6, [
11759
+ createElementVNode("div", _hoisted_2$5, [
11760
11760
  createElementVNode("div", _hoisted_3$3, [
11761
11761
  withDirectives(createElementVNode("label", null, null, 512), [
11762
11762
  [unref(vT), { key: "pb.prop.margin" }]
@@ -11812,7 +11812,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
11812
11812
  }
11813
11813
  });
11814
11814
  const _hoisted_1$d = { class: "group-editor group-editor-padding" };
11815
- const _hoisted_2$5 = { class: "flex-align-center" };
11815
+ const _hoisted_2$4 = { class: "flex-align-center" };
11816
11816
  const _hoisted_3$2 = { class: "title" };
11817
11817
  const _hoisted_4$1 = { class: "flex-grow-1" };
11818
11818
  const _hoisted_5$1 = { class: "bg-gray-100 py-5 rounded-8" };
@@ -11844,7 +11844,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
11844
11844
  const updateBottom = (value) => updatePropertyValue({ paddingBottom: value });
11845
11845
  return (_ctx, _cache) => {
11846
11846
  return openBlock(), createElementBlock("div", _hoisted_1$d, [
11847
- createElementVNode("div", _hoisted_2$5, [
11847
+ createElementVNode("div", _hoisted_2$4, [
11848
11848
  createElementVNode("div", _hoisted_3$2, [
11849
11849
  withDirectives(createElementVNode("label", null, null, 512), [
11850
11850
  [unref(vT), { key: "pb.prop.padding" }]
@@ -12235,7 +12235,7 @@ const defaultWidgetPropertyGroups = () => {
12235
12235
  return [alignSelfGroup(), positionGroup(), sizeGroup(), marginGroup(), paddingGroup(), borderGroup(), backgroundGroup(), commonGroup(), hideParentGroup()];
12236
12236
  };
12237
12237
  const _hoisted_1$c = { class: "group-editor group-editor-media" };
12238
- const _hoisted_2$4 = { class: "title" };
12238
+ const _hoisted_2$3 = { class: "title" };
12239
12239
  const _hoisted_3$1 = {
12240
12240
  key: 0,
12241
12241
  class: "title mt-12"
@@ -12299,7 +12299,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12299
12299
  return (_ctx, _cache) => {
12300
12300
  var _a, _b, _c, _d;
12301
12301
  return openBlock(), createElementBlock("div", _hoisted_1$c, [
12302
- createElementVNode("div", _hoisted_2$4, [
12302
+ createElementVNode("div", _hoisted_2$3, [
12303
12303
  withDirectives(createElementVNode("label", null, null, 512), [
12304
12304
  [unref(vT), { key: "pb.prop.media" }]
12305
12305
  ])
@@ -12757,7 +12757,7 @@ __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
12757
12757
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
12758
12758
  const openWidgetAddModal = (modal, args, callback) => {
12759
12759
  modal.openModal({
12760
- component: defineAsyncComponent(() => import("./PbWidgetAddModal-ChIMw44P.js")),
12760
+ component: defineAsyncComponent(() => import("./PbWidgetAddModal-Cqlbs46k.js")),
12761
12761
  style: {
12762
12762
  width: "80%",
12763
12763
  height: "80%",
@@ -13425,6 +13425,7 @@ const _DeletePartCommand = class _DeletePartCommand {
13425
13425
  __publicField(this, "caption", _DeletePartCommand.CAPTION);
13426
13426
  }
13427
13427
  execute(pageBuilder) {
13428
+ var _a, _b, _c;
13428
13429
  const selected = pageBuilder.context.getSelectedParts();
13429
13430
  if (selected.length === 0) return;
13430
13431
  let partIds;
@@ -13434,6 +13435,15 @@ const _DeletePartCommand = class _DeletePartCommand {
13434
13435
  if (partsToDelete.length === 0) return;
13435
13436
  partIds = partsToDelete.map((part) => part.partId);
13436
13437
  } else {
13438
+ if (selected.length === 1) {
13439
+ if (selected[0].isBlock()) {
13440
+ const block = selected[0];
13441
+ if (((_b = (_a = block.parent) == null ? void 0 : _a.children) == null ? void 0 : _b.length) === 1) {
13442
+ pageBuilder.model.updateModel({ delete: [(_c = block.parent) == null ? void 0 : _c.partId] });
13443
+ return;
13444
+ }
13445
+ }
13446
+ }
13437
13447
  partIds = selected.filter((part) => {
13438
13448
  return !selected.some((v) => part.isChildOf(v));
13439
13449
  }).map((part) => part.partId);
@@ -14395,7 +14405,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
14395
14405
  }
14396
14406
  });
14397
14407
  const _hoisted_1$9 = { class: "pb-toolbar bs-layout-horizontal align-items-center" };
14398
- const _hoisted_2$3 = { class: "bs-layout-horizontal align-items-center" };
14408
+ const _hoisted_2$2 = { class: "bs-layout-horizontal align-items-center" };
14399
14409
  const _hoisted_3 = { class: "mr-8" };
14400
14410
  const _sfc_main$a = /* @__PURE__ */ defineComponent({
14401
14411
  __name: "PbToolbar",
@@ -14447,7 +14457,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
14447
14457
  return (_ctx, _cache) => {
14448
14458
  var _a, _b, _c;
14449
14459
  return openBlock(), createElementBlock("div", _hoisted_1$9, [
14450
- createElementVNode("div", _hoisted_2$3, [
14460
+ createElementVNode("div", _hoisted_2$2, [
14451
14461
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(buttonGroups), (group) => {
14452
14462
  return openBlock(), createBlock$1(_sfc_main$b, {
14453
14463
  key: group.groupId,
@@ -14535,8 +14545,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
14535
14545
  const rowMoved = (event) => {
14536
14546
  var _a, _b, _c, _d, _e, _f;
14537
14547
  let page2 = pageBuilder.context.getSelectedPage();
14538
- const parentPartId = ((_a = event.destParent) == null ? void 0 : _a.partId) || (page2 == null ? void 0 : page2.partId);
14539
- if (!parentPartId) return;
14548
+ const destPartId = ((_a = event.destParent) == null ? void 0 : _a.partId) || (page2 == null ? void 0 : page2.partId);
14549
+ if (!destPartId) return;
14540
14550
  let ok = false;
14541
14551
  if (event.row.isSection()) {
14542
14552
  if ((_b = event.destParent) == null ? void 0 : _b.isPage()) ok = true;
@@ -14551,7 +14561,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
14551
14561
  }
14552
14562
  if (ok) {
14553
14563
  backupPartSelection();
14554
- pageBuilder.model.moveElements(event.row.partId, parentPartId, event.destIndex, void 0, true);
14564
+ pageBuilder.model.moveElements(event.row.partId, destPartId, event.destIndex, void 0, true);
14555
14565
  }
14556
14566
  };
14557
14567
  const selectedRows = computed({
@@ -14645,7 +14655,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
14645
14655
  "key-provider": (part) => part.partId,
14646
14656
  "label-provider": labelProvider,
14647
14657
  class: "max-w-320",
14648
- "dont-change-data-when-rowmoved": "",
14658
+ "dont-change-data-when-row-moved": "",
14649
14659
  "multi-select": "",
14650
14660
  "show-move-button": "",
14651
14661
  onRowMoved: rowMoved
@@ -14691,7 +14701,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
14691
14701
  }
14692
14702
  });
14693
14703
  const _hoisted_1$6 = { class: "pb-sidebar-property-group" };
14694
- const _hoisted_2$2 = {
14704
+ const _hoisted_2$1 = {
14695
14705
  key: 0,
14696
14706
  class: "group-title"
14697
14707
  };
@@ -14710,7 +14720,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
14710
14720
  });
14711
14721
  return (_ctx, _cache) => {
14712
14722
  return openBlock(), createElementBlock("div", _hoisted_1$6, [
14713
- _ctx.group.showGroupName ? (openBlock(), createElementBlock("div", _hoisted_2$2, [
14723
+ _ctx.group.showGroupName ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
14714
14724
  withDirectives(createElementVNode("label", null, null, 512), [
14715
14725
  [unref(vT), { key: _ctx.group.caption }]
14716
14726
  ])
@@ -14826,6 +14836,8 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14826
14836
  const showContextMenu = (event) => {
14827
14837
  var _a, _b;
14828
14838
  if (event.altKey || event.ctrlKey || event.shiftKey) return;
14839
+ const selection = pageBuilder.context.getSelectedParts();
14840
+ if (!selection.length) return;
14829
14841
  event.preventDefault();
14830
14842
  const scale = pageBuilder.scale.value;
14831
14843
  const frame = ((_b = (_a = event.target) == null ? void 0 : _a.ownerDocument.defaultView) == null ? void 0 : _b.frameElement) || void 0;
@@ -14875,7 +14887,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
14875
14887
  };
14876
14888
  }
14877
14889
  });
14878
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget > .invalid-widget {\n display: flex;\n height: 50px;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 18px;\n text-align: center;\n color: #999;\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-media-widget {\n width: 100%;\n}\n\n.pb-media-widget .image {\n width: 100%;\n}\n\n.pb-media-widget .video {\n width: 100%;\n}\n\n.pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14890
+ 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 background-color: #fff;\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}\n\n.pb-section:empty {\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget > .invalid-widget {\n display: flex;\n height: 50px;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 18px;\n text-align: center;\n color: #999;\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-media-widget {\n width: 100%;\n}\n\n.pb-media-widget .image {\n width: 100%;\n}\n\n.pb-media-widget .video {\n width: 100%;\n}\n\n.pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14879
14891
  const _hoisted_1$2 = ["width"];
14880
14892
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
14881
14893
  __name: "PbPageFrame",
@@ -15001,8 +15013,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
15001
15013
  };
15002
15014
  }
15003
15015
  });
15004
- const _hoisted_1$1 = { class: "pb-canvas-wrapper" };
15005
- const _hoisted_2$1 = {
15016
+ const _hoisted_1$1 = {
15006
15017
  key: 1,
15007
15018
  style: { "width": "20px" }
15008
15019
  };
@@ -15026,22 +15037,33 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
15026
15037
  }
15027
15038
  };
15028
15039
  });
15040
+ const canvasRef = ref();
15041
+ watch(() => canvasRef.value, () => {
15042
+ if (canvasRef.value) {
15043
+ pageBuilder.keyHandlers.addDocumentKeyEventListener(canvasRef.value);
15044
+ }
15045
+ }, { immediate: true });
15029
15046
  return (_ctx, _cache) => {
15030
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
15047
+ return openBlock(), createElementBlock("div", {
15048
+ ref_key: "canvasRef",
15049
+ ref: canvasRef,
15050
+ class: "pb-canvas-wrapper",
15051
+ tabindex: "0"
15052
+ }, [
15031
15053
  createElementVNode("div", mergeProps({ class: "pb-canvas" }, style.value), [
15032
15054
  partS.value ? (openBlock(), createBlock$1(_sfc_main$2, {
15033
15055
  key: 0,
15034
15056
  part: partS.value,
15035
15057
  width: 480
15036
15058
  }, null, 8, ["part"])) : createCommentVNode("", true),
15037
- partL.value ? (openBlock(), createElementBlock("div", _hoisted_2$1)) : createCommentVNode("", true),
15059
+ partL.value ? (openBlock(), createElementBlock("div", _hoisted_1$1)) : createCommentVNode("", true),
15038
15060
  partL.value ? (openBlock(), createBlock$1(_sfc_main$2, {
15039
15061
  key: 2,
15040
15062
  part: partL.value,
15041
15063
  width: 1024
15042
15064
  }, null, 8, ["part"])) : createCommentVNode("", true)
15043
15065
  ], 16)
15044
- ]);
15066
+ ], 512);
15045
15067
  };
15046
15068
  }
15047
15069
  });
@@ -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, D } from "./index-BPFPSrrb.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, D } from "./index-DzZG-nX6.js";
2
2
  export {
3
3
  B as BLOCK_TYPE,
4
4
  b as Block,
@@ -6958,7 +6958,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6958
6958
  innerHTML: styleTag.value
6959
6959
  }, null, 8, ["innerHTML"])) : vue.createCommentVNode("", true),
6960
6960
  vue.withDirectives(vue.createElementVNode("div", {
6961
- class: vue.normalizeClass([classNames.value, "pb-block"]),
6961
+ class: vue.normalizeClass(classNames.value),
6962
6962
  "data-part-id": _ctx.part.partId,
6963
6963
  style: vue.normalizeStyle(style.value)
6964
6964
  }, [
@@ -7004,7 +7004,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7004
7004
  innerHTML: styleTag.value
7005
7005
  }, null, 8, ["innerHTML"])) : vue.createCommentVNode("", true),
7006
7006
  vue.withDirectives(vue.createElementVNode("div", {
7007
- class: vue.normalizeClass([classNames.value, "pb-section"]),
7007
+ class: vue.normalizeClass(classNames.value),
7008
7008
  "data-part-id": _ctx.part.partId,
7009
7009
  style: vue.normalizeStyle(style.value)
7010
7010
  }, [
@@ -7534,7 +7534,7 @@ ${_html.style}
7534
7534
  }
7535
7535
  });
7536
7536
  const _hoisted_1$1$1 = ["innerHTML"];
7537
- const _hoisted_2$v = { class: "pb-viewer" };
7537
+ const _hoisted_2$u = { class: "pb-viewer" };
7538
7538
  const _sfc_main$2$1 = /* @__PURE__ */ vue.defineComponent({
7539
7539
  __name: "PageBuilderViewer",
7540
7540
  props: {
@@ -7575,7 +7575,7 @@ ${_html.style}
7575
7575
  key: 0,
7576
7576
  innerHTML: vue.unref(externalCss)
7577
7577
  }, null, 8, _hoisted_1$1$1)) : vue.createCommentVNode("", true),
7578
- vue.createElementVNode("div", _hoisted_2$v, [
7578
+ vue.createElementVNode("div", _hoisted_2$u, [
7579
7579
  part.value ? (vue.openBlock(), vue.createBlock(_sfc_main$3$1, {
7580
7580
  key: 0,
7581
7581
  "is-mobile-page": _ctx.isMobilePage,
@@ -8509,7 +8509,7 @@ ${_html.style}
8509
8509
  return mouseTracker;
8510
8510
  };
8511
8511
  const _hoisted_1$G = ["data-part-id", "draggable"];
8512
- const _hoisted_2$u = {
8512
+ const _hoisted_2$t = {
8513
8513
  key: 1,
8514
8514
  class: "invalid-widget",
8515
8515
  textContent: "Invalid Widget"
@@ -8939,7 +8939,7 @@ ${_html.style}
8939
8939
  draggable: draggable.value,
8940
8940
  style: vue.normalizeStyle(style.value)
8941
8941
  }, [
8942
- component.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(component.value), vue.normalizeProps(vue.mergeProps({ key: 0 }, bind.value)), null, 16)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$u)),
8942
+ component.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(component.value), vue.normalizeProps(vue.mergeProps({ key: 0 }, bind.value)), null, 16)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$t)),
8943
8943
  selected.value && _ctx.part.isNestedWidget() ? (vue.openBlock(), vue.createElementBlock("div", {
8944
8944
  key: 2,
8945
8945
  class: "pan-handle",
@@ -9318,7 +9318,7 @@ ${_html.style}
9318
9318
  }
9319
9319
  });
9320
9320
  const _hoisted_1$C = { class: "group-editor group-editor-position" };
9321
- const _hoisted_2$t = { class: "flex-align-center" };
9321
+ const _hoisted_2$s = { class: "flex-align-center" };
9322
9322
  const _hoisted_3$j = { class: "title" };
9323
9323
  const _hoisted_4$e = { class: "flex-grow-1" };
9324
9324
  const _hoisted_5$a = { class: "bg-gray-100 py-5 rounded-8" };
@@ -9350,7 +9350,7 @@ ${_html.style}
9350
9350
  const updateBottom = (value) => updatePropertyValue({ bottom: value });
9351
9351
  return (_ctx, _cache) => {
9352
9352
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
9353
- vue.createElementVNode("div", _hoisted_2$t, [
9353
+ vue.createElementVNode("div", _hoisted_2$s, [
9354
9354
  vue.createElementVNode("div", _hoisted_3$j, [
9355
9355
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
9356
9356
  [vue.unref(bluesea.vT), { key: "pb.prop.position" }]
@@ -9406,7 +9406,7 @@ ${_html.style}
9406
9406
  }
9407
9407
  });
9408
9408
  const _hoisted_1$B = { class: "group-editor group-editor-size" };
9409
- const _hoisted_2$s = { class: "flex-align-center" };
9409
+ const _hoisted_2$r = { class: "flex-align-center" };
9410
9410
  const _hoisted_3$i = { class: "title" };
9411
9411
  const _hoisted_4$d = { class: "flex-grow-1 bs-layout-horizontal" };
9412
9412
  const _hoisted_5$9 = { class: "flex-align-center mt-12" };
@@ -9444,7 +9444,7 @@ ${_html.style}
9444
9444
  const updateMinHeight = (value) => updatePropertyValue({ minHeight: value });
9445
9445
  return (_ctx, _cache) => {
9446
9446
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$B, [
9447
- vue.createElementVNode("div", _hoisted_2$s, [
9447
+ vue.createElementVNode("div", _hoisted_2$r, [
9448
9448
  vue.createElementVNode("div", _hoisted_3$i, [
9449
9449
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
9450
9450
  [vue.unref(bluesea.vT), { key: "pb.prop.size" }]
@@ -9668,7 +9668,7 @@ ${_html.style}
9668
9668
  }
9669
9669
  };
9670
9670
  const _hoisted_1$A = { class: "vc-alpha" };
9671
- const _hoisted_2$r = { class: "vc-alpha-checkboard-wrap" };
9671
+ const _hoisted_2$q = { class: "vc-alpha-checkboard-wrap" };
9672
9672
  const _hoisted_3$h = /* @__PURE__ */ vue.createElementVNode(
9673
9673
  "div",
9674
9674
  { class: "vc-alpha-picker" },
@@ -9682,7 +9682,7 @@ ${_html.style}
9682
9682
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
9683
9683
  const _component_Checkboard = vue.resolveComponent("Checkboard");
9684
9684
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$A, [
9685
- vue.createElementVNode("div", _hoisted_2$r, [
9685
+ vue.createElementVNode("div", _hoisted_2$q, [
9686
9686
  vue.createVNode(_component_Checkboard)
9687
9687
  ]),
9688
9688
  vue.createElementVNode(
@@ -10786,7 +10786,7 @@ ${_html.style}
10786
10786
  }
10787
10787
  };
10788
10788
  const _hoisted_1$z = { class: "vc-editable-input" };
10789
- const _hoisted_2$q = ["aria-labelledby"];
10789
+ const _hoisted_2$p = ["aria-labelledby"];
10790
10790
  const _hoisted_3$g = ["id", "for"];
10791
10791
  const _hoisted_4$b = { class: "vc-input__desc" };
10792
10792
  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
@@ -10798,7 +10798,7 @@ ${_html.style}
10798
10798
  class: "vc-input__input",
10799
10799
  onKeydown: _cache[1] || (_cache[1] = (...args) => $options.handleKeyDown && $options.handleKeyDown(...args)),
10800
10800
  onInput: _cache[2] || (_cache[2] = (...args) => $options.update && $options.update(...args))
10801
- }, null, 40, _hoisted_2$q), [
10801
+ }, null, 40, _hoisted_2$p), [
10802
10802
  [vue.vModelText, $options.val]
10803
10803
  ]),
10804
10804
  vue.createElementVNode("span", {
@@ -10892,7 +10892,7 @@ ${_html.style}
10892
10892
  -1
10893
10893
  /* HOISTED */
10894
10894
  );
10895
- const _hoisted_2$p = /* @__PURE__ */ vue.createElementVNode(
10895
+ const _hoisted_2$o = /* @__PURE__ */ vue.createElementVNode(
10896
10896
  "div",
10897
10897
  { class: "vc-saturation--black" },
10898
10898
  null,
@@ -10922,7 +10922,7 @@ ${_html.style}
10922
10922
  },
10923
10923
  [
10924
10924
  _hoisted_1$y,
10925
- _hoisted_2$p,
10925
+ _hoisted_2$o,
10926
10926
  vue.createElementVNode(
10927
10927
  "div",
10928
10928
  {
@@ -11071,7 +11071,7 @@ ${_html.style}
11071
11071
  }
11072
11072
  };
11073
11073
  const _hoisted_1$x = ["aria-valuenow"];
11074
- const _hoisted_2$o = /* @__PURE__ */ vue.createElementVNode(
11074
+ const _hoisted_2$n = /* @__PURE__ */ vue.createElementVNode(
11075
11075
  "div",
11076
11076
  { class: "vc-hue-picker" },
11077
11077
  null,
@@ -11079,7 +11079,7 @@ ${_html.style}
11079
11079
  /* HOISTED */
11080
11080
  );
11081
11081
  const _hoisted_3$e = [
11082
- _hoisted_2$o
11082
+ _hoisted_2$n
11083
11083
  ];
11084
11084
  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
11085
11085
  return vue.openBlock(), vue.createElementBlock(
@@ -11207,7 +11207,7 @@ ${_html.style}
11207
11207
  }
11208
11208
  };
11209
11209
  const _hoisted_1$w = { class: "vc-sketch-saturation-wrap" };
11210
- const _hoisted_2$n = { class: "vc-sketch-controls" };
11210
+ const _hoisted_2$m = { class: "vc-sketch-controls" };
11211
11211
  const _hoisted_3$d = { class: "vc-sketch-sliders" };
11212
11212
  const _hoisted_4$9 = { class: "vc-sketch-hue-wrap" };
11213
11213
  const _hoisted_5$8 = {
@@ -11255,7 +11255,7 @@ ${_html.style}
11255
11255
  onChange: $options.childChange
11256
11256
  }, null, 8, ["value", "onChange"])
11257
11257
  ]),
11258
- vue.createElementVNode("div", _hoisted_2$n, [
11258
+ vue.createElementVNode("div", _hoisted_2$m, [
11259
11259
  vue.createElementVNode("div", _hoisted_3$d, [
11260
11260
  vue.createElementVNode("div", _hoisted_4$9, [
11261
11261
  vue.createVNode(_component_Hue, {
@@ -11422,7 +11422,7 @@ ${_html.style}
11422
11422
  }
11423
11423
  });
11424
11424
  const _hoisted_1$v = { class: "buttons" };
11425
- const _hoisted_2$m = { class: "sketch-wrap" };
11425
+ const _hoisted_2$l = { class: "sketch-wrap" };
11426
11426
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
11427
11427
  const _component_Sketch = vue.resolveComponent("Sketch");
11428
11428
  const _directive_click_outside = vue.resolveDirective("click-outside");
@@ -11446,7 +11446,7 @@ ${_html.style}
11446
11446
  vue.createElementVNode("i", { class: "material-icons-outlined" }, "delete", -1)
11447
11447
  ]))) : vue.createCommentVNode("", true)
11448
11448
  ]),
11449
- vue.createElementVNode("div", _hoisted_2$m, [
11449
+ vue.createElementVNode("div", _hoisted_2$l, [
11450
11450
  _ctx.isShowColorPicker ? (vue.openBlock(), vue.createBlock(_component_Sketch, {
11451
11451
  key: 0,
11452
11452
  modelValue: _ctx.color,
@@ -11460,7 +11460,7 @@ ${_html.style}
11460
11460
  }
11461
11461
  const PbColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render]]);
11462
11462
  const _hoisted_1$u = { class: "group-editor group-editor-background" };
11463
- const _hoisted_2$l = { class: "flex-align-center" };
11463
+ const _hoisted_2$k = { class: "flex-align-center" };
11464
11464
  const _hoisted_3$c = { class: "title" };
11465
11465
  const _hoisted_4$8 = { class: "bs-layout-horizontal" };
11466
11466
  const _hoisted_5$7 = { class: "color" };
@@ -11499,7 +11499,7 @@ ${_html.style}
11499
11499
  };
11500
11500
  return (_ctx, _cache) => {
11501
11501
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$u, [
11502
- vue.createElementVNode("div", _hoisted_2$l, [
11502
+ vue.createElementVNode("div", _hoisted_2$k, [
11503
11503
  vue.createElementVNode("div", _hoisted_3$c, [
11504
11504
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
11505
11505
  [vue.unref(bluesea.vT), { key: "pb.prop.background" }]
@@ -11538,7 +11538,7 @@ ${_html.style}
11538
11538
  const BottomLeftCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(180)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11539
11539
  const BottomRightCornerIcon = "data:image/svg+xml,%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Transformed%20by:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23000000'%20transform='rotate(90)'%3e%3cg%20id='SVGRepo_bgCarrier'%20stroke-width='0'/%3e%3cg%20id='SVGRepo_tracerCarrier'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cg%20id='SVGRepo_iconCarrier'%3e%3cg%3e%3cpath%20fill='none'%20d='M0%200H24V24H0z'/%3e%3cpath%20d='M21%2019v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2h-2v-2h2zm-4%200v2H7v-2h2zm-4%200v2H3v-2h2zm16-4v2h-2v-2h2zM5%2015v2H3v-2h2zm0-4v2H3v-2h2zm11-8c2.687%200%204.882%202.124%204.995%204.783L21%208v5h-2V8c0-1.591-1.255-2.903-2.824-2.995L16%205h-5V3h5zM5%207v2H3V7h2zm0-4v2H3V3h2zm4%200v2H7V3h2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
11540
11540
  const _hoisted_1$t = { class: "group-editor group-editor-border" };
11541
- const _hoisted_2$k = { class: "flex-align-center" };
11541
+ const _hoisted_2$j = { class: "flex-align-center" };
11542
11542
  const _hoisted_3$b = { class: "title" };
11543
11543
  const _hoisted_4$7 = { class: "" };
11544
11544
  const _hoisted_5$6 = { class: "sub-title" };
@@ -11595,7 +11595,7 @@ ${_html.style}
11595
11595
  const updateBorderBottomRightRadius = (value) => updatePropertyValue({ borderBottomRightRadius: value });
11596
11596
  return (_ctx, _cache) => {
11597
11597
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$t, [
11598
- vue.createElementVNode("div", _hoisted_2$k, [
11598
+ vue.createElementVNode("div", _hoisted_2$j, [
11599
11599
  vue.createElementVNode("div", _hoisted_3$b, [
11600
11600
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
11601
11601
  [vue.unref(bluesea.vT), { key: "pb.prop.border" }]
@@ -11725,7 +11725,7 @@ ${_html.style}
11725
11725
  }
11726
11726
  });
11727
11727
  const _hoisted_1$s = { class: "group-editor group-editor-margin" };
11728
- const _hoisted_2$j = { class: "flex-align-center" };
11728
+ const _hoisted_2$i = { class: "flex-align-center" };
11729
11729
  const _hoisted_3$a = { class: "title" };
11730
11730
  const _hoisted_4$6 = { class: "flex-grow-1" };
11731
11731
  const _hoisted_5$5 = { class: "bg-gray-100 py-5 rounded-8" };
@@ -11757,7 +11757,7 @@ ${_html.style}
11757
11757
  const updateBottom = (value) => updatePropertyValue({ marginBottom: value });
11758
11758
  return (_ctx, _cache) => {
11759
11759
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$s, [
11760
- vue.createElementVNode("div", _hoisted_2$j, [
11760
+ vue.createElementVNode("div", _hoisted_2$i, [
11761
11761
  vue.createElementVNode("div", _hoisted_3$a, [
11762
11762
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
11763
11763
  [vue.unref(bluesea.vT), { key: "pb.prop.margin" }]
@@ -11813,7 +11813,7 @@ ${_html.style}
11813
11813
  }
11814
11814
  });
11815
11815
  const _hoisted_1$r = { class: "group-editor group-editor-padding" };
11816
- const _hoisted_2$i = { class: "flex-align-center" };
11816
+ const _hoisted_2$h = { class: "flex-align-center" };
11817
11817
  const _hoisted_3$9 = { class: "title" };
11818
11818
  const _hoisted_4$5 = { class: "flex-grow-1" };
11819
11819
  const _hoisted_5$4 = { class: "bg-gray-100 py-5 rounded-8" };
@@ -11845,7 +11845,7 @@ ${_html.style}
11845
11845
  const updateBottom = (value) => updatePropertyValue({ paddingBottom: value });
11846
11846
  return (_ctx, _cache) => {
11847
11847
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$r, [
11848
- vue.createElementVNode("div", _hoisted_2$i, [
11848
+ vue.createElementVNode("div", _hoisted_2$h, [
11849
11849
  vue.createElementVNode("div", _hoisted_3$9, [
11850
11850
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
11851
11851
  [vue.unref(bluesea.vT), { key: "pb.prop.padding" }]
@@ -12236,7 +12236,7 @@ ${_html.style}
12236
12236
  return [alignSelfGroup(), positionGroup(), sizeGroup(), marginGroup(), paddingGroup(), borderGroup(), backgroundGroup(), commonGroup(), hideParentGroup()];
12237
12237
  };
12238
12238
  const _hoisted_1$q = { class: "group-editor group-editor-media" };
12239
- const _hoisted_2$h = { class: "title" };
12239
+ const _hoisted_2$g = { class: "title" };
12240
12240
  const _hoisted_3$8 = {
12241
12241
  key: 0,
12242
12242
  class: "title mt-12"
@@ -12300,7 +12300,7 @@ ${_html.style}
12300
12300
  return (_ctx, _cache) => {
12301
12301
  var _a, _b, _c, _d;
12302
12302
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$q, [
12303
- vue.createElementVNode("div", _hoisted_2$h, [
12303
+ vue.createElementVNode("div", _hoisted_2$g, [
12304
12304
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
12305
12305
  [vue.unref(bluesea.vT), { key: "pb.prop.media" }]
12306
12306
  ])
@@ -13426,6 +13426,7 @@ ${_html.style}
13426
13426
  __publicField(this, "caption", _DeletePartCommand.CAPTION);
13427
13427
  }
13428
13428
  execute(pageBuilder) {
13429
+ var _a, _b, _c;
13429
13430
  const selected = pageBuilder.context.getSelectedParts();
13430
13431
  if (selected.length === 0) return;
13431
13432
  let partIds;
@@ -13435,6 +13436,15 @@ ${_html.style}
13435
13436
  if (partsToDelete.length === 0) return;
13436
13437
  partIds = partsToDelete.map((part) => part.partId);
13437
13438
  } else {
13439
+ if (selected.length === 1) {
13440
+ if (selected[0].isBlock()) {
13441
+ const block = selected[0];
13442
+ if (((_b = (_a = block.parent) == null ? void 0 : _a.children) == null ? void 0 : _b.length) === 1) {
13443
+ pageBuilder.model.updateModel({ delete: [(_c = block.parent) == null ? void 0 : _c.partId] });
13444
+ return;
13445
+ }
13446
+ }
13447
+ }
13438
13448
  partIds = selected.filter((part) => {
13439
13449
  return !selected.some((v) => part.isChildOf(v));
13440
13450
  }).map((part) => part.partId);
@@ -14396,7 +14406,7 @@ ${_html.style}
14396
14406
  }
14397
14407
  });
14398
14408
  const _hoisted_1$n = { class: "pb-toolbar bs-layout-horizontal align-items-center" };
14399
- const _hoisted_2$g = { class: "bs-layout-horizontal align-items-center" };
14409
+ const _hoisted_2$f = { class: "bs-layout-horizontal align-items-center" };
14400
14410
  const _hoisted_3$7 = { class: "mr-8" };
14401
14411
  const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
14402
14412
  __name: "PbToolbar",
@@ -14448,7 +14458,7 @@ ${_html.style}
14448
14458
  return (_ctx, _cache) => {
14449
14459
  var _a, _b, _c;
14450
14460
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [
14451
- vue.createElementVNode("div", _hoisted_2$g, [
14461
+ vue.createElementVNode("div", _hoisted_2$f, [
14452
14462
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(buttonGroups), (group) => {
14453
14463
  return vue.openBlock(), vue.createBlock(_sfc_main$p, {
14454
14464
  key: group.groupId,
@@ -14536,8 +14546,8 @@ ${_html.style}
14536
14546
  const rowMoved = (event) => {
14537
14547
  var _a, _b, _c, _d, _e, _f;
14538
14548
  let page2 = pageBuilder.context.getSelectedPage();
14539
- const parentPartId = ((_a = event.destParent) == null ? void 0 : _a.partId) || (page2 == null ? void 0 : page2.partId);
14540
- if (!parentPartId) return;
14549
+ const destPartId = ((_a = event.destParent) == null ? void 0 : _a.partId) || (page2 == null ? void 0 : page2.partId);
14550
+ if (!destPartId) return;
14541
14551
  let ok = false;
14542
14552
  if (event.row.isSection()) {
14543
14553
  if ((_b = event.destParent) == null ? void 0 : _b.isPage()) ok = true;
@@ -14552,7 +14562,7 @@ ${_html.style}
14552
14562
  }
14553
14563
  if (ok) {
14554
14564
  backupPartSelection();
14555
- pageBuilder.model.moveElements(event.row.partId, parentPartId, event.destIndex, void 0, true);
14565
+ pageBuilder.model.moveElements(event.row.partId, destPartId, event.destIndex, void 0, true);
14556
14566
  }
14557
14567
  };
14558
14568
  const selectedRows = vue.computed({
@@ -14646,7 +14656,7 @@ ${_html.style}
14646
14656
  "key-provider": (part) => part.partId,
14647
14657
  "label-provider": labelProvider,
14648
14658
  class: "max-w-320",
14649
- "dont-change-data-when-rowmoved": "",
14659
+ "dont-change-data-when-row-moved": "",
14650
14660
  "multi-select": "",
14651
14661
  "show-move-button": "",
14652
14662
  onRowMoved: rowMoved
@@ -14692,7 +14702,7 @@ ${_html.style}
14692
14702
  }
14693
14703
  });
14694
14704
  const _hoisted_1$k = { class: "pb-sidebar-property-group" };
14695
- const _hoisted_2$f = {
14705
+ const _hoisted_2$e = {
14696
14706
  key: 0,
14697
14707
  class: "group-title"
14698
14708
  };
@@ -14711,7 +14721,7 @@ ${_html.style}
14711
14721
  });
14712
14722
  return (_ctx, _cache) => {
14713
14723
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, [
14714
- _ctx.group.showGroupName ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$f, [
14724
+ _ctx.group.showGroupName ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$e, [
14715
14725
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
14716
14726
  [vue.unref(bluesea.vT), { key: _ctx.group.caption }]
14717
14727
  ])
@@ -14827,6 +14837,8 @@ ${_html.style}
14827
14837
  const showContextMenu = (event) => {
14828
14838
  var _a, _b;
14829
14839
  if (event.altKey || event.ctrlKey || event.shiftKey) return;
14840
+ const selection = pageBuilder.context.getSelectedParts();
14841
+ if (!selection.length) return;
14830
14842
  event.preventDefault();
14831
14843
  const scale = pageBuilder.scale.value;
14832
14844
  const frame = ((_b = (_a = event.target) == null ? void 0 : _a.ownerDocument.defaultView) == null ? void 0 : _b.frameElement) || void 0;
@@ -14876,7 +14888,7 @@ ${_html.style}
14876
14888
  };
14877
14889
  }
14878
14890
  });
14879
- const canvasStyle = '.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\n}\n\n.pb-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: 100px;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.pb-page .pb-page-content.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-page * {\n box-sizing: border-box;\n}\n\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\n}\n\n.pb-add-widget-button button {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\n}\n\n.pb-section {\n display: flex;\n position: relative;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n outline: 1px dashed #ccc;\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget > .invalid-widget {\n display: flex;\n height: 50px;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 18px;\n text-align: center;\n color: #999;\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-media-widget {\n width: 100%;\n}\n\n.pb-media-widget .image {\n width: 100%;\n}\n\n.pb-media-widget .video {\n width: 100%;\n}\n\n.pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14891
+ 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 background-color: #fff;\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}\n\n.pb-section:empty {\n background-color: #fff;\n}\n\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-section.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.pb-section.pb-section-static:after {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.pb-section-static .pb-widget {\n outline: none;\n}\n\n.pb-block {\n display: flex;\n min-width: 1px;\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n outline: 1px dashed #ccc;\n}\n\n.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\n}\n\n.pb-block.selected::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid #4998f8;\n z-index: 999;\n pointer-events: none;\n}\n\n.pb-widget {\n position: relative;\n outline: 1px dashed #ccc;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: auto !important;\n min-height: 50px;\n}\n\n.pb-widget * {\n pointer-events: none;\n}\n\n.pb-widget > .invalid-widget {\n display: flex;\n height: 50px;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 18px;\n text-align: center;\n color: #999;\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-media-widget {\n width: 100%;\n}\n\n.pb-media-widget .image {\n width: 100%;\n}\n\n.pb-media-widget .video {\n width: 100%;\n}\n\n.pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n\n.pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n\n.pb-youtube-widget {\n width: 100%;\n}\n\n.pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n\n.pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-container-widget {\n width: 100%;\n}\n\n.pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n\n.pb-product-list-widget {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n\n.pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n\n.pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n\n.pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n\n.pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n\n.pb-product-list-widget .product-wrapper .empty span {\n font-size: 40px;\n color: #999;\n line-height: 200px;\n vertical-align: middle;\n}\n\n@media (max-width: 768px) {\n .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n\n.mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n\n.pb-login-widget {\n height: 200px;\n text-align: center;\n}\n\n.pb-login-widget h3 {\n padding: 0;\n margin: 0;\n font-size: 32px;\n font-weight: bold;\n color: #ccc;\n line-height: 200px;\n vertical-align: middle;\n}\n\nbody {\n margin: 0;\n padding: 0;\n background-color: #aaa;\n overflow: hidden;\n}\n\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\n}\n\n.pb-add-section-handle {\n position: relative;\n text-align: center;\n cursor: pointer;\n z-index: 5;\n height: 0;\n}\n\n.pb-add-section-handle.top::before, .pb-add-section-handle.bottom::before, .pb-add-section-handle.middle::before {\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.pb-add-section-handle.bottom {\n bottom: -32px;\n}\n\n.pb-add-section-handle:hover.top::before, .pb-add-section-handle:hover.bottom::before, .pb-add-section-handle:hover.middle::before,\n.pb-add-section-handle:hover > i {\n opacity: 1;\n}\n\n.pb-add-section-handle > i {\n font-style: normal;\n vertical-align: middle;\n position: absolute;\n top: 50%;\n left: 0;\n font-size: 2rem;\n transform: translate(-50%, -50%);\n opacity: 0.2;\n}';
14880
14892
  const _hoisted_1$g = ["width"];
14881
14893
  const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14882
14894
  __name: "PbPageFrame",
@@ -15002,8 +15014,7 @@ ${_html.style}
15002
15014
  };
15003
15015
  }
15004
15016
  });
15005
- const _hoisted_1$f = { class: "pb-canvas-wrapper" };
15006
- const _hoisted_2$e = {
15017
+ const _hoisted_1$f = {
15007
15018
  key: 1,
15008
15019
  style: { "width": "20px" }
15009
15020
  };
@@ -15027,22 +15038,33 @@ ${_html.style}
15027
15038
  }
15028
15039
  };
15029
15040
  });
15041
+ const canvasRef = vue.ref();
15042
+ vue.watch(() => canvasRef.value, () => {
15043
+ if (canvasRef.value) {
15044
+ pageBuilder.keyHandlers.addDocumentKeyEventListener(canvasRef.value);
15045
+ }
15046
+ }, { immediate: true });
15030
15047
  return (_ctx, _cache) => {
15031
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
15048
+ return vue.openBlock(), vue.createElementBlock("div", {
15049
+ ref_key: "canvasRef",
15050
+ ref: canvasRef,
15051
+ class: "pb-canvas-wrapper",
15052
+ tabindex: "0"
15053
+ }, [
15032
15054
  vue.createElementVNode("div", vue.mergeProps({ class: "pb-canvas" }, style.value), [
15033
15055
  partS.value ? (vue.openBlock(), vue.createBlock(_sfc_main$g, {
15034
15056
  key: 0,
15035
15057
  part: partS.value,
15036
15058
  width: 480
15037
15059
  }, null, 8, ["part"])) : vue.createCommentVNode("", true),
15038
- partL.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$e)) : vue.createCommentVNode("", true),
15060
+ partL.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f)) : vue.createCommentVNode("", true),
15039
15061
  partL.value ? (vue.openBlock(), vue.createBlock(_sfc_main$g, {
15040
15062
  key: 2,
15041
15063
  part: partL.value,
15042
15064
  width: 1024
15043
15065
  }, null, 8, ["part"])) : vue.createCommentVNode("", true)
15044
15066
  ], 16)
15045
- ]);
15067
+ ], 512);
15046
15068
  };
15047
15069
  }
15048
15070
  });
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.70",
4
+ "version": "1.0.0-alpha.72",
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.70"
33
+ "@g1cloud/page-builder-viewer": "1.0.0-alpha.72"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^20.12.7",