@g1cloud/page-builder-editor 1.0.0-alpha.91 → 1.0.0-alpha.92

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.
@@ -53,6 +53,10 @@
53
53
  .pb-page .pb-section .pb-block .pb-media-widget {
54
54
  width: 100%;
55
55
  }
56
+ .pb-page .pb-section .pb-block .pb-media-widget .image-container {
57
+ margin: 0;
58
+ padding: 0;
59
+ }
56
60
  .pb-page .pb-section .pb-block .pb-media-widget .image {
57
61
  width: 100%;
58
62
  }
@@ -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-CCBt1Q2v.js";
3
+ import { P as PbColorPicker } from "./index-BU6dS8qI.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, createVNode } from "vue";
2
2
  import { vT, BSTextInput } from "@g1cloud/bluesea";
3
- import { t as toCssLength } from "./index-CCBt1Q2v.js";
3
+ import { t as toCssLength } from "./index-BU6dS8qI.js";
4
4
  const _hoisted_1 = { class: "property-editor property-editor-number 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, createTextVNode, defineAsyncComponent } from "vue";
2
2
  import { useModal, vT } from "@g1cloud/bluesea";
3
- import { u as usePageBuilderEditor } from "./index-CCBt1Q2v.js";
3
+ import { u as usePageBuilderEditor } from "./index-BU6dS8qI.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-CCBt1Q2v.js";
2
+ import { u as usePageBuilderEditor, C as ChangePropertyCommand } from "./index-BU6dS8qI.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-CCBt1Q2v.js";
3
+ import { u as usePageBuilderEditor } from "./index-BU6dS8qI.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-CCBt1Q2v.js";
3
+ import { u as usePageBuilderEditor } from "./index-BU6dS8qI.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-CCBt1Q2v.js";
3
+ import { s as selectYoutubeVideo } from "./index-BU6dS8qI.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-CCBt1Q2v.js";
3
+ import { w as widgetPartDefinitions } from "./index-BU6dS8qI.js";
4
4
  const _hoisted_1 = { class: "bs-layout-vertical pb-part-add-modal" };
5
5
  const _hoisted_2 = { class: "bs-layout-horizontal-wrap ml-16 mb-8 gap-8" };
6
6
  const _hoisted_3 = ["onClick", "textContent"];
@@ -1,8 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { ref, defineComponent, computed, openBlock, createElementBlock, Fragment, createElementVNode, normalizeStyle, createCommentVNode, toDisplayString, createBlock as createBlock$1, resolveDynamicComponent, watch, onMounted, onBeforeUnmount, unref, provide, inject, renderList, normalizeProps, mergeProps, normalizeClass, withDirectives, withCtx, vShow, reactive, defineAsyncComponent, createVNode, resolveComponent, vModelText, resolveDirective, withModifiers, renderSlot, guardReactiveProps, createTextVNode, markRaw, toHandlers, Teleport } from "vue";
5
- import { notNull, vT, BSTextInput, vClickOutside, useModal, BSButton, BSMultiLangTextInput, showNotification, BSSelect, BSTree, useContextMenu, i18n, BSHorizontalLayoutResizer } from "@g1cloud/bluesea";
4
+ import { ref, defineComponent, computed, openBlock, createElementBlock, Fragment, createBlock as createBlock$1, resolveDynamicComponent, withCtx, createElementVNode, normalizeStyle, createCommentVNode, toDisplayString, watch, onMounted, onBeforeUnmount, unref, provide, inject, renderList, normalizeProps, mergeProps, normalizeClass, withDirectives, vShow, reactive, defineAsyncComponent, createVNode, resolveComponent, vModelText, resolveDirective, withModifiers, renderSlot, guardReactiveProps, createTextVNode, markRaw, toHandlers, Teleport } from "vue";
5
+ import { notNull, vT, BSTextInput, vClickOutside, useModal, BSButton, BSMultiLangTextInput, BSSelect, showNotification, BSTree, useContextMenu, i18n, BSHorizontalLayoutResizer } from "@g1cloud/bluesea";
6
6
  import YouTube from "vue3-youtube";
7
7
  const create$5 = () => /* @__PURE__ */ new Map();
8
8
  const copy = (m) => {
@@ -7101,13 +7101,15 @@ const _sfc_main$9$1 = /* @__PURE__ */ defineComponent({
7101
7101
  const _hoisted_1$7$1 = ["href", "target"];
7102
7102
  const _hoisted_2$3$1 = ["alt", "src"];
7103
7103
  const _hoisted_3$d = ["alt", "src"];
7104
- const _hoisted_4$b = ["poster"];
7105
- const _hoisted_5$8 = ["src"];
7106
- const _hoisted_6$8 = {
7104
+ const _hoisted_4$b = ["alt", "src"];
7105
+ const _hoisted_5$8 = ["alt", "src"];
7106
+ const _hoisted_6$8 = ["poster"];
7107
+ const _hoisted_7$7 = ["src"];
7108
+ const _hoisted_8$7 = {
7107
7109
  key: 1,
7108
7110
  class: "placeholder"
7109
7111
  };
7110
- const _hoisted_7$7 = { class: "font-icon" };
7112
+ const _hoisted_9$4 = { class: "font-icon" };
7111
7113
  const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
7112
7114
  __name: "PbMediaWidget",
7113
7115
  props: {
@@ -7117,6 +7119,12 @@ const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
7117
7119
  setup(__props) {
7118
7120
  const props = __props;
7119
7121
  const pageBuilder = usePageBuilder();
7122
+ const validTags = ["div", "h1", "h2", "h3", "h4", "h5", "h6", "p"];
7123
+ const tag = computed(() => {
7124
+ var _a;
7125
+ const _tag = (_a = props.part.properties) == null ? void 0 : _a.tag;
7126
+ return validTags.includes(_tag) ? _tag : "";
7127
+ });
7120
7128
  const media = computed(() => {
7121
7129
  var _a;
7122
7130
  return (_a = props.part.properties) == null ? void 0 : _a.media;
@@ -7153,19 +7161,54 @@ const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
7153
7161
  href: (_b = _ctx.part.properties) == null ? void 0 : _b.link,
7154
7162
  target: (_c = _ctx.part.properties) == null ? void 0 : _c.linkTarget
7155
7163
  }, [
7156
- createElementVNode("img", {
7164
+ tag.value ? (openBlock(), createBlock$1(resolveDynamicComponent(tag.value), {
7165
+ key: 0,
7166
+ class: "image-container"
7167
+ }, {
7168
+ default: withCtx(() => {
7169
+ var _a2;
7170
+ return [
7171
+ createElementVNode("img", {
7172
+ alt: altText.value,
7173
+ src: ((_a2 = _ctx.part.properties) == null ? void 0 : _a2.media).fileUrl,
7174
+ style: normalizeStyle(style.value),
7175
+ class: "image"
7176
+ }, null, 12, _hoisted_2$3$1)
7177
+ ];
7178
+ }),
7179
+ _: 1
7180
+ })) : (openBlock(), createElementBlock("img", {
7181
+ key: 1,
7157
7182
  alt: altText.value,
7158
7183
  src: ((_d = _ctx.part.properties) == null ? void 0 : _d.media).fileUrl,
7159
7184
  style: normalizeStyle(style.value),
7160
7185
  class: "image"
7161
- }, null, 12, _hoisted_2$3$1)
7162
- ], 8, _hoisted_1$7$1)) : (openBlock(), createElementBlock("img", {
7163
- key: 1,
7164
- alt: altText.value,
7165
- src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).fileUrl,
7166
- style: normalizeStyle(style.value),
7167
- class: "image"
7168
- }, null, 12, _hoisted_3$d))
7186
+ }, null, 12, _hoisted_3$d))
7187
+ ], 8, _hoisted_1$7$1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
7188
+ tag.value ? (openBlock(), createBlock$1(resolveDynamicComponent(tag.value), {
7189
+ key: 0,
7190
+ class: "image-container"
7191
+ }, {
7192
+ default: withCtx(() => {
7193
+ var _a2;
7194
+ return [
7195
+ createElementVNode("img", {
7196
+ alt: altText.value,
7197
+ src: ((_a2 = _ctx.part.properties) == null ? void 0 : _a2.media).fileUrl,
7198
+ style: normalizeStyle(style.value),
7199
+ class: "image"
7200
+ }, null, 12, _hoisted_4$b)
7201
+ ];
7202
+ }),
7203
+ _: 1
7204
+ })) : (openBlock(), createElementBlock("img", {
7205
+ key: 1,
7206
+ alt: altText.value,
7207
+ src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).fileUrl,
7208
+ style: normalizeStyle(style.value),
7209
+ class: "image"
7210
+ }, null, 12, _hoisted_5$8))
7211
+ ], 64))
7169
7212
  ], 64)) : media.value.mediaType === "Video" ? (openBlock(), createElementBlock("video", {
7170
7213
  key: 1,
7171
7214
  ref: "video",
@@ -7175,10 +7218,10 @@ const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
7175
7218
  }, [
7176
7219
  createElementVNode("source", {
7177
7220
  src: `${media.value.fileUrl}#t=0.01`
7178
- }, null, 8, _hoisted_5$8)
7179
- ], 8, _hoisted_4$b)) : createCommentVNode("", true)
7180
- ], 64)) : _ctx.placeholder ? (openBlock(), createElementBlock("div", _hoisted_6$8, [
7181
- createElementVNode("span", _hoisted_7$7, toDisplayString(placeholderIcon.value), 1)
7221
+ }, null, 8, _hoisted_7$7)
7222
+ ], 8, _hoisted_6$8)) : createCommentVNode("", true)
7223
+ ], 64)) : _ctx.placeholder ? (openBlock(), createElementBlock("div", _hoisted_8$7, [
7224
+ createElementVNode("span", _hoisted_9$4, toDisplayString(placeholderIcon.value), 1)
7182
7225
  ])) : createCommentVNode("", true);
7183
7226
  };
7184
7227
  }
@@ -8516,16 +8559,16 @@ class PartManager {
8516
8559
  const defaultPartPropertyEditors = () => {
8517
8560
  return {
8518
8561
  "readonly-text": () => defineAsyncComponent(() => import("./PbPropertyEditorReadonlyText-BJ5qx69O.js")),
8519
- "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-B5r8G8fI.js")),
8562
+ "text": () => defineAsyncComponent(() => import("./PbPropertyEditorText-Clss82Du.js")),
8520
8563
  "number": () => defineAsyncComponent(() => import("./PbPropertyEditorNumber-B76ArSb5.js")),
8521
8564
  "boolean": () => defineAsyncComponent(() => import("./PbPropertyEditorBoolean-c5CNiTpt.js")),
8522
- "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-DUoOHlMN.js")),
8565
+ "multiline-text": () => defineAsyncComponent(() => import("./PbPropertyEditorMultilineText-DMBS1a7P.js")),
8523
8566
  "select": () => defineAsyncComponent(() => import("./PbPropertyEditorSelect-B5sfulvx.js")),
8524
- "css-length": () => defineAsyncComponent(() => import("./PbPropertyEditorCssLength-CK9dhVae.js")),
8525
- "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-D3UNw-Cm.js")),
8526
- "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-DW132L3K.js")),
8527
- "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-B6c60u8P.js")),
8528
- "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-CpeWuqMo.js"))
8567
+ "css-length": () => defineAsyncComponent(() => import("./PbPropertyEditorCssLength-BFWU-ySt.js")),
8568
+ "color": () => defineAsyncComponent(() => import("./PbPropertyEditorColor-C50t8sK7.js")),
8569
+ "image": () => defineAsyncComponent(() => import("./PbPropertyEditorImage-DpgO4tVs.js")),
8570
+ "html": () => defineAsyncComponent(() => import("./PbPropertyEditorHtml-VL8HtKGb.js")),
8571
+ "youtube": () => defineAsyncComponent(() => import("./PbPropertyEditorYoutube-B6Lmr4k5.js"))
8529
8572
  };
8530
8573
  };
8531
8574
  const getPropertyValueOfParts = (parts, propertyName) => {
@@ -9840,7 +9883,7 @@ const _hoisted_5$6 = { class: "flex-align-center mt-12" };
9840
9883
  const _hoisted_6$6 = { class: "title" };
9841
9884
  const _hoisted_7$5 = { class: "flex-grow-1 bs-layout-horizontal" };
9842
9885
  const _hoisted_8$5 = { class: "flex-align-center mt-12" };
9843
- const _hoisted_9$2 = { class: "title" };
9886
+ const _hoisted_9$3 = { class: "title" };
9844
9887
  const _hoisted_10$2 = { class: "flex-grow-1 bs-layout-horizontal" };
9845
9888
  const _sfc_main$j = /* @__PURE__ */ defineComponent({
9846
9889
  __name: "PbPropertyGroupEditorSize",
@@ -9914,7 +9957,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
9914
9957
  ])
9915
9958
  ]),
9916
9959
  createElementVNode("div", _hoisted_8$5, [
9917
- createElementVNode("div", _hoisted_9$2, [
9960
+ createElementVNode("div", _hoisted_9$3, [
9918
9961
  withDirectives(createElementVNode("label", null, null, 512), [
9919
9962
  [unref(vT), { key: "pb.prop.minSize" }]
9920
9963
  ])
@@ -11647,7 +11690,7 @@ const _hoisted_8$4 = {
11647
11690
  key: 0,
11648
11691
  class: "vc-sketch-field"
11649
11692
  };
11650
- const _hoisted_9$1 = { class: "vc-sketch-field--double" };
11693
+ const _hoisted_9$2 = { class: "vc-sketch-field--double" };
11651
11694
  const _hoisted_10$1 = { class: "vc-sketch-field--single" };
11652
11695
  const _hoisted_11$1 = { class: "vc-sketch-field--single" };
11653
11696
  const _hoisted_12$1 = { class: "vc-sketch-field--single" };
@@ -11708,7 +11751,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
11708
11751
  ]),
11709
11752
  !$props.disableFields ? (openBlock(), createElementBlock("div", _hoisted_8$4, [
11710
11753
  createCommentVNode(" rgba "),
11711
- createElementVNode("div", _hoisted_9$1, [
11754
+ createElementVNode("div", _hoisted_9$2, [
11712
11755
  createVNode(_component_EdIn, {
11713
11756
  label: "hex",
11714
11757
  value: $options.hex,
@@ -11972,7 +12015,7 @@ const _hoisted_5$3 = { class: "sub-title" };
11972
12015
  const _hoisted_6$3 = { class: "color" };
11973
12016
  const _hoisted_7$3 = { class: "mt-8" };
11974
12017
  const _hoisted_8$3 = { class: "sub-title" };
11975
- const _hoisted_9 = { class: "flex-grow-1 mt-4" };
12018
+ const _hoisted_9$1 = { class: "flex-grow-1 mt-4" };
11976
12019
  const _hoisted_10 = { class: "bg-gray-100 py-5 rounded-8" };
11977
12020
  const _hoisted_11 = { class: "text-center" };
11978
12021
  const _hoisted_12 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
@@ -12058,7 +12101,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
12058
12101
  [unref(vT), { key: "pb.prop.borderWidth" }]
12059
12102
  ])
12060
12103
  ]),
12061
- createElementVNode("div", _hoisted_9, [
12104
+ createElementVNode("div", _hoisted_9$1, [
12062
12105
  createElementVNode("div", _hoisted_10, [
12063
12106
  createElementVNode("div", _hoisted_11, [
12064
12107
  createVNode(unref(BSTextInput), {
@@ -12718,6 +12761,7 @@ const _hoisted_5 = { class: "title mt-12" };
12718
12761
  const _hoisted_6 = { class: "title mt-12" };
12719
12762
  const _hoisted_7 = { class: "title mt-12" };
12720
12763
  const _hoisted_8 = { class: "title mt-12" };
12764
+ const _hoisted_9 = { class: "title mt-12" };
12721
12765
  const _sfc_main$d = /* @__PURE__ */ defineComponent({
12722
12766
  __name: "PbPropertyGroupEditorMedia",
12723
12767
  props: {
@@ -12725,6 +12769,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12725
12769
  selectedParts: {}
12726
12770
  },
12727
12771
  setup(__props) {
12772
+ const props = __props;
12728
12773
  const pageBuilder = usePageBuilderEditor();
12729
12774
  const part = pageBuilder.context.getSelectedParts();
12730
12775
  const modal = useModal();
@@ -12763,6 +12808,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12763
12808
  var _a, _b;
12764
12809
  return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.linkTarget;
12765
12810
  });
12811
+ const tagItems = computed(() => {
12812
+ var _a;
12813
+ const prop = (_a = props.group.properties) == null ? void 0 : _a.find((v) => v.propertyName === "tag");
12814
+ return prop ? (prop.params || "").split(",") : [];
12815
+ });
12816
+ const tag = computed(() => {
12817
+ var _a, _b;
12818
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.tag;
12819
+ });
12766
12820
  const thumbnail = computed(() => {
12767
12821
  var _a, _b;
12768
12822
  return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.thumbnail;
@@ -12789,7 +12843,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12789
12843
  ])
12790
12844
  ]),
12791
12845
  ((_a = media.value) == null ? void 0 : _a.fileUrl) ? (openBlock(), createElementBlock("div", _hoisted_3$1, [
12792
- _cache[3] || (_cache[3] = createElementVNode("label", null, "URL", -1)),
12846
+ _cache[4] || (_cache[4] = createElementVNode("label", null, "URL", -1)),
12793
12847
  createElementVNode("div", _hoisted_4, [
12794
12848
  createTextVNode(toDisplayString((_b = media.value) == null ? void 0 : _b.fileUrl) + " ", 1),
12795
12849
  withDirectives(createVNode(unref(BSButton), {
@@ -12843,10 +12897,22 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12843
12897
  width: "100%",
12844
12898
  "onUpdate:modelValue": _cache[1] || (_cache[1] = (value) => updateProperty({ linkTarget: value }))
12845
12899
  }, null, 8, ["model-value"])
12900
+ ]),
12901
+ createElementVNode("div", _hoisted_8, [
12902
+ withDirectives(createElementVNode("label", null, null, 512), [
12903
+ [unref(vT), { key: "pb.prop.tag" }]
12904
+ ])
12905
+ ]),
12906
+ createElementVNode("div", null, [
12907
+ createVNode(unref(BSSelect), {
12908
+ items: tagItems.value,
12909
+ "model-value": tag.value,
12910
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (value) => updateProperty({ tag: value }))
12911
+ }, null, 8, ["items", "model-value"])
12846
12912
  ])
12847
12913
  ], 64)) : createCommentVNode("", true),
12848
12914
  ((_d = media.value) == null ? void 0 : _d.mediaType) === "Video" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
12849
- createElementVNode("div", _hoisted_8, [
12915
+ createElementVNode("div", _hoisted_9, [
12850
12916
  withDirectives(createElementVNode("label", null, null, 512), [
12851
12917
  [unref(vT), { key: "pb.prop.thumbnail" }]
12852
12918
  ])
@@ -12855,7 +12921,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
12855
12921
  createVNode(unref(BSTextInput), {
12856
12922
  "model-value": thumbnail.value,
12857
12923
  width: "100%",
12858
- "onUpdate:modelValue": _cache[2] || (_cache[2] = (value) => updateProperty({ thumbnail: value }))
12924
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = (value) => updateProperty({ thumbnail: value }))
12859
12925
  }, null, 8, ["model-value"])
12860
12926
  ])
12861
12927
  ], 64)) : createCommentVNode("", true)
@@ -13025,6 +13091,12 @@ const widgets = [
13025
13091
  caption: "Link Target",
13026
13092
  propertyType: "text"
13027
13093
  },
13094
+ {
13095
+ propertyName: "tag",
13096
+ caption: "pb.prop.tag",
13097
+ propertyType: "select",
13098
+ params: ",div,h1,h2,h3,h4,h5,h6,p"
13099
+ },
13028
13100
  {
13029
13101
  propertyName: "thumbnail",
13030
13102
  caption: "Thumbnail URL",
@@ -13088,7 +13160,10 @@ const widgets = [
13088
13160
  },
13089
13161
  ...defaultWidgetPropertyGroups()
13090
13162
  ],
13091
- initialProperties: {},
13163
+ initialProperties: {
13164
+ width: "100%",
13165
+ height: "100%"
13166
+ },
13092
13167
  allowsChild: () => false,
13093
13168
  creator: () => _sfc_main$5$1
13094
13169
  },
@@ -13234,7 +13309,7 @@ __publicField(_OpenAddWidgetModalCommand, "COMMAND_ID", "OpenAddWidgetModal");
13234
13309
  let OpenAddWidgetModalCommand = _OpenAddWidgetModalCommand;
13235
13310
  const openWidgetAddModal = (modal, args, callback) => {
13236
13311
  modal.openModal({
13237
- component: defineAsyncComponent(() => import("./PbWidgetAddModal-a4wl7k1z.js")),
13312
+ component: defineAsyncComponent(() => import("./PbWidgetAddModal-BlxH-g-r.js")),
13238
13313
  style: {
13239
13314
  width: "80%",
13240
13315
  height: "80%",
@@ -15406,7 +15481,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
15406
15481
  };
15407
15482
  }
15408
15483
  });
15409
- const canvasStyle = '.pb-page {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n overflow-x: hidden;\n}\n.pb-page .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}\n.pb-page .pb-section .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}\n.pb-page .pb-section .pb-block .pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .text {\n display: block;\n color: #333;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-media-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .video {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-container-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .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.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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@media (max-width: 768px) {\n .pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.pb-page .pb-section .pb-block .mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-page .pb-section .pb-block .pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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.pb-page * {\n box-sizing: border-box;\n}\n.pb-viewer {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow-y: auto;\n}\n.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\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.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\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.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\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.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\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.pb-section:empty {\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\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.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.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.pb-section-static .pb-widget {\n outline: none;\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.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\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.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.pb-widget * {\n pointer-events: none;\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.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.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\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.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}\nbody {\n margin: 0;\n padding: 0;\n background-color: var(--color-canvas-frame-bg);\n overflow: hidden;\n}\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\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.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.pb-add-section-handle.bottom {\n bottom: -32px;\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.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}';
15484
+ const canvasStyle = '.pb-page {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n overflow-x: hidden;\n}\n.pb-page .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}\n.pb-page .pb-section .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}\n.pb-page .pb-section .pb-block .pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .text {\n display: block;\n color: #333;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-media-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image-container {\n margin: 0;\n padding: 0;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .video {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-container-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .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.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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@media (max-width: 768px) {\n .pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.pb-page .pb-section .pb-block .mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-page .pb-section .pb-block .pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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.pb-page * {\n box-sizing: border-box;\n}\n.pb-viewer {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow-y: auto;\n}\n.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\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.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\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.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\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.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\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.pb-section:empty {\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\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.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.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.pb-section-static .pb-widget {\n outline: none;\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.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\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.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.pb-widget * {\n pointer-events: none;\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.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.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\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.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}\nbody {\n margin: 0;\n padding: 0;\n background-color: var(--color-canvas-frame-bg);\n overflow: hidden;\n}\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\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.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.pb-add-section-handle.bottom {\n bottom: -32px;\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.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}';
15410
15485
  const _hoisted_1$2 = ["width"];
15411
15486
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
15412
15487
  __name: "PbPageFrame",
@@ -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, v, x, y, z, A, D, E } from "./index-CCBt1Q2v.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, v, x, y, z, A, D, E } from "./index-BU6dS8qI.js";
2
2
  export {
3
3
  B as BLOCK_TYPE,
4
4
  b as Block,
@@ -7102,13 +7102,15 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7102
7102
  const _hoisted_1$7$1 = ["href", "target"];
7103
7103
  const _hoisted_2$3$1 = ["alt", "src"];
7104
7104
  const _hoisted_3$k = ["alt", "src"];
7105
- const _hoisted_4$f = ["poster"];
7106
- const _hoisted_5$b = ["src"];
7107
- const _hoisted_6$a = {
7105
+ const _hoisted_4$f = ["alt", "src"];
7106
+ const _hoisted_5$b = ["alt", "src"];
7107
+ const _hoisted_6$a = ["poster"];
7108
+ const _hoisted_7$9 = ["src"];
7109
+ const _hoisted_8$8 = {
7108
7110
  key: 1,
7109
7111
  class: "placeholder"
7110
7112
  };
7111
- const _hoisted_7$9 = { class: "font-icon" };
7113
+ const _hoisted_9$5 = { class: "font-icon" };
7112
7114
  const _sfc_main$8$1 = /* @__PURE__ */ vue.defineComponent({
7113
7115
  __name: "PbMediaWidget",
7114
7116
  props: {
@@ -7118,6 +7120,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7118
7120
  setup(__props) {
7119
7121
  const props = __props;
7120
7122
  const pageBuilder = usePageBuilder();
7123
+ const validTags = ["div", "h1", "h2", "h3", "h4", "h5", "h6", "p"];
7124
+ const tag = vue.computed(() => {
7125
+ var _a;
7126
+ const _tag = (_a = props.part.properties) == null ? void 0 : _a.tag;
7127
+ return validTags.includes(_tag) ? _tag : "";
7128
+ });
7121
7129
  const media = vue.computed(() => {
7122
7130
  var _a;
7123
7131
  return (_a = props.part.properties) == null ? void 0 : _a.media;
@@ -7154,19 +7162,54 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7154
7162
  href: (_b = _ctx.part.properties) == null ? void 0 : _b.link,
7155
7163
  target: (_c = _ctx.part.properties) == null ? void 0 : _c.linkTarget
7156
7164
  }, [
7157
- vue.createElementVNode("img", {
7165
+ tag.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tag.value), {
7166
+ key: 0,
7167
+ class: "image-container"
7168
+ }, {
7169
+ default: vue.withCtx(() => {
7170
+ var _a2;
7171
+ return [
7172
+ vue.createElementVNode("img", {
7173
+ alt: altText.value,
7174
+ src: ((_a2 = _ctx.part.properties) == null ? void 0 : _a2.media).fileUrl,
7175
+ style: vue.normalizeStyle(style.value),
7176
+ class: "image"
7177
+ }, null, 12, _hoisted_2$3$1)
7178
+ ];
7179
+ }),
7180
+ _: 1
7181
+ })) : (vue.openBlock(), vue.createElementBlock("img", {
7182
+ key: 1,
7158
7183
  alt: altText.value,
7159
7184
  src: ((_d = _ctx.part.properties) == null ? void 0 : _d.media).fileUrl,
7160
7185
  style: vue.normalizeStyle(style.value),
7161
7186
  class: "image"
7162
- }, null, 12, _hoisted_2$3$1)
7163
- ], 8, _hoisted_1$7$1)) : (vue.openBlock(), vue.createElementBlock("img", {
7164
- key: 1,
7165
- alt: altText.value,
7166
- src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).fileUrl,
7167
- style: vue.normalizeStyle(style.value),
7168
- class: "image"
7169
- }, null, 12, _hoisted_3$k))
7187
+ }, null, 12, _hoisted_3$k))
7188
+ ], 8, _hoisted_1$7$1)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
7189
+ tag.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tag.value), {
7190
+ key: 0,
7191
+ class: "image-container"
7192
+ }, {
7193
+ default: vue.withCtx(() => {
7194
+ var _a2;
7195
+ return [
7196
+ vue.createElementVNode("img", {
7197
+ alt: altText.value,
7198
+ src: ((_a2 = _ctx.part.properties) == null ? void 0 : _a2.media).fileUrl,
7199
+ style: vue.normalizeStyle(style.value),
7200
+ class: "image"
7201
+ }, null, 12, _hoisted_4$f)
7202
+ ];
7203
+ }),
7204
+ _: 1
7205
+ })) : (vue.openBlock(), vue.createElementBlock("img", {
7206
+ key: 1,
7207
+ alt: altText.value,
7208
+ src: ((_e = _ctx.part.properties) == null ? void 0 : _e.media).fileUrl,
7209
+ style: vue.normalizeStyle(style.value),
7210
+ class: "image"
7211
+ }, null, 12, _hoisted_5$b))
7212
+ ], 64))
7170
7213
  ], 64)) : media.value.mediaType === "Video" ? (vue.openBlock(), vue.createElementBlock("video", {
7171
7214
  key: 1,
7172
7215
  ref: "video",
@@ -7176,10 +7219,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
7176
7219
  }, [
7177
7220
  vue.createElementVNode("source", {
7178
7221
  src: `${media.value.fileUrl}#t=0.01`
7179
- }, null, 8, _hoisted_5$b)
7180
- ], 8, _hoisted_4$f)) : vue.createCommentVNode("", true)
7181
- ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$a, [
7182
- vue.createElementVNode("span", _hoisted_7$9, vue.toDisplayString(placeholderIcon.value), 1)
7222
+ }, null, 8, _hoisted_7$9)
7223
+ ], 8, _hoisted_6$a)) : vue.createCommentVNode("", true)
7224
+ ], 64)) : _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$8, [
7225
+ vue.createElementVNode("span", _hoisted_9$5, vue.toDisplayString(placeholderIcon.value), 1)
7183
7226
  ])) : vue.createCommentVNode("", true);
7184
7227
  };
7185
7228
  }
@@ -9841,7 +9884,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
9841
9884
  const _hoisted_6$8 = { class: "title" };
9842
9885
  const _hoisted_7$7 = { class: "flex-grow-1 bs-layout-horizontal" };
9843
9886
  const _hoisted_8$6 = { class: "flex-align-center mt-12" };
9844
- const _hoisted_9$3 = { class: "title" };
9887
+ const _hoisted_9$4 = { class: "title" };
9845
9888
  const _hoisted_10$3 = { class: "flex-grow-1 bs-layout-horizontal" };
9846
9889
  const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
9847
9890
  __name: "PbPropertyGroupEditorSize",
@@ -9915,7 +9958,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
9915
9958
  ])
9916
9959
  ]),
9917
9960
  vue.createElementVNode("div", _hoisted_8$6, [
9918
- vue.createElementVNode("div", _hoisted_9$3, [
9961
+ vue.createElementVNode("div", _hoisted_9$4, [
9919
9962
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
9920
9963
  [vue.unref(bluesea.vT), { key: "pb.prop.minSize" }]
9921
9964
  ])
@@ -11648,7 +11691,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
11648
11691
  key: 0,
11649
11692
  class: "vc-sketch-field"
11650
11693
  };
11651
- const _hoisted_9$2 = { class: "vc-sketch-field--double" };
11694
+ const _hoisted_9$3 = { class: "vc-sketch-field--double" };
11652
11695
  const _hoisted_10$2 = { class: "vc-sketch-field--single" };
11653
11696
  const _hoisted_11$1 = { class: "vc-sketch-field--single" };
11654
11697
  const _hoisted_12$1 = { class: "vc-sketch-field--single" };
@@ -11709,7 +11752,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
11709
11752
  ]),
11710
11753
  !$props.disableFields ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$5, [
11711
11754
  vue.createCommentVNode(" rgba "),
11712
- vue.createElementVNode("div", _hoisted_9$2, [
11755
+ vue.createElementVNode("div", _hoisted_9$3, [
11713
11756
  vue.createVNode(_component_EdIn, {
11714
11757
  label: "hex",
11715
11758
  value: $options.hex,
@@ -11973,7 +12016,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
11973
12016
  const _hoisted_6$5 = { class: "color" };
11974
12017
  const _hoisted_7$5 = { class: "mt-8" };
11975
12018
  const _hoisted_8$4 = { class: "sub-title" };
11976
- const _hoisted_9$1 = { class: "flex-grow-1 mt-4" };
12019
+ const _hoisted_9$2 = { class: "flex-grow-1 mt-4" };
11977
12020
  const _hoisted_10$1 = { class: "bg-gray-100 py-5 rounded-8" };
11978
12021
  const _hoisted_11 = { class: "text-center" };
11979
12022
  const _hoisted_12 = { class: "bs-layout-horizontal justify-content-center align-items-center" };
@@ -12059,7 +12102,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12059
12102
  [vue.unref(bluesea.vT), { key: "pb.prop.borderWidth" }]
12060
12103
  ])
12061
12104
  ]),
12062
- vue.createElementVNode("div", _hoisted_9$1, [
12105
+ vue.createElementVNode("div", _hoisted_9$2, [
12063
12106
  vue.createElementVNode("div", _hoisted_10$1, [
12064
12107
  vue.createElementVNode("div", _hoisted_11, [
12065
12108
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
@@ -12719,6 +12762,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12719
12762
  const _hoisted_6$2 = { class: "title mt-12" };
12720
12763
  const _hoisted_7$2 = { class: "title mt-12" };
12721
12764
  const _hoisted_8$1 = { class: "title mt-12" };
12765
+ const _hoisted_9$1 = { class: "title mt-12" };
12722
12766
  const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
12723
12767
  __name: "PbPropertyGroupEditorMedia",
12724
12768
  props: {
@@ -12726,6 +12770,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12726
12770
  selectedParts: {}
12727
12771
  },
12728
12772
  setup(__props) {
12773
+ const props = __props;
12729
12774
  const pageBuilder = usePageBuilderEditor();
12730
12775
  const part = pageBuilder.context.getSelectedParts();
12731
12776
  const modal = bluesea.useModal();
@@ -12764,6 +12809,15 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12764
12809
  var _a, _b;
12765
12810
  return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.linkTarget;
12766
12811
  });
12812
+ const tagItems = vue.computed(() => {
12813
+ var _a;
12814
+ const prop = (_a = props.group.properties) == null ? void 0 : _a.find((v) => v.propertyName === "tag");
12815
+ return prop ? (prop.params || "").split(",") : [];
12816
+ });
12817
+ const tag = vue.computed(() => {
12818
+ var _a, _b;
12819
+ return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.tag;
12820
+ });
12767
12821
  const thumbnail = vue.computed(() => {
12768
12822
  var _a, _b;
12769
12823
  return (_b = (_a = part == null ? void 0 : part[0]) == null ? void 0 : _a.properties) == null ? void 0 : _b.thumbnail;
@@ -12790,7 +12844,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12790
12844
  ])
12791
12845
  ]),
12792
12846
  ((_a = media.value) == null ? void 0 : _a.fileUrl) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$8, [
12793
- _cache[3] || (_cache[3] = vue.createElementVNode("label", null, "URL", -1)),
12847
+ _cache[4] || (_cache[4] = vue.createElementVNode("label", null, "URL", -1)),
12794
12848
  vue.createElementVNode("div", _hoisted_4$4, [
12795
12849
  vue.createTextVNode(vue.toDisplayString((_b = media.value) == null ? void 0 : _b.fileUrl) + " ", 1),
12796
12850
  vue.withDirectives(vue.createVNode(vue.unref(bluesea.BSButton), {
@@ -12844,10 +12898,22 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12844
12898
  width: "100%",
12845
12899
  "onUpdate:modelValue": _cache[1] || (_cache[1] = (value) => updateProperty({ linkTarget: value }))
12846
12900
  }, null, 8, ["model-value"])
12901
+ ]),
12902
+ vue.createElementVNode("div", _hoisted_8$1, [
12903
+ vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
12904
+ [vue.unref(bluesea.vT), { key: "pb.prop.tag" }]
12905
+ ])
12906
+ ]),
12907
+ vue.createElementVNode("div", null, [
12908
+ vue.createVNode(vue.unref(bluesea.BSSelect), {
12909
+ items: tagItems.value,
12910
+ "model-value": tag.value,
12911
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (value) => updateProperty({ tag: value }))
12912
+ }, null, 8, ["items", "model-value"])
12847
12913
  ])
12848
12914
  ], 64)) : vue.createCommentVNode("", true),
12849
12915
  ((_d = media.value) == null ? void 0 : _d.mediaType) === "Video" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
12850
- vue.createElementVNode("div", _hoisted_8$1, [
12916
+ vue.createElementVNode("div", _hoisted_9$1, [
12851
12917
  vue.withDirectives(vue.createElementVNode("label", null, null, 512), [
12852
12918
  [vue.unref(bluesea.vT), { key: "pb.prop.thumbnail" }]
12853
12919
  ])
@@ -12856,7 +12922,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
12856
12922
  vue.createVNode(vue.unref(bluesea.BSTextInput), {
12857
12923
  "model-value": thumbnail.value,
12858
12924
  width: "100%",
12859
- "onUpdate:modelValue": _cache[2] || (_cache[2] = (value) => updateProperty({ thumbnail: value }))
12925
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = (value) => updateProperty({ thumbnail: value }))
12860
12926
  }, null, 8, ["model-value"])
12861
12927
  ])
12862
12928
  ], 64)) : vue.createCommentVNode("", true)
@@ -13026,6 +13092,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
13026
13092
  caption: "Link Target",
13027
13093
  propertyType: "text"
13028
13094
  },
13095
+ {
13096
+ propertyName: "tag",
13097
+ caption: "pb.prop.tag",
13098
+ propertyType: "select",
13099
+ params: ",div,h1,h2,h3,h4,h5,h6,p"
13100
+ },
13029
13101
  {
13030
13102
  propertyName: "thumbnail",
13031
13103
  caption: "Thumbnail URL",
@@ -13089,7 +13161,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
13089
13161
  },
13090
13162
  ...defaultWidgetPropertyGroups()
13091
13163
  ],
13092
- initialProperties: {},
13164
+ initialProperties: {
13165
+ width: "100%",
13166
+ height: "100%"
13167
+ },
13093
13168
  allowsChild: () => false,
13094
13169
  creator: () => _sfc_main$5$1
13095
13170
  },
@@ -15407,7 +15482,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
15407
15482
  };
15408
15483
  }
15409
15484
  });
15410
- const canvasStyle = '.pb-page {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n overflow-x: hidden;\n}\n.pb-page .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}\n.pb-page .pb-section .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}\n.pb-page .pb-section .pb-block .pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .text {\n display: block;\n color: #333;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-media-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .video {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-container-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .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.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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@media (max-width: 768px) {\n .pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.pb-page .pb-section .pb-block .mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-page .pb-section .pb-block .pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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.pb-page * {\n box-sizing: border-box;\n}\n.pb-viewer {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow-y: auto;\n}\n.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\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.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\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.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\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.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\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.pb-section:empty {\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\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.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.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.pb-section-static .pb-widget {\n outline: none;\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.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\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.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.pb-widget * {\n pointer-events: none;\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.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.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\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.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}\nbody {\n margin: 0;\n padding: 0;\n background-color: var(--color-canvas-frame-bg);\n overflow: hidden;\n}\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\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.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.pb-add-section-handle.bottom {\n bottom: -32px;\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.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}';
15485
+ const canvasStyle = '.pb-page {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n overflow-x: hidden;\n}\n.pb-page .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}\n.pb-page .pb-section .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}\n.pb-page .pb-section .pb-block .pb-widget {\n position: relative;\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-text-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .text {\n display: block;\n color: #333;\n}\n.pb-page .pb-section .pb-block .pb-text-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-media-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image-container {\n margin: 0;\n padding: 0;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .image {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .video {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-media-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-html-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-html-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget {\n width: 100%;\n height: fit-content;\n}\n.pb-page .pb-section .pb-block .pb-iframe-widget .placeholder {\n padding: 4px 0;\n font-size: 18px;\n text-align: center;\n color: #999;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .youtube {\n width: 100%;\n height: 100%;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-youtube-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .pb-container-widget {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder {\n height: 100px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .pb-container-widget .placeholder span {\n font-size: 40px;\n color: #999;\n line-height: 100px;\n vertical-align: middle;\n}\n.pb-page .pb-section .pb-block .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.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 25%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .product {\n width: 95%;\n margin: 0 auto;\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper img {\n width: 100%;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .name {\n margin-top: 8px;\n font-size: 14px;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .price {\n margin-top: 8px;\n font-size: 14px;\n font-weight: bold;\n}\n.pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper .empty {\n height: 200px;\n background-color: #eee;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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@media (max-width: 768px) {\n .pb-page .pb-section .pb-block .pb-product-list-widget .product-wrapper {\n width: 50%;\n }\n}\n.pb-page .pb-section .pb-block .mobile .pb-product-list-widget .product-wrapper {\n width: 50%;\n}\n.pb-page .pb-section .pb-block .pb-login-widget {\n height: 200px;\n text-align: center;\n}\n.pb-page .pb-section .pb-block .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.pb-page * {\n box-sizing: border-box;\n}\n.pb-viewer {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow-y: auto;\n}\n.pb-page-wrapper {\n margin: 0 auto;\n padding: 0;\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.pb-page .pb-page-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: #fff;\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.pb-page * {\n box-sizing: border-box;\n}\n.pb-add-widget-button {\n width: 100%;\n height: 100%;\n min-height: 200px;\n position: relative;\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.pb-add-widget-button button:hover {\n background-color: #eeeeee;\n}\n.pb-add-widget-button .icon {\n font-size: 1rem;\n vertical-align: middle;\n}\n.pb-add-widget-button .text {\n font-size: 1rem;\n vertical-align: middle;\n margin-left: 0.4rem;\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.pb-section:empty {\n background-color: #fff;\n}\n.pb-section:hover:not(:has(.pb-block:hover)) {\n background-color: #f0f0f0;\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.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.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.pb-section-static .pb-widget {\n outline: none;\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.pb-block:hover:not(:has(.pb-widget:hover)) {\n background-color: #f0f0f0;\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.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.pb-widget * {\n pointer-events: none;\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.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.pb-widget .children {\n position: absolute;\n width: 100%;\n height: 100%;\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.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}\nbody {\n margin: 0;\n padding: 0;\n background-color: var(--color-canvas-frame-bg);\n overflow: hidden;\n}\n.font-icon, .material-icons-outlined {\n font-family: "Material Symbols Outlined", monospace;\n font-size: 1rem;\n max-width: 1em;\n}\n.pb-position-mark {\n background-color: #ff3333;\n opacity: 0.5;\n border-radius: 2px;\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.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.pb-add-section-handle.bottom {\n bottom: -32px;\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.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}';
15411
15486
  const _hoisted_1$h = ["width"];
15412
15487
  const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
15413
15488
  __name: "PbPageFrame",
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.91",
4
+ "version": "1.0.0-alpha.92",
5
5
  "engins": {
6
6
  "node": ">= 20.0.0"
7
7
  },
@@ -31,7 +31,7 @@
31
31
  "vue-router": "^4.4.3",
32
32
  "vue3-click-away": "^1.2.4",
33
33
  "yjs": "^13.6.14",
34
- "@g1cloud/page-builder-viewer": "1.0.0-alpha.91"
34
+ "@g1cloud/page-builder-viewer": "1.0.0-alpha.92"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^20.12.7",