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.
@@ -15,7 +15,7 @@ function px2rem(px) {
15
15
  return px;
16
16
  }
17
17
 
18
- var script$s = defineComponent({
18
+ var script$t = defineComponent({
19
19
  name: 'UniText',
20
20
  props: {
21
21
  element: {
@@ -118,9 +118,9 @@ var script$s = defineComponent({
118
118
  }
119
119
  });
120
120
 
121
- const _hoisted_1$n = ["data-id", "data-pid", "data-type", "sign", "signsort", "layername"];
121
+ const _hoisted_1$o = ["data-id", "data-pid", "data-type", "sign", "signsort", "layername"];
122
122
 
123
- function render$o(_ctx, _cache, $props, $setup, $data, $options) {
123
+ function render$p(_ctx, _cache, $props, $setup, $data, $options) {
124
124
  return (_ctx.element && (!_ctx.element.properties || _ctx.element.properties.visible !== false))
125
125
  ? (openBlock(), createElementBlock("div", {
126
126
  key: 0,
@@ -151,30 +151,96 @@ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
151
151
  style: normalizeStyle(_ctx.textEditorStyle)
152
152
  }, toDisplayString(_ctx.element.textContent), 5 /* TEXT, STYLE */)
153
153
  ], 4 /* STYLE */)
154
- ], 12 /* STYLE, PROPS */, _hoisted_1$n))
154
+ ], 12 /* STYLE, PROPS */, _hoisted_1$o))
155
155
  : createCommentVNode("v-if", true)
156
156
  }
157
157
 
158
- script$s.render = render$o;
159
- script$s.__file = "src/components/UniText/UniText.vue";
158
+ script$t.render = render$p;
159
+ script$t.__file = "src/components/UniText/UniText.vue";
160
160
 
161
- script$s.install = (app) => {
162
- app.component(script$s.name, script$s);
161
+ script$t.install = (app) => {
162
+ app.component(script$t.name, script$t);
163
163
  };
164
164
 
165
- var script$r = defineComponent({
165
+ // 阿里云 OSS 图片处理:按显示尺寸缩放并转 webp
166
+ // 只处理自家 OSS 域名(第三方地址不支持 x-oss-process 参数)
167
+ const OSS_HOST_REG = /^(https?:)?\/\/(h5cdn\.unika\.cc|unika-static-dev\.unika\.cc)\//i;
168
+ // gif 转 webp 会丢失动画,svg 是矢量图
169
+ const SKIP_EXT_REG = /\.(gif|svg)$/i;
170
+ // 宽度分档,便于 CDN 缓存命中
171
+ const WIDTH_BUCKETS = [375, 750, 1080];
172
+ // 设计稿宽 375,按 2 倍屏输出
173
+ const DPR = 2;
174
+ const DESIGN_PX_PER_REM = 37.5;
175
+ /**
176
+ * 元素宽度转为设计稿 px,h5-server 渲染前会把数字转成 rem 字符串
177
+ */
178
+ function toDesignPx(value) {
179
+ if (typeof value === 'number')
180
+ return value;
181
+ if (typeof value !== 'string')
182
+ return 0;
183
+ const num = parseFloat(value);
184
+ if (Number.isNaN(num))
185
+ return 0;
186
+ if (value.trim().endsWith('rem'))
187
+ return num * DESIGN_PX_PER_REM;
188
+ return num;
189
+ }
190
+ function pickWidth(designWidth) {
191
+ const target = designWidth > 0 ? designWidth * DPR : 750;
192
+ return WIDTH_BUCKETS.find(w => w >= target) || WIDTH_BUCKETS[WIDTH_BUCKETS.length - 1];
193
+ }
194
+ /**
195
+ * @param src 图片地址
196
+ * @param designWidth 显示宽度(设计稿 px),未知时传 0
197
+ */
198
+ function optimizeImageUrl(src, designWidth = 0) {
199
+ if (!src || typeof src !== 'string')
200
+ return src;
201
+ if (!OSS_HOST_REG.test(src) || src.includes('x-oss-process'))
202
+ return src;
203
+ const path = src.split(/[?#]/)[0];
204
+ if (SKIP_EXT_REG.test(path))
205
+ return src;
206
+ const hashIndex = src.indexOf('#');
207
+ const base = hashIndex >= 0 ? src.slice(0, hashIndex) : src;
208
+ const hash = hashIndex >= 0 ? src.slice(hashIndex) : '';
209
+ const sep = base.includes('?') ? '&' : '?';
210
+ const width = pickWidth(designWidth);
211
+ return `${base}${sep}x-oss-process=image/resize,w_${width},limit_1/quality,q_80/format,webp${hash}`;
212
+ }
213
+ /**
214
+ * 处理 CSS 中的 url(...),如页面背景 `url("https://...")`
215
+ */
216
+ function optimizeCssImageUrl(value, designWidth = 0) {
217
+ if (!value || typeof value !== 'string')
218
+ return value;
219
+ return value.replace(/url\(\s*(['"]?)([^'")]+)\1\s*\)/g, (_m, quote, url) => `url(${quote}${optimizeImageUrl(url, designWidth)}${quote})`);
220
+ }
221
+
222
+ var script$s = defineComponent({
166
223
  name: 'uni-image',
167
224
  props: {
168
225
  element: {
169
226
  type: Object,
170
227
  required: true
171
228
  },
229
+ // WorkRender 线上渲染传 'prd',此时才走 OSS 图片压缩;编辑器画布不传
230
+ env: {
231
+ type: String,
232
+ default: ''
233
+ },
172
234
  },
173
235
  emits: ['trigger'],
174
236
  setup(props, { emit }) {
175
237
  // 计算属性
176
238
  const properties = computed(() => props.element.properties || {});
177
239
  const css = computed(() => props.element.css || {});
240
+ const displaySrc = computed(() => {
241
+ const src = properties.value.src;
242
+ return props.env === 'prd' ? optimizeImageUrl(src, toDesignPx(css.value.width)) : src;
243
+ });
178
244
  // 容器样式
179
245
  const containerStyle = computed(() => {
180
246
  const flipH = css.value.flipHorizontal ? -1 : 1;
@@ -186,7 +252,8 @@ var script$r = defineComponent({
186
252
  top: px2rem(css.value.top),
187
253
  width: px2rem(css.value.width),
188
254
  height: px2rem(css.value.height),
189
- transform: `${rotate} ${scale}`
255
+ transform: `${rotate} ${scale}`,
256
+ '--img-bg-pos': css.value.backgroundPosition || '50% 50%'
190
257
  };
191
258
  });
192
259
  // 图片样式
@@ -200,37 +267,22 @@ var script$r = defineComponent({
200
267
  ? `${px2rem(properties.value.shadowX)} ${px2rem(properties.value.shadowY)} ${px2rem(properties.value.shadowBlur)} ${properties.value.shadowColor}`
201
268
  : 'none'
202
269
  }));
203
- // 背景图样式
270
+ // 背景图:cover 保持比例,backgroundPosition 只做框内平移
204
271
  const bgImageStyle = computed(() => ({
205
- backgroundImage: `url(${properties.value.src})`,
272
+ backgroundImage: `url(${displaySrc.value})`,
206
273
  backgroundSize: 'cover',
207
- backgroundPosition: '50% 50%'
274
+ backgroundPosition: css.value.backgroundPosition || '50% 50%'
275
+ }));
276
+ // 与编辑器 .ele-bg-wrap 一致:cover + 框内平移
277
+ const imgTagStyle = computed(() => ({
278
+ width: '100%',
279
+ height: '100%',
280
+ position: 'absolute',
281
+ left: '0',
282
+ top: '0',
283
+ objectFit: 'cover',
284
+ objectPosition: css.value.backgroundPosition || '50% 50%'
208
285
  }));
209
- // img标签样式(用于非背景图模式)
210
- const imgTagStyle = computed(() => {
211
- const aspectRatio = properties.value.realW || 0 / (properties.value.realH || 1);
212
- const containerWidth = css.value.width;
213
- const containerHeight = css.value.height;
214
- // 保持图片原始比例
215
- if (containerWidth / containerHeight > aspectRatio) {
216
- return {
217
- height: '100%',
218
- width: 'auto',
219
- position: 'absolute',
220
- left: '50%',
221
- transform: 'translateX(-50%)'
222
- };
223
- }
224
- else {
225
- return {
226
- width: '100%',
227
- height: 'auto',
228
- position: 'absolute',
229
- top: '50%',
230
- transform: 'translateY(-50%)'
231
- };
232
- }
233
- });
234
286
  // 遮罩样式
235
287
  const maskStyle = computed(() => ({
236
288
  '-webkit-mask-box-image-source': properties.value.maskBoxImageSource
@@ -274,6 +326,7 @@ var script$r = defineComponent({
274
326
  };
275
327
  return {
276
328
  properties,
329
+ displaySrc,
277
330
  containerStyle,
278
331
  imageStyle,
279
332
  bgImageStyle,
@@ -286,10 +339,10 @@ var script$r = defineComponent({
286
339
  }
287
340
  });
288
341
 
289
- const _hoisted_1$m = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort", "imgmattinginfo"];
290
- const _hoisted_2$j = ["src"];
342
+ const _hoisted_1$n = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort", "imgmattinginfo"];
343
+ const _hoisted_2$k = ["src"];
291
344
 
292
- function render$n(_ctx, _cache, $props, $setup, $data, $options) {
345
+ function render$o(_ctx, _cache, $props, $setup, $data, $options) {
293
346
  return (openBlock(), createElementBlock("div", {
294
347
  class: "ele-img eles",
295
348
  "data-id": _ctx.element.id,
@@ -324,11 +377,12 @@ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
324
377
  style: normalizeStyle(_ctx.imageStyle)
325
378
  }, [
326
379
  createElementVNode("img", {
327
- src: _ctx.properties.src,
380
+ src: _ctx.displaySrc,
328
381
  alt: "image",
382
+ loading: "lazy",
329
383
  class: "ele-image",
330
384
  style: normalizeStyle(_ctx.imgTagStyle)
331
- }, null, 12 /* STYLE, PROPS */, _hoisted_2$j)
385
+ }, null, 12 /* STYLE, PROPS */, _hoisted_2$k)
332
386
  ], 4 /* STYLE */))
333
387
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
334
388
  createCommentVNode(" 图片展示方式2:使用背景图 "),
@@ -344,17 +398,17 @@ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
344
398
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
345
399
  ], 4 /* STYLE */)
346
400
  ], 4 /* STYLE */)
347
- ], 12 /* STYLE, PROPS */, _hoisted_1$m))
401
+ ], 12 /* STYLE, PROPS */, _hoisted_1$n))
348
402
  }
349
403
 
350
- script$r.render = render$n;
351
- script$r.__file = "src/components/UniImage/UniImage.vue";
404
+ script$s.render = render$o;
405
+ script$s.__file = "src/components/UniImage/UniImage.vue";
352
406
 
353
- script$r.install = (app) => {
354
- app.component(script$r.name, script$r);
407
+ script$s.install = (app) => {
408
+ app.component(script$s.name, script$s);
355
409
  };
356
410
 
357
- var script$q = defineComponent({
411
+ var script$r = defineComponent({
358
412
  name: 'uni-shape',
359
413
  props: {
360
414
  element: {
@@ -505,12 +559,12 @@ var script$q = defineComponent({
505
559
  }
506
560
  });
507
561
 
508
- const _hoisted_1$l = ["data-id"];
509
- const _hoisted_2$i = ["innerHTML"];
510
- const _hoisted_3$h = /*#__PURE__*/createElementVNode("div", { class: "svg-loading" }, "Loading...", -1 /* HOISTED */);
511
- const _hoisted_4$d = { class: "svg-error" };
562
+ const _hoisted_1$m = ["data-id"];
563
+ const _hoisted_2$j = ["innerHTML"];
564
+ const _hoisted_3$i = /*#__PURE__*/createElementVNode("div", { class: "svg-loading" }, "Loading...", -1 /* HOISTED */);
565
+ const _hoisted_4$e = { class: "svg-error" };
512
566
 
513
- function render$m(_ctx, _cache, $props, $setup, $data, $options) {
567
+ function render$n(_ctx, _cache, $props, $setup, $data, $options) {
514
568
  return (openBlock(), createElementBlock("div", {
515
569
  class: "ele-shape eles",
516
570
  "data-id": _ctx.element.id,
@@ -535,16 +589,16 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
535
589
  innerHTML: _ctx.processedSvg,
536
590
  class: "svg-container",
537
591
  style: {"width":"100%","height":"100%"}
538
- }, null, 8 /* PROPS */, _hoisted_2$i))
592
+ }, null, 8 /* PROPS */, _hoisted_2$j))
539
593
  : (_ctx.isLoading)
540
594
  ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
541
595
  createCommentVNode(" 加载状态 "),
542
- _hoisted_3$h
596
+ _hoisted_3$i
543
597
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
544
598
  : (_ctx.loadError)
545
599
  ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
546
600
  createCommentVNode(" 错误状态 "),
547
- createElementVNode("div", _hoisted_4$d, [
601
+ createElementVNode("div", _hoisted_4$e, [
548
602
  renderSlot(_ctx.$slots, "error", {
549
603
  src: _ctx.properties.src
550
604
  }, () => [
@@ -555,14 +609,14 @@ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
555
609
  : createCommentVNode("v-if", true)
556
610
  ], 4 /* STYLE */)
557
611
  ], 4 /* STYLE */)
558
- ], 12 /* STYLE, PROPS */, _hoisted_1$l))
612
+ ], 12 /* STYLE, PROPS */, _hoisted_1$m))
559
613
  }
560
614
 
561
- script$q.render = render$m;
562
- script$q.__file = "src/components/UniShape/UniShape.vue";
615
+ script$r.render = render$n;
616
+ script$r.__file = "src/components/UniShape/UniShape.vue";
563
617
 
564
- script$q.install = (app) => {
565
- app.component(script$q.name, script$q);
618
+ script$r.install = (app) => {
619
+ app.component(script$r.name, script$r);
566
620
  };
567
621
 
568
622
  const musicState = ref({
@@ -806,7 +860,7 @@ const useMusicManager = () => {
806
860
  };
807
861
  };
808
862
 
809
- var script$p = defineComponent({
863
+ var script$q = defineComponent({
810
864
  name: 'uni-music',
811
865
  props: {
812
866
  musicData: {
@@ -876,19 +930,19 @@ var script$p = defineComponent({
876
930
  }
877
931
  });
878
932
 
879
- const _hoisted_1$k = { id: "audio" };
880
- const _hoisted_2$h = ["src"];
881
- const _hoisted_3$g = {
933
+ const _hoisted_1$l = { id: "audio" };
934
+ const _hoisted_2$i = ["src"];
935
+ const _hoisted_3$h = {
882
936
  key: 1,
883
937
  class: "iconfont"
884
938
  };
885
- const _hoisted_4$c = ["src"];
886
- const _hoisted_5$b = /*#__PURE__*/createElementVNode("div", { class: "icon-cancel" }, [
939
+ const _hoisted_4$d = ["src"];
940
+ const _hoisted_5$c = /*#__PURE__*/createElementVNode("div", { class: "icon-cancel" }, [
887
941
  /*#__PURE__*/createElementVNode("div", { class: "icon-h" })
888
942
  ], -1 /* HOISTED */);
889
943
 
890
- function render$l(_ctx, _cache, $props, $setup, $data, $options) {
891
- return (openBlock(), createElementBlock("div", _hoisted_1$k, [
944
+ function render$m(_ctx, _cache, $props, $setup, $data, $options) {
945
+ return (openBlock(), createElementBlock("div", _hoisted_1$l, [
892
946
  createElementVNode("div", {
893
947
  class: normalizeClass(["audio", { 'a-border': _ctx.showBorder, 'mrotate': _ctx.localIsPlaying }]),
894
948
  style: normalizeStyle({ background: _ctx.bgColor }),
@@ -902,8 +956,8 @@ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
902
956
  src: _ctx.playIconUrl,
903
957
  class: "music-icon",
904
958
  alt: "หยุดชั่วคราว"
905
- }, null, 8 /* PROPS */, _hoisted_2$h))
906
- : (openBlock(), createElementBlock("span", _hoisted_3$g, "❚❚"))
959
+ }, null, 8 /* PROPS */, _hoisted_2$i))
960
+ : (openBlock(), createElementBlock("span", _hoisted_3$h, "❚❚"))
907
961
  ], 64 /* STABLE_FRAGMENT */))
908
962
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
909
963
  (_ctx.playIconUrl)
@@ -912,22 +966,22 @@ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
912
966
  src: _ctx.playIconUrl,
913
967
  class: "music-icon",
914
968
  alt: "กำลังเล่น"
915
- }, null, 8 /* PROPS */, _hoisted_4$c))
969
+ }, null, 8 /* PROPS */, _hoisted_4$d))
916
970
  : createCommentVNode("v-if", true),
917
- _hoisted_5$b
971
+ _hoisted_5$c
918
972
  ], 64 /* STABLE_FRAGMENT */))
919
973
  ], 6 /* CLASS, STYLE */)
920
974
  ]))
921
975
  }
922
976
 
923
- script$p.render = render$l;
924
- script$p.__file = "src/components/UniMusic/UniMusic.vue";
977
+ script$q.render = render$m;
978
+ script$q.__file = "src/components/UniMusic/UniMusic.vue";
925
979
 
926
- script$p.install = (app) => {
927
- app.component(script$p.name, script$p);
980
+ script$q.install = (app) => {
981
+ app.component(script$q.name, script$q);
928
982
  };
929
983
 
930
- var script$o = defineComponent({
984
+ var script$p = defineComponent({
931
985
  name: 'uni-video',
932
986
  props: {
933
987
  element: {
@@ -1000,14 +1054,14 @@ var script$o = defineComponent({
1000
1054
  }
1001
1055
  });
1002
1056
 
1003
- const _hoisted_1$j = {
1057
+ const _hoisted_1$k = {
1004
1058
  key: 0,
1005
1059
  class: "video-container"
1006
1060
  };
1007
- const _hoisted_2$g = ["src"];
1008
- const _hoisted_3$f = ["src"];
1061
+ const _hoisted_2$h = ["src"];
1062
+ const _hoisted_3$g = ["src"];
1009
1063
 
1010
- function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1064
+ function render$l(_ctx, _cache, $props, $setup, $data, $options) {
1011
1065
  return (openBlock(), createElementBlock("div", {
1012
1066
  class: "element-video eles",
1013
1067
  style: normalizeStyle(_ctx.containerStyle)
@@ -1020,7 +1074,7 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1020
1074
  })
1021
1075
  }, [
1022
1076
  (_ctx.isPlaying)
1023
- ? (openBlock(), createElementBlock("div", _hoisted_1$j, [
1077
+ ? (openBlock(), createElementBlock("div", _hoisted_1$k, [
1024
1078
  createElementVNode("iframe", {
1025
1079
  src: _ctx.youtubeEmbedUrl,
1026
1080
  type: "text/html",
@@ -1028,7 +1082,7 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1028
1082
  allowfullscreen: "",
1029
1083
  scrolling: "no",
1030
1084
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
1031
- }, null, 8 /* PROPS */, _hoisted_2$g)
1085
+ }, null, 8 /* PROPS */, _hoisted_2$h)
1032
1086
  ]))
1033
1087
  : (openBlock(), createElementBlock("div", {
1034
1088
  key: 1,
@@ -1040,20 +1094,20 @@ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1040
1094
  src: _ctx.element.properties.src,
1041
1095
  alt: "Play button",
1042
1096
  class: "play-btn"
1043
- }, null, 8 /* PROPS */, _hoisted_3$f)
1097
+ }, null, 8 /* PROPS */, _hoisted_3$g)
1044
1098
  ], 4 /* STYLE */))
1045
1099
  ], 4 /* STYLE */)
1046
1100
  ], 4 /* STYLE */))
1047
1101
  }
1048
1102
 
1049
- script$o.render = render$k;
1050
- script$o.__file = "src/components/UniVideo/UniVideo.vue";
1103
+ script$p.render = render$l;
1104
+ script$p.__file = "src/components/UniVideo/UniVideo.vue";
1051
1105
 
1052
- script$o.install = (app) => {
1053
- app.component(script$o.name, script$o);
1106
+ script$p.install = (app) => {
1107
+ app.component(script$p.name, script$p);
1054
1108
  };
1055
1109
 
1056
- var script$n = defineComponent({
1110
+ var script$o = defineComponent({
1057
1111
  name: 'uni-calendar',
1058
1112
  props: {
1059
1113
  element: {
@@ -1169,33 +1223,33 @@ var script$n = defineComponent({
1169
1223
  }
1170
1224
  });
1171
1225
 
1172
- const _hoisted_1$i = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1173
- const _hoisted_2$f = {
1226
+ const _hoisted_1$j = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1227
+ const _hoisted_2$g = {
1174
1228
  key: 0,
1175
1229
  class: "can-wrap"
1176
1230
  };
1177
- const _hoisted_3$e = { class: "can-top" };
1178
- const _hoisted_4$b = { class: "can-main" };
1179
- const _hoisted_5$a = { class: "can-date" };
1180
- const _hoisted_6$8 = {
1231
+ const _hoisted_3$f = { class: "can-top" };
1232
+ const _hoisted_4$c = { class: "can-main" };
1233
+ const _hoisted_5$b = { class: "can-date" };
1234
+ const _hoisted_6$9 = {
1181
1235
  key: 1,
1182
1236
  class: "can-wrap2"
1183
1237
  };
1184
- const _hoisted_7$7 = { class: "can-top" };
1185
- const _hoisted_8$4 = /*#__PURE__*/createElementVNode("span", null, "/", -1 /* HOISTED */);
1186
- const _hoisted_9$4 = { class: "can-main" };
1187
- const _hoisted_10$4 = { class: "can-week" };
1188
- const _hoisted_11$4 = { class: "can-date" };
1189
- const _hoisted_12$4 = {
1238
+ const _hoisted_7$8 = { class: "can-top" };
1239
+ const _hoisted_8$5 = /*#__PURE__*/createElementVNode("span", null, "/", -1 /* HOISTED */);
1240
+ const _hoisted_9$5 = { class: "can-main" };
1241
+ const _hoisted_10$5 = { class: "can-week" };
1242
+ const _hoisted_11$5 = { class: "can-date" };
1243
+ const _hoisted_12$5 = {
1190
1244
  key: 2,
1191
1245
  class: "can-wrap3"
1192
1246
  };
1193
- const _hoisted_13$4 = { class: "can-top" };
1194
- const _hoisted_14$4 = /*#__PURE__*/createElementVNode("span", null, "/", -1 /* HOISTED */);
1195
- const _hoisted_15$4 = { class: "can-main" };
1196
- const _hoisted_16$4 = { class: "can-date" };
1247
+ const _hoisted_13$5 = { class: "can-top" };
1248
+ const _hoisted_14$5 = /*#__PURE__*/createElementVNode("span", null, "/", -1 /* HOISTED */);
1249
+ const _hoisted_15$5 = { class: "can-main" };
1250
+ const _hoisted_16$5 = { class: "can-date" };
1197
1251
 
1198
- function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1252
+ function render$k(_ctx, _cache, $props, $setup, $data, $options) {
1199
1253
  return (openBlock(), createElementBlock("div", {
1200
1254
  class: "ele-calendar eles",
1201
1255
  "data-id": _ctx.element.id,
@@ -1215,8 +1269,8 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1215
1269
  style: normalizeStyle(_ctx.aniWrapStyle)
1216
1270
  }, [
1217
1271
  (_ctx.element.kind === 1)
1218
- ? (openBlock(), createElementBlock("div", _hoisted_2$f, [
1219
- createElementVNode("div", _hoisted_3$e, [
1272
+ ? (openBlock(), createElementBlock("div", _hoisted_2$g, [
1273
+ createElementVNode("div", _hoisted_3$f, [
1220
1274
  createElementVNode("div", {
1221
1275
  class: "can-left",
1222
1276
  style: normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
@@ -1229,7 +1283,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1229
1283
  createTextVNode(" " + toDisplayString(_ctx.month), 1 /* TEXT */)
1230
1284
  ], 4 /* STYLE */)
1231
1285
  ]),
1232
- createElementVNode("div", _hoisted_4$b, [
1286
+ createElementVNode("div", _hoisted_4$c, [
1233
1287
  createElementVNode("div", {
1234
1288
  class: "can-week",
1235
1289
  style: normalizeStyle({ backgroundColor: _ctx.element.themeColor || '#ed5566' })
@@ -1238,7 +1292,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1238
1292
  return (openBlock(), createElementBlock("span", { key: day }, toDisplayString(day), 1 /* TEXT */))
1239
1293
  }), 128 /* KEYED_FRAGMENT */))
1240
1294
  ], 4 /* STYLE */),
1241
- createElementVNode("div", _hoisted_5$a, [
1295
+ createElementVNode("div", _hoisted_5$b, [
1242
1296
  createElementVNode("ul", null, [
1243
1297
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.days, (day, index) => {
1244
1298
  return (openBlock(), createElementBlock("li", {
@@ -1267,19 +1321,19 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1267
1321
  ]))
1268
1322
  : createCommentVNode("v-if", true),
1269
1323
  (_ctx.element.kind === 2)
1270
- ? (openBlock(), createElementBlock("div", _hoisted_6$8, [
1271
- createElementVNode("div", _hoisted_7$7, [
1324
+ ? (openBlock(), createElementBlock("div", _hoisted_6$9, [
1325
+ createElementVNode("div", _hoisted_7$8, [
1272
1326
  createElementVNode("div", {
1273
1327
  class: "can-size",
1274
1328
  style: normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1275
1329
  }, [
1276
1330
  createTextVNode(toDisplayString(_ctx.currentDay) + " ", 1 /* TEXT */),
1277
- _hoisted_8$4,
1331
+ _hoisted_8$5,
1278
1332
  createTextVNode(" " + toDisplayString(_ctx.currentMonth), 1 /* TEXT */)
1279
1333
  ], 4 /* STYLE */)
1280
1334
  ]),
1281
- createElementVNode("div", _hoisted_9$4, [
1282
- createElementVNode("div", _hoisted_10$4, [
1335
+ createElementVNode("div", _hoisted_9$5, [
1336
+ createElementVNode("div", _hoisted_10$5, [
1283
1337
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.weekDays, (day) => {
1284
1338
  return (openBlock(), createElementBlock("span", {
1285
1339
  key: day,
@@ -1287,7 +1341,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1287
1341
  }, toDisplayString(day), 5 /* TEXT, STYLE */))
1288
1342
  }), 128 /* KEYED_FRAGMENT */))
1289
1343
  ]),
1290
- createElementVNode("div", _hoisted_11$4, [
1344
+ createElementVNode("div", _hoisted_11$5, [
1291
1345
  createElementVNode("div", {
1292
1346
  class: "can-year",
1293
1347
  style: normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
@@ -1320,14 +1374,14 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1320
1374
  ]))
1321
1375
  : createCommentVNode("v-if", true),
1322
1376
  (_ctx.element.kind === 3)
1323
- ? (openBlock(), createElementBlock("div", _hoisted_12$4, [
1324
- createElementVNode("div", _hoisted_13$4, [
1377
+ ? (openBlock(), createElementBlock("div", _hoisted_12$5, [
1378
+ createElementVNode("div", _hoisted_13$5, [
1325
1379
  createElementVNode("div", {
1326
1380
  class: "can-size",
1327
1381
  style: normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1328
1382
  }, [
1329
1383
  createTextVNode(toDisplayString(_ctx.currentDay) + " ", 1 /* TEXT */),
1330
- _hoisted_14$4,
1384
+ _hoisted_14$5,
1331
1385
  createTextVNode(" " + toDisplayString(_ctx.currentMonth), 1 /* TEXT */)
1332
1386
  ], 4 /* STYLE */),
1333
1387
  createElementVNode("div", {
@@ -1335,7 +1389,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1335
1389
  style: normalizeStyle({ color: _ctx.element.themeColor || '#ed5566' })
1336
1390
  }, "-" + toDisplayString(_ctx.currentYear) + "-", 5 /* TEXT, STYLE */)
1337
1391
  ]),
1338
- createElementVNode("div", _hoisted_15$4, [
1392
+ createElementVNode("div", _hoisted_15$5, [
1339
1393
  createElementVNode("div", {
1340
1394
  class: "can-week",
1341
1395
  style: normalizeStyle({ borderColor: _ctx.element.themeColor || '#ed5566' })
@@ -1347,7 +1401,7 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1347
1401
  }, toDisplayString(day), 5 /* TEXT, STYLE */))
1348
1402
  }), 128 /* KEYED_FRAGMENT */))
1349
1403
  ], 4 /* STYLE */),
1350
- createElementVNode("div", _hoisted_16$4, [
1404
+ createElementVNode("div", _hoisted_16$5, [
1351
1405
  createElementVNode("ul", null, [
1352
1406
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.days, (day, index) => {
1353
1407
  return (openBlock(), createElementBlock("li", {
@@ -1376,17 +1430,17 @@ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1376
1430
  ]))
1377
1431
  : createCommentVNode("v-if", true)
1378
1432
  ], 4 /* STYLE */)
1379
- ], 12 /* STYLE, PROPS */, _hoisted_1$i))
1433
+ ], 12 /* STYLE, PROPS */, _hoisted_1$j))
1380
1434
  }
1381
1435
 
1382
- script$n.render = render$j;
1383
- script$n.__file = "src/components/UniCalendar/UniCalendar.vue";
1436
+ script$o.render = render$k;
1437
+ script$o.__file = "src/components/UniCalendar/UniCalendar.vue";
1384
1438
 
1385
- script$n.install = (app) => {
1386
- app.component(script$n.name, script$n);
1439
+ script$o.install = (app) => {
1440
+ app.component(script$o.name, script$o);
1387
1441
  };
1388
1442
 
1389
- var script$m = defineComponent({
1443
+ var script$n = defineComponent({
1390
1444
  name: 'uni-countdown',
1391
1445
  props: {
1392
1446
  element: {
@@ -1677,30 +1731,30 @@ var script$m = defineComponent({
1677
1731
  }
1678
1732
  });
1679
1733
 
1680
- const _hoisted_1$h = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1681
- const _hoisted_2$e = ["data-direction"];
1682
- const _hoisted_3$d = { class: "c-wrap" };
1683
- const _hoisted_4$a = { class: "c-num c-left" };
1684
- const _hoisted_5$9 = { class: "flex-wrap" };
1685
- const _hoisted_6$7 = { class: "c-num c-right" };
1686
- const _hoisted_7$6 = { class: "flex-wrap" };
1687
- const _hoisted_8$3 = { class: "c-wrap" };
1688
- const _hoisted_9$3 = { class: "c-num c-left" };
1689
- const _hoisted_10$3 = { class: "flex-wrap" };
1690
- const _hoisted_11$3 = { class: "c-num c-right" };
1691
- const _hoisted_12$3 = { class: "flex-wrap" };
1692
- const _hoisted_13$3 = { class: "c-wrap" };
1693
- const _hoisted_14$3 = { class: "c-num c-left" };
1694
- const _hoisted_15$3 = { class: "flex-wrap" };
1695
- const _hoisted_16$3 = { class: "c-num c-right" };
1696
- const _hoisted_17$3 = { class: "flex-wrap" };
1697
- const _hoisted_18$3 = { class: "c-wrap" };
1698
- const _hoisted_19$3 = { class: "c-num c-left" };
1734
+ const _hoisted_1$i = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1735
+ const _hoisted_2$f = ["data-direction"];
1736
+ const _hoisted_3$e = { class: "c-wrap" };
1737
+ const _hoisted_4$b = { class: "c-num c-left" };
1738
+ const _hoisted_5$a = { class: "flex-wrap" };
1739
+ const _hoisted_6$8 = { class: "c-num c-right" };
1740
+ const _hoisted_7$7 = { class: "flex-wrap" };
1741
+ const _hoisted_8$4 = { class: "c-wrap" };
1742
+ const _hoisted_9$4 = { class: "c-num c-left" };
1743
+ const _hoisted_10$4 = { class: "flex-wrap" };
1744
+ const _hoisted_11$4 = { class: "c-num c-right" };
1745
+ const _hoisted_12$4 = { class: "flex-wrap" };
1746
+ const _hoisted_13$4 = { class: "c-wrap" };
1747
+ const _hoisted_14$4 = { class: "c-num c-left" };
1748
+ const _hoisted_15$4 = { class: "flex-wrap" };
1749
+ const _hoisted_16$4 = { class: "c-num c-right" };
1750
+ const _hoisted_17$4 = { class: "flex-wrap" };
1751
+ const _hoisted_18$4 = { class: "c-wrap" };
1752
+ const _hoisted_19$4 = { class: "c-num c-left" };
1699
1753
  const _hoisted_20$3 = { class: "flex-wrap" };
1700
1754
  const _hoisted_21$3 = { class: "c-num c-right" };
1701
1755
  const _hoisted_22$3 = { class: "flex-wrap" };
1702
1756
 
1703
- function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1757
+ function render$j(_ctx, _cache, $props, $setup, $data, $options) {
1704
1758
  return (openBlock(), createElementBlock("div", {
1705
1759
  class: "count-down eles",
1706
1760
  "data-id": _ctx.element.id,
@@ -1742,9 +1796,9 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1742
1796
  class: "c-com c-day",
1743
1797
  style: normalizeStyle(_ctx.comStyle)
1744
1798
  }, [
1745
- createElementVNode("div", _hoisted_3$d, [
1746
- createElementVNode("div", _hoisted_4$a, [
1747
- createElementVNode("div", _hoisted_5$9, [
1799
+ createElementVNode("div", _hoisted_3$e, [
1800
+ createElementVNode("div", _hoisted_4$b, [
1801
+ createElementVNode("div", _hoisted_5$a, [
1748
1802
  (_ctx.days >= 100)
1749
1803
  ? (openBlock(), createElementBlock("div", {
1750
1804
  key: 0,
@@ -1762,8 +1816,8 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1762
1816
  }, toDisplayString(_ctx.currentDaysLeft), 5 /* TEXT, STYLE */)
1763
1817
  ])
1764
1818
  ]),
1765
- createElementVNode("div", _hoisted_6$7, [
1766
- createElementVNode("div", _hoisted_7$6, [
1819
+ createElementVNode("div", _hoisted_6$8, [
1820
+ createElementVNode("div", _hoisted_7$7, [
1767
1821
  createElementVNode("div", {
1768
1822
  class: "next-num",
1769
1823
  style: normalizeStyle(_ctx.numStyle)
@@ -1785,9 +1839,9 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1785
1839
  class: "c-com c-hour",
1786
1840
  style: normalizeStyle(_ctx.comStyle)
1787
1841
  }, [
1788
- createElementVNode("div", _hoisted_8$3, [
1789
- createElementVNode("div", _hoisted_9$3, [
1790
- createElementVNode("div", _hoisted_10$3, [
1842
+ createElementVNode("div", _hoisted_8$4, [
1843
+ createElementVNode("div", _hoisted_9$4, [
1844
+ createElementVNode("div", _hoisted_10$4, [
1791
1845
  createElementVNode("div", {
1792
1846
  class: "next-num",
1793
1847
  style: normalizeStyle(_ctx.numStyle)
@@ -1798,8 +1852,8 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1798
1852
  }, toDisplayString(_ctx.currentHoursLeft), 5 /* TEXT, STYLE */)
1799
1853
  ])
1800
1854
  ]),
1801
- createElementVNode("div", _hoisted_11$3, [
1802
- createElementVNode("div", _hoisted_12$3, [
1855
+ createElementVNode("div", _hoisted_11$4, [
1856
+ createElementVNode("div", _hoisted_12$4, [
1803
1857
  createElementVNode("div", {
1804
1858
  class: "next-num",
1805
1859
  style: normalizeStyle(_ctx.numStyle)
@@ -1821,9 +1875,9 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1821
1875
  class: "c-com c-minute",
1822
1876
  style: normalizeStyle(_ctx.comStyle)
1823
1877
  }, [
1824
- createElementVNode("div", _hoisted_13$3, [
1825
- createElementVNode("div", _hoisted_14$3, [
1826
- createElementVNode("div", _hoisted_15$3, [
1878
+ createElementVNode("div", _hoisted_13$4, [
1879
+ createElementVNode("div", _hoisted_14$4, [
1880
+ createElementVNode("div", _hoisted_15$4, [
1827
1881
  createElementVNode("div", {
1828
1882
  class: "next-num",
1829
1883
  style: normalizeStyle(_ctx.numStyle)
@@ -1834,8 +1888,8 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1834
1888
  }, toDisplayString(_ctx.currentMinutesLeft), 5 /* TEXT, STYLE */)
1835
1889
  ])
1836
1890
  ]),
1837
- createElementVNode("div", _hoisted_16$3, [
1838
- createElementVNode("div", _hoisted_17$3, [
1891
+ createElementVNode("div", _hoisted_16$4, [
1892
+ createElementVNode("div", _hoisted_17$4, [
1839
1893
  createElementVNode("div", {
1840
1894
  class: "next-num",
1841
1895
  style: normalizeStyle(_ctx.numStyle)
@@ -1857,8 +1911,8 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1857
1911
  class: "c-com c-second",
1858
1912
  style: normalizeStyle(_ctx.comStyle)
1859
1913
  }, [
1860
- createElementVNode("div", _hoisted_18$3, [
1861
- createElementVNode("div", _hoisted_19$3, [
1914
+ createElementVNode("div", _hoisted_18$4, [
1915
+ createElementVNode("div", _hoisted_19$4, [
1862
1916
  createElementVNode("div", _hoisted_20$3, [
1863
1917
  createElementVNode("div", {
1864
1918
  class: "next-num",
@@ -1888,21 +1942,21 @@ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1888
1942
  }, toDisplayString(_ctx.second), 5 /* TEXT, STYLE */)
1889
1943
  ])
1890
1944
  ], 4 /* STYLE */)
1891
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_2$e)
1945
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_2$f)
1892
1946
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
1893
1947
  ], 4 /* STYLE */)
1894
- ], 12 /* STYLE, PROPS */, _hoisted_1$h))
1948
+ ], 12 /* STYLE, PROPS */, _hoisted_1$i))
1895
1949
  }
1896
1950
 
1897
- script$m.render = render$i;
1898
- script$m.__scopeId = "data-v-bb868822";
1899
- script$m.__file = "src/components/UniCountdown/UniCountdown.vue";
1951
+ script$n.render = render$j;
1952
+ script$n.__scopeId = "data-v-bb868822";
1953
+ script$n.__file = "src/components/UniCountdown/UniCountdown.vue";
1900
1954
 
1901
- script$m.install = (app) => {
1902
- app.component(script$m.name, script$m);
1955
+ script$n.install = (app) => {
1956
+ app.component(script$n.name, script$n);
1903
1957
  };
1904
1958
 
1905
- var script$l = defineComponent({
1959
+ var script$m = defineComponent({
1906
1960
  name: 'uni-map',
1907
1961
  props: {
1908
1962
  element: {
@@ -1972,11 +2026,11 @@ var script$l = defineComponent({
1972
2026
  }
1973
2027
  });
1974
2028
 
1975
- const _hoisted_1$g = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
1976
- const _hoisted_2$d = ["innerHTML"];
1977
- const _hoisted_3$c = /*#__PURE__*/createElementVNode("div", { class: "mask-map" }, null, -1 /* HOISTED */);
2029
+ const _hoisted_1$h = ["data-id", "data-pid", "data-type", "data-show", "pid", "type", "layername", "sign", "signsort"];
2030
+ const _hoisted_2$e = ["innerHTML"];
2031
+ const _hoisted_3$d = /*#__PURE__*/createElementVNode("div", { class: "mask-map" }, null, -1 /* HOISTED */);
1978
2032
 
1979
- function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2033
+ function render$i(_ctx, _cache, $props, $setup, $data, $options) {
1980
2034
  return (openBlock(), createElementBlock("div", {
1981
2035
  class: "element-ditu eles",
1982
2036
  "data-id": _ctx.element.id,
@@ -2008,10 +2062,10 @@ function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2008
2062
  createElementVNode("div", {
2009
2063
  innerHTML: _ctx.iframeUrl,
2010
2064
  class: "map-iframe"
2011
- }, null, 8 /* PROPS */, _hoisted_2$d),
2065
+ }, null, 8 /* PROPS */, _hoisted_2$e),
2012
2066
  createCommentVNode(" 隐藏的辅助元素 "),
2013
2067
  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> "),
2014
- _hoisted_3$c
2068
+ _hoisted_3$d
2015
2069
  ], 4 /* STYLE */))
2016
2070
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
2017
2071
  createCommentVNode(" 导航按钮 "),
@@ -2029,17 +2083,17 @@ function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2029
2083
  ], 4 /* STYLE */)
2030
2084
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
2031
2085
  ], 4 /* STYLE */)
2032
- ], 12 /* STYLE, PROPS */, _hoisted_1$g))
2086
+ ], 12 /* STYLE, PROPS */, _hoisted_1$h))
2033
2087
  }
2034
2088
 
2035
- script$l.render = render$h;
2036
- script$l.__file = "src/components/UniMap/UniMap.vue";
2089
+ script$m.render = render$i;
2090
+ script$m.__file = "src/components/UniMap/UniMap.vue";
2037
2091
 
2038
- script$l.install = (app) => {
2039
- app.component(script$l.name, script$l);
2092
+ script$m.install = (app) => {
2093
+ app.component(script$m.name, script$m);
2040
2094
  };
2041
2095
 
2042
- var script$k = defineComponent({
2096
+ var script$l = defineComponent({
2043
2097
  name: 'uni-call',
2044
2098
  props: {
2045
2099
  element: {
@@ -2122,10 +2176,10 @@ var script$k = defineComponent({
2122
2176
  }
2123
2177
  });
2124
2178
 
2125
- const _hoisted_1$f = ["data-id"];
2126
- const _hoisted_2$c = { class: "call-content" };
2179
+ const _hoisted_1$g = ["data-id"];
2180
+ const _hoisted_2$d = { class: "call-content" };
2127
2181
 
2128
- function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2182
+ function render$h(_ctx, _cache, $props, $setup, $data, $options) {
2129
2183
  return (openBlock(), createElementBlock("div", {
2130
2184
  class: "call eles",
2131
2185
  "data-id": _ctx.element.id,
@@ -2139,7 +2193,7 @@ function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2139
2193
  boxShadow: _ctx.shadowStyle
2140
2194
  })
2141
2195
  }, [
2142
- createElementVNode("div", _hoisted_2$c, [
2196
+ createElementVNode("div", _hoisted_2$d, [
2143
2197
  createElementVNode("i", {
2144
2198
  class: "iconfont hb-tel",
2145
2199
  style: normalizeStyle(_ctx.bntStyle)
@@ -2150,14 +2204,14 @@ function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2150
2204
  }, toDisplayString(_ctx.btnText), 5 /* TEXT, STYLE */)
2151
2205
  ])
2152
2206
  ], 4 /* STYLE */)
2153
- ], 12 /* STYLE, PROPS */, _hoisted_1$f))
2207
+ ], 12 /* STYLE, PROPS */, _hoisted_1$g))
2154
2208
  }
2155
2209
 
2156
- script$k.render = render$g;
2157
- script$k.__file = "src/components/UniCall/UniCall.vue";
2210
+ script$l.render = render$h;
2211
+ script$l.__file = "src/components/UniCall/UniCall.vue";
2158
2212
 
2159
- script$k.install = (app) => {
2160
- app.component(script$k.name, script$k);
2213
+ script$l.install = (app) => {
2214
+ app.component(script$l.name, script$l);
2161
2215
  };
2162
2216
 
2163
2217
  // 花瓣图片资源 (base64编码)
@@ -2197,7 +2251,7 @@ const petal_images = [
2197
2251
  'https://h5cdn.unika.cc/static/img/uniComponents/huaban.png'
2198
2252
  // 可以添加更多花瓣图片
2199
2253
  ];
2200
- var script$j = defineComponent({
2254
+ var script$k = defineComponent({
2201
2255
  name: 'uni-effect',
2202
2256
  props: {
2203
2257
  element: {
@@ -2295,14 +2349,14 @@ var script$j = defineComponent({
2295
2349
  }
2296
2350
  });
2297
2351
 
2298
- const _hoisted_1$e = { class: "effect-wrap" };
2352
+ const _hoisted_1$f = { class: "effect-wrap" };
2299
2353
 
2300
- function render$f(_ctx, _cache, $props, $setup, $data, $options) {
2354
+ function render$g(_ctx, _cache, $props, $setup, $data, $options) {
2301
2355
  return withDirectives((openBlock(), createElementBlock("div", {
2302
2356
  class: "ele-effect eles",
2303
2357
  style: normalizeStyle(_ctx.containerStyle)
2304
2358
  }, [
2305
- createElementVNode("div", _hoisted_1$e, [
2359
+ createElementVNode("div", _hoisted_1$f, [
2306
2360
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.particles, (particle, index) => {
2307
2361
  return (openBlock(), createElementBlock("div", {
2308
2362
  key: index,
@@ -2316,11 +2370,11 @@ function render$f(_ctx, _cache, $props, $setup, $data, $options) {
2316
2370
  ])
2317
2371
  }
2318
2372
 
2319
- script$j.render = render$f;
2320
- script$j.__file = "src/components/UniEffect/UniEffect.vue";
2373
+ script$k.render = render$g;
2374
+ script$k.__file = "src/components/UniEffect/UniEffect.vue";
2321
2375
 
2322
- script$j.install = (app) => {
2323
- app.component(script$j.name, script$j);
2376
+ script$k.install = (app) => {
2377
+ app.component(script$k.name, script$k);
2324
2378
  };
2325
2379
 
2326
2380
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -22878,13 +22932,13 @@ ListCache.prototype["delete"] = listCacheDelete;
22878
22932
  ListCache.prototype.get = listCacheGet;
22879
22933
  ListCache.prototype.has = listCacheHas;
22880
22934
  ListCache.prototype.set = listCacheSet;
22881
- var Map = getNative(root$1, "Map");
22882
- var Map$1 = Map;
22935
+ var Map$1 = getNative(root$1, "Map");
22936
+ var Map$1$1 = Map$1;
22883
22937
  function mapCacheClear() {
22884
22938
  this.size = 0;
22885
22939
  this.__data__ = {
22886
22940
  "hash": new Hash(),
22887
- "map": new (Map$1 || ListCache)(),
22941
+ "map": new (Map$1$1 || ListCache)(),
22888
22942
  "string": new Hash()
22889
22943
  };
22890
22944
  }
@@ -22955,7 +23009,7 @@ function stackSet(key, value) {
22955
23009
  var data = this.__data__;
22956
23010
  if (data instanceof ListCache) {
22957
23011
  var pairs = data.__data__;
22958
- if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
23012
+ if (!Map$1$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
22959
23013
  pairs.push([key, value]);
22960
23014
  this.size = ++data.size;
22961
23015
  return this;
@@ -23053,9 +23107,9 @@ var Set$1 = getNative(root$1, "Set");
23053
23107
  var Set$1$1 = Set$1;
23054
23108
  var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]";
23055
23109
  var dataViewTag$3 = "[object DataView]";
23056
- var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1$1), weakMapCtorString = toSource(WeakMap$1);
23110
+ var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1$1), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1$1), weakMapCtorString = toSource(WeakMap$1);
23057
23111
  var getTag = baseGetTag;
23058
- 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) {
23112
+ 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) {
23059
23113
  getTag = function(value) {
23060
23114
  var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
23061
23115
  if (ctorString) {
@@ -23802,7 +23856,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
23802
23856
  }
23803
23857
  var Vue3Lottie = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
23804
23858
 
23805
- var script$i = defineComponent({
23859
+ var script$j = defineComponent({
23806
23860
  name: 'uni-lottie',
23807
23861
  components: {
23808
23862
  Vue3Lottie
@@ -23863,9 +23917,9 @@ var script$i = defineComponent({
23863
23917
  }
23864
23918
  });
23865
23919
 
23866
- const _hoisted_1$d = ["data-id", "data-pid", "data-type", "data-show"];
23920
+ const _hoisted_1$e = ["data-id", "data-pid", "data-type", "data-show"];
23867
23921
 
23868
- function render$e(_ctx, _cache, $props, $setup, $data, $options) {
23922
+ function render$f(_ctx, _cache, $props, $setup, $data, $options) {
23869
23923
  const _component_Vue3Lottie = resolveComponent("Vue3Lottie");
23870
23924
 
23871
23925
  return (openBlock(), createElementBlock("div", {
@@ -23888,17 +23942,17 @@ function render$e(_ctx, _cache, $props, $setup, $data, $options) {
23888
23942
  ref: "lottieAnimation"
23889
23943
  }, null, 8 /* PROPS */, ["style", "animationLink", "loop", "delay"])
23890
23944
  ], 4 /* STYLE */)
23891
- ], 12 /* STYLE, PROPS */, _hoisted_1$d))
23945
+ ], 12 /* STYLE, PROPS */, _hoisted_1$e))
23892
23946
  }
23893
23947
 
23894
- script$i.render = render$e;
23895
- script$i.__file = "src/components/UniLottie/UniLottie.vue";
23948
+ script$j.render = render$f;
23949
+ script$j.__file = "src/components/UniLottie/UniLottie.vue";
23896
23950
 
23897
- script$i.install = (app) => {
23898
- app.component(script$i.name, script$i);
23951
+ script$j.install = (app) => {
23952
+ app.component(script$j.name, script$j);
23899
23953
  };
23900
23954
 
23901
- var script$h = defineComponent({
23955
+ var script$i = defineComponent({
23902
23956
  name: 'uni-button',
23903
23957
  props: {
23904
23958
  element: {
@@ -23965,9 +24019,9 @@ var script$h = defineComponent({
23965
24019
  }
23966
24020
  });
23967
24021
 
23968
- const _hoisted_1$c = { class: "button-content" };
24022
+ const _hoisted_1$d = { class: "button-content" };
23969
24023
 
23970
- function render$d(_ctx, _cache, $props, $setup, $data, $options) {
24024
+ function render$e(_ctx, _cache, $props, $setup, $data, $options) {
23971
24025
  return (openBlock(), createElementBlock("div", {
23972
24026
  class: "button eles",
23973
24027
  style: normalizeStyle(_ctx.containerStyle),
@@ -23980,7 +24034,7 @@ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
23980
24034
  boxShadow: _ctx.shadowStyle
23981
24035
  })
23982
24036
  }, [
23983
- createElementVNode("div", _hoisted_1$c, [
24037
+ createElementVNode("div", _hoisted_1$d, [
23984
24038
  createElementVNode("span", {
23985
24039
  class: "btn-text",
23986
24040
  style: normalizeStyle(_ctx.bntStyle)
@@ -23990,18 +24044,25 @@ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
23990
24044
  ], 4 /* STYLE */))
23991
24045
  }
23992
24046
 
23993
- script$h.render = render$d;
23994
- script$h.__file = "src/components/UniButton/UniButton.vue";
24047
+ script$i.render = render$e;
24048
+ script$i.__file = "src/components/UniButton/UniButton.vue";
23995
24049
 
23996
- script$h.install = (app) => {
23997
- app.component(script$h.name, script$h);
24050
+ script$i.install = (app) => {
24051
+ app.component(script$i.name, script$i);
23998
24052
  };
23999
24053
 
24054
+ const PLACEHOLDER_GIFT_QR_CODE = 'https://h5cdn.unika.cc/static/img/uniComponents/giftqrcode.png';
24055
+ function isRealGiftQRCode(url) {
24056
+ const value = String(url || '').trim();
24057
+ return !!value && value !== PLACEHOLDER_GIFT_QR_CODE;
24058
+ }
24059
+
24000
24060
  async function requestJson(url, init) {
24001
- const timeout = init?.timeout ?? 8000;
24061
+ var _a;
24062
+ const timeout = (_a = init === null || init === void 0 ? void 0 : init.timeout) !== null && _a !== void 0 ? _a : 8000;
24002
24063
  const controller = new AbortController();
24003
24064
  const timer = window.setTimeout(() => controller.abort(), timeout);
24004
- const { timeout: _timeout, ...fetchInit } = init ?? {};
24065
+ const { timeout: _timeout, ...fetchInit } = init !== null && init !== void 0 ? init : {};
24005
24066
  try {
24006
24067
  const res = await fetch(url, { ...fetchInit, signal: controller.signal });
24007
24068
  const data = (await res.json());
@@ -24011,7 +24072,7 @@ async function requestJson(url, init) {
24011
24072
  window.clearTimeout(timer);
24012
24073
  }
24013
24074
  }
24014
- var script$g = defineComponent({
24075
+ var script$h = defineComponent({
24015
24076
  name: 'uni-barrage',
24016
24077
  props: {
24017
24078
  env: {
@@ -24057,6 +24118,7 @@ var script$g = defineComponent({
24057
24118
  'มีลูกเต็มบ้าน มีหลานเต็มเมือง',
24058
24119
  'รักแท้จงอยู่คู่คุณทั้งสองตลอดไป',
24059
24120
  ];
24121
+ const hasRealGiftQR = 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); });
24060
24122
  const bulletConfig = computed(() => {
24061
24123
  return {
24062
24124
  bgColor: props.global.toolbar.bgColor || '#ffffff',
@@ -24277,10 +24339,13 @@ var script$g = defineComponent({
24277
24339
  imageLoaded.value = true;
24278
24340
  };
24279
24341
  const showGiftPopup = () => {
24342
+ if (!hasRealGiftQR.value)
24343
+ return;
24280
24344
  showGift.value = true;
24281
24345
  imageLoaded.value = false; // 重置加载状态
24282
24346
  };
24283
24347
  return {
24348
+ hasRealGiftQR,
24284
24349
  name,
24285
24350
  content,
24286
24351
  showPopup,
@@ -24319,31 +24384,31 @@ var script$g = defineComponent({
24319
24384
  }
24320
24385
  });
24321
24386
 
24322
- const _hoisted_1$b = {
24387
+ const _hoisted_1$c = {
24323
24388
  id: "toolbarNew",
24324
24389
  ref: "toolbar"
24325
24390
  };
24326
- const _hoisted_2$b = { class: "toolbar" };
24327
- const _hoisted_3$b = { class: "bar-left" };
24328
- const _hoisted_4$9 = /*#__PURE__*/createElementVNode("img", { src: "https://h5cdn.unika.cc/static/img/uniComponents/hide.png" }, null, -1 /* HOISTED */);
24329
- const _hoisted_5$8 = [
24330
- _hoisted_4$9
24391
+ const _hoisted_2$c = { class: "toolbar" };
24392
+ const _hoisted_3$c = { class: "bar-left" };
24393
+ const _hoisted_4$a = /*#__PURE__*/createElementVNode("img", { src: "https://h5cdn.unika.cc/static/img/uniComponents/hide.png" }, null, -1 /* HOISTED */);
24394
+ const _hoisted_5$9 = [
24395
+ _hoisted_4$a
24331
24396
  ];
24332
- const _hoisted_6$6 = {
24397
+ const _hoisted_6$7 = {
24333
24398
  key: 0,
24334
24399
  class: "bar-right"
24335
24400
  };
24336
- const _hoisted_7$5 = {
24401
+ const _hoisted_7$6 = {
24337
24402
  key: 0,
24338
24403
  class: "bar-praise"
24339
24404
  };
24340
- const _hoisted_8$2 = /*#__PURE__*/createElementVNode("strong", { class: "ani-num" }, "+1", -1 /* HOISTED */);
24341
- const _hoisted_9$2 = /*#__PURE__*/createElementVNode("div", { class: "stop-longtap" }, null, -1 /* HOISTED */);
24342
- const _hoisted_10$2 = /*#__PURE__*/createElementVNode("img", {
24405
+ const _hoisted_8$3 = /*#__PURE__*/createElementVNode("strong", { class: "ani-num" }, "+1", -1 /* HOISTED */);
24406
+ const _hoisted_9$3 = /*#__PURE__*/createElementVNode("div", { class: "stop-longtap" }, null, -1 /* HOISTED */);
24407
+ const _hoisted_10$3 = /*#__PURE__*/createElementVNode("img", {
24343
24408
  src: "https://h5cdn.unika.cc/static/img/uniComponents/parise.png",
24344
24409
  class: "animated"
24345
24410
  }, null, -1 /* HOISTED */);
24346
- const _hoisted_11$2 = /*#__PURE__*/createElementVNode("div", { class: "zan-wrap" }, [
24411
+ const _hoisted_11$3 = /*#__PURE__*/createElementVNode("div", { class: "zan-wrap" }, [
24347
24412
  /*#__PURE__*/createElementVNode("span"),
24348
24413
  /*#__PURE__*/createElementVNode("span"),
24349
24414
  /*#__PURE__*/createElementVNode("span"),
@@ -24353,23 +24418,23 @@ const _hoisted_11$2 = /*#__PURE__*/createElementVNode("div", { class: "zan-wrap"
24353
24418
  /*#__PURE__*/createElementVNode("span"),
24354
24419
  /*#__PURE__*/createElementVNode("span")
24355
24420
  ], -1 /* HOISTED */);
24356
- const _hoisted_12$2 = [
24357
- _hoisted_8$2,
24358
- _hoisted_9$2,
24359
- _hoisted_10$2,
24360
- _hoisted_11$2
24421
+ const _hoisted_12$3 = [
24422
+ _hoisted_8$3,
24423
+ _hoisted_9$3,
24424
+ _hoisted_10$3,
24425
+ _hoisted_11$3
24361
24426
  ];
24362
- const _hoisted_13$2 = { class: "bar-messwin" };
24363
- const _hoisted_14$2 = /*#__PURE__*/createElementVNode("img", {
24427
+ const _hoisted_13$3 = { class: "bar-messwin" };
24428
+ const _hoisted_14$3 = /*#__PURE__*/createElementVNode("img", {
24364
24429
  src: "https://h5cdn.unika.cc/static/img/uniComponents/mess-logo.png",
24365
24430
  alt: "",
24366
24431
  class: "mess-logo"
24367
24432
  }, null, -1 /* HOISTED */);
24368
- const _hoisted_15$2 = /*#__PURE__*/createElementVNode("div", { class: "mess-title" }, "ข้อความอวยพร", -1 /* HOISTED */);
24369
- const _hoisted_16$2 = { class: "mess-input" };
24370
- const _hoisted_17$2 = { class: "mess-textarea" };
24371
- const _hoisted_18$2 = { class: "wish-dropdown" };
24372
- const _hoisted_19$2 = ["onClick"];
24433
+ const _hoisted_15$3 = /*#__PURE__*/createElementVNode("div", { class: "mess-title" }, "ข้อความอวยพร", -1 /* HOISTED */);
24434
+ const _hoisted_16$3 = { class: "mess-input" };
24435
+ const _hoisted_17$3 = { class: "mess-textarea" };
24436
+ const _hoisted_18$3 = { class: "wish-dropdown" };
24437
+ const _hoisted_19$3 = ["onClick"];
24373
24438
  const _hoisted_20$2 = /*#__PURE__*/createElementVNode("div", { class: "wish-dot" }, "•", -1 /* HOISTED */);
24374
24439
  const _hoisted_21$2 = { class: "wish-text" };
24375
24440
  const _hoisted_22$2 = {
@@ -24406,7 +24471,7 @@ const _hoisted_34 = { class: "mint-msgbox-content" };
24406
24471
  const _hoisted_35 = { class: "mint-msgbox-message" };
24407
24472
  const _hoisted_36 = { class: "mint-msgbox-btns" };
24408
24473
 
24409
- function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24474
+ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
24410
24475
  return (openBlock(), createElementBlock("div", null, [
24411
24476
  createCommentVNode(" 弹幕显示区域 "),
24412
24477
  withDirectives(createElementVNode("div", {
@@ -24428,9 +24493,9 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24428
24493
  [vShow, _ctx.showBullets]
24429
24494
  ]),
24430
24495
  createCommentVNode(" 底部工具栏 "),
24431
- createElementVNode("div", _hoisted_1$b, [
24432
- createElementVNode("div", _hoisted_2$b, [
24433
- withDirectives(createElementVNode("div", _hoisted_3$b, [
24496
+ createElementVNode("div", _hoisted_1$c, [
24497
+ createElementVNode("div", _hoisted_2$c, [
24498
+ withDirectives(createElementVNode("div", _hoisted_3$c, [
24434
24499
  createElementVNode("input", {
24435
24500
  type: "text",
24436
24501
  placeholder: "ข้อความอวยพร..",
@@ -24449,13 +24514,13 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24449
24514
  withDirectives(createElementVNode("div", {
24450
24515
  onClick: _cache[2] || (_cache[2] = withModifiers((...args) => (_ctx.toggleBullets && _ctx.toggleBullets(...args)), ["stop"])),
24451
24516
  class: "toolbar-close"
24452
- }, [..._hoisted_5$8], 512 /* NEED_PATCH */), [
24517
+ }, [..._hoisted_5$9], 512 /* NEED_PATCH */), [
24453
24518
  [vShow, !_ctx.showBullets]
24454
24519
  ]),
24455
24520
  createCommentVNode(" 新增的右侧按钮区域 "),
24456
24521
  ((_ctx.global.toolbar.gift || _ctx.global.toolbar.praise) && _ctx.showBullets)
24457
- ? (openBlock(), createElementBlock("div", _hoisted_6$6, [
24458
- (_ctx.global.toolbar.gift && _ctx.global.toolbar.giftQRCode)
24522
+ ? (openBlock(), createElementBlock("div", _hoisted_6$7, [
24523
+ (_ctx.global.toolbar.gift && _ctx.hasRealGiftQR)
24459
24524
  ? (openBlock(), createElementBlock("img", {
24460
24525
  key: 0,
24461
24526
  src: "https://h5cdn.unika.cc/static/img/uniComponents/gift.png",
@@ -24470,11 +24535,11 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24470
24535
  onClick: _cache[4] || (_cache[4] = (...args) => (_ctx.handlePraise && _ctx.handlePraise(...args)))
24471
24536
  }, [
24472
24537
  (_ctx.praiseCount > 0)
24473
- ? (openBlock(), createElementBlock("div", _hoisted_7$5, toDisplayString(_ctx.praiseCount), 1 /* TEXT */))
24538
+ ? (openBlock(), createElementBlock("div", _hoisted_7$6, toDisplayString(_ctx.praiseCount), 1 /* TEXT */))
24474
24539
  : createCommentVNode("v-if", true),
24475
24540
  createElementVNode("div", {
24476
24541
  class: normalizeClass(["bar-zan", { active: _ctx.isPraised }])
24477
- }, [..._hoisted_12$2], 2 /* CLASS */)
24542
+ }, [..._hoisted_12$3], 2 /* CLASS */)
24478
24543
  ]))
24479
24544
  : createCommentVNode("v-if", true)
24480
24545
  ]))
@@ -24489,11 +24554,11 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24489
24554
  style: {"z-index":"2003"},
24490
24555
  onClick: _cache[12] || (_cache[12] = withModifiers((...args) => (_ctx.closePopup && _ctx.closePopup(...args)), ["self"]))
24491
24556
  }, [
24492
- createElementVNode("div", _hoisted_13$2, [
24493
- _hoisted_14$2,
24494
- _hoisted_15$2,
24557
+ createElementVNode("div", _hoisted_13$3, [
24558
+ _hoisted_14$3,
24559
+ _hoisted_15$3,
24495
24560
  createCommentVNode(" 祝福留言. "),
24496
- createElementVNode("div", _hoisted_16$2, [
24561
+ createElementVNode("div", _hoisted_16$3, [
24497
24562
  withDirectives(createElementVNode("input", {
24498
24563
  ref: "nameInput",
24499
24564
  "onUpdate:modelValue": _cache[5] || (_cache[5] = $event => ((_ctx.name) = $event)),
@@ -24506,7 +24571,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24506
24571
  ])
24507
24572
  ]),
24508
24573
  createCommentVNode(" 请输入您的姓名 "),
24509
- createElementVNode("div", _hoisted_17$2, [
24574
+ createElementVNode("div", _hoisted_17$3, [
24510
24575
  withDirectives(createElementVNode("textarea", {
24511
24576
  "onUpdate:modelValue": _cache[7] || (_cache[7] = $event => ((_ctx.content) = $event)),
24512
24577
  placeholder: "ข้อความของคุณ..",
@@ -24523,7 +24588,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24523
24588
  onClick: _cache[9] || (_cache[9] = (...args) => (_ctx.showBlessingOptions && _ctx.showBlessingOptions(...args)))
24524
24589
  }),
24525
24590
  createCommentVNode(" 请选择祝福语 "),
24526
- withDirectives(createElementVNode("div", _hoisted_18$2, [
24591
+ withDirectives(createElementVNode("div", _hoisted_18$3, [
24527
24592
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.blessingOptions, (blessing, index) => {
24528
24593
  return (openBlock(), createElementBlock("div", {
24529
24594
  class: "wish-item",
@@ -24532,7 +24597,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24532
24597
  }, [
24533
24598
  _hoisted_20$2,
24534
24599
  createElementVNode("div", _hoisted_21$2, toDisplayString(blessing), 1 /* TEXT */)
24535
- ], 8 /* PROPS */, _hoisted_19$2))
24600
+ ], 8 /* PROPS */, _hoisted_19$3))
24536
24601
  }), 128 /* KEYED_FRAGMENT */))
24537
24602
  ], 512 /* NEED_PATCH */), [
24538
24603
  [vShow, _ctx.showBlessingList]
@@ -24616,11 +24681,11 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
24616
24681
  ]))
24617
24682
  }
24618
24683
 
24619
- script$g.render = render$c;
24620
- script$g.__file = "src/components/UniBarrage/UniBarrage.vue";
24684
+ script$h.render = render$d;
24685
+ script$h.__file = "src/components/UniBarrage/UniBarrage.vue";
24621
24686
 
24622
- script$g.install = (app) => {
24623
- app.component(script$g.name, script$g);
24687
+ script$h.install = (app) => {
24688
+ app.component(script$h.name, script$h);
24624
24689
  };
24625
24690
 
24626
24691
  function useTouchHandler(pages, currentPageId, direction, isLoopEnabled, onUserInteraction) {
@@ -24969,7 +25034,7 @@ function validateInput(value, type) {
24969
25034
  return true;
24970
25035
  }
24971
25036
 
24972
- var script$f = defineComponent({
25037
+ var script$g = defineComponent({
24973
25038
  name: 'uni-form-input',
24974
25039
  props: {
24975
25040
  global: {
@@ -25082,14 +25147,14 @@ var script$f = defineComponent({
25082
25147
  }
25083
25148
  });
25084
25149
 
25085
- const _hoisted_1$a = ["data-id"];
25086
- const _hoisted_2$a = {
25150
+ const _hoisted_1$b = ["data-id"];
25151
+ const _hoisted_2$b = {
25087
25152
  key: 0,
25088
25153
  class: "required-marker"
25089
25154
  };
25090
- const _hoisted_3$a = ["type", "placeholder", "readonly", "tabindex"];
25155
+ const _hoisted_3$b = ["type", "placeholder", "readonly", "tabindex"];
25091
25156
 
25092
- function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25157
+ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
25093
25158
  return (openBlock(), createElementBlock("div", {
25094
25159
  class: normalizeClass(["ele-form form-input eles", { 'form-input--editing': _ctx.isEditing }]),
25095
25160
  "data-id": _ctx.element.id,
@@ -25103,7 +25168,7 @@ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25103
25168
  })
25104
25169
  }, [
25105
25170
  (_ctx.required)
25106
- ? (openBlock(), createElementBlock("span", _hoisted_2$a, "*"))
25171
+ ? (openBlock(), createElementBlock("span", _hoisted_2$b, "*"))
25107
25172
  : createCommentVNode("v-if", true),
25108
25173
  withDirectives(createElementVNode("input", {
25109
25174
  type: _ctx.inputType,
@@ -25116,17 +25181,17 @@ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25116
25181
  onMousedown: _cache[1] || (_cache[1] = (...args) => (_ctx.onInputPointerDown && _ctx.onInputPointerDown(...args))),
25117
25182
  onTouchstart: _cache[2] || (_cache[2] = (...args) => (_ctx.onInputPointerDown && _ctx.onInputPointerDown(...args))),
25118
25183
  onBlur: _cache[3] || (_cache[3] = (...args) => (_ctx.handleBlur && _ctx.handleBlur(...args)))
25119
- }, null, 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_3$a), [
25184
+ }, null, 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_3$b), [
25120
25185
  [vModelDynamic, _ctx.inputValue]
25121
25186
  ])
25122
25187
  ], 4 /* STYLE */)
25123
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$a))
25188
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$b))
25124
25189
  }
25125
25190
 
25126
- script$f.render = render$b;
25127
- script$f.__file = "src/components/UniFormInput/UniFormInput.vue";
25191
+ script$g.render = render$c;
25192
+ script$g.__file = "src/components/UniFormInput/UniFormInput.vue";
25128
25193
 
25129
- var script$e = defineComponent({
25194
+ var script$f = defineComponent({
25130
25195
  name: 'uni-form-submit',
25131
25196
  props: {
25132
25197
  global: {
@@ -25227,15 +25292,15 @@ var script$e = defineComponent({
25227
25292
  }
25228
25293
  });
25229
25294
 
25230
- const _hoisted_1$9 = ["data-id"];
25231
- const _hoisted_2$9 = ["disabled"];
25232
- const _hoisted_3$9 = {
25295
+ const _hoisted_1$a = ["data-id"];
25296
+ const _hoisted_2$a = ["disabled"];
25297
+ const _hoisted_3$a = {
25233
25298
  key: 0,
25234
25299
  class: "f-ovh"
25235
25300
  };
25236
- const _hoisted_4$8 = { class: "f-ovh" };
25301
+ const _hoisted_4$9 = { class: "f-ovh" };
25237
25302
 
25238
- function render$a(_ctx, _cache, $props, $setup, $data, $options) {
25303
+ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
25239
25304
  return (openBlock(), createElementBlock("div", {
25240
25305
  class: "ele-form eles",
25241
25306
  "data-id": _ctx.element.id,
@@ -25248,19 +25313,19 @@ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
25248
25313
  disabled: _ctx.isSubmitting
25249
25314
  }, [
25250
25315
  (_ctx.isSubmitting)
25251
- ? (openBlock(), createElementBlock("span", _hoisted_3$9, "กำลังส่ง..."))
25316
+ ? (openBlock(), createElementBlock("span", _hoisted_3$a, "กำลังส่ง..."))
25252
25317
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
25253
25318
  createCommentVNode(" 提交中 "),
25254
- createElementVNode("span", _hoisted_4$8, toDisplayString(_ctx.btName), 1 /* TEXT */)
25319
+ createElementVNode("span", _hoisted_4$9, toDisplayString(_ctx.btName), 1 /* TEXT */)
25255
25320
  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
25256
- ], 12 /* STYLE, PROPS */, _hoisted_2$9)
25257
- ], 12 /* STYLE, PROPS */, _hoisted_1$9))
25321
+ ], 12 /* STYLE, PROPS */, _hoisted_2$a)
25322
+ ], 12 /* STYLE, PROPS */, _hoisted_1$a))
25258
25323
  }
25259
25324
 
25260
- script$e.render = render$a;
25261
- script$e.__file = "src/components/UniFormSubmit/UniFormSubmit.vue";
25325
+ script$f.render = render$b;
25326
+ script$f.__file = "src/components/UniFormSubmit/UniFormSubmit.vue";
25262
25327
 
25263
- var script$d = defineComponent({
25328
+ var script$e = defineComponent({
25264
25329
  name: 'uni-form-select',
25265
25330
  props: {
25266
25331
  global: {
@@ -25366,21 +25431,21 @@ var script$d = defineComponent({
25366
25431
  }
25367
25432
  });
25368
25433
 
25369
- const _hoisted_1$8 = ["data-id"];
25370
- const _hoisted_2$8 = {
25434
+ const _hoisted_1$9 = ["data-id"];
25435
+ const _hoisted_2$9 = {
25371
25436
  key: 0,
25372
25437
  class: "require"
25373
25438
  };
25374
- const _hoisted_3$8 = { class: "fs-cont" };
25375
- const _hoisted_4$7 = {
25439
+ const _hoisted_3$9 = { class: "fs-cont" };
25440
+ const _hoisted_4$8 = {
25376
25441
  value: "",
25377
25442
  disabled: "",
25378
25443
  hidden: ""
25379
25444
  };
25380
- const _hoisted_5$7 = ["value"];
25381
- const _hoisted_6$5 = ["onClick"];
25445
+ const _hoisted_5$8 = ["value"];
25446
+ const _hoisted_6$6 = ["onClick"];
25382
25447
 
25383
- function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25448
+ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
25384
25449
  return (openBlock(), createElementBlock("div", {
25385
25450
  class: normalizeClass(["ele-form f-select eles", { 'has-error': _ctx.hasError }]),
25386
25451
  "data-id": _ctx.element.id,
@@ -25395,9 +25460,9 @@ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25395
25460
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.toggleDropdown && _ctx.toggleDropdown(...args)))
25396
25461
  }, [
25397
25462
  (_ctx.required)
25398
- ? (openBlock(), createElementBlock("span", _hoisted_2$8, "*"))
25463
+ ? (openBlock(), createElementBlock("span", _hoisted_2$9, "*"))
25399
25464
  : createCommentVNode("v-if", true),
25400
- createElementVNode("span", _hoisted_3$8, toDisplayString(_ctx.selectedLabel || _ctx.element.title), 1 /* TEXT */),
25465
+ createElementVNode("span", _hoisted_3$9, toDisplayString(_ctx.selectedLabel || _ctx.element.title), 1 /* TEXT */),
25401
25466
  createElementVNode("i", {
25402
25467
  class: normalizeClass(["iconfont icon-bofang1", { 'rotate-180': _ctx.isOpen }])
25403
25468
  }, null, 2 /* CLASS */)
@@ -25408,12 +25473,12 @@ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25408
25473
  onChange: _cache[2] || (_cache[2] = (...args) => (_ctx.handleChange && _ctx.handleChange(...args))),
25409
25474
  onBlur: _cache[3] || (_cache[3] = (...args) => (_ctx.handleBlur && _ctx.handleBlur(...args)))
25410
25475
  }, [
25411
- createElementVNode("option", _hoisted_4$7, toDisplayString(_ctx.element.title), 1 /* TEXT */),
25476
+ createElementVNode("option", _hoisted_4$8, toDisplayString(_ctx.element.title), 1 /* TEXT */),
25412
25477
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.element.items, (item) => {
25413
25478
  return (openBlock(), createElementBlock("option", {
25414
25479
  key: item.value,
25415
25480
  value: item.value
25416
- }, toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_5$7))
25481
+ }, toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_5$8))
25417
25482
  }), 128 /* KEYED_FRAGMENT */))
25418
25483
  ], 544 /* NEED_HYDRATION, NEED_PATCH */), [
25419
25484
  [vModelSelect, _ctx.selectedValue]
@@ -25429,18 +25494,18 @@ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25429
25494
  key: item.value,
25430
25495
  class: normalizeClass(["dropdown-item", { 'selected': item.value === _ctx.selectedValue }]),
25431
25496
  onClick: $event => (_ctx.selectItem(item))
25432
- }, toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_6$5))
25497
+ }, toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_6$6))
25433
25498
  }), 128 /* KEYED_FRAGMENT */))
25434
25499
  ], 4 /* STYLE */))
25435
25500
  : createCommentVNode("v-if", true)
25436
25501
  ], 4 /* STYLE */)
25437
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$8))
25502
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$9))
25438
25503
  }
25439
25504
 
25440
- script$d.render = render$9;
25441
- script$d.__file = "src/components/UniFormSelect/UniFormSelect.vue";
25505
+ script$e.render = render$a;
25506
+ script$e.__file = "src/components/UniFormSelect/UniFormSelect.vue";
25442
25507
 
25443
- var script$c = defineComponent({
25508
+ var script$d = defineComponent({
25444
25509
  name: 'uni-form-single',
25445
25510
  props: {
25446
25511
  global: {
@@ -25521,16 +25586,16 @@ var script$c = defineComponent({
25521
25586
  }
25522
25587
  });
25523
25588
 
25524
- const _hoisted_1$7 = ["data-id"];
25525
- const _hoisted_2$7 = { class: "fs-tit" };
25526
- const _hoisted_3$7 = {
25589
+ const _hoisted_1$8 = ["data-id"];
25590
+ const _hoisted_2$8 = { class: "fs-tit" };
25591
+ const _hoisted_3$8 = {
25527
25592
  key: 0,
25528
25593
  class: "require"
25529
25594
  };
25530
- const _hoisted_4$6 = ["onClick"];
25531
- const _hoisted_5$6 = ["name", "value"];
25595
+ const _hoisted_4$7 = ["onClick"];
25596
+ const _hoisted_5$7 = ["name", "value"];
25532
25597
 
25533
- function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25598
+ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
25534
25599
  return (openBlock(), createElementBlock("div", {
25535
25600
  class: normalizeClass(["ele-form f-single eles", { 'has-error': _ctx.hasError }]),
25536
25601
  "data-id": _ctx.element.id,
@@ -25540,9 +25605,9 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25540
25605
  class: "ani-wrap",
25541
25606
  style: normalizeStyle(_ctx.innerStyles)
25542
25607
  }, [
25543
- createElementVNode("div", _hoisted_2$7, [
25608
+ createElementVNode("div", _hoisted_2$8, [
25544
25609
  (_ctx.required)
25545
- ? (openBlock(), createElementBlock("span", _hoisted_3$7, "*"))
25610
+ ? (openBlock(), createElementBlock("span", _hoisted_3$8, "*"))
25546
25611
  : createCommentVNode("v-if", true),
25547
25612
  createTextVNode(" " + toDisplayString(_ctx.element.title), 1 /* TEXT */)
25548
25613
  ]),
@@ -25560,22 +25625,22 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25560
25625
  class: "fs-txt",
25561
25626
  style: normalizeStyle(_ctx.itemStyles)
25562
25627
  }, toDisplayString(item.label), 5 /* TEXT, STYLE */)
25563
- ], 8 /* PROPS */, _hoisted_4$6))
25628
+ ], 8 /* PROPS */, _hoisted_4$7))
25564
25629
  }), 128 /* KEYED_FRAGMENT */))
25565
25630
  ]),
25566
25631
  createElementVNode("input", {
25567
25632
  type: "hidden",
25568
25633
  name: `singleselect_${_ctx.element.id}`,
25569
25634
  value: _ctx.selectedValue
25570
- }, null, 8 /* PROPS */, _hoisted_5$6)
25635
+ }, null, 8 /* PROPS */, _hoisted_5$7)
25571
25636
  ], 4 /* STYLE */)
25572
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$7))
25637
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$8))
25573
25638
  }
25574
25639
 
25575
- script$c.render = render$8;
25576
- script$c.__file = "src/components/UniFormSingle/UniFormSingle.vue";
25640
+ script$d.render = render$9;
25641
+ script$d.__file = "src/components/UniFormSingle/UniFormSingle.vue";
25577
25642
 
25578
- var script$b = defineComponent({
25643
+ var script$c = defineComponent({
25579
25644
  name: 'uni-form-multiple',
25580
25645
  props: {
25581
25646
  global: {
@@ -25666,16 +25731,16 @@ var script$b = defineComponent({
25666
25731
  }
25667
25732
  });
25668
25733
 
25669
- const _hoisted_1$6 = ["data-id"];
25670
- const _hoisted_2$6 = { class: "fs-tit" };
25671
- const _hoisted_3$6 = {
25734
+ const _hoisted_1$7 = ["data-id"];
25735
+ const _hoisted_2$7 = { class: "fs-tit" };
25736
+ const _hoisted_3$7 = {
25672
25737
  key: 0,
25673
25738
  class: "require"
25674
25739
  };
25675
- const _hoisted_4$5 = ["onClick"];
25676
- const _hoisted_5$5 = ["name", "value"];
25740
+ const _hoisted_4$6 = ["onClick"];
25741
+ const _hoisted_5$6 = ["name", "value"];
25677
25742
 
25678
- function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25743
+ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
25679
25744
  return (openBlock(), createElementBlock("div", {
25680
25745
  class: normalizeClass(["ele-form f-multiple eles", { 'has-error': _ctx.hasError }]),
25681
25746
  "data-id": _ctx.element.id,
@@ -25685,9 +25750,9 @@ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25685
25750
  class: "ani-wrap",
25686
25751
  style: normalizeStyle(_ctx.innerStyles)
25687
25752
  }, [
25688
- createElementVNode("div", _hoisted_2$6, [
25753
+ createElementVNode("div", _hoisted_2$7, [
25689
25754
  (_ctx.required)
25690
- ? (openBlock(), createElementBlock("span", _hoisted_3$6, "*"))
25755
+ ? (openBlock(), createElementBlock("span", _hoisted_3$7, "*"))
25691
25756
  : createCommentVNode("v-if", true),
25692
25757
  createTextVNode(" " + toDisplayString(_ctx.element.title), 1 /* TEXT */)
25693
25758
  ]),
@@ -25705,22 +25770,22 @@ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25705
25770
  class: "fs-txt",
25706
25771
  style: normalizeStyle(_ctx.itemStyles)
25707
25772
  }, toDisplayString(item.label), 5 /* TEXT, STYLE */)
25708
- ], 8 /* PROPS */, _hoisted_4$5))
25773
+ ], 8 /* PROPS */, _hoisted_4$6))
25709
25774
  }), 128 /* KEYED_FRAGMENT */))
25710
25775
  ]),
25711
25776
  createElementVNode("input", {
25712
25777
  type: "hidden",
25713
25778
  name: `multiselect_${_ctx.element.id}`,
25714
25779
  value: _ctx.selectedValues.join(',')
25715
- }, null, 8 /* PROPS */, _hoisted_5$5)
25780
+ }, null, 8 /* PROPS */, _hoisted_5$6)
25716
25781
  ], 4 /* STYLE */)
25717
- ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$6))
25782
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$7))
25718
25783
  }
25719
25784
 
25720
- script$b.render = render$7;
25721
- script$b.__file = "src/components/UniFormMultiple/UniFormMultiple.vue";
25785
+ script$c.render = render$8;
25786
+ script$c.__file = "src/components/UniFormMultiple/UniFormMultiple.vue";
25722
25787
 
25723
- var script$a = defineComponent({
25788
+ var script$b = defineComponent({
25724
25789
  name: 'FormContainer',
25725
25790
  props: {
25726
25791
  autoReset: {
@@ -25744,7 +25809,7 @@ var script$a = defineComponent({
25744
25809
  }
25745
25810
  });
25746
25811
 
25747
- function render$6(_ctx, _cache, $props, $setup, $data, $options) {
25812
+ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
25748
25813
  return (openBlock(), createElementBlock("form", {
25749
25814
  class: "form-container",
25750
25815
  onSubmit: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"]))
@@ -25753,10 +25818,10 @@ function render$6(_ctx, _cache, $props, $setup, $data, $options) {
25753
25818
  ], 32 /* NEED_HYDRATION */))
25754
25819
  }
25755
25820
 
25756
- script$a.render = render$6;
25757
- script$a.__file = "src/components/UniFormContainer/UniFormContainer.vue";
25821
+ script$b.render = render$7;
25822
+ script$b.__file = "src/components/UniFormContainer/UniFormContainer.vue";
25758
25823
 
25759
- var script$9 = /*#__PURE__*/ defineComponent({
25824
+ var script$a = /*#__PURE__*/ defineComponent({
25760
25825
  ...{ name: 'uni-menu-receipt' },
25761
25826
  __name: 'UniMenuReceipt',
25762
25827
  props: {
@@ -25786,9 +25851,9 @@ var script$9 = /*#__PURE__*/ defineComponent({
25786
25851
  }
25787
25852
  });
25788
25853
 
25789
- script$9.__file = "src/components/UniMenuReceipt/UniMenuReceipt.vue";
25854
+ script$a.__file = "src/components/UniMenuReceipt/UniMenuReceipt.vue";
25790
25855
 
25791
- var script$8 = /*#__PURE__*/ defineComponent({
25856
+ var script$9 = /*#__PURE__*/ defineComponent({
25792
25857
  ...{ name: 'uni-menu-video' },
25793
25858
  __name: 'UniMenuVideo',
25794
25859
  props: {
@@ -25818,9 +25883,9 @@ var script$8 = /*#__PURE__*/ defineComponent({
25818
25883
  }
25819
25884
  });
25820
25885
 
25821
- script$8.__file = "src/components/UniMenuVideo/UniMenuVideo.vue";
25886
+ script$9.__file = "src/components/UniMenuVideo/UniMenuVideo.vue";
25822
25887
 
25823
- var script$7 = /*#__PURE__*/ defineComponent({
25888
+ var script$8 = /*#__PURE__*/ defineComponent({
25824
25889
  ...{ name: 'uni-menu-tel' },
25825
25890
  __name: 'UniMenuTel',
25826
25891
  props: {
@@ -25850,9 +25915,9 @@ var script$7 = /*#__PURE__*/ defineComponent({
25850
25915
  }
25851
25916
  });
25852
25917
 
25853
- script$7.__file = "src/components/UniMenuTel/UniMenuTel.vue";
25918
+ script$8.__file = "src/components/UniMenuTel/UniMenuTel.vue";
25854
25919
 
25855
- var script$6 = /*#__PURE__*/ defineComponent({
25920
+ var script$7 = /*#__PURE__*/ defineComponent({
25856
25921
  ...{ name: 'uni-menu-map' },
25857
25922
  __name: 'UniMenuMap',
25858
25923
  props: {
@@ -25882,9 +25947,9 @@ var script$6 = /*#__PURE__*/ defineComponent({
25882
25947
  }
25883
25948
  });
25884
25949
 
25885
- script$6.__file = "src/components/UniMenuMap/UniMenuMap.vue";
25950
+ script$7.__file = "src/components/UniMenuMap/UniMenuMap.vue";
25886
25951
 
25887
- var script$5 = defineComponent({
25952
+ var script$6 = defineComponent({
25888
25953
  name: 'uni-menu',
25889
25954
  props: {
25890
25955
  global: {
@@ -25898,10 +25963,10 @@ var script$5 = defineComponent({
25898
25963
  }
25899
25964
  },
25900
25965
  components: {
25901
- UniMenuReceipt: script$9,
25902
- UniMenuVideo: script$8,
25903
- UniMenuTel: script$7,
25904
- UniMenuMap: script$6
25966
+ UniMenuReceipt: script$a,
25967
+ UniMenuVideo: script$9,
25968
+ UniMenuTel: script$8,
25969
+ UniMenuMap: script$7
25905
25970
  },
25906
25971
  setup(props) {
25907
25972
  // 状态管理
@@ -26100,45 +26165,45 @@ var script$5 = defineComponent({
26100
26165
  });
26101
26166
 
26102
26167
  const _withScopeId$1 = n => (pushScopeId("data-v-5e9efd2f"),n=n(),popScopeId(),n);
26103
- const _hoisted_1$5 = {
26168
+ const _hoisted_1$6 = {
26104
26169
  key: 0,
26105
26170
  id: "page-global"
26106
26171
  };
26107
- const _hoisted_2$5 = {
26172
+ const _hoisted_2$6 = {
26108
26173
  key: 1,
26109
26174
  id: "receipt-wrap",
26110
26175
  class: "v-slide"
26111
26176
  };
26112
- const _hoisted_3$5 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/createElementVNode("div", { class: "r-tit" }, "แบบตอบรับ", -1 /* HOISTED */));
26113
- const _hoisted_4$4 = { class: "r-cont" };
26114
- const _hoisted_5$4 = { class: "r-list" };
26115
- const _hoisted_6$4 = ["value"];
26116
- const _hoisted_7$4 = { class: "r-which" };
26117
- const _hoisted_8$1 = ["value"];
26118
- const _hoisted_9$1 = { class: "r-submit" };
26119
- const _hoisted_10$1 = {
26177
+ const _hoisted_3$6 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/createElementVNode("div", { class: "r-tit" }, "แบบตอบรับ", -1 /* HOISTED */));
26178
+ const _hoisted_4$5 = { class: "r-cont" };
26179
+ const _hoisted_5$5 = { class: "r-list" };
26180
+ const _hoisted_6$5 = ["value"];
26181
+ const _hoisted_7$5 = { class: "r-which" };
26182
+ const _hoisted_8$2 = ["value"];
26183
+ const _hoisted_9$2 = { class: "r-submit" };
26184
+ const _hoisted_10$2 = {
26120
26185
  key: 0,
26121
26186
  class: "which-select"
26122
26187
  };
26123
- const _hoisted_11$1 = ["onClick"];
26124
- const _hoisted_12$1 = {
26188
+ const _hoisted_11$2 = ["onClick"];
26189
+ const _hoisted_12$2 = {
26125
26190
  key: 1,
26126
26191
  class: "which-select"
26127
26192
  };
26128
- const _hoisted_13$1 = ["onClick"];
26129
- const _hoisted_14$1 = {
26193
+ const _hoisted_13$2 = ["onClick"];
26194
+ const _hoisted_14$2 = {
26130
26195
  key: 2,
26131
26196
  class: "tip-cover"
26132
26197
  };
26133
- const _hoisted_15$1 = { class: "tip" };
26134
- const _hoisted_16$1 = { class: "tip-content" };
26135
- const _hoisted_17$1 = {
26198
+ const _hoisted_15$2 = { class: "tip" };
26199
+ const _hoisted_16$2 = { class: "tip-content" };
26200
+ const _hoisted_17$2 = {
26136
26201
  key: 2,
26137
26202
  class: "global-v"
26138
26203
  };
26139
- const _hoisted_18$1 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/createElementVNode("i", { class: "iconfont icon-buoumaotubiao20" }, null, -1 /* HOISTED */));
26140
- const _hoisted_19$1 = [
26141
- _hoisted_18$1
26204
+ const _hoisted_18$2 = /*#__PURE__*/ _withScopeId$1(() => /*#__PURE__*/createElementVNode("i", { class: "iconfont icon-buoumaotubiao20" }, null, -1 /* HOISTED */));
26205
+ const _hoisted_19$2 = [
26206
+ _hoisted_18$2
26142
26207
  ];
26143
26208
  const _hoisted_20$1 = ["innerHTML"];
26144
26209
  const _hoisted_21$1 = ["onClick"];
@@ -26148,7 +26213,7 @@ const _hoisted_22$1 = {
26148
26213
  };
26149
26214
  const _hoisted_23$1 = { class: "mint-toast-text" };
26150
26215
 
26151
- function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26216
+ function render$6(_ctx, _cache, $props, $setup, $data, $options) {
26152
26217
  const _component_uni_menu_receipt = resolveComponent("uni-menu-receipt");
26153
26218
  const _component_uni_menu_video = resolveComponent("uni-menu-video");
26154
26219
  const _component_uni_menu_tel = resolveComponent("uni-menu-tel");
@@ -26157,7 +26222,7 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26157
26222
  return (openBlock(), createElementBlock(Fragment, null, [
26158
26223
  createCommentVNode(" 主按钮组 "),
26159
26224
  (_ctx.showGlobalButtons)
26160
- ? (openBlock(), createElementBlock("div", _hoisted_1$5, [
26225
+ ? (openBlock(), createElementBlock("div", _hoisted_1$6, [
26161
26226
  createVNode(_component_uni_menu_receipt, {
26162
26227
  global: _ctx.global,
26163
26228
  onClick: _cache[0] || (_cache[0] = $event => (_ctx.showReceiptForm = true))
@@ -26178,15 +26243,15 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26178
26243
  : createCommentVNode("v-if", true),
26179
26244
  createCommentVNode(" 回执表单 "),
26180
26245
  (_ctx.showReceiptForm)
26181
- ? (openBlock(), createElementBlock("div", _hoisted_2$5, [
26246
+ ? (openBlock(), createElementBlock("div", _hoisted_2$6, [
26182
26247
  createElementVNode("i", {
26183
26248
  class: "iconfont icon-guanbi",
26184
26249
  onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.closeReceipt && _ctx.closeReceipt(...args)))
26185
26250
  }),
26186
- _hoisted_3$5,
26251
+ _hoisted_3$6,
26187
26252
  createCommentVNode(" 宾客回执 "),
26188
- createElementVNode("div", _hoisted_4$4, [
26189
- createElementVNode("ul", _hoisted_5$4, [
26253
+ createElementVNode("div", _hoisted_4$5, [
26254
+ createElementVNode("ul", _hoisted_5$5, [
26190
26255
  createElementVNode("li", null, [
26191
26256
  withDirectives(createElementVNode("input", {
26192
26257
  "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => ((_ctx.receiptForm.guestName) = $event)),
@@ -26205,15 +26270,15 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26205
26270
  value: _ctx.selectedPeopleLabel,
26206
26271
  class: "r-input",
26207
26272
  onClick: _cache[5] || (_cache[5] = $event => (_ctx.showPeopleSelect = true))
26208
- }, null, 8 /* PROPS */, _hoisted_6$4)
26273
+ }, null, 8 /* PROPS */, _hoisted_6$5)
26209
26274
  ]),
26210
- createElementVNode("li", _hoisted_7$4, [
26275
+ createElementVNode("li", _hoisted_7$5, [
26211
26276
  createElementVNode("input", {
26212
26277
  readonly: "",
26213
26278
  value: _ctx.selectedWhichLabel,
26214
26279
  class: "r-input",
26215
26280
  onClick: _cache[6] || (_cache[6] = $event => (_ctx.showWhichSelect = true))
26216
- }, null, 8 /* PROPS */, _hoisted_8$1)
26281
+ }, null, 8 /* PROPS */, _hoisted_8$2)
26217
26282
  ]),
26218
26283
  createElementVNode("li", null, [
26219
26284
  withDirectives(createElementVNode("input", {
@@ -26227,7 +26292,7 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26227
26292
  ]),
26228
26293
  createCommentVNode(" 手机号码 ")
26229
26294
  ]),
26230
- createElementVNode("li", _hoisted_9$1, [
26295
+ createElementVNode("li", _hoisted_9$2, [
26231
26296
  createElementVNode("button", {
26232
26297
  class: "r-btn",
26233
26298
  onClick: _cache[8] || (_cache[8] = (...args) => (_ctx.submitReceipt && _ctx.submitReceipt(...args)))
@@ -26238,35 +26303,35 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26238
26303
  ]),
26239
26304
  createCommentVNode(" 选择人数 "),
26240
26305
  (_ctx.showPeopleSelect)
26241
- ? (openBlock(), createElementBlock("div", _hoisted_10$1, [
26306
+ ? (openBlock(), createElementBlock("div", _hoisted_10$2, [
26242
26307
  createElementVNode("ul", null, [
26243
26308
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.peopleOptions, (item) => {
26244
26309
  return (openBlock(), createElementBlock("li", {
26245
26310
  key: item,
26246
26311
  onClick: $event => (_ctx.selectPeople(item))
26247
- }, toDisplayString(item), 9 /* TEXT, PROPS */, _hoisted_11$1))
26312
+ }, toDisplayString(item), 9 /* TEXT, PROPS */, _hoisted_11$2))
26248
26313
  }), 128 /* KEYED_FRAGMENT */))
26249
26314
  ])
26250
26315
  ]))
26251
26316
  : createCommentVNode("v-if", true),
26252
26317
  createCommentVNode(" 选择男方/女方 "),
26253
26318
  (_ctx.showWhichSelect)
26254
- ? (openBlock(), createElementBlock("div", _hoisted_12$1, [
26319
+ ? (openBlock(), createElementBlock("div", _hoisted_12$2, [
26255
26320
  createElementVNode("ul", null, [
26256
26321
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.global.receipt.whichList, (item) => {
26257
26322
  return (openBlock(), createElementBlock("li", {
26258
26323
  key: item.label,
26259
26324
  onClick: $event => (_ctx.selectWhich(item))
26260
- }, toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_13$1))
26325
+ }, toDisplayString(item.label), 9 /* TEXT, PROPS */, _hoisted_13$2))
26261
26326
  }), 128 /* KEYED_FRAGMENT */))
26262
26327
  ])
26263
26328
  ]))
26264
26329
  : createCommentVNode("v-if", true),
26265
26330
  createCommentVNode(" 提示信息 "),
26266
26331
  (_ctx.showTip)
26267
- ? (openBlock(), createElementBlock("div", _hoisted_14$1, [
26268
- createElementVNode("div", _hoisted_15$1, [
26269
- createElementVNode("div", _hoisted_16$1, toDisplayString(_ctx.tipMessage), 1 /* TEXT */),
26332
+ ? (openBlock(), createElementBlock("div", _hoisted_14$2, [
26333
+ createElementVNode("div", _hoisted_15$2, [
26334
+ createElementVNode("div", _hoisted_16$2, toDisplayString(_ctx.tipMessage), 1 /* TEXT */),
26270
26335
  createElementVNode("div", {
26271
26336
  class: "tip-btn",
26272
26337
  onClick: _cache[9] || (_cache[9] = $event => (_ctx.showTip = false))
@@ -26279,11 +26344,11 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26279
26344
  : createCommentVNode("v-if", true),
26280
26345
  createCommentVNode(" 视频播放 "),
26281
26346
  (_ctx.showVideoPlayer)
26282
- ? (openBlock(), createElementBlock("div", _hoisted_17$1, [
26347
+ ? (openBlock(), createElementBlock("div", _hoisted_17$2, [
26283
26348
  createElementVNode("div", {
26284
26349
  id: "close-gvideo",
26285
26350
  onClick: _cache[10] || (_cache[10] = (...args) => (_ctx.closeVideo && _ctx.closeVideo(...args)))
26286
- }, [..._hoisted_19$1]),
26351
+ }, [..._hoisted_19$2]),
26287
26352
  createElementVNode("div", {
26288
26353
  class: "global-v-show",
26289
26354
  innerHTML: _ctx.global.video.url
@@ -26320,31 +26385,1276 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26320
26385
  ], 64 /* STABLE_FRAGMENT */))
26321
26386
  }
26322
26387
 
26323
- script$5.render = render$5;
26324
- script$5.__scopeId = "data-v-5e9efd2f";
26325
- script$5.__file = "src/components/UniMenu/UniMenu.vue";
26388
+ script$6.render = render$6;
26389
+ script$6.__scopeId = "data-v-5e9efd2f";
26390
+ script$6.__file = "src/components/UniMenu/UniMenu.vue";
26326
26391
 
26327
- var script$4 = defineComponent({
26392
+ var script$5 = defineComponent({
26328
26393
  name: 'UniWatermark'
26329
26394
  });
26330
26395
 
26331
26396
  const _withScopeId = n => (pushScopeId("data-v-0f2e9262"),n=n(),popScopeId(),n);
26332
- const _hoisted_1$4 = {
26397
+ const _hoisted_1$5 = {
26333
26398
  class: "unika-watermark",
26334
26399
  "aria-hidden": "true"
26335
26400
  };
26336
- const _hoisted_2$4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/createElementVNode("div", { class: "unika-watermark-pattern" }, null, -1 /* HOISTED */));
26337
- const _hoisted_3$4 = [
26338
- _hoisted_2$4
26401
+ const _hoisted_2$5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/createElementVNode("div", { class: "unika-watermark-pattern" }, null, -1 /* HOISTED */));
26402
+ const _hoisted_3$5 = [
26403
+ _hoisted_2$5
26339
26404
  ];
26340
26405
 
26341
- function render$4(_ctx, _cache, $props, $setup, $data, $options) {
26342
- return (openBlock(), createElementBlock("div", _hoisted_1$4, [..._hoisted_3$4]))
26406
+ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
26407
+ return (openBlock(), createElementBlock("div", _hoisted_1$5, [..._hoisted_3$5]))
26343
26408
  }
26344
26409
 
26345
- script$4.render = render$4;
26346
- script$4.__scopeId = "data-v-0f2e9262";
26347
- script$4.__file = "src/components/UniWatermark/UniWatermark.vue";
26410
+ script$5.render = render$5;
26411
+ script$5.__scopeId = "data-v-0f2e9262";
26412
+ script$5.__file = "src/components/UniWatermark/UniWatermark.vue";
26413
+
26414
+ /** Stable component type — shared across unika-components / biz-editor / ai-wedding / h5-server */
26415
+ const GUEST_AI_WEDDING_POSTER_TYPE = 'guest-ai-wedding-poster';
26416
+ const GUEST_AI_WEDDING_POSTER_VERSION = 1;
26417
+ /** Declarative inspector fields — shared by desktop/mobile editors */
26418
+ const guestAIWeddingPosterInspectorConfig = {
26419
+ content: [
26420
+ { key: 'title', label: '组件标题', control: 'text' },
26421
+ { key: 'description', label: '引导文案', control: 'textarea' },
26422
+ { key: 'buttonText', label: '按钮文字', control: 'text' },
26423
+ { key: 'invitationImage', label: '婚礼邀请函图片', control: 'invitation-image-upload' },
26424
+ { key: 'styles', label: '风格选项', control: 'poster-style-manager' },
26425
+ { key: 'result', label: '结果操作', control: 'result-actions' }
26426
+ ],
26427
+ appearance: [
26428
+ { key: 'appearance.backgroundColor', label: '背景颜色', control: 'color' },
26429
+ { key: 'appearance.textColor', label: '文字颜色', control: 'color' },
26430
+ { key: 'appearance.primaryColor', label: '主题色', control: 'color' },
26431
+ { key: 'appearance.borderRadius', label: '圆角', control: 'slider' },
26432
+ { key: 'appearance.buttonStyle', label: '按钮样式', control: 'select' },
26433
+ { key: 'appearance.compact', label: '紧凑模式', control: 'switch' }
26434
+ ],
26435
+ ai: [
26436
+ { key: 'output.aspectRatio', label: '输出比例', control: 'select' },
26437
+ { key: 'output.count', label: '生成数量', control: 'number' },
26438
+ { key: 'upload.maxFileSizeMB', label: '照片最大大小(MB)', control: 'number' },
26439
+ { key: 'privacy.autoDeleteAfterDays', label: '照片自动删除(天)', control: 'select' }
26440
+ ]
26441
+ };
26442
+
26443
+ /** Demo invitation — real couple wedding invite (Jim & …). Served from /public/demo */
26444
+ const DEMO_INVITATION_IMAGE_URL = '/demo/guest-invitation.jpg';
26445
+ const defaultGuestAIWeddingPosterConfig = {
26446
+ version: GUEST_AI_WEDDING_POSTER_VERSION,
26447
+ title: '和我们一起留下婚礼纪念',
26448
+ description: '上传一张照片,生成你与新人的专属婚礼邀请函',
26449
+ buttonText: '生成专属邀请函',
26450
+ invitationImage: {
26451
+ invitationImageId: 'demo-invitation-image',
26452
+ invitationImageUrl: DEMO_INVITATION_IMAGE_URL
26453
+ },
26454
+ styles: [
26455
+ {
26456
+ id: 'romantic-garden',
26457
+ name: '浪漫花园',
26458
+ thumbnail: '',
26459
+ promptTemplateId: 'poster-romantic-garden-v1',
26460
+ enabled: true,
26461
+ sort: 1
26462
+ },
26463
+ {
26464
+ id: 'cinematic',
26465
+ name: '电影质感',
26466
+ thumbnail: '',
26467
+ promptTemplateId: 'poster-cinematic-v1',
26468
+ enabled: true,
26469
+ sort: 2
26470
+ },
26471
+ {
26472
+ id: 'chibi-figure',
26473
+ name: '可爱手办',
26474
+ thumbnail: '',
26475
+ promptTemplateId: 'poster-chibi-figure-v1',
26476
+ enabled: true,
26477
+ sort: 3
26478
+ },
26479
+ {
26480
+ id: 'new-chinese',
26481
+ name: '新中式',
26482
+ thumbnail: '',
26483
+ promptTemplateId: 'poster-new-chinese-v1',
26484
+ enabled: true,
26485
+ sort: 4
26486
+ }
26487
+ ],
26488
+ result: {
26489
+ allowRegenerate: true,
26490
+ allowDownload: true,
26491
+ allowShare: true,
26492
+ maxRegenerateCount: 2
26493
+ },
26494
+ privacy: {
26495
+ requireConsent: false,
26496
+ consentText: '我已阅读并同意照片处理说明',
26497
+ noticeUrl: '',
26498
+ autoDeleteAfterDays: 7
26499
+ },
26500
+ upload: {
26501
+ maxFileSizeMB: 10,
26502
+ allowedTypes: ['image/jpeg', 'image/png', 'image/webp'],
26503
+ minWidth: 256,
26504
+ minHeight: 256,
26505
+ requireSingleFace: true
26506
+ },
26507
+ output: {
26508
+ aspectRatio: '3:4',
26509
+ count: 1
26510
+ },
26511
+ appearance: {
26512
+ backgroundColor: '#fffaf2',
26513
+ textColor: '#17345f',
26514
+ primaryColor: '#198cff',
26515
+ borderRadius: 20,
26516
+ buttonStyle: 'gradient',
26517
+ compact: false,
26518
+ paddingY: 16,
26519
+ paddingX: 16
26520
+ }
26521
+ };
26522
+ /** Default ElementData seed for editors */
26523
+ const guestAIWeddingPosterDefaultProps = {
26524
+ id: 'guest-ai-wedding-poster-default',
26525
+ pid: '',
26526
+ type: GUEST_AI_WEDDING_POSTER_TYPE,
26527
+ layerName: '宾客AI合影海报',
26528
+ sign: true,
26529
+ signSort: 20,
26530
+ ...defaultGuestAIWeddingPosterConfig,
26531
+ css: {
26532
+ borderWidth: 0,
26533
+ borderStyle: 'solid',
26534
+ borderColor: 'rgba(153, 153, 153, 1)',
26535
+ opacity: 1,
26536
+ backgroundColor: 'transparent',
26537
+ width: 345,
26538
+ height: 420,
26539
+ borderRadius: 0,
26540
+ top: 40,
26541
+ left: 15,
26542
+ transform: 0
26543
+ },
26544
+ properties: {
26545
+ visible: true,
26546
+ isLock: false,
26547
+ required: false,
26548
+ musicName: '',
26549
+ musicLink: '',
26550
+ musicHash: '',
26551
+ shadowSize: 0,
26552
+ shadowColor: '#999999',
26553
+ shadowX: 0,
26554
+ shadowY: 0,
26555
+ shadowBlur: 0,
26556
+ shadowPoint: 270,
26557
+ aniOrigin: 'default',
26558
+ animations: []
26559
+ },
26560
+ triggers: {
26561
+ event: '',
26562
+ link: '',
26563
+ go: '',
26564
+ phone: '',
26565
+ musicName: '',
26566
+ musicLink: '',
26567
+ musicHash: ''
26568
+ }
26569
+ };
26570
+
26571
+ const ALLOWED_MIME = new Set(['image/jpeg', 'image/png', 'image/webp']);
26572
+ const ALLOWED_RATIOS = new Set(['3:4', '4:5', '9:16']);
26573
+ function isRecord(v) {
26574
+ return !!v && typeof v === 'object' && !Array.isArray(v);
26575
+ }
26576
+ function hasImageRef(ref) {
26577
+ return !!(ref.id && String(ref.id).trim()) || !!(ref.url && String(ref.url).trim());
26578
+ }
26579
+ /** Migrate legacy groom/bride references → invitationImage */
26580
+ function normalizeInvitationImage(input) {
26581
+ var _a, _b;
26582
+ if (isRecord(input.invitationImage)) {
26583
+ return {
26584
+ invitationImageId: String((_a = input.invitationImage.invitationImageId) !== null && _a !== void 0 ? _a : ''),
26585
+ invitationImageUrl: String((_b = input.invitationImage.invitationImageUrl) !== null && _b !== void 0 ? _b : '')
26586
+ };
26587
+ }
26588
+ // legacy couple refs: prefer groom url as invitation fallback
26589
+ if (isRecord(input.references)) {
26590
+ const url = String(input.references.groomReferenceUrl || input.references.brideReferenceUrl || '');
26591
+ const id = String(input.references.groomReferenceId || input.references.brideReferenceId || '');
26592
+ return { invitationImageId: id, invitationImageUrl: url };
26593
+ }
26594
+ return { ...defaultGuestAIWeddingPosterConfig.invitationImage };
26595
+ }
26596
+ function validateGuestAIWeddingPosterConfig(input, options) {
26597
+ var _a, _b, _c, _d, _e;
26598
+ const issues = [];
26599
+ if (!isRecord(input)) {
26600
+ return { ok: false, issues: [{ path: '', message: '配置必须是对象' }] };
26601
+ }
26602
+ const title = String((_a = input.title) !== null && _a !== void 0 ? _a : '').trim();
26603
+ if (!title) {
26604
+ issues.push({ path: 'title', message: '标题不能为空' });
26605
+ }
26606
+ const styles = Array.isArray(input.styles) ? input.styles : [];
26607
+ const enabledStyles = styles.filter((s) => isRecord(s) && s.enabled !== false);
26608
+ if (enabledStyles.length < 1) {
26609
+ issues.push({ path: 'styles', message: '至少需要 1 个启用的风格' });
26610
+ }
26611
+ const styleIds = new Set();
26612
+ styles.forEach((raw, index) => {
26613
+ var _a, _b;
26614
+ if (!isRecord(raw)) {
26615
+ issues.push({ path: `styles[${index}]`, message: '风格项无效' });
26616
+ return;
26617
+ }
26618
+ const id = String((_a = raw.id) !== null && _a !== void 0 ? _a : '').trim();
26619
+ if (!id) {
26620
+ issues.push({ path: `styles[${index}].id`, message: '风格必须有唯一 id' });
26621
+ }
26622
+ else if (styleIds.has(id)) {
26623
+ issues.push({ path: `styles[${index}].id`, message: `风格 id 重复: ${id}` });
26624
+ }
26625
+ else {
26626
+ styleIds.add(id);
26627
+ }
26628
+ if (raw.enabled !== false && !String((_b = raw.promptTemplateId) !== null && _b !== void 0 ? _b : '').trim()) {
26629
+ issues.push({
26630
+ path: `styles[${index}].promptTemplateId`,
26631
+ message: '启用风格必须有 promptTemplateId'
26632
+ });
26633
+ }
26634
+ });
26635
+ const output = isRecord(input.output) ? input.output : {};
26636
+ const count = Number((_b = output.count) !== null && _b !== void 0 ? _b : 1);
26637
+ if (!Number.isFinite(count) || count < 1 || count > 4) {
26638
+ issues.push({ path: 'output.count', message: '生成数量必须在 1~4 之间' });
26639
+ }
26640
+ const aspectRatio = String((_c = output.aspectRatio) !== null && _c !== void 0 ? _c : '3:4');
26641
+ if (!ALLOWED_RATIOS.has(aspectRatio)) {
26642
+ issues.push({ path: 'output.aspectRatio', message: 'aspectRatio 仅支持 3:4 / 4:5 / 9:16' });
26643
+ }
26644
+ const privacy = isRecord(input.privacy) ? input.privacy : {};
26645
+ const autoDeleteAfterDays = Number((_d = privacy.autoDeleteAfterDays) !== null && _d !== void 0 ? _d : 0);
26646
+ if (!Number.isFinite(autoDeleteAfterDays) || autoDeleteAfterDays <= 0) {
26647
+ issues.push({ path: 'privacy.autoDeleteAfterDays', message: 'autoDeleteAfterDays 必须大于 0' });
26648
+ }
26649
+ const upload = isRecord(input.upload) ? input.upload : {};
26650
+ const maxFileSizeMB = Number((_e = upload.maxFileSizeMB) !== null && _e !== void 0 ? _e : 0);
26651
+ if (!Number.isFinite(maxFileSizeMB) || maxFileSizeMB <= 0) {
26652
+ issues.push({ path: 'upload.maxFileSizeMB', message: 'maxFileSizeMB 必须大于 0' });
26653
+ }
26654
+ const allowedTypes = Array.isArray(upload.allowedTypes) ? upload.allowedTypes : [];
26655
+ allowedTypes.forEach((mime, i) => {
26656
+ if (!ALLOWED_MIME.has(String(mime))) {
26657
+ issues.push({ path: `upload.allowedTypes[${i}]`, message: `不支持的 MIME: ${mime}` });
26658
+ }
26659
+ });
26660
+ if (options === null || options === void 0 ? void 0 : options.requireReferences) {
26661
+ const invitationImage = normalizeInvitationImage(input);
26662
+ if (!hasImageRef({
26663
+ id: invitationImage.invitationImageId,
26664
+ url: invitationImage.invitationImageUrl
26665
+ })) {
26666
+ issues.push({ path: 'invitationImage', message: '需要配置婚礼邀请函图片(id 或 url)' });
26667
+ }
26668
+ }
26669
+ if (issues.length) {
26670
+ return { ok: false, issues };
26671
+ }
26672
+ return { ok: true, issues: [], value: mergeGuestAIWeddingPosterConfig(input) };
26673
+ }
26674
+ const guestAIWeddingPosterSchema = {
26675
+ validate: validateGuestAIWeddingPosterConfig,
26676
+ version: GUEST_AI_WEDDING_POSTER_VERSION
26677
+ };
26678
+ function mergeGuestAIWeddingPosterConfig(partial) {
26679
+ var _a, _b, _c, _d, _e;
26680
+ const src = (partial && typeof partial === 'object' ? partial : {});
26681
+ const base = defaultGuestAIWeddingPosterConfig;
26682
+ return {
26683
+ ...base,
26684
+ ...src,
26685
+ version: Number((_a = src.version) !== null && _a !== void 0 ? _a : base.version) || GUEST_AI_WEDDING_POSTER_VERSION,
26686
+ title: String((_b = src.title) !== null && _b !== void 0 ? _b : base.title),
26687
+ description: String((_c = src.description) !== null && _c !== void 0 ? _c : base.description),
26688
+ buttonText: String((_d = src.buttonText) !== null && _d !== void 0 ? _d : base.buttonText),
26689
+ invitationImage: {
26690
+ ...base.invitationImage,
26691
+ ...normalizeInvitationImage(src)
26692
+ },
26693
+ styles: Array.isArray(src.styles)
26694
+ ? src.styles
26695
+ : base.styles.map((s) => ({ ...s })),
26696
+ result: {
26697
+ ...base.result,
26698
+ ...(isRecord(src.result) ? src.result : {})
26699
+ },
26700
+ privacy: {
26701
+ ...base.privacy,
26702
+ ...(isRecord(src.privacy) ? src.privacy : {})
26703
+ },
26704
+ upload: {
26705
+ ...base.upload,
26706
+ ...(isRecord(src.upload) ? src.upload : {}),
26707
+ allowedTypes: Array.isArray((_e = src.upload) === null || _e === void 0 ? void 0 : _e.allowedTypes)
26708
+ ? [...src.upload.allowedTypes]
26709
+ : [...base.upload.allowedTypes]
26710
+ },
26711
+ output: {
26712
+ ...base.output,
26713
+ ...(isRecord(src.output) ? src.output : {})
26714
+ },
26715
+ appearance: {
26716
+ ...base.appearance,
26717
+ ...(isRecord(src.appearance) ? src.appearance : {})
26718
+ }
26719
+ };
26720
+ }
26721
+ function migrateGuestAIWeddingPosterConfig(config, fromVersion, toVersion = GUEST_AI_WEDDING_POSTER_VERSION) {
26722
+ var _a;
26723
+ const raw = isRecord(config) ? { ...config } : {};
26724
+ const from = Number((_a = fromVersion !== null && fromVersion !== void 0 ? fromVersion : raw.version) !== null && _a !== void 0 ? _a : 1) || 1;
26725
+ let current = mergeGuestAIWeddingPosterConfig(raw);
26726
+ if (from < 1) {
26727
+ current = mergeGuestAIWeddingPosterConfig(raw);
26728
+ }
26729
+ current.version = Math.min(toVersion, GUEST_AI_WEDDING_POSTER_VERSION);
26730
+ return current;
26731
+ }
26732
+ function resolveGuestAIWeddingPosterConfig(element) {
26733
+ var _a, _b;
26734
+ if (!element || typeof element !== 'object') {
26735
+ return mergeGuestAIWeddingPosterConfig(null);
26736
+ }
26737
+ const nested = isRecord(element.guestPoster) ? element.guestPoster : null;
26738
+ const source = nested || element;
26739
+ const fromVersion = Number((_b = (_a = source.version) !== null && _a !== void 0 ? _a : element.version) !== null && _b !== void 0 ? _b : 1);
26740
+ return migrateGuestAIWeddingPosterConfig(source, fromVersion);
26741
+ }
26742
+
26743
+ /**
26744
+ * Mock GuestPosterService for editor preview / local development.
26745
+ * REPLACE with a real API adapter in ai-wedding / h5-server runtime.
26746
+ * Do not scatter fake data inside the Vue component.
26747
+ */
26748
+ function createMockGuestPosterService(options) {
26749
+ var _a;
26750
+ const delay = (_a = options === null || options === void 0 ? void 0 : options.delayMs) !== null && _a !== void 0 ? _a : 900;
26751
+ const jobs = new Map();
26752
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
26753
+ return {
26754
+ async uploadGuestPhoto(file, _context) {
26755
+ if (options === null || options === void 0 ? void 0 : options.failUpload) {
26756
+ throw { code: 'UPLOAD_FAILED', message: '照片上传失败,请检查网络后重试' };
26757
+ }
26758
+ await wait(delay);
26759
+ // Object URL only for local demo — real adapter must use short-lived signed URL
26760
+ let previewUrl;
26761
+ try {
26762
+ if (typeof URL !== 'undefined' && typeof URL.createObjectURL === 'function') {
26763
+ previewUrl = URL.createObjectURL(file);
26764
+ }
26765
+ }
26766
+ catch {
26767
+ previewUrl = undefined;
26768
+ }
26769
+ return {
26770
+ assetId: `mock-guest-${Date.now()}`,
26771
+ previewUrl,
26772
+ width: 1024,
26773
+ height: 1024
26774
+ };
26775
+ },
26776
+ async createPosterJob(request) {
26777
+ if (options === null || options === void 0 ? void 0 : options.failGenerate) {
26778
+ throw { code: 'GENERATE_FAILED', message: '海报生成失败,请稍后重试' };
26779
+ }
26780
+ const id = `mock-job-${request.idempotencyKey.slice(0, 8)}-${Date.now()}`;
26781
+ const job = {
26782
+ id,
26783
+ status: 'queued',
26784
+ stage: 'queued',
26785
+ createdAt: new Date().toISOString(),
26786
+ updatedAt: new Date().toISOString()
26787
+ };
26788
+ jobs.set(id, job);
26789
+ // Simulate async progression without a fixed fake percent UI
26790
+ void (async () => {
26791
+ await wait(delay);
26792
+ const j1 = jobs.get(id);
26793
+ if (!j1 || j1.status === 'cancelled')
26794
+ return;
26795
+ j1.status = 'generating';
26796
+ j1.stage = 'generating';
26797
+ j1.updatedAt = new Date().toISOString();
26798
+ await wait(delay * 1.2);
26799
+ const j2 = jobs.get(id);
26800
+ if (!j2 || j2.status === 'cancelled')
26801
+ return;
26802
+ const inviteHint = request.invitationImageId ? '邀请函+宾客合影' : '专属邀请函';
26803
+ const fallbackSvg = 'data:image/svg+xml,' +
26804
+ encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="600" height="800">
26805
+ <defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1">
26806
+ <stop stop-color="#fff8f0"/><stop offset="1" stop-color="#f0e4d4"/>
26807
+ </linearGradient></defs>
26808
+ <rect width="100%" height="100%" fill="url(#g)"/>
26809
+ <rect x="40" y="40" width="520" height="720" fill="none" stroke="#c4a574" stroke-width="3"/>
26810
+ <text x="300" y="110" text-anchor="middle" font-size="26" fill="#8b6914" font-family="serif">Wedding Invitation</text>
26811
+ <circle cx="160" cy="300" r="55" fill="#6d8fb5"/>
26812
+ <circle cx="300" cy="280" r="62" fill="#b7c7de"/>
26813
+ <circle cx="440" cy="300" r="55" fill="#c489a4"/>
26814
+ <text x="160" y="390" text-anchor="middle" font-size="14" fill="#17345f">新郎</text>
26815
+ <text x="300" y="390" text-anchor="middle" font-size="14" fill="#17345f">宾客</text>
26816
+ <text x="440" y="390" text-anchor="middle" font-size="14" fill="#5a2a40">新娘</text>
26817
+ <text x="300" y="480" text-anchor="middle" font-size="22" fill="#6b4f2a">${inviteHint}</text>
26818
+ <text x="300" y="520" text-anchor="middle" font-size="14" fill="#8a7355">Mock · ${request.styleId}</text>
26819
+ <text x="300" y="560" text-anchor="middle" font-size="12" fill="#a09080">将宾客与邀请函中的新人合成</text>
26820
+ </svg>`);
26821
+ const imageUrl = (options === null || options === void 0 ? void 0 : options.resultImageUrl) || fallbackSvg;
26822
+ const results = Array.from({ length: request.output.count || 1 }).map((_, i) => ({
26823
+ id: `${id}-result-${i}`,
26824
+ imageUrl,
26825
+ thumbnailUrl: imageUrl,
26826
+ width: 600,
26827
+ height: 800
26828
+ }));
26829
+ j2.status = 'completed';
26830
+ j2.stage = 'completed';
26831
+ j2.results = results;
26832
+ j2.updatedAt = new Date().toISOString();
26833
+ })();
26834
+ return { ...job };
26835
+ },
26836
+ async getPosterJob(jobId) {
26837
+ const job = jobs.get(jobId);
26838
+ if (!job) {
26839
+ return {
26840
+ id: jobId,
26841
+ status: 'failed',
26842
+ errorCode: 'NOT_FOUND',
26843
+ errorMessage: '任务不存在或已过期'
26844
+ };
26845
+ }
26846
+ return { ...job, results: job.results ? [...job.results] : undefined };
26847
+ },
26848
+ async cancelPosterJob(jobId) {
26849
+ const job = jobs.get(jobId);
26850
+ if (job && job.status !== 'completed') {
26851
+ job.status = 'cancelled';
26852
+ job.updatedAt = new Date().toISOString();
26853
+ }
26854
+ },
26855
+ async downloadResult(_resultId) {
26856
+ return new Blob(['mock-poster'], { type: 'image/png' });
26857
+ },
26858
+ async getQuota(_invitationId) {
26859
+ const maxPerWork = 100;
26860
+ return { used: 0, maxPerWork, remaining: maxPerWork };
26861
+ }
26862
+ };
26863
+ }
26864
+
26865
+ const GUEST_POSTER_SERVICE_KEY = Symbol('GuestPosterService');
26866
+ /** Resolve runtime service: inject → provided callbacks → mock (never call vendor APIs here). */
26867
+ function resolveGuestPosterService(injectedOrProvided) {
26868
+ if (injectedOrProvided)
26869
+ return injectedOrProvided;
26870
+ const fromInject = inject(GUEST_POSTER_SERVICE_KEY, null);
26871
+ if (fromInject)
26872
+ return fromInject;
26873
+ return createMockGuestPosterService();
26874
+ }
26875
+ function guestPosterJobStorageKey(componentId) {
26876
+ return `guest-ai-poster-job:${componentId}`;
26877
+ }
26878
+ function loadStoredJobId(componentId) {
26879
+ try {
26880
+ if (typeof sessionStorage === 'undefined')
26881
+ return null;
26882
+ return sessionStorage.getItem(guestPosterJobStorageKey(componentId));
26883
+ }
26884
+ catch {
26885
+ return null;
26886
+ }
26887
+ }
26888
+ function saveStoredJobId(componentId, jobId) {
26889
+ try {
26890
+ if (typeof sessionStorage === 'undefined')
26891
+ return;
26892
+ const key = guestPosterJobStorageKey(componentId);
26893
+ if (!jobId)
26894
+ sessionStorage.removeItem(key);
26895
+ else
26896
+ sessionStorage.setItem(key, jobId);
26897
+ }
26898
+ catch {
26899
+ /* ignore quota / private mode */
26900
+ }
26901
+ }
26902
+ function mapJobStatusToUi(status) {
26903
+ if (status === 'completed')
26904
+ return 'completed';
26905
+ if (status === 'failed' || status === 'cancelled')
26906
+ return 'failed';
26907
+ if (status === 'queued' || status === 'preprocessing')
26908
+ return 'queued';
26909
+ return 'generating';
26910
+ }
26911
+ function guestPosterErrorMessage(code, fallback) {
26912
+ switch (code) {
26913
+ case 'NO_FACE':
26914
+ return '没有检测到清晰人脸,请更换照片';
26915
+ case 'MULTI_FACE':
26916
+ return '请上传只包含你本人的单人照片';
26917
+ case 'TOO_SMALL':
26918
+ return '照片清晰度不足,请更换照片';
26919
+ case 'UPLOAD_FAILED':
26920
+ return '照片上传失败,请检查网络后重试';
26921
+ case 'TIMEOUT':
26922
+ case 'GENERATION_TIMEOUT':
26923
+ return '生成时间较长,你可以稍后回来查看';
26924
+ case 'CONTENT_BLOCKED':
26925
+ case 'GENERATION_REJECTED':
26926
+ return '该照片暂时无法用于生成,请更换照片';
26927
+ case 'PROVIDER_AUTH_FAILED':
26928
+ return '图像服务未配置,请联系管理员';
26929
+ case '40410':
26930
+ return '作品不存在或链接无效';
26931
+ case '40312':
26932
+ return '作品未发布,无法生成';
26933
+ case '40005':
26934
+ return fallback || '本作品生成次数已达上限';
26935
+ case 'GENERATE_FAILED':
26936
+ case 'EMPTY_RESULT':
26937
+ case 'PROVIDER_ERROR':
26938
+ return fallback || '海报生成失败,请稍后重试';
26939
+ default:
26940
+ return fallback || '操作失败,请稍后重试';
26941
+ }
26942
+ }
26943
+ const IMAGE_MIME_BY_MAGIC = [
26944
+ {
26945
+ mime: 'image/jpeg',
26946
+ test: (b) => b.length >= 3 && b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff
26947
+ },
26948
+ {
26949
+ mime: 'image/png',
26950
+ test: (b) => b.length >= 8 &&
26951
+ b[0] === 0x89 &&
26952
+ b[1] === 0x50 &&
26953
+ b[2] === 0x4e &&
26954
+ b[3] === 0x47
26955
+ },
26956
+ {
26957
+ mime: 'image/webp',
26958
+ test: (b) => b.length >= 12 &&
26959
+ b[0] === 0x52 &&
26960
+ b[1] === 0x49 &&
26961
+ b[2] === 0x46 &&
26962
+ b[3] === 0x46 &&
26963
+ b[8] === 0x57 &&
26964
+ b[9] === 0x45 &&
26965
+ b[10] === 0x42 &&
26966
+ b[11] === 0x50
26967
+ }
26968
+ ];
26969
+ async function detectImageMime(file) {
26970
+ const slice = file.slice(0, 16);
26971
+ let buf;
26972
+ if (typeof slice.arrayBuffer === 'function') {
26973
+ buf = await slice.arrayBuffer();
26974
+ }
26975
+ else {
26976
+ buf = await new Promise((resolve, reject) => {
26977
+ const reader = new FileReader();
26978
+ reader.onload = () => resolve(reader.result);
26979
+ reader.onerror = () => reject(reader.error);
26980
+ reader.readAsArrayBuffer(slice);
26981
+ });
26982
+ }
26983
+ const bytes = new Uint8Array(buf);
26984
+ for (const item of IMAGE_MIME_BY_MAGIC) {
26985
+ if (item.test(bytes))
26986
+ return item.mime;
26987
+ }
26988
+ return null;
26989
+ }
26990
+ async function readImageSize(file) {
26991
+ if (typeof createImageBitmap === 'function') {
26992
+ try {
26993
+ const bmp = await createImageBitmap(file);
26994
+ const size = { width: bmp.width, height: bmp.height };
26995
+ bmp.close();
26996
+ return size;
26997
+ }
26998
+ catch {
26999
+ /* fall through */
27000
+ }
27001
+ }
27002
+ return new Promise((resolve) => {
27003
+ const url = URL.createObjectURL(file);
27004
+ const img = new Image();
27005
+ img.onload = () => {
27006
+ const size = { width: img.naturalWidth, height: img.naturalHeight };
27007
+ URL.revokeObjectURL(url);
27008
+ resolve(size);
27009
+ };
27010
+ img.onerror = () => {
27011
+ URL.revokeObjectURL(url);
27012
+ resolve(null);
27013
+ };
27014
+ img.src = url;
27015
+ });
27016
+ }
27017
+ function createIdempotencyKey(componentId) {
27018
+ return `${componentId}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
27019
+ }
27020
+
27021
+ const DEMO_RESULT = {
27022
+ id: 'editor-demo-result',
27023
+ imageUrl: 'data:image/svg+xml,' +
27024
+ encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="600" height="800">
27025
+ <rect width="100%" height="100%" fill="#fff6ea"/>
27026
+ <text x="50%" y="48%" text-anchor="middle" font-size="24" fill="#17345f">示例合影邀请函</text>
27027
+ <text x="50%" y="56%" text-anchor="middle" font-size="14" fill="#7a8799">编辑器预览</text>
27028
+ </svg>`),
27029
+ width: 600,
27030
+ height: 800
27031
+ };
27032
+ var script$4 = defineComponent({
27033
+ name: 'uni-guest-ai-wedding-poster',
27034
+ props: {
27035
+ element: {
27036
+ type: Object,
27037
+ required: true
27038
+ },
27039
+ isEditing: {
27040
+ type: Boolean,
27041
+ default: false
27042
+ },
27043
+ env: {
27044
+ type: String,
27045
+ default: 'prd'
27046
+ },
27047
+ invitationId: {
27048
+ type: String,
27049
+ default: ''
27050
+ },
27051
+ global: {
27052
+ type: Object,
27053
+ default: null
27054
+ },
27055
+ guestPosterService: {
27056
+ type: Object,
27057
+ default: null
27058
+ }
27059
+ },
27060
+ emits: ['trigger', 'track', 'error'],
27061
+ setup(props, { emit }) {
27062
+ const injected = inject(GUEST_POSTER_SERVICE_KEY, null);
27063
+ const fileInputRef = ref(null);
27064
+ const sceneId = computed(() => {
27065
+ const fromProp = props.invitationId;
27066
+ if (fromProp)
27067
+ return fromProp;
27068
+ const g = props.global || {};
27069
+ return String(g.sceneId || g.uuid || g.scene_id || '');
27070
+ });
27071
+ const config = computed(() => resolveGuestAIWeddingPosterConfig(props.element));
27072
+ const uiState = ref(props.isEditing ? 'configuring' : 'idle');
27073
+ const guestPhoto = ref(null);
27074
+ const guestPreviewUrl = ref('');
27075
+ const selectedStyleId = ref('');
27076
+ const errorMessage = ref('');
27077
+ const toastText = ref('');
27078
+ const resultList = ref([]);
27079
+ const currentJobId = ref(null);
27080
+ const regenerateUsed = ref(0);
27081
+ const idempotencyKey = ref('');
27082
+ const quotaUsed = ref(0);
27083
+ const quotaMax = ref(100);
27084
+ let pollTimer = null;
27085
+ let pollDelay = 2000;
27086
+ let toastTimer = null;
27087
+ let objectUrlToRevoke = null;
27088
+ const enabledStyles = computed(() => [...config.value.styles]
27089
+ .filter((s) => s.enabled)
27090
+ .sort((a, b) => a.sort - b.sort));
27091
+ const quotaText = computed(() => {
27092
+ const max = quotaMax.value;
27093
+ const used = quotaUsed.value;
27094
+ if (!max)
27095
+ return '';
27096
+ return `本作品还可生成 ${Math.max(0, max - used)} / ${max} 张`;
27097
+ });
27098
+ const regenerateLeft = computed(() => {
27099
+ const max = config.value.result.maxRegenerateCount;
27100
+ if (max === undefined || max === null)
27101
+ return -1;
27102
+ return Math.max(0, max - regenerateUsed.value);
27103
+ });
27104
+ const statusHint = computed(() => {
27105
+ if (uiState.value === 'submitting')
27106
+ return '正在提交…';
27107
+ if (uiState.value === 'queued')
27108
+ return '排队中…';
27109
+ return '正在生成你与新人的专属邀请函…';
27110
+ });
27111
+ const canSubmit = computed(() => {
27112
+ if (props.isEditing)
27113
+ return true;
27114
+ if (['uploading', 'submitting', 'queued', 'generating'].includes(uiState.value))
27115
+ return false;
27116
+ if (!guestPhoto.value || !selectedStyleId.value)
27117
+ return false;
27118
+ if (quotaMax.value > 0 && quotaUsed.value >= quotaMax.value)
27119
+ return false;
27120
+ const inv = config.value.invitationImage;
27121
+ return !!(inv.invitationImageId || inv.invitationImageUrl);
27122
+ });
27123
+ const rootStyle = computed(() => {
27124
+ var _a, _b, _c, _d;
27125
+ const css = props.element.css || {};
27126
+ const appearance = config.value.appearance;
27127
+ const style = {
27128
+ width: typeof css.width === 'number' ? px2rem(css.width) : String(css.width || '100%'),
27129
+ maxWidth: '480px',
27130
+ opacity: String((_a = css.opacity) !== null && _a !== void 0 ? _a : 1),
27131
+ transform: `rotate(${css.transform || 0}deg)`,
27132
+ backgroundColor: appearance.backgroundColor || '#fffaf2',
27133
+ color: appearance.textColor || '#17345f',
27134
+ borderRadius: `${(_b = appearance.borderRadius) !== null && _b !== void 0 ? _b : 20}px`,
27135
+ padding: `${(_c = appearance.paddingY) !== null && _c !== void 0 ? _c : 16}px ${(_d = appearance.paddingX) !== null && _d !== void 0 ? _d : 16}px`,
27136
+ ['--gap-primary']: appearance.primaryColor || '#198cff',
27137
+ position: 'relative'
27138
+ };
27139
+ if (css.height != null && String(css.height) !== 'auto') {
27140
+ style.minHeight = typeof css.height === 'number' ? px2rem(css.height) : String(css.height);
27141
+ }
27142
+ return style;
27143
+ });
27144
+ function track(event, payload) {
27145
+ emit('track', { event, ...(payload || {}) });
27146
+ }
27147
+ function showToast(msg) {
27148
+ toastText.value = msg;
27149
+ if (toastTimer)
27150
+ clearTimeout(toastTimer);
27151
+ toastTimer = setTimeout(() => {
27152
+ toastText.value = '';
27153
+ }, 2200);
27154
+ }
27155
+ function getService() {
27156
+ return resolveGuestPosterService(props.guestPosterService || injected);
27157
+ }
27158
+ function stopPolling() {
27159
+ if (pollTimer) {
27160
+ clearTimeout(pollTimer);
27161
+ pollTimer = null;
27162
+ }
27163
+ pollDelay = 2000;
27164
+ }
27165
+ function schedulePoll() {
27166
+ stopPolling();
27167
+ const hidden = typeof document !== 'undefined' && document.visibilityState === 'hidden';
27168
+ const delay = hidden ? Math.max(pollDelay, 8000) : pollDelay;
27169
+ pollTimer = setTimeout(() => {
27170
+ void pollJob();
27171
+ }, delay);
27172
+ pollDelay = Math.min(Math.floor(pollDelay * 1.35), 12000);
27173
+ }
27174
+ async function pollJob() {
27175
+ const jobId = currentJobId.value;
27176
+ if (!jobId || props.isEditing) {
27177
+ stopPolling();
27178
+ return;
27179
+ }
27180
+ try {
27181
+ const job = await getService().getPosterJob(jobId);
27182
+ applyJob(job);
27183
+ if (job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled') {
27184
+ stopPolling();
27185
+ return;
27186
+ }
27187
+ schedulePoll();
27188
+ }
27189
+ catch {
27190
+ schedulePoll();
27191
+ }
27192
+ }
27193
+ function applyJob(job) {
27194
+ currentJobId.value = job.id;
27195
+ const mapped = mapJobStatusToUi(job.status);
27196
+ if (mapped === 'completed') {
27197
+ uiState.value = 'completed';
27198
+ resultList.value = job.results || [];
27199
+ saveStoredJobId(String(props.element.id), job.id);
27200
+ track('guest_poster_generate_success', { jobId: job.id });
27201
+ void refreshQuota();
27202
+ }
27203
+ else if (mapped === 'failed') {
27204
+ uiState.value = 'failed';
27205
+ errorMessage.value = guestPosterErrorMessage(job.errorCode, job.errorMessage);
27206
+ saveStoredJobId(String(props.element.id), null);
27207
+ track('guest_poster_generate_failed', { code: job.errorCode || 'FAILED' });
27208
+ emit('error', { code: job.errorCode || 'FAILED', message: errorMessage.value });
27209
+ }
27210
+ else {
27211
+ uiState.value = mapped;
27212
+ errorMessage.value = '';
27213
+ }
27214
+ }
27215
+ async function refreshQuota() {
27216
+ const svc = getService();
27217
+ if (!svc.getQuota)
27218
+ return;
27219
+ try {
27220
+ const q = await svc.getQuota(sceneId.value || String(props.element.id));
27221
+ quotaUsed.value = Number(q.used) || 0;
27222
+ quotaMax.value = Number(q.maxPerWork) || 100;
27223
+ }
27224
+ catch {
27225
+ /* ignore */
27226
+ }
27227
+ }
27228
+ function onUploadAreaClick() {
27229
+ if (props.isEditing) {
27230
+ showToast('发布后宾客可上传照片');
27231
+ return;
27232
+ }
27233
+ if (uiState.value === 'uploading')
27234
+ return;
27235
+ triggerFilePick();
27236
+ }
27237
+ function triggerFilePick() {
27238
+ var _a;
27239
+ if (props.isEditing)
27240
+ return;
27241
+ (_a = fileInputRef.value) === null || _a === void 0 ? void 0 : _a.click();
27242
+ }
27243
+ async function onFileChange(ev) {
27244
+ const input = ev.target;
27245
+ const file = input.files && input.files[0];
27246
+ input.value = '';
27247
+ if (!file || props.isEditing)
27248
+ return;
27249
+ errorMessage.value = '';
27250
+ track('guest_photo_upload_start');
27251
+ try {
27252
+ const mime = await detectImageMime(file);
27253
+ const allowed = config.value.upload.allowedTypes;
27254
+ if (!mime || !allowed.includes(mime)) {
27255
+ throw { code: 'UPLOAD_FAILED', message: '仅支持 JPEG / PNG / WebP 图片' };
27256
+ }
27257
+ if (file.size > config.value.upload.maxFileSizeMB * 1024 * 1024) {
27258
+ throw {
27259
+ code: 'UPLOAD_FAILED',
27260
+ message: `照片不能超过 ${config.value.upload.maxFileSizeMB}MB`
27261
+ };
27262
+ }
27263
+ const size = await readImageSize(file);
27264
+ if (size &&
27265
+ ((config.value.upload.minWidth && size.width < config.value.upload.minWidth) ||
27266
+ (config.value.upload.minHeight && size.height < config.value.upload.minHeight))) {
27267
+ throw { code: 'TOO_SMALL', message: guestPosterErrorMessage('TOO_SMALL') };
27268
+ }
27269
+ uiState.value = 'uploading';
27270
+ const uploaded = await getService().uploadGuestPhoto(file, {
27271
+ invitationId: sceneId.value || undefined,
27272
+ componentId: String(props.element.id)
27273
+ });
27274
+ if (objectUrlToRevoke) {
27275
+ URL.revokeObjectURL(objectUrlToRevoke);
27276
+ objectUrlToRevoke = null;
27277
+ }
27278
+ guestPhoto.value = uploaded;
27279
+ if (uploaded.previewUrl) {
27280
+ guestPreviewUrl.value = uploaded.previewUrl;
27281
+ if (uploaded.previewUrl.startsWith('blob:')) {
27282
+ objectUrlToRevoke = uploaded.previewUrl;
27283
+ }
27284
+ }
27285
+ uiState.value = 'photo-ready';
27286
+ track('guest_photo_upload_success');
27287
+ }
27288
+ catch (err) {
27289
+ const e = err;
27290
+ uiState.value = 'failed';
27291
+ errorMessage.value = guestPosterErrorMessage(e === null || e === void 0 ? void 0 : e.code, e === null || e === void 0 ? void 0 : e.message);
27292
+ track('guest_photo_upload_failed', { code: (e === null || e === void 0 ? void 0 : e.code) || 'UPLOAD_FAILED' });
27293
+ emit('error', {
27294
+ code: (e === null || e === void 0 ? void 0 : e.code) || 'UPLOAD_FAILED',
27295
+ message: errorMessage.value,
27296
+ retryable: true
27297
+ });
27298
+ }
27299
+ }
27300
+ function clearPhoto() {
27301
+ if (props.isEditing)
27302
+ return;
27303
+ if (objectUrlToRevoke) {
27304
+ URL.revokeObjectURL(objectUrlToRevoke);
27305
+ objectUrlToRevoke = null;
27306
+ }
27307
+ guestPhoto.value = null;
27308
+ guestPreviewUrl.value = '';
27309
+ uiState.value = 'idle';
27310
+ }
27311
+ function onStyleChange(ev) {
27312
+ const id = ev.target.value;
27313
+ selectedStyleId.value = id;
27314
+ track('guest_poster_style_select', { styleId: id });
27315
+ if (!props.isEditing && uiState.value !== 'completed') {
27316
+ uiState.value = 'configuring';
27317
+ }
27318
+ }
27319
+ async function onGenerateClick() {
27320
+ track('guest_poster_generate_click');
27321
+ if (props.isEditing) {
27322
+ showToast('发布后,宾客可生成专属邀请函');
27323
+ uiState.value = 'completed';
27324
+ resultList.value = [DEMO_RESULT];
27325
+ return;
27326
+ }
27327
+ if (!canSubmit.value) {
27328
+ if (quotaMax.value > 0 && quotaUsed.value >= quotaMax.value) {
27329
+ errorMessage.value = `本作品已达上限(${quotaMax.value} 张)`;
27330
+ }
27331
+ else if (!guestPhoto.value)
27332
+ errorMessage.value = '请先上传照片';
27333
+ else if (!selectedStyleId.value)
27334
+ errorMessage.value = '请选择风格';
27335
+ else
27336
+ errorMessage.value = '请先在编辑器配置婚礼邀请函图片';
27337
+ return;
27338
+ }
27339
+ const style = enabledStyles.value.find((s) => s.id === selectedStyleId.value);
27340
+ if (!style || !guestPhoto.value)
27341
+ return;
27342
+ errorMessage.value = '';
27343
+ uiState.value = 'submitting';
27344
+ if (!idempotencyKey.value) {
27345
+ idempotencyKey.value = createIdempotencyKey(String(props.element.id));
27346
+ }
27347
+ const inv = config.value.invitationImage;
27348
+ try {
27349
+ const job = await getService().createPosterJob({
27350
+ invitationId: sceneId.value || '',
27351
+ componentId: String(props.element.id),
27352
+ guestPhotoAssetId: guestPhoto.value.assetId,
27353
+ guestPhotoUrl: guestPhoto.value.previewUrl || guestPreviewUrl.value || '',
27354
+ invitationImageId: inv.invitationImageId || '',
27355
+ invitationImageUrl: inv.invitationImageUrl || '',
27356
+ styleId: style.id,
27357
+ promptTemplateId: style.promptTemplateId,
27358
+ output: {
27359
+ aspectRatio: config.value.output.aspectRatio,
27360
+ count: config.value.output.count
27361
+ },
27362
+ consent: {
27363
+ accepted: true,
27364
+ acceptedAt: new Date().toISOString(),
27365
+ privacyVersion: 'v1'
27366
+ },
27367
+ idempotencyKey: idempotencyKey.value
27368
+ });
27369
+ saveStoredJobId(String(props.element.id), job.id);
27370
+ applyJob(job);
27371
+ if (job.status !== 'completed' && job.status !== 'failed' && job.status !== 'cancelled') {
27372
+ schedulePoll();
27373
+ }
27374
+ }
27375
+ catch (err) {
27376
+ const e = err;
27377
+ uiState.value = 'failed';
27378
+ errorMessage.value = guestPosterErrorMessage(e === null || e === void 0 ? void 0 : e.code, e === null || e === void 0 ? void 0 : e.message);
27379
+ idempotencyKey.value = '';
27380
+ track('guest_poster_generate_failed', { code: (e === null || e === void 0 ? void 0 : e.code) || 'GENERATE_FAILED' });
27381
+ emit('error', {
27382
+ code: (e === null || e === void 0 ? void 0 : e.code) || 'GENERATE_FAILED',
27383
+ message: errorMessage.value,
27384
+ retryable: true
27385
+ });
27386
+ }
27387
+ }
27388
+ function onRegenerate() {
27389
+ if (props.isEditing)
27390
+ return;
27391
+ if (regenerateLeft.value === 0)
27392
+ return;
27393
+ regenerateUsed.value += 1;
27394
+ idempotencyKey.value = '';
27395
+ uiState.value = 'configuring';
27396
+ resultList.value = [];
27397
+ track('guest_poster_regenerate');
27398
+ }
27399
+ function onDownload() {
27400
+ const first = resultList.value[0];
27401
+ if (!first)
27402
+ return;
27403
+ track('guest_poster_download');
27404
+ if (props.isEditing) {
27405
+ showToast('发布后可下载');
27406
+ return;
27407
+ }
27408
+ try {
27409
+ const a = document.createElement('a');
27410
+ a.href = first.imageUrl;
27411
+ a.download = 'wedding-invitation.png';
27412
+ a.rel = 'noopener';
27413
+ a.target = '_blank';
27414
+ a.click();
27415
+ }
27416
+ catch {
27417
+ showToast('请长按图片保存');
27418
+ }
27419
+ }
27420
+ function onVisibilityChange() {
27421
+ if (typeof document === 'undefined')
27422
+ return;
27423
+ if (document.visibilityState === 'visible' && currentJobId.value) {
27424
+ pollDelay = 2000;
27425
+ void pollJob();
27426
+ }
27427
+ }
27428
+ watch(enabledStyles, (list) => {
27429
+ var _a;
27430
+ if (!selectedStyleId.value && list.length) {
27431
+ selectedStyleId.value = list[0].id;
27432
+ }
27433
+ else if (selectedStyleId.value && !list.some((s) => s.id === selectedStyleId.value)) {
27434
+ selectedStyleId.value = ((_a = list[0]) === null || _a === void 0 ? void 0 : _a.id) || '';
27435
+ }
27436
+ }, { immediate: true });
27437
+ onMounted(() => {
27438
+ track('guest_poster_view');
27439
+ if (typeof document !== 'undefined') {
27440
+ document.addEventListener('visibilitychange', onVisibilityChange);
27441
+ }
27442
+ void refreshQuota();
27443
+ if (props.isEditing)
27444
+ return;
27445
+ const stored = loadStoredJobId(String(props.element.id));
27446
+ if (stored) {
27447
+ currentJobId.value = stored;
27448
+ uiState.value = 'generating';
27449
+ void pollJob();
27450
+ }
27451
+ });
27452
+ onBeforeUnmount(() => {
27453
+ stopPolling();
27454
+ if (toastTimer)
27455
+ clearTimeout(toastTimer);
27456
+ if (objectUrlToRevoke)
27457
+ URL.revokeObjectURL(objectUrlToRevoke);
27458
+ if (typeof document !== 'undefined') {
27459
+ document.removeEventListener('visibilitychange', onVisibilityChange);
27460
+ }
27461
+ });
27462
+ return {
27463
+ config,
27464
+ uiState,
27465
+ guestPreviewUrl,
27466
+ enabledStyles,
27467
+ selectedStyleId,
27468
+ errorMessage,
27469
+ toastText,
27470
+ resultList,
27471
+ regenerateLeft,
27472
+ statusHint,
27473
+ canSubmit,
27474
+ quotaText,
27475
+ rootStyle,
27476
+ fileInputRef,
27477
+ onUploadAreaClick,
27478
+ triggerFilePick,
27479
+ onFileChange,
27480
+ clearPhoto,
27481
+ onStyleChange,
27482
+ onGenerateClick,
27483
+ onRegenerate,
27484
+ onDownload
27485
+ };
27486
+ }
27487
+ });
27488
+
27489
+ const _hoisted_1$4 = ["data-id", "data-pid", "data-type", "data-show"];
27490
+ const _hoisted_2$4 = { class: "gap-inner" };
27491
+ const _hoisted_3$4 = ["src"];
27492
+ const _hoisted_4$4 = /*#__PURE__*/createElementVNode("span", { class: "gap-upload-hint" }, "JPEG / PNG / WebP", -1 /* HOISTED */);
27493
+ const _hoisted_5$4 = {
27494
+ key: 2,
27495
+ class: "gap-upload-actions"
27496
+ };
27497
+ const _hoisted_6$4 = ["value", "disabled"];
27498
+ const _hoisted_7$4 = /*#__PURE__*/createElementVNode("option", {
27499
+ disabled: "",
27500
+ value: ""
27501
+ }, "选择风格", -1 /* HOISTED */);
27502
+ const _hoisted_8$1 = ["value"];
27503
+ const _hoisted_9$1 = {
27504
+ key: 0,
27505
+ class: "gap-status"
27506
+ };
27507
+ const _hoisted_10$1 = /*#__PURE__*/createElementVNode("div", { class: "gap-spinner" }, null, -1 /* HOISTED */);
27508
+ const _hoisted_11$1 = {
27509
+ key: 1,
27510
+ class: "gap-error"
27511
+ };
27512
+ const _hoisted_12$1 = ["disabled"];
27513
+ const _hoisted_13$1 = {
27514
+ key: 2,
27515
+ class: "gap-quota"
27516
+ };
27517
+ const _hoisted_14$1 = {
27518
+ key: 3,
27519
+ class: "gap-editor-badge"
27520
+ };
27521
+ const _hoisted_15$1 = {
27522
+ key: 1,
27523
+ class: "gap-result"
27524
+ };
27525
+ const _hoisted_16$1 = ["src"];
27526
+ const _hoisted_17$1 = { class: "gap-result-actions" };
27527
+ const _hoisted_18$1 = ["disabled"];
27528
+ const _hoisted_19$1 = {
27529
+ key: 0,
27530
+ class: "gap-toast"
27531
+ };
27532
+
27533
+ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
27534
+ return (openBlock(), createElementBlock("div", {
27535
+ class: normalizeClass(["ele-guest-ai-wedding-poster eles", { 'is-compact': !!_ctx.config.appearance.compact }]),
27536
+ "data-id": _ctx.element.id,
27537
+ "data-pid": _ctx.element.pid,
27538
+ "data-type": _ctx.element.type,
27539
+ "data-show": _ctx.element.properties && _ctx.element.properties.visible,
27540
+ style: normalizeStyle(_ctx.rootStyle)
27541
+ }, [
27542
+ createElementVNode("div", _hoisted_2$4, [
27543
+ (_ctx.uiState !== 'completed')
27544
+ ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
27545
+ createCommentVNode(" 1. 上传宾客照片 "),
27546
+ createElementVNode("div", {
27547
+ class: normalizeClass(["gap-upload", { 'is-disabled': _ctx.isEditing || _ctx.uiState === 'uploading' }]),
27548
+ onClick: _cache[3] || (_cache[3] = withModifiers((...args) => (_ctx.onUploadAreaClick && _ctx.onUploadAreaClick(...args)), ["stop"]))
27549
+ }, [
27550
+ (_ctx.guestPreviewUrl)
27551
+ ? (openBlock(), createElementBlock("img", {
27552
+ key: 0,
27553
+ class: "gap-upload-preview",
27554
+ src: _ctx.guestPreviewUrl,
27555
+ alt: ""
27556
+ }, null, 8 /* PROPS */, _hoisted_3$4))
27557
+ : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
27558
+ createElementVNode("span", null, toDisplayString(_ctx.uiState === 'uploading' ? '上传中…' : '上传你的照片'), 1 /* TEXT */),
27559
+ _hoisted_4$4
27560
+ ], 64 /* STABLE_FRAGMENT */)),
27561
+ (_ctx.guestPreviewUrl && !_ctx.isEditing)
27562
+ ? (openBlock(), createElementBlock("div", _hoisted_5$4, [
27563
+ createElementVNode("button", {
27564
+ type: "button",
27565
+ class: "gap-link-btn",
27566
+ onClick: _cache[0] || (_cache[0] = withModifiers((...args) => (_ctx.triggerFilePick && _ctx.triggerFilePick(...args)), ["stop"]))
27567
+ }, "替换"),
27568
+ createElementVNode("button", {
27569
+ type: "button",
27570
+ class: "gap-link-btn",
27571
+ onClick: _cache[1] || (_cache[1] = withModifiers((...args) => (_ctx.clearPhoto && _ctx.clearPhoto(...args)), ["stop"]))
27572
+ }, "删除")
27573
+ ]))
27574
+ : createCommentVNode("v-if", true),
27575
+ createElementVNode("input", {
27576
+ ref: "fileInputRef",
27577
+ type: "file",
27578
+ accept: "image/jpeg,image/png,image/webp",
27579
+ onChange: _cache[2] || (_cache[2] = (...args) => (_ctx.onFileChange && _ctx.onFileChange(...args)))
27580
+ }, null, 544 /* NEED_HYDRATION, NEED_PATCH */)
27581
+ ], 2 /* CLASS */),
27582
+ createCommentVNode(" 2. 风格 select "),
27583
+ createElementVNode("select", {
27584
+ class: "gap-select",
27585
+ value: _ctx.selectedStyleId,
27586
+ disabled: _ctx.isEditing,
27587
+ onClick: _cache[4] || (_cache[4] = withModifiers(() => {}, ["stop"])),
27588
+ onChange: _cache[5] || (_cache[5] = (...args) => (_ctx.onStyleChange && _ctx.onStyleChange(...args)))
27589
+ }, [
27590
+ _hoisted_7$4,
27591
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.enabledStyles, (style) => {
27592
+ return (openBlock(), createElementBlock("option", {
27593
+ key: style.id,
27594
+ value: style.id
27595
+ }, toDisplayString(style.name), 9 /* TEXT, PROPS */, _hoisted_8$1))
27596
+ }), 128 /* KEYED_FRAGMENT */))
27597
+ ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_6$4),
27598
+ (_ctx.uiState === 'queued' || _ctx.uiState === 'generating' || _ctx.uiState === 'submitting')
27599
+ ? (openBlock(), createElementBlock("div", _hoisted_9$1, [
27600
+ _hoisted_10$1,
27601
+ createElementVNode("div", null, toDisplayString(_ctx.statusHint), 1 /* TEXT */)
27602
+ ]))
27603
+ : createCommentVNode("v-if", true),
27604
+ (_ctx.errorMessage)
27605
+ ? (openBlock(), createElementBlock("div", _hoisted_11$1, toDisplayString(_ctx.errorMessage), 1 /* TEXT */))
27606
+ : createCommentVNode("v-if", true),
27607
+ createCommentVNode(" 3. 提交 "),
27608
+ createElementVNode("button", {
27609
+ type: "button",
27610
+ class: normalizeClass(["gap-cta", _ctx.config.appearance.buttonStyle === 'solid' ? 'is-solid' : 'is-gradient']),
27611
+ disabled: !_ctx.canSubmit,
27612
+ onClick: _cache[6] || (_cache[6] = withModifiers((...args) => (_ctx.onGenerateClick && _ctx.onGenerateClick(...args)), ["stop"]))
27613
+ }, toDisplayString(_ctx.config.buttonText || '生成专属邀请函'), 11 /* TEXT, CLASS, PROPS */, _hoisted_12$1),
27614
+ (_ctx.quotaText)
27615
+ ? (openBlock(), createElementBlock("p", _hoisted_13$1, toDisplayString(_ctx.quotaText), 1 /* TEXT */))
27616
+ : createCommentVNode("v-if", true),
27617
+ (_ctx.isEditing)
27618
+ ? (openBlock(), createElementBlock("p", _hoisted_14$1, "编辑器预览 · 邀请函图请在属性面板配置"))
27619
+ : createCommentVNode("v-if", true)
27620
+ ], 64 /* STABLE_FRAGMENT */))
27621
+ : (openBlock(), createElementBlock("div", _hoisted_15$1, [
27622
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.resultList, (item) => {
27623
+ return (openBlock(), createElementBlock("img", {
27624
+ key: item.id,
27625
+ src: item.imageUrl,
27626
+ alt: "婚礼邀请函"
27627
+ }, null, 8 /* PROPS */, _hoisted_16$1))
27628
+ }), 128 /* KEYED_FRAGMENT */)),
27629
+ createElementVNode("div", _hoisted_17$1, [
27630
+ (_ctx.config.result.allowRegenerate)
27631
+ ? (openBlock(), createElementBlock("button", {
27632
+ key: 0,
27633
+ type: "button",
27634
+ class: "gap-secondary-btn",
27635
+ disabled: _ctx.regenerateLeft <= 0 || _ctx.isEditing,
27636
+ onClick: _cache[7] || (_cache[7] = withModifiers((...args) => (_ctx.onRegenerate && _ctx.onRegenerate(...args)), ["stop"]))
27637
+ }, " 重新生成 ", 8 /* PROPS */, _hoisted_18$1))
27638
+ : createCommentVNode("v-if", true),
27639
+ (_ctx.config.result.allowDownload)
27640
+ ? (openBlock(), createElementBlock("button", {
27641
+ key: 1,
27642
+ type: "button",
27643
+ class: "gap-secondary-btn",
27644
+ onClick: _cache[8] || (_cache[8] = withModifiers((...args) => (_ctx.onDownload && _ctx.onDownload(...args)), ["stop"]))
27645
+ }, " 下载 "))
27646
+ : createCommentVNode("v-if", true)
27647
+ ])
27648
+ ]))
27649
+ ]),
27650
+ (_ctx.toastText)
27651
+ ? (openBlock(), createElementBlock("div", _hoisted_19$1, toDisplayString(_ctx.toastText), 1 /* TEXT */))
27652
+ : createCommentVNode("v-if", true)
27653
+ ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1$4))
27654
+ }
27655
+
27656
+ script$4.render = render$4;
27657
+ script$4.__file = "src/components/UniGuestAiWeddingPoster/UniGuestAiWeddingPoster.vue";
26348
27658
 
26349
27659
  /**
26350
27660
  * 应用文字动画 - 用于 WorkRender/H5 等场景
@@ -26629,27 +27939,28 @@ function splitGraphemeClustersFallback(text) {
26629
27939
  var script$3 = defineComponent({
26630
27940
  name: 'WorkRenderH5',
26631
27941
  components: {
26632
- UniMusic: script$p,
26633
- UniText: script$s,
26634
- UniImage: script$r,
26635
- UniShape: script$q,
26636
- UniCalendar: script$n,
26637
- UniMap: script$l,
26638
- UniCountdown: script$m,
26639
- UniEffect: script$j,
26640
- UniVideo: script$o,
26641
- UniCall: script$k,
26642
- UniFormInput: script$f,
26643
- UniFormSubmit: script$e,
26644
- UniFormSelect: script$d,
26645
- UniFormMultiple: script$b,
26646
- UniFormSingle: script$c,
26647
- UniFormContainer: script$a,
26648
- UniBarrage: script$g,
26649
- UniMenu: script$5,
26650
- UniLottie: script$i,
26651
- UniButton: script$h,
26652
- UniWatermark: script$4,
27942
+ UniMusic: script$q,
27943
+ UniText: script$t,
27944
+ UniImage: script$s,
27945
+ UniShape: script$r,
27946
+ UniCalendar: script$o,
27947
+ UniMap: script$m,
27948
+ UniCountdown: script$n,
27949
+ UniEffect: script$k,
27950
+ UniVideo: script$p,
27951
+ UniCall: script$l,
27952
+ UniFormInput: script$g,
27953
+ UniFormSubmit: script$f,
27954
+ UniFormSelect: script$e,
27955
+ UniFormMultiple: script$c,
27956
+ UniFormSingle: script$d,
27957
+ UniFormContainer: script$b,
27958
+ UniBarrage: script$h,
27959
+ UniMenu: script$6,
27960
+ UniLottie: script$j,
27961
+ UniButton: script$i,
27962
+ UniWatermark: script$5,
27963
+ UniGuestAiWeddingPoster: script$4,
26653
27964
  },
26654
27965
  props: {
26655
27966
  workData: {
@@ -26675,8 +27986,8 @@ var script$3 = defineComponent({
26675
27986
  const personalData = computed(() => workData.value.personalData || {});
26676
27987
  const global = computed(() => workData.value.global || {});
26677
27988
  const pages = computed(() => workData.value.pages || []);
26678
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
26679
- const shouldShowWatermark = computed(() => Number(global.value.member_level) === 1);
27989
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
27990
+ const shouldShowWatermark = computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
26680
27991
  // 添加提示框相关状态
26681
27992
  const showMessage = ref(false);
26682
27993
  const messageText = ref('');
@@ -26877,7 +28188,8 @@ var script$3 = defineComponent({
26877
28188
  };
26878
28189
  // 获取组件名称
26879
28190
  const getComponentName = (type) => {
26880
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
28191
+ const base = String(type || '').replace(/^uni-/, '');
28192
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
26881
28193
  };
26882
28194
  return {
26883
28195
  personalData,
@@ -26998,9 +28310,10 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
26998
28310
  global: _ctx.global,
26999
28311
  env: _ctx.env,
27000
28312
  personalData: _ctx.personalData,
28313
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27001
28314
  onTrigger: _ctx.handleElementTrigger,
27002
28315
  onShowMessage: _ctx.handleShowMessage
27003
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28316
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27004
28317
  : createCommentVNode("v-if", true)
27005
28318
  ], 64 /* STABLE_FRAGMENT */))
27006
28319
  }), 128 /* KEYED_FRAGMENT */))
@@ -27051,27 +28364,28 @@ script$3.install = (app) => {
27051
28364
  var script$2 = defineComponent({
27052
28365
  name: 'WorkRenderLong',
27053
28366
  components: {
27054
- UniMusic: script$p,
27055
- UniText: script$s,
27056
- UniImage: script$r,
27057
- UniShape: script$q,
27058
- UniCalendar: script$n,
27059
- UniMap: script$l,
27060
- UniCountdown: script$m,
27061
- UniEffect: script$j,
27062
- UniVideo: script$o,
27063
- UniCall: script$k,
27064
- UniFormInput: script$f,
27065
- UniFormSubmit: script$e,
27066
- UniFormSelect: script$d,
27067
- UniFormMultiple: script$b,
27068
- UniFormSingle: script$c,
27069
- UniFormContainer: script$a,
27070
- UniBarrage: script$g,
27071
- UniMenu: script$5,
27072
- UniLottie: script$i,
27073
- UniButton: script$h,
27074
- UniWatermark: script$4,
28367
+ UniMusic: script$q,
28368
+ UniText: script$t,
28369
+ UniImage: script$s,
28370
+ UniShape: script$r,
28371
+ UniCalendar: script$o,
28372
+ UniMap: script$m,
28373
+ UniCountdown: script$n,
28374
+ UniEffect: script$k,
28375
+ UniVideo: script$p,
28376
+ UniCall: script$l,
28377
+ UniFormInput: script$g,
28378
+ UniFormSubmit: script$f,
28379
+ UniFormSelect: script$e,
28380
+ UniFormMultiple: script$c,
28381
+ UniFormSingle: script$d,
28382
+ UniFormContainer: script$b,
28383
+ UniBarrage: script$h,
28384
+ UniMenu: script$6,
28385
+ UniLottie: script$j,
28386
+ UniButton: script$i,
28387
+ UniWatermark: script$5,
28388
+ UniGuestAiWeddingPoster: script$4,
27075
28389
  },
27076
28390
  props: {
27077
28391
  workData: {
@@ -27093,8 +28407,8 @@ var script$2 = defineComponent({
27093
28407
  const personalData = computed(() => workData.value.personalData || {});
27094
28408
  const global = computed(() => workData.value.global || {});
27095
28409
  const pages = computed(() => workData.value.pages || []);
27096
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
27097
- const shouldShowWatermark = computed(() => Number(global.value.member_level) === 1);
28410
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
28411
+ const shouldShowWatermark = computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
27098
28412
  const page = computed(() => pages.value[0] || {});
27099
28413
  const container = ref(null);
27100
28414
  const content = ref(null);
@@ -27346,7 +28660,8 @@ var script$2 = defineComponent({
27346
28660
  console.log('Element triggered:', payload);
27347
28661
  };
27348
28662
  const getComponentName = (type) => {
27349
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
28663
+ const base = String(type || '').replace(/^uni-/, '');
28664
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
27350
28665
  };
27351
28666
  const handleSubmit = async (formData) => {
27352
28667
  console.log('Form submitted:', formData);
@@ -27504,9 +28819,10 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
27504
28819
  global: _ctx.global,
27505
28820
  env: _ctx.env,
27506
28821
  personalData: _ctx.personalData,
28822
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27507
28823
  onTrigger: _ctx.handleElementTrigger,
27508
28824
  onShowMessage: _ctx.handleShowMessage
27509
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28825
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27510
28826
  : createCommentVNode("v-if", true)
27511
28827
  ], 64 /* STABLE_FRAGMENT */))
27512
28828
  }), 128 /* KEYED_FRAGMENT */))
@@ -27524,9 +28840,10 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
27524
28840
  global: _ctx.global,
27525
28841
  env: _ctx.env,
27526
28842
  personalData: _ctx.personalData,
28843
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
27527
28844
  onTrigger: _ctx.handleElementTrigger,
27528
28845
  onShowMessage: _ctx.handleShowMessage
27529
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
28846
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
27530
28847
  : createCommentVNode("v-if", true)
27531
28848
  ], 64 /* STABLE_FRAGMENT */))
27532
28849
  }), 128 /* KEYED_FRAGMENT */))
@@ -27907,28 +29224,29 @@ script$1.__file = "src/components/UniInvite/UniInvite.vue";
27907
29224
  var script = defineComponent({
27908
29225
  name: 'WorkRender',
27909
29226
  components: {
27910
- UniMusic: script$p,
27911
- UniText: script$s,
27912
- UniImage: script$r,
27913
- UniShape: script$q,
27914
- UniCalendar: script$n,
27915
- UniMap: script$l,
27916
- UniCountdown: script$m,
27917
- UniEffect: script$j,
27918
- UniVideo: script$o,
27919
- UniCall: script$k,
27920
- UniFormInput: script$f,
27921
- UniFormSubmit: script$e,
27922
- UniFormSelect: script$d,
27923
- UniFormMultiple: script$b,
27924
- UniFormSingle: script$c,
27925
- UniFormContainer: script$a,
27926
- UniBarrage: script$g,
27927
- UniMenu: script$5,
27928
- UniLottie: script$i,
27929
- UniButton: script$h,
27930
- UniWatermark: script$4,
29227
+ UniMusic: script$q,
29228
+ UniText: script$t,
29229
+ UniImage: script$s,
29230
+ UniShape: script$r,
29231
+ UniCalendar: script$o,
29232
+ UniMap: script$m,
29233
+ UniCountdown: script$n,
29234
+ UniEffect: script$k,
29235
+ UniVideo: script$p,
29236
+ UniCall: script$l,
29237
+ UniFormInput: script$g,
29238
+ UniFormSubmit: script$f,
29239
+ UniFormSelect: script$e,
29240
+ UniFormMultiple: script$c,
29241
+ UniFormSingle: script$d,
29242
+ UniFormContainer: script$b,
29243
+ UniBarrage: script$h,
29244
+ UniMenu: script$6,
29245
+ UniLottie: script$j,
29246
+ UniButton: script$i,
29247
+ UniWatermark: script$5,
27931
29248
  UniInvite: script$1,
29249
+ UniGuestAiWeddingPoster: script$4,
27932
29250
  },
27933
29251
  props: {
27934
29252
  workData: {
@@ -27966,8 +29284,8 @@ var script = defineComponent({
27966
29284
  }
27967
29285
  return null;
27968
29286
  });
27969
- /** 仅 member_level === 1 显示水印;2、3 及缺省等均不显示 */
27970
- const shouldShowWatermark = computed(() => Number(global.value.member_level) === 1);
29287
+ /** footer_ad !== 0 显示水印;付费去广告后与尾页一起关闭 */
29288
+ const shouldShowWatermark = computed(() => { var _a; return Number((_a = global.value.footer_ad) !== null && _a !== void 0 ? _a : 1) !== 0; });
27971
29289
  // 长页模式
27972
29290
  const container = ref(null);
27973
29291
  const contentRefs = ref({});
@@ -28231,7 +29549,7 @@ var script = defineComponent({
28231
29549
  }
28232
29550
  };
28233
29551
  handleTouchMove = (e) => {
28234
- // 可以在这里添加滑动过程中的处理
29552
+ notifyParentScroll();
28235
29553
  };
28236
29554
  handleTouchEnd = (e) => {
28237
29555
  const touchEndY = e.changedTouches[0].clientY;
@@ -28387,6 +29705,7 @@ var script = defineComponent({
28387
29705
  const pageId = currentPageId.value;
28388
29706
  if (!container.value)
28389
29707
  return;
29708
+ notifyParentScroll();
28390
29709
  const touchY = e.touches[0].clientY;
28391
29710
  const deltaY = (touchY - dragStartYs.value[pageId]) * speedFactor;
28392
29711
  const now = Date.now();
@@ -28602,7 +29921,8 @@ var script = defineComponent({
28602
29921
  };
28603
29922
  // 获取组件名称
28604
29923
  const getComponentName = (type) => {
28605
- return `Uni${type.charAt(0).toUpperCase() + type.slice(1)}`;
29924
+ const base = String(type || '').replace(/^uni-/, '');
29925
+ return 'Uni' + base.split('-').map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('');
28606
29926
  };
28607
29927
  const contentStyle = computed(() => {
28608
29928
  if (global.value.cat === 'long_page') {
@@ -28694,6 +30014,7 @@ var script = defineComponent({
28694
30014
  return;
28695
30015
  if (!container.value)
28696
30016
  return;
30017
+ notifyParentScroll();
28697
30018
  const pageId = currentPageId.value;
28698
30019
  e.preventDefault();
28699
30020
  const delta = e.deltaY;
@@ -28756,6 +30077,17 @@ var script = defineComponent({
28756
30077
  }
28757
30078
  };
28758
30079
  // === IFRAME 页码/翻页通信 ===
30080
+ let lastScrollNotify = 0;
30081
+ function notifyParentScroll() {
30082
+ const now = Date.now();
30083
+ if (now - lastScrollNotify < 80)
30084
+ return;
30085
+ lastScrollNotify = now;
30086
+ try {
30087
+ window.parent && window.parent.postMessage({ type: 'UNIKA_H5_SCROLL' }, '*');
30088
+ }
30089
+ catch { }
30090
+ }
28759
30091
  function postIframePageInfo() {
28760
30092
  const curIdx = pages.value.findIndex(p => p.pageId === currentPageId.value);
28761
30093
  const total = pages.value.length;
@@ -28764,6 +30096,7 @@ var script = defineComponent({
28764
30096
  cur: curIdx,
28765
30097
  count: total
28766
30098
  }, '*');
30099
+ notifyParentScroll();
28767
30100
  }
28768
30101
  function handleIframePageMessage(event) {
28769
30102
  const data = event.data;
@@ -28800,6 +30133,7 @@ var script = defineComponent({
28800
30133
  });
28801
30134
  });
28802
30135
  return {
30136
+ optimizeCssImageUrl,
28803
30137
  personalData,
28804
30138
  global,
28805
30139
  inviteRender,
@@ -28921,7 +30255,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
28921
30255
  class: "page-bg nobg",
28922
30256
  style: normalizeStyle({
28923
30257
  backgroundColor: page.bgColor,
28924
- backgroundImage: page.bgImage
30258
+ backgroundImage: _ctx.env === 'prd' ? _ctx.optimizeCssImageUrl(page.bgImage) : page.bgImage
28925
30259
  })
28926
30260
  }, null, 4 /* STYLE */)
28927
30261
  ], 4 /* STYLE */),
@@ -28939,9 +30273,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
28939
30273
  global: _ctx.global,
28940
30274
  env: _ctx.env,
28941
30275
  personalData: _ctx.personalData,
30276
+ "invitation-id": _ctx.global.sceneId || _ctx.global.uuid || '',
28942
30277
  onTrigger: _ctx.handleElementTrigger,
28943
30278
  onShowMessage: _ctx.handleShowMessage
28944
- }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "onTrigger", "onShowMessage"]))
30279
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["element", "global", "env", "personalData", "invitation-id", "onTrigger", "onShowMessage"]))
28945
30280
  : createCommentVNode("v-if", true)
28946
30281
  ], 64 /* STABLE_FRAGMENT */))
28947
30282
  }), 128 /* KEYED_FRAGMENT */))
@@ -28996,6 +30331,10 @@ script.install = (app) => {
28996
30331
  app.component(script.name, script);
28997
30332
  };
28998
30333
 
30334
+ script$g.install = (app) => {
30335
+ app.component(script$g.name, script$g);
30336
+ };
30337
+
28999
30338
  script$f.install = (app) => {
29000
30339
  app.component(script$f.name, script$f);
29001
30340
  };
@@ -29016,38 +30355,38 @@ script$b.install = (app) => {
29016
30355
  app.component(script$b.name, script$b);
29017
30356
  };
29018
30357
 
29019
- script$a.install = (app) => {
29020
- app.component(script$a.name, script$a);
30358
+ script$6.install = (app) => {
30359
+ app.component(script$6.name, script$6);
29021
30360
  };
29022
30361
 
29023
- script$5.install = (app) => {
29024
- app.component(script$5.name, script$5);
30362
+ script$9.install = (app) => {
30363
+ app.component(script$9.name, script$9);
29025
30364
  };
29026
30365
 
29027
30366
  script$8.install = (app) => {
29028
30367
  app.component(script$8.name, script$8);
29029
30368
  };
29030
30369
 
30370
+ script$a.install = (app) => {
30371
+ app.component(script$a.name, script$a);
30372
+ };
30373
+
29031
30374
  script$7.install = (app) => {
29032
30375
  app.component(script$7.name, script$7);
29033
30376
  };
29034
30377
 
29035
- script$9.install = (app) => {
29036
- app.component(script$9.name, script$9);
30378
+ script$5.install = (app) => {
30379
+ app.component(script$5.name, script$5);
29037
30380
  };
29038
30381
 
29039
- script$6.install = (app) => {
29040
- app.component(script$6.name, script$6);
30382
+ script$1.install = (app) => {
30383
+ app.component(script$1.name, script$1);
29041
30384
  };
29042
30385
 
29043
30386
  script$4.install = (app) => {
29044
30387
  app.component(script$4.name, script$4);
29045
30388
  };
29046
30389
 
29047
- script$1.install = (app) => {
29048
- app.component(script$1.name, script$1);
29049
- };
29050
-
29051
30390
  /** 送呈封面模板 — 开发 fallback,生产由 biz-editor-server 提供 */
29052
30391
  const INVITE_COVER_TEMPLATES = [
29053
30392
  {
@@ -29737,6 +31076,68 @@ const formSubmitDefaultProps = {
29737
31076
  }
29738
31077
  };
29739
31078
 
31079
+ function apiBase() {
31080
+ // vue-cli proxy: /api → biz-editor-server
31081
+ return '/api';
31082
+ }
31083
+ async function parseJson(res) {
31084
+ const body = await res.json().catch(() => ({}));
31085
+ if (!res.ok || (body && typeof body.errno === 'number' && body.errno !== 0)) {
31086
+ const err = new Error((body === null || body === void 0 ? void 0 : body.message) || `HTTP ${res.status}`);
31087
+ err.code = String((body === null || body === void 0 ? void 0 : body.errno) || (body === null || body === void 0 ? void 0 : body.errorCode) || res.status);
31088
+ throw err;
31089
+ }
31090
+ return (body === null || body === void 0 ? void 0 : body.data) !== undefined ? body.data : body;
31091
+ }
31092
+ function createHttpGuestPosterService(options) {
31093
+ const base = ((options === null || options === void 0 ? void 0 : options.baseUrl) || apiBase()).replace(/\/$/, '');
31094
+ return {
31095
+ async uploadGuestPhoto(file, _context) {
31096
+ const form = new FormData();
31097
+ form.append('file', file);
31098
+ const res = await fetch(`${base}/ai-guest-poster/upload`, {
31099
+ method: 'POST',
31100
+ body: form,
31101
+ credentials: 'include'
31102
+ });
31103
+ return parseJson(res);
31104
+ },
31105
+ async createPosterJob(request) {
31106
+ const res = await fetch(`${base}/ai-guest-poster/jobs`, {
31107
+ method: 'POST',
31108
+ headers: { 'Content-Type': 'application/json' },
31109
+ credentials: 'include',
31110
+ body: JSON.stringify(request)
31111
+ });
31112
+ return parseJson(res);
31113
+ },
31114
+ async getPosterJob(jobId) {
31115
+ const res = await fetch(`${base}/ai-guest-poster/jobs/${encodeURIComponent(jobId)}`, {
31116
+ credentials: 'include'
31117
+ });
31118
+ return parseJson(res);
31119
+ },
31120
+ async cancelPosterJob(jobId) {
31121
+ await fetch(`${base}/ai-guest-poster/jobs/${encodeURIComponent(jobId)}/cancel`, {
31122
+ method: 'POST',
31123
+ headers: { 'Content-Type': 'application/json' },
31124
+ credentials: 'include',
31125
+ body: '{}'
31126
+ });
31127
+ },
31128
+ async getQuota(invitationId) {
31129
+ const q = new URLSearchParams({
31130
+ sceneId: invitationId || '',
31131
+ invitationId: invitationId || ''
31132
+ });
31133
+ const res = await fetch(`${base}/ai-guest-poster/config?${q}`, {
31134
+ credentials: 'include'
31135
+ });
31136
+ return parseJson(res);
31137
+ }
31138
+ };
31139
+ }
31140
+
29740
31141
  /** 送呈快捷短语 — 开发/编辑器 fallback;生产环境由 biz-editor-server API 提供 */
29741
31142
  const INVITE_QUICK_PHRASES = [
29742
31143
  '邀请您一道分享我们的喜悦',
@@ -29766,6 +31167,7 @@ function applyTemplateToInviteItem(item, template) {
29766
31167
  }
29767
31168
 
29768
31169
  const components = [
31170
+ script$t,
29769
31171
  script$s,
29770
31172
  script$r,
29771
31173
  script$q,
@@ -29778,23 +31180,23 @@ const components = [
29778
31180
  script$j,
29779
31181
  script$i,
29780
31182
  script$h,
29781
- script$g,
29782
31183
  script$3,
29783
31184
  script$2,
29784
31185
  script,
31186
+ script$g,
29785
31187
  script$f,
29786
31188
  script$e,
29787
31189
  script$d,
29788
31190
  script$c,
29789
31191
  script$b,
29790
- script$a,
29791
- script$5,
31192
+ script$6,
31193
+ script$9,
29792
31194
  script$8,
31195
+ script$a,
29793
31196
  script$7,
29794
- script$9,
29795
- script$6,
29796
- script$4,
29797
- script$1
31197
+ script$5,
31198
+ script$1,
31199
+ script$4
29798
31200
  ];
29799
31201
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
29800
31202
  const install = (app) => {
@@ -29806,4 +31208,4 @@ var index = {
29806
31208
  install
29807
31209
  };
29808
31210
 
29809
- export { INVITE_COVER_TEMPLATES, INVITE_QUICK_PHRASES, script$g as UniBarrage, script$h as UniButton, script$n as UniCalendar, script$k as UniCall, script$m as UniCountdown, script$j as UniEffect, script$a as UniFormContainer, script$f as UniFormInput, script$b as UniFormMultiple, script$d as UniFormSelect, script$c as UniFormSingle, script$e as UniFormSubmit, script$r as UniImage, script$1 as UniInvite, script$i as UniLottie, script$l as UniMap, script$5 as UniMenu, script$6 as UniMenuMap, script$9 as UniMenuReceipt, script$7 as UniMenuTel, script$8 as UniMenuVideo, script$p as UniMusic, script$q as UniShape, script$s as UniText, script$o as UniVideo, script$4 as UniWatermark, script as WorkRender, script$3 as WorkRenderH5, script$2 as WorkRenderLong, applyInviteStateToGlobal, applyTemplateToInviteItem, applyTextAnimation, applyTextAnimationsForPage, buttonDefaultProps, calendarDefaultProps, callDefaultProps, countdownDefaultProps, index as default, effectDefaultProps, formInputDefaultProps, formSubmitDefaultProps, getInviteDismissDelay, getInviteRenderFromGlobal, getInviteTemplateById, install, inviteDefaultProps, isValidInviteItem, lottieDefaultProps, mapDefaultProps, musicDefaultProps, resolveInviteRenderData, restoreTextAnimation, shapeDefaultProps, useInviteManager, videoDefaultProps };
31211
+ export { GUEST_AI_WEDDING_POSTER_TYPE, GUEST_AI_WEDDING_POSTER_VERSION, GUEST_POSTER_SERVICE_KEY, script$4 as GuestAIWeddingPoster, INVITE_COVER_TEMPLATES, INVITE_QUICK_PHRASES, script$h as UniBarrage, script$i as UniButton, script$o as UniCalendar, script$l as UniCall, script$n as UniCountdown, script$k as UniEffect, script$b as UniFormContainer, script$g as UniFormInput, script$c as UniFormMultiple, script$e as UniFormSelect, script$d as UniFormSingle, script$f as UniFormSubmit, script$4 as UniGuestAiWeddingPoster, script$s as UniImage, script$1 as UniInvite, script$j as UniLottie, script$m as UniMap, script$6 as UniMenu, script$7 as UniMenuMap, script$a as UniMenuReceipt, script$8 as UniMenuTel, script$9 as UniMenuVideo, script$q as UniMusic, script$r as UniShape, script$t as UniText, script$p as UniVideo, script$5 as UniWatermark, script as WorkRender, script$3 as WorkRenderH5, script$2 as WorkRenderLong, applyInviteStateToGlobal, applyTemplateToInviteItem, applyTextAnimation, applyTextAnimationsForPage, buttonDefaultProps, calendarDefaultProps, callDefaultProps, countdownDefaultProps, createHttpGuestPosterService, createMockGuestPosterService, index as default, defaultGuestAIWeddingPosterConfig, effectDefaultProps, formInputDefaultProps, formSubmitDefaultProps, getInviteDismissDelay, getInviteRenderFromGlobal, getInviteTemplateById, guestAIWeddingPosterDefaultProps, guestAIWeddingPosterInspectorConfig, guestAIWeddingPosterSchema, install, inviteDefaultProps, isValidInviteItem, lottieDefaultProps, mapDefaultProps, mergeGuestAIWeddingPosterConfig, migrateGuestAIWeddingPosterConfig, musicDefaultProps, resolveGuestAIWeddingPosterConfig, resolveGuestPosterService, resolveInviteRenderData, restoreTextAnimation, shapeDefaultProps, useInviteManager, validateGuestAIWeddingPosterConfig, videoDefaultProps };