@shopify/shop-minis-react 0.4.16 → 0.4.17

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 (49) hide show
  1. package/dist/components/atoms/alert-dialog.js.map +1 -1
  2. package/dist/components/atoms/button.js.map +1 -1
  3. package/dist/components/atoms/icon-button.js.map +1 -1
  4. package/dist/components/atoms/image.js +65 -51
  5. package/dist/components/atoms/image.js.map +1 -1
  6. package/dist/components/atoms/list.js.map +1 -1
  7. package/dist/components/atoms/text-input.js.map +1 -1
  8. package/dist/components/atoms/touchable.js.map +1 -1
  9. package/dist/components/atoms/video-player.js +1 -1
  10. package/dist/components/atoms/video-player.js.map +1 -1
  11. package/dist/components/commerce/add-to-cart.js.map +1 -1
  12. package/dist/components/commerce/buy-now.js.map +1 -1
  13. package/dist/components/commerce/favorite-button.js +1 -4
  14. package/dist/components/commerce/favorite-button.js.map +1 -1
  15. package/dist/components/commerce/merchant-card.js.map +1 -1
  16. package/dist/components/commerce/product-link.js.map +1 -1
  17. package/dist/components/commerce/quantity-selector.js.map +1 -1
  18. package/dist/components/content/image-content-wrapper.js.map +1 -1
  19. package/dist/components/navigation/minis-router.js.map +1 -1
  20. package/dist/components/navigation/transition-link.js.map +1 -1
  21. package/dist/components/ui/alert.js.map +1 -1
  22. package/dist/components/ui/badge.js.map +1 -1
  23. package/dist/components/ui/input.js.map +1 -1
  24. package/dist/index.js +75 -73
  25. package/dist/utils/image.js +44 -24
  26. package/dist/utils/image.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/atoms/alert-dialog.tsx +3 -3
  29. package/src/components/atoms/button.tsx +22 -0
  30. package/src/components/atoms/icon-button.tsx +16 -8
  31. package/src/components/atoms/image.test.tsx +27 -13
  32. package/src/components/atoms/image.tsx +41 -8
  33. package/src/components/atoms/list.tsx +25 -2
  34. package/src/components/atoms/text-input.tsx +3 -1
  35. package/src/components/atoms/touchable.tsx +15 -4
  36. package/src/components/atoms/video-player.tsx +16 -6
  37. package/src/components/commerce/add-to-cart.tsx +7 -11
  38. package/src/components/commerce/buy-now.tsx +7 -10
  39. package/src/components/commerce/favorite-button.tsx +6 -5
  40. package/src/components/commerce/merchant-card.tsx +4 -0
  41. package/src/components/commerce/product-link.tsx +15 -0
  42. package/src/components/commerce/quantity-selector.tsx +6 -1
  43. package/src/components/content/image-content-wrapper.tsx +16 -1
  44. package/src/components/navigation/minis-router.tsx +2 -2
  45. package/src/components/navigation/transition-link.tsx +11 -1
  46. package/src/components/ui/alert.tsx +7 -0
  47. package/src/components/ui/badge.tsx +9 -0
  48. package/src/components/ui/input.tsx +15 -0
  49. package/src/utils/image.ts +38 -0
@@ -18,6 +18,44 @@ export function getThumbhashDataURL(thumbhash?: string): string | undefined {
18
18
  }
19
19
  }
20
20
 
21
+ /**
22
+ * Converts a data URL to a Blob
23
+ * @param dataURL The data URL to convert
24
+ * @returns A Blob object
25
+ */
26
+ export function dataURLToBlob(dataURL: string): Blob {
27
+ const [header, base64Data] = dataURL.split(',')
28
+ const mimeMatch = header.match(/:(.*?);/)
29
+ const mime = mimeMatch ? mimeMatch[1] : 'image/png'
30
+ const binary = atob(base64Data)
31
+ const array = new Uint8Array(binary.length)
32
+ for (let i = 0; i < binary.length; i++) {
33
+ array[i] = binary.charCodeAt(i)
34
+ }
35
+ return new Blob([array], {type: mime})
36
+ }
37
+
38
+ /**
39
+ * Converts a thumbhash string to a blob URL for use as an image placeholder
40
+ * This is useful when CSP restrictions prevent data URLs
41
+ * @param thumbhash Base64 encoded thumbhash string
42
+ * @returns Blob URL that can be used as image source or undefined if conversion fails
43
+ */
44
+ export function getThumbhashBlobURL(thumbhash?: string): string | undefined {
45
+ if (!thumbhash) return
46
+
47
+ try {
48
+ const dataURL = getThumbhashDataURL(thumbhash)
49
+ if (!dataURL) return
50
+
51
+ const blob = dataURLToBlob(dataURL)
52
+ return URL.createObjectURL(blob)
53
+ } catch (error) {
54
+ console.warn('Failed to create thumbhash blob URL', error)
55
+ return undefined
56
+ }
57
+ }
58
+
21
59
  /** Converts a file to a data URI
22
60
  * @param file The file to convert
23
61
  * @returns A promise that resolves to the data URI string