zkit-ui 2.0.5 → 2.0.7

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 (80) hide show
  1. package/README.md +1 -1
  2. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryLayoutSupport.java → NativeImagePreviewLayoutSupport.java} +12 -12
  3. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryMediaItem.java → NativeImagePreviewMediaItem.java} +2 -2
  4. package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewModule.kt +43 -0
  5. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryPagerAdapter.java → NativeImagePreviewPagerAdapter.java} +18 -18
  6. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySharedElementGeometry.java → NativeImagePreviewSharedElementGeometry.java} +2 -2
  7. package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSharedElementNames.java +39 -0
  8. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySharedElementState.java → NativeImagePreviewSharedElementState.java} +4 -4
  9. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySourceViewRegistry.java → NativeImagePreviewSourceViewRegistry.java} +2 -2
  10. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryTransitionSnapshotView.java → NativeImagePreviewTransitionSnapshotView.java} +3 -3
  11. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryVideoPlayerView.java → NativeImagePreviewVideoPlayerView.java} +7 -7
  12. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GaleriaView.kt → NativeImagePreviewView.kt} +18 -18
  13. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerOverlayView.java → NativeImagePreviewViewerOverlayView.java} +49 -49
  14. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerPageView.java → NativeImagePreviewViewerPageView.java} +27 -27
  15. package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerTransitionController.java → NativeImagePreviewViewerTransitionController.java} +22 -22
  16. package/dist/ui/Button/index.d.ts +1 -1
  17. package/dist/ui/Button/index.d.ts.map +1 -1
  18. package/dist/ui/Button/index.js +18 -3
  19. package/dist/ui/NativeImagePreview/NativeImagePreview.js +6 -6
  20. package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts +1 -0
  21. package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts.map +1 -1
  22. package/dist/ui/NativeImagePreview/NativeImagePreview.web.js +105 -11
  23. package/dist/ui/NativeImagePreview/context.d.ts +1 -1
  24. package/dist/ui/NativeImagePreview/context.d.ts.map +1 -1
  25. package/dist/ui/NativeImagePreview/types.d.ts +3 -1
  26. package/dist/ui/NativeImagePreview/types.d.ts.map +1 -1
  27. package/dist/ui/NativeImagePreview/utils.d.ts.map +1 -1
  28. package/dist/ui/NativeImagePreview/utils.js +1 -0
  29. package/dist/ui/NativeImagePreview/web/geometry.d.ts +20 -0
  30. package/dist/ui/NativeImagePreview/web/geometry.d.ts.map +1 -0
  31. package/dist/ui/NativeImagePreview/web/geometry.js +121 -0
  32. package/dist/ui/NativeImagePreview/web/media.d.ts +6 -0
  33. package/dist/ui/NativeImagePreview/web/media.d.ts.map +1 -0
  34. package/dist/ui/NativeImagePreview/web/media.js +90 -0
  35. package/dist/ui/NativeImagePreview/web/styles.css +137 -0
  36. package/dist/ui/NativeImagePreview/web/transition.d.ts +15 -0
  37. package/dist/ui/NativeImagePreview/web/transition.d.ts.map +1 -0
  38. package/dist/ui/NativeImagePreview/web/transition.js +77 -0
  39. package/dist/ui/NativeImagePreview/web/types.d.ts +74 -0
  40. package/dist/ui/NativeImagePreview/web/types.d.ts.map +1 -0
  41. package/dist/ui/NativeImagePreview/web/types.js +3 -0
  42. package/dist/ui/NativeImagePreview/web/viewer.d.ts +104 -0
  43. package/dist/ui/NativeImagePreview/web/viewer.d.ts.map +1 -0
  44. package/dist/ui/NativeImagePreview/web/viewer.js +894 -0
  45. package/expo-module.config.json +2 -2
  46. package/ios/{GalleryViewer/GaleriaImageLoader.swift → NativeImagePreview/NativeImagePreviewImageLoader.swift} +7 -7
  47. package/ios/NativeImagePreview/NativeImagePreviewImageViewInteraction.swift +245 -0
  48. package/ios/{GalleryViewer/GaleriaLayoutSupport.swift → NativeImagePreview/NativeImagePreviewLayoutSupport.swift} +19 -19
  49. package/ios/NativeImagePreview/NativeImagePreviewMedia.swift +28 -0
  50. package/ios/NativeImagePreview/NativeImagePreviewSourceViewRegistry.swift +80 -0
  51. package/ios/{GalleryViewer/GaleriaVideoPlayerView.swift → NativeImagePreview/NativeImagePreviewVideoPlayerView.swift} +1 -1
  52. package/ios/{GalleryViewer/GaleriaViewerConfiguration.swift → NativeImagePreview/NativeImagePreviewViewerConfiguration.swift} +7 -7
  53. package/ios/{GalleryViewer/GaleriaViewerController.swift → NativeImagePreview/NativeImagePreviewViewerController.swift} +36 -36
  54. package/ios/{GalleryViewer/GaleriaViewerPageView.swift → NativeImagePreview/NativeImagePreviewViewerPageView.swift} +33 -33
  55. package/ios/{GalleryViewer/GaleriaViewerTransitionCoordinator.swift → NativeImagePreview/NativeImagePreviewViewerTransitionCoordinator.swift} +16 -16
  56. package/ios/{GaleriaModule.swift → NativeImagePreviewModule.swift} +4 -4
  57. package/ios/{GaleriaView.swift → NativeImagePreviewView.swift} +26 -27
  58. package/package.json +18 -12
  59. package/src/services/ImagePreviewService/README.md +1 -1
  60. package/src/types.d.ts +1 -0
  61. package/src/ui/Button/README.md +1 -1
  62. package/src/ui/Button/index.tsx +27 -7
  63. package/src/ui/NativeImagePreview/NativeImagePreview.tsx +7 -7
  64. package/src/ui/NativeImagePreview/NativeImagePreview.web.tsx +175 -11
  65. package/src/ui/NativeImagePreview/README.md +3 -3
  66. package/src/ui/NativeImagePreview/context.tsx +1 -1
  67. package/src/ui/NativeImagePreview/types.ts +3 -1
  68. package/src/ui/NativeImagePreview/utils.ts +1 -0
  69. package/src/ui/NativeImagePreview/web/geometry.ts +134 -0
  70. package/src/ui/NativeImagePreview/web/media.ts +91 -0
  71. package/src/ui/NativeImagePreview/web/styles.css +137 -0
  72. package/src/ui/NativeImagePreview/web/transition.ts +111 -0
  73. package/src/ui/NativeImagePreview/web/types.ts +88 -0
  74. package/src/ui/NativeImagePreview/web/viewer.ts +1024 -0
  75. package/android/src/main/java/cn/fontree/zkit/ui/preview/GaleriaModule.kt +0 -43
  76. package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySharedElementNames.java +0 -39
  77. package/ios/GalleryViewer/GaleriaImageViewInteraction.swift +0 -245
  78. package/ios/GalleryViewer/GaleriaMedia.swift +0 -28
  79. package/ios/GalleryViewer/GaleriaSourceViewRegistry.swift +0 -80
  80. /package/android/src/main/res/layout/{galeria_player_view.xml → native_image_preview_player_view.xml} +0 -0
@@ -1,43 +0,0 @@
1
- package cn.fontree.zkit.ui.preview
2
-
3
- import expo.modules.kotlin.modules.Module
4
- import expo.modules.kotlin.modules.ModuleDefinition
5
-
6
- class GaleriaModule : Module() {
7
- override fun definition() = ModuleDefinition {
8
- Name("ZKitNativeImagePreview")
9
-
10
- View(GaleriaView::class) {
11
- Events(
12
- "onIndexChange"
13
- )
14
- Prop("theme") { view: GaleriaView, theme: Theme ->
15
- view.theme = theme
16
- }
17
- Prop("items") { view: GaleriaView, items: Array<Map<String, Any?>> ->
18
- view.items = items.toList()
19
- }
20
- Prop("urls") { view: GaleriaView, urls: Array<String> ->
21
- view.urls = urls
22
- }
23
- Prop("index") { view: GaleriaView, index: Int ->
24
- view.initialIndex = index
25
- }
26
- Prop("galleryId") { view: GaleriaView, galleryId: String? ->
27
- view.galleryId = galleryId
28
- }
29
- Prop("disableHiddenOriginalImage") { view: GaleriaView, disableHiddenOriginalImage: Boolean ->
30
- view.disableHiddenOriginalImage = disableHiddenOriginalImage
31
- }
32
- Prop("edgeToEdge") { view: GaleriaView, edgeToEdge: Boolean ->
33
- view.edgeToEdge = edgeToEdge
34
- }
35
- Prop("transitionOffsetY") { view: GaleriaView, transitionOffsetY: Int? ->
36
- view.transitionOffsetY = transitionOffsetY
37
- }
38
- Prop("transitionOffsetX") { view: GaleriaView, transitionOffsetX: Int? ->
39
- view.transitionOffsetX = transitionOffsetX
40
- }
41
- }
42
- }
43
- }
@@ -1,39 +0,0 @@
1
- package cn.fontree.zkit.ui.preview;
2
-
3
- import androidx.annotation.NonNull;
4
- import androidx.annotation.Nullable;
5
-
6
- public final class GallerySharedElementNames {
7
- private static final String PREFIX = "zkit-native-image-preview:media:";
8
-
9
- private GallerySharedElementNames() {
10
- }
11
-
12
- @NonNull
13
- public static String forItem(@NonNull GalleryMediaItem item) {
14
- return forItem(null, item);
15
- }
16
-
17
- @NonNull
18
- public static String forItem(@Nullable String galleryId, @NonNull GalleryMediaItem item) {
19
- return forId(galleryId, item.getId());
20
- }
21
-
22
- @NonNull
23
- public static String forIndex(int index) {
24
- return forIndex(null, index);
25
- }
26
-
27
- @NonNull
28
- public static String forIndex(@Nullable String galleryId, int index) {
29
- return forId(galleryId, String.valueOf(index));
30
- }
31
-
32
- @NonNull
33
- private static String forId(@Nullable String galleryId, @NonNull String id) {
34
- if (galleryId == null || galleryId.isEmpty()) {
35
- return PREFIX + id;
36
- }
37
- return PREFIX + galleryId + ":" + id;
38
- }
39
- }
@@ -1,245 +0,0 @@
1
- import ObjectiveC
2
- import UIKit
3
-
4
- extension UIImageView {
5
- private struct GaleriaAnchorRegistration {
6
- let galleryId: String
7
- let index: Int
8
- }
9
-
10
- private final class GaleriaTapGestureRecognizer: UITapGestureRecognizer {
11
- weak var fromViewController: UIViewController?
12
- var dataSource: GaleriaDataSource?
13
- var imageLoader: GaleriaImageLoading?
14
- var initialIndex = 0
15
- var galleryId: String?
16
- var configuration = GaleriaViewerConfiguration()
17
- }
18
-
19
- private static var anchorRegistrationKey: UInt8 = 0
20
- private static var gestureRecognizerKey: UInt8 = 0
21
-
22
- private var topMostHostViewController: UIViewController? {
23
- let keyWindow: UIWindow? = {
24
- if #available(iOS 13.0, *) {
25
- let scenes = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }
26
- let activeScene = scenes.first(where: { $0.activationState == .foregroundActive }) ?? scenes.first
27
- return activeScene?.windows.first(where: { $0.isKeyWindow }) ?? activeScene?.windows.first
28
- } else {
29
- return UIApplication.shared.windows.first(where: { $0.isKeyWindow }) ?? UIApplication.shared.windows.first
30
- }
31
- }()
32
- guard let rootViewController = keyWindow?.rootViewController else { return nil }
33
- return rootViewController.presentedViewController ?? rootViewController
34
- }
35
-
36
- public func setupGaleriaViewer(
37
- configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
38
- from viewController: UIViewController? = nil,
39
- imageLoader: GaleriaImageLoading? = nil,
40
- galleryId: String? = nil
41
- ) {
42
- configureGaleriaViewer(
43
- dataSource: GaleriaArrayDataSource(items: [.image(image)]),
44
- initialIndex: 0,
45
- configuration: configuration,
46
- from: viewController,
47
- imageLoader: imageLoader,
48
- galleryId: galleryId
49
- )
50
- }
51
-
52
- public func setupGaleriaViewer(
53
- url: URL,
54
- initialIndex: Int = 0,
55
- placeholder: UIImage? = nil,
56
- configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
57
- from viewController: UIViewController? = nil,
58
- imageLoader: GaleriaImageLoading? = nil,
59
- galleryId: String? = nil
60
- ) {
61
- configureGaleriaViewer(
62
- dataSource: GaleriaArrayDataSource(items: [.imageURL(url, placeholder: placeholder)]),
63
- initialIndex: initialIndex,
64
- configuration: configuration,
65
- from: viewController,
66
- imageLoader: imageLoader,
67
- galleryId: galleryId
68
- )
69
- }
70
-
71
- public func setupGaleriaViewer(
72
- images: [UIImage],
73
- initialIndex: Int = 0,
74
- configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
75
- from viewController: UIViewController? = nil,
76
- imageLoader: GaleriaImageLoading? = nil,
77
- galleryId: String? = nil
78
- ) {
79
- let items = images.map { GaleriaMediaItem.image($0) }
80
- configureGaleriaViewer(
81
- dataSource: GaleriaArrayDataSource(items: items),
82
- initialIndex: initialIndex,
83
- configuration: configuration,
84
- from: viewController,
85
- imageLoader: imageLoader,
86
- galleryId: galleryId
87
- )
88
- }
89
-
90
- public func setupGaleriaViewer(
91
- urls: [URL],
92
- initialIndex: Int = 0,
93
- placeholder: UIImage? = nil,
94
- configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
95
- from viewController: UIViewController? = nil,
96
- imageLoader: GaleriaImageLoading? = nil,
97
- galleryId: String? = nil
98
- ) {
99
- let items = urls.map { GaleriaMediaItem.imageURL($0, placeholder: placeholder) }
100
- configureGaleriaViewer(
101
- dataSource: GaleriaArrayDataSource(items: items),
102
- initialIndex: initialIndex,
103
- configuration: configuration,
104
- from: viewController,
105
- imageLoader: imageLoader,
106
- galleryId: galleryId
107
- )
108
- }
109
-
110
- public func setupGaleriaViewer(
111
- dataSource: GaleriaDataSource,
112
- initialIndex: Int = 0,
113
- configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
114
- from viewController: UIViewController? = nil,
115
- imageLoader: GaleriaImageLoading? = nil,
116
- galleryId: String? = nil
117
- ) {
118
- configureGaleriaViewer(
119
- dataSource: dataSource,
120
- initialIndex: initialIndex,
121
- configuration: configuration,
122
- from: viewController,
123
- imageLoader: imageLoader,
124
- galleryId: galleryId
125
- )
126
- }
127
-
128
- func removeGaleriaViewerInteraction() {
129
- if let recognizer = galeriaTapGestureRecognizer {
130
- removeGestureRecognizer(recognizer)
131
- }
132
- galeriaTapGestureRecognizer = nil
133
-
134
- if let registration = galeriaAnchorRegistration {
135
- GaleriaSourceViewRegistry.shared.unregister(
136
- self,
137
- galleryId: registration.galleryId,
138
- index: registration.index
139
- )
140
- }
141
- galeriaAnchorRegistration = nil
142
- }
143
-
144
- private func configureGaleriaViewer(
145
- dataSource: GaleriaDataSource?,
146
- initialIndex: Int,
147
- configuration: GaleriaViewerConfiguration,
148
- from viewController: UIViewController?,
149
- imageLoader: GaleriaImageLoading?,
150
- galleryId: String?
151
- ) {
152
- let recognizer = galeriaTapGestureRecognizer ?? {
153
- let recognizer = GaleriaTapGestureRecognizer(target: self, action: #selector(showGaleriaViewer(_:)))
154
- recognizer.numberOfTouchesRequired = 1
155
- recognizer.numberOfTapsRequired = 1
156
- galeriaTapGestureRecognizer = recognizer
157
- return recognizer
158
- }()
159
-
160
- isUserInteractionEnabled = true
161
- clipsToBounds = true
162
-
163
- recognizer.dataSource = dataSource
164
- recognizer.imageLoader = imageLoader
165
- recognizer.initialIndex = initialIndex
166
- recognizer.galleryId = galleryId
167
- recognizer.configuration = configuration
168
- recognizer.fromViewController = viewController
169
-
170
- if recognizer.view !== self {
171
- addGestureRecognizer(recognizer)
172
- }
173
-
174
- updateGaleriaAnchorRegistration(galleryId: galleryId, index: initialIndex)
175
- }
176
-
177
- private var galeriaTapGestureRecognizer: GaleriaTapGestureRecognizer? {
178
- get {
179
- objc_getAssociatedObject(self, &Self.gestureRecognizerKey) as? GaleriaTapGestureRecognizer
180
- }
181
- set {
182
- objc_setAssociatedObject(
183
- self,
184
- &Self.gestureRecognizerKey,
185
- newValue,
186
- .OBJC_ASSOCIATION_RETAIN_NONATOMIC
187
- )
188
- }
189
- }
190
-
191
- private var galeriaAnchorRegistration: GaleriaAnchorRegistration? {
192
- get {
193
- objc_getAssociatedObject(self, &Self.anchorRegistrationKey) as? GaleriaAnchorRegistration
194
- }
195
- set {
196
- objc_setAssociatedObject(
197
- self,
198
- &Self.anchorRegistrationKey,
199
- newValue,
200
- .OBJC_ASSOCIATION_RETAIN_NONATOMIC
201
- )
202
- }
203
- }
204
-
205
- @objc
206
- private func showGaleriaViewer(_ recognizer: GaleriaTapGestureRecognizer) {
207
- guard let sourceView = recognizer.view as? UIImageView else { return }
208
- let resolvedImageLoader = recognizer.imageLoader ?? GaleriaImageLoaderFactory.makeDefault()
209
- let viewerController = GaleriaViewerController(
210
- sourceView: sourceView,
211
- dataSource: recognizer.dataSource,
212
- imageLoader: resolvedImageLoader,
213
- configuration: recognizer.configuration,
214
- initialIndex: recognizer.initialIndex,
215
- galleryId: recognizer.galleryId
216
- )
217
-
218
- let rootViewController = recognizer.fromViewController ?? topMostHostViewController
219
- let presenter = rootViewController.flatMap(topMostPresentedController(from:))
220
- presenter?.present(viewerController, animated: false)
221
- }
222
-
223
- private func topMostPresentedController(from rootViewController: UIViewController) -> UIViewController {
224
- var controller = rootViewController
225
- while let presented = controller.presentedViewController {
226
- controller = presented
227
- }
228
- return controller
229
- }
230
-
231
- private func updateGaleriaAnchorRegistration(galleryId: String?, index: Int) {
232
- if let existing = galeriaAnchorRegistration {
233
- GaleriaSourceViewRegistry.shared.unregister(
234
- self,
235
- galleryId: existing.galleryId,
236
- index: existing.index
237
- )
238
- galeriaAnchorRegistration = nil
239
- }
240
-
241
- guard let galleryId = galleryId, galleryId.isEmpty == false else { return }
242
- GaleriaSourceViewRegistry.shared.register(self, galleryId: galleryId, index: index)
243
- galeriaAnchorRegistration = GaleriaAnchorRegistration(galleryId: galleryId, index: index)
244
- }
245
- }
@@ -1,28 +0,0 @@
1
- import UIKit
2
-
3
- public enum GaleriaMediaItem {
4
- case image(UIImage?)
5
- case imageURL(URL, placeholder: UIImage?)
6
- case video(url: URL, poster: URL?)
7
- }
8
-
9
- public protocol GaleriaDataSource: AnyObject {
10
- func numberOfItems() -> Int
11
- func item(at index: Int) -> GaleriaMediaItem
12
- }
13
-
14
- public final class GaleriaArrayDataSource: GaleriaDataSource {
15
- private let items: [GaleriaMediaItem]
16
-
17
- public init(items: [GaleriaMediaItem]) {
18
- self.items = items
19
- }
20
-
21
- public func numberOfItems() -> Int {
22
- items.count
23
- }
24
-
25
- public func item(at index: Int) -> GaleriaMediaItem {
26
- items[index]
27
- }
28
- }
@@ -1,80 +0,0 @@
1
- import UIKit
2
-
3
- final class GaleriaSourceViewRegistry {
4
- static let shared = GaleriaSourceViewRegistry()
5
-
6
- private final class WeakImageView {
7
- weak var value: UIImageView?
8
-
9
- init(_ value: UIImageView) {
10
- self.value = value
11
- }
12
- }
13
-
14
- private var anchors: [String: [Int: WeakImageView]] = [:]
15
-
16
- private init() {}
17
-
18
- func register(_ imageView: UIImageView, galleryId: String, index: Int) {
19
- cleanup()
20
- var galleryAnchors = anchors[galleryId] ?? [:]
21
- galleryAnchors[index] = WeakImageView(imageView)
22
- anchors[galleryId] = galleryAnchors
23
- }
24
-
25
- func unregister(_ imageView: UIImageView, galleryId: String?, index: Int?) {
26
- cleanup()
27
- if let galleryId = galleryId {
28
- remove(imageView, from: galleryId, index: index)
29
- } else {
30
- for galleryId in Array(anchors.keys) {
31
- remove(imageView, from: galleryId, index: nil)
32
- }
33
- }
34
- cleanup()
35
- }
36
-
37
- func sourceView(for galleryId: String, index: Int) -> UIImageView? {
38
- cleanup()
39
- guard
40
- let imageView = anchors[galleryId]?[index]?.value,
41
- let window = imageView.window,
42
- !imageView.isHidden
43
- else {
44
- return nil
45
- }
46
-
47
- let frameInWindow = imageView.frameInWindow()
48
- guard !frameInWindow.isEmpty, frameInWindow.intersects(window.bounds) else {
49
- return nil
50
- }
51
-
52
- return imageView
53
- }
54
-
55
- private func remove(_ imageView: UIImageView, from galleryId: String, index: Int?) {
56
- guard var galleryAnchors = anchors[galleryId] else { return }
57
-
58
- if let index = index {
59
- if let registeredView = galleryAnchors[index]?.value, registeredView === imageView {
60
- galleryAnchors.removeValue(forKey: index)
61
- }
62
- } else {
63
- galleryAnchors = galleryAnchors.filter { _, weakImageView in
64
- guard let registeredView = weakImageView.value else { return false }
65
- return registeredView !== imageView
66
- }
67
- }
68
-
69
- anchors[galleryId] = galleryAnchors.isEmpty ? nil : galleryAnchors
70
- }
71
-
72
- private func cleanup() {
73
- anchors = anchors.compactMapValues { galleryAnchors in
74
- let activeAnchors = galleryAnchors.filter { _, weakImageView in
75
- weakImageView.value != nil
76
- }
77
- return activeAnchors.isEmpty ? nil : activeAnchors
78
- }
79
- }
80
- }