@momo-kits/native-kits 0.0.1-beta.5 → 0.89.1-2
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/README.md +1 -0
- package/android/.gradle/8.0/checksums/checksums.lock +0 -0
- package/android/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/8.0/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.0/gc.properties +0 -0
- package/android/.gradle/config.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/gradle.xml +12 -0
- package/android/.idea/migrations.xml +10 -0
- package/android/.idea/misc.xml +10 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/.idea/workspace.xml +50 -0
- package/android/build.gradle +35 -69
- package/android/local.properties +8 -0
- package/android/proguard-rules.pro +21 -0
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/java/com/momoplatform/nativekits/foundations/Button.kt +16 -0
- package/android/src/main/java/com/momoplatform/nativekits/libs/Logo.kt +63 -0
- package/android/src/main/java/com/momoplatform/nativekits/libs/TrustBanner.kt +246 -0
- package/android/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
- package/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
- package/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
- package/android/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/values/colors.xml +10 -0
- package/android/src/main/res/values/strings.xml +3 -0
- package/android/src/main/res/values/themes.xml +3 -0
- package/android/src/main/res/values-night/themes.xml +3 -0
- package/android/src/main/res/xml/backup_rules.xml +13 -0
- package/android/src/main/res/xml/data_extraction_rules.xml +19 -0
- package/build.gradle.kts +18 -0
- package/compose/build.gradle.kts +82 -0
- package/compose/src/androidMain/AndroidManifest.xml +2 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/utils/Platform.kt +3 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/utils/SetMaskFilter.kt +8 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/utils/Utils.android.kt +14 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Components.kt +194 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +197 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +133 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +62 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +27 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +288 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +80 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +42 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +126 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +299 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +246 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +223 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +244 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +281 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PromotionPopup.kt +72 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +65 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +64 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +63 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +73 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +42 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +150 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +13 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +173 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +242 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +50 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1321 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Platform.kt +3 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/SetMaskFilter.kt +5 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +97 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/utils/Platform.kt +3 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/utils/SetMaskFilter.kt +9 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/utils/Utils.ios.kt +18 -0
- package/gradle.properties +19 -0
- package/gradlew +240 -0
- package/gradlew.bat +91 -0
- package/ios/Button/Button.swift +9 -2
- package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +126 -0
- package/ios/Colors+Radius+Spacing/Colors.swift +21 -19
- package/ios/Input/Input.swift +1 -0
- package/ios/OTPKeyboard/KeyboardButton.swift +12 -4
- package/ios/Popup/PopupDisplay.swift +72 -81
- package/ios/Popup/PopupInput.swift +96 -0
- package/ios/Popup/PopupPromotion.swift +52 -0
- package/ios/ScrollIndicator/ScrollIndicator.swift +79 -0
- package/ios/Template/Logo/Logo.swift +75 -0
- package/ios/Template/TrustBanner/TrustBanner.swift +189 -0
- package/ios/native-kits.podspec +1 -1
- package/local.properties +8 -0
- package/package.json +6 -6
- package/publish.sh +1 -10
- package/settings.gradle.kts +41 -0
- package/android/gradle.properties +0 -5
- package/android/src/main/java/com/momoplatform/nativekits/NativeKitsPackage.kt +0 -17
- package/android/src/main/java/com/momoplatform/nativekits/NativeKitsViewManager.kt +0 -20
- package/example/ios/Example/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -63
- package/example/ios/Example/Assets.xcassets/Background.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Border.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Card.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Contents.json +0 -6
- package/example/ios/Example/Assets.xcassets/Error.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Primary.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/PrimaryDark.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/PrimaryLight.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Secondary.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Success.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Text.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/TextSecondary.colorset/Contents.json +0 -38
- package/example/ios/Example/Assets.xcassets/Warning.colorset/Contents.json +0 -38
- package/example/ios/Example/ComponentDetail.swift +0 -35
- package/example/ios/Example/ComponentItem.swift +0 -24
- package/example/ios/Example/ComponentModel.swift +0 -38
- package/example/ios/Example/ContentView.swift +0 -39
- package/example/ios/Example/Example.entitlements +0 -10
- package/example/ios/Example/Foundation/ButtonDemo.swift +0 -80
- package/example/ios/Example/Foundation/ImageDemo.swift +0 -43
- package/example/ios/Example/Foundation/Popup/ActionSheets.swift +0 -136
- package/example/ios/Example/Foundation/Popup/Floats.swift +0 -127
- package/example/ios/Example/Foundation/Popup/Popups.swift +0 -51
- package/example/ios/Example/Foundation/PopupDemo.swift +0 -389
- package/example/ios/Example/Foundation/TextInputDemo.swift +0 -36
- package/example/ios/Example/Foundation/TypographyDemo.swift +0 -53
- package/example/ios/Example/Foundation.swift +0 -26
- package/example/ios/Example/Info.plist +0 -18
- package/example/ios/Example/Library/CheckboxDemo.swift +0 -19
- package/example/ios/Example/Library/SwipeableDemo.swift +0 -105
- package/example/ios/Example/Library/SwitchDemo.swift +0 -19
- package/example/ios/Example/Library.swift +0 -26
- package/example/ios/Example/Main.swift +0 -27
- package/example/ios/Example/Overview.swift +0 -20
- package/example/ios/Example/Preview Content/Preview Assets.xcassets/Contents.json +0 -6
- package/example/ios/Example/Resource/SFProText-Black.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Bold.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Heavy.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Light.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Medium.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Regular.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Semibold.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Thin.ttf +0 -0
- package/example/ios/Example/Resource/SFProText-Ultralight.ttf +0 -0
- package/example/ios/Example/Resource/foundation.json +0 -33
- package/example/ios/Example/Resource/library.json +0 -18
- package/example/ios/Example/Utils.swift +0 -30
- package/example/ios/Example/ViewModifier/DarkViewModifier.swift +0 -22
- package/example/ios/Example.xcodeproj/project.pbxproj +0 -581
- package/example/ios/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/example/ios/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/example/ios/Example.xcodeproj/project.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/example/ios/Example.xcworkspace/contents.xcworkspacedata +0 -10
- package/example/ios/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
- package/example/ios/Podfile +0 -7
- package/example/ios/Podfile.lock +0 -35
- package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +0 -37
- package/example/ios/Pods/Manifest.lock +0 -35
- package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -2047
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -46
- package/example/ios/Pods/SDWebImage/LICENSE +0 -20
- package/example/ios/Pods/SDWebImage/README.md +0 -352
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.h +0 -340
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.m +0 -172
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +0 -63
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +0 -165
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h +0 -67
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +0 -120
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +0 -114
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +0 -392
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h +0 -112
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m +0 -420
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h +0 -23
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +0 -133
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h +0 -168
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.m +0 -79
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h +0 -110
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +0 -540
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h +0 -145
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +0 -326
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h +0 -73
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +0 -256
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h +0 -19
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +0 -58
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h +0 -23
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.m +0 -98
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +0 -450
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +0 -1030
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +0 -153
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +0 -68
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +0 -156
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +0 -138
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h +0 -81
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m +0 -556
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h +0 -297
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m +0 -26
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +0 -153
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +0 -822
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.h +0 -58
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.m +0 -130
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h +0 -36
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m +0 -28
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h +0 -22
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +0 -58
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h +0 -28
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +0 -127
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h +0 -25
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m +0 -101
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +0 -58
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +0 -807
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h +0 -30
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +0 -420
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h +0 -146
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +0 -170
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h +0 -40
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +0 -123
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h +0 -241
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m +0 -331
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h +0 -78
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m +0 -158
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h +0 -32
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m +0 -39
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h +0 -36
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m +0 -39
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.h +0 -95
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m +0 -17
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +0 -352
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +0 -149
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +0 -314
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +0 -658
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +0 -113
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +0 -60
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +0 -49
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +0 -55
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +0 -191
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +0 -722
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +0 -69
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +0 -71
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +0 -69
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +0 -73
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +0 -32
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +0 -16
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.h +0 -115
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +0 -275
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h +0 -290
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +0 -775
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +0 -27
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m +0 -14
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h +0 -72
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m +0 -59
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h +0 -143
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m +0 -303
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h +0 -131
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m +0 -194
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.h +0 -387
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.m +0 -234
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h +0 -24
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m +0 -23
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h +0 -46
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +0 -60
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h +0 -26
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m +0 -22
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h +0 -27
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +0 -47
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +0 -89
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +0 -221
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h +0 -80
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.m +0 -47
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h +0 -146
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +0 -824
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h +0 -129
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.m +0 -76
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.h +0 -194
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.m +0 -67
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +0 -110
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +0 -446
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +0 -48
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +0 -82
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +0 -24
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +0 -42
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h +0 -14
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +0 -29
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h +0 -21
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m +0 -92
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h +0 -18
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m +0 -32
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h +0 -29
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +0 -227
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h +0 -19
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.m +0 -127
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h +0 -23
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +0 -164
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h +0 -21
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.m +0 -83
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +0 -39
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h +0 -122
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m +0 -13
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h +0 -20
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.m +0 -79
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h +0 -19
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDmetamacros.h +0 -667
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h +0 -18
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m +0 -42
- package/example/ios/Pods/SDWebImage/WebImage/SDWebImage.h +0 -89
- package/example/ios/Pods/SDWebImageSwiftUI/LICENSE +0 -19
- package/example/ios/Pods/SDWebImageSwiftUI/README.md +0 -690
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +0 -870
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Backport.swift +0 -59
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/OnChange.swift +0 -52
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Overlay.swift +0 -124
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/StateObject.swift +0 -151
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Image.swift +0 -78
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +0 -132
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImagePlayer.swift +0 -122
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +0 -133
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +0 -82
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +0 -97
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +0 -114
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +0 -64
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +0 -92
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Transition/Transition.swift +0 -93
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +0 -509
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Module/SDWebImageSwiftUI.h +0 -15
- package/example/ios/Pods/SkeletonUI/LICENSE +0 -21
- package/example/ios/Pods/SkeletonUI/README.md +0 -137
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AngleInteractor.swift +0 -29
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AnglePresenter.swift +0 -7
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Animation/AnimationInteractor.swift +0 -56
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearanceInteractor.swift +0 -58
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearancePresenter.swift +0 -5
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ClosedRange+Normalize.swift +0 -16
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Image+OptionalType.swift +0 -102
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ModifiedContent+SkeletonModifier.swift +0 -26
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Optional+OptionalType.swift +0 -5
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/SecureField+OptionalType.swift +0 -19
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Text+OptionalType.swift +0 -27
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/TextField+OptionalType.swift +0 -35
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Toggle+OptionalType.swift +0 -29
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/UnitPoint+Angle.swift +0 -8
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/View+SkeletonModifier.swift +0 -8
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Modifiers/SkeletonModifier.swift +0 -52
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilineInteractor.swift +0 -41
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilinePresenter.swift +0 -9
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityInteractor.swift +0 -29
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityPresenter.swift +0 -7
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionInteractor.swift +0 -29
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionPresenter.swift +0 -7
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Protocols/OptionalType.swift +0 -4
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusInteractor.swift +0 -29
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusPresenter.swift +0 -7
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapeInteractor.swift +0 -33
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapePresenter.swift +0 -5
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonForEach.swift +0 -20
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonInteractor.swift +0 -27
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonList.swift +0 -20
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonPresenter.swift +0 -15
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonShape.swift +0 -64
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonView.swift +0 -25
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-dummy.m +0 -5
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-prefix.pch +0 -12
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-umbrella.h +0 -16
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +0 -15
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.modulemap +0 -6
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +0 -15
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +0 -75
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +0 -119
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m +0 -5
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h +0 -16
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +0 -15
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap +0 -6
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +0 -15
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +0 -5
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +0 -12
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +0 -75
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +0 -14
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +0 -6
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +0 -14
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-dummy.m +0 -5
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-prefix.pch +0 -12
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-umbrella.h +0 -17
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.debug.xcconfig +0 -17
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.modulemap +0 -6
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.release.xcconfig +0 -17
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-dummy.m +0 -5
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-prefix.pch +0 -12
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-umbrella.h +0 -16
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.debug.xcconfig +0 -12
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.modulemap +0 -6
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.release.xcconfig +0 -12
- package/ios/Extensions/View++.swift +0 -9
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* This file is part of the SDWebImage package.
|
|
3
|
-
* (c) DreamPiggy <lizhuoli1126@126.com>
|
|
4
|
-
*
|
|
5
|
-
* For the full copyright and license information, please view the LICENSE
|
|
6
|
-
* file that was distributed with this source code.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import SwiftUI
|
|
10
|
-
import SDWebImage
|
|
11
|
-
|
|
12
|
-
/// Data Binding Object, only properties in this object can support changes from user with @State and refresh
|
|
13
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
14
|
-
final class WebImageModel : ObservableObject {
|
|
15
|
-
/// URL image
|
|
16
|
-
@Published var url: URL?
|
|
17
|
-
@Published var options: SDWebImageOptions = []
|
|
18
|
-
@Published var context: [SDWebImageContextOption : Any]? = nil
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/// Completion Handler Binding Object, supports dynamic @State changes
|
|
22
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
23
|
-
final class WebImageHandler: ObservableObject {
|
|
24
|
-
// Completion Handler
|
|
25
|
-
@Published var successBlock: ((PlatformImage, Data?, SDImageCacheType) -> Void)?
|
|
26
|
-
@Published var failureBlock: ((Error) -> Void)?
|
|
27
|
-
@Published var progressBlock: ((Int, Int) -> Void)?
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/// Configuration Binding Object, supports dynamic @State changes
|
|
31
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
32
|
-
final class WebImageConfiguration: ObservableObject {
|
|
33
|
-
var retryOnAppear: Bool = true
|
|
34
|
-
var cancelOnDisappear: Bool = true
|
|
35
|
-
var maxBufferSize: UInt?
|
|
36
|
-
var customLoopCount: UInt?
|
|
37
|
-
var runLoopMode: RunLoop.Mode = .common
|
|
38
|
-
var pausable: Bool = true
|
|
39
|
-
var purgeable: Bool = false
|
|
40
|
-
var playbackRate: Double = 1.0
|
|
41
|
-
var playbackMode: SDAnimatedImagePlaybackMode = .normal
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/// A Image View type to load image from url. Supports static/animated image format.
|
|
45
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
46
|
-
public struct WebImage : View {
|
|
47
|
-
var configurations: [(Image) -> Image] = []
|
|
48
|
-
|
|
49
|
-
var placeholder: AnyView?
|
|
50
|
-
|
|
51
|
-
/// A Binding to control the animation. You can bind external logic to control the animation status.
|
|
52
|
-
/// True to start animation, false to stop animation.
|
|
53
|
-
@Binding public var isAnimating: Bool
|
|
54
|
-
|
|
55
|
-
/// A observed object to pass through the image model to manager
|
|
56
|
-
@ObservedObject var imageModel: WebImageModel
|
|
57
|
-
|
|
58
|
-
/// A observed object to pass through the image handler to manager
|
|
59
|
-
@ObservedObject var imageHandler = WebImageHandler()
|
|
60
|
-
|
|
61
|
-
/// A observed object to pass through the image configuration to player
|
|
62
|
-
@ObservedObject var imageConfiguration = WebImageConfiguration()
|
|
63
|
-
|
|
64
|
-
@ObservedObject var indicatorStatus : IndicatorStatus
|
|
65
|
-
|
|
66
|
-
// FIXME: Use SwiftUI StateObject and remove onPlatformAppear once drop iOS 13 support
|
|
67
|
-
@Backport.StateObject var imagePlayer = ImagePlayer()
|
|
68
|
-
|
|
69
|
-
// FIXME: Use SwiftUI StateObject and remove onPlatformAppear once drop iOS 13 support
|
|
70
|
-
@Backport.StateObject var imageManager : ImageManager
|
|
71
|
-
|
|
72
|
-
/// Create a web image with url, placeholder, custom options and context. Optional can support animated image using Binding.
|
|
73
|
-
/// - Parameter url: The image url
|
|
74
|
-
/// - Parameter options: The options to use when downloading the image. See `SDWebImageOptions` for the possible values.
|
|
75
|
-
/// - Parameter context: A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
|
|
76
|
-
/// - Parameter isAnimating: The binding for animation control. The binding value should be `true` when initialized to setup the correct animated image class. If not, you must provide the `.animatedImageClass` explicitly. When the animation started, this binding can been used to start / stop the animation.
|
|
77
|
-
public init(url: URL?, options: SDWebImageOptions = [], context: [SDWebImageContextOption : Any]? = nil, isAnimating: Binding<Bool>) {
|
|
78
|
-
self._isAnimating = isAnimating
|
|
79
|
-
var context = context ?? [:]
|
|
80
|
-
// provide animated image class if the initialized `isAnimating` is true, user can still custom the image class if they want
|
|
81
|
-
if isAnimating.wrappedValue {
|
|
82
|
-
if context[.animatedImageClass] == nil {
|
|
83
|
-
context[.animatedImageClass] = SDAnimatedImage.self
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
let imageModel = WebImageModel()
|
|
87
|
-
imageModel.url = url
|
|
88
|
-
imageModel.options = options
|
|
89
|
-
imageModel.context = context
|
|
90
|
-
_imageModel = ObservedObject(wrappedValue: imageModel)
|
|
91
|
-
let imageManager = ImageManager()
|
|
92
|
-
_imageManager = Backport.StateObject(wrappedValue: imageManager)
|
|
93
|
-
_indicatorStatus = ObservedObject(wrappedValue: imageManager.indicatorStatus)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/// Create a web image with url, placeholder, custom options and context.
|
|
97
|
-
/// - Parameter url: The image url
|
|
98
|
-
/// - Parameter options: The options to use when downloading the image. See `SDWebImageOptions` for the possible values.
|
|
99
|
-
/// - Parameter context: A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold.
|
|
100
|
-
public init(url: URL?, options: SDWebImageOptions = [], context: [SDWebImageContextOption : Any]? = nil) {
|
|
101
|
-
self.init(url: url, options: options, context: context, isAnimating: .constant(true))
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
public var body: some View {
|
|
105
|
-
// Container
|
|
106
|
-
return ZStack {
|
|
107
|
-
// This empty Image is used to receive container's level appear/disappear to start/stop player, reduce CPU usage
|
|
108
|
-
Image(platformImage: .empty)
|
|
109
|
-
.onAppear {
|
|
110
|
-
self.appearAction()
|
|
111
|
-
}
|
|
112
|
-
.onDisappear {
|
|
113
|
-
self.disappearAction()
|
|
114
|
-
}
|
|
115
|
-
// Render Logic for actual animated image frame or static image
|
|
116
|
-
if imageManager.image != nil && imageModel.url == imageManager.currentURL {
|
|
117
|
-
if isAnimating && !imageManager.isIncremental {
|
|
118
|
-
setupPlayer()
|
|
119
|
-
} else {
|
|
120
|
-
displayImage()
|
|
121
|
-
}
|
|
122
|
-
} else {
|
|
123
|
-
// Load Logic
|
|
124
|
-
setupPlaceholder()
|
|
125
|
-
.onPlatformAppear(appear: {
|
|
126
|
-
self.setupManager()
|
|
127
|
-
if (self.imageManager.error == nil) {
|
|
128
|
-
// Load remote image when first appear
|
|
129
|
-
self.imageManager.load(url: imageModel.url, options: imageModel.options, context: imageModel.context)
|
|
130
|
-
}
|
|
131
|
-
guard self.imageConfiguration.retryOnAppear else { return }
|
|
132
|
-
// When using prorgessive loading, the new partial image will cause onAppear. Filter this case
|
|
133
|
-
if self.imageManager.error != nil && !self.imageManager.isIncremental {
|
|
134
|
-
self.imageManager.load(url: imageModel.url, options: imageModel.options, context: imageModel.context)
|
|
135
|
-
}
|
|
136
|
-
}, disappear: {
|
|
137
|
-
guard self.imageConfiguration.cancelOnDisappear else { return }
|
|
138
|
-
// When using prorgessive loading, the previous partial image will cause onDisappear. Filter this case
|
|
139
|
-
if self.imageManager.error != nil && !self.imageManager.isIncremental {
|
|
140
|
-
self.imageManager.cancel()
|
|
141
|
-
}
|
|
142
|
-
})
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/// Configure the platform image into the SwiftUI rendering image
|
|
148
|
-
func configure(image: PlatformImage) -> some View {
|
|
149
|
-
// Actual rendering SwiftUI image
|
|
150
|
-
let result: Image
|
|
151
|
-
// NSImage works well with SwiftUI, include Vector and EXIF images.
|
|
152
|
-
#if os(macOS)
|
|
153
|
-
result = Image(nsImage: image)
|
|
154
|
-
#else
|
|
155
|
-
// Fix the SwiftUI.Image rendering issue, like when use EXIF UIImage, the `.aspectRatio` does not works. SwiftUI's Bug :). See #101
|
|
156
|
-
// Always prefers `Image(decorative:scale:)` but not `Image(uiImage:scale:) to avoid bug on `TabbarItem`. See #175
|
|
157
|
-
var cgImage: CGImage?
|
|
158
|
-
// Case 1: Vector Image, draw bitmap image
|
|
159
|
-
if image.sd_isVector {
|
|
160
|
-
// ensure CGImage is nil
|
|
161
|
-
if image.cgImage == nil {
|
|
162
|
-
// draw vector into bitmap with the screen scale (behavior like AppKit)
|
|
163
|
-
#if os(iOS) || os(tvOS)
|
|
164
|
-
let scale = UIScreen.main.scale
|
|
165
|
-
#else
|
|
166
|
-
let scale = WKInterfaceDevice.current().screenScale
|
|
167
|
-
#endif
|
|
168
|
-
UIGraphicsBeginImageContextWithOptions(image.size, false, scale)
|
|
169
|
-
image.draw(at: .zero)
|
|
170
|
-
cgImage = UIGraphicsGetImageFromCurrentImageContext()?.cgImage
|
|
171
|
-
UIGraphicsEndImageContext()
|
|
172
|
-
} else {
|
|
173
|
-
cgImage = image.cgImage
|
|
174
|
-
}
|
|
175
|
-
} else {
|
|
176
|
-
// Case 2: EXIF Image and Bitmap Image, prefers CGImage
|
|
177
|
-
cgImage = image.cgImage
|
|
178
|
-
}
|
|
179
|
-
// If we have CGImage, use CGImage based API, else use UIImage based API
|
|
180
|
-
if let cgImage = cgImage {
|
|
181
|
-
let scale = image.scale
|
|
182
|
-
let orientation = image.imageOrientation.toSwiftUI
|
|
183
|
-
result = Image(decorative: cgImage, scale: scale, orientation: orientation)
|
|
184
|
-
} else {
|
|
185
|
-
result = Image(uiImage: image)
|
|
186
|
-
}
|
|
187
|
-
#endif
|
|
188
|
-
|
|
189
|
-
// Should not use `EmptyView`, which does not respect to the container's frame modifier
|
|
190
|
-
// Using a empty image instead for better compatible
|
|
191
|
-
return configurations.reduce(result) { (previous, configuration) in
|
|
192
|
-
configuration(previous)
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/// Image Manager status
|
|
197
|
-
func setupManager() {
|
|
198
|
-
self.imageManager.successBlock = self.imageHandler.successBlock
|
|
199
|
-
self.imageManager.failureBlock = self.imageHandler.failureBlock
|
|
200
|
-
self.imageManager.progressBlock = self.imageHandler.progressBlock
|
|
201
|
-
if imageModel.url != imageManager.currentURL {
|
|
202
|
-
imageManager.cancel()
|
|
203
|
-
imageManager.image = nil
|
|
204
|
-
imageManager.imageData = nil
|
|
205
|
-
imageManager.cacheType = .none
|
|
206
|
-
imageManager.error = nil
|
|
207
|
-
imageManager.isIncremental = false
|
|
208
|
-
imageManager.indicatorStatus.isLoading = false
|
|
209
|
-
imageManager.indicatorStatus.progress = 0
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/// Container level to resume animation when appear
|
|
214
|
-
func appearAction() {
|
|
215
|
-
self.imagePlayer.startPlaying()
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/// Container level to stop animation when disappear
|
|
219
|
-
func disappearAction() {
|
|
220
|
-
if self.imageConfiguration.pausable {
|
|
221
|
-
self.imagePlayer.pausePlaying()
|
|
222
|
-
} else {
|
|
223
|
-
self.imagePlayer.stopPlaying()
|
|
224
|
-
}
|
|
225
|
-
if self.imageConfiguration.purgeable {
|
|
226
|
-
self.imagePlayer.clearFrameBuffer()
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/// Static Image Display
|
|
231
|
-
func displayImage() -> some View {
|
|
232
|
-
disappearAction()
|
|
233
|
-
if let currentFrame = imagePlayer.currentFrame {
|
|
234
|
-
return configure(image: currentFrame)
|
|
235
|
-
} else {
|
|
236
|
-
return configure(image: imageManager.image!)
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/// Animated Image Support
|
|
241
|
-
func setupPlayer() -> some View {
|
|
242
|
-
let shouldResetPlayer: Bool
|
|
243
|
-
// Image compare should use ===/!==, which is faster than isEqual:
|
|
244
|
-
if let animatedImage = imagePlayer.currentAnimatedImage, animatedImage !== imageManager.image! {
|
|
245
|
-
shouldResetPlayer = true
|
|
246
|
-
} else {
|
|
247
|
-
shouldResetPlayer = false
|
|
248
|
-
}
|
|
249
|
-
if !shouldResetPlayer {
|
|
250
|
-
imagePlayer.startPlaying()
|
|
251
|
-
}
|
|
252
|
-
if let currentFrame = imagePlayer.currentFrame, !shouldResetPlayer {
|
|
253
|
-
// Bind frame index to ID to ensure onDisappear called with sync
|
|
254
|
-
return configure(image: currentFrame)
|
|
255
|
-
.id("\(imageModel.url!):\(imagePlayer.currentFrameIndex)")
|
|
256
|
-
.onAppear {}
|
|
257
|
-
} else {
|
|
258
|
-
return configure(image: imageManager.image!)
|
|
259
|
-
.id("\(imageModel.url!):\(imagePlayer.currentFrameIndex)")
|
|
260
|
-
.onAppear {
|
|
261
|
-
if shouldResetPlayer {
|
|
262
|
-
// Clear previous status
|
|
263
|
-
self.imagePlayer.stopPlaying()
|
|
264
|
-
self.imagePlayer.player = nil
|
|
265
|
-
self.imagePlayer.currentFrame = nil;
|
|
266
|
-
self.imagePlayer.currentFrameIndex = 0;
|
|
267
|
-
self.imagePlayer.currentLoopCount = 0;
|
|
268
|
-
}
|
|
269
|
-
if let animatedImage = imageManager.image as? PlatformImage & SDAnimatedImageProvider {
|
|
270
|
-
self.imagePlayer.customLoopCount = self.imageConfiguration.customLoopCount
|
|
271
|
-
self.imagePlayer.maxBufferSize = self.imageConfiguration.maxBufferSize
|
|
272
|
-
self.imagePlayer.runLoopMode = self.imageConfiguration.runLoopMode
|
|
273
|
-
self.imagePlayer.playbackMode = self.imageConfiguration.playbackMode
|
|
274
|
-
self.imagePlayer.playbackRate = self.imageConfiguration.playbackRate
|
|
275
|
-
// Setup new player
|
|
276
|
-
self.imagePlayer.setupPlayer(animatedImage: animatedImage)
|
|
277
|
-
self.imagePlayer.startPlaying()
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/// Placeholder View Support
|
|
284
|
-
func setupPlaceholder() -> some View {
|
|
285
|
-
// Don't use `Group` because it will trigger `.onAppear` and `.onDisappear` when condition view removed, treat placeholder as an entire component
|
|
286
|
-
let result: AnyView
|
|
287
|
-
if let placeholder = placeholder {
|
|
288
|
-
// If use `.delayPlaceholder`, the placeholder is applied after loading failed, hide during loading :)
|
|
289
|
-
if imageModel.options.contains(.delayPlaceholder) && imageManager.error == nil {
|
|
290
|
-
result = AnyView(configure(image: .empty))
|
|
291
|
-
} else {
|
|
292
|
-
result = placeholder
|
|
293
|
-
}
|
|
294
|
-
} else {
|
|
295
|
-
result = AnyView(configure(image: .empty))
|
|
296
|
-
}
|
|
297
|
-
// Custom ID to avoid SwiftUI engine cache the status, and does not call `onAppear` when placeholder not changed (See `ContentView.swift/ContentView2` case)
|
|
298
|
-
// Because we load the image url in placeholder's `onAppear`, it should be called to sync with state changes :)
|
|
299
|
-
return result.id(imageModel.url)
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Layout
|
|
304
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
305
|
-
extension WebImage {
|
|
306
|
-
func configure(_ block: @escaping (Image) -> Image) -> WebImage {
|
|
307
|
-
var result = self
|
|
308
|
-
result.configurations.append(block)
|
|
309
|
-
return result
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/// Configurate this view's image with the specified cap insets and options.
|
|
313
|
-
/// - Parameter capInsets: The values to use for the cap insets.
|
|
314
|
-
/// - Parameter resizingMode: The resizing mode
|
|
315
|
-
public func resizable(
|
|
316
|
-
capInsets: EdgeInsets = EdgeInsets(),
|
|
317
|
-
resizingMode: Image.ResizingMode = .stretch) -> WebImage
|
|
318
|
-
{
|
|
319
|
-
configure { $0.resizable(capInsets: capInsets, resizingMode: resizingMode) }
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/// Configurate this view's rendering mode.
|
|
323
|
-
/// - Parameter renderingMode: The resizing mode
|
|
324
|
-
public func renderingMode(_ renderingMode: Image.TemplateRenderingMode?) -> WebImage {
|
|
325
|
-
configure { $0.renderingMode(renderingMode) }
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/// Configurate this view's image interpolation quality
|
|
329
|
-
/// - Parameter interpolation: The interpolation quality
|
|
330
|
-
public func interpolation(_ interpolation: Image.Interpolation) -> WebImage {
|
|
331
|
-
configure { $0.interpolation(interpolation) }
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/// Configurate this view's image antialiasing
|
|
335
|
-
/// - Parameter isAntialiased: Whether or not to allow antialiasing
|
|
336
|
-
public func antialiased(_ isAntialiased: Bool) -> WebImage {
|
|
337
|
-
configure { $0.antialiased(isAntialiased) }
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// Completion Handler
|
|
342
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
343
|
-
extension WebImage {
|
|
344
|
-
|
|
345
|
-
/// Provide the action when image load fails.
|
|
346
|
-
/// - Parameters:
|
|
347
|
-
/// - action: The action to perform. The first arg is the error during loading. If `action` is `nil`, the call has no effect.
|
|
348
|
-
/// - Returns: A view that triggers `action` when this image load fails.
|
|
349
|
-
public func onFailure(perform action: ((Error) -> Void)? = nil) -> WebImage {
|
|
350
|
-
self.imageHandler.failureBlock = action
|
|
351
|
-
return self
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
/// Provide the action when image load successes.
|
|
355
|
-
/// - Parameters:
|
|
356
|
-
/// - action: The action to perform. The first arg is the loaded image, the second arg is the loaded image data, the third arg is the cache type loaded from. If `action` is `nil`, the call has no effect.
|
|
357
|
-
/// - Returns: A view that triggers `action` when this image load successes.
|
|
358
|
-
public func onSuccess(perform action: ((PlatformImage, Data?, SDImageCacheType) -> Void)? = nil) -> WebImage {
|
|
359
|
-
self.imageHandler.successBlock = action
|
|
360
|
-
return self
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/// Provide the action when image load progress changes.
|
|
364
|
-
/// - Parameters:
|
|
365
|
-
/// - action: The action to perform. The first arg is the received size, the second arg is the total size, all in bytes. If `action` is `nil`, the call has no effect.
|
|
366
|
-
/// - Returns: A view that triggers `action` when this image load successes.
|
|
367
|
-
public func onProgress(perform action: ((Int, Int) -> Void)? = nil) -> WebImage {
|
|
368
|
-
self.imageHandler.progressBlock = action
|
|
369
|
-
return self
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// WebImage Modifier
|
|
374
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
375
|
-
extension WebImage {
|
|
376
|
-
|
|
377
|
-
/// Associate a placeholder when loading image with url
|
|
378
|
-
/// - note: The differences between Placeholder and Indicator, is that placeholder does not supports animation, and return type is different
|
|
379
|
-
/// - Parameter content: A view that describes the placeholder.
|
|
380
|
-
public func placeholder<T>(@ViewBuilder content: () -> T) -> WebImage where T : View {
|
|
381
|
-
var result = self
|
|
382
|
-
result.placeholder = AnyView(content())
|
|
383
|
-
return result
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/// Associate a placeholder image when loading image with url
|
|
387
|
-
/// - note: This placeholder image will apply the same size and resizable from WebImage for convenience. If you don't want this, use the ViewBuilder one above instead
|
|
388
|
-
/// - Parameter image: A Image view that describes the placeholder.
|
|
389
|
-
public func placeholder(_ image: Image) -> WebImage {
|
|
390
|
-
return placeholder {
|
|
391
|
-
configurations.reduce(image) { (previous, configuration) in
|
|
392
|
-
configuration(previous)
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
/// Control the behavior to retry the failed loading when view become appears again
|
|
398
|
-
/// - Parameter flag: Whether or not to retry the failed loading
|
|
399
|
-
public func retryOnAppear(_ flag: Bool) -> WebImage {
|
|
400
|
-
self.imageConfiguration.retryOnAppear = flag
|
|
401
|
-
return self
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
/// Control the behavior to cancel the pending loading when view become disappear again
|
|
405
|
-
/// - Parameter flag: Whether or not to cancel the pending loading
|
|
406
|
-
public func cancelOnDisappear(_ flag: Bool) -> WebImage {
|
|
407
|
-
self.imageConfiguration.cancelOnDisappear = flag
|
|
408
|
-
return self
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Indicator
|
|
413
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
414
|
-
extension WebImage {
|
|
415
|
-
|
|
416
|
-
/// Associate a indicator when loading image with url
|
|
417
|
-
/// - Parameter indicator: The indicator type, see `Indicator`
|
|
418
|
-
public func indicator<T>(_ indicator: Indicator<T>) -> some View where T : View {
|
|
419
|
-
return self.modifier(IndicatorViewModifier(status: indicatorStatus, indicator: indicator))
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
/// Associate a indicator when loading image with url, convenient method with block
|
|
423
|
-
/// - Parameter content: A view that describes the indicator.
|
|
424
|
-
public func indicator<T>(@ViewBuilder content: @escaping (_ isAnimating: Binding<Bool>, _ progress: Binding<Double>) -> T) -> some View where T : View {
|
|
425
|
-
return indicator(Indicator(content: content))
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// Animated Image
|
|
430
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
431
|
-
extension WebImage {
|
|
432
|
-
|
|
433
|
-
/// Total loop count for animated image rendering. Defaults to nil.
|
|
434
|
-
/// - Note: Pass nil to disable customization, use the image itself loop count (`animatedImageLoopCount`) instead
|
|
435
|
-
/// - Parameter loopCount: The animation loop count
|
|
436
|
-
public func customLoopCount(_ loopCount: UInt?) -> WebImage {
|
|
437
|
-
self.imageConfiguration.customLoopCount = loopCount
|
|
438
|
-
return self
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/// Provide a max buffer size by bytes. This is used to adjust frame buffer count and can be useful when the decoding cost is expensive (such as Animated WebP software decoding). Default is nil.
|
|
442
|
-
///
|
|
443
|
-
/// `0` or nil means automatically adjust by calculating current memory usage.
|
|
444
|
-
/// `1` means without any buffer cache, each of frames will be decoded and then be freed after rendering. (Lowest Memory and Highest CPU)
|
|
445
|
-
/// `UInt.max` means cache all the buffer. (Lowest CPU and Highest Memory)
|
|
446
|
-
/// - Parameter bufferSize: The max buffer size
|
|
447
|
-
public func maxBufferSize(_ bufferSize: UInt?) -> WebImage {
|
|
448
|
-
self.imageConfiguration.maxBufferSize = bufferSize
|
|
449
|
-
return self
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
/// The runLoopMode when animation is playing on. Defaults is `.common`
|
|
453
|
-
/// You can specify a runloop mode to let it rendering.
|
|
454
|
-
/// - Note: This is useful for some cases, for example, always specify NSDefaultRunLoopMode, if you want to pause the animation when user scroll (for Mac user, drag the mouse or touchpad)
|
|
455
|
-
/// - Parameter runLoopMode: The runLoopMode for animation
|
|
456
|
-
public func runLoopMode(_ runLoopMode: RunLoop.Mode) -> WebImage {
|
|
457
|
-
self.imageConfiguration.runLoopMode = runLoopMode
|
|
458
|
-
return self
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
/// Whether or not to pause the animation (keep current frame), instead of stop the animation (frame index reset to 0). When `isAnimating` binding value changed to false. Defaults is true.
|
|
462
|
-
/// - Note: For some of use case, you may want to reset the frame index to 0 when stop, but some other want to keep the current frame index.
|
|
463
|
-
/// - Parameter pausable: Whether or not to pause the animation instead of stop the animation.
|
|
464
|
-
public func pausable(_ pausable: Bool) -> WebImage {
|
|
465
|
-
self.imageConfiguration.pausable = pausable
|
|
466
|
-
return self
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
/// Whether or not to clear frame buffer cache when stopped. Defaults is false.
|
|
470
|
-
/// Note: This is useful when you want to limit the memory usage during frequently visibility changes (such as image view inside a list view, then push and pop)
|
|
471
|
-
/// - Parameter purgeable: Whether or not to clear frame buffer cache when stopped.
|
|
472
|
-
public func purgeable(_ purgeable: Bool) -> WebImage {
|
|
473
|
-
self.imageConfiguration.purgeable = purgeable
|
|
474
|
-
return self
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
/// Control the animation playback rate. Default is 1.0.
|
|
478
|
-
/// `1.0` means the normal speed.
|
|
479
|
-
/// `0.0` means stopping the animation.
|
|
480
|
-
/// `0.0-1.0` means the slow speed.
|
|
481
|
-
/// `> 1.0` means the fast speed.
|
|
482
|
-
/// `< 0.0` is not supported currently and stop animation. (may support reverse playback in the future)
|
|
483
|
-
/// - Parameter playbackRate: The animation playback rate.
|
|
484
|
-
public func playbackRate(_ playbackRate: Double) -> WebImage {
|
|
485
|
-
self.imageConfiguration.playbackRate = playbackRate
|
|
486
|
-
return self
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
/// Control the animation playback mode. Default is .normal
|
|
490
|
-
/// - Parameter playbackMode: The playback mode, including normal order, reverse order, bounce order and reversed bounce order.
|
|
491
|
-
public func playbackMode(_ playbackMode: SDAnimatedImagePlaybackMode) -> WebImage {
|
|
492
|
-
self.imageConfiguration.playbackMode = playbackMode
|
|
493
|
-
return self
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
#if DEBUG
|
|
498
|
-
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
|
|
499
|
-
struct WebImage_Previews : PreviewProvider {
|
|
500
|
-
static var previews: some View {
|
|
501
|
-
Group {
|
|
502
|
-
WebImage(url: URL(string: "https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/SDWebImage_logo.png"))
|
|
503
|
-
.resizable()
|
|
504
|
-
.aspectRatio(contentMode: .fit)
|
|
505
|
-
.padding()
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
#endif
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* This file is part of the SDWebImage package.
|
|
3
|
-
* (c) DreamPiggy <lizhuoli1126@126.com>
|
|
4
|
-
*
|
|
5
|
-
* For the full copyright and license information, please view the LICENSE
|
|
6
|
-
* file that was distributed with this source code.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
#import <Foundation/Foundation.h>
|
|
10
|
-
|
|
11
|
-
//! Project version number for SDWebImageSwiftUI.
|
|
12
|
-
FOUNDATION_EXPORT double SDWebImageSwiftUIVersionNumber;
|
|
13
|
-
|
|
14
|
-
//! Project version string for SDWebImageSwiftUI.
|
|
15
|
-
FOUNDATION_EXPORT const unsigned char SDWebImageSwiftUIVersionString[];
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2019 CSolanaM
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
<p align='center'>
|
|
2
|
-
<img src='Assets/header.gif'>
|
|
3
|
-
</p>
|
|
4
|
-
<p align='center'>
|
|
5
|
-
<img src='https://github.com/CSolanaM/SkeletonUI/workflows/build/badge.svg'>
|
|
6
|
-
<img src='https://github.com/CSolanaM/SkeletonUI/workflows/test/badge.svg'>
|
|
7
|
-
<a href="https://codecov.io/gh/CSolanaM/SkeletonUI"><img src="https://codecov.io/gh/CSolanaM/SkeletonUI/branch/master/graph/badge.svg" /></a>
|
|
8
|
-
<img src='https://img.shields.io/cocoapods/p/SkeletonUI'>
|
|
9
|
-
<img src='https://img.shields.io/github/v/tag/CSolanaM/SkeletonUI?color=lightGray&label=version'>
|
|
10
|
-
<img src='https://img.shields.io/github/license/CSolanaM/SkeletonUI?color=lightGray'>
|
|
11
|
-
<a href='https://twitter.com/CSolanaM'><img src='https://img.shields.io/badge/twitter-@CSolanaM-lightGray.svg?style=flat&label=contact'></a>
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
SkeletonUI aims to bring an elegant, declarative syntax to skeleton loading animations. Get rid of loading screens or spinners and start using skeletons to represent final content shapes.
|
|
15
|
-
|
|
16
|
-
# Requirements :gear:
|
|
17
|
-
|
|
18
|
-
- macOS 10.15.
|
|
19
|
-
- Xcode 11.0.
|
|
20
|
-
- Swift 5.0.
|
|
21
|
-
|
|
22
|
-
# Supported Platforms :iphone:
|
|
23
|
-
|
|
24
|
-
- iOS 13.0.
|
|
25
|
-
- tvOS 13.0.
|
|
26
|
-
- watchOS 6.0.
|
|
27
|
-
- macOS 10.15.
|
|
28
|
-
|
|
29
|
-
# Installation :computer:
|
|
30
|
-
|
|
31
|
-
### Swift Package Manager
|
|
32
|
-
[Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. Once you have your Swift package set up, adding `SkeletonUI` as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
|
|
33
|
-
|
|
34
|
-
```swift
|
|
35
|
-
dependencies: [
|
|
36
|
-
.package(url: "https://github.com/CSolanaM/SkeletonUI.git", .branch("master"))
|
|
37
|
-
]
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### CocoaPods
|
|
41
|
-
[CocoaPods](https://cocoapods.org) is a centralized dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate SkeletonUI into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
|
42
|
-
|
|
43
|
-
```ruby
|
|
44
|
-
pod 'SkeletonUI'
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
# Features :sparkles:
|
|
48
|
-
|
|
49
|
-
- [x] SwiftUI simple, declarative syntax.
|
|
50
|
-
- [x] Super easy and simple to set up.
|
|
51
|
-
- [x] All Views are skeletonables.
|
|
52
|
-
- [x] Fully customizable.
|
|
53
|
-
- [x] Universal (iPhone, iPad, iPod, Apple TV, Apple Watch, Mac).
|
|
54
|
-
- [x] SwiftUI ViewModifier power.
|
|
55
|
-
- [x] Lightweight codebase.
|
|
56
|
-
|
|
57
|
-
# Usage :rocket:
|
|
58
|
-
|
|
59
|
-
### Basic one-liner:
|
|
60
|
-
|
|
61
|
-
```swift
|
|
62
|
-
import SkeletonUI
|
|
63
|
-
import SwiftUI
|
|
64
|
-
|
|
65
|
-
struct UsersView: View {
|
|
66
|
-
@State var users = [String]()
|
|
67
|
-
|
|
68
|
-
var body: some View {
|
|
69
|
-
Text("Finished requesting \(users.count) users!")
|
|
70
|
-
.skeleton(with: users.isEmpty)
|
|
71
|
-
.onAppear {
|
|
72
|
-
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
|
|
73
|
-
self.users = ["John Doe", "Jane Doe", "James Doe", "Judy Doe"]
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Advanced customization:
|
|
81
|
-
|
|
82
|
-
```swift
|
|
83
|
-
import SkeletonUI
|
|
84
|
-
import SwiftUI
|
|
85
|
-
|
|
86
|
-
struct User: Identifiable {
|
|
87
|
-
let id = UUID()
|
|
88
|
-
let name: String
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
struct UsersView: View {
|
|
92
|
-
@State var users = [User]()
|
|
93
|
-
|
|
94
|
-
var body: some View {
|
|
95
|
-
SkeletonList(with: users, quantity: 6) { loading, user in
|
|
96
|
-
Text(user?.name)
|
|
97
|
-
.skeleton(with: loading)
|
|
98
|
-
.shape(type: .rectangle)
|
|
99
|
-
.appearance(type: .solid(color: .red, background: .blue))
|
|
100
|
-
.multiline(lines: 3, scales: [1: 0.5])
|
|
101
|
-
.animation(type: .pulse())
|
|
102
|
-
}
|
|
103
|
-
.onAppear {
|
|
104
|
-
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
|
|
105
|
-
self.users = [User(name: "John Doe"),
|
|
106
|
-
User(name: "Jane Doe"),
|
|
107
|
-
User(name: "James Doe"),
|
|
108
|
-
User(name: "Judy Doe")]
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
# Change Log :calendar:
|
|
116
|
-
|
|
117
|
-
See [CHANGELOG.md](https://github.com/CSolanaM/SkeletonUI/blob/master/CHANGELOG.md) for details.
|
|
118
|
-
|
|
119
|
-
# Contributing :tada:
|
|
120
|
-
|
|
121
|
-
- Suggest your idea as a [feature request](https://github.com/CSolanaM/SkeletonUI/issues/new?assignees=&labels=&template=feature_request.md&title=) for this project.
|
|
122
|
-
- Create a [bug report](https://github.com/CSolanaM/SkeletonUI/issues/new?assignees=&labels=&template=bug_report.md&title=) to help us improve.
|
|
123
|
-
- Propose your own fixes, suggestions and open a pull request with the changes.
|
|
124
|
-
|
|
125
|
-
See [CONTRIBUTING.md](https://github.com/CSolanaM/SkeletonUI/blob/master/CONTRIBUTING.md) for details.
|
|
126
|
-
|
|
127
|
-
# Code of Conduct :speech_balloon:
|
|
128
|
-
|
|
129
|
-
See [CODE_OF_CONDUCT.md](https://github.com/CSolanaM/SkeletonUI/blob/master/CODE_OF_CONDUCT.md) for details.
|
|
130
|
-
|
|
131
|
-
# Credits :speak_no_evil:
|
|
132
|
-
|
|
133
|
-
SkeletonUI is owned and maintained by [CSolanaM](https://csolanam.io). You can follow me on Twitter at [@CSolanaM](https://twitter.com/CSolanaM) or contact me via [email](mailto:apps@csolanam.io) for project updates and releases.
|
|
134
|
-
|
|
135
|
-
# License :mortar_board:
|
|
136
|
-
|
|
137
|
-
SkeletonUI is released under the MIT license. See [LICENSE](https://github.com/CSolanaM/SkeletonUI/blob/master/LICENSE) for details.
|