diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+SPM.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+SPM.swift index 62fa6d7..66a888c 100644 --- a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+SPM.swift +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+SPM.swift @@ -17,4 +17,5 @@ public extension TargetDependency.SPM { static let KeychainSwift = TargetDependency.external(name: "KeychainSwift") static let ReactorKit = TargetDependency.external(name: "ReactorKit") static let RxGesture = TargetDependency.external(name: "RxGesture") + static let TextFieldEffets = TargetDependency.external(name: "TextFieldEffects") } diff --git a/Projects/App/Sources/AppDelegate.swift b/Projects/App/Sources/AppDelegate.swift index 91c7ef6..b28704c 100644 --- a/Projects/App/Sources/AppDelegate.swift +++ b/Projects/App/Sources/AppDelegate.swift @@ -19,7 +19,8 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { assembler = Assembler([ - KeychainAssembly() + KeychainAssembly(), + PresentationAssembly() ], container: AppDelegate.container) return true } diff --git a/Projects/Core/Sources/Steps/AppStep.swift b/Projects/Core/Sources/Steps/AppStep.swift index 31a725d..80655af 100644 --- a/Projects/Core/Sources/Steps/AppStep.swift +++ b/Projects/Core/Sources/Steps/AppStep.swift @@ -2,4 +2,6 @@ import RxFlow public enum AppStep: Step { case onboardingIsRequired + case oauthLoginIsRequired + case tabIsRequired } diff --git a/Projects/Core/Sources/Steps/OauthLoginStep.swift b/Projects/Core/Sources/Steps/OauthLoginStep.swift new file mode 100644 index 0000000..78f399d --- /dev/null +++ b/Projects/Core/Sources/Steps/OauthLoginStep.swift @@ -0,0 +1,8 @@ +import RxFlow + +public enum OauthLoginStep: Step { + case oauthLoginIsRequired + case emailLoginisRequired + case emailSignupIsRequired + case tabIsRequired +} diff --git a/Projects/Core/Sources/Steps/OnboardingStep.swift b/Projects/Core/Sources/Steps/OnboardingStep.swift new file mode 100644 index 0000000..2a67297 --- /dev/null +++ b/Projects/Core/Sources/Steps/OnboardingStep.swift @@ -0,0 +1,7 @@ +import RxFlow + +public enum OnboardingStep: Step { + case oauthLoginIsRequired + case tabIsRequired + case onboardingIsRequired +} diff --git a/Projects/Core/Sources/Steps/Singup/AgeSignupStep.swift b/Projects/Core/Sources/Steps/Singup/AgeSignupStep.swift new file mode 100644 index 0000000..5389f2a --- /dev/null +++ b/Projects/Core/Sources/Steps/Singup/AgeSignupStep.swift @@ -0,0 +1,7 @@ +import RxFlow + +public enum AgeSignupStep: Step { + case ageSignupIsRequired + case oauthLoginIsRequired + case proFilSignupIsRequired +} diff --git a/Projects/Core/Sources/Steps/Singup/EmailSignupStep.swift b/Projects/Core/Sources/Steps/Singup/EmailSignupStep.swift new file mode 100644 index 0000000..402ba69 --- /dev/null +++ b/Projects/Core/Sources/Steps/Singup/EmailSignupStep.swift @@ -0,0 +1,7 @@ +import RxFlow + +public enum EmailSignupStep: Step { + case emailSignupIsRequired + case oauthLoginIsRequired + case passwordSignupIsrequired +} diff --git a/Projects/Core/Sources/Steps/Singup/NickNameSignupStep.swift b/Projects/Core/Sources/Steps/Singup/NickNameSignupStep.swift new file mode 100644 index 0000000..586d708 --- /dev/null +++ b/Projects/Core/Sources/Steps/Singup/NickNameSignupStep.swift @@ -0,0 +1,7 @@ +import RxFlow + +public enum NickNameSignupStep: Step { + case ageSignupIsRequired + case oauthLoginIsRequired + case nickNameSignupIsRequired +} diff --git a/Projects/Core/Sources/Steps/Singup/PasswordSignupStep.swift b/Projects/Core/Sources/Steps/Singup/PasswordSignupStep.swift new file mode 100644 index 0000000..2d75c63 --- /dev/null +++ b/Projects/Core/Sources/Steps/Singup/PasswordSignupStep.swift @@ -0,0 +1,7 @@ +import RxFlow + +public enum PasswordSignupStep: Step { + case oauthLoginIsRequired + case passwordSignupIsrequired + case nickNameSignupIsRequired +} diff --git a/Projects/Core/Sources/Steps/Singup/ProFilSignupStep.swift b/Projects/Core/Sources/Steps/Singup/ProFilSignupStep.swift new file mode 100644 index 0000000..b82e37a --- /dev/null +++ b/Projects/Core/Sources/Steps/Singup/ProFilSignupStep.swift @@ -0,0 +1,6 @@ +import RxFlow + +public enum ProFilSignupStep: Step { + case oauthLoginIsRequired + case proFilSignupIsRequired +} diff --git a/Projects/Flow/Sources/AgeSignupFlow.swift b/Projects/Flow/Sources/AgeSignupFlow.swift new file mode 100644 index 0000000..f9f8cd0 --- /dev/null +++ b/Projects/Flow/Sources/AgeSignupFlow.swift @@ -0,0 +1,58 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class AgeSignupFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: AgeSignupViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(AgeSignupViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? AgeSignupStep else { return .none } + + switch step { + case .ageSignupIsRequired: + return navigationToAgeSignup() + case .proFilSignupIsRequired: + return navigationToProFilSignup() + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: NickNameSignupStep.oauthLoginIsRequired) + } + } +} + +private extension AgeSignupFlow { + func navigationToAgeSignup() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } + + func navigationToProFilSignup() -> FlowContributors { + let profilSignupFlow = ProFilSignupFlow(container: container) + + Flows.use(profilSignupFlow, when: .created) { (root) in + self.rootViewController.navigationController?.pushViewController( + root, + animated: true + ) + } + + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } +} diff --git a/Projects/Flow/Sources/AppFlow.swift b/Projects/Flow/Sources/AppFlow.swift index 338892c..cc67c6b 100644 --- a/Projects/Flow/Sources/AppFlow.swift +++ b/Projects/Flow/Sources/AppFlow.swift @@ -12,12 +12,9 @@ public final class AppFlow: Flow { return self.window } - private let rootViewController: MainViewController - public init(window: UIWindow, container: Container) { self.window = window self.container = container - self.rootViewController = MainViewController(MainReactor()) } public func navigate(to step: Step) -> FlowContributors { @@ -26,18 +23,60 @@ public final class AppFlow: Flow { switch step { case .onboardingIsRequired: return navigationToOnboarding() + case .oauthLoginIsRequired: + return navigationToOauthLogin() + case .tabIsRequired: + return navigationToTab() } } } private extension AppFlow { func navigationToOnboarding() -> FlowContributors { - self.window.rootViewController = rootViewController - return .one( - flowContributor: .contribute( - withNextPresentable: rootViewController, - withNextStepper: rootViewController.reactor - ) - ) + let onboardingFlow = OnboardingFlow(container: container) + + Flows.use(onboardingFlow, when: .created) { (root) in + self.window.rootViewController = root + } + + return .one(flowContributor: .contribute( + withNextPresentable: onboardingFlow, + withNextStepper: OneStepper(withSingleStep: OnboardingStep.onboardingIsRequired) + )) + } + + func navigationToOauthLogin() -> FlowContributors { + let oauthLoginFlow = OauthLoginFlow(container: container) + + Flows.use(oauthLoginFlow, when: .created) { (root) in + UIView.transition( + with: self.window, + duration: 0.5, + options: .transitionCrossDissolve + ) { + self.window.rootViewController = root + } + } + + return .one(flowContributor: .contribute( + withNextPresentable: oauthLoginFlow, + withNextStepper: OneStepper(withSingleStep: OauthLoginStep.oauthLoginIsRequired) + )) + } + + func navigationToTab() -> FlowContributors { + let mainViewController = container.resolve(MainViewController.self)! + UIView.transition( + with: self.window, + duration: 0.5, + options: .transitionCrossDissolve + ) { + self.window.rootViewController = mainViewController + } + + return .one(flowContributor: .contribute( + withNextPresentable: mainViewController, + withNextStepper: mainViewController.reactor + )) } } diff --git a/Projects/Flow/Sources/EmailSignupFlow.swift b/Projects/Flow/Sources/EmailSignupFlow.swift new file mode 100644 index 0000000..2328581 --- /dev/null +++ b/Projects/Flow/Sources/EmailSignupFlow.swift @@ -0,0 +1,58 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class EmailSignupFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: EmailSignupViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(EmailSignupViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? EmailSignupStep else { return .none } + + switch step { + case .emailSignupIsRequired: + return navigationToEmailSignup() + case .passwordSignupIsrequired: + return navigationToPasswordSignup() + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: OauthLoginStep.oauthLoginIsRequired) + } + } +} + +private extension EmailSignupFlow { + func navigationToEmailSignup() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } + + func navigationToPasswordSignup() -> FlowContributors { + let passwordSignupFlow = PasswordSignupFlow(container: container) + + Flows.use(passwordSignupFlow, when: .created) { (root) in + self.rootViewController.navigationController?.pushViewController( + root, + animated: true + ) + } + + return .one(flowContributor: .contribute( + withNextPresentable: passwordSignupFlow, + withNextStepper: OneStepper(withSingleStep: PasswordSignupStep.passwordSignupIsrequired) + )) + } +} diff --git a/Projects/Flow/Sources/NickNameSignupFlow.swift b/Projects/Flow/Sources/NickNameSignupFlow.swift new file mode 100644 index 0000000..256b42c --- /dev/null +++ b/Projects/Flow/Sources/NickNameSignupFlow.swift @@ -0,0 +1,58 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class NickNameSignupFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: NickNameSignupViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(NickNameSignupViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? NickNameSignupStep else { return .none } + + switch step { + case .ageSignupIsRequired: + return navigationToAgeSignup() + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: PasswordSignupStep.oauthLoginIsRequired) + case .nickNameSignupIsRequired: + return navigationToNickNameSignup() + } + } +} + +private extension NickNameSignupFlow { + func navigationToNickNameSignup() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } + + func navigationToAgeSignup() -> FlowContributors { + let ageSignupFlow = AgeSignupFlow(container: container) + + Flows.use(ageSignupFlow, when: .created) { (root) in + self.rootViewController.navigationController?.pushViewController( + root, + animated: true + ) + } + + return .one(flowContributor: .contribute( + withNextPresentable: ageSignupFlow, + withNextStepper: OneStepper(withSingleStep: AgeSignupStep.ageSignupIsRequired) + )) + } +} diff --git a/Projects/Flow/Sources/OauthLoginFlow.swift b/Projects/Flow/Sources/OauthLoginFlow.swift new file mode 100644 index 0000000..d78ed96 --- /dev/null +++ b/Projects/Flow/Sources/OauthLoginFlow.swift @@ -0,0 +1,78 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class OauthLoginFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: BaseNavigationController + + public init(container: Container) { + self.container = container + self.rootViewController = BaseNavigationController() + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? OauthLoginStep else { return .none } + + switch step { + case .oauthLoginIsRequired: + return navigationToOauthLogin() + case .emailLoginisRequired: + return navigationToEmailLogin() + case .emailSignupIsRequired: + return navigationToEmailSignup() + case .tabIsRequired: + return .end(forwardToParentFlowWithStep: OnboardingStep.tabIsRequired) + } + } +} + +private extension OauthLoginFlow { + func navigationToOauthLogin() -> FlowContributors { + let oauthLoginViewController = container.resolve(OauthLoginViewController.self)! + + self.rootViewController.setViewControllers( + [oauthLoginViewController], + animated: true + ) + + return .one(flowContributor: .contribute( + withNextPresentable: oauthLoginViewController, + withNextStepper: oauthLoginViewController.reactor + )) + } + + func navigationToEmailLogin() -> FlowContributors { + let emailLoginViewController = container.resolve(EmailLoginViewController.self)! + + self.rootViewController.pushViewController( + emailLoginViewController, + animated: true + ) + + return .one(flowContributor: .contribute( + withNextPresentable: emailLoginViewController, + withNextStepper: emailLoginViewController.reactor + )) + } + + func navigationToEmailSignup() -> FlowContributors { + let emailSignupFlow = EmailSignupFlow(container: container) + + Flows.use(emailSignupFlow, when: .created) { (root) in + self.rootViewController.pushViewController(root, animated: true) + } + + return .one(flowContributor: .contribute( + withNextPresentable: emailSignupFlow, + withNextStepper: OneStepper(withSingleStep: EmailSignupStep.emailSignupIsRequired) + )) + } +} diff --git a/Projects/Flow/Sources/OnboardingFlow.swift b/Projects/Flow/Sources/OnboardingFlow.swift new file mode 100644 index 0000000..d50d035 --- /dev/null +++ b/Projects/Flow/Sources/OnboardingFlow.swift @@ -0,0 +1,44 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class OnboardingFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: OnboardingViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(OnboardingViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? OnboardingStep else { return .none } + + switch step { + case .onboardingIsRequired: + return navigationToOnboarding() + + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: AppStep.oauthLoginIsRequired) + + case .tabIsRequired: + return .end(forwardToParentFlowWithStep: AppStep.tabIsRequired) + } + } +} + +private extension OnboardingFlow { + func navigationToOnboarding() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } +} diff --git a/Projects/Flow/Sources/PasswordSignupFlow.swift b/Projects/Flow/Sources/PasswordSignupFlow.swift new file mode 100644 index 0000000..27709e5 --- /dev/null +++ b/Projects/Flow/Sources/PasswordSignupFlow.swift @@ -0,0 +1,57 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class PasswordSignupFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: PasswordSignupViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(PasswordSignupViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? PasswordSignupStep else { return .none } + + switch step { + case .passwordSignupIsrequired: + return navigationToPasswordSignup() + case .nickNameSignupIsRequired: + return navigationToNickNameSignup() + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: EmailSignupStep.oauthLoginIsRequired) + } + } +} + +private extension PasswordSignupFlow { + func navigationToPasswordSignup() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } + + func navigationToNickNameSignup() -> FlowContributors { + let nickNameSignupFlow = NickNameSignupFlow(container: container) + Flows.use(nickNameSignupFlow, when: .created) { (root) in + self.rootViewController.navigationController?.pushViewController( + root, + animated: true + ) + } + + return .one(flowContributor: .contribute( + withNextPresentable: nickNameSignupFlow, + withNextStepper: OneStepper(withSingleStep: NickNameSignupStep.nickNameSignupIsRequired) + )) + } +} diff --git a/Projects/Flow/Sources/ProFilSignupFlow.swift b/Projects/Flow/Sources/ProFilSignupFlow.swift new file mode 100644 index 0000000..ae84753 --- /dev/null +++ b/Projects/Flow/Sources/ProFilSignupFlow.swift @@ -0,0 +1,41 @@ +import UIKit +import RxFlow +import RxSwift +import Core +import Swinject +import Presentation + +public final class ProFilSignupFlow: Flow { + public let container: Container + public var root: Presentable { + return self.rootViewController + } + + private let rootViewController: ProfilSignupViewController + + public init(container: Container) { + self.container = container + self.rootViewController = container.resolve(ProfilSignupViewController.self)! + } + + public func navigate(to step: Step) -> FlowContributors { + guard let step = step as? ProFilSignupStep else { return .none } + + switch step { + case .proFilSignupIsRequired: + return navigationToProfilSignup() + + case .oauthLoginIsRequired: + return .end(forwardToParentFlowWithStep: AgeSignupStep.oauthLoginIsRequired) + } + } +} + +private extension ProFilSignupFlow { + func navigationToProfilSignup() -> FlowContributors { + return .one(flowContributor: .contribute( + withNextPresentable: rootViewController, + withNextStepper: rootViewController.reactor + )) + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Contents.json similarity index 100% rename from Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Contents.json rename to Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Contents.json diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 500.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 500.colorset/Contents.json new file mode 100644 index 0000000..eb61fb8 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 500.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0x41", + "green" : "0x3C", + "red" : "0xDD" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 600.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 600.colorset/Contents.json new file mode 100644 index 0000000..1ff3f9a --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 600.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x29", + "green" : "0x23", + "red" : "0xC7" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 700.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 700.colorset/Contents.json new file mode 100644 index 0000000..35438ac --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 700.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x21", + "green" : "0x1C", + "red" : "0xA0" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 800.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 800.colorset/Contents.json new file mode 100644 index 0000000..9bc82d4 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 800.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x19", + "green" : "0x15", + "red" : "0x79" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 900.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 900.colorset/Contents.json new file mode 100644 index 0000000..1b344eb --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Error.xcassets/Error 900.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x11", + "green" : "0x0F", + "red" : "0x52" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 10.colorset/Contents.json deleted file mode 100644 index 9c0e331..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 100.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 100.colorset/Contents.json new file mode 100644 index 0000000..cdbd517 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE8", + "green" : "0xE8", + "red" : "0xE8" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 20.colorset/Contents.json deleted file mode 100644 index 3992d5e..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xFA", - "red" : "0xFA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x06", - "green" : "0x06", - "red" : "0x06" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 200.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 200.colorset/Contents.json new file mode 100644 index 0000000..b12f300 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xD1", + "green" : "0xD1", + "red" : "0xD1" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 30.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 30.colorset/Contents.json deleted file mode 100644 index 1312148..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 30.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF7", - "red" : "0xF7" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x19", - "green" : "0x19", - "red" : "0x19" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 300.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 300.colorset/Contents.json new file mode 100644 index 0000000..e7f5f04 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 300.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xBA", + "green" : "0xBA", + "red" : "0xBA" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 40.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 40.colorset/Contents.json deleted file mode 100644 index dbdddfe..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 40.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xE5", - "green" : "0xE5", - "red" : "0xE5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x33", - "green" : "0x33", - "red" : "0x33" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 400.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 400.colorset/Contents.json new file mode 100644 index 0000000..7c54d54 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 400.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xA3", + "green" : "0xA3", + "red" : "0xA3" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 50.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 50.colorset/Contents.json index b17f649..03cea30 100644 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 50.colorset/Contents.json +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 50.colorset/Contents.json @@ -5,27 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xCC", - "red" : "0xCC" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x54", - "green" : "0x54", - "red" : "0x54" + "blue" : "0xF2", + "green" : "0xF2", + "red" : "0xF2" } }, "idiom" : "universal" diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 500.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 500.colorset/Contents.json new file mode 100644 index 0000000..2e4a98b --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 500.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x8C", + "green" : "0x8C", + "red" : "0x8C" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 60.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 60.colorset/Contents.json deleted file mode 100644 index fa07791..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 60.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7F", - "green" : "0x7F", - "red" : "0x7F" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x8E", - "green" : "0x8E", - "red" : "0x8E" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 600.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 600.colorset/Contents.json new file mode 100644 index 0000000..656af9d --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 600.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x75", + "green" : "0x75", + "red" : "0x75" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 70.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 70.colorset/Contents.json deleted file mode 100644 index dfe22ef..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 70.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x44", - "green" : "0x44", - "red" : "0x44" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD9", - "green" : "0xD9", - "red" : "0xD9" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 700.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 700.colorset/Contents.json new file mode 100644 index 0000000..89a0900 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 700.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x5E", + "green" : "0x5E", + "red" : "0x5E" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 80.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 80.colorset/Contents.json deleted file mode 100644 index b9e6e23..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 80.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x33", - "green" : "0x33", - "red" : "0x33" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0xEE", - "red" : "0xEE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 800.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 800.colorset/Contents.json new file mode 100644 index 0000000..c4269d2 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 800.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x47", + "green" : "0x47", + "red" : "0x47" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 90.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 90.colorset/Contents.json deleted file mode 100644 index 2e89419..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 90.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.000", - "green" : "0.000", - "red" : "0.000" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 900.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 900.colorset/Contents.json new file mode 100644 index 0000000..2439073 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/GrayScale.xcassets/Gray 900.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x30", + "green" : "0x30", + "red" : "0x30" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Contents.json similarity index 100% rename from Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Contents.json rename to Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Contents.json diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 100.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 100.colorset/Contents.json new file mode 100644 index 0000000..1b83cf9 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE2", + "green" : "0xD1", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 200.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 200.colorset/Contents.json new file mode 100644 index 0000000..429fff9 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xC5", + "green" : "0xA3", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 300.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 300.colorset/Contents.json new file mode 100644 index 0000000..07aba10 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 300.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xA8", + "green" : "0x75", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 400.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 400.colorset/Contents.json new file mode 100644 index 0000000..3dfb397 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 400.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x8B", + "green" : "0x47", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 50.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 50.colorset/Contents.json new file mode 100644 index 0000000..a289077 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 50.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xEF", + "green" : "0xE5", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 500.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 500.colorset/Contents.json new file mode 100644 index 0000000..450be69 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 500.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x6E", + "green" : "0x1A", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 600.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 600.colorset/Contents.json new file mode 100644 index 0000000..b79c4a0 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 600.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x56", + "green" : "0x00", + "red" : "0xEB" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 700.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 700.colorset/Contents.json new file mode 100644 index 0000000..3f41922 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 700.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x45", + "green" : "0x00", + "red" : "0xBD" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 800.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 800.colorset/Contents.json new file mode 100644 index 0000000..e286ff2 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 800.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x34", + "green" : "0x00", + "red" : "0x8F" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 900.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 900.colorset/Contents.json new file mode 100644 index 0000000..f26e42f --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/Main.xcassets/Main 900.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x24", + "green" : "0x00", + "red" : "0x61" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 10.colorset/Contents.json deleted file mode 100644 index 2165e74..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xF3", - "red" : "0xF3" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x59", - "green" : "0x25", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 20.colorset/Contents.json deleted file mode 100644 index 36148a3..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x9D", - "green" : "0x5C", - "red" : "0x13" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x9D", - "green" : "0x5C", - "red" : "0x13" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 30.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 30.colorset/Contents.json deleted file mode 100644 index ed65b1e..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 30.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x4C", - "red" : "0x0F" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB1", - "green" : "0x70", - "red" : "0x27" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 40.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 40.colorset/Contents.json deleted file mode 100644 index 10c5b0b..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Primary.xcassets/Blue 40.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x53", - "green" : "0x2C", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD9", - "green" : "0x98", - "red" : "0x4F" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 10.colorset/Contents.json deleted file mode 100644 index 58e016a..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0xF8", - "red" : "0xE5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x25", - "green" : "0x43", - "red" : "0x0F" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 20.colorset/Contents.json deleted file mode 100644 index 70e7d10..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Green 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.443", - "green" : "0.800", - "red" : "0.180" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.443", - "green" : "0.800", - "red" : "0.180" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 10.colorset/Contents.json deleted file mode 100644 index 8880440..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xE7", - "green" : "0xE9", - "red" : "0xFC" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x14", - "green" : "0x19", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 20.colorset/Contents.json deleted file mode 100644 index 463e46e..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Red 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x3C", - "green" : "0x4C", - "red" : "0xE7" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x3C", - "green" : "0x4C", - "red" : "0xE7" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 10.colorset/Contents.json deleted file mode 100644 index 2a43eeb..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF6", - "green" : "0xEB", - "red" : "0xE0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x42", - "green" : "0x29", - "red" : "0x0C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 20.colorset/Contents.json deleted file mode 100644 index 5c05108..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/SkyBlue 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC9", - "green" : "0x7B", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC9", - "green" : "0x7B", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 10.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 10.colorset/Contents.json deleted file mode 100644 index 0d634f7..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 10.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xE2", - "green" : "0xF7", - "red" : "0xFD" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x05", - "green" : "0x41", - "red" : "0x50" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 20.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 20.colorset/Contents.json deleted file mode 100644 index 8c9b0dd..0000000 --- a/Projects/Modules/DesignSystem/Resources/Colors/Sub.xcassets/Yellow 20.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.059", - "green" : "0.769", - "red" : "0.945" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.059", - "green" : "0.769", - "red" : "0.945" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Contents.json similarity index 100% rename from Projects/Modules/DesignSystem/Resources/Images/Icons.xcassets/Contents.json rename to Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Contents.json diff --git a/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 1.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 1.colorset/Contents.json new file mode 100644 index 0000000..e7f5f04 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 1.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xBA", + "green" : "0xBA", + "red" : "0xBA" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 2.colorset/Contents.json b/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 2.colorset/Contents.json new file mode 100644 index 0000000..656af9d --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Colors/System.xcassets/Gray 2.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x75", + "green" : "0x75", + "red" : "0x75" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Bold.otf b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Bold.otf deleted file mode 100644 index e6d6ce8..0000000 Binary files a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Bold.otf and /dev/null differ diff --git a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-ExtraBold.otf b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-ExtraBold.otf new file mode 100644 index 0000000..388f3ca Binary files /dev/null and b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-ExtraBold.otf differ diff --git a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Medium.otf b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Medium.otf deleted file mode 100644 index ff907c4..0000000 Binary files a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-Medium.otf and /dev/null differ diff --git a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-SemiBold.otf b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-SemiBold.otf index fe81db7..e7e36ab 100644 Binary files a/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-SemiBold.otf and b/Projects/Modules/DesignSystem/Resources/Fonts/Pretendard/Pretendard-SemiBold.otf differ diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/Contents.json b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/Contents.json new file mode 100644 index 0000000..13e2c78 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "kakao_talk 3.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/kakao_talk 3.svg b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/kakao_talk 3.svg new file mode 100644 index 0000000..528e911 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Google.imageset/kakao_talk 3.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/Contents.json b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/Contents.json new file mode 100644 index 0000000..9d07e28 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "kakao_talk 1.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/kakao_talk 1.svg b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/kakao_talk 1.svg new file mode 100644 index 0000000..715cbee --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Kakao.imageset/kakao_talk 1.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/Contents.json b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/Contents.json new file mode 100644 index 0000000..c7a2da2 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "notify-heart-dynamic-gradient.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/notify-heart-dynamic-gradient.svg b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/notify-heart-dynamic-gradient.svg new file mode 100644 index 0000000..b2f4283 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Logo.imageset/notify-heart-dynamic-gradient.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Contents.json b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Contents.json new file mode 100644 index 0000000..33fe96c --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Frame 2291.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Frame 2291.svg b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Frame 2291.svg new file mode 100644 index 0000000..aecd1d2 --- /dev/null +++ b/Projects/Modules/DesignSystem/Resources/Images/Images.xcassets/Naver.imageset/Frame 2291.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Projects/Modules/DesignSystem/Sources/Color/UIColor+Error.swift b/Projects/Modules/DesignSystem/Sources/Color/UIColor+Error.swift new file mode 100644 index 0000000..b8a7fa5 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Color/UIColor+Error.swift @@ -0,0 +1,13 @@ +import UIKit + +public extension UIColor { + struct Error {} +} + +public extension UIColor.Error { + static let error500: UIColor = DesignSystemAsset.Error.error500.color + static let error600: UIColor = DesignSystemAsset.Error.error600.color + static let error700: UIColor = DesignSystemAsset.Error.error700.color + static let error800: UIColor = DesignSystemAsset.Error.error800.color + static let error900: UIColor = DesignSystemAsset.Error.error900.color +} diff --git a/Projects/Modules/DesignSystem/Sources/Color/UIColor+GrayScale.swift b/Projects/Modules/DesignSystem/Sources/Color/UIColor+GrayScale.swift new file mode 100644 index 0000000..0f0c34d --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Color/UIColor+GrayScale.swift @@ -0,0 +1,18 @@ +import UIKit + +public extension UIColor { + struct GrayScale {} +} + +public extension UIColor.GrayScale { + static let gray50: UIColor = DesignSystemAsset.GrayScale.gray50.color + static let gray100: UIColor = DesignSystemAsset.GrayScale.gray100.color + static let gray200: UIColor = DesignSystemAsset.GrayScale.gray200.color + static let gray300: UIColor = DesignSystemAsset.GrayScale.gray300.color + static let gray400: UIColor = DesignSystemAsset.GrayScale.gray400.color + static let gray500: UIColor = DesignSystemAsset.GrayScale.gray500.color + static let gray600: UIColor = DesignSystemAsset.GrayScale.gray600.color + static let gray700: UIColor = DesignSystemAsset.GrayScale.gray700.color + static let gray800: UIColor = DesignSystemAsset.GrayScale.gray800.color + static let gray900: UIColor = DesignSystemAsset.GrayScale.gray900.color +} diff --git a/Projects/Modules/DesignSystem/Sources/Color/UIColor+Main.swift b/Projects/Modules/DesignSystem/Sources/Color/UIColor+Main.swift new file mode 100644 index 0000000..11a02f2 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Color/UIColor+Main.swift @@ -0,0 +1,18 @@ +import UIKit + +public extension UIColor { + struct Main {} +} + +public extension UIColor.Main { + static let main50: UIColor = DesignSystemAsset.Main.main50.color + static let main100: UIColor = DesignSystemAsset.Main.main100.color + static let main200: UIColor = DesignSystemAsset.Main.main200.color + static let main300: UIColor = DesignSystemAsset.Main.main300.color + static let main400: UIColor = DesignSystemAsset.Main.main400.color + static let main500: UIColor = DesignSystemAsset.Main.main500.color + static let main600: UIColor = DesignSystemAsset.Main.main600.color + static let main700: UIColor = DesignSystemAsset.Main.main700.color + static let main800: UIColor = DesignSystemAsset.Main.main800.color + static let main900: UIColor = DesignSystemAsset.Main.main900.color +} diff --git a/Projects/Modules/DesignSystem/Sources/Color/UIColor+System.swift b/Projects/Modules/DesignSystem/Sources/Color/UIColor+System.swift new file mode 100644 index 0000000..aa765ed --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Color/UIColor+System.swift @@ -0,0 +1,10 @@ +import UIKit + +public extension UIColor { + struct System {} +} + +public extension UIColor.System { + static let gray1: UIColor = DesignSystemAsset.System.gray1.color + static let gray2: UIColor = DesignSystemAsset.System.gray2.color +} diff --git a/Projects/Modules/DesignSystem/Sources/Extension/UIButton/UIButton+setEmotingText.swift b/Projects/Modules/DesignSystem/Sources/Extension/UIButton/UIButton+setEmotingText.swift new file mode 100644 index 0000000..e21491c --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Extension/UIButton/UIButton+setEmotingText.swift @@ -0,0 +1,28 @@ +import UIKit + +public extension UIButton { + func setEmotingText(_ text: String, font: EmotingFontStyle, color: UIColor) { + self.setTextWithLineHeight(text: text, font: font, color: color) + self.titleLabel?.font = .emotingFont(font) + self.setTitleColor(color, for: .normal) + } +} + +extension UIButton { + func setTextWithLineHeight(text: String, font: EmotingFontStyle, color: UIColor) { + let style = NSMutableParagraphStyle() + style.maximumLineHeight = font.lineHeight() + style.minimumLineHeight = font.lineHeight() + style.lineBreakMode = .byTruncatingTail + + let attributes: [NSAttributedString.Key: Any] = [ + .paragraphStyle: style, + .baselineOffset: (font.lineHeight() - font.size()) / 4, + .foregroundColor: color + ] + + let attrString = NSMutableAttributedString(string: text, attributes: attributes) + self.titleLabel?.attributedText = attrString + self.setTitle(text, for: .normal) + } +} diff --git a/Projects/Modules/DesignSystem/Sources/Extension/UILabel/UILabel+setEmotingText.swift b/Projects/Modules/DesignSystem/Sources/Extension/UILabel/UILabel+setEmotingText.swift new file mode 100644 index 0000000..119b1f4 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Extension/UILabel/UILabel+setEmotingText.swift @@ -0,0 +1,26 @@ +import UIKit + +public extension UILabel { + func setEmotingText(_ text: String, font: EmotingFontStyle, color: UIColor) { + self.setTextWithLineHeight(text: text, font: font, color: color) + self.font = .emotingFont(font) + } +} + +extension UILabel { + func setTextWithLineHeight(text: String, font: EmotingFontStyle, color: UIColor) { + let style = NSMutableParagraphStyle() + style.maximumLineHeight = font.lineHeight() + style.minimumLineHeight = font.lineHeight() + style.lineBreakMode = .byTruncatingTail + + let attributes: [NSAttributedString.Key: Any] = [ + .paragraphStyle: style, + .baselineOffset: (font.lineHeight() - font.size()) / 4, + .foregroundColor: color + ] + + let attrString = NSMutableAttributedString(string: text, attributes: attributes) + self.attributedText = attrString + } +} diff --git a/Projects/Modules/DesignSystem/Sources/Image/EmotingImage.swift b/Projects/Modules/DesignSystem/Sources/Image/EmotingImage.swift new file mode 100644 index 0000000..e97b042 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Image/EmotingImage.swift @@ -0,0 +1,34 @@ +import UIKit +import Foundation + +public extension UIImage { + static func emotingImage(_ image: EmotingImage) -> UIImage { + image.uiImage() + } +} + +public enum EmotingImage { + case logo + case kakao + case naver + case google +} + +extension EmotingImage { + public func uiImage() -> UIImage { + let dsImages = DesignSystemAsset.Images.self + switch self { + case .logo: + return dsImages.logo.image + + case .kakao: + return dsImages.kakao.image + + case .naver: + return dsImages.naver.image + + case .google: + return dsImages.google.image + } + } +} diff --git a/Projects/Modules/DesignSystem/Sources/TempFile.swift b/Projects/Modules/DesignSystem/Sources/TempFile.swift deleted file mode 100644 index 19be644..0000000 --- a/Projects/Modules/DesignSystem/Sources/TempFile.swift +++ /dev/null @@ -1 +0,0 @@ -// TempFile diff --git a/Projects/Modules/DesignSystem/Sources/TextField/EmotingTextField.swift b/Projects/Modules/DesignSystem/Sources/TextField/EmotingTextField.swift new file mode 100644 index 0000000..05f907f --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/TextField/EmotingTextField.swift @@ -0,0 +1,28 @@ +import UIKit +import Then +import SnapKit +import TextFieldEffects + +public class EmotingTextField: HoshiTextField { +// public let textField = HoshiTextField().then { +// $0.placeholderLabel.textColor = .System.gray2 +// $0.textColor = .black +// } + public init(placeholder: String) { + super.init(frame: .zero) + self.placeholderLabel.textColor = .System.gray2 + self.textColor = .black + self.placeholder = placeholder + self.placeholderFontScale = self.isTextDropActive ? 0.8 : 1 + self.placeholderColor = .System.gray2 + self.placeholderLabel.text = placeholder + self.placeholderLabel.font = .emotingFont(.caption(.regular)) + self.placeholderLabel.textColor = .System.gray2 + self.borderActiveColor = .Main.main500 + self.borderInactiveColor = .System.gray1 + self.borderStyle = .line + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Projects/Modules/DesignSystem/Sources/Typography/EmotingFont.swift b/Projects/Modules/DesignSystem/Sources/Typography/EmotingFont.swift new file mode 100644 index 0000000..e8d441c --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Typography/EmotingFont.swift @@ -0,0 +1,84 @@ +import UIKit + +public extension UIFont { + static func emotingFont(_ font: EmotingFontStyle) -> UIFont { + font.uiFont() + } +} + +extension EmotingFontStyle { + func lineHeight() -> CGFloat { + switch self { + case .titleLg: + return 36 + + case .titleMd: + return 31.2 + + case .titleSm: + return 26 + + case .textLg: + return 25.2 + + case .textMd: + return 22.4 + + case .textSm: + return 19.6 + + case .caption: + return 16.8 + } + } + + func uiFont() -> UIFont { + switch self { + case let .titleLg(size): + return size.emotingFontSize(size: 30) + + case let .titleMd(size): + return size.emotingFontSize(size: 26) + + case let .titleSm(size): + return size.emotingFontSize(size: 20) + + case let .textLg(size): + return size.emotingFontSize(size: 18) + + case let .textMd(size): + return size.emotingFontSize(size: 16) + + case let .textSm(size): + return size.emotingFontSize(size: 14) + + case let .caption(size): + return size.emotingFontSize(size: 12) + } + } + + func size() -> CGFloat { + switch self { + case .titleLg: + return 30 + + case .titleMd: + return 26 + + case .titleSm: + return 20 + + case .textLg: + return 18 + + case .textMd: + return 16 + + case .textSm: + return 14 + + case .caption: + return 12 + } + } +} diff --git a/Projects/Modules/DesignSystem/Sources/Typography/EmotingFontStyle.swift b/Projects/Modules/DesignSystem/Sources/Typography/EmotingFontStyle.swift new file mode 100644 index 0000000..0035a15 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Typography/EmotingFontStyle.swift @@ -0,0 +1,32 @@ +import Foundation +import UIKit + +public enum EmotingFontStyle { + case titleLg(EmotingFontSize) + case titleMd(EmotingFontSize) + case titleSm(EmotingFontSize) + case textLg(EmotingFontSize) + case textMd(EmotingFontSize) + case textSm(EmotingFontSize) + case caption(EmotingFontSize) +} + +public enum EmotingFontSize { + case regular + case semibold + case extrabold +} + +extension EmotingFontSize { + func emotingFontSize(size: CGFloat) -> UIFont { + let pretendard = DesignSystemFontFamily.Pretendard.self + switch self { + case .regular: + return pretendard.regular.font(size: size) + case .semibold: + return pretendard.semiBold.font(size: size) + case .extrabold: + return pretendard.extraBold.font(size: size) + } + } +} diff --git a/Projects/Modules/DesignSystem/Sources/Typography/PretendardFont.swift b/Projects/Modules/DesignSystem/Sources/Typography/PretendardFont.swift new file mode 100644 index 0000000..32a5aa0 --- /dev/null +++ b/Projects/Modules/DesignSystem/Sources/Typography/PretendardFont.swift @@ -0,0 +1,7 @@ +import UIKit + +public extension UIFont { + static func pretendardFont(_ font: EmotingFontSize, size: CGFloat) -> UIFont { + font.emotingFontSize(size: size) + } +} diff --git a/Projects/Modules/ThirdPartyLib/Project.swift b/Projects/Modules/ThirdPartyLib/Project.swift index 3ba8eaa..dfde0dd 100644 --- a/Projects/Modules/ThirdPartyLib/Project.swift +++ b/Projects/Modules/ThirdPartyLib/Project.swift @@ -17,6 +17,7 @@ let project = Project.makeModule( .SPM.kingfisher, .SPM.KeychainSwift, .SPM.ReactorKit, - .SPM.RxGesture + .SPM.RxGesture, + .SPM.TextFieldEffets ], sources: [] ) diff --git a/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginReactor.swift b/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginReactor.swift new file mode 100644 index 0000000..6d1e6a6 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginReactor.swift @@ -0,0 +1,24 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class EmailLoginReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { } + + public enum Mutation { } + + public struct State { } +} + +extension EmailLoginReactor { + public func mutate(action: Action) -> Observable { } + public func reduce(state: State, mutation: Mutation) -> State { } +} diff --git a/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginViewController.swift b/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginViewController.swift new file mode 100644 index 0000000..33f5379 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Login/EmailLogin/EmailLoginViewController.swift @@ -0,0 +1,67 @@ +import UIKit +import SnapKit +import Then +import DesignSystem + +public class EmailLoginViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "Emoting" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 40) + } + private let subTitleLabel = UILabel().then { + $0.text = "소통에 간단함을 더하다" + $0.textColor = .black + $0.font = .pretendardFont(.regular, size: 16) + } + private let emailTextField = EmotingTextField(placeholder: "이메일") + private let passwordTextField = EmotingTextField(placeholder: "비밀번호") + private let loginButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("로그인", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.hidesBackButton = true + } + + public override func addView() { + [ + titleLabel, + subTitleLabel, + emailTextField, + passwordTextField, + loginButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.leading.equalToSuperview().inset(20) + $0.height.equalTo(56) + } + subTitleLabel.snp.makeConstraints { + $0.top.equalTo(titleLabel.snp.bottom).offset(8) + $0.left.equalToSuperview().inset(23) + } + emailTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(subTitleLabel.snp.bottom).offset(51) + $0.height.equalTo(57) + } + passwordTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(emailTextField.snp.bottom).offset(54) + $0.height.equalTo(57) + } + loginButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(54) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginReactor.swift b/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginReactor.swift new file mode 100644 index 0000000..31e2659 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginReactor.swift @@ -0,0 +1,47 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class OauthLoginReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case emailLoginButtonDidTap + case emailSignupButtonDidTap + } + + public enum Mutation { + case navigateToEmailLogin + case navigateToEmailSignup + } + + public struct State { } +} + +extension OauthLoginReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .emailLoginButtonDidTap: + return .just(.navigateToEmailLogin) + case .emailSignupButtonDidTap: + return .just(.navigateToEmailSignup) + } + } + + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .navigateToEmailLogin: + steps.accept(OauthLoginStep.emailLoginisRequired) + case .navigateToEmailSignup: + steps.accept(OauthLoginStep.emailSignupIsRequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginViewController.swift b/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginViewController.swift new file mode 100644 index 0000000..e5adce6 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Login/OauthLogin/OauthLoginViewController.swift @@ -0,0 +1,125 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class OauthLoginViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "Emoting" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 40) + } + private let subTitleLabel = UILabel().then { + $0.text = "소통에 간단함을 더하다" + $0.textColor = .black + $0.font = .pretendardFont(.regular, size: 16) + } + private let logoImageView = UIImageView().then { + $0.image = .emotingImage(.logo) + } + private let oauthStackView = UIStackView().then { + $0.axis = .horizontal + $0.spacing = 20 + } + private let kakaoLoginButton = UIButton(type: .system).then { + $0.setBackgroundImage(.emotingImage(.kakao), for: .normal) + $0.layer.cornerRadius = 24 + $0.clipsToBounds = true + } + private let naverLoginButton = UIButton(type: .system).then { + $0.setBackgroundImage(.emotingImage(.naver), for: .normal) + $0.layer.cornerRadius = 24 + $0.clipsToBounds = true + } + private let googleLoginButton = UIButton(type: .system).then { + $0.setBackgroundImage(.emotingImage(.google), for: .normal) + $0.layer.cornerRadius = 24 + $0.clipsToBounds = true + } + private let emailStackView = UIStackView().then { + $0.axis = .horizontal + $0.spacing = 12 + } + private let emailSignupButton = UIButton(type: .system).then { + $0.setTitle("이메일 회원가입", for: .normal) + $0.setTitleColor(.System.gray2, for: .normal) + } + private let lineView = UIView().then { + $0.backgroundColor = .System.gray2 + } + private let emailLoginButton = UIButton(type: .system).then { + $0.setTitle("이메일 로그인", for: .normal) + $0.setTitleColor(.System.gray2, for: .normal) + } + + public override func bindAction() { + emailLoginButton.rx.tap.asObservable() + .map { OauthLoginReactor.Action.emailLoginButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + + emailSignupButton.rx.tap.asObservable() + .map { OauthLoginReactor.Action.emailSignupButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + subTitleLabel, + logoImageView, + oauthStackView, + emailStackView + ].forEach(view.addSubview(_:)) + [ + kakaoLoginButton, + naverLoginButton, + googleLoginButton + ].forEach(oauthStackView.addArrangedSubview(_:)) + [ + emailSignupButton, + lineView, + emailLoginButton + ].forEach(emailStackView.addArrangedSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.top.greaterThanOrEqualTo(189) + $0.centerX.equalToSuperview() + } + subTitleLabel.snp.makeConstraints { + $0.top.equalTo(titleLabel.snp.bottom).offset(8) + $0.centerX.equalToSuperview() + } + logoImageView.snp.makeConstraints { + $0.centerX.equalToSuperview() + $0.top.equalTo(subTitleLabel.snp.bottom).offset(28) + $0.width.height.equalTo(160) + } + kakaoLoginButton.snp.makeConstraints { + $0.width.height.equalTo(48) + } + naverLoginButton.snp.makeConstraints { + $0.width.height.equalTo(48) + } + googleLoginButton.snp.makeConstraints { + $0.width.height.equalTo(48) + } + oauthStackView.snp.makeConstraints { + $0.centerX.equalToSuperview() + $0.top.equalTo(logoImageView.snp.bottom).offset(40) + } + emailStackView.snp.makeConstraints { + $0.top.equalTo(oauthStackView.snp.bottom).offset(16) + $0.centerX.equalToSuperview() + } + lineView.snp.makeConstraints { + $0.width.equalTo(1) + $0.height.equalTo(18) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupReactor.swift b/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupReactor.swift new file mode 100644 index 0000000..4ec0130 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupReactor.swift @@ -0,0 +1,41 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class AgeSignupReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case nextButtonDidTap + } + + public enum Mutation { + case navigateToProfilSignup + } + + public struct State { } +} + +extension AgeSignupReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .nextButtonDidTap: + return .just(.navigateToProfilSignup) + } + } + + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .navigateToProfilSignup: + steps.accept(AgeSignupStep.proFilSignupIsRequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupViewController.swift b/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupViewController.swift new file mode 100644 index 0000000..d6c18a5 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/AgeSignup/AgeSignupViewController.swift @@ -0,0 +1,58 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class AgeSignupViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "나이를 입력해주세요" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 26) + } + private let ageTextField = EmotingTextField(placeholder: "나이") + private let nextButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("다음", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.title = "회원가입" + } + + public override func bindAction() { + nextButton.rx.tap.asObservable() + .map { AgeSignupReactor.Action.nextButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + ageTextField, + nextButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.leading.equalToSuperview().inset(20) + } + ageTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(titleLabel.snp.bottom).offset(44) + $0.height.equalTo(57) + } + nextButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(54) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupReactor.swift b/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupReactor.swift new file mode 100644 index 0000000..5590b62 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupReactor.swift @@ -0,0 +1,41 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class EmailSignupReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case nextButtonDidTap + } + + public enum Mutation { + case navigateToPasswordSignup + } + + public struct State { } +} + +extension EmailSignupReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .nextButtonDidTap: + return .just(.navigateToPasswordSignup) + } + } + + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .navigateToPasswordSignup: + steps.accept(EmailSignupStep.passwordSignupIsrequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupViewController.swift b/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupViewController.swift new file mode 100644 index 0000000..344d442 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/EmailSignup/EmailSignupViewController.swift @@ -0,0 +1,58 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class EmailSignupViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "이메일을 입력해주세요" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 26) + } + private let emailTextField = EmotingTextField(placeholder: "이메일") + private let nextButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("다음", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.title = "회원가입" + } + + public override func bindAction() { + nextButton.rx.tap.asObservable() + .map { EmailSignupReactor.Action.nextButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + emailTextField, + nextButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.leading.equalToSuperview().inset(20) + } + emailTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(titleLabel.snp.bottom).offset(44) + $0.height.equalTo(57) + } + nextButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(54) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupReactor.swift b/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupReactor.swift new file mode 100644 index 0000000..cf3da73 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupReactor.swift @@ -0,0 +1,41 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class NickNameSignupReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case nextButtonDidTap + } + + public enum Mutation { + case navigateToAgeSignup + } + + public struct State { } +} + +extension NickNameSignupReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .nextButtonDidTap: + return .just(.navigateToAgeSignup) + } + } + + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .navigateToAgeSignup: + steps.accept(NickNameSignupStep.ageSignupIsRequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupViewController.swift b/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupViewController.swift new file mode 100644 index 0000000..e0a7566 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/NickNameSignup/NickNameSignupViewController.swift @@ -0,0 +1,58 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class NickNameSignupViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "닉네임을 입력해주세요" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 26) + } + private let nickNameTextField = EmotingTextField(placeholder: "닉네임(별명)") + private let nextButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("다음", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.title = "회원가입" + } + + public override func bindAction() { + nextButton.rx.tap.asObservable() + .map { NickNameSignupReactor.Action.nextButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + nickNameTextField, + nextButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.leading.equalToSuperview().inset(20) + } + nickNameTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(titleLabel.snp.bottom).offset(44) + $0.height.equalTo(57) + } + nextButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(54) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupReactor.swift b/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupReactor.swift new file mode 100644 index 0000000..8ebc2da --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupReactor.swift @@ -0,0 +1,40 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class PasswordSignupReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case nextButtonDidTap + } + + public enum Mutation { + case navigateToNickNameSignup + } + + public struct State { } +} + +extension PasswordSignupReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .nextButtonDidTap: + return .just(.navigateToNickNameSignup) + } + } + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .navigateToNickNameSignup: + steps.accept(PasswordSignupStep.nickNameSignupIsRequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupViewController.swift b/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupViewController.swift new file mode 100644 index 0000000..19dd96e --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/PasswordSignup/PasswordSignupViewController.swift @@ -0,0 +1,65 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class PasswordSignupViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "비밀번호를 입력해주세요" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 26) + } + private let passwordTextField = EmotingTextField(placeholder: "비밀번호") + private let passwordCheckTextField = EmotingTextField(placeholder: "비밀번호 재확인") + private let nextButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("다음", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.title = "회원가입" + } + + public override func bindAction() { + nextButton.rx.tap.asObservable() + .map { PasswordSignupReactor.Action.nextButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + passwordTextField, + passwordCheckTextField, + nextButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.leading.equalToSuperview().inset(20) + } + passwordTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(titleLabel.snp.bottom).offset(44) + $0.height.equalTo(57) + } + passwordCheckTextField.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.equalTo(passwordTextField.snp.bottom).offset(54) + $0.height.equalTo(57) + } + nextButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(54) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupReactor.swift b/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupReactor.swift new file mode 100644 index 0000000..8cd8fa5 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupReactor.swift @@ -0,0 +1,41 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class ProfilSignupReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case nextButtonDidTap + } + + public enum Mutation { + case signupSuccess + } + + public struct State { } +} + +extension ProfilSignupReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .nextButtonDidTap: + return .just(.signupSuccess) + } + } + + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + switch mutation { + case .signupSuccess: + steps.accept(ProFilSignupStep.oauthLoginIsRequired) + } + return newState + } +} diff --git a/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupViewController.swift b/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupViewController.swift new file mode 100644 index 0000000..33a4e12 --- /dev/null +++ b/Projects/Presentation/Sources/Auth/Signup/ProfilSignup/ProfilSignupViewController.swift @@ -0,0 +1,66 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxSwift +import RxCocoa + +public class ProfilSignupViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "프로필을 등록해주세요" + $0.textColor = .black + $0.font = .pretendardFont(.semibold, size: 26) + } + private let afterButton = UIButton(type: .system).then { + $0.backgroundColor = .white + $0.layer.cornerRadius = 12 + $0.layer.borderColor = UIColor.Main.main500.cgColor + $0.layer.borderWidth = 1 + $0.setTitle("나중에 하기", for: .normal) + $0.setTitleColor(.Main.main500, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + private let nextButton = UIButton(type: .system).then { + $0.backgroundColor = .Main.main500 + $0.layer.cornerRadius = 12 + $0.setTitle("다음", for: .normal) + $0.setTitleColor(.white, for: .normal) + $0.titleLabel?.font = .pretendardFont(.semibold, size: 18) + } + + public override func configureNavigation() { + self.navigationItem.title = "회원가입" + } + + public override func bindAction() { + nextButton.rx.tap.asObservable() + .map { ProfilSignupReactor.Action.nextButtonDidTap } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + [ + titleLabel, + afterButton, + nextButton + ].forEach(view.addSubview(_:)) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.topMargin.equalToSuperview().inset(40) + $0.centerX.equalToSuperview() + } + afterButton.snp.makeConstraints { + $0.bottom.equalTo(nextButton.snp.top).offset(-20) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + nextButton.snp.makeConstraints { + $0.bottom.equalToSuperview().inset(44) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(52) + } + } +} diff --git a/Projects/Presentation/Sources/Base/BaseNavigationController.swift b/Projects/Presentation/Sources/Base/BaseNavigationController.swift index 0e84e39..805d273 100644 --- a/Projects/Presentation/Sources/Base/BaseNavigationController.swift +++ b/Projects/Presentation/Sources/Base/BaseNavigationController.swift @@ -1,4 +1,5 @@ import UIKit +import DesignSystem public class BaseNavigationController: UINavigationController { @@ -17,7 +18,7 @@ public class BaseNavigationController: UINavigationController { private var backButtonImage: UIImage? { return UIImage(systemName: "chevron.left")! - .withAlignmentRectInsets(UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0)) + .withAlignmentRectInsets(UIEdgeInsets(top: 16.0, left: -16.0, bottom: 16.0, right: 0.0)) } private var backButtonAppearance: UIBarButtonItemAppearance { @@ -29,7 +30,7 @@ public class BaseNavigationController: UINavigationController { private func setNavigationBarAppearance() { let scrollEdgeAppearance = UINavigationBarAppearance() let standardAppearance = UINavigationBarAppearance() -// navigationBar.tintColor = .GrayScale.gray60 + navigationBar.tintColor = .GrayScale.gray500 scrollEdgeAppearance.setBackIndicatorImage( backButtonImage, transitionMaskImage: backButtonImage @@ -38,12 +39,15 @@ public class BaseNavigationController: UINavigationController { backButtonImage, transitionMaskImage: backButtonImage ) -// scrollEdgeAppearance.backgroundColor = .GrayScale.gray10 + scrollEdgeAppearance.backgroundColor = .white scrollEdgeAppearance.configureWithTransparentBackground() standardAppearance.configureWithDefaultBackground() scrollEdgeAppearance.backButtonAppearance = backButtonAppearance standardAppearance.backButtonAppearance = backButtonAppearance + scrollEdgeAppearance.titleTextAttributes = [ + .font: UIFont.pretendardFont(.regular, size: 16) + ] // scrollEdgeAppearance.largeTitleTextAttributes = [ // .font: UIFont.jobisFont(.pageTitle), // .foregroundColor: UIColor.GrayScale.gray90 diff --git a/Projects/Presentation/Sources/DI/PresentationAssembly.swift b/Projects/Presentation/Sources/DI/PresentationAssembly.swift new file mode 100644 index 0000000..0216f88 --- /dev/null +++ b/Projects/Presentation/Sources/DI/PresentationAssembly.swift @@ -0,0 +1,66 @@ +import Foundation +import Swinject +import Core +import Domain + +public final class PresentationAssembly: Assembly { + public init() {} + + public func assemble(container: Container) { + container.register(OnboardingReactor.self) { _ in + OnboardingReactor() + } + container.register(OnboardingViewController.self) { resolver in + OnboardingViewController(resolver.resolve(OnboardingReactor.self)!) + } + + container.register(OauthLoginReactor.self) { _ in + OauthLoginReactor() + } + container.register(OauthLoginViewController.self) { resolver in + OauthLoginViewController(resolver.resolve(OauthLoginReactor.self)!) + } + + container.register(EmailLoginReactor.self) { _ in + EmailLoginReactor() + } + container.register(EmailLoginViewController.self) { resolver in + EmailLoginViewController(resolver.resolve(EmailLoginReactor.self)!) + } + + container.register(EmailSignupReactor.self) { _ in + EmailSignupReactor() + } + container.register(EmailSignupViewController.self) { resolver in + EmailSignupViewController(resolver.resolve(EmailSignupReactor.self)!) + } + + container.register(PasswordSignupReactor.self) { _ in + PasswordSignupReactor() + } + container.register(PasswordSignupViewController.self) { resolver in + PasswordSignupViewController(resolver.resolve(PasswordSignupReactor.self)!) + } + + container.register(NickNameSignupReactor.self) { _ in + NickNameSignupReactor() + } + container.register(NickNameSignupViewController.self) { resolver in + NickNameSignupViewController(resolver.resolve(NickNameSignupReactor.self)!) + } + + container.register(AgeSignupReactor.self) { _ in + AgeSignupReactor() + } + container.register(AgeSignupViewController.self) { resolver in + AgeSignupViewController(resolver.resolve(AgeSignupReactor.self)!) + } + + container.register(ProfilSignupReactor.self) { _ in + ProfilSignupReactor() + } + container.register(ProfilSignupViewController.self) { resolver in + ProfilSignupViewController(resolver.resolve(ProfilSignupReactor.self)!) + } + } +} diff --git a/Projects/Presentation/Sources/Onboarding/OnboardingReactor.swift b/Projects/Presentation/Sources/Onboarding/OnboardingReactor.swift new file mode 100644 index 0000000..5fa444c --- /dev/null +++ b/Projects/Presentation/Sources/Onboarding/OnboardingReactor.swift @@ -0,0 +1,47 @@ +import ReactorKit +import RxSwift +import RxCocoa +import Domain +import RxFlow +import Core + +public final class OnboardingReactor: BaseReactor, Stepper { + public let steps = PublishRelay() + public let initialState = State() + private let disposeBag = DisposeBag() + public init() {} + + public enum Action { + case viewDidAppear + } + + public enum Mutation { + case refreshSuccess + case refreshFail + } + + public struct State { } +} + +extension OnboardingReactor { + public func mutate(action: Action) -> Observable { + switch action { + case .viewDidAppear: + return .just(.refreshFail) + .delay(.seconds(1), scheduler: MainScheduler.asyncInstance) + } + } + public func reduce(state: State, mutation: Mutation) -> State { + var newState = state + + switch mutation { + case .refreshFail: + steps.accept(OnboardingStep.oauthLoginIsRequired) + + case .refreshSuccess: + steps.accept(OnboardingStep.tabIsRequired) + } + + return newState + } +} diff --git a/Projects/Presentation/Sources/Onboarding/OnboardingViewController.swift b/Projects/Presentation/Sources/Onboarding/OnboardingViewController.swift new file mode 100644 index 0000000..5b6d3e1 --- /dev/null +++ b/Projects/Presentation/Sources/Onboarding/OnboardingViewController.swift @@ -0,0 +1,34 @@ +import UIKit +import SnapKit +import Then +import DesignSystem +import RxCocoa +import RxSwift + +public class OnboardingViewController: BaseReactorViewController { + private let titleLabel = UILabel().then { + $0.text = "Emoting" + $0.textColor = .white + $0.font = .pretendardFont(.extrabold, size: 40) + } + + public override func configureViewController() { + self.view.backgroundColor = .Main.main500 + } + public override func bindAction() { + viewWillAppearPublisher.asObservable() + .map { OnboardingReactor.Action.viewDidAppear } + .bind(to: reactor.action) + .disposed(by: disposeBag) + } + + public override func addView() { + self.view.addSubview(titleLabel) + } + + public override func setLayout() { + titleLabel.snp.makeConstraints { + $0.center.equalToSuperview() + } + } +} diff --git a/Tuist/Dependencies.swift b/Tuist/Dependencies.swift index 953b374..356be19 100644 --- a/Tuist/Dependencies.swift +++ b/Tuist/Dependencies.swift @@ -43,6 +43,10 @@ let dependencies = Dependencies( .remote( url: "https://github.com/RxSwiftCommunity/RxGesture", requirement: .upToNextMajor(from: "4.0.0") + ), + .remote( + url: "https://github.com/raulriera/TextFieldEffects", + requirement: .upToNextMajor(from: "1.7.0") ) ] ),