@rovela-ai/sdk 0.3.21 → 0.3.27

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.
Files changed (148) hide show
  1. package/dist/admin/api/index.d.ts +4 -0
  2. package/dist/admin/api/index.d.ts.map +1 -1
  3. package/dist/admin/api/index.js +6 -0
  4. package/dist/admin/api/index.js.map +1 -1
  5. package/dist/admin/api/products-bulk.d.ts +38 -0
  6. package/dist/admin/api/products-bulk.d.ts.map +1 -0
  7. package/dist/admin/api/products-bulk.js +135 -0
  8. package/dist/admin/api/products-bulk.js.map +1 -0
  9. package/dist/admin/api/products-stats.d.ts +34 -0
  10. package/dist/admin/api/products-stats.d.ts.map +1 -0
  11. package/dist/admin/api/products-stats.js +43 -0
  12. package/dist/admin/api/products-stats.js.map +1 -0
  13. package/dist/admin/api/products.d.ts.map +1 -1
  14. package/dist/admin/api/products.js +42 -5
  15. package/dist/admin/api/products.js.map +1 -1
  16. package/dist/admin/api/setup-guide.d.ts +78 -0
  17. package/dist/admin/api/setup-guide.d.ts.map +1 -0
  18. package/dist/admin/api/setup-guide.js +218 -0
  19. package/dist/admin/api/setup-guide.js.map +1 -0
  20. package/dist/admin/api/stats.d.ts +3 -0
  21. package/dist/admin/api/stats.d.ts.map +1 -1
  22. package/dist/admin/api/stats.js +20 -5
  23. package/dist/admin/api/stats.js.map +1 -1
  24. package/dist/admin/components/AdminLayout.d.ts.map +1 -1
  25. package/dist/admin/components/AdminLayout.js +5 -2
  26. package/dist/admin/components/AdminLayout.js.map +1 -1
  27. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  28. package/dist/admin/components/AdminNav.js +13 -0
  29. package/dist/admin/components/AdminNav.js.map +1 -1
  30. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  31. package/dist/admin/components/LowStockAlert.js +1 -1
  32. package/dist/admin/components/LowStockAlert.js.map +1 -1
  33. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -1
  34. package/dist/admin/components/OrderStatusChart.js +7 -1
  35. package/dist/admin/components/OrderStatusChart.js.map +1 -1
  36. package/dist/admin/components/PeriodSelector.d.ts +9 -0
  37. package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
  38. package/dist/admin/components/PeriodSelector.js +19 -0
  39. package/dist/admin/components/PeriodSelector.js.map +1 -0
  40. package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
  41. package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
  42. package/dist/admin/components/PrimaryMetricsRow.js +73 -0
  43. package/dist/admin/components/PrimaryMetricsRow.js.map +1 -0
  44. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  45. package/dist/admin/components/ProductForm.js +14 -5
  46. package/dist/admin/components/ProductForm.js.map +1 -1
  47. package/dist/admin/components/ProductTable.d.ts +2 -1
  48. package/dist/admin/components/ProductTable.d.ts.map +1 -1
  49. package/dist/admin/components/ProductTable.js +284 -33
  50. package/dist/admin/components/ProductTable.js.map +1 -1
  51. package/dist/admin/components/RevenueChart.d.ts.map +1 -1
  52. package/dist/admin/components/RevenueChart.js +4 -1
  53. package/dist/admin/components/RevenueChart.js.map +1 -1
  54. package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
  55. package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
  56. package/dist/admin/components/SecondaryMetricsRow.js +45 -0
  57. package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
  58. package/dist/admin/components/SetupGuide.d.ts +4 -0
  59. package/dist/admin/components/SetupGuide.d.ts.map +1 -0
  60. package/dist/admin/components/SetupGuide.js +238 -0
  61. package/dist/admin/components/SetupGuide.js.map +1 -0
  62. package/dist/admin/components/VariantManager.d.ts +1 -0
  63. package/dist/admin/components/VariantManager.d.ts.map +1 -1
  64. package/dist/admin/components/VariantManager.js +58 -3
  65. package/dist/admin/components/VariantManager.js.map +1 -1
  66. package/dist/admin/components/index.d.ts +7 -0
  67. package/dist/admin/components/index.d.ts.map +1 -1
  68. package/dist/admin/components/index.js +4 -0
  69. package/dist/admin/components/index.js.map +1 -1
  70. package/dist/admin/hooks/index.d.ts +3 -0
  71. package/dist/admin/hooks/index.d.ts.map +1 -1
  72. package/dist/admin/hooks/index.js +2 -0
  73. package/dist/admin/hooks/index.js.map +1 -1
  74. package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
  75. package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
  76. package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
  77. package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
  78. package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -1
  79. package/dist/admin/hooks/useAdminProducts.js +19 -0
  80. package/dist/admin/hooks/useAdminProducts.js.map +1 -1
  81. package/dist/admin/hooks/useAdminStats.d.ts +7 -1
  82. package/dist/admin/hooks/useAdminStats.d.ts.map +1 -1
  83. package/dist/admin/hooks/useAdminStats.js +31 -2
  84. package/dist/admin/hooks/useAdminStats.js.map +1 -1
  85. package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
  86. package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
  87. package/dist/admin/hooks/useSetupGuide.js +57 -0
  88. package/dist/admin/hooks/useSetupGuide.js.map +1 -0
  89. package/dist/admin/index.d.ts +5 -5
  90. package/dist/admin/index.d.ts.map +1 -1
  91. package/dist/admin/index.js +5 -3
  92. package/dist/admin/index.js.map +1 -1
  93. package/dist/admin/server/admin-session.d.ts +37 -0
  94. package/dist/admin/server/admin-session.d.ts.map +1 -1
  95. package/dist/admin/server/admin-session.js +43 -0
  96. package/dist/admin/server/admin-session.js.map +1 -1
  97. package/dist/admin/server/index.d.ts +1 -1
  98. package/dist/admin/server/index.d.ts.map +1 -1
  99. package/dist/admin/server/index.js +1 -1
  100. package/dist/admin/server/index.js.map +1 -1
  101. package/dist/admin/styles/admin-theme.css +599 -8
  102. package/dist/admin/types.d.ts +113 -0
  103. package/dist/admin/types.d.ts.map +1 -1
  104. package/dist/core/db/index.d.ts +2 -2
  105. package/dist/core/db/index.d.ts.map +1 -1
  106. package/dist/core/db/index.js +3 -1
  107. package/dist/core/db/index.js.map +1 -1
  108. package/dist/core/db/queries.d.ts +189 -19
  109. package/dist/core/db/queries.d.ts.map +1 -1
  110. package/dist/core/db/queries.js +394 -10
  111. package/dist/core/db/queries.js.map +1 -1
  112. package/dist/core/db/schema.d.ts +71 -2
  113. package/dist/core/db/schema.d.ts.map +1 -1
  114. package/dist/core/db/schema.js +21 -1
  115. package/dist/core/db/schema.js.map +1 -1
  116. package/dist/core/server/index.d.ts +2 -1
  117. package/dist/core/server/index.d.ts.map +1 -1
  118. package/dist/core/server/index.js +3 -1
  119. package/dist/core/server/index.js.map +1 -1
  120. package/dist/core/types.d.ts +2 -0
  121. package/dist/core/types.d.ts.map +1 -1
  122. package/dist/media/api/presign.d.ts.map +1 -1
  123. package/dist/media/api/presign.js +5 -3
  124. package/dist/media/api/presign.js.map +1 -1
  125. package/dist/media/components/ImageGalleryUpload.d.ts +6 -3
  126. package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -1
  127. package/dist/media/components/ImageGalleryUpload.js +97 -57
  128. package/dist/media/components/ImageGalleryUpload.js.map +1 -1
  129. package/dist/media/config.d.ts +27 -1
  130. package/dist/media/config.d.ts.map +1 -1
  131. package/dist/media/config.js +48 -1
  132. package/dist/media/config.js.map +1 -1
  133. package/dist/media/index.d.ts +2 -2
  134. package/dist/media/index.d.ts.map +1 -1
  135. package/dist/media/index.js +2 -2
  136. package/dist/media/index.js.map +1 -1
  137. package/dist/media/types.d.ts +48 -6
  138. package/dist/media/types.d.ts.map +1 -1
  139. package/dist/media/types.js +44 -1
  140. package/dist/media/types.js.map +1 -1
  141. package/dist/products/components/ProductDetails.d.ts.map +1 -1
  142. package/dist/products/components/ProductDetails.js +20 -9
  143. package/dist/products/components/ProductDetails.js.map +1 -1
  144. package/dist/products/components/ProductGallery.d.ts +24 -19
  145. package/dist/products/components/ProductGallery.d.ts.map +1 -1
  146. package/dist/products/components/ProductGallery.js +48 -31
  147. package/dist/products/components/ProductGallery.js.map +1 -1
  148. package/package.json +9 -1
@@ -33,9 +33,36 @@ export interface UploadConfig {
33
33
  maxFiles: number;
34
34
  }
35
35
  /**
36
- * Default upload configuration
36
+ * Default upload configuration (image-only).
37
+ *
38
+ * Used by single-image surfaces (logos, category covers, variant swatches)
39
+ * where accepting video would break downstream rendering. DO NOT widen this
40
+ * to include video MIMEs — use `DEFAULT_MEDIA_UPLOAD_CONFIG` for surfaces
41
+ * that legitimately accept both kinds.
37
42
  */
38
43
  export declare const DEFAULT_UPLOAD_CONFIG: UploadConfig;
44
+ /**
45
+ * Allowed video MIME types across the platform.
46
+ * MP4 (H.264) is the universal baseline; WebM and QuickTime/MOV are accepted
47
+ * because browsers + iOS export them natively. Other formats are rejected.
48
+ */
49
+ export declare const VIDEO_MIME_TYPES: readonly ["video/mp4", "video/webm", "video/quicktime"];
50
+ /**
51
+ * Default media upload configuration (images + videos).
52
+ *
53
+ * Used by product galleries and any surface where merchants legitimately
54
+ * upload either kind. 100MB cap is the platform-wide ceiling.
55
+ */
56
+ export declare const DEFAULT_MEDIA_UPLOAD_CONFIG: UploadConfig;
57
+ /**
58
+ * Detect whether a URL points at a video asset by file extension.
59
+ * Used by gallery components to decide between `<img>` and `<video>` rendering.
60
+ */
61
+ export declare function isVideoUrl(url: string): boolean;
62
+ /**
63
+ * Detect whether a MIME type is a video.
64
+ */
65
+ export declare function isVideoMime(mime: string): boolean;
39
66
  /**
40
67
  * Folder types for organizing uploads
41
68
  */
@@ -231,22 +258,37 @@ export interface ImageUploadProps {
231
258
  aspectRatio?: string;
232
259
  }
233
260
  /**
234
- * Props for ImageGalleryUpload component
261
+ * Props for ImageGalleryUpload component (now also accepts videos).
262
+ *
263
+ * Image arrays use `value` / `onChange` (back-compat naming). Videos use
264
+ * the optional `videos` / `onVideosChange` pair. The component renders
265
+ * them in a single combined gallery; drag-to-reorder works across the
266
+ * boundary and re-splits into the two arrays on drop.
235
267
  */
236
268
  export interface ImageGalleryUploadProps {
237
269
  /** Current array of image URLs */
238
270
  value: string[];
239
271
  /** Called when images change (updates local state) */
240
272
  onChange: (urls: string[]) => void;
241
- /** Called to persist images to database (for auto-save in edit mode) */
242
- onSave?: (urls: string[]) => Promise<void>;
273
+ /** Current array of video URLs (optional — image-only callers can omit) */
274
+ videos?: string[];
275
+ /** Called when videos change (optional — paired with `videos`) */
276
+ onVideosChange?: (urls: string[]) => void;
277
+ /**
278
+ * Called to persist media to the database after a change. Receives
279
+ * BOTH arrays so a single transaction can save the new state. Note: the
280
+ * older single-arg signature `(urls) => Promise<void>` is structurally
281
+ * compatible — TypeScript permits ignoring extra args — so callers that
282
+ * don't care about videos still type-check.
283
+ */
284
+ onSave?: (images: string[], videos: string[]) => Promise<void>;
243
285
  /** Target folder for uploads */
244
286
  folder: MediaFolder;
245
287
  /** Associated entity ID */
246
288
  entityId?: string;
247
- /** Maximum number of images allowed */
289
+ /** Maximum number of media items allowed (images + videos combined) */
248
290
  maxImages?: number;
249
- /** Maximum file size per image in MB */
291
+ /** Maximum file size in MB (default 100, covers the platform-wide video cap) */
250
292
  maxSizeMB?: number;
251
293
  /** Whether upload is disabled */
252
294
  disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,yBAAyB;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yDAA0D,CAAA;AAEvF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,YAUzC,CAAA;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAMD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAA;AAE5E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAA;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,+BAA+B;IAC/B,SAAS,EAAE,IAAI,CAAA;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,MAAM,EAAE,YAAY,CAAA;IACpB,2CAA2C;IAC3C,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;IAC/B,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,gCAAgC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,MAAM,EAAE,WAAW,CAAA;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,qCAAqC;IACrC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;IAC1C,iCAAiC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAC7C,4BAA4B;IAC5B,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC1D,4BAA4B;IAC5B,MAAM,EAAE,YAAY,CAAA;IACpB,sCAAsC;IACtC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;IAC/B,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAA;IAChC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,sDAAsD;IACtD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACtC,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,gCAAgC;IAChC,MAAM,EAAE,WAAW,CAAA;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,sDAAsD;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAClC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,kEAAkE;IAClE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACzC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,gCAAgC;IAChC,MAAM,EAAE,WAAW,CAAA;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,YAAoC,GAC3C,cAAc,CAmBhB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAKvE"}
@@ -5,13 +5,56 @@
5
5
  * Supports product images, category covers, and variant swatches.
6
6
  */
7
7
  /**
8
- * Default upload configuration
8
+ * Default upload configuration (image-only).
9
+ *
10
+ * Used by single-image surfaces (logos, category covers, variant swatches)
11
+ * where accepting video would break downstream rendering. DO NOT widen this
12
+ * to include video MIMEs — use `DEFAULT_MEDIA_UPLOAD_CONFIG` for surfaces
13
+ * that legitimately accept both kinds.
9
14
  */
10
15
  export const DEFAULT_UPLOAD_CONFIG = {
11
16
  maxSizeBytes: 10 * 1024 * 1024, // 10MB
12
17
  allowedTypes: ['image/jpeg', 'image/png', 'image/webp', 'image/gif'],
13
18
  maxFiles: 10,
14
19
  };
20
+ /**
21
+ * Allowed video MIME types across the platform.
22
+ * MP4 (H.264) is the universal baseline; WebM and QuickTime/MOV are accepted
23
+ * because browsers + iOS export them natively. Other formats are rejected.
24
+ */
25
+ export const VIDEO_MIME_TYPES = ['video/mp4', 'video/webm', 'video/quicktime'];
26
+ /**
27
+ * Default media upload configuration (images + videos).
28
+ *
29
+ * Used by product galleries and any surface where merchants legitimately
30
+ * upload either kind. 100MB cap is the platform-wide ceiling.
31
+ */
32
+ export const DEFAULT_MEDIA_UPLOAD_CONFIG = {
33
+ maxSizeBytes: 100 * 1024 * 1024, // 100MB
34
+ allowedTypes: [
35
+ 'image/jpeg',
36
+ 'image/png',
37
+ 'image/webp',
38
+ 'image/gif',
39
+ ...VIDEO_MIME_TYPES,
40
+ ],
41
+ maxFiles: 10,
42
+ };
43
+ /**
44
+ * Detect whether a URL points at a video asset by file extension.
45
+ * Used by gallery components to decide between `<img>` and `<video>` rendering.
46
+ */
47
+ export function isVideoUrl(url) {
48
+ // Strip query string + fragment so e.g. signed URLs still match
49
+ const path = url.split('?')[0].split('#')[0].toLowerCase();
50
+ return path.endsWith('.mp4') || path.endsWith('.webm') || path.endsWith('.mov');
51
+ }
52
+ /**
53
+ * Detect whether a MIME type is a video.
54
+ */
55
+ export function isVideoMime(mime) {
56
+ return mime.startsWith('video/');
57
+ }
15
58
  /**
16
59
  * Validate a file against upload constraints
17
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;IACpE,QAAQ,EAAE,EAAE;CACb,CAAA;AA4QD;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,SAAuB,qBAAqB;IAE5C,kBAAkB;IAClB,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;QAC7D,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qBAAqB,KAAK,UAAU;SAC5C,CAAA;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,aAAa,IAAI,CAAC,IAAI,iBAAiB;SAC/C,CAAA;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,gBAAwB;IAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACzD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductDetails.d.ts","sourceRoot":"","sources":["../../../src/products/components/ProductDetails.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIpE,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQ/D,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1F,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvF,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAa,EACb,SAAS,EACT,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,UAAkB,EAClB,YAAmB,EACnB,WAAgB,EAChB,SAAiB,EACjB,aAAa,EACb,eAAwB,EACxB,QAAQ,GACT,EAAE,mBAAmB,2CAgQrB"}
1
+ {"version":3,"file":"ProductDetails.d.ts","sourceRoot":"","sources":["../../../src/products/components/ProductDetails.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIpE,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQ/D,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1F,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvF,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAa,EACb,SAAS,EACT,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,UAAkB,EAClB,YAAmB,EACnB,WAAgB,EAChB,SAAiB,EACjB,aAAa,EACb,eAAwB,EACxB,QAAQ,GACT,EAAE,mBAAmB,2CA4QrB"}
@@ -74,15 +74,26 @@ export function ProductDetails({ product, variants = [], className, currency, lo
74
74
  }, [selectedVariant, variants]);
75
75
  const isOutOfStock = currentStock === 0;
76
76
  const isLowStock = currentStock > 0 && currentStock <= 5;
77
- // Compute gallery images: prepend variant image if selected
78
- const galleryImages = useMemo(() => {
79
- if (selectedVariant?.image) {
80
- // Prepend variant image, then add product images (excluding duplicate)
81
- const filteredProductImages = product.images.filter((img) => img !== selectedVariant.image);
82
- return [selectedVariant.image, ...filteredProductImages];
77
+ // Compute gallery: variant image + variant video first (if either is set),
78
+ // then product images, then product videos. Filter out duplicates so a
79
+ // variant image that also lives in `product.images` only appears once.
80
+ const galleryMedia = useMemo(() => {
81
+ const variantUrls = [
82
+ selectedVariant?.image,
83
+ selectedVariant?.video,
84
+ ].filter((u) => !!u);
85
+ const productImages = product.images ?? [];
86
+ const productVideos = product.videos ?? [];
87
+ if (variantUrls.length === 0) {
88
+ return [...productImages, ...productVideos];
83
89
  }
84
- return product.images;
85
- }, [product.images, selectedVariant]);
90
+ const variantSet = new Set(variantUrls);
91
+ return [
92
+ ...variantUrls,
93
+ ...productImages.filter((u) => !variantSet.has(u)),
94
+ ...productVideos.filter((u) => !variantSet.has(u)),
95
+ ];
96
+ }, [product.images, product.videos, selectedVariant]);
86
97
  // Generate a key to reset gallery when variant changes
87
98
  const galleryKey = useMemo(() => {
88
99
  return selectedVariant?.id || 'no-variant';
@@ -108,7 +119,7 @@ export function ProductDetails({ product, variants = [], className, currency, lo
108
119
  const containerClasses = cn('grid gap-8', galleryPosition === 'left'
109
120
  ? 'lg:grid-cols-2'
110
121
  : 'grid-cols-1', className);
111
- return (_jsxs("div", { className: containerClasses, children: [_jsx("div", { className: galleryPosition === 'top' ? 'order-first' : '', children: _jsx(ProductGallery, { images: galleryImages, alt: product.name }, galleryKey) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight text-foreground sm:text-3xl", children: product.name }), _jsxs("div", { className: "mt-3 flex items-baseline gap-3", children: [_jsx("span", { className: "text-2xl font-semibold text-foreground", children: formatPrice(currentPrice, { currency: resolvedCurrency, locale: resolvedLocale }) }), comparePrice && comparePrice > currentPrice && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-lg text-muted-foreground line-through", children: formatPrice(comparePrice, { currency: resolvedCurrency, locale: resolvedLocale }) }), discountPercent && (_jsxs("span", { className: "rounded-full bg-destructive px-2 py-0.5 text-sm font-medium text-destructive-foreground", children: ["Save ", discountPercent, "%"] }))] }))] }), showStock && currentStock >= 0 && (_jsx("div", { className: "mt-3", children: isOutOfStock ? (_jsx("span", { className: "text-sm font-medium text-destructive", children: "Out of Stock" })) : isLowStock ? (_jsxs("span", { className: "text-sm font-medium text-warning", children: ["Only ", currentStock, " left in stock"] })) : (_jsxs("span", { className: "text-sm text-muted-foreground", children: ["In Stock (", currentStock, " available)"] })) })), _jsxs("div", { className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: "Description" }), _jsx("p", { className: "text-base text-muted-foreground", children: product.description })] }), children, requiresVariant && (_jsx("div", { className: "mt-6", children: _jsx(VariantSelector, { variants: variants, selected: selectedVariant, onSelect: setSelectedVariant, labels: variantLabels, disableOutOfStock: true }) })), showQuantity && (_jsxs("div", { className: "mt-6", children: [_jsx("label", { className: "mb-2 block text-sm font-medium text-foreground", children: "Quantity" }), _jsxs("div", { className: "flex w-32 items-center rounded-md border border-border", children: [_jsx("button", { type: "button", onClick: () => handleQuantityChange(quantity - 1), disabled: quantity <= 1, className: "flex h-10 w-10 items-center justify-center text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", children: _jsx(Minus, { className: "h-4 w-4" }) }), _jsx("input", { type: "number", value: quantity, onChange: (e) => {
122
+ return (_jsxs("div", { className: containerClasses, children: [_jsx("div", { className: galleryPosition === 'top' ? 'order-first' : '', children: _jsx(ProductGallery, { media: galleryMedia, alt: product.name }, galleryKey) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight text-foreground sm:text-3xl", children: product.name }), _jsxs("div", { className: "mt-3 flex items-baseline gap-3", children: [_jsx("span", { className: "text-2xl font-semibold text-foreground", children: formatPrice(currentPrice, { currency: resolvedCurrency, locale: resolvedLocale }) }), comparePrice && comparePrice > currentPrice && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-lg text-muted-foreground line-through", children: formatPrice(comparePrice, { currency: resolvedCurrency, locale: resolvedLocale }) }), discountPercent && (_jsxs("span", { className: "rounded-full bg-destructive px-2 py-0.5 text-sm font-medium text-destructive-foreground", children: ["Save ", discountPercent, "%"] }))] }))] }), showStock && currentStock >= 0 && (_jsx("div", { className: "mt-3", children: isOutOfStock ? (_jsx("span", { className: "text-sm font-medium text-destructive", children: "Out of Stock" })) : isLowStock ? (_jsxs("span", { className: "text-sm font-medium text-warning", children: ["Only ", currentStock, " left in stock"] })) : (_jsxs("span", { className: "text-sm text-muted-foreground", children: ["In Stock (", currentStock, " available)"] })) })), _jsxs("div", { className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: "Description" }), _jsx("p", { className: "text-base text-muted-foreground", children: product.description })] }), children, requiresVariant && (_jsx("div", { className: "mt-6", children: _jsx(VariantSelector, { variants: variants, selected: selectedVariant, onSelect: setSelectedVariant, labels: variantLabels, disableOutOfStock: true }) })), showQuantity && (_jsxs("div", { className: "mt-6", children: [_jsx("label", { className: "mb-2 block text-sm font-medium text-foreground", children: "Quantity" }), _jsxs("div", { className: "flex w-32 items-center rounded-md border border-border", children: [_jsx("button", { type: "button", onClick: () => handleQuantityChange(quantity - 1), disabled: quantity <= 1, className: "flex h-10 w-10 items-center justify-center text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", children: _jsx(Minus, { className: "h-4 w-4" }) }), _jsx("input", { type: "number", value: quantity, onChange: (e) => {
112
123
  const val = e.target.value;
113
124
  if (val === '')
114
125
  return; // Allow empty during typing
@@ -1 +1 @@
1
- {"version":3,"file":"ProductDetails.js","sourceRoot":"","sources":["../../../src/products/components/ProductDetails.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductDetails.js","sourceRoot":"","sources":["../../../src/products/components/ProductDetails.tsx"],"names":[],"mappings":"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"}
@@ -1,37 +1,42 @@
1
1
  export interface ProductGalleryProps {
2
- /** Array of image URLs */
3
- images: string[];
4
- /** Alt text for images */
2
+ /**
3
+ * Image URLs (back-compat: prop used to be the only source). Either this,
4
+ * `videos`, or `media` (combined) is required.
5
+ */
6
+ images?: string[];
7
+ /** Video URLs (MP4 / WebM / MOV). Order is preserved. */
8
+ videos?: string[];
9
+ /**
10
+ * Pre-mixed media URLs in display order. If provided, takes precedence over
11
+ * `images` + `videos` (which are still appended for back-compat callers
12
+ * that pass both).
13
+ */
14
+ media?: string[];
15
+ /** Alt text for images / aria label for videos */
5
16
  alt: string;
6
17
  /** Custom className */
7
18
  className?: string;
8
19
  /** Thumbnail position */
9
20
  thumbnailPosition?: 'bottom' | 'left';
10
- /** Main image aspect ratio */
21
+ /** Main media aspect ratio */
11
22
  aspectRatio?: 'square' | 'portrait' | 'landscape';
12
- /** Enable zoom on click */
23
+ /** Enable zoom on click (image only — videos always show controls instead) */
13
24
  enableZoom?: boolean;
14
25
  /** Show navigation arrows */
15
26
  showArrows?: boolean;
16
27
  }
17
28
  /**
18
- * ProductGallery component for displaying product images.
29
+ * ProductGallery component images and videos in a unified strip.
19
30
  *
20
31
  * @example
21
32
  * ```tsx
22
- * import { ProductGallery } from '@rovela/sdk/products'
23
- *
24
- * function ProductPage({ product }) {
25
- * return (
26
- * <ProductGallery
27
- * images={product.images}
28
- * alt={product.name}
29
- * thumbnailPosition="left"
30
- * aspectRatio="square"
31
- * />
32
- * )
33
- * }
33
+ * <ProductGallery
34
+ * images={product.images}
35
+ * videos={product.videos}
36
+ * alt={product.name}
37
+ * thumbnailPosition="left"
38
+ * />
34
39
  * ```
35
40
  */
36
- export declare function ProductGallery({ images, alt, className, thumbnailPosition, aspectRatio, enableZoom, showArrows, }: ProductGalleryProps): import("react/jsx-runtime").JSX.Element;
41
+ export declare function ProductGallery({ images, videos, media, alt, className, thumbnailPosition, aspectRatio, enableZoom, showArrows, }: ProductGalleryProps): import("react/jsx-runtime").JSX.Element;
37
42
  //# sourceMappingURL=ProductGallery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductGallery.d.ts","sourceRoot":"","sources":["../../../src/products/components/ProductGallery.tsx"],"names":[],"mappings":"AAiBA,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;IACjD,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,GAAG,EACH,SAAS,EACT,iBAA4B,EAC5B,WAAsB,EACtB,UAAkB,EAClB,UAAiB,GAClB,EAAE,mBAAmB,2CAoLrB"}
1
+ {"version":3,"file":"ProductGallery.d.ts","sourceRoot":"","sources":["../../../src/products/components/ProductGallery.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;IACX,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;IACjD,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,EACH,SAAS,EACT,iBAA4B,EAC5B,WAAsB,EACtB,UAAkB,EAClB,UAAiB,GAClB,EAAE,mBAAmB,2CA0OrB"}
@@ -3,35 +3,44 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
3
3
  /**
4
4
  * @rovela/sdk/products/components/ProductGallery
5
5
  *
6
- * Image gallery component for product pages.
6
+ * Media gallery for product pages. Renders images and videos in a unified
7
+ * gallery — image URLs render as `<Image>`, video URLs (`.mp4`/`.webm`/`.mov`)
8
+ * render as `<video>`. Detection is purely URL-extension based; the gallery
9
+ * doesn't care which array a URL lives in.
10
+ *
11
+ * Two ways to pass media in:
12
+ * 1. `images` prop alone (back-compat) — works exactly like before.
13
+ * 2. `images` + `videos` (or pre-mixed `media`) — gallery shows them in order.
7
14
  */
8
- import { useState, useCallback } from 'react';
15
+ import { useState, useCallback, useMemo } from 'react';
9
16
  import Image from 'next/image';
10
- import { ImageIcon, ChevronLeft, ChevronRight, X } from 'lucide-react';
17
+ import { ImageIcon, ChevronLeft, ChevronRight, X, Play } from 'lucide-react';
11
18
  import { cn } from '../../core/utils';
19
+ import { isVideoUrl } from '../../media';
12
20
  // =============================================================================
13
21
  // Component
14
22
  // =============================================================================
15
23
  /**
16
- * ProductGallery component for displaying product images.
24
+ * ProductGallery component images and videos in a unified strip.
17
25
  *
18
26
  * @example
19
27
  * ```tsx
20
- * import { ProductGallery } from '@rovela/sdk/products'
21
- *
22
- * function ProductPage({ product }) {
23
- * return (
24
- * <ProductGallery
25
- * images={product.images}
26
- * alt={product.name}
27
- * thumbnailPosition="left"
28
- * aspectRatio="square"
29
- * />
30
- * )
31
- * }
28
+ * <ProductGallery
29
+ * images={product.images}
30
+ * videos={product.videos}
31
+ * alt={product.name}
32
+ * thumbnailPosition="left"
33
+ * />
32
34
  * ```
33
35
  */
34
- export function ProductGallery({ images, alt, className, thumbnailPosition = 'bottom', aspectRatio = 'square', enableZoom = false, showArrows = true, }) {
36
+ export function ProductGallery({ images, videos, media, alt, className, thumbnailPosition = 'bottom', aspectRatio = 'square', enableZoom = false, showArrows = true, }) {
37
+ // Combine into a single ordered list. `media` wins; otherwise images
38
+ // come first then videos (matches the visual hierarchy merchants expect).
39
+ const items = useMemo(() => {
40
+ if (media && media.length > 0)
41
+ return media;
42
+ return [...(images ?? []), ...(videos ?? [])];
43
+ }, [images, videos, media]);
35
44
  const [activeIndex, setActiveIndex] = useState(0);
36
45
  const [isZoomed, setIsZoomed] = useState(false);
37
46
  const aspectClasses = {
@@ -39,37 +48,45 @@ export function ProductGallery({ images, alt, className, thumbnailPosition = 'bo
39
48
  portrait: 'aspect-[3/4]',
40
49
  landscape: 'aspect-[4/3]',
41
50
  };
42
- // Handle keyboard navigation
43
51
  const handleKeyDown = useCallback((e) => {
44
52
  if (e.key === 'ArrowLeft') {
45
- setActiveIndex((prev) => (prev > 0 ? prev - 1 : images.length - 1));
53
+ setActiveIndex((prev) => (prev > 0 ? prev - 1 : items.length - 1));
46
54
  }
47
55
  else if (e.key === 'ArrowRight') {
48
- setActiveIndex((prev) => (prev < images.length - 1 ? prev + 1 : 0));
56
+ setActiveIndex((prev) => (prev < items.length - 1 ? prev + 1 : 0));
49
57
  }
50
- }, [images.length]);
58
+ }, [items.length]);
51
59
  const goToPrevious = useCallback(() => {
52
- setActiveIndex((prev) => (prev > 0 ? prev - 1 : images.length - 1));
53
- }, [images.length]);
60
+ setActiveIndex((prev) => (prev > 0 ? prev - 1 : items.length - 1));
61
+ }, [items.length]);
54
62
  const goToNext = useCallback(() => {
55
- setActiveIndex((prev) => (prev < images.length - 1 ? prev + 1 : 0));
56
- }, [images.length]);
63
+ setActiveIndex((prev) => (prev < items.length - 1 ? prev + 1 : 0));
64
+ }, [items.length]);
57
65
  const handleThumbnailClick = useCallback((index) => {
58
66
  setActiveIndex(index);
59
67
  }, []);
60
- const handleMainImageClick = useCallback(() => {
61
- if (enableZoom) {
68
+ // Zoom only applies to images. Clicking on a video tile does nothing —
69
+ // the inline `controls` UI takes over playback.
70
+ const handleMainImageClick = useCallback((currentIsVideo) => {
71
+ if (enableZoom && !currentIsVideo) {
62
72
  setIsZoomed(!isZoomed);
63
73
  }
64
74
  }, [enableZoom, isZoomed]);
65
75
  // Empty state
66
- if (!images || images.length === 0) {
76
+ if (!items || items.length === 0) {
67
77
  return (_jsx("div", { className: cn('relative overflow-hidden rounded-lg bg-muted', aspectClasses[aspectRatio], className), children: _jsx("div", { className: "absolute inset-0 flex items-center justify-center text-muted-foreground", children: _jsx(ImageIcon, { className: "h-16 w-16", strokeWidth: 1 }) }) }));
68
78
  }
69
79
  const containerClasses = cn('flex gap-4', thumbnailPosition === 'left' ? 'flex-row' : 'flex-col', className);
70
80
  const thumbnailContainerClasses = cn('flex gap-2', thumbnailPosition === 'left' ? 'flex-col' : 'flex-row', thumbnailPosition === 'left' ? 'order-first w-20' : 'order-last');
71
- return (_jsxs("div", { className: containerClasses, onKeyDown: handleKeyDown, tabIndex: 0, children: [_jsxs("div", { className: "relative flex-1", children: [_jsx("div", { className: cn('relative overflow-hidden rounded-lg bg-muted', aspectClasses[aspectRatio], enableZoom && 'cursor-zoom-in'), onClick: handleMainImageClick, children: _jsx(Image, { src: images[activeIndex], alt: `${alt} - Image ${activeIndex + 1}`, fill: true, sizes: "(max-width: 768px) 100vw, 50vw", className: cn('object-cover transition-transform duration-300', isZoomed && 'scale-150 cursor-zoom-out'), priority: activeIndex === 0 }) }), showArrows && images.length > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: goToPrevious, className: "absolute left-2 top-1/2 -translate-y-1/2 rounded-full bg-background/80 p-2 shadow-sm transition-colors hover:bg-background", "aria-label": "Previous image", children: _jsx(ChevronLeft, { className: "h-5 w-5" }) }), _jsx("button", { type: "button", onClick: goToNext, className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-full bg-background/80 p-2 shadow-sm transition-colors hover:bg-background", "aria-label": "Next image", children: _jsx(ChevronRight, { className: "h-5 w-5" }) })] })), images.length > 1 && (_jsxs("div", { className: "absolute bottom-2 right-2 rounded-full bg-background/80 px-2 py-1 text-xs font-medium", children: [activeIndex + 1, " / ", images.length] }))] }), images.length > 1 && (_jsx("div", { className: thumbnailContainerClasses, children: images.map((image, index) => (_jsx("button", { type: "button", onClick: () => handleThumbnailClick(index), className: cn('relative aspect-square overflow-hidden rounded-md transition-all', thumbnailPosition === 'left' ? 'w-full' : 'w-16 sm:w-20', activeIndex === index
72
- ? 'ring-2 ring-primary ring-offset-2'
73
- : 'opacity-70 hover:opacity-100'), "aria-label": `View image ${index + 1}`, "aria-current": activeIndex === index ? 'true' : 'false', children: _jsx(Image, { src: image, alt: `${alt} thumbnail ${index + 1}`, fill: true, sizes: "80px", className: "object-cover" }) }, index))) })), isZoomed && enableZoom && (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/80", onClick: () => setIsZoomed(false), children: [_jsx("button", { className: "absolute right-4 top-4 rounded-full bg-white/10 p-2 text-white transition-colors hover:bg-white/20", onClick: () => setIsZoomed(false), "aria-label": "Close zoom", children: _jsx(X, { className: "h-6 w-6" }) }), _jsx("div", { className: "relative h-[90vh] w-[90vw]", children: _jsx(Image, { src: images[activeIndex], alt: `${alt} - Zoomed`, fill: true, sizes: "90vw", className: "object-contain" }) })] }))] }));
81
+ const activeUrl = items[activeIndex];
82
+ const activeIsVideo = isVideoUrl(activeUrl);
83
+ return (_jsxs("div", { className: containerClasses, onKeyDown: handleKeyDown, tabIndex: 0, children: [_jsxs("div", { className: "relative flex-1", children: [_jsx("div", { className: cn('relative overflow-hidden rounded-lg bg-muted', aspectClasses[aspectRatio], enableZoom && !activeIsVideo && 'cursor-zoom-in'), onClick: () => handleMainImageClick(activeIsVideo), children: activeIsVideo ? (_jsx("video", { src: activeUrl, controls: true, preload: "metadata", playsInline: true, "aria-label": `${alt} - Video ${activeIndex + 1}`, className: "absolute inset-0 h-full w-full object-cover" }, activeUrl)) : (_jsx(Image, { src: activeUrl, alt: `${alt} - Image ${activeIndex + 1}`, fill: true, sizes: "(max-width: 768px) 100vw, 50vw", className: cn('object-cover transition-transform duration-300', isZoomed && 'scale-150 cursor-zoom-out'), priority: activeIndex === 0 })) }), showArrows && items.length > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: goToPrevious, className: "absolute left-2 top-1/2 -translate-y-1/2 rounded-full bg-background/80 p-2 shadow-sm transition-colors hover:bg-background", "aria-label": "Previous media", children: _jsx(ChevronLeft, { className: "h-5 w-5" }) }), _jsx("button", { type: "button", onClick: goToNext, className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-full bg-background/80 p-2 shadow-sm transition-colors hover:bg-background", "aria-label": "Next media", children: _jsx(ChevronRight, { className: "h-5 w-5" }) })] })), items.length > 1 && (_jsxs("div", { className: "absolute bottom-2 right-2 rounded-full bg-background/80 px-2 py-1 text-xs font-medium", children: [activeIndex + 1, " / ", items.length] }))] }), items.length > 1 && (_jsx("div", { className: thumbnailContainerClasses, children: items.map((url, index) => {
84
+ const tileIsVideo = isVideoUrl(url);
85
+ return (_jsx("button", { type: "button", onClick: () => handleThumbnailClick(index), className: cn('relative aspect-square overflow-hidden rounded-md transition-all', thumbnailPosition === 'left' ? 'w-full' : 'w-16 sm:w-20', activeIndex === index
86
+ ? 'ring-2 ring-primary ring-offset-2'
87
+ : 'opacity-70 hover:opacity-100'), "aria-label": tileIsVideo
88
+ ? `View video ${index + 1}`
89
+ : `View image ${index + 1}`, "aria-current": activeIndex === index ? 'true' : 'false', children: tileIsVideo ? (_jsxs(_Fragment, { children: [_jsx("video", { src: url, preload: "metadata", muted: true, playsInline: true, className: "absolute inset-0 h-full w-full object-cover" }), _jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-center bg-black/20", "aria-hidden": "true", children: _jsx(Play, { className: "h-5 w-5 fill-white text-white drop-shadow" }) })] })) : (_jsx(Image, { src: url, alt: `${alt} thumbnail ${index + 1}`, fill: true, sizes: "80px", className: "object-cover" })) }, url));
90
+ }) })), isZoomed && enableZoom && !activeIsVideo && (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/80", onClick: () => setIsZoomed(false), children: [_jsx("button", { className: "absolute right-4 top-4 rounded-full bg-white/10 p-2 text-white transition-colors hover:bg-white/20", onClick: () => setIsZoomed(false), "aria-label": "Close zoom", children: _jsx(X, { className: "h-6 w-6" }) }), _jsx("div", { className: "relative h-[90vh] w-[90vw]", children: _jsx(Image, { src: activeUrl, alt: `${alt} - Zoomed`, fill: true, sizes: "90vw", className: "object-contain" }) })] }))] }));
74
91
  }
75
92
  //# sourceMappingURL=ProductGallery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductGallery.js","sourceRoot":"","sources":["../../../src/products/components/ProductGallery.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAuBrC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EACN,GAAG,EACH,SAAS,EACT,iBAAiB,GAAG,QAAQ,EAC5B,WAAW,GAAG,QAAQ,EACtB,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,IAAI,GACG;IACpB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE/C,MAAM,aAAa,GAAG;QACpB,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,cAAc;KAC1B,CAAA;IAED,6BAA6B;IAC7B,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAsB,EAAE,EAAE;QACzB,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC1B,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACrE,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YAClC,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,MAAM,CAAC,CAChB,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnB,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACzD,cAAc,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE1B,cAAc;IACd,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,8CAA8C,EAC9C,aAAa,CAAC,WAAW,CAAC,EAC1B,SAAS,CACV,YAED,cAAK,SAAS,EAAC,yEAAyE,YACtF,KAAC,SAAS,IAAC,SAAS,EAAC,WAAW,EAAC,WAAW,EAAE,CAAC,GAAI,GAC/C,GACF,CACP,CAAA;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,EAAE,CACzB,YAAY,EACZ,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EACtD,SAAS,CACV,CAAA;IAED,MAAM,yBAAyB,GAAG,EAAE,CAClC,YAAY,EACZ,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EACtD,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CACjE,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,aAErE,eAAK,SAAS,EAAC,iBAAiB,aAC9B,cACE,SAAS,EAAE,EAAE,CACX,8CAA8C,EAC9C,aAAa,CAAC,WAAW,CAAC,EAC1B,UAAU,IAAI,gBAAgB,CAC/B,EACD,OAAO,EAAE,oBAAoB,YAE7B,KAAC,KAAK,IACJ,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,EACxB,GAAG,EAAE,GAAG,GAAG,YAAY,WAAW,GAAG,CAAC,EAAE,EACxC,IAAI,QACJ,KAAK,EAAC,gCAAgC,EACtC,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,QAAQ,IAAI,2BAA2B,CACxC,EACD,QAAQ,EAAE,WAAW,KAAK,CAAC,GAC3B,GACE,EAGL,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAClC,8BACE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,4HAA4H,gBAC3H,gBAAgB,YAE3B,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,GAC5B,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,6HAA6H,gBAC5H,YAAY,YAEvB,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,GAC7B,IACR,CACJ,EAGA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,eAAK,SAAS,EAAC,uFAAuF,aACnG,WAAW,GAAG,CAAC,SAAK,MAAM,CAAC,MAAM,IAC9B,CACP,IACG,EAGL,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,cAAK,SAAS,EAAE,yBAAyB,YACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAC1C,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EACxD,WAAW,KAAK,KAAK;wBACnB,CAAC,CAAC,mCAAmC;wBACrC,CAAC,CAAC,8BAA8B,CACnC,gBACW,cAAc,KAAK,GAAG,CAAC,EAAE,kBACvB,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAEtD,KAAC,KAAK,IACJ,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,GAAG,GAAG,cAAc,KAAK,GAAG,CAAC,EAAE,EACpC,IAAI,QACJ,KAAK,EAAC,MAAM,EACZ,SAAS,EAAC,cAAc,GACxB,IAnBG,KAAK,CAoBH,CACV,CAAC,GACE,CACP,EAGA,QAAQ,IAAI,UAAU,IAAI,CACzB,eACE,SAAS,EAAC,iEAAiE,EAC3E,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,aAEjC,iBACE,SAAS,EAAC,oGAAoG,EAC9G,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,gBACtB,YAAY,YAEvB,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,GAClB,EACT,cAAK,SAAS,EAAC,4BAA4B,YACzC,KAAC,KAAK,IACJ,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,EACxB,GAAG,EAAE,GAAG,GAAG,WAAW,EACtB,IAAI,QACJ,KAAK,EAAC,MAAM,EACZ,SAAS,EAAC,gBAAgB,GAC1B,GACE,IACF,CACP,IACG,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ProductGallery.js","sourceRoot":"","sources":["../../../src/products/components/ProductGallery.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rovela-ai/sdk",
3
- "version": "0.3.21",
3
+ "version": "0.3.27",
4
4
  "description": "Rovela SDK - Pre-built e-commerce components for AI-powered store generation",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -140,6 +140,14 @@
140
140
  "types": "./dist/admin/api/index.d.ts",
141
141
  "import": "./dist/admin/api/index.js"
142
142
  },
143
+ "./admin/api/products-bulk": {
144
+ "types": "./dist/admin/api/products-bulk.d.ts",
145
+ "import": "./dist/admin/api/products-bulk.js"
146
+ },
147
+ "./admin/api/products-stats": {
148
+ "types": "./dist/admin/api/products-stats.d.ts",
149
+ "import": "./dist/admin/api/products-stats.js"
150
+ },
143
151
  "./admin/api/setup": {
144
152
  "types": "./dist/admin/api/setup.d.ts",
145
153
  "import": "./dist/admin/api/setup.js"