expo-image 2.3.1-canary-20250612-338ef55 → 2.3.1-canary-20250630-547cd82

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 (50) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/android/build.gradle +5 -3
  3. package/android/src/main/java/expo/modules/image/ExpoImageViewWrapper.kt +24 -5
  4. package/build/web/ImageWrapper.d.ts.map +1 -1
  5. package/expo-module.config.json +1 -1
  6. package/ios/ImageView.swift +17 -3
  7. package/local-maven-repo/BareExpo/expo.modules.image/{2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar → 2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar} +0 -0
  8. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar.md5 +1 -0
  9. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar.sha1 +1 -0
  10. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar.sha256 +1 -0
  11. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar.sha512 +1 -0
  12. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.aar +0 -0
  13. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.aar.md5 +1 -0
  14. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.aar.sha1 +1 -0
  15. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.aar.sha256 +1 -0
  16. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.aar.sha512 +1 -0
  17. package/local-maven-repo/BareExpo/expo.modules.image/{2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.module → 2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.module} +23 -23
  18. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.module.md5 +1 -0
  19. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.module.sha1 +1 -0
  20. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.module.sha256 +1 -0
  21. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.module.sha512 +1 -0
  22. package/local-maven-repo/BareExpo/expo.modules.image/{2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.pom → 2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.pom} +2 -2
  23. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.pom.md5 +1 -0
  24. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.pom.sha1 +1 -0
  25. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.pom.sha256 +1 -0
  26. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250630-547cd82/expo.modules.image-2.3.1-canary-20250630-547cd82.pom.sha512 +1 -0
  27. package/local-maven-repo/BareExpo/expo.modules.image/maven-metadata.xml +4 -4
  28. package/local-maven-repo/BareExpo/expo.modules.image/maven-metadata.xml.md5 +1 -1
  29. package/local-maven-repo/BareExpo/expo.modules.image/maven-metadata.xml.sha1 +1 -1
  30. package/local-maven-repo/BareExpo/expo.modules.image/maven-metadata.xml.sha256 +1 -1
  31. package/local-maven-repo/BareExpo/expo.modules.image/maven-metadata.xml.sha512 +1 -1
  32. package/package.json +3 -3
  33. package/src/web/ImageWrapper.tsx +8 -1
  34. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar.md5 +0 -1
  35. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar.sha1 +0 -1
  36. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar.sha256 +0 -1
  37. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar.sha512 +0 -1
  38. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.aar +0 -0
  39. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.aar.md5 +0 -1
  40. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.aar.sha1 +0 -1
  41. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.aar.sha256 +0 -1
  42. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.aar.sha512 +0 -1
  43. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.module.md5 +0 -1
  44. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.module.sha1 +0 -1
  45. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.module.sha256 +0 -1
  46. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.module.sha512 +0 -1
  47. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.pom.md5 +0 -1
  48. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.pom.sha1 +0 -1
  49. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.pom.sha256 +0 -1
  50. package/local-maven-repo/BareExpo/expo.modules.image/2.3.1-canary-20250612-338ef55/expo.modules.image-2.3.1-canary-20250612-338ef55.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -8,8 +8,16 @@
8
8
 
9
9
  ### 🐛 Bug fixes
10
10
 
11
+ - [Android] Fix animation resuming by casting image to GifDrawable. ([#37363](https://github.com/expo/expo/pull/37363) by [@Wenszel](https://github.com/Wenszel))
12
+ - [iOS] Fixed contentPosition is not correct after switching theme. ([#37374](https://github.com/expo/expo/pull/37374) by [@kudo](https://github.com/kudo))
13
+ - [Android] Make Glide compiler (`kapt "com.github.bumptech.glide:compiler"`) in the `expo-image` module conditional on the `excludeAppGlideModule` Gradle property. When `excludeAppGlideModule=true`, expo-image now omits its own annotation processing and stub `ExpoImageAppGlideModule.kt`, preventing duplicate `GeneratedAppGlideModuleImpl` conflicts in release builds. ([#37432](https://github.com/expo/expo/pull/37432) by [@antonhudz](https://github.com/antonhudz))
14
+
11
15
  ### 💡 Others
12
16
 
17
+ ### 📚 3rd party library updates
18
+
19
+ - [Android] Bumped GIF Glide plugin to 3.0.5 for Android 16KB page size support. ([#37454](https://github.com/expo/expo/pull/37454) by [@kudo](https://github.com/kudo))
20
+
13
21
  ## 2.3.0 - 2025-06-11
14
22
 
15
23
  ### 🛠 Breaking changes
@@ -35,6 +43,7 @@ _This version does not introduce any user-facing changes._
35
43
  - Fix React Server Components support. ([#36801](https://github.com/expo/expo/pull/36801) by [@EvanBacon](https://github.com/EvanBacon))
36
44
  - [iOS] Fix PhotoLibrary assets being scaled twice. ([#36776](https://github.com/expo/expo/pull/36776) by [@alanjhughes](https://github.com/alanjhughes))
37
45
  - [iOS] Don't add transformers when unnecessary. ([#36884](https://github.com/expo/expo/pull/36884) by [@jakex7](https://github.com/jakex7))
46
+ - [Web] Fix `tintColor` in React 19. ([#37133](https://github.com/expo/expo/pull/37133) by [@bradleyayers](https://github.com/bradleyayers))
38
47
 
39
48
  ## 2.1.7 — 2025-05-06
40
49
 
@@ -8,7 +8,7 @@ android {
8
8
  namespace "expo.modules.image"
9
9
  defaultConfig {
10
10
  versionCode 1
11
- versionName "2.3.1-canary-20250612-338ef55"
11
+ versionName "2.3.1-canary-20250630-547cd82"
12
12
  consumerProguardFiles("proguard-rules.pro")
13
13
 
14
14
  buildConfigField("boolean", "ALLOW_GLIDE_LOGS", project.properties.get("EXPO_ALLOW_GLIDE_LOGS", "false"))
@@ -31,10 +31,12 @@ dependencies {
31
31
  implementation 'com.facebook.react:react-android'
32
32
 
33
33
  api "com.github.bumptech.glide:glide:${GLIDE_VERSION}"
34
- kapt "com.github.bumptech.glide:compiler:${GLIDE_VERSION}"
34
+ if (!expoModule.safeExtGet("excludeAppGlideModule", false)) {
35
+ kapt "com.github.bumptech.glide:compiler:${GLIDE_VERSION}"
36
+ }
35
37
  api 'com.caverock:androidsvg-aar:1.4'
36
38
 
37
- implementation "com.github.penfeizhou.android.animation:glide-plugin:3.0.3"
39
+ implementation "com.github.penfeizhou.android.animation:glide-plugin:3.0.5"
38
40
  implementation "com.github.bumptech.glide:avif-integration:${GLIDE_VERSION}"
39
41
 
40
42
  api 'com.github.bumptech.glide:okhttp3-integration:4.11.0'
@@ -18,6 +18,7 @@ import com.bumptech.glide.RequestManager
18
18
  import com.bumptech.glide.load.engine.DiskCacheStrategy
19
19
  import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
20
20
  import com.bumptech.glide.request.RequestOptions
21
+ import com.github.penfeizhou.animation.gif.GifDrawable
21
22
  import expo.modules.image.enums.ContentFit
22
23
  import expo.modules.image.enums.Priority
23
24
  import expo.modules.image.events.GlideRequestListener
@@ -169,14 +170,32 @@ class ExpoImageViewWrapper(context: Context, appContext: AppContext) : ExpoView(
169
170
  internal var cachePolicy: CachePolicy = CachePolicy.DISK
170
171
 
171
172
  fun setIsAnimating(setAnimating: Boolean) {
172
- val resource = activeView.drawable
173
+ // Animatable animations always start from the beginning when resumed.
174
+ // So we check first if the resource is a GifDrawable, because it can continue
175
+ // from where it was paused.
176
+ when (val resource = activeView.drawable) {
177
+ is GifDrawable -> setIsAnimating(resource, setAnimating)
178
+ is Animatable -> setIsAnimating(resource, setAnimating)
179
+ }
180
+ }
173
181
 
174
- if (resource is Animatable) {
175
- if (setAnimating) {
176
- resource.start()
182
+ private fun setIsAnimating(resource: GifDrawable, setAnimating: Boolean) {
183
+ if (setAnimating) {
184
+ if (resource.isPaused) {
185
+ resource.resume()
177
186
  } else {
178
- resource.stop()
187
+ resource.start()
179
188
  }
189
+ } else {
190
+ resource.pause()
191
+ }
192
+ }
193
+
194
+ private fun setIsAnimating(resource: Animatable, setAnimating: Boolean) {
195
+ if (setAnimating) {
196
+ resource.start()
197
+ } else {
198
+ resource.stop()
180
199
  }
181
200
  }
182
201
 
@@ -1 +1 @@
1
- {"version":3,"file":"ImageWrapper.d.ts","sourceRoot":"","sources":["../../src/web/ImageWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,QAAA,MAAM,YAAY,4FA4DjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ImageWrapper.d.ts","sourceRoot":"","sources":["../../src/web/ImageWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,QAAA,MAAM,YAAY,4FAmEjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -8,7 +8,7 @@
8
8
  "publication": {
9
9
  "groupId": "BareExpo",
10
10
  "artifactId": "expo.modules.image",
11
- "version": "2.3.1-canary-20250612-338ef55",
11
+ "version": "2.3.1-canary-20250630-547cd82",
12
12
  "repository": "local-maven-repo"
13
13
  }
14
14
  }
@@ -70,6 +70,11 @@ public final class ImageView: ExpoView {
70
70
 
71
71
  var useAppleWebpCodec: Bool = true
72
72
 
73
+ /**
74
+ The ideal image size that fills in the container size while maintaining the source aspect ratio.
75
+ */
76
+ var imageIdealSize: CGSize = .zero
77
+
73
78
  // MARK: - Events
74
79
 
75
80
  let onLoadStart = EventDispatcher()
@@ -120,6 +125,15 @@ public final class ImageView: ExpoView {
120
125
  }
121
126
  }
122
127
 
128
+ public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
129
+ super.traitCollectionDidChange(previousTraitCollection)
130
+ if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
131
+ // The mask layer we adjusted would be invaliated from `RCTViewComponentView.traitCollectionDidChange`.
132
+ // After that we have to recalculate the mask layer in `applyContentPosition`.
133
+ applyContentPosition(contentSize: imageIdealSize, containerSize: frame.size)
134
+ }
135
+ }
136
+
123
137
  // MARK: - Implementation
124
138
 
125
139
  func reload(force: Bool = false) {
@@ -228,15 +242,15 @@ public final class ImageView: ExpoView {
228
242
  ])
229
243
 
230
244
  let scale = window?.screen.scale ?? UIScreen.main.scale
231
- let idealSize = idealSize(
245
+ imageIdealSize = idealSize(
232
246
  contentPixelSize: image.size * image.scale,
233
247
  containerSize: frame.size,
234
248
  scale: scale,
235
249
  contentFit: contentFit
236
250
  ).rounded(.up)
237
251
 
238
- let image = processImage(image, idealSize: idealSize, scale: scale)
239
- applyContentPosition(contentSize: idealSize, containerSize: frame.size)
252
+ let image = processImage(image, idealSize: imageIdealSize, scale: scale)
253
+ applyContentPosition(contentSize: imageIdealSize, containerSize: frame.size)
240
254
  renderSourceImage(image)
241
255
  } else {
242
256
  displayPlaceholderIfNecessary()
@@ -0,0 +1 @@
1
+ b390278b08a6723df7fe1de078963025fba0da39d8465dfb3c2143d94e1c48b708d8cd4a9acbd5047914911ec3349cf0b5c65c649bebdec22f83b207ca2ec563
@@ -0,0 +1 @@
1
+ 36127dbb35f93f99de976ee879f558e72310881b9396dcaf4845de37c7aaeaa6419e7e59821555978f83d5ae60492b2a547e1077657d2f92ac5a3d4d5200748e
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "BareExpo",
5
5
  "module": "expo.modules.image",
6
- "version": "2.3.1-canary-20250612-338ef55",
6
+ "version": "2.3.1-canary-20250630-547cd82",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -54,13 +54,13 @@
54
54
  ],
55
55
  "files": [
56
56
  {
57
- "name": "expo.modules.image-2.3.1-canary-20250612-338ef55.aar",
58
- "url": "expo.modules.image-2.3.1-canary-20250612-338ef55.aar",
59
- "size": 279687,
60
- "sha512": "227d071e0843c8a88b91c5f890ca955db2f21b0fac806827fc3101f9fa294ad31a64e7f1c3bf695960c6204568d31f7ecee17c8bd0e2b5e1ed8526f738557df6",
61
- "sha256": "6ee8c7984bcf949b1b1f40ee6081382f8a33720ad60f29815c14f35d6884703b",
62
- "sha1": "1002adced0addf2143391ee95583419f45f002b5",
63
- "md5": "051569f8d4efae72dcac67816b480d0e"
57
+ "name": "expo.modules.image-2.3.1-canary-20250630-547cd82.aar",
58
+ "url": "expo.modules.image-2.3.1-canary-20250630-547cd82.aar",
59
+ "size": 279967,
60
+ "sha512": "36127dbb35f93f99de976ee879f558e72310881b9396dcaf4845de37c7aaeaa6419e7e59821555978f83d5ae60492b2a547e1077657d2f92ac5a3d4d5200748e",
61
+ "sha256": "a99a9a74a761f9275346efcc3aa8cd21371ea47f40e70a30fb97aceea0efd79b",
62
+ "sha1": "4cec8f0d3433ef801d7f0665ccd4d91cf4bf89c4",
63
+ "md5": "3b99ea2aa9e608ef7a20e25150c02ce9"
64
64
  }
65
65
  ]
66
66
  },
@@ -88,7 +88,7 @@
88
88
  "group": "com.github.penfeizhou.android.animation",
89
89
  "module": "glide-plugin",
90
90
  "version": {
91
- "requires": "3.0.3"
91
+ "requires": "3.0.5"
92
92
  }
93
93
  },
94
94
  {
@@ -143,13 +143,13 @@
143
143
  ],
144
144
  "files": [
145
145
  {
146
- "name": "expo.modules.image-2.3.1-canary-20250612-338ef55.aar",
147
- "url": "expo.modules.image-2.3.1-canary-20250612-338ef55.aar",
148
- "size": 279687,
149
- "sha512": "227d071e0843c8a88b91c5f890ca955db2f21b0fac806827fc3101f9fa294ad31a64e7f1c3bf695960c6204568d31f7ecee17c8bd0e2b5e1ed8526f738557df6",
150
- "sha256": "6ee8c7984bcf949b1b1f40ee6081382f8a33720ad60f29815c14f35d6884703b",
151
- "sha1": "1002adced0addf2143391ee95583419f45f002b5",
152
- "md5": "051569f8d4efae72dcac67816b480d0e"
146
+ "name": "expo.modules.image-2.3.1-canary-20250630-547cd82.aar",
147
+ "url": "expo.modules.image-2.3.1-canary-20250630-547cd82.aar",
148
+ "size": 279967,
149
+ "sha512": "36127dbb35f93f99de976ee879f558e72310881b9396dcaf4845de37c7aaeaa6419e7e59821555978f83d5ae60492b2a547e1077657d2f92ac5a3d4d5200748e",
150
+ "sha256": "a99a9a74a761f9275346efcc3aa8cd21371ea47f40e70a30fb97aceea0efd79b",
151
+ "sha1": "4cec8f0d3433ef801d7f0665ccd4d91cf4bf89c4",
152
+ "md5": "3b99ea2aa9e608ef7a20e25150c02ce9"
153
153
  }
154
154
  ]
155
155
  },
@@ -163,13 +163,13 @@
163
163
  },
164
164
  "files": [
165
165
  {
166
- "name": "expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar",
167
- "url": "expo.modules.image-2.3.1-canary-20250612-338ef55-sources.jar",
168
- "size": 64213,
169
- "sha512": "16d4384079cca560d3755a544494e3ca5fe00313de647e53f20a3d734cdac96f1d44b8896ac42d5d526345bb1811383caeaae812c90fe68463569a76650eb46c",
170
- "sha256": "e48a00dcafcebec3b928754c0288ac58f1dfaeac61827619d2cc7b153ee0a531",
171
- "sha1": "7f083c927add65013047d49ee796e7d345056a68",
172
- "md5": "7503ed0734f934f764355c1bbe24fd65"
166
+ "name": "expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar",
167
+ "url": "expo.modules.image-2.3.1-canary-20250630-547cd82-sources.jar",
168
+ "size": 64377,
169
+ "sha512": "b390278b08a6723df7fe1de078963025fba0da39d8465dfb3c2143d94e1c48b708d8cd4a9acbd5047914911ec3349cf0b5c65c649bebdec22f83b207ca2ec563",
170
+ "sha256": "7212a71cec9495553fcd340b922ce49543d48c94167db4e0bad3d124f11abe48",
171
+ "sha1": "92ced973167a00d2e43b5d8f32835e9b9221e348",
172
+ "md5": "0dea771f25d26d1fe65aa2fc3511dc99"
173
173
  }
174
174
  ]
175
175
  }
@@ -0,0 +1 @@
1
+ 8edc92068e9e58dae578bc326c8270ab42c2f87428e58047b8967379f6f75ccaee5188ba00c5d2c022f37d8cf63b84436f68a43ceec7add16de37f14fc0cad07
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>BareExpo</groupId>
11
11
  <artifactId>expo.modules.image</artifactId>
12
- <version>2.3.1-canary-20250612-338ef55</version>
12
+ <version>2.3.1-canary-20250630-547cd82</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.image</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -63,7 +63,7 @@
63
63
  <dependency>
64
64
  <groupId>com.github.penfeizhou.android.animation</groupId>
65
65
  <artifactId>glide-plugin</artifactId>
66
- <version>3.0.3</version>
66
+ <version>3.0.5</version>
67
67
  <scope>runtime</scope>
68
68
  </dependency>
69
69
  <dependency>
@@ -0,0 +1 @@
1
+ d5fd8fec0c22ccab0ba8dd67459e65cb1ff3d5cece59d9fa90921215266de83b804b03456fd76ef802a5d280eb644f40e1c6e1379a0d5b2aff5ccd91b2a531bc
@@ -3,11 +3,11 @@
3
3
  <groupId>BareExpo</groupId>
4
4
  <artifactId>expo.modules.image</artifactId>
5
5
  <versioning>
6
- <latest>2.3.1-canary-20250612-338ef55</latest>
7
- <release>2.3.1-canary-20250612-338ef55</release>
6
+ <latest>2.3.1-canary-20250630-547cd82</latest>
7
+ <release>2.3.1-canary-20250630-547cd82</release>
8
8
  <versions>
9
- <version>2.3.1-canary-20250612-338ef55</version>
9
+ <version>2.3.1-canary-20250630-547cd82</version>
10
10
  </versions>
11
- <lastUpdated>20250612174751</lastUpdated>
11
+ <lastUpdated>20250630093955</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- cc8cdd7725a57e1b7c8490d06251a7c8
1
+ 96258a39c7fb6721919da48ab3292844
@@ -1 +1 @@
1
- 455e95ffe26f210b0f35d0770df65f351a5ddc7b
1
+ 3b16529617382502a20c82458267d3fbb80439ae
@@ -1 +1 @@
1
- ca85e5864e2bd0cc6c419c61f9e09729e7b8bafd3a09ca20832045aea730476b
1
+ a341cf82a9892adc56d43222ff10808320df7bf0c0facf9aee8a7cb96f82fb8c
@@ -1 +1 @@
1
- 8f69636df9bafa22b4342e69f5e991ea9661bc58c9835e72b5ecc18ce1cf7132c8fbca929d6fd0c77e44c85c17ca8df0230a28e5446bd0529d921d0322b828a7
1
+ 362ecc5a62613518aa07735c903ce602894fe6e1bcbe71916033aa4466df9f453b91ae01b5ac35781f8e7b03ff035b342cb80a7677b9f7eb513b5535d4e9155e
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-image",
3
3
  "title": "Expo Image",
4
- "version": "2.3.1-canary-20250612-338ef55",
4
+ "version": "2.3.1-canary-20250630-547cd82",
5
5
  "description": "A cross-platform, performant image component for React Native and Expo with Web support",
6
6
  "main": "src/index.ts",
7
7
  "types": "build/index.d.ts",
@@ -29,10 +29,10 @@
29
29
  "license": "MIT",
30
30
  "dependencies": {},
31
31
  "devDependencies": {
32
- "expo-module-scripts": "4.1.8-canary-20250612-338ef55"
32
+ "expo-module-scripts": "4.1.9-canary-20250630-547cd82"
33
33
  },
34
34
  "peerDependencies": {
35
- "expo": "54.0.0-canary-20250612-338ef55",
35
+ "expo": "54.0.0-canary-20250630-547cd82",
36
36
  "react": "*",
37
37
  "react-native": "*",
38
38
  "react-native-web": "*"
@@ -44,7 +44,14 @@ const ImageWrapper = React.forwardRef(
44
44
  events?.onMount?.forEach((e) => e?.());
45
45
  }, []);
46
46
 
47
- const tintId = useId();
47
+ // Use a unique ID for the SVG filter so that multiple <Image> can be used
48
+ // on the same page with different tint colors without conflicts.
49
+ const tintId = useId()
50
+ // Make it safe for use as an SVG ID. SVG IDs are most strict than HTML
51
+ // IDs. They must be compliant with https://www.w3.org/TR/xml/#NT-Name.
52
+ // React 19 changed useId() to include « and ». These must be removed or
53
+ // the SVG filter will not work (e.g. in Safari which enforces the spec).
54
+ .replace(/[«»]/g, '_');
48
55
 
49
56
  // Thumbhash uri always has to start with 'thumbhash:/'
50
57
  const { resolvedSource, isImageHash } = useImageHashes(source);
@@ -1 +0,0 @@
1
- 16d4384079cca560d3755a544494e3ca5fe00313de647e53f20a3d734cdac96f1d44b8896ac42d5d526345bb1811383caeaae812c90fe68463569a76650eb46c
@@ -1 +0,0 @@
1
- 6ee8c7984bcf949b1b1f40ee6081382f8a33720ad60f29815c14f35d6884703b
@@ -1 +0,0 @@
1
- 227d071e0843c8a88b91c5f890ca955db2f21b0fac806827fc3101f9fa294ad31a64e7f1c3bf695960c6204568d31f7ecee17c8bd0e2b5e1ed8526f738557df6
@@ -1 +0,0 @@
1
- 46b7827055b49be2cbde5fdc8cca802b47662f8fa761f36b4e034d68538ed1ed40ed2180d49f94d3ee638a7f057b87c0f15afebffb28ad72894e173353b61e71
@@ -1 +0,0 @@
1
- d97c5c48a39a83d0fecbe088d24f9053cb3089d9bdf384e3996e9645cd96fc1b
@@ -1 +0,0 @@
1
- f6635de0e3acac3d9d90db9bc719bd9d3d35f32178437cc13691b622a3f12e66881fe23b7608b8b7b9e52290bfc39640fada70f459b7fbca657bb697cddd45ec