@primestyleai/tryon 5.10.193 → 5.10.195
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/dist/PrimeStyleTryon.d.ts +5 -0
- package/dist/api-client.d.ts +30 -1
- package/dist/{index-D9sdGV4C.js → index-D_9-KLXy.js} +198 -142
- package/dist/index-D_9-KLXy.js.map +1 -0
- package/dist/primestyle-tryon.js +232 -164
- package/dist/primestyle-tryon.js.map +1 -1
- package/dist/react/index.js +6010 -5609
- package/dist/react/index.js.map +1 -1
- package/dist/react/recommendForProduct.d.ts +4 -4
- package/dist/react/styles.d.ts +1 -1
- package/dist/react/usePrimeStyleSize.d.ts +2 -2
- package/dist/react/views/SizeResultView.d.ts +2 -1
- package/dist/storefront/primestyle-tryon.js +683 -201
- package/package.json +1 -1
- package/dist/index-D9sdGV4C.js.map +0 -1
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
const
|
|
2
|
+
const p = "ps_session";
|
|
3
3
|
const A = "ps_mem_";
|
|
4
|
-
let
|
|
5
|
-
function
|
|
4
|
+
let E = null;
|
|
5
|
+
function b() {
|
|
6
6
|
try {
|
|
7
7
|
return typeof window < "u" && typeof window.localStorage < "u";
|
|
8
8
|
} catch {
|
|
9
9
|
return !1;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
-
function
|
|
12
|
+
function T() {
|
|
13
13
|
if (typeof crypto < "u" && typeof crypto.randomUUID == "function")
|
|
14
14
|
return crypto.randomUUID();
|
|
15
|
-
const
|
|
15
|
+
const t = "0123456789abcdef";
|
|
16
16
|
let e = A;
|
|
17
|
-
for (let o = 0; o < 32; o++) e +=
|
|
17
|
+
for (let o = 0; o < 32; o++) e += t[Math.floor(Math.random() * 16)];
|
|
18
18
|
return e;
|
|
19
19
|
}
|
|
20
20
|
function I() {
|
|
21
|
-
if (!
|
|
21
|
+
if (!b()) return E;
|
|
22
22
|
try {
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
25
|
-
const e = JSON.parse(
|
|
23
|
+
const t = window.localStorage.getItem(p);
|
|
24
|
+
if (!t) return null;
|
|
25
|
+
const e = JSON.parse(t);
|
|
26
26
|
return typeof e.id != "string" || typeof e.issuedAt != "number" ? null : {
|
|
27
27
|
id: e.id,
|
|
28
28
|
issuedAt: e.issuedAt,
|
|
@@ -32,43 +32,51 @@ function I() {
|
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
function
|
|
36
|
-
if (
|
|
35
|
+
function f(t) {
|
|
36
|
+
if (E = t, !!b())
|
|
37
37
|
try {
|
|
38
|
-
window.localStorage.setItem(
|
|
38
|
+
window.localStorage.setItem(p, JSON.stringify(t));
|
|
39
39
|
} catch {
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
function S(t) {
|
|
43
|
+
if (!(typeof window > "u"))
|
|
44
|
+
try {
|
|
45
|
+
const e = window.clarity;
|
|
46
|
+
typeof e == "function" && e("set", p, t);
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
48
49
|
}
|
|
49
|
-
function
|
|
50
|
+
function c() {
|
|
51
|
+
const t = Date.now(), e = I();
|
|
52
|
+
if (e && t - e.lastSeenAt < 2592e6)
|
|
53
|
+
return t - e.lastSeenAt > 5 * 60 * 1e3 && f({ ...e, lastSeenAt: t }), S(e.id), e.id;
|
|
54
|
+
const o = { id: T(), issuedAt: t, lastSeenAt: t };
|
|
55
|
+
return f(o), S(o.id), o.id;
|
|
56
|
+
}
|
|
57
|
+
function m() {
|
|
50
58
|
if (typeof navigator > "u") return null;
|
|
51
|
-
const
|
|
52
|
-
return /ipad|tablet|(android(?!.*mobile))/.test(
|
|
59
|
+
const t = (navigator.userAgent || "").toLowerCase();
|
|
60
|
+
return /ipad|tablet|(android(?!.*mobile))/.test(t) ? "tablet" : /mobile|android|iphone|ipod|blackberry|iemobile|opera mini/.test(t) ? "mobile" : "desktop";
|
|
53
61
|
}
|
|
54
|
-
const
|
|
55
|
-
class
|
|
62
|
+
const w = "http://localhost:4000";
|
|
63
|
+
class Y {
|
|
56
64
|
constructor(e, o) {
|
|
57
|
-
this.apiKey = e || void 0, this.baseUrl = (o ||
|
|
65
|
+
this.apiKey = e || void 0, this.baseUrl = (o || w).replace(/\/+$/, "");
|
|
58
66
|
}
|
|
59
67
|
get headers() {
|
|
60
|
-
return
|
|
68
|
+
return v(this.apiKey);
|
|
61
69
|
}
|
|
62
|
-
async submitTryOn(e, o, a, s,
|
|
70
|
+
async submitTryOn(e, o, a, s, r) {
|
|
63
71
|
const i = {
|
|
64
72
|
garmentImage: o,
|
|
65
73
|
// Attribution fields — backend logs these into the TryOnEvent collection
|
|
66
74
|
// so non-technical operators can answer "which products are being tried on
|
|
67
75
|
// and by how many customers". Safe fallbacks when absent.
|
|
68
|
-
sessionId:
|
|
69
|
-
deviceHint:
|
|
76
|
+
sessionId: c(),
|
|
77
|
+
deviceHint: m()
|
|
70
78
|
};
|
|
71
|
-
if (
|
|
79
|
+
if (r?.modelImageId && (i.modelImageId = r.modelImageId), e && (i.modelImage = e), a && a.length > 0 && (i.fitInfo = a), s && s !== "apparel" && (i.category = s), r?.productId && (i.productId = r.productId), r?.productTitle && (i.productTitle = r.productTitle), r?.productCategory && (i.productCategory = r.productCategory), r?.productSubcategory && (i.productSubcategory = r.productSubcategory), r?.productFitType && (i.productFitType = r.productFitType), r?.productType && (i.productType = r.productType), r?.productTags?.length && (i.productTags = r.productTags), r?.productDescription && (i.productDescription = r.productDescription), r?.productMaterial && (i.productMaterial = r.productMaterial), r?.garmentDetailImage && r.garmentDetailImage !== o && (i.garmentDetailImage = r.garmentDetailImage), r?.silhouetteContext && (i.silhouetteContext = r.silhouetteContext), r?.editFromPrevious && (i.editFromPrevious = !0), a && a.length > 0)
|
|
72
80
|
for (const n of a) {
|
|
73
81
|
const l = (n.garmentRange || "").replace(/[^\d.\-–]/g, " ").trim().split(/[\s\-–]+/).filter(Boolean).map(Number).filter((u) => !isNaN(u));
|
|
74
82
|
if (l.length && n.userValue != null) {
|
|
@@ -112,8 +120,8 @@ class W {
|
|
|
112
120
|
headers: this.headers,
|
|
113
121
|
body: JSON.stringify({
|
|
114
122
|
...e,
|
|
115
|
-
sessionId:
|
|
116
|
-
deviceHint:
|
|
123
|
+
sessionId: c(),
|
|
124
|
+
deviceHint: m()
|
|
117
125
|
})
|
|
118
126
|
});
|
|
119
127
|
if (!o.ok) {
|
|
@@ -125,21 +133,61 @@ class W {
|
|
|
125
133
|
}
|
|
126
134
|
return o.json();
|
|
127
135
|
}
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
136
|
+
async reportEvent(e) {
|
|
137
|
+
const o = await fetch(`${this.baseUrl}/api/v1/tryon/event`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers: this.headers,
|
|
140
|
+
keepalive: !0,
|
|
141
|
+
body: JSON.stringify({
|
|
142
|
+
...e,
|
|
143
|
+
sessionId: c(),
|
|
144
|
+
deviceHint: m()
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
if (!o.ok) {
|
|
148
|
+
const a = await o.json().catch(() => ({}));
|
|
149
|
+
throw new h(
|
|
150
|
+
a.message || "Failed to report SDK event",
|
|
151
|
+
"EVENT_REPORT_FAILED"
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
return o.json();
|
|
155
|
+
}
|
|
156
|
+
async reportClientError(e) {
|
|
157
|
+
const o = await fetch(`${this.baseUrl}/api/v1/tryon/client-error`, {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers: this.headers,
|
|
160
|
+
keepalive: !0,
|
|
161
|
+
body: JSON.stringify({
|
|
162
|
+
...e,
|
|
163
|
+
sessionId: c(),
|
|
164
|
+
deviceHint: m()
|
|
165
|
+
})
|
|
166
|
+
});
|
|
167
|
+
if (!o.ok) {
|
|
168
|
+
const a = await o.json().catch(() => ({}));
|
|
169
|
+
throw new h(
|
|
170
|
+
a.message || "Failed to report SDK client error",
|
|
171
|
+
"CLIENT_ERROR_REPORT_FAILED"
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
return o.json();
|
|
175
|
+
}
|
|
176
|
+
getStreamUrl(e) {
|
|
177
|
+
const o = e ? `/api/v1/tryon/stream/${encodeURIComponent(e)}` : "/api/v1/tryon/stream", a = `${this.baseUrl}${o}`;
|
|
178
|
+
return this.apiKey ? `${a}?key=${encodeURIComponent(this.apiKey)}` : a;
|
|
131
179
|
}
|
|
132
180
|
}
|
|
133
|
-
function
|
|
181
|
+
function v(t) {
|
|
134
182
|
const e = { "Content-Type": "application/json" };
|
|
135
|
-
return
|
|
183
|
+
return t && (e.Authorization = `Bearer ${t}`), e;
|
|
136
184
|
}
|
|
137
185
|
class h extends Error {
|
|
138
186
|
constructor(e, o) {
|
|
139
187
|
super(e), this.name = "PrimeStyleError", this.code = o;
|
|
140
188
|
}
|
|
141
189
|
}
|
|
142
|
-
class
|
|
190
|
+
class F {
|
|
143
191
|
constructor(e) {
|
|
144
192
|
this.eventSource = null, this.listeners = /* @__PURE__ */ new Map(), this.reconnectTimer = null, this.reconnectAttempts = 0, this.maxReconnectAttempts = 5, this.streamUrl = e;
|
|
145
193
|
}
|
|
@@ -190,10 +238,10 @@ class Y {
|
|
|
190
238
|
this.reconnectTimer && (clearTimeout(this.reconnectTimer), this.reconnectTimer = null), this.eventSource && (this.eventSource.close(), this.eventSource = null), this.listeners.clear(), this.reconnectAttempts = 0;
|
|
191
239
|
}
|
|
192
240
|
}
|
|
193
|
-
const
|
|
194
|
-
function z(
|
|
195
|
-
const o = e.maxDimension ??
|
|
196
|
-
return new Promise((s,
|
|
241
|
+
const U = 512, C = 0.65;
|
|
242
|
+
function z(t, e = {}) {
|
|
243
|
+
const o = e.maxDimension ?? U, a = e.quality ?? C;
|
|
244
|
+
return new Promise((s, r) => {
|
|
197
245
|
const i = new FileReader();
|
|
198
246
|
i.onload = () => {
|
|
199
247
|
const d = new Image();
|
|
@@ -202,27 +250,27 @@ function z(r, e = {}) {
|
|
|
202
250
|
const n = document.createElement("canvas");
|
|
203
251
|
let { width: l, height: u } = d;
|
|
204
252
|
(l > o || u > o) && (l > u ? (u = Math.round(u * o / l), l = o) : (l = Math.round(l * o / u), u = o)), n.width = l, n.height = u;
|
|
205
|
-
const
|
|
206
|
-
if (!
|
|
207
|
-
|
|
253
|
+
const y = n.getContext("2d");
|
|
254
|
+
if (!y) {
|
|
255
|
+
r(new Error("Canvas context not available"));
|
|
208
256
|
return;
|
|
209
257
|
}
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
s(
|
|
258
|
+
y.drawImage(d, 0, 0, l, u);
|
|
259
|
+
const P = n.toDataURL("image/jpeg", a);
|
|
260
|
+
s(P);
|
|
213
261
|
} catch (n) {
|
|
214
|
-
|
|
262
|
+
r(n);
|
|
215
263
|
}
|
|
216
|
-
}, d.onerror = () =>
|
|
217
|
-
}, i.onerror = () =>
|
|
264
|
+
}, d.onerror = () => r(new Error("Failed to load image")), d.src = i.result;
|
|
265
|
+
}, i.onerror = () => r(new Error("Failed to read file")), i.readAsDataURL(t);
|
|
218
266
|
});
|
|
219
267
|
}
|
|
220
|
-
function
|
|
221
|
-
return ["image/jpeg", "image/png", "image/webp", "image/avif"].includes(
|
|
268
|
+
function K(t) {
|
|
269
|
+
return ["image/jpeg", "image/png", "image/webp", "image/avif"].includes(t.type);
|
|
222
270
|
}
|
|
223
|
-
async function
|
|
271
|
+
async function V(t, e, o) {
|
|
224
272
|
try {
|
|
225
|
-
const a = typeof
|
|
273
|
+
const a = typeof t == "string" ? t : await z(t, { maxDimension: 384, quality: 0.6 }), s = await fetch(`${e}/api/v1/sizing/age-check`, {
|
|
226
274
|
method: "POST",
|
|
227
275
|
headers: {
|
|
228
276
|
"Content-Type": "application/json",
|
|
@@ -232,30 +280,30 @@ async function K(r, e, o) {
|
|
|
232
280
|
});
|
|
233
281
|
if (!s.ok)
|
|
234
282
|
return { isAdult: !0, confidence: "low" };
|
|
235
|
-
const
|
|
283
|
+
const r = await s.json();
|
|
236
284
|
return {
|
|
237
|
-
isAdult:
|
|
285
|
+
isAdult: r?.isAdult !== !1,
|
|
238
286
|
// anything other than explicit false → allow
|
|
239
|
-
confidence:
|
|
240
|
-
detectedGender:
|
|
241
|
-
reasoning: typeof
|
|
287
|
+
confidence: r?.confidence === "high" ? "high" : "low",
|
|
288
|
+
detectedGender: r?.detectedGender === "male" || r?.detectedGender === "female" || r?.detectedGender === "unknown" ? r.detectedGender : void 0,
|
|
289
|
+
reasoning: typeof r?.reasoning == "string" ? r.reasoning : void 0
|
|
242
290
|
};
|
|
243
291
|
} catch {
|
|
244
292
|
return { isAdult: !0, confidence: "low" };
|
|
245
293
|
}
|
|
246
294
|
}
|
|
247
|
-
const
|
|
248
|
-
function
|
|
249
|
-
|
|
295
|
+
const g = {};
|
|
296
|
+
function D(t, e) {
|
|
297
|
+
g[t] = { ...g[t] || {}, ...e };
|
|
250
298
|
}
|
|
251
|
-
function
|
|
252
|
-
const e =
|
|
253
|
-
return (o) => e === "en" || !
|
|
299
|
+
function j(t) {
|
|
300
|
+
const e = t?.toLowerCase().split("-")[0] || "en";
|
|
301
|
+
return (o) => e === "en" || !g[e] ? o : g[e][o] ?? o;
|
|
254
302
|
}
|
|
255
|
-
function
|
|
303
|
+
function J() {
|
|
256
304
|
return typeof navigator > "u" ? "en" : (navigator.language || navigator.userLanguage || "en").split("-")[0].toLowerCase();
|
|
257
305
|
}
|
|
258
|
-
const
|
|
306
|
+
const q = [
|
|
259
307
|
"en",
|
|
260
308
|
"es",
|
|
261
309
|
"fr",
|
|
@@ -266,7 +314,7 @@ const J = [
|
|
|
266
314
|
"zh",
|
|
267
315
|
"ko",
|
|
268
316
|
"ar"
|
|
269
|
-
],
|
|
317
|
+
], Z = {
|
|
270
318
|
en: "English",
|
|
271
319
|
es: "Español",
|
|
272
320
|
fr: "Français",
|
|
@@ -277,7 +325,7 @@ const J = [
|
|
|
277
325
|
zh: "中文",
|
|
278
326
|
ko: "한국어",
|
|
279
327
|
ar: "العربية"
|
|
280
|
-
},
|
|
328
|
+
}, x = [
|
|
281
329
|
"Virtual Try-On",
|
|
282
330
|
"Find Your Size & See It On You",
|
|
283
331
|
"See Your Fit",
|
|
@@ -286,7 +334,7 @@ const J = [
|
|
|
286
334
|
"Complete Profile",
|
|
287
335
|
"Check your size, then try it on virtually",
|
|
288
336
|
"Get Your Size",
|
|
289
|
-
"Instant fit
|
|
337
|
+
"Instant fit suggestion",
|
|
290
338
|
"Try It On",
|
|
291
339
|
"See how it looks on you",
|
|
292
340
|
"Find My Size",
|
|
@@ -312,8 +360,16 @@ const J = [
|
|
|
312
360
|
"Please fill in all required fields",
|
|
313
361
|
"Next",
|
|
314
362
|
"Analyzing your size...",
|
|
315
|
-
"
|
|
316
|
-
"NOT
|
|
363
|
+
"SUGGESTED SIZE",
|
|
364
|
+
"NOT SUGGESTED",
|
|
365
|
+
"SUGGESTED",
|
|
366
|
+
"Suggested",
|
|
367
|
+
"Suggested Size",
|
|
368
|
+
"Not Suggested",
|
|
369
|
+
"Your Choice · Not Suggested",
|
|
370
|
+
"YOUR CHOICE · NOT SUGGESTED",
|
|
371
|
+
"your selection · not suggested",
|
|
372
|
+
"suggested",
|
|
317
373
|
"Edit measurements",
|
|
318
374
|
"Size guide",
|
|
319
375
|
"Your fit",
|
|
@@ -432,7 +488,7 @@ const J = [
|
|
|
432
488
|
"Loose",
|
|
433
489
|
"Short",
|
|
434
490
|
"Long",
|
|
435
|
-
"
|
|
491
|
+
"Suggested",
|
|
436
492
|
"Within range",
|
|
437
493
|
"Within range",
|
|
438
494
|
"WITHIN RANGE",
|
|
@@ -463,13 +519,13 @@ const J = [
|
|
|
463
519
|
// ── Photo step — profile photo preload pill ──
|
|
464
520
|
"Loaded from profile",
|
|
465
521
|
"Clear"
|
|
466
|
-
],
|
|
522
|
+
], G = {
|
|
467
523
|
"Virtual Try-On": "Probador Virtual",
|
|
468
524
|
"Find Your Size & See It On You": "Encuentra tu talla y pruébatelo",
|
|
469
525
|
"See Your Fit": "Ver tu ajuste",
|
|
470
526
|
"Check your size, then try it on virtually": "Comprueba tu talla y pruébatelo virtualmente",
|
|
471
527
|
"Get Your Size": "Tu talla",
|
|
472
|
-
"Instant fit
|
|
528
|
+
"Instant fit suggestion": "Sugerencia de ajuste instantánea",
|
|
473
529
|
"Try It On": "Pruébatelo",
|
|
474
530
|
"See how it looks on you": "Mira cómo te queda",
|
|
475
531
|
"Find My Size": "Encontrar mi talla",
|
|
@@ -497,12 +553,12 @@ const J = [
|
|
|
497
553
|
"Please fill in all required fields": "Por favor, completa todos los campos obligatorios",
|
|
498
554
|
Next: "Siguiente",
|
|
499
555
|
"Analyzing your size...": "Analizando tu talla...",
|
|
500
|
-
"
|
|
501
|
-
"NOT
|
|
556
|
+
"SUGGESTED SIZE": "TALLA SUGERIDA",
|
|
557
|
+
"NOT SUGGESTED": "NO SUGERIDA",
|
|
502
558
|
"Edit measurements": "Editar medidas",
|
|
503
559
|
"Size guide": "Guía de tallas",
|
|
504
560
|
"Your fit": "Tu ajuste",
|
|
505
|
-
"Your Size
|
|
561
|
+
"Your Suggested Size": "Tu talla sugerida",
|
|
506
562
|
"Your measure": "Tu medida",
|
|
507
563
|
"within range": "dentro del rango",
|
|
508
564
|
"too tight": "demasiado ajustado",
|
|
@@ -718,13 +774,13 @@ const J = [
|
|
|
718
774
|
// ── Photo step — profile photo preload pill ──
|
|
719
775
|
"Loaded from profile": "Cargada del perfil",
|
|
720
776
|
Clear: "Borrar"
|
|
721
|
-
},
|
|
777
|
+
}, B = {
|
|
722
778
|
"Virtual Try-On": "Essayage Virtuel",
|
|
723
779
|
"Find Your Size & See It On You": "Trouvez votre taille et essayez-le",
|
|
724
780
|
"See Your Fit": "Voir votre ajustement",
|
|
725
781
|
"Check your size, then try it on virtually": "Vérifiez votre taille, puis essayez-le virtuellement",
|
|
726
782
|
"Get Your Size": "Votre taille",
|
|
727
|
-
"Instant fit
|
|
783
|
+
"Instant fit suggestion": "Suggestion de coupe instantanée",
|
|
728
784
|
"Try It On": "Essayer",
|
|
729
785
|
"See how it looks on you": "Voyez comment ça vous va",
|
|
730
786
|
"Find My Size": "Trouver ma taille",
|
|
@@ -752,12 +808,12 @@ const J = [
|
|
|
752
808
|
"Please fill in all required fields": "Veuillez remplir tous les champs obligatoires",
|
|
753
809
|
Next: "Suivant",
|
|
754
810
|
"Analyzing your size...": "Analyse de votre taille...",
|
|
755
|
-
"
|
|
756
|
-
"NOT
|
|
811
|
+
"SUGGESTED SIZE": "TAILLE SUGGÉRÉE",
|
|
812
|
+
"NOT SUGGESTED": "NON SUGGÉRÉE",
|
|
757
813
|
"Edit measurements": "Modifier les mesures",
|
|
758
814
|
"Size guide": "Guide des tailles",
|
|
759
815
|
"Your fit": "Votre coupe",
|
|
760
|
-
"Your Size
|
|
816
|
+
"Your Suggested Size": "Votre taille suggérée",
|
|
761
817
|
"Your measure": "Votre mesure",
|
|
762
818
|
"within range": "dans la plage",
|
|
763
819
|
"too tight": "trop serré",
|
|
@@ -979,7 +1035,7 @@ const J = [
|
|
|
979
1035
|
"See Your Fit": "Ihre Passform ansehen",
|
|
980
1036
|
"Check your size, then try it on virtually": "Prüfen Sie Ihre Größe und probieren Sie es virtuell an",
|
|
981
1037
|
"Get Your Size": "Ihre Größe",
|
|
982
|
-
"Instant fit
|
|
1038
|
+
"Instant fit suggestion": "Sofortiger Passformvorschlag",
|
|
983
1039
|
"Try It On": "Anprobieren",
|
|
984
1040
|
"See how it looks on you": "Sehen Sie, wie es Ihnen steht",
|
|
985
1041
|
"Find My Size": "Meine Größe finden",
|
|
@@ -1007,12 +1063,12 @@ const J = [
|
|
|
1007
1063
|
"Please fill in all required fields": "Bitte alle Pflichtfelder ausfüllen",
|
|
1008
1064
|
Next: "Weiter",
|
|
1009
1065
|
"Analyzing your size...": "Ihre Größe wird analysiert...",
|
|
1010
|
-
"
|
|
1011
|
-
"NOT
|
|
1066
|
+
"SUGGESTED SIZE": "VORGESCHLAGENE GRÖSSE",
|
|
1067
|
+
"NOT SUGGESTED": "NICHT VORGESCHLAGEN",
|
|
1012
1068
|
"Edit measurements": "Maße bearbeiten",
|
|
1013
1069
|
"Size guide": "Größentabelle",
|
|
1014
1070
|
"Your fit": "Ihre Passform",
|
|
1015
|
-
"Your Size
|
|
1071
|
+
"Your Suggested Size": "Ihre vorgeschlagene Größe",
|
|
1016
1072
|
"Your measure": "Ihr Maß",
|
|
1017
1073
|
"within range": "im Bereich",
|
|
1018
1074
|
"too tight": "zu eng",
|
|
@@ -1228,13 +1284,13 @@ const J = [
|
|
|
1228
1284
|
// ── Photo step — profile photo preload pill ──
|
|
1229
1285
|
"Loaded from profile": "Aus Profil geladen",
|
|
1230
1286
|
Clear: "Löschen"
|
|
1231
|
-
},
|
|
1287
|
+
}, H = {
|
|
1232
1288
|
"Virtual Try-On": "Prova Virtuale",
|
|
1233
1289
|
"Find Your Size & See It On You": "Trova la tua taglia e provalo",
|
|
1234
1290
|
"See Your Fit": "Vedi la vestibilità",
|
|
1235
1291
|
"Check your size, then try it on virtually": "Controlla la tua taglia, poi provalo virtualmente",
|
|
1236
1292
|
"Get Your Size": "La tua taglia",
|
|
1237
|
-
"Instant fit
|
|
1293
|
+
"Instant fit suggestion": "Suggerimento vestibilità istantaneo",
|
|
1238
1294
|
"Try It On": "Provalo",
|
|
1239
1295
|
"See how it looks on you": "Guarda come ti sta",
|
|
1240
1296
|
"Find My Size": "Trova la mia taglia",
|
|
@@ -1262,12 +1318,12 @@ const J = [
|
|
|
1262
1318
|
"Please fill in all required fields": "Compila tutti i campi obbligatori",
|
|
1263
1319
|
Next: "Avanti",
|
|
1264
1320
|
"Analyzing your size...": "Analisi della tua taglia...",
|
|
1265
|
-
"
|
|
1266
|
-
"NOT
|
|
1321
|
+
"SUGGESTED SIZE": "TAGLIA SUGGERITA",
|
|
1322
|
+
"NOT SUGGESTED": "NON SUGGERITA",
|
|
1267
1323
|
"Edit measurements": "Modifica misure",
|
|
1268
1324
|
"Size guide": "Guida alle taglie",
|
|
1269
1325
|
"Your fit": "La tua vestibilità",
|
|
1270
|
-
"Your Size
|
|
1326
|
+
"Your Suggested Size": "La tua taglia suggerita",
|
|
1271
1327
|
"Your measure": "La tua misura",
|
|
1272
1328
|
"within range": "entro l'intervallo",
|
|
1273
1329
|
"too tight": "troppo stretto",
|
|
@@ -1483,13 +1539,13 @@ const J = [
|
|
|
1483
1539
|
// ── Photo step — profile photo preload pill ──
|
|
1484
1540
|
"Loaded from profile": "Caricata dal profilo",
|
|
1485
1541
|
Clear: "Cancella"
|
|
1486
|
-
},
|
|
1542
|
+
}, M = {
|
|
1487
1543
|
"Virtual Try-On": "Provador Virtual",
|
|
1488
1544
|
"Find Your Size & See It On You": "Encontre seu tamanho e experimente",
|
|
1489
1545
|
"See Your Fit": "Veja seu ajuste",
|
|
1490
1546
|
"Check your size, then try it on virtually": "Confira seu tamanho e experimente virtualmente",
|
|
1491
1547
|
"Get Your Size": "Seu tamanho",
|
|
1492
|
-
"Instant fit
|
|
1548
|
+
"Instant fit suggestion": "Sugestão de caimento instantânea",
|
|
1493
1549
|
"Try It On": "Experimentar",
|
|
1494
1550
|
"See how it looks on you": "Veja como fica em você",
|
|
1495
1551
|
"Find My Size": "Encontrar meu tamanho",
|
|
@@ -1517,12 +1573,12 @@ const J = [
|
|
|
1517
1573
|
"Please fill in all required fields": "Por favor, preencha todos os campos obrigatórios",
|
|
1518
1574
|
Next: "Próximo",
|
|
1519
1575
|
"Analyzing your size...": "Analisando seu tamanho...",
|
|
1520
|
-
"
|
|
1521
|
-
"NOT
|
|
1576
|
+
"SUGGESTED SIZE": "TAMANHO SUGERIDO",
|
|
1577
|
+
"NOT SUGGESTED": "NÃO SUGERIDO",
|
|
1522
1578
|
"Edit measurements": "Editar medidas",
|
|
1523
1579
|
"Size guide": "Guia de tamanhos",
|
|
1524
1580
|
"Your fit": "Seu caimento",
|
|
1525
|
-
"Your Size
|
|
1581
|
+
"Your Suggested Size": "Seu tamanho sugerido",
|
|
1526
1582
|
"Your measure": "Sua medida",
|
|
1527
1583
|
"within range": "dentro da faixa",
|
|
1528
1584
|
"too tight": "muito apertado",
|
|
@@ -1738,13 +1794,13 @@ const J = [
|
|
|
1738
1794
|
// ── Photo step — profile photo preload pill ──
|
|
1739
1795
|
"Loaded from profile": "Carregada do perfil",
|
|
1740
1796
|
Clear: "Limpar"
|
|
1741
|
-
},
|
|
1797
|
+
}, k = {
|
|
1742
1798
|
"Virtual Try-On": "バーチャル試着",
|
|
1743
1799
|
"Find Your Size & See It On You": "あなたのサイズを見つけて試着",
|
|
1744
1800
|
"See Your Fit": "フィット感を見る",
|
|
1745
1801
|
"Check your size, then try it on virtually": "サイズを確認して、バーチャルで試着しましょう",
|
|
1746
1802
|
"Get Your Size": "サイズを確認",
|
|
1747
|
-
"Instant fit
|
|
1803
|
+
"Instant fit suggestion": "瞬時にフィット提案",
|
|
1748
1804
|
"Try It On": "試着する",
|
|
1749
1805
|
"See how it looks on you": "自分に似合うか確認",
|
|
1750
1806
|
"Find My Size": "自分のサイズを見つける",
|
|
@@ -1772,12 +1828,12 @@ const J = [
|
|
|
1772
1828
|
"Please fill in all required fields": "すべての必須項目を入力してください",
|
|
1773
1829
|
Next: "次へ",
|
|
1774
1830
|
"Analyzing your size...": "サイズを分析中...",
|
|
1775
|
-
"
|
|
1776
|
-
"NOT
|
|
1831
|
+
"SUGGESTED SIZE": "提案サイズ",
|
|
1832
|
+
"NOT SUGGESTED": "提案外",
|
|
1777
1833
|
"Edit measurements": "寸法を編集",
|
|
1778
1834
|
"Size guide": "サイズガイド",
|
|
1779
1835
|
"Your fit": "あなたのフィット",
|
|
1780
|
-
"Your Size
|
|
1836
|
+
"Your Suggested Size": "提案サイズ",
|
|
1781
1837
|
"Your measure": "あなたの寸法",
|
|
1782
1838
|
"within range": "範囲内",
|
|
1783
1839
|
"too tight": "きつすぎる",
|
|
@@ -1993,13 +2049,13 @@ const J = [
|
|
|
1993
2049
|
// ── Photo step — profile photo preload pill ──
|
|
1994
2050
|
"Loaded from profile": "プロフィールから読み込み",
|
|
1995
2051
|
Clear: "クリア"
|
|
1996
|
-
},
|
|
2052
|
+
}, L = {
|
|
1997
2053
|
"Virtual Try-On": "虚拟试穿",
|
|
1998
2054
|
"Find Your Size & See It On You": "找到你的尺码并试穿",
|
|
1999
2055
|
"See Your Fit": "查看合身效果",
|
|
2000
2056
|
"Check your size, then try it on virtually": "确认尺码,然后虚拟试穿",
|
|
2001
2057
|
"Get Your Size": "获取尺码",
|
|
2002
|
-
"Instant fit
|
|
2058
|
+
"Instant fit suggestion": "即时合身建议",
|
|
2003
2059
|
"Try It On": "试穿",
|
|
2004
2060
|
"See how it looks on you": "看看穿在你身上的效果",
|
|
2005
2061
|
"Find My Size": "找到我的尺码",
|
|
@@ -2027,12 +2083,12 @@ const J = [
|
|
|
2027
2083
|
"Please fill in all required fields": "请填写所有必填项",
|
|
2028
2084
|
Next: "下一步",
|
|
2029
2085
|
"Analyzing your size...": "正在分析你的尺码...",
|
|
2030
|
-
"
|
|
2031
|
-
"NOT
|
|
2086
|
+
"SUGGESTED SIZE": "建议尺码",
|
|
2087
|
+
"NOT SUGGESTED": "不建议",
|
|
2032
2088
|
"Edit measurements": "编辑尺寸",
|
|
2033
2089
|
"Size guide": "尺码指南",
|
|
2034
2090
|
"Your fit": "你的合身度",
|
|
2035
|
-
"Your Size
|
|
2091
|
+
"Your Suggested Size": "你的建议尺码",
|
|
2036
2092
|
"Your measure": "你的尺寸",
|
|
2037
2093
|
"within range": "在范围内",
|
|
2038
2094
|
"too tight": "太紧",
|
|
@@ -2248,13 +2304,13 @@ const J = [
|
|
|
2248
2304
|
// ── Photo step — profile photo preload pill ──
|
|
2249
2305
|
"Loaded from profile": "已从个人资料加载",
|
|
2250
2306
|
Clear: "清除"
|
|
2251
|
-
},
|
|
2307
|
+
}, R = {
|
|
2252
2308
|
"Virtual Try-On": "가상 피팅",
|
|
2253
2309
|
"Find Your Size & See It On You": "사이즈를 찾고 입어보세요",
|
|
2254
2310
|
"See Your Fit": "핏 확인하기",
|
|
2255
2311
|
"Check your size, then try it on virtually": "사이즈를 확인하고 가상으로 입어보세요",
|
|
2256
2312
|
"Get Your Size": "사이즈 확인",
|
|
2257
|
-
"Instant fit
|
|
2313
|
+
"Instant fit suggestion": "즉시 핏 제안",
|
|
2258
2314
|
"Try It On": "입어보기",
|
|
2259
2315
|
"See how it looks on you": "어떻게 보이는지 확인",
|
|
2260
2316
|
"Find My Size": "내 사이즈 찾기",
|
|
@@ -2282,12 +2338,12 @@ const J = [
|
|
|
2282
2338
|
"Please fill in all required fields": "모든 필수 항목을 입력해주세요",
|
|
2283
2339
|
Next: "다음",
|
|
2284
2340
|
"Analyzing your size...": "사이즈 분석 중...",
|
|
2285
|
-
"
|
|
2286
|
-
"NOT
|
|
2341
|
+
"SUGGESTED SIZE": "제안 사이즈",
|
|
2342
|
+
"NOT SUGGESTED": "제안 아님",
|
|
2287
2343
|
"Edit measurements": "치수 수정",
|
|
2288
2344
|
"Size guide": "사이즈 가이드",
|
|
2289
2345
|
"Your fit": "나의 핏",
|
|
2290
|
-
"Your Size
|
|
2346
|
+
"Your Suggested Size": "제안 사이즈",
|
|
2291
2347
|
"Your measure": "내 치수",
|
|
2292
2348
|
"within range": "범위 내",
|
|
2293
2349
|
"too tight": "너무 타이트",
|
|
@@ -2503,13 +2559,13 @@ const J = [
|
|
|
2503
2559
|
// ── Photo step — profile photo preload pill ──
|
|
2504
2560
|
"Loaded from profile": "프로필에서 불러옴",
|
|
2505
2561
|
Clear: "지우기"
|
|
2506
|
-
},
|
|
2562
|
+
}, W = {
|
|
2507
2563
|
"Virtual Try-On": "تجربة افتراضية",
|
|
2508
2564
|
"Find Your Size & See It On You": "اعثر على مقاسك وجرّبه",
|
|
2509
2565
|
"See Your Fit": "شاهد الملاءمة",
|
|
2510
2566
|
"Check your size, then try it on virtually": "تحقق من مقاسك ثم جرّبه افتراضياً",
|
|
2511
2567
|
"Get Your Size": "مقاسك",
|
|
2512
|
-
"Instant fit
|
|
2568
|
+
"Instant fit suggestion": "اقتراح فوري للمقاس",
|
|
2513
2569
|
"Try It On": "جرّبه",
|
|
2514
2570
|
"See how it looks on you": "شاهد كيف يبدو عليك",
|
|
2515
2571
|
"Find My Size": "اعثر على مقاسي",
|
|
@@ -2537,12 +2593,12 @@ const J = [
|
|
|
2537
2593
|
"Please fill in all required fields": "يرجى ملء جميع الحقول المطلوبة",
|
|
2538
2594
|
Next: "التالي",
|
|
2539
2595
|
"Analyzing your size...": "جارٍ تحليل مقاسك...",
|
|
2540
|
-
"
|
|
2541
|
-
"NOT
|
|
2596
|
+
"SUGGESTED SIZE": "المقاس المقترح",
|
|
2597
|
+
"NOT SUGGESTED": "غير مقترح",
|
|
2542
2598
|
"Edit measurements": "تعديل القياسات",
|
|
2543
2599
|
"Size guide": "دليل المقاسات",
|
|
2544
2600
|
"Your fit": "ملاءمتك",
|
|
2545
|
-
"Your Size
|
|
2601
|
+
"Your Suggested Size": "المقاس المقترح",
|
|
2546
2602
|
"Your measure": "قياسك",
|
|
2547
2603
|
"within range": "ضمن النطاق",
|
|
2548
2604
|
"too tight": "ضيق جداً",
|
|
@@ -2759,33 +2815,33 @@ const J = [
|
|
|
2759
2815
|
"Loaded from profile": "تم التحميل من الملف الشخصي",
|
|
2760
2816
|
Clear: "مسح"
|
|
2761
2817
|
}, O = {
|
|
2762
|
-
es:
|
|
2763
|
-
fr:
|
|
2818
|
+
es: G,
|
|
2819
|
+
fr: B,
|
|
2764
2820
|
de: N,
|
|
2765
|
-
it:
|
|
2766
|
-
pt:
|
|
2767
|
-
ja:
|
|
2768
|
-
zh:
|
|
2769
|
-
ko:
|
|
2770
|
-
ar:
|
|
2821
|
+
it: H,
|
|
2822
|
+
pt: M,
|
|
2823
|
+
ja: k,
|
|
2824
|
+
zh: L,
|
|
2825
|
+
ko: R,
|
|
2826
|
+
ar: W
|
|
2771
2827
|
};
|
|
2772
|
-
for (const [
|
|
2773
|
-
|
|
2828
|
+
for (const [t, e] of Object.entries(O))
|
|
2829
|
+
D(t, e);
|
|
2774
2830
|
export {
|
|
2775
|
-
|
|
2776
|
-
|
|
2831
|
+
Y as A,
|
|
2832
|
+
Z as L,
|
|
2777
2833
|
h as P,
|
|
2778
|
-
|
|
2779
|
-
|
|
2834
|
+
F as S,
|
|
2835
|
+
x as T,
|
|
2780
2836
|
z as a,
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2837
|
+
q as b,
|
|
2838
|
+
j as c,
|
|
2839
|
+
V as d,
|
|
2840
|
+
J as e,
|
|
2841
|
+
m as f,
|
|
2842
|
+
c as g,
|
|
2843
|
+
K as i,
|
|
2844
|
+
v as j,
|
|
2845
|
+
D as r
|
|
2790
2846
|
};
|
|
2791
|
-
//# sourceMappingURL=index-
|
|
2847
|
+
//# sourceMappingURL=index-D_9-KLXy.js.map
|