@primestyleai/tryon 5.10.187 → 5.10.189

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.
@@ -3,6 +3,8 @@ export interface TryOnContext {
3
3
  /** Storefront product the customer is currently viewing — shown in analytics. */
4
4
  productId?: string;
5
5
  productTitle?: string;
6
+ productCategory?: string;
7
+ productSubcategory?: string;
6
8
  productFitType?: string;
7
9
  productType?: string;
8
10
  productTags?: string[];
@@ -13,6 +15,10 @@ export interface TryOnContext {
13
15
  * — forwarded to the prompt so Gemini drapes the fabric correctly without
14
16
  * having to guess from the image alone. */
15
17
  productMaterial?: string;
18
+ /** Optional clean product/detail image. The backend sends it to Gemini as an
19
+ * additional design reference while `garmentImage` remains the worn/model
20
+ * styling reference. */
21
+ garmentDetailImage?: string;
16
22
  /** Optional silhouette-prompt context forwarded to the backend Gemini try-on
17
23
  * call. Enables doc-example-grade fit reasoning ("X tension at button
18
24
  * because waist 54.4 exceeds size 50 drop"). All fields optional. */
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- const y = "ps_session";
3
- const P = "ps_mem_";
2
+ const f = "ps_session";
3
+ const A = "ps_mem_";
4
4
  let S = null;
5
5
  function E() {
6
6
  try {
@@ -9,20 +9,20 @@ function E() {
9
9
  return !1;
10
10
  }
11
11
  }
12
- function A() {
12
+ function P() {
13
13
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function")
14
14
  return crypto.randomUUID();
15
- const t = "0123456789abcdef";
16
- let e = P;
17
- for (let o = 0; o < 32; o++) e += t[Math.floor(Math.random() * 16)];
15
+ const r = "0123456789abcdef";
16
+ let e = A;
17
+ for (let o = 0; o < 32; o++) e += r[Math.floor(Math.random() * 16)];
18
18
  return e;
19
19
  }
20
- function T() {
20
+ function I() {
21
21
  if (!E()) return S;
22
22
  try {
23
- const t = window.localStorage.getItem(y);
24
- if (!t) return null;
25
- const e = JSON.parse(t);
23
+ const r = window.localStorage.getItem(f);
24
+ if (!r) return null;
25
+ const e = JSON.parse(r);
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,43 @@ function T() {
32
32
  return null;
33
33
  }
34
34
  }
35
- function p(t) {
36
- if (S = t, !!E())
35
+ function g(r) {
36
+ if (S = r, !!E())
37
37
  try {
38
- window.localStorage.setItem(y, JSON.stringify(t));
38
+ window.localStorage.setItem(f, JSON.stringify(r));
39
39
  } catch {
40
40
  }
41
41
  }
42
- function g() {
43
- const t = Date.now(), e = T();
44
- if (e && t - e.lastSeenAt < 2592e6)
45
- return t - e.lastSeenAt > 5 * 60 * 1e3 && p({ ...e, lastSeenAt: t }), e.id;
46
- const o = { id: A(), issuedAt: t, lastSeenAt: t };
47
- return p(o), o.id;
42
+ function p() {
43
+ const r = Date.now(), e = I();
44
+ if (e && r - e.lastSeenAt < 2592e6)
45
+ return r - e.lastSeenAt > 5 * 60 * 1e3 && g({ ...e, lastSeenAt: r }), e.id;
46
+ const o = { id: P(), issuedAt: r, lastSeenAt: r };
47
+ return g(o), o.id;
48
48
  }
49
- function f() {
49
+ function y() {
50
50
  if (typeof navigator > "u") return null;
51
- const t = (navigator.userAgent || "").toLowerCase();
52
- return /ipad|tablet|(android(?!.*mobile))/.test(t) ? "tablet" : /mobile|android|iphone|ipod|blackberry|iemobile|opera mini/.test(t) ? "mobile" : "desktop";
51
+ const r = (navigator.userAgent || "").toLowerCase();
52
+ return /ipad|tablet|(android(?!.*mobile))/.test(r) ? "tablet" : /mobile|android|iphone|ipod|blackberry|iemobile|opera mini/.test(r) ? "mobile" : "desktop";
53
53
  }
54
- const I = "http://localhost:4000";
54
+ const T = "http://localhost:4000";
55
55
  class W {
56
56
  constructor(e, o) {
57
- this.apiKey = e || void 0, this.baseUrl = (o || I).replace(/\/+$/, "");
57
+ this.apiKey = e || void 0, this.baseUrl = (o || T).replace(/\/+$/, "");
58
58
  }
59
59
  get headers() {
60
- return v(this.apiKey);
60
+ return w(this.apiKey);
61
61
  }
62
- async submitTryOn(e, o, a, s, r) {
62
+ async submitTryOn(e, o, a, s, t) {
63
63
  const i = {
64
64
  garmentImage: o,
65
65
  // Attribution fields — backend logs these into the TryOnEvent collection
66
66
  // so non-technical operators can answer "which products are being tried on
67
67
  // and by how many customers". Safe fallbacks when absent.
68
- sessionId: g(),
69
- deviceHint: f()
68
+ sessionId: p(),
69
+ deviceHint: y()
70
70
  };
71
- 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?.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?.silhouetteContext && (i.silhouetteContext = r.silhouetteContext), r?.editFromPrevious && (i.editFromPrevious = !0), a && a.length > 0)
71
+ if (t?.modelImageId && (i.modelImageId = t.modelImageId), e && (i.modelImage = e), a && a.length > 0 && (i.fitInfo = a), s && s !== "apparel" && (i.category = s), t?.productId && (i.productId = t.productId), t?.productTitle && (i.productTitle = t.productTitle), t?.productCategory && (i.productCategory = t.productCategory), t?.productSubcategory && (i.productSubcategory = t.productSubcategory), t?.productFitType && (i.productFitType = t.productFitType), t?.productType && (i.productType = t.productType), t?.productTags?.length && (i.productTags = t.productTags), t?.productDescription && (i.productDescription = t.productDescription), t?.productMaterial && (i.productMaterial = t.productMaterial), t?.garmentDetailImage && t.garmentDetailImage !== o && (i.garmentDetailImage = t.garmentDetailImage), t?.silhouetteContext && (i.silhouetteContext = t.silhouetteContext), t?.editFromPrevious && (i.editFromPrevious = !0), a && a.length > 0)
72
72
  for (const n of a) {
73
73
  const l = (n.garmentRange || "").replace(/[^\d.\-–]/g, " ").trim().split(/[\s\-–]+/).filter(Boolean).map(Number).filter((u) => !isNaN(u));
74
74
  if (l.length && n.userValue != null) {
@@ -112,8 +112,8 @@ class W {
112
112
  headers: this.headers,
113
113
  body: JSON.stringify({
114
114
  ...e,
115
- sessionId: g(),
116
- deviceHint: f()
115
+ sessionId: p(),
116
+ deviceHint: y()
117
117
  })
118
118
  });
119
119
  if (!o.ok) {
@@ -130,9 +130,9 @@ class W {
130
130
  return this.apiKey ? `${e}?key=${encodeURIComponent(this.apiKey)}` : e;
131
131
  }
132
132
  }
133
- function v(t) {
133
+ function w(r) {
134
134
  const e = { "Content-Type": "application/json" };
135
- return t && (e.Authorization = `Bearer ${t}`), e;
135
+ return r && (e.Authorization = `Bearer ${r}`), e;
136
136
  }
137
137
  class h extends Error {
138
138
  constructor(e, o) {
@@ -190,10 +190,10 @@ class Y {
190
190
  this.reconnectTimer && (clearTimeout(this.reconnectTimer), this.reconnectTimer = null), this.eventSource && (this.eventSource.close(), this.eventSource = null), this.listeners.clear(), this.reconnectAttempts = 0;
191
191
  }
192
192
  }
193
- const w = 512, C = 0.65;
194
- function U(t, e = {}) {
195
- const o = e.maxDimension ?? w, a = e.quality ?? C;
196
- return new Promise((s, r) => {
193
+ const v = 512, C = 0.65;
194
+ function z(r, e = {}) {
195
+ const o = e.maxDimension ?? v, a = e.quality ?? C;
196
+ return new Promise((s, t) => {
197
197
  const i = new FileReader();
198
198
  i.onload = () => {
199
199
  const d = new Image();
@@ -204,25 +204,25 @@ function U(t, e = {}) {
204
204
  (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
205
  const m = n.getContext("2d");
206
206
  if (!m) {
207
- r(new Error("Canvas context not available"));
207
+ t(new Error("Canvas context not available"));
208
208
  return;
209
209
  }
210
210
  m.drawImage(d, 0, 0, l, u);
211
211
  const b = n.toDataURL("image/jpeg", a);
212
212
  s(b);
213
213
  } catch (n) {
214
- r(n);
214
+ t(n);
215
215
  }
216
- }, d.onerror = () => r(new Error("Failed to load image")), d.src = i.result;
217
- }, i.onerror = () => r(new Error("Failed to read file")), i.readAsDataURL(t);
216
+ }, d.onerror = () => t(new Error("Failed to load image")), d.src = i.result;
217
+ }, i.onerror = () => t(new Error("Failed to read file")), i.readAsDataURL(r);
218
218
  });
219
219
  }
220
- function F(t) {
221
- return ["image/jpeg", "image/png", "image/webp", "image/avif"].includes(t.type);
220
+ function F(r) {
221
+ return ["image/jpeg", "image/png", "image/webp", "image/avif"].includes(r.type);
222
222
  }
223
- async function j(t, e, o) {
223
+ async function K(r, e, o) {
224
224
  try {
225
- const a = typeof t == "string" ? t : await U(t, { maxDimension: 384, quality: 0.6 }), s = await fetch(`${e}/api/v1/sizing/age-check`, {
225
+ const a = typeof r == "string" ? r : await z(r, { maxDimension: 384, quality: 0.6 }), s = await fetch(`${e}/api/v1/sizing/age-check`, {
226
226
  method: "POST",
227
227
  headers: {
228
228
  "Content-Type": "application/json",
@@ -232,27 +232,27 @@ async function j(t, e, o) {
232
232
  });
233
233
  if (!s.ok)
234
234
  return { isAdult: !0, confidence: "low" };
235
- const r = await s.json();
235
+ const t = await s.json();
236
236
  return {
237
- isAdult: r?.isAdult !== !1,
237
+ isAdult: t?.isAdult !== !1,
238
238
  // anything other than explicit false → allow
239
- confidence: r?.confidence === "high" ? "high" : "low",
240
- detectedGender: r?.detectedGender === "male" || r?.detectedGender === "female" || r?.detectedGender === "unknown" ? r.detectedGender : void 0,
241
- reasoning: typeof r?.reasoning == "string" ? r.reasoning : void 0
239
+ confidence: t?.confidence === "high" ? "high" : "low",
240
+ detectedGender: t?.detectedGender === "male" || t?.detectedGender === "female" || t?.detectedGender === "unknown" ? t.detectedGender : void 0,
241
+ reasoning: typeof t?.reasoning == "string" ? t.reasoning : void 0
242
242
  };
243
243
  } catch {
244
244
  return { isAdult: !0, confidence: "low" };
245
245
  }
246
246
  }
247
247
  const c = {};
248
- function z(t, e) {
249
- c[t] = { ...c[t] || {}, ...e };
248
+ function U(r, e) {
249
+ c[r] = { ...c[r] || {}, ...e };
250
250
  }
251
- function K(t) {
252
- const e = t?.toLowerCase().split("-")[0] || "en";
251
+ function V(r) {
252
+ const e = r?.toLowerCase().split("-")[0] || "en";
253
253
  return (o) => e === "en" || !c[e] ? o : c[e][o] ?? o;
254
254
  }
255
- function V() {
255
+ function j() {
256
256
  return typeof navigator > "u" ? "en" : (navigator.language || navigator.userLanguage || "en").split("-")[0].toLowerCase();
257
257
  }
258
258
  const J = [
@@ -277,14 +277,14 @@ const J = [
277
277
  zh: "中文",
278
278
  ko: "한국어",
279
279
  ar: "العربية"
280
- }, x = [
280
+ }, Z = [
281
281
  "Virtual Try-On",
282
282
  "Find Your Size & See It On You",
283
283
  "See Your Fit",
284
284
  "Your fit basics are saved",
285
285
  "Add one profile photo to reuse your measurements across PrimeStyleAI products.",
286
286
  "Complete Profile",
287
- "Get the perfect fit, then try it on virtually",
287
+ "Check your size, then try it on virtually",
288
288
  "Get Your Size",
289
289
  "Instant fit recommendation",
290
290
  "Try It On",
@@ -318,7 +318,7 @@ const J = [
318
318
  "Size guide",
319
319
  "Your fit",
320
320
  "Your measure",
321
- "perfect fit",
321
+ "within range",
322
322
  "within range",
323
323
  "too tight",
324
324
  "tight",
@@ -432,8 +432,8 @@ const J = [
432
432
  "Loose",
433
433
  "Short",
434
434
  "Long",
435
- "Perfect",
436
- "Perfect fit",
435
+ "Recommended",
436
+ "Within range",
437
437
  "Within range",
438
438
  "WITHIN RANGE",
439
439
  "✓ Fit",
@@ -442,7 +442,7 @@ const J = [
442
442
  "loose",
443
443
  "short",
444
444
  "long",
445
- "perfect fit",
445
+ "within range",
446
446
  "within range",
447
447
  "too tight",
448
448
  "a bit tight",
@@ -467,7 +467,7 @@ const J = [
467
467
  "Virtual Try-On": "Probador Virtual",
468
468
  "Find Your Size & See It On You": "Encuentra tu talla y pruébatelo",
469
469
  "See Your Fit": "Ver tu ajuste",
470
- "Get the perfect fit, then try it on virtually": "Encuentra el ajuste perfecto y pruébatelo virtualmente",
470
+ "Check your size, then try it on virtually": "Comprueba tu talla y pruébatelo virtualmente",
471
471
  "Get Your Size": "Tu talla",
472
472
  "Instant fit recommendation": "Recomendación de ajuste instantánea",
473
473
  "Try It On": "Pruébatelo",
@@ -502,8 +502,9 @@ const J = [
502
502
  "Edit measurements": "Editar medidas",
503
503
  "Size guide": "Guía de tallas",
504
504
  "Your fit": "Tu ajuste",
505
+ "Your Size Recommendation": "Tu recomendación de talla",
505
506
  "Your measure": "Tu medida",
506
- "perfect fit": "ajuste perfecto",
507
+ "within range": "dentro del rango",
507
508
  "too tight": "demasiado ajustado",
508
509
  tight: "ajustado",
509
510
  "a bit tight": "un poco ajustado",
@@ -606,8 +607,6 @@ const J = [
606
607
  Loose: "Holgado",
607
608
  Short: "Corto",
608
609
  Long: "Largo",
609
- Perfect: "Perfecto",
610
- "Perfect fit": "Ajuste perfecto",
611
610
  "✓ Fit": "✓ Ajuste",
612
611
  "too short": "demasiado corto",
613
612
  "too long": "demasiado largo",
@@ -723,7 +722,7 @@ const J = [
723
722
  "Virtual Try-On": "Essayage Virtuel",
724
723
  "Find Your Size & See It On You": "Trouvez votre taille et essayez-le",
725
724
  "See Your Fit": "Voir votre ajustement",
726
- "Get the perfect fit, then try it on virtually": "Trouvez la coupe parfaite, puis essayez-le virtuellement",
725
+ "Check your size, then try it on virtually": "Vérifiez votre taille, puis essayez-le virtuellement",
727
726
  "Get Your Size": "Votre taille",
728
727
  "Instant fit recommendation": "Recommandation de coupe instantanée",
729
728
  "Try It On": "Essayer",
@@ -758,8 +757,9 @@ const J = [
758
757
  "Edit measurements": "Modifier les mesures",
759
758
  "Size guide": "Guide des tailles",
760
759
  "Your fit": "Votre coupe",
760
+ "Your Size Recommendation": "Votre recommandation de taille",
761
761
  "Your measure": "Votre mesure",
762
- "perfect fit": "coupe parfaite",
762
+ "within range": "dans la plage",
763
763
  "too tight": "trop serré",
764
764
  tight: "serré",
765
765
  "a bit tight": "un peu serré",
@@ -862,8 +862,6 @@ const J = [
862
862
  Loose: "Lâche",
863
863
  Short: "Court",
864
864
  Long: "Long",
865
- Perfect: "Parfait",
866
- "Perfect fit": "Ajustement parfait",
867
865
  "✓ Fit": "✓ Ajusté",
868
866
  "too short": "trop court",
869
867
  "too long": "trop long",
@@ -979,7 +977,7 @@ const J = [
979
977
  "Virtual Try-On": "Virtuelle Anprobe",
980
978
  "Find Your Size & See It On You": "Finden Sie Ihre Größe und probieren Sie es an",
981
979
  "See Your Fit": "Ihre Passform ansehen",
982
- "Get the perfect fit, then try it on virtually": "Finden Sie die perfekte Passform und probieren Sie es virtuell an",
980
+ "Check your size, then try it on virtually": "Prüfen Sie Ihre Größe und probieren Sie es virtuell an",
983
981
  "Get Your Size": "Ihre Größe",
984
982
  "Instant fit recommendation": "Sofortige Passformempfehlung",
985
983
  "Try It On": "Anprobieren",
@@ -1014,8 +1012,9 @@ const J = [
1014
1012
  "Edit measurements": "Maße bearbeiten",
1015
1013
  "Size guide": "Größentabelle",
1016
1014
  "Your fit": "Ihre Passform",
1015
+ "Your Size Recommendation": "Ihre Größenempfehlung",
1017
1016
  "Your measure": "Ihr Maß",
1018
- "perfect fit": "perfekte Passform",
1017
+ "within range": "im Bereich",
1019
1018
  "too tight": "zu eng",
1020
1019
  tight: "eng",
1021
1020
  "a bit tight": "etwas eng",
@@ -1118,8 +1117,6 @@ const J = [
1118
1117
  Loose: "Locker",
1119
1118
  Short: "Kurz",
1120
1119
  Long: "Lang",
1121
- Perfect: "Perfekt",
1122
- "Perfect fit": "Perfekte Passform",
1123
1120
  "✓ Fit": "✓ Passt",
1124
1121
  "too short": "zu kurz",
1125
1122
  "too long": "zu lang",
@@ -1235,7 +1232,7 @@ const J = [
1235
1232
  "Virtual Try-On": "Prova Virtuale",
1236
1233
  "Find Your Size & See It On You": "Trova la tua taglia e provalo",
1237
1234
  "See Your Fit": "Vedi la vestibilità",
1238
- "Get the perfect fit, then try it on virtually": "Trova la vestibilità perfetta, poi provalo virtualmente",
1235
+ "Check your size, then try it on virtually": "Controlla la tua taglia, poi provalo virtualmente",
1239
1236
  "Get Your Size": "La tua taglia",
1240
1237
  "Instant fit recommendation": "Raccomandazione vestibilità istantanea",
1241
1238
  "Try It On": "Provalo",
@@ -1270,8 +1267,9 @@ const J = [
1270
1267
  "Edit measurements": "Modifica misure",
1271
1268
  "Size guide": "Guida alle taglie",
1272
1269
  "Your fit": "La tua vestibilità",
1270
+ "Your Size Recommendation": "La tua taglia consigliata",
1273
1271
  "Your measure": "La tua misura",
1274
- "perfect fit": "vestibilità perfetta",
1272
+ "within range": "entro l'intervallo",
1275
1273
  "too tight": "troppo stretto",
1276
1274
  tight: "stretto",
1277
1275
  "a bit tight": "un po' stretto",
@@ -1374,8 +1372,6 @@ const J = [
1374
1372
  Loose: "Largo",
1375
1373
  Short: "Corto",
1376
1374
  Long: "Lungo",
1377
- Perfect: "Perfetto",
1378
- "Perfect fit": "Vestibilità perfetta",
1379
1375
  "✓ Fit": "✓ Adatto",
1380
1376
  "too short": "troppo corto",
1381
1377
  "too long": "troppo lungo",
@@ -1491,7 +1487,7 @@ const J = [
1491
1487
  "Virtual Try-On": "Provador Virtual",
1492
1488
  "Find Your Size & See It On You": "Encontre seu tamanho e experimente",
1493
1489
  "See Your Fit": "Veja seu ajuste",
1494
- "Get the perfect fit, then try it on virtually": "Encontre o caimento perfeito e experimente virtualmente",
1490
+ "Check your size, then try it on virtually": "Confira seu tamanho e experimente virtualmente",
1495
1491
  "Get Your Size": "Seu tamanho",
1496
1492
  "Instant fit recommendation": "Recomendação de caimento instantânea",
1497
1493
  "Try It On": "Experimentar",
@@ -1526,8 +1522,9 @@ const J = [
1526
1522
  "Edit measurements": "Editar medidas",
1527
1523
  "Size guide": "Guia de tamanhos",
1528
1524
  "Your fit": "Seu caimento",
1525
+ "Your Size Recommendation": "Sua recomendação de tamanho",
1529
1526
  "Your measure": "Sua medida",
1530
- "perfect fit": "caimento perfeito",
1527
+ "within range": "dentro da faixa",
1531
1528
  "too tight": "muito apertado",
1532
1529
  tight: "apertado",
1533
1530
  "a bit tight": "um pouco apertado",
@@ -1630,8 +1627,6 @@ const J = [
1630
1627
  Loose: "Folgado",
1631
1628
  Short: "Curto",
1632
1629
  Long: "Longo",
1633
- Perfect: "Perfeito",
1634
- "Perfect fit": "Caimento perfeito",
1635
1630
  "✓ Fit": "✓ Caimento",
1636
1631
  "too short": "muito curto",
1637
1632
  "too long": "muito longo",
@@ -1747,7 +1742,7 @@ const J = [
1747
1742
  "Virtual Try-On": "バーチャル試着",
1748
1743
  "Find Your Size & See It On You": "あなたのサイズを見つけて試着",
1749
1744
  "See Your Fit": "フィット感を見る",
1750
- "Get the perfect fit, then try it on virtually": "最適なフィットを見つけて、バーチャルで試着しましょう",
1745
+ "Check your size, then try it on virtually": "サイズを確認して、バーチャルで試着しましょう",
1751
1746
  "Get Your Size": "サイズを確認",
1752
1747
  "Instant fit recommendation": "瞬時にフィット提案",
1753
1748
  "Try It On": "試着する",
@@ -1782,8 +1777,9 @@ const J = [
1782
1777
  "Edit measurements": "寸法を編集",
1783
1778
  "Size guide": "サイズガイド",
1784
1779
  "Your fit": "あなたのフィット",
1780
+ "Your Size Recommendation": "サイズのおすすめ",
1785
1781
  "Your measure": "あなたの寸法",
1786
- "perfect fit": "ぴったり",
1782
+ "within range": "範囲内",
1787
1783
  "too tight": "きつすぎる",
1788
1784
  tight: "きつい",
1789
1785
  "a bit tight": "少しきつい",
@@ -1886,8 +1882,6 @@ const J = [
1886
1882
  Loose: "ゆるい",
1887
1883
  Short: "短い",
1888
1884
  Long: "長い",
1889
- Perfect: "ぴったり",
1890
- "Perfect fit": "ぴったりフィット",
1891
1885
  "✓ Fit": "✓ フィット",
1892
1886
  "too short": "短すぎる",
1893
1887
  "too long": "長すぎる",
@@ -2003,7 +1997,7 @@ const J = [
2003
1997
  "Virtual Try-On": "虚拟试穿",
2004
1998
  "Find Your Size & See It On You": "找到你的尺码并试穿",
2005
1999
  "See Your Fit": "查看合身效果",
2006
- "Get the perfect fit, then try it on virtually": "找到最佳合身度,然后虚拟试穿",
2000
+ "Check your size, then try it on virtually": "确认尺码,然后虚拟试穿",
2007
2001
  "Get Your Size": "获取尺码",
2008
2002
  "Instant fit recommendation": "即时合身推荐",
2009
2003
  "Try It On": "试穿",
@@ -2038,8 +2032,9 @@ const J = [
2038
2032
  "Edit measurements": "编辑尺寸",
2039
2033
  "Size guide": "尺码指南",
2040
2034
  "Your fit": "你的合身度",
2035
+ "Your Size Recommendation": "你的尺码建议",
2041
2036
  "Your measure": "你的尺寸",
2042
- "perfect fit": "完美合身",
2037
+ "within range": "在范围内",
2043
2038
  "too tight": "太紧",
2044
2039
  tight: "偏紧",
2045
2040
  "a bit tight": "略紧",
@@ -2142,8 +2137,6 @@ const J = [
2142
2137
  Loose: "松",
2143
2138
  Short: "短",
2144
2139
  Long: "长",
2145
- Perfect: "完美",
2146
- "Perfect fit": "完美合身",
2147
2140
  "✓ Fit": "✓ 合身",
2148
2141
  "too short": "太短",
2149
2142
  "too long": "太长",
@@ -2259,7 +2252,7 @@ const J = [
2259
2252
  "Virtual Try-On": "가상 피팅",
2260
2253
  "Find Your Size & See It On You": "사이즈를 찾고 입어보세요",
2261
2254
  "See Your Fit": "핏 확인하기",
2262
- "Get the perfect fit, then try it on virtually": "완벽한 핏을 찾고 가상으로 입어보세요",
2255
+ "Check your size, then try it on virtually": "사이즈를 확인하고 가상으로 입어보세요",
2263
2256
  "Get Your Size": "사이즈 확인",
2264
2257
  "Instant fit recommendation": "즉시 핏 추천",
2265
2258
  "Try It On": "입어보기",
@@ -2294,8 +2287,9 @@ const J = [
2294
2287
  "Edit measurements": "치수 수정",
2295
2288
  "Size guide": "사이즈 가이드",
2296
2289
  "Your fit": "나의 핏",
2290
+ "Your Size Recommendation": "사이즈 추천",
2297
2291
  "Your measure": "내 치수",
2298
- "perfect fit": "완벽한 ",
2292
+ "within range": "범위 ",
2299
2293
  "too tight": "너무 타이트",
2300
2294
  tight: "타이트",
2301
2295
  "a bit tight": "약간 타이트",
@@ -2398,8 +2392,6 @@ const J = [
2398
2392
  Loose: "헐렁한",
2399
2393
  Short: "짧은",
2400
2394
  Long: "긴",
2401
- Perfect: "완벽",
2402
- "Perfect fit": "완벽한 핏",
2403
2395
  "✓ Fit": "✓ 적합",
2404
2396
  "too short": "너무 짧음",
2405
2397
  "too long": "너무 김",
@@ -2515,7 +2507,7 @@ const J = [
2515
2507
  "Virtual Try-On": "تجربة افتراضية",
2516
2508
  "Find Your Size & See It On You": "اعثر على مقاسك وجرّبه",
2517
2509
  "See Your Fit": "شاهد الملاءمة",
2518
- "Get the perfect fit, then try it on virtually": "اعثر على المقاس المثالي ثم جرّبه افتراضياً",
2510
+ "Check your size, then try it on virtually": "تحقق من مقاسك ثم جرّبه افتراضياً",
2519
2511
  "Get Your Size": "مقاسك",
2520
2512
  "Instant fit recommendation": "توصية فورية بالمقاس",
2521
2513
  "Try It On": "جرّبه",
@@ -2550,8 +2542,9 @@ const J = [
2550
2542
  "Edit measurements": "تعديل القياسات",
2551
2543
  "Size guide": "دليل المقاسات",
2552
2544
  "Your fit": "ملاءمتك",
2545
+ "Your Size Recommendation": "توصية المقاس",
2553
2546
  "Your measure": "قياسك",
2554
- "perfect fit": "مقاس مثالي",
2547
+ "within range": "ضمن النطاق",
2555
2548
  "too tight": "ضيق جداً",
2556
2549
  tight: "ضيق",
2557
2550
  "a bit tight": "ضيق قليلاً",
@@ -2654,8 +2647,6 @@ const J = [
2654
2647
  Loose: "فضفاض",
2655
2648
  Short: "قصير",
2656
2649
  Long: "طويل",
2657
- Perfect: "مثالي",
2658
- "Perfect fit": "مقاس مثالي",
2659
2650
  "✓ Fit": "✓ مناسب",
2660
2651
  "too short": "قصير جداً",
2661
2652
  "too long": "طويل جداً",
@@ -2778,23 +2769,23 @@ const J = [
2778
2769
  ko: L,
2779
2770
  ar: G
2780
2771
  };
2781
- for (const [t, e] of Object.entries(O))
2782
- z(t, e);
2772
+ for (const [r, e] of Object.entries(O))
2773
+ U(r, e);
2783
2774
  export {
2784
2775
  W as A,
2785
2776
  q as L,
2786
2777
  h as P,
2787
- Y as S,
2788
- x as T,
2789
- U as a,
2790
- J as b,
2778
+ J as S,
2779
+ Z as T,
2780
+ Y as a,
2781
+ z as b,
2791
2782
  K as c,
2792
- j as d,
2793
- V as e,
2794
- f,
2795
- g,
2783
+ V as d,
2784
+ j as e,
2785
+ p as f,
2786
+ y as g,
2796
2787
  F as i,
2797
- v as j,
2798
- z as r
2788
+ w as j,
2789
+ U as r
2799
2790
  };
2800
- //# sourceMappingURL=index-CYT0nGWX.js.map
2791
+ //# sourceMappingURL=index-BlzviBfP.js.map