@primestyleai/tryon 1.2.0 → 1.2.2

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/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  <p align="center">
2
- <img src="https://primestyleai.com/logo-gold.svg" alt="PrimeStyle AI" width="200" />
2
+ <a href="https://myaifitting.com">
3
+ <img src="https://cdn.jsdelivr.net/npm/@primestyleai/tryon/logo.svg" alt="PrimeStyle AI" width="180" />
4
+ </a>
3
5
  </p>
4
6
 
5
7
  <h1 align="center">@primestyleai/tryon</h1>
@@ -20,10 +22,10 @@
20
22
  </p>
21
23
 
22
24
  <p align="center">
23
- <a href="https://primestyleai.com/developer/demo">Live Demo</a> &bull;
24
- <a href="https://primestyleai.com/docs">Documentation</a> &bull;
25
- <a href="https://primestyleai.com/dashboard/developer/keys">Get API Key</a> &bull;
26
- <a href="https://primestyleai.com/pricing">Pricing</a>
25
+ <a href="https://myaifitting.com/developer/demo">Live Demo</a> &bull;
26
+ <a href="https://myaifitting.com/docs">Documentation</a> &bull;
27
+ <a href="https://myaifitting.com/developer/dashboard/keys">Get API Key</a> &bull;
28
+ <a href="https://myaifitting.com/pricing">Pricing</a>
27
29
  </p>
28
30
 
29
31
  ---
@@ -49,7 +51,7 @@ npm install @primestyleai/tryon
49
51
 
50
52
  ### 2. Set Your API Key
51
53
 
52
- Get your key from the [Developer Dashboard](https://primestyleai.com/dashboard/developer/keys) and add it to your `.env.local`:
54
+ Get your key from the [Developer Dashboard](https://myaifitting.com/developer/dashboard/keys) and add it to your `.env.local`:
53
55
 
54
56
  ```env
55
57
  NEXT_PUBLIC_PRIMESTYLE_API_KEY=ps_live_your_key_here
@@ -322,7 +324,7 @@ Priority: Tailwind/classNames classes > CSS variables (buttonStyles/modalStyles)
322
324
  | Variable | Required | Default | Description |
323
325
  |----------|----------|---------|-------------|
324
326
  | `NEXT_PUBLIC_PRIMESTYLE_API_KEY` | Yes | — | Your PrimeStyle API key |
325
- | `NEXT_PUBLIC_PRIMESTYLE_API_URL` | No | `https://api.primestyleai.com` | Custom API endpoint |
327
+ | `NEXT_PUBLIC_PRIMESTYLE_API_URL` | No | `https://myaifitting.com` | Custom API endpoint |
326
328
 
327
329
  The component reads these automatically — no need to pass them as props.
328
330
 
@@ -338,7 +340,7 @@ Each virtual try-on consumes **tokens** from your account balance.
338
340
  | **Token packs** | Pay-as-you-go, never expire |
339
341
  | **Monthly plans** | Volume discounts for high-traffic stores |
340
342
 
341
- Manage your balance and purchase tokens at [primestyleai.com/dashboard/billing](https://primestyleai.com/dashboard/billing).
343
+ Manage your balance and purchase tokens at [primestyleai.com/developer/dashboard/billing](https://myaifitting.com/developer/dashboard/billing).
342
344
 
343
345
  If a try-on fails, tokens are **automatically refunded** to your account.
344
346
 
@@ -355,7 +357,7 @@ onComplete={(result) => {
355
357
 
356
358
  ## API Key Management
357
359
 
358
- Create and manage your API keys at the [Developer Dashboard](https://primestyleai.com/dashboard/developer/keys).
360
+ Create and manage your API keys at the [Developer Dashboard](https://myaifitting.com/developer/dashboard/keys).
359
361
 
360
362
  - Keys start with `ps_live_` and are shown **once** at creation
361
363
  - Set **allowed domains** to restrict where your key can be used
@@ -419,13 +421,13 @@ export default function ProductPage({ product }) {
419
421
 
420
422
  ## Need Help?
421
423
 
422
- - [Live Demo](https://primestyleai.com/developer/demo) — See it in action
423
- - [Documentation](https://primestyleai.com/docs) — Full API reference
424
- - [Dashboard](https://primestyleai.com/dashboard/developer/keys) — Manage keys & tokens
424
+ - [Live Demo](https://myaifitting.com/developer/demo) — See it in action
425
+ - [Documentation](https://myaifitting.com/docs) — Full API reference
426
+ - [Dashboard](https://myaifitting.com/developer/dashboard/keys) — Manage keys & tokens
425
427
  - [Contact](mailto:support@primestyleai.com) — We're here to help
426
428
 
427
429
  ---
428
430
 
429
431
  <p align="center">
430
- Built with care by <a href="https://primestyleai.com">PrimeStyle AI</a>
432
+ Built with care by <a href="https://myaifitting.com">PrimeStyle AI</a>
431
433
  </p>
@@ -22,6 +22,9 @@ export declare class PrimeStyleTryon extends HTMLElement {
22
22
  setButtonStyles(styles: ButtonStyles): void;
23
23
  /** Configure modal appearance programmatically */
24
24
  setModalStyles(styles: ModalStyles): void;
25
+ private savedScrollY;
26
+ private lockBodyScroll;
27
+ private unlockBodyScroll;
25
28
  /** Open the try-on modal */
26
29
  open(): void;
27
30
  /** Close the try-on modal */
@@ -1,4 +1,4 @@
1
- const DEFAULT_API_URL = "https://api.primestyleai.com";
1
+ const DEFAULT_API_URL = "https://myaifitting.com";
2
2
  class ApiClient {
3
3
  constructor(apiKey, apiUrl) {
4
4
  this.apiKey = apiKey;
@@ -1,5 +1,5 @@
1
- import { A as ApiClient, S as SseClient, i as isValidImageFile, c as compressImage } from "./image-utils-usff6Qu8.js";
2
- import { P } from "./image-utils-usff6Qu8.js";
1
+ import { A as ApiClient, S as SseClient, i as isValidImageFile, c as compressImage } from "./image-utils-DtJVYQIA.js";
2
+ import { P } from "./image-utils-DtJVYQIA.js";
3
3
  function detectProductImage() {
4
4
  const ogImage = document.querySelector(
5
5
  'meta[property="og:image"]'
@@ -459,6 +459,7 @@ class PrimeStyleTryon extends HTMLElement {
459
459
  this.productImageUrl = null;
460
460
  this.buttonStyles = {};
461
461
  this.modalStyles = {};
462
+ this.savedScrollY = 0;
462
463
  this.shadow = this.attachShadow({ mode: "open" });
463
464
  }
464
465
  static get observedAttributes() {
@@ -512,15 +513,33 @@ class PrimeStyleTryon extends HTMLElement {
512
513
  this.modalStyles = { ...this.modalStyles, ...styles };
513
514
  this.applyModalStyles();
514
515
  }
516
+ lockBodyScroll() {
517
+ this.savedScrollY = window.scrollY;
518
+ document.body.style.overflow = "hidden";
519
+ document.body.style.position = "fixed";
520
+ document.body.style.top = `-${this.savedScrollY}px`;
521
+ document.body.style.left = "0";
522
+ document.body.style.right = "0";
523
+ }
524
+ unlockBodyScroll() {
525
+ document.body.style.overflow = "";
526
+ document.body.style.position = "";
527
+ document.body.style.top = "";
528
+ document.body.style.left = "";
529
+ document.body.style.right = "";
530
+ window.scrollTo(0, this.savedScrollY);
531
+ }
515
532
  /** Open the try-on modal */
516
533
  open() {
517
534
  this.state = "upload";
535
+ this.lockBodyScroll();
518
536
  this.render();
519
537
  this.emit("ps:open");
520
538
  }
521
539
  /** Close the try-on modal */
522
540
  close() {
523
541
  this.state = "idle";
542
+ this.unlockBodyScroll();
524
543
  this.resetUpload();
525
544
  this.render();
526
545
  this.emit("ps:close");
@@ -567,6 +586,9 @@ class PrimeStyleTryon extends HTMLElement {
567
586
  this.sseClient = new SseClient(this.apiClient.getStreamUrl());
568
587
  }
569
588
  cleanup() {
589
+ if (this.state !== "idle") {
590
+ this.unlockBodyScroll();
591
+ }
570
592
  if (this.sseUnsubscribe) {
571
593
  this.sseUnsubscribe();
572
594
  this.sseUnsubscribe = null;
@@ -653,7 +675,7 @@ class PrimeStyleTryon extends HTMLElement {
653
675
  if (this.showPoweredBy) {
654
676
  const powered = document.createElement("div");
655
677
  powered.className = "ps-powered";
656
- powered.innerHTML = `Powered by <a href="https://primestyleai.com" target="_blank" rel="noopener">PrimeStyle AI</a>`;
678
+ powered.innerHTML = `Powered by <a href="https://myaifitting.com" target="_blank" rel="noopener">PrimeStyle AI</a>`;
657
679
  modal.appendChild(powered);
658
680
  }
659
681
  overlay.appendChild(modal);
@@ -5,7 +5,7 @@ export interface PrimeStyleTryonProps {
5
5
  productImage: string;
6
6
  /** Button text (defaults to "Virtual Try-On") */
7
7
  buttonText?: string;
8
- /** API base URL — defaults to NEXT_PUBLIC_PRIMESTYLE_API_URL env or https://api.primestyleai.com */
8
+ /** API base URL — defaults to NEXT_PUBLIC_PRIMESTYLE_API_URL env or https://myaifitting.com */
9
9
  apiUrl?: string;
10
10
  /** Show "Powered by PrimeStyle" in modal footer (defaults to true) */
11
11
  showPoweredBy?: boolean;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
3
3
  import { useState, useRef, useEffect, useCallback } from "react";
4
- import { A as ApiClient, S as SseClient, i as isValidImageFile, c as compressImage, P as PrimeStyleError } from "../image-utils-usff6Qu8.js";
4
+ import { A as ApiClient, S as SseClient, i as isValidImageFile, c as compressImage, P as PrimeStyleError } from "../image-utils-DtJVYQIA.js";
5
5
  function cx(base, override) {
6
6
  return override ? `${base} ${override}` : base;
7
7
  }
@@ -94,7 +94,7 @@ function getApiKey() {
94
94
  return key;
95
95
  }
96
96
  function getApiUrl(override) {
97
- return override || process.env.NEXT_PUBLIC_PRIMESTYLE_API_URL || "https://api.primestyleai.com";
97
+ return override || process.env.NEXT_PUBLIC_PRIMESTYLE_API_URL || "https://myaifitting.com";
98
98
  }
99
99
  function PrimeStyleTryon({
100
100
  productImage,
@@ -143,6 +143,24 @@ function PrimeStyleTryon({
143
143
  if (previewUrl) URL.revokeObjectURL(previewUrl);
144
144
  };
145
145
  }, [previewUrl]);
146
+ useEffect(() => {
147
+ if (view !== "idle") {
148
+ const scrollY = window.scrollY;
149
+ document.body.style.overflow = "hidden";
150
+ document.body.style.position = "fixed";
151
+ document.body.style.top = `-${scrollY}px`;
152
+ document.body.style.left = "0";
153
+ document.body.style.right = "0";
154
+ return () => {
155
+ document.body.style.overflow = "";
156
+ document.body.style.position = "";
157
+ document.body.style.top = "";
158
+ document.body.style.left = "";
159
+ document.body.style.right = "";
160
+ window.scrollTo(0, scrollY);
161
+ };
162
+ }
163
+ }, [view]);
146
164
  const handleOpen = useCallback(() => {
147
165
  setView("upload");
148
166
  onOpen?.();
@@ -187,26 +205,41 @@ function PrimeStyleTryon({
187
205
  if (previewUrl) URL.revokeObjectURL(previewUrl);
188
206
  setPreviewUrl(null);
189
207
  }, [previewUrl]);
208
+ const completedRef = useRef(false);
209
+ const cleanupJob = useCallback(() => {
210
+ if (pollingRef.current) {
211
+ clearInterval(pollingRef.current);
212
+ pollingRef.current = null;
213
+ }
214
+ unsubRef.current?.();
215
+ unsubRef.current = null;
216
+ }, []);
190
217
  const handleVtoUpdate = useCallback(
191
- (update, currentView) => {
218
+ (update) => {
192
219
  if (update.status === "completed" && update.imageUrl) {
193
220
  setResultImageUrl((prev) => {
194
- if (prev?.startsWith("data:") || !prev) return update.imageUrl;
221
+ if (!prev || prev.startsWith("data:")) return update.imageUrl;
195
222
  if (!update.imageUrl.startsWith("data:")) return update.imageUrl;
196
223
  return prev;
197
224
  });
198
- if (currentView !== "result") {
225
+ if (!completedRef.current) {
226
+ completedRef.current = true;
227
+ cleanupJob();
199
228
  setView("result");
200
229
  onComplete?.({ jobId: update.galleryId, imageUrl: update.imageUrl });
201
230
  }
202
231
  } else if (update.status === "failed") {
203
- const msg = update.error || "Try-on generation failed";
204
- setErrorMessage(msg);
205
- setView("error");
206
- onError?.({ message: msg });
232
+ if (!completedRef.current) {
233
+ completedRef.current = true;
234
+ cleanupJob();
235
+ const msg = update.error || "Try-on generation failed";
236
+ setErrorMessage(msg);
237
+ setView("error");
238
+ onError?.({ message: msg });
239
+ }
207
240
  }
208
241
  },
209
- [onComplete, onError]
242
+ [onComplete, onError, cleanupJob]
210
243
  );
211
244
  const handleSubmit = useCallback(async () => {
212
245
  if (!selectedFile || !apiRef.current || !sseRef.current) {
@@ -216,6 +249,7 @@ function PrimeStyleTryon({
216
249
  onError?.({ message: msg, code: "SDK_NOT_CONFIGURED" });
217
250
  return;
218
251
  }
252
+ completedRef.current = false;
219
253
  setView("processing");
220
254
  try {
221
255
  const modelImage = await compressImage(selectedFile);
@@ -226,33 +260,35 @@ function PrimeStyleTryon({
226
260
  onProcessing?.(response.jobId);
227
261
  unsubRef.current = sseRef.current.onJob(
228
262
  response.jobId,
229
- (update) => handleVtoUpdate(update, view)
263
+ (update) => handleVtoUpdate(update)
230
264
  );
231
265
  let attempts = 0;
232
266
  pollingRef.current = setInterval(async () => {
267
+ if (completedRef.current) {
268
+ if (pollingRef.current) clearInterval(pollingRef.current);
269
+ pollingRef.current = null;
270
+ return;
271
+ }
233
272
  attempts++;
234
273
  if (attempts > 60) {
235
274
  if (pollingRef.current) clearInterval(pollingRef.current);
275
+ pollingRef.current = null;
236
276
  return;
237
277
  }
238
278
  try {
239
279
  const status = await apiRef.current.getStatus(response.jobId);
240
280
  if (status.status === "completed" || status.status === "failed") {
241
- handleVtoUpdate(
242
- {
243
- galleryId: response.jobId,
244
- status: status.status,
245
- imageUrl: status.imageUrl,
246
- error: status.status === "failed" ? status.message : null,
247
- timestamp: Date.now()
248
- },
249
- view
250
- );
251
- if (pollingRef.current) clearInterval(pollingRef.current);
281
+ handleVtoUpdate({
282
+ galleryId: response.jobId,
283
+ status: status.status,
284
+ imageUrl: status.imageUrl,
285
+ error: status.status === "failed" ? status.message : null,
286
+ timestamp: Date.now()
287
+ });
252
288
  }
253
289
  } catch {
254
290
  }
255
- }, 2e3);
291
+ }, 3e3);
256
292
  } catch (err) {
257
293
  const message = err instanceof Error ? err.message : "Failed to start try-on";
258
294
  const code = err instanceof PrimeStyleError ? err.code : void 0;
@@ -260,7 +296,7 @@ function PrimeStyleTryon({
260
296
  setView("error");
261
297
  onError?.({ message, code });
262
298
  }
263
- }, [selectedFile, productImage, onProcessing, onError, handleVtoUpdate, view]);
299
+ }, [selectedFile, productImage, onProcessing, onError, handleVtoUpdate]);
264
300
  const handleDownload = useCallback(() => {
265
301
  if (!resultImageUrl) return;
266
302
  if (resultImageUrl.startsWith("data:")) {
@@ -280,13 +316,15 @@ function PrimeStyleTryon({
280
316
  }
281
317
  }, [resultImageUrl]);
282
318
  const handleRetry = useCallback(() => {
319
+ completedRef.current = false;
320
+ cleanupJob();
283
321
  setSelectedFile(null);
284
322
  if (previewUrl) URL.revokeObjectURL(previewUrl);
285
323
  setPreviewUrl(null);
286
324
  setResultImageUrl(null);
287
325
  setErrorMessage(null);
288
326
  setView("upload");
289
- }, [previewUrl]);
327
+ }, [previewUrl, cleanupJob]);
290
328
  const rootVars = {
291
329
  "--ps-btn-bg": btnS.backgroundColor,
292
330
  "--ps-btn-color": btnS.textColor,
@@ -510,7 +548,7 @@ function PrimeStyleTryon({
510
548
  /* @__PURE__ */ jsx(
511
549
  "a",
512
550
  {
513
- href: "https://primestyleai.com",
551
+ href: "https://myaifitting.com",
514
552
  target: "_blank",
515
553
  rel: "noopener noreferrer",
516
554
  children: "PrimeStyle AI"
package/dist/types.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  export interface PrimeStyleConfig {
3
3
  /** Your API key (starts with ps_live_) */
4
4
  apiKey: string;
5
- /** API base URL (defaults to https://api.primestyleai.com) */
5
+ /** API base URL (defaults to https://myaifitting.com) */
6
6
  apiUrl?: string;
7
7
  /** Product image URL to try on */
8
8
  productImage?: string;
package/logo.svg ADDED
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 841.9 510.4" style="enable-background:new 0 0 841.9 510.4;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#D6BA7D;}
7
+ </style>
8
+ <g>
9
+ <path class="st0" d="M333.7,230.1c-9.1-0.1-12.4,3.9-10.7,12.8c1.2,6.3,2.8,12.7,5.3,18.7c16.1,39.2,43.1,69.4,77.8,93.1
10
+ c5.8,3.9,11,3.7,16.8,0.2c20.3-12.2,37.5-28.1,52-46.6c15-19.1,27.6-39.7,32.5-64c2.2-11-2.4-15.7-13.8-14.5
11
+ c-2.9,0.3-5.7,1.4-8.5,1.9c-1.9,0.4-3.8,0.4-6.9,0.7c10.4-11.8,29.4-13.9,39.3-4.7c11,10.2,21,21.3,31.8,31.7
12
+ c5.2,4.9,8,10.6,6.9,17.4c-2.2,14.3-3.6,28.9-8,42.5c-14.1,43.9-41.2,79.8-72.3,113.1c-6.5,6.9-7.2,6.9-13-1.1
13
+ c-13.3-18.4-26.3-37-39.7-55.3c-8.3-11.3-8.5-11.2-16.7,0.3c-13.3,18.6-26.6,37.3-39.9,56c-2.8,3.8-5.4,6.9-10.2,1.8
14
+ c-27.8-29.9-52.8-61.7-68.4-99.8c-7.6-18.6-14-37.7-13.7-58.1c0.1-4.7,1.5-10.6,4.5-13.9c11.1-12.1,22.8-23.6,34.8-34.8
15
+ c9.9-9.2,29.1-6.9,39.2,4.9C345.6,231.4,339.7,230,333.7,230.1z M375.1,401.5c7.5-10.7,14.9-21.4,22.7-31.8c3-4.1,2.6-6.2-1.7-9.1
16
+ c-27.9-18.8-50.4-42.9-66.7-72.2c-7.5-13.5-12.2-28.6-18.3-43.3c-0.2,0.2-1.7,1.2-2.9,2.4c-4.1,4.1-7.5,9.1-12.2,12.3
17
+ c-12.4,8.4-12.5,19.7-9.7,32.6c7.5,34.4,22.9,64.9,43.9,92.8c9.4,12.4,19.5,24.4,30,37.4C365.7,414.8,370.4,408.1,375.1,401.5z
18
+ M429.1,364.4c13.7,19.3,27.2,38.3,41.2,57.9c20.5-23.3,39.3-47,53.7-74c10-18.7,16.8-38.4,20.3-59.3c1.9-11.5,1-21.2-9.4-28.8
19
+ c-5.7-4.3-10.2-10.2-16.3-16.4C506.1,297.7,473,334.6,429.1,364.4z"/>
20
+ <path class="st0" d="M481.8,268.1c-45.8-25.2-85.4-57.9-117.4-99.3c-6.8-8.8-11.9-19.4-15.4-30c-9.1-28.2,0.9-56.7,24.9-75.2
21
+ c21.6-16.5,54-18.1,77.7-3c16.9,10.8,27.8,26.1,30.3,46.3c0.4,3.4-1.6,8.3-4.2,10.6c-2,1.8-7.6,2.4-9.8,0.9
22
+ c-3.1-2.2-5.5-6.5-6.5-10.4c-6.6-25.5-26.7-39.5-53-36.5c-23.2,2.6-41.3,23.8-41.5,48.2c-0.1,13,4.2,24.7,12.4,34
23
+ c16.2,18.4,32.4,37.2,50.9,53.1c20,17.2,42.7,31.1,65.1,47.1c-1.8,4.5-4.3,10.7-6.9,17.2C485.7,270,483.7,269.3,481.8,268.1z"/>
24
+ <path class="st0" d="M134.3,426.9c64-0.3,127.9-0.2,191.9-0.1c2.3,0,5.5-0.2,6.8,1.1c6.5,6.5,12.4,13.5,19.1,20.9
25
+ c-2.4,0.2-4.1,0.4-5.7,0.4c-73.1,0-146.3-0.1-219.4-0.2c-3.4,0-6.8-0.2-10.1-0.7c-18.1-2.9-25-17.4-16-35.3
26
+ C108.4,426.9,121,426.9,134.3,426.9z"/>
27
+ <path class="st0" d="M705.1,448.9c-0.8,0-1.5,0-2.2,0c-73.6,0.1-147.3,0.2-220.9,0.3c-1.3,0-2.6-0.3-4.1-0.5
28
+ c5.6-5.9,11.1-11.2,16-17.1c2.9-3.5,5.8-5,10.4-5c64.7,0.2,129.4,0,194.1,0.4c12.9,0.1,24.5-1.1,32.3-14.9
29
+ C737.7,437.7,729.3,448.9,705.1,448.9z"/>
30
+ <path class="st0" d="M264.5,297.8c1.3,5-0.8,6.7-4.9,8.4c-22.4,9.4-45.2,18.2-67,28.9c-25.3,12.3-50.2,25.6-74.4,40
31
+ c-15.8,9.4-26.4,24-30.2,42.5c-1.1,5-0.9,10.3-1.4,17.3c-2.4-3.3-4.2-5.1-5.3-7.3c-8.5-17.5-8.9-35.3,3.8-50.3
32
+ c9.4-11,20.8-21.3,33.4-28.2c31.3-17.1,63.6-32.3,95.8-47.6c15.5-7.3,31.6-13.2,48.5-20.2C263.4,287.7,263.2,292.9,264.5,297.8z"/>
33
+ <path class="st0" d="M742.9,419.1c-3.1-18.8-13.7-33.1-29-43.3c-15.6-10.4-31.8-20.3-48.7-28.3c-31-14.7-62.6-27.8-93.9-41.8
34
+ c-2.2-1.1-5.5-3.5-5.5-5.2c0.2-6.2,1.6-12.3,2.6-18.8c2.2,0.7,4.1,1.1,5.8,1.9c34,15.1,68.3,29.5,101.8,45.5
35
+ c17.7,8.5,34.6,19.1,51.2,29.8c11.6,7.6,21.2,17.8,25.4,31.6c4.8,15.9,2.4,30.6-8.8,45C743.4,429,743.6,424,742.9,419.1z"/>
36
+ <path class="st0" d="M379.1,227.4c17-9.9,16.9-10.1,30.2,4.5c0.3,0.4,0.5,0.9,1.4,2.5c-22.4,12.4-44.9,24.7-68.2,37.6
37
+ c-3-7.7-5.3-13.7-7.8-20C350.1,243.5,364.7,235.7,379.1,227.4z"/>
38
+ <path class="st0" d="M556.3,327.9c2-5,3.5-9,5.3-13.4c48.9,20.7,98.9,36.9,143.1,66.1C657,358.4,606.5,344.1,556.3,327.9z"/>
39
+ <path class="st0" d="M268.3,315.2c1.1,2.9,2,4.9,2.6,6.9c0.6,2.1,1,4.1,1.2,5.1c-48.9,17.4-97.3,34.7-143.9,51.3
40
+ C170.4,351.4,219.9,335,268.3,315.2z"/>
41
+ <path class="st0" d="M465,299.1c-33.6,10.9-67,9.6-100.5,0c-7.8-2.2-9.4-3.6-12.6-12.2c42.3,15.7,84.4,16.7,127.2-0.3
42
+ C476.5,294.7,471.1,297.1,465,299.1z"/>
43
+ <path class="st0" d="M381.9,140.1c9.7,6.8,19.9,14.1,30.2,21.2c11.4,8,17.3,19,18.8,33.9C415.3,183.5,382.7,146,381.9,140.1z"/>
44
+ <path class="st0" d="M360.8,276c36.5,10.4,71.8,9.6,107.1,1.3C442.6,294.2,376.8,293.8,360.8,276z"/>
45
+ </g>
46
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primestyleai/tryon",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "PrimeStyle Virtual Try-On SDK — React component & Web Component",
5
5
  "type": "module",
6
6
  "main": "dist/primestyle-tryon.js",
@@ -18,6 +18,7 @@
18
18
  },
19
19
  "files": [
20
20
  "dist",
21
+ "logo.svg",
21
22
  "README.md"
22
23
  ],
23
24
  "scripts": {