From b1f87a7ab9ab4184aa05a2fde5fd6d00a02d6ba0 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 13 May 2022 14:12:19 -0500 Subject: [PATCH 01/27] chore: set up demo project --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 389 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + PYLayoutDemo/PYLayoutDemo/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../PYLayoutDemo/Base.lproj/Main.storyboard | 24 ++ PYLayoutDemo/PYLayoutDemo/Info.plist | 25 ++ PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift | 52 +++ .../PYLayoutDemo/ViewController.swift | 19 + Package.swift | 3 + Tests/PYLayoutTests/PYLayoutTests.swift | 2 +- 14 files changed, 704 insertions(+), 1 deletion(-) create mode 100644 PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj create mode 100644 PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 PYLayoutDemo/PYLayoutDemo/AppDelegate.swift create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/Contents.json create mode 100644 PYLayoutDemo/PYLayoutDemo/Base.lproj/LaunchScreen.storyboard create mode 100644 PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard create mode 100644 PYLayoutDemo/PYLayoutDemo/Info.plist create mode 100644 PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift create mode 100644 PYLayoutDemo/PYLayoutDemo/ViewController.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8771eba --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -0,0 +1,389 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B2282EE49E003DA929 /* AppDelegate.swift */; }; + 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */; }; + 2F9321B7282EE49E003DA929 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B6282EE49E003DA929 /* ViewController.swift */; }; + 2F9321BA282EE49E003DA929 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321B8282EE49E003DA929 /* Main.storyboard */; }; + 2F9321BC282EE49E003DA929 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BB282EE49E003DA929 /* Assets.xcassets */; }; + 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; + 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; + 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2F9321AF282EE49E003DA929 /* PYLayoutDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PYLayoutDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F9321B2282EE49E003DA929 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 2F9321B6282EE49E003DA929 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 2F9321B9282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2F9321BB282EE49E003DA929 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2F9321AC282EE49E003DA929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2F9321A6282EE49E003DA929 = { + isa = PBXGroup; + children = ( + 2F9321C6282EE4C1003DA929 /* PYLayout */, + 2F9321B1282EE49E003DA929 /* PYLayoutDemo */, + 2F9321B0282EE49E003DA929 /* Products */, + 2F9321C8282EE4F2003DA929 /* Frameworks */, + ); + sourceTree = ""; + }; + 2F9321B0282EE49E003DA929 /* Products */ = { + isa = PBXGroup; + children = ( + 2F9321AF282EE49E003DA929 /* PYLayoutDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + 2F9321B1282EE49E003DA929 /* PYLayoutDemo */ = { + isa = PBXGroup; + children = ( + 2F9321B2282EE49E003DA929 /* AppDelegate.swift */, + 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */, + 2F9321B6282EE49E003DA929 /* ViewController.swift */, + 2F9321B8282EE49E003DA929 /* Main.storyboard */, + 2F9321BB282EE49E003DA929 /* Assets.xcassets */, + 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */, + 2F9321C0282EE49E003DA929 /* Info.plist */, + ); + path = PYLayoutDemo; + sourceTree = ""; + }; + 2F9321C8282EE4F2003DA929 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2F9321AE282EE49E003DA929 /* PYLayoutDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2F9321C3282EE49E003DA929 /* Build configuration list for PBXNativeTarget "PYLayoutDemo" */; + buildPhases = ( + 2F9321AB282EE49E003DA929 /* Sources */, + 2F9321AC282EE49E003DA929 /* Frameworks */, + 2F9321AD282EE49E003DA929 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PYLayoutDemo; + packageProductDependencies = ( + 2F9321C9282EE4F2003DA929 /* PYLayout */, + ); + productName = PYLayoutDemo; + productReference = 2F9321AF282EE49E003DA929 /* PYLayoutDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2F9321A7282EE49E003DA929 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1320; + LastUpgradeCheck = 1320; + TargetAttributes = { + 2F9321AE282EE49E003DA929 = { + CreatedOnToolsVersion = 13.2.1; + }; + }; + }; + buildConfigurationList = 2F9321AA282EE49E003DA929 /* Build configuration list for PBXProject "PYLayoutDemo" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 2F9321A6282EE49E003DA929; + productRefGroup = 2F9321B0282EE49E003DA929 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2F9321AE282EE49E003DA929 /* PYLayoutDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2F9321AD282EE49E003DA929 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */, + 2F9321BC282EE49E003DA929 /* Assets.xcassets in Resources */, + 2F9321BA282EE49E003DA929 /* Main.storyboard in Resources */, + 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2F9321AB282EE49E003DA929 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F9321B7282EE49E003DA929 /* ViewController.swift in Sources */, + 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, + 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2F9321B8282EE49E003DA929 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2F9321B9282EE49E003DA929 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2F9321BE282EE49E003DA929 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2F9321C1282EE49E003DA929 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 2F9321C2282EE49E003DA929 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2F9321C4282EE49E003DA929 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PYLayoutDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = juandahurt.PYLayoutDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 2F9321C5282EE49E003DA929 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PYLayoutDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = juandahurt.PYLayoutDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2F9321AA282EE49E003DA929 /* Build configuration list for PBXProject "PYLayoutDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2F9321C1282EE49E003DA929 /* Debug */, + 2F9321C2282EE49E003DA929 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2F9321C3282EE49E003DA929 /* Build configuration list for PBXNativeTarget "PYLayoutDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2F9321C4282EE49E003DA929 /* Debug */, + 2F9321C5282EE49E003DA929 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 2F9321C9282EE4F2003DA929 /* PYLayout */ = { + isa = XCSwiftPackageProductDependency; + productName = PYLayout; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 2F9321A7282EE49E003DA929 /* Project object */; +} diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift b/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift new file mode 100644 index 0000000..9d851e7 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 13/05/22. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/Contents.json b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/Base.lproj/LaunchScreen.storyboard b/PYLayoutDemo/PYLayoutDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard b/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PYLayoutDemo/PYLayoutDemo/Info.plist b/PYLayoutDemo/PYLayoutDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift new file mode 100644 index 0000000..a09a8e8 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 13/05/22. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift new file mode 100644 index 0000000..4260d9a --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 13/05/22. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/Package.swift b/Package.swift index abb1312..9b3cb39 100644 --- a/Package.swift +++ b/Package.swift @@ -5,6 +5,9 @@ import PackageDescription let package = Package( name: "PYLayout", + platforms: [ + .iOS(.v14) + ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Tests/PYLayoutTests/PYLayoutTests.swift b/Tests/PYLayoutTests/PYLayoutTests.swift index 8f0cbb9..2028530 100644 --- a/Tests/PYLayoutTests/PYLayoutTests.swift +++ b/Tests/PYLayoutTests/PYLayoutTests.swift @@ -6,6 +6,6 @@ final class PYLayoutTests: XCTestCase { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. - XCTAssertEqual(PYLayout().text, "Hello, World!") +// XCTAssertEqual(PYLayout().text, "Hello, World!") } } From f1da14229cf54e5819984c458b3d65119cf29677 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 13 May 2022 15:34:55 -0500 Subject: [PATCH 02/27] feat: add basic structure --- .../AppIcon.appiconset/Contents.json | 60 ++++++++++++++++++ .../AppIcon.appiconset/icon-40.png | Bin 0 -> 966 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 1825 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 0 -> 2759 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 0 -> 2759 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 0 -> 4139 bytes .../AppIcon.appiconset/icon-72.png | Bin 0 -> 1732 bytes .../AppIcon.appiconset/icon-72@2x.png | Bin 0 -> 3331 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 1753 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 3515 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 0 -> 3867 bytes .../AppIcon.appiconset/icon-small-50.png | Bin 0 -> 1208 bytes .../AppIcon.appiconset/icon-small-50@2x.png | Bin 0 -> 2129 bytes .../AppIcon.appiconset/icon-small.png | Bin 0 -> 769 bytes .../AppIcon.appiconset/icon-small@2x.png | Bin 0 -> 1378 bytes .../AppIcon.appiconset/icon-small@3x.png | Bin 0 -> 2003 bytes .../AppIcon.appiconset/icon.png | Bin 0 -> 1340 bytes .../AppIcon.appiconset/icon@2x.png | Bin 0 -> 2621 bytes .../AppIcon.appiconset/ios-marketing.png | Bin 0 -> 37084 bytes .../notification-icon@2x.png | Bin 0 -> 966 bytes .../notification-icon@3x.png | Bin 0 -> 1409 bytes .../notification-icon~ipad.png | Bin 0 -> 532 bytes .../notification-icon~ipad@2x.png | Bin 0 -> 966 bytes PYLayoutDemo/PYLayoutDemo/Info.plist | 2 - PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift | 15 +++-- .../PYLayoutDemo/ViewController.swift | 26 +++++--- Sources/PYLayout/Common/PYView.swift | 17 +++++ Sources/PYLayout/Common/PYViewFactory.swift | 14 ++++ Sources/PYLayout/Common/PYViewLayout.swift | 12 ++++ .../Factories/PYSwiftUIViewFactory.swift | 21 ++++++ Sources/PYLayout/PYLayout.swift | 6 -- .../Views/SwiftUI/Text/PYTextView.swift | 23 +++++++ 32 files changed, 176 insertions(+), 20 deletions(-) create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/ios-marketing.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png create mode 100644 PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png create mode 100644 Sources/PYLayout/Common/PYView.swift create mode 100644 Sources/PYLayout/Common/PYViewFactory.swift create mode 100644 Sources/PYLayout/Common/PYViewLayout.swift create mode 100644 Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift delete mode 100644 Sources/PYLayout/PYLayout.swift create mode 100644 Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json index 9221b9b..28d9cc7 100644 --- a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,91 +1,151 @@ { "images" : [ { + "filename" : "notification-icon@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "20x20" }, { + "filename" : "notification-icon@3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "20x20" }, { + "filename" : "icon-small.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "icon-small@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { + "filename" : "icon-small@3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { + "filename" : "icon-40@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "40x40" }, { + "filename" : "icon-40@3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "40x40" }, { + "filename" : "icon.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "57x57" + }, + { + "filename" : "icon@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "57x57" + }, + { + "filename" : "icon-60@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "60x60" }, { + "filename" : "icon-60@3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "60x60" }, { + "filename" : "notification-icon~ipad.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" }, { + "filename" : "notification-icon~ipad@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" }, { + "filename" : "icon-small.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" }, { + "filename" : "icon-small@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, { + "filename" : "icon-40.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" }, { + "filename" : "icon-40@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" }, { + "filename" : "icon-small-50.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "50x50" + }, + { + "filename" : "icon-small-50@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "50x50" + }, + { + "filename" : "icon-72.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "72x72" + }, + { + "filename" : "icon-72@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "72x72" + }, + { + "filename" : "icon-76.png", "idiom" : "ipad", "scale" : "1x", "size" : "76x76" }, { + "filename" : "icon-76@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" }, { + "filename" : "icon-83.5@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" }, { + "filename" : "ios-marketing.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ea13fb2f75e9345cc7ac2238a6597db76e7f73 GIT binary patch literal 966 zcmV;%13CPOP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K5FiAu~R9Fe^S6yh+P!w*`Chgp+ ztevdw<{sQueD%#oL3|PMS$q(jATkgU5fwoZ2ZN#0;lTMObK?Aa5ETbbbam*EIh-Qs zn6Pzg)4A@awq299$@PS+AV}(c?joz=jXfU+;eVI0wHAEh=<$=QjxPv{Ld<1 zE_J!o1{Gjg?#001=-9Y{zBFvHxxzEE^>zO7uir{D7+4S%uFMBdp1yt)@_Ib!beb20 zv!_oq)YlorH-xc?pTB(7d9z0uZ)=UWyR#kMO0cAiSL)F4hwI(9RYB+D3ui7|PW(=) z@Zw7h;<3+P+B$CN9!+>Aa{gjlCX*>nrqr4(b!d2`{c0DN%_^N$@{VBBl}qQm)zvCo zcWE}`JAM7dSt0uOiOIJ^!@4wD(4mENkzn(7mSY_bO4jmxo+RxAK}ZNf0!fm-+FIG5 zgaBt|@;TaiN@;nm>(-BnNf{Y>_r94llG%~s>}#1|JwK7Nv-z-`rf?1;$9qv(=ZR!gMsR?LaYh_OE!m?CA7&Y4(C)X^OIrs?5yq` zj2+ljGcdYvaQB*qm)tStSj#6PsSI+E#acM&z8wMHeG6$+$uvLI_N6<~!h oPzIXPKYN|MSm3qb^8XS40U{TbGEul-2LJ#707*qoM6N<$g6nj$T>t<8 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea087b71681d5e442cfaa0c4a3cc830fcb65fda GIT binary patch literal 1825 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 WEOj4?w$}ddqpqp0r&gwl4EZ0tSfIiH literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72.png new file mode 100644 index 0000000000000000000000000000000000000000..ce43681fb8505f6e4fd03bf7a202c3eeff66a0e2 GIT binary patch literal 1732 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 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..c453b4001bf9b12e8813f3aab6418dee39af9e66 GIT binary patch literal 1753 zcmV;~1}6E5P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91OrQe*1ONa40RR91OaK4?02aB&-~a#yLrFwIRCodHT6=6$RTyt?U$-y1 zSJ!qM3N9FlN(4m>F(D&>@&_@J%m>Lv)aVkU|B#qzM2$=ngapW=brC7-}!#u_dCy4%W<4$ zu|LFO2bjfI1-V$VT+L)PlNA(!DqSlmS(2_+GbtIK3KCW`SwYE?bhVmE$?#N=u$svV zN|vOncSI)jk|97T3{TJOJ@837ozZHwo!i^jJhTd>bxB*L%jC8330I@@;NG66Hnm+C zz9i`tVqxh(g5w^S3)0x+aU%w?kU4D$F0%ShpBXswQ--E(R!c*DT_Tb62SOxiYQ1M! z*GnA>d5A!ceN3Jm{AJ(4Pg$0o>+G)=hBO@4^>XK25!xEObRD`l(z9p3D8f99PaM%ay;JOdk9!9 zM^l{+7Lc$czWL7XXe=hvC*U)%8n`V}U#S{;kg?fW$YC%PR^$q>8n_J%SJXbKDstBDYJW_8gToqcYA>6!b&7%lptxEe*eRLfBbbtwP%rN40sM~S8YMGAilRXJ#n;D0rNvZ=#JiXfdfYB(?(+v!81d#>;W&sP2I*|52P)>> zRf^N+%Z8=`K*CV;xEj4azfy#tpU;1jC(8x258_OMbC3#^boB+yX0pcNK#LHp;Q;CK z`GYV|DD~Cr_v7FyCXnuQIz2seT`5QiO;c{(Qrd7qeH@w0-cu=MEbM#X;8IDM1dvK6 z*g!A@r^<=}>2Wt^Gnrct79Qg5m#x3 zqiBv{G%N=f)Z(3JwVLclqrn9dx&;Qx1PSwMAP`)=>H%?QZ`EcPE*j@zNp?2L0XDr3 zAZQ4!Hjfd?P~iVUBY4g4Nw9z%yE+bi^nP{(_UpGi%>IXKF8F)mhrYp|&kO4*_(G4S zC#Sp&!-z8WW{M3(*l2b+a5}U)0^rDfP~P$IeLlaVD-@pQU*#9RId%xX-V^F4 zDQ@aIlb|#vDuVc}yl>)f?PO^{eX!u5wV08uGi(!t$F zUIg>XSdgJ;jjKjaC}F0!WfjK-QA5JY8;P!^d4t{U_r{yTCDW+;-*lQ0;`IBaS*+iKc~^1hhL45KmR7Ks8Q zwKl_p%dKCY4nDqeNrGa|jmDl{r{)r*eGdefA2S=l@W*GIvj?M1-@3ul9>g4PM@G6(r^Wm(2Vfk;#7no{j?Z%;ym?00000NkvXXu0mjftt2MN literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4731f510b64f894c81fc5b77087f912f7ecefbb8 GIT binary patch literal 3515 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 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..85b6f376aa9bd1e12f7e41323dec18ffef5191a1 GIT binary patch literal 3867 zcmcI{_ct4E^na{Uikhuiv{scy?bxfTh)v9*qEWLn_Fl0mT2$3&l@gH%N^Pn^Z5lI1 zHCF7=7%d;~^F8PL`3pWjyq?#6?(;hLoO{o?=iVpD1gytM&rJ^i02uWj>6l$|`G26J zygbid&Ng2Xg}<4e763KGyMB4mfkO1%jEn$xFKs#i1;QOb{h#C#+?N0VsER27RF_Qg zpRbtm|G$5#RO6mRLridVh4>&cInud|ql^wrhN<+7P zrvzo*yuZC)xZobV)E`QoZ>{wquUrp33uq_okVBi#S|t}`j>Fm%PX(_<2X!5mZJe?c zBeR2Unc&4qcZ4)bhw7@$@%lPZI)(0b<;d(rKoV%Y0c<16Lct3E|Gyj)?L|?(#lpY5v@p{O&1pHf(d@>h)BlNTU zY|M=d;Q1@*-;02^tP^;3^_Ry3%@ILET>1o3Eh;jzg_u1J!!1 z2?tnF4ou@cnij~W4Z`MAu0p%bi{byD;TPdRGSRfsQ_O2I!v8j1i8;YnT7*xpc zBmFzeoY(10@MTXEi>UiS5%2VCq@fO=gk$}VSol3~={MXmg~;5;AeEXY%@GHV{tOo6 ziRlAcCjJ-=tr+NZ7mbiDSL0_0W`#q3S*HDjxW+;hirZB6-JLrz$iy6%lpGWlFj8bs z%LaET-rEL8dg-nq!`{@6A(j}3w$)Z|;N|0TZil@Vv&ArpZimkj_azEJ#8H^A#%act z2EWw1x1_)^iCRzdXbQkdKl4eh9o{~Pg4a!xY87O!Op4yUx*_sC^=R&$r)*f4^bJe2 ze-mL)vYHCH`q_*&Dc;SuuR8vK zHo;6WV{DdZSLyacI3{?L(a00uNhQZ3peT4Gd{_VXy^jxMGDo_W-w z!OVPG>L&U)P&(h~zV&jeo4n}OQjdU`l(CD8ONi~=f*XvOUph&>Ge6>{J#faKwr z#fK|(K{loET}NJ~w=5*ND(+cGIVlx^idMNKRifl!Bfgo5lR_TR*= zHi&6nRnb**Jk>!lIuK9%y2Eclq4?@wVhshem~&r<+GMKFH5F9}4JG#I_Z)kC6EC2J zDT>@M4kteR3J*7x8mbX)QoJ_B84b0gm7!P0^@Z z5Sw!34@Nlb1pRFP+|5Q;{%2i%pg^Qz&d~_6mye+U`idhh^_~rbE>w^EDH2Zv<05J&o!e=f zSE2#~Gk8(9W>mrKRnSl#e;$ zOV5%Q=}$;r<40=k(woi;OTQ9S>f*?%{FtR=wd>YoC{sh z5-IIzm|Ch0VzAczv%De$1*qTayFU?Ei68^jLV5g~^W8nkZ;f88_kFK(T^{k2F<}~f z)$P6+dlSoKSZw*nynMKW71F39--7b|<-F0|2Kxik4MCEd<=vO$?>#N+-(V*52Wbq$BE4r@9D_LXz_k5(j2PEn8cJ(rrvBQBzdFT5 zjc(rH<+8ly`Np}BgQ1Tm8;C%Rua1$_M+*x7@nEOUFVb`)W(XwJEt#S` z>Dm@UI{!}h_mSQKw$D3omb;eThCOn*(=f5Vo>V^*%_3wsMbgh7H=s~AUwu~Ah<%JZ z_WfymW{x#URnkEXI8*=Eo*&E-UduG&=K9gczFDX;jg(=0(buKkev?VuJIuJ9{EIIz zxMbRM3{S26C5xpCR8+RU>E{`?HMq?2Oh^NeyD0gfz2IzM)5cgAoPgqQ+Kl5EUyA2s zkG0lVMPgm;8!fKxJXVj~^8+dX4?qV=>jx_XtZKY-ZL243-&LCi=wn0B8uwfhoeH6) z_0@c9HLZ3#zKR_~2tg-^{$8Fb@hX*+ciieHNsud4>JV@$sc|QxrV+!a%UK;>!UcMnadUDiEkM z*0p3{ihNLq>q_Vm%9OQW_nVt}*Grk94s?%Spv(Edd3VFOjZ6l0giDbOF^pg#H>NRt zZQ6KoQVayqP2`F_jC~y;%ku4gg$}ywirQ_n?EmM`ttdA1BDCdvt5CiAjah?4af78q z4G8`5uz>wZ4_Ae4#q&``PKsUbEY?^X!uwelb{s zq!Q%82UEGp-qW;e%7sikopYapIVjf!0&-n zjQi#i(HPvo3!23fR>`n!veU>28Gn9ig;+@H>@EHHH??Ed@VJWg1N&pLq;zFNsY^!* zonj`7>F-QWQq3pVe`E+lPy{IGD`VU42s4}7ZuURd=>h*+)}7A;p@j$|*jsNACY7kY zj|~37r+IaCuH!h|TjkKdjD&S2h%XSMjCnayQ|>BkXPI}U7>OwH5a3ox>A>BIev1(n z|B#aHu^C=J2-dq#HK^L{#xE`FZsJ0>>x}4G6Kc<%$Y)3IXlL$?ZWis=y9S2UO8i2_2*f;u)?>q7Rh(oms}Dt{!X0r5l{c+&YWcN+7#3Zd z)slYo3er&N2jl@3r98HtB+5VbuNl_$&Smk(=Ot2I^+6_;YRmb+@dZVRq^Bb-pxyVs OkEy;cSO=x$6!Smg@N@_O literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50.png new file mode 100644 index 0000000000000000000000000000000000000000..65ba60b2c3b93789137afad52b366c55221edc74 GIT binary patch literal 1208 zcmV;p1V{UcP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB5B1uF+R9FdP{Qv(y!{7r8sP4n;Hzu}fxnVU4$lrb|i!$rtoP!w8s?%uCy z>_B!C&;`d%p6Q-2jY8j&@2scKo|o4)fBp6iGcb1TJuqYLB201OMaXp4+js9vtDD|` z_=wA<)$2AbTeS|CEJ1N{ob~zhm$I6s7cXDoH+{~6rCWFG!LJ6FEXhg!(c`BLt=$hE zJ;r4svN$6nV?s=LY-A|1ATex`Lu>1f-9)+xXgx6D&tJTP7a;=#Ra4tySAfB*jF%U2O$Av|jENRgAaK+XbX zMtshC`urs@X8SPb+zWeg;!`J_U zJS6vmFwz^`Na7e-sR_!8@^H04Hc$k@{qg%hFr0Wf$+3dcNCdjz&!0a>Pn>@8^qGvb zl(mH^3kx&`9>4kfpMi;;6%=>31!8ZiojkNlGIT zXd=)Z_BNJiMgz0n&)*EZT+sCN;{DI755EDO_3O{SU1#6Pi%IS|{~nLC$O&OI7hvUn z`u2~Ng@iPYW(cjE_2mZx8#wyV>?4v(6K8>H6=1SLsu20OSYEyV1uW=ay#K||O*rKc zRzalykd^)Y2Xqs%0E3h;yNVR&8Lc)M}k|xgj&j5my0Gc?9k;1UT(gvf%kH~r{i$nnG W4RBOVx3 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..25e01231d55ffb8b48daa4ac59aadd603dbaf7c2 GIT binary patch literal 2129 zcmV-X2(I^uP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91WS|281ONa40RR91WB>pF057}VK>z>;yGcYrRCodHn_FxYRT#&2x7}`c zyKQMHcH4q!D_|)t<$(lIgO`{XdBC6&G?Iu9Ja~H`5@Jvj2tf^jU=%cgMDZ3eLI^}L zVuBKhA_SqdmSSxw3GFVu(A{>~?OtZa|LkeE+r4$p%L4ZQ4 zXO<3&f&hh7&nz7l1px}Fo>@993IY^TJ+pLJ6a*-wdS>acCX}6W zE1yD}dFdOQ-~OkgleE*+*znQrotbZwrUkrY&7R}2r=DqR??60P+B;Crp1?>XSvL%u z7B9lRZjOA?+;kS&tb@g(({kG|BEjU^s$+Ni_6Vjbr|VWKcU6wck9Y4ZFE2|aU{N2SOV zY8VYeg;8dSxeklsM(D68V6oVP-}v%+%PM3@*6HSO8;xqAThHBWss;;U; zANu;$fkpffpBX}v=$0icl3C8gAY|0^J4HX$k!+P=F3*G=teQy2`kX0WOi*=zWESyB zWvE2V4i?FR{(iMGOB~L3ZDv)>E;r}rkGMU4zhBAig)Kb554^#rLRVDg>@v$}G*+oJ z$CEJ#Z}3UgTZLkFun_3PNL0LfAnOLkV-WE(g@t#^XtGZ+EaHK9Q4t5wCRhKr)N*@||^NIU;k`;LtF(AE+jaSaC2I zga_0RZ?Ts$U1mCGVMk?7#cXuRsbC%NbPd1*{J>kL>BRYG3JYzMiKZ{|WEU5T#8YC+ ze!@a{8o^Sq_b|ENAU>8eK3Hu2#dfJWGHof@)tXq5M*PHjrYiG-fFCb$f`R7^0{$5c zM#I#LE}Y}ZfIJ@H83F%I_%s-p!&3ajGnrZ9`d0c83Jart!Q;4}Z(Ud&h-Bv(aiX*{!DXVq-x* zkWe2}xkqg(%iz^bZ*^Yll4Uy02pjqP_kJ*~YWfM%=jJds;N}6S#AYhCsxUjV&MZ|( z0SjJOOouadh7osTkV7_=*z)Qe<~$5El@8XhR0=z#n_F(K+rR+uejl`#?KDvV^Ro42^Jfl8lBj6Z{ly%Y!um#>F{oT0WdKSQL@9P0@_ zwufq!kyGcpLbL37vy1c8@|o0+#=~&q>u+}V^d^lgw(`FE+JpP{#MVU1{(x|{GdQ;* zzucZ#QfQI&FpPGR6dqi@EUqT$X(|~;U+ay~JSL|DTSd?EYtbg$|O6bzqh$BcYD`AQCVi6xH{$wA3Eh~t}A-9 zrEJg>JpAjxvW3Mf8k3Cc8JlK$XJ(8>iU4VKeSoVdNj?CF$3i`>aXcPIU18$^HG>{; z*FP8%%fn+be~zDfuslA27mV0xiQ-^Z(4a|$eRGZQs_eJO2qVW}al9}z#+Mao6Sg+3 z%DAhhEW3YTdp&%`+`8DE`=5JTr*tbCepQkU6ps+AfpPt2xS2fge{bdgshCV|nHEbITiw=hxU`UCArw5-g54m?VsZb&uTBFwfT7 z;~n*J3u>%O>+MVG?Su~A^t9C5tIK8n`ARN5?u-Y8OV>m74w+q*mrb!&67E#2T+=cy zh%ebS3?Y|biEq)hWTo{^DP5XOJss28sin@P%tD_vO{|>CEF_k;xus_o#Td;cSmKYR zG#!Vz1WWu89z`CgFU=)b=)FE?(WHQ;v~nr4*#5m-l3VycQ~R|-EnlXZ00000NkvXX Hu0mjfP__FG literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc2296305794d611ad65d5093ca278e2f5aadeb GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^vLMXC1SD^M{15@87>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSb^$Yj4N`coS}c%(fhpV5#WBQ# z_wCg4*}{PW$ICa*c9?APHDGpxtA0}EY_`A^L3=pl{#4s^D11>6nJA(;m1~|&)rNqL zOP6k2Ad z2*ylQPN+KZKjzMj`n&8B(x*2avVXGS>%KcTYWDqc3Y?{Qv1Z24x%Jyj_HVc`+b3g} zVdd*%7j|y;v6{Vm*S}Zy{<5=7@%nns&ws96>7Z zB^EVC^ff=f_H>uEt#{dHWB!fP%D&IDiB+hJKlmbFN37W-$Vf~zv;2cgTTzfVo4M@; z{qR*GejC4BzjM%MSHvWZb>aDHzLqOh7spxXhqynz^6G2Fp7x@k(|Mm67BV0IEgpXD z*rvk^X0Q6SIN*y*@KF(Q#lw$GglC%ZG(2Z!7G|Dy@b9 zS^RYF-_LzkRcef4Ob!zg1bQkJ7JgvdU0}x^aNBVgtL`@~-6_5s>`$wSsYtj)=$+gs zTk(~@KmX>teV1N!{&bM|t7@T?^F3h--?hiiE7!BuCaI`~zTB^I%tk;)&{y`ViJlgl vouSOjVwNTj0onVC`*+wsVB-(J&0ELp)?>Zz#a4f1Q1bJ1^>bP0l+XkK?1V^V literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c3538fc02bb9acc42b8b84fb92c9f7e4ff0264e1 GIT binary patch literal 1378 zcmV-o1)chdP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91I-mmp1ONa40RR91IsgCw0Hdp`^Z)<^%t=H+RA>e5nSE>%br{F*+UvE~ zt*qVH+HMR(LR1n+G)wUP4~;MJ5C1YTF@%Ju3H-x9BM~vEh!Z8z5h8>M_?Czy5=S5o zFcZX=_^w1U$9%)hvUcs*+Rk2kz4q?sbKdrYUAx=8{MuznFU$7)o_p^3eSY72?zvw( z8X-h2p2M+tP!-Y|ZYA$mP2HNhSb&Y~jYn;!khinaS`*rayY@__5xTMj~}$tm8%^qg%G^m`tX0 zvTIHqIQ-s6C;D{CMiXB;wBE=bUH4?t3@e`drRTQZb;nvfG-X&(0FA{HMsP=?3yll=tfftj(Ws&F{a;;Wd3Fw4 z#Q+m4Pg^uLF98$`l+6McgNke9X@i1+h7}IB%)2oC0Q>3&jr1}on5M>n+vM$`@ZS;{Q8cX> z>H#)QDIUAHumJ$p)BWcHem}+)1mV)q?~){A&%mYMZoY9P9%2I!lf0bHBATY14w`Y$ z4hKy;DDBb_1?2E!eFLdZdHCHUAAH!0r`It!kEgHq2o3-t<0+ZXQ*IaSVQGNGr*sUv z>Kfl`%jlZe$&4IN%Pivv)SG*F?Bd>i=WRTnbzbx z7@9yLE&Di&x~fTt6@!{?_@7As+0U;|Ot!U#;ak1yzkwW1NKgPCc3PnEl<4y^>M$}c zv^RUk)1r@?_LRy|5!|_^;RX511oGEk>!&>*kKTJr;HG7Y_MJU{c5hmF@Kp4k)eWnb z>wS_VRt$52s{Y9ga|up65O1Kpv7uB7Yt!b3F0Zg4KJh`>WT#l zUb33o8Vs<5BUxESzmD)hKdU)A*RUG61qsyE0zA|a;03Ac=*ant>Gk(3ABy~S4C^Y1 zn|&SOMm9V7^e8$hi4x7tw6L-<2A%V)#$cAJg;fJr*{2d(P&IG~p(<&rgsXHc5=WJA kNuVk@s(}lIOR9GN12hdxeBWITNdN!<07*qoM6N<$g1@$lpa1{> literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd14b25031252f01fc68d6fa7fa8db64be7856e GIT binary patch literal 2003 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 K@yuhFZv8*5cB-fV literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ea13fb2f75e9345cc7ac2238a6597db76e7f73 GIT binary patch literal 966 zcmV;%13CPOP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K5FiAu~R9Fe^S6yh+P!w*`Chgp+ ztevdw<{sQueD%#oL3|PMS$q(jATkgU5fwoZ2ZN#0;lTMObK?Aa5ETbbbam*EIh-Qs zn6Pzg)4A@awq299$@PS+AV}(c?joz=jXfU+;eVI0wHAEh=<$=QjxPv{Ld<1 zE_J!o1{Gjg?#001=-9Y{zBFvHxxzEE^>zO7uir{D7+4S%uFMBdp1yt)@_Ib!beb20 zv!_oq)YlorH-xc?pTB(7d9z0uZ)=UWyR#kMO0cAiSL)F4hwI(9RYB+D3ui7|PW(=) z@Zw7h;<3+P+B$CN9!+>Aa{gjlCX*>nrqr4(b!d2`{c0DN%_^N$@{VBBl}qQm)zvCo zcWE}`JAM7dSt0uOiOIJ^!@4wD(4mENkzn(7mSY_bO4jmxo+RxAK}ZNf0!fm-+FIG5 zgaBt|@;TaiN@;nm>(-BnNf{Y>_r94llG%~s>}#1|JwK7Nv-z-`rf?1;$9qv(=ZR!gMsR?LaYh_OE!m?CA7&Y4(C)X^OIrs?5yq` zj2+ljGcdYvaQB*qm)tStSj#6PsSI+E#acM&z8wMHeG6$+$uvLI_N6<~!h oPzIXPKYN|MSm3qb^8XS40U{TbGEul-2LJ#707*qoM6N<$g6nj$T>t<8 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a17b65f91f3ddb082d4421f54897e9ef3ba56f GIT binary patch literal 1409 zcmV-{1%CR8P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91JfH&r1ONa40RR91JOBUy0E^%0TmS$B>q$gGRA>e5npEHsD3xCbV5ot*LZVX&nWc<)I@E(V?c&MCH_(tf{n)I7Ek5rP3~<5-d%2 z{D;wtm#(0i^VWo4qe0uIis3Ukik!)@C z%%{vgauX|$VyX1b;C>}BupT^o^v_fO ztT;1Yh7KG$J9R;I)P$3O(!ex)@Z*Uy=XBC@9RJ?Xf$5olbz<;` z2tXe`a_q#|c*B$|TiiQ146kOx$c6z{p+Eh6_QnTr=zd3FcR32|0nx<*_M22jO zYrFXsvAwLy7wA3PIi(yBv-oYtYE*<8LsgL)eN?8d!k?r>ygZ0&MiUV=JJh zZ$UR!I+;pCaFoQ0Xnq+-^#J1ieR>j|Y8mh})~@MnQ7riK_?jSc3yy`FCnoIE>)PIU~Y(>e0lQF#La+_|h!sE97w>Ge=<8f)DlpftyEI-v3)K@f^;QS!hJ zX}%!d$O|5~GZX-Qv2dkp2|x#f?Q$|58@Ay7fFA+`LA*9ERCq^6fCgTjOH_vlln0vk z#K}{cOa`4Ic|43{zQM#t{t|TVHx1(zRCZ0sE1MA9`ZbM&wLqp){yY3&b!LNoe@K`sC35$2M+| z5TSyfe|F0UL+_%Oti*{7EBadv7cshL$sk$NXzFY($1pii-RJWnCm8W`ji#Ng?j`7% zbS0iDKeHhOLzB}iw;(>y<5HSR2*=jsh zk*-QJ{PmmMLRFlYX3;!a#j_2_)zL zg5DuB_yb;g*NfeMoXhi7;nmGu>tfy#SKG9{@upx|TAq?V!wMPJ(dJdCtqjHRkeQ`n zBC`LIW)pP7yD}7D7qs-rWC%?=*e+;o0uv*4LDzQ<6R5W@u?zZkMgrD<-E>!O{(}I- P00000NkvXXu0mjf*wuaJ literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..fee0efbb62d67f05ba7b50ac1fd5804c5901999a GIT binary patch literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1SFYWcSQjy#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~SS-^~7gA{JM`{6H8S)HegV~B-d z@}K|z?U{ErbjI{5)HVlyer=v_U;nS^c)Z2jzpuW|o?HDb|Hh`j&(F`_@nv(u)E_@S z24{voe!TpA!=~%&?q{uBpOBVzETr@3v+weDBH^YEB}}GsY>L;d-246feES)*Hr}Xt zbYjRaT1a=#Z!CKA=1qal!|NH&_ zv-#om_6sI3B(uGlC2w2z=!q!L_4pZ+|9w6F|NMQ)fB(`GnA#LH1RNU#Uubb~_uko; z{r;G)bwor&l(g2&n-%sosR^l#nN6BUSN^=ezy835Y11Z6nL4%h>&yS^@BiQb|IhcQ z$Kw|WPI3zHe|Uw*crN3M2mJRNp4>N|U$_6~kJ+=EJ>3~+usAU6p08LW@acQ}1pA*m zX1w43Ls9?O!Hy?ohs^f>|MdU3{DL|aUxUq@$Blhd#iSV6ZBM87%Qhy1V#L$c&t;uc GLK6U1@Z$Rb literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ea13fb2f75e9345cc7ac2238a6597db76e7f73 GIT binary patch literal 966 zcmV;%13CPOP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K5FiAu~R9Fe^S6yh+P!w*`Chgp+ ztevdw<{sQueD%#oL3|PMS$q(jATkgU5fwoZ2ZN#0;lTMObK?Aa5ETbbbam*EIh-Qs zn6Pzg)4A@awq299$@PS+AV}(c?joz=jXfU+;eVI0wHAEh=<$=QjxPv{Ld<1 zE_J!o1{Gjg?#001=-9Y{zBFvHxxzEE^>zO7uir{D7+4S%uFMBdp1yt)@_Ib!beb20 zv!_oq)YlorH-xc?pTB(7d9z0uZ)=UWyR#kMO0cAiSL)F4hwI(9RYB+D3ui7|PW(=) z@Zw7h;<3+P+B$CN9!+>Aa{gjlCX*>nrqr4(b!d2`{c0DN%_^N$@{VBBl}qQm)zvCo zcWE}`JAM7dSt0uOiOIJ^!@4wD(4mENkzn(7mSY_bO4jmxo+RxAK}ZNf0!fm-+FIG5 zgaBt|@;TaiN@;nm>(-BnNf{Y>_r94llG%~s>}#1|JwK7Nv-z-`rf?1;$9qv(=ZR!gMsR?LaYh_OE!m?CA7&Y4(C)X^OIrs?5yq` zj2+ljGcdYvaQB*qm)tStSj#6PsSI+E#acM&z8wMHeG6$+$uvLI_N6<~!h oPzIXPKYN|MSm3qb^8XS40U{TbGEul-2LJ#707*qoM6N<$g6nj$T>t<8 literal 0 HcmV?d00001 diff --git a/PYLayoutDemo/PYLayoutDemo/Info.plist b/PYLayoutDemo/PYLayoutDemo/Info.plist index dd3c9af..0eb786d 100644 --- a/PYLayoutDemo/PYLayoutDemo/Info.plist +++ b/PYLayoutDemo/PYLayoutDemo/Info.plist @@ -15,8 +15,6 @@ Default Configuration UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main diff --git a/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift index a09a8e8..8c2458e 100644 --- a/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift +++ b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift @@ -6,6 +6,7 @@ // import UIKit +import SwiftUI class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -13,10 +14,16 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } + guard let windowScene = (scene as? UIWindowScene) else { return } + window = UIWindow(frame: windowScene.coordinateSpace.bounds) + window?.windowScene = windowScene + + let navigationController = UINavigationController() + window?.rootViewController = navigationController + let vc = UIHostingController(rootView: FeedView()) + navigationController.pushViewController(vc, animated: false) + + window?.makeKeyAndVisible() } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index 4260d9a..bb68b06 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -5,15 +5,25 @@ // Created by Juan Hurtado on 13/05/22. // +import SwiftUI import UIKit +import PYLayout -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. +struct FeedView: View { + func buildBody() -> some View { + let factory = PYSwiftUIViewFactory() + return factory.buildView( + withLayout: .text, + params: [ + "text": "hola a tdodos", + "fontSize": 20 + ] + ) + } + + var body: some View { + VStack(alignment: .leading) { + buildBody() + } } - - } - diff --git a/Sources/PYLayout/Common/PYView.swift b/Sources/PYLayout/Common/PYView.swift new file mode 100644 index 0000000..d12720c --- /dev/null +++ b/Sources/PYLayout/Common/PYView.swift @@ -0,0 +1,17 @@ +// +// PYView.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import Foundation +import SwiftUI + +protocol PYView { + init(_ params: [String : Any]) +} + +public enum PYViewType { + case text +} diff --git a/Sources/PYLayout/Common/PYViewFactory.swift b/Sources/PYLayout/Common/PYViewFactory.swift new file mode 100644 index 0000000..ef08fa7 --- /dev/null +++ b/Sources/PYLayout/Common/PYViewFactory.swift @@ -0,0 +1,14 @@ +// +// PYViewFactory.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import Foundation + +protocol PYViewFactory { + /// Builds a view. + /// - Returns: The view + func buildView(withLayout layout: PYViewType, params: [String : Any]) -> PYView +} diff --git a/Sources/PYLayout/Common/PYViewLayout.swift b/Sources/PYLayout/Common/PYViewLayout.swift new file mode 100644 index 0000000..79bb27e --- /dev/null +++ b/Sources/PYLayout/Common/PYViewLayout.swift @@ -0,0 +1,12 @@ +// +// PYViewLayout.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import Foundation + +enum PYViewLayout { + case text +} diff --git a/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift b/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift new file mode 100644 index 0000000..835c968 --- /dev/null +++ b/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift @@ -0,0 +1,21 @@ +// +// PYSwiftUIViewFactory.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import Foundation +import SwiftUI + +/// Payan view factory. +public final class PYSwiftUIViewFactory { + public init() {} + + public func buildView(withLayout layout: PYViewType, params: [String : Any]) -> some View { + switch layout { + case .text: + return PYTextView(params) + } + } +} diff --git a/Sources/PYLayout/PYLayout.swift b/Sources/PYLayout/PYLayout.swift deleted file mode 100644 index ed3d0ff..0000000 --- a/Sources/PYLayout/PYLayout.swift +++ /dev/null @@ -1,6 +0,0 @@ -public struct PYLayout { - public private(set) var text = "Hello, World!" - - public init() { - } -} diff --git a/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift b/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift new file mode 100644 index 0000000..d8e07c3 --- /dev/null +++ b/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift @@ -0,0 +1,23 @@ +// +// PYTextView.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import SwiftUI + +struct PYTextView: View, PYView { + let text: String + let fontSize: Int + + init(_ params: [String : Any]) { + text = params["text"] as? String ?? "" + fontSize = params["fontSize"] as? Int ?? 12 + } + + var body: some View { + Text(text) + .font(.system(size: CGFloat(fontSize))) + } +} From c04b71c9dc18f697c06ca623f341657b738481ad Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 13 May 2022 15:57:46 -0500 Subject: [PATCH 03/27] refactor: remove unnecessary code --- .../PYLayoutDemo/ViewController.swift | 18 ++++----------- Sources/PYLayout/Common/PYView.swift | 17 -------------- Sources/PYLayout/Common/PYViewFactory.swift | 14 ----------- Sources/PYLayout/Common/PYViewLayout.swift | 12 ---------- .../Factories/PYSwiftUIViewFactory.swift | 21 ----------------- .../SwiftUI/Views/Text/PYTextView.swift | 23 +++++++++++++++++++ .../Views/SwiftUI/Text/PYTextView.swift | 23 ------------------- 7 files changed, 28 insertions(+), 100 deletions(-) delete mode 100644 Sources/PYLayout/Common/PYView.swift delete mode 100644 Sources/PYLayout/Common/PYViewFactory.swift delete mode 100644 Sources/PYLayout/Common/PYViewLayout.swift delete mode 100644 Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift create mode 100644 Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift delete mode 100644 Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index bb68b06..05d8273 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -5,25 +5,17 @@ // Created by Juan Hurtado on 13/05/22. // +import PYLayout import SwiftUI import UIKit -import PYLayout struct FeedView: View { - func buildBody() -> some View { - let factory = PYSwiftUIViewFactory() - return factory.buildView( - withLayout: .text, - params: [ - "text": "hola a tdodos", - "fontSize": 20 - ] - ) - } var body: some View { - VStack(alignment: .leading) { - buildBody() + ScrollView { + PYTextView("Explora lugares", fontSize: 24) + .padding(.bottom, 5) + PYTextView("Adentrate en el corazón de la ciudad blanca", fontSize: 12) } } } diff --git a/Sources/PYLayout/Common/PYView.swift b/Sources/PYLayout/Common/PYView.swift deleted file mode 100644 index d12720c..0000000 --- a/Sources/PYLayout/Common/PYView.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// PYView.swift -// -// -// Created by Juan Hurtado on 13/05/22. -// - -import Foundation -import SwiftUI - -protocol PYView { - init(_ params: [String : Any]) -} - -public enum PYViewType { - case text -} diff --git a/Sources/PYLayout/Common/PYViewFactory.swift b/Sources/PYLayout/Common/PYViewFactory.swift deleted file mode 100644 index ef08fa7..0000000 --- a/Sources/PYLayout/Common/PYViewFactory.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// PYViewFactory.swift -// -// -// Created by Juan Hurtado on 13/05/22. -// - -import Foundation - -protocol PYViewFactory { - /// Builds a view. - /// - Returns: The view - func buildView(withLayout layout: PYViewType, params: [String : Any]) -> PYView -} diff --git a/Sources/PYLayout/Common/PYViewLayout.swift b/Sources/PYLayout/Common/PYViewLayout.swift deleted file mode 100644 index 79bb27e..0000000 --- a/Sources/PYLayout/Common/PYViewLayout.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// PYViewLayout.swift -// -// -// Created by Juan Hurtado on 13/05/22. -// - -import Foundation - -enum PYViewLayout { - case text -} diff --git a/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift b/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift deleted file mode 100644 index 835c968..0000000 --- a/Sources/PYLayout/Factories/PYSwiftUIViewFactory.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// PYSwiftUIViewFactory.swift -// -// -// Created by Juan Hurtado on 13/05/22. -// - -import Foundation -import SwiftUI - -/// Payan view factory. -public final class PYSwiftUIViewFactory { - public init() {} - - public func buildView(withLayout layout: PYViewType, params: [String : Any]) -> some View { - switch layout { - case .text: - return PYTextView(params) - } - } -} diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift new file mode 100644 index 0000000..84760a3 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift @@ -0,0 +1,23 @@ +// +// PYTextView.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import SwiftUI + +public struct PYTextView: View { + let content: String + let fontSize: Int + + public init(_ content: String, fontSize: Int) { + self.content = content + self.fontSize = fontSize + } + + public var body: some View { + Text(content) + .font(.system(size: CGFloat(fontSize))) + } +} diff --git a/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift b/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift deleted file mode 100644 index d8e07c3..0000000 --- a/Sources/PYLayout/Views/SwiftUI/Text/PYTextView.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// PYTextView.swift -// -// -// Created by Juan Hurtado on 13/05/22. -// - -import SwiftUI - -struct PYTextView: View, PYView { - let text: String - let fontSize: Int - - init(_ params: [String : Any]) { - text = params["text"] as? String ?? "" - fontSize = params["fontSize"] as? Int ?? 12 - } - - var body: some View { - Text(text) - .font(.system(size: CGFloat(fontSize))) - } -} From 19f522b3a24449c1ba03cdc90d0ad46aaabbb68f Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 13 May 2022 20:15:46 -0500 Subject: [PATCH 04/27] feat: add text color to text view --- Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift index 84760a3..a279f1e 100644 --- a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift +++ b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift @@ -10,14 +10,17 @@ import SwiftUI public struct PYTextView: View { let content: String let fontSize: Int + let textColor: Color - public init(_ content: String, fontSize: Int) { + public init(_ content: String, fontSize: Int, textColor: Color = .black) { self.content = content self.fontSize = fontSize + self.textColor = textColor } public var body: some View { Text(content) .font(.system(size: CGFloat(fontSize))) + .foregroundColor(textColor) } } From ebfa11eaa2e4fb89edf5bcd548352ea60ee4c665 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sat, 14 May 2022 10:45:16 -0500 Subject: [PATCH 05/27] feat: add collection card basic logic --- .../PYLayoutDemo/ViewController.swift | 9 +- .../PYCollectionCardView.swift | 97 +++++++++++++++++++ 2 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index 05d8273..27e2ab9 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -8,14 +8,15 @@ import PYLayout import SwiftUI import UIKit - +//https://thumbs.dreamstime.com/b/popaya-cauca-colombia-popayan-ciudad-colonial-de-declarada-patrimonio-mundial-por-la-unesco-iglesia-san-francio-192059497.jpg struct FeedView: View { var body: some View { ScrollView { - PYTextView("Explora lugares", fontSize: 24) - .padding(.bottom, 5) - PYTextView("Adentrate en el corazón de la ciudad blanca", fontSize: 12) + PYCollectionCardView() +// PYTextView("Explora lugares", fontSize: 24) +// .padding(.bottom, 5) +// PYTextView("Adentrate en el corazón de la ciudad blanca", fontSize: 12) } } } diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift new file mode 100644 index 0000000..3c51d03 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift @@ -0,0 +1,97 @@ +// +// PYCollectionCardView.swift +// +// +// Created by Juan Hurtado on 13/05/22. +// + +import SwiftUI + +public struct PYCollectionCardView: View { + @State var image = UIImage() + @State var dragOffset: CGSize = .zero + @State var dragOpacity: Double = 1 + + let firstCardSize = CGSize(width: 250, height: 300) + + // TODO: Remove mock data + @State var cards = [ + Color.blue, + Color.red, + Color.green, + Color.black, + ] + + public init() {} + + func next() { + let card = cards.popLast()! + cards.insert(card, at: 0) + } + + func getSize(at index: Int) -> CGSize { + guard index != cards.count - 1 else { + return firstCardSize + } + return CGSize( + width: firstCardSize.width - CGFloat(cards.count - index) * 10, + height: firstCardSize.height - CGFloat(cards.count - index) * 10 + ) + } + + func getShadowOpacity(forViewAt index: Int) -> Double { + guard index != cards.count - 1 else { + return 0 + } + guard index != cards.count - 2 else { + if dragOpacity > 1.0 - 1.0 / Double(cards.count - index) { + return 1.0 - 1.0 / Double(cards.count - index) + } else { + return dragOpacity + } + } + return 1.0 - 1.0 / Double(cards.count - index) + } + + func card(index: Int, color: Color) -> some View { + ZStack(alignment: .center) { + color + Image(uiImage: image) + Color.white.opacity(getShadowOpacity(forViewAt: index)) + } + .frame(width: getSize(at: index).width, height: getSize(at: index).height) + .cornerRadius(5) + .opacity(index == cards.count - 1 ? dragOpacity : 1) + .offset(x: CGFloat(index == cards.count - 1 ? 0 : (cards.count - index) * 10) , y: 0) + .offset(x: index == cards.count - 1 ? dragOffset.width : .zero, y: .zero) + .gesture( + DragGesture(minimumDistance: 0, coordinateSpace: .global) + .onChanged({ value in + if value.translation.width < 0 && index == cards.count - 1 { + dragOffset = value.translation + dragOpacity = (-1/value.translation.width) * 10 + } else if value.translation.width >= 0 { + dragOpacity = 1 + } + }) + .onEnded({ value in + if dragOpacity < 0.4 { + next() + } + dragOpacity = 1 + dragOffset = .zero + }) + ) + } + + public var body: some View { + HStack(alignment: .center) { + ZStack(alignment: .trailing) { + ForEach(cards.indices) { index in + card(index: index, color: cards[index]) + } + } + }.frame(width: UIScreen.main.bounds.width, height: 300) + + } +} From 20fb8a3aa11b8eff5cf63d969ba4dd82202471e5 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sat, 14 May 2022 17:10:17 -0500 Subject: [PATCH 06/27] feat: add collection card data --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 2 + .../xcshareddata/swiftpm/Package.resolved | 16 ++++++ .../PYLayoutDemo/ViewController.swift | 24 +++++++-- Package.swift | 4 +- .../PYCollectionCardData.swift | 18 +++++++ .../PYCollectionCardView.swift | 53 +++++++++---------- 6 files changed, 83 insertions(+), 34 deletions(-) create mode 100644 PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index 8771eba..4a6a47f 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -127,6 +127,8 @@ Base, ); mainGroup = 2F9321A6282EE49E003DA929; + packageReferences = ( + ); productRefGroup = 2F9321B0282EE49E003DA929 /* Products */; projectDirPath = ""; projectRoot = ""; diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..c53243f --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Kingfisher", + "repositoryURL": "https://github.com/onevcat/Kingfisher.git", + "state": { + "branch": null, + "revision": "59eb199fdb8dd47733624e8b0277822d0232579e", + "version": "7.2.2" + } + } + ] + }, + "version": 1 +} diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index 27e2ab9..e50f790 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -8,15 +8,29 @@ import PYLayout import SwiftUI import UIKit -//https://thumbs.dreamstime.com/b/popaya-cauca-colombia-popayan-ciudad-colonial-de-declarada-patrimonio-mundial-por-la-unesco-iglesia-san-francio-192059497.jpg + struct FeedView: View { var body: some View { ScrollView { - PYCollectionCardView() -// PYTextView("Explora lugares", fontSize: 24) -// .padding(.bottom, 5) -// PYTextView("Adentrate en el corazón de la ciudad blanca", fontSize: 12) + PYTextView("Próceres", fontSize: 24) + PYTextView("Personajes ilustres de la ciudad blanca", fontSize: 12) + .padding(.bottom) + PYCollectionCardView(cards: [ + MockCard("https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg"), + MockCard("https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg"), + MockCard("https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg") + ]) } } } + +struct MockCard: PYCollectionCardData { + var id: String = "" + var backgroundImage: URL? + var title: String = "" + + init(_ url: String) { + self.backgroundImage = URL(string: url) + } +} diff --git a/Package.swift b/Package.swift index 9b3cb39..5d0b279 100644 --- a/Package.swift +++ b/Package.swift @@ -16,14 +16,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + .package(url: "https://github.com/onevcat/Kingfisher.git", .upToNextMinor(from: "7.2.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "PYLayout", - dependencies: []), + dependencies: ["Kingfisher"]), .testTarget( name: "PYLayoutTests", dependencies: ["PYLayout"]), diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift new file mode 100644 index 0000000..2500c82 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift @@ -0,0 +1,18 @@ +// +// PYCollectionCardData.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import Foundation + +/// Defines the data that a collection card can show. +public protocol PYCollectionCardData { + /// Card's identifier + var id: String { get } + /// Card's backgrond image + var backgroundImage: URL? { get } + /// Card's title + var title: String { get } +} diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift index 3c51d03..ac2cce6 100644 --- a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift +++ b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift @@ -5,6 +5,7 @@ // Created by Juan Hurtado on 13/05/22. // +import Kingfisher import SwiftUI public struct PYCollectionCardView: View { @@ -12,17 +13,15 @@ public struct PYCollectionCardView: View { @State var dragOffset: CGSize = .zero @State var dragOpacity: Double = 1 - let firstCardSize = CGSize(width: 250, height: 300) + private let firstCardSize = CGSize(width: 250, height: 300) - // TODO: Remove mock data - @State var cards = [ - Color.blue, - Color.red, - Color.green, - Color.black, - ] + @State var cards: [PYCollectionCardData] + let numberOfCards: Int - public init() {} + public init(cards: [PYCollectionCardData]) { + self.cards = cards + self.numberOfCards = cards.count + } func next() { let card = cards.popLast()! @@ -30,46 +29,47 @@ public struct PYCollectionCardView: View { } func getSize(at index: Int) -> CGSize { - guard index != cards.count - 1 else { + guard index != numberOfCards - 1 else { return firstCardSize } return CGSize( - width: firstCardSize.width - CGFloat(cards.count - index) * 10, - height: firstCardSize.height - CGFloat(cards.count - index) * 10 + width: firstCardSize.width - CGFloat(numberOfCards - index) * 10, + height: firstCardSize.height - CGFloat(numberOfCards - index) * 10 ) } func getShadowOpacity(forViewAt index: Int) -> Double { - guard index != cards.count - 1 else { + guard index != numberOfCards - 1 else { return 0 } - guard index != cards.count - 2 else { - if dragOpacity > 1.0 - 1.0 / Double(cards.count - index) { - return 1.0 - 1.0 / Double(cards.count - index) + guard index != numberOfCards - 2 else { + if dragOpacity > 1.0 - 1.0 / Double(numberOfCards - index) { + return 1.0 - 1.0 / Double(numberOfCards - index) } else { return dragOpacity } } - return 1.0 - 1.0 / Double(cards.count - index) + return 1.0 - 1.0 / Double(numberOfCards - index) } - func card(index: Int, color: Color) -> some View { + func card(at index: Int) -> some View { ZStack(alignment: .center) { - color - Image(uiImage: image) + KFImage.url(cards[index].backgroundImage) + .resizable() + .aspectRatio(contentMode: .fill) Color.white.opacity(getShadowOpacity(forViewAt: index)) } .frame(width: getSize(at: index).width, height: getSize(at: index).height) .cornerRadius(5) .opacity(index == cards.count - 1 ? dragOpacity : 1) - .offset(x: CGFloat(index == cards.count - 1 ? 0 : (cards.count - index) * 10) , y: 0) - .offset(x: index == cards.count - 1 ? dragOffset.width : .zero, y: .zero) + .offset(x: CGFloat(index == numberOfCards - 1 ? 0 : (numberOfCards - index) * 10) , y: 0) + .offset(x: index == numberOfCards - 1 ? dragOffset.width : .zero, y: .zero) .gesture( DragGesture(minimumDistance: 0, coordinateSpace: .global) .onChanged({ value in - if value.translation.width < 0 && index == cards.count - 1 { + if value.translation.width < 0 && index == numberOfCards - 1 { dragOffset = value.translation - dragOpacity = (-1/value.translation.width) * 10 + dragOpacity = (-1/value.translation.width) * 20 } else if value.translation.width >= 0 { dragOpacity = 1 } @@ -87,11 +87,10 @@ public struct PYCollectionCardView: View { public var body: some View { HStack(alignment: .center) { ZStack(alignment: .trailing) { - ForEach(cards.indices) { index in - card(index: index, color: cards[index]) + ForEach(0.. Date: Sat, 14 May 2022 17:41:51 -0500 Subject: [PATCH 07/27] feat: add fonts --- PYLayoutDemo/PYLayoutDemo/AppDelegate.swift | 3 +- .../PYLayoutDemo/ViewController.swift | 4 +- Package.swift | 12 ++-- Sources/PYLayout/Common/PYLayoutManager.swift | 53 ++++++++++++++++++ Sources/PYLayout/Common/PYResource.swift | 16 ++++++ .../Fonts/Poppins/Poppins-Medium.ttf | Bin 0 -> 156520 bytes .../Fonts/Poppins/Poppins-Regular.ttf | Bin 0 -> 158240 bytes .../Fonts/Poppins/Poppins-SemiBold.ttf | Bin 0 -> 155232 bytes .../SwiftUI/Views/Text/PYTextView.swift | 19 ++++++- .../SwiftUI/Views/Text/PYTextWeight.swift | 12 ++++ 10 files changed, 109 insertions(+), 10 deletions(-) create mode 100644 Sources/PYLayout/Common/PYLayoutManager.swift create mode 100644 Sources/PYLayout/Common/PYResource.swift create mode 100644 Sources/PYLayout/Resources/Fonts/Poppins/Poppins-Medium.ttf create mode 100644 Sources/PYLayout/Resources/Fonts/Poppins/Poppins-Regular.ttf create mode 100644 Sources/PYLayout/Resources/Fonts/Poppins/Poppins-SemiBold.ttf create mode 100644 Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift diff --git a/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift b/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift index 9d851e7..431ca82 100644 --- a/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift +++ b/PYLayoutDemo/PYLayoutDemo/AppDelegate.swift @@ -6,6 +6,7 @@ // import UIKit +import PYLayout @main class AppDelegate: UIResponder, UIApplicationDelegate { @@ -13,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. + PYLayoutManager.shared.configure() return true } diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index e50f790..e9bd70b 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -14,8 +14,10 @@ struct FeedView: View { var body: some View { ScrollView { PYTextView("Próceres", fontSize: 24) - PYTextView("Personajes ilustres de la ciudad blanca", fontSize: 12) + .padding(.bottom, 1) + PYTextView("Algunos de los personajes ilustres de la ciudad blanca", fontSize: 12) .padding(.bottom) + .opacity(0.7) PYCollectionCardView(cards: [ MockCard("https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg"), MockCard("https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg"), diff --git a/Package.swift b/Package.swift index 5d0b279..1921d09 100644 --- a/Package.swift +++ b/Package.swift @@ -1,5 +1,4 @@ // swift-tools-version:5.5 -// The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -9,21 +8,22 @@ let package = Package( .iOS(.v14) ], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "PYLayout", targets: ["PYLayout"]), ], dependencies: [ - // Dependencies declare other packages that this package depends on. .package(url: "https://github.com/onevcat/Kingfisher.git", .upToNextMinor(from: "7.2.0")), ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "PYLayout", - dependencies: ["Kingfisher"]), + dependencies: ["Kingfisher"], + resources: [ + .copy("Resources/Fonts/Poppins/Poppins-Regular.ttf"), + .copy("Resources/Fonts/Poppins/Poppins-Medium.ttf"), + .copy("Resources/Fonts/Poppins/Poppins-SemiBold.ttf") + ]), .testTarget( name: "PYLayoutTests", dependencies: ["PYLayout"]), diff --git a/Sources/PYLayout/Common/PYLayoutManager.swift b/Sources/PYLayout/Common/PYLayoutManager.swift new file mode 100644 index 0000000..a8ec34d --- /dev/null +++ b/Sources/PYLayout/Common/PYLayoutManager.swift @@ -0,0 +1,53 @@ +// +// PYLayoutManager.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import UIKit +import Foundation + +public struct PYLayoutManager { + public static let shared = PYLayoutManager() + + private init() {} + + public func configure() { + registerFonts() + } +} + +extension PYLayoutManager { + private func registerFonts() { + let fonts = [ + PYResource(name: "Poppins-Regular", fileExtension: "ttf"), + PYResource(name: "Poppins-Medium", fileExtension: "ttf"), + PYResource(name: "Poppins-SemiBold", fileExtension: "ttf") + ] + fonts.forEach({ try? registerFont(from: $0.url)}) + } + + private func registerFont(from url: URL?) throws { + guard let url = url else { + throw FontRegisteringError.noFontFound + } + guard let fontDataProvider = CGDataProvider(url: url as CFURL) else { + throw FontRegisteringError.noFontDataProvider + } + guard let font = CGFont(fontDataProvider) else { + throw FontRegisteringError.noFontFromFontDataProvider + } + var error: Unmanaged? + guard CTFontManagerRegisterGraphicsFont(font, &error) else { + throw FontRegisteringError.errorInRegisteringFont(font: font, error: error!.takeRetainedValue()) + } + } +} + +public enum FontRegisteringError: Error { + case noFontFound + case noFontDataProvider + case noFontFromFontDataProvider + case errorInRegisteringFont(font: CGFont, error: CFError) +} diff --git a/Sources/PYLayout/Common/PYResource.swift b/Sources/PYLayout/Common/PYResource.swift new file mode 100644 index 0000000..02d97a4 --- /dev/null +++ b/Sources/PYLayout/Common/PYResource.swift @@ -0,0 +1,16 @@ +// +// PYResource.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import Foundation + +struct PYResource { + var name: String + var fileExtension: String + var url: URL? { + Bundle.module.url(forResource: name, withExtension: fileExtension) + } +} diff --git a/Sources/PYLayout/Resources/Fonts/Poppins/Poppins-Medium.ttf b/Sources/PYLayout/Resources/Fonts/Poppins/Poppins-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6bcdcc27f22e001e46defdfd9e23f224ff65dd67 GIT binary patch literal 156520 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 Font { + var fontName = "Poppins-" + switch weight { + case .regular: + fontName += "Regular" + case .medium: + fontName += "Medium" + case .semibold: + fontName += "SemiBold" + } + return .custom(fontName, size: CGFloat(fontSize)) } public var body: some View { Text(content) - .font(.system(size: CGFloat(fontSize))) + .font(getFont()) .foregroundColor(textColor) } } diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift b/Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift new file mode 100644 index 0000000..5baad6f --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift @@ -0,0 +1,12 @@ +// +// PYTextWeight.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import Foundation + +public enum PYTextWeight { + case regular, medium, semibold +} From 66c3f006fb38ebbe5268384c1ca1c27d8058c556 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sat, 14 May 2022 18:29:20 -0500 Subject: [PATCH 08/27] feat: add button basic structure --- .../PYLayoutDemo/ViewController.swift | 2 + Sources/PYLayout/Common/PYLayoutManager.swift | 2 +- .../SwiftUI/Buttons/PYButtonType.swift | 12 +++++ .../SwiftUI/Buttons/PYButtonView.swift | 50 +++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift create mode 100644 Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index e9bd70b..2b43438 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -23,6 +23,8 @@ struct FeedView: View { MockCard("https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg"), MockCard("https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg") ]) + PYButtonView() + .padding() } } } diff --git a/Sources/PYLayout/Common/PYLayoutManager.swift b/Sources/PYLayout/Common/PYLayoutManager.swift index a8ec34d..e5ad021 100644 --- a/Sources/PYLayout/Common/PYLayoutManager.swift +++ b/Sources/PYLayout/Common/PYLayoutManager.swift @@ -45,7 +45,7 @@ extension PYLayoutManager { } } -public enum FontRegisteringError: Error { +enum FontRegisteringError: Error { case noFontFound case noFontDataProvider case noFontFromFontDataProvider diff --git a/Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift b/Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift new file mode 100644 index 0000000..30234c6 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift @@ -0,0 +1,12 @@ +// +// PYButtonType.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import Foundation + +public enum PYButtonType { + case loud, quiet +} diff --git a/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift b/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift new file mode 100644 index 0000000..aec8ca7 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift @@ -0,0 +1,50 @@ +// +// PYButtonView.swift +// +// +// Created by Juan Hurtado on 14/05/22. +// + +import Foundation +import SwiftUI + +public struct PYButtonView: View { + @State var backgroundColor: Color = .blue + + let type: PYButtonType + + public init(type: PYButtonType = .loud) { + self.type = type + } + + private func getTextColor() -> Color { + switch type { + case .loud: + return .white + case .quiet: + return .blue + } + } + + public var body: some View { + PYTextView("Ver todos", fontSize: 12, textColor: getTextColor(), weight: .medium) + .onTapGesture { + print("asdf") + } + .simultaneousGesture( + DragGesture(minimumDistance: 0) + .onChanged({ _ in + withAnimation(.easeIn(duration: 0.2)) { + backgroundColor = .gray + } + }) + .onEnded({ _ in + backgroundColor = .blue + }) + ) + .padding(.horizontal) + .padding(.vertical, 5) + .background(backgroundColor) + .cornerRadius(4) + } +} From 8fca244f238db9f3998eaf8ad15a6b2ac560c39b Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sat, 14 May 2022 18:46:00 -0500 Subject: [PATCH 09/27] feat: add collection card linear gradient --- PYLayoutDemo/PYLayoutDemo/ViewController.swift | 2 +- .../Views/Collection Card/PYCollectionCardView.swift | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift index 2b43438..5f6d260 100644 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ b/PYLayoutDemo/PYLayoutDemo/ViewController.swift @@ -32,7 +32,7 @@ struct FeedView: View { struct MockCard: PYCollectionCardData { var id: String = "" var backgroundImage: URL? - var title: String = "" + var title: String = "Froilán Largacha Hurtado" init(_ url: String) { self.backgroundImage = URL(string: url) diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift index ac2cce6..fbb4174 100644 --- a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift +++ b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift @@ -56,7 +56,16 @@ public struct PYCollectionCardView: View { ZStack(alignment: .center) { KFImage.url(cards[index].backgroundImage) .resizable() + .frame(width: getSize(at: index).width, height: getSize(at: index).height) .aspectRatio(contentMode: .fill) + LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.35)]), startPoint: .top, endPoint: .center) + VStack(alignment: .leading) { + Spacer() + HStack { + PYTextView(cards[index].title, fontSize: 12, textColor: .white, weight: .medium) + Spacer(minLength: 0) + } + }.padding() Color.white.opacity(getShadowOpacity(forViewAt: index)) } .frame(width: getSize(at: index).width, height: getSize(at: index).height) From de3342c8936c7119bb3198ac60a17a590f2d48cb Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sun, 15 May 2022 13:14:22 -0500 Subject: [PATCH 10/27] refactor: change collection card size --- .../SwiftUI/Views/Collection Card/PYCollectionCardView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift index fbb4174..d8bd686 100644 --- a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift +++ b/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift @@ -13,7 +13,7 @@ public struct PYCollectionCardView: View { @State var dragOffset: CGSize = .zero @State var dragOpacity: Double = 1 - private let firstCardSize = CGSize(width: 250, height: 300) + private let firstCardSize = CGSize(width: 220, height: 300) @State var cards: [PYCollectionCardData] let numberOfCards: Int From ad9f16c4c27b343d494ab78694d26baa36bffe1c Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sun, 15 May 2022 15:01:43 -0500 Subject: [PATCH 11/27] feat: add demo menu --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 42 +++++++++++-------- .../PYLayoutDemo/Base.lproj/Main.storyboard | 24 ----------- .../PYLayoutDemo/Examples/ButtonExample.swift | 26 ++++++++++++ .../Examples/CollectionCardExample.swift | 33 +++++++++++++++ .../PYLayoutDemo/Examples/TextExample.swift | 25 +++++++++++ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 33 +++++++++++++++ PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift | 2 +- .../PYLayoutDemo/ViewController.swift | 40 ------------------ .../SwiftUI/Buttons/PYButtonView.swift | 39 +++++++++++++---- .../SwiftUI/Views/Text/PYTextView.swift | 2 +- 10 files changed, 174 insertions(+), 92 deletions(-) delete mode 100644 PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/ButtonExample.swift create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/TextExample.swift create mode 100644 PYLayoutDemo/PYLayoutDemo/MenuView.swift delete mode 100644 PYLayoutDemo/PYLayoutDemo/ViewController.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index 4a6a47f..e3eb028 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -7,10 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 2F1F7D7128317E0700AA30DB /* CollectionCardExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1F7D7028317E0700AA30DB /* CollectionCardExample.swift */; }; + 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1F7D7228318D9900AA30DB /* TextExample.swift */; }; + 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */; }; 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B2282EE49E003DA929 /* AppDelegate.swift */; }; 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */; }; - 2F9321B7282EE49E003DA929 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B6282EE49E003DA929 /* ViewController.swift */; }; - 2F9321BA282EE49E003DA929 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321B8282EE49E003DA929 /* Main.storyboard */; }; + 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9321B6282EE49E003DA929 /* MenuView.swift */; }; 2F9321BC282EE49E003DA929 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BB282EE49E003DA929 /* Assets.xcassets */; }; 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; @@ -18,11 +20,13 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 2F1F7D7028317E0700AA30DB /* CollectionCardExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionCardExample.swift; sourceTree = ""; }; + 2F1F7D7228318D9900AA30DB /* TextExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextExample.swift; sourceTree = ""; }; + 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonExample.swift; sourceTree = ""; }; 2F9321AF282EE49E003DA929 /* PYLayoutDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PYLayoutDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2F9321B2282EE49E003DA929 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 2F9321B6282EE49E003DA929 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2F9321B9282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2F9321B6282EE49E003DA929 /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = ""; }; 2F9321BB282EE49E003DA929 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -41,6 +45,16 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2F1F7D6F28317DE200AA30DB /* Examples */ = { + isa = PBXGroup; + children = ( + 2F1F7D7028317E0700AA30DB /* CollectionCardExample.swift */, + 2F1F7D7228318D9900AA30DB /* TextExample.swift */, + 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, + ); + path = Examples; + sourceTree = ""; + }; 2F9321A6282EE49E003DA929 = { isa = PBXGroup; children = ( @@ -62,10 +76,10 @@ 2F9321B1282EE49E003DA929 /* PYLayoutDemo */ = { isa = PBXGroup; children = ( + 2F1F7D6F28317DE200AA30DB /* Examples */, 2F9321B2282EE49E003DA929 /* AppDelegate.swift */, 2F9321B4282EE49E003DA929 /* SceneDelegate.swift */, - 2F9321B6282EE49E003DA929 /* ViewController.swift */, - 2F9321B8282EE49E003DA929 /* Main.storyboard */, + 2F9321B6282EE49E003DA929 /* MenuView.swift */, 2F9321BB282EE49E003DA929 /* Assets.xcassets */, 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */, 2F9321C0282EE49E003DA929 /* Info.plist */, @@ -145,7 +159,6 @@ files = ( 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */, 2F9321BC282EE49E003DA929 /* Assets.xcassets in Resources */, - 2F9321BA282EE49E003DA929 /* Main.storyboard in Resources */, 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -157,8 +170,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2F9321B7282EE49E003DA929 /* ViewController.swift in Sources */, + 2F1F7D7128317E0700AA30DB /* CollectionCardExample.swift in Sources */, + 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */, + 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, + 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */, 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -166,14 +182,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 2F9321B8282EE49E003DA929 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 2F9321B9282EE49E003DA929 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -312,7 +320,6 @@ INFOPLIST_FILE = PYLayoutDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 14.1; @@ -340,7 +347,6 @@ INFOPLIST_FILE = PYLayoutDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 14.1; diff --git a/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard b/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard deleted file mode 100644 index 25a7638..0000000 --- a/PYLayoutDemo/PYLayoutDemo/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/ButtonExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/ButtonExample.swift new file mode 100644 index 0000000..d1b6efa --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/ButtonExample.swift @@ -0,0 +1,26 @@ +// +// ButtonExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 15/05/22. +// + +import Foundation +import SwiftUI +import PYLayout + +struct ButtonExample: View { + var body: some View { + Text("`PYButtonView('title', type: .loud)`") + PYButtonView("Font size: 12", fontSize: 12) + PYButtonView("Font size: 14", fontSize: 14) + PYButtonView("Font size: 16", fontSize: 16) + .padding(.bottom) + + Text("`PYButtonView('title', type: .quiet)`") + PYButtonView("Font size: 12", fontSize: 12, type: .quiet) + PYButtonView("Font size: 14", fontSize: 14, type: .quiet) + PYButtonView("Font size: 16", fontSize: 16, type: .quiet) + Spacer() + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift new file mode 100644 index 0000000..78567c9 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift @@ -0,0 +1,33 @@ +// +// CollectionCardExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 15/05/22. +// + +import Foundation +import PYLayout +import SwiftUI + +struct CollectionCardExample: View { + var body: some View { + Text("`PYCollectionCardView(cards: ...)`") + .padding() + PYCollectionCardView(cards: [ + MockCard("https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg"), + MockCard("https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg"), + MockCard("https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg") + ]) + Spacer() + } +} + +struct MockCard: PYCollectionCardData { + var id: String = "" + var backgroundImage: URL? + var title: String = "Froilán Largacha Hurtado" + + init(_ url: String) { + self.backgroundImage = URL(string: url) + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/TextExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/TextExample.swift new file mode 100644 index 0000000..f10ba37 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/TextExample.swift @@ -0,0 +1,25 @@ +// +// TextExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 15/05/22. +// + +import Foundation +import SwiftUI +import PYLayout + +struct TextExample: View { + var body: some View { + Text("`PYTextView('text')`") + .padding() + PYTextView("Size: 12", fontSize: 12) + PYTextView("Size: 14", fontSize: 14) + PYTextView("Size: 16", fontSize: 16) + PYTextView("Size: 18", fontSize: 18) + PYTextView("Size: 20", fontSize: 20) + Text("*note: the color is static*") + .padding() + Spacer() + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift new file mode 100644 index 0000000..405c90b --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -0,0 +1,33 @@ +// +// MenuView.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 13/05/22. +// + +import PYLayout +import SwiftUI +import UIKit + +struct MenuView: View { + var body: some View { + NavigationView { + List { + Section(header: Text("Basic")) { + NavigationLink("Text") { + TextExample() + } + NavigationLink("Button") { + ButtonExample() + } + } + Section(header: Text("Complex")) { + NavigationLink("Collection card") { + CollectionCardExample() + } + } + } + .navigationTitle("Payan Layout") + } + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift index 8c2458e..a6fd396 100644 --- a/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift +++ b/PYLayoutDemo/PYLayoutDemo/SceneDelegate.swift @@ -20,7 +20,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let navigationController = UINavigationController() window?.rootViewController = navigationController - let vc = UIHostingController(rootView: FeedView()) + let vc = UIHostingController(rootView: MenuView()) navigationController.pushViewController(vc, animated: false) window?.makeKeyAndVisible() diff --git a/PYLayoutDemo/PYLayoutDemo/ViewController.swift b/PYLayoutDemo/PYLayoutDemo/ViewController.swift deleted file mode 100644 index 5f6d260..0000000 --- a/PYLayoutDemo/PYLayoutDemo/ViewController.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// ViewController.swift -// PYLayoutDemo -// -// Created by Juan Hurtado on 13/05/22. -// - -import PYLayout -import SwiftUI -import UIKit - -struct FeedView: View { - - var body: some View { - ScrollView { - PYTextView("Próceres", fontSize: 24) - .padding(.bottom, 1) - PYTextView("Algunos de los personajes ilustres de la ciudad blanca", fontSize: 12) - .padding(.bottom) - .opacity(0.7) - PYCollectionCardView(cards: [ - MockCard("https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg"), - MockCard("https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg"), - MockCard("https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg") - ]) - PYButtonView() - .padding() - } - } -} - -struct MockCard: PYCollectionCardData { - var id: String = "" - var backgroundImage: URL? - var title: String = "Froilán Largacha Hurtado" - - init(_ url: String) { - self.backgroundImage = URL(string: url) - } -} diff --git a/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift b/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift index aec8ca7..e75b3e4 100644 --- a/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift +++ b/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift @@ -10,10 +10,15 @@ import SwiftUI public struct PYButtonView: View { @State var backgroundColor: Color = .blue + @State var isBeingPressed = false + let title: String + let fontSize: Int let type: PYButtonType - public init(type: PYButtonType = .loud) { + public init(_ title: String, fontSize: Int = 12, type: PYButtonType = .loud) { + self.title = title + self.fontSize = fontSize self.type = type } @@ -22,29 +27,47 @@ public struct PYButtonView: View { case .loud: return .white case .quiet: - return .blue + return .init(.sRGB, red: 89/255, green: 136/255, blue: 219/255, opacity: 1) + } + } + + private func getBackgroundColor() -> Color { + switch type { + case .loud: + return .init(.sRGB, red: 100/255, green: 145/255, blue: 223/255, opacity: 1) + case .quiet: + return .init(.sRGB, red: 232/255, green: 240/255, blue: 255/255, opacity: 1) + } + } + + private func getOnPressedBackgroundColor() -> Color { + switch type { + case .loud: + return .init(.sRGB, red: 89/255, green: 136/255, blue: 219/255, opacity: 1) + case .quiet: + return .init(.sRGB, red: 167/255, green: 195/255, blue: 246/255, opacity: 1) } } public var body: some View { - PYTextView("Ver todos", fontSize: 12, textColor: getTextColor(), weight: .medium) + PYTextView(title, fontSize: fontSize, textColor: getTextColor(), weight: .medium) .onTapGesture { - print("asdf") + // TODO: handle on tap } .simultaneousGesture( DragGesture(minimumDistance: 0) .onChanged({ _ in - withAnimation(.easeIn(duration: 0.2)) { - backgroundColor = .gray + withAnimation(.easeIn(duration: 0.1)) { + isBeingPressed = true } }) .onEnded({ _ in - backgroundColor = .blue + isBeingPressed = false }) ) .padding(.horizontal) .padding(.vertical, 5) - .background(backgroundColor) + .background(isBeingPressed ? getOnPressedBackgroundColor() : getBackgroundColor()) .cornerRadius(4) } } diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift index 8c72b03..3d9e9b4 100644 --- a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift +++ b/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift @@ -13,7 +13,7 @@ public struct PYTextView: View { let textColor: Color let weight: PYTextWeight - public init(_ content: String, fontSize: Int, textColor: Color = .black, weight: PYTextWeight = .regular) { + public init(_ content: String, fontSize: Int = 12, textColor: Color = .black, weight: PYTextWeight = .regular) { self.content = content self.fontSize = fontSize self.textColor = textColor From 907bbec30187acf1c2b33dc44ac7584382da5f8c Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sun, 15 May 2022 16:44:03 -0500 Subject: [PATCH 12/27] refactor: update folder structure --- .../PYLayout/SwiftUI/{Buttons => Basic/Button}/PYButtonType.swift | 0 .../PYLayout/SwiftUI/{Buttons => Basic/Button}/PYButtonView.swift | 0 Sources/PYLayout/SwiftUI/{Views => Basic}/Text/PYTextView.swift | 0 Sources/PYLayout/SwiftUI/{Views => Basic}/Text/PYTextWeight.swift | 0 .../{Views => Complex}/Collection Card/PYCollectionCardData.swift | 0 .../{Views => Complex}/Collection Card/PYCollectionCardView.swift | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename Sources/PYLayout/SwiftUI/{Buttons => Basic/Button}/PYButtonType.swift (100%) rename Sources/PYLayout/SwiftUI/{Buttons => Basic/Button}/PYButtonView.swift (100%) rename Sources/PYLayout/SwiftUI/{Views => Basic}/Text/PYTextView.swift (100%) rename Sources/PYLayout/SwiftUI/{Views => Basic}/Text/PYTextWeight.swift (100%) rename Sources/PYLayout/SwiftUI/{Views => Complex}/Collection Card/PYCollectionCardData.swift (100%) rename Sources/PYLayout/SwiftUI/{Views => Complex}/Collection Card/PYCollectionCardView.swift (100%) diff --git a/Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift b/Sources/PYLayout/SwiftUI/Basic/Button/PYButtonType.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Buttons/PYButtonType.swift rename to Sources/PYLayout/SwiftUI/Basic/Button/PYButtonType.swift diff --git a/Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift b/Sources/PYLayout/SwiftUI/Basic/Button/PYButtonView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Buttons/PYButtonView.swift rename to Sources/PYLayout/SwiftUI/Basic/Button/PYButtonView.swift diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift b/Sources/PYLayout/SwiftUI/Basic/Text/PYTextView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Views/Text/PYTextView.swift rename to Sources/PYLayout/SwiftUI/Basic/Text/PYTextView.swift diff --git a/Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift b/Sources/PYLayout/SwiftUI/Basic/Text/PYTextWeight.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Views/Text/PYTextWeight.swift rename to Sources/PYLayout/SwiftUI/Basic/Text/PYTextWeight.swift diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift b/Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardData.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardData.swift rename to Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardData.swift diff --git a/Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Views/Collection Card/PYCollectionCardView.swift rename to Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardView.swift From 0030fe04ccf6664cdda6099b06d017b933fe8b27 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sun, 15 May 2022 17:04:55 -0500 Subject: [PATCH 13/27] feat: add story view basic structure --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 4 ++ .../PYLayoutDemo/Examples/StoryExample.swift | 19 ++++++ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 3 + .../SwiftUI/Complex/Story/PYStoryData.swift | 13 ++++ .../SwiftUI/Complex/Story/PYStoryView.swift | 63 +++++++++++++++++++ 5 files changed, 102 insertions(+) create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift create mode 100644 Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift create mode 100644 Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index e3eb028..f812098 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; + 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC004082831AC250037EF10 /* StoryExample.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -31,6 +32,7 @@ 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; + 2FC004082831AC250037EF10 /* StoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryExample.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -51,6 +53,7 @@ 2F1F7D7028317E0700AA30DB /* CollectionCardExample.swift */, 2F1F7D7228318D9900AA30DB /* TextExample.swift */, 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, + 2FC004082831AC250037EF10 /* StoryExample.swift */, ); path = Examples; sourceTree = ""; @@ -170,6 +173,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */, 2F1F7D7128317E0700AA30DB /* CollectionCardExample.swift in Sources */, 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */, 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift new file mode 100644 index 0000000..d880bda --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift @@ -0,0 +1,19 @@ +// +// StoryExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 15/05/22. +// + +import Foundation +import SwiftUI +import PYLayout + +struct StoryExample: View { + var body: some View { + Text("`PYStoryView()`") + .padding() + PYStoryView() + Spacer() + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift index 405c90b..5108c46 100644 --- a/PYLayoutDemo/PYLayoutDemo/MenuView.swift +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -25,6 +25,9 @@ struct MenuView: View { NavigationLink("Collection card") { CollectionCardExample() } + NavigationLink("Story") { + StoryExample() + } } } .navigationTitle("Payan Layout") diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift new file mode 100644 index 0000000..362400b --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift @@ -0,0 +1,13 @@ +// +// PYStoryData.swift +// +// +// Created by Juan Hurtado on 15/05/22. +// + +import Foundation + +protocol PYStoryData { + var image: URL? { get } + var title: String { get } +} diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift new file mode 100644 index 0000000..4c5c0b3 --- /dev/null +++ b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift @@ -0,0 +1,63 @@ +// +// PYStoryView.swift +// +// +// Created by Juan Hurtado on 15/05/22. +// + +import SwiftUI +import Kingfisher + +public struct PYStoryView: View { + public init() {} + + var indicators: some View { + HStack(spacing: 3) { + Color.white.opacity(0.8) + .cornerRadius(1) + Color.white.opacity(0.3) + .cornerRadius(1) + Color.white.opacity(0.3) + .cornerRadius(1) + Color.white.opacity(0.3) + .cornerRadius(1) + }.frame(height: 5) + } + + public var body: some View { + ZStack { + KFImage.url(URL(string: "https://elturismoencolombia.com/wp-content/uploads/2018/06/popayan_iglesia_santo_domingo_colombia_travel.jpg")!) + .resizable() + LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.35)]), startPoint: .top, endPoint: .center) + VStack { + Spacer() + HStack { + PYTextView("Title", fontSize: 16, textColor: .white, weight: .medium) + Spacer() + } + HStack { + PYTextView("Subtitle", fontSize: 12, textColor: .white) + Spacer() + } + }.padding() + GeometryReader { geometry in + HStack { + Color.blue + .opacity(0) + .frame(width: geometry.size.width * 0.3) + Spacer() + Color.blue + .opacity(0) + .frame(width: geometry.size.width * 0.3) + } + + } + VStack { + indicators + Spacer() + } + .padding(5) + }.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.33) + + } +} From f5cc78fba35243952354ac8f77d78e095064678b Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Sun, 15 May 2022 18:35:19 -0500 Subject: [PATCH 14/27] feat: add story view core logic --- .../PYLayoutDemo/Examples/StoryExample.swift | 26 ++++++- .../SwiftUI/Complex/Story/PYStoryData.swift | 3 +- .../SwiftUI/Complex/Story/PYStoryView.swift | 67 ++++++++++++------- 3 files changed, 70 insertions(+), 26 deletions(-) diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift index d880bda..8f08fad 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/StoryExample.swift @@ -11,9 +11,31 @@ import PYLayout struct StoryExample: View { var body: some View { - Text("`PYStoryView()`") + Text("`PYStoryView(stories: [...])`") .padding() - PYStoryView() + PYStoryView(stories: [ + MockStory( + image: URL(string: "https://elturismoencolombia.com/wp-content/uploads/2018/06/popayan_iglesia_santo_domingo_colombia_travel.jpg"), + title: "First title", + subtitle: "La Universidad del Cauca es una universidad pública de Colombia, sujeta a inspección y vigilancia por medio de la Ley 1740 de 2014 y la ley 30 de 1992 del Ministerio de Educación de Colombia. Su campus principal se encuentra ubicado en la ciudad de Popayán, " + ), + MockStory( + image: URL(string: "https://media-cdn.tripadvisor.com/media/photo-m/1280/14/3f/03/e8/vista-diurna-de-la-ermita.jpg"), + title: "Second title", + subtitle: "skdjh asDSd Cauca es una universidad pública de Colombia, sujeta a inspección y vigsdljlkjljsd" + ), + MockStory( + image: URL(string: "https://www.cronicadelquindio.com/files/noticias/20100220064229.jpg"), + title: "Third title", + subtitle: "La Ajliyh dlkjsouoy ojsf del Cauca es una universidad pública de Colombia, sujeta a inspección y vigilancia por medio de la Ley 174Sholj ljlih osdfyán, " + ) + ]) Spacer() } } + +struct MockStory: PYStoryData { + var image: URL? + var title: String + var subtitle: String +} diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift index 362400b..3868d2c 100644 --- a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift +++ b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift @@ -7,7 +7,8 @@ import Foundation -protocol PYStoryData { +public protocol PYStoryData { var image: URL? { get } var title: String { get } + var subtitle: String { get } } diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift index 4c5c0b3..aaf84d2 100644 --- a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift +++ b/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift @@ -9,54 +9,75 @@ import SwiftUI import Kingfisher public struct PYStoryView: View { - public init() {} + @State var currentIndex: Int = 0 + + let stories: [PYStoryData] + + public init(stories: [PYStoryData]) { + self.stories = stories + } var indicators: some View { HStack(spacing: 3) { - Color.white.opacity(0.8) - .cornerRadius(1) - Color.white.opacity(0.3) - .cornerRadius(1) - Color.white.opacity(0.3) - .cornerRadius(1) - Color.white.opacity(0.3) - .cornerRadius(1) + ForEach(stories.indices) { index in + Color.white.opacity(index == currentIndex ? 0.8 : 0.3) + .cornerRadius(1) + } }.frame(height: 5) } + private func next() { + guard currentIndex < stories.count - 1 else { return } + currentIndex += 1 + } + + private func back() { + guard currentIndex > 0 else { return } + currentIndex -= 1 + } + public var body: some View { ZStack { - KFImage.url(URL(string: "https://elturismoencolombia.com/wp-content/uploads/2018/06/popayan_iglesia_santo_domingo_colombia_travel.jpg")!) + KFImage.url(stories[currentIndex].image) + .placeholder({ _ in + ProgressView() + }) .resizable() LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.35)]), startPoint: .top, endPoint: .center) VStack { Spacer() HStack { - PYTextView("Title", fontSize: 16, textColor: .white, weight: .medium) + PYTextView(stories[currentIndex].title, fontSize: 16, textColor: .white, weight: .medium) Spacer() } HStack { - PYTextView("Subtitle", fontSize: 12, textColor: .white) + PYTextView(stories[currentIndex].subtitle, fontSize: 12, textColor: .white) Spacer() } }.padding() + VStack { + indicators + Spacer() + } + .padding(5) GeometryReader { geometry in HStack { - Color.blue - .opacity(0) - .frame(width: geometry.size.width * 0.3) + Color.gray + .opacity(0.001) + .frame(width: geometry.size.width * 0.4) + .onTapGesture { + back() + } Spacer() - Color.blue - .opacity(0) - .frame(width: geometry.size.width * 0.3) + Color.gray // When opacity = 0 or the color is `clear`, tap gesture doesn't work :c + .opacity(0.001) + .frame(width: geometry.size.width * 0.4) + .onTapGesture { + next() + } } } - VStack { - indicators - Spacer() - } - .padding(5) }.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.33) } From 191ff61fbbaf9fc4c383c4520a7d6f3b7dd27b90 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Mon, 16 May 2022 16:22:37 -0500 Subject: [PATCH 15/27] refactor: modify views folder structure --- PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj | 2 ++ .../PYLayout/{SwiftUI => Views}/Basic/Button/PYButtonType.swift | 0 .../PYLayout/{SwiftUI => Views}/Basic/Button/PYButtonView.swift | 0 Sources/PYLayout/{SwiftUI => Views}/Basic/Text/PYTextView.swift | 0 .../PYLayout/{SwiftUI => Views}/Basic/Text/PYTextWeight.swift | 0 .../Complex/Collection Card/PYCollectionCardData.swift | 0 .../Complex/Collection Card/PYCollectionCardView.swift | 0 .../PYLayout/{SwiftUI => Views}/Complex/Story/PYStoryData.swift | 0 .../PYLayout/{SwiftUI => Views}/Complex/Story/PYStoryView.swift | 0 9 files changed, 2 insertions(+) rename Sources/PYLayout/{SwiftUI => Views}/Basic/Button/PYButtonType.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Basic/Button/PYButtonView.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Basic/Text/PYTextView.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Basic/Text/PYTextWeight.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Complex/Collection Card/PYCollectionCardData.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Complex/Collection Card/PYCollectionCardView.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Complex/Story/PYStoryData.swift (100%) rename Sources/PYLayout/{SwiftUI => Views}/Complex/Story/PYStoryView.swift (100%) diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index f812098..90d2cca 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -320,6 +320,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 9TP4HMDZ7W; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PYLayoutDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -347,6 +348,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 9TP4HMDZ7W; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PYLayoutDemo/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; diff --git a/Sources/PYLayout/SwiftUI/Basic/Button/PYButtonType.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Basic/Button/PYButtonType.swift rename to Sources/PYLayout/Views/Basic/Button/PYButtonType.swift diff --git a/Sources/PYLayout/SwiftUI/Basic/Button/PYButtonView.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Basic/Button/PYButtonView.swift rename to Sources/PYLayout/Views/Basic/Button/PYButtonView.swift diff --git a/Sources/PYLayout/SwiftUI/Basic/Text/PYTextView.swift b/Sources/PYLayout/Views/Basic/Text/PYTextView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Basic/Text/PYTextView.swift rename to Sources/PYLayout/Views/Basic/Text/PYTextView.swift diff --git a/Sources/PYLayout/SwiftUI/Basic/Text/PYTextWeight.swift b/Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Basic/Text/PYTextWeight.swift rename to Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift diff --git a/Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardData.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardData.swift rename to Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift diff --git a/Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Complex/Collection Card/PYCollectionCardView.swift rename to Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift b/Sources/PYLayout/Views/Complex/Story/PYStoryData.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Complex/Story/PYStoryData.swift rename to Sources/PYLayout/Views/Complex/Story/PYStoryData.swift diff --git a/Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift b/Sources/PYLayout/Views/Complex/Story/PYStoryView.swift similarity index 100% rename from Sources/PYLayout/SwiftUI/Complex/Story/PYStoryView.swift rename to Sources/PYLayout/Views/Complex/Story/PYStoryView.swift From 572d7246e9eb218e235815bc68018f0ec85fba31 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Mon, 16 May 2022 22:05:07 -0500 Subject: [PATCH 16/27] feat: add text view factory --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 4 ++ .../Examples/FactoryExample.swift | 33 +++++++++++++ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 5 ++ .../Common/Extensions/Color+Hex.swift | 48 +++++++++++++++++++ .../Factories/PYTextViewFactory.swift | 25 ++++++++++ .../PYLayout/Factories/PYViewFactory.swift | 22 +++++++++ Sources/PYLayout/Protocols/PYView.swift | 14 ++++++ .../Views/Basic/Text/PYTextView.swift | 6 +++ .../Views/Basic/Text/PYTextWeight.swift | 6 ++- 9 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift create mode 100644 Sources/PYLayout/Common/Extensions/Color+Hex.swift create mode 100644 Sources/PYLayout/Factories/PYTextViewFactory.swift create mode 100644 Sources/PYLayout/Factories/PYViewFactory.swift create mode 100644 Sources/PYLayout/Protocols/PYView.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index 90d2cca..aed2035 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; + 2F9D46732833195600320831 /* FactoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9D46722833195600320831 /* FactoryExample.swift */; }; 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC004082831AC250037EF10 /* StoryExample.swift */; }; /* End PBXBuildFile section */ @@ -32,6 +33,7 @@ 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; + 2F9D46722833195600320831 /* FactoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FactoryExample.swift; sourceTree = ""; }; 2FC004082831AC250037EF10 /* StoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryExample.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -54,6 +56,7 @@ 2F1F7D7228318D9900AA30DB /* TextExample.swift */, 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, 2FC004082831AC250037EF10 /* StoryExample.swift */, + 2F9D46722833195600320831 /* FactoryExample.swift */, ); path = Examples; sourceTree = ""; @@ -176,6 +179,7 @@ 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */, 2F1F7D7128317E0700AA30DB /* CollectionCardExample.swift in Sources */, 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */, + 2F9D46732833195600320831 /* FactoryExample.swift in Sources */, 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */, diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift new file mode 100644 index 0000000..4186215 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift @@ -0,0 +1,33 @@ +// +// FactoryExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 16/05/22. +// + +import Foundation +import PYLayout +import SwiftUI + +struct FactoryExample: View { + var body: some View { + ScrollView { + PYViewFactory.buildView( + ofLayout: "txt", + params: [ + "text": "Próceres", + "fontSize": 22, + ] + ) + PYViewFactory.buildView( + ofLayout: "txt", + params: [ + "text": "Algunos de los personajes ilustres de Popayán", + "fontSize": 14, + "textColor": "#636363" + ] + ) + Spacer() + } + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift index 5108c46..ce59166 100644 --- a/PYLayoutDemo/PYLayoutDemo/MenuView.swift +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -29,6 +29,11 @@ struct MenuView: View { StoryExample() } } + Section(header: Text("Factory")) { + NavigationLink("List of views using factories") { + FactoryExample() + } + } } .navigationTitle("Payan Layout") } diff --git a/Sources/PYLayout/Common/Extensions/Color+Hex.swift b/Sources/PYLayout/Common/Extensions/Color+Hex.swift new file mode 100644 index 0000000..4f43862 --- /dev/null +++ b/Sources/PYLayout/Common/Extensions/Color+Hex.swift @@ -0,0 +1,48 @@ +// +// Color+Hex.swift +// +// +// Created by Juan Hurtado on 16/05/22. +// + +import Foundation +import SwiftUI + +extension Color { + /// Creates a color from a hexsadecimal string representation. + init?(_ hex: String) { + var str = hex + if str.hasPrefix("#") { + str.removeFirst() + } + if str.count == 3 { + str = String(repeating: str[str.startIndex], count: 2) + + String(repeating: str[str.index(str.startIndex, offsetBy: 1)], count: 2) + + String(repeating: str[str.index(str.startIndex, offsetBy: 2)], count: 2) + } else if !str.count.isMultiple(of: 2) || str.count > 8 { + return nil + } + guard let color = UInt64(str, radix: 16) else { return nil } + if str.count == 2 { + let gray = Double(Int(color) & 0xFF) / 255 + self.init(.sRGB, red: gray, green: gray, blue: gray, opacity: 1) + } else if str.count == 4 { + let gray = Double(Int(color >> 8) & 0x00FF) / 255 + let alpha = Double(Int(color) & 0x00FF) / 255 + self.init(.sRGB, red: gray, green: gray, blue: gray, opacity: alpha) + } else if str.count == 6 { + let red = Double(Int(color >> 16) & 0x0000FF) / 255 + let green = Double(Int(color >> 8) & 0x0000FF) / 255 + let blue = Double(Int(color) & 0x0000FF) / 255 + self.init(.sRGB, red: red, green: green, blue: blue, opacity: 1) + } else if str.count == 8 { + let red = Double(Int(color >> 24) & 0x000000FF) / 255 + let green = Double(Int(color >> 16) & 0x000000FF) / 255 + let blue = Double(Int(color >> 8) & 0x000000FF) / 255 + let alpha = Double(Int(color) & 0x000000FF) / 255 + self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha) + } else { + return nil + } + } +} diff --git a/Sources/PYLayout/Factories/PYTextViewFactory.swift b/Sources/PYLayout/Factories/PYTextViewFactory.swift new file mode 100644 index 0000000..0c1f4b2 --- /dev/null +++ b/Sources/PYLayout/Factories/PYTextViewFactory.swift @@ -0,0 +1,25 @@ +// +// PYTextViewFactory.swift +// +// +// Created by Juan Hurtado on 16/05/22. +// + +import Foundation +import SwiftUI + +public final class PYTextViewFactory { + public static func buildView(params: [String: Any]?) -> some View { + let text = params?["text"] as? String ?? "" + let fontSize = params?["fontSize"] as? Int ?? 12 + var textColor: Color = .black + if let hexColor = params?["textColor"] as? String { + textColor = Color(hexColor) ?? .black + } + var weight: PYTextWeight = .regular + if let weightString = params?["weight"] as? String { + weight = PYTextWeight(rawValue: weightString) ?? .regular + } + return PYTextView(text, fontSize: fontSize, textColor: textColor, weight: weight) + } +} diff --git a/Sources/PYLayout/Factories/PYViewFactory.swift b/Sources/PYLayout/Factories/PYViewFactory.swift new file mode 100644 index 0000000..7495dc4 --- /dev/null +++ b/Sources/PYLayout/Factories/PYViewFactory.swift @@ -0,0 +1,22 @@ +// +// PYViewFactory.swift +// +// +// Created by Juan Hurtado on 16/05/22. +// + +import Foundation +import SwiftUI + +public final class PYViewFactory { + public static func buildView(ofLayout layout: String, params: [String: Any]?) -> some View { + return Group { + switch layout { + case PYTextView.identifier: + PYTextViewFactory.buildView(params: params) + default: + EmptyView() + } + } + } +} diff --git a/Sources/PYLayout/Protocols/PYView.swift b/Sources/PYLayout/Protocols/PYView.swift new file mode 100644 index 0000000..73de1cd --- /dev/null +++ b/Sources/PYLayout/Protocols/PYView.swift @@ -0,0 +1,14 @@ +// +// PYView.swift +// +// +// Created by Juan Hurtado on 16/05/22. +// + +import Foundation + +/// Defines a Payan view +protocol PYView { + /// Used by the view factory to know which view must be build. + static var identifier: String { get } +} diff --git a/Sources/PYLayout/Views/Basic/Text/PYTextView.swift b/Sources/PYLayout/Views/Basic/Text/PYTextView.swift index 3d9e9b4..7f57402 100644 --- a/Sources/PYLayout/Views/Basic/Text/PYTextView.swift +++ b/Sources/PYLayout/Views/Basic/Text/PYTextView.swift @@ -39,3 +39,9 @@ public struct PYTextView: View { .foregroundColor(textColor) } } + +extension PYTextView: PYView { + static var identifier: String { + "txt" + } +} diff --git a/Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift b/Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift index 5baad6f..14e012e 100644 --- a/Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift +++ b/Sources/PYLayout/Views/Basic/Text/PYTextWeight.swift @@ -7,6 +7,8 @@ import Foundation -public enum PYTextWeight { - case regular, medium, semibold +public enum PYTextWeight: String { + case regular = "regular" + case medium = "medium" + case semibold = "semibold" } From 7be107706d00cf1220a9550be060c208d4309940 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Tue, 17 May 2022 12:31:43 -0500 Subject: [PATCH 17/27] feat: add button view factory --- .../Examples/FactoryExample.swift | 16 +++++++++++++ .../{ => Common}/Protocols/PYView.swift | 0 .../Factories/PYButtonViewFactory.swift | 23 +++++++++++++++++++ .../PYLayout/Factories/PYViewFactory.swift | 2 ++ .../Views/Basic/Button/PYButtonHandler.swift | 13 +++++++++++ .../Views/Basic/Button/PYButtonType.swift | 5 ++-- .../Views/Basic/Button/PYButtonView.swift | 14 +++++++++-- 7 files changed, 69 insertions(+), 4 deletions(-) rename Sources/PYLayout/{ => Common}/Protocols/PYView.swift (100%) create mode 100644 Sources/PYLayout/Factories/PYButtonViewFactory.swift create mode 100644 Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift index 4186215..339dc2d 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift @@ -27,7 +27,23 @@ struct FactoryExample: View { "textColor": "#636363" ] ) + PYViewFactory.buildView( + ofLayout: "btn", + params: [ + "title": "Ver todos", + "fontSize": 14, + "deepLink": "payan://collection?typeId=123", + "handler": self, + "type": "quiet" + ] + ) Spacer() } } } + +extension FactoryExample: PYButtonHandler { + func onTap(deepLink: String?) { + print(deepLink ?? "Tap on button without deep link") + } +} diff --git a/Sources/PYLayout/Protocols/PYView.swift b/Sources/PYLayout/Common/Protocols/PYView.swift similarity index 100% rename from Sources/PYLayout/Protocols/PYView.swift rename to Sources/PYLayout/Common/Protocols/PYView.swift diff --git a/Sources/PYLayout/Factories/PYButtonViewFactory.swift b/Sources/PYLayout/Factories/PYButtonViewFactory.swift new file mode 100644 index 0000000..14500ad --- /dev/null +++ b/Sources/PYLayout/Factories/PYButtonViewFactory.swift @@ -0,0 +1,23 @@ +// +// PYButtonViewFactory.swift +// +// +// Created by Juan Hurtado on 17/05/22. +// + +import Foundation +import SwiftUI + +final class PYButtonViewFactory { + static func buildView(params: [String: Any]? = nil) -> some View { + let title = params?["title"] as? String ?? "" + let deepLink = params?["deepLink"] as? String + let fontSize = params?["fontSize"] as? Int ?? 12 + let handler = params?["handler"] as? PYButtonHandler + var type: PYButtonType = .loud + if let typeString = params?["type"] as? String { + type = .init(rawValue: typeString) ?? .loud + } + return PYButtonView(title, fontSize: fontSize, type: type, deeplink: deepLink, handler: handler) + } +} diff --git a/Sources/PYLayout/Factories/PYViewFactory.swift b/Sources/PYLayout/Factories/PYViewFactory.swift index 7495dc4..9470bd7 100644 --- a/Sources/PYLayout/Factories/PYViewFactory.swift +++ b/Sources/PYLayout/Factories/PYViewFactory.swift @@ -14,6 +14,8 @@ public final class PYViewFactory { switch layout { case PYTextView.identifier: PYTextViewFactory.buildView(params: params) + case PYButtonView.identifier: + PYButtonViewFactory.buildView(params: params) default: EmptyView() } diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift new file mode 100644 index 0000000..300ecab --- /dev/null +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift @@ -0,0 +1,13 @@ +// +// PYButtonHandler.swift +// +// +// Created by Juan Hurtado on 17/05/22. +// + +import Foundation + +public protocol PYButtonHandler { + /// It gets called when a user taps on a button. + func onTap(deepLink: String?) +} diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift index 30234c6..18b4795 100644 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift @@ -7,6 +7,7 @@ import Foundation -public enum PYButtonType { - case loud, quiet +public enum PYButtonType: String { + case loud = "loud" + case quiet = "quiet" } diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift index e75b3e4..270c165 100644 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift @@ -15,11 +15,15 @@ public struct PYButtonView: View { let title: String let fontSize: Int let type: PYButtonType + let deepLink: String? + let handler: PYButtonHandler? - public init(_ title: String, fontSize: Int = 12, type: PYButtonType = .loud) { + public init(_ title: String, fontSize: Int = 12, type: PYButtonType = .loud, deeplink: String? = nil, handler: PYButtonHandler? = nil) { self.title = title self.fontSize = fontSize self.type = type + self.deepLink = deeplink + self.handler = handler } private func getTextColor() -> Color { @@ -52,7 +56,7 @@ public struct PYButtonView: View { public var body: some View { PYTextView(title, fontSize: fontSize, textColor: getTextColor(), weight: .medium) .onTapGesture { - // TODO: handle on tap + handler?.onTap(deepLink: deepLink) } .simultaneousGesture( DragGesture(minimumDistance: 0) @@ -71,3 +75,9 @@ public struct PYButtonView: View { .cornerRadius(4) } } + +extension PYButtonView: PYView { + static var identifier: String { + "btn" + } +} From 27f3e1e5e51800bab4d90d797a4b7e2cd3e87566 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Tue, 17 May 2022 22:16:19 -0500 Subject: [PATCH 18/27] feat: add collection card view factory --- .../Examples/FactoryExample.swift | 19 +++++++++++ .../PYCollectionCardViewFactory.swift | 34 +++++++++++++++++++ .../PYLayout/Factories/PYViewFactory.swift | 2 ++ .../PYCollectionCardView.swift | 6 ++++ 4 files changed, 61 insertions(+) create mode 100644 Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift index 339dc2d..7a5c173 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift @@ -27,6 +27,25 @@ struct FactoryExample: View { "textColor": "#636363" ] ) + PYViewFactory.buildView( + ofLayout: "cc", + params: [ + "elements": [ + [ + "title": "Francisco José de Caldas", + "imageUrl": "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg" + ], + [ + "title": "Froilán Largacha Hurtado", + "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg" + ], + [ + "title": "Camilo Torres Tenorio", + "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg" + ], + ] + ] + ) PYViewFactory.buildView( ofLayout: "btn", params: [ diff --git a/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift b/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift new file mode 100644 index 0000000..dc66669 --- /dev/null +++ b/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift @@ -0,0 +1,34 @@ +// +// PYCollectionCardViewFactory.swift +// +// +// Created by Juan Hurtado on 17/05/22. +// + +import Foundation +import SwiftUI + +class PYCollectionCardViewFactory { + static func buildView(params: [String: Any]?) -> some View { + var cards: [CollectionCardData] = [] + if let cardRawArray = params?["elements"] as? [[String: Any]] { + for rawCard in cardRawArray { + let title = rawCard["title"] as? String ?? "" + let imageUrl = rawCard["imageUrl"] as? String ?? "" + cards.append(CollectionCardData(title: title, imageUrl: imageUrl)) + } + } + return PYCollectionCardView(cards: cards) + } +} + +struct CollectionCardData: PYCollectionCardData { + var id: String = "12" + var backgroundImage: URL? + var title: String + + init(title: String, imageUrl: String) { + self.title = title + self.backgroundImage = URL(string: imageUrl) + } +} diff --git a/Sources/PYLayout/Factories/PYViewFactory.swift b/Sources/PYLayout/Factories/PYViewFactory.swift index 9470bd7..c44d75b 100644 --- a/Sources/PYLayout/Factories/PYViewFactory.swift +++ b/Sources/PYLayout/Factories/PYViewFactory.swift @@ -16,6 +16,8 @@ public final class PYViewFactory { PYTextViewFactory.buildView(params: params) case PYButtonView.identifier: PYButtonViewFactory.buildView(params: params) + case PYCollectionCardView.identifier: + PYCollectionCardViewFactory.buildView(params: params) default: EmptyView() } diff --git a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift index d8bd686..f1f7531 100644 --- a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift +++ b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift @@ -103,3 +103,9 @@ public struct PYCollectionCardView: View { }.frame(width: UIScreen.main.bounds.width, height: 300) } } + +extension PYCollectionCardView: PYView { + static var identifier: String { + "cc" + } +} From 7834cb00257a69f7c30dbc3c2a202a37a44d6a57 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Tue, 17 May 2022 23:24:28 -0500 Subject: [PATCH 19/27] chore: update demo icon --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 2 + .../AppIcon.appiconset/icon-40.png | Bin 966 -> 1077 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 1825 -> 1970 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 2759 -> 2965 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 2759 -> 2965 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 4139 -> 4458 bytes .../AppIcon.appiconset/icon-72.png | Bin 1732 -> 1791 bytes .../AppIcon.appiconset/icon-72@2x.png | Bin 3331 -> 3474 bytes .../AppIcon.appiconset/icon-76.png | Bin 1753 -> 2009 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 3515 -> 3789 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 3867 -> 4162 bytes .../AppIcon.appiconset/icon-small-50.png | Bin 1208 -> 1331 bytes .../AppIcon.appiconset/icon-small-50@2x.png | Bin 2129 -> 2504 bytes .../AppIcon.appiconset/icon-small.png | Bin 769 -> 797 bytes .../AppIcon.appiconset/icon-small@2x.png | Bin 1378 -> 1541 bytes .../AppIcon.appiconset/icon-small@3x.png | Bin 2003 -> 2224 bytes .../AppIcon.appiconset/icon.png | Bin 1340 -> 1486 bytes .../AppIcon.appiconset/icon@2x.png | Bin 2621 -> 2862 bytes .../AppIcon.appiconset/ios-marketing.png | Bin 37084 -> 39862 bytes .../notification-icon@2x.png | Bin 966 -> 1077 bytes .../notification-icon@3x.png | Bin 1409 -> 1533 bytes .../notification-icon~ipad.png | Bin 532 -> 610 bytes .../notification-icon~ipad@2x.png | Bin 966 -> 1077 bytes .../Examples/FactoryExample.swift | 90 +++++++++--------- 24 files changed, 48 insertions(+), 44 deletions(-) diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index aed2035..7d7cf99 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -327,6 +327,7 @@ DEVELOPMENT_TEAM = 9TP4HMDZ7W; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PYLayoutDemo/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Payan Layout"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; @@ -355,6 +356,7 @@ DEVELOPMENT_TEAM = 9TP4HMDZ7W; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PYLayoutDemo/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Payan Layout"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png index a1ea13fb2f75e9345cc7ac2238a6597db76e7f73..cd793796cd1bce0dd46be1c4975613e1d6d0690f 100644 GIT binary patch delta 962 zcmV;z13mo42ek;0fq$P#L_t(o3GG&ENEA^Nc6N5xU0qFA#r2hMOsxpmYxugDrMke)Yh?>}z!csz7Fs#J9+j#il~Lxm3w*yr=Lv_E~`+0BF5TUL7EY@J4< z;qfJwAprkabTr<+JNW5~sJX)Yyc<_88DnEacZE!)z+)4WR~zqOxJ_t+YMsU2yi&!t%gPPugB~_efje?H)2$ zo;rDq$K)+#`~v9+y`HBdyVUD-vNCE}iS648rlw~mr)F|;veYQb%FlmaAPA2sF@fa( zF+4h+k)BqVzlF;br=gE!2b^(fg?VUrlq>nHqw_&?D}R^ca4dn?hyDRBGZ-zOYVbED z$po`ivZO)4f?+Tx`-Op!9*Te&TNW#AS7KPKIP4~y5+!8VEk(cvLu8b}VD;N&HH8F* z;qh@styU}C5^@v)gIaP@B9lp>36^8QaD{mW73IJt*@)pRz(3XxX(AM0+y*5oVGca| zBN4+p2!FjR1&rfK$|?(t$X_4~5|cwnW}Gor6dQbUy9r*zPB*pWrj}ihCxq7WPmH>9 zV1FxP_|^jPTgi&~d+ApbyFHZMK@wgBMG>7Afx&ZE{*ho5UibDjHMgnhv3hHIy*@Z{ zjb_z#pO5r-J(tg)DcQZ#;UwoAlt!)6pnN5g-Pr*a8))gNHFF zDyS<3&dN+LF4_U{LX^zk78g4q-e{kv>n=4d!?s8n^eSO)x$;0OO*O0bsHJ^+W|mzt zM1AdX@Cg+2otFAi8{@DQP&1(&) z|D9fRLP1HLD{BOZkRt}2+L|K=_E(IKPi%^g&dYXJsx z@Iwh75CMbJthp%>9q(*kF;`xy9@xUZ3Ol*D0+0e1Q#MkkReE+xD*Zcw kMFD~_{|{iLtwd+xCw4xi!fFL3`~Uy|07*qoM6N<$f^zn}YXATM delta 850 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 BZ@B;f delta 1717 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 Z&e$)d8O8@MFC{bl2W)c3_?@9A@_!m)Bl-XU diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png index 819d08a7b22629767ebe02eea985e659cfc068d1..df52622ac11cb26d0bb278e5fdc2b4f8c3bd85bf 100644 GIT binary patch delta 2865 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 Z&e$)d8O8@MFC{bl2W)c3_?@9A@_!m)Bl-XU diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png index f44360e8a940a29706ddf20cf0b2cdcf0680ce74..53413966bf649154e68b822240d7f6a85252ee3f 100644 GIT binary patch literal 4458 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 literal 4139 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 WEOj4?w$}ddqpqp0r&gwl4EZ0tSfIiH diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72.png index ce43681fb8505f6e4fd03bf7a202c3eeff66a0e2..ae30e9cbee37d9e1e7ec5d4dd9e25576cf646bb4 100644 GIT binary patch delta 1682 zcmV;D25tGo4gU?0fq!X9L_t(&1?`%9Y!pQp!0+9Aw0GC{OEDlJrLQ8*-hU`Mz(z-+VLQ%+8{uXb}GDA@&fe`FQCSroSN+yDth{+@ng59`hBc>7D1)>DU|DNdj?t3utP<7QK53dnr zOPI3qKX`5F?fdQh_TxUkA6!x@mCbveZ)~U+<{rM34j-EL6ZFdjvQwu*C#jO)er-7O-{8QYQHu- zg69WlJ-GA%m~th>Mc5YDie$k4xN`Nq!$)S^9=2(Wvc+s}Yu#VHY9)qlf(ik!^B1~4 zI(0f4jV74JyVYnkufNi?ZSzJvbw*1R*w2^xK0J29=bPVBkiD|AO@~_#tgc>#ZC2DK z*yHs`L4O4>v$H-Ss|5$PC@>f{9HvD!snu#R7DR!Gd9c*FqPpB_wJcw@6t?Z&*e1hh zGH~o`ygxmv4xnTXphGWz-Duf(O`gIQSh+u7I}65@Y9AZ4e;;Fj!q6!P5a&k z8JLrc$qbK-Av?eP+P|2L@OlD6v8=QNb*@GNecdrI{SS)$S zGh*?raC|Q-91jj5ovulcCm1nN?_+G&8GoN34OFFh%mhJ>L?S}KLJ`^*q&)#T5TfTo zv_d)m`3AWGe_#%vU#O7)EWRSKvAN4|(2oR|-bs*$dF%GmE;r>5DRdfTmR4!ftE{Gf zsS@PjmKa!R$-+UWBmI{bv^v8%etuqVvWspXb^8vyUMsQ# zwncNZ)p{M~N{gw+_J(-b8=(5f!hd-=8f+?Xi5Qr`InCV*ur-?t(=Y;;6l&9*R0)=e z&9R|t*WrH$AnW;gc@C$Go?lnEE?9)tR99ZPI)sFvYaU>I;{ro~|k2n1o^@&i0I5-tp9C_HD}Yj_q66 z^)3&k(<;@fyVk2wTX19|z=&NQ^tktX7h53RvQ%>n{D2Q! zZ|vKHy;G{mUj=@NpWK87(V=(qgxHrn zVnUn%nJ7gk!|hA9`Y`BNC8mu$d@Qh_nqfbqQIq|GfGu(UnrQOJPtbdcy~ c(#hi=eBSF`>0_mg01E&B07*qoM6N<$f*2Gi0ssI2 delta 1622 zcmV-c2C4b~4a5zQfqyPZL_t(&1?^gWXj@eje;-NHq)pS0G;Nx83W~!rYN@C==UhQW zK@{|lD)SEoQ4u$$vdwjM>$-Nj;$R@c5T{OLjQuf~OsovFSg8(m*0tSN*KY01N0ZmI zO_RLjCGR~?8XI5p)%%kBnr!4zUe7!4+;h+Go^$WH=f04lD1Q>S<3-($pdy$Gz-~3q z7Cct)Se}ePAr$k(5y)l~Jcc|}c_LWwSe`fn*^Gk6kcTQy1PdO^6GtGMp+c6-T#yX} z4j%f%&ju)peD&oQ*WPn?=DLtuu0|-jTntp{2lsbuc=*BLi zJ36|2K7V3=QqJK|Kl}NYU!@$3G=5<2*}3iQ`{2H!m4AXD^zX(v{U2SqdJRz?T?{8Mm{GesKODb4iQYX(vTR`Ip6;oCtg>3ID2xpl z&-42Z92y?Iv|^Wu0v^x8j@?}@W+w4f#vD9(%rWhJA4dIVR->*jEq!O}8=E$)&lrrf zAs&y}?0=3dQGrbhUhn9|D^laKq45AysqiFv*q~$sM%oq+Fp4ClN;9Tmx0P|*_=d1o z#B#ynwrg+CmiO9$Nc@|gcD6qK{C9n46JG)6t8Y#``D~lt&xXTcEXIHmJRt<5Ra~rT zsJHysKLAAh;1NVH7-6c_>ZEU-PR3%ch23Lf!+(r9_*_pAb>^BG_iQj2lxvOE?tr#( zTcwxB3amC_oXw89?TA@swb|>;wXsJm1Xf^+#(|ZxECUaNpYs|R6vz}sL0riK7WHsm z1A}a4sy0HhmIW;8Ve?`b%W9Zj7-uL#PcZOSn>=7J5O5q)TZ8#H1Us-AxpNFc7yJyF zAb-6F!El2z@RR+JDljiAQZ8$90~wiTm!6j)D<6m>vS=< z0(;CXk(ASS>Zdh@S!I7&kDEfmU%Mrnl$P0uJ`)S)E z0k=qfK@w1A00DQ*z+hWlSy4VVHgR=qTz@*vyj~wXf`8)pe_a>>e!0OQ6_(N-zu@+Y zaHnZfO_M5`)D=gHBq~Ln1i$5rAQcHbM*}fa1_saV?e2{|A`;I$^~Aed-;5KU^9lA@ z0i2`NP$e2jbt$04HCuYb?6E)~u%ubW|G@HsfD4OLE*_%JP(o|e^6iwT3HrWm0_Lz&7mQ5DmJITTrz{b^uO;Q4B!(a*9zUu0?}z3yDoK+zN&@x$BZ zrgim}Iw0I$;U*(g>1nmH~)VESjjDH4q#i4=-w7G@Gh9X)LmNEGZh^*o`eSZ(MG;iAY zNTLi))7##DUCM{l1oNswPvb%b$`uSn&>jkfjvW2^^qD@`UPO^VF}i)*TP@8^Qefkb zupm-pI-H}dEU>8c%#3^J!U&wM)mzL>>l))uS0VXMGJ?slY*L)N>}kA1r+?Q*n67!w z%5cqhl}th&d%`l9Ym_wv?gde&QN#vCl%iwv_{HKP3|T9& z$6Nw~Js~d=uxC$V7Dez&m48W?7h!9kD3hL(OJI<`=oJ0e8#U*zd7%vB!UC)r4b@4$ z2c!qK8mnR|3qm}RDkHZ&X8NMf-u~qT3 znh&Wcva;;IlQ}lXLwQ!JO)ej&B$pn8YBx>w2$iL&eAx$1tp*8F6i;D_7>|Rm%;VDP zposQd0)v%K_F{)T2)P6Xr!I>}OvuK{5zHkpId;mHEdY}}WI1k-OOL@?uiWDCFNNUe UT@kMUq5uE@07*qoM6N<$f}Ao9@&Et; diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png index 710c9fea628cc3e271e4a46843a16858cba59700..e733a903bcb1b2e72260e59082d5948906ca7d72 100644 GIT binary patch delta 3378 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 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png index c453b4001bf9b12e8813f3aab6418dee39af9e66..fc60a38401bb35e23eacc7d271afafc7d980230c 100644 GIT binary patch delta 1902 zcmV-!2a)*M4cQNnfPV)=NklRDvFVS5CR2)LL!z(TiW~RwfBA3+q=E> z-7Ouqw|mRp?p$-l+dnRE-@JMAe)DGD%)FgePEnNXc7GJNJAc3ozB0($#mi++mOVL$ zdZ0X92a&UQO)Yzpw|fRrVcC;|$XUFmmOaVaJ%gxFHITL*J8|mp&%Z*8nNFv7?A-Is-u(#Gl*yCUtbD^@&?8Rqh=BkZiAFbn`0430=W<}wjvT&u z{c5M9CWnvxwSVX!+uEe>;*bNCWpF@rpF?!voG zA4eil(PruOx_91w^Zv<`L~CGI#0hfm{_nT%*ab@>yP1MGut`|<>{AQp&n>7Hk1!sP ziA3U~&%QYN`*EI@3N4yGZR(2GU)E?eg;r$CO9dGWg}*!a!;eRP^ZB~j+9h(TtA;!} zoct> zS^9qgQtEjUmhTsqEbjIP_8&L|o^;ey&wlI?9+$#01F>q+6Z1?4Lq4(Q^B0>hT!hk$ zn9*2ax95`-$d?MzYPGIN-b7852c6sZ@$y7%^rHuz^H2xjmV|Ci?Mo`RKIMu)#-Eq35~Zx;nDImNLWQRYPC2G>{{4Bf@(Uz27)2j8?ajv$e|ZWj1v;t#R(Ew zhK8I#U`#Q(E>guT5=|Eeq}Zjhw>RMr1b+bxY>7ofVpqfo5-pW3u>scYy|IzN7+L`{ zPLODfiH<$)z9E2AvE3qqgBN7q&Q7c+>8JxR@Pd?j)MEB)O?4HdDj+2(I`Gir++;GE z%_gSid~`ZZ#R-Z?$r4G5q+}==nz`NDcf%Dvg5m@T`5s4gRj1p7MqNJR^6@>w&VL_7 ziV8&2{wNjerBo`pLM~S+W$-~)q2T_iixVW64#NyUMq{yXI3my+Ou+P>j%TdK5|k%E z24a*}tuSg87DEOhQv)ZBb57DA>1MtWDe9V+yy7BLX@%3Ssx&Kg8t~k$ z5rRE9JxLIRKbTqN;5l&c@R-rHS%0$MPdNLT1a1yM@}^&bOqL*sXfy^)$l^j8g_-R1 zN78LR61?ZIDMh3Uq-M~WhMs9YziQnkCPy^=`6o^FW9#VZojs&CL{*xU8nqz5u^Ywd zNfJdjb~^=f&{rdGkn{v8aA3ZmB1AFfIVq$`;WF($vc*L@?2-^db2vSzkbh(AGKeU? zP`W2VjdrL-Ov0Rg#5pHndwuAqUm*O@ZP;zLE}x*x-Kg3Tp-?0k3egqeT-q?b;i^Yg zWmTz^BIh9!Cr*$|y+F6NT|ai>WDb+_b;k5*uvr19jX zpxvyhACbEtF%|Yx#4M0b!xr?x2d3OoPs2k~bvi8)12=a1(^f;SVV7E?e_p$J6`{E$ za-}14J*c@Q{7;rZ8rVdxF1Cae&ax$o;m#G0h6=lF$>N1ffoOsvNq-saW|&NgG)`S? zQ(&fT-mu1E;l7#!2;bkhwxXinN2~5IWzb=^3bQ&kPPp~CecKiYEow&gO{>++YHav& z+m^a9qjRdj@j|b`5K)LKpC)558Q%^Wz8?6%pQM2g~cBS=meXE}Q%^xmG69aDGH1#Ad{1eC?C2(Agxtbf zB=cD>kS}=h3e+b}EZvuVlBOoNc4>jkwGPvJX@P{LLs-_PF!ZGb5=Lt={v$wXfh^2H of~CtK1$R}63zn8AixhbN1Lo6zXun#!A^-pY07*qoM6N<$g0fhg*#H0l delta 1644 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 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png index 85b6f376aa9bd1e12f7e41323dec18ffef5191a1..e2ba4a6e0ba57ff2192e9bc36a44d893c6b63d0b 100644 GIT binary patch delta 4072 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 fzL6U{ws=JylDn}Vc3c+*cjJBkdglbzEuVi delta 3775 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 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small-50.png index 65ba60b2c3b93789137afad52b366c55221edc74..b7a4a8ae9c40fa8b84c8ee743712ca973569f8ee 100644 GIT binary patch delta 1218 zcmV;z1U>t>39|~2fq$JzL_t(o3GG;YXd7i1&t2}4T$?QEX4|BGVXbpar==hR@q=n{ z4C$tI*>KXK4h9b9AL~EuAJZ{JMMMM@9c-eLS@2^jlsPJsDTpwg?I<#ZcAdB_cWIlf z={1*Ja(6!MOJ6Vdm3yzW^pA$pJn!@Qd!OgM=Xo!brfI&F_kW>R9;7)$tFTDwvYM^c zY>{MuM0fRUEq}Jo|30+ixxJmq?t$-rAc=0POD%r*^ndxyu}@B7KTmgV-M{Yzzu#{g z(}iGBunL9ZTkn2w?&n_&f!bQ{d$q485(yjl?w8(S@k090kvGT2|FI0#l!(86xbL=G zZ?TkCWqO45$A9q1kvHDX&4>;GYB=st@4?Lvv^nV5iM+u2`rCmIkA14Ds-08JrzmRQ zi`~1P*^W6b2{Kr+EWh*K(ZRFlTzW@pPdxtU!IxhOu&jG40$AS-ocXN(t4ucQ-aFP@ zw|4FG-MgOL(t$b71VNYo?ZS{ZOn_i2lNlNwafYIo5`VyANvfcafoLLg#%yoLxqE#} zCVK<=0v8IIdy**5mdoW>ENU>9q{56SCgP2EwKN+zoW4%|eL z3We!h4(6j9Wxb9^SScZ`_hLu${G1v(k#;(ke6O(FWec6c<;m9EL4odNxl03cAzRB< z#QEwNK$w@Q`J^sKwi@bhqG{S~w$c-!P^iw-`hU$EFmMQl53+6tKa zW+W{mYGu_&Q&fPVxqy$N;E&R)d4Yw{jE;>5gF)=8D9bRar*kuy0~0zgN%cDDa#`cE zYJW+gLIIldSKz=_h#XpMNoU_9s0WL`TBm zQ~e*K_x+5hsBr&hW36?dcK)y2#@lO0u86J8VJ>L=WuQvqF^AN1c0AQ-*}9Tl zod}bvX<1RL3H)EXUoYj5hl`iRd{G%16$`S(`{trxwcL3}Z_fe4Y1`7#zI$gEihnH? z;en;xA1SazE07tVPowdzGg#Z8m07*qoM6N<$f(rv^|%SNKreQ zwnjsXln@|AEek1%ajIRnY1`AM&u-tnKdGk`ry^1$sFUPBefpf6nPP0HM~c<>)G|`o zg1C73YFSP5@87@SmROmaG}e?cGc&_Q$Y4+uT6gZ=uW9T+c7GGl1;7Fo+Lf?|_ ztf$YOm)ACb{q_wrFm~-dFk|i_OmX5x$aL1*ckfH9o8Eu;h|8wc>ozT0wGNjoL2+`N z_4)IcvYMtBFJIv|ea?cVTX*ciuLhSa$w~gvI1UYwM2PM1Q&oXgx6D&tJTP7as#>y%v!2kNqTl_XXdk%CK9YYJ~8lZi^IKuC&r_WzV4}`N` z;CI$DI;SmAXi10z;|PzlzJLGz<;zzQVIe$f@JNx9wm{ATWk!6?diwk&FlPWOA3S#B zks`U=f`6DrFl~Wj5PLTK`TPHmU;lsnX88T*|36>_^^XDQc*t-TBRG_RULn(2zkdII z{N!n8-(~k$>6WfBk>?;oskXj2vuCoa}^SmP}{y z@$n+tij~dF!vhij@b%xTPye~tnK+pVI|!nM?a(i_}J;uu+} z34h9p@^H04Hc$k@{qg%hFr0Wf$+3dcNCdjz&!0a>Pn>@8^qGvbl(mH^3kx&`9>4kf zpMi;;6%=>31!8ZiojkNlGITXd=)Z_BNJiMgz0n z&)*EZT+sCN;{DI755EDO_3O{SU1#6Pi+@S(IsYDyv&acyG#6mye){&0m4$>fj%En0 zob}}g0~=h~fgs-ZpZ}k||Ib5K(Eu@xCO?r# z`Q#Q&oCWeRY9vC!fOwK7⁣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 Ri_QZ6%=3(oE5!ws{Xg$DiyHs{ delta 2023 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 O0000a>=A=Dz+Z1Dnx>Ng#37#J z@luwnhGBAnSbvU#=ho%AJ3UKw^D_^zmUj1^JY67uU%}{aEEa<_QZg1LX?O5MhH_F% z1~)y>FITEmPO9naE~ydo?7Aybz&@IE+zm zA|AgyezBn_ODk(IaATvxS0*mGTtwPO(I_9`{h{o7@y)?PXJxsP%Z`YmSW#S~<(>WW zjyifK0e=<(K#*V%jCmlT@BzDUJ_k_SLAnJk_9`uuO|U=9CKeAxt(JP;faO&!%VE-D5-F&yc01cC?< m9p53pxIf?q4_Dg_egj5~JHF_(Pa^;T002ovP6b4+LSTXh3Ok(u diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png index c3538fc02bb9acc42b8b84fb92c9f7e4ff0264e1..628b5fd05260016560476cbbdf85293c75ca15a6 100644 GIT binary patch delta 1431 zcmV;I1!(%>3WW@ifPV#VNkle6p?ya0Nm5{NRzp$G$Ft;E@MAUfuA#)oL{MjKZBsBzErZ z=^Oa92v+G)OY_QiyWXg(sw^p4M8FW-izB1mJKi51nZ-Tj+|=6AtYns?v1^8CEM^=lz=}+Rrg%wwDgkV`7K=rt zg1AedYBAx`1aA)O2Dd>GvvG4*`$Ovv9zF)Nwn5p@`P>FAA2=ubPs6}1-8+EBwF~mt z-i4`$eSfvS&I^P;5CU4;V3wh2`M?PTLol%3=LMP|ib%$Q8K2iP3papka$>dss`H_@ zC1`|jC3_S8OU0K?+kQWK!^MFc3{64^>I5o@Ev9#&77I;=vEWMH^?7TtM#;j2!BAD{ zmJT+`Vq8{Qh)5<=vG~l=tFN-#?S*8D^9kXC(tkQ1T5VY2E4>?W;DR|LaHU*^ksPGJ zg)COwg+-nkhl}#4&h}s6&Q6QYAu2I)xKiq!m`zM7rG>f%(*md^hbx63)>1Q=bOA2; zSx;JOli{gsE@!vd3VBq?pYtwSquK@~K{`t%vtlYEX7Us-0E2=*PM`vm|2`pyTU)af zPJgy=TN4O`8m_6+n%8n*Dmczr>2|9g<#};BAx_N*B4uG{i_J=cx1wB>(r0XKOt zK#k({)PP}sKv!~r3m!PwsnP;Ca4Ieg`T0nKa=2N{5{r8crk?EVYmKeI|ER!~-4eTQ% zAB?TO30<7UlKJs)rm2BDH5hAK;g$uI+Q@@Jsipm%JDqI7*nsOtSvVXQ>^78?WX_kz zgJ?gXs6Zt9!OwY%rbM>l5>{DE zCqbUbR0i(9_ios+_U_w1K3DX(U9P7)pHN;zCo`gzMhRavR)5ztxM1@3+g7b#Ka`Sau@7ZXh*Kyf_GSi&cmDLp|pp;=W2G@6Z;wk>S{_wI|$9=6!KtoHTOZ`rB zdd*2>bJ|M$o*U0Yd0-@VH7{GjqM^qqUlqtuI`u9nT!g96H0#5=pm2?O7QN7d!qw-& lVp3(eg}q}eZjs)90SvczJrLr-f|vjR002ovPDHLkV1k3=$-w{s delta 1266 zcmV$TUdtlik!ZVW?0R1!!uOYr>< zjW6*J|1vQ#goLOG{KG#Z5izKU6D83RB7_O}mWU)0M<5O`6U3MJu0%4&e8bJMcJ0{O z&R%=H_U`9%-u8oCyW73|+GR;E%l7=9d+zyte&2iUxnDaPA%8?Ip2M+tP!-Y|ZYA$m zP2HNhSbopyqFTeh7&%QU!l9i3Oi+lO+k!N@8%IC$h*|GD~Cua}6^FAJ0 zHf-U>#^O(J--bW|;bjn5( zUplnj$R1tyWYP>Pp8KWew%&EeT0AsmSXY;GyG_l6gIU&kQ?uT8SFE@}Mo5-rhS4U; z=kqR?%i)-<1wukT?{8?RudBo8rVV(jSw7zAdF%DP2TCu0e8Z-1zW-6<|LgMb1CKlg zg{$$K8h_3fz~o|E!=cgGn8Ax6G8AmqN^bDtnJ}BU!KiWEXbhG&Gq1(J_HaYN#Q4=h zp{|sG;)xUtMK+b`D#`023=uTQoK=0Tc|B z%>oyLifiO)gMxvE6%Mw{yDM$`@ZS;{Q8cX>>H#)QDIUAHumJ$p z)BWcHem}+)1mV)q?~){A&%mYMZoY9P9%2I!lf0bHBATY14w`Y$4hKy;DDBb_1?2E! zeSZU~PI>sKEyIFF~V_XrLEA>%2T&r@y}?O|zv#HVx&yXqR>Ys=`G*vX6> zPs=Rh2-KT(J4Xc*xeUc+q40D01 z{>cn-vsRuhP1Gk(3ABy~S4C^Y1n|&SOMm9V7 z^e8$hi4x7tw6L-<2A%V)#$cAJg;fJr*{2d(P&IG~p(<&rgsXHc5=WJANuVk@s(}lI cOR9GN12hdxeBWITNdN!<07*qoM6N<$f|d(_TmS$7 diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png index 6dd14b25031252f01fc68d6fa7fa8db64be7856e..513fc15ae87d8907723f7cc9c296c70fb1b1da02 100644 GIT binary patch delta 2119 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 delta 1228 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 Q!~g&Q07*qoM6N<$f+GW0`v3p{ delta 2519 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 K@yuhFZv8*5cB-fV diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png index a1ea13fb2f75e9345cc7ac2238a6597db76e7f73..cd793796cd1bce0dd46be1c4975613e1d6d0690f 100644 GIT binary patch delta 962 zcmV;z13mo42ek;0fq$P#L_t(o3GG&ENEA^Nc6N5xU0qFA#r2hMOsxpmYxugDrMke)Yh?>}z!csz7Fs#J9+j#il~Lxm3w*yr=Lv_E~`+0BF5TUL7EY@J4< z;qfJwAprkabTr<+JNW5~sJX)Yyc<_88DnEacZE!)z+)4WR~zqOxJ_t+YMsU2yi&!t%gPPugB~_efje?H)2$ zo;rDq$K)+#`~v9+y`HBdyVUD-vNCE}iS648rlw~mr)F|;veYQb%FlmaAPA2sF@fa( zF+4h+k)BqVzlF;br=gE!2b^(fg?VUrlq>nHqw_&?D}R^ca4dn?hyDRBGZ-zOYVbED z$po`ivZO)4f?+Tx`-Op!9*Te&TNW#AS7KPKIP4~y5+!8VEk(cvLu8b}VD;N&HH8F* z;qh@styU}C5^@v)gIaP@B9lp>36^8QaD{mW73IJt*@)pRz(3XxX(AM0+y*5oVGca| zBN4+p2!FjR1&rfK$|?(t$X_4~5|cwnW}Gor6dQbUy9r*zPB*pWrj}ihCxq7WPmH>9 zV1FxP_|^jPTgi&~d+ApbyFHZMK@wgBMG>7Afx&ZE{*ho5UibDjHMgnhv3hHIy*@Z{ zjb_z#pO5r-J(tg)DcQZ#;UwoAlt!)6pnN5g-Pr*a8))gNHFF zDyS<3&dN+LF4_U{LX^zk78g4q-e{kv>n=4d!?s8n^eSO)x$;0OO*O0bsHJ^+W|mzt zM1AdX@Cg+2otFAi8{@DQP&1(&) z|D9fRLP1HLD{BOZkRt}2+L|K=_E(IKPi%^g&dYXJsx z@Iwh75CMbJthp%>9q(*kF;`xy9@xUZ3Ol*D0+0e1Q#MkkReE+xD*Zcw kMFD~_{|{iLtwd+xCw4xi!fFL3`~Uy|07*qoM6N<$f^zn}YXATM delta 850 zcmV-Y1FihE2*wAHfqyVbL_t(o3GG*1Xwy&>Zqg?0+^VddtnKC=+*W+`%|}6e5%F1k z5S$<~5D^g-K@kUoq0`~O`6hGX{Cf};2TpW#=#V*_BIuZ~b!*eP?x(h0leWqAgsdUU zPn#R2d$4&3=YHqsyXV|d^3q>)p3iLFeNOXD(b${7$Oy;!6zTvCm)HI&SD5O?W19 z{$g7ulPON7)PI^Sb!d2`{c0DN%_^N$@{VBBl}qQm)zvCocWE}`JAM7dSt0uOiOIJ^ z!@4wD(4mENkzn(7mSY_bO4jmxo+RxAK}ZNf0!fm-+FIG5gaBt|@;TaiN@;nm>(-Bn zNf{Y>_r9Y*U|LmKnM~?m$PtEtZ7Gw><J6iEz{pti6gRFM&z8wMHeG6$+$uvLI_N6<~!hPzIXPKYN|MSm3qb c^8XS40U{TbGEul-2LJ#707*qoM6N<$f(R?81!+5VpPbv38uZ)UkUIN?U$VS}27|{Q?gEN91f@z#6dHm`qlzL>K}h)lKM)92Rk$Qh6$GV$P*Fss3UOI!oY?V| zICkv48GDt@W_P{E+a*>cM^^OS%)FWJeLHX7?Akewvn{kg$A3ZtT*O-iJzr0)%5;@! z6$Yy5p+b(Osw&f#(y8LC%Jd95UwnPywjKAk-+6EUJMaA;y^Y;krwqfq)&K7Ck3O5h zZ`-_S*aPdNMQBbMWx5znzu9YPoRv%iW#9=72Vt%T;YJt9N+tF$L38} zA*2cl==&b&7>S?|EJwe3)kSZ=epoJ7m!MqZK$5ys{aP>X)o(0VqJS0_S8A{bA#f-Z z%;lyt*(|K}xZQTUUG9XWD5!>@m8(EfC=i^Dg8~94Qqe#|2)zfw-*`N+rENR>&i(PH z;_~j^zJDFNb}Opj9B;e%4p^Jb`Y6fhGL4 zVyJ+SB$-U5T`pH+L%qtz)K%y?4R!j0#ZBPd5a?*>eGJN_;ytR4RnVe?1{X6`&p@d* zUpgSJNzi=NGf+UrO4Y{9DFo0c4U_PgOfao>9WpFeAUT4vku=9ZV^u0nLWP3v%mUDc za(`N-NV6O_HO-}ST%P1G2jskc5mwB6c@Jq0bg8j~1_(YZ>3nONsdsa(L#Xr-G-(g1Ez9c z49m)edL;00z>J`{Ghxc(GKLryno18n_{!NpeF(>yP?OW+)RhuqKc+yp-LSPeums$B zJZ^?z3wgEAAZu1%{P(|MKK9jDZWu{1xEn)23?5A7G>?G)e{A5B;o*o_A|88v_z4 z7V6_uiI#w;2FC`^Wp-|zQyB#hrVgUu1qSVHt?;%hmIz~Lt#;nMU6{i4;l!Zm&8Bj; zz-03bZ;+X$^CVP2Hl3w~C6a+KWP1e==H*UE6p1W=rBZe}^vc>yZKSa5um7u{pF#W`% z55P|ziI)^8PX0mN?Q|qF6mO6#urMvRoR?b+T0IzOfoW)lBxdVY*1Rz=;(zlbNt%sK zke4jO!!fn$X<5mW;3zj8O)~^#mtWfHDe7!E2WbNv@OdzpMv}zZmKsGr^9?$ZVra$= zSGOV>okCNKb;b~zK}RpN^J2N7@qB{@aMFx6gtuf|0niJQY2(aFS5$y$DFoy5`34OM dZ9b>}18mESw<4R!L;wH)00>D%PDHLkV1hqmw)p@6 delta 1298 zcmV+t1?~F%3xNxefPVz*NklTWs586vyK@X_`x$Cf%B(K-Drd0TN;i2E3pl z_JBYjgeHMhX`00LGLQxjY+PEYQ^#PMG=#Q?ApsA4-~|Z@iE%9g@iIC(U~0E@*R*3x z(sXN_i*vD?*qq|-n-^d5+5T#^Qv6UIpYQlPKmUDvzRyZ2QGXO2tL<>EHsD3xCbV5o zt*LZVX&nWc<)I@E(V?c&MCH_(tf{n)I7Ek5rP3~<5-d%2{D;wtm#(0i^VWo4qe0uIis3Ukik!)@C%%dywdLuj2yzoEk7B9x&ftC}F|ZyyeDu##|ExG@p63VleRMfKtx8s_ z)rJlnIy-eib<~8DfYQJ;eDLFmGv{>Da~%KP(1Gche|2K;hX_C)K632D*m%Q~EL+?= zI1I05!^nmKR-r%reB{T`-x{Wo0_HQ!o`GR_Uoqpg!hg(nk8-(u94;zZWL4=ZyuVaY57EkY>R8V`4zFfz3s`zABBbh zhTH9~gU)1_K)~P9(o*MVm~3Y_blT)tE)<79j|Y8mh})~@MnQ7riK_?jSc3yy`FCnoIE>)PIU~Y z(|1VOwuFI0F(M}P)iol8`Q2$Tn!_r%FlnM?+qBIDk^ zUirtBAd2S`HF&AQZ6-e>2q=x}HA%6rz zlhZ7>AU@FJ`|jlYE1MTLVLAs%rBRxWV6d;Zr;fN-SzJ31F$8DXYCKhuu1Yif^_$#6 zRh*b+(L7qlvOudQ%N9k?Esa$J@SQe6!%_mvo?K>pL}jE+&|DQ#!=~bnSI|W}sx?7k zf=!YOZw-fdo1mdsX+^5uh&OSQAAg(5PsG{r3k7%!m7=P8NG>j_2_)zLg5DuB_yb;g z*NfeMoXhi7;nmGu>tfy#SKG9{@upx|TAq?V!wMPJ(dJdCtqjHRkeQ`nBC`LIW)pP7 zyD}7D7qs-rWC%?=*e+;o0uv*4LDzQ<6R5W@u?zZkMgrD<-E>!O{(}I-01E&B07*qo IM6N<$f^Fq<>i_@% diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png index fee0efbb62d67f05ba7b50ac1fd5804c5901999a..224788d338fb3ea74016346f343bcdde4a372496 100644 GIT binary patch delta 491 zcmVS^Sk#S@=I$n^2=Vod5g8%PS=%p{b#!rlNH9`pwT@z5va7{^I3>M^AWpdC)YYI~yo1 zB_aOe#Y<#$FJ8Wqk`zZ4fv~Y@mXvt@@)fdDAXiFK0$Bu)W^tf9k(Iu90oDBH@Bc49 z{=fh7|Ly00K!1epXP_Pq4vrf)Z%>;w|KsP+e}4ZtcmC4#o3{geJU)H@|Mdq0FdH#4 zGJqfh0~XDnK7IcB_1n1%mmroue*E;?_wTPh{^I)kpPdcGn^+PFL{CF&_wBp)f$ShZ zFJEu(H=h~4{P+vZzAr!g669eK6JP^M;nWNa;T3B(2xJKgM1%zV{KNYBC&QbMzkz002ovPDHLkV1k1y^OFDo delta 413 zcmV;O0b>5*1e64jfq#BUL_t(I5o7%S|33q{fQejV^XoTnKY#v$$6q*|{p$6b zoqP6g*s}fS&!4#TvtX6@`0-O|RpaBQ&w#SmuHR~@uV7|o##D*L=Jy{y6jwDsbOJS; zJaew8z4ytcb23m`E_eiZvU6 zg2zsre)IMnkg;INN=!9C5iHII8jlu8%*@!8VHZVq9?%9JZf;}|I2((ffpYBZ>~Iyp z*p?6%19JcV`~UMd!>>P}kN{%_?3y1ve&Xa64A)cEUEl|MLIGAE16DO)#?w$1_YN78V)+2R+MYj~#(y00000NkvXX Hu0mjf!eG@z diff --git a/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png b/PYLayoutDemo/PYLayoutDemo/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png index a1ea13fb2f75e9345cc7ac2238a6597db76e7f73..cd793796cd1bce0dd46be1c4975613e1d6d0690f 100644 GIT binary patch delta 962 zcmV;z13mo42ek;0fq$P#L_t(o3GG&ENEA^Nc6N5xU0qFA#r2hMOsxpmYxugDrMke)Yh?>}z!csz7Fs#J9+j#il~Lxm3w*yr=Lv_E~`+0BF5TUL7EY@J4< z;qfJwAprkabTr<+JNW5~sJX)Yyc<_88DnEacZE!)z+)4WR~zqOxJ_t+YMsU2yi&!t%gPPugB~_efje?H)2$ zo;rDq$K)+#`~v9+y`HBdyVUD-vNCE}iS648rlw~mr)F|;veYQb%FlmaAPA2sF@fa( zF+4h+k)BqVzlF;br=gE!2b^(fg?VUrlq>nHqw_&?D}R^ca4dn?hyDRBGZ-zOYVbED z$po`ivZO)4f?+Tx`-Op!9*Te&TNW#AS7KPKIP4~y5+!8VEk(cvLu8b}VD;N&HH8F* z;qh@styU}C5^@v)gIaP@B9lp>36^8QaD{mW73IJt*@)pRz(3XxX(AM0+y*5oVGca| zBN4+p2!FjR1&rfK$|?(t$X_4~5|cwnW}Gor6dQbUy9r*zPB*pWrj}ihCxq7WPmH>9 zV1FxP_|^jPTgi&~d+ApbyFHZMK@wgBMG>7Afx&ZE{*ho5UibDjHMgnhv3hHIy*@Z{ zjb_z#pO5r-J(tg)DcQZ#;UwoAlt!)6pnN5g-Pr*a8))gNHFF zDyS<3&dN+LF4_U{LX^zk78g4q-e{kv>n=4d!?s8n^eSO)x$;0OO*O0bsHJ^+W|mzt zM1AdX@Cg+2otFAi8{@DQP&1(&) z|D9fRLP1HLD{BOZkRt}2+L|K=_E(IKPi%^g&dYXJsx z@Iwh75CMbJthp%>9q(*kF;`xy9@xUZ3Ol*D0+0e1Q#MkkReE+xD*Zcw kMFD~_{|{iLtwd+xCw4xi!fFL3`~Uy|07*qoM6N<$f^zn}YXATM delta 850 zcmV-Y1FihE2*wAHfqyVbL_t(o3GG*1Xwy&>Zqg?0+^VddtnKC=+*W+`%|}6e5%F1k z5S$<~5D^g-K@kUoq0`~O`6hGX{Cf};2TpW#=#V*_BIuZ~b!*eP?x(h0leWqAgsdUU zPn#R2d$4&3=YHqsyXV|d^3q>)p3iLFeNOXD(b${7$Oy;!6zTvCm)HI&SD5O?W19 z{$g7ulPON7)PI^Sb!d2`{c0DN%_^N$@{VBBl}qQm)zvCocWE}`JAM7dSt0uOiOIJ^ z!@4wD(4mENkzn(7mSY_bO4jmxo+RxAK}ZNf0!fm-+FIG5gaBt|@;TaiN@;nm>(-Bn zNf{Y>_r9Y*U|LmKnM~?m$PtEtZ7Gw><J6iEz{pti6gRFM&z8wMHeG6$+$uvLI_N6<~!hPzIXPKYN|MSm3qb c^8XS40U{TbGEul-2LJ#707*qoM6N<$f(R?8 Date: Wed, 18 May 2022 10:38:25 -0500 Subject: [PATCH 20/27] fix: show all stories indicators --- Sources/PYLayout/Views/Complex/Story/PYStoryView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/PYLayout/Views/Complex/Story/PYStoryView.swift b/Sources/PYLayout/Views/Complex/Story/PYStoryView.swift index aaf84d2..b5e97ae 100644 --- a/Sources/PYLayout/Views/Complex/Story/PYStoryView.swift +++ b/Sources/PYLayout/Views/Complex/Story/PYStoryView.swift @@ -20,7 +20,7 @@ public struct PYStoryView: View { var indicators: some View { HStack(spacing: 3) { ForEach(stories.indices) { index in - Color.white.opacity(index == currentIndex ? 0.8 : 0.3) + Color.white.opacity(index <= currentIndex ? 0.8 : 0.3) .cornerRadius(1) } }.frame(height: 5) From b56d5970a3f6ca56256cba799dd4b89508a7a5f1 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Wed, 18 May 2022 11:37:14 -0500 Subject: [PATCH 21/27] feat: add margins to factory view --- .../Examples/FactoryExample.swift | 11 +++++- .../PYLayout/Factories/PYViewFactory.swift | 35 ++++++++++++++----- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift index a4dd481..4bff504 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift @@ -18,6 +18,9 @@ struct FactoryExample: View { params: [ "text": "Próceres", "fontSize": 22, + "margin": [ + "bottom": 5.0 + ] ] ) PYViewFactory.buildView( @@ -25,12 +28,18 @@ struct FactoryExample: View { params: [ "text": "Algunos de los personajes ilustres de Popayán", "fontSize": 14, - "textColor": "#636363" + "textColor": "#636363", + "margin": [ + "bottom": 20.0 + ] ] ) PYViewFactory.buildView( ofLayout: "cc", params: [ + "margin": [ + "bottom": 20.0 + ], "elements": [ [ "title": "Francisco José de Caldas", diff --git a/Sources/PYLayout/Factories/PYViewFactory.swift b/Sources/PYLayout/Factories/PYViewFactory.swift index c44d75b..1674a5b 100644 --- a/Sources/PYLayout/Factories/PYViewFactory.swift +++ b/Sources/PYLayout/Factories/PYViewFactory.swift @@ -10,17 +10,34 @@ import SwiftUI public final class PYViewFactory { public static func buildView(ofLayout layout: String, params: [String: Any]?) -> some View { + var topMargin: Double = .zero + var bottomMargin: Double = .zero + var leftMargin: Double = .zero + var rightMargin: Double = .zero + if let margin = params?["margin"] as? [String: Double] { + topMargin = margin["top"] ?? .zero + bottomMargin = margin["bottom"] ?? .zero + leftMargin = margin["left"] ?? .zero + rightMargin = margin["right"] ?? .zero + } return Group { - switch layout { - case PYTextView.identifier: - PYTextViewFactory.buildView(params: params) - case PYButtonView.identifier: - PYButtonViewFactory.buildView(params: params) - case PYCollectionCardView.identifier: - PYCollectionCardViewFactory.buildView(params: params) - default: - EmptyView() + Group { + switch layout { + case PYTextView.identifier: + PYTextViewFactory.buildView(params: params) + case PYButtonView.identifier: + PYButtonViewFactory.buildView(params: params) + case PYCollectionCardView.identifier: + PYCollectionCardViewFactory.buildView(params: params) + default: + EmptyView() + } } + .padding(.top, topMargin) + .padding(.bottom, bottomMargin) + .padding(.leading, leftMargin) + .padding(.trailing, rightMargin) } + } } From f4fd1b312256bba1ba88dfc17841d163ef3dd498 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Wed, 18 May 2022 12:35:13 -0500 Subject: [PATCH 22/27] refactor: remove factories --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 4 - .../Examples/CollectionCardExample.swift | 2 +- .../Examples/FactoryExample.swift | 79 ------------------ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 5 -- .../Factories/PYButtonViewFactory.swift | 23 ----- .../PYCollectionCardViewFactory.swift | 34 -------- .../Factories/PYTextViewFactory.swift | 25 ------ .../PYLayout/Factories/PYViewFactory.swift | 43 ---------- .../PYCollectionCardData.swift | 4 +- .../PYCollectionCardHandler.swift | 14 ++++ .../PYCollectionCardView.swift | 83 +++++++++++-------- 11 files changed, 65 insertions(+), 251 deletions(-) delete mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift delete mode 100644 Sources/PYLayout/Factories/PYButtonViewFactory.swift delete mode 100644 Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift delete mode 100644 Sources/PYLayout/Factories/PYTextViewFactory.swift delete mode 100644 Sources/PYLayout/Factories/PYViewFactory.swift create mode 100644 Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardHandler.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index 7d7cf99..7bc0593 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -17,7 +17,6 @@ 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; - 2F9D46732833195600320831 /* FactoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9D46722833195600320831 /* FactoryExample.swift */; }; 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC004082831AC250037EF10 /* StoryExample.swift */; }; /* End PBXBuildFile section */ @@ -33,7 +32,6 @@ 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; - 2F9D46722833195600320831 /* FactoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FactoryExample.swift; sourceTree = ""; }; 2FC004082831AC250037EF10 /* StoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryExample.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -56,7 +54,6 @@ 2F1F7D7228318D9900AA30DB /* TextExample.swift */, 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, 2FC004082831AC250037EF10 /* StoryExample.swift */, - 2F9D46722833195600320831 /* FactoryExample.swift */, ); path = Examples; sourceTree = ""; @@ -179,7 +176,6 @@ 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */, 2F1F7D7128317E0700AA30DB /* CollectionCardExample.swift in Sources */, 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */, - 2F9D46732833195600320831 /* FactoryExample.swift in Sources */, 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */, diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift index 78567c9..c5425ad 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/CollectionCardExample.swift @@ -23,7 +23,7 @@ struct CollectionCardExample: View { } struct MockCard: PYCollectionCardData { - var id: String = "" + var deepLink: String = "" var backgroundImage: URL? var title: String = "Froilán Largacha Hurtado" diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift deleted file mode 100644 index 4bff504..0000000 --- a/PYLayoutDemo/PYLayoutDemo/Examples/FactoryExample.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// FactoryExample.swift -// PYLayoutDemo -// -// Created by Juan Hurtado on 16/05/22. -// - -import Foundation -import PYLayout -import SwiftUI - -struct FactoryExample: View { - var body: some View { - ScrollView { - VStack(spacing: 0) { - PYViewFactory.buildView( - ofLayout: "txt", - params: [ - "text": "Próceres", - "fontSize": 22, - "margin": [ - "bottom": 5.0 - ] - ] - ) - PYViewFactory.buildView( - ofLayout: "txt", - params: [ - "text": "Algunos de los personajes ilustres de Popayán", - "fontSize": 14, - "textColor": "#636363", - "margin": [ - "bottom": 20.0 - ] - ] - ) - PYViewFactory.buildView( - ofLayout: "cc", - params: [ - "margin": [ - "bottom": 20.0 - ], - "elements": [ - [ - "title": "Francisco José de Caldas", - "imageUrl": "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg" - ], - [ - "title": "Froilán Largacha Hurtado", - "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/a/ac/Froil%C3%A1n_Largacha_Hurtado.jpg" - ], - [ - "title": "Camilo Torres Tenorio", - "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/8/86/Camilo_Torres_y_Tenorio.jpg" - ], - ] - ] - ) - PYViewFactory.buildView( - ofLayout: "btn", - params: [ - "title": "Ver todos", - "fontSize": 14, - "deepLink": "payan://collection?typeId=123", - "handler": self, - "type": "quiet" - ] - ) - Spacer() - } - } - } -} - -extension FactoryExample: PYButtonHandler { - func onTap(deepLink: String?) { - print(deepLink ?? "Tap on button without deep link") - } -} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift index ce59166..5108c46 100644 --- a/PYLayoutDemo/PYLayoutDemo/MenuView.swift +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -29,11 +29,6 @@ struct MenuView: View { StoryExample() } } - Section(header: Text("Factory")) { - NavigationLink("List of views using factories") { - FactoryExample() - } - } } .navigationTitle("Payan Layout") } diff --git a/Sources/PYLayout/Factories/PYButtonViewFactory.swift b/Sources/PYLayout/Factories/PYButtonViewFactory.swift deleted file mode 100644 index 14500ad..0000000 --- a/Sources/PYLayout/Factories/PYButtonViewFactory.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// PYButtonViewFactory.swift -// -// -// Created by Juan Hurtado on 17/05/22. -// - -import Foundation -import SwiftUI - -final class PYButtonViewFactory { - static func buildView(params: [String: Any]? = nil) -> some View { - let title = params?["title"] as? String ?? "" - let deepLink = params?["deepLink"] as? String - let fontSize = params?["fontSize"] as? Int ?? 12 - let handler = params?["handler"] as? PYButtonHandler - var type: PYButtonType = .loud - if let typeString = params?["type"] as? String { - type = .init(rawValue: typeString) ?? .loud - } - return PYButtonView(title, fontSize: fontSize, type: type, deeplink: deepLink, handler: handler) - } -} diff --git a/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift b/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift deleted file mode 100644 index dc66669..0000000 --- a/Sources/PYLayout/Factories/PYCollectionCardViewFactory.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// PYCollectionCardViewFactory.swift -// -// -// Created by Juan Hurtado on 17/05/22. -// - -import Foundation -import SwiftUI - -class PYCollectionCardViewFactory { - static func buildView(params: [String: Any]?) -> some View { - var cards: [CollectionCardData] = [] - if let cardRawArray = params?["elements"] as? [[String: Any]] { - for rawCard in cardRawArray { - let title = rawCard["title"] as? String ?? "" - let imageUrl = rawCard["imageUrl"] as? String ?? "" - cards.append(CollectionCardData(title: title, imageUrl: imageUrl)) - } - } - return PYCollectionCardView(cards: cards) - } -} - -struct CollectionCardData: PYCollectionCardData { - var id: String = "12" - var backgroundImage: URL? - var title: String - - init(title: String, imageUrl: String) { - self.title = title - self.backgroundImage = URL(string: imageUrl) - } -} diff --git a/Sources/PYLayout/Factories/PYTextViewFactory.swift b/Sources/PYLayout/Factories/PYTextViewFactory.swift deleted file mode 100644 index 0c1f4b2..0000000 --- a/Sources/PYLayout/Factories/PYTextViewFactory.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// PYTextViewFactory.swift -// -// -// Created by Juan Hurtado on 16/05/22. -// - -import Foundation -import SwiftUI - -public final class PYTextViewFactory { - public static func buildView(params: [String: Any]?) -> some View { - let text = params?["text"] as? String ?? "" - let fontSize = params?["fontSize"] as? Int ?? 12 - var textColor: Color = .black - if let hexColor = params?["textColor"] as? String { - textColor = Color(hexColor) ?? .black - } - var weight: PYTextWeight = .regular - if let weightString = params?["weight"] as? String { - weight = PYTextWeight(rawValue: weightString) ?? .regular - } - return PYTextView(text, fontSize: fontSize, textColor: textColor, weight: weight) - } -} diff --git a/Sources/PYLayout/Factories/PYViewFactory.swift b/Sources/PYLayout/Factories/PYViewFactory.swift deleted file mode 100644 index 1674a5b..0000000 --- a/Sources/PYLayout/Factories/PYViewFactory.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// PYViewFactory.swift -// -// -// Created by Juan Hurtado on 16/05/22. -// - -import Foundation -import SwiftUI - -public final class PYViewFactory { - public static func buildView(ofLayout layout: String, params: [String: Any]?) -> some View { - var topMargin: Double = .zero - var bottomMargin: Double = .zero - var leftMargin: Double = .zero - var rightMargin: Double = .zero - if let margin = params?["margin"] as? [String: Double] { - topMargin = margin["top"] ?? .zero - bottomMargin = margin["bottom"] ?? .zero - leftMargin = margin["left"] ?? .zero - rightMargin = margin["right"] ?? .zero - } - return Group { - Group { - switch layout { - case PYTextView.identifier: - PYTextViewFactory.buildView(params: params) - case PYButtonView.identifier: - PYButtonViewFactory.buildView(params: params) - case PYCollectionCardView.identifier: - PYCollectionCardViewFactory.buildView(params: params) - default: - EmptyView() - } - } - .padding(.top, topMargin) - .padding(.bottom, bottomMargin) - .padding(.leading, leftMargin) - .padding(.trailing, rightMargin) - } - - } -} diff --git a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift index 2500c82..db600aa 100644 --- a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift +++ b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardData.swift @@ -9,8 +9,8 @@ import Foundation /// Defines the data that a collection card can show. public protocol PYCollectionCardData { - /// Card's identifier - var id: String { get } + /// Card's deep link + var deepLink: String { get } /// Card's backgrond image var backgroundImage: URL? { get } /// Card's title diff --git a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardHandler.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardHandler.swift new file mode 100644 index 0000000..49c9340 --- /dev/null +++ b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardHandler.swift @@ -0,0 +1,14 @@ +// +// PYCollectionCardHandler.swift +// +// +// Created by Juan Hurtado on 18/05/22. +// + +import Foundation + +/// Defines the `PYCollectionCardView` interaction logic +public protocol PYCollectionCardHandler { + /// It gets called when a user taps on a certain card. + func didSelectCard(_ card: PYCollectionCardData) +} diff --git a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift index f1f7531..bd0a435 100644 --- a/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift +++ b/Sources/PYLayout/Views/Complex/Collection Card/PYCollectionCardView.swift @@ -53,44 +53,57 @@ public struct PYCollectionCardView: View { } func card(at index: Int) -> some View { - ZStack(alignment: .center) { - KFImage.url(cards[index].backgroundImage) - .resizable() + Group { + if cards.isEmpty { + EmptyView() + + } else { + ZStack(alignment: .center) { + KFImage.url(cards[index].backgroundImage) + .resizable() + .frame(width: getSize(at: index).width, height: getSize(at: index).height) + .aspectRatio(contentMode: .fill) + LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.35)]), startPoint: .top, endPoint: .center) + VStack(alignment: .leading) { + Spacer() + HStack { + PYTextView(cards[index].title, fontSize: 12, textColor: .white, weight: .medium) + Spacer(minLength: 0) + } + }.padding() + Color.white.opacity(getShadowOpacity(forViewAt: index)) + } .frame(width: getSize(at: index).width, height: getSize(at: index).height) - .aspectRatio(contentMode: .fill) - LinearGradient(gradient: Gradient(colors: [.clear, .black.opacity(0.35)]), startPoint: .top, endPoint: .center) - VStack(alignment: .leading) { - Spacer() - HStack { - PYTextView(cards[index].title, fontSize: 12, textColor: .white, weight: .medium) - Spacer(minLength: 0) + .cornerRadius(5) + .opacity(index == cards.count - 1 ? dragOpacity : 1) + .offset(x: CGFloat(index == numberOfCards - 1 ? 0 : (numberOfCards - index) * 10) , y: 0) + .offset(x: index == numberOfCards - 1 ? dragOffset.width : .zero, y: .zero) + .onTapGesture { + if index == numberOfCards - 1 { + // user can only touch the top card! + + } } - }.padding() - Color.white.opacity(getShadowOpacity(forViewAt: index)) + .simultaneousGesture( + DragGesture(minimumDistance: 0, coordinateSpace: .global) + .onChanged({ value in + if value.translation.width < 0 && index == numberOfCards - 1 { + dragOffset = value.translation + dragOpacity = (-1/value.translation.width) * 20 + } else if value.translation.width >= 0 { + dragOpacity = 1 + } + }) + .onEnded({ value in + if dragOpacity < 0.4 { + next() + } + dragOpacity = 1 + dragOffset = .zero + }) + ) + } } - .frame(width: getSize(at: index).width, height: getSize(at: index).height) - .cornerRadius(5) - .opacity(index == cards.count - 1 ? dragOpacity : 1) - .offset(x: CGFloat(index == numberOfCards - 1 ? 0 : (numberOfCards - index) * 10) , y: 0) - .offset(x: index == numberOfCards - 1 ? dragOffset.width : .zero, y: .zero) - .gesture( - DragGesture(minimumDistance: 0, coordinateSpace: .global) - .onChanged({ value in - if value.translation.width < 0 && index == numberOfCards - 1 { - dragOffset = value.translation - dragOpacity = (-1/value.translation.width) * 20 - } else if value.translation.width >= 0 { - dragOpacity = 1 - } - }) - .onEnded({ value in - if dragOpacity < 0.4 { - next() - } - dragOpacity = 1 - dragOffset = .zero - }) - ) } public var body: some View { From a39acf38aa6b1b701893920d727f63c573d73c21 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Thu, 19 May 2022 21:50:53 -0500 Subject: [PATCH 23/27] feat: add grid text basic ui --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 4 +++ .../PYLayoutDemo/Examples/GridExample.swift | 33 +++++++++++++++++++ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 3 ++ .../Vertical Grid/PYVerticalGridView.swift | 30 +++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/GridExample.swift create mode 100644 Sources/PYLayout/Views/Complex/Vertical Grid/PYVerticalGridView.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index 7bc0593..c2ac6e9 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 2F9321BF282EE49E003DA929 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321BD282EE49E003DA929 /* LaunchScreen.storyboard */; }; 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; + 2FA986792837351B000DB409 /* GridExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA986782837351B000DB409 /* GridExample.swift */; }; 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC004082831AC250037EF10 /* StoryExample.swift */; }; /* End PBXBuildFile section */ @@ -32,6 +33,7 @@ 2F9321BE282EE49E003DA929 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; + 2FA986782837351B000DB409 /* GridExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridExample.swift; sourceTree = ""; }; 2FC004082831AC250037EF10 /* StoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryExample.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -54,6 +56,7 @@ 2F1F7D7228318D9900AA30DB /* TextExample.swift */, 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, 2FC004082831AC250037EF10 /* StoryExample.swift */, + 2FA986782837351B000DB409 /* GridExample.swift */, ); path = Examples; sourceTree = ""; @@ -179,6 +182,7 @@ 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */, + 2FA986792837351B000DB409 /* GridExample.swift in Sources */, 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/GridExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/GridExample.swift new file mode 100644 index 0000000..57a05ff --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/GridExample.swift @@ -0,0 +1,33 @@ +// +// GridExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 19/05/22. +// + +import Kingfisher +import Foundation +import SwiftUI +import PYLayout + +struct GridExample: View { + var body: some View { + Text("`PYVerticalGridView(...)`") + .padding() + PYVerticalGridView(columns: 2, spacing: 1) { + KFImage(URL(string: "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg")) + .resizable() + .frame(height: 200) + KFImage(URL(string: "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg")) + .resizable() + .frame(height: 200) + KFImage(URL(string: "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg")) + .resizable() + .frame(height: 200) + KFImage(URL(string: "https://www.biografiasyvidas.com/biografia/c/fotos/caldas_francisco_jose_2.jpg")) + .resizable() + .frame(height: 200) + } + Spacer() + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift index 5108c46..cd5d91b 100644 --- a/PYLayoutDemo/PYLayoutDemo/MenuView.swift +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -28,6 +28,9 @@ struct MenuView: View { NavigationLink("Story") { StoryExample() } + NavigationLink("Grid") { + GridExample() + } } } .navigationTitle("Payan Layout") diff --git a/Sources/PYLayout/Views/Complex/Vertical Grid/PYVerticalGridView.swift b/Sources/PYLayout/Views/Complex/Vertical Grid/PYVerticalGridView.swift new file mode 100644 index 0000000..a55e5f7 --- /dev/null +++ b/Sources/PYLayout/Views/Complex/Vertical Grid/PYVerticalGridView.swift @@ -0,0 +1,30 @@ +// +// PYVerticalGridView.swift +// +// +// Created by Juan Hurtado on 19/05/22. +// + +import Foundation +import SwiftUI + +public struct PYVerticalGridView: View { + private let gridItems: [GridItem] + + let content: Content + let columns: Int + let spacing: Double + + public init(columns: Int, spacing: Double = 10, @ViewBuilder _ content: () -> Content) { + self.content = content() + self.columns = columns + self.spacing = spacing + self.gridItems = [GridItem](repeating: GridItem(spacing: spacing), count: columns) + } + + public var body: some View { + LazyVGrid(columns: gridItems, spacing: spacing) { + content + } + } +} From bc855bccfc8737cc411d2f302b1567a87557a29e Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 20 May 2022 10:07:03 -0500 Subject: [PATCH 24/27] feat: add snackbar basic ui --- .../PYLayoutDemo.xcodeproj/project.pbxproj | 4 ++ .../Examples/SnackbarExample.swift | 29 +++++++++++++ PYLayoutDemo/PYLayoutDemo/MenuView.swift | 3 ++ .../Views/Basic/Snackbar/PYSnackbarView.swift | 42 +++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift create mode 100644 Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift diff --git a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj index c2ac6e9..56c1a45 100644 --- a/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj +++ b/PYLayoutDemo/PYLayoutDemo.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 2F9321C7282EE4C1003DA929 /* PYLayout in Resources */ = {isa = PBXBuildFile; fileRef = 2F9321C6282EE4C1003DA929 /* PYLayout */; }; 2F9321CA282EE4F2003DA929 /* PYLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 2F9321C9282EE4F2003DA929 /* PYLayout */; }; 2FA986792837351B000DB409 /* GridExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA986782837351B000DB409 /* GridExample.swift */; }; + 2FA9867B28373DD3000DB409 /* SnackbarExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA9867A28373DD3000DB409 /* SnackbarExample.swift */; }; 2FC004092831AC250037EF10 /* StoryExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC004082831AC250037EF10 /* StoryExample.swift */; }; /* End PBXBuildFile section */ @@ -34,6 +35,7 @@ 2F9321C0282EE49E003DA929 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2F9321C6282EE4C1003DA929 /* PYLayout */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = PYLayout; path = ..; sourceTree = ""; }; 2FA986782837351B000DB409 /* GridExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridExample.swift; sourceTree = ""; }; + 2FA9867A28373DD3000DB409 /* SnackbarExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnackbarExample.swift; sourceTree = ""; }; 2FC004082831AC250037EF10 /* StoryExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryExample.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -57,6 +59,7 @@ 2F1F7D7428318EEE00AA30DB /* ButtonExample.swift */, 2FC004082831AC250037EF10 /* StoryExample.swift */, 2FA986782837351B000DB409 /* GridExample.swift */, + 2FA9867A28373DD3000DB409 /* SnackbarExample.swift */, ); path = Examples; sourceTree = ""; @@ -181,6 +184,7 @@ 2F1F7D7328318D9900AA30DB /* TextExample.swift in Sources */, 2F9321B7282EE49E003DA929 /* MenuView.swift in Sources */, 2F9321B3282EE49E003DA929 /* AppDelegate.swift in Sources */, + 2FA9867B28373DD3000DB409 /* SnackbarExample.swift in Sources */, 2F1F7D7528318EEE00AA30DB /* ButtonExample.swift in Sources */, 2FA986792837351B000DB409 /* GridExample.swift in Sources */, 2F9321B5282EE49E003DA929 /* SceneDelegate.swift in Sources */, diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift new file mode 100644 index 0000000..f387fd3 --- /dev/null +++ b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift @@ -0,0 +1,29 @@ +// +// SnackbarExample.swift +// PYLayoutDemo +// +// Created by Juan Hurtado on 19/05/22. +// + +import Foundation +import SwiftUI +import PYLayout + +struct SnackBarExample: View { + @State var showSnackbar = false + + var body: some View { + PYButtonView(!showSnackbar ? "Mostrar snackbar" : "Ocultar snackbar", fontSize: 14) + .simultaneousGesture( + TapGesture(count: 1) + .onEnded { + showSnackbar = !showSnackbar + } + ) + Spacer() + PYSnackbarView( + title: "Hay una actualización disponible", + isVisible: $showSnackbar + ) + } +} diff --git a/PYLayoutDemo/PYLayoutDemo/MenuView.swift b/PYLayoutDemo/PYLayoutDemo/MenuView.swift index cd5d91b..422f902 100644 --- a/PYLayoutDemo/PYLayoutDemo/MenuView.swift +++ b/PYLayoutDemo/PYLayoutDemo/MenuView.swift @@ -20,6 +20,9 @@ struct MenuView: View { NavigationLink("Button") { ButtonExample() } + NavigationLink("Snackbar") { + SnackBarExample() + } } Section(header: Text("Complex")) { NavigationLink("Collection card") { diff --git a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift new file mode 100644 index 0000000..3de2884 --- /dev/null +++ b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift @@ -0,0 +1,42 @@ +// +// PYSnackbarView.swift +// +// +// Created by Juan Hurtado on 19/05/22. +// + +import Foundation +import SwiftUI + +public struct PYSnackbarView: View { + @State var yOffset: CGFloat = 100 + @State var opacity: Double = 0 + + let title: String + @Binding var isVisible: Bool + + public init(title: String, isVisible: Binding) { + self.title = title + self._isVisible = isVisible + } + + public var body: some View { + HStack { + PYTextView(title, fontSize: 14, textColor: .white) + Spacer() + } + .lineLimit(2) + .padding() + .frame(width: UIScreen.main.bounds.width - 40) + .background(Color.blue) + .cornerRadius(5) + .onChange(of: isVisible, perform: { isPresented in + withAnimation(.spring()) { + yOffset = isPresented ? 0 : 100 + opacity = isPresented ? 1 : 0 + } + }) + .opacity(opacity) + .offset(x: 0, y: yOffset) + } +} From 119142256a530c612672f18041c9cc4fbc6f8d95 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 20 May 2022 10:14:27 -0500 Subject: [PATCH 25/27] refactor: add on tap func to button view --- .../PYLayoutDemo/Examples/SnackbarExample.swift | 10 +++------- .../Views/Basic/Button/PYButtonHandler.swift | 13 ------------- .../PYLayout/Views/Basic/Button/PYButtonView.swift | 10 ++++------ 3 files changed, 7 insertions(+), 26 deletions(-) delete mode 100644 Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift index f387fd3..27ae37f 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift @@ -13,13 +13,9 @@ struct SnackBarExample: View { @State var showSnackbar = false var body: some View { - PYButtonView(!showSnackbar ? "Mostrar snackbar" : "Ocultar snackbar", fontSize: 14) - .simultaneousGesture( - TapGesture(count: 1) - .onEnded { - showSnackbar = !showSnackbar - } - ) + PYButtonView(!showSnackbar ? "Mostrar snackbar" : "Ocultar snackbar", fontSize: 14) { + showSnackbar = !showSnackbar + } Spacer() PYSnackbarView( title: "Hay una actualización disponible", diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift deleted file mode 100644 index 300ecab..0000000 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonHandler.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// PYButtonHandler.swift -// -// -// Created by Juan Hurtado on 17/05/22. -// - -import Foundation - -public protocol PYButtonHandler { - /// It gets called when a user taps on a button. - func onTap(deepLink: String?) -} diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift index 270c165..863fea4 100644 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift @@ -15,15 +15,13 @@ public struct PYButtonView: View { let title: String let fontSize: Int let type: PYButtonType - let deepLink: String? - let handler: PYButtonHandler? + let onTap: (() -> Void)? - public init(_ title: String, fontSize: Int = 12, type: PYButtonType = .loud, deeplink: String? = nil, handler: PYButtonHandler? = nil) { + public init(_ title: String, fontSize: Int = 12, type: PYButtonType = .loud, onTap: (() -> Void)? = nil) { self.title = title self.fontSize = fontSize self.type = type - self.deepLink = deeplink - self.handler = handler + self.onTap = onTap } private func getTextColor() -> Color { @@ -56,7 +54,7 @@ public struct PYButtonView: View { public var body: some View { PYTextView(title, fontSize: fontSize, textColor: getTextColor(), weight: .medium) .onTapGesture { - handler?.onTap(deepLink: deepLink) + onTap?() } .simultaneousGesture( DragGesture(minimumDistance: 0) From ae8646a7256ab01dc1bdda531c448fd724ed38e8 Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 20 May 2022 10:32:26 -0500 Subject: [PATCH 26/27] feat: add snackbar button --- .../PYLayoutDemo/Examples/SnackbarExample.swift | 5 ++++- .../PYLayout/Views/Basic/Button/PYButtonType.swift | 6 +++--- .../PYLayout/Views/Basic/Button/PYButtonView.swift | 6 ++++++ .../Views/Basic/Snackbar/PYSnackbarView.swift | 11 ++++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift index 27ae37f..1c876ef 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift @@ -13,13 +13,16 @@ struct SnackBarExample: View { @State var showSnackbar = false var body: some View { + Text("`PYSnackbarView(title: ...)`") + .padding() PYButtonView(!showSnackbar ? "Mostrar snackbar" : "Ocultar snackbar", fontSize: 14) { showSnackbar = !showSnackbar } Spacer() PYSnackbarView( title: "Hay una actualización disponible", - isVisible: $showSnackbar + isVisible: $showSnackbar, + buttonTitle: "ACTUALIZAR" ) } } diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift index 18b4795..4d68dfe 100644 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonType.swift @@ -6,8 +6,8 @@ // import Foundation +import SwiftUI -public enum PYButtonType: String { - case loud = "loud" - case quiet = "quiet" +public enum PYButtonType { + case loud, quiet, custom(Color, Color, Color) // 0: background, 1: on pressed, 2: text color } diff --git a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift index 863fea4..cf1c055 100644 --- a/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift +++ b/Sources/PYLayout/Views/Basic/Button/PYButtonView.swift @@ -30,6 +30,8 @@ public struct PYButtonView: View { return .white case .quiet: return .init(.sRGB, red: 89/255, green: 136/255, blue: 219/255, opacity: 1) + case .custom(_, _, let textColor): + return textColor } } @@ -39,6 +41,8 @@ public struct PYButtonView: View { return .init(.sRGB, red: 100/255, green: 145/255, blue: 223/255, opacity: 1) case .quiet: return .init(.sRGB, red: 232/255, green: 240/255, blue: 255/255, opacity: 1) + case .custom(let backgroundColor, _, _): + return backgroundColor } } @@ -48,6 +52,8 @@ public struct PYButtonView: View { return .init(.sRGB, red: 89/255, green: 136/255, blue: 219/255, opacity: 1) case .quiet: return .init(.sRGB, red: 167/255, green: 195/255, blue: 246/255, opacity: 1) + case .custom(_, let onPressedColor, _): + return onPressedColor } } diff --git a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift index 3de2884..e4d65ef 100644 --- a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift +++ b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift @@ -14,16 +14,25 @@ public struct PYSnackbarView: View { let title: String @Binding var isVisible: Bool + let buttonTitle: String? + let buttonOnTap: (() -> Void)? - public init(title: String, isVisible: Binding) { + public init(title: String, isVisible: Binding, buttonTitle: String? = nil, buttonOnTap: (() -> Void)? = nil) { self.title = title self._isVisible = isVisible + self.buttonTitle = buttonTitle + self.buttonOnTap = buttonOnTap } public var body: some View { HStack { PYTextView(title, fontSize: 14, textColor: .white) Spacer() + if let buttonTitle = buttonTitle { + PYButtonView(buttonTitle, fontSize: 14, type: .custom(.clear, .clear, .white)) { + buttonOnTap?() + } + } } .lineLimit(2) .padding() From 898912bf9f293567f427cb0ecb6703eccdcd069b Mon Sep 17 00:00:00 2001 From: Juan David Hurtado Date: Fri, 20 May 2022 10:39:35 -0500 Subject: [PATCH 27/27] feat: add snackbar type --- .../PYLayoutDemo/Examples/SnackbarExample.swift | 1 + .../Views/Basic/Snackbar/PYSnackbarType.swift | 12 ++++++++++++ .../Views/Basic/Snackbar/PYSnackbarView.swift | 15 +++++++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarType.swift diff --git a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift index 1c876ef..746f04a 100644 --- a/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift +++ b/PYLayoutDemo/PYLayoutDemo/Examples/SnackbarExample.swift @@ -21,6 +21,7 @@ struct SnackBarExample: View { Spacer() PYSnackbarView( title: "Hay una actualización disponible", + type: .alert, isVisible: $showSnackbar, buttonTitle: "ACTUALIZAR" ) diff --git a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarType.swift b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarType.swift new file mode 100644 index 0000000..32622c8 --- /dev/null +++ b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarType.swift @@ -0,0 +1,12 @@ +// +// PYSnackbarType.swift +// +// +// Created by Juan Hurtado on 20/05/22. +// + +import Foundation + +public enum PYSnackbarType { + case info, alert +} diff --git a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift index e4d65ef..9ac63f3 100644 --- a/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift +++ b/Sources/PYLayout/Views/Basic/Snackbar/PYSnackbarView.swift @@ -13,17 +13,28 @@ public struct PYSnackbarView: View { @State var opacity: Double = 0 let title: String + let type: PYSnackbarType @Binding var isVisible: Bool let buttonTitle: String? let buttonOnTap: (() -> Void)? - public init(title: String, isVisible: Binding, buttonTitle: String? = nil, buttonOnTap: (() -> Void)? = nil) { + public init(title: String, type: PYSnackbarType = .info, isVisible: Binding, buttonTitle: String? = nil, buttonOnTap: (() -> Void)? = nil) { self.title = title + self.type = type self._isVisible = isVisible self.buttonTitle = buttonTitle self.buttonOnTap = buttonOnTap } + private func getBackgroundColor() -> Color { + switch type { + case .info: + return .gray + case .alert: + return .blue + } + } + public var body: some View { HStack { PYTextView(title, fontSize: 14, textColor: .white) @@ -37,7 +48,7 @@ public struct PYSnackbarView: View { .lineLimit(2) .padding() .frame(width: UIScreen.main.bounds.width - 40) - .background(Color.blue) + .background(getBackgroundColor()) .cornerRadius(5) .onChange(of: isVisible, perform: { isPresented in withAnimation(.spring()) {