@momo-kits/native-kits 0.0.1-beta.3 → 0.0.1-beta.5
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.
- package/example/ios/Example/ComponentModel.swift +9 -2
- package/example/ios/Example/ContentView.swift +0 -14
- package/example/ios/Example/Foundation/ImageDemo.swift +43 -0
- package/example/ios/Example/Foundation/Popup/Popups.swift +2 -52
- package/example/ios/Example/Foundation/PopupDemo.swift +44 -21
- package/example/ios/Example/Foundation/TextInputDemo.swift +36 -0
- package/example/ios/Example/Library/CheckboxDemo.swift +19 -0
- package/example/ios/Example/Library/SwitchDemo.swift +19 -0
- package/example/ios/Example/Main.swift +17 -1
- package/example/ios/Example/Resource/foundation.json +2 -2
- package/example/ios/Example/Resource/library.json +10 -0
- package/example/ios/Example.xcodeproj/project.pbxproj +16 -0
- package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +1 -1
- package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Podfile +2 -1
- package/example/ios/Podfile.lock +22 -3
- package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +9 -1
- package/example/ios/Pods/Manifest.lock +22 -3
- package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +1547 -161
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +21 -0
- package/example/ios/Pods/SDWebImage/LICENSE +20 -0
- package/example/ios/Pods/SDWebImage/README.md +352 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.h +340 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.m +172 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +63 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +165 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h +67 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +120 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +114 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +392 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h +112 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m +420 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +133 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h +168 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.m +79 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h +110 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +540 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h +145 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +326 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h +73 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +256 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.m +98 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +450 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +1030 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +153 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +68 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +156 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +138 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h +81 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m +556 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h +297 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m +26 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +153 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +822 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.h +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.m +130 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h +36 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m +28 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h +22 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h +28 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +127 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h +25 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m +101 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +807 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h +30 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +420 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h +146 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +170 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h +40 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +123 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h +241 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m +331 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h +78 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m +158 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h +36 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.h +95 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m +17 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +352 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +149 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +314 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +658 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +113 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +60 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +49 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +55 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +191 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +722 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +69 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +71 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +69 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +73 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +16 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.h +115 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +275 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h +290 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +775 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +27 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m +14 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h +72 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m +59 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h +143 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m +303 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h +131 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m +194 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.h +387 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.m +234 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h +24 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h +46 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +60 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h +26 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m +22 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h +27 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +47 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +89 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +221 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h +80 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.m +47 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h +146 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +824 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h +129 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.m +76 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.h +194 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.m +67 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +110 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +446 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +48 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +82 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +24 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +42 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h +14 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +29 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h +21 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m +92 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h +18 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h +29 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +227 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.m +127 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +164 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h +21 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.m +83 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h +122 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m +13 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h +20 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.m +79 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDmetamacros.h +667 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h +18 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m +42 -0
- package/example/ios/Pods/SDWebImage/WebImage/SDWebImage.h +89 -0
- package/example/ios/Pods/SDWebImageSwiftUI/LICENSE +19 -0
- package/example/ios/Pods/SDWebImageSwiftUI/README.md +690 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +870 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Backport.swift +59 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/OnChange.swift +52 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Overlay.swift +124 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/StateObject.swift +151 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Image.swift +78 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +132 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImagePlayer.swift +122 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +133 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +82 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +97 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +114 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +64 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +92 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Transition/Transition.swift +93 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +509 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Module/SDWebImageSwiftUI.h +15 -0
- package/example/ios/Pods/SkeletonUI/LICENSE +21 -0
- package/example/ios/Pods/SkeletonUI/README.md +137 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AngleInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AnglePresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Animation/AnimationInteractor.swift +56 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearanceInteractor.swift +58 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearancePresenter.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ClosedRange+Normalize.swift +16 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Image+OptionalType.swift +102 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ModifiedContent+SkeletonModifier.swift +26 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Optional+OptionalType.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/SecureField+OptionalType.swift +19 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Text+OptionalType.swift +27 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/TextField+OptionalType.swift +35 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Toggle+OptionalType.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/UnitPoint+Angle.swift +8 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/View+SkeletonModifier.swift +8 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Modifiers/SkeletonModifier.swift +52 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilineInteractor.swift +41 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilinePresenter.swift +9 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Protocols/OptionalType.swift +4 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapeInteractor.swift +33 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapePresenter.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonForEach.swift +20 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonInteractor.swift +27 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonList.swift +20 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonPresenter.swift +15 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonShape.swift +64 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonView.swift +25 -0
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +4 -1
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +4 -1
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +72 -0
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +90 -0
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +6 -5
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +6 -5
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +75 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +14 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +14 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-umbrella.h +17 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.debug.xcconfig +17 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.release.xcconfig +17 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-umbrella.h +16 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.debug.xcconfig +12 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.release.xcconfig +12 -0
- package/ios/Checkbox/Checkbox.swift +38 -0
- package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Colors.swift +0 -0
- package/ios/Colors+Radius+Spacing/Radius.swift +22 -0
- package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Spacing.swift +0 -0
- package/ios/Extensions/View++.swift +9 -0
- package/ios/Image/Image.swift +60 -0
- package/ios/Input/Input.swift +148 -0
- package/ios/OTPKeyboard/OTPKeyboard.swift +3 -3
- package/ios/Popup/PopupDisplay.swift +178 -0
- package/ios/PopupView/FullscreenPopup.swift +251 -0
- package/ios/{Popup → PopupView}/Modifiers.swift +6 -20
- package/ios/{Popup → PopupView}/PopupView.swift +38 -146
- package/ios/PopupView/Utils++.swift +281 -0
- package/ios/Swipeable/SwipeCell.swift +1 -1
- package/ios/Switch/Switch.swift +44 -0
- package/ios/native-kits.podspec +2 -0
- package/package.json +1 -1
- package/ios/Colors+Spacing/Radius.swift +0 -11
- package/ios/Popup/Utils.swift +0 -186
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import SwiftUI
|
|
2
|
+
import Combine
|
|
3
|
+
|
|
4
|
+
final class DispatchWorkHolder {
|
|
5
|
+
var work: DispatchWorkItem?
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
final class ClassReference<T> {
|
|
9
|
+
var value: T
|
|
10
|
+
|
|
11
|
+
init(_ value: T) {
|
|
12
|
+
self.value = value
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public extension View {
|
|
17
|
+
|
|
18
|
+
@ViewBuilder
|
|
19
|
+
func valueChanged<T: Equatable>(value: T, onChange: @escaping (T) -> Void) -> some View {
|
|
20
|
+
if #available(iOS 14.0, tvOS 14.0, macOS 11.0, watchOS 7.0, *) {
|
|
21
|
+
self.onChange(of: value, perform: onChange)
|
|
22
|
+
} else {
|
|
23
|
+
self.onReceive(Just(value)) { value in
|
|
24
|
+
onChange(value)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public extension View {
|
|
31
|
+
@ViewBuilder
|
|
32
|
+
func applyIf<T: View>(_ condition: Bool, apply: (Self) -> T) -> some View {
|
|
33
|
+
if condition {
|
|
34
|
+
apply(self)
|
|
35
|
+
} else {
|
|
36
|
+
self
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@ViewBuilder
|
|
41
|
+
func addTapIf(if condition: Bool, onTap: @escaping ()->()) -> some View {
|
|
42
|
+
if condition {
|
|
43
|
+
self.simultaneousGesture(
|
|
44
|
+
TapGesture().onEnded {
|
|
45
|
+
onTap()
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
} else {
|
|
49
|
+
self
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
struct FrameGetter: ViewModifier {
|
|
55
|
+
|
|
56
|
+
@Binding var frame: CGRect
|
|
57
|
+
|
|
58
|
+
func body(content: Content) -> some View {
|
|
59
|
+
content
|
|
60
|
+
.background(
|
|
61
|
+
GeometryReader { proxy -> AnyView in
|
|
62
|
+
DispatchQueue.main.async {
|
|
63
|
+
let rect = proxy.frame(in: .global)
|
|
64
|
+
// This avoids an infinite layout loop
|
|
65
|
+
if rect.integral != self.frame.integral {
|
|
66
|
+
self.frame = rect
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return AnyView(EmptyView())
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
extension View {
|
|
76
|
+
public func frameGetter(_ frame: Binding<CGRect>) -> some View {
|
|
77
|
+
modifier(FrameGetter(frame: frame))
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
struct AnimationCompletionObserverModifier<Value>: AnimatableModifier where Value: VectorArithmetic, Value: Comparable {
|
|
82
|
+
|
|
83
|
+
/// While animating, SwiftUI changes the old input value to the new target value using this property. This value is set to the old value until the animation completes.
|
|
84
|
+
var animatableData: Value {
|
|
85
|
+
didSet {
|
|
86
|
+
notifyCompletionIfFinished()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// The target value for which we're observing. This value is directly set once the animation starts. During animation, `animatableData` will hold the oldValue and is only updated to the target value once the animation completes.
|
|
91
|
+
private var targetValue: Value
|
|
92
|
+
|
|
93
|
+
/// The completion callback which is called once the animation completes.
|
|
94
|
+
private var completion: () -> Void
|
|
95
|
+
|
|
96
|
+
init(observedValue: Value, completion: @escaping () -> Void) {
|
|
97
|
+
self.completion = completion
|
|
98
|
+
self.animatableData = observedValue
|
|
99
|
+
targetValue = observedValue
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Verifies whether the current animation is finished and calls the completion callback if true.
|
|
103
|
+
private func notifyCompletionIfFinished() {
|
|
104
|
+
guard animatableData == targetValue else { return }
|
|
105
|
+
|
|
106
|
+
/// Dispatching is needed to take the next runloop for the completion callback.
|
|
107
|
+
/// This prevents errors like "Modifying state during view update, this will cause undefined behavior."
|
|
108
|
+
DispatchQueue.main.async {
|
|
109
|
+
self.completion()
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
func body(content: Content) -> some View {
|
|
114
|
+
/// We're not really modifying the view so we can directly return the original input value.
|
|
115
|
+
return content
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
struct AnimatableModifierDouble: AnimatableModifier {
|
|
120
|
+
|
|
121
|
+
var targetValue: Double
|
|
122
|
+
static var done = false
|
|
123
|
+
|
|
124
|
+
// SwiftUI gradually varies it from old value to the new value
|
|
125
|
+
var animatableData: Double {
|
|
126
|
+
didSet {
|
|
127
|
+
checkIfFinished()
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
var completion: () -> ()
|
|
131
|
+
|
|
132
|
+
// Re-created every time the control argument changes
|
|
133
|
+
init(bindedValue: Double, completion: @escaping () -> ()) {
|
|
134
|
+
self.completion = completion
|
|
135
|
+
|
|
136
|
+
// Set animatableData to the new value. But SwiftUI again directly
|
|
137
|
+
// and gradually varies the value while the body
|
|
138
|
+
// is being called to animate. Following line serves the purpose of
|
|
139
|
+
// associating the extenal argument with the animatableData.
|
|
140
|
+
self.animatableData = bindedValue
|
|
141
|
+
targetValue = bindedValue
|
|
142
|
+
AnimatableModifierDouble.done = false
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func checkIfFinished() -> () {
|
|
146
|
+
if AnimatableModifierDouble.done { return }
|
|
147
|
+
let delta = 0.1
|
|
148
|
+
if animatableData > targetValue - delta &&
|
|
149
|
+
animatableData < targetValue + delta {
|
|
150
|
+
//print("check", animatableData, targetValue)
|
|
151
|
+
AnimatableModifierDouble.done = true
|
|
152
|
+
DispatchQueue.main.async {
|
|
153
|
+
self.completion()
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
func body(content: Content) -> some View {
|
|
159
|
+
content
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
extension View {
|
|
164
|
+
|
|
165
|
+
func onAnimationCompleted(for value: Double, completion: @escaping () -> Void) -> some View {
|
|
166
|
+
modifier(AnimatableModifierDouble(bindedValue: value, completion: completion))
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
extension UIApplication {
|
|
171
|
+
var keyWindow: UIWindow? {
|
|
172
|
+
connectedScenes
|
|
173
|
+
.compactMap {
|
|
174
|
+
$0 as? UIWindowScene
|
|
175
|
+
}
|
|
176
|
+
.flatMap {
|
|
177
|
+
$0.windows
|
|
178
|
+
}
|
|
179
|
+
.first {
|
|
180
|
+
$0.isKeyWindow
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private struct SafeAreaInsetsKey: EnvironmentKey {
|
|
186
|
+
static var defaultValue: EdgeInsets {
|
|
187
|
+
UIApplication.shared.keyWindow?.safeAreaInsets.swiftUiInsets ?? EdgeInsets()
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
extension EnvironmentValues {
|
|
192
|
+
var safeAreaInsets: EdgeInsets {
|
|
193
|
+
self[SafeAreaInsetsKey.self]
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
private extension UIEdgeInsets {
|
|
198
|
+
var swiftUiInsets: EdgeInsets {
|
|
199
|
+
EdgeInsets(top: top, leading: left, bottom: bottom, trailing: right)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
extension View {
|
|
204
|
+
|
|
205
|
+
func transparentNonAnimatingFullScreenCover<Content: View>(isPresented: Binding<Bool>, content: @escaping () -> Content) -> some View {
|
|
206
|
+
modifier(TransparentNonAnimatableFullScreenModifier(isPresented: isPresented, fullScreenContent: content))
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private struct TransparentNonAnimatableFullScreenModifier<FullScreenContent: View>: ViewModifier {
|
|
211
|
+
|
|
212
|
+
@Binding var isPresented: Bool
|
|
213
|
+
let fullScreenContent: () -> (FullScreenContent)
|
|
214
|
+
|
|
215
|
+
func body(content: Content) -> some View {
|
|
216
|
+
if #available(iOS 14.0, *) {
|
|
217
|
+
content
|
|
218
|
+
.valueChanged(value: isPresented, onChange: { isPresented in
|
|
219
|
+
UIView.setAnimationsEnabled(false)
|
|
220
|
+
})
|
|
221
|
+
.fullScreenCover(isPresented: $isPresented, content: {
|
|
222
|
+
ZStack {
|
|
223
|
+
fullScreenContent()
|
|
224
|
+
}
|
|
225
|
+
.background(FullScreenCoverBackgroundRemovalView())
|
|
226
|
+
.onAppear {
|
|
227
|
+
if !UIView.areAnimationsEnabled {
|
|
228
|
+
UIView.setAnimationsEnabled(true)
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
.onDisappear {
|
|
232
|
+
if !UIView.areAnimationsEnabled {
|
|
233
|
+
UIView.setAnimationsEnabled(true)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
})
|
|
237
|
+
} else {
|
|
238
|
+
content
|
|
239
|
+
.valueChanged(value: isPresented, onChange: { isPresented in
|
|
240
|
+
UIView.setAnimationsEnabled(false)
|
|
241
|
+
})
|
|
242
|
+
.sheet(isPresented: $isPresented, content: {
|
|
243
|
+
ZStack {
|
|
244
|
+
fullScreenContent()
|
|
245
|
+
}
|
|
246
|
+
.background(FullScreenCoverBackgroundRemovalView())
|
|
247
|
+
.onAppear {
|
|
248
|
+
if !UIView.areAnimationsEnabled {
|
|
249
|
+
UIView.setAnimationsEnabled(true)
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
.onDisappear {
|
|
253
|
+
if !UIView.areAnimationsEnabled {
|
|
254
|
+
UIView.setAnimationsEnabled(true)
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
private struct FullScreenCoverBackgroundRemovalView: UIViewRepresentable {
|
|
264
|
+
|
|
265
|
+
private class BackgroundRemovalView: UIView {
|
|
266
|
+
|
|
267
|
+
override func didMoveToWindow() {
|
|
268
|
+
super.didMoveToWindow()
|
|
269
|
+
|
|
270
|
+
superview?.superview?.backgroundColor = .clear
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
func makeUIView(context: Context) -> UIView {
|
|
276
|
+
return BackgroundRemovalView()
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
func updateUIView(_ uiView: UIView, context: Context) {}
|
|
280
|
+
|
|
281
|
+
}
|
|
@@ -34,7 +34,7 @@ public struct SwipeCellModifier: ViewModifier {
|
|
|
34
34
|
}.frame(width: cellWidth)
|
|
35
35
|
.edgesIgnoringSafeArea(.horizontal)
|
|
36
36
|
.clipped()
|
|
37
|
-
.
|
|
37
|
+
.valueChanged(value: self.currentUserInteractionCellID) { _ in
|
|
38
38
|
if let currentDragCellID = self.currentUserInteractionCellID, currentDragCellID != self.id && self.openSideLock != nil {
|
|
39
39
|
// if this cell has an open side area and is not the cell being dragged, close the cell
|
|
40
40
|
self.setOffsetX(value: 0)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import SwiftUI
|
|
3
|
+
|
|
4
|
+
public struct Switch: View{
|
|
5
|
+
@Binding var value: Bool
|
|
6
|
+
var disabled: Bool
|
|
7
|
+
var onChange: ((Bool)->Void)?
|
|
8
|
+
|
|
9
|
+
public init(_ value: Binding<Bool>,disabled: Bool = false, onChange: ((Bool)->Void)? = nil){
|
|
10
|
+
self._value = value
|
|
11
|
+
self.disabled = disabled
|
|
12
|
+
self.onChange = onChange
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
public var body: some View {
|
|
17
|
+
SwiftUI.Button(action: {
|
|
18
|
+
withAnimation{
|
|
19
|
+
value.toggle()
|
|
20
|
+
onChange?(value)
|
|
21
|
+
}
|
|
22
|
+
}){
|
|
23
|
+
HStack{
|
|
24
|
+
HStack {
|
|
25
|
+
}
|
|
26
|
+
.frame(width: 6, height: 6)
|
|
27
|
+
.background(value ? Colors.pink03 : Colors.black07)
|
|
28
|
+
.clipShape(Circle())
|
|
29
|
+
.opacity(disabled ? 0.4 : 1)
|
|
30
|
+
}
|
|
31
|
+
.frame(width: 14, height: 14)
|
|
32
|
+
.background(Colors.black01)
|
|
33
|
+
.clipShape(Circle())
|
|
34
|
+
.padding(.leading,5)
|
|
35
|
+
.padding(.trailing,5)
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
.disabled(disabled)
|
|
39
|
+
.frame(width: 40, height: 24, alignment: value == true ? .trailing : .leading)
|
|
40
|
+
.background(value ? Colors.pink03 : Colors.black07)
|
|
41
|
+
.clipShape(Capsule())
|
|
42
|
+
.opacity(disabled ? 0.4 : 1)
|
|
43
|
+
}
|
|
44
|
+
}
|
package/ios/native-kits.podspec
CHANGED
package/package.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import Foundation
|
|
3
|
-
|
|
4
|
-
public enum Radius {
|
|
5
|
-
public static let XXS: CGFloat = 2
|
|
6
|
-
public static let XS: CGFloat = 4
|
|
7
|
-
public static let S: CGFloat = 8
|
|
8
|
-
public static let M: CGFloat = 12
|
|
9
|
-
public static let L: CGFloat = 16
|
|
10
|
-
public static let XL: CGFloat = 24
|
|
11
|
-
}
|
package/ios/Popup/Utils.swift
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import SwiftUI
|
|
4
|
-
import Combine
|
|
5
|
-
|
|
6
|
-
final class DispatchWorkHolder {
|
|
7
|
-
var work: DispatchWorkItem?
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
final class ClassReference<T> {
|
|
11
|
-
var value: T
|
|
12
|
-
|
|
13
|
-
init(_ value: T) {
|
|
14
|
-
self.value = value
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
extension View {
|
|
19
|
-
|
|
20
|
-
@ViewBuilder
|
|
21
|
-
func valueChanged<T: Equatable>(value: T, onChange: @escaping (T) -> Void) -> some View {
|
|
22
|
-
if #available(iOS 14.0, tvOS 14.0, macOS 11.0, watchOS 7.0, *) {
|
|
23
|
-
self.onChange(of: value, perform: onChange)
|
|
24
|
-
} else {
|
|
25
|
-
self.onReceive(Just(value)) { value in
|
|
26
|
-
onChange(value)
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public extension View {
|
|
33
|
-
@ViewBuilder
|
|
34
|
-
func applyIf<T: View>(_ condition: Bool, apply: (Self) -> T) -> some View {
|
|
35
|
-
if condition {
|
|
36
|
-
apply(self)
|
|
37
|
-
} else {
|
|
38
|
-
self
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
@ViewBuilder
|
|
43
|
-
func addTapIfNotTV(if condition: Bool, onTap: @escaping ()->()) -> some View {
|
|
44
|
-
#if os(tvOS)
|
|
45
|
-
self
|
|
46
|
-
#else
|
|
47
|
-
if condition {
|
|
48
|
-
self.simultaneousGesture(
|
|
49
|
-
TapGesture().onEnded {
|
|
50
|
-
onTap()
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
} else {
|
|
54
|
-
self
|
|
55
|
-
}
|
|
56
|
-
#endif
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
struct FrameGetter: ViewModifier {
|
|
61
|
-
|
|
62
|
-
@Binding var frame: CGRect
|
|
63
|
-
|
|
64
|
-
func body(content: Content) -> some View {
|
|
65
|
-
content
|
|
66
|
-
.background(
|
|
67
|
-
GeometryReader { proxy -> AnyView in
|
|
68
|
-
DispatchQueue.main.async {
|
|
69
|
-
let rect = proxy.frame(in: .global)
|
|
70
|
-
// This avoids an infinite layout loop
|
|
71
|
-
if rect.integral != self.frame.integral {
|
|
72
|
-
self.frame = rect
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return AnyView(EmptyView())
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
extension View {
|
|
82
|
-
public func frameGetter(_ frame: Binding<CGRect>) -> some View {
|
|
83
|
-
modifier(FrameGetter(frame: frame))
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
struct AnimationCompletionObserverModifier<Value>: AnimatableModifier where Value: VectorArithmetic {
|
|
88
|
-
|
|
89
|
-
/// While animating, SwiftUI changes the old input value to the new target value using this property. This value is set to the old value until the animation completes.
|
|
90
|
-
var animatableData: Value {
|
|
91
|
-
didSet {
|
|
92
|
-
notifyCompletionIfFinished()
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/// The target value for which we're observing. This value is directly set once the animation starts. During animation, `animatableData` will hold the oldValue and is only updated to the target value once the animation completes.
|
|
97
|
-
private var targetValue: Value
|
|
98
|
-
|
|
99
|
-
/// The completion callback which is called once the animation completes.
|
|
100
|
-
private var completion: () -> Void
|
|
101
|
-
|
|
102
|
-
init(observedValue: Value, completion: @escaping () -> Void) {
|
|
103
|
-
self.completion = completion
|
|
104
|
-
self.animatableData = observedValue
|
|
105
|
-
targetValue = observedValue
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/// Verifies whether the current animation is finished and calls the completion callback if true.
|
|
109
|
-
private func notifyCompletionIfFinished() {
|
|
110
|
-
guard animatableData == targetValue else { return }
|
|
111
|
-
|
|
112
|
-
/// Dispatching is needed to take the next runloop for the completion callback.
|
|
113
|
-
/// This prevents errors like "Modifying state during view update, this will cause undefined behavior."
|
|
114
|
-
DispatchQueue.main.async {
|
|
115
|
-
self.completion()
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
func body(content: Content) -> some View {
|
|
120
|
-
/// We're not really modifying the view so we can directly return the original input value.
|
|
121
|
-
return content
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
extension View {
|
|
126
|
-
|
|
127
|
-
/// Calls the completion handler whenever an animation on the given value completes.
|
|
128
|
-
/// - Parameters:
|
|
129
|
-
/// - value: The value to observe for animations.
|
|
130
|
-
/// - completion: The completion callback to call once the animation completes.
|
|
131
|
-
/// - Returns: A modified `View` instance with the observer attached.
|
|
132
|
-
func onAnimationCompleted<Value: VectorArithmetic>(for value: Value, completion: @escaping () -> Void) -> ModifiedContent<Self, AnimationCompletionObserverModifier<Value>> {
|
|
133
|
-
return modifier(AnimationCompletionObserverModifier(observedValue: value, completion: completion))
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
#if os(iOS)
|
|
138
|
-
|
|
139
|
-
extension UIApplication {
|
|
140
|
-
var keyWindow: UIWindow? {
|
|
141
|
-
connectedScenes
|
|
142
|
-
.compactMap {
|
|
143
|
-
$0 as? UIWindowScene
|
|
144
|
-
}
|
|
145
|
-
.flatMap {
|
|
146
|
-
$0.windows
|
|
147
|
-
}
|
|
148
|
-
.first {
|
|
149
|
-
$0.isKeyWindow
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
private struct SafeAreaInsetsKey: EnvironmentKey {
|
|
155
|
-
static var defaultValue: EdgeInsets {
|
|
156
|
-
UIApplication.shared.keyWindow?.safeAreaInsets.swiftUiInsets ?? EdgeInsets()
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
extension EnvironmentValues {
|
|
161
|
-
var safeAreaInsets: EdgeInsets {
|
|
162
|
-
self[SafeAreaInsetsKey.self]
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private extension UIEdgeInsets {
|
|
167
|
-
var swiftUiInsets: EdgeInsets {
|
|
168
|
-
EdgeInsets(top: top, leading: left, bottom: bottom, trailing: right)
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
#else
|
|
173
|
-
|
|
174
|
-
private struct SafeAreaInsetsKey: EnvironmentKey {
|
|
175
|
-
static var defaultValue: EdgeInsets {
|
|
176
|
-
EdgeInsets()
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
extension EnvironmentValues {
|
|
181
|
-
var safeAreaInsets: EdgeInsets {
|
|
182
|
-
self[SafeAreaInsetsKey.self]
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
#endif
|