@onekeyfe/react-native-image 3.0.155 → 3.0.157-alpha.248

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 (44) hide show
  1. package/README.md +3 -0
  2. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImage.kt +356 -22
  3. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageCache.kt +34 -4
  4. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageMemoryVariants.kt +119 -0
  5. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageReusableView.kt +2 -0
  6. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageMemoryVariantsTest.kt +149 -0
  7. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageRequestSignatureTest.kt +14 -1
  8. package/ios/OneKeyImage.swift +273 -43
  9. package/ios/OneKeyImageCache.swift +40 -3
  10. package/ios/OneKeyImageMemoryVariants.swift +137 -0
  11. package/ios/OneKeyImageRequestContext.swift +51 -9
  12. package/ios/tests/OneKeyImageInfrastructureTests.swift +255 -18
  13. package/lib/module/index.js +26 -3
  14. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +18 -0
  15. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +4 -0
  16. package/lib/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +10 -0
  17. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +12 -0
  18. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +14 -0
  19. package/lib/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +12 -0
  20. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +2 -0
  21. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +48 -0
  22. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +4 -0
  23. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +4 -0
  24. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +4 -0
  25. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +6 -0
  26. package/lib/nitrogen/generated/shared/json/OneKeyImageConfig.json +2 -0
  27. package/lib/typescript/src/OneKeyImage.nitro.d.ts +8 -0
  28. package/lib/typescript/src/index.d.ts +1 -1
  29. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +18 -0
  30. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +4 -0
  31. package/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +10 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +12 -0
  33. package/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +14 -0
  34. package/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +12 -0
  35. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +2 -0
  36. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +48 -0
  37. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +4 -0
  38. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +4 -0
  39. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +4 -0
  40. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +6 -0
  41. package/nitrogen/generated/shared/json/OneKeyImageConfig.json +2 -0
  42. package/package.json +2 -2
  43. package/src/OneKeyImage.nitro.ts +8 -0
  44. package/src/index.tsx +25 -1
package/src/index.tsx CHANGED
@@ -153,7 +153,9 @@ export function OneKeyImage({
153
153
  autoplay,
154
154
  recyclingKey,
155
155
  optimizeTos = true,
156
+ round = false,
156
157
  resizeWidth,
158
+ resizeHeight,
157
159
  overscan = 1.1,
158
160
  loadingStrategy = OneKeyImageLoadingStrategy.STATIC,
159
161
  placeholderColor,
@@ -175,7 +177,7 @@ export function OneKeyImage({
175
177
  normalized?.headers ?? {}
176
178
  )}|${resolvedCachePolicy}|${recyclingKey ?? ''}|${contentFit}|${
177
179
  optimizeTos ? '1' : '0'
178
- }|${resizeWidth ?? ''}|${overscan}`;
180
+ }|${resizeWidth ?? ''}|${resizeHeight ?? ''}|${overscan}`;
179
181
  const hasSource = normalized != null;
180
182
  const hasOverlay = placeholder != null || fallback != null;
181
183
  type LoadState = {
@@ -353,6 +355,7 @@ export function OneKeyImage({
353
355
  borderEndStartRadius: flattenedStyle.borderEndStartRadius,
354
356
  borderEndEndRadius: flattenedStyle.borderEndEndRadius,
355
357
  zIndex: 1,
358
+ ...(round ? ROUND_CLIP : null),
356
359
  }
357
360
  : undefined;
358
361
 
@@ -370,7 +373,9 @@ export function OneKeyImage({
370
373
  autoplay: autoplay ?? Platform.OS !== 'android',
371
374
  recyclingKey,
372
375
  optimizeTos,
376
+ round,
373
377
  resizeWidth,
378
+ resizeHeight,
374
379
  overscan,
375
380
  loadingStrategy:
376
381
  placeholder == null ? loadingStrategy : OneKeyImageLoadingStrategy.NONE,
@@ -385,6 +390,7 @@ export function OneKeyImage({
385
390
  style,
386
391
  styles.overlayContainer,
387
392
  hasRoundedCorners ? styles.borderlessContainer : undefined,
393
+ round ? ROUND_CLIP : undefined,
388
394
  ]}
389
395
  collapsable={false}
390
396
  >
@@ -440,6 +446,24 @@ export const OneKeyImageCache = {
440
446
  clearAll: () => nativeCache.clearAll(),
441
447
  };
442
448
 
449
+ // `round` clips the native view to a circle: an oval path on Android
450
+ // (`OneKeyImage.kt` `addOval`), a `min(width, height) / 2` corner radius on iOS
451
+ // (`OneKeyImage.swift` `updateRoundMask`). The overlay container has to clip the
452
+ // same way, or a custom placeholder or fallback is painted square over a round
453
+ // image. A percentage radius says that without measuring the view, and covers
454
+ // every per-corner radius the caller's own style may have set.
455
+ const ROUND_CLIP = {
456
+ borderRadius: '50%',
457
+ borderTopLeftRadius: '50%',
458
+ borderTopRightRadius: '50%',
459
+ borderBottomLeftRadius: '50%',
460
+ borderBottomRightRadius: '50%',
461
+ borderStartStartRadius: '50%',
462
+ borderStartEndRadius: '50%',
463
+ borderEndStartRadius: '50%',
464
+ borderEndEndRadius: '50%',
465
+ } as const;
466
+
443
467
  const styles = StyleSheet.create({
444
468
  overlayContainer: {
445
469
  overflow: 'hidden',