unika-components 1.2.9 → 1.3.0

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.
@@ -19,7 +19,7 @@
19
19
  return px;
20
20
  }
21
21
 
22
- var script$s = vue.defineComponent({
22
+ var script$t = vue.defineComponent({
23
23
  name: 'UniText',
24
24
  props: {
25
25
  element: {
@@ -122,9 +122,9 @@
122
122
  }
123
123
  });
124
124
 
125
- const _hoisted_1$n = ["data-id", "data-pid", "data-type", "sign", "signsort", "layername"];
125
+ const _hoisted_1$o = ["data-id", "data-pid", "data-type", "sign", "signsort", "layername"];
126
126
 
127
- function render$o(_ctx, _cache, $props, $setup, $data, $options) {
127
+ function render$p(_ctx, _cache, $props, $setup, $data, $options) {
128
128
  return (_ctx.element && (!_ctx.element.properties || _ctx.element.properties.visible !== false))
129
129
  ? (vue.openBlock(), vue.createElementBlock("div", {
130
130
  key: 0,
@@ -155,30 +155,96 @@
155
155
  style: vue.normalizeStyle(_ctx.textEditorStyle)
156
156
  }, vue.toDisplayString(_ctx.element.textContent), 5 /* TEXT, STYLE */)
157
157
  ], 4 /* STYLE */)
158
- ], 12 /* STYLE, PROPS */, _hoisted_1$n))
158
+ ], 12 /* STYLE, PROPS */, _hoisted_1$o))
159
159
  : vue.createCommentVNode("v-if", true)
160
160
  }
161
161
 
162
- script$s.render = render$o;
163
- script$s.__file = "src/components/UniText/UniText.vue";
162
+ script$t.render = render$p;
163
+ script$t.__file = "src/components/UniText/UniText.vue";
164
164
 
165
- script$s.install = (app) => {
166
- app.component(script$s.name, script$s);
165
+ script$t.install = (app) => {
166
+ app.component(script$t.name, script$t);
167
167
  };
168
168
 
169
- var script$r = vue.defineComponent({
169
+ // 阿里云 OSS 图片处理:按显示尺寸缩放并转 webp
170
+ // 只处理自家 OSS 域名(第三方地址不支持 x-oss-process 参数)
171
+ const OSS_HOST_REG = /^(https?:)?\/\/(h5cdn\.unika\.cc|unika-static-dev\.unika\.cc)\//i;
172
+ // gif 转 webp 会丢失动画,svg 是矢量图
173
+ const SKIP_EXT_REG = /\.(gif|svg)$/i;
174
+ // 宽度分档,便于 CDN 缓存命中
175
+ const WIDTH_BUCKETS = [375, 750, 1080];
176
+ // 设计稿宽 375,按 2 倍屏输出
177
+ const DPR = 2;
178
+ const DESIGN_PX_PER_REM = 37.5;
179
+ /**
180
+ * 元素宽度转为设计稿 px,h5-server 渲染前会把数字转成 rem 字符串
181
+ */
182
+ function toDesignPx(value) {
183
+ if (typeof value === 'number')
184
+ return value;
185
+ if (typeof value !== 'string')
186
+ return 0;
187
+ const num = parseFloat(value);
188
+ if (Number.isNaN(num))
189
+ return 0;
190
+ if (value.trim().endsWith('rem'))
191
+ return num * DESIGN_PX_PER_REM;
192
+ return num;
193
+ }
194
+ function pickWidth(designWidth) {
195
+ const target = designWidth > 0 ? designWidth * DPR : 750;
196
+ return WIDTH_BUCKETS.find(w => w >= target) || WIDTH_BUCKETS[WIDTH_BUCKETS.length - 1];
197
+ }
198
+ /**
199
+ * @param src 图片地址
200
+ * @param designWidth 显示宽度(设计稿 px),未知时传 0
201
+ */
202
+ function optimizeImageUrl(src, designWidth = 0) {
203
+ if (!src || typeof src !== 'string')
204
+ return src;
205
+ if (!OSS_HOST_REG.test(src) || src.includes('x-oss-process'))
206
+ return src;
207
+ const path = src.split(/[?#]/)[0];
208
+ if (SKIP_EXT_REG.test(path))
209
+ return src;
210
+ const hashIndex = src.indexOf('#');
211
+ const base = hashIndex >= 0 ? src.slice(0, hashIndex) : src;
212
+ const hash = hashIndex >= 0 ? src.slice(hashIndex) : '';
213
+ const sep = base.includes('?') ? '&' : '?';
214
+ const width = pickWidth(designWidth);
215
+ return `${base}${sep}x-oss-process=image/resize,w_${width},limit_1/quality,q_80/format,webp${hash}`;
216
+ }
217
+ /**
218
+ * 处理 CSS 中的 url(...),如页面背景 `url("https://...")`
219
+ */
220
+ function optimizeCssImageUrl(value, designWidth = 0) {
221
+ if (!value || typeof value !== 'string')
222
+ return value;
223
+ return value.replace(/url\(\s*(['"]?)([^'")]+)\1\s*\)/g, (_m, quote, url) => `url(${quote}${optimizeImageUrl(url, designWidth)}${quote})`);
224
+ }
225
+
226
+ var script$s = vue.defineComponent({
170
227
  name: 'uni-image',
171
228
  props: {
172
229
  element: {
173
230
  type: Object,
174
231
  required: true
175
232
  },
233
+ // WorkRender 线上渲染传 'prd',此时才走 OSS 图片压缩;编辑器画布不传
234
+ env: {
235
+ type: String,
236
+ default: ''
237
+ },
176
238
  },
177
239
  emits: ['trigger'],
178
240
  setup(props, { emit }) {
179
241
  // 计算属性
180
242
  const properties = vue.computed(() => props.element.properties || {});
181
243
  const css = vue.computed(() => props.element.css || {});
244
+ const displaySrc = vue.computed(() => {
245
+ const src = properties.value.src;
246
+ return props.env === 'prd' ? optimizeImageUrl(src, toDesignPx(css.value.width)) : src;
247
+ });
182
248
  // 容器样式
183
249
  const containerStyle = vue.computed(() => {
184
250
  const flipH = css.value.flipHorizontal ? -1 : 1;
@@ -190,7 +256,8 @@
190
256
  top: px2rem(css.value.top),
191
257
  width: px2rem(css.value.width),
192
258
  height: px2rem(css.value.height),
193
- transform: `${rotate} ${scale}`
259
+ transform: `${rotate} ${scale}`,
260
+ '--img-bg-pos': css.value.backgroundPosition || '50% 50%'
194
261
  };
195
262
  });
196
263
  // 图片样式
@@ -204,37 +271,22 @@
204
271
  ? `${px2rem(properties.value.shadowX)} ${px2rem(properties.value.shadowY)} ${px2rem(properties.value.shadowBlur)} ${properties.value.shadowColor}`
205
272
  : 'none'
206
273
  }));
207
- // 背景图样式
274
+ // 背景图:cover 保持比例,backgroundPosition 只做框内平移
208
275
  const bgImageStyle = vue.computed(() => ({
209
- backgroundImage: `url(${properties.value.src})`,
276
+ backgroundImage: `url(${displaySrc.value})`,
210
277
  backgroundSize: 'cover',
211
- backgroundPosition: '50% 50%'
278
+ backgroundPosition: css.value.backgroundPosition || '50% 50%'
279
+ }));
280
+ // 与编辑器 .ele-bg-wrap 一致:cover + 框内平移
281
+ const imgTagStyle = vue.computed(() => ({
282
+ width: '100%',
283
+ height: '100%',
284
+ position: 'absolute',
285
+ left: '0',
286
+ top: '0',
287
+ objectFit: 'cover',
288
+ objectPosition: css.value.backgroundPosition || '50% 50%'
212
289
  }));
213
- // img标签样式(用于非背景图模式)
214
- const imgTagStyle = vue.computed(() => {
215
- const aspectRatio = properties.value.realW || 0 / (properties.value.realH || 1);
216
- const containerWidth = css.value.width;
217
- const containerHeight = css.value.height;
218
- // 保持图片原始比例
219
- if (containerWidth / containerHeight > aspectRatio) {
220
- return {
221
- height: '100%',
222
- width: 'auto',
223
- position: 'absolute',
224
- left: '50%',
225
- transform: 'translateX(-50%)'
226
- };
227
- }
228
- else {
229
- return {
230
- width: '100%',
231
- height: 'auto',
232
- position: 'absolute',
233
- top: '50%',
234
- transform: 'translateY(-50%)'
235
- };
236
- }
237
- });
238
290
  // 遮罩样式
239
291
  const maskStyle = vue.computed(() => ({
240
292
  '-webkit-mask-box-image-source': properties.value.maskBoxImageSource
@@ -278,6 +330,7 @@
278
330
  };
279
331
  return {
280
332
  properties,
333
+ displaySrc,
281
334
  containerStyle,
282
335
  imageStyle,
283
336
  bgImageStyle,
@@ -290,10 +343,10 @@
290
343
  }
291
344
  });
292
345
 
293
- const _hoisted_1$m = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort", "imgmattinginfo"];
294
- const _hoisted_2$j = ["src"];
346
+ const _hoisted_1$n = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort", "imgmattinginfo"];
347
+ const _hoisted_2$k = ["src"];
295
348
 
296
- function render$n(_ctx, _cache, $props, $setup, $data, $options) {
349
+ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
297
350
  return (vue.openBlock(), vue.createElementBlock("div", {
298
351
  class: "ele-img eles",
299
352
  "data-id": _ctx.element.id,
@@ -328,11 +381,12 @@
328
381
  style: vue.normalizeStyle(_ctx.imageStyle)
329
382
  }, [
330
383
  vue.createElementVNode("img", {
331
- src: _ctx.properties.src,
384
+ src: _ctx.displaySrc,
332
385
  alt: "image",
386
+ loading: "lazy",
333
387
  class: "ele-image",
334
388
  style: vue.normalizeStyle(_ctx.imgTagStyle)
335
- }, null, 12 /* STYLE, PROPS */, _hoisted_2$j)
389
+ }, null, 12 /* STYLE, PROPS */, _hoisted_2$k)
336
390
  ], 4 /* STYLE */))
337
391
  : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
338
392
  vue.createCommentVNode(" 图片展示方式2:使用背景图 "),
@@ -348,17 +402,17 @@
348
402
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
349
403
  ], 4 /* STYLE */)
350
404
  ], 4 /* STYLE */)
351
- ], 12 /* STYLE, PROPS */, _hoisted_1$m))
405
+ ], 12 /* STYLE, PROPS */, _hoisted_1$n))
352
406
  }
353
407
 
354
- script$r.render = render$n;
355
- script$r.__file = "src/components/UniImage/UniImage.vue";
408
+ script$s.render = render$o;
409
+ script$s.__file = "src/components/UniImage/UniImage.vue";
356
410
 
357
- script$r.install = (app) => {
358
- app.component(script$r.name, script$r);
411
+ script$s.install = (app) => {
412
+ app.component(script$s.name, script$s);
359
413
  };
360
414
 
361
- var script$q = vue.defineComponent({
415
+ var script$r = vue.defineComponent({
362
416
  name: 'uni-shape',
363
417
  props: {
364
418
  element: {
@@ -509,12 +563,12 @@
509
563
  }
510
564
  });
511
565
 
512
- const _hoisted_1$l = ["data-id"];
513
- const _hoisted_2$i = ["innerHTML"];
514
- const _hoisted_3$h = /*#__PURE__*/vue.createElementVNode("div", { class: "svg-loading" }, "Loading...", -1 /* HOISTED */);
515
- const _hoisted_4$d = { class: "svg-error" };
566
+ const _hoisted_1$m = ["data-id"];
567
+ const _hoisted_2$j = ["innerHTML"];
568
+ const _hoisted_3$i = /*#__PURE__*/vue.createElementVNode("div", { class: "svg-loading" }, "Loading...", -1 /* HOISTED */);
569
+ const _hoisted_4$e = { class: "svg-error" };
516
570
 
517
- function render$m(_ctx, _cache, $props, $setup, $data, $options) {
571
+ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
518
572
  return (vue.openBlock(), vue.createElementBlock("div", {
519
573
  class: "ele-shape eles",
520
574
  "data-id": _ctx.element.id,
@@ -539,16 +593,16 @@
539
593
  innerHTML: _ctx.processedSvg,
540
594
  class: "svg-container",
541
595
  style: {"width":"100%","height":"100%"}
542
- }, null, 8 /* PROPS */, _hoisted_2$i))
596
+ }, null, 8 /* PROPS */, _hoisted_2$j))
543
597
  : (_ctx.isLoading)
544
598
  ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
545
599
  vue.createCommentVNode(" 加载状态 "),
546
- _hoisted_3$h
600
+ _hoisted_3$i
547
601
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
548
602
  : (_ctx.loadError)
549
603
  ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
550
604
  vue.createCommentVNode(" 错误状态 "),
551
- vue.createElementVNode("div", _hoisted_4$d, [
605
+ vue.createElementVNode("div", _hoisted_4$e, [
552
606
  vue.renderSlot(_ctx.$slots, "error", {
553
607
  src: _ctx.properties.src
554
608
  }, () => [
@@ -559,14 +613,14 @@
559
613
  : vue.createCommentVNode("v-if", true)
560
614
  ], 4 /* STYLE */)
561
615
  ], 4 /* STYLE */)
562
- ], 12 /* STYLE, PROPS */, _hoisted_1$l))
616
+ ], 12 /* STYLE, PROPS */, _hoisted_1$m))
563
617
  }
564
618
 
565
- script$q.render = render$m;
566
- script$q.__file = "src/components/UniShape/UniShape.vue";
619
+ script$r.render = render$n;
620
+ script$r.__file = "src/components/UniShape/UniShape.vue";
567
621
 
568
- script$q.install = (app) => {
569
- app.component(script$q.name, script$q);
622
+ script$r.install = (app) => {
623
+ app.component(script$r.name, script$r);
570
624
  };
571
625
 
572
626
  const musicState = vue.ref({
@@ -810,7 +864,7 @@
810
864
  };
811
865
  };
812
866
 
813
- var script$p = vue.defineComponent({
867
+ var script$q = vue.defineComponent({
814
868
  name: 'uni-music',
815
869
  props: {
816
870
  musicData: {
@@ -880,19 +934,19 @@
880
934
  }
881
935
  });
882
936
 
883
- const _hoisted_1$k = { id: "audio" };
884
- const _hoisted_2$h = ["src"];
885
- const _hoisted_3$g = {
937
+ const _hoisted_1$l = { id: "audio" };
938
+ const _hoisted_2$i = ["src"];
939
+ const _hoisted_3$h = {
886
940
  key: 1,
887
941
  class: "iconfont"
888
942
  };
889
- const _hoisted_4$c = ["src"];
890
- const _hoisted_5$b = /*#__PURE__*/vue.createElementVNode("div", { class: "icon-cancel" }, [
943
+ const _hoisted_4$d = ["src"];
944
+ const _hoisted_5$c = /*#__PURE__*/vue.createElementVNode("div", { class: "icon-cancel" }, [
891
945
  /*#__PURE__*/vue.createElementVNode("div", { class: "icon-h" })
892
946
  ], -1 /* HOISTED */);
893
947
 
894
- function render$l(_ctx, _cache, $props, $setup, $data, $options) {
895
- return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, [
948
+ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
949
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [
896
950
  vue.createElementVNode("div", {
897
951
  class: vue.normalizeClass(["audio", { 'a-border': _ctx.showBorder, 'mrotate': _ctx.localIsPlaying }]),
898
952
  style: vue.normalizeStyle({ background: _ctx.bgColor }),
@@ -906,8 +960,8 @@
906
960
  src: _ctx.playIconUrl,
907
961
  class: "music-icon",
908
962
  alt: "หยุดชั่วคราว"
909
- }, null, 8 /* PROPS */, _hoisted_2$h))
910
- : (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$g, "❚❚"))
963
+ }, null, 8 /* PROPS */, _hoisted_2$i))
964
+ : (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$h, "❚❚"))
911
965
  ], 64 /* STABLE_FRAGMENT */))
912
966
  : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
913
967
  (_ctx.playIconUrl)
@@ -916,22 +970,22 @@
916
970
  src: _ctx.playIconUrl,
917
971
  class: "music-icon",
918
972
  alt: "กำลังเล่น"
919
- }, null, 8 /* PROPS */, _hoisted_4$c))
973
+ }, null, 8 /* PROPS */, _hoisted_4$d))
920
974
  : vue.createCommentVNode("v-if", true),
921
- _hoisted_5$b
975
+ _hoisted_5$c
922
976
  ], 64 /* STABLE_FRAGMENT */))
923
977
  ], 6 /* CLASS, STYLE */)
924
978
  ]))
925
979
  }
926
980
 
927
- script$p.render = render$l;
928
- script$p.__file = "src/components/UniMusic/UniMusic.vue";
981
+ script$q.render = render$m;
982
+ script$q.__file = "src/components/UniMusic/UniMusic.vue";
929
983
 
930
- script$p.install = (app) => {
931
- app.component(script$p.name, script$p);
984
+ script$q.install = (app) => {
985
+ app.component(script$q.name, script$q);
932
986
  };
933
987
 
934
- var script$o = vue.defineComponent({
988
+ var script$p = vue.defineComponent({
935
989
  name: 'uni-video',
936
990
  props: {
937
991
  element: {
@@ -1004,14 +1058,14 @@
1004
1058
  }
1005
1059
  });
1006
1060
 
1007
- const _hoisted_1$j = {
1061
+ const _hoisted_1$k = {
1008
1062
  key: 0,
1009
1063
  class: "video-container"
1010
1064
  };
1011
- const _hoisted_2$g = ["src"];
1012
- const _hoisted_3$f = ["src"];
1065
+ const _hoisted_2$h = ["src"];
1066
+ const _hoisted_3$g = ["src"];
1013
1067
 
1014
- function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1068
+ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
1015
1069
  return (vue.openBlock(), vue.createElementBlock("div", {
1016
1070
  class: "element-video eles",
1017
1071
  style: vue.normalizeStyle(_ctx.containerStyle)
@@ -1024,7 +1078,7 @@
1024
1078
  })
1025
1079
  }, [
1026
1080
  (_ctx.isPlaying)
1027
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [
1081
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, [
1028
1082
  vue.createElementVNode("iframe", {
1029
1083
  src: _ctx.youtubeEmbedUrl,
1030
1084
  type: "text/html",
@@ -1032,7 +1086,7 @@
1032
1086
  allowfullscreen: "",
1033
1087
  scrolling: "no",
1034
1088
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
1035
- }, null, 8 /* PROPS */, _hoisted_2$g)
1089
+ }, null, 8 /* PROPS */, _hoisted_2$h)
1036
1090
  ]))
1037
1091
  : (vue.openBlock(), vue.createElementBlock("div", {
1038
1092
  key: 1,
@@ -1044,20 +1098,20 @@
1044
1098
  src: _ctx.element.properties.src,
1045
1099
  alt: "Play button",
1046
1100
  class: "play-btn"
1047
- }, null, 8 /* PROPS */, _hoisted_3$f)
1101
+ }, null, 8 /* PROPS */, _hoisted_3$g)
1048
1102
  ], 4 /* STYLE */))
1049
1103
  ], 4 /* STYLE */)
1050
1104
  ], 4 /* STYLE */))
1051
1105
  }
1052
1106
 
1053
- script$o.render = render$k;
1054
- script$o.__file = "src/components/UniVideo/UniVideo.vue";
1107
+ script$p.render = render$l;
1108
+ script$p.__file = "src/components/UniVideo/UniVideo.vue";
1055
1109
 
1056
- script$o.install = (app) => {
1057
- app.component(script$o.name, script$o);
1110
+ script$p.install = (app) => {
1111
+ app.component(script$p.name, script$p);
1058
1112
  };
1059
1113
 
1060
- var script$n = vue.defineComponent({
1114
+ var script$o = vue.defineComponent({
1061
1115
  name: 'uni-calendar',
1062
1116
  props: {
1063
1117
  element: {
@@ -1173,33 +1227,33 @@
1173
1227
  }
1174
1228
  });
1175
1229
 
1176
- const _hoisted_1$i = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1177
- const _hoisted_2$f = {
1230
+ const _hoisted_1$j = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1231
+ const _hoisted_2$g = {
1178
1232
  key: 0,
1179
1233
  class: "can-wrap"
1180
1234
  };
1181
- const _hoisted_3$e = { class: "can-top" };
1182
- const _hoisted_4$b = { class: "can-main" };
1183
- const _hoisted_5$a = { class: "can-date" };
1184
- const _hoisted_6$8 = {
1235
+ const _hoisted_3$f = { class: "can-top" };
1236
+ const _hoisted_4$c = { class: "can-main" };
1237
+ const _hoisted_5$b = { class: "can-date" };
1238
+ const _hoisted_6$9 = {
1185
1239
  key: 1,
1186
1240
  class: "can-wrap2"
1187
1241
  };
1188
- const _hoisted_7$7 = { class: "can-top" };
1189
- const _hoisted_8$4 = /*#__PURE__*/vue.createElementVNode("span", null, "/", -1 /* HOISTED */);
1190
- const _hoisted_9$4 = { class: "can-main" };
1191
- const _hoisted_10$4 = { class: "can-week" };
1192
- const _hoisted_11$4 = { class: "can-date" };
1193
- const _hoisted_12$4 = {
1242
+ const _hoisted_7$8 = { class: "can-top" };
1243
+ const _hoisted_8$5 = /*#__PURE__*/vue.createElementVNode("span", null, "/", -1 /* HOISTED */);
1244
+ const _hoisted_9$5 = { class: "can-main" };
1245
+ const _hoisted_10$5 = { class: "can-week" };
1246
+ const _hoisted_11$5 = { class: "can-date" };
1247
+ const _hoisted_12$5 = {
1194
1248
  key: 2,
1195
1249
  class: "can-wrap3"
1196
1250
  };
1197
- const _hoisted_13$4 = { class: "can-top" };
1198
- const _hoisted_14$4 = /*#__PURE__*/vue.createElementVNode("span", null, "/", -1 /* HOISTED */);
1199
- const _hoisted_15$4 = { class: "can-main" };
1200
- const _hoisted_16$4 = { class: "can-date" };
1251
+ const _hoisted_13$5 = { class: "can-top" };
1252
+ const _hoisted_14$5 = /*#__PURE__*/vue.createElementVNode("span", null, "/", -1 /* HOISTED */);
1253
+ const _hoisted_15$5 = { class: "can-main" };
1254
+ const _hoisted_16$5 = { class: "can-date" };
1201
1255
 
1202
- function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1256
+ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1203
1257
  return (vue.openBlock(), vue.createElementBlock("div", {
1204
1258
  class: "ele-calendar eles",
1205
1259
  "data-id": _ctx.element.id,
@@ -1219,8 +1273,8 @@
1219
1273
  style: vue.normalizeStyle(_ctx.aniWrapStyle)
1220
1274
  }, [
1221
1275
  (_ctx.element.kind === 1)
1222
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$f, [
1223
- vue.createElementVNode("div", _hoisted_3$e, [
1276
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$g, [
1277
+ vue.createElementVNode("div", _hoisted_3$f, [
1224
1278
  vue.createElementVNode("div", {
1225
1279
  class: "can-left",
1226
1280
  style: vue.normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
@@ -1233,7 +1287,7 @@
1233
1287
  vue.createTextVNode(" " + vue.toDisplayString(_ctx.month), 1 /* TEXT */)
1234
1288
  ], 4 /* STYLE */)
1235
1289
  ]),
1236
- vue.createElementVNode("div", _hoisted_4$b, [
1290
+ vue.createElementVNode("div", _hoisted_4$c, [
1237
1291
  vue.createElementVNode("div", {
1238
1292
  class: "can-week",
1239
1293
  style: vue.normalizeStyle({ backgroundColor: _ctx.element.themeColor || '#ed5566' })
@@ -1242,7 +1296,7 @@
1242
1296
  return (vue.openBlock(), vue.createElementBlock("span", { key: day }, vue.toDisplayString(day), 1 /* TEXT */))
1243
1297
  }), 128 /* KEYED_FRAGMENT */))
1244
1298
  ], 4 /* STYLE */),
1245
- vue.createElementVNode("div", _hoisted_5$a, [
1299
+ vue.createElementVNode("div", _hoisted_5$b, [
1246
1300
  vue.createElementVNode("ul", null, [
1247
1301
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.days, (day, index) => {
1248
1302
  return (vue.openBlock(), vue.createElementBlock("li", {
@@ -1271,19 +1325,19 @@
1271
1325
  ]))
1272
1326
  : vue.createCommentVNode("v-if", true),
1273
1327
  (_ctx.element.kind === 2)
1274
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$8, [
1275
- vue.createElementVNode("div", _hoisted_7$7, [
1328
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$9, [
1329
+ vue.createElementVNode("div", _hoisted_7$8, [
1276
1330
  vue.createElementVNode("div", {
1277
1331
  class: "can-size",
1278
1332
  style: vue.normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1279
1333
  }, [
1280
1334
  vue.createTextVNode(vue.toDisplayString(_ctx.currentDay) + " ", 1 /* TEXT */),
1281
- _hoisted_8$4,
1335
+ _hoisted_8$5,
1282
1336
  vue.createTextVNode(" " + vue.toDisplayString(_ctx.currentMonth), 1 /* TEXT */)
1283
1337
  ], 4 /* STYLE */)
1284
1338
  ]),
1285
- vue.createElementVNode("div", _hoisted_9$4, [
1286
- vue.createElementVNode("div", _hoisted_10$4, [
1339
+ vue.createElementVNode("div", _hoisted_9$5, [
1340
+ vue.createElementVNode("div", _hoisted_10$5, [
1287
1341
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.weekDays, (day) => {
1288
1342
  return (vue.openBlock(), vue.createElementBlock("span", {
1289
1343
  key: day,
@@ -1291,7 +1345,7 @@
1291
1345
  }, vue.toDisplayString(day), 5 /* TEXT, STYLE */))
1292
1346
  }), 128 /* KEYED_FRAGMENT */))
1293
1347
  ]),
1294
- vue.createElementVNode("div", _hoisted_11$4, [
1348
+ vue.createElementVNode("div", _hoisted_11$5, [
1295
1349
  vue.createElementVNode("div", {
1296
1350
  class: "can-year",
1297
1351
  style: vue.normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
@@ -1324,14 +1378,14 @@
1324
1378
  ]))
1325
1379
  : vue.createCommentVNode("v-if", true),
1326
1380
  (_ctx.element.kind === 3)
1327
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$4, [
1328
- vue.createElementVNode("div", _hoisted_13$4, [
1381
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$5, [
1382
+ vue.createElementVNode("div", _hoisted_13$5, [
1329
1383
  vue.createElementVNode("div", {
1330
1384
  class: "can-size",
1331
1385
  style: vue.normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1332
1386
  }, [
1333
1387
  vue.createTextVNode(vue.toDisplayString(_ctx.currentDay) + " ", 1 /* TEXT */),
1334
- _hoisted_14$4,
1388
+ _hoisted_14$5,
1335
1389
  vue.createTextVNode(" " + vue.toDisplayString(_ctx.currentMonth), 1 /* TEXT */)
1336
1390
  ], 4 /* STYLE */),
1337
1391
  vue.createElementVNode("div", {
@@ -1339,7 +1393,7 @@
1339
1393
  style: vue.normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1340
1394
  }, "-" + vue.toDisplayString(_ctx.currentYear) + "-", 5 /* TEXT, STYLE */)
1341
1395
  ]),
1342
- vue.createElementVNode("div", _hoisted_15$4, [
1396
+ vue.createElementVNode("div", _hoisted_15$5, [
1343
1397
  vue.createElementVNode("div", {
1344
1398
  class: "can-week",
1345
1399
  style: vue.normalizeStyle({ borderColor: _ctx.element.themeColor || '#ed5566' })
@@ -1351,7 +1405,7 @@
1351
1405
  }, vue.toDisplayString(day), 5 /* TEXT, STYLE */))
1352
1406
  }), 128 /* KEYED_FRAGMENT */))
1353
1407
  ], 4 /* STYLE */),
1354
- vue.createElementVNode("div", _hoisted_16$4, [
1408
+ vue.createElementVNode("div", _hoisted_16$5, [
1355
1409
  vue.createElementVNode("ul", null, [
1356
1410
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.days, (day, index) => {
1357
1411
  return (vue.openBlock(), vue.createElementBlock("li", {
@@ -1380,17 +1434,17 @@
1380
1434
  ]))
1381
1435
  : vue.createCommentVNode("v-if", true)
1382
1436
  ], 4 /* STYLE */)
1383
- ], 12 /* STYLE, PROPS */, _hoisted_1$i))
1437
+ ], 12 /* STYLE, PROPS */, _hoisted_1$j))
1384
1438
  }
1385
1439
 
1386
- script$n.render = render$j;
1387
- script$n.__file = "src/components/UniCalendar/UniCalendar.vue";
1440
+ script$o.render = render$k;
1441
+ script$o.__file = "src/components/UniCalendar/UniCalendar.vue";
1388
1442
 
1389
- script$n.install = (app) => {
1390
- app.component(script$n.name, script$n);
1443
+ script$o.install = (app) => {
1444
+ app.component(script$o.name, script$o);
1391
1445
  };
1392
1446
 
1393
- var script$m = vue.defineComponent({
1447
+ var script$n = vue.defineComponent({
1394
1448
  name: 'uni-countdown',
1395
1449
  props: {
1396
1450
  element: {
@@ -1681,30 +1735,30 @@
1681
1735
  }
1682
1736
  });
1683
1737
 
1684
- const _hoisted_1$h = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1685
- const _hoisted_2$e = ["data-direction"];
1686
- const _hoisted_3$d = { class: "c-wrap" };
1687
- const _hoisted_4$a = { class: "c-num c-left" };
1688
- const _hoisted_5$9 = { class: "flex-wrap" };
1689
- const _hoisted_6$7 = { class: "c-num c-right" };
1690
- const _hoisted_7$6 = { class: "flex-wrap" };
1691
- const _hoisted_8$3 = { class: "c-wrap" };
1692
- const _hoisted_9$3 = { class: "c-num c-left" };
1693
- const _hoisted_10$3 = { class: "flex-wrap" };
1694
- const _hoisted_11$3 = { class: "c-num c-right" };
1695
- const _hoisted_12$3 = { class: "flex-wrap" };
1696
- const _hoisted_13$3 = { class: "c-wrap" };
1697
- const _hoisted_14$3 = { class: "c-num c-left" };
1698
- const _hoisted_15$3 = { class: "flex-wrap" };
1699
- const _hoisted_16$3 = { class: "c-num c-right" };
1700
- const _hoisted_17$3 = { class: "flex-wrap" };
1701
- const _hoisted_18$3 = { class: "c-wrap" };
1702
- const _hoisted_19$3 = { class: "c-num c-left" };
1738
+ const _hoisted_1$i = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1739
+ const _hoisted_2$f = ["data-direction"];
1740
+ const _hoisted_3$e = { class: "c-wrap" };
1741
+ const _hoisted_4$b = { class: "c-num c-left" };
1742
+ const _hoisted_5$a = { class: "flex-wrap" };
1743
+ const _hoisted_6$8 = { class: "c-num c-right" };
1744
+ const _hoisted_7$7 = { class: "flex-wrap" };
1745
+ const _hoisted_8$4 = { class: "c-wrap" };
1746
+ const _hoisted_9$4 = { class: "c-num c-left" };
1747
+ const _hoisted_10$4 = { class: "flex-wrap" };
1748
+ const _hoisted_11$4 = { class: "c-num c-right" };
1749
+ const _hoisted_12$4 = { class: "flex-wrap" };
1750
+ const _hoisted_13$4 = { class: "c-wrap" };
1751
+ const _hoisted_14$4 = { class: "c-num c-left" };
1752
+ const _hoisted_15$4 = { class: "flex-wrap" };
1753
+ const _hoisted_16$4 = { class: "c-num c-right" };
1754
+ const _hoisted_17$4 = { class: "flex-wrap" };
1755
+ const _hoisted_18$4 = { class: "c-wrap" };
1756
+ const _hoisted_19$4 = { class: "c-num c-left" };
1703
1757
  const _hoisted_20$3 = { class: "flex-wrap" };
1704
1758
  const _hoisted_21$3 = { class: "c-num c-right" };
1705
1759
  const _hoisted_22$3 = { class: "flex-wrap" };
1706
1760
 
1707
- function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1761
+ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1708
1762
  return (vue.openBlock(), vue.createElementBlock("div", {
1709
1763
  class: "count-down eles",
1710
1764
  "data-id": _ctx.element.id,
@@ -1746,9 +1800,9 @@
1746
1800
  class: "c-com c-day",
1747
1801
  style: vue.normalizeStyle(_ctx.comStyle)
1748
1802
  }, [
1749
- vue.createElementVNode("div", _hoisted_3$d, [
1750
- vue.createElementVNode("div", _hoisted_4$a, [
1751
- vue.createElementVNode("div", _hoisted_5$9, [
1803
+ vue.createElementVNode("div", _hoisted_3$e, [
1804
+ vue.createElementVNode("div", _hoisted_4$b, [
1805
+ vue.createElementVNode("div", _hoisted_5$a, [
1752
1806
  (_ctx.days >= 100)
1753
1807
  ? (vue.openBlock(), vue.createElementBlock("div", {
1754
1808
  key: 0,
@@ -1766,8 +1820,8 @@
1766
1820
  }, vue.toDisplayString(_ctx.currentDaysLeft), 5 /* TEXT, STYLE */)
1767
1821
  ])
1768
1822
  ]),
1769
- vue.createElementVNode("div", _hoisted_6$7, [
1770
- vue.createElementVNode("div", _hoisted_7$6, [
1823
+ vue.createElementVNode("div", _hoisted_6$8, [
1824
+ vue.createElementVNode("div", _hoisted_7$7, [
1771
1825
  vue.createElementVNode("div", {
1772
1826
  class: "next-num",
1773
1827
  style: vue.normalizeStyle(_ctx.numStyle)
@@ -1789,9 +1843,9 @@
1789
1843
  class: "c-com c-hour",
1790
1844
  style: vue.normalizeStyle(_ctx.comStyle)
1791
1845
  }, [
1792
- vue.createElementVNode("div", _hoisted_8$3, [
1793
- vue.createElementVNode("div", _hoisted_9$3, [
1794
- vue.createElementVNode("div", _hoisted_10$3, [
1846
+ vue.createElementVNode("div", _hoisted_8$4, [
1847
+ vue.createElementVNode("div", _hoisted_9$4, [
1848
+ vue.createElementVNode("div", _hoisted_10$4, [
1795
1849
  vue.createElementVNode("div", {
1796
1850
  class: "next-num",
1797
1851
  style: vue.normalizeStyle(_ctx.numStyle)
@@ -1802,8 +1856,8 @@
1802
1856
  }, vue.toDisplayString(_ctx.currentHoursLeft), 5 /* TEXT, STYLE */)
1803
1857
  ])
1804
1858
  ]),
1805
- vue.createElementVNode("div", _hoisted_11$3, [
1806
- vue.createElementVNode("div", _hoisted_12$3, [
1859
+ vue.createElementVNode("div", _hoisted_11$4, [
1860
+ vue.createElementVNode("div", _hoisted_12$4, [
1807
1861
  vue.createElementVNode("div", {
1808
1862
  class: "next-num",
1809
1863
  style: vue.normalizeStyle(_ctx.numStyle)
@@ -1825,9 +1879,9 @@
1825
1879
  class: "c-com c-minute",
1826
1880
  style: vue.normalizeStyle(_ctx.comStyle)
1827
1881
  }, [
1828
- vue.createElementVNode("div", _hoisted_13$3, [
1829
- vue.createElementVNode("div", _hoisted_14$3, [
1830
- vue.createElementVNode("div", _hoisted_15$3, [
1882
+ vue.createElementVNode("div", _hoisted_13$4, [
1883
+ vue.createElementVNode("div", _hoisted_14$4, [
1884
+ vue.createElementVNode("div", _hoisted_15$4, [
1831
1885
  vue.createElementVNode("div", {
1832
1886
  class: "next-num",
1833
1887
  style: vue.normalizeStyle(_ctx.numStyle)
@@ -1838,8 +1892,8 @@
1838
1892
  }, vue.toDisplayString(_ctx.currentMinutesLeft), 5 /* TEXT, STYLE */)
1839
1893
  ])
1840
1894
  ]),
1841
- vue.createElementVNode("div", _hoisted_16$3, [
1842
- vue.createElementVNode("div", _hoisted_17$3, [
1895
+ vue.createElementVNode("div", _hoisted_16$4, [
1896
+ vue.createElementVNode("div", _hoisted_17$4, [
1843
1897
  vue.createElementVNode("div", {
1844
1898
  class: "next-num",
1845
1899
  style: vue.normalizeStyle(_ctx.numStyle)
@@ -1861,8 +1915,8 @@
1861
1915
  class: "c-com c-second",
1862
1916
  style: vue.normalizeStyle(_ctx.comStyle)
1863
1917
  }, [
1864
- vue.createElementVNode("div", _hoisted_18$3, [
1865
- vue.createElementVNode("div", _hoisted_19$3, [
1918
+ vue.createElementVNode("div", _hoisted_18$4, [
1919
+ vue.createElementVNode("div", _hoisted_19$4, [
1866
1920
  vue.createElementVNode("div", _hoisted_20$3, [
1867
1921
  vue.createElementVNode("div", {
1868
1922
  class: "next-num",
@@ -1892,21 +1946,21 @@
1892
1946
  }, vue.toDisplayString(_ctx.second), 5 /* TEXT, STYLE */)
1893
1947
  ])
1894
1948
  ], 4 /* STYLE */)
1895
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_2$e)
1949
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_2$f)
1896
1950
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
1897
1951
  ], 4 /* STYLE */)
1898
- ], 12 /* STYLE, PROPS */, _hoisted_1$h))
1952
+ ], 12 /* STYLE, PROPS */, _hoisted_1$i))
1899
1953
  }
1900
1954
 
1901
- script$m.render = render$i;
1902
- script$m.__scopeId = "data-v-bb868822";
1903
- script$m.__file = "src/components/UniCountdown/UniCountdown.vue";
1955
+ script$n.render = render$j;
1956
+ script$n.__scopeId = "data-v-bb868822";
1957
+ script$n.__file = "src/components/UniCountdown/UniCountdown.vue";
1904
1958
 
1905
- script$m.install = (app) => {
1906
- app.component(script$m.name, script$m);
1959
+ script$n.install = (app) => {
1960
+ app.component(script$n.name, script$n);
1907
1961
  };
1908
1962
 
1909
- var script$l = vue.defineComponent({
1963
+ var script$m = vue.defineComponent({
1910
1964
  name: 'uni-map',
1911
1965
  props: {
1912
1966
  element: {
@@ -1976,11 +2030,11 @@
1976
2030
  }
1977
2031
  });
1978
2032
 
1979
- const _hoisted_1$g = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1980
- const _hoisted_2$d = ["innerHTML"];
1981
- const _hoisted_3$c = /*#__PURE__*/vue.createElementVNode("div", { class: "mask-map" }, null, -1 /* HOISTED */);
2033
+ const _hoisted_1$h = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
2034
+ const _hoisted_2$e = ["innerHTML"];
2035
+ const _hoisted_3$d = /*#__PURE__*/vue.createElementVNode("div", { class: "mask-map" }, null, -1 /* HOISTED */);
1982
2036
 
1983
- function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2037
+ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1984
2038
  return (vue.openBlock(), vue.createElementBlock("div", {
1985
2039
  class: "element-ditu eles",
1986
2040
  "data-id": _ctx.element.id,
@@ -2012,10 +2066,10 @@
2012
2066
  vue.createElementVNode("div", {
2013
2067
  innerHTML: _ctx.iframeUrl,
2014
2068
  class: "map-iframe"
2015
- }, null, 8 /* PROPS */, _hoisted_2$d),
2069
+ }, null, 8 /* PROPS */, _hoisted_2$e),
2016
2070
  vue.createCommentVNode(" 隐藏的辅助元素 "),
2017
2071
  vue.createCommentVNode(" <div :id=\"'teng_' + element.id + Date.now()\" class=\"center-map\" style=\"display: none;\"></div>\n <div :id=\"'bai_' + element.id + Date.now()\" class=\"center-map\" style=\"display: none;\"></div> "),
2018
- _hoisted_3$c
2072
+ _hoisted_3$d
2019
2073
  ], 4 /* STYLE */))
2020
2074
  : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
2021
2075
  vue.createCommentVNode(" 导航按钮 "),
@@ -2033,17 +2087,17 @@
2033
2087
  ], 4 /* STYLE */)
2034
2088
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
2035
2089
  ], 4 /* STYLE */)
2036
- ], 12 /* STYLE, PROPS */, _hoisted_1$g))
2090
+ ], 12 /* STYLE, PROPS */, _hoisted_1$h))
2037
2091
  }
2038
2092
 
2039
- script$l.render = render$h;
2040
- script$l.__file = "src/components/UniMap/UniMap.vue";
2093
+ script$m.render = render$i;
2094
+ script$m.__file = "src/components/UniMap/UniMap.vue";
2041
2095
 
2042
- script$l.install = (app) => {
2043
- app.component(script$l.name, script$l);
2096
+ script$m.install = (app) => {
2097
+ app.component(script$m.name, script$m);
2044
2098
  };
2045
2099
 
2046
- var script$k = vue.defineComponent({
2100
+ var script$l = vue.defineComponent({
2047
2101
  name: 'uni-call',
2048
2102
  props: {
2049
2103
  element: {
@@ -2126,10 +2180,10 @@
2126
2180
  }
2127
2181
  });
2128
2182
 
2129
- const _hoisted_1$f = ["data-id"];
2130
- const _hoisted_2$c = { class: "call-content" };
2183
+ const _hoisted_1$g = ["data-id"];
2184
+ const _hoisted_2$d = { class: "call-content" };
2131
2185
 
2132
- function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2186
+ function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2133
2187
  return (vue.openBlock(), vue.createElementBlock("div", {
2134
2188
  class: "call eles",
2135
2189
  "data-id": _ctx.element.id,
@@ -2143,7 +2197,7 @@
2143
2197
  boxShadow: _ctx.shadowStyle
2144
2198
  })
2145
2199
  }, [
2146
- vue.createElementVNode("div", _hoisted_2$c, [
2200
+ vue.createElementVNode("div", _hoisted_2$d, [
2147
2201
  vue.createElementVNode("i", {
2148
2202
  class: "iconfont hb-tel",
2149
2203
  style: vue.normalizeStyle(_ctx.bntStyle)
@@ -2154,14 +2208,14 @@
2154
2208
  }, vue.toDisplayString(_ctx.btnText), 5 /* TEXT, STYLE */)
2155
2209
  ])
2156
2210
  ], 4 /* STYLE */)
2157
- ], 12 /* STYLE, PROPS */, _hoisted_1$f))
2211
+ ], 12 /* STYLE, PROPS */, _hoisted_1$g))
2158
2212
  }
2159
2213
 
2160
- script$k.render = render$g;
2161
- script$k.__file = "src/components/UniCall/UniCall.vue";
2214
+ script$l.render = render$h;
2215
+ script$l.__file = "src/components/UniCall/UniCall.vue";
2162
2216
 
2163
- script$k.install = (app) => {
2164
- app.component(script$k.name, script$k);
2217
+ script$l.install = (app) => {
2218
+ app.component(script$l.name, script$l);
2165
2219
  };
2166
2220
 
2167
2221
  // 花瓣图片资源 (base64编码)
@@ -2201,7 +2255,7 @@
2201
2255
  'https://h5cdn.unika.cc/static/img/uniComponents/huaban.png'
2202
2256
  // 可以添加更多花瓣图片
2203
2257
  ];
2204
- var script$j = vue.defineComponent({
2258
+ var script$k = vue.defineComponent({
2205
2259
  name: 'uni-effect',
2206
2260
  props: {
2207
2261
  element: {
@@ -2299,14 +2353,14 @@
2299
2353
  }
2300
2354
  });
2301
2355
 
2302
- const _hoisted_1$e = { class: "effect-wrap" };
2356
+ const _hoisted_1$f = { class: "effect-wrap" };
2303
2357
 
2304
- function render$f(_ctx, _cache, $props, $setup, $data, $options) {
2358
+ function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2305
2359
  return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
2306
2360
  class: "ele-effect eles",
2307
2361
  style: vue.normalizeStyle(_ctx.containerStyle)
2308
2362
  }, [
2309
- vue.createElementVNode("div", _hoisted_1$e, [
2363
+ vue.createElementVNode("div", _hoisted_1$f, [
2310
2364
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.particles, (particle, index) => {
2311
2365
  return (vue.openBlock(), vue.createElementBlock("div", {
2312
2366
  key: index,
@@ -2320,11 +2374,11 @@
2320
2374
  ])
2321
2375
  }
2322
2376
 
2323
- script$j.render = render$f;
2324
- script$j.__file = "src/components/UniEffect/UniEffect.vue";
2377
+ script$k.render = render$g;
2378
+ script$k.__file = "src/components/UniEffect/UniEffect.vue";
2325
2379
 
2326
- script$j.install = (app) => {
2327
- app.component(script$j.name, script$j);
2380
+ script$k.install = (app) => {
2381
+ app.component(script$k.name, script$k);
2328
2382
  };
2329
2383
 
2330
2384
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -22882,13 +22936,13 @@
22882
22936
  ListCache.prototype.get = listCacheGet;
22883
22937
  ListCache.prototype.has = listCacheHas;
22884
22938
  ListCache.prototype.set = listCacheSet;
22885
- var Map = getNative(root$1, "Map");
22886
- var Map$1 = Map;
22939
+ var Map$1 = getNative(root$1, "Map");
22940
+ var Map$1$1 = Map$1;
22887
22941
  function mapCacheClear() {
22888
22942
  this.size = 0;
22889
22943
  this.__data__ = {
22890
22944
  "hash": new Hash(),
22891
- "map": new (Map$1 || ListCache)(),
22945
+ "map": new (Map$1$1 || ListCache)(),
22892
22946
  "string": new Hash()
22893
22947
  };
22894
22948
  }
@@ -22959,7 +23013,7 @@
22959
23013
  var data = this.__data__;
22960
23014
  if (data instanceof ListCache) {
22961
23015
  var pairs = data.__data__;
22962
- if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
23016
+ if (!Map$1$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
22963
23017
  pairs.push([key, value]);
22964
23018
  this.size = ++data.size;
22965
23019
  return this;
@@ -23057,9 +23111,9 @@
23057
23111
  var Set$1$1 = Set$1;
23058
23112
  var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]";
23059
23113
  var dataViewTag$3 = "[object DataView]";
23060
- var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1$1), weakMapCtorString = toSource(WeakMap$1);
23114
+ var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1$1), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1$1), weakMapCtorString = toSource(WeakMap$1);
23061
23115
  var getTag = baseGetTag;
23062
- if (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1$1 && getTag(new Set$1$1()) != setTag$4 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) {
23116
+ if (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$3 || Map$1$1 && getTag(new Map$1$1()) != mapTag$4 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1$1 && getTag(new Set$1$1()) != setTag$4 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) {
23063
23117
  getTag = function(value) {
23064
23118
  var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
23065
23119
  if (ctorString) {
@@ -23806,7 +23860,7 @@
23806
23860
  }
23807
23861
  var Vue3Lottie = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
23808
23862
 
23809
- var script$i = vue.defineComponent({
23863
+ var script$j = vue.defineComponent({
23810
23864
  name: 'uni-lottie',
23811
23865
  components: {
23812
23866
  Vue3Lottie
@@ -23867,9 +23921,9 @@
23867
23921
  }
23868
23922
  });
23869
23923
 
23870
- const _hoisted_1$d = ["data-id", "data-pid", "data-type", "data-show"];
23924
+ const _hoisted_1$e = ["data-id", "data-pid", "data-type", "data-show"];
23871
23925
 
23872
- function render$e(_ctx, _cache, $props, $setup, $data, $options) {
23926
+ function render$f(_ctx, _cache, $props, $setup, $data, $options) {
23873
23927
  const _component_Vue3Lottie = vue.resolveComponent("Vue3Lottie");
23874
23928
 
23875
23929
  return (vue.openBlock(), vue.createElementBlock("div", {
@@ -23892,17 +23946,17 @@
23892
23946
  ref: "lottieAnimation"
23893
23947
  }, null, 8 /* PROPS */, ["style", "animationLink", "loop", "delay"])
23894
23948
  ], 4 /* STYLE */)
23895
- ], 12 /* STYLE, PROPS */, _hoisted_1$d))
23949
+ ], 12 /* STYLE, PROPS */, _hoisted_1$e))
23896
23950
  }
23897
23951
 
23898
- script$i.render = render$e;
23899
- script$i.__file = "src/components/UniLottie/UniLottie.vue";
23952
+ script$j.render = render$f;
23953
+ script$j.__file = "src/components/UniLottie/UniLottie.vue";
23900
23954
 
23901
- script$i.install = (app) => {
23902
- app.component(script$i.name, script$i);
23955
+ script$j.install = (app) => {
23956
+ app.component(script$j.name, script$j);
23903
23957
  };
23904
23958
 
23905
- var script$h = vue.defineComponent({
23959
+ var script$i = vue.defineComponent({
23906
23960
  name: 'uni-button',
23907
23961
  props: {
23908
23962
  element: {
@@ -23969,9 +24023,9 @@
23969
24023
  }
23970
24024
  });
23971
24025
 
23972
- const _hoisted_1$c = { class: "button-content" };
24026
+ const _hoisted_1$d = { class: "button-content" };
23973
24027
 
23974
- function render$d(_ctx, _cache, $props, $setup, $data, $options) {
24028
+ function render$e(_ctx, _cache, $props, $setup, $data, $options) {
23975
24029
  return (vue.openBlock(), vue.createElementBlock("div", {
23976
24030
  class: "button eles",
23977
24031
  style: vue.normalizeStyle(_ctx.containerStyle),
@@ -23984,7 +24038,7 @@
23984
24038
  boxShadow: _ctx.shadowStyle
23985
24039
  })
23986
24040
  }, [
23987
- vue.createElementVNode("div", _hoisted_1$c, [
24041
+ vue.createElementVNode("div", _hoisted_1$d, [
23988
24042
  vue.createElementVNode("span", {
23989
24043
  class: "btn-text",
23990
24044
  style: vue.normalizeStyle(_ctx.bntStyle)
@@ -23994,18 +24048,25 @@
23994
24048
  ], 4 /* STYLE */))
23995
24049
  }
23996
24050
 
23997
- script$h.render = render$d;
23998
- script$h.__file = "src/components/UniButton/UniButton.vue";
24051
+ script$i.render = render$e;
24052
+ script$i.__file = "src/components/UniButton/UniButton.vue";
23999
24053
 
24000
- script$h.install = (app) => {
24001
- app.component(script$h.name, script$h);
24054
+ script$i.install = (app) => {
24055
+ app.component(script$i.name, script$i);
24002
24056
  };
24003
24057
 
24058
+ const PLACEHOLDER_GIFT_QR_CODE = 'https://h5cdn.unika.cc/static/img/uniComponents/giftqrcode.png';
24059
+ function isRealGiftQRCode(url) {
24060
+ const value = String(url || '').trim();
24061
+ return !!value && value !== PLACEHOLDER_GIFT_QR_CODE;
24062
+ }
24063
+
24004
24064
  async function requestJson(url, init) {
24005
- const timeout = init?.timeout ?? 8000;
24065
+ var _a;
24066
+ const timeout = (_a = init === null || init === void 0 ? void 0 : init.timeout) !== null && _a !== void 0 ? _a : 8000;
24006
24067
  const controller = new AbortController();
24007
24068
  const timer = window.setTimeout(() => controller.abort(), timeout);
24008
- const { timeout: _timeout, ...fetchInit } = init ?? {};
24069
+ const { timeout: _timeout, ...fetchInit } = init !== null && init !== void 0 ? init : {};
24009
24070
  try {
24010
24071
  const res = await fetch(url, { ...fetchInit, signal: controller.signal });
24011
24072
  const data = (await res.json());
@@ -24015,7 +24076,7 @@
24015
24076
  window.clearTimeout(timer);
24016
24077
  }
24017
24078
  }
24018
- var script$g = vue.defineComponent({
24079
+ var script$h = vue.defineComponent({
24019
24080
  name: 'uni-barrage',
24020
24081
  props: {
24021
24082
  env: {
@@ -24061,6 +24122,7 @@
24061
24122
  'มีลูกเต็มบ้าน มีหลานเต็มเมือง',
24062
24123
  'รักแท้จงอยู่คู่คุณทั้งสองตลอดไป',
24063
24124
  ];
24125
+ const hasRealGiftQR = vue.computed(() => { var _a, _b; return isRealGiftQRCode((_b = (_a = props.global) === null || _a === void 0 ? void 0 : _a.toolbar) === null || _b === void 0 ? void 0 : _b.giftQRCode); });
24064
24126
  const bulletConfig = vue.computed(() => {
24065
24127
  return {
24066
24128
  bgColor: props.global.toolbar.bgColor || '#ffffff',
@@ -24281,10 +24343,13 @@
24281
24343
  imageLoaded.value = true;
24282
24344
  };
24283
24345
  const showGiftPopup = () => {
24346
+ if (!hasRealGiftQR.value)
24347
+ return;
24284
24348
  showGift.value = true;
24285
24349
  imageLoaded.value = false; // 重置加载状态
24286
24350
  };
24287
24351
  return {
24352
+ hasRealGiftQR,
24288
24353
  name,
24289
24354
  content,
24290
24355
  showPopup,
@@ -24323,31 +24388,31 @@
24323
24388
  }
24324
24389
  });
24325
24390
 
24326
- const _hoisted_1$b = {
24391
+ const _hoisted_1$c = {
24327
24392
  id: "toolbarNew",
24328
24393
  ref: "toolbar"
24329
24394
  };
24330
- const _hoisted_2$b = { class: "toolbar" };
24331
- const _hoisted_3$b = { class: "bar-left" };
24332
- const _hoisted_4$9 = /*#__PURE__*/vue.createElementVNode("img", { src: "https://h5cdn.unika.cc/static/img/uniComponents/hide.png" }, null, -1 /* HOISTED */);
24333
- const _hoisted_5$8 = [
24334
- _hoisted_4$9
24395
+ const _hoisted_2$c = { class: "toolbar" };
24396
+ const _hoisted_3$c = { class: "bar-left" };
24397
+ const _hoisted_4$a = /*#__PURE__*/vue.createElementVNode("img", { src: "https://h5cdn.unika.cc/static/img/uniComponents/hide.png" }, null, -1 /* HOISTED */);
24398
+ const _hoisted_5$9 = [
24399
+ _hoisted_4$a
24335
24400
  ];
24336
- const _hoisted_6$6 = {
24401
+ const _hoisted_6$7 = {
24337
24402
  key: 0,
24338
24403
  class: "bar-right"
24339
24404
  };
24340
- const _hoisted_7$5 = {
24405
+ const _hoisted_7$6 = {
24341
24406
  key: 0,
24342
24407
  class: "bar-praise"
24343
24408
  };
24344
- const _hoisted_8$2 = /*#__PURE__*/vue.createElementVNode("strong", { class: "ani-num" }, "+1", -1 /* HOISTED */);
24345
- const _hoisted_9$2 = /*#__PURE__*/vue.createElementVNode("div", { class: "stop-longtap" }, null, -1 /* HOISTED */);
24346
- const _hoisted_10$2 = /*#__PURE__*/vue.createElementVNode("img", {
24409
+ const _hoisted_8$3 = /*#__PURE__*/vue.createElementVNode("strong", { class: "ani-num" }, "+1", -1 /* HOISTED */);
24410
+ const _hoisted_9$3 = /*#__PURE__*/vue.createElementVNode("div", { class: "stop-longtap" }, null, -1 /* HOISTED */);
24411
+ const _hoisted_10$3 = /*#__PURE__*/vue.createElementVNode("img", {
24347
24412
  src: "https://h5cdn.unika.cc/static/img/uniComponents/parise.png",
24348
24413
  class: "animated"
24349
24414
  }, null, -1 /* HOISTED */);
24350
- const _hoisted_11$2 = /*#__PURE__*/vue.createElementVNode("div", { class: "zan-wrap" }, [
24415
+ const _hoisted_11$3 = /*#__PURE__*/vue.createElementVNode("div", { class: "zan-wrap" }, [
24351
24416
  /*#__PURE__*/vue.createElementVNode("span"),
24352
24417
  /*#__PURE__*/vue.createElementVNode("span"),
24353
24418
  /*#__PURE__*/vue.createElementVNode("span"),
@@ -24357,23 +24422,23 @@
24357
24422
  /*#__PURE__*/vue.createElementVNode("span"),
24358
24423
  /*#__PURE__*/vue.createElementVNode("span")
24359
24424
  ], -1 /* HOISTED */);
24360
- const _hoisted_12$2 = [
24361
- _hoisted_8$2,
24362
- _hoisted_9$2,
24363
- _hoisted_10$2,
24364
- _hoisted_11$2
24425
+ const _hoisted_12$3 = [
24426
+ _hoisted_8$3,
24427
+ _hoisted_9$3,
24428
+ _hoisted_10$3,
24429
+ _hoisted_11$3
24365
24430
  ];
24366
- const _hoisted_13$2 = { class: "bar-messwin" };
24367
- const _hoisted_14$2 = /*#__PURE__*/vue.createElementVNode("img", {
24431
+ const _hoisted_13$3 = { class: "bar-messwin" };
24432
+ const _hoisted_14$3 = /*#__PURE__*/vue.createElementVNode("img", {
24368
24433
  src: "https://h5cdn.unika.cc/static/img/uniComponents/mess-logo.png",
24369
24434
  alt: "",
24370
24435
  class: "mess-logo"
24371
24436
  }, null, -1 /* HOISTED */);
24372
- const _hoisted_15$2 = /*#__PURE__*/vue.createElementVNode("div", { class: "mess-title" }, "ข้อความอวยพร", -1 /* HOISTED */);
24373
- const _hoisted_16$2 = { class: "mess-input" };
24374
- const _hoisted_17$2 = { class: "mess-textarea" };
24375
- const _hoisted_18$2 = { class: "wish-dropdown" };
24376
- const _hoisted_19$2 = ["onClick"];
24437
+ const _hoisted_15$3 = /*#__PURE__*/vue.createElementVNode("div", { class: "mess-title" }, "ข้อความอวยพร", -1 /* HOISTED */);
24438
+ const _hoisted_16$3 = { class: "mess-input" };
24439
+ const _hoisted_17$3 = { class: "mess-textarea" };
24440
+ const _hoisted_18$3 = { class: "wish-dropdown" };
24441
+ const _hoisted_19$3 = ["onClick"];
24377
24442
  const _hoisted_20$2 = /*#__PURE__*/vue.createElementVNode("div", { class: "wish-dot" }, "•", -1 /* HOISTED */);
24378
24443
  const _hoisted_21$2 = { class: "wish-text" };
24379
24444
  const _hoisted_22$2 = {
@@ -24410,7 +24475,7 @@
24410
24475
  const _hoisted_35 = { class: "mint-msgbox-message" };
24411
24476
  const _hoisted_36 = { class: "mint-msgbox-btns" };
24412
24477
 
24413
- function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24478
+ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
24414
24479
  return (vue.openBlock(), vue.createElementBlock("div", null, [
24415
24480
  vue.createCommentVNode(" 弹幕显示区域 "),
24416
24481
  vue.withDirectives(vue.createElementVNode("div", {
@@ -24432,9 +24497,9 @@
24432
24497
  [vue.vShow, _ctx.showBullets]
24433
24498
  ]),
24434
24499
  vue.createCommentVNode(" 底部工具栏 "),
24435
- vue.createElementVNode("div", _hoisted_1$b, [
24436
- vue.createElementVNode("div", _hoisted_2$b, [
24437
- vue.withDirectives(vue.createElementVNode("div", _hoisted_3$b, [
24500
+ vue.createElementVNode("div", _hoisted_1$c, [
24501
+ vue.createElementVNode("div", _hoisted_2$c, [
24502
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_3$c, [
24438
24503
  vue.createElementVNode("input", {
24439
24504
  type: "text",
24440
24505
  placeholder: "ข้อความอวยพร..",
@@ -24453,13 +24518,13 @@
24453
24518
  vue.withDirectives(vue.createElementVNode("div", {
24454
24519
  onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args) => (_ctx.toggleBullets && _ctx.toggleBullets(...args)), ["stop"])),
24455
24520
  class: "toolbar-close"
24456
- }, [..._hoisted_5$8], 512 /* NEED_PATCH */), [
24521
+ }, [..._hoisted_5$9], 512 /* NEED_PATCH */), [
24457
24522
  [vue.vShow, !_ctx.showBullets]
24458
24523
  ]),
24459
24524
  vue.createCommentVNode(" 新增的右侧按钮区域 "),
24460
24525
  ((_ctx.global.toolbar.gift || _ctx.global.toolbar.praise) && _ctx.showBullets)
24461
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$6, [
24462
- (_ctx.global.toolbar.gift && _ctx.global.toolbar.giftQRCode)
24526
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$7, [
24527
+ (_ctx.global.toolbar.gift && _ctx.hasRealGiftQR)
24463
24528
  ? (vue.openBlock(), vue.createElementBlock("img", {
24464
24529
  key: 0,
24465
24530
  src: "https://h5cdn.unika.cc/static/img/uniComponents/gift.png",
@@ -24474,11 +24539,11 @@
24474
24539
  onClick: _cache[4] || (_cache[4] = (...args) => (_ctx.handlePraise && _ctx.handlePraise(...args)))
24475
24540
  }, [
24476
24541
  (_ctx.praiseCount > 0)
24477
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$5, vue.toDisplayString(_ctx.praiseCount), 1 /* TEXT */))
24542
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$6, vue.toDisplayString(_ctx.praiseCount), 1 /* TEXT */))
24478
24543
  : vue.createCommentVNode("v-if", true),
24479
24544
  vue.createElementVNode("div", {
24480
24545
  class: vue.normalizeClass(["bar-zan", { active: _ctx.isPraised }])
24481
- }, [..._hoisted_12$2], 2 /* CLASS */)
24546
+ }, [..._hoisted_12$3], 2 /* CLASS */)
24482
24547
  ]))
24483
24548
  : vue.createCommentVNode("v-if", true)
24484
24549
  ]))
@@ -24493,11 +24558,11 @@
24493
24558
  style: {"z-index":"2003"},
24494
24559
  onClick: _cache[12] || (_cache[12] = vue.withModifiers((...args) => (_ctx.closePopup && _ctx.closePopup(...args)), ["self"]))
24495
24560
  }, [
24496
- vue.createElementVNode("div", _hoisted_13$2, [
24497
- _hoisted_14$2,
24498
- _hoisted_15$2,
24561
+ vue.createElementVNode("div", _hoisted_13$3, [
24562
+ _hoisted_14$3,
24563
+ _hoisted_15$3,
24499
24564
  vue.createCommentVNode(" 祝福留言. "),
24500
- vue.createElementVNode("div", _hoisted_16$2, [
24565
+ vue.createElementVNode("div", _hoisted_16$3, [
24501
24566
  vue.withDirectives(vue.createElementVNode("input", {
24502
24567
  ref: "nameInput",
24503
24568
  "onUpdate:modelValue": _cache[5] || (_cache[5] = $event => ((_ctx.name) = $event)),
@@ -24510,7 +24575,7 @@
24510
24575
  ])
24511
24576
  ]),
24512
24577
  vue.createCommentVNode(" 请输入您的姓名 "),
24513
- vue.createElementVNode("div", _hoisted_17$2, [
24578
+ vue.createElementVNode("div", _hoisted_17$3, [
24514
24579
  vue.withDirectives(vue.createElementVNode("textarea", {
24515
24580
  "onUpdate:modelValue": _cache[7] || (_cache[7] = $event => ((_ctx.content) = $event)),
24516
24581
  placeholder: "ข้อความของคุณ..",
@@ -24527,7 +24592,7 @@
24527
24592
  onClick: _cache[9] || (_cache[9] = (...args) => (_ctx.showBlessingOptions && _ctx.showBlessingOptions(...args)))
24528
24593
  }),
24529
24594
  vue.createCommentVNode(" 请选择祝福语 "),
24530
- vue.withDirectives(vue.createElementVNode("div", _hoisted_18$2, [
24595
+ vue.withDirectives(vue.createElementVNode("div", _hoisted_18$3, [
24531
24596
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.blessingOptions, (blessing, index) => {
24532
24597
  return (vue.openBlock(), vue.createElementBlock("div", {
24533
24598
  class: "wish-item",
@@ -24536,7 +24601,7 @@
24536
24601
  }, [
24537
24602
  _hoisted_20$2,
24538
24603
  vue.createElementVNode("div", _hoisted_21$2, vue.toDisplayString(blessing), 1 /* TEXT */)
24539
- ], 8 /* PROPS */, _hoisted_19$2))
24604
+ ], 8 /* PROPS */, _hoisted_19$3))
24540
24605
  }), 128 /* KEYED_FRAGMENT */))
24541
24606
  ], 512 /* NEED_PATCH */), [
24542
24607
  [vue.vShow, _ctx.showBlessingList]
@@ -24620,11 +24685,11 @@
24620
24685
  ]))
24621
24686
  }
24622
24687
 
24623
- script$g.render = render$c;
24624
- script$g.__file = "src/components/UniBarrage/UniBarrage.vue";
24688
+ script$h.render = render$d;
24689
+ script$h.__file = "src/components/UniBarrage/UniBarrage.vue";
24625
24690
 
24626
- script$g.install = (app) => {
24627
- app.component(script$g.name, script$g);
24691
+ script$h.install = (app) => {
24692
+ app.component(script$h.name, script$h);
24628
24693
  };
24629
24694
 
24630
24695
  function useTouchHandler(pages, currentPageId, direction, isLoopEnabled, onUserInteraction) {
@@ -24973,7 +25038,7 @@
24973
25038
  return true;
24974
25039
  }
24975
25040
 
24976
- var script$f = vue.defineComponent({
25041
+ var script$g = vue.defineComponent({
24977
25042
  name: 'uni-form-input',
24978
25043
  props: {
24979
25044
  global: {
@@ -25086,14 +25151,14 @@
25086
25151
  }
25087
25152
  });
25088
25153
 
25089
- const _hoisted_1$a = ["data-id"];
25090
- const _hoisted_2$a = {
25154
+ const _hoisted_1$b = ["data-id"];
25155
+ const _hoisted_2$b = {
25091
25156
  key: 0,
25092
25157
  class: "required-marker"
25093
25158
  };
25094
- const _hoisted_3$a = ["type", "placeholder", "readonly", "tabindex"];
25159
+ const _hoisted_3$b = ["type", "placeholder", "readonly", "tabindex"];
25095
25160
 
25096
- function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25161
+ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
25097
25162
  return (vue.openBlock(), vue.createElementBlock("div", {
25098
25163
  class: vue.normalizeClass(["ele-form form-input eles", { 'form-input--editing': _ctx.isEditing }]),
25099
25164
  "data-id": _ctx.element.id,
@@ -25107,7 +25172,7 @@
25107
25172
  })
25108
25173
  }, [
25109
25174
  (_ctx.required)
25110
- ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$a, "*"))
25175
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$b, "*"))
25111
25176
  : vue.createCommentVNode("v-if", true),
25112
25177
  vue.withDirectives(vue.createElementVNode("input", {
25113
25178
  type: _ctx.inputType,
@@ -25120,17 +25185,17 @@
25120
25185
  onMousedown: _cache[1] || (_cache[1] = (...args) => (_ctx.onInputPointerDown && _ctx.onInputPointerDown(...args))),
25121
25186
  onTouchstart: _cache[2] || (_cache[2] = (...args) => (_ctx.onInputPointerDown && _ctx.onInputPointerDown(...args))),
25122
25187
  onBlur: _cache[3] || (_cache[3] = (...args) => (_ctx.handleBlur && _ctx.handleBlur(...args)))
25123
- }, null, 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_3$a), [
25188
+ }, null, 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_3$b), [
25124
25189
  [vue.vModelDynamic, _ctx.inputValue]
25125
25190
  ])
25126
25191
  ], 4 /* STYLE */)
25127
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$a))
25192
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$b))
25128
25193
  }
25129
25194
 
25130
- script$f.render = render$b;
25131
- script$f.__file = "src/components/UniFormInput/UniFormInput.vue";
25195
+ script$g.render = render$c;
25196
+ script$g.__file = "src/components/UniFormInput/UniFormInput.vue";
25132
25197
 
25133
- var script$e = vue.defineComponent({
25198
+ var script$f = vue.defineComponent({
25134
25199
  name: 'uni-form-submit',
25135
25200
  props: {
25136
25201
  global: {
@@ -25231,15 +25296,15 @@
25231
25296
  }
25232
25297
  });
25233
25298
 
25234
- const _hoisted_1$9 = ["data-id"];
25235
- const _hoisted_2$9 = ["disabled"];
25236
- const _hoisted_3$9 = {
25299
+ const _hoisted_1$a = ["data-id"];
25300
+ const _hoisted_2$a = ["disabled"];
25301
+ const _hoisted_3$a = {
25237
25302
  key: 0,
25238
25303
  class: "f-ovh"
25239
25304
  };
25240
- const _hoisted_4$8 = { class: "f-ovh" };
25305
+ const _hoisted_4$9 = { class: "f-ovh" };
25241
25306
 
25242
- function render$a(_ctx, _cache, $props, $setup, $data, $options) {
25307
+ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25243
25308
  return (vue.openBlock(), vue.createElementBlock("div", {
25244
25309
  class: "ele-form eles",
25245
25310
  "data-id": _ctx.element.id,
@@ -25252,19 +25317,19 @@
25252
25317
  disabled: _ctx.isSubmitting
25253
25318
  }, [
25254
25319
  (_ctx.isSubmitting)
25255
- ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$9, "กำลังส่ง..."))
25320
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$a, "กำลังส่ง..."))
25256
25321
  : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
25257
25322
  vue.createCommentVNode(" 提交中 "),
25258
- vue.createElementVNode("span", _hoisted_4$8, vue.toDisplayString(_ctx.btName), 1 /* TEXT */)
25323
+ vue.createElementVNode("span", _hoisted_4$9, vue.toDisplayString(_ctx.btName), 1 /* TEXT */)
25259
25324
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
25260
- ], 12 /* STYLE, PROPS */, _hoisted_2$9)
25261
- ], 12 /* STYLE, PROPS */, _hoisted_1$9))
25325
+ ], 12 /* STYLE, PROPS */, _hoisted_2$a)
25326
+ ], 12 /* STYLE, PROPS */, _hoisted_1$a))
25262
25327
  }
25263
25328
 
25264
- script$e.render = render$a;
25265
- script$e.__file = "src/components/UniFormSubmit/UniFormSubmit.vue";
25329
+ script$f.render = render$b;
25330
+ script$f.__file = "src/components/UniFormSubmit/UniFormSubmit.vue";
25266
25331
 
25267
- var script$d = vue.defineComponent({
25332
+ var script$e = vue.defineComponent({
25268
25333
  name: 'uni-form-select',
25269
25334
  props: {
25270
25335
  global: {
@@ -25370,21 +25435,21 @@
25370
25435
  }
25371
25436
  });
25372
25437
 
25373
- const _hoisted_1$8 = ["data-id"];
25374
- const _hoisted_2$8 = {
25438
+ const _hoisted_1$9 = ["data-id"];
25439
+ const _hoisted_2$9 = {
25375
25440
  key: 0,
25376
25441
  class: "require"
25377
25442
  };
25378
- const _hoisted_3$8 = { class: "fs-cont" };
25379
- const _hoisted_4$7 = {
25443
+ const _hoisted_3$9 = { class: "fs-cont" };
25444
+ const _hoisted_4$8 = {
25380
25445
  value: "",
25381
25446
  disabled: "",
25382
25447
  hidden: ""
25383
25448
  };
25384
- const _hoisted_5$7 = ["value"];
25385
- const _hoisted_6$5 = ["onClick"];
25449
+ const _hoisted_5$8 = ["value"];
25450
+ const _hoisted_6$6 = ["onClick"];
25386
25451
 
25387
- function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25452
+ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
25388
25453
  return (vue.openBlock(), vue.createElementBlock("div", {
25389
25454
  class: vue.normalizeClass(["ele-form f-select eles", { 'has-error': _ctx.hasError }]),
25390
25455
  "data-id": _ctx.element.id,
@@ -25399,9 +25464,9 @@
25399
25464
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.toggleDropdown && _ctx.toggleDropdown(...args)))
25400
25465
  }, [
25401
25466
  (_ctx.required)
25402
- ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$8, "*"))
25467
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$9, "*"))
25403
25468
  : vue.createCommentVNode("v-if", true),
25404
- vue.createElementVNode("span", _hoisted_3$8, vue.toDisplayString(_ctx.selectedLabel || _ctx.element.title), 1 /* TEXT */),
25469
+ vue.createElementVNode("span", _hoisted_3$9, vue.toDisplayString(_ctx.selectedLabel || _ctx.element.title), 1 /* TEXT */),
25405
25470
  vue.createElementVNode("i", {
25406
25471
  class: vue.normalizeClass(["iconfont icon-bofang1", { 'rotate-180': _ctx.isOpen }])
25407
25472
  }, null, 2 /* CLASS */)
@@ -25412,12 +25477,12 @@
25412
25477
  onChange: _cache[2] || (_cache[2] = (...args) => (_ctx.handleChange && _ctx.handleChange(...args))),
25413
25478
  onBlur: _cache[3] || (_cache[3] = (...args) => (_ctx.handleBlur && _ctx.handleBlur(...args)))
25414
25479
  }, [
25415
- vue.createElementVNode("option", _hoisted_4$7, vue.toDisplayString(_ctx.element.title), 1 /* TEXT */),
25480
+ vue.createElementVNode("option", _hoisted_4$8, vue.toDisplayString(_ctx.element.title), 1 /* TEXT */),
25416
25481
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.element.items, (item) => {
25417
25482
  return (vue.openBlock(), vue.createElementBlock("option", {
25418
25483
  key: item.value,
25419
25484
  value: item.value
25420
- }, vue.toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_5$7))
25485
+ }, vue.toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_5$8))
25421
25486
  }), 128 /* KEYED_FRAGMENT */))
25422
25487
  ], 544 /* NEED_HYDRATION, NEED_PATCH */), [
25423
25488
  [vue.vModelSelect, _ctx.selectedValue]
@@ -25433,18 +25498,18 @@
25433
25498
  key: item.value,
25434
25499
  class: vue.normalizeClass(["dropdown-item", { 'selected': item.value === _ctx.selectedValue }]),
25435
25500
  onClick: $event => (_ctx.selectItem(item))
25436
- }, vue.toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_6$5))
25501
+ }, vue.toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_6$6))
25437
25502
  }), 128 /* KEYED_FRAGMENT */))
25438
25503
  ], 4 /* STYLE */))
25439
25504
  : vue.createCommentVNode("v-if", true)
25440
25505
  ], 4 /* STYLE */)
25441
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$8))
25506
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$9))
25442
25507
  }
25443
25508
 
25444
- script$d.render = render$9;
25445
- script$d.__file = "src/components/UniFormSelect/UniFormSelect.vue";
25509
+ script$e.render = render$a;
25510
+ script$e.__file = "src/components/UniFormSelect/UniFormSelect.vue";
25446
25511
 
25447
- var script$c = vue.defineComponent({
25512
+ var script$d = vue.defineComponent({
25448
25513
  name: 'uni-form-single',
25449
25514
  props: {
25450
25515
  global: {
@@ -25525,16 +25590,16 @@
25525
25590
  }
25526
25591
  });
25527
25592
 
25528
- const _hoisted_1$7 = ["data-id"];
25529
- const _hoisted_2$7 = { class: "fs-tit" };
25530
- const _hoisted_3$7 = {
25593
+ const _hoisted_1$8 = ["data-id"];
25594
+ const _hoisted_2$8 = { class: "fs-tit" };
25595
+ const _hoisted_3$8 = {
25531
25596
  key: 0,
25532
25597
  class: "require"
25533
25598
  };
25534
- const _hoisted_4$6 = ["onClick"];
25535
- const _hoisted_5$6 = ["name", "value"];
25599
+ const _hoisted_4$7 = ["onClick"];
25600
+ const _hoisted_5$7 = ["name", "value"];
25536
25601
 
25537
- function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25602
+ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25538
25603
  return (vue.openBlock(), vue.createElementBlock("div", {
25539
25604
  class: vue.normalizeClass(["ele-form f-single eles", { 'has-error': _ctx.hasError }]),
25540
25605
  "data-id": _ctx.element.id,
@@ -25544,9 +25609,9 @@
25544
25609
  class: "ani-wrap",
25545
25610
  style: vue.normalizeStyle(_ctx.innerStyles)
25546
25611
  }, [
25547
- vue.createElementVNode("div", _hoisted_2$7, [
25612
+ vue.createElementVNode("div", _hoisted_2$8, [
25548
25613
  (_ctx.required)
25549
- ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$7, "*"))
25614
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$8, "*"))
25550
25615
  : vue.createCommentVNode("v-if", true),
25551
25616
  vue.createTextVNode(" " + vue.toDisplayString(_ctx.element.title), 1 /* TEXT */)
25552
25617
  ]),
@@ -25564,22 +25629,22 @@
25564
25629
  class: "fs-txt",
25565
25630
  style: vue.normalizeStyle(_ctx.itemStyles)
25566
25631
  }, vue.toDisplayString(item.label), 5 /* TEXT, STYLE */)
25567
- ], 8 /* PROPS */, _hoisted_4$6))
25632
+ ], 8 /* PROPS */, _hoisted_4$7))
25568
25633
  }), 128 /* KEYED_FRAGMENT */))
25569
25634
  ]),
25570
25635
  vue.createElementVNode("input", {
25571
25636
  type: "hidden",
25572
25637
  name: `singleselect_${_ctx.element.id}`,
25573
25638
  value: _ctx.selectedValue
25574
- }, null, 8 /* PROPS */, _hoisted_5$6)
25639
+ }, null, 8 /* PROPS */, _hoisted_5$7)
25575
25640
  ], 4 /* STYLE */)
25576
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$7))
25641
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$8))
25577
25642
  }
25578
25643
 
25579
- script$c.render = render$8;
25580
- script$c.__file = "src/components/UniFormSingle/UniFormSingle.vue";
25644
+ script$d.render = render$9;
25645
+ script$d.__file = "src/components/UniFormSingle/UniFormSingle.vue";
25581
25646
 
25582
- var script$b = vue.defineComponent({
25647
+ var script$c = vue.defineComponent({
25583
25648
  name: 'uni-form-multiple',
25584
25649
  props: {
25585
25650
  global: {
@@ -25670,16 +25735,16 @@
25670
25735
  }
25671
25736
  });
25672
25737
 
25673
- const _hoisted_1$6 = ["data-id"];
25674
- const _hoisted_2$6 = { class: "fs-tit" };
25675
- const _hoisted_3$6 = {
25738
+ const _hoisted_1$7 = ["data-id"];
25739
+ const _hoisted_2$7 = { class: "fs-tit" };
25740
+ const _hoisted_3$7 = {
25676
25741
  key: 0,
25677
25742
  class: "require"
25678
25743
  };
25679
- const _hoisted_4$5 = ["onClick"];
25680
- const _hoisted_5$5 = ["name", "value"];
25744
+ const _hoisted_4$6 = ["onClick"];
25745
+ const _hoisted_5$6 = ["name", "value"];
25681
25746
 
25682
- function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25747
+ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25683
25748
  return (vue.openBlock(), vue.createElementBlock("div", {
25684
25749
  class: vue.normalizeClass(["ele-form f-multiple eles", { 'has-error': _ctx.hasError }]),
25685
25750
  "data-id": _ctx.element.id,
@@ -25689,9 +25754,9 @@
25689
25754
  class: "ani-wrap",
25690
25755
  style: vue.normalizeStyle(_ctx.innerStyles)
25691
25756
  }, [
25692
- vue.createElementVNode("div", _hoisted_2$6, [
25757
+ vue.createElementVNode("div", _hoisted_2$7, [
25693
25758
  (_ctx.required)
25694
- ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$6, "*"))
25759
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$7, "*"))
25695
25760
  : vue.createCommentVNode("v-if", true),
25696
25761
  vue.createTextVNode(" " + vue.toDisplayString(_ctx.element.title), 1 /* TEXT */)
25697
25762
  ]),
@@ -25709,22 +25774,22 @@
25709
25774
  class: "fs-txt",
25710
25775
  style: vue.normalizeStyle(_ctx.itemStyles)
25711
25776
  }, vue.toDisplayString(item.label), 5 /* TEXT, STYLE */)
25712
- ], 8 /* PROPS */, _hoisted_4$5))
25777
+ ], 8 /* PROPS */, _hoisted_4$6))
25713
25778
  }), 128 /* KEYED_FRAGMENT */))
25714
25779
  ]),
25715
25780
  vue.createElementVNode("input", {
25716
25781
  type: "hidden",
25717
25782
  name: `multiselect_${_ctx.element.id}`,
25718
25783
  value: _ctx.selectedValues.join(',')
25719
- }, null, 8 /* PROPS */, _hoisted_5$5)
25784
+ }, null, 8 /* PROPS */, _hoisted_5$6)
25720
25785
  ], 4 /* STYLE */)
25721
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$6))
25786
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$7))
25722
25787
  }
25723
25788
 
25724
- script$b.render = render$7;
25725
- script$b.__file = "src/components/UniFormMultiple/UniFormMultiple.vue";
25789
+ script$c.render = render$8;
25790
+ script$c.__file = "src/components/UniFormMultiple/UniFormMultiple.vue";
25726
25791
 
25727
- var script$a = vue.defineComponent({
25792
+ var script$b = vue.defineComponent({
25728
25793
  name: 'FormContainer',
25729
25794
  props: {
25730
25795
  autoReset: {
@@ -25748,7 +25813,7 @@
25748
25813
  }
25749
25814
  });
25750
25815
 
25751
- function render$6(_ctx, _cache, $props, $setup, $data, $options) {
25816
+ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25752
25817
  return (vue.openBlock(), vue.createElementBlock("form", {
25753
25818
  class: "form-container",
25754
25819
  onSubmit: _cache[0] || (_cache[0] = vue.withModifiers(() => {}, ["prevent"]))
@@ -25757,10 +25822,10 @@
25757
25822
  ], 32 /* NEED_HYDRATION */))
25758
25823
  }
25759
25824
 
25760
- script$a.render = render$6;
25761
- script$a.__file = "src/components/UniFormContainer/UniFormContainer.vue";
25825
+ script$b.render = render$7;
25826
+ script$b.__file = "src/components/UniFormContainer/UniFormContainer.vue";
25762
25827
 
25763
- var script$9 = /*#__PURE__*/ vue.defineComponent({
25828
+ var script$a = /*#__PURE__*/ vue.defineComponent({
25764
25829
  ...{ name: 'uni-menu-receipt' },
25765
25830
  __name: 'UniMenuReceipt',
25766
25831
  props: {
@@ -25790,9 +25855,9 @@
25790
25855
  }
25791
25856
  });
25792
25857
 
25793
- script$9.__file = "src/components/UniMenuReceipt/UniMenuReceipt.vue";
25858
+ script$a.__file = "src/components/UniMenuReceipt/UniMenuReceipt.vue";
25794
25859
 
25795
- var script$8 = /*#__PURE__*/ vue.defineComponent({
25860
+ var script$9 = /*#__PURE__*/ vue.defineComponent({
25796
25861
  ...{ name: 'uni-menu-video' },
25797
25862
  __name: 'UniMenuVideo',
25798
25863
  props: {
@@ -25822,9 +25887,9 @@
25822
25887
  }
25823
25888
  });
25824
25889
 
25825
- script$8.__file = "src/components/UniMenuVideo/UniMenuVideo.vue";
25890
+ script$9.__file = "src/components/UniMenuVideo/UniMenuVideo.vue";
25826
25891
 
25827
- var script$7 = /*#__PURE__*/ vue.defineComponent({
25892
+ var script$8 = /*#__PURE__*/ vue.defineComponent({
25828
25893
  ...{ name: 'uni-menu-tel' },
25829
25894
  __name: 'UniMenuTel',
25830
25895
  props: {
@@ -25854,9 +25919,9 @@
25854
25919
  }
25855
25920
  });
25856
25921
 
25857
- script$7.__file = "src/components/UniMenuTel/UniMenuTel.vue";
25922
+ script$8.__file = "src/components/UniMenuTel/UniMenuTel.vue";
25858
25923
 
25859
- var script$6 = /*#__PURE__*/ vue.defineComponent({
25924
+ var script$7 = /*#__PURE__*/ vue.defineComponent({
25860
25925
  ...{ name: 'uni-menu-map' },
25861
25926
  __name: 'UniMenuMap',
25862
25927
  props: {
@@ -25886,9 +25951,9 @@
25886
25951
  }
25887
25952
  });
25888
25953
 
25889
- script$6.__file = "src/components/UniMenuMap/UniMenuMap.vue";
25954
+ script$7.__file = "src/components/UniMenuMap/UniMenuMap.vue";
25890
25955
 
25891
- var script$5 = vue.defineComponent({
25956
+ var script$6 = vue.defineComponent({
25892
25957
  name: 'uni-menu',
25893
25958
  props: {
25894
25959
  global: {
@@ -25902,10 +25967,10 @@
25902
25967
  }
25903
25968
  },
25904
25969
  components: {
25905
- UniMenuReceipt: script$9,
25906
- UniMenuVideo: script$8,
25907
- UniMenuTel: script$7,
25908
- UniMenuMap: script$6
25970
+ UniMenuReceipt: script$a,
25971
+ UniMenuVideo: script$9,
25972
+ UniMenuTel: script$8,
25973
+ UniMenuMap: script$7
25909
25974
  },
25910
25975
  setup(props) {
25911
25976
  // 状态管理
@@ -26104,45 +26169,45 @@
26104
26169
  });
26105
26170
 
26106
26171
  const _withScopeId$1 = n => (vue.pushScopeId("data-v-5e9efd2f"),n=n(),vue.popScopeId(),n);
26107
- const _hoisted_1$5 = {
26172
+ const _hoisted_1$6 = {
26108
26173
  key: 0,
26109
26174
  id: "page-global"
26110
26175
  };
26111
- const _hoisted_2$5 = {
26176
+ const _hoisted_2$6 = {
26112
26177
  key: 1,
26113
26178
  id: "receipt-wrap",
26114
26179
  class: "v-slide"
26115
26180
  };
26116
- const _hoisted_3$5 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/vue.createElementVNode("div", { class: "r-tit" }, "แบบตอบรับ", -1 /* HOISTED */));
26117
- const _hoisted_4$4 = { class: "r-cont" };
26118
- const _hoisted_5$4 = { class: "r-list" };
26119
- const _hoisted_6$4 = ["value"];
26120
- const _hoisted_7$4 = { class: "r-which" };
26121
- const _hoisted_8$1 = ["value"];
26122
- const _hoisted_9$1 = { class: "r-submit" };
26123
- const _hoisted_10$1 = {
26181
+ const _hoisted_3$6 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/vue.createElementVNode("div", { class: "r-tit" }, "แบบตอบรับ", -1 /* HOISTED */));
26182
+ const _hoisted_4$5 = { class: "r-cont" };
26183
+ const _hoisted_5$5 = { class: "r-list" };
26184
+ const _hoisted_6$5 = ["value"];
26185
+ const _hoisted_7$5 = { class: "r-which" };
26186
+ const _hoisted_8$2 = ["value"];
26187
+ const _hoisted_9$2 = { class: "r-submit" };
26188
+ const _hoisted_10$2 = {
26124
26189
  key: 0,
26125
26190
  class: "which-select"
26126
26191
  };
26127
- const _hoisted_11$1 = ["onClick"];
26128
- const _hoisted_12$1 = {
26192
+ const _hoisted_11$2 = ["onClick"];
26193
+ const _hoisted_12$2 = {
26129
26194
  key: 1,
26130
26195
  class: "which-select"
26131
26196
  };
26132
- const _hoisted_13$1 = ["onClick"];
26133
- const _hoisted_14$1 = {
26197
+ const _hoisted_13$2 = ["onClick"];
26198
+ const _hoisted_14$2 = {
26134
26199
  key: 2,
26135
26200
  class: "tip-cover"
26136
26201
  };
26137
- const _hoisted_15$1 = { class: "tip" };
26138
- const _hoisted_16$1 = { class: "tip-content" };
26139
- const _hoisted_17$1 = {
26202
+ const _hoisted_15$2 = { class: "tip" };
26203
+ const _hoisted_16$2 = { class: "tip-content" };
26204
+ const _hoisted_17$2 = {
26140
26205
  key: 2,
26141
26206
  class: "global-v"
26142
26207
  };
26143
- const _hoisted_18$1 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/vue.createElementVNode("i", { class: "iconfont icon-buoumaotubiao20" }, null, -1 /* HOISTED */));
26144
- const _hoisted_19$1 = [
26145
- _hoisted_18$1
26208
+ const _hoisted_18$2 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/vue.createElementVNode("i", { class: "iconfont icon-buoumaotubiao20" }, null, -1 /* HOISTED */));
26209
+ const _hoisted_19$2 = [
26210
+ _hoisted_18$2
26146
26211
  ];
26147
26212
  const _hoisted_20$1 = ["innerHTML"];
26148
26213
  const _hoisted_21$1 = ["onClick"];
@@ -26152,7 +26217,7 @@
26152
26217
  };
26153
26218
  const _hoisted_23$1 = { class: "mint-toast-text" };
26154
26219
 
26155
- function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26220
+ function render$6(_ctx, _cache, $props, $setup, $data, $options) {
26156
26221
  const _component_uni_menu_receipt = vue.resolveComponent("uni-menu-receipt");
26157
26222
  const _component_uni_menu_video = vue.resolveComponent("uni-menu-video");
26158
26223
  const _component_uni_menu_tel = vue.resolveComponent("uni-menu-tel");
@@ -26161,7 +26226,7 @@
26161
26226
  return (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
26162
26227
  vue.createCommentVNode(" 主按钮组 "),
26163
26228
  (_ctx.showGlobalButtons)
26164
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
26229
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
26165
26230
  vue.createVNode(_component_uni_menu_receipt, {
26166
26231
  global: _ctx.global,
26167
26232
  onClick: _cache[0] || (_cache[0] = $event => (_ctx.showReceiptForm = true))
@@ -26182,15 +26247,15 @@
26182
26247
  : vue.createCommentVNode("v-if", true),
26183
26248
  vue.createCommentVNode(" 回执表单 "),
26184
26249
  (_ctx.showReceiptForm)
26185
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [
26250
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$6, [
26186
26251
  vue.createElementVNode("i", {
26187
26252
  class: "iconfont icon-guanbi",
26188
26253
  onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.closeReceipt && _ctx.closeReceipt(...args)))
26189
26254
  }),
26190
- _hoisted_3$5,
26255
+ _hoisted_3$6,
26191
26256
  vue.createCommentVNode(" 宾客回执 "),
26192
- vue.createElementVNode("div", _hoisted_4$4, [
26193
- vue.createElementVNode("ul", _hoisted_5$4, [
26257
+ vue.createElementVNode("div", _hoisted_4$5, [
26258
+ vue.createElementVNode("ul", _hoisted_5$5, [
26194
26259
  vue.createElementVNode("li", null, [
26195
26260
  vue.withDirectives(vue.createElementVNode("input", {
26196
26261
  "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => ((_ctx.receiptForm.guestName) = $event)),
@@ -26209,15 +26274,15 @@
26209
26274
  value: _ctx.selectedPeopleLabel,
26210
26275
  class: "r-input",
26211
26276
  onClick: _cache[5] || (_cache[5] = $event => (_ctx.showPeopleSelect = true))
26212
- }, null, 8 /* PROPS */, _hoisted_6$4)
26277
+ }, null, 8 /* PROPS */, _hoisted_6$5)
26213
26278
  ]),
26214
- vue.createElementVNode("li", _hoisted_7$4, [
26279
+ vue.createElementVNode("li", _hoisted_7$5, [
26215
26280
  vue.createElementVNode("input", {
26216
26281
  readonly: "",
26217
26282
  value: _ctx.selectedWhichLabel,
26218
26283
  class: "r-input",
26219
26284
  onClick: _cache[6] || (_cache[6] = $event => (_ctx.showWhichSelect = true))
26220
- }, null, 8 /* PROPS */, _hoisted_8$1)
26285
+ }, null, 8 /* PROPS */, _hoisted_8$2)
26221
26286
  ]),
26222
26287
  vue.createElementVNode("li", null, [
26223
26288
  vue.withDirectives(vue.createElementVNode("input", {
@@ -26231,7 +26296,7 @@
26231
26296
  ]),
26232
26297
  vue.createCommentVNode(" 手机号码 ")
26233
26298
  ]),
26234
- vue.createElementVNode("li", _hoisted_9$1, [
26299
+ vue.createElementVNode("li", _hoisted_9$2, [
26235
26300
  vue.createElementVNode("button", {
26236
26301
  class: "r-btn",
26237
26302
  onClick: _cache[8] || (_cache[8] = (...args) => (_ctx.submitReceipt && _ctx.submitReceipt(...args)))
@@ -26242,35 +26307,35 @@
26242
26307
  ]),
26243
26308
  vue.createCommentVNode(" 选择人数 "),
26244
26309
  (_ctx.showPeopleSelect)
26245
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
26310
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$2, [
26246
26311
  vue.createElementVNode("ul", null, [
26247
26312
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.peopleOptions, (item) => {
26248
26313
  return (vue.openBlock(), vue.createElementBlock("li", {
26249
26314
  key: item,
26250
26315
  onClick: $event => (_ctx.selectPeople(item))
26251
- }, vue.toDisplayString(item), 9 /* TEXT, PROPS */, _hoisted_11$1))
26316
+ }, vue.toDisplayString(item), 9 /* TEXT, PROPS */, _hoisted_11$2))
26252
26317
  }), 128 /* KEYED_FRAGMENT */))
26253
26318
  ])
26254
26319
  ]))
26255
26320
  : vue.createCommentVNode("v-if", true),
26256
26321
  vue.createCommentVNode(" 选择男方/女方 "),
26257
26322
  (_ctx.showWhichSelect)
26258
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$1, [
26323
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$2, [
26259
26324
  vue.createElementVNode("ul", null, [
26260
26325
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.global.receipt.whichList, (item) => {
26261
26326
  return (vue.openBlock(), vue.createElementBlock("li", {
26262
26327
  key: item.label,
26263
26328
  onClick: $event => (_ctx.selectWhich(item))
26264
- }, vue.toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_13$1))
26329
+ }, vue.toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_13$2))
26265
26330
  }), 128 /* KEYED_FRAGMENT */))
26266
26331
  ])
26267
26332
  ]))
26268
26333
  : vue.createCommentVNode("v-if", true),
26269
26334
  vue.createCommentVNode(" 提示信息 "),
26270
26335
  (_ctx.showTip)
26271
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$1, [
26272
- vue.createElementVNode("div", _hoisted_15$1, [
26273
- vue.createElementVNode("div", _hoisted_16$1, vue.toDisplayString(_ctx.tipMessage), 1 /* TEXT */),
26336
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$2, [
26337
+ vue.createElementVNode("div", _hoisted_15$2, [
26338
+ vue.createElementVNode("div", _hoisted_16$2, vue.toDisplayString(_ctx.tipMessage), 1 /* TEXT */),
26274
26339
  vue.createElementVNode("div", {
26275
26340
  class: "tip-btn",
26276
26341
  onClick: _cache[9] || (_cache[9] = $event => (_ctx.showTip = false))
@@ -26283,11 +26348,11 @@
26283
26348
  : vue.createCommentVNode("v-if", true),
26284
26349
  vue.createCommentVNode(" 视频播放 "),
26285
26350
  (_ctx.showVideoPlayer)
26286
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17$1, [
26351
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17$2, [
26287
26352
  vue.createElementVNode("div", {
26288
26353
  id: "close-gvideo",
26289
26354
  onClick: _cache[10] || (_cache[10] = (...args) => (_ctx.closeVideo && _ctx.closeVideo(...args)))
26290
- }, [..._hoisted_19$1]),
26355
+ }, [..._hoisted_19$2]),
26291
26356
  vue.createElementVNode("div", {
26292
26357
  class: "global-v-show",
26293
26358
  innerHTML: _ctx.global.video.url
@@ -26324,31 +26389,1276 @@
26324
26389
  ], 64 /* STABLE_FRAGMENT */))
26325
26390
  }
26326
26391
 
26327
- script$5.render = render$5;
26328
- script$5.__scopeId = "data-v-5e9efd2f";
26329
- script$5.__file = "src/components/UniMenu/UniMenu.vue";
26392
+ script$6.render = render$6;
26393
+ script$6.__scopeId = "data-v-5e9efd2f";
26394
+ script$6.__file = "src/components/UniMenu/UniMenu.vue";
26330
26395
 
26331
- var script$4 = vue.defineComponent({
26396
+ var script$5 = vue.defineComponent({
26332
26397
  name: 'UniWatermark'
26333
26398
  });
26334
26399
 
26335
26400
  const _withScopeId = n => (vue.pushScopeId("data-v-0f2e9262"),n=n(),vue.popScopeId(),n);
26336
- const _hoisted_1$4 = {
26401
+ const _hoisted_1$5 = {
26337
26402
  class: "unika-watermark",
26338
26403
  "aria-hidden": "true"
26339
26404
  };
26340
- const _hoisted_2$4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/vue.createElementVNode("div", { class: "unika-watermark-pattern" }, null, -1 /* HOISTED */));
26341
- const _hoisted_3$4 = [
26342
- _hoisted_2$4
26405
+ const _hoisted_2$5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/vue.createElementVNode("div", { class: "unika-watermark-pattern" }, null, -1 /* HOISTED */));
26406
+ const _hoisted_3$5 = [
26407
+ _hoisted_2$5
26343
26408
  ];
26344
26409
 
26345
- function render$4(_ctx, _cache, $props, $setup, $data, $options) {
26346
- return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [..._hoisted_3$4]))
26410
+ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26411
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [..._hoisted_3$5]))
26347
26412
  }
26348
26413
 
26349
- script$4.render = render$4;
26350
- script$4.__scopeId = "data-v-0f2e9262";
26351
- script$4.__file = "src/components/UniWatermark/UniWatermark.vue";
26414
+ script$5.render = render$5;
26415
+ script$5.__scopeId = "data-v-0f2e9262";
26416
+ script$5.__file = "src/components/UniWatermark/UniWatermark.vue";
26417
+
26418
+ /** Stable component type — shared across unika-components / biz-editor / ai-wedding / h5-server */
26419
+ const GUEST_AI_WEDDING_POSTER_TYPE = 'guest-ai-wedding-poster';
26420
+ const GUEST_AI_WEDDING_POSTER_VERSION = 1;
26421
+ /** Declarative inspector fields — shared by desktop/mobile editors */
26422
+ const guestAIWeddingPosterInspectorConfig = {
26423
+ content: [
26424
+ { key: 'title', label: '组件标题', control: 'text' },
26425
+ { key: 'description', label: '引导文案', control: 'textarea' },
26426
+ { key: 'buttonText', label: '按钮文字', control: 'text' },
26427
+ { key: 'invitationImage', label: '婚礼邀请函图片', control: 'invitation-image-upload' },
26428
+ { key: 'styles', label: '风格选项', control: 'poster-style-manager' },
26429
+ { key: 'result', label: '结果操作', control: 'result-actions' }
26430
+ ],
26431
+ appearance: [
26432
+ { key: 'appearance.backgroundColor', label: '背景颜色', control: 'color' },
26433
+ { key: 'appearance.textColor', label: '文字颜色', control: 'color' },
26434
+ { key: 'appearance.primaryColor', label: '主题色', control: 'color' },
26435
+ { key: 'appearance.borderRadius', label: '圆角', control: 'slider' },
26436
+ { key: 'appearance.buttonStyle', label: '按钮样式', control: 'select' },
26437
+ { key: 'appearance.compact', label: '紧凑模式', control: 'switch' }
26438
+ ],
26439
+ ai: [
26440
+ { key: 'output.aspectRatio', label: '输出比例', control: 'select' },
26441
+ { key: 'output.count', label: '生成数量', control: 'number' },
26442
+ { key: 'upload.maxFileSizeMB', label: '照片最大大小(MB)', control: 'number' },
26443
+ { key: 'privacy.autoDeleteAfterDays', label: '照片自动删除(天)', control: 'select' }
26444
+ ]
26445
+ };
26446
+
26447
+ /** Demo invitation — real couple wedding invite (Jim & …). Served from /public/demo */
26448
+ const DEMO_INVITATION_IMAGE_URL = '/demo/guest-invitation.jpg';
26449
+ const defaultGuestAIWeddingPosterConfig = {
26450
+ version: GUEST_AI_WEDDING_POSTER_VERSION,
26451
+ title: '和我们一起留下婚礼纪念',
26452
+ description: '上传一张照片,生成你与新人的专属婚礼邀请函',
26453
+ buttonText: '生成专属邀请函',
26454
+ invitationImage: {
26455
+ invitationImageId: 'demo-invitation-image',
26456
+ invitationImageUrl: DEMO_INVITATION_IMAGE_URL
26457
+ },
26458
+ styles: [
26459
+ {
26460
+ id: 'romantic-garden',
26461
+ name: '浪漫花园',
26462
+ thumbnail: '',
26463
+ promptTemplateId: 'poster-romantic-garden-v1',
26464
+ enabled: true,
26465
+ sort: 1
26466
+ },
26467
+ {
26468
+ id: 'cinematic',
26469
+ name: '电影质感',
26470
+ thumbnail: '',
26471
+ promptTemplateId: 'poster-cinematic-v1',
26472
+ enabled: true,
26473
+ sort: 2
26474
+ },
26475
+ {
26476
+ id: 'chibi-figure',
26477
+ name: '可爱手办',
26478
+ thumbnail: '',
26479
+ promptTemplateId: 'poster-chibi-figure-v1',
26480
+ enabled: true,
26481
+ sort: 3
26482
+ },
26483
+ {
26484
+ id: 'new-chinese',
26485
+ name: '新中式',
26486
+ thumbnail: '',
26487
+ promptTemplateId: 'poster-new-chinese-v1',
26488
+ enabled: true,
26489
+ sort: 4
26490
+ }
26491
+ ],
26492
+ result: {
26493
+ allowRegenerate: true,
26494
+ allowDownload: true,
26495
+ allowShare: true,
26496
+ maxRegenerateCount: 2
26497
+ },
26498
+ privacy: {
26499
+ requireConsent: false,
26500
+ consentText: '我已阅读并同意照片处理说明',
26501
+ noticeUrl: '',
26502
+ autoDeleteAfterDays: 7
26503
+ },
26504
+ upload: {
26505
+ maxFileSizeMB: 10,
26506
+ allowedTypes: ['image/jpeg', 'image/png', 'image/webp'],
26507
+ minWidth: 256,
26508
+ minHeight: 256,
26509
+ requireSingleFace: true
26510
+ },
26511
+ output: {
26512
+ aspectRatio: '3:4',
26513
+ count: 1
26514
+ },
26515
+ appearance: {
26516
+ backgroundColor: '#fffaf2',
26517
+ textColor: '#17345f',
26518
+ primaryColor: '#198cff',
26519
+ borderRadius: 20,
26520
+ buttonStyle: 'gradient',
26521
+ compact: false,
26522
+ paddingY: 16,
26523
+ paddingX: 16
26524
+ }
26525
+ };
26526
+ /** Default ElementData seed for editors */
26527
+ const guestAIWeddingPosterDefaultProps = {
26528
+ id: 'guest-ai-wedding-poster-default',
26529
+ pid: '',
26530
+ type: GUEST_AI_WEDDING_POSTER_TYPE,
26531
+ layerName: '宾客AI合影海报',
26532
+ sign: true,
26533
+ signSort: 20,
26534
+ ...defaultGuestAIWeddingPosterConfig,
26535
+ css: {
26536
+ borderWidth: 0,
26537
+ borderStyle: 'solid',
26538
+ borderColor: 'rgba(153, 153, 153, 1)',
26539
+ opacity: 1,
26540
+ backgroundColor: 'transparent',
26541
+ width: 345,
26542
+ height: 420,
26543
+ borderRadius: 0,
26544
+ top: 40,
26545
+ left: 15,
26546
+ transform: 0
26547
+ },
26548
+ properties: {
26549
+ visible: true,
26550
+ isLock: false,
26551
+ required: false,
26552
+ musicName: '',
26553
+ musicLink: '',
26554
+ musicHash: '',
26555
+ shadowSize: 0,
26556
+ shadowColor: '#999999',
26557
+ shadowX: 0,
26558
+ shadowY: 0,
26559
+ shadowBlur: 0,
26560
+ shadowPoint: 270,
26561
+ aniOrigin: 'default',
26562
+ animations: []
26563
+ },
26564
+ triggers: {
26565
+ event: '',
26566
+ link: '',
26567
+ go: '',
26568
+ phone: '',
26569
+ musicName: '',
26570
+ musicLink: '',
26571
+ musicHash: ''
26572
+ }
26573
+ };
26574
+
26575
+ const ALLOWED_MIME = new Set(['image/jpeg', 'image/png', 'image/webp']);
26576
+ const ALLOWED_RATIOS = new Set(['3:4', '4:5', '9:16']);
26577
+ function isRecord(v) {
26578
+ return !!v && typeof v === 'object' && !Array.isArray(v);
26579
+ }
26580
+ function hasImageRef(ref) {
26581
+ return !!(ref.id && String(ref.id).trim()) || !!(ref.url && String(ref.url).trim());
26582
+ }
26583
+ /** Migrate legacy groom/bride references → invitationImage */
26584
+ function normalizeInvitationImage(input) {
26585
+ var _a, _b;
26586
+ if (isRecord(input.invitationImage)) {
26587
+ return {
26588
+ invitationImageId: String((_a = input.invitationImage.invitationImageId) !== null && _a !== void 0 ? _a : ''),
26589
+ invitationImageUrl: String((_b = input.invitationImage.invitationImageUrl) !== null && _b !== void 0 ? _b : '')
26590
+ };
26591
+ }
26592
+ // legacy couple refs: prefer groom url as invitation fallback
26593
+ if (isRecord(input.references)) {
26594
+ const url = String(input.references.groomReferenceUrl || input.references.brideReferenceUrl || '');
26595
+ const id = String(input.references.groomReferenceId || input.references.brideReferenceId || '');
26596
+ return { invitationImageId: id, invitationImageUrl: url };
26597
+ }
26598
+ return { ...defaultGuestAIWeddingPosterConfig.invitationImage };
26599
+ }
26600
+ function validateGuestAIWeddingPosterConfig(input, options) {
26601
+ var _a, _b, _c, _d, _e;
26602
+ const issues = [];
26603
+ if (!isRecord(input)) {
26604
+ return { ok: false, issues: [{ path: '', message: '配置必须是对象' }] };
26605
+ }
26606
+ const title = String((_a = input.title) !== null && _a !== void 0 ? _a : '').trim();
26607
+ if (!title) {
26608
+ issues.push({ path: 'title', message: '标题不能为空' });
26609
+ }
26610
+ const styles = Array.isArray(input.styles) ? input.styles : [];
26611
+ const enabledStyles = styles.filter((s) => isRecord(s) && s.enabled !== false);
26612
+ if (enabledStyles.length < 1) {
26613
+ issues.push({ path: 'styles', message: '至少需要 1 个启用的风格' });
26614
+ }
26615
+ const styleIds = new Set();
26616
+ styles.forEach((raw, index) => {
26617
+ var _a, _b;
26618
+ if (!isRecord(raw)) {
26619
+ issues.push({ path: `styles[${index}]`, message: '风格项无效' });
26620
+ return;
26621
+ }
26622
+ const id = String((_a = raw.id) !== null && _a !== void 0 ? _a : '').trim();
26623
+ if (!id) {
26624
+ issues.push({ path: `styles[${index}].id`, message: '风格必须有唯一 id' });
26625
+ }
26626
+ else if (styleIds.has(id)) {
26627
+ issues.push({ path: `styles[${index}].id`, message: `风格 id 重复: ${id}` });
26628
+ }
26629
+ else {
26630
+ styleIds.add(id);
26631
+ }
26632
+ if (raw.enabled !== false && !String((_b = raw.promptTemplateId) !== null && _b !== void 0 ? _b : '').trim()) {
26633
+ issues.push({
26634
+ path: `styles[${index}].promptTemplateId`,
26635
+ message: '启用风格必须有 promptTemplateId'
26636
+ });
26637
+ }
26638
+ });
26639
+ const output = isRecord(input.output) ? input.output : {};
26640
+ const count = Number((_b = output.count) !== null && _b !== void 0 ? _b : 1);
26641
+ if (!Number.isFinite(count) || count < 1 || count > 4) {
26642
+ issues.push({ path: 'output.count', message: '生成数量必须在 1~4 之间' });
26643
+ }
26644
+ const aspectRatio = String((_c = output.aspectRatio) !== null && _c !== void 0 ? _c : '3:4');
26645
+ if (!ALLOWED_RATIOS.has(aspectRatio)) {
26646
+ issues.push({ path: 'output.aspectRatio', message: 'aspectRatio 仅支持 3:4 / 4:5 / 9:16' });
26647
+ }
26648
+ const privacy = isRecord(input.privacy) ? input.privacy : {};
26649
+ const autoDeleteAfterDays = Number((_d = privacy.autoDeleteAfterDays) !== null && _d !== void 0 ? _d : 0);
26650
+ if (!Number.isFinite(autoDeleteAfterDays) || autoDeleteAfterDays <= 0) {
26651
+ issues.push({ path: 'privacy.autoDeleteAfterDays', message: 'autoDeleteAfterDays 必须大于 0' });
26652
+ }
26653
+ const upload = isRecord(input.upload) ? input.upload : {};
26654
+ const maxFileSizeMB = Number((_e = upload.maxFileSizeMB) !== null && _e !== void 0 ? _e : 0);
26655
+ if (!Number.isFinite(maxFileSizeMB) || maxFileSizeMB <= 0) {
26656
+ issues.push({ path: 'upload.maxFileSizeMB', message: 'maxFileSizeMB 必须大于 0' });
26657
+ }
26658
+ const allowedTypes = Array.isArray(upload.allowedTypes) ? upload.allowedTypes : [];
26659
+ allowedTypes.forEach((mime, i) => {
26660
+ if (!ALLOWED_MIME.has(String(mime))) {
26661
+ issues.push({ path: `upload.allowedTypes[${i}]`, message: `不支持的 MIME: ${mime}` });
26662
+ }
26663
+ });
26664
+ if (options === null || options === void 0 ? void 0 : options.requireReferences) {
26665
+ const invitationImage = normalizeInvitationImage(input);
26666
+ if (!hasImageRef({
26667
+ id: invitationImage.invitationImageId,
26668
+ url: invitationImage.invitationImageUrl
26669
+ })) {
26670
+ issues.push({ path: 'invitationImage', message: '需要配置婚礼邀请函图片(id 或 url)' });
26671
+ }
26672
+ }
26673
+ if (issues.length) {
26674
+ return { ok: false, issues };
26675
+ }
26676
+ return { ok: true, issues: [], value: mergeGuestAIWeddingPosterConfig(input) };
26677
+ }
26678
+ const guestAIWeddingPosterSchema = {
26679
+ validate: validateGuestAIWeddingPosterConfig,
26680
+ version: GUEST_AI_WEDDING_POSTER_VERSION
26681
+ };
26682
+ function mergeGuestAIWeddingPosterConfig(partial) {
26683
+ var _a, _b, _c, _d, _e;
26684
+ const src = (partial && typeof partial === 'object' ? partial : {});
26685
+ const base = defaultGuestAIWeddingPosterConfig;
26686
+ return {
26687
+ ...base,
26688
+ ...src,
26689
+ version: Number((_a = src.version) !== null && _a !== void 0 ? _a : base.version) || GUEST_AI_WEDDING_POSTER_VERSION,
26690
+ title: String((_b = src.title) !== null && _b !== void 0 ? _b : base.title),
26691
+ description: String((_c = src.description) !== null && _c !== void 0 ? _c : base.description),
26692
+ buttonText: String((_d = src.buttonText) !== null && _d !== void 0 ? _d : base.buttonText),
26693
+ invitationImage: {
26694
+ ...base.invitationImage,
26695
+ ...normalizeInvitationImage(src)
26696
+ },
26697
+ styles: Array.isArray(src.styles)
26698
+ ? src.styles
26699
+ : base.styles.map((s) => ({ ...s })),
26700
+ result: {
26701
+ ...base.result,
26702
+ ...(isRecord(src.result) ? src.result : {})
26703
+ },
26704
+ privacy: {
26705
+ ...base.privacy,
26706
+ ...(isRecord(src.privacy) ? src.privacy : {})
26707
+ },
26708
+ upload: {
26709
+ ...base.upload,
26710
+ ...(isRecord(src.upload) ? src.upload : {}),
26711
+ allowedTypes: Array.isArray((_e = src.upload) === null || _e === void 0 ? void 0 : _e.allowedTypes)
26712
+ ? [...src.upload.allowedTypes]
26713
+ : [...base.upload.allowedTypes]
26714
+ },
26715
+ output: {
26716
+ ...base.output,
26717
+ ...(isRecord(src.output) ? src.output : {})
26718
+ },
26719
+ appearance: {
26720
+ ...base.appearance,
26721
+ ...(isRecord(src.appearance) ? src.appearance : {})
26722
+ }
26723
+ };
26724
+ }
26725
+ function migrateGuestAIWeddingPosterConfig(config, fromVersion, toVersion = GUEST_AI_WEDDING_POSTER_VERSION) {
26726
+ var _a;
26727
+ const raw = isRecord(config) ? { ...config } : {};
26728
+ const from = Number((_a = fromVersion !== null && fromVersion !== void 0 ? fromVersion : raw.version) !== null && _a !== void 0 ? _a : 1) || 1;
26729
+ let current = mergeGuestAIWeddingPosterConfig(raw);
26730
+ if (from < 1) {
26731
+ current = mergeGuestAIWeddingPosterConfig(raw);
26732
+ }
26733
+ current.version = Math.min(toVersion, GUEST_AI_WEDDING_POSTER_VERSION);
26734
+ return current;
26735
+ }
26736
+ function resolveGuestAIWeddingPosterConfig(element) {
26737
+ var _a, _b;
26738
+ if (!element || typeof element !== 'object') {
26739
+ return mergeGuestAIWeddingPosterConfig(null);
26740
+ }
26741
+ const nested = isRecord(element.guestPoster) ? element.guestPoster : null;
26742
+ const source = nested || element;
26743
+ const fromVersion = Number((_b = (_a = source.version) !== null && _a !== void 0 ? _a : element.version) !== null && _b !== void 0 ? _b : 1);
26744
+ return migrateGuestAIWeddingPosterConfig(source, fromVersion);
26745
+ }
26746
+
26747
+ /**
26748
+ * Mock GuestPosterService for editor preview / local development.
26749
+ * REPLACE with a real API adapter in ai-wedding / h5-server runtime.
26750
+ * Do not scatter fake data inside the Vue component.
26751
+ */
26752
+ function createMockGuestPosterService(options) {
26753
+ var _a;
26754
+ const delay = (_a = options === null || options === void 0 ? void 0 : options.delayMs) !== null && _a !== void 0 ? _a : 900;
26755
+ const jobs = new Map();
26756
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
26757
+ return {
26758
+ async uploadGuestPhoto(file, _context) {
26759
+ if (options === null || options === void 0 ? void 0 : options.failUpload) {
26760
+ throw { code: 'UPLOAD_FAILED', message: '照片上传失败,请检查网络后重试' };
26761
+ }
26762
+ await wait(delay);
26763
+ // Object URL only for local demo — real adapter must use short-lived signed URL
26764
+ let previewUrl;
26765
+ try {
26766
+ if (typeof URL !== 'undefined' && typeof URL.createObjectURL === 'function') {
26767
+ previewUrl = URL.createObjectURL(file);
26768
+ }
26769
+ }
26770
+ catch {
26771
+ previewUrl = undefined;
26772
+ }
26773
+ return {
26774
+ assetId: `mock-guest-${Date.now()}`,
26775
+ previewUrl,
26776
+ width: 1024,
26777
+ height: 1024
26778
+ };
26779
+ },
26780
+ async createPosterJob(request) {
26781
+ if (options === null || options === void 0 ? void 0 : options.failGenerate) {
26782
+ throw { code: 'GENERATE_FAILED', message: '海报生成失败,请稍后重试' };
26783
+ }
26784
+ const id = `mock-job-${request.idempotencyKey.slice(0, 8)}-${Date.now()}`;
26785
+ const job = {
26786
+ id,
26787
+ status: 'queued',
26788
+ stage: 'queued',
26789
+ createdAt: new Date().toISOString(),
26790
+ updatedAt: new Date().toISOString()
26791
+ };
26792
+ jobs.set(id, job);
26793
+ // Simulate async progression without a fixed fake percent UI
26794
+ void (async () => {
26795
+ await wait(delay);
26796
+ const j1 = jobs.get(id);
26797
+ if (!j1 || j1.status === 'cancelled')
26798
+ return;
26799
+ j1.status = 'generating';
26800
+ j1.stage = 'generating';
26801
+ j1.updatedAt = new Date().toISOString();
26802
+ await wait(delay * 1.2);
26803
+ const j2 = jobs.get(id);
26804
+ if (!j2 || j2.status === 'cancelled')
26805
+ return;
26806
+ const inviteHint = request.invitationImageId ? '邀请函+宾客合影' : '专属邀请函';
26807
+ const fallbackSvg = 'data:image/svg+xml,' +
26808
+ encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="600" height="800">
26809
+ <defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1">
26810
+ <stop stop-color="#fff8f0"/><stop offset="1" stop-color="#f0e4d4"/>
26811
+ </linearGradient></defs>
26812
+ <rect width="100%" height="100%" fill="url(#g)"/>
26813
+ <rect x="40" y="40" width="520" height="720" fill="none" stroke="#c4a574" stroke-width="3"/>
26814
+ <text x="300" y="110" text-anchor="middle" font-size="26" fill="#8b6914" font-family="serif">Wedding Invitation</text>
26815
+ <circle cx="160" cy="300" r="55" fill="#6d8fb5"/>
26816
+ <circle cx="300" cy="280" r="62" fill="#b7c7de"/>
26817
+ <circle cx="440" cy="300" r="55" fill="#c489a4"/>
26818
+ <text x="160" y="390" text-anchor="middle" font-size="14" fill="#17345f">新郎</text>
26819
+ <text x="300" y="390" text-anchor="middle" font-size="14" fill="#17345f">宾客</text>
26820
+ <text x="440" y="390" text-anchor="middle" font-size="14" fill="#5a2a40">新娘</text>
26821
+ <text x="300" y="480" text-anchor="middle" font-size="22" fill="#6b4f2a">${inviteHint}</text>
26822
+ <text x="300" y="520" text-anchor="middle" font-size="14" fill="#8a7355">Mock · ${request.styleId}</text>
26823
+ <text x="300" y="560" text-anchor="middle" font-size="12" fill="#a09080">将宾客与邀请函中的新人合成</text>
26824
+ </svg>`);
26825
+ const imageUrl = (options === null || options === void 0 ? void 0 : options.resultImageUrl) || fallbackSvg;
26826
+ const results = Array.from({ length: request.output.count || 1 }).map((_, i) => ({
26827
+ id: `${id}-result-${i}`,
26828
+ imageUrl,
26829
+ thumbnailUrl: imageUrl,
26830
+ width: 600,
26831
+ height: 800
26832
+ }));
26833
+ j2.status = 'completed';
26834
+ j2.stage = 'completed';
26835
+ j2.results = results;
26836
+ j2.updatedAt = new Date().toISOString();
26837
+ })();
26838
+ return { ...job };
26839
+ },
26840
+ async getPosterJob(jobId) {
26841
+ const job = jobs.get(jobId);
26842
+ if (!job) {
26843
+ return {
26844
+ id: jobId,
26845
+ status: 'failed',
26846
+ errorCode: 'NOT_FOUND',
26847
+ errorMessage: '任务不存在或已过期'
26848
+ };
26849
+ }
26850
+ return { ...job, results: job.results ? [...job.results] : undefined };
26851
+ },
26852
+ async cancelPosterJob(jobId) {
26853
+ const job = jobs.get(jobId);
26854
+ if (job && job.status !== 'completed') {
26855
+ job.status = 'cancelled';
26856
+ job.updatedAt = new Date().toISOString();
26857
+ }
26858
+ },
26859
+ async downloadResult(_resultId) {
26860
+ return new Blob(['mock-poster'], { type: 'image/png' });
26861
+ },
26862
+ async getQuota(_invitationId) {
26863
+ const maxPerWork = 100;
26864
+ return { used: 0, maxPerWork, remaining: maxPerWork };
26865
+ }
26866
+ };
26867
+ }
26868
+
26869
+ const GUEST_POSTER_SERVICE_KEY = Symbol('GuestPosterService');
26870
+ /** Resolve runtime service: inject → provided callbacks → mock (never call vendor APIs here). */
26871
+ function resolveGuestPosterService(injectedOrProvided) {
26872
+ if (injectedOrProvided)
26873
+ return injectedOrProvided;
26874
+ const fromInject = vue.inject(GUEST_POSTER_SERVICE_KEY, null);
26875
+ if (fromInject)
26876
+ return fromInject;
26877
+ return createMockGuestPosterService();
26878
+ }
26879
+ function guestPosterJobStorageKey(componentId) {
26880
+ return `guest-ai-poster-job:${componentId}`;
26881
+ }
26882
+ function loadStoredJobId(componentId) {
26883
+ try {
26884
+ if (typeof sessionStorage === 'undefined')
26885
+ return null;
26886
+ return sessionStorage.getItem(guestPosterJobStorageKey(componentId));
26887
+ }
26888
+ catch {
26889
+ return null;
26890
+ }
26891
+ }
26892
+ function saveStoredJobId(componentId, jobId) {
26893
+ try {
26894
+ if (typeof sessionStorage === 'undefined')
26895
+ return;
26896
+ const key = guestPosterJobStorageKey(componentId);
26897
+ if (!jobId)
26898
+ sessionStorage.removeItem(key);
26899
+ else
26900
+ sessionStorage.setItem(key, jobId);
26901
+ }
26902
+ catch {
26903
+ /* ignore quota / private mode */
26904
+ }
26905
+ }
26906
+ function mapJobStatusToUi(status) {
26907
+ if (status === 'completed')
26908
+ return 'completed';
26909
+ if (status === 'failed' || status === 'cancelled')
26910
+ return 'failed';
26911
+ if (status === 'queued' || status === 'preprocessing')
26912
+ return 'queued';
26913
+ return 'generating';
26914
+ }
26915
+ function guestPosterErrorMessage(code, fallback) {
26916
+ switch (code) {
26917
+ case 'NO_FACE':
26918
+ return '没有检测到清晰人脸,请更换照片';
26919
+ case 'MULTI_FACE':
26920
+ return '请上传只包含你本人的单人照片';
26921
+ case 'TOO_SMALL':
26922
+ return '照片清晰度不足,请更换照片';
26923
+ case 'UPLOAD_FAILED':
26924
+ return '照片上传失败,请检查网络后重试';
26925
+ case 'TIMEOUT':
26926
+ case 'GENERATION_TIMEOUT':
26927
+ return '生成时间较长,你可以稍后回来查看';
26928
+ case 'CONTENT_BLOCKED':
26929
+ case 'GENERATION_REJECTED':
26930
+ return '该照片暂时无法用于生成,请更换照片';
26931
+ case 'PROVIDER_AUTH_FAILED':
26932
+ return '图像服务未配置,请联系管理员';
26933
+ case '40410':
26934
+ return '作品不存在或链接无效';
26935
+ case '40312':
26936
+ return '作品未发布,无法生成';
26937
+ case '40005':
26938
+ return fallback || '本作品生成次数已达上限';
26939
+ case 'GENERATE_FAILED':
26940
+ case 'EMPTY_RESULT':
26941
+ case 'PROVIDER_ERROR':
26942
+ return fallback || '海报生成失败,请稍后重试';
26943
+ default:
26944
+ return fallback || '操作失败,请稍后重试';
26945
+ }
26946
+ }
26947
+ const IMAGE_MIME_BY_MAGIC = [
26948
+ {
26949
+ mime: 'image/jpeg',
26950
+ test: (b) => b.length >= 3 && b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff
26951
+ },
26952
+ {
26953
+ mime: 'image/png',
26954
+ test: (b) => b.length >= 8 &&
26955
+ b[0] === 0x89 &&
26956
+ b[1] === 0x50 &&
26957
+ b[2] === 0x4e &&
26958
+ b[3] === 0x47
26959
+ },
26960
+ {
26961
+ mime: 'image/webp',
26962
+ test: (b) => b.length >= 12 &&
26963
+ b[0] === 0x52 &&
26964
+ b[1] === 0x49 &&
26965
+ b[2] === 0x46 &&
26966
+ b[3] === 0x46 &&
26967
+ b[8] === 0x57 &&
26968
+ b[9] === 0x45 &&
26969
+ b[10] === 0x42 &&
26970
+ b[11] === 0x50
26971
+ }
26972
+ ];
26973
+ async function detectImageMime(file) {
26974
+ const slice = file.slice(0, 16);
26975
+ let buf;
26976
+ if (typeof slice.arrayBuffer === 'function') {
26977
+ buf = await slice.arrayBuffer();
26978
+ }
26979
+ else {
26980
+ buf = await new Promise((resolve, reject) => {
26981
+ const reader = new FileReader();
26982
+ reader.onload = () => resolve(reader.result);
26983
+ reader.onerror = () => reject(reader.error);
26984
+ reader.readAsArrayBuffer(slice);
26985
+ });
26986
+ }
26987
+ const bytes = new Uint8Array(buf);
26988
+ for (const item of IMAGE_MIME_BY_MAGIC) {
26989
+ if (item.test(bytes))
26990
+ return item.mime;
26991
+ }
26992
+ return null;
26993
+ }
26994
+ async function readImageSize(file) {
26995
+ if (typeof createImageBitmap === 'function') {
26996
+ try {
26997
+ const bmp = await createImageBitmap(file);
26998
+ const size = { width: bmp.width, height: bmp.height };
26999
+ bmp.close();
27000
+ return size;
27001
+ }
27002
+ catch {
27003
+ /* fall through */
27004
+ }
27005
+ }
27006
+ return new Promise((resolve) => {
27007
+ const url = URL.createObjectURL(file);
27008
+ const img = new Image();
27009
+ img.onload = () => {
27010
+ const size = { width: img.naturalWidth, height: img.naturalHeight };
27011
+ URL.revokeObjectURL(url);
27012
+ resolve(size);
27013
+ };
27014
+ img.onerror = () => {
27015
+ URL.revokeObjectURL(url);
27016
+ resolve(null);
27017
+ };
27018
+ img.src = url;
27019
+ });
27020
+ }
27021
+ function createIdempotencyKey(componentId) {
27022
+ return `${componentId}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
27023
+ }
27024
+
27025
+ const DEMO_RESULT = {
27026
+ id: 'editor-demo-result',
27027
+ imageUrl: 'data:image/svg+xml,' +
27028
+ encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="600" height="800">
27029
+ <rect width="100%" height="100%" fill="#fff6ea"/>
27030
+ <text x="50%" y="48%" text-anchor="middle" font-size="24" fill="#17345f">示例合影邀请函</text>
27031
+ <text x="50%" y="56%" text-anchor="middle" font-size="14" fill="#7a8799">编辑器预览</text>
27032
+ </svg>`),
27033
+ width: 600,
27034
+ height: 800
27035
+ };
27036
+ var script$4 = vue.defineComponent({
27037
+ name: 'uni-guest-ai-wedding-poster',
27038
+ props: {
27039
+ element: {
27040
+ type: Object,
27041
+ required: true
27042
+ },
27043
+ isEditing: {
27044
+ type: Boolean,
27045
+ default: false
27046
+ },
27047
+ env: {
27048
+ type: String,
27049
+ default: 'prd'
27050
+ },
27051
+ invitationId: {
27052
+ type: String,
27053
+ default: ''
27054
+ },
27055
+ global: {
27056
+ type: Object,
27057
+ default: null
27058
+ },
27059
+ guestPosterService: {
27060
+ type: Object,
27061
+ default: null
27062
+ }
27063
+ },
27064
+ emits: ['trigger', 'track', 'error'],
27065
+ setup(props, { emit }) {
27066
+ const injected = vue.inject(GUEST_POSTER_SERVICE_KEY, null);
27067
+ const fileInputRef = vue.ref(null);
27068
+ const sceneId = vue.computed(() => {
27069
+ const fromProp = props.invitationId;
27070
+ if (fromProp)
27071
+ return fromProp;
27072
+ const g = props.global || {};
27073
+ return String(g.sceneId || g.uuid || g.scene_id || '');
27074
+ });
27075
+ const config = vue.computed(() => resolveGuestAIWeddingPosterConfig(props.element));
27076
+ const uiState = vue.ref(props.isEditing ? 'configuring' : 'idle');
27077
+ const guestPhoto = vue.ref(null);
27078
+ const guestPreviewUrl = vue.ref('');
27079
+ const selectedStyleId = vue.ref('');
27080
+ const errorMessage = vue.ref('');
27081
+ const toastText = vue.ref('');
27082
+ const resultList = vue.ref([]);
27083
+ const currentJobId = vue.ref(null);
27084
+ const regenerateUsed = vue.ref(0);
27085
+ const idempotencyKey = vue.ref('');
27086
+ const quotaUsed = vue.ref(0);
27087
+ const quotaMax = vue.ref(100);
27088
+ let pollTimer = null;
27089
+ let pollDelay = 2000;
27090
+ let toastTimer = null;
27091
+ let objectUrlToRevoke = null;
27092
+ const enabledStyles = vue.computed(() => [...config.value.styles]
27093
+ .filter((s) => s.enabled)
27094
+ .sort((a, b) => a.sort - b.sort));
27095
+ const quotaText = vue.computed(() => {
27096
+ const max = quotaMax.value;
27097
+ const used = quotaUsed.value;
27098
+ if (!max)
27099
+ return '';
27100
+ return `本作品还可生成 ${Math.max(0, max - used)} / ${max} 张`;
27101
+ });
27102
+ const regenerateLeft = vue.computed(() => {
27103
+ const max = config.value.result.maxRegenerateCount;
27104
+ if (max === undefined || max === null)
27105
+ return -1;
27106
+ return Math.max(0, max - regenerateUsed.value);
27107
+ });
27108
+ const statusHint = vue.computed(() => {
27109
+ if (uiState.value === 'submitting')
27110
+ return '正在提交…';
27111
+ if (uiState.value === 'queued')
27112
+ return '排队中…';
27113
+ return '正在生成你与新人的专属邀请函…';
27114
+ });
27115
+ const canSubmit = vue.computed(() => {
27116
+ if (props.isEditing)
27117
+ return true;
27118
+ if (['uploading', 'submitting', 'queued', 'generating'].includes(uiState.value))
27119
+ return false;
27120
+ if (!guestPhoto.value || !selectedStyleId.value)
27121
+ return false;
27122
+ if (quotaMax.value > 0 && quotaUsed.value >= quotaMax.value)
27123
+ return false;
27124
+ const inv = config.value.invitationImage;
27125
+ return !!(inv.invitationImageId || inv.invitationImageUrl);
27126
+ });
27127
+ const rootStyle = vue.computed(() => {
27128
+ var _a, _b, _c, _d;
27129
+ const css = props.element.css || {};
27130
+ const appearance = config.value.appearance;
27131
+ const style = {
27132
+ width: typeof css.width === 'number' ? px2rem(css.width) : String(css.width || '100%'),
27133
+ maxWidth: '480px',
27134
+ opacity: String((_a = css.opacity) !== null && _a !== void 0 ? _a : 1),
27135
+ transform: `rotate(${css.transform || 0}deg)`,
27136
+ backgroundColor: appearance.backgroundColor || '#fffaf2',
27137
+ color: appearance.textColor || '#17345f',
27138
+ borderRadius: `${(_b = appearance.borderRadius) !== null && _b !== void 0 ? _b : 20}px`,
27139
+ padding: `${(_c = appearance.paddingY) !== null && _c !== void 0 ? _c : 16}px ${(_d = appearance.paddingX) !== null && _d !== void 0 ? _d : 16}px`,
27140
+ ['--gap-primary']: appearance.primaryColor || '#198cff',
27141
+ position: 'relative'
27142
+ };
27143
+ if (css.height != null && String(css.height) !== 'auto') {
27144
+ style.minHeight = typeof css.height === 'number' ? px2rem(css.height) : String(css.height);
27145
+ }
27146
+ return style;
27147
+ });
27148
+ function track(event, payload) {
27149
+ emit('track', { event, ...(payload || {}) });
27150
+ }
27151
+ function showToast(msg) {
27152
+ toastText.value = msg;
27153
+ if (toastTimer)
27154
+ clearTimeout(toastTimer);
27155
+ toastTimer = setTimeout(() => {
27156
+ toastText.value = '';
27157
+ }, 2200);
27158
+ }
27159
+ function getService() {
27160
+ return resolveGuestPosterService(props.guestPosterService || injected);
27161
+ }
27162
+ function stopPolling() {
27163
+ if (pollTimer) {
27164
+ clearTimeout(pollTimer);
27165
+ pollTimer = null;
27166
+ }
27167
+ pollDelay = 2000;
27168
+ }
27169
+ function schedulePoll() {
27170
+ stopPolling();
27171
+ const hidden = typeof document !== 'undefined' && document.visibilityState === 'hidden';
27172
+ const delay = hidden ? Math.max(pollDelay, 8000) : pollDelay;
27173
+ pollTimer = setTimeout(() => {
27174
+ void pollJob();
27175
+ }, delay);
27176
+ pollDelay = Math.min(Math.floor(pollDelay * 1.35), 12000);
27177
+ }
27178
+ async function pollJob() {
27179
+ const jobId = currentJobId.value;
27180
+ if (!jobId || props.isEditing) {
27181
+ stopPolling();
27182
+ return;
27183
+ }
27184
+ try {
27185
+ const job = await getService().getPosterJob(jobId);
27186
+ applyJob(job);
27187
+ if (job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled') {
27188
+ stopPolling();
27189
+ return;
27190
+ }
27191
+ schedulePoll();
27192
+ }
27193
+ catch {
27194
+ schedulePoll();
27195
+ }
27196
+ }
27197
+ function applyJob(job) {
27198
+ currentJobId.value = job.id;
27199
+ const mapped = mapJobStatusToUi(job.status);
27200
+ if (mapped === 'completed') {
27201
+ uiState.value = 'completed';
27202
+ resultList.value = job.results || [];
27203
+ saveStoredJobId(String(props.element.id), job.id);
27204
+ track('guest_poster_generate_success', { jobId: job.id });
27205
+ void refreshQuota();
27206
+ }
27207
+ else if (mapped === 'failed') {
27208
+ uiState.value = 'failed';
27209
+ errorMessage.value = guestPosterErrorMessage(job.errorCode, job.errorMessage);
27210
+ saveStoredJobId(String(props.element.id), null);
27211
+ track('guest_poster_generate_failed', { code: job.errorCode || 'FAILED' });
27212
+ emit('error', { code: job.errorCode || 'FAILED', message: errorMessage.value });
27213
+ }
27214
+ else {
27215
+ uiState.value = mapped;
27216
+ errorMessage.value = '';
27217
+ }
27218
+ }
27219
+ async function refreshQuota() {
27220
+ const svc = getService();
27221
+ if (!svc.getQuota)
27222
+ return;
27223
+ try {
27224
+ const q = await svc.getQuota(sceneId.value || String(props.element.id));
27225
+ quotaUsed.value = Number(q.used) || 0;
27226
+ quotaMax.value = Number(q.maxPerWork) || 100;
27227
+ }
27228
+ catch {
27229
+ /* ignore */
27230
+ }
27231
+ }
27232
+ function onUploadAreaClick() {
27233
+ if (props.isEditing) {
27234
+ showToast('发布后宾客可上传照片');
27235
+ return;
27236
+ }
27237
+ if (uiState.value === 'uploading')
27238
+ return;
27239
+ triggerFilePick();
27240
+ }
27241
+ function triggerFilePick() {
27242
+ var _a;
27243
+ if (props.isEditing)
27244
+ return;
27245
+ (_a = fileInputRef.value) === null || _a === void 0 ? void 0 : _a.click();
27246
+ }
27247
+ async function onFileChange(ev) {
27248
+ const input = ev.target;
27249
+ const file = input.files && input.files[0];
27250
+ input.value = '';
27251
+ if (!file || props.isEditing)
27252
+ return;
27253
+ errorMessage.value = '';
27254
+ track('guest_photo_upload_start');
27255
+ try {
27256
+ const mime = await detectImageMime(file);
27257
+ const allowed = config.value.upload.allowedTypes;
27258
+ if (!mime || !allowed.includes(mime)) {
27259
+ throw { code: 'UPLOAD_FAILED', message: '仅支持 JPEG / PNG / WebP 图片' };
27260
+ }
27261
+ if (file.size > config.value.upload.maxFileSizeMB * 1024 * 1024) {
27262
+ throw {
27263
+ code: 'UPLOAD_FAILED',
27264
+ message: `照片不能超过 ${config.value.upload.maxFileSizeMB}MB`
27265
+ };
27266
+ }
27267
+ const size = await readImageSize(file);
27268
+ if (size &&
27269
+ ((config.value.upload.minWidth && size.width < config.value.upload.minWidth) ||
27270
+ (config.value.upload.minHeight && size.height < config.value.upload.minHeight))) {
27271
+ throw { code: 'TOO_SMALL', message: guestPosterErrorMessage('TOO_SMALL') };
27272
+ }
27273
+ uiState.value = 'uploading';
27274
+ const uploaded = await getService().uploadGuestPhoto(file, {
27275
+ invitationId: sceneId.value || undefined,
27276
+ componentId: String(props.element.id)
27277
+ });
27278
+ if (objectUrlToRevoke) {
27279
+ URL.revokeObjectURL(objectUrlToRevoke);
27280
+ objectUrlToRevoke = null;
27281
+ }
27282
+ guestPhoto.value = uploaded;
27283
+ if (uploaded.previewUrl) {
27284
+ guestPreviewUrl.value = uploaded.previewUrl;
27285
+ if (uploaded.previewUrl.startsWith('blob:')) {
27286
+ objectUrlToRevoke = uploaded.previewUrl;
27287
+ }
27288
+ }
27289
+ uiState.value = 'photo-ready';
27290
+ track('guest_photo_upload_success');
27291
+ }
27292
+ catch (err) {
27293
+ const e = err;
27294
+ uiState.value = 'failed';
27295
+ errorMessage.value = guestPosterErrorMessage(e === null || e === void 0 ? void 0 : e.code, e === null || e === void 0 ? void 0 : e.message);
27296
+ track('guest_photo_upload_failed', { code: (e === null || e === void 0 ? void 0 : e.code) || 'UPLOAD_FAILED' });
27297
+ emit('error', {
27298
+ code: (e === null || e === void 0 ? void 0 : e.code) || 'UPLOAD_FAILED',
27299
+ message: errorMessage.value,
27300
+ retryable: true
27301
+ });
27302
+ }
27303
+ }
27304
+ function clearPhoto() {
27305
+ if (props.isEditing)
27306
+ return;
27307
+ if (objectUrlToRevoke) {
27308
+ URL.revokeObjectURL(objectUrlToRevoke);
27309
+ objectUrlToRevoke = null;
27310
+ }
27311
+ guestPhoto.value = null;
27312
+ guestPreviewUrl.value = '';
27313
+ uiState.value = 'idle';
27314
+ }
27315
+ function onStyleChange(ev) {
27316
+ const id = ev.target.value;
27317
+ selectedStyleId.value = id;
27318
+ track('guest_poster_style_select', { styleId: id });
27319
+ if (!props.isEditing && uiState.value !== 'completed') {
27320
+ uiState.value = 'configuring';
27321
+ }
27322
+ }
27323
+ async function onGenerateClick() {
27324
+ track('guest_poster_generate_click');
27325
+ if (props.isEditing) {
27326
+ showToast('发布后,宾客可生成专属邀请函');
27327
+ uiState.value = 'completed';
27328
+ resultList.value = [DEMO_RESULT];
27329
+ return;
27330
+ }
27331
+ if (!canSubmit.value) {
27332
+ if (quotaMax.value > 0 && quotaUsed.value >= quotaMax.value) {
27333
+ errorMessage.value = `本作品已达上限(${quotaMax.value} 张)`;
27334
+ }
27335
+ else if (!guestPhoto.value)
27336
+ errorMessage.value = '请先上传照片';
27337
+ else if (!selectedStyleId.value)
27338
+ errorMessage.value = '请选择风格';
27339
+ else
27340
+ errorMessage.value = '请先在编辑器配置婚礼邀请函图片';
27341
+ return;
27342
+ }
27343
+ const style = enabledStyles.value.find((s) => s.id === selectedStyleId.value);
27344
+ if (!style || !guestPhoto.value)
27345
+ return;
27346
+ errorMessage.value = '';
27347
+ uiState.value = 'submitting';
27348
+ if (!idempotencyKey.value) {
27349
+ idempotencyKey.value = createIdempotencyKey(String(props.element.id));
27350
+ }
27351
+ const inv = config.value.invitationImage;
27352
+ try {
27353
+ const job = await getService().createPosterJob({
27354
+ invitationId: sceneId.value || '',
27355
+ componentId: String(props.element.id),
27356
+ guestPhotoAssetId: guestPhoto.value.assetId,
27357
+ guestPhotoUrl: guestPhoto.value.previewUrl || guestPreviewUrl.value || '',
27358
+ invitationImageId: inv.invitationImageId || '',
27359
+ invitationImageUrl: inv.invitationImageUrl || '',
27360
+ styleId: style.id,
27361
+ promptTemplateId: style.promptTemplateId,
27362
+ output: {
27363
+ aspectRatio: config.value.output.aspectRatio,
27364
+ count: config.value.output.count
27365
+ },
27366
+ consent: {
27367
+ accepted: true,
27368
+ acceptedAt: new Date().toISOString(),
27369
+ privacyVersion: 'v1'
27370
+ },
27371
+ idempotencyKey: idempotencyKey.value
27372
+ });
27373
+ saveStoredJobId(String(props.element.id), job.id);
27374
+ applyJob(job);
27375
+ if (job.status !== 'completed' && job.status !== 'failed' && job.status !== 'cancelled') {
27376
+ schedulePoll();
27377
+ }
27378
+ }
27379
+ catch (err) {
27380
+ const e = err;
27381
+ uiState.value = 'failed';
27382
+ errorMessage.value = guestPosterErrorMessage(e === null || e === void 0 ? void 0 : e.code, e === null || e === void 0 ? void 0 : e.message);
27383
+ idempotencyKey.value = '';
27384
+ track('guest_poster_generate_failed', { code: (e === null || e === void 0 ? void 0 : e.code) || 'GENERATE_FAILED' });
27385
+ emit('error', {
27386
+ code: (e === null || e === void 0 ? void 0 : e.code) || 'GENERATE_FAILED',
27387
+ message: errorMessage.value,
27388
+ retryable: true
27389
+ });
27390
+ }
27391
+ }
27392
+ function onRegenerate() {
27393
+ if (props.isEditing)
27394
+ return;
27395
+ if (regenerateLeft.value === 0)
27396
+ return;
27397
+ regenerateUsed.value += 1;
27398
+ idempotencyKey.value = '';
27399
+ uiState.value = 'configuring';
27400
+ resultList.value = [];
27401
+ track('guest_poster_regenerate');
27402
+ }
27403
+ function onDownload() {
27404
+ const first = resultList.value[0];
27405
+ if (!first)
27406
+ return;
27407
+ track('guest_poster_download');
27408
+ if (props.isEditing) {
27409
+ showToast('发布后可下载');
27410
+ return;
27411
+ }
27412
+ try {
27413
+ const a = document.createElement('a');
27414
+ a.href = first.imageUrl;
27415
+ a.download = 'wedding-invitation.png';
27416
+ a.rel = 'noopener';
27417
+ a.target = '_blank';
27418
+ a.click();
27419
+ }
27420
+ catch {
27421
+ showToast('请长按图片保存');
27422
+ }
27423
+ }
27424
+ function onVisibilityChange() {
27425
+ if (typeof document === 'undefined')
27426
+ return;
27427
+ if (document.visibilityState === 'visible' && currentJobId.value) {
27428
+ pollDelay = 2000;
27429
+ void pollJob();
27430
+ }
27431
+ }
27432
+ vue.watch(enabledStyles, (list) => {
27433
+ var _a;
27434
+ if (!selectedStyleId.value && list.length) {
27435
+ selectedStyleId.value = list[0].id;
27436
+ }
27437
+ else if (selectedStyleId.value && !list.some((s) => s.id === selectedStyleId.value)) {
27438
+ selectedStyleId.value = ((_a = list[0]) === null || _a === void 0 ? void 0 : _a.id) || '';
27439
+ }
27440
+ }, { immediate: true });
27441
+ vue.onMounted(() => {
27442
+ track('guest_poster_view');
27443
+ if (typeof document !== 'undefined') {
27444
+ document.addEventListener('visibilitychange', onVisibilityChange);
27445
+ }
27446
+ void refreshQuota();
27447
+ if (props.isEditing)
27448
+ return;
27449
+ const stored = loadStoredJobId(String(props.element.id));
27450
+ if (stored) {
27451
+ currentJobId.value = stored;
27452
+ uiState.value = 'generating';
27453
+ void pollJob();
27454
+ }
27455
+ });
27456
+ vue.onBeforeUnmount(() => {
27457
+ stopPolling();
27458
+ if (toastTimer)
27459
+ clearTimeout(toastTimer);
27460
+ if (objectUrlToRevoke)
27461
+ URL.revokeObjectURL(objectUrlToRevoke);
27462
+ if (typeof document !== 'undefined') {
27463
+ document.removeEventListener('visibilitychange', onVisibilityChange);
27464
+ }
27465
+ });
27466
+ return {
27467
+ config,
27468
+ uiState,
27469
+ guestPreviewUrl,
27470
+ enabledStyles,
27471
+ selectedStyleId,
27472
+ errorMessage,
27473
+ toastText,
27474
+ resultList,
27475
+ regenerateLeft,
27476
+ statusHint,
27477
+ canSubmit,
27478
+ quotaText,
27479
+ rootStyle,
27480
+ fileInputRef,
27481
+ onUploadAreaClick,
27482
+ triggerFilePick,
27483
+ onFileChange,
27484
+ clearPhoto,
27485
+ onStyleChange,
27486
+ onGenerateClick,
27487
+ onRegenerate,
27488
+ onDownload
27489
+ };
27490
+ }
27491
+ });
27492
+
27493
+ const _hoisted_1$4 = ["data-id", "data-pid", "data-type", "data-show"];
27494
+ const _hoisted_2$4 = { class: "gap-inner" };
27495
+ const _hoisted_3$4 = ["src"];
27496
+ const _hoisted_4$4 = /*#__PURE__*/vue.createElementVNode("span", { class: "gap-upload-hint" }, "JPEG / PNG / WebP", -1 /* HOISTED */);
27497
+ const _hoisted_5$4 = {
27498
+ key: 2,
27499
+ class: "gap-upload-actions"
27500
+ };
27501
+ const _hoisted_6$4 = ["value", "disabled"];
27502
+ const _hoisted_7$4 = /*#__PURE__*/vue.createElementVNode("option", {
27503
+ disabled: "",
27504
+ value: ""
27505
+ }, "选择风格", -1 /* HOISTED */);
27506
+ const _hoisted_8$1 = ["value"];
27507
+ const _hoisted_9$1 = {
27508
+ key: 0,
27509
+ class: "gap-status"
27510
+ };
27511
+ const _hoisted_10$1 = /*#__PURE__*/vue.createElementVNode("div", { class: "gap-spinner" }, null, -1 /* HOISTED */);
27512
+ const _hoisted_11$1 = {
27513
+ key: 1,
27514
+ class: "gap-error"
27515
+ };
27516
+ const _hoisted_12$1 = ["disabled"];
27517
+ const _hoisted_13$1 = {
27518
+ key: 2,
27519
+ class: "gap-quota"
27520
+ };
27521
+ const _hoisted_14$1 = {
27522
+ key: 3,
27523
+ class: "gap-editor-badge"
27524
+ };
27525
+ const _hoisted_15$1 = {
27526
+ key: 1,
27527
+ class: "gap-result"
27528
+ };
27529
+ const _hoisted_16$1 = ["src"];
27530
+ const _hoisted_17$1 = { class: "gap-result-actions" };
27531
+ const _hoisted_18$1 = ["disabled"];
27532
+ const _hoisted_19$1 = {
27533
+ key: 0,
27534
+ class: "gap-toast"
27535
+ };
27536
+
27537
+ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
27538
+ return (vue.openBlock(), vue.createElementBlock("div", {
27539
+ class: vue.normalizeClass(["ele-guest-ai-wedding-poster eles", { 'is-compact': !!_ctx.config.appearance.compact }]),
27540
+ "data-id": _ctx.element.id,
27541
+ "data-pid": _ctx.element.pid,
27542
+ "data-type": _ctx.element.type,
27543
+ "data-show": _ctx.element.properties && _ctx.element.properties.visible,
27544
+ style: vue.normalizeStyle(_ctx.rootStyle)
27545
+ }, [
27546
+ vue.createElementVNode("div", _hoisted_2$4, [
27547
+ (_ctx.uiState !== 'completed')
27548
+ ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
27549
+ vue.createCommentVNode(" 1. 上传宾客照片 "),
27550
+ vue.createElementVNode("div", {
27551
+ class: vue.normalizeClass(["gap-upload", { 'is-disabled': _ctx.isEditing || _ctx.uiState === 'uploading' }]),
27552
+ onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args) => (_ctx.onUploadAreaClick && _ctx.onUploadAreaClick(...args)), ["stop"]))
27553
+ }, [
27554
+ (_ctx.guestPreviewUrl)
27555
+ ? (vue.openBlock(), vue.createElementBlock("img", {
27556
+ key: 0,
27557
+ class: "gap-upload-preview",
27558
+ src: _ctx.guestPreviewUrl,
27559
+ alt: ""
27560
+ }, null, 8 /* PROPS */, _hoisted_3$4))
27561
+ : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
27562
+ vue.createElementVNode("span", null, vue.toDisplayString(_ctx.uiState === 'uploading' ? '上传中…' : '上传你的照片'), 1 /* TEXT */),
27563
+ _hoisted_4$4
27564
+ ], 64 /* STABLE_FRAGMENT */)),
27565
+ (_ctx.guestPreviewUrl && !_ctx.isEditing)
27566
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$4, [
27567
+ vue.createElementVNode("button", {
27568
+ type: "button",
27569
+ class: "gap-link-btn",
27570
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => (_ctx.triggerFilePick && _ctx.triggerFilePick(...args)), ["stop"]))
27571
+ }, "替换"),
27572
+ vue.createElementVNode("button", {
27573
+ type: "button",
27574
+ class: "gap-link-btn",
27575
+ onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => (_ctx.clearPhoto && _ctx.clearPhoto(...args)), ["stop"]))
27576
+ }, "删除")
27577
+ ]))
27578
+ : vue.createCommentVNode("v-if", true),
27579
+ vue.createElementVNode("input", {
27580
+ ref: "fileInputRef",
27581
+ type: "file",
27582
+ accept: "image/jpeg,image/png,image/webp",
27583
+ onChange: _cache[2] || (_cache[2] = (...args) => (_ctx.onFileChange && _ctx.onFileChange(...args)))
27584
+ }, null, 544 /* NEED_HYDRATION, NEED_PATCH */)
27585
+ ], 2 /* CLASS */),
27586
+ vue.createCommentVNode(" 2. 风格 select "),
27587
+ vue.createElementVNode("select", {
27588
+ class: "gap-select",
27589
+ value: _ctx.selectedStyleId,
27590
+ disabled: _ctx.isEditing,
27591
+ onClick: _cache[4] || (_cache[4] = vue.withModifiers(() => {}, ["stop"])),
27592
+ onChange: _cache[5] || (_cache[5] = (...args) => (_ctx.onStyleChange && _ctx.onStyleChange(...args)))
27593
+ }, [
27594
+ _hoisted_7$4,
27595
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.enabledStyles, (style) => {
27596
+ return (vue.openBlock(), vue.createElementBlock("option", {
27597
+ key: style.id,
27598
+ value: style.id
27599
+ }, vue.toDisplayString(style.name), 9 /* TEXT, PROPS */, _hoisted_8$1))
27600
+ }), 128 /* KEYED_FRAGMENT */))
27601
+ ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_6$4),
27602
+ (_ctx.uiState === 'queued' || _ctx.uiState === 'generating' || _ctx.uiState === 'submitting')
27603
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, [
27604
+ _hoisted_10$1,
27605
+ vue.createElementVNode("div", null, vue.toDisplayString(_ctx.statusHint), 1 /* TEXT */)
27606
+ ]))
27607
+ : vue.createCommentVNode("v-if", true),
27608
+ (_ctx.errorMessage)
27609
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11$1, vue.toDisplayString(_ctx.errorMessage), 1 /* TEXT */))
27610
+ : vue.createCommentVNode("v-if", true),
27611
+ vue.createCommentVNode(" 3. 提交 "),
27612
+ vue.createElementVNode("button", {
27613
+ type: "button",
27614
+ class: vue.normalizeClass(["gap-cta", _ctx.config.appearance.buttonStyle === 'solid' ? 'is-solid' : 'is-gradient']),
27615
+ disabled: !_ctx.canSubmit,
27616
+ onClick: _cache[6] || (_cache[6] = vue.withModifiers((...args) => (_ctx.onGenerateClick && _ctx.onGenerateClick(...args)), ["stop"]))
27617
+ }, vue.toDisplayString(_ctx.config.buttonText || '生成专属邀请函'), 11 /* TEXT, CLASS, PROPS */, _hoisted_12$1),
27618
+ (_ctx.quotaText)
27619
+ ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_13$1, vue.toDisplayString(_ctx.quotaText), 1 /* TEXT */))
27620
+ : vue.createCommentVNode("v-if", true),
27621
+ (_ctx.isEditing)
27622
+ ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_14$1, "编辑器预览 · 邀请函图请在属性面板配置"))
27623
+ : vue.createCommentVNode("v-if", true)
27624
+ ], 64 /* STABLE_FRAGMENT */))
27625
+ : (vue.openBlock(), vue.createElementBlock("div", _hoisted_15$1, [
27626
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.resultList, (item) => {
27627
+ return (vue.openBlock(), vue.createElementBlock("img", {
27628
+ key: item.id,
27629
+ src: item.imageUrl,
27630
+ alt: "婚礼邀请函"
27631
+ }, null, 8 /* PROPS */, _hoisted_16$1))
27632
+ }), 128 /* KEYED_FRAGMENT */)),
27633
+ vue.createElementVNode("div", _hoisted_17$1, [
27634
+ (_ctx.config.result.allowRegenerate)
27635
+ ? (vue.openBlock(), vue.createElementBlock("button", {
27636
+ key: 0,
27637
+ type: "button",
27638
+ class: "gap-secondary-btn",
27639
+ disabled: _ctx.regenerateLeft <= 0 || _ctx.isEditing,
27640
+ onClick: _cache[7] || (_cache[7] = vue.withModifiers((...args) => (_ctx.onRegenerate && _ctx.onRegenerate(...args)), ["stop"]))
27641
+ }, " 重新生成 ", 8 /* PROPS */, _hoisted_18$1))
27642
+ : vue.createCommentVNode("v-if", true),
27643
+ (_ctx.config.result.allowDownload)
27644
+ ? (vue.openBlock(), vue.createElementBlock("button", {
27645
+ key: 1,
27646
+ type: "button",
27647
+ class: "gap-secondary-btn",
27648
+ onClick: _cache[8] || (_cache[8] = vue.withModifiers((...args) => (_ctx.onDownload && _ctx.onDownload(...args)), ["stop"]))
27649
+ }, " 下载 "))
27650
+ : vue.createCommentVNode("v-if", true)
27651
+ ])
27652
+ ]))
27653
+ ]),
27654
+ (_ctx.toastText)
27655
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_19$1, vue.toDisplayString(_ctx.toastText), 1 /* TEXT */))
27656
+ : vue.createCommentVNode("v-if", true)
27657
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$4))
27658
+ }
27659
+
27660
+ script$4.render = render$4;
27661
+ script$4.__file = "src/components/UniGuestAiWeddingPoster/UniGuestAiWeddingPoster.vue";
26352
27662
 
26353
27663
  /**
26354
27664
  * 应用文字动画 - 用于 WorkRender/H5 等场景
@@ -26633,27 +27943,28 @@
26633
27943
  var script$3 = vue.defineComponent({
26634
27944
  name: 'WorkRenderH5',
26635
27945
  components: {
26636
- UniMusic: script$p,
26637
- UniText: script$s,
26638
- UniImage: script$r,
26639
- UniShape: script$q,
26640
- UniCalendar: script$n,
26641
- UniMap: script$l,
26642
- UniCountdown: script$m,
26643
- UniEffect: script$j,
26644
- UniVideo: script$o,
26645
- UniCall: script$k,
26646
- UniFormInput: script$f,
26647
- UniFormSubmit: script$e,
26648
- UniFormSelect: script$d,
26649
- UniFormMultiple: script$b,
26650
- UniFormSingle: script$c,
26651
- UniFormContainer: script$a,
26652
- UniBarrage: script$g,
26653
- UniMenu: script$5,
26654
- UniLottie: script$i,
26655
- UniButton: script$h,
26656
- UniWatermark: script$4,
27946
+ UniMusic: script$q,
27947
+ UniText: script$t,
27948
+ UniImage: script$s,
27949
+ UniShape: script$r,
27950
+ UniCalendar: script$o,
27951
+ UniMap: script$m,
27952
+ UniCountdown: script$n,
27953
+ UniEffect: script$k,
27954
+ UniVideo: script$p,
27955
+ UniCall: script$l,
27956
+ UniFormInput: script$g,
27957
+ UniFormSubmit: script$f,
27958
+ UniFormSelect: script$e,
27959
+ UniFormMultiple: script$c,
27960
+ UniFormSingle: script$d,
27961
+ UniFormContainer: script$b,
27962
+ UniBarrage: script$h,
27963
+ UniMenu: script$6,
27964
+ UniLottie: script$j,
27965
+ UniButton: script$i,
27966
+ UniWatermark: script$5,
27967
+ UniGuestAiWeddingPoster: script$4,
26657
27968
  },
26658
27969
  props: {
26659
27970
  workData: {
@@ -26679,8 +27990,8 @@
26679
27990
  const personalData = vue.computed(() => workData.value.personalData || {});
26680
27991
  const global = vue.computed(() => workData.value.global || {});
26681
27992
  const pages = vue.computed(() => workData.value.pages || []);
26682
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
26683
- const shouldShowWatermark = vue.computed(() => Number(global.value.member_level) === 1);
27993
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
27994
+ const shouldShowWatermark = vue.computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
26684
27995
  // 添加提示框相关状态
26685
27996
  const showMessage = vue.ref(false);
26686
27997
  const messageText = vue.ref('');
@@ -26881,7 +28192,8 @@
26881
28192
  };
26882
28193
  // 获取组件名称
26883
28194
  const getComponentName = (type) => {
26884
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
28195
+ const base = String(type || '').replace(/^uni-/, '');
28196
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
26885
28197
  };
26886
28198
  return {
26887
28199
  personalData,
@@ -27002,9 +28314,10 @@
27002
28314
  global: _ctx.global,
27003
28315
  env: _ctx.env,
27004
28316
  personalData: _ctx.personalData,
28317
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27005
28318
  onTrigger: _ctx.handleElementTrigger,
27006
28319
  onShowMessage: _ctx.handleShowMessage
27007
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28320
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27008
28321
  : vue.createCommentVNode("v-if", true)
27009
28322
  ], 64 /* STABLE_FRAGMENT */))
27010
28323
  }), 128 /* KEYED_FRAGMENT */))
@@ -27055,27 +28368,28 @@
27055
28368
  var script$2 = vue.defineComponent({
27056
28369
  name: 'WorkRenderLong',
27057
28370
  components: {
27058
- UniMusic: script$p,
27059
- UniText: script$s,
27060
- UniImage: script$r,
27061
- UniShape: script$q,
27062
- UniCalendar: script$n,
27063
- UniMap: script$l,
27064
- UniCountdown: script$m,
27065
- UniEffect: script$j,
27066
- UniVideo: script$o,
27067
- UniCall: script$k,
27068
- UniFormInput: script$f,
27069
- UniFormSubmit: script$e,
27070
- UniFormSelect: script$d,
27071
- UniFormMultiple: script$b,
27072
- UniFormSingle: script$c,
27073
- UniFormContainer: script$a,
27074
- UniBarrage: script$g,
27075
- UniMenu: script$5,
27076
- UniLottie: script$i,
27077
- UniButton: script$h,
27078
- UniWatermark: script$4,
28371
+ UniMusic: script$q,
28372
+ UniText: script$t,
28373
+ UniImage: script$s,
28374
+ UniShape: script$r,
28375
+ UniCalendar: script$o,
28376
+ UniMap: script$m,
28377
+ UniCountdown: script$n,
28378
+ UniEffect: script$k,
28379
+ UniVideo: script$p,
28380
+ UniCall: script$l,
28381
+ UniFormInput: script$g,
28382
+ UniFormSubmit: script$f,
28383
+ UniFormSelect: script$e,
28384
+ UniFormMultiple: script$c,
28385
+ UniFormSingle: script$d,
28386
+ UniFormContainer: script$b,
28387
+ UniBarrage: script$h,
28388
+ UniMenu: script$6,
28389
+ UniLottie: script$j,
28390
+ UniButton: script$i,
28391
+ UniWatermark: script$5,
28392
+ UniGuestAiWeddingPoster: script$4,
27079
28393
  },
27080
28394
  props: {
27081
28395
  workData: {
@@ -27097,8 +28411,8 @@
27097
28411
  const personalData = vue.computed(() => workData.value.personalData || {});
27098
28412
  const global = vue.computed(() => workData.value.global || {});
27099
28413
  const pages = vue.computed(() => workData.value.pages || []);
27100
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
27101
- const shouldShowWatermark = vue.computed(() => Number(global.value.member_level) === 1);
28414
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
28415
+ const shouldShowWatermark = vue.computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
27102
28416
  const page = vue.computed(() => pages.value[0] || {});
27103
28417
  const container = vue.ref(null);
27104
28418
  const content = vue.ref(null);
@@ -27350,7 +28664,8 @@
27350
28664
  console.log('Element triggered:', payload);
27351
28665
  };
27352
28666
  const getComponentName = (type) => {
27353
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
28667
+ const base = String(type || '').replace(/^uni-/, '');
28668
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
27354
28669
  };
27355
28670
  const handleSubmit = async (formData) => {
27356
28671
  console.log('Form submitted:', formData);
@@ -27508,9 +28823,10 @@
27508
28823
  global: _ctx.global,
27509
28824
  env: _ctx.env,
27510
28825
  personalData: _ctx.personalData,
28826
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27511
28827
  onTrigger: _ctx.handleElementTrigger,
27512
28828
  onShowMessage: _ctx.handleShowMessage
27513
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28829
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27514
28830
  : vue.createCommentVNode("v-if", true)
27515
28831
  ], 64 /* STABLE_FRAGMENT */))
27516
28832
  }), 128 /* KEYED_FRAGMENT */))
@@ -27528,9 +28844,10 @@
27528
28844
  global: _ctx.global,
27529
28845
  env: _ctx.env,
27530
28846
  personalData: _ctx.personalData,
28847
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27531
28848
  onTrigger: _ctx.handleElementTrigger,
27532
28849
  onShowMessage: _ctx.handleShowMessage
27533
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28850
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27534
28851
  : vue.createCommentVNode("v-if", true)
27535
28852
  ], 64 /* STABLE_FRAGMENT */))
27536
28853
  }), 128 /* KEYED_FRAGMENT */))
@@ -27911,28 +29228,29 @@
27911
29228
  var script = vue.defineComponent({
27912
29229
  name: 'WorkRender',
27913
29230
  components: {
27914
- UniMusic: script$p,
27915
- UniText: script$s,
27916
- UniImage: script$r,
27917
- UniShape: script$q,
27918
- UniCalendar: script$n,
27919
- UniMap: script$l,
27920
- UniCountdown: script$m,
27921
- UniEffect: script$j,
27922
- UniVideo: script$o,
27923
- UniCall: script$k,
27924
- UniFormInput: script$f,
27925
- UniFormSubmit: script$e,
27926
- UniFormSelect: script$d,
27927
- UniFormMultiple: script$b,
27928
- UniFormSingle: script$c,
27929
- UniFormContainer: script$a,
27930
- UniBarrage: script$g,
27931
- UniMenu: script$5,
27932
- UniLottie: script$i,
27933
- UniButton: script$h,
27934
- UniWatermark: script$4,
29231
+ UniMusic: script$q,
29232
+ UniText: script$t,
29233
+ UniImage: script$s,
29234
+ UniShape: script$r,
29235
+ UniCalendar: script$o,
29236
+ UniMap: script$m,
29237
+ UniCountdown: script$n,
29238
+ UniEffect: script$k,
29239
+ UniVideo: script$p,
29240
+ UniCall: script$l,
29241
+ UniFormInput: script$g,
29242
+ UniFormSubmit: script$f,
29243
+ UniFormSelect: script$e,
29244
+ UniFormMultiple: script$c,
29245
+ UniFormSingle: script$d,
29246
+ UniFormContainer: script$b,
29247
+ UniBarrage: script$h,
29248
+ UniMenu: script$6,
29249
+ UniLottie: script$j,
29250
+ UniButton: script$i,
29251
+ UniWatermark: script$5,
27935
29252
  UniInvite: script$1,
29253
+ UniGuestAiWeddingPoster: script$4,
27936
29254
  },
27937
29255
  props: {
27938
29256
  workData: {
@@ -27970,8 +29288,8 @@
27970
29288
  }
27971
29289
  return null;
27972
29290
  });
27973
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
27974
- const shouldShowWatermark = vue.computed(() => Number(global.value.member_level) === 1);
29291
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
29292
+ const shouldShowWatermark = vue.computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
27975
29293
  // 长页模式
27976
29294
  const container = vue.ref(null);
27977
29295
  const contentRefs = vue.ref({});
@@ -28235,7 +29553,7 @@
28235
29553
  }
28236
29554
  };
28237
29555
  handleTouchMove = (e) => {
28238
- // 可以在这里添加滑动过程中的处理
29556
+ notifyParentScroll();
28239
29557
  };
28240
29558
  handleTouchEnd = (e) => {
28241
29559
  const touchEndY = e.changedTouches[0].clientY;
@@ -28391,6 +29709,7 @@
28391
29709
  const pageId = currentPageId.value;
28392
29710
  if (!container.value)
28393
29711
  return;
29712
+ notifyParentScroll();
28394
29713
  const touchY = e.touches[0].clientY;
28395
29714
  const deltaY = (touchY - dragStartYs.value[pageId]) * speedFactor;
28396
29715
  const now = Date.now();
@@ -28606,7 +29925,8 @@
28606
29925
  };
28607
29926
  // 获取组件名称
28608
29927
  const getComponentName = (type) => {
28609
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
29928
+ const base = String(type || '').replace(/^uni-/, '');
29929
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
28610
29930
  };
28611
29931
  const contentStyle = vue.computed(() => {
28612
29932
  if (global.value.cat === 'long_page') {
@@ -28698,6 +30018,7 @@
28698
30018
  return;
28699
30019
  if (!container.value)
28700
30020
  return;
30021
+ notifyParentScroll();
28701
30022
  const pageId = currentPageId.value;
28702
30023
  e.preventDefault();
28703
30024
  const delta = e.deltaY;
@@ -28760,6 +30081,17 @@
28760
30081
  }
28761
30082
  };
28762
30083
  // === IFRAME 页码/翻页通信 ===
30084
+ let lastScrollNotify = 0;
30085
+ function notifyParentScroll() {
30086
+ const now = Date.now();
30087
+ if (now - lastScrollNotify < 80)
30088
+ return;
30089
+ lastScrollNotify = now;
30090
+ try {
30091
+ window.parent && window.parent.postMessage({ type: 'UNIKA_H5_SCROLL' }, '*');
30092
+ }
30093
+ catch { }
30094
+ }
28763
30095
  function postIframePageInfo() {
28764
30096
  const curIdx = pages.value.findIndex(p => p.pageId === currentPageId.value);
28765
30097
  const total = pages.value.length;
@@ -28768,6 +30100,7 @@
28768
30100
  cur: curIdx,
28769
30101
  count: total
28770
30102
  }, '*');
30103
+ notifyParentScroll();
28771
30104
  }
28772
30105
  function handleIframePageMessage(event) {
28773
30106
  const data = event.data;
@@ -28804,6 +30137,7 @@
28804
30137
  });
28805
30138
  });
28806
30139
  return {
30140
+ optimizeCssImageUrl,
28807
30141
  personalData,
28808
30142
  global,
28809
30143
  inviteRender,
@@ -28925,7 +30259,7 @@
28925
30259
  class: "page-bg nobg",
28926
30260
  style: vue.normalizeStyle({
28927
30261
  backgroundColor: page.bgColor,
28928
- backgroundImage: page.bgImage
30262
+ backgroundImage: _ctx.env === 'prd' ? _ctx.optimizeCssImageUrl(page.bgImage) : page.bgImage
28929
30263
  })
28930
30264
  }, null, 4 /* STYLE */)
28931
30265
  ], 4 /* STYLE */),
@@ -28943,9 +30277,10 @@
28943
30277
  global: _ctx.global,
28944
30278
  env: _ctx.env,
28945
30279
  personalData: _ctx.personalData,
30280
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
28946
30281
  onTrigger: _ctx.handleElementTrigger,
28947
30282
  onShowMessage: _ctx.handleShowMessage
28948
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
30283
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
28949
30284
  : vue.createCommentVNode("v-if", true)
28950
30285
  ], 64 /* STABLE_FRAGMENT */))
28951
30286
  }), 128 /* KEYED_FRAGMENT */))
@@ -29000,6 +30335,10 @@
29000
30335
  app.component(script.name, script);
29001
30336
  };
29002
30337
 
30338
+ script$g.install = (app) => {
30339
+ app.component(script$g.name, script$g);
30340
+ };
30341
+
29003
30342
  script$f.install = (app) => {
29004
30343
  app.component(script$f.name, script$f);
29005
30344
  };
@@ -29020,38 +30359,38 @@
29020
30359
  app.component(script$b.name, script$b);
29021
30360
  };
29022
30361
 
29023
- script$a.install = (app) => {
29024
- app.component(script$a.name, script$a);
30362
+ script$6.install = (app) => {
30363
+ app.component(script$6.name, script$6);
29025
30364
  };
29026
30365
 
29027
- script$5.install = (app) => {
29028
- app.component(script$5.name, script$5);
30366
+ script$9.install = (app) => {
30367
+ app.component(script$9.name, script$9);
29029
30368
  };
29030
30369
 
29031
30370
  script$8.install = (app) => {
29032
30371
  app.component(script$8.name, script$8);
29033
30372
  };
29034
30373
 
30374
+ script$a.install = (app) => {
30375
+ app.component(script$a.name, script$a);
30376
+ };
30377
+
29035
30378
  script$7.install = (app) => {
29036
30379
  app.component(script$7.name, script$7);
29037
30380
  };
29038
30381
 
29039
- script$9.install = (app) => {
29040
- app.component(script$9.name, script$9);
30382
+ script$5.install = (app) => {
30383
+ app.component(script$5.name, script$5);
29041
30384
  };
29042
30385
 
29043
- script$6.install = (app) => {
29044
- app.component(script$6.name, script$6);
30386
+ script$1.install = (app) => {
30387
+ app.component(script$1.name, script$1);
29045
30388
  };
29046
30389
 
29047
30390
  script$4.install = (app) => {
29048
30391
  app.component(script$4.name, script$4);
29049
30392
  };
29050
30393
 
29051
- script$1.install = (app) => {
29052
- app.component(script$1.name, script$1);
29053
- };
29054
-
29055
30394
  /** 送呈封面模板 — 开发 fallback,生产由 biz-editor-server 提供 */
29056
30395
  const INVITE_COVER_TEMPLATES = [
29057
30396
  {
@@ -29741,6 +31080,68 @@
29741
31080
  }
29742
31081
  };
29743
31082
 
31083
+ function apiBase() {
31084
+ // vue-cli proxy: /api → biz-editor-server
31085
+ return '/api';
31086
+ }
31087
+ async function parseJson(res) {
31088
+ const body = await res.json().catch(() => ({}));
31089
+ if (!res.ok || (body && typeof body.errno === 'number' && body.errno !== 0)) {
31090
+ const err = new Error((body === null || body === void 0 ? void 0 : body.message) || `HTTP ${res.status}`);
31091
+ err.code = String((body === null || body === void 0 ? void 0 : body.errno) || (body === null || body === void 0 ? void 0 : body.errorCode) || res.status);
31092
+ throw err;
31093
+ }
31094
+ return (body === null || body === void 0 ? void 0 : body.data) !== undefined ? body.data : body;
31095
+ }
31096
+ function createHttpGuestPosterService(options) {
31097
+ const base = ((options === null || options === void 0 ? void 0 : options.baseUrl) || apiBase()).replace(/\/$/, '');
31098
+ return {
31099
+ async uploadGuestPhoto(file, _context) {
31100
+ const form = new FormData();
31101
+ form.append('file', file);
31102
+ const res = await fetch(`${base}/ai-guest-poster/upload`, {
31103
+ method: 'POST',
31104
+ body: form,
31105
+ credentials: 'include'
31106
+ });
31107
+ return parseJson(res);
31108
+ },
31109
+ async createPosterJob(request) {
31110
+ const res = await fetch(`${base}/ai-guest-poster/jobs`, {
31111
+ method: 'POST',
31112
+ headers: { 'Content-Type': 'application/json' },
31113
+ credentials: 'include',
31114
+ body: JSON.stringify(request)
31115
+ });
31116
+ return parseJson(res);
31117
+ },
31118
+ async getPosterJob(jobId) {
31119
+ const res = await fetch(`${base}/ai-guest-poster/jobs/${encodeURIComponent(jobId)}`, {
31120
+ credentials: 'include'
31121
+ });
31122
+ return parseJson(res);
31123
+ },
31124
+ async cancelPosterJob(jobId) {
31125
+ await fetch(`${base}/ai-guest-poster/jobs/${encodeURIComponent(jobId)}/cancel`, {
31126
+ method: 'POST',
31127
+ headers: { 'Content-Type': 'application/json' },
31128
+ credentials: 'include',
31129
+ body: '{}'
31130
+ });
31131
+ },
31132
+ async getQuota(invitationId) {
31133
+ const q = new URLSearchParams({
31134
+ sceneId: invitationId || '',
31135
+ invitationId: invitationId || ''
31136
+ });
31137
+ const res = await fetch(`${base}/ai-guest-poster/config?${q}`, {
31138
+ credentials: 'include'
31139
+ });
31140
+ return parseJson(res);
31141
+ }
31142
+ };
31143
+ }
31144
+
29744
31145
  /** 送呈快捷短语 — 开发/编辑器 fallback;生产环境由 biz-editor-server API 提供 */
29745
31146
  const INVITE_QUICK_PHRASES = [
29746
31147
  '邀请您一道分享我们的喜悦',
@@ -29770,6 +31171,7 @@
29770
31171
  }
29771
31172
 
29772
31173
  const components = [
31174
+ script$t,
29773
31175
  script$s,
29774
31176
  script$r,
29775
31177
  script$q,
@@ -29782,23 +31184,23 @@
29782
31184
  script$j,
29783
31185
  script$i,
29784
31186
  script$h,
29785
- script$g,
29786
31187
  script$3,
29787
31188
  script$2,
29788
31189
  script,
31190
+ script$g,
29789
31191
  script$f,
29790
31192
  script$e,
29791
31193
  script$d,
29792
31194
  script$c,
29793
31195
  script$b,
29794
- script$a,
29795
- script$5,
31196
+ script$6,
31197
+ script$9,
29796
31198
  script$8,
31199
+ script$a,
29797
31200
  script$7,
29798
- script$9,
29799
- script$6,
29800
- script$4,
29801
- script$1
31201
+ script$5,
31202
+ script$1,
31203
+ script$4
29802
31204
  ];
29803
31205
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
29804
31206
  const install = (app) => {
@@ -29810,34 +31212,39 @@
29810
31212
  install
29811
31213
  };
29812
31214
 
31215
+ exports.GUEST_AI_WEDDING_POSTER_TYPE = GUEST_AI_WEDDING_POSTER_TYPE;
31216
+ exports.GUEST_AI_WEDDING_POSTER_VERSION = GUEST_AI_WEDDING_POSTER_VERSION;
31217
+ exports.GUEST_POSTER_SERVICE_KEY = GUEST_POSTER_SERVICE_KEY;
31218
+ exports.GuestAIWeddingPoster = script$4;
29813
31219
  exports.INVITE_COVER_TEMPLATES = INVITE_COVER_TEMPLATES;
29814
31220
  exports.INVITE_QUICK_PHRASES = INVITE_QUICK_PHRASES;
29815
- exports.UniBarrage = script$g;
29816
- exports.UniButton = script$h;
29817
- exports.UniCalendar = script$n;
29818
- exports.UniCall = script$k;
29819
- exports.UniCountdown = script$m;
29820
- exports.UniEffect = script$j;
29821
- exports.UniFormContainer = script$a;
29822
- exports.UniFormInput = script$f;
29823
- exports.UniFormMultiple = script$b;
29824
- exports.UniFormSelect = script$d;
29825
- exports.UniFormSingle = script$c;
29826
- exports.UniFormSubmit = script$e;
29827
- exports.UniImage = script$r;
31221
+ exports.UniBarrage = script$h;
31222
+ exports.UniButton = script$i;
31223
+ exports.UniCalendar = script$o;
31224
+ exports.UniCall = script$l;
31225
+ exports.UniCountdown = script$n;
31226
+ exports.UniEffect = script$k;
31227
+ exports.UniFormContainer = script$b;
31228
+ exports.UniFormInput = script$g;
31229
+ exports.UniFormMultiple = script$c;
31230
+ exports.UniFormSelect = script$e;
31231
+ exports.UniFormSingle = script$d;
31232
+ exports.UniFormSubmit = script$f;
31233
+ exports.UniGuestAiWeddingPoster = script$4;
31234
+ exports.UniImage = script$s;
29828
31235
  exports.UniInvite = script$1;
29829
- exports.UniLottie = script$i;
29830
- exports.UniMap = script$l;
29831
- exports.UniMenu = script$5;
29832
- exports.UniMenuMap = script$6;
29833
- exports.UniMenuReceipt = script$9;
29834
- exports.UniMenuTel = script$7;
29835
- exports.UniMenuVideo = script$8;
29836
- exports.UniMusic = script$p;
29837
- exports.UniShape = script$q;
29838
- exports.UniText = script$s;
29839
- exports.UniVideo = script$o;
29840
- exports.UniWatermark = script$4;
31236
+ exports.UniLottie = script$j;
31237
+ exports.UniMap = script$m;
31238
+ exports.UniMenu = script$6;
31239
+ exports.UniMenuMap = script$7;
31240
+ exports.UniMenuReceipt = script$a;
31241
+ exports.UniMenuTel = script$8;
31242
+ exports.UniMenuVideo = script$9;
31243
+ exports.UniMusic = script$q;
31244
+ exports.UniShape = script$r;
31245
+ exports.UniText = script$t;
31246
+ exports.UniVideo = script$p;
31247
+ exports.UniWatermark = script$5;
29841
31248
  exports.WorkRender = script;
29842
31249
  exports.WorkRenderH5 = script$3;
29843
31250
  exports.WorkRenderLong = script$2;
@@ -29849,23 +31256,34 @@
29849
31256
  exports.calendarDefaultProps = calendarDefaultProps;
29850
31257
  exports.callDefaultProps = callDefaultProps;
29851
31258
  exports.countdownDefaultProps = countdownDefaultProps;
31259
+ exports.createHttpGuestPosterService = createHttpGuestPosterService;
31260
+ exports.createMockGuestPosterService = createMockGuestPosterService;
29852
31261
  exports["default"] = index;
31262
+ exports.defaultGuestAIWeddingPosterConfig = defaultGuestAIWeddingPosterConfig;
29853
31263
  exports.effectDefaultProps = effectDefaultProps;
29854
31264
  exports.formInputDefaultProps = formInputDefaultProps;
29855
31265
  exports.formSubmitDefaultProps = formSubmitDefaultProps;
29856
31266
  exports.getInviteDismissDelay = getInviteDismissDelay;
29857
31267
  exports.getInviteRenderFromGlobal = getInviteRenderFromGlobal;
29858
31268
  exports.getInviteTemplateById = getInviteTemplateById;
31269
+ exports.guestAIWeddingPosterDefaultProps = guestAIWeddingPosterDefaultProps;
31270
+ exports.guestAIWeddingPosterInspectorConfig = guestAIWeddingPosterInspectorConfig;
31271
+ exports.guestAIWeddingPosterSchema = guestAIWeddingPosterSchema;
29859
31272
  exports.install = install;
29860
31273
  exports.inviteDefaultProps = inviteDefaultProps;
29861
31274
  exports.isValidInviteItem = isValidInviteItem;
29862
31275
  exports.lottieDefaultProps = lottieDefaultProps;
29863
31276
  exports.mapDefaultProps = mapDefaultProps;
31277
+ exports.mergeGuestAIWeddingPosterConfig = mergeGuestAIWeddingPosterConfig;
31278
+ exports.migrateGuestAIWeddingPosterConfig = migrateGuestAIWeddingPosterConfig;
29864
31279
  exports.musicDefaultProps = musicDefaultProps;
31280
+ exports.resolveGuestAIWeddingPosterConfig = resolveGuestAIWeddingPosterConfig;
31281
+ exports.resolveGuestPosterService = resolveGuestPosterService;
29865
31282
  exports.resolveInviteRenderData = resolveInviteRenderData;
29866
31283
  exports.restoreTextAnimation = restoreTextAnimation;
29867
31284
  exports.shapeDefaultProps = shapeDefaultProps;
29868
31285
  exports.useInviteManager = useInviteManager;
31286
+ exports.validateGuestAIWeddingPosterConfig = validateGuestAIWeddingPosterConfig;
29869
31287
  exports.videoDefaultProps = videoDefaultProps;
29870
31288
 
29871
31289
  Object.defineProperty(exports, '__esModule', { value: true });