ablok-photobooth 0.2.39 → 0.2.41

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.
Files changed (31) hide show
  1. package/dist/ablok-photobooth.js +12 -0
  2. package/dist/chunks/color-booth.vue_vue_type_style_index_0_lang-Cxo8ZMRt.js +98 -0
  3. package/dist/chunks/creative-booth.vue_vue_type_style_index_0_lang-BHKoShl5.js +248 -0
  4. package/dist/chunks/fabric-canvas.vue_vue_type_style_index_0_lang-B-D65X2t.js +318 -0
  5. package/dist/chunks/face-swap.vue_vue_type_style_index_0_lang-B0EJ4Q3T.js +229 -0
  6. package/dist/chunks/media-api-DcCOqndv.js +164 -0
  7. package/dist/chunks/photo-app.vue_vue_type_style_index_0_lang-CQsO0T0U.js +569 -0
  8. package/dist/color-booth.js +4 -0
  9. package/dist/creative-booth.js +6 -0
  10. package/dist/fabric-canvas.js +4 -0
  11. package/dist/face-swap.js +6 -0
  12. package/dist/photo-app.js +4 -0
  13. package/dist/{components → types/components}/creative-booth.vue.d.ts +39 -89
  14. package/dist/{components → types/components}/photo-app.vue.d.ts +2 -2
  15. package/package.json +49 -10
  16. package/dist/App.vue.d.ts +0 -2
  17. package/dist/ablok-photobooth.es.js +0 -1545
  18. package/dist/ablok-photobooth.umd.js +0 -1
  19. package/dist/histoire.setup.d.ts +0 -1
  20. package/dist/i18n.d.ts +0 -77
  21. package/dist/main.d.ts +0 -0
  22. /package/dist/{api → types/api}/media-api.d.ts +0 -0
  23. /package/dist/{components → types/components}/color-booth.vue.d.ts +0 -0
  24. /package/dist/{components → types/components}/fabric-canvas.vue.d.ts +0 -0
  25. /package/dist/{components → types/components}/face-swap.vue.d.ts +0 -0
  26. /package/dist/{components → types/components}/svg-canvas.vue.d.ts +0 -0
  27. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  28. /package/dist/{locales → types/locales}/en.d.ts +0 -0
  29. /package/dist/{utilities → types/utilities}/idb-keyval.d.ts +0 -0
  30. /package/dist/{utilities → types/utilities}/indexed-db-api.d.ts +0 -0
  31. /package/dist/{utilities → types/utilities}/media-helpers.d.ts +0 -0
@@ -1,1545 +0,0 @@
1
- import { defineComponent as AA, getCurrentInstance as QA, computed as H, ref as D, watch as X, onMounted as wA, openBlock as f, createElementBlock as w, normalizeClass as Y, normalizeStyle as G, createVNode as L, unref as B, createCommentVNode as E, createBlock as R, Transition as IA, withCtx as _, createElementVNode as C, withModifiers as q, toDisplayString as P, withDirectives as iA, vShow as cA, Fragment as kA, renderList as SA, createTextVNode as J, renderSlot as bA, onBeforeMount as hA } from "vue";
2
- import { BaseCamera as MA, BaseImage as CA, LoadingSpinner as BA, BaseButton as lA, SvgIcon as Z, InputFile as PA, useCameraFilter as UA, MediaThumbnails as EA, TouchWrapper as OA, ColorPalette as jA } from "ablok-components";
3
- import { useI18n as LA } from "vue-i18n";
4
- import { debounce as TA } from "lodash";
5
- async function FA(A) {
6
- let r = await fetch(A, { mode: "no-cors" }).then((a) => a.blob());
7
- return await new Promise((a) => {
8
- let s = new FileReader();
9
- s.onload = () => a(s.result), s.readAsDataURL(r);
10
- });
11
- }
12
- async function mA(A) {
13
- return await new Promise((r) => {
14
- let a = new FileReader();
15
- a.onload = () => r(a.result), a.readAsDataURL(A);
16
- });
17
- }
18
- function HA(A) {
19
- return new Promise((r, a) => {
20
- const s = new Image();
21
- s.onload = () => r(s), s.onerror = a, s.src = A;
22
- });
23
- }
24
- function YA(A, r = 0, a = 0) {
25
- return new Promise((s, c) => {
26
- const o = new Image();
27
- o.crossOrigin = "anonymous", o.naturalWidth, o.naturalHeight, o.onload = () => {
28
- const g = document.createElement("canvas"), i = g.getContext("2d");
29
- g.width = r, g.height = o.height * r / o.width, i.drawImage(o, 0, 0, g.width, g.height);
30
- const y = g.toDataURL();
31
- s(y);
32
- }, o.src = A;
33
- });
34
- }
35
- function yA(A, r = 1) {
36
- return new Promise((a, s) => {
37
- const c = new Image();
38
- c.crossOrigin = "anonymous", c.onload = () => {
39
- const o = c.naturalWidth, g = c.naturalHeight, i = o / g;
40
- let y = o, h = g;
41
- i > r ? y = g * r : i < r && (h = o / r);
42
- const k = document.createElement("canvas");
43
- k.width = y, k.height = h, k.getContext("2d").drawImage(c, k.width / 2 - c.width / 2, k.height / 2 - c.height / 2), a(k.toDataURL());
44
- }, c.src = A;
45
- });
46
- }
47
- const RA = (A) => {
48
- const r = new FileReader();
49
- return new Promise((a) => {
50
- r.onload = (s) => {
51
- if (!s.target)
52
- return a(0);
53
- const c = s.target, o = new DataView(c.result);
54
- if (o.getUint16(0, !1) != 65496)
55
- return a(-2);
56
- const g = o.byteLength;
57
- let i = 2;
58
- for (; i < g; ) {
59
- if (o.getUint16(i + 2, !1) <= 8) return a(-1);
60
- let y = o.getUint16(i, !1);
61
- if (i += 2, y == 65505) {
62
- if (o.getUint32(i += 2, !1) != 1165519206)
63
- return a(-1);
64
- let h = o.getUint16(i += 6, !1) == 18761;
65
- i += o.getUint32(i + 4, h);
66
- let k = o.getUint16(i, h);
67
- i += 2;
68
- for (let d = 0; d < k; d++)
69
- if (o.getUint16(i + d * 12, h) == 274)
70
- return a(o.getUint16(i + d * 12 + 8, h));
71
- } else {
72
- if ((y & 65280) != 65280)
73
- break;
74
- i += o.getUint16(i, !1);
75
- }
76
- }
77
- return a(-1);
78
- }, r.readAsArrayBuffer(A);
79
- });
80
- };
81
- function VA(A) {
82
- let r = 0;
83
- switch (A) {
84
- // case 1:
85
- // degree = 0;
86
- // break;
87
- // case 2:
88
- // degree = 0;
89
- // break;
90
- // case 3:
91
- // degree = 180;
92
- // break;
93
- // case 4:
94
- // degree = 180;
95
- // break;
96
- // case 5:
97
- // degree = 90;
98
- // break;
99
- // case 6:
100
- // degree = 90;
101
- // break;
102
- // case 7:
103
- // degree = 270;
104
- // break;
105
- // case 8:
106
- // degree = 270;
107
- // break;
108
- case 3:
109
- r = 180;
110
- break;
111
- case 6:
112
- r = 90;
113
- break;
114
- case 8:
115
- r = 270;
116
- break;
117
- default:
118
- r = 0;
119
- }
120
- return r;
121
- }
122
- async function xA(A) {
123
- const r = await RA(A);
124
- return await VA(r);
125
- }
126
- async function GA(A, r) {
127
- const a = await HA(A), s = document.createElement("canvas"), c = s.getContext("2d");
128
- return s.width = a.width, s.height = a.height, c.setTransform(1, 0, 0, 1, s.width / 2, s.height / 2), c.rotate(r), c.drawImage(a, -a.width / 2, -a.height / 2), s.toDataURL();
129
- }
130
- const DA = {
131
- // removeBg: async (endpoint: string, file: { dataUrl: string, resolution?: number }, basePath: string = '/media') => {
132
- // const body = JSON.stringify({
133
- // dataUrl: file.dataUrl,
134
- // removeBackground: true
135
- // });
136
- // const response = await fetch(endpoint, {
137
- // headers: {
138
- // 'Content-Type': 'application/json'
139
- // },
140
- // method: 'POST',
141
- // body
142
- // })
143
- // .then((response) => response.json())
144
- // .catch((error) => [ error ]);
145
- // return await response.dataUrl;
146
- // },
147
- processImage: async (A, r, a = "/media") => {
148
- const s = JSON.stringify({
149
- ...r
150
- });
151
- return await (await fetch(A, {
152
- headers: {
153
- "Content-Type": "application/json"
154
- },
155
- method: "POST",
156
- body: s
157
- }).then((o) => o.json()).catch((o) => [o])).dataUrl;
158
- }
159
- }, _A = "data:image/png;base64,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", zA = { class: "photo-app__drop-target__canvas" }, NA = { class: "flex-grow-1 text-center" }, $A = ["innerHTML"], WA = { class: "ml-2" }, JA = {
160
- key: 0,
161
- class: "d-flex flex-column align-center justify-center"
162
- }, ZA = { key: 0 }, XA = { class: "photo-app__errors mt-2" }, KA = { class: "error--text" }, qA = {
163
- key: 1,
164
- class: "photo-app__file-list"
165
- }, Ae = { class: "row" }, ee = { key: 0 }, te = { key: 1 }, ae = { key: 2 }, oe = { key: 3 }, le = { class: "photo-app__form-input text-center" }, ne = { class: "photo-app__controls" }, re = { class: "row" }, se = { class: "col col-12" }, ie = ["innerHTML"], ce = {
166
- key: 0,
167
- class: "d-flex justify-center col-8 mx-auto"
168
- }, ue = { class: "col" }, de = {
169
- key: 0,
170
- class: "col"
171
- }, ge = {
172
- key: 1,
173
- class: "col"
174
- }, fe = ["required", "value"], xe = /* @__PURE__ */ AA({
175
- __name: "photo-app",
176
- props: {
177
- modelValue: {
178
- type: String,
179
- default: ""
180
- },
181
- enableDragDrop: {
182
- type: Boolean,
183
- default: !0
184
- },
185
- enableLocalFileUpload: {
186
- type: Boolean,
187
- default: !0
188
- },
189
- enableCamera: {
190
- type: Boolean,
191
- default: !0
192
- },
193
- enableSwitchCamera: {
194
- type: Boolean,
195
- default: !1
196
- },
197
- defaultRearCamera: {
198
- type: Boolean,
199
- default: !1
200
- },
201
- enableFileList: {
202
- type: Boolean,
203
- default: !1
204
- },
205
- enableTogglePlay: {
206
- type: Boolean,
207
- default: !1
208
- },
209
- enableButtonIcons: {
210
- type: Boolean,
211
- default: !1
212
- },
213
- enableButtonCaptions: {
214
- type: Boolean,
215
- default: !1
216
- },
217
- enableLegacyInput: {
218
- type: Boolean,
219
- default: !1
220
- },
221
- enableInstantUpload: {
222
- type: Boolean,
223
- default: !1
224
- },
225
- enableAutoSave: {
226
- type: Boolean,
227
- default: !1
228
- },
229
- enableMirrorCamera: {
230
- type: Boolean,
231
- default: !1
232
- },
233
- enableCropImage: {
234
- type: Boolean,
235
- default: !0
236
- },
237
- enableGuide: {
238
- type: Boolean,
239
- default: !1
240
- },
241
- enableTitle: {
242
- type: Boolean,
243
- default: !0
244
- },
245
- enableReview: {
246
- type: Boolean,
247
- default: !0
248
- },
249
- downScaleImages: {
250
- type: Boolean,
251
- default: !1
252
- },
253
- guideSrc: {
254
- type: String,
255
- default: _A
256
- },
257
- acceptButton: {
258
- type: Boolean,
259
- default: ""
260
- },
261
- captureCountdown: {
262
- type: Number,
263
- default: 3
264
- },
265
- backgroundColor: {
266
- type: String,
267
- default: ""
268
- },
269
- color: {
270
- type: String,
271
- default: ""
272
- },
273
- i18n: {},
274
- messages: {
275
- default: () => ({})
276
- },
277
- apiEndpoint: {
278
- type: String,
279
- default: ""
280
- },
281
- apiEndpointSuffix: {
282
- type: String,
283
- default: ""
284
- },
285
- required: {
286
- type: Boolean,
287
- default: !1
288
- },
289
- variant: {
290
- type: String,
291
- default: "light"
292
- },
293
- maxFileSize: {
294
- type: Number,
295
- default: 1024 * 1024
296
- },
297
- fixedResolution: {
298
- type: Number,
299
- default: 1024
300
- },
301
- ratio: {
302
- type: String,
303
- default: "3x4"
304
- },
305
- // enableRemoveBackground: {
306
- // type: Boolean,
307
- // default: false
308
- // },
309
- enableAudio: {
310
- type: Boolean,
311
- default: !1
312
- },
313
- enableSelectDevice: {
314
- type: Boolean,
315
- default: !1
316
- },
317
- enableProcessImage: {
318
- type: Boolean,
319
- default: !1
320
- },
321
- // removeBackground: null,
322
- processImage: null,
323
- filter: String,
324
- tint: Object,
325
- resolutions: Object,
326
- zoom: Number,
327
- enableZoomSlider: {
328
- type: Boolean,
329
- default: !1
330
- }
331
- },
332
- emits: ["update:modelValue"],
333
- setup(A, { emit: r }) {
334
- const { tm: a } = LA(), s = QA(), c = s && s.appContext.config.globalProperties.$config, o = A, g = r, i = H(() => c.baseMediaPath), y = H(() => l.value && l.value.length && l.value.filter((n) => n.response && Object.keys(n.response).length).length === l.value.length), h = H(() => {
335
- const n = l.value.find((p) => p.response && p.response.path);
336
- return n && n.response.path;
337
- }), k = H(() => h.value ? `${i.value}${h.value}` : ""), d = H(() => ({
338
- ...o.i18n ? o.i18n.messages : {},
339
- ...o.messages
340
- }));
341
- H(() => !!(l.value && l.value.length));
342
- const v = H(() => l.value.length ? d.value.reviewTitle : d.value.captureTitle), l = D([]), m = D(), S = D(), u = D(), N = D(!1), M = D(!1), eA = D(), U = D(), F = D(!1), tA = D("");
343
- X(eA, async (n, p) => {
344
- if (n) {
345
- const I = n.blob && n.blob.type.split("/")[1], Q = new File([n.blob], `${n.id}.${I}`), T = await xA(Q), z = await mA(Q), $ = await GA(z, T), x = await (await fetch($)).blob();
346
- l.value.push(new File([x], `${n.id}.${I}`, {
347
- type: x.type
348
- })), F.value = !1, dA();
349
- }
350
- }, { deep: !0 }), X(l, async (n, p) => {
351
- if (o.enableInstantUpload)
352
- n.find((I) => !I.response.path) && (m.value.active = !0);
353
- else {
354
- const I = await Promise.all(n.map(async (Q) => {
355
- let T = await mA(Q);
356
- o.downScaleImages && Number(o.maxFileSize) && Q.size > Number(o.maxFileSize) && (T = await YA(T, 800, 800));
357
- const z = o.ratio.split("x");
358
- return await yA(T, Number(z[0]) / Number(z[1]));
359
- }));
360
- U.value = I[0];
361
- }
362
- }, { deep: !0 }), X(y, async (n, p) => {
363
- n && !p && (U.value = o.enableInstantUpload ? h.value : await yA(k.value));
364
- }, { deep: !0 }), X(U, async (n, p) => {
365
- o.enableAutoSave && U !== p && rA();
366
- });
367
- function nA() {
368
- U.value = "", l.value = [], F.value = !1;
369
- }
370
- function dA() {
371
- M.value = !1;
372
- }
373
- function K() {
374
- nA(), M.value = !M.value;
375
- }
376
- async function gA(n) {
377
- if (!o.filter) {
378
- l.value = n;
379
- return;
380
- }
381
- const { applyFilterToImageBlob: p } = UA({
382
- ...o,
383
- tintColor: o.tint?.color,
384
- tintIntensity: o.tint?.intensity
385
- }), I = await Promise.all((n || []).map(async (Q) => {
386
- const T = Q?.file instanceof File ? Q.file : Q instanceof File ? Q : null;
387
- if (!T)
388
- return Q;
389
- const z = await mA(T), $ = await p(z), V = new File([$], T.name, {
390
- type: $.type || T.type,
391
- lastModified: T.lastModified
392
- });
393
- if (Q?.file instanceof File) {
394
- const x = window.URL || window.webkitURL;
395
- return {
396
- ...Q,
397
- file: V,
398
- size: V.size,
399
- type: V.type,
400
- name: V.name,
401
- blob: x && x.createObjectURL ? x.createObjectURL(V) : Q.blob
402
- };
403
- }
404
- return V;
405
- }));
406
- l.value = I;
407
- }
408
- const rA = (async () => {
409
- F.value = !0, o.enableProcessImage && o.processImage && (U.value = await o.processImage.reduce(async (n, p) => {
410
- const I = await n;
411
- return await fA(I, p);
412
- }, Promise.resolve(U.value))), g("update:modelValue", U.value);
413
- }), fA = (async (n, p) => `${await DA.processImage(
414
- `${p.endpoint}${p.search ? `?${p.search}` : ""}`,
415
- { ...p.body, dataUrl: n, resolution: o.fixedResolution },
416
- p.basePath
417
- )}`);
418
- function sA() {
419
- F.value = !0, S.value?.onCapture();
420
- }
421
- return wA(() => {
422
- ["dragenter", "dragover"].forEach((n) => {
423
- document.body.addEventListener(n, (p) => {
424
- p.preventDefault(), N.value = !0;
425
- }, !1);
426
- }), ["dragleave", "drop"].forEach((n) => {
427
- u.value.addEventListener(n, (p) => {
428
- p.preventDefault(), N.value = !1;
429
- }, !1);
430
- }), ["drop"].forEach((n) => {
431
- u.value.addEventListener(n, (p) => {
432
- p.preventDefault(), N.value = !1;
433
- const I = p.dataTransfer;
434
- (I && Array.from(I.files || []))?.forEach((T) => {
435
- l.value.push(T);
436
- });
437
- }, !1);
438
- });
439
- }), (n, p) => (f(), w("div", {
440
- class: Y(["photo-app", A.variant === "dark" && "theme--dark"])
441
- }, [
442
- A.enableCamera ? (f(), w("div", {
443
- key: 0,
444
- class: "photo-app__canvas media-container",
445
- style: G({
446
- color: A.color,
447
- backgroundColor: A.backgroundColor
448
- })
449
- }, [
450
- M.value ? (f(), w("div", {
451
- key: 0,
452
- class: Y(["photo-app__camera", `${A.ratio ? `aspect-ratio--${A.ratio}` : ""}`]),
453
- style: G({ borderColor: A.color })
454
- }, [
455
- L(B(MA), {
456
- ref_key: "camera",
457
- ref: S,
458
- modelValue: eA.value,
459
- "onUpdate:modelValue": p[0] || (p[0] = (I) => eA.value = I),
460
- "enable-toggle-play": A.enableTogglePlay,
461
- countdown: A.captureCountdown,
462
- "enable-mirror-camera": A.enableMirrorCamera,
463
- "enable-switch-camera": A.enableSwitchCamera,
464
- "default-rear-camera": A.defaultRearCamera,
465
- "enable-guide": A.enableGuide,
466
- "guide-src": A.guideSrc,
467
- "fixed-resolution": A.fixedResolution,
468
- "enable-audio": A.enableAudio,
469
- "enable-select-device": A.enableSelectDevice,
470
- "enable-crop-image": A.enableCropImage,
471
- onOnStopped: K,
472
- "text-color": A.color,
473
- ratio: A.ratio,
474
- resolutions: A.resolutions,
475
- filter: A.filter,
476
- "tint-color": A.tint?.color,
477
- "tint-intensity": A.tint?.intensity,
478
- zoom: A.zoom,
479
- "enable-zoom-slider": A.enableZoomSlider
480
- }, null, 8, ["modelValue", "enable-toggle-play", "countdown", "enable-mirror-camera", "enable-switch-camera", "default-rear-camera", "enable-guide", "guide-src", "fixed-resolution", "enable-audio", "enable-select-device", "enable-crop-image", "text-color", "ratio", "resolutions", "filter", "tint-color", "tint-intensity", "zoom", "enable-zoom-slider"])
481
- ], 6)) : E("", !0),
482
- l.value && l.value.length && !M.value ? (f(), w("div", {
483
- key: 1,
484
- class: "photo-app__preview",
485
- style: G({ borderColor: A.color })
486
- }, [
487
- U.value ? (f(), R(B(CA), {
488
- key: 0,
489
- src: k.value || U.value
490
- }, null, 8, ["src"])) : E("", !0),
491
- L(IA, {
492
- name: "fade",
493
- mode: "out-in"
494
- }, {
495
- default: _(() => [
496
- F.value ? (f(), R(B(BA), { key: 0 })) : E("", !0)
497
- ]),
498
- _: 1
499
- })
500
- ], 4)) : M.value ? E("", !0) : (f(), w("div", {
501
- key: 2,
502
- class: Y(["photo-app__drop-target", `${A.ratio ? `aspect-ratio--${A.ratio}` : ""}`]),
503
- style: G({ borderColor: A.color })
504
- }, [
505
- C("div", zA, [
506
- C("div", NA, [
507
- C("p", {
508
- class: "headline h2 font-weight-bold",
509
- innerHTML: d.value.title || n.$t("fileInput.coverTitle")
510
- }, null, 8, $A),
511
- A.enableCamera ? (f(), R(B(lA), {
512
- key: 0,
513
- type: "button",
514
- onClick: q(K, ["prevent"]),
515
- style: G({ color: A.color }),
516
- icon: "camera",
517
- class: "rounded-pill"
518
- }, {
519
- default: _(() => [
520
- L(B(Z), { symbol: "camera" }),
521
- C("span", WA, P(d.value.launchCamera || n.$t("fileInput.coverLaunchCta")), 1)
522
- ]),
523
- _: 1
524
- }, 8, ["style"])) : E("", !0)
525
- ]),
526
- A.enableLocalFileUpload ? (f(), w("div", JA, [
527
- C("p", {
528
- class: "subtitle fw-bold ma-0",
529
- style: G({ color: A.color })
530
- }, P(d.value.localFileTitle || n.$t("fileInput.coverLocalSelectTitle")), 5),
531
- C("p", {
532
- class: "text-body-1",
533
- style: G({ color: A.color })
534
- }, [
535
- A.enableDragDrop ? (f(), w("span", ZA, P(d.value.dropTarget || n.$t("fileInput.coverDropTarget")) + " " + P(A.enableLocalFileUpload && A.enableDragDrop ? d.value.or || n.$t("common.or") : "") + " " + P(), 1)) : E("", !0),
536
- C("label", {
537
- for: "fileUpload",
538
- role: "button",
539
- class: "d-inline link",
540
- style: G({ color: A.color })
541
- }, P(d.value.coverSelectFileCta || n.$t("fileInput.coverLocalFileCta")), 5)
542
- ], 4)
543
- ])) : E("", !0)
544
- ])
545
- ], 6))
546
- ], 4)) : E("", !0),
547
- iA(C("div", {
548
- class: "photo-app__drop-overlay",
549
- ref_key: "dropArea",
550
- ref: u
551
- }, [
552
- C("h3", null, P(d.value.dropTarget || n.$t("fileInput.dropTargetLabel")), 1)
553
- ], 512), [
554
- [cA, A.enableLocalFileUpload && A.enableDragDrop && N.value]
555
- ]),
556
- iA(C("div", XA, [
557
- C("p", KA, P(tA.value), 1)
558
- ], 512), [
559
- [cA, tA.value]
560
- ]),
561
- A.enableFileList && l.value.length ? (f(), w("div", qA, [
562
- C("div", Ae, [
563
- (f(!0), w(kA, null, SA(l.value, (I) => (f(), w("div", {
564
- key: I.id,
565
- class: "col col-12"
566
- }, [
567
- C("span", null, P(I.name), 1),
568
- p[2] || (p[2] = J(" - ", -1)),
569
- C("span", null, P(I.size), 1),
570
- p[3] || (p[3] = J(" - ", -1)),
571
- I.error ? (f(), w("span", ee, P(I.error), 1)) : I.success ? (f(), w("span", te, P(n.$t("common.success")), 1)) : I.active ? (f(), w("span", ae, P(n.$t("common.active")), 1)) : (f(), w("span", oe))
572
- ]))), 128))
573
- ])
574
- ])) : E("", !0),
575
- iA(C("div", le, [
576
- C("div", ne, [
577
- C("div", re, [
578
- C("div", se, [
579
- bA(n.$slots, "headline", {}, () => [
580
- A.enableTitle && (M.value || l.value.length) ? (f(), w("p", {
581
- key: 0,
582
- class: "headline",
583
- innerHTML: v.value
584
- }, null, 8, ie)) : E("", !0)
585
- ]),
586
- !A.enableLegacyInput && (M.value || l.value.length) ? (f(), w("div", ce, [
587
- C("div", ue, [
588
- M.value || l.value.length && (!m.value || !m.value.active) ? (f(), R(B(lA), {
589
- key: 0,
590
- type: "button",
591
- class: Y(["btn btn-primary-outline rounded-circle", `theme--${A.variant}`]),
592
- onClick: p[1] || (p[1] = q((I) => M.value ? K() : nA(), ["prevent"]))
593
- }, {
594
- default: _(() => [
595
- L(B(Z), {
596
- symbol: "x",
597
- "base-path": B(c).iconSprite,
598
- class: "primary"
599
- }, null, 8, ["base-path"]),
600
- J(" " + P(A.enableButtonCaptions ? d.value.cancel || n.$t("fileInput.cancel") : ""), 1)
601
- ]),
602
- _: 1
603
- }, 8, ["class"])) : E("", !0)
604
- ]),
605
- M.value ? (f(), w("div", de, [
606
- L(B(lA), {
607
- type: "button",
608
- class: Y(["btn btn-primary rounded-circle", `theme--${A.variant}`]),
609
- onClick: q(sA, ["prevent"]),
610
- disabled: F.value
611
- }, {
612
- default: _(() => [
613
- L(B(Z), {
614
- symbol: "camera",
615
- "base-path": B(c).iconSprite
616
- }, null, 8, ["base-path"]),
617
- J(" " + P(A.enableButtonCaptions ? d.value.shoot || n.$t("fileInput.shoot") : ""), 1)
618
- ]),
619
- _: 1
620
- }, 8, ["class", "disabled"])
621
- ])) : A.enableReview ? (f(), w("div", ge, [
622
- L(B(lA), {
623
- type: "button",
624
- class: Y(["btn btn-primary rounded-circle", {
625
- [`theme--${A.variant}`]: A.variant,
626
- "btn-success": F.value
627
- }]),
628
- onClick: q(rA, ["prevent"]),
629
- disabled: F.value
630
- }, {
631
- default: _(() => [
632
- L(B(Z), { symbol: "check" }),
633
- J(" " + P(A.enableButtonCaptions ? d.value.accept || n.$t("common.accept") : ""), 1)
634
- ]),
635
- _: 1
636
- }, 8, ["class", "disabled"])
637
- ])) : E("", !0)
638
- ])) : E("", !0),
639
- iA(C("div", {
640
- class: Y(["justify-center col-10 mx-auto", {
641
- "d-flex": A.enableLegacyInput && (M.value || l.value.length)
642
- }])
643
- }, [
644
- C("button", {
645
- type: "button",
646
- class: Y(["btn btn-primary", `theme--${A.variant}`]),
647
- onClick: q(K, ["prevent"])
648
- }, [
649
- A.enableButtonIcons ? (f(), R(B(Z), {
650
- key: 0,
651
- symbol: "camera"
652
- })) : E("", !0),
653
- J(" " + P(A.enableButtonCaptions ? M.value ? d.value.cancel || n.$t("common.cancel") : d.value.camera || n.$t("fileInput.selectCameraCta") : ""), 1)
654
- ], 2),
655
- M.value && (!n.$refs.upload || m.value.active) ? (f(), R(B(lA), {
656
- key: 0,
657
- type: "button",
658
- class: Y(["btn btn-primary", `theme--${A.variant}`]),
659
- onClick: q(sA, ["prevent"]),
660
- disabled: F.value
661
- }, {
662
- default: _(() => [
663
- A.enableButtonIcons ? (f(), R(B(Z), {
664
- key: 0,
665
- symbol: "camera"
666
- })) : E("", !0),
667
- J(" " + P(A.enableButtonCaptions ? d.value.shoot || n.$t("fileInput.shoot") : ""), 1)
668
- ]),
669
- _: 1
670
- }, 8, ["class", "disabled"])) : E("", !0),
671
- L(B(PA), {
672
- ref_key: "upload",
673
- ref: m,
674
- "model-value": l.value,
675
- id: "fileUpload",
676
- "onUpdate:modelValue": gA,
677
- name: "fileUpload"
678
- }, {
679
- default: _(() => [
680
- bA(n.$slots, "label", {}, () => [
681
- C("label", {
682
- for: "fileUpload",
683
- type: "button",
684
- class: Y(["btn btn-primary", `theme--${A.variant}`])
685
- }, [
686
- A.enableButtonIcons ? (f(), R(B(Z), {
687
- key: 0,
688
- symbol: "camera"
689
- })) : E("", !0)
690
- ], 2)
691
- ])
692
- ]),
693
- _: 3
694
- }, 8, ["model-value"])
695
- ], 2), [
696
- [cA, A.enableLegacyInput && (M.value || l.value.length)]
697
- ]),
698
- A.required ? (f(), w("input", {
699
- key: 1,
700
- ref: "hiddenInput",
701
- required: A.required,
702
- value: U.value,
703
- style: { display: "none" }
704
- }, null, 8, fe)) : E("", !0)
705
- ])
706
- ])
707
- ])
708
- ], 512), [
709
- [cA, M.value || l.value.length]
710
- ])
711
- ], 2));
712
- }
713
- });
714
- function uA(A) {
715
- return new Promise((r, a) => {
716
- A.oncomplete = A.onsuccess = () => r(A.result), A.onabort = A.onerror = () => a(A.error);
717
- });
718
- }
719
- function me(A, r) {
720
- const a = indexedDB.open(A);
721
- a.onupgradeneeded = () => a.result.createObjectStore(r);
722
- const s = uA(a);
723
- return (c, o) => s.then(
724
- (g) => o(g.transaction(r, c).objectStore(r))
725
- );
726
- }
727
- let pA;
728
- function vA() {
729
- return pA || (pA = me("keyval-store", "keyval")), pA;
730
- }
731
- function pe(A, r = vA()) {
732
- return r("readonly", (a) => uA(a.get(A)));
733
- }
734
- function be(A, r, a = vA()) {
735
- return a("readwrite", (s) => (s.put(r, A), uA(s.transaction)));
736
- }
737
- function Ce(A, r = vA()) {
738
- return r("readwrite", (a) => (a.delete(A), uA(a.transaction)));
739
- }
740
- const ve = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23ffffffCC'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20class='feather%20feather-rotate-cw'%3e%3cpolyline%20points='23%204%2023%2010%2017%2010'%3e%3c/polyline%3e%3cpath%20d='M20.49%2015a9%209%200%201%201-2.12-9.36L23%2010'%3e%3c/path%3e%3c/svg%3e", ye = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23ffffffCC'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20class='feather%20feather-x-circle'%3e%3ccircle%20cx='12'%20cy='12'%20r='10'%20fill='none'%3e%3c/circle%3e%3cline%20x1='15'%20y1='9'%20x2='9'%20y2='15'%20fill='none'%3e%3c/line%3e%3cline%20x1='9'%20y1='9'%20x2='15'%20y2='15'%20fill='none'%3e%3c/line%3e%3c/svg%3e", we = { class: "fabric-canvas__canvas" }, Ie = {
741
- id: "fabricCanvas",
742
- ref: "canvasRef"
743
- }, he = /* @__PURE__ */ AA({
744
- __name: "fabric-canvas",
745
- props: {
746
- modelValue: {
747
- type: String,
748
- default: ""
749
- },
750
- jsonModel: {
751
- type: null,
752
- default: void 0
753
- },
754
- exportToSvg: {
755
- type: Boolean,
756
- default: !1
757
- },
758
- resetState: {
759
- type: Boolean,
760
- default: !1
761
- },
762
- options: {
763
- type: Object,
764
- default: () => ({})
765
- },
766
- feature: {
767
- type: String,
768
- default: ""
769
- },
770
- required: {
771
- type: Boolean,
772
- default: !1
773
- },
774
- pending: {
775
- type: Boolean,
776
- default: !1
777
- },
778
- emitPending: {
779
- type: Boolean,
780
- default: !1
781
- },
782
- animationDuration: {
783
- type: Number,
784
- default: 0
785
- }
786
- },
787
- emits: ["update:modelValue", "update:jsonModel", "update:pending", "on-ready"],
788
- setup(A, { expose: r, emit: a }) {
789
- let s, c, o, g, i, y, h, k;
790
- const d = a;
791
- r({ setBackgroundImage: nA, setOverlayImage: K, addCanvasObject: gA });
792
- const v = A, l = D(), m = D(0), S = D(0);
793
- let u, N = !1;
794
- const M = D();
795
- async function eA(e, t) {
796
- return new Promise(async (b) => {
797
- const O = JSON.parse(t);
798
- if (O.backgroundImage) {
799
- const j = await U(O.backgroundImage.src || O.backgroundImage.filename);
800
- j.set({
801
- opacity: 1
802
- }), e.backgroundImage = j, e.centerObject(j);
803
- }
804
- if (O.overlayImage) {
805
- const j = await U(O.overlayImage.src || O.overlayImage.filename);
806
- j.set({
807
- opacity: 1,
808
- left: m.value / 2,
809
- top: S.value / 2,
810
- scaleX: m.value / j.width,
811
- scaleY: S.value / j.height
812
- }), e.overlayImage = j;
813
- }
814
- (await g.enlivenObjects(O.objects, {
815
- reviver: void 0
816
- })).forEach((j) => {
817
- e.add(j);
818
- }), b(e);
819
- });
820
- }
821
- async function U(e) {
822
- const t = await V(e);
823
- e.includes("data:image") || (t.filename = e);
824
- const b = g.findScaleToCover(t, u), O = t instanceof c;
825
- return t.set({
826
- left: 0,
827
- top: 0,
828
- opacity: O && v.animationDuration > 0 ? 0 : 1,
829
- scaleX: b,
830
- scaleY: b,
831
- src: e
832
- }), t;
833
- }
834
- async function F(e) {
835
- !(e instanceof c) || v.animationDuration === 0 || (v.emitPending && d("update:pending", !0), await new Promise((b) => {
836
- const O = v.animationDuration, aA = Date.now(), j = () => {
837
- const oA = Date.now() - aA, W = Math.min(oA / O, 1);
838
- e.set("opacity", W), u.renderAll(), W < 1 ? requestAnimationFrame(j) : (v.emitPending && d("update:pending", !1), b());
839
- };
840
- requestAnimationFrame(j);
841
- }));
842
- }
843
- function tA(e) {
844
- const t = g.findScaleToCover(e, u);
845
- return e.set({
846
- scaleX: t,
847
- scaleY: t
848
- }), e;
849
- }
850
- async function nA(e) {
851
- const t = await U(e.src);
852
- u.backgroundImage = t, u.centerObject(t), u.renderAll(), await F(t), Q();
853
- }
854
- async function dA(e) {
855
- const t = await U(e.src);
856
- t.selectable = !1, t.assetType = "foreground", u.add(t), u.centerObject(t), u.renderAll(), await F(t), Q();
857
- }
858
- async function K(e) {
859
- const t = await U(e.src);
860
- t.set({
861
- left: m.value / 2,
862
- top: S.value / 2,
863
- scaleX: m.value / t.width,
864
- scaleY: S.value / t.height
865
- }), u.overlayImage = t, u.renderAll(), await F(t), Q();
866
- }
867
- async function gA(e) {
868
- u.discardActiveObject();
869
- const t = await V(e.src);
870
- t.filename = e.src;
871
- const b = m.value / 3, O = S.value / 3, aA = b / t.width, j = O / t.height, oA = Math.min(aA, j);
872
- t.set({
873
- scaleX: oA,
874
- scaleY: oA,
875
- left: m.value / 2,
876
- top: S.value / 2
877
- }), t.id = e.id, t.padding = 8, u.add(t), u.setActiveObject(t), await F(t), u.renderAll();
878
- }
879
- function rA(e, t) {
880
- t.target.id;
881
- const b = t.target;
882
- return u.remove(b), u.requestRenderAll(), !0;
883
- }
884
- function fA() {
885
- if (m.value = l.value.offsetWidth, S.value = l.value.offsetHeight, u.setDimensions({ width: m.value, height: S.value }), u.backgroundImage && (u.backgroundImage = tA(u.backgroundImage), u.centerObject(u.backgroundImage)), u.overlayImage) {
886
- const e = u.overlayImage;
887
- e.set({
888
- scaleX: m.value / e.width,
889
- scaleY: S.value / e.height
890
- });
891
- }
892
- u.getObjects().forEach((e) => {
893
- e.assetType === "foreground" && (e = tA(e), u.centerObject(e));
894
- }), u.renderAll();
895
- }
896
- const sA = TA(() => {
897
- fA();
898
- }, 200, { trailing: !0, leading: !1 });
899
- function n(e) {
900
- return (t, b, O, aA, j) => {
901
- t.save(), t.translate(b, O), t.rotate(g.degreesToRadians(j.angle)), t.fillStyle = v.options.themeData?.colors?.primary, t.fillRect(-24 / 2, -24 / 2, 24, 24);
902
- const W = 20;
903
- t.drawImage(e, -W / 2, -W / 2, W, W), t.restore();
904
- };
905
- }
906
- function p() {
907
- const e = document.createElement("img");
908
- e.src = ve;
909
- const t = document.createElement("img");
910
- t.src = ye, u.on("object:added", (b) => {
911
- b.target && b.target.controls && (b.target.set({
912
- transparentCorners: !1,
913
- cornerSize: 16,
914
- cornerStyle: "circle",
915
- ...v.options.themeData?.colors?.primary ? {
916
- cornerColor: v.options.themeData?.colors?.primary,
917
- cornerStrokeColor: v.options.themeData?.colors?.primary,
918
- borderColor: v.options.themeData?.colors?.primary
919
- } : {}
920
- }), b.target.controls.ml.visible = !1, b.target.controls.mr.visible = !1, b.target.controls.mb.visible = !1, b.target.controls.mt.visible = !1, b.target.controls.mtr.visible = !1, b.target.controls.rotate = new o({
921
- x: 0.5,
922
- y: -0.5,
923
- offsetX: 32,
924
- offsetY: 0,
925
- cursorStyle: "pointer",
926
- actionName: "rotate",
927
- actionHandler: k.rotationWithSnapping,
928
- cursorStyleHandler: k.rotationStyleHandler,
929
- render: n(e)
930
- }), b.target.controls.delete = new o({
931
- x: 0.5,
932
- y: -0.5,
933
- offsetX: 32,
934
- offsetY: 32,
935
- cursorStyle: "pointer",
936
- mouseUpHandler: rA,
937
- render: n(t)
938
- }));
939
- });
940
- }
941
- async function I() {
942
- return await new Promise((e) => {
943
- setTimeout(() => {
944
- const t = v.exportToSvg ? u.toSVG() : u.toDataURL({ multiplier: 2 });
945
- e(t);
946
- }, 200);
947
- });
948
- }
949
- function Q() {
950
- setTimeout(async () => {
951
- const e = u.toDatalessJSON(["selectable", "assetType", "filename"]);
952
- await be("fabric-canvas", JSON.stringify(e));
953
- let t = !0;
954
- if (v.required)
955
- switch (t = !1, v.feature) {
956
- case "overlay":
957
- e.overlayImage && (t = !0);
958
- break;
959
- case "background":
960
- e.backgroundImage && (t = !0);
961
- break;
962
- case "stickers":
963
- e.objects.length > 1 && (t = !0);
964
- break;
965
- default:
966
- (e.objects.length > 1 || e.backgroundImage || e.overlayImage) && (t = !0);
967
- }
968
- if (t) {
969
- N = !0;
970
- const b = await I();
971
- d("update:modelValue", b), d("update:jsonModel", e);
972
- }
973
- }, 120);
974
- }
975
- async function T(e) {
976
- try {
977
- return await c.fromURL(e);
978
- } catch (t) {
979
- throw console.error("Error loading image:", t), t;
980
- }
981
- }
982
- async function z(e) {
983
- const { objects: t, options: b } = await i(e);
984
- return g.groupSVGElements(t, b);
985
- }
986
- async function $(e) {
987
- const { objects: t, options: b } = await y(e);
988
- return g.groupSVGElements(t, b);
989
- }
990
- async function V(e) {
991
- return e && typeof e == "string" && e.trim().startsWith("<") ? await $(e) : e && new RegExp(/([\w_/-]*\.svg$)|(image\/svg\+xml)/gi).test(e) ? await z(e) : await T(e);
992
- }
993
- async function x(e, t) {
994
- e && !t && !N && dA({ src: e });
995
- }
996
- return X(() => v.modelValue, async (e, t) => {
997
- x(e, t);
998
- }), wA(async () => {
999
- ({ Canvas: s, FabricImage: c, Control: o, util: g, loadSVGFromURL: i, loadSVGFromString: y, config: h, controlsUtils: k } = await import("fabric")), m.value = l.value.offsetWidth, S.value = l.value.offsetHeight, window.addEventListener("resize", sA), h.NUM_FRACTION_DIGITS = 8;
1000
- const e = s.prototype._onTouchStart;
1001
- s.prototype._onTouchStart = function(t) {
1002
- const b = this.findTarget(t);
1003
- this.allowTouchScrolling && b.assetType && !this.isDrawingMode || e.call(this, t);
1004
- }, u = new s("fabricCanvas", {
1005
- width: m.value,
1006
- height: S.value,
1007
- // enableRetinaScaling: false,
1008
- skipOffscreen: !0,
1009
- // devicePixelRatio: 4,
1010
- allowTouchScrolling: !0
1011
- // backstoreOnly: true
1012
- }), v.resetState && await Ce("fabric-canvas"), M.value = await pe("fabric-canvas"), M.value ? (await eA(u, M.value), u.requestRenderAll(), requestAnimationFrame(() => {
1013
- u.renderAll();
1014
- })) : v.modelValue && x(v.modelValue, ""), u.on("object:added", Q), u.on("object:removed", Q), u.on("object:modified", Q), p(), u.renderAll(), d("on-ready", u);
1015
- }), (e, t) => (f(), w("div", {
1016
- class: "fabric-canvas",
1017
- ref_key: "root",
1018
- ref: l
1019
- }, [
1020
- C("div", we, [
1021
- C("canvas", Ie, null, 512)
1022
- ]),
1023
- bA(e.$slots, "default")
1024
- ], 512));
1025
- }
1026
- }), Be = { class: "creative-booth" }, Ee = { class: "media-container" }, De = ["innerHTML"], Qe = { class: "creative-booth__thumbnails" }, ke = [
1027
- {
1028
- type: "background",
1029
- thumbnail: "/themes/corp/backgrounds/corporate-your-background-1024x1024.jpg",
1030
- src: "/themes/corp/backgrounds/corporate-your-background-1024x1024.jpg",
1031
- mediaType: "image",
1032
- filters: ["asset-01", "asset-02"]
1033
- },
1034
- {
1035
- type: "background",
1036
- thumbnail: "/themes/corp/backgrounds/corp-background-09-white.jpg",
1037
- src: "/themes/corp/backgrounds/corp-background-09-white.jpg",
1038
- mediaType: "image",
1039
- filters: ["asset-01", "asset-02"]
1040
- },
1041
- {
1042
- type: "overlay",
1043
- src: "/themes/corp/overlays/corporate-your-overlay-1024x1024.png",
1044
- mediaType: "image",
1045
- filters: ["asset-01"]
1046
- },
1047
- {
1048
- type: "overlay",
1049
- src: "/themes/corp/overlays/corp-overlay-02-white.png",
1050
- mediaType: "image",
1051
- filters: ["asset-01"]
1052
- },
1053
- {
1054
- type: "object",
1055
- src: "/themes/corp/stickers/corporate-your-sticker-512x512.svg",
1056
- mediaType: "svg",
1057
- filters: ["asset-02"]
1058
- },
1059
- {
1060
- type: "object",
1061
- src: "/themes/corp/stickers/corp-sticker-01.svg",
1062
- mediaType: "svg"
1063
- },
1064
- {
1065
- type: "object",
1066
- src: "/themes/corp/stickers/corp-sticker-02.svg",
1067
- mediaType: "svg",
1068
- filters: ["asset-01", "asset-02"]
1069
- }
1070
- ], Ge = /* @__PURE__ */ AA({
1071
- __name: "creative-booth",
1072
- props: {
1073
- modelValue: {
1074
- default: null
1075
- },
1076
- jsonModel: {
1077
- type: null,
1078
- default: void 0
1079
- },
1080
- config: {
1081
- type: Object,
1082
- default: null
1083
- },
1084
- feature: {
1085
- type: String,
1086
- default: ""
1087
- },
1088
- required: {
1089
- type: Boolean,
1090
- default: !1
1091
- },
1092
- variant: {
1093
- type: String,
1094
- default: "light"
1095
- },
1096
- messages: {
1097
- type: Object,
1098
- default: {}
1099
- },
1100
- assets: {
1101
- type: Array,
1102
- default: () => ke
1103
- },
1104
- assetFilters: {
1105
- type: Array,
1106
- default: () => []
1107
- },
1108
- exportToSvg: {
1109
- type: Boolean,
1110
- default: !1
1111
- },
1112
- resetState: {
1113
- type: Boolean,
1114
- default: !1
1115
- },
1116
- ratio: {
1117
- type: String,
1118
- default: "4x3"
1119
- },
1120
- themeData: {
1121
- type: Object,
1122
- default: () => ({})
1123
- },
1124
- autoSelect: Number,
1125
- ready: {
1126
- type: Boolean,
1127
- default: !1
1128
- },
1129
- pending: {
1130
- type: Boolean,
1131
- default: !1
1132
- },
1133
- emitPending: {
1134
- type: Boolean,
1135
- default: !1
1136
- },
1137
- animationDuration: {
1138
- type: Number,
1139
- default: 320
1140
- }
1141
- },
1142
- emits: ["update:modelValue", "update:jsonModel", "update:ready", "update:pending"],
1143
- setup(A, { emit: r }) {
1144
- const a = A, s = r, c = D(), o = D(), g = D(!1), i = H(
1145
- () => a.assetFilters && a.assetFilters.length > 0 ? a.assets.filter((l) => !l.filters || l.filters.length == 0 || a.assetFilters.some((m) => l.filters.includes(m))) : a.assets
1146
- ), y = H({
1147
- get() {
1148
- return a.modelValue;
1149
- },
1150
- set(l) {
1151
- s("update:modelValue", l);
1152
- }
1153
- }), h = H({
1154
- get() {
1155
- return a.jsonModel;
1156
- },
1157
- set(l) {
1158
- s("update:jsonModel", l);
1159
- }
1160
- }), k = H({
1161
- get() {
1162
- return a.pending;
1163
- },
1164
- set(l) {
1165
- a.ready && s("update:pending", l);
1166
- }
1167
- });
1168
- X(o, async (l, m) => {
1169
- l && l !== m && s("update:modelValue", l);
1170
- }, { deep: !0 });
1171
- function d(l) {
1172
- if (typeof l < "u") {
1173
- const m = i.value[l];
1174
- switch (m.type) {
1175
- case "background":
1176
- c.value?.setBackgroundImage(m);
1177
- break;
1178
- case "overlay":
1179
- c.value.setOverlayImage(m);
1180
- break;
1181
- default:
1182
- c.value.addCanvasObject(m);
1183
- }
1184
- }
1185
- }
1186
- const v = (async () => {
1187
- if (g.value = !0, a.autoSelect !== void 0) {
1188
- const l = a.autoSelect >= 0 ? a.autoSelect : Math.floor(Math.random() * i.value.length);
1189
- d(l);
1190
- }
1191
- s("update:ready", !0);
1192
- });
1193
- return (l, m) => (f(), w("div", Be, [
1194
- C("div", Ee, [
1195
- L(he, {
1196
- modelValue: y.value,
1197
- "onUpdate:modelValue": m[0] || (m[0] = (S) => y.value = S),
1198
- "json-model": h.value,
1199
- "onUpdate:jsonModel": m[1] || (m[1] = (S) => h.value = S),
1200
- pending: k.value,
1201
- "onUpdate:pending": m[2] || (m[2] = (S) => k.value = S),
1202
- ref_key: "canvas",
1203
- ref: c,
1204
- "reset-state": A.resetState,
1205
- options: { themeData: A.themeData },
1206
- feature: A.feature,
1207
- required: A.required,
1208
- class: Y(`${A.ratio ? `aspect-ratio aspect-ratio--${A.ratio}` : ""}`),
1209
- onOnReady: v,
1210
- "emit-pending": A.emitPending,
1211
- "animation-duration": A.animationDuration
1212
- }, null, 8, ["modelValue", "json-model", "pending", "reset-state", "options", "feature", "required", "class", "emit-pending", "animation-duration"])
1213
- ]),
1214
- A.messages.headline ? (f(), w("p", {
1215
- key: 0,
1216
- class: "headline",
1217
- innerHTML: A.messages.headline
1218
- }, null, 8, De)) : E("", !0),
1219
- C("div", Qe, [
1220
- g.value ? (f(), R(B(EA), {
1221
- key: 0,
1222
- assets: i.value,
1223
- onSelect: d
1224
- }, null, 8, ["assets"])) : E("", !0)
1225
- ])
1226
- ]));
1227
- }
1228
- }), Se = { class: "face-swap" }, Me = { class: "position-relative" }, Pe = ["innerHTML"], Ue = { class: "face-swap__thumbnails" }, Oe = [
1229
- {
1230
- type: "target",
1231
- thumbnail: "/faceswap/robotroll._avengers_black_widow_fbe3e886-525d-4c8b-b46c-b32856fae2bf.png",
1232
- src: "/faceswap/robotroll._avengers_black_widow_fbe3e886-525d-4c8b-b46c-b32856fae2bf.png",
1233
- mediaType: "image",
1234
- filters: []
1235
- },
1236
- {
1237
- type: "target",
1238
- thumbnail: "/faceswap/robotroll._batmans_joker_04afa7d0-430d-43f2-a7ce-815c6875a793.png",
1239
- src: "/faceswap/robotroll._batmans_joker_04afa7d0-430d-43f2-a7ce-815c6875a793.png",
1240
- mediaType: "image",
1241
- filters: []
1242
- },
1243
- {
1244
- type: "target",
1245
- thumbnail: "/faceswap/robotroll._catwoman_922f1bfa-9197-4e9a-aaeb-bce5d413a9b9.png",
1246
- src: "/faceswap/robotroll._catwoman_922f1bfa-9197-4e9a-aaeb-bce5d413a9b9.png",
1247
- mediaType: "image",
1248
- filters: []
1249
- },
1250
- {
1251
- type: "target",
1252
- thumbnail: "/faceswap/robotroll._christian_bale_as_american_psycho_abe2d5ab-58e8-4f21-94f9-b2b117af3d89.png",
1253
- src: "/faceswap/robotroll._christian_bale_as_american_psycho_abe2d5ab-58e8-4f21-94f9-b2b117af3d89.png",
1254
- mediaType: "image",
1255
- filters: []
1256
- },
1257
- {
1258
- type: "target",
1259
- thumbnail: "/faceswap/robotroll._dirty_harry_7ce45595-edba-4ef8-a513-39b179d94f57.png",
1260
- src: "/faceswap/robotroll._dirty_harry_7ce45595-edba-4ef8-a513-39b179d94f57.png",
1261
- mediaType: "image",
1262
- filters: []
1263
- },
1264
- {
1265
- type: "target",
1266
- thumbnail: "/faceswap/robotroll._evil_santa_claus_pointing_a_double_barrel_shotgun_at_bf603686-4980-449b-ad88-e8f362850aab.png",
1267
- src: "/faceswap/robotroll._evil_santa_claus_pointing_a_double_barrel_shotgun_at_bf603686-4980-449b-ad88-e8f362850aab.png",
1268
- mediaType: "image",
1269
- filters: []
1270
- },
1271
- {
1272
- type: "target",
1273
- thumbnail: "/faceswap/robotroll._homer_simpson_as_real_person_b14628bf-5a5a-45fe-b35a-e56960de4ad4.png",
1274
- src: "/faceswap/robotroll._homer_simpson_as_real_person_b14628bf-5a5a-45fe-b35a-e56960de4ad4.png",
1275
- mediaType: "image",
1276
- filters: []
1277
- },
1278
- {
1279
- type: "target",
1280
- thumbnail: "/faceswap/robotroll._james_bond_caa0af54-16b2-4d15-9e4d-45cc395c021b.png",
1281
- src: "/faceswap/robotroll._james_bond_caa0af54-16b2-4d15-9e4d-45cc395c021b.png",
1282
- mediaType: "image",
1283
- filters: []
1284
- },
1285
- {
1286
- type: "target",
1287
- thumbnail: "/faceswap/robotroll._neil_gaimans_sandman_d3ca51cd-2ef8-46d5-b1db-1474789783a4.png",
1288
- src: "/faceswap/robotroll._neil_gaimans_sandman_d3ca51cd-2ef8-46d5-b1db-1474789783a4.png",
1289
- mediaType: "image",
1290
- filters: []
1291
- },
1292
- {
1293
- type: "target",
1294
- thumbnail: "/faceswap/robotroll._pennywise_3f4c5997-9fd2-43e0-ab9b-17384fb58da9.png",
1295
- src: "/faceswap/robotroll._pennywise_3f4c5997-9fd2-43e0-ab9b-17384fb58da9.png",
1296
- mediaType: "image",
1297
- filters: []
1298
- },
1299
- {
1300
- type: "target",
1301
- thumbnail: "/faceswap/robotroll._queen_of_hearts_8de84ac6-3f61-4981-ac92-c63d90d63890.png",
1302
- src: "/faceswap/robotroll._queen_of_hearts_8de84ac6-3f61-4981-ac92-c63d90d63890.png",
1303
- mediaType: "image",
1304
- filters: []
1305
- },
1306
- {
1307
- type: "target",
1308
- thumbnail: "/faceswap/robotroll._red_dead_redemptions_arthur_morgan_portrait_36f8a066-6c2b-4a23-9c5e-a2a3964b0d3b.png",
1309
- src: "/faceswap/robotroll._red_dead_redemptions_arthur_morgan_portrait_36f8a066-6c2b-4a23-9c5e-a2a3964b0d3b.png",
1310
- mediaType: "image",
1311
- filters: []
1312
- },
1313
- {
1314
- type: "target",
1315
- thumbnail: "/faceswap/robotroll._thanos_38adb80e-08ac-49d4-95e0-d4d11cb5a11d.png",
1316
- src: "/faceswap/robotroll._thanos_38adb80e-08ac-49d4-95e0-d4d11cb5a11d.png",
1317
- mediaType: "image",
1318
- filters: []
1319
- },
1320
- {
1321
- type: "target",
1322
- thumbnail: "/faceswap/robotroll._the_godfather_062db832-61ce-4d18-a09d-045cadd4e281.png",
1323
- src: "/faceswap/robotroll._the_godfather_062db832-61ce-4d18-a09d-045cadd4e281.png",
1324
- mediaType: "image",
1325
- filters: []
1326
- },
1327
- {
1328
- type: "target",
1329
- thumbnail: "/faceswap/robotroll._wolverine_3f9cece6-e490-4be8-a5f9-d6e6abf0440f.png",
1330
- src: "/faceswap/robotroll._wolverine_3f9cece6-e490-4be8-a5f9-d6e6abf0440f.png",
1331
- mediaType: "image",
1332
- filters: []
1333
- }
1334
- ], _e = /* @__PURE__ */ AA({
1335
- __name: "face-swap",
1336
- props: {
1337
- modelValue: {
1338
- default: null
1339
- },
1340
- config: {
1341
- type: Object,
1342
- default: null
1343
- },
1344
- variant: {
1345
- type: String,
1346
- default: "light"
1347
- },
1348
- messages: {
1349
- type: Object,
1350
- default: {}
1351
- },
1352
- assets: {
1353
- type: Array,
1354
- default: () => Oe
1355
- },
1356
- resetState: {
1357
- type: Boolean,
1358
- default: !1
1359
- },
1360
- ratio: {
1361
- type: String,
1362
- default: "4x3"
1363
- },
1364
- endpoint: {
1365
- type: String,
1366
- default: "/faceswap-json"
1367
- },
1368
- autoSelect: Number
1369
- },
1370
- emits: ["update:modelValue"],
1371
- setup(A, { emit: r }) {
1372
- const a = A, s = r, c = D(), o = D(), g = D(), i = D(!1);
1373
- H({
1374
- get() {
1375
- return a.modelValue;
1376
- },
1377
- set(d) {
1378
- s("update:modelValue", d);
1379
- }
1380
- });
1381
- const y = H(() => g.value || c.value && c.value.src || o.value);
1382
- X(g, async (d, v) => {
1383
- d && d !== v && s("update:modelValue", d);
1384
- }, { deep: !0 });
1385
- function h(d) {
1386
- if (typeof d < "u") {
1387
- const v = a.assets[d];
1388
- c.value = v, g.value = null;
1389
- }
1390
- }
1391
- async function k() {
1392
- const d = await FA(c.value.src), l = { dataUrl: a.modelValue, targetDataUrl: d };
1393
- i.value = !0;
1394
- const m = DA;
1395
- g.value = await m.processImage(
1396
- a.endpoint,
1397
- l,
1398
- ""
1399
- ), i.value = !1;
1400
- }
1401
- return hA(() => {
1402
- o.value = a.modelValue;
1403
- }), (d, v) => (f(), w("div", Se, [
1404
- C("div", Me, [
1405
- C("div", {
1406
- class: Y(["media-container", `${A.ratio ? `ratio ratio-${A.ratio}` : ""}`])
1407
- }, [
1408
- L(IA, {
1409
- name: "fade",
1410
- mode: "out-in"
1411
- }, {
1412
- default: _(() => [
1413
- (f(), w("div", { key: y.value }, [
1414
- L(B(CA), { src: y.value }, null, 8, ["src"])
1415
- ]))
1416
- ]),
1417
- _: 1
1418
- })
1419
- ], 2),
1420
- c.value ? (f(), w("button", {
1421
- key: 0,
1422
- type: "button",
1423
- class: "btn face-swap__swap-face",
1424
- onClick: k
1425
- }, [
1426
- o.value && !g.value && !i.value ? (f(), R(B(CA), {
1427
- key: 0,
1428
- src: o.value,
1429
- class: "img-thumbnail"
1430
- }, null, 8, ["src"])) : E("", !0)
1431
- ])) : E("", !0),
1432
- i.value ? (f(), R(B(BA), { key: 1 })) : E("", !0)
1433
- ]),
1434
- A.messages.headline ? (f(), w("p", {
1435
- key: 0,
1436
- class: "headline",
1437
- innerHTML: A.messages.headline
1438
- }, null, 8, Pe)) : E("", !0),
1439
- C("div", Ue, [
1440
- L(B(EA), {
1441
- assets: A.assets,
1442
- onSelect: h
1443
- }, null, 8, ["assets"])
1444
- ])
1445
- ]));
1446
- }
1447
- }), je = ["innerHTML"], Le = /* @__PURE__ */ AA({
1448
- __name: "svg-canvas",
1449
- props: {
1450
- modelValue: {
1451
- default: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"/>',
1452
- type: String
1453
- },
1454
- scale: {
1455
- type: Number,
1456
- default: 1
1457
- },
1458
- fillColor: String,
1459
- groupedFill: Boolean
1460
- },
1461
- emits: ["update:modelValue"],
1462
- setup(A, { emit: r }) {
1463
- const a = A, s = r, c = D();
1464
- function o(g) {
1465
- const i = g.target;
1466
- if (!i.closest(".read-only")) {
1467
- if (a.groupedFill && a.fillColor) {
1468
- const v = i.closest("[data-group-class]").dataset.groupClass, l = i.closest("svg")?.querySelectorAll(`.${v}`);
1469
- l && Array.from(l).forEach((m) => {
1470
- m.setAttribute("fill", a.fillColor), m.setAttribute("fill-opacity", "1");
1471
- });
1472
- } else a.fillColor && (i.setAttribute("fill", a.fillColor), i.setAttribute("fill-opacity", "1"));
1473
- const k = i.closest(".svg-canvas").querySelector("svg").outerHTML;
1474
- s("update:modelValue", k);
1475
- }
1476
- }
1477
- return (g, i) => (f(), w("div", {
1478
- class: Y(["svg-canvas", `${A.scale > 1 ? "overflow-scroll" : ""}`])
1479
- }, [
1480
- C("div", {
1481
- ref_key: "svg",
1482
- ref: c,
1483
- class: "svg-wrapper",
1484
- innerHTML: A.modelValue,
1485
- style: G({ transform: `scale(${A.scale})` }),
1486
- onClick: i[0] || (i[0] = (y) => o(y))
1487
- }, null, 12, je)
1488
- ], 2));
1489
- }
1490
- }), Te = { class: "svg-editor" }, Fe = { class: "svg-editor__frame" }, ze = /* @__PURE__ */ AA({
1491
- __name: "color-booth",
1492
- props: {
1493
- modelValue: String,
1494
- name: String,
1495
- src: String,
1496
- required: Boolean,
1497
- colors: Array,
1498
- groupedFill: Boolean
1499
- },
1500
- emits: ["update:modelValue"],
1501
- setup(A, { emit: r }) {
1502
- const a = A, s = r, c = D(""), o = D(1), g = H({
1503
- get() {
1504
- return a.modelValue;
1505
- },
1506
- set(i) {
1507
- s("update:modelValue", i);
1508
- }
1509
- });
1510
- return hA(() => {
1511
- c.value = a.colors?.length ? a.colors[0] : "";
1512
- }), (i, y) => (f(), w("div", Te, [
1513
- C("div", Fe, [
1514
- L(B(OA), {
1515
- modelValue: o.value,
1516
- "onUpdate:modelValue": y[1] || (y[1] = (h) => o.value = h)
1517
- }, {
1518
- default: _(() => [
1519
- L(Le, {
1520
- modelValue: g.value,
1521
- "onUpdate:modelValue": y[0] || (y[0] = (h) => g.value = h),
1522
- fillColor: c.value,
1523
- scale: o.value,
1524
- "grouped-fill": A.groupedFill
1525
- }, null, 8, ["modelValue", "fillColor", "scale", "grouped-fill"])
1526
- ]),
1527
- _: 1
1528
- }, 8, ["modelValue"]),
1529
- L(B(jA), {
1530
- modelValue: c.value,
1531
- "onUpdate:modelValue": y[2] || (y[2] = (h) => c.value = h),
1532
- colors: A.colors,
1533
- class: "mt-2"
1534
- }, null, 8, ["modelValue", "colors"])
1535
- ])
1536
- ]));
1537
- }
1538
- });
1539
- export {
1540
- ze as ColorBooth,
1541
- Ge as CreativeBooth,
1542
- he as FabricCanvas,
1543
- _e as FaceSwap,
1544
- xe as PhotoApp
1545
- };