ablok-components 0.3.74 → 0.3.76
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.
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { debounce as
|
|
3
|
-
import
|
|
1
|
+
import { defineComponent as tt, ref as d, computed as m, watch as De, onMounted as at, nextTick as it, onBeforeUnmount as nt, openBlock as y, createElementBlock as b, normalizeClass as ue, createElementVNode as p, createVNode as de, withCtx as ot, createCommentVNode as x, withDirectives as Me, normalizeStyle as ve, vShow as xe, toDisplayString as he, createBlock as lt, withModifiers as rt } from "vue";
|
|
2
|
+
import { debounce as st } from "lodash";
|
|
3
|
+
import ct from "../../atoms/loading-spinner/loading-spinner.vue.js";
|
|
4
4
|
/* empty css */
|
|
5
|
-
import
|
|
5
|
+
import ut from "../../atoms/svg-icon/svg-icon.vue.js";
|
|
6
6
|
/* empty css */
|
|
7
|
-
import
|
|
7
|
+
import dt from "../input-dropdown/input-dropdown.vue.js";
|
|
8
8
|
/* empty css */
|
|
9
|
-
import { dataURItoBlob as
|
|
10
|
-
import { useCameraFilter as
|
|
11
|
-
import
|
|
9
|
+
import { dataURItoBlob as vt } from "../../../utilities/helpers.js";
|
|
10
|
+
import { useCameraFilter as ht } from "../../../composables/useCameraFilter.js";
|
|
11
|
+
import mt from "../../atoms/zoom-slider/zoom-slider.vue.js";
|
|
12
12
|
/* empty css */
|
|
13
|
-
import
|
|
14
|
-
const
|
|
13
|
+
import ft from "../../../assets/img/guide.png.js";
|
|
14
|
+
const wt = { class: "camera__preview" }, gt = {
|
|
15
15
|
key: 0,
|
|
16
16
|
class: "camera__bg-notification"
|
|
17
|
-
},
|
|
17
|
+
}, pt = ["innerHTML"], yt = ["width", "height"], bt = {
|
|
18
18
|
key: 1,
|
|
19
19
|
class: "camera__countdown-overlay"
|
|
20
|
-
},
|
|
20
|
+
}, _t = ["innerHTML", "data-countdown"], Et = ["src"], Ct = {
|
|
21
21
|
key: 3,
|
|
22
22
|
class: "camera__zoom-slider"
|
|
23
|
-
},
|
|
23
|
+
}, It = { class: "camera__controls" }, St = { class: "container" }, kt = { class: "row" }, Dt = { class: "col" }, Mt = { class: "btn-group" }, xt = { key: 0 }, Ot = { key: 1 }, Rt = {
|
|
24
24
|
key: 0,
|
|
25
25
|
class: "camera__select-device"
|
|
26
|
-
},
|
|
26
|
+
}, Lt = { class: "col" }, Tt = { class: "" }, At = {
|
|
27
27
|
name: "BaseCamera",
|
|
28
28
|
inheritAttrs: !1
|
|
29
|
-
},
|
|
29
|
+
}, Oe = {
|
|
30
30
|
"1x1": { width: 720, height: 720 },
|
|
31
31
|
"2x3": { width: 720, height: 1080 },
|
|
32
32
|
"3x2": { width: 1080, height: 720 },
|
|
@@ -36,8 +36,8 @@ const tt = { class: "camera__preview" }, at = {
|
|
|
36
36
|
"5x4": { width: 1200, height: 960 },
|
|
37
37
|
"16x9": { width: 1280, height: 720 },
|
|
38
38
|
"9x16": { width: 720, height: 1280 }
|
|
39
|
-
},
|
|
40
|
-
...
|
|
39
|
+
}, Kt = /* @__PURE__ */ tt({
|
|
40
|
+
...At,
|
|
41
41
|
props: {
|
|
42
42
|
modelValue: {
|
|
43
43
|
type: null
|
|
@@ -60,7 +60,7 @@ const tt = { class: "camera__preview" }, at = {
|
|
|
60
60
|
},
|
|
61
61
|
guideSrc: {
|
|
62
62
|
type: String,
|
|
63
|
-
default: () =>
|
|
63
|
+
default: () => ft
|
|
64
64
|
},
|
|
65
65
|
countdown: {
|
|
66
66
|
type: Number,
|
|
@@ -73,7 +73,7 @@ const tt = { class: "camera__preview" }, at = {
|
|
|
73
73
|
filter: {
|
|
74
74
|
type: String,
|
|
75
75
|
default: "none",
|
|
76
|
-
validator: (
|
|
76
|
+
validator: (f) => ["none", "grayscale", "sepia"].includes(f)
|
|
77
77
|
},
|
|
78
78
|
tintColor: {
|
|
79
79
|
type: String,
|
|
@@ -97,7 +97,7 @@ const tt = { class: "camera__preview" }, at = {
|
|
|
97
97
|
},
|
|
98
98
|
resolutions: {
|
|
99
99
|
type: Object,
|
|
100
|
-
default: () =>
|
|
100
|
+
default: () => Oe
|
|
101
101
|
},
|
|
102
102
|
zoom: {
|
|
103
103
|
type: Number,
|
|
@@ -113,345 +113,422 @@ const tt = { class: "camera__preview" }, at = {
|
|
|
113
113
|
}
|
|
114
114
|
},
|
|
115
115
|
emits: ["update:modelValue"],
|
|
116
|
-
setup(
|
|
117
|
-
const
|
|
118
|
-
let
|
|
119
|
-
const
|
|
120
|
-
function
|
|
116
|
+
setup(f, { expose: Re, emit: Le }) {
|
|
117
|
+
const s = f, Te = Le, i = d(), n = d(), me = d(!1), U = d([]), c = d(), O = d(), R = d(!1), Z = d(!1), K = d(0), X = d(0), I = d(), v = d(s.zoom || 1), fe = d(!1), A = d(!1), ae = d(null), ie = d(!1);
|
|
118
|
+
let z, S;
|
|
119
|
+
const Ae = typeof window < "u" && "DeviceMotionEvent" in window && (window.matchMedia?.("(pointer: coarse)")?.matches || "ontouchstart" in window), we = m(() => s.correctOrientation && Ae), ne = m(() => me.value && (!we.value || ie.value));
|
|
120
|
+
function oe() {
|
|
121
121
|
S && (window.removeEventListener("pointerdown", S, !0), window.removeEventListener("touchend", S, !0), S = void 0);
|
|
122
122
|
}
|
|
123
|
-
function
|
|
124
|
-
|
|
123
|
+
function J() {
|
|
124
|
+
ie.value = !0, z && (clearTimeout(z), z = void 0), oe();
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function ze() {
|
|
127
127
|
S || (S = () => {
|
|
128
|
-
|
|
128
|
+
le();
|
|
129
129
|
}, window.addEventListener("pointerdown", S, !0), window.addEventListener("touchend", S, !0));
|
|
130
130
|
}
|
|
131
|
-
function
|
|
131
|
+
function ge(e) {
|
|
132
132
|
const t = e.accelerationIncludingGravity;
|
|
133
133
|
if (!t || t.x == null || t.y == null) return;
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
136
|
-
|
|
134
|
+
const a = Math.round(Math.atan2(t.x, t.y) * 180 / Math.PI);
|
|
135
|
+
if (ae.value = a, !(typeof screen < "u" && screen.orientation && screen.orientation.type || "portrait-primary").startsWith("portrait"))
|
|
136
|
+
A.value = !1;
|
|
137
137
|
else {
|
|
138
|
-
const
|
|
139
|
-
!
|
|
138
|
+
const h = Math.abs(Math.abs(a) - 90);
|
|
139
|
+
!A.value && h < 40 ? A.value = !0 : A.value && h > 50 && (A.value = !1);
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
ie.value || J();
|
|
142
142
|
}
|
|
143
|
-
async function
|
|
144
|
-
if (!(!
|
|
143
|
+
async function le() {
|
|
144
|
+
if (!(!s.correctOrientation || fe.value))
|
|
145
145
|
try {
|
|
146
146
|
const e = window.DeviceOrientationEvent, t = window.DeviceMotionEvent;
|
|
147
147
|
if (e && typeof e.requestPermission == "function" && await e.requestPermission() !== "granted") {
|
|
148
|
-
|
|
148
|
+
J();
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
t && typeof t.requestPermission == "function" && await t.requestPermission().catch(() => {
|
|
152
|
-
}), window.addEventListener("devicemotion",
|
|
152
|
+
}), window.addEventListener("devicemotion", ge, !0), fe.value = !0, oe();
|
|
153
153
|
} catch (e) {
|
|
154
|
-
console.error(e, "enableMotion: failed"),
|
|
154
|
+
console.error(e, "enableMotion: failed"), J();
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
-
const
|
|
158
|
-
function
|
|
157
|
+
const W = m(() => ({ ...Oe, ...s.resolutions })), Ve = m(() => Object.values(W.value)[0]);
|
|
158
|
+
function $e(e) {
|
|
159
159
|
return String(e || "").trim().toLowerCase().replace(/\s+/g, "").replace(/[:/]/g, "x");
|
|
160
160
|
}
|
|
161
|
-
const
|
|
162
|
-
if (
|
|
163
|
-
return
|
|
164
|
-
const e =
|
|
165
|
-
if (
|
|
161
|
+
const k = m(() => {
|
|
162
|
+
if (W.value[s.ratio])
|
|
163
|
+
return s.ratio;
|
|
164
|
+
const e = $e(s.ratio);
|
|
165
|
+
if (W.value[e])
|
|
166
166
|
return e;
|
|
167
|
-
}),
|
|
168
|
-
const e =
|
|
167
|
+
}), L = m(() => k.value ? W.value[k.value] : Ve.value), Be = m(() => {
|
|
168
|
+
const e = k.value ? W.value[k.value] : void 0;
|
|
169
169
|
return e ? `${e.width} / ${e.height}` : void 0;
|
|
170
|
-
}),
|
|
170
|
+
}), D = m(() => U.value.filter((e) => e.kind === "videoinput")), pe = m(() => U.value.filter((e) => e.kind === "audioinput")), j = d([]), Q = m(() => D.value.filter((e) => !j.value.includes(e.deviceId)));
|
|
171
|
+
function He(e) {
|
|
172
|
+
e && !j.value.includes(e) && (j.value = [...j.value, e]);
|
|
173
|
+
}
|
|
174
|
+
function ye(e) {
|
|
175
|
+
const t = D.value;
|
|
176
|
+
if (!t.length) return;
|
|
177
|
+
const a = t.findIndex((o) => o.deviceId === e);
|
|
178
|
+
for (let o = 1; o <= t.length; o++) {
|
|
179
|
+
const w = t[(Math.max(a, 0) + o) % t.length];
|
|
180
|
+
if (w && !j.value.includes(w.deviceId))
|
|
181
|
+
return w;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const Ue = m(() => Q.value.map((e, t) => ({
|
|
171
185
|
text: e.label.slice(0, e.label.indexOf("(")) || `Camera ${t + 1}`,
|
|
172
186
|
value: e.deviceId
|
|
173
|
-
}))),
|
|
187
|
+
}))), be = m({
|
|
174
188
|
get() {
|
|
175
|
-
return
|
|
189
|
+
return c.value && c.value.deviceId;
|
|
176
190
|
},
|
|
177
191
|
set(e) {
|
|
178
|
-
|
|
192
|
+
c.value = D.value.find((t) => t.deviceId === e);
|
|
179
193
|
}
|
|
180
194
|
});
|
|
181
|
-
|
|
195
|
+
m({
|
|
182
196
|
get() {
|
|
183
|
-
return
|
|
197
|
+
return O.value && O.value.deviceId;
|
|
184
198
|
},
|
|
185
199
|
set(e) {
|
|
186
|
-
|
|
200
|
+
O.value = pe.value.find((t) => t.deviceId === e);
|
|
187
201
|
}
|
|
188
202
|
});
|
|
189
|
-
const
|
|
190
|
-
const e =
|
|
191
|
-
return
|
|
192
|
-
}),
|
|
193
|
-
const e =
|
|
194
|
-
return
|
|
195
|
-
}), { tintRgb:
|
|
196
|
-
function
|
|
197
|
-
if (
|
|
198
|
-
|
|
203
|
+
const V = m(() => {
|
|
204
|
+
const e = c.value && D.value.findIndex((t) => t.deviceId === c.value.deviceId);
|
|
205
|
+
return s.enableMirrorCamera && e === 0 ? "mirror-cam" : "";
|
|
206
|
+
}), We = m(() => {
|
|
207
|
+
const e = c.value && U.value.findIndex((t) => t.deviceId === c.value.deviceId);
|
|
208
|
+
return V.value ? `${V.value} mirror-device-${e}` : "";
|
|
209
|
+
}), { tintRgb: zt, applyFilterToCanvas: _e } = ht(s);
|
|
210
|
+
function Ee() {
|
|
211
|
+
if (k.value && L.value) {
|
|
212
|
+
K.value = L.value.width, X.value = L.value.height;
|
|
199
213
|
return;
|
|
200
214
|
}
|
|
201
|
-
|
|
215
|
+
K.value = i.value.parentElement && i.value.parentElement.clientWidth, X.value = i.value.parentElement && i.value.parentElement.clientHeight;
|
|
202
216
|
}
|
|
203
|
-
const
|
|
204
|
-
|
|
217
|
+
const Ce = st(() => {
|
|
218
|
+
Ee();
|
|
205
219
|
}, 300, { trailing: !0, leading: !1 });
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
audio: i.enableAudio && {
|
|
209
|
-
...M.value ? { deviceId: M.value.deviceId } : {}
|
|
210
|
-
// deviceId: activeAudioDevice.value ? { exact: activeAudioDevice.value } : undefined
|
|
211
|
-
},
|
|
212
|
-
// audio: false,
|
|
213
|
-
video: {
|
|
214
|
-
...h.value ? { deviceId: h.value.deviceId } : {},
|
|
215
|
-
...t ? { width: { ideal: t } } : {},
|
|
216
|
-
...l ? { height: { ideal: l } } : {}
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
return navigator.mediaDevices.getUserMedia(O).catch((x) => {
|
|
220
|
-
console.error(x, "navigator.mediaDevices.getUserMedia: failed");
|
|
221
|
-
});
|
|
220
|
+
function re(e) {
|
|
221
|
+
return new Promise((t) => setTimeout(t, e));
|
|
222
222
|
}
|
|
223
|
-
function
|
|
224
|
-
|
|
223
|
+
async function je() {
|
|
224
|
+
const e = L.value ? { width: L.value.width, height: L.value.height } : void 0, t = e ? Math.max(e.width, e.height) : void 0, a = e ? Math.min(e.width, e.height) : void 0, o = s.enableAudio && {
|
|
225
|
+
...O.value ? { deviceId: O.value.deviceId } : {}
|
|
226
|
+
// deviceId: activeAudioDevice.value ? { exact: activeAudioDevice.value } : undefined
|
|
227
|
+
}, w = c.value && c.value.deviceId, h = [];
|
|
228
|
+
w ? (t && a && h.push({ deviceId: { exact: w }, width: { ideal: t }, height: { ideal: a } }), h.push({ deviceId: { exact: w } })) : (t && a && h.push({ width: { ideal: t }, height: { ideal: a } }), h.push({}));
|
|
229
|
+
for (const l of h)
|
|
230
|
+
for (let r = 0; r < 5; r++)
|
|
231
|
+
try {
|
|
232
|
+
return await navigator.mediaDevices.getUserMedia({ audio: o, video: l });
|
|
233
|
+
} catch (u) {
|
|
234
|
+
const B = u && u.name;
|
|
235
|
+
if (B === "NotReadableError" || B === "AbortError") {
|
|
236
|
+
await re(500);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function Y() {
|
|
243
|
+
i.value && i.value.srcObject && (i.value.srcObject.getTracks().forEach((t) => {
|
|
225
244
|
t.stop();
|
|
226
|
-
});
|
|
245
|
+
}), i.value.srcObject = null);
|
|
227
246
|
}
|
|
228
|
-
|
|
229
|
-
|
|
247
|
+
let T = 0;
|
|
248
|
+
const Ge = 350, Ne = 8e3;
|
|
249
|
+
let G, ee;
|
|
250
|
+
function $() {
|
|
251
|
+
G && (clearTimeout(G), G = void 0), ee && (ee(), ee = void 0);
|
|
230
252
|
}
|
|
231
|
-
function
|
|
232
|
-
|
|
253
|
+
function Pe(e) {
|
|
254
|
+
He(e);
|
|
255
|
+
const t = ye(e);
|
|
256
|
+
t && t.deviceId !== e && (c.value = t);
|
|
233
257
|
}
|
|
234
|
-
function
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
258
|
+
function Fe(e) {
|
|
259
|
+
$();
|
|
260
|
+
const t = c.value && c.value.deviceId, a = i.value;
|
|
261
|
+
if (!t || !a) return;
|
|
262
|
+
const o = a.srcObject && a.srcObject.getVideoTracks?.()[0];
|
|
263
|
+
if (!o || !(typeof o.addEventListener == "function") || a.videoWidth > 0) return;
|
|
264
|
+
const h = () => {
|
|
265
|
+
if ($(), e !== T || !i.value) return;
|
|
266
|
+
const u = ye(t);
|
|
267
|
+
u && u.deviceId !== t && (Y(), Pe(t));
|
|
268
|
+
}, l = () => {
|
|
269
|
+
e === T && i.value && i.value.videoWidth > 0 && $();
|
|
270
|
+
}, r = () => {
|
|
271
|
+
h();
|
|
272
|
+
};
|
|
273
|
+
o.addEventListener("unmute", l), o.addEventListener("ended", r), ee = () => {
|
|
274
|
+
o.removeEventListener("unmute", l), o.removeEventListener("ended", r);
|
|
275
|
+
}, G = setTimeout(() => {
|
|
276
|
+
G = void 0, !(e !== T || !i.value) && (i.value.videoWidth === 0 ? h() : $());
|
|
277
|
+
}, Ne);
|
|
278
|
+
}
|
|
279
|
+
const qe = 2;
|
|
280
|
+
let se = 0;
|
|
281
|
+
async function N() {
|
|
282
|
+
const e = ++T;
|
|
283
|
+
$();
|
|
284
|
+
const t = !!(i.value && i.value.srcObject);
|
|
285
|
+
if (Y(), t && (await re(Ge), e !== T))
|
|
286
|
+
return;
|
|
287
|
+
const a = await je();
|
|
288
|
+
if (e !== T) {
|
|
289
|
+
a?.getTracks?.().forEach((o) => o.stop());
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (a && i.value) {
|
|
293
|
+
se = 0, i.value.srcObject = a, i.value.muted = !0;
|
|
294
|
+
try {
|
|
295
|
+
await i.value.play?.();
|
|
296
|
+
} catch {
|
|
297
|
+
}
|
|
298
|
+
Fe(e);
|
|
299
|
+
} else if (!a && c.value) {
|
|
300
|
+
se < qe && (se++, await re(600), e === T && await N());
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
return U.value = await navigator.mediaDevices.enumerateDevices(), { stream: i.value && i.value.srcObject, devices: U.value };
|
|
304
|
+
}
|
|
305
|
+
function Ze() {
|
|
306
|
+
R.value ? (R.value = !1, Z.value = !1, Y()) : (R.value = !0, N());
|
|
307
|
+
}
|
|
308
|
+
function Ke() {
|
|
309
|
+
const e = Q.value;
|
|
310
|
+
if (e.length > 1) {
|
|
311
|
+
const t = e.findIndex((a) => a.deviceId === c.value?.deviceId);
|
|
312
|
+
c.value = e[t === e.length - 1 ? 0 : t + 1];
|
|
239
313
|
}
|
|
240
314
|
}
|
|
241
|
-
async function
|
|
242
|
-
|
|
315
|
+
async function Ie(e, t) {
|
|
316
|
+
e && (!t || e.deviceId !== t.deviceId) && await N();
|
|
243
317
|
}
|
|
244
|
-
|
|
245
|
-
function
|
|
246
|
-
|
|
318
|
+
De(() => c.value, Ie), De(() => O.value, Ie);
|
|
319
|
+
function ce() {
|
|
320
|
+
s.countdown ? (I.value = I.value ? I.value - 1 : s.countdown, I.value ? setTimeout(ce, 1e3) : Se()) : Se();
|
|
247
321
|
}
|
|
248
|
-
|
|
249
|
-
function
|
|
250
|
-
if (!
|
|
251
|
-
const e = ((
|
|
322
|
+
Re({ onCapture: ce, enableMotion: le, camera: i.value, zoom: v });
|
|
323
|
+
function Xe() {
|
|
324
|
+
if (!s.correctOrientation || ae.value == null) return 0;
|
|
325
|
+
const e = ((ae.value - 180) % 360 + 360) % 360;
|
|
252
326
|
return (-1 * (Math.round(e / 90) * 90 % 360) % 360 + 360) % 360;
|
|
253
327
|
}
|
|
254
|
-
function
|
|
255
|
-
const
|
|
256
|
-
e.translate(
|
|
257
|
-
const
|
|
258
|
-
e.drawImage(t, -P / 2, -
|
|
328
|
+
function Je(e, t, a, o, w) {
|
|
329
|
+
const h = n.value.width, l = n.value.height;
|
|
330
|
+
e.translate(h / 2, l / 2), V.value && e.scale(-1, 1), e.rotate(a * Math.PI / 180);
|
|
331
|
+
const r = l, u = h, H = Math.max(r / o, u / w) * (v.value && v.value > 0 ? v.value : 1), P = o * H, C = w * H;
|
|
332
|
+
e.drawImage(t, -P / 2, -C / 2, P, C);
|
|
259
333
|
}
|
|
260
|
-
function
|
|
261
|
-
|
|
262
|
-
const e =
|
|
263
|
-
if (
|
|
334
|
+
function Se() {
|
|
335
|
+
Z.value = !0;
|
|
336
|
+
const e = n.value.getContext("2d"), t = i.value, a = t && t.srcObject && t.srcObject.getTracks(), { aspectRatio: o, width: w, height: h } = a.length && a[0].getSettings(), l = t?.videoWidth || w || K.value, r = t?.videoHeight || h || X.value, u = l && r ? l / r : o, B = L.value || { width: l, height: r }, H = B?.width || l, P = k.value ? B?.height || r : Math.round(H / u), C = H / P;
|
|
337
|
+
if (n.value.width = H, n.value.height = P, !l || !r || !u)
|
|
264
338
|
return;
|
|
265
|
-
const
|
|
266
|
-
if (e.save(),
|
|
267
|
-
|
|
339
|
+
const te = Xe();
|
|
340
|
+
if (e.save(), te === 90 || te === 270) {
|
|
341
|
+
Je(e, t, te, l, r), e.restore(), _e(e, n.value.width, n.value.height), ke(n.value.toDataURL("image/png"));
|
|
268
342
|
return;
|
|
269
343
|
}
|
|
270
|
-
if (
|
|
271
|
-
let
|
|
272
|
-
if (
|
|
273
|
-
const
|
|
274
|
-
|
|
344
|
+
if (te === 180 && (e.translate(n.value.width, n.value.height), e.scale(-1, -1)), V.value && (e.translate(n.value.width, 0), e.scale(-1, 1)), s.enableCropImage) {
|
|
345
|
+
let _ = 0, M = 0, g = l, E = r;
|
|
346
|
+
if (u > C ? (g = r * C, _ = (l - g) / 2) : u < C && (E = l / C, M = (r - E) / 2), v.value && v.value !== 1) {
|
|
347
|
+
const F = g / v.value, q = E / v.value;
|
|
348
|
+
_ += (g - F) / 2, M += (E - q) / 2, g = F, E = q;
|
|
275
349
|
}
|
|
276
350
|
e.drawImage(
|
|
277
351
|
t,
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
352
|
+
_,
|
|
353
|
+
M,
|
|
354
|
+
g,
|
|
355
|
+
E,
|
|
282
356
|
0,
|
|
283
357
|
0,
|
|
284
|
-
|
|
285
|
-
|
|
358
|
+
n.value.width,
|
|
359
|
+
n.value.height
|
|
286
360
|
);
|
|
287
361
|
} else {
|
|
288
|
-
let
|
|
289
|
-
if (
|
|
290
|
-
const
|
|
291
|
-
|
|
362
|
+
let _ = n.value.width, M = n.value.height, g = 0, E = 0;
|
|
363
|
+
if (u > C ? (M = n.value.width / u, E = (n.value.height - M) / 2) : u < C && (_ = n.value.height * u, g = (n.value.width - _) / 2), v.value && v.value !== 1) {
|
|
364
|
+
const F = l / v.value, q = r / v.value, Ye = (l - F) / 2, et = (r - q) / 2;
|
|
365
|
+
V.value && (g = n.value.width - g - _), e.drawImage(
|
|
292
366
|
t,
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
367
|
+
Ye,
|
|
368
|
+
et,
|
|
369
|
+
F,
|
|
370
|
+
q,
|
|
371
|
+
g,
|
|
372
|
+
E,
|
|
373
|
+
_,
|
|
374
|
+
M
|
|
301
375
|
);
|
|
302
376
|
} else
|
|
303
|
-
|
|
377
|
+
V.value && (g = n.value.width - g - _), e.drawImage(
|
|
304
378
|
t,
|
|
305
379
|
0,
|
|
306
380
|
0,
|
|
381
|
+
l,
|
|
307
382
|
r,
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
k
|
|
383
|
+
g,
|
|
384
|
+
E,
|
|
385
|
+
_,
|
|
386
|
+
M
|
|
313
387
|
);
|
|
314
388
|
}
|
|
315
|
-
e.restore(),
|
|
316
|
-
const
|
|
317
|
-
|
|
389
|
+
e.restore(), _e(e, n.value.width, n.value.height);
|
|
390
|
+
const Qe = n.value.toDataURL("image/png");
|
|
391
|
+
ke(Qe);
|
|
318
392
|
}
|
|
319
|
-
function
|
|
320
|
-
const t =
|
|
321
|
-
|
|
393
|
+
function ke(e) {
|
|
394
|
+
const t = vt(e);
|
|
395
|
+
Te("update:modelValue", {
|
|
322
396
|
name: `cam-pic-${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
323
397
|
id: `cam-pic-${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
324
398
|
blob: t,
|
|
325
399
|
size: t.size
|
|
326
400
|
});
|
|
327
401
|
}
|
|
328
|
-
return
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
402
|
+
return at(async () => {
|
|
403
|
+
await N(), R.value = !0;
|
|
404
|
+
const e = s.defaultRearCamera && D.value.length > 1 ? D.value[D.value.length - 1] : D.value[0];
|
|
405
|
+
if (c.value = e, s.enableAudio && (O.value = pe.value[0]), navigator.mediaDevices.addEventListener("devicechange", async (t) => {
|
|
406
|
+
await N();
|
|
407
|
+
}), window.addEventListener("resize", Ce), Ee(), we.value) {
|
|
408
|
+
z = setTimeout(J, 3e3);
|
|
409
|
+
const t = window.DeviceOrientationEvent;
|
|
410
|
+
t && typeof t.requestPermission == "function" ? ze() : le();
|
|
335
411
|
}
|
|
336
|
-
await
|
|
337
|
-
}),
|
|
338
|
-
|
|
339
|
-
}), (e, t) => (
|
|
340
|
-
class:
|
|
412
|
+
await it(), me.value = !0;
|
|
413
|
+
}), nt(() => {
|
|
414
|
+
R.value = !1, Z.value = !1, $(), Y(), window.removeEventListener("resize", Ce), window.removeEventListener("devicemotion", ge, !0), z && clearTimeout(z), oe();
|
|
415
|
+
}), (e, t) => (y(), b("div", {
|
|
416
|
+
class: ue(["camera", We.value])
|
|
341
417
|
}, [
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
default:
|
|
346
|
-
|
|
347
|
-
class:
|
|
418
|
+
p("div", wt, [
|
|
419
|
+
ne.value ? x("", !0) : (y(), b("div", gt, [
|
|
420
|
+
de(ct, { color: "#000" }, {
|
|
421
|
+
default: ot(() => [
|
|
422
|
+
p("span", {
|
|
423
|
+
class: ue("d-block text-center"),
|
|
348
424
|
innerHTML: e.$t("camera.waitForCameraNotification")
|
|
349
|
-
}, null, 8,
|
|
425
|
+
}, null, 8, pt)
|
|
350
426
|
]),
|
|
351
427
|
_: 1
|
|
352
428
|
})
|
|
353
429
|
])),
|
|
354
|
-
|
|
355
|
-
class:
|
|
356
|
-
style:
|
|
430
|
+
Me(p("div", {
|
|
431
|
+
class: ue(["camera__video-wrapper", k.value ? `aspect-ratio--${k.value}` : ""]),
|
|
432
|
+
style: ve({ aspectRatio: Be.value || void 0, transform: v.value !== 1 ? `scale(${v.value})` : void 0 })
|
|
357
433
|
}, [
|
|
358
|
-
|
|
434
|
+
p("video", {
|
|
359
435
|
ref_key: "camera",
|
|
360
|
-
ref:
|
|
436
|
+
ref: i,
|
|
361
437
|
class: "camera__video",
|
|
362
|
-
style:
|
|
363
|
-
filter:
|
|
364
|
-
transform:
|
|
438
|
+
style: ve({
|
|
439
|
+
filter: s.filter === "grayscale" ? "grayscale(100%)" : s.filter === "sepia" ? "sepia(100%)" : "none",
|
|
440
|
+
transform: f.correctOrientation && A.value ? "rotate(180deg)" : void 0
|
|
365
441
|
}),
|
|
366
442
|
autoplay: "",
|
|
443
|
+
muted: "",
|
|
367
444
|
playsinline: ""
|
|
368
445
|
}, null, 4),
|
|
369
|
-
|
|
446
|
+
f.tintColor ? (y(), b("div", {
|
|
370
447
|
key: 0,
|
|
371
448
|
class: "camera__tint-overlay",
|
|
372
|
-
style:
|
|
373
|
-
backgroundColor:
|
|
374
|
-
opacity:
|
|
449
|
+
style: ve({
|
|
450
|
+
backgroundColor: f.tintColor,
|
|
451
|
+
opacity: f.tintIntensity,
|
|
375
452
|
mixBlendMode: "multiply"
|
|
376
453
|
})
|
|
377
|
-
}, null, 4)) :
|
|
454
|
+
}, null, 4)) : x("", !0)
|
|
378
455
|
], 6), [
|
|
379
|
-
[
|
|
456
|
+
[xe, ne.value]
|
|
380
457
|
]),
|
|
381
|
-
|
|
458
|
+
Me(p("canvas", {
|
|
382
459
|
ref_key: "canvas",
|
|
383
|
-
ref:
|
|
460
|
+
ref: n,
|
|
384
461
|
class: "camera__canvas",
|
|
385
|
-
width:
|
|
386
|
-
height:
|
|
387
|
-
}, null, 8,
|
|
388
|
-
[
|
|
462
|
+
width: K.value,
|
|
463
|
+
height: X.value
|
|
464
|
+
}, null, 8, yt), [
|
|
465
|
+
[xe, Z.value]
|
|
389
466
|
]),
|
|
390
|
-
|
|
391
|
-
(
|
|
467
|
+
I.value ? (y(), b("div", bt, [
|
|
468
|
+
(y(), b("p", {
|
|
392
469
|
class: "countdown",
|
|
393
|
-
key:
|
|
394
|
-
innerHTML:
|
|
395
|
-
"data-countdown":
|
|
396
|
-
}, null, 8,
|
|
397
|
-
])) :
|
|
398
|
-
|
|
470
|
+
key: I.value,
|
|
471
|
+
innerHTML: I.value,
|
|
472
|
+
"data-countdown": I.value
|
|
473
|
+
}, null, 8, _t))
|
|
474
|
+
])) : x("", !0),
|
|
475
|
+
f.enableGuide && R.value && ne.value ? (y(), b("img", {
|
|
399
476
|
key: 2,
|
|
400
477
|
class: "camera__guide",
|
|
401
|
-
src:
|
|
402
|
-
}, null, 8,
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
modelValue:
|
|
406
|
-
"onUpdate:modelValue": t[0] || (t[0] = (
|
|
478
|
+
src: f.guideSrc
|
|
479
|
+
}, null, 8, Et)) : x("", !0),
|
|
480
|
+
f.enableZoomSlider ? (y(), b("div", Ct, [
|
|
481
|
+
de(mt, {
|
|
482
|
+
modelValue: v.value,
|
|
483
|
+
"onUpdate:modelValue": t[0] || (t[0] = (a) => v.value = a)
|
|
407
484
|
}, null, 8, ["modelValue"])
|
|
408
|
-
])) :
|
|
485
|
+
])) : x("", !0)
|
|
409
486
|
]),
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
487
|
+
p("div", It, [
|
|
488
|
+
p("div", St, [
|
|
489
|
+
p("div", kt, [
|
|
490
|
+
p("div", Dt, [
|
|
491
|
+
p("div", Mt, [
|
|
492
|
+
p("button", {
|
|
416
493
|
type: "button",
|
|
417
494
|
class: "camera__toggle btn btn-primary",
|
|
418
|
-
onClick:
|
|
495
|
+
onClick: Ze
|
|
419
496
|
}, [
|
|
420
|
-
|
|
497
|
+
R.value ? (y(), b("span", Ot, he(e.$t("common.pause")), 1)) : (y(), b("span", xt, he(e.$t("common.play")), 1))
|
|
421
498
|
]),
|
|
422
|
-
|
|
499
|
+
p("button", {
|
|
423
500
|
type: "button",
|
|
424
501
|
class: "camera__capture btn btn-primary",
|
|
425
|
-
onClick:
|
|
426
|
-
},
|
|
502
|
+
onClick: ce
|
|
503
|
+
}, he(e.$t("camera.capture")), 1)
|
|
427
504
|
])
|
|
428
505
|
])
|
|
429
506
|
])
|
|
430
507
|
])
|
|
431
508
|
]),
|
|
432
|
-
(
|
|
433
|
-
|
|
434
|
-
|
|
509
|
+
(f.enableSwitchCamera || f.enableSelectDevice) && Q.value && Q.value.length > 1 ? (y(), b("div", Rt, [
|
|
510
|
+
p("div", Lt, [
|
|
511
|
+
f.enableSelectDevice ? (y(), lt(dt, {
|
|
435
512
|
key: 0,
|
|
436
|
-
modelValue:
|
|
437
|
-
"onUpdate:modelValue": t[1] || (t[1] = (
|
|
438
|
-
options:
|
|
513
|
+
modelValue: be.value,
|
|
514
|
+
"onUpdate:modelValue": t[1] || (t[1] = (a) => be.value = a),
|
|
515
|
+
options: Ue.value,
|
|
439
516
|
class: "w-100"
|
|
440
|
-
}, null, 8, ["modelValue", "options"])) :
|
|
517
|
+
}, null, 8, ["modelValue", "options"])) : x("", !0)
|
|
441
518
|
]),
|
|
442
|
-
|
|
443
|
-
|
|
519
|
+
p("div", Tt, [
|
|
520
|
+
f.enableSwitchCamera ? (y(), b("button", {
|
|
444
521
|
key: 0,
|
|
445
522
|
class: "btn",
|
|
446
|
-
onClick:
|
|
523
|
+
onClick: rt(Ke, ["prevent"])
|
|
447
524
|
}, [
|
|
448
|
-
|
|
449
|
-
])) :
|
|
525
|
+
de(ut, { symbol: "switch-camera" })
|
|
526
|
+
])) : x("", !0)
|
|
450
527
|
])
|
|
451
|
-
])) :
|
|
528
|
+
])) : x("", !0)
|
|
452
529
|
], 2));
|
|
453
530
|
}
|
|
454
531
|
});
|
|
455
532
|
export {
|
|
456
|
-
|
|
533
|
+
Kt as default
|
|
457
534
|
};
|