├── .gitignore ├── LICENSE ├── NeumorphicWallet ├── NeumorphicWallet.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── NeumorphicWallet │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── App Store 512@2x.png │ │ ├── Contents.json │ │ ├── iPad App 76@1x.png │ │ ├── iPad App 76@2x.png │ │ ├── iPad Notification 20@1x.png │ │ ├── iPad Notification 20@2x.png │ │ ├── iPad Pro App 83.5@2x.png │ │ ├── iPad Settings 29@1x.png │ │ ├── iPad Settings 29@2x.png │ │ ├── iPad Spotlight 40@1x.png │ │ ├── iPad Spotlight 40@2x.png │ │ ├── iPhone App 60@2x.png │ │ ├── iPhone App 60@3x.png │ │ ├── iPhone Notification 20@2x.png │ │ ├── iPhone Notification 20@3x.png │ │ ├── iPhone Settings 29@2x.png │ │ ├── iPhone Settings 29@3x.png │ │ ├── iPhone Spotlight 40@2x.png │ │ └── iPhone Spotlight 40@3x.png │ ├── Contents.json │ ├── arrow.imageset │ │ ├── Contents.json │ │ └── Group 3.pdf │ ├── backgroundColor.colorset │ │ └── Contents.json │ ├── chip.imageset │ │ ├── Contents.json │ │ └── Subtract.pdf │ ├── mastercardBig.imageset │ │ ├── Contents.json │ │ └── mastercardBig.pdf │ ├── mastercardLogo.imageset │ │ ├── Contents.json │ │ └── mastercard.pdf │ ├── photo.imageset │ │ ├── Contents.json │ │ ├── photo.png │ │ ├── photo@2x.png │ │ └── photo@3x.png │ ├── visaBig.imageset │ │ ├── Contents.json │ │ └── visaBig.pdf │ └── visaLogo.imageset │ │ ├── Contents.json │ │ └── visa.pdf │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── CardsView.swift │ ├── Helper │ ├── HexColors.swift │ └── HostingController.swift │ ├── Info.plist │ ├── Model │ ├── Card.swift │ ├── CardColors.swift │ └── TestData.swift │ ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json │ ├── SceneDelegate.swift │ ├── TransferAmountView.swift │ ├── UIConstants.swift │ └── View │ ├── AmountRulerView.swift │ ├── CardInfoView.swift │ ├── CardView.swift │ ├── CardsListView.swift │ ├── EmbossedView.swift │ ├── NeumorphismButton.swift │ ├── SliderPin.swift │ └── TransferAmountCardShape.swift ├── README.md ├── header.svg ├── preview-1.png ├── preview-2.png └── robot.svg /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | ## Playgrounds 34 | timeline.xctimeline 35 | playground.xcworkspace 36 | 37 | # Swift Package Manager 38 | # 39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 40 | # Packages/ 41 | # Package.pins 42 | # Package.resolved 43 | # *.xcodeproj 44 | # 45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 46 | # hence it is not needed unless you have added a package configuration file to your project 47 | # .swiftpm 48 | 49 | .build/ 50 | 51 | # CocoaPods 52 | # 53 | # We recommend against adding the Pods directory to your .gitignore. However 54 | # you should judge for yourself, the pros and cons are mentioned at: 55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 56 | # 57 | # Pods/ 58 | # 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # 64 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 65 | # Carthage/Checkouts 66 | 67 | Carthage/Build/ 68 | 69 | # Accio dependency management 70 | Dependencies/ 71 | .accio/ 72 | 73 | # fastlane 74 | # 75 | # It is recommended to not store the screenshots in the git repo. 76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 77 | # For more information about the recommended setup visit: 78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 79 | 80 | fastlane/report.xml 81 | fastlane/Preview.html 82 | fastlane/screenshots/**/*.png 83 | fastlane/test_output 84 | 85 | # Code Injection 86 | # 87 | # After new code Injection tools there's a generated folder /iOSInjectionProject 88 | # https://github.com/johnno1962/injectionforxcode 89 | 90 | iOSInjectionProject/ 91 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Redmadrobot 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. 22 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 51E6869124AF30D60019EA1C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E6869024AF30D60019EA1C /* AppDelegate.swift */; }; 11 | 51E6869324AF30D60019EA1C /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E6869224AF30D60019EA1C /* SceneDelegate.swift */; }; 12 | 51E6869724AF30DC0019EA1C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51E6869624AF30DC0019EA1C /* Assets.xcassets */; }; 13 | 51E6869A24AF30DC0019EA1C /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51E6869924AF30DC0019EA1C /* Preview Assets.xcassets */; }; 14 | 51E6869D24AF30DC0019EA1C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 51E6869B24AF30DC0019EA1C /* LaunchScreen.storyboard */; }; 15 | 51E686B724AF31820019EA1C /* HexColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686A524AF31810019EA1C /* HexColors.swift */; }; 16 | 51E686B824AF31820019EA1C /* HostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686A624AF31810019EA1C /* HostingController.swift */; }; 17 | 51E686B924AF31820019EA1C /* SliderPin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686A824AF31810019EA1C /* SliderPin.swift */; }; 18 | 51E686BA24AF31820019EA1C /* NeumorphismButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686A924AF31810019EA1C /* NeumorphismButton.swift */; }; 19 | 51E686BB24AF31820019EA1C /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AA24AF31810019EA1C /* CardView.swift */; }; 20 | 51E686BC24AF31820019EA1C /* TransferAmountCardShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AB24AF31810019EA1C /* TransferAmountCardShape.swift */; }; 21 | 51E686BD24AF31820019EA1C /* CardsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AC24AF31810019EA1C /* CardsListView.swift */; }; 22 | 51E686BE24AF31820019EA1C /* CardInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AD24AF31810019EA1C /* CardInfoView.swift */; }; 23 | 51E686BF24AF31820019EA1C /* EmbossedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AE24AF31810019EA1C /* EmbossedView.swift */; }; 24 | 51E686C024AF31820019EA1C /* AmountRulerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686AF24AF31810019EA1C /* AmountRulerView.swift */; }; 25 | 51E686C124AF31820019EA1C /* TestData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B124AF31810019EA1C /* TestData.swift */; }; 26 | 51E686C224AF31820019EA1C /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B224AF31810019EA1C /* Card.swift */; }; 27 | 51E686C324AF31820019EA1C /* CardColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B324AF31810019EA1C /* CardColors.swift */; }; 28 | 51E686C424AF31820019EA1C /* CardsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B424AF31810019EA1C /* CardsView.swift */; }; 29 | 51E686C524AF31820019EA1C /* UIConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B524AF31810019EA1C /* UIConstants.swift */; }; 30 | 51E686C624AF31820019EA1C /* TransferAmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E686B624AF31810019EA1C /* TransferAmountView.swift */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXFileReference section */ 34 | 51E6868D24AF30D60019EA1C /* NeumorphicWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NeumorphicWallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 51E6869024AF30D60019EA1C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | 51E6869224AF30D60019EA1C /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 37 | 51E6869624AF30DC0019EA1C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 38 | 51E6869924AF30DC0019EA1C /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 39 | 51E6869C24AF30DC0019EA1C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 40 | 51E6869E24AF30DC0019EA1C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 41 | 51E686A524AF31810019EA1C /* HexColors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HexColors.swift; sourceTree = ""; }; 42 | 51E686A624AF31810019EA1C /* HostingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HostingController.swift; sourceTree = ""; }; 43 | 51E686A824AF31810019EA1C /* SliderPin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderPin.swift; sourceTree = ""; }; 44 | 51E686A924AF31810019EA1C /* NeumorphismButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NeumorphismButton.swift; sourceTree = ""; }; 45 | 51E686AA24AF31810019EA1C /* CardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardView.swift; sourceTree = ""; }; 46 | 51E686AB24AF31810019EA1C /* TransferAmountCardShape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransferAmountCardShape.swift; sourceTree = ""; }; 47 | 51E686AC24AF31810019EA1C /* CardsListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardsListView.swift; sourceTree = ""; }; 48 | 51E686AD24AF31810019EA1C /* CardInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardInfoView.swift; sourceTree = ""; }; 49 | 51E686AE24AF31810019EA1C /* EmbossedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmbossedView.swift; sourceTree = ""; }; 50 | 51E686AF24AF31810019EA1C /* AmountRulerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AmountRulerView.swift; sourceTree = ""; }; 51 | 51E686B124AF31810019EA1C /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; 52 | 51E686B224AF31810019EA1C /* Card.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; 53 | 51E686B324AF31810019EA1C /* CardColors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardColors.swift; sourceTree = ""; }; 54 | 51E686B424AF31810019EA1C /* CardsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardsView.swift; sourceTree = ""; }; 55 | 51E686B524AF31810019EA1C /* UIConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIConstants.swift; sourceTree = ""; }; 56 | 51E686B624AF31810019EA1C /* TransferAmountView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransferAmountView.swift; sourceTree = ""; }; 57 | /* End PBXFileReference section */ 58 | 59 | /* Begin PBXFrameworksBuildPhase section */ 60 | 51E6868A24AF30D60019EA1C /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | /* End PBXFrameworksBuildPhase section */ 68 | 69 | /* Begin PBXGroup section */ 70 | 51E6868424AF30D60019EA1C = { 71 | isa = PBXGroup; 72 | children = ( 73 | 51E6868F24AF30D60019EA1C /* NeumorphicWallet */, 74 | 51E6868E24AF30D60019EA1C /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 51E6868E24AF30D60019EA1C /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 51E6868D24AF30D60019EA1C /* NeumorphicWallet.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 51E6868F24AF30D60019EA1C /* NeumorphicWallet */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 51E6869624AF30DC0019EA1C /* Assets.xcassets */, 90 | 51E6869B24AF30DC0019EA1C /* LaunchScreen.storyboard */, 91 | 51E686B524AF31810019EA1C /* UIConstants.swift */, 92 | 51E6869E24AF30DC0019EA1C /* Info.plist */, 93 | 51E6869024AF30D60019EA1C /* AppDelegate.swift */, 94 | 51E6869224AF30D60019EA1C /* SceneDelegate.swift */, 95 | 51E686A424AF31810019EA1C /* Helper */, 96 | 51E686B024AF31810019EA1C /* Model */, 97 | 51E686A724AF31810019EA1C /* View */, 98 | 51E686B424AF31810019EA1C /* CardsView.swift */, 99 | 51E686B624AF31810019EA1C /* TransferAmountView.swift */, 100 | 51E6869824AF30DC0019EA1C /* Preview Content */, 101 | ); 102 | path = NeumorphicWallet; 103 | sourceTree = ""; 104 | }; 105 | 51E6869824AF30DC0019EA1C /* Preview Content */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 51E6869924AF30DC0019EA1C /* Preview Assets.xcassets */, 109 | ); 110 | path = "Preview Content"; 111 | sourceTree = ""; 112 | }; 113 | 51E686A424AF31810019EA1C /* Helper */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | 51E686A524AF31810019EA1C /* HexColors.swift */, 117 | 51E686A624AF31810019EA1C /* HostingController.swift */, 118 | ); 119 | path = Helper; 120 | sourceTree = ""; 121 | }; 122 | 51E686A724AF31810019EA1C /* View */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 51E686A824AF31810019EA1C /* SliderPin.swift */, 126 | 51E686A924AF31810019EA1C /* NeumorphismButton.swift */, 127 | 51E686AA24AF31810019EA1C /* CardView.swift */, 128 | 51E686AB24AF31810019EA1C /* TransferAmountCardShape.swift */, 129 | 51E686AC24AF31810019EA1C /* CardsListView.swift */, 130 | 51E686AD24AF31810019EA1C /* CardInfoView.swift */, 131 | 51E686AE24AF31810019EA1C /* EmbossedView.swift */, 132 | 51E686AF24AF31810019EA1C /* AmountRulerView.swift */, 133 | ); 134 | path = View; 135 | sourceTree = ""; 136 | }; 137 | 51E686B024AF31810019EA1C /* Model */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 51E686B124AF31810019EA1C /* TestData.swift */, 141 | 51E686B224AF31810019EA1C /* Card.swift */, 142 | 51E686B324AF31810019EA1C /* CardColors.swift */, 143 | ); 144 | path = Model; 145 | sourceTree = ""; 146 | }; 147 | /* End PBXGroup section */ 148 | 149 | /* Begin PBXNativeTarget section */ 150 | 51E6868C24AF30D60019EA1C /* NeumorphicWallet */ = { 151 | isa = PBXNativeTarget; 152 | buildConfigurationList = 51E686A124AF30DC0019EA1C /* Build configuration list for PBXNativeTarget "NeumorphicWallet" */; 153 | buildPhases = ( 154 | 51E6868924AF30D60019EA1C /* Sources */, 155 | 51E6868A24AF30D60019EA1C /* Frameworks */, 156 | 51E6868B24AF30D60019EA1C /* Resources */, 157 | ); 158 | buildRules = ( 159 | ); 160 | dependencies = ( 161 | ); 162 | name = NeumorphicWallet; 163 | productName = NeumorphicWallet; 164 | productReference = 51E6868D24AF30D60019EA1C /* NeumorphicWallet.app */; 165 | productType = "com.apple.product-type.application"; 166 | }; 167 | /* End PBXNativeTarget section */ 168 | 169 | /* Begin PBXProject section */ 170 | 51E6868524AF30D60019EA1C /* Project object */ = { 171 | isa = PBXProject; 172 | attributes = { 173 | LastSwiftUpdateCheck = 1150; 174 | LastUpgradeCheck = 1150; 175 | ORGANIZATIONNAME = Redmadrobot; 176 | TargetAttributes = { 177 | 51E6868C24AF30D60019EA1C = { 178 | CreatedOnToolsVersion = 11.5; 179 | }; 180 | }; 181 | }; 182 | buildConfigurationList = 51E6868824AF30D60019EA1C /* Build configuration list for PBXProject "NeumorphicWallet" */; 183 | compatibilityVersion = "Xcode 9.3"; 184 | developmentRegion = en; 185 | hasScannedForEncodings = 0; 186 | knownRegions = ( 187 | en, 188 | Base, 189 | ); 190 | mainGroup = 51E6868424AF30D60019EA1C; 191 | productRefGroup = 51E6868E24AF30D60019EA1C /* Products */; 192 | projectDirPath = ""; 193 | projectRoot = ""; 194 | targets = ( 195 | 51E6868C24AF30D60019EA1C /* NeumorphicWallet */, 196 | ); 197 | }; 198 | /* End PBXProject section */ 199 | 200 | /* Begin PBXResourcesBuildPhase section */ 201 | 51E6868B24AF30D60019EA1C /* Resources */ = { 202 | isa = PBXResourcesBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | 51E6869D24AF30DC0019EA1C /* LaunchScreen.storyboard in Resources */, 206 | 51E6869A24AF30DC0019EA1C /* Preview Assets.xcassets in Resources */, 207 | 51E6869724AF30DC0019EA1C /* Assets.xcassets in Resources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXResourcesBuildPhase section */ 212 | 213 | /* Begin PBXSourcesBuildPhase section */ 214 | 51E6868924AF30D60019EA1C /* Sources */ = { 215 | isa = PBXSourcesBuildPhase; 216 | buildActionMask = 2147483647; 217 | files = ( 218 | 51E686C624AF31820019EA1C /* TransferAmountView.swift in Sources */, 219 | 51E686B824AF31820019EA1C /* HostingController.swift in Sources */, 220 | 51E6869124AF30D60019EA1C /* AppDelegate.swift in Sources */, 221 | 51E686BD24AF31820019EA1C /* CardsListView.swift in Sources */, 222 | 51E686BA24AF31820019EA1C /* NeumorphismButton.swift in Sources */, 223 | 51E686B724AF31820019EA1C /* HexColors.swift in Sources */, 224 | 51E686C124AF31820019EA1C /* TestData.swift in Sources */, 225 | 51E686C424AF31820019EA1C /* CardsView.swift in Sources */, 226 | 51E686C024AF31820019EA1C /* AmountRulerView.swift in Sources */, 227 | 51E686C324AF31820019EA1C /* CardColors.swift in Sources */, 228 | 51E686C224AF31820019EA1C /* Card.swift in Sources */, 229 | 51E6869324AF30D60019EA1C /* SceneDelegate.swift in Sources */, 230 | 51E686C524AF31820019EA1C /* UIConstants.swift in Sources */, 231 | 51E686B924AF31820019EA1C /* SliderPin.swift in Sources */, 232 | 51E686BB24AF31820019EA1C /* CardView.swift in Sources */, 233 | 51E686BE24AF31820019EA1C /* CardInfoView.swift in Sources */, 234 | 51E686BF24AF31820019EA1C /* EmbossedView.swift in Sources */, 235 | 51E686BC24AF31820019EA1C /* TransferAmountCardShape.swift in Sources */, 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | }; 239 | /* End PBXSourcesBuildPhase section */ 240 | 241 | /* Begin PBXVariantGroup section */ 242 | 51E6869B24AF30DC0019EA1C /* LaunchScreen.storyboard */ = { 243 | isa = PBXVariantGroup; 244 | children = ( 245 | 51E6869C24AF30DC0019EA1C /* Base */, 246 | ); 247 | name = LaunchScreen.storyboard; 248 | sourceTree = ""; 249 | }; 250 | /* End PBXVariantGroup section */ 251 | 252 | /* Begin XCBuildConfiguration section */ 253 | 51E6869F24AF30DC0019EA1C /* Debug */ = { 254 | isa = XCBuildConfiguration; 255 | buildSettings = { 256 | ALWAYS_SEARCH_USER_PATHS = NO; 257 | CLANG_ANALYZER_NONNULL = YES; 258 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 259 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 260 | CLANG_CXX_LIBRARY = "libc++"; 261 | CLANG_ENABLE_MODULES = YES; 262 | CLANG_ENABLE_OBJC_ARC = YES; 263 | CLANG_ENABLE_OBJC_WEAK = YES; 264 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 265 | CLANG_WARN_BOOL_CONVERSION = YES; 266 | CLANG_WARN_COMMA = YES; 267 | CLANG_WARN_CONSTANT_CONVERSION = YES; 268 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 269 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 270 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 271 | CLANG_WARN_EMPTY_BODY = YES; 272 | CLANG_WARN_ENUM_CONVERSION = YES; 273 | CLANG_WARN_INFINITE_RECURSION = YES; 274 | CLANG_WARN_INT_CONVERSION = YES; 275 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 276 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 277 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 278 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 279 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 280 | CLANG_WARN_STRICT_PROTOTYPES = YES; 281 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 282 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 283 | CLANG_WARN_UNREACHABLE_CODE = YES; 284 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 285 | COPY_PHASE_STRIP = NO; 286 | DEBUG_INFORMATION_FORMAT = dwarf; 287 | ENABLE_STRICT_OBJC_MSGSEND = YES; 288 | ENABLE_TESTABILITY = YES; 289 | GCC_C_LANGUAGE_STANDARD = gnu11; 290 | GCC_DYNAMIC_NO_PIC = NO; 291 | GCC_NO_COMMON_BLOCKS = YES; 292 | GCC_OPTIMIZATION_LEVEL = 0; 293 | GCC_PREPROCESSOR_DEFINITIONS = ( 294 | "DEBUG=1", 295 | "$(inherited)", 296 | ); 297 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 298 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 299 | GCC_WARN_UNDECLARED_SELECTOR = YES; 300 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 301 | GCC_WARN_UNUSED_FUNCTION = YES; 302 | GCC_WARN_UNUSED_VARIABLE = YES; 303 | IPHONEOS_DEPLOYMENT_TARGET = 13.5; 304 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 305 | MTL_FAST_MATH = YES; 306 | ONLY_ACTIVE_ARCH = YES; 307 | SDKROOT = iphoneos; 308 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 309 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 310 | }; 311 | name = Debug; 312 | }; 313 | 51E686A024AF30DC0019EA1C /* Release */ = { 314 | isa = XCBuildConfiguration; 315 | buildSettings = { 316 | ALWAYS_SEARCH_USER_PATHS = NO; 317 | CLANG_ANALYZER_NONNULL = YES; 318 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 319 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 320 | CLANG_CXX_LIBRARY = "libc++"; 321 | CLANG_ENABLE_MODULES = YES; 322 | CLANG_ENABLE_OBJC_ARC = YES; 323 | CLANG_ENABLE_OBJC_WEAK = YES; 324 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 325 | CLANG_WARN_BOOL_CONVERSION = YES; 326 | CLANG_WARN_COMMA = YES; 327 | CLANG_WARN_CONSTANT_CONVERSION = YES; 328 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 329 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 330 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 331 | CLANG_WARN_EMPTY_BODY = YES; 332 | CLANG_WARN_ENUM_CONVERSION = YES; 333 | CLANG_WARN_INFINITE_RECURSION = YES; 334 | CLANG_WARN_INT_CONVERSION = YES; 335 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 336 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 337 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 338 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 339 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 340 | CLANG_WARN_STRICT_PROTOTYPES = YES; 341 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 342 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 343 | CLANG_WARN_UNREACHABLE_CODE = YES; 344 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 345 | COPY_PHASE_STRIP = NO; 346 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 347 | ENABLE_NS_ASSERTIONS = NO; 348 | ENABLE_STRICT_OBJC_MSGSEND = YES; 349 | GCC_C_LANGUAGE_STANDARD = gnu11; 350 | GCC_NO_COMMON_BLOCKS = YES; 351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 353 | GCC_WARN_UNDECLARED_SELECTOR = YES; 354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 355 | GCC_WARN_UNUSED_FUNCTION = YES; 356 | GCC_WARN_UNUSED_VARIABLE = YES; 357 | IPHONEOS_DEPLOYMENT_TARGET = 13.5; 358 | MTL_ENABLE_DEBUG_INFO = NO; 359 | MTL_FAST_MATH = YES; 360 | SDKROOT = iphoneos; 361 | SWIFT_COMPILATION_MODE = wholemodule; 362 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 363 | VALIDATE_PRODUCT = YES; 364 | }; 365 | name = Release; 366 | }; 367 | 51E686A224AF30DC0019EA1C /* Debug */ = { 368 | isa = XCBuildConfiguration; 369 | buildSettings = { 370 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 371 | CODE_SIGN_STYLE = Automatic; 372 | DEVELOPMENT_ASSET_PATHS = "\"NeumorphicWallet/Preview Content\""; 373 | DEVELOPMENT_TEAM = 42LRQS6X44; 374 | ENABLE_PREVIEWS = YES; 375 | INFOPLIST_FILE = NeumorphicWallet/Info.plist; 376 | LD_RUNPATH_SEARCH_PATHS = ( 377 | "$(inherited)", 378 | "@executable_path/Frameworks", 379 | ); 380 | PRODUCT_BUNDLE_IDENTIFIER = com.redmadrobot.NeumorphicWalletAndTransactionValue; 381 | PRODUCT_NAME = "$(TARGET_NAME)"; 382 | SWIFT_VERSION = 5.0; 383 | TARGETED_DEVICE_FAMILY = 1; 384 | }; 385 | name = Debug; 386 | }; 387 | 51E686A324AF30DC0019EA1C /* Release */ = { 388 | isa = XCBuildConfiguration; 389 | buildSettings = { 390 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 391 | CODE_SIGN_STYLE = Automatic; 392 | DEVELOPMENT_ASSET_PATHS = "\"NeumorphicWallet/Preview Content\""; 393 | DEVELOPMENT_TEAM = 42LRQS6X44; 394 | ENABLE_PREVIEWS = YES; 395 | INFOPLIST_FILE = NeumorphicWallet/Info.plist; 396 | LD_RUNPATH_SEARCH_PATHS = ( 397 | "$(inherited)", 398 | "@executable_path/Frameworks", 399 | ); 400 | PRODUCT_BUNDLE_IDENTIFIER = com.redmadrobot.NeumorphicWalletAndTransactionValue; 401 | PRODUCT_NAME = "$(TARGET_NAME)"; 402 | SWIFT_VERSION = 5.0; 403 | TARGETED_DEVICE_FAMILY = 1; 404 | }; 405 | name = Release; 406 | }; 407 | /* End XCBuildConfiguration section */ 408 | 409 | /* Begin XCConfigurationList section */ 410 | 51E6868824AF30D60019EA1C /* Build configuration list for PBXProject "NeumorphicWallet" */ = { 411 | isa = XCConfigurationList; 412 | buildConfigurations = ( 413 | 51E6869F24AF30DC0019EA1C /* Debug */, 414 | 51E686A024AF30DC0019EA1C /* Release */, 415 | ); 416 | defaultConfigurationIsVisible = 0; 417 | defaultConfigurationName = Release; 418 | }; 419 | 51E686A124AF30DC0019EA1C /* Build configuration list for PBXNativeTarget "NeumorphicWallet" */ = { 420 | isa = XCConfigurationList; 421 | buildConfigurations = ( 422 | 51E686A224AF30DC0019EA1C /* Debug */, 423 | 51E686A324AF30DC0019EA1C /* Release */, 424 | ); 425 | defaultConfigurationIsVisible = 0; 426 | defaultConfigurationName = Release; 427 | }; 428 | /* End XCConfigurationList section */ 429 | }; 430 | rootObject = 51E6868524AF30D60019EA1C /* Project object */; 431 | } 432 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | // Override point for customization after application launch. 17 | return true 18 | } 19 | 20 | // MARK: UISceneSession Lifecycle 21 | 22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 23 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/App Store 512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/App Store 512@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "iPhone Notification 20@2x.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "iPhone Notification 20@3x.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "iPhone Settings 29@2x.png", 17 | "idiom" : "iphone", 18 | "scale" : "2x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "iPhone Settings 29@3x.png", 23 | "idiom" : "iphone", 24 | "scale" : "3x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "iPhone Spotlight 40@2x.png", 29 | "idiom" : "iphone", 30 | "scale" : "2x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "filename" : "iPhone Spotlight 40@3x.png", 35 | "idiom" : "iphone", 36 | "scale" : "3x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "iPhone App 60@2x.png", 41 | "idiom" : "iphone", 42 | "scale" : "2x", 43 | "size" : "60x60" 44 | }, 45 | { 46 | "filename" : "iPhone App 60@3x.png", 47 | "idiom" : "iphone", 48 | "scale" : "3x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "iPad Notification 20@1x.png", 53 | "idiom" : "ipad", 54 | "scale" : "1x", 55 | "size" : "20x20" 56 | }, 57 | { 58 | "filename" : "iPad Notification 20@2x.png", 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "20x20" 62 | }, 63 | { 64 | "filename" : "iPad Settings 29@1x.png", 65 | "idiom" : "ipad", 66 | "scale" : "1x", 67 | "size" : "29x29" 68 | }, 69 | { 70 | "filename" : "iPad Settings 29@2x.png", 71 | "idiom" : "ipad", 72 | "scale" : "2x", 73 | "size" : "29x29" 74 | }, 75 | { 76 | "filename" : "iPad Spotlight 40@1x.png", 77 | "idiom" : "ipad", 78 | "scale" : "1x", 79 | "size" : "40x40" 80 | }, 81 | { 82 | "filename" : "iPad Spotlight 40@2x.png", 83 | "idiom" : "ipad", 84 | "scale" : "2x", 85 | "size" : "40x40" 86 | }, 87 | { 88 | "filename" : "iPad App 76@1x.png", 89 | "idiom" : "ipad", 90 | "scale" : "1x", 91 | "size" : "76x76" 92 | }, 93 | { 94 | "filename" : "iPad App 76@2x.png", 95 | "idiom" : "ipad", 96 | "scale" : "2x", 97 | "size" : "76x76" 98 | }, 99 | { 100 | "filename" : "iPad Pro App 83.5@2x.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "83.5x83.5" 104 | }, 105 | { 106 | "filename" : "App Store 512@2x.png", 107 | "idiom" : "ios-marketing", 108 | "scale" : "1x", 109 | "size" : "1024x1024" 110 | } 111 | ], 112 | "info" : { 113 | "author" : "xcode", 114 | "version" : 1 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad App 76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad App 76@1x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad App 76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad App 76@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Notification 20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Notification 20@1x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Notification 20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Notification 20@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Pro App 83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Pro App 83.5@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Settings 29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Settings 29@1x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Settings 29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Settings 29@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40@1x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPad Spotlight 40@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone App 60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone App 60@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone App 60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone App 60@3x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Notification 20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Notification 20@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Notification 20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Notification 20@3x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Settings 29@3x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight 40@3x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Group 3.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/arrow.imageset/Group 3.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | -0.000000 -1.000000 1.000000 -0.000000 -21.266602 27.460939 cm 14 | 1.000000 1.000000 1.000000 scn 15 | -0.000000 28.898438 m 16 | -0.552285 28.898438 -1.000000 28.450722 -1.000000 27.898438 c 17 | -1.000000 27.346151 -0.552285 26.898438 0.000000 26.898438 c 18 | -0.000000 28.898438 l 19 | h 20 | 25.897932 26.898438 m 21 | 26.450218 26.898438 26.897932 27.346153 26.897932 27.898438 c 22 | 26.897932 28.450722 26.450218 28.898438 25.897932 28.898438 c 23 | 25.897932 26.898438 l 24 | h 25 | 0.000000 26.898438 m 26 | 25.897932 26.898438 l 27 | 25.897932 28.898438 l 28 | -0.000000 28.898438 l 29 | 0.000000 26.898438 l 30 | h 31 | f 32 | n 33 | Q 34 | q 35 | -0.000000 -1.000000 1.000000 -0.000000 5.558594 28.023438 cm 36 | 1.000000 1.000000 1.000000 scn 37 | 5.284845 6.076462 m 38 | 5.629863 6.507718 5.559953 7.137012 5.128697 7.482029 c 39 | 4.697442 7.827046 4.068148 7.757137 3.723130 7.325881 c 40 | 5.284845 6.076462 l 41 | h 42 | 0.000000 1.071400 m 43 | -0.780857 1.696110 l 44 | -1.073039 1.330896 -1.073048 0.811944 -0.780880 0.446720 c 45 | 0.000000 1.071400 l 46 | h 47 | 3.723108 -5.183478 m 48 | 4.068110 -5.614746 4.697401 -5.684680 5.128669 -5.339678 c 49 | 5.559937 -4.994677 5.629870 -4.365385 5.284869 -3.934117 c 50 | 3.723108 -5.183478 l 51 | h 52 | 3.723130 7.325881 m 53 | -0.780857 1.696110 l 54 | 0.780857 0.446691 l 55 | 5.284845 6.076462 l 56 | 3.723130 7.325881 l 57 | h 58 | -0.780880 0.446720 m 59 | 3.723108 -5.183478 l 60 | 5.284869 -3.934117 l 61 | 0.780880 1.696081 l 62 | -0.780880 0.446720 l 63 | h 64 | f 65 | n 66 | Q 67 | q 68 | 0.000000 1.000000 -1.000000 0.000000 7.703125 1.000000 cm 69 | 1.000000 1.000000 1.000000 scn 70 | 5.284856 6.076477 m 71 | 5.629866 6.507739 5.559945 7.137031 5.128683 7.482041 c 72 | 4.697421 7.827050 4.068128 7.757129 3.723119 7.325867 c 73 | 5.284856 6.076477 l 74 | h 75 | 0.000000 1.071187 m 76 | -0.780869 1.695882 l 77 | -1.073044 1.330664 -1.073044 0.811711 -0.780869 0.446492 c 78 | 0.000000 1.071187 l 79 | h 80 | 3.723119 -5.183493 m 81 | 4.068129 -5.614755 4.697421 -5.684676 5.128683 -5.339666 c 82 | 5.559945 -4.994657 5.629866 -4.365364 5.284857 -3.934103 c 83 | 3.723119 -5.183493 l 84 | h 85 | 3.723119 7.325867 m 86 | -0.780869 1.695882 l 87 | 0.780869 0.446492 l 88 | 5.284856 6.076477 l 89 | 3.723119 7.325867 l 90 | h 91 | -0.780869 0.446492 m 92 | 3.723119 -5.183493 l 93 | 5.284857 -3.934103 l 94 | 0.780869 1.695882 l 95 | -0.780869 0.446492 l 96 | h 97 | f 98 | n 99 | Q 100 | 101 | endstream 102 | endobj 103 | 104 | 3 0 obj 105 | 2070 106 | endobj 107 | 108 | 4 0 obj 109 | << /Annots [] 110 | /Type /Page 111 | /MediaBox [ 0.000000 0.000000 13.261719 29.023438 ] 112 | /Resources 1 0 R 113 | /Contents 2 0 R 114 | /Parent 5 0 R 115 | >> 116 | endobj 117 | 118 | 5 0 obj 119 | << /Kids [ 4 0 R ] 120 | /Count 1 121 | /Type /Pages 122 | >> 123 | endobj 124 | 125 | 6 0 obj 126 | << /Type /Catalog 127 | /Pages 5 0 R 128 | >> 129 | endobj 130 | 131 | xref 132 | 0 7 133 | 0000000000 65535 f 134 | 0000000010 00000 n 135 | 0000000034 00000 n 136 | 0000002160 00000 n 137 | 0000002183 00000 n 138 | 0000002356 00000 n 139 | 0000002430 00000 n 140 | trailer 141 | << /ID [ (some) (id) ] 142 | /Root 6 0 R 143 | /Size 7 144 | >> 145 | startxref 146 | 2489 147 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/backgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x5B", 9 | "green" : "0x36", 10 | "red" : "0x2F" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/chip.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Subtract.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/chip.imageset/Subtract.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 0.000000 -1.000000 1.000000 0.000000 8.000000 40.000000 cm 14 | 0.000000 0.000000 0.000000 scn 15 | 9.599749 39.596680 m 16 | 4.079149 38.175655 0.000000 33.164196 0.000000 27.200001 c 17 | 0.000000 16.800222 l 18 | 9.599749 16.800222 l 19 | 9.599749 39.596680 l 20 | h 21 | 0.000000 4.799999 m 22 | 0.000000 15.200222 l 23 | 9.599749 15.200222 l 24 | 9.599749 -7.596680 l 25 | 4.079149 -6.175655 0.000000 -1.164196 0.000000 4.799999 c 26 | h 27 | 11.199888 11.200224 m 28 | 11.199888 15.200222 l 29 | 11.200000 15.200222 l 30 | 11.200000 16.800222 l 31 | 11.199888 16.800222 l 32 | 11.199888 20.800222 l 33 | 11.199888 22.125706 12.274405 23.200224 13.599888 23.200224 c 34 | 26.399889 23.200224 l 35 | 27.725372 23.200224 28.799889 22.125706 28.799889 20.800222 c 36 | 28.799889 11.200224 l 37 | 28.799889 9.874739 27.725372 8.800222 26.399889 8.800222 c 38 | 13.599889 8.800222 l 39 | 12.274405 8.800222 11.199888 9.874739 11.199888 11.200224 c 40 | h 41 | 11.199749 39.900940 m 42 | 11.199749 24.000412 l 43 | 11.868301 24.502626 12.699341 24.800224 13.599888 24.800224 c 44 | 19.200056 24.800224 l 45 | 19.200056 40.000000 l 46 | 12.799999 40.000000 l 47 | 12.258057 40.000000 11.723980 39.966320 11.199749 39.900940 c 48 | h 49 | 20.800056 40.000000 m 50 | 20.800056 24.800224 l 51 | 26.399889 24.800224 l 52 | 27.300398 24.800224 28.131407 24.502651 28.799944 24.000475 c 53 | 28.799944 39.900978 l 54 | 28.275812 39.966331 27.741838 40.000000 27.200001 40.000000 c 55 | 20.800056 40.000000 l 56 | h 57 | 11.199749 8.000034 m 58 | 11.199749 -7.900940 l 59 | 11.723980 -7.966320 12.258057 -8.000000 12.799999 -8.000000 c 60 | 19.200056 -8.000000 l 61 | 19.200056 7.200222 l 62 | 13.599889 7.200222 l 63 | 12.699342 7.200222 11.868301 7.497818 11.199749 8.000034 c 64 | h 65 | 27.200001 -8.000000 m 66 | 20.800056 -8.000000 l 67 | 20.800056 7.200222 l 68 | 26.399889 7.200222 l 69 | 27.300398 7.200222 28.131407 7.497791 28.799944 7.999969 c 70 | 28.799944 -7.900978 l 71 | 28.275812 -7.966335 27.741838 -8.000000 27.200001 -8.000000 c 72 | h 73 | 40.000000 4.799999 m 74 | 40.000000 -1.164307 35.920700 -6.175842 30.399944 -7.596760 c 75 | 30.399944 15.200222 l 76 | 39.999943 15.200222 l 77 | 39.999943 16.800222 l 78 | 30.399944 16.800222 l 79 | 30.399944 39.596760 l 80 | 35.920700 38.175842 40.000000 33.164307 40.000000 27.200001 c 81 | 40.000000 4.799999 l 82 | h 83 | f* 84 | n 85 | Q 86 | 87 | endstream 88 | endobj 89 | 90 | 3 0 obj 91 | 2068 92 | endobj 93 | 94 | 4 0 obj 95 | << /Annots [] 96 | /Type /Page 97 | /MediaBox [ 0.000000 0.000000 48.000000 40.000000 ] 98 | /Resources 1 0 R 99 | /Contents 2 0 R 100 | /Parent 5 0 R 101 | >> 102 | endobj 103 | 104 | 5 0 obj 105 | << /Kids [ 4 0 R ] 106 | /Count 1 107 | /Type /Pages 108 | >> 109 | endobj 110 | 111 | 6 0 obj 112 | << /Type /Catalog 113 | /Pages 5 0 R 114 | >> 115 | endobj 116 | 117 | xref 118 | 0 7 119 | 0000000000 65535 f 120 | 0000000010 00000 n 121 | 0000000034 00000 n 122 | 0000002158 00000 n 123 | 0000002181 00000 n 124 | 0000002354 00000 n 125 | 0000002428 00000 n 126 | trailer 127 | << /ID [ (some) (id) ] 128 | /Root 6 0 R 129 | /Size 7 130 | >> 131 | startxref 132 | 2487 133 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/mastercardBig.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mastercardBig.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/mastercardBig.imageset/mastercardBig.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << /BBox [ 0.000000 0.000000 101.000000 62.802734 ] 5 | /Resources << >> 6 | /Subtype /Form 7 | /Length 2 0 R 8 | /Group << /Type /Group 9 | /S /Transparency 10 | >> 11 | /Type /XObject 12 | >> 13 | stream 14 | /DeviceRGB CS 15 | /DeviceRGB cs 16 | q 17 | 1.000000 0.000000 -0.000000 1.000000 0.000000 1.000000 cm 18 | 0.000000 0.000000 0.000000 scn 19 | 69.099487 0.002319 m 20 | 86.180435 0.002319 99.999687 13.821575 99.999687 30.902525 c 21 | 99.999687 47.897640 86.180435 61.802734 69.099487 61.802734 c 22 | 61.889442 61.802734 55.280228 59.313553 50.044361 55.193523 c 23 | 57.168575 49.528484 61.803608 40.773422 61.803608 30.902525 c 24 | 61.803608 21.031624 57.254406 12.276566 50.044361 6.611530 c 25 | 55.280228 2.491501 61.889442 0.002319 69.099487 0.002319 c 26 | h 27 | 49.955322 55.191376 m 28 | 42.831112 49.526337 38.196083 40.771278 38.196083 30.900377 c 29 | 38.196083 21.029476 42.831112 12.188583 49.955322 6.609379 c 30 | 44.719456 2.489353 38.110245 0.000172 30.900200 0.000172 c 31 | 13.819256 0.000172 0.000000 13.819427 0.000000 30.900377 c 32 | 0.000000 47.981327 13.819256 61.800587 30.900200 61.800587 c 33 | 38.110245 61.800587 44.719456 59.311401 49.955322 55.191376 c 34 | h 35 | f* 36 | n 37 | Q 38 | 39 | endstream 40 | endobj 41 | 42 | 2 0 obj 43 | 904 44 | endobj 45 | 46 | 3 0 obj 47 | << /BBox [ 0.000000 0.000000 101.000000 62.802734 ] 48 | /Resources << >> 49 | /Subtype /Form 50 | /Length 4 0 R 51 | /Group << /Type /Group 52 | /S /Transparency 53 | >> 54 | /Type /XObject 55 | >> 56 | stream 57 | /DeviceRGB CS 58 | /DeviceRGB cs 59 | q 60 | 1.000000 0.000000 -0.000000 1.000000 1.000000 0.000000 cm 61 | 0.000000 0.000000 0.000000 scn 62 | 69.099487 0.002319 m 63 | 86.180435 0.002319 99.999687 13.821575 99.999687 30.902525 c 64 | 99.999687 47.897640 86.180435 61.802734 69.099487 61.802734 c 65 | 61.889442 61.802734 55.280228 59.313553 50.044361 55.193523 c 66 | 57.168575 49.528484 61.803608 40.773422 61.803608 30.902525 c 67 | 61.803608 21.031624 57.254406 12.276566 50.044361 6.611530 c 68 | 55.280228 2.491501 61.889442 0.002319 69.099487 0.002319 c 69 | h 70 | 49.955322 55.191376 m 71 | 42.831112 49.526337 38.196083 40.771278 38.196083 30.900377 c 72 | 38.196083 21.029476 42.831112 12.188583 49.955322 6.609379 c 73 | 44.719456 2.489353 38.110245 0.000172 30.900200 0.000172 c 74 | 13.819256 0.000172 0.000000 13.819427 0.000000 30.900377 c 75 | 0.000000 47.981327 13.819256 61.800587 30.900200 61.800587 c 76 | 38.110245 61.800587 44.719456 59.311401 49.955322 55.191376 c 77 | h 78 | f* 79 | n 80 | Q 81 | 82 | endstream 83 | endobj 84 | 85 | 4 0 obj 86 | 904 87 | endobj 88 | 89 | 5 0 obj 90 | << /Length 6 0 R 91 | /Range [ 0.000000 1.000000 ] 92 | /Domain [ 0.000000 1.000000 ] 93 | /FunctionType 4 94 | >> 95 | stream 96 | { 1 exch sub } 97 | endstream 98 | endobj 99 | 100 | 6 0 obj 101 | 14 102 | endobj 103 | 104 | 7 0 obj 105 | << /BBox [ 0.000000 0.000000 101.000000 62.802734 ] 106 | /Resources << /XObject << /X1 1 0 R >> 107 | /ExtGState << /E1 << /SMask << /Type /Mask 108 | /G 3 0 R 109 | /S /Alpha 110 | /TR 5 0 R 111 | >> 112 | /Type /ExtGState 113 | >> >> 114 | >> 115 | /Subtype /Form 116 | /Length 8 0 R 117 | /Group << /Type /Group 118 | /S /Transparency 119 | >> 120 | /Type /XObject 121 | >> 122 | stream 123 | /DeviceRGB CS 124 | /DeviceRGB cs 125 | /E1 gs 126 | /X1 Do 127 | 128 | endstream 129 | endobj 130 | 131 | 8 0 obj 132 | 42 133 | endobj 134 | 135 | 9 0 obj 136 | << /ExtGState << /E2 << /SMask << /Type /Mask 137 | /G 7 0 R 138 | /S /Alpha 139 | >> 140 | /Type /ExtGState 141 | >> 142 | /E3 << /ca 0.250000 >> 143 | /E1 << /ca 0.400000 >> 144 | >> >> 145 | endobj 146 | 147 | 10 0 obj 148 | << /Length 11 0 R >> 149 | stream 150 | /DeviceRGB CS 151 | /DeviceRGB cs 152 | q 153 | /E1 gs 154 | 1.000000 0.000000 -0.000000 1.000000 1.000000 0.000000 cm 155 | 1.000000 1.000000 1.000000 scn 156 | 69.099487 0.002319 m 157 | 86.180435 0.002319 99.999687 13.821575 99.999687 30.902525 c 158 | 99.999687 47.897640 86.180435 61.802734 69.099487 61.802734 c 159 | 61.889442 61.802734 55.280228 59.313553 50.044361 55.193523 c 160 | 57.168575 49.528484 61.803608 40.773422 61.803608 30.902525 c 161 | 61.803608 21.031624 57.254406 12.276566 50.044361 6.611530 c 162 | 55.280228 2.491501 61.889442 0.002319 69.099487 0.002319 c 163 | h 164 | 49.955322 55.191376 m 165 | 42.831112 49.526337 38.196083 40.771278 38.196083 30.900377 c 166 | 38.196083 21.029476 42.831112 12.188583 49.955322 6.609379 c 167 | 44.719456 2.489353 38.110245 0.000172 30.900200 0.000172 c 168 | 13.819256 0.000172 0.000000 13.819427 0.000000 30.900377 c 169 | 0.000000 47.981327 13.819256 61.800587 30.900200 61.800587 c 170 | 38.110245 61.800587 44.719456 59.311401 49.955322 55.191376 c 171 | h 172 | f* 173 | n 174 | Q 175 | q 176 | 1.000000 0.000000 -0.000000 1.000000 0.000000 1.000000 cm 177 | 0.000000 0.000000 0.000000 scn 178 | 69.099487 0.002319 m 179 | 86.180435 0.002319 99.999687 13.821575 99.999687 30.902525 c 180 | 99.999687 47.897640 86.180435 61.802734 69.099487 61.802734 c 181 | 61.889442 61.802734 55.280228 59.313553 50.044361 55.193523 c 182 | 57.168575 49.528484 61.803608 40.773422 61.803608 30.902525 c 183 | 61.803608 21.031624 57.254406 12.276566 50.044361 6.611530 c 184 | 55.280228 2.491501 61.889442 0.002319 69.099487 0.002319 c 185 | h 186 | 49.955322 55.191376 m 187 | 42.831112 49.526337 38.196083 40.771278 38.196083 30.900377 c 188 | 38.196083 21.029476 42.831112 12.188583 49.955322 6.609379 c 189 | 44.719456 2.489353 38.110245 0.000172 30.900200 0.000172 c 190 | 13.819256 0.000172 0.000000 13.819427 0.000000 30.900377 c 191 | 0.000000 47.981327 13.819256 61.800587 30.900200 61.800587 c 192 | 38.110245 61.800587 44.719456 59.311401 49.955322 55.191376 c 193 | h 194 | f* 195 | n 196 | Q 197 | q 198 | /E2 gs 199 | 0.000000 0.000000 0.000000 scn 200 | /E3 gs 201 | 0.000000 1.000000 100.000000 61.802734 re 202 | f 203 | Q 204 | 205 | endstream 206 | endobj 207 | 208 | 11 0 obj 209 | 1880 210 | endobj 211 | 212 | 12 0 obj 213 | << /Annots [] 214 | /Type /Page 215 | /MediaBox [ 0.000000 0.000000 101.000000 62.802734 ] 216 | /Resources 9 0 R 217 | /Contents 10 0 R 218 | /Parent 13 0 R 219 | >> 220 | endobj 221 | 222 | 13 0 obj 223 | << /Kids [ 12 0 R ] 224 | /Count 1 225 | /Type /Pages 226 | >> 227 | endobj 228 | 229 | 14 0 obj 230 | << /Type /Catalog 231 | /Pages 13 0 R 232 | >> 233 | endobj 234 | 235 | xref 236 | 0 15 237 | 0000000000 65535 f 238 | 0000000010 00000 n 239 | 0000001163 00000 n 240 | 0000001185 00000 n 241 | 0000002338 00000 n 242 | 0000002360 00000 n 243 | 0000002522 00000 n 244 | 0000002543 00000 n 245 | 0000003266 00000 n 246 | 0000003287 00000 n 247 | 0000003653 00000 n 248 | 0000005591 00000 n 249 | 0000005615 00000 n 250 | 0000005792 00000 n 251 | 0000005868 00000 n 252 | trailer 253 | << /ID [ (some) (id) ] 254 | /Root 14 0 R 255 | /Size 15 256 | >> 257 | startxref 258 | 5929 259 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/mastercardLogo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mastercard.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/mastercardLogo.imageset/mastercard.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm 14 | 0.000000 0.000000 0.000000 scn 15 | 37.456627 0.001091 m 16 | 46.715893 0.001091 54.207054 7.492254 54.207054 16.751520 c 17 | 54.207054 25.964258 46.715893 33.501953 37.456627 33.501953 c 18 | 33.548191 33.501953 29.965458 32.152615 27.127192 29.919222 c 19 | 30.989096 26.848309 33.501663 22.102352 33.501663 16.751520 c 20 | 33.501663 11.400688 31.035625 6.654734 27.127192 3.583820 c 21 | 29.965458 1.350430 33.548191 0.001091 37.456627 0.001091 c 22 | h 23 | 27.079865 29.919060 m 24 | 23.217960 26.848148 20.705395 22.102192 20.705395 16.751360 c 25 | 20.705395 11.400526 23.217960 6.608044 27.079865 3.583660 c 26 | 24.241598 1.350269 20.658867 0.000931 16.750433 0.000931 c 27 | 7.491166 0.000931 0.000000 7.492094 0.000000 16.751360 c 28 | 0.000000 26.010626 7.491166 33.501793 16.750433 33.501793 c 29 | 20.658867 33.501793 24.241598 32.152451 27.079865 29.919060 c 30 | h 31 | f* 32 | n 33 | Q 34 | 35 | endstream 36 | endobj 37 | 38 | 3 0 obj 39 | 898 40 | endobj 41 | 42 | 4 0 obj 43 | << /Annots [] 44 | /Type /Page 45 | /MediaBox [ 0.000000 0.000000 54.207031 33.501953 ] 46 | /Resources 1 0 R 47 | /Contents 2 0 R 48 | /Parent 5 0 R 49 | >> 50 | endobj 51 | 52 | 5 0 obj 53 | << /Kids [ 4 0 R ] 54 | /Count 1 55 | /Type /Pages 56 | >> 57 | endobj 58 | 59 | 6 0 obj 60 | << /Type /Catalog 61 | /Pages 5 0 R 62 | >> 63 | endobj 64 | 65 | xref 66 | 0 7 67 | 0000000000 65535 f 68 | 0000000010 00000 n 69 | 0000000034 00000 n 70 | 0000000988 00000 n 71 | 0000001010 00000 n 72 | 0000001183 00000 n 73 | 0000001257 00000 n 74 | trailer 75 | << /ID [ (some) (id) ] 76 | /Root 6 0 R 77 | /Size 7 78 | >> 79 | startxref 80 | 1316 81 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "photo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "photo@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "photo@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo@2x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/NeumorphicWallet/NeumorphicWallet/Assets.xcassets/photo.imageset/photo@3x.png -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/visaBig.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visaBig.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/visaBig.imageset/visaBig.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << /BBox [ 0.000000 0.000000 112.865234 36.722656 ] 5 | /Resources << >> 6 | /Subtype /Form 7 | /Length 2 0 R 8 | /Group << /Type /Group 9 | /S /Transparency 10 | >> 11 | /Type /XObject 12 | >> 13 | stream 14 | /DeviceRGB CS 15 | /DeviceRGB cs 16 | q 17 | 4.429963 0.000000 -0.000000 4.429963 0.000000 -121.527390 cm 18 | 0.000000 0.000000 0.000000 scn 19 | 18.356630 35.390324 m 20 | 17.953163 35.548267 17.313229 35.722656 16.521952 35.722656 c 21 | 14.501923 35.722656 13.079435 34.659767 13.070710 33.140152 c 22 | 13.053932 32.018986 14.089169 31.396263 14.863444 31.022430 c 23 | 15.654833 30.640430 15.923851 30.391098 15.923851 30.050598 c 24 | 15.915797 29.527651 15.284363 29.286596 14.695435 29.286596 c 25 | 13.878766 29.286596 13.441182 29.410877 12.776191 29.701818 c 26 | 12.506839 29.826540 l 27 | 12.220596 28.074261 l 28 | 12.700352 27.858593 13.584247 27.667206 14.501923 27.658817 c 29 | 16.648237 27.658817 18.045557 28.705263 18.062111 30.324654 c 30 | 18.070276 31.213264 17.523630 31.894154 16.345104 32.450542 c 31 | 15.629665 32.807709 15.191523 33.048542 15.191523 33.413986 c 32 | 15.199912 33.746208 15.562104 34.086491 16.369713 34.086491 c 33 | 17.034704 34.103157 17.523296 33.945435 17.893431 33.787601 c 34 | 18.078442 33.704712 l 35 | 18.356630 35.390324 l 36 | h 37 | 10.941720 27.775799 m 38 | 8.896190 27.775799 l 39 | 10.175611 35.581806 l 40 | 12.221030 35.581806 l 41 | 10.941720 27.775799 l 42 | h 43 | 21.893339 32.725250 m 44 | 21.893339 32.725250 21.245127 30.989635 21.076672 30.541191 c 45 | 22.776899 30.541191 l 46 | 22.692781 30.931469 22.305422 32.799973 22.305422 32.799973 c 47 | 22.162468 33.472584 l 48 | 22.102270 33.299385 22.015213 33.061264 21.956493 32.900650 c 49 | 21.916687 32.791775 21.889904 32.718513 21.893339 32.725250 c 50 | h 51 | 22.019402 35.581806 m 52 | 23.601622 35.581806 l 53 | 25.251848 27.775911 l 54 | 23.357883 27.775911 l 55 | 23.357883 27.775911 23.172537 28.672802 23.113811 28.946857 c 56 | 20.487520 28.946857 l 57 | 20.411568 28.739357 20.058210 27.775911 20.058210 27.775911 c 58 | 17.911898 27.775911 l 59 | 20.950272 34.934139 l 60 | 21.160788 35.440750 21.531481 35.581806 22.019402 35.581806 c 61 | h 62 | 7.187424 35.581806 m 63 | 5.184173 30.258858 l 64 | 4.965268 31.338413 l 65 | 4.964661 31.340454 4.964052 31.342497 4.963440 31.344538 c 66 | 4.964299 31.342239 4.965157 31.339939 4.966013 31.337641 c 67 | 4.250575 34.925198 l 68 | 4.132789 35.423748 3.770819 35.564915 3.324732 35.581364 c 69 | 0.033669 35.581364 l 70 | 0.000000 35.423641 l 71 | 0.802363 35.221184 1.520036 34.929478 2.148907 34.566795 c 72 | 3.972088 27.784079 l 73 | 6.135183 27.784079 l 74 | 9.350407 35.581806 l 75 | 7.187424 35.581806 l 76 | h 77 | f* 78 | n 79 | Q 80 | 81 | endstream 82 | endobj 83 | 84 | 2 0 obj 85 | 2202 86 | endobj 87 | 88 | 3 0 obj 89 | << /BBox [ 0.000000 0.000000 112.865234 36.722656 ] 90 | /Resources << >> 91 | /Subtype /Form 92 | /Length 4 0 R 93 | /Group << /Type /Group 94 | /S /Transparency 95 | >> 96 | /Type /XObject 97 | >> 98 | stream 99 | /DeviceRGB CS 100 | /DeviceRGB cs 101 | q 102 | 4.429963 0.000000 -0.000000 4.429963 1.000000 -122.527390 cm 103 | 0.000000 0.000000 0.000000 scn 104 | 18.356630 35.390324 m 105 | 17.953163 35.548267 17.313229 35.722656 16.521952 35.722656 c 106 | 14.501923 35.722656 13.079435 34.659767 13.070710 33.140152 c 107 | 13.053932 32.018986 14.089169 31.396263 14.863444 31.022430 c 108 | 15.654833 30.640430 15.923851 30.391098 15.923851 30.050598 c 109 | 15.915797 29.527651 15.284363 29.286596 14.695435 29.286596 c 110 | 13.878766 29.286596 13.441182 29.410877 12.776191 29.701818 c 111 | 12.506839 29.826540 l 112 | 12.220596 28.074261 l 113 | 12.700352 27.858593 13.584247 27.667206 14.501923 27.658817 c 114 | 16.648237 27.658817 18.045557 28.705263 18.062111 30.324654 c 115 | 18.070276 31.213264 17.523630 31.894154 16.345104 32.450542 c 116 | 15.629665 32.807709 15.191523 33.048542 15.191523 33.413986 c 117 | 15.199912 33.746208 15.562104 34.086491 16.369713 34.086491 c 118 | 17.034704 34.103157 17.523296 33.945435 17.893431 33.787601 c 119 | 18.078442 33.704712 l 120 | 18.356630 35.390324 l 121 | h 122 | 10.941720 27.775799 m 123 | 8.896190 27.775799 l 124 | 10.175611 35.581806 l 125 | 12.221030 35.581806 l 126 | 10.941720 27.775799 l 127 | h 128 | 21.893339 32.725250 m 129 | 21.893339 32.725250 21.245127 30.989635 21.076672 30.541191 c 130 | 22.776899 30.541191 l 131 | 22.692781 30.931469 22.305422 32.799973 22.305422 32.799973 c 132 | 22.162468 33.472584 l 133 | 22.102270 33.299385 22.015213 33.061264 21.956493 32.900650 c 134 | 21.916687 32.791775 21.889904 32.718513 21.893339 32.725250 c 135 | h 136 | 22.019402 35.581806 m 137 | 23.601622 35.581806 l 138 | 25.251848 27.775911 l 139 | 23.357883 27.775911 l 140 | 23.357883 27.775911 23.172537 28.672802 23.113811 28.946857 c 141 | 20.487520 28.946857 l 142 | 20.411568 28.739357 20.058210 27.775911 20.058210 27.775911 c 143 | 17.911898 27.775911 l 144 | 20.950272 34.934139 l 145 | 21.160788 35.440750 21.531481 35.581806 22.019402 35.581806 c 146 | h 147 | 7.187424 35.581806 m 148 | 5.184173 30.258858 l 149 | 4.965268 31.338413 l 150 | 4.964661 31.340454 4.964052 31.342497 4.963440 31.344538 c 151 | 4.964299 31.342239 4.965157 31.339939 4.966013 31.337641 c 152 | 4.250575 34.925198 l 153 | 4.132789 35.423748 3.770819 35.564915 3.324732 35.581364 c 154 | 0.033669 35.581364 l 155 | 0.000000 35.423641 l 156 | 0.802363 35.221184 1.520036 34.929478 2.148907 34.566795 c 157 | 3.972088 27.784079 l 158 | 6.135183 27.784079 l 159 | 9.350407 35.581806 l 160 | 7.187424 35.581806 l 161 | h 162 | f* 163 | n 164 | Q 165 | 166 | endstream 167 | endobj 168 | 169 | 4 0 obj 170 | 2202 171 | endobj 172 | 173 | 5 0 obj 174 | << /Length 6 0 R 175 | /Range [ 0.000000 1.000000 ] 176 | /Domain [ 0.000000 1.000000 ] 177 | /FunctionType 4 178 | >> 179 | stream 180 | { 1 exch sub } 181 | endstream 182 | endobj 183 | 184 | 6 0 obj 185 | 14 186 | endobj 187 | 188 | 7 0 obj 189 | << /BBox [ 0.000000 0.000000 112.865234 36.722656 ] 190 | /Resources << /XObject << /X1 1 0 R >> 191 | /ExtGState << /E1 << /SMask << /Type /Mask 192 | /G 3 0 R 193 | /S /Alpha 194 | /TR 5 0 R 195 | >> 196 | /Type /ExtGState 197 | >> >> 198 | >> 199 | /Subtype /Form 200 | /Length 8 0 R 201 | /Group << /Type /Group 202 | /S /Transparency 203 | >> 204 | /Type /XObject 205 | >> 206 | stream 207 | /DeviceRGB CS 208 | /DeviceRGB cs 209 | /E1 gs 210 | /X1 Do 211 | 212 | endstream 213 | endobj 214 | 215 | 8 0 obj 216 | 42 217 | endobj 218 | 219 | 9 0 obj 220 | << /ExtGState << /E2 << /SMask << /Type /Mask 221 | /G 7 0 R 222 | /S /Alpha 223 | >> 224 | /Type /ExtGState 225 | >> 226 | /E3 << /ca 0.250000 >> 227 | /E1 << /ca 0.400000 >> 228 | >> >> 229 | endobj 230 | 231 | 10 0 obj 232 | << /Length 11 0 R >> 233 | stream 234 | /DeviceRGB CS 235 | /DeviceRGB cs 236 | q 237 | /E1 gs 238 | 4.429963 0.000000 -0.000000 4.429963 1.000000 -122.527390 cm 239 | 1.000000 1.000000 1.000000 scn 240 | 18.356630 35.390324 m 241 | 17.953163 35.548267 17.313229 35.722656 16.521952 35.722656 c 242 | 14.501923 35.722656 13.079435 34.659767 13.070710 33.140152 c 243 | 13.053932 32.018986 14.089169 31.396263 14.863444 31.022430 c 244 | 15.654833 30.640430 15.923851 30.391098 15.923851 30.050598 c 245 | 15.915797 29.527651 15.284363 29.286596 14.695435 29.286596 c 246 | 13.878766 29.286596 13.441182 29.410877 12.776191 29.701818 c 247 | 12.506839 29.826540 l 248 | 12.220596 28.074261 l 249 | 12.700352 27.858593 13.584247 27.667206 14.501923 27.658817 c 250 | 16.648237 27.658817 18.045557 28.705263 18.062111 30.324654 c 251 | 18.070276 31.213264 17.523630 31.894154 16.345104 32.450542 c 252 | 15.629665 32.807709 15.191523 33.048542 15.191523 33.413986 c 253 | 15.199912 33.746208 15.562104 34.086491 16.369713 34.086491 c 254 | 17.034704 34.103157 17.523296 33.945435 17.893431 33.787601 c 255 | 18.078442 33.704712 l 256 | 18.356630 35.390324 l 257 | h 258 | 10.941720 27.775799 m 259 | 8.896190 27.775799 l 260 | 10.175611 35.581806 l 261 | 12.221030 35.581806 l 262 | 10.941720 27.775799 l 263 | h 264 | 21.893339 32.725250 m 265 | 21.893339 32.725250 21.245127 30.989635 21.076672 30.541191 c 266 | 22.776899 30.541191 l 267 | 22.692781 30.931469 22.305422 32.799973 22.305422 32.799973 c 268 | 22.162468 33.472584 l 269 | 22.102270 33.299385 22.015213 33.061264 21.956493 32.900650 c 270 | 21.916687 32.791775 21.889904 32.718513 21.893339 32.725250 c 271 | h 272 | 22.019402 35.581806 m 273 | 23.601622 35.581806 l 274 | 25.251848 27.775911 l 275 | 23.357883 27.775911 l 276 | 23.357883 27.775911 23.172537 28.672802 23.113811 28.946857 c 277 | 20.487520 28.946857 l 278 | 20.411568 28.739357 20.058210 27.775911 20.058210 27.775911 c 279 | 17.911898 27.775911 l 280 | 20.950272 34.934139 l 281 | 21.160788 35.440750 21.531481 35.581806 22.019402 35.581806 c 282 | h 283 | 7.187424 35.581806 m 284 | 5.184173 30.258858 l 285 | 4.965268 31.338413 l 286 | 4.964661 31.340454 4.964052 31.342497 4.963440 31.344538 c 287 | 4.964299 31.342239 4.965157 31.339939 4.966013 31.337641 c 288 | 4.250575 34.925198 l 289 | 4.132789 35.423748 3.770819 35.564915 3.324732 35.581364 c 290 | 0.033669 35.581364 l 291 | 0.000000 35.423641 l 292 | 0.802363 35.221184 1.520036 34.929478 2.148907 34.566795 c 293 | 3.972088 27.784079 l 294 | 6.135183 27.784079 l 295 | 9.350407 35.581806 l 296 | 7.187424 35.581806 l 297 | h 298 | f* 299 | n 300 | Q 301 | q 302 | 4.429963 0.000000 -0.000000 4.429963 0.000000 -121.527390 cm 303 | 0.000000 0.000000 0.000000 scn 304 | 18.356630 35.390324 m 305 | 17.953163 35.548267 17.313229 35.722656 16.521952 35.722656 c 306 | 14.501923 35.722656 13.079435 34.659767 13.070710 33.140152 c 307 | 13.053932 32.018986 14.089169 31.396263 14.863444 31.022430 c 308 | 15.654833 30.640430 15.923851 30.391098 15.923851 30.050598 c 309 | 15.915797 29.527651 15.284363 29.286596 14.695435 29.286596 c 310 | 13.878766 29.286596 13.441182 29.410877 12.776191 29.701818 c 311 | 12.506839 29.826540 l 312 | 12.220596 28.074261 l 313 | 12.700352 27.858593 13.584247 27.667206 14.501923 27.658817 c 314 | 16.648237 27.658817 18.045557 28.705263 18.062111 30.324654 c 315 | 18.070276 31.213264 17.523630 31.894154 16.345104 32.450542 c 316 | 15.629665 32.807709 15.191523 33.048542 15.191523 33.413986 c 317 | 15.199912 33.746208 15.562104 34.086491 16.369713 34.086491 c 318 | 17.034704 34.103157 17.523296 33.945435 17.893431 33.787601 c 319 | 18.078442 33.704712 l 320 | 18.356630 35.390324 l 321 | h 322 | 10.941720 27.775799 m 323 | 8.896190 27.775799 l 324 | 10.175611 35.581806 l 325 | 12.221030 35.581806 l 326 | 10.941720 27.775799 l 327 | h 328 | 21.893339 32.725250 m 329 | 21.893339 32.725250 21.245127 30.989635 21.076672 30.541191 c 330 | 22.776899 30.541191 l 331 | 22.692781 30.931469 22.305422 32.799973 22.305422 32.799973 c 332 | 22.162468 33.472584 l 333 | 22.102270 33.299385 22.015213 33.061264 21.956493 32.900650 c 334 | 21.916687 32.791775 21.889904 32.718513 21.893339 32.725250 c 335 | h 336 | 22.019402 35.581806 m 337 | 23.601622 35.581806 l 338 | 25.251848 27.775911 l 339 | 23.357883 27.775911 l 340 | 23.357883 27.775911 23.172537 28.672802 23.113811 28.946857 c 341 | 20.487520 28.946857 l 342 | 20.411568 28.739357 20.058210 27.775911 20.058210 27.775911 c 343 | 17.911898 27.775911 l 344 | 20.950272 34.934139 l 345 | 21.160788 35.440750 21.531481 35.581806 22.019402 35.581806 c 346 | h 347 | 7.187424 35.581806 m 348 | 5.184173 30.258858 l 349 | 4.965268 31.338413 l 350 | 4.964661 31.340454 4.964052 31.342497 4.963440 31.344538 c 351 | 4.964299 31.342239 4.965157 31.339939 4.966013 31.337641 c 352 | 4.250575 34.925198 l 353 | 4.132789 35.423748 3.770819 35.564915 3.324732 35.581364 c 354 | 0.033669 35.581364 l 355 | 0.000000 35.423641 l 356 | 0.802363 35.221184 1.520036 34.929478 2.148907 34.566795 c 357 | 3.972088 27.784079 l 358 | 6.135183 27.784079 l 359 | 9.350407 35.581806 l 360 | 7.187424 35.581806 l 361 | h 362 | f* 363 | n 364 | Q 365 | q 366 | /E2 gs 367 | 0.000000 0.000000 0.000000 scn 368 | /E3 gs 369 | 0.000000 1.000000 111.865234 35.722656 re 370 | f 371 | Q 372 | 373 | endstream 374 | endobj 375 | 376 | 11 0 obj 377 | 4476 378 | endobj 379 | 380 | 12 0 obj 381 | << /Annots [] 382 | /Type /Page 383 | /MediaBox [ 0.000000 0.000000 112.865234 36.722656 ] 384 | /Resources 9 0 R 385 | /Contents 10 0 R 386 | /Parent 13 0 R 387 | >> 388 | endobj 389 | 390 | 13 0 obj 391 | << /Kids [ 12 0 R ] 392 | /Count 1 393 | /Type /Pages 394 | >> 395 | endobj 396 | 397 | 14 0 obj 398 | << /Type /Catalog 399 | /Pages 13 0 R 400 | >> 401 | endobj 402 | 403 | xref 404 | 0 15 405 | 0000000000 65535 f 406 | 0000000010 00000 n 407 | 0000002461 00000 n 408 | 0000002484 00000 n 409 | 0000004935 00000 n 410 | 0000004958 00000 n 411 | 0000005120 00000 n 412 | 0000005141 00000 n 413 | 0000005864 00000 n 414 | 0000005885 00000 n 415 | 0000006251 00000 n 416 | 0000010785 00000 n 417 | 0000010809 00000 n 418 | 0000010986 00000 n 419 | 0000011062 00000 n 420 | trailer 421 | << /ID [ (some) (id) ] 422 | /Root 14 0 R 423 | /Size 15 424 | >> 425 | startxref 426 | 11123 427 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/visaLogo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visa.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Assets.xcassets/visaLogo.imageset/visa.pdf: -------------------------------------------------------------------------------- 1 | %PDF-1.7 2 | 3 | 1 0 obj 4 | << >> 5 | endobj 6 | 7 | 2 0 obj 8 | << /Length 3 0 R >> 9 | stream 10 | /DeviceRGB CS 11 | /DeviceRGB cs 12 | q 13 | 4.429963 0.000000 -0.000000 4.429963 0.000000 -75.640068 cm 14 | 0.000000 0.000000 0.000000 scn 15 | 11.152366 21.847576 m 16 | 10.907246 21.945080 10.518466 22.052734 10.037741 22.052734 c 17 | 8.810512 22.052734 7.946306 21.396582 7.941005 20.458481 c 18 | 7.930812 19.766352 8.559751 19.381927 9.030147 19.151150 c 19 | 9.510940 18.915329 9.674376 18.761410 9.674376 18.551208 c 20 | 9.669483 18.228380 9.285868 18.079569 8.928076 18.079569 c 21 | 8.431924 18.079569 8.166079 18.156292 7.762076 18.335899 c 22 | 7.598436 18.412891 l 23 | 7.424535 17.331160 l 24 | 7.716001 17.198021 8.252995 17.079872 8.810511 17.074696 c 25 | 10.114464 17.074696 10.963378 17.720695 10.973436 18.720392 c 26 | 10.978396 19.268957 10.646292 19.689289 9.930301 20.032764 c 27 | 9.495650 20.253254 9.229465 20.401928 9.229465 20.627527 c 28 | 9.234561 20.832617 9.454604 21.042683 9.945251 21.042683 c 29 | 10.349254 21.052971 10.646089 20.955603 10.870957 20.858170 c 30 | 10.983357 20.806999 l 31 | 11.152366 21.847576 l 32 | h 33 | 6.647323 17.146229 m 34 | 5.404601 17.146229 l 35 | 6.181888 21.965103 l 36 | 7.424543 21.965103 l 37 | 6.647323 17.146229 l 38 | h 39 | 13.300434 20.201666 m 40 | 13.300434 20.201666 12.906625 19.130222 12.804282 18.853384 c 41 | 13.837223 18.853384 l 42 | 13.786120 19.094315 13.550786 20.247795 13.550786 20.247795 c 43 | 13.463938 20.663017 l 44 | 13.427436 20.556303 13.374679 20.409664 13.339009 20.310522 c 45 | 13.338832 20.310028 l 46 | 13.338809 20.309967 l 47 | 13.314622 20.242743 13.298347 20.197510 13.300434 20.201666 c 48 | h 49 | 13.377021 21.965103 m 50 | 14.338268 21.965103 l 51 | 15.340832 17.146297 l 52 | 14.190190 17.146297 l 53 | 14.190190 17.146297 14.077585 17.699972 14.041908 17.869156 c 54 | 12.446355 17.869156 l 55 | 12.185536 17.146297 l 56 | 10.881585 17.146297 l 57 | 12.727491 21.565279 l 58 | 12.855386 21.878025 13.080594 21.965103 13.377021 21.965103 c 59 | h 60 | 4.366853 21.965103 m 61 | 3.149818 18.679092 l 62 | 3.016827 19.345533 l 63 | 3.016587 19.346354 3.016346 19.347174 3.016105 19.347994 c 64 | 3.016405 19.347179 3.016704 19.346363 3.017003 19.345547 c 65 | 2.582352 21.560249 l 66 | 2.510794 21.868021 2.290886 21.955168 2.019875 21.965321 c 67 | 0.020455 21.965321 l 68 | 0.000000 21.867954 l 69 | 0.487533 21.742952 0.923600 21.562840 1.305699 21.338896 c 70 | 2.413440 17.151340 l 71 | 3.727585 17.151340 l 72 | 5.680930 21.965103 l 73 | 4.366853 21.965103 l 74 | h 75 | f* 76 | n 77 | Q 78 | 79 | endstream 80 | endobj 81 | 82 | 3 0 obj 83 | 2174 84 | endobj 85 | 86 | 4 0 obj 87 | << /Annots [] 88 | /Type /Page 89 | /MediaBox [ 0.000000 0.000000 67.958984 22.052734 ] 90 | /Resources 1 0 R 91 | /Contents 2 0 R 92 | /Parent 5 0 R 93 | >> 94 | endobj 95 | 96 | 5 0 obj 97 | << /Kids [ 4 0 R ] 98 | /Count 1 99 | /Type /Pages 100 | >> 101 | endobj 102 | 103 | 6 0 obj 104 | << /Type /Catalog 105 | /Pages 5 0 R 106 | >> 107 | endobj 108 | 109 | xref 110 | 0 7 111 | 0000000000 65535 f 112 | 0000000010 00000 n 113 | 0000000034 00000 n 114 | 0000002264 00000 n 115 | 0000002287 00000 n 116 | 0000002460 00000 n 117 | 0000002534 00000 n 118 | trailer 119 | << /ID [ (some) (id) ] 120 | /Root 6 0 R 121 | /Size 7 122 | >> 123 | startxref 124 | 2593 125 | %%EOF -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/CardsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CardsView.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct CardsView: View { 13 | var body: some View { 14 | NavigationView { 15 | ZStack { 16 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 17 | 18 | CardsListView(cards: TestData.cards) 19 | .navigationBarTitle("") 20 | .navigationBarHidden(true) 21 | } 22 | } 23 | .accentColor(Color(#colorLiteral(red: 0.6078431373, green: 0.6156862745, blue: 0.6941176471, alpha: 1))) 24 | } 25 | } 26 | 27 | 28 | 29 | struct CardsView_Previews: PreviewProvider { 30 | static var previews: some View { 31 | CardsView() 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Helper/HexColors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HexColors.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 15.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | extension Int { 13 | 14 | var color: Color { 15 | return Color(UIColor(netHex: self)) 16 | } 17 | 18 | } 19 | 20 | 21 | public extension UIColor { 22 | 23 | convenience init(red: Int, green: Int, blue: Int) { 24 | assert(red >= 0 && red <= 255, "Invalid red component") 25 | assert(green >= 0 && green <= 255, "Invalid green component") 26 | assert(blue >= 0 && blue <= 255, "Invalid blue component") 27 | 28 | self.init(red: CGFloat(red) / 255.0, 29 | green: CGFloat(green) / 255.0, 30 | blue: CGFloat(blue) / 255.0, 31 | alpha: 1.0) 32 | } 33 | 34 | convenience init(netHex: Int) { 35 | self.init(red: (netHex >> 16) & 0xFF, 36 | green: (netHex >> 8) & 0xFF, 37 | blue: netHex & 0xFF) 38 | } 39 | 40 | } 41 | 42 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Helper/HostingController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HostingController.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | // using this to provide .lightContent status bar style 13 | class HostingController: UIHostingController { 14 | override var preferredStatusBarStyle: UIStatusBarStyle { 15 | return .lightContent 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | 37 | 38 | 39 | 40 | UILaunchStoryboardName 41 | LaunchScreen 42 | UIRequiredDeviceCapabilities 43 | 44 | armv7 45 | 46 | UIStatusBarStyle 47 | UIStatusBarStyleLightContent 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | 52 | UISupportedInterfaceOrientations~ipad 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationPortraitUpsideDown 56 | UIInterfaceOrientationLandscapeLeft 57 | UIInterfaceOrientationLandscapeRight 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Model/Card.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Card.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | struct Card { 13 | 14 | let colors: CardColors 15 | let cardNumber: String 16 | let serviceLogo: UIImage 17 | let serviceLogoBig: UIImage 18 | let amonut: Double 19 | } 20 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Model/CardColors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CardColors.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | enum CardUIState { 13 | case small, big 14 | } 15 | 16 | struct CardColorTemplate { 17 | 18 | var fillColors: [Color] 19 | var borderColors: [Color] 20 | 21 | func fillGradient(for cardState: CardUIState) -> LinearGradient { 22 | let startPoint: UnitPoint 23 | let endPoint: UnitPoint 24 | 25 | switch cardState { 26 | case .small: 27 | startPoint = UnitPoint(x: 0.2, y: 0.9) 28 | endPoint = UnitPoint(x: 0.9, y: 0.1) 29 | case.big: 30 | startPoint = UnitPoint(x: 0.2, y: 0.1) 31 | endPoint = UnitPoint(x: 0.9, y: 0.9) 32 | } 33 | 34 | return LinearGradient( 35 | gradient: Gradient(colors: fillColors), 36 | startPoint: startPoint, 37 | endPoint: endPoint) 38 | } 39 | 40 | func borderGradient(for cardState: CardUIState) -> LinearGradient { 41 | let startPoint: UnitPoint 42 | let endPoint: UnitPoint 43 | 44 | switch cardState { 45 | case .small: 46 | startPoint = .bottomLeading 47 | endPoint = .topTrailing 48 | case.big: 49 | startPoint = .topLeading 50 | endPoint = .bottomTrailing 51 | } 52 | 53 | return LinearGradient( 54 | gradient: Gradient(colors: borderColors), 55 | startPoint: startPoint, 56 | endPoint: endPoint) 57 | } 58 | 59 | } 60 | 61 | struct CardColors { 62 | 63 | // MARK: - Constants 64 | 65 | enum Predefined { 66 | case pink 67 | case blue 68 | case green 69 | case yellow 70 | case violet 71 | 72 | var colors: CardColors { 73 | switch self { 74 | 75 | case .pink: 76 | return CardColors(template: CardColorTemplate(fillColors: [0xA36BCF.color, 0xE77557.color], 77 | borderColors: [0xB88BDB.color, 0xCF5942.color]), 78 | service: [0xB45E89.color, 0xB1597E.color], 79 | serviceBig: 0xBB5C72.color, 80 | chip: [0xBA5E87.color, 0xAB5688.color], 81 | number: 0x491D67.color) 82 | 83 | case .blue: 84 | return CardColors(template: CardColorTemplate(fillColors: [0x91EAE4.color, 0x86A8E7.color, 0x7F7FD5.color], 85 | borderColors: [0xB4F4EF.color, 0x5959BA.color]), 86 | service: [0x6E9AD6.color, 0x6E92D8.color], 87 | serviceBig: 0x7188CF.color, 88 | chip: [0x6D94DA.color, 0x6B99D6.color], 89 | number: 0x185E66.color) 90 | 91 | case .green: 92 | return CardColors(template: CardColorTemplate(fillColors: [0x99F2C8.color, 0x396063.color], 93 | borderColors: [0xB6FDDC.color, 0x254B4E.color]), 94 | service: [0x579C85.color,0x52957E.color], 95 | serviceBig: 0x518D7C.color, 96 | chip: [0x539A83.color, 0x4A947A.color], 97 | number: 0x174E34.color) 98 | 99 | case .yellow: 100 | return CardColors(template: CardColorTemplate(fillColors: [0xF9ED80.color, 0xDF832E.color], 101 | borderColors: [0xFFF8B6.color, 0xB15F13.color]), 102 | service: [0xD6A63D.color, 0xCF9B34.color], 103 | serviceBig: 0xC9943C.color, 104 | chip: [0xD7A037.color, 0xD6A439.color], 105 | number: 0x5B4108.color) 106 | 107 | case .violet: 108 | return CardColors(template: CardColorTemplate(fillColors: [0xB0D0FF.color, 0x914CE8.color], 109 | borderColors: [0xCADFFF.color, 0x6631B0.color]), 110 | service: [0x8E80E8.color, 0x8573E1.color], 111 | serviceBig: 0x9179EC.color, 112 | chip: [0x8D7CE7.color, 0x8A7FE4.color], 113 | number: 0x491D67.color) 114 | } 115 | } 116 | } 117 | 118 | 119 | // MARK: - Properties 120 | 121 | let template: CardColorTemplate 122 | let service: [Color] 123 | let serviceBig: Color 124 | let chip: [Color] 125 | let number: Color 126 | 127 | var serviceGradient: LinearGradient { 128 | return LinearGradient( 129 | gradient: Gradient(colors: service), 130 | startPoint: .topLeading, 131 | endPoint: .bottomTrailing) 132 | } 133 | 134 | var chipGradient: LinearGradient { 135 | return LinearGradient( 136 | gradient: Gradient(colors: chip), 137 | startPoint: .topLeading, 138 | endPoint: .bottomTrailing) 139 | } 140 | 141 | } 142 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Model/TestData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestData.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | enum TestData { 13 | 14 | static let cards: [Card] = [ 15 | Card(colors: CardColors.Predefined.pink.colors, 16 | cardNumber: "•• 8656", 17 | serviceLogo: UIImage(named: "visaLogo")!, 18 | serviceLogoBig: UIImage(named: "visaBig")!, 19 | amonut: 603), 20 | 21 | Card(colors: CardColors.Predefined.blue.colors, 22 | cardNumber: "•• 3456", 23 | serviceLogo: UIImage(named: "mastercardLogo")!, 24 | serviceLogoBig: UIImage(named: "mastercardBig")!, 25 | amonut: 305), 26 | 27 | Card(colors: CardColors.Predefined.green.colors, 28 | cardNumber: "•• 5678", 29 | serviceLogo: UIImage(named: "visaLogo")!, 30 | serviceLogoBig: UIImage(named: "visaBig")!, 31 | amonut: 700), 32 | 33 | Card(colors: CardColors.Predefined.yellow.colors, 34 | cardNumber: "•• 2768", 35 | serviceLogo: UIImage(named: "visaLogo")!, 36 | serviceLogoBig: UIImage(named: "visaBig")!, 37 | amonut: 439), 38 | 39 | Card(colors: CardColors.Predefined.violet.colors, 40 | cardNumber: "•• 8976", 41 | serviceLogo: UIImage(named: "mastercardLogo")!, 42 | serviceLogoBig: UIImage(named: "mastercardBig")!, 43 | amonut: 980), 44 | ] 45 | 46 | } 47 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 25.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SwiftUI 11 | 12 | 13 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | 18 | func scene(_ scene: UIScene, 19 | willConnectTo session: UISceneSession, 20 | options connectionOptions: UIScene.ConnectionOptions) { 21 | let contentView = CardsView() 22 | 23 | if let windowScene = scene as? UIWindowScene { 24 | let window = UIWindow(windowScene: windowScene) 25 | window.rootViewController = HostingController(rootView: contentView) 26 | self.window = window 27 | window.makeKeyAndVisible() 28 | } 29 | } 30 | 31 | } 32 | 33 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/TransferAmountView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransferAmountView.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 30.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct TransferAmountView: View { 13 | 14 | let card: Card 15 | 16 | @State private var isDragging: Bool = false 17 | 18 | @State private var progress: CGFloat = 0.5 19 | @State private var newProgress: CGFloat = 0.5 20 | 21 | @State private var showSlider: Bool = false 22 | 23 | private let currencyFormatter: NumberFormatter = { 24 | let currencyFormatter = NumberFormatter() 25 | currencyFormatter.usesGroupingSeparator = true 26 | currencyFormatter.numberStyle = .currency 27 | currencyFormatter.currencySymbol = "$" 28 | currencyFormatter.locale = Locale(identifier: "en") 29 | currencyFormatter.maximumFractionDigits = 0 30 | 31 | return currencyFormatter 32 | }() 33 | 34 | 35 | var body: some View { 36 | let cardHeight: CGFloat = 316 37 | let sliderPinSize: CGFloat = 68 38 | let indicatorDepth = sliderPinSize/2 + 10 39 | let sliderPad: CGFloat = indicatorDepth*2.34 40 | 41 | let longPressDrag = LongPressGesture(minimumDuration: 0.01) 42 | .simultaneously(with: DragGesture()) 43 | .onChanged { (gestures) in 44 | self.isDragging = gestures.first ?? false 45 | let translation = gestures.second?.translation.height ?? 0 46 | self.progress = max(0, min(1, -translation/(cardHeight+sliderPinSize/2) + self.newProgress)) 47 | } 48 | .onEnded { (gestures) in 49 | self.isDragging = false 50 | let translation = gestures.second?.translation.height ?? 0 51 | self.progress = max(0, min(1, -translation/(cardHeight+sliderPinSize/2) + self.newProgress)) 52 | self.newProgress = self.progress 53 | } 54 | 55 | let backgroundGradient = card.colors.template.fillGradient(for: .big) 56 | let borderGradient = card.colors.template.borderGradient(for: .big) 57 | 58 | let cardShape = TransferAmountCardShape(progress: progress, 59 | indicatorDepth: 0, 60 | cornerRadius: 20, 61 | inset: sliderPad) 62 | .iDepthUpdate(self.showSlider ? indicatorDepth : 0) 63 | 64 | let sliderOffset = cardHeight/2-CGFloat(cardHeight*progress) 65 | 66 | let currentValue = currencyFormatter.string(from: NSNumber(value: card.amonut*Double(progress))) ?? "" 67 | 68 | return ZStack { 69 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 70 | 71 | VStack { 72 | Spacer() 73 | 74 | HStack(spacing: 0) { 75 | 76 | cardShape 77 | .fill(backgroundGradient) 78 | .overlay(cardShape.stroke(borderGradient, lineWidth: 2) 79 | .padding(1)) 80 | .shadow(color: Color(#colorLiteral(red: 0.0862745098, green: 0.1058823529, blue: 0.2039215686, alpha: 1)), radius: 30, x: -10, y: 10) 81 | .zIndex(1) 82 | .overlay( 83 | CardInfoView(card: card, value: currentValue) 84 | .padding(.horizontal, 28) 85 | ) 86 | .padding(.vertical, -sliderPad) 87 | .onAppear { 88 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { 89 | withAnimation(.easeInOut(duration: 0.25)) { 90 | self.showSlider = true 91 | } 92 | } 93 | } 94 | 95 | SliderPin(size: sliderPinSize, colors: card.colors.template) 96 | .scaleEffect(isDragging ? 1.0 : 0.8) 97 | .animation(.easeInOut(duration: 0.08)) 98 | .padding(.leading, -sliderPinSize/2) 99 | .offset(y: sliderOffset) 100 | .animation(nil) 101 | .gesture(longPressDrag) 102 | .opacity(self.showSlider ? 1 : 0 ) 103 | .offset(x: self.showSlider ? 0 : sliderPinSize) 104 | 105 | AmountRulerView(maxValue: card.amonut) 106 | .update(progress: progress) 107 | .isVisibleUpdate(self.showSlider) 108 | .frame(width: 40) 109 | .padding(.vertical, -1) 110 | .padding(.trailing, 16) 111 | .padding(.leading, 18) 112 | 113 | } 114 | .frame(height: cardHeight) 115 | .padding(.leading, -4) 116 | 117 | Spacer() 118 | 119 | HStack() { 120 | Spacer() 121 | NeumorphismButton(icon: "arrow.right") 122 | 123 | } 124 | .padding(.horizontal, 16) 125 | .padding(.top, 20) 126 | .padding(.bottom, 32) 127 | 128 | } 129 | } 130 | } 131 | 132 | } 133 | 134 | 135 | 136 | struct CustomCardTest_Previews: PreviewProvider { 137 | static var previews: some View { 138 | TransferAmountView(card: TestData.cards[2]) 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/UIConstants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIConstants.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 29.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | enum UIConstants { 13 | 14 | static let cardAspectRatio: CGFloat = 1.635 15 | 16 | } 17 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/AmountRulerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AmountRulerView.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 30.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct AmountRulerView: View { 13 | 14 | // MARK: - Properties 15 | 16 | let maxValue: Double 17 | var progress: CGFloat = 0 18 | 19 | private let lines = 6 20 | 21 | var isVisible: Bool = false 22 | var animatableData: Bool { 23 | get { return isVisible } 24 | set { isVisible = newValue } 25 | } 26 | 27 | 28 | // MARK: - Body 29 | 30 | var body: some View { 31 | ZStack() { 32 | GeometryReader { container in 33 | VStack(alignment: .trailing, spacing: 0) { 34 | Spacer() 35 | 36 | ForEach(1.. some View { 74 | let segmentSize = container.size.height / CGFloat(lines) 75 | 76 | let rulerHeight = container.size.height 77 | let progressPosition = rulerHeight*(1-progress) 78 | let currentPosition = geometry.frame(in: .global).midY-container.frame(in: .global).minY 79 | 80 | let before = min(1, max(0, progressPosition-segmentSize*CGFloat(index-1))/segmentSize) 81 | let after = min(1, max(0, (segmentSize*CGFloat(index+1)-progressPosition)/segmentSize)) 82 | 83 | let modifier = progressPosition < currentPosition ? before : after 84 | 85 | let width = max(20, container.size.width*modifier) * (isVisible ? 1 : 0) 86 | 87 | return 88 | RoundedRectangle(cornerRadius: 1) 89 | .fill(Color.white.opacity(max(0.4, Double(modifier)))) 90 | .frame(width: width) 91 | .offset(x: (container.size.width - width)/2) 92 | } 93 | 94 | func isVisibleUpdate(_ value: Bool) -> AmountRulerView { 95 | var `self` = self 96 | self.isVisible = value 97 | return self 98 | } 99 | 100 | func update(progress: CGFloat) -> AmountRulerView { 101 | var `self` = self 102 | self.progress = progress 103 | return self 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/CardInfoView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CardInfoView.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 02.07.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct CardInfoView: View { 13 | 14 | let card: Card 15 | 16 | var value: String 17 | 18 | var body: some View { 19 | HStack { 20 | VStack(alignment:.leading, spacing: 0) { 21 | VStack(alignment:.leading, spacing: 10) { 22 | Image(systemName: "person.fill") 23 | .foregroundColor(card.colors.serviceBig) 24 | .font(.system(size: 76.0)) 25 | .frame(width: 112, height: 112) 26 | .background(Color.white) 27 | .clipShape(Circle()) 28 | .padding(.top, 44) 29 | 30 | Text(value) 31 | .font(.system(size: 56)) 32 | .foregroundColor(.white) 33 | } 34 | .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.2)), 35 | radius: 30, x: 5, y: 5) 36 | 37 | Spacer() 38 | HStack { 39 | EmbossedView(content: Image(uiImage: card.serviceLogoBig), 40 | fill: card.colors.serviceBig) 41 | .padding(.bottom, 46) 42 | 43 | } 44 | } 45 | Spacer() 46 | } 47 | } 48 | 49 | } 50 | 51 | 52 | 53 | struct CardInfoView_Previews: PreviewProvider { 54 | static var previews: some View { 55 | let card = TestData.cards[3] 56 | return ZStack { 57 | card.colors.template.fillGradient(for: .big).edgesIgnoringSafeArea(.all) 58 | CardInfoView(card: card, value: "$364") 59 | .frame(height: 400) 60 | .padding(.horizontal, 32) 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/CardView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CardView.swift 3 | // UITest 4 | // 5 | // Created by Roman Churkin on 22.05.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct CardView: View { 13 | 14 | // MARK: - Data 15 | 16 | let card: Card 17 | 18 | 19 | // MARK: - Animatable 20 | 21 | var shadowOpacity: CGFloat = 1 22 | var animatableData: CGFloat { 23 | get { return shadowOpacity } 24 | set { shadowOpacity = newValue } 25 | } 26 | 27 | var body: some View { 28 | let backgroundGradient = card.colors.template.fillGradient(for: .small) 29 | let borderGradient = card.colors.template.borderGradient(for: .small) 30 | let serviceGradient = card.colors.serviceGradient 31 | let chipGradient = card.colors.chipGradient 32 | 33 | return ZStack(alignment: .bottomLeading) { 34 | RoundedRectangle(cornerRadius: 20) 35 | .fill(backgroundGradient) 36 | 37 | VStack { 38 | EmbossedView(content: Image(uiImage: UIImage(named: "chip")!), 39 | fill: chipGradient) 40 | .padding([.leading,.top], 30) 41 | Spacer() 42 | } 43 | 44 | HStack { 45 | Spacer() 46 | EmbossedView(content: Image(uiImage: card.serviceLogo), 47 | fill: serviceGradient) 48 | .padding(34) 49 | } 50 | 51 | Text(card.cardNumber) 52 | .foregroundColor(card.colors.number) 53 | .font(.system(size: 20.0)) 54 | .fontWeight(.medium) 55 | .opacity(0.6) 56 | .embossedShadow() 57 | .padding(.leading, 34) 58 | .padding(.bottom, 28) 59 | } 60 | .overlay(RoundedRectangle(cornerRadius: 20) 61 | .stroke(borderGradient, lineWidth: 2) 62 | .padding(1)) 63 | .cornerRadius(20) 64 | .aspectRatio(UIConstants.cardAspectRatio, contentMode: .fit) 65 | .shadow(color: Color(#colorLiteral(red: 0.1607843137, green: 0.1843137255, blue: 0.3333333333, alpha: 0.55).withAlphaComponent(shadowOpacity)), 66 | radius: 33, x: 12, y: 12) 67 | 68 | } 69 | 70 | } 71 | 72 | 73 | 74 | struct CardView_Previews: PreviewProvider { 75 | static var previews: some View { 76 | ZStack { 77 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 78 | ScrollView(.vertical, showsIndicators: false) { 79 | VStack { 80 | ForEach(0.. some View { 25 | let w = geometry.size.width - 24*2 26 | let h = ceil(w/UIConstants.cardAspectRatio) 27 | let topPadding = geometry.frame(in: .global).minY 28 | let fullHeight = h * CGFloat(cards.count) 29 | let contentHeight = h * CGFloat(cards.count) 30 | let minCardHeight = h * 0.5 31 | let minContentHeight = h+minCardHeight*CGFloat(cards.count-1) 32 | let bottomPadding = contentHeight-minContentHeight 33 | 34 | return VStack(spacing: 0) { 35 | ForEach(0.. some View { 51 | let offsteAndOpacity = 52 | self.calculateOffsetAndOpacity(at: index, 53 | cardGeometry: geometry, 54 | topPadding: screenTopPadding) 55 | 56 | var cardView = CardView(card: cards[index]) 57 | cardView.shadowOpacity = offsteAndOpacity.shadowOpactity 58 | 59 | return 60 | cardView 61 | .overlay(NavigationLink(destination: TransferAmountView(card: self.cards[index])) { 62 | Rectangle().opacity(0) 63 | }) 64 | .offset(y: -offsteAndOpacity.yOffset) 65 | } 66 | 67 | func calculateOffsetAndOpacity(at index: Int, 68 | cardGeometry: GeometryProxy, 69 | topPadding: CGFloat) -> (yOffset: CGFloat, shadowOpactity: CGFloat) { 70 | let height = cardGeometry.size.height 71 | let halfheight: CGFloat = height / 2 72 | 73 | let index: CGFloat = CGFloat(index) 74 | 75 | let pad = halfheight * index 76 | 77 | let shift = cardGeometry.frame(in: .global).minY - topPadding - height * index 78 | 79 | let fixedCardPosition = pad + shift 80 | 81 | if shift >= 0 { 82 | return (fixedCardPosition - shift * (index + 1) / 4, 1) 83 | } else { 84 | let opacity = max(fixedCardPosition / halfheight * 4, 0) 85 | let offset = fixedCardPosition - max(-halfheight * index, shift) 86 | return (offset, index==0 ? 1 : opacity) 87 | } 88 | } 89 | 90 | } 91 | 92 | 93 | 94 | struct TestView_Previews: PreviewProvider { 95 | static var previews: some View { 96 | ZStack { 97 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 98 | CardsListView(cards: TestData.cards) 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/EmbossedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmbossedView.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 30.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct EmbossedShadow: ViewModifier { 13 | func body(content: Content) -> some View { 14 | content 15 | .shadow(color: Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 0.3)), 16 | radius: 0, x: 1.2, y: 1.2) 17 | } 18 | } 19 | 20 | 21 | extension View { 22 | func embossedShadow() -> some View { 23 | self.modifier(EmbossedShadow()) 24 | } 25 | } 26 | 27 | 28 | struct EmbossedView: View { 29 | 30 | let content: Content 31 | let fill: Fill 32 | var body: some View { 33 | content 34 | .foregroundColor(.black) 35 | .opacity(0.3) 36 | .overlay( 37 | fill 38 | .padding(-2) 39 | .mask(content) 40 | .embossedShadow() 41 | .padding([.leading, .top], 1) 42 | ) 43 | } 44 | 45 | } 46 | 47 | 48 | 49 | struct EmbossedView_Previews: PreviewProvider { 50 | static var previews: some View { 51 | let card = TestData.cards[1] 52 | return ZStack { 53 | card.colors.template.fillGradient(for: .big).edgesIgnoringSafeArea(.all) 54 | EmbossedView(content: Image(uiImage: card.serviceLogoBig), 55 | fill: card.colors.serviceBig) 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/NeumorphismButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NeumorphismButton.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 15.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct NeumorphismButton: View { 13 | var icon: String 14 | 15 | var body: some View { 16 | let gradient = Gradient(colors: [Color(#colorLiteral(red: 0.1725490196, green: 0.1921568627, blue: 0.3333333333, alpha: 1)),Color(#colorLiteral(red: 0.2509803922, green: 0.2784313725, blue: 0.4274509804, alpha: 1))]) 17 | let linear = LinearGradient(gradient: gradient, 18 | startPoint: .topLeading, 19 | endPoint: .bottomTrailing) 20 | 21 | return 22 | Button(action: {}) { 23 | Image(systemName: icon) 24 | .resizable() 25 | .padding(20) 26 | .foregroundColor(Color(#colorLiteral(red: 0.6078431373, green: 0.6156862745, blue: 0.6941176471, alpha: 1))) 27 | .overlay( 28 | ZStack { 29 | Circle() 30 | .strokeBorder( 31 | linear, 32 | lineWidth: 2) 33 | .shadow(color: Color.white.opacity(0.1), 34 | radius: 3, x: 2, y: 2) 35 | .clipShape(Circle()) 36 | .shadow(color: Color.black.opacity(0.1), 37 | radius: 3, x: -2, y: -2) 38 | .clipShape(Circle()) 39 | } 40 | ) 41 | .background( 42 | ZStack { 43 | Circle() 44 | .shadow(color: .white, radius: 16, x: -5, y: -5) 45 | .shadow(color: .black, radius: 16, x: 5, y: 5) 46 | .blendMode(.overlay) 47 | .opacity(0.5) 48 | Circle() 49 | .fill(Color(#colorLiteral(red: 0.1882352941, green: 0.2117647059, blue: 0.3490196078, alpha: 1))) 50 | } 51 | ) 52 | } 53 | .foregroundColor(Color(#colorLiteral(red: 0.1882352941, green: 0.2117647059, blue: 0.3490196078, alpha: 1))) 54 | .frame(width: 65, height: 65) 55 | } 56 | } 57 | 58 | 59 | 60 | struct NeumorphismButton_Previews: PreviewProvider { 61 | static var previews: some View { 62 | ZStack { 63 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 64 | NeumorphismButton(icon: "magnifyingglass") 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/SliderPin.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SliderPin.swift 3 | // NeumorphicWallet 4 | // 5 | // Created by Roman Churkin on 30.06.2020. 6 | // Copyright © 2020 Redmadrobot. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct SliderPin: View { 13 | let size: CGFloat 14 | let colors: CardColorTemplate 15 | 16 | var body: some View { 17 | let backgroundGradient = colors.fillGradient(for: .big) 18 | let borderGradient = colors.borderGradient(for: .big) 19 | 20 | return ZStack { 21 | Circle() 22 | .fill(backgroundGradient) 23 | .overlay(Circle() 24 | .stroke(borderGradient, lineWidth: 2) 25 | .padding(2)) 26 | .shadow(color: Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 0.15)), radius: 20, x: -4, y: -4) 27 | .shadow(color: Color(#colorLiteral(red: 0.0862745098, green: 0.1058823529, blue: 0.2039215686, alpha: 1)), radius: 30, x: 4, y: 4) 28 | 29 | Image("arrow") 30 | 31 | } 32 | .frame(width: size, height: size) 33 | } 34 | 35 | } 36 | 37 | 38 | 39 | struct SliderPin_Previews: PreviewProvider { 40 | static var previews: some View { 41 | let card = TestData.cards[2] 42 | return ZStack { 43 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 44 | SliderPin(size: 68, colors: card.colors.template) 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /NeumorphicWallet/NeumorphicWallet/View/TransferAmountCardShape.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransferAmountCardShape.swift 3 | // CreditCards 4 | // 5 | // Created by Roman Churkin on 01.06.2020. 6 | // Copyright © 2020 Firmach. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | 12 | struct TransferAmountCardShape: Shape { 13 | 14 | let progress: CGFloat 15 | 16 | var indicatorDepth: CGFloat 17 | 18 | var animatableData: CGFloat { 19 | get { return indicatorDepth } 20 | set { indicatorDepth = newValue } 21 | } 22 | 23 | let cornerRadius: CGFloat 24 | 25 | let inset: CGFloat 26 | 27 | func iDepthUpdate(_ value: CGFloat) -> TransferAmountCardShape { 28 | var `self` = self 29 | self.indicatorDepth = value 30 | return self 31 | } 32 | 33 | func path(in rect: CGRect) -> Path { 34 | var path = Path() 35 | 36 | let h = rect.height - inset*2 37 | 38 | path.move(to: CGPoint(x: rect.minX, y: rect.minY)) 39 | 40 | let d = h-(h*progress-inset+indicatorDepth) // inverted progress 41 | 42 | path.addLine(to: CGPoint(x: rect.maxX-cornerRadius, y: rect.minY)) 43 | 44 | path.addArc(center: CGPoint(x: rect.maxX-cornerRadius, 45 | y: rect.minY+cornerRadius), 46 | radius: cornerRadius, 47 | startAngle: .degrees(-90), 48 | endAngle: .degrees(0), 49 | clockwise: false) 50 | 51 | path.addLine(to: CGPoint(x: rect.maxX, 52 | y: rect.minY+d-indicatorDepth)) 53 | 54 | path.addCurve(to: CGPoint(x: rect.maxX-indicatorDepth, 55 | y: (rect.minY+d+indicatorDepth)), 56 | control1: CGPoint(x: rect.maxX, 57 | y: rect.minY+d+indicatorDepth/4), 58 | control2: CGPoint(x: rect.maxX-indicatorDepth, 59 | y: rect.minY+d)) 60 | 61 | path.addCurve(to: CGPoint(x: rect.maxX, y: rect.minY+d+indicatorDepth*3), 62 | control1: CGPoint(x: rect.maxX-indicatorDepth, 63 | y: rect.minY+d+indicatorDepth*2), 64 | control2: CGPoint(x: rect.maxX, 65 | y: rect.minY+d+indicatorDepth*2-indicatorDepth/4)) 66 | 67 | path.addLine(to: CGPoint(x: rect.maxX, y: max(0, rect.maxY-cornerRadius))) 68 | 69 | path.addArc(center: CGPoint(x: rect.maxX-cornerRadius, 70 | y: rect.maxY-cornerRadius), 71 | radius: cornerRadius, 72 | startAngle: .degrees(0), 73 | endAngle: .degrees(90), 74 | clockwise: false) 75 | 76 | path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY)) 77 | 78 | path.closeSubpath() 79 | 80 | return path 81 | } 82 | 83 | } 84 | 85 | 86 | 87 | struct TransferAmountCardView_Previews: PreviewProvider { 88 | static var previews: some View { 89 | return ZStack { 90 | Color(UIColor(named: "backgroundColor")!).edgesIgnoringSafeArea(.all) 91 | TransferAmountCardShape(progress: 0.5, 92 | indicatorDepth: 50, 93 | cornerRadius: 20, 94 | inset: 80) 95 | .padding(.vertical, 88) 96 | .padding(.leading, 4) 97 | .padding(.trailing, 64) 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Redmadrobot](https://github.com/RedMadRobot/NeumorphicWallet/blob/master/header.svg)](http://redmadrobot.com) 2 | 3 |
4 | 5 | # 💳 Neumorphic Wallet 6 | [![Redmadrobot](https://img.shields.io/badge/made%20by%20robots-for%20humans-EB5440.svg)](https://github.com/RedMadRobot) [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RedMadRobot/NeumorphicWallet/blob/master/LICENSE) 7 | 8 |
9 | 10 | New Neumorphic Wallet concept designed by Redmadrobot and implemented with SwiftUI. 11 | 12 | 13 | 14 | 19 | 24 | 25 |
15 | 16 | [![Watch the video](https://github.com/RedMadRobot/NeumorphicWallet/blob/master/preview-1.png)](https://youtu.be/0rzUMX92Z84) 17 | 18 | 20 | 21 | [![Watch the video](https://github.com/RedMadRobot/NeumorphicWallet/blob/master/preview-2.png)](https://youtu.be/0rzUMX92Z84) 22 | 23 |
27 | 28 | Special thanks to [Inna Kondratyeva](https://www.facebook.com/koninner) (concept creator), [Katy Mykhailova](https://www.facebook.com/katymykhailova) and [Zhenya Bondarev](https://www.facebook.com/bondarev.eu) 29 | 30 |
31 | 32 | 33 | Feel free to use this code in your projects and [![](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/Firmach) me if you have any questions or suggestions. 34 | 35 |
36 | 37 | ## License 38 | 39 | Neumorphic Wallet is available under the MIT license. 40 | 41 |
42 | 43 | [![Redmadrobot](https://github.com/RedMadRobot/NeumorphicWallet/blob/master/robot.svg)](http://redmadrobot.com) 44 | -------------------------------------------------------------------------------- /header.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 14 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /preview-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/preview-1.png -------------------------------------------------------------------------------- /preview-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RedMadRobot/NeumorphicWallet/e68eff301497908c787584919074cc77f55f5d5d/preview-2.png -------------------------------------------------------------------------------- /robot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 15 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | --------------------------------------------------------------------------------