@virtualdisplay.io/client 4.0.0-alpha.28 → 4.0.0-alpha.29
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.
- package/CHANGELOG.md +10 -0
- package/dist/index.d.ts +151 -380
- package/dist/virtualdisplay.client.cjs.js +25 -10
- package/dist/virtualdisplay.client.es.js +215 -207
- package/dist/virtualdisplay.client.umd.js +18 -3
- package/package.json +1 -1
|
@@ -33,58 +33,58 @@ function Mt(n) {
|
|
|
33
33
|
return typeof t.target == "string" ? !1 : typeof t.type == "string" && Lt.has(t.type);
|
|
34
34
|
}
|
|
35
35
|
function Nt(n) {
|
|
36
|
-
const t =
|
|
36
|
+
const t = w(n);
|
|
37
37
|
return t !== null && t.type === c.HANDSHAKE;
|
|
38
38
|
}
|
|
39
39
|
function zt(n) {
|
|
40
|
-
const t =
|
|
40
|
+
const t = w(n);
|
|
41
41
|
return t !== null && t.type === c.SESSION && typeof t.sessionId == "string";
|
|
42
42
|
}
|
|
43
43
|
function Pt(n) {
|
|
44
|
-
const t =
|
|
44
|
+
const t = w(n);
|
|
45
45
|
return t !== null && t.type === c.APP_RESOLVED && typeof t.appType == "string" && t.appType !== "" && typeof t.name == "string";
|
|
46
46
|
}
|
|
47
47
|
function Ft(n) {
|
|
48
|
-
const t =
|
|
48
|
+
const t = w(n);
|
|
49
49
|
return t !== null && t.type === c.MUTATION && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.results);
|
|
50
50
|
}
|
|
51
51
|
function Dt(n) {
|
|
52
|
-
const t =
|
|
52
|
+
const t = w(n);
|
|
53
53
|
return t !== null && t.type === c.SNAPSHOT && ("data" in t || "error" in t);
|
|
54
54
|
}
|
|
55
55
|
function $t(n) {
|
|
56
|
-
const t =
|
|
56
|
+
const t = w(n);
|
|
57
57
|
return t !== null && t.type === c.CAMERA && Array.isArray(t.transforms);
|
|
58
58
|
}
|
|
59
59
|
function Bt(n) {
|
|
60
|
-
const t =
|
|
60
|
+
const t = w(n);
|
|
61
61
|
return t !== null && t.type === c.MAPPING && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.attributes);
|
|
62
62
|
}
|
|
63
63
|
function Ut(n) {
|
|
64
|
-
const t =
|
|
64
|
+
const t = w(n);
|
|
65
65
|
return t !== null && t.type === c.LOADING_INDICATOR && typeof t.progress == "number";
|
|
66
66
|
}
|
|
67
67
|
function Vt(n) {
|
|
68
|
-
const t =
|
|
68
|
+
const t = w(n);
|
|
69
69
|
return t !== null && t.type === c.SYNC && typeof t.connected == "boolean";
|
|
70
70
|
}
|
|
71
71
|
function jt(n) {
|
|
72
|
-
const t =
|
|
72
|
+
const t = w(n);
|
|
73
73
|
return t !== null && t.type === c.SELECTABLE && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.attributes);
|
|
74
74
|
}
|
|
75
75
|
function Ht(n) {
|
|
76
|
-
const t =
|
|
76
|
+
const t = w(n);
|
|
77
77
|
return t !== null && t.type === c.CONFIG && typeof t.viewerSettings == "object";
|
|
78
78
|
}
|
|
79
79
|
function qt(n) {
|
|
80
|
-
const t =
|
|
80
|
+
const t = w(n);
|
|
81
81
|
return t !== null && t.type === c.FOCUS && typeof t.instance == "string" && t.instance !== "" && typeof t.state == "string";
|
|
82
82
|
}
|
|
83
83
|
function Gt(n) {
|
|
84
|
-
const t =
|
|
84
|
+
const t = w(n);
|
|
85
85
|
return t !== null && t.type === c.PRICING && typeof t.instance == "string" && t.instance !== "" && typeof t.pricing == "object" && t.pricing !== null;
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function w(n) {
|
|
88
88
|
return typeof n != "object" || n === null ? null : n;
|
|
89
89
|
}
|
|
90
90
|
class nt {
|
|
@@ -166,14 +166,12 @@ class Zt {
|
|
|
166
166
|
send(t) {
|
|
167
167
|
this.publisher.enqueue(t);
|
|
168
168
|
}
|
|
169
|
+
// For a transport that delivers messages some way other than the iframe
|
|
170
|
+
// channel this messenger listens on, such as the viewer's live sync channel,
|
|
171
|
+
// and needs them to land exactly where a postMessage would.
|
|
169
172
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* against `isValid`, and still respects the consumer queue's buffering. For
|
|
173
|
-
* a transport that delivers messages some
|
|
174
|
-
* other way than the iframe channel this messenger already listens on (the
|
|
175
|
-
* viewer engine's SSE-sourced live sync channel, ar-session-handoff) and
|
|
176
|
-
* needs them to land exactly where a postMessage would.
|
|
173
|
+
* Route a message as if it had arrived by postMessage, without the round trip.
|
|
174
|
+
* Still validated against `isValid` and still subject to the consumer queue.
|
|
177
175
|
*/
|
|
178
176
|
receive(t) {
|
|
179
177
|
this.isValid(t) && this.consumer.enqueue(t);
|
|
@@ -247,7 +245,7 @@ class Wt {
|
|
|
247
245
|
});
|
|
248
246
|
}
|
|
249
247
|
}
|
|
250
|
-
class
|
|
248
|
+
class Qt {
|
|
251
249
|
constructor(t, e) {
|
|
252
250
|
this.value = t, this.attribute = e;
|
|
253
251
|
}
|
|
@@ -290,7 +288,7 @@ class y extends Error {
|
|
|
290
288
|
return new y(t, A.INVALID_PARAMETER);
|
|
291
289
|
}
|
|
292
290
|
}
|
|
293
|
-
class
|
|
291
|
+
class Yt {
|
|
294
292
|
name;
|
|
295
293
|
defaultValue;
|
|
296
294
|
values;
|
|
@@ -342,7 +340,7 @@ class Qt {
|
|
|
342
340
|
createValues(t) {
|
|
343
341
|
const e = /* @__PURE__ */ new Map();
|
|
344
342
|
for (const i of t) {
|
|
345
|
-
const o = new
|
|
343
|
+
const o = new Qt(i, this.name);
|
|
346
344
|
i === this.defaultValue && o.setSelected(!0), e.set(i, o);
|
|
347
345
|
}
|
|
348
346
|
return e;
|
|
@@ -353,7 +351,7 @@ class Kt {
|
|
|
353
351
|
constructor(t, e, i) {
|
|
354
352
|
for (const o of t) {
|
|
355
353
|
const s = this.buildOptions(o, e);
|
|
356
|
-
this.attributes.set(o.name, new
|
|
354
|
+
this.attributes.set(o.name, new Yt(s));
|
|
357
355
|
}
|
|
358
356
|
this.onMutationFailed = i;
|
|
359
357
|
}
|
|
@@ -390,9 +388,9 @@ class Kt {
|
|
|
390
388
|
return t.defaultValue !== void 0 ? { ...i, defaultValue: t.defaultValue } : i;
|
|
391
389
|
}
|
|
392
390
|
}
|
|
393
|
-
const N = 4096, D = 16384, Xt = [1024, 256, 64], Jt = 20,
|
|
391
|
+
const N = 4096, D = 16384, Xt = [1024, 256, 64], Jt = 20, Q = ["timestamp", "level", "msg", "service", "trace_id", "span_id"];
|
|
394
392
|
function te(n) {
|
|
395
|
-
const t = new Date(n.timestamp).toLocaleTimeString("en-GB", { hour12: !1 }), e = n.level.toUpperCase().padEnd(5), i = n.trace_id?.slice(0, 8) ?? "--------", o = n.msg, s = Object.entries(n).filter(([r]) => !
|
|
393
|
+
const t = new Date(n.timestamp).toLocaleTimeString("en-GB", { hour12: !1 }), e = n.level.toUpperCase().padEnd(5), i = n.trace_id?.slice(0, 8) ?? "--------", o = n.msg, s = Object.entries(n).filter(([r]) => !Q.includes(r)).map(([r, a]) => `${r}=${O(a, N).line}`).join(" ");
|
|
396
394
|
return `${t} ${e} [${i}] ${o}${s ? " " + s : ""}`;
|
|
397
395
|
}
|
|
398
396
|
function ee(n) {
|
|
@@ -407,7 +405,7 @@ function ee(n) {
|
|
|
407
405
|
if (a.length <= D)
|
|
408
406
|
return a;
|
|
409
407
|
}
|
|
410
|
-
const t = Object.keys(n).filter((o) => !
|
|
408
|
+
const t = Object.keys(n).filter((o) => !Q.includes(o)), e = { ...ie(n, Q), log_truncated: !0, log_dropped_count: t.length }, i = O({ ...e, log_dropped_attrs: t.slice(0, Jt) }, N);
|
|
411
409
|
return i.line.length <= D ? i.line : O(e, N).line;
|
|
412
410
|
}
|
|
413
411
|
function O(n, t) {
|
|
@@ -473,11 +471,11 @@ function le() {
|
|
|
473
471
|
function ce() {
|
|
474
472
|
return /iPhone|iPad|iPod/i.test(gt()) || le();
|
|
475
473
|
}
|
|
476
|
-
function
|
|
474
|
+
function de() {
|
|
477
475
|
return /Android/i.test(gt());
|
|
478
476
|
}
|
|
479
|
-
function
|
|
480
|
-
return ce() ||
|
|
477
|
+
function ue() {
|
|
478
|
+
return ce() || de();
|
|
481
479
|
}
|
|
482
480
|
class he {
|
|
483
481
|
constructor(t) {
|
|
@@ -539,11 +537,11 @@ function vt(n) {
|
|
|
539
537
|
error: (t, e) => n.error(t, M(e))
|
|
540
538
|
};
|
|
541
539
|
}
|
|
542
|
-
let yt = !1,
|
|
540
|
+
let yt = !1, k = vt(bt("client", { isDev: !1 }));
|
|
543
541
|
function pe() {
|
|
544
|
-
yt = !0,
|
|
542
|
+
yt = !0, k = vt(bt("client", { isDev: !0 }));
|
|
545
543
|
}
|
|
546
|
-
function
|
|
544
|
+
function Co() {
|
|
547
545
|
return yt;
|
|
548
546
|
}
|
|
549
547
|
class me {
|
|
@@ -559,7 +557,7 @@ class me {
|
|
|
559
557
|
* Handle incoming MAPPING message from server
|
|
560
558
|
*/
|
|
561
559
|
handleMappingReceived(t) {
|
|
562
|
-
|
|
560
|
+
k.debug("Initializing from server mapping", {
|
|
563
561
|
attributeCount: t.attributes.length
|
|
564
562
|
}), this.registry = new Kt(
|
|
565
563
|
t.attributes,
|
|
@@ -606,7 +604,7 @@ class me {
|
|
|
606
604
|
}
|
|
607
605
|
const i = this.registry.get(t);
|
|
608
606
|
if (i === void 0) {
|
|
609
|
-
|
|
607
|
+
k.warn(`onChange: attribute "${t}" not found — callback will not fire`);
|
|
610
608
|
return;
|
|
611
609
|
}
|
|
612
610
|
i.onChange(e);
|
|
@@ -631,7 +629,7 @@ class me {
|
|
|
631
629
|
replayPendingCallbacks() {
|
|
632
630
|
for (const { name: t, callback: e } of this.pendingCallbacks) {
|
|
633
631
|
const i = this.registry?.get(t);
|
|
634
|
-
i === void 0 &&
|
|
632
|
+
i === void 0 && k.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`), i?.onChange(e);
|
|
635
633
|
}
|
|
636
634
|
this.pendingCallbacks.length = 0;
|
|
637
635
|
}
|
|
@@ -820,7 +818,7 @@ function ye(n, t) {
|
|
|
820
818
|
function it(n) {
|
|
821
819
|
return Object.keys(n.attributes).length;
|
|
822
820
|
}
|
|
823
|
-
class
|
|
821
|
+
class we {
|
|
824
822
|
constructor(t, e) {
|
|
825
823
|
this.dispatchChange = t, this.dispatchSubmit = e;
|
|
826
824
|
}
|
|
@@ -941,7 +939,7 @@ class Se {
|
|
|
941
939
|
};
|
|
942
940
|
}
|
|
943
941
|
}
|
|
944
|
-
class
|
|
942
|
+
class Se {
|
|
945
943
|
constructor(t, e, i) {
|
|
946
944
|
this.send = t, this.dispatch = e, this.instance = i;
|
|
947
945
|
}
|
|
@@ -991,7 +989,7 @@ class we {
|
|
|
991
989
|
this.dispatch(e);
|
|
992
990
|
}
|
|
993
991
|
}
|
|
994
|
-
class
|
|
992
|
+
class ke {
|
|
995
993
|
constructor(t) {
|
|
996
994
|
this.filename = t;
|
|
997
995
|
}
|
|
@@ -1045,7 +1043,7 @@ class Ce {
|
|
|
1045
1043
|
}
|
|
1046
1044
|
}
|
|
1047
1045
|
const ot = 3e4;
|
|
1048
|
-
class
|
|
1046
|
+
class Ce {
|
|
1049
1047
|
constructor(t) {
|
|
1050
1048
|
this.send = t;
|
|
1051
1049
|
}
|
|
@@ -1060,9 +1058,9 @@ class _e {
|
|
|
1060
1058
|
* @throws VirtualdisplayError if filename is invalid
|
|
1061
1059
|
*/
|
|
1062
1060
|
take(t) {
|
|
1063
|
-
this.validateFilename(t),
|
|
1064
|
-
const e = new
|
|
1065
|
-
this.pendingPhotos.delete(t),
|
|
1061
|
+
this.validateFilename(t), k.debug("Taking snapshot", { filename: t });
|
|
1062
|
+
const e = new ke(t), i = setTimeout(() => {
|
|
1063
|
+
this.pendingPhotos.delete(t), k.warn("Snapshot timed out", { filename: t }), e.fail(new y(
|
|
1066
1064
|
`Snapshot timed out: the viewer did not respond within ${ot}ms`,
|
|
1067
1065
|
A.SNAPSHOT_FAILED
|
|
1068
1066
|
));
|
|
@@ -1079,7 +1077,7 @@ class _e {
|
|
|
1079
1077
|
handleSnapshotResult(t) {
|
|
1080
1078
|
const e = this.pendingPhotos.get(t.filename);
|
|
1081
1079
|
if (e === void 0) {
|
|
1082
|
-
|
|
1080
|
+
k.warn("No pending photo found for filename", {
|
|
1083
1081
|
filename: t.filename,
|
|
1084
1082
|
pendingFilenames: Array.from(this.pendingPhotos.keys())
|
|
1085
1083
|
});
|
|
@@ -1132,7 +1130,7 @@ class _e {
|
|
|
1132
1130
|
);
|
|
1133
1131
|
}
|
|
1134
1132
|
}
|
|
1135
|
-
class
|
|
1133
|
+
class _e {
|
|
1136
1134
|
container = null;
|
|
1137
1135
|
attach(t) {
|
|
1138
1136
|
this.container = t;
|
|
@@ -1153,22 +1151,22 @@ class ke {
|
|
|
1153
1151
|
};
|
|
1154
1152
|
}
|
|
1155
1153
|
}
|
|
1156
|
-
const Ae = {}, Ee = "en",
|
|
1154
|
+
const Ae = {}, Ee = "en", wt = (
|
|
1157
1155
|
/** @type {const} */
|
|
1158
1156
|
["en", "nl", "de"]
|
|
1159
1157
|
), X = [
|
|
1160
1158
|
"baseLocale"
|
|
1161
|
-
], st = [],
|
|
1159
|
+
], st = [], Y = typeof window > "u";
|
|
1162
1160
|
globalThis.__paraglide = /** @type {any} */
|
|
1163
1161
|
globalThis.__paraglide ?? {};
|
|
1164
1162
|
globalThis.__paraglide.ssr = /** @type {any} */
|
|
1165
1163
|
globalThis.__paraglide.ssr ?? {};
|
|
1166
1164
|
let rt = !1, p = () => {
|
|
1167
1165
|
let n = X;
|
|
1168
|
-
!
|
|
1166
|
+
!Y && typeof window < "u" && window.location?.href && (n = kt(window.location.href));
|
|
1169
1167
|
const t = xe(n);
|
|
1170
1168
|
if (t)
|
|
1171
|
-
return rt || (rt = !0,
|
|
1169
|
+
return rt || (rt = !0, St(t, { reload: !1 })), t;
|
|
1172
1170
|
throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found");
|
|
1173
1171
|
};
|
|
1174
1172
|
function xe(n, t) {
|
|
@@ -1176,7 +1174,7 @@ function xe(n, t) {
|
|
|
1176
1174
|
for (const i of n) {
|
|
1177
1175
|
if (i === "baseLocale")
|
|
1178
1176
|
e = Ee;
|
|
1179
|
-
else if (
|
|
1177
|
+
else if (Ct(i) && z.has(i)) {
|
|
1180
1178
|
const s = z.get(i);
|
|
1181
1179
|
if (s) {
|
|
1182
1180
|
const r = s.getLocale();
|
|
@@ -1194,7 +1192,7 @@ function xe(n, t) {
|
|
|
1194
1192
|
const Te = (n) => {
|
|
1195
1193
|
window.location.reload();
|
|
1196
1194
|
};
|
|
1197
|
-
let
|
|
1195
|
+
let St = (n, t) => {
|
|
1198
1196
|
const e = {
|
|
1199
1197
|
reload: !0,
|
|
1200
1198
|
...t
|
|
@@ -1206,21 +1204,21 @@ let wt = (n, t) => {
|
|
|
1206
1204
|
}
|
|
1207
1205
|
const o = [];
|
|
1208
1206
|
let s = X;
|
|
1209
|
-
!
|
|
1207
|
+
!Y && typeof window < "u" && window.location?.href && (s = kt(window.location.href));
|
|
1210
1208
|
for (const a of s)
|
|
1211
|
-
if (a !== "baseLocale" &&
|
|
1212
|
-
const
|
|
1213
|
-
if (
|
|
1214
|
-
let
|
|
1215
|
-
|
|
1209
|
+
if (a !== "baseLocale" && Ct(a) && z.has(a)) {
|
|
1210
|
+
const d = z.get(a);
|
|
1211
|
+
if (d) {
|
|
1212
|
+
let u = d.setLocale(n);
|
|
1213
|
+
u instanceof Promise && (u = u.catch((f) => {
|
|
1216
1214
|
throw new Error(`Custom strategy "${a}" setLocale failed.`, {
|
|
1217
1215
|
cause: f
|
|
1218
1216
|
});
|
|
1219
|
-
}), o.push(
|
|
1217
|
+
}), o.push(u));
|
|
1220
1218
|
}
|
|
1221
1219
|
}
|
|
1222
1220
|
const r = () => {
|
|
1223
|
-
!
|
|
1221
|
+
!Y && e.reload && window.location && n !== i && Te();
|
|
1224
1222
|
};
|
|
1225
1223
|
if (o.length)
|
|
1226
1224
|
return Promise.all(o).then(() => {
|
|
@@ -1232,7 +1230,7 @@ function J(n) {
|
|
|
1232
1230
|
if (typeof n != "string")
|
|
1233
1231
|
return;
|
|
1234
1232
|
const t = n.toLowerCase();
|
|
1235
|
-
for (const e of
|
|
1233
|
+
for (const e of wt)
|
|
1236
1234
|
if (e.toLowerCase() === t)
|
|
1237
1235
|
return e;
|
|
1238
1236
|
}
|
|
@@ -1240,7 +1238,7 @@ function Ie(n) {
|
|
|
1240
1238
|
const t = J(n);
|
|
1241
1239
|
if (t)
|
|
1242
1240
|
return t;
|
|
1243
|
-
throw new Error(`Invalid locale: ${n}. Expected one of: ${
|
|
1241
|
+
throw new Error(`Invalid locale: ${n}. Expected one of: ${wt.join(", ")}`);
|
|
1244
1242
|
}
|
|
1245
1243
|
function Oe(n) {
|
|
1246
1244
|
return Le(n);
|
|
@@ -1269,12 +1267,12 @@ function Me(n) {
|
|
|
1269
1267
|
}
|
|
1270
1268
|
return at = t, lt = s, s;
|
|
1271
1269
|
}
|
|
1272
|
-
function
|
|
1270
|
+
function kt(n) {
|
|
1273
1271
|
const t = Me(n);
|
|
1274
1272
|
return t && t.exclude !== !0 && Array.isArray(t.strategy) ? t.strategy : X;
|
|
1275
1273
|
}
|
|
1276
1274
|
const z = /* @__PURE__ */ new Map();
|
|
1277
|
-
function
|
|
1275
|
+
function Ct(n) {
|
|
1278
1276
|
return typeof n == "string" && /^custom-[A-Za-z0-9_-]+$/.test(n);
|
|
1279
1277
|
}
|
|
1280
1278
|
const Ne = (
|
|
@@ -1367,13 +1365,13 @@ const Ne = (
|
|
|
1367
1365
|
/** @type {LocalizedString} */
|
|
1368
1366
|
"Dein Telefon öffnet das 3D-Modell im AR-Modus."
|
|
1369
1367
|
)
|
|
1370
|
-
),
|
|
1368
|
+
), Qe = (
|
|
1371
1369
|
/** @type {((inputs?: Controls_Qr_Modalinstructions1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modalinstructions1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1372
1370
|
((n = {}, t = {}) => {
|
|
1373
1371
|
const e = t.locale ?? p();
|
|
1374
1372
|
return e === "nl" ? Ze() : e === "de" ? We() : Ge();
|
|
1375
1373
|
})
|
|
1376
|
-
),
|
|
1374
|
+
), Ye = (
|
|
1377
1375
|
/** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
|
|
1378
1376
|
() => (
|
|
1379
1377
|
/** @type {LocalizedString} */
|
|
@@ -1395,7 +1393,7 @@ const Ne = (
|
|
|
1395
1393
|
/** @type {((inputs?: Controls_Qr_Closebutton1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Closebutton1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1396
1394
|
((n = {}, t = {}) => {
|
|
1397
1395
|
const e = t.locale ?? p();
|
|
1398
|
-
return e === "nl" ? Ke() : e === "de" ? Xe() :
|
|
1396
|
+
return e === "nl" ? Ke() : e === "de" ? Xe() : Ye();
|
|
1399
1397
|
})
|
|
1400
1398
|
), tn = (
|
|
1401
1399
|
/** @type {(inputs: Controls_Annotations_Buttonlabel1Inputs) => LocalizedString} */
|
|
@@ -1451,13 +1449,13 @@ const Ne = (
|
|
|
1451
1449
|
/** @type {LocalizedString} */
|
|
1452
1450
|
"Downloading"
|
|
1453
1451
|
)
|
|
1454
|
-
),
|
|
1452
|
+
), dn = (
|
|
1455
1453
|
/** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
|
|
1456
1454
|
() => (
|
|
1457
1455
|
/** @type {LocalizedString} */
|
|
1458
1456
|
"Downloaden"
|
|
1459
1457
|
)
|
|
1460
|
-
),
|
|
1458
|
+
), un = (
|
|
1461
1459
|
/** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
|
|
1462
1460
|
() => (
|
|
1463
1461
|
/** @type {LocalizedString} */
|
|
@@ -1467,7 +1465,7 @@ const Ne = (
|
|
|
1467
1465
|
/** @type {((inputs?: Loading_Downloadingshort1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Loading_Downloadingshort1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1468
1466
|
((n = {}, t = {}) => {
|
|
1469
1467
|
const e = t.locale ?? p();
|
|
1470
|
-
return e === "nl" ?
|
|
1468
|
+
return e === "nl" ? dn() : e === "de" ? un() : cn();
|
|
1471
1469
|
})
|
|
1472
1470
|
), pn = (
|
|
1473
1471
|
/** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
|
|
@@ -1511,35 +1509,35 @@ const Ne = (
|
|
|
1511
1509
|
/** @type {LocalizedString} */
|
|
1512
1510
|
"Konfigurieren"
|
|
1513
1511
|
)
|
|
1514
|
-
),
|
|
1512
|
+
), wn = (
|
|
1515
1513
|
/** @type {((inputs?: Controls_Configurator_OpenInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_OpenInputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1516
1514
|
((n = {}, t = {}) => {
|
|
1517
1515
|
const e = t.locale ?? p();
|
|
1518
1516
|
return e === "nl" ? vn() : e === "de" ? yn() : bn();
|
|
1519
1517
|
})
|
|
1520
|
-
),
|
|
1518
|
+
), Sn = (
|
|
1521
1519
|
/** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
|
|
1522
1520
|
() => (
|
|
1523
1521
|
/** @type {LocalizedString} */
|
|
1524
1522
|
"Close"
|
|
1525
1523
|
)
|
|
1526
|
-
),
|
|
1524
|
+
), kn = (
|
|
1527
1525
|
/** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
|
|
1528
1526
|
() => (
|
|
1529
1527
|
/** @type {LocalizedString} */
|
|
1530
1528
|
"Sluiten"
|
|
1531
1529
|
)
|
|
1532
|
-
),
|
|
1530
|
+
), Cn = (
|
|
1533
1531
|
/** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
|
|
1534
1532
|
() => (
|
|
1535
1533
|
/** @type {LocalizedString} */
|
|
1536
1534
|
"Schließen"
|
|
1537
1535
|
)
|
|
1538
|
-
),
|
|
1536
|
+
), _n = (
|
|
1539
1537
|
/** @type {((inputs?: Controls_Configurator_CloseInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_CloseInputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1540
1538
|
((n = {}, t = {}) => {
|
|
1541
1539
|
const e = t.locale ?? p();
|
|
1542
|
-
return e === "nl" ?
|
|
1540
|
+
return e === "nl" ? kn() : e === "de" ? Cn() : Sn();
|
|
1543
1541
|
})
|
|
1544
1542
|
), An = (
|
|
1545
1543
|
/** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
|
|
@@ -1685,13 +1683,13 @@ const Ne = (
|
|
|
1685
1683
|
const e = t.locale ?? p();
|
|
1686
1684
|
return e === "nl" ? Gn() : e === "de" ? Zn() : qn();
|
|
1687
1685
|
})
|
|
1688
|
-
),
|
|
1686
|
+
), Qn = (
|
|
1689
1687
|
/** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
|
|
1690
1688
|
() => (
|
|
1691
1689
|
/** @type {LocalizedString} */
|
|
1692
1690
|
"Tilt down"
|
|
1693
1691
|
)
|
|
1694
|
-
),
|
|
1692
|
+
), Yn = (
|
|
1695
1693
|
/** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
|
|
1696
1694
|
() => (
|
|
1697
1695
|
/** @type {LocalizedString} */
|
|
@@ -1707,7 +1705,7 @@ const Ne = (
|
|
|
1707
1705
|
/** @type {((inputs?: Controls_Camera_Tiltdown1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltdown1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1708
1706
|
((n = {}, t = {}) => {
|
|
1709
1707
|
const e = t.locale ?? p();
|
|
1710
|
-
return e === "nl" ?
|
|
1708
|
+
return e === "nl" ? Yn() : e === "de" ? Kn() : Qn();
|
|
1711
1709
|
})
|
|
1712
1710
|
), Jn = (
|
|
1713
1711
|
/** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
|
|
@@ -1775,14 +1773,14 @@ const Ne = (
|
|
|
1775
1773
|
/** @type {LocalizedString} */
|
|
1776
1774
|
"Fehlgeschlagen"
|
|
1777
1775
|
)
|
|
1778
|
-
),
|
|
1776
|
+
), di = (
|
|
1779
1777
|
/** @type {((inputs?: Commerce_Submit_FailedInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_FailedInputs, { locale?: "en" | "nl" | "de" }, {}>} */
|
|
1780
1778
|
((n = {}, t = {}) => {
|
|
1781
1779
|
const e = t.locale ?? p();
|
|
1782
1780
|
return e === "nl" ? li() : e === "de" ? ci() : ai();
|
|
1783
1781
|
})
|
|
1784
1782
|
);
|
|
1785
|
-
const
|
|
1783
|
+
const ui = {
|
|
1786
1784
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1787
1785
|
width: 24,
|
|
1788
1786
|
height: 24,
|
|
@@ -1793,20 +1791,20 @@ const di = {
|
|
|
1793
1791
|
"stroke-linecap": "round",
|
|
1794
1792
|
"stroke-linejoin": "round"
|
|
1795
1793
|
};
|
|
1796
|
-
const
|
|
1794
|
+
const _t = ([n, t, e]) => {
|
|
1797
1795
|
const i = document.createElementNS("http://www.w3.org/2000/svg", n);
|
|
1798
1796
|
return Object.keys(t).forEach((o) => {
|
|
1799
1797
|
i.setAttribute(o, String(t[o]));
|
|
1800
1798
|
}), e?.length && e.forEach((o) => {
|
|
1801
|
-
const s =
|
|
1799
|
+
const s = _t(o);
|
|
1802
1800
|
i.appendChild(s);
|
|
1803
1801
|
}), i;
|
|
1804
1802
|
}, At = (n, t = {}) => {
|
|
1805
1803
|
const i = {
|
|
1806
|
-
...
|
|
1804
|
+
...ui,
|
|
1807
1805
|
...t
|
|
1808
1806
|
};
|
|
1809
|
-
return
|
|
1807
|
+
return _t(["svg", i, n]);
|
|
1810
1808
|
};
|
|
1811
1809
|
const hi = [
|
|
1812
1810
|
[
|
|
@@ -1858,17 +1856,17 @@ const yi = [
|
|
|
1858
1856
|
["path", { d: "m3 21 7-7" }],
|
|
1859
1857
|
["path", { d: "M9 21H3v-6" }]
|
|
1860
1858
|
];
|
|
1861
|
-
const
|
|
1859
|
+
const wi = [
|
|
1862
1860
|
["path", { d: "m14 10 7-7" }],
|
|
1863
1861
|
["path", { d: "M20 10h-6V4" }],
|
|
1864
1862
|
["path", { d: "m3 21 7-7" }],
|
|
1865
1863
|
["path", { d: "M4 14h6v6" }]
|
|
1866
1864
|
];
|
|
1867
|
-
const
|
|
1865
|
+
const Si = [
|
|
1868
1866
|
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }],
|
|
1869
1867
|
["path", { d: "M3 3v5h5" }]
|
|
1870
1868
|
];
|
|
1871
|
-
const
|
|
1869
|
+
const ki = [
|
|
1872
1870
|
["path", { d: "M10 5H3" }],
|
|
1873
1871
|
["path", { d: "M12 19H3" }],
|
|
1874
1872
|
["path", { d: "M14 3v4" }],
|
|
@@ -1879,11 +1877,11 @@ const Ci = [
|
|
|
1879
1877
|
["path", { d: "M8 10v4" }],
|
|
1880
1878
|
["path", { d: "M8 12H3" }]
|
|
1881
1879
|
];
|
|
1882
|
-
const
|
|
1880
|
+
const Ci = [
|
|
1883
1881
|
["path", { d: "M18 6 6 18" }],
|
|
1884
1882
|
["path", { d: "m6 6 12 12" }]
|
|
1885
1883
|
];
|
|
1886
|
-
const
|
|
1884
|
+
const _i = [
|
|
1887
1885
|
["circle", { cx: "11", cy: "11", r: "8" }],
|
|
1888
1886
|
["line", { x1: "21", x2: "16.65", y1: "21", y2: "16.65" }],
|
|
1889
1887
|
["line", { x1: "11", x2: "11", y1: "8", y2: "14" }],
|
|
@@ -1902,17 +1900,17 @@ const g = {
|
|
|
1902
1900
|
annotations: (n) => b(vi, n),
|
|
1903
1901
|
annotationsOff: (n) => b(bi, n),
|
|
1904
1902
|
fullscreen: (n) => b(yi, n),
|
|
1905
|
-
exitFullscreen: (n) => b(
|
|
1903
|
+
exitFullscreen: (n) => b(wi, n),
|
|
1906
1904
|
screenshot: (n) => b(pi, n),
|
|
1907
1905
|
tiltUp: (n) => b(gi, n),
|
|
1908
1906
|
tiltDown: (n) => b(Et, n),
|
|
1909
1907
|
rotateLeft: (n) => b(mi, n),
|
|
1910
1908
|
rotateRight: (n) => b(fi, n),
|
|
1911
|
-
zoomIn: (n) => b(
|
|
1909
|
+
zoomIn: (n) => b(_i, n),
|
|
1912
1910
|
zoomOut: (n) => b(Ai, n),
|
|
1913
|
-
reset: (n) => b(
|
|
1914
|
-
configurator: (n) => b(
|
|
1915
|
-
close: (n) => b(
|
|
1911
|
+
reset: (n) => b(Si, n),
|
|
1912
|
+
configurator: (n) => b(ki, n),
|
|
1913
|
+
close: (n) => b(Ci, n)
|
|
1916
1914
|
};
|
|
1917
1915
|
class v {
|
|
1918
1916
|
element;
|
|
@@ -2043,13 +2041,13 @@ class Ri {
|
|
|
2043
2041
|
const r = document.createElement("option");
|
|
2044
2042
|
r.value = "", r.disabled = !0, r.textContent = i, this.select.appendChild(r);
|
|
2045
2043
|
let a = !1;
|
|
2046
|
-
for (let
|
|
2047
|
-
const f = e[
|
|
2048
|
-
h.value = f, h.textContent = s?.[
|
|
2044
|
+
for (let u = 0; u < e.length; u++) {
|
|
2045
|
+
const f = e[u], h = document.createElement("option");
|
|
2046
|
+
h.value = f, h.textContent = s?.[u] ?? f, f === o && (h.selected = !0, a = !0), this.select.appendChild(h);
|
|
2049
2047
|
}
|
|
2050
2048
|
a || (r.selected = !0);
|
|
2051
|
-
const
|
|
2052
|
-
|
|
2049
|
+
const d = At(Et, { width: 16, height: 16, "stroke-width": 2 });
|
|
2050
|
+
d.classList.add("ui-native-select-icon"), this.element = document.createElement("div"), this.element.className = "ui-native-select-wrap", this.element.appendChild(this.select), this.element.appendChild(d);
|
|
2053
2051
|
}
|
|
2054
2052
|
setSelected(t) {
|
|
2055
2053
|
this.select.value = t;
|
|
@@ -2130,7 +2128,7 @@ class Ii {
|
|
|
2130
2128
|
return this.options.unit === void 0 ? e : `${e} ${this.options.unit}`;
|
|
2131
2129
|
}
|
|
2132
2130
|
}
|
|
2133
|
-
const
|
|
2131
|
+
const S = {
|
|
2134
2132
|
fontFamily: {
|
|
2135
2133
|
sans: ["Mona Sans", "ui-sans-serif", "system-ui", "sans-serif", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]
|
|
2136
2134
|
},
|
|
@@ -2147,7 +2145,7 @@ const w = {
|
|
|
2147
2145
|
medium: "500",
|
|
2148
2146
|
semibold: "600"
|
|
2149
2147
|
}
|
|
2150
|
-
}, x =
|
|
2148
|
+
}, x = S.fontFamily.sans.join(", "), Oi = `
|
|
2151
2149
|
--primary: oklch(5% 0 0);
|
|
2152
2150
|
--primary-foreground: oklch(100% 0 0);
|
|
2153
2151
|
--secondary: oklch(92% 0 0);
|
|
@@ -2433,6 +2431,11 @@ const w = {
|
|
|
2433
2431
|
border: 1px solid var(--border);
|
|
2434
2432
|
border-radius: var(--radius);
|
|
2435
2433
|
padding: 0.75rem 1rem;
|
|
2434
|
+
/* The popup is absolutely positioned inside the ~28px marker anchor, so
|
|
2435
|
+
without an explicit width it shrink-to-fits against that anchor and
|
|
2436
|
+
collapses to one word per line. max-content sizes it by its own text,
|
|
2437
|
+
capped below. */
|
|
2438
|
+
inline-size: max-content;
|
|
2436
2439
|
max-inline-size: 15rem;
|
|
2437
2440
|
box-shadow: 0 4px 6px oklch(5% 0 0 / 8%), 0 2px 4px oklch(5% 0 0 / 6%);
|
|
2438
2441
|
pointer-events: auto;
|
|
@@ -2440,6 +2443,13 @@ const w = {
|
|
|
2440
2443
|
}
|
|
2441
2444
|
.vd-annotation-popup:focus { outline: none; }
|
|
2442
2445
|
|
|
2446
|
+
/* Flipped below the marker when the popup would clip the container's top
|
|
2447
|
+
edge; the layer positions it at open time and on the render cadence. */
|
|
2448
|
+
.vd-annotation-popup--below {
|
|
2449
|
+
inset-block-end: auto;
|
|
2450
|
+
inset-block-start: calc(100% + 0.5rem);
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2443
2453
|
.vd-annotation-popup-close {
|
|
2444
2454
|
position: absolute;
|
|
2445
2455
|
inset-block-start: 0.375rem;
|
|
@@ -2476,9 +2486,12 @@ const w = {
|
|
|
2476
2486
|
}
|
|
2477
2487
|
}
|
|
2478
2488
|
|
|
2489
|
+
/* Opacity only: the layer sets the popup's transform inline to clamp it
|
|
2490
|
+
inside the container, and a keyframe animating transform would override
|
|
2491
|
+
that for its duration and make the popup jump at the end. */
|
|
2479
2492
|
@keyframes vd-popup-in {
|
|
2480
|
-
from { opacity: 0;
|
|
2481
|
-
to { opacity: 1;
|
|
2493
|
+
from { opacity: 0; }
|
|
2494
|
+
to { opacity: 1; }
|
|
2482
2495
|
}
|
|
2483
2496
|
|
|
2484
2497
|
.vd-annotation-popup-title {
|
|
@@ -2539,7 +2552,7 @@ function xt() {
|
|
|
2539
2552
|
const n = document.createElement("style");
|
|
2540
2553
|
n.id = "vd-ui-vanilla", n.textContent = Li, document.head.appendChild(n);
|
|
2541
2554
|
}
|
|
2542
|
-
const Mi =
|
|
2555
|
+
const Mi = S.fontFamily.sans.join(", ");
|
|
2543
2556
|
class Ni {
|
|
2544
2557
|
qrLib = null;
|
|
2545
2558
|
dialog = null;
|
|
@@ -2555,14 +2568,14 @@ class Ni {
|
|
|
2555
2568
|
gap: l[3],
|
|
2556
2569
|
fontFamily: Mi
|
|
2557
2570
|
}), this.dialog.card.element.appendChild(this.createText(Ue(), {
|
|
2558
|
-
fontSize:
|
|
2559
|
-
fontWeight:
|
|
2571
|
+
fontSize: S.fontSize.base,
|
|
2572
|
+
fontWeight: S.fontWeight.semibold,
|
|
2560
2573
|
color: m.neutral[900]
|
|
2561
2574
|
})), this.dialog.card.element.appendChild(this.createText(qe(), {
|
|
2562
|
-
fontSize:
|
|
2575
|
+
fontSize: S.fontSize.sm,
|
|
2563
2576
|
color: m.neutral[600]
|
|
2564
|
-
})), this.qrSlot = this.createQrSlot(), this.dialog.card.element.appendChild(this.qrSlot), this.dialog.card.element.appendChild(this.createText(
|
|
2565
|
-
fontSize:
|
|
2577
|
+
})), this.qrSlot = this.createQrSlot(), this.dialog.card.element.appendChild(this.qrSlot), this.dialog.card.element.appendChild(this.createText(Qe(), {
|
|
2578
|
+
fontSize: S.fontSize.xs,
|
|
2566
2579
|
color: m.neutral[500]
|
|
2567
2580
|
}));
|
|
2568
2581
|
const t = new v({
|
|
@@ -2605,12 +2618,12 @@ class Ni {
|
|
|
2605
2618
|
return e.src = t, e.alt = "QR code", e;
|
|
2606
2619
|
}
|
|
2607
2620
|
}
|
|
2608
|
-
function
|
|
2621
|
+
function dt(n) {
|
|
2609
2622
|
const t = Math.max(0, Math.min(1, n));
|
|
2610
2623
|
return t * t * (3 - 2 * t);
|
|
2611
2624
|
}
|
|
2612
2625
|
function zi(n, t, e, i, o, s) {
|
|
2613
|
-
const [r, a,
|
|
2626
|
+
const [r, a, d] = n, u = Math.cos(t), f = Math.sin(t), h = u * r + f * d, E = -f * r + u * d, _ = Math.cos(e), C = Math.sin(e), I = _ * a - C * E, F = C * a + _ * E, tt = 0.55;
|
|
2614
2627
|
return [i + h * s * tt, o - I * s * tt, F];
|
|
2615
2628
|
}
|
|
2616
2629
|
function Pi(n, t, e) {
|
|
@@ -2624,7 +2637,7 @@ function Fi(n, t, e, i, o) {
|
|
|
2624
2637
|
];
|
|
2625
2638
|
Pi(n, s, a);
|
|
2626
2639
|
}
|
|
2627
|
-
const $ = [-1, -1, 1], B = [1, -1, 1], U = [1, -1, -1], V = [-1, -1, -1], j = [-1, 1, 1], H = [1, 1, 1], q = [1, 1, -1], G = [-1, 1, -1],
|
|
2640
|
+
const $ = [-1, -1, 1], B = [1, -1, 1], U = [1, -1, -1], V = [-1, -1, -1], j = [-1, 1, 1], H = [1, 1, 1], q = [1, 1, -1], G = [-1, 1, -1], ut = [
|
|
2628
2641
|
[$, B],
|
|
2629
2642
|
[B, U],
|
|
2630
2643
|
[U, V],
|
|
@@ -2753,15 +2766,15 @@ class Bi {
|
|
|
2753
2766
|
return;
|
|
2754
2767
|
const t = this.canvas.width / Math.min(devicePixelRatio, 2), e = this.canvas.height / Math.min(devicePixelRatio, 2), i = (performance.now() - this.startTime) / 1e3;
|
|
2755
2768
|
this.ctx.fillStyle = "#fff", this.ctx.fillRect(0, 0, t, e);
|
|
2756
|
-
const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, a = 0.785,
|
|
2757
|
-
let
|
|
2758
|
-
h < 0.35 ?
|
|
2759
|
-
for (let
|
|
2760
|
-
const I =
|
|
2769
|
+
const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, a = 0.785, d = 0.615, u = (C) => zi(C, a, d, o, s, r), f = 6, h = i % f / f, E = ut.length;
|
|
2770
|
+
let _;
|
|
2771
|
+
h < 0.35 ? _ = dt(h / 0.35) * E : h < 0.55 ? _ = E : h < 0.9 ? _ = (1 - dt((h - 0.55) / 0.35)) * E : _ = 0, this.ctx.shadowBlur = 5, this.ctx.shadowColor = "rgba(30,30,30,0.08)";
|
|
2772
|
+
for (let C = 0; C < E && !(C >= _); C++) {
|
|
2773
|
+
const I = ut[C];
|
|
2761
2774
|
if (I === void 0)
|
|
2762
2775
|
continue;
|
|
2763
|
-
const F = Math.min(1,
|
|
2764
|
-
Fi(this.ctx,
|
|
2776
|
+
const F = Math.min(1, _ - C);
|
|
2777
|
+
Fi(this.ctx, u, I[0], I[1], F);
|
|
2765
2778
|
}
|
|
2766
2779
|
this.ctx.shadowBlur = 0;
|
|
2767
2780
|
}
|
|
@@ -2856,29 +2869,29 @@ class P {
|
|
|
2856
2869
|
static buildDpad(t, e, i, o, s) {
|
|
2857
2870
|
const r = document.createElement("div");
|
|
2858
2871
|
r.className = "vd-dpad";
|
|
2859
|
-
for (const [a,
|
|
2872
|
+
for (const [a, d] of [
|
|
2860
2873
|
[t, "up"],
|
|
2861
2874
|
[e, "left"],
|
|
2862
2875
|
[i, "center"],
|
|
2863
2876
|
[o, "right"],
|
|
2864
2877
|
[s, "down"]
|
|
2865
2878
|
])
|
|
2866
|
-
a.element.classList.add(`vd-dpad-${
|
|
2879
|
+
a.element.classList.add(`vd-dpad-${d}`), r.appendChild(a.element);
|
|
2867
2880
|
return r;
|
|
2868
2881
|
}
|
|
2869
2882
|
}
|
|
2870
2883
|
function Vi(n, t, e) {
|
|
2871
2884
|
const i = (r) => Math.max(t.limits?.minZoom ?? 1, Math.min(t.limits?.maxZoom ?? 1 / 0, r)), o = (r) => {
|
|
2872
|
-
const a = t.limits?.minRotate,
|
|
2873
|
-
return a !== void 0 ||
|
|
2885
|
+
const a = t.limits?.minRotate, d = t.limits?.maxRotate;
|
|
2886
|
+
return a !== void 0 || d !== void 0 ? Math.max(a ?? -1 / 0, Math.min(d ?? 1 / 0, r)) : r;
|
|
2874
2887
|
}, s = (r) => {
|
|
2875
|
-
const a = t.limits?.minTilt,
|
|
2876
|
-
if (a !== void 0 ||
|
|
2877
|
-
e.targetTilt = Math.max(a ?? 0, Math.min(
|
|
2888
|
+
const a = t.limits?.minTilt, d = t.limits?.maxTilt;
|
|
2889
|
+
if (a !== void 0 || d !== void 0) {
|
|
2890
|
+
e.targetTilt = Math.max(a ?? 0, Math.min(d ?? 180, e.targetTilt + r)), n.tilt(e.targetTilt).set();
|
|
2878
2891
|
return;
|
|
2879
2892
|
}
|
|
2880
|
-
const
|
|
2881
|
-
|
|
2893
|
+
const u = e.targetTilt + r;
|
|
2894
|
+
u > 180 || u < 0 ? (e.targetTilt = u > 180 ? 360 - u : -u, e.thetaOffset = (e.thetaOffset + 180) % 360, n.tilt(e.targetTilt).rotate(e.targetRotation + e.thetaOffset).set()) : (e.targetTilt = u, n.tilt(e.targetTilt).set());
|
|
2882
2895
|
};
|
|
2883
2896
|
return {
|
|
2884
2897
|
zoomOut: new v({ variant: "outline", size: "icon", label: Pn(), icon: g.zoomOut(), onClick: () => {
|
|
@@ -2909,10 +2922,10 @@ function ji(n, t, e) {
|
|
|
2909
2922
|
i !== void 0 && (n.zoomOut.element.disabled = i.minZoom !== void 0 && e.zoom <= i.minZoom + R, n.zoomIn.element.disabled = i.maxZoom !== void 0 && e.zoom >= i.maxZoom - R, n.tiltUp.element.disabled = i.minTilt !== void 0 && e.tilt <= i.minTilt + R, n.tiltDown.element.disabled = i.maxTilt !== void 0 && e.tilt >= i.maxTilt - R, n.rotateLeft.element.disabled = i.minRotate !== void 0 && e.rotation <= i.minRotate + R, n.rotateRight.element.disabled = i.maxRotate !== void 0 && e.rotation >= i.maxRotate - R);
|
|
2910
2923
|
}
|
|
2911
2924
|
const T = {
|
|
2912
|
-
/** Attribute selection requested (cancelable). `detail`: `{ attribute, value }`. */
|
|
2913
|
-
SELECT: "
|
|
2914
|
-
/** Attribute selection applied. `detail`: `{ attribute, value }`. */
|
|
2915
|
-
SELECTED: "
|
|
2925
|
+
/** Attribute selection requested (cancelable, does not bubble). `detail`: `{ attribute, value }`. */
|
|
2926
|
+
SELECT: "vd:select",
|
|
2927
|
+
/** Attribute selection applied (does not bubble). `detail`: `{ attribute, value }`. */
|
|
2928
|
+
SELECTED: "vd:selected",
|
|
2916
2929
|
/** Focus changed (bubbles). `detail`: `{ component, attributes }`, or `null` for the overview. */
|
|
2917
2930
|
FOCUS_CHANGE: "vd:focus-change",
|
|
2918
2931
|
/** Resolved configuration changed (bubbles). `detail`: the resolved configuration, or `null` when nothing matches. */
|
|
@@ -2942,11 +2955,11 @@ function qi(n, t, e) {
|
|
|
2942
2955
|
}).format(o);
|
|
2943
2956
|
}
|
|
2944
2957
|
function Gi(n, t, e, i, o, s, r) {
|
|
2945
|
-
const a = p(),
|
|
2958
|
+
const a = p(), d = n.values.map((h) => qi(Number(h), t, a)), u = n.values.find((h) => e.getValue(n.name, h)?.isSelected === !0) ?? n.defaultValue, f = new Ii(n.values, {
|
|
2946
2959
|
label: n.name,
|
|
2947
|
-
labels:
|
|
2960
|
+
labels: d,
|
|
2948
2961
|
unit: t.displayUnit,
|
|
2949
|
-
...
|
|
2962
|
+
...u !== void 0 && { initialSelected: u }
|
|
2950
2963
|
});
|
|
2951
2964
|
return f.onSelect((h) => {
|
|
2952
2965
|
o(n.name, h);
|
|
@@ -2971,14 +2984,14 @@ function K(n) {
|
|
|
2971
2984
|
const t = n.replace(/([A-Z])/g, " $1").trim();
|
|
2972
2985
|
return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
|
|
2973
2986
|
}
|
|
2974
|
-
function
|
|
2987
|
+
function Qi(n, t, e, i, o, s) {
|
|
2975
2988
|
const r = document.createElement("div");
|
|
2976
2989
|
r.className = "vd-attribute", r.dataset.name = n.name;
|
|
2977
2990
|
const a = document.createElement("span");
|
|
2978
2991
|
a.className = "vd-attribute-label", a.textContent = K(n.name), a.id = `vd-attribute-label-${Wi++}`, r.appendChild(a), r.setAttribute("role", "group"), r.setAttribute("aria-labelledby", a.id);
|
|
2979
|
-
const
|
|
2992
|
+
const d = (f) => {
|
|
2980
2993
|
r.style.display = f ? "none" : "";
|
|
2981
|
-
},
|
|
2994
|
+
}, u = n.dimension !== void 0 ? Gi(
|
|
2982
2995
|
n,
|
|
2983
2996
|
n.dimension,
|
|
2984
2997
|
t,
|
|
@@ -2986,21 +2999,21 @@ function Yi(n, t, e, i, o, s) {
|
|
|
2986
2999
|
o,
|
|
2987
3000
|
i,
|
|
2988
3001
|
s
|
|
2989
|
-
) :
|
|
2990
|
-
return r.appendChild(
|
|
3002
|
+
) : Yi(n, t, e, i, s);
|
|
3003
|
+
return r.appendChild(u.element), { element: r, setSelectable: u.setSelectable, setHidden: d };
|
|
2991
3004
|
}
|
|
2992
|
-
function
|
|
3005
|
+
function Yi(n, t, e, i, o) {
|
|
2993
3006
|
const s = n.values.find(
|
|
2994
|
-
(
|
|
3007
|
+
(d) => t.getValue(n.name, d)?.isSelected === !0
|
|
2995
3008
|
), r = n.values.map(K), a = n.values.length <= Zi ? new Ti(n.values, s, r) : new Ri(n.name, n.values, K(n.name), s, r);
|
|
2996
|
-
return a.onSelect((
|
|
2997
|
-
e.dispatch(T.SELECT, { attribute: n.name, value:
|
|
2998
|
-
}), o(n.name, (
|
|
2999
|
-
a.setSelected(
|
|
3009
|
+
return a.onSelect((d) => {
|
|
3010
|
+
e.dispatch(T.SELECT, { attribute: n.name, value: d }, !0).defaultPrevented || i(n.name, d);
|
|
3011
|
+
}), o(n.name, (d) => {
|
|
3012
|
+
a.setSelected(d.value), e.dispatch(T.SELECTED, { attribute: n.name, value: d.value });
|
|
3000
3013
|
}), {
|
|
3001
3014
|
element: a.element,
|
|
3002
|
-
setSelectable: (
|
|
3003
|
-
a.setEnabled(
|
|
3015
|
+
setSelectable: (d) => {
|
|
3016
|
+
a.setEnabled(d);
|
|
3004
3017
|
}
|
|
3005
3018
|
};
|
|
3006
3019
|
}
|
|
@@ -3050,7 +3063,7 @@ class Ji {
|
|
|
3050
3063
|
try {
|
|
3051
3064
|
await this.configuration.submit(), this.setState("success", ri());
|
|
3052
3065
|
} catch {
|
|
3053
|
-
this.setState("failed",
|
|
3066
|
+
this.setState("failed", di());
|
|
3054
3067
|
}
|
|
3055
3068
|
this.scheduleReset();
|
|
3056
3069
|
}
|
|
@@ -3112,7 +3125,7 @@ class no {
|
|
|
3112
3125
|
this.container = t, e.classList.add("vd-attributes-sidebar"), this.closeButton = new v({
|
|
3113
3126
|
variant: "ghost",
|
|
3114
3127
|
size: "icon-sm",
|
|
3115
|
-
label:
|
|
3128
|
+
label: _n(),
|
|
3116
3129
|
icon: g.close({ size: 18 }),
|
|
3117
3130
|
onClick: () => {
|
|
3118
3131
|
this.expanded = !1, this.render();
|
|
@@ -3122,7 +3135,7 @@ class no {
|
|
|
3122
3135
|
i.className = "vd-sidebar-header", i.appendChild(this.closeButton.element), this.body = document.createElement("div"), this.body.className = "vd-sidebar-body", this.body.appendChild(e), this.element = document.createElement("div"), this.element.className = "vd-sidebar vd-hidden", this.element.append(i, this.body), t.appendChild(this.element), this.openButton = new v({
|
|
3123
3136
|
variant: "outline",
|
|
3124
3137
|
size: "icon",
|
|
3125
|
-
label:
|
|
3138
|
+
label: wn(),
|
|
3126
3139
|
icon: g.configurator({ size: 18 }),
|
|
3127
3140
|
onClick: () => {
|
|
3128
3141
|
this.expanded = !0, this.render();
|
|
@@ -3167,7 +3180,7 @@ const oo = {
|
|
|
3167
3180
|
function so(n, t) {
|
|
3168
3181
|
return (oo[n ?? ""] ?? (() => new Rt()))(t);
|
|
3169
3182
|
}
|
|
3170
|
-
const Z =
|
|
3183
|
+
const Z = S.fontFamily.sans.join(", "), W = `
|
|
3171
3184
|
position: absolute;
|
|
3172
3185
|
display: flex;
|
|
3173
3186
|
z-index: 10;
|
|
@@ -3255,8 +3268,8 @@ const Z = w.fontFamily.sans.join(", "), W = `
|
|
|
3255
3268
|
|
|
3256
3269
|
/* Micro-label: recedes so the controls lead. */
|
|
3257
3270
|
.vd-attribute-label {
|
|
3258
|
-
font-size: ${
|
|
3259
|
-
font-weight: ${
|
|
3271
|
+
font-size: ${S.fontSize.xs};
|
|
3272
|
+
font-weight: ${S.fontWeight.medium};
|
|
3260
3273
|
color: ${m.neutral[500]};
|
|
3261
3274
|
text-transform: uppercase;
|
|
3262
3275
|
letter-spacing: 0.05em;
|
|
@@ -3352,13 +3365,13 @@ const Z = w.fontFamily.sans.join(", "), W = `
|
|
|
3352
3365
|
}
|
|
3353
3366
|
|
|
3354
3367
|
.vd-price {
|
|
3355
|
-
font-size: ${
|
|
3356
|
-
font-weight: ${
|
|
3368
|
+
font-size: ${S.fontSize.lg};
|
|
3369
|
+
font-weight: ${S.fontWeight.semibold};
|
|
3357
3370
|
color: ${m.neutral[900]};
|
|
3358
3371
|
}
|
|
3359
3372
|
|
|
3360
3373
|
.vd-vat {
|
|
3361
|
-
font-size: ${
|
|
3374
|
+
font-size: ${S.fontSize.xs};
|
|
3362
3375
|
color: ${m.neutral[500]};
|
|
3363
3376
|
}
|
|
3364
3377
|
|
|
@@ -3432,7 +3445,7 @@ class co {
|
|
|
3432
3445
|
this.loading?.showError(t);
|
|
3433
3446
|
}
|
|
3434
3447
|
applyViewerSettings(t) {
|
|
3435
|
-
this.settings = t, t.language !== void 0 &&
|
|
3448
|
+
this.settings = t, t.language !== void 0 && St(t.language, { reload: !1 }), this.syncScreenshotButton(), this.actionBar?.applySettings(t), this.cameraControls !== null && (this.cameraControls.element.style.display = t.cameraControls === !0 ? "flex" : "none"), this.placeScreenshotButton();
|
|
3436
3449
|
}
|
|
3437
3450
|
renderAttributeControls(t, e) {
|
|
3438
3451
|
if (!(this.container === null || this.slots.topRight === null || this.slots.bottomRight === null) && (this.cameraControls?.element.remove(), this.cameraControls = null, this.teardownConfigurator(), this.settings.cameraControls === !0 && (this.cameraControls = new P(
|
|
@@ -3441,7 +3454,7 @@ class co {
|
|
|
3441
3454
|
), this.cameraControls.element.style.display = "none", this.slots.topRight.appendChild(this.cameraControls.element)), this.placeScreenshotButton(), e.length !== 0)) {
|
|
3442
3455
|
this.attributes = document.createElement("div"), this.attributes.className = "vd-attributes", this.groupHandles = /* @__PURE__ */ new Map();
|
|
3443
3456
|
for (const i of e) {
|
|
3444
|
-
const o =
|
|
3457
|
+
const o = Qi(
|
|
3445
3458
|
i,
|
|
3446
3459
|
t,
|
|
3447
3460
|
this.options.eventBus,
|
|
@@ -3555,7 +3568,7 @@ class ho {
|
|
|
3555
3568
|
t.searchParams.set("license", this.options.license), t.searchParams.set("model", this.options.model);
|
|
3556
3569
|
return;
|
|
3557
3570
|
}
|
|
3558
|
-
t.searchParams.set("app", this.options.app), (this.options.license !== void 0 || this.options.model !== void 0) &&
|
|
3571
|
+
t.searchParams.set("app", this.options.app), (this.options.license !== void 0 || this.options.model !== void 0) && k.warn("Both `app` and `license`/`model` were supplied: `app` wins, the pair was ignored");
|
|
3559
3572
|
}
|
|
3560
3573
|
getServerUrl() {
|
|
3561
3574
|
if (this.serverHost !== void 0)
|
|
@@ -3575,7 +3588,7 @@ class ho {
|
|
|
3575
3588
|
function po(n) {
|
|
3576
3589
|
const { messenger: t } = n;
|
|
3577
3590
|
t.on(c.HANDSHAKE, (e) => {
|
|
3578
|
-
Nt(e) && (
|
|
3591
|
+
Nt(e) && (k.info("Server handshake received, flushing publisher queue"), t.markReady());
|
|
3579
3592
|
}), t.on(c.SESSION, (e) => {
|
|
3580
3593
|
zt(e) && n.onSession(e.sessionId);
|
|
3581
3594
|
}), t.on(c.MUTATION, (e) => {
|
|
@@ -3613,7 +3626,7 @@ class fo {
|
|
|
3613
3626
|
this.onReady = t;
|
|
3614
3627
|
}
|
|
3615
3628
|
handleMappingReceived() {
|
|
3616
|
-
this.ready || (this.ready = !0,
|
|
3629
|
+
this.ready || (this.ready = !0, k.info("Mapping received from server, client is now ready"), this.onReady?.());
|
|
3617
3630
|
}
|
|
3618
3631
|
get isReady() {
|
|
3619
3632
|
return this.ready;
|
|
@@ -3644,9 +3657,9 @@ class bo {
|
|
|
3644
3657
|
options;
|
|
3645
3658
|
serverHost;
|
|
3646
3659
|
iframeParams;
|
|
3647
|
-
/** The composed AR flow, or undefined in
|
|
3660
|
+
/** The composed AR flow, or undefined in a build that composes none. */
|
|
3648
3661
|
arActivation;
|
|
3649
|
-
/** The composed sync tracker, or undefined in
|
|
3662
|
+
/** The composed sync tracker, or undefined in a build that composes none. */
|
|
3650
3663
|
syncTracker;
|
|
3651
3664
|
iframe;
|
|
3652
3665
|
container;
|
|
@@ -3669,16 +3682,16 @@ class bo {
|
|
|
3669
3682
|
};
|
|
3670
3683
|
this.attributes = new me(o, L, (s, r) => {
|
|
3671
3684
|
this.notifyMutationFailed(s, r);
|
|
3672
|
-
}), this.selectableState = new fe(), this.snapshotApi = new
|
|
3685
|
+
}), this.selectableState = new fe(), this.snapshotApi = new Ce(o), this.annotationsApi = new Wt(o, L), this.cameraApi = new ge(o), this.cameraPositionApi = new be(), this.focusApi = new Se(o, (s) => {
|
|
3673
3686
|
this.dispatchFocusChange(s);
|
|
3674
|
-
}, L), this.configurationApi = new
|
|
3687
|
+
}, L), this.configurationApi = new we(
|
|
3675
3688
|
(s) => {
|
|
3676
3689
|
this.dispatchConfigurationChange(s);
|
|
3677
3690
|
},
|
|
3678
3691
|
(s) => {
|
|
3679
3692
|
this.dispatchConfigurationSubmit(s);
|
|
3680
3693
|
}
|
|
3681
|
-
), this.eventBus = new
|
|
3694
|
+
), this.eventBus = new _e(), this.arActivation = i.createArActivation?.(o), this.syncTracker = i.createSyncTracker?.(), this.readyStateTracker = new fo(() => {
|
|
3682
3695
|
this.notifyReady();
|
|
3683
3696
|
}), this.ui = this.createStandardInterface(), this.wireIncomingMessages(), i.registerHandlers?.(this.messenger, o), this.messenger.start(), this.createAndConnectIframe();
|
|
3684
3697
|
}
|
|
@@ -3707,13 +3720,11 @@ class bo {
|
|
|
3707
3720
|
}
|
|
3708
3721
|
});
|
|
3709
3722
|
}
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
* member instance once composition lands; today the host is the only one.
|
|
3716
|
-
*/
|
|
3723
|
+
// The visible toggle composes its message here because it is the one sender
|
|
3724
|
+
// allowed to stamp `origin: 'control'`: the viewer only counts
|
|
3725
|
+
// control-originated flips as Shopper use. The public `client.annotations`
|
|
3726
|
+
// facade stays origin-less on purpose. One send per member instance once
|
|
3727
|
+
// composition lands; today the host is the only one.
|
|
3717
3728
|
sendControlAnnotationToggle(t) {
|
|
3718
3729
|
this.messenger.send({
|
|
3719
3730
|
type: c.ANNOTATION_TOGGLE,
|
|
@@ -3808,18 +3819,18 @@ class bo {
|
|
|
3808
3819
|
const s = Object.entries(i).filter(([r, a]) => e[r] !== a).map(
|
|
3809
3820
|
([r, a]) => `${r} (metadata: ${e[r] ?? "undefined"}, override: ${a})`
|
|
3810
3821
|
);
|
|
3811
|
-
s.length > 0 &&
|
|
3822
|
+
s.length > 0 && k.warn(`Viewer settings override active: ${s.join(", ")}`);
|
|
3812
3823
|
}
|
|
3813
3824
|
this.ui.applyViewerSettings(o), this.echoAnnotationsDifference(e?.annotations, o.annotations);
|
|
3814
3825
|
}
|
|
3815
3826
|
this.cameraPositionApi.applyLimits(t.cameraLimits);
|
|
3816
3827
|
}
|
|
3828
|
+
// The viewer already applied the announced mode itself, so speaking up when
|
|
3829
|
+
// the merged mode matches would toggle it back and forth for nothing. A boot
|
|
3830
|
+
// without overrides therefore sends no toggle at all.
|
|
3817
3831
|
/**
|
|
3818
|
-
*
|
|
3819
|
-
*
|
|
3820
|
-
* integrator override) differs from what CONFIG announced, in either
|
|
3821
|
-
* direction. Equal modes echo nothing, so a boot without overrides sends
|
|
3822
|
-
* no toggle at all.
|
|
3832
|
+
* Tell the viewer about the annotation mode only when the merged mode differs
|
|
3833
|
+
* from the one it announced.
|
|
3823
3834
|
*/
|
|
3824
3835
|
echoAnnotationsDifference(t, e) {
|
|
3825
3836
|
e === void 0 || e === t || this.annotationsApi.setEnabled(e === "show" || e === "toggle-shown");
|
|
@@ -3829,7 +3840,7 @@ class bo {
|
|
|
3829
3840
|
this.messenger.send({ type: c.FULLSCREEN });
|
|
3830
3841
|
}
|
|
3831
3842
|
initializeLogging() {
|
|
3832
|
-
this.options.debug === !0 && pe(),
|
|
3843
|
+
this.options.debug === !0 && pe(), k.info("Initializing Virtualdisplay client", {
|
|
3833
3844
|
...this.options.app === void 0 ? { model: this.options.model } : { app: this.options.app }
|
|
3834
3845
|
});
|
|
3835
3846
|
}
|
|
@@ -3871,11 +3882,9 @@ class bo {
|
|
|
3871
3882
|
this.mutationFailedCallbacks.push(t);
|
|
3872
3883
|
}
|
|
3873
3884
|
/**
|
|
3874
|
-
* Subscribe to
|
|
3875
|
-
*
|
|
3876
|
-
*
|
|
3877
|
-
* exclusions never sends one: everything stays selectable and this never
|
|
3878
|
-
* fires.
|
|
3885
|
+
* Subscribe to which values can be picked right now, per attribute. Fires
|
|
3886
|
+
* immediately when a snapshot already arrived. A model with no exclusions
|
|
3887
|
+
* never sends one, so this never fires and everything stays selectable.
|
|
3879
3888
|
*/
|
|
3880
3889
|
onSelectableChange(t) {
|
|
3881
3890
|
this.selectableState.onChange(t);
|
|
@@ -3892,12 +3901,11 @@ class bo {
|
|
|
3892
3901
|
getSelectable(t) {
|
|
3893
3902
|
return this.selectableState.selectableFor(t);
|
|
3894
3903
|
}
|
|
3904
|
+
// Exists for a host page that hides the built-in button and owns its own AR
|
|
3905
|
+
// affordance: without this it would have no way into the same flow.
|
|
3895
3906
|
/**
|
|
3896
|
-
*
|
|
3897
|
-
*
|
|
3898
|
-
* e.g. the AR landing, which owns a single custom AR affordance) still needs
|
|
3899
|
-
* an entry point to the same flow that button would have called. A no-op
|
|
3900
|
-
* where no AR flow is composed (the studio client has none).
|
|
3907
|
+
* Start the AR flow directly, as the built-in AR button would. Does nothing
|
|
3908
|
+
* when `viewerSettings.ar` is off or the build composes no AR flow.
|
|
3901
3909
|
*/
|
|
3902
3910
|
activateAr() {
|
|
3903
3911
|
this.arActivation?.activate();
|
|
@@ -3939,8 +3947,8 @@ function yo(n) {
|
|
|
3939
3947
|
const t = new URL(`https://${vo}/go`);
|
|
3940
3948
|
return n.sessionId !== void 0 ? t.searchParams.set("session", n.sessionId) : n.app !== void 0 ? t.searchParams.set("app", n.app) : n.license !== void 0 && n.model !== void 0 && (t.searchParams.set("license", n.license), t.searchParams.set("model", n.model)), t.toString();
|
|
3941
3949
|
}
|
|
3942
|
-
const
|
|
3943
|
-
class
|
|
3950
|
+
const wo = 1500;
|
|
3951
|
+
class So {
|
|
3944
3952
|
options;
|
|
3945
3953
|
qrModal = new Ni();
|
|
3946
3954
|
/** The viewer's tracking session id, once the engine announces it (SESSION). */
|
|
@@ -3964,7 +3972,7 @@ class wo {
|
|
|
3964
3972
|
}
|
|
3965
3973
|
/** The AR button handler: mobile activates AR in the engine, desktop shows the hand-off QR. */
|
|
3966
3974
|
activate() {
|
|
3967
|
-
if (
|
|
3975
|
+
if (ue()) {
|
|
3968
3976
|
this.options.send({ type: c.AR_ACTIVATE });
|
|
3969
3977
|
return;
|
|
3970
3978
|
}
|
|
@@ -4010,14 +4018,14 @@ class wo {
|
|
|
4010
4018
|
return this.sessionId !== void 0 ? Promise.resolve(this.sessionId) : new Promise((t) => {
|
|
4011
4019
|
const e = setTimeout(() => {
|
|
4012
4020
|
this.pendingTimers.delete(e), t(void 0);
|
|
4013
|
-
},
|
|
4021
|
+
}, wo);
|
|
4014
4022
|
this.pendingTimers.add(e), this.waiters.push((i) => {
|
|
4015
4023
|
this.pendingTimers.delete(e), clearTimeout(e), t(i);
|
|
4016
4024
|
});
|
|
4017
4025
|
});
|
|
4018
4026
|
}
|
|
4019
4027
|
}
|
|
4020
|
-
class
|
|
4028
|
+
class ko {
|
|
4021
4029
|
callbacks = [];
|
|
4022
4030
|
lastKnown;
|
|
4023
4031
|
handleSync(t) {
|
|
@@ -4032,9 +4040,9 @@ class Co {
|
|
|
4032
4040
|
class Ao extends bo {
|
|
4033
4041
|
syncStatusTracker;
|
|
4034
4042
|
constructor(t) {
|
|
4035
|
-
const e = new
|
|
4043
|
+
const e = new ko();
|
|
4036
4044
|
super(t, {
|
|
4037
|
-
createArActivation: (i) => new
|
|
4045
|
+
createArActivation: (i) => new So({
|
|
4038
4046
|
app: t.app,
|
|
4039
4047
|
license: t.license,
|
|
4040
4048
|
model: t.model,
|
|
@@ -4050,18 +4058,18 @@ class Ao extends bo {
|
|
|
4050
4058
|
}
|
|
4051
4059
|
export {
|
|
4052
4060
|
Wt as Annotations,
|
|
4053
|
-
|
|
4054
|
-
|
|
4061
|
+
Yt as Attribute,
|
|
4062
|
+
Qt as AttributeValue,
|
|
4055
4063
|
ge as Camera,
|
|
4056
|
-
|
|
4064
|
+
we as Configuration,
|
|
4057
4065
|
A as ERROR_CODES,
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4066
|
+
Se as Focus,
|
|
4067
|
+
ke as Photo,
|
|
4068
|
+
Ce as Snapshot,
|
|
4061
4069
|
T as VD_EVENTS,
|
|
4062
4070
|
Ao as VirtualdisplayClient,
|
|
4063
4071
|
y as VirtualdisplayError,
|
|
4064
4072
|
pe as enableDebugMode,
|
|
4065
|
-
|
|
4066
|
-
|
|
4073
|
+
Co as isDebugMode,
|
|
4074
|
+
k as logger
|
|
4067
4075
|
};
|