diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 711859e..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index 52fe2f7..66e9708 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,11 @@ fastlane/report.xml fastlane/Preview.html fastlane/screenshots/**/*.png fastlane/test_output + +### Projects ### +*.xcodeproj +*.xcworkspace +### Tuist derived files ### +graph.dot +Derived/ +.DS_Store diff --git a/.package.resolved b/.package.resolved new file mode 100644 index 0000000..c7d61f0 --- /dev/null +++ b/.package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "9d2c391dc946ad5b30f17826ffdc1e8790a14b5f4064662b59cfbbb44d2be204", + "pins" : [ + { + "identity" : "r.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mac-cain13/R.swift.git", + "state" : { + "revision" : "a9abc6b0afe0fc4a5a71e1d7d2872143dff2d2f1", + "version" : "7.8.0" + } + }, + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser", + "state" : { + "revision" : "626b5b7b2f45e1b0b1c6f4a309296d1d21d7311b", + "version" : "1.7.1" + } + }, + { + "identity" : "xcodeedit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tomlokhorst/XcodeEdit", + "state" : { + "revision" : "0e550cdee72844b35431afc3a1e176042be6d0f0", + "version" : "2.13.0" + } + } + ], + "version" : 3 +} diff --git a/API/.gitignore b/API/.gitignore deleted file mode 100644 index 3b29812..0000000 --- a/API/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.DS_Store -/.build -/Packages -/*.xcodeproj -xcuserdata/ -DerivedData/ -.swiftpm/config/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/API/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/API/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/API/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/API/Package.swift b/API/Package.swift deleted file mode 100644 index 501fdd2..0000000 --- a/API/Package.swift +++ /dev/null @@ -1,30 +0,0 @@ -// swift-tools-version: 5.7 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "API", - platforms: [ - .iOS(.v16), - ], - products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. - .library( - name: "API", - targets: ["API"] - ), - ], - dependencies: [ - // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Maks-Jago/SwiftFoundation.git", from: "0.3.5"), - ], - targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. - .target( - name: "API", - dependencies: [.byName(name: "SwiftFoundation")] - ), - ] -) diff --git a/API/README.md b/API/README.md deleted file mode 100644 index 8415142..0000000 --- a/API/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# API - -A description of this package. diff --git a/API/Sources/API/AuthAPIClient.swift b/Core/API/Sources/API/AuthAPIClient.swift similarity index 100% rename from API/Sources/API/AuthAPIClient.swift rename to Core/API/Sources/API/AuthAPIClient.swift diff --git a/API/Sources/API/BaseAPI.swift b/Core/API/Sources/API/BaseAPI.swift similarity index 98% rename from API/Sources/API/BaseAPI.swift rename to Core/API/Sources/API/BaseAPI.swift index b5689ec..f042a2f 100644 --- a/API/Sources/API/BaseAPI.swift +++ b/Core/API/Sources/API/BaseAPI.swift @@ -10,7 +10,7 @@ import Foundation import SwiftFoundation let kBaseURLPath: String = "https://api.themoviedb.org/3" -public let kTMDBApiKey = "" +public let kTMDBApiKey = "" let kURLTimeoutInterval: TimeInterval = 10 let kRequestHeaders: [String: String] = [ diff --git a/API/Sources/API/Errors/ServerError.swift b/Core/API/Sources/API/Errors/ServerError.swift similarity index 100% rename from API/Sources/API/Errors/ServerError.swift rename to Core/API/Sources/API/Errors/ServerError.swift diff --git a/API/Sources/API/Extensions/URLRequest+UnwrapContainer.swift b/Core/API/Sources/API/Extensions/URLRequest+UnwrapContainer.swift similarity index 100% rename from API/Sources/API/Extensions/URLRequest+UnwrapContainer.swift rename to Core/API/Sources/API/Extensions/URLRequest+UnwrapContainer.swift diff --git a/API/Sources/API/Extensions/URLRequest.swift b/Core/API/Sources/API/Extensions/URLRequest.swift similarity index 100% rename from API/Sources/API/Extensions/URLRequest.swift rename to Core/API/Sources/API/Extensions/URLRequest.swift diff --git a/API/Sources/API/Extensions/URLSession.swift b/Core/API/Sources/API/Extensions/URLSession.swift similarity index 100% rename from API/Sources/API/Extensions/URLSession.swift rename to Core/API/Sources/API/Extensions/URLSession.swift diff --git a/API/Sources/API/HomeAPIClient.swift b/Core/API/Sources/API/HomeAPIClient.swift similarity index 100% rename from API/Sources/API/HomeAPIClient.swift rename to Core/API/Sources/API/HomeAPIClient.swift diff --git a/API/Sources/API/ImageConfigsAPIClient.swift b/Core/API/Sources/API/ImageConfigsAPIClient.swift similarity index 100% rename from API/Sources/API/ImageConfigsAPIClient.swift rename to Core/API/Sources/API/ImageConfigsAPIClient.swift diff --git a/API/Sources/API/ItemDetailsAPIClient.swift b/Core/API/Sources/API/ItemDetailsAPIClient.swift similarity index 100% rename from API/Sources/API/ItemDetailsAPIClient.swift rename to Core/API/Sources/API/ItemDetailsAPIClient.swift diff --git a/API/Sources/API/Models/AuthorRemote.swift b/Core/API/Sources/API/Models/AuthorRemote.swift similarity index 100% rename from API/Sources/API/Models/AuthorRemote.swift rename to Core/API/Sources/API/Models/AuthorRemote.swift diff --git a/API/Sources/API/Models/CastRemote.swift b/Core/API/Sources/API/Models/CastRemote.swift similarity index 100% rename from API/Sources/API/Models/CastRemote.swift rename to Core/API/Sources/API/Models/CastRemote.swift diff --git a/API/Sources/API/Models/GenreRemote.swift b/Core/API/Sources/API/Models/GenreRemote.swift similarity index 100% rename from API/Sources/API/Models/GenreRemote.swift rename to Core/API/Sources/API/Models/GenreRemote.swift diff --git a/API/Sources/API/Models/GuestSessionResponse.swift b/Core/API/Sources/API/Models/GuestSessionResponse.swift similarity index 100% rename from API/Sources/API/Models/GuestSessionResponse.swift rename to Core/API/Sources/API/Models/GuestSessionResponse.swift diff --git a/API/Sources/API/Models/ImageConfigsRemote.swift b/Core/API/Sources/API/Models/ImageConfigsRemote.swift similarity index 100% rename from API/Sources/API/Models/ImageConfigsRemote.swift rename to Core/API/Sources/API/Models/ImageConfigsRemote.swift diff --git a/API/Sources/API/Models/ItemsResponse.swift b/Core/API/Sources/API/Models/ItemsResponse.swift similarity index 100% rename from API/Sources/API/Models/ItemsResponse.swift rename to Core/API/Sources/API/Models/ItemsResponse.swift diff --git a/API/Sources/API/Models/LossyCodableList.swift b/Core/API/Sources/API/Models/LossyCodableList.swift similarity index 100% rename from API/Sources/API/Models/LossyCodableList.swift rename to Core/API/Sources/API/Models/LossyCodableList.swift diff --git a/API/Sources/API/Models/MovieRemote.swift b/Core/API/Sources/API/Models/MovieRemote.swift similarity index 100% rename from API/Sources/API/Models/MovieRemote.swift rename to Core/API/Sources/API/Models/MovieRemote.swift diff --git a/API/Sources/API/Models/NetworkRemote.swift b/Core/API/Sources/API/Models/NetworkRemote.swift similarity index 100% rename from API/Sources/API/Models/NetworkRemote.swift rename to Core/API/Sources/API/Models/NetworkRemote.swift diff --git a/API/Sources/API/Models/RequestTokenResponse.swift b/Core/API/Sources/API/Models/RequestTokenResponse.swift similarity index 100% rename from API/Sources/API/Models/RequestTokenResponse.swift rename to Core/API/Sources/API/Models/RequestTokenResponse.swift diff --git a/API/Sources/API/Models/ReviewRemote.swift b/Core/API/Sources/API/Models/ReviewRemote.swift similarity index 100% rename from API/Sources/API/Models/ReviewRemote.swift rename to Core/API/Sources/API/Models/ReviewRemote.swift diff --git a/API/Sources/API/Models/SearchItemRemote.swift b/Core/API/Sources/API/Models/SearchItemRemote.swift similarity index 100% rename from API/Sources/API/Models/SearchItemRemote.swift rename to Core/API/Sources/API/Models/SearchItemRemote.swift diff --git a/API/Sources/API/Models/SessionResponse.swift b/Core/API/Sources/API/Models/SessionResponse.swift similarity index 100% rename from API/Sources/API/Models/SessionResponse.swift rename to Core/API/Sources/API/Models/SessionResponse.swift diff --git a/API/Sources/API/Models/ShowRemote.swift b/Core/API/Sources/API/Models/ShowRemote.swift similarity index 100% rename from API/Sources/API/Models/ShowRemote.swift rename to Core/API/Sources/API/Models/ShowRemote.swift diff --git a/API/Sources/API/SearchAPIClient.swift b/Core/API/Sources/API/SearchAPIClient.swift similarity index 100% rename from API/Sources/API/SearchAPIClient.swift rename to Core/API/Sources/API/SearchAPIClient.swift diff --git a/Core/Common/Sources/Common.swift b/Core/Common/Sources/Common.swift new file mode 100644 index 0000000..1865c41 --- /dev/null +++ b/Core/Common/Sources/Common.swift @@ -0,0 +1,42 @@ +// +// Common.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI + +// MARK: - Typealiases + +public typealias Minutes = Int + +// MARK: - Constants + +public let kPerPage: Int = 20 + +// MARK: - AppLink + +public enum AppLink: String, Identifiable { + case aboutUs = "https://www.themoviedb.org/about" + case tmdbAPI = "https://developer.themoviedb.org/docs/getting-started" + case privacyPolicy = "https://www.themoviedb.org/privacy-policy" + + public var id: Self { self } + public var urlValue: URL { URL(string: rawValue)! } +} + +// MARK: - Helpers + +public func areEqual(_ lhs: Lhs, _ rhs: some Equatable) -> Bool { + guard let rhsAs = rhs as? Lhs else { + return false + } + + return lhs == rhsAs +} + +public enum ImageType { + case backdrop, logo, poster, profile, still +} diff --git a/Flick/Code/Common/CustomViews/PrimaryButton.swift b/Core/Common/Sources/CustomView/PrimaryButton.swift similarity index 59% rename from Flick/Code/Common/CustomViews/PrimaryButton.swift rename to Core/Common/Sources/CustomView/PrimaryButton.swift index 4ec8f19..5c4c8f1 100644 --- a/Flick/Code/Common/CustomViews/PrimaryButton.swift +++ b/Core/Common/Sources/CustomView/PrimaryButton.swift @@ -2,18 +2,23 @@ // PrimaryButton.swift // Flick // -// Created by Alexander Sharko on 18.11.2022. -// Copyright © 2022 urlaunched.com. All rights reserved. +// Created by Bogdan Petkanych on 06.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. // import DesignSystem import SwiftUI -struct PrimaryButton: View { +public struct PrimaryButton: View { var title: String var action: () -> Void + + public init(title: String, action: @escaping () -> Void) { + self.title = title + self.action = action + } - var body: some View { + public var body: some View { Button(action: action) { Text(title) .customFont(.title3) diff --git a/Core/Common/Sources/DropdownItem.swift b/Core/Common/Sources/DropdownItem.swift new file mode 100644 index 0000000..442e6f5 --- /dev/null +++ b/Core/Common/Sources/DropdownItem.swift @@ -0,0 +1,18 @@ +// +// DropDownItem.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import UIKit + +public struct DropdownItem { + public var title: String + public var image: UIImage + + public init(title: String, image: UIImage) { + self.title = title + self.image = image + } +} diff --git a/Flick/Code/Common/Enums/ItemSizeStyle.swift b/Core/Common/Sources/Enums/ItemSizeStyle.swift similarity index 76% rename from Flick/Code/Common/Enums/ItemSizeStyle.swift rename to Core/Common/Sources/Enums/ItemSizeStyle.swift index bd18ab0..4a2e0c0 100644 --- a/Flick/Code/Common/Enums/ItemSizeStyle.swift +++ b/Core/Common/Sources/Enums/ItemSizeStyle.swift @@ -8,14 +8,14 @@ import CoreFoundation -enum ItemSizeStyle { +public enum ItemSizeStyle { case `default`, main - var coverSize: CGSize { + public var coverSize: CGSize { switch self { case .main: return .init(width: 202, height: 283) case .default: return .init(width: 135, height: 189) } } - var isMain: Bool { self == .main } + public var isMain: Bool { self == .main } } diff --git a/Flick/Code/Common/Enums/TabBarItem.swift b/Core/Common/Sources/Enums/TabBarItem.swift similarity index 71% rename from Flick/Code/Common/Enums/TabBarItem.swift rename to Core/Common/Sources/Enums/TabBarItem.swift index 00d911f..b21df50 100644 --- a/Flick/Code/Common/Enums/TabBarItem.swift +++ b/Core/Common/Sources/Enums/TabBarItem.swift @@ -8,8 +8,8 @@ import Foundation -enum TabBarItem: String, Hashable, CaseIterable { +public enum TabBarItem: String, Hashable, CaseIterable { case home, search, randomizer, favorites, profile - var id: Self { self } + public var id: Self { self } } diff --git a/Flick/Code/Common/Extensions/Foundation/Array.swift b/Core/Common/Sources/Extensions/Foundation/Array.swift similarity index 94% rename from Flick/Code/Common/Extensions/Foundation/Array.swift rename to Core/Common/Sources/Extensions/Foundation/Array.swift index 5782b5d..aadf6c8 100644 --- a/Flick/Code/Common/Extensions/Foundation/Array.swift +++ b/Core/Common/Sources/Extensions/Foundation/Array.swift @@ -8,7 +8,7 @@ import Foundation -extension Array { +public extension Array { subscript(safe range: Range) -> ArraySlice? { if range.endIndex > endIndex { if range.startIndex >= endIndex { diff --git a/Flick/Code/Common/Extensions/Foundation/Collection.swift b/Core/Common/Sources/Extensions/Foundation/Collection.swift similarity index 69% rename from Flick/Code/Common/Extensions/Foundation/Collection.swift rename to Core/Common/Sources/Extensions/Foundation/Collection.swift index eb01e74..84c4f6f 100644 --- a/Flick/Code/Common/Extensions/Foundation/Collection.swift +++ b/Core/Common/Sources/Extensions/Foundation/Collection.swift @@ -8,8 +8,4 @@ import Foundation -extension Collection { - var isNotEmpty: Bool { - !isEmpty - } -} +// REMOVE diff --git a/Flick/Code/Common/Extensions/Foundation/Date.swift b/Core/Common/Sources/Extensions/Foundation/Date.swift similarity index 94% rename from Flick/Code/Common/Extensions/Foundation/Date.swift rename to Core/Common/Sources/Extensions/Foundation/Date.swift index 7104106..d1423bf 100644 --- a/Flick/Code/Common/Extensions/Foundation/Date.swift +++ b/Core/Common/Sources/Extensions/Foundation/Date.swift @@ -8,7 +8,7 @@ import Foundation -extension Date { +public extension Date { static var testItem = Date(timeIntervalSince1970: 0) var asShortDateString: String { diff --git a/Flick/Code/Common/Extensions/Foundation/DateFormatter.swift b/Core/Common/Sources/Extensions/Foundation/DateFormatter.swift similarity index 93% rename from Flick/Code/Common/Extensions/Foundation/DateFormatter.swift rename to Core/Common/Sources/Extensions/Foundation/DateFormatter.swift index c38fc77..35619a5 100644 --- a/Flick/Code/Common/Extensions/Foundation/DateFormatter.swift +++ b/Core/Common/Sources/Extensions/Foundation/DateFormatter.swift @@ -8,7 +8,7 @@ import Foundation -extension DateFormatter { +public extension DateFormatter { static var customIso8601ShortFromServer: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" diff --git a/Flick/Code/Common/Extensions/Foundation/Int.swift b/Core/Common/Sources/Extensions/Foundation/Int.swift similarity index 94% rename from Flick/Code/Common/Extensions/Foundation/Int.swift rename to Core/Common/Sources/Extensions/Foundation/Int.swift index 768dc80..0684c58 100644 --- a/Flick/Code/Common/Extensions/Foundation/Int.swift +++ b/Core/Common/Sources/Extensions/Foundation/Int.swift @@ -8,7 +8,7 @@ import Foundation -extension Int { +public extension Int { var asAmountOfMoney: String { guard let amountOfMoney = NumberFormatter.amountOfMoney.string(from: NSNumber(value: self)), self > 0 else { return "-" diff --git a/Flick/Code/Common/Extensions/Foundation/NumberFormatter.swift b/Core/Common/Sources/Extensions/Foundation/NumberFormatter.swift similarity index 91% rename from Flick/Code/Common/Extensions/Foundation/NumberFormatter.swift rename to Core/Common/Sources/Extensions/Foundation/NumberFormatter.swift index 1d0db04..e588731 100644 --- a/Flick/Code/Common/Extensions/Foundation/NumberFormatter.swift +++ b/Core/Common/Sources/Extensions/Foundation/NumberFormatter.swift @@ -8,7 +8,7 @@ import Foundation -extension NumberFormatter { +public extension NumberFormatter { static var amountOfMoney: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal diff --git a/Flick/Code/Common/Extensions/Foundation/UIApplication+.swift b/Core/Common/Sources/Extensions/Foundation/UIApplication+.swift similarity index 93% rename from Flick/Code/Common/Extensions/Foundation/UIApplication+.swift rename to Core/Common/Sources/Extensions/Foundation/UIApplication+.swift index 861d604..c9aae9b 100644 --- a/Flick/Code/Common/Extensions/Foundation/UIApplication+.swift +++ b/Core/Common/Sources/Extensions/Foundation/UIApplication+.swift @@ -9,7 +9,7 @@ import StoreKit import UIKit -extension UIApplication { +public extension UIApplication { func requestReview() { DispatchQueue.main.async { if let scene = self.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { diff --git a/Flick/Code/Common/Extensions/NWPathMonitor+Publisher.swift b/Core/Common/Sources/Extensions/NWPathMonitor+Publisher.swift similarity index 81% rename from Flick/Code/Common/Extensions/NWPathMonitor+Publisher.swift rename to Core/Common/Sources/Extensions/NWPathMonitor+Publisher.swift index dd13be9..a3cd7e3 100644 --- a/Flick/Code/Common/Extensions/NWPathMonitor+Publisher.swift +++ b/Core/Common/Sources/Extensions/NWPathMonitor+Publisher.swift @@ -10,13 +10,13 @@ import Combine import Foundation import Network -extension NWPathMonitor { +public extension NWPathMonitor { final class NetworkStatusSubscription: Subscription where S.Input == NWPath.Status { private let subscriber: S? private let monitor: NWPathMonitor private let queue: DispatchQueue - init( + public init( subscriber: S, monitor: NWPathMonitor, queue: DispatchQueue @@ -26,7 +26,7 @@ extension NWPathMonitor { self.queue = queue } - func request(_: Subscribers.Demand) { + public func request(_: Subscribers.Demand) { monitor.pathUpdateHandler = { [weak self] path in _ = self?.subscriber?.receive(path.status) } @@ -34,7 +34,7 @@ extension NWPathMonitor { monitor.start(queue: queue) } - func cancel() { + public func cancel() { monitor.cancel() } } @@ -42,10 +42,10 @@ extension NWPathMonitor { // MARK: - NWPathMonitor Publisher -extension NWPathMonitor { +public extension NWPathMonitor { struct NetworkStatusPublisher: Publisher { - typealias Output = NWPath.Status - typealias Failure = Never + public typealias Output = NWPath.Status + public typealias Failure = Never private let monitor: NWPathMonitor private let queue: DispatchQueue @@ -55,7 +55,7 @@ extension NWPathMonitor { self.queue = queue } - func receive(subscriber: S) where S: Subscriber, Never == S.Failure, NWPath.Status == S.Input { + public func receive(subscriber: S) where S: Subscriber, Never == S.Failure, NWPath.Status == S.Input { let subscription = NetworkStatusSubscription( subscriber: subscriber, monitor: monitor, diff --git a/Flick/Code/Common/Extensions/UI/View+RedactedMode.swift b/Core/Common/Sources/Extensions/UI/View+RedactedMode.swift similarity index 83% rename from Flick/Code/Common/Extensions/UI/View+RedactedMode.swift rename to Core/Common/Sources/Extensions/UI/View+RedactedMode.swift index c93781c..6be9eab 100644 --- a/Flick/Code/Common/Extensions/UI/View+RedactedMode.swift +++ b/Core/Common/Sources/Extensions/UI/View+RedactedMode.swift @@ -10,7 +10,7 @@ import DesignSystem import SwiftUI import SwiftUI_Kit -extension View { +public extension View { func animatedRedacted(_ isActive: Bool) -> some View { modifier( AnimatedRedactedModifier( @@ -26,18 +26,18 @@ extension View { } } -struct IsRedactedKey: EnvironmentKey { - static let defaultValue = false +public struct IsRedactedKey: EnvironmentKey { + public static let defaultValue = false } -extension EnvironmentValues { +public extension EnvironmentValues { var isRedacted: Bool { get { self[IsRedactedKey.self] } set { self[IsRedactedKey.self] = newValue } } } -extension View { +public extension View { func isRedacted(_ isRedacted: Bool) -> some View { environment(\.isRedacted, isRedacted) } diff --git a/Flick/Code/Common/Extensions/UI/View+WidthKey.swift b/Core/Common/Sources/Extensions/UI/View+WidthKey.swift similarity index 88% rename from Flick/Code/Common/Extensions/UI/View+WidthKey.swift rename to Core/Common/Sources/Extensions/UI/View+WidthKey.swift index 16ade64..e61c8b9 100644 --- a/Flick/Code/Common/Extensions/UI/View+WidthKey.swift +++ b/Core/Common/Sources/Extensions/UI/View+WidthKey.swift @@ -8,7 +8,7 @@ import SwiftUI -extension View { +public extension View { func width(_ width: CGFloat) -> some View { environment(\.width, width) } @@ -18,7 +18,7 @@ private struct WidthKey: EnvironmentKey { static let defaultValue: CGFloat = 0 } -extension EnvironmentValues { +public extension EnvironmentValues { var width: CGFloat { get { self[WidthKey.self] } set { self[WidthKey.self] = newValue } diff --git a/Flick/Code/Common/Extensions/UI/View.swift b/Core/Common/Sources/Extensions/UI/View.swift similarity index 95% rename from Flick/Code/Common/Extensions/UI/View.swift rename to Core/Common/Sources/Extensions/UI/View.swift index f2c9d3d..8ac59b3 100644 --- a/Flick/Code/Common/Extensions/UI/View.swift +++ b/Core/Common/Sources/Extensions/UI/View.swift @@ -10,7 +10,7 @@ import SwiftUI import SwiftUI_Kit import UDF -extension View { +public extension View { func customNavigationTitle(_ title: String) -> some View { toolbar { ToolbarItem(placement: .principal) { diff --git a/Core/Common/Sources/MockRouter.swift b/Core/Common/Sources/MockRouter.swift new file mode 100644 index 0000000..206aadf --- /dev/null +++ b/Core/Common/Sources/MockRouter.swift @@ -0,0 +1,17 @@ +// +// MockRouter.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import UDF +import SwiftUI + +public struct MockRouter: Routing { + public init() {} + + public func view(for route: Route) -> some View { + return EmptyView() + } +} diff --git a/Flick/Code/Common/Presenters/TabBarItemPresenter.swift b/Core/Common/Sources/Presenters/TabBarItemPresenter.swift similarity index 82% rename from Flick/Code/Common/Presenters/TabBarItemPresenter.swift rename to Core/Common/Sources/Presenters/TabBarItemPresenter.swift index 3df268e..5a9a826 100644 --- a/Flick/Code/Common/Presenters/TabBarItemPresenter.swift +++ b/Core/Common/Sources/Presenters/TabBarItemPresenter.swift @@ -8,16 +8,16 @@ import SwiftUI -struct TabBarItemPresenter { +public struct TabBarItemPresenter { private let tabBarItem: TabBarItem private let isSelected: Bool - init(item: TabBarItem, isSelected: Bool) { + public init(item: TabBarItem, isSelected: Bool) { tabBarItem = item self.isSelected = isSelected } - var image: Image { + public var image: Image { switch tabBarItem { case .home: isSelected ? .videoPlayFill : .videoPlay @@ -32,7 +32,7 @@ struct TabBarItemPresenter { } } - var foregroundColor: Color { + public var foregroundColor: Color { isSelected ? .flMainPink : .flPink60 } } diff --git a/Flick/Code/Common/PropertyWrappers/StorageKey.swift b/Core/Common/Sources/PropertyWrappers/StorageKey.swift similarity index 86% rename from Flick/Code/Common/PropertyWrappers/StorageKey.swift rename to Core/Common/Sources/PropertyWrappers/StorageKey.swift index 85fec24..836ddc8 100644 --- a/Flick/Code/Common/PropertyWrappers/StorageKey.swift +++ b/Core/Common/Sources/PropertyWrappers/StorageKey.swift @@ -8,6 +8,6 @@ import Foundation -enum StorageKey: String { +public enum StorageKey: String { case isNeedToPresentOnboarding } diff --git a/Core/Common/Sources/RouteDestinationBuilder.swift b/Core/Common/Sources/RouteDestinationBuilder.swift new file mode 100644 index 0000000..c20b7aa --- /dev/null +++ b/Core/Common/Sources/RouteDestinationBuilder.swift @@ -0,0 +1,27 @@ +// +// RouteDestinationBuilder.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import SwiftUI +import UDF + +public struct DestinationBuilder { + private var destination: (Value) -> any View + + public init() { + self.destination = { _ in EmptyView() } + } + + public init(@ViewBuilder destination: @escaping (Value) -> any View) { + self.destination = destination + } + + @ViewBuilder + public func view(for value: Value) -> some View { + AnyView(destination(value)) + } +} diff --git a/Flick/Code/Common/Services/StickyScrollService.swift b/Core/Common/Sources/Services/StickyScrollService.swift similarity index 61% rename from Flick/Code/Common/Services/StickyScrollService.swift rename to Core/Common/Sources/Services/StickyScrollService.swift index a6dc0f4..eb3c19b 100644 --- a/Flick/Code/Common/Services/StickyScrollService.swift +++ b/Core/Common/Sources/Services/StickyScrollService.swift @@ -10,18 +10,16 @@ import Combine import Foundation import SwiftUI -final class StickyScrollService: NSObject { - let currentValueSubject = PassthroughSubject() -} - -extension StickyScrollService: StickyScrollProtocol { - func updateIndex(_ index: Int) { +public final class StickyScrollService: NSObject, StickyScrollProtocol { + public let currentValueSubject = PassthroughSubject() + + public func updateIndex(_ index: Int) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.currentValueSubject.send(index) } } } -protocol StickyScrollProtocol { +public protocol StickyScrollProtocol { func updateIndex(_ index: Int) } diff --git a/Flick/Code/Common/CustomViews/CastCardView.swift b/Core/CustomViews/Sources/CastCardView.swift similarity index 70% rename from Flick/Code/Common/CustomViews/CastCardView.swift rename to Core/CustomViews/Sources/CastCardView.swift index 29a3387..0360082 100644 --- a/Flick/Code/Common/CustomViews/CastCardView.swift +++ b/Core/CustomViews/Sources/CastCardView.swift @@ -7,22 +7,32 @@ // import SwiftUI +import Models -struct CastCardView: View { +public struct CastCardView: View { @Environment(\.isRedacted) var isRedacted let cast: Cast let size: CGSize var lineLimit: Int = 2 + var imageView: () -> IV + + public init( + cast: Cast, + size: CGSize, + @ViewBuilder imageView: @escaping () -> IV, + lineLimit: Int = 2 + ) { + self.cast = cast + self.size = size + self.lineLimit = lineLimit + self.imageView = imageView + } - var body: some View { + public var body: some View { VStack(spacing: 12) { Group { if let profilePath = cast.profilePath { - ImageContainer( - size: size, - path: profilePath, - type: .profile - ) + imageView() } else { Color .flSecondary @@ -54,6 +64,7 @@ struct CastCardView: View { #Preview { CastCardView( cast: .fakeItem(), - size: .init(width: 104, height: 129) + size: .init(width: 104, height: 129), + imageView: { EmptyView() } ) } diff --git a/Flick/Code/Common/CustomViews/ContentToggle.swift b/Core/CustomViews/Sources/ContentToggle.swift similarity index 87% rename from Flick/Code/Common/CustomViews/ContentToggle.swift rename to Core/CustomViews/Sources/ContentToggle.swift index e8c7cfb..2a2f922 100644 --- a/Flick/Code/Common/CustomViews/ContentToggle.swift +++ b/Core/CustomViews/Sources/ContentToggle.swift @@ -8,13 +8,17 @@ import Localizations import SwiftUI +import Models -struct ContentToggle: View { +public struct ContentToggle: View { @Binding var contentType: ContentType - @Namespace private var namespace + + public init(contentType: Binding) { + self._contentType = contentType + } - var body: some View { + public var body: some View { HStack { Group { contentTypeButton(.movie, isSelected: contentType == .movie) diff --git a/Flick/Code/Common/CustomViews/HomeCardView.swift b/Core/CustomViews/Sources/HomeCardView.swift similarity index 68% rename from Flick/Code/Common/CustomViews/HomeCardView.swift rename to Core/CustomViews/Sources/HomeCardView.swift index 3c74893..f6013ac 100644 --- a/Flick/Code/Common/CustomViews/HomeCardView.swift +++ b/Core/CustomViews/Sources/HomeCardView.swift @@ -7,20 +7,37 @@ // import SwiftUI +import Common +import Models -struct HomeCardView: View { +public struct HomeCardView: View { @Environment(\.isRedacted) var isRedacted var item: any Item var genres: String var style: ItemSizeStyle = .default var textOpacity: CGFloat = 1 + var imageView: ImageView + + public init( + item: any Item, + genres: String, + imageView: ImageView, + style: ItemSizeStyle = .default, + textOpacity: CGFloat = 1, + ) { + self.item = item + self.genres = genres + self.style = style + self.textOpacity = textOpacity + self.imageView = imageView + } - var body: some View { + public var body: some View { VStack(spacing: style.isMain ? 12 : 8) { PosterImageView( - posterPath: item.posterPath, year: item.year, rating: item.rating, + imageView: imageView, style: style ) @@ -47,6 +64,7 @@ struct HomeCardView: View { #Preview { HomeCardView( item: Movie.fakeItem(), - genres: "" + genres: "", + imageView: EmptyView() ) } diff --git a/Flick/Code/Common/CustomViews/MainSectionScrollView.swift b/Core/CustomViews/Sources/MainSectionScrollView.swift similarity index 77% rename from Flick/Code/Common/CustomViews/MainSectionScrollView.swift rename to Core/CustomViews/Sources/MainSectionScrollView.swift index f06e46a..92d8a3a 100644 --- a/Flick/Code/Common/CustomViews/MainSectionScrollView.swift +++ b/Core/CustomViews/Sources/MainSectionScrollView.swift @@ -10,11 +10,15 @@ import Combine import DesignSystem import SwiftUI import UDF +import Models +import Common -struct MainSectionScrollView: View { +public struct MainSectionScrollView: View { var items: [any Item] var genresByItem: (any Item) -> String var navigateToItemDetails: (any Item) -> Void + var backgroundImage: (_ size: CGSize, _ path: String?) -> BackgroundImage + var cardImage: (_ item: any Item) -> CardImage @State private var midItemIndex: Int = 0 @State private var scale: [Int: CGFloat] = [:] @@ -28,8 +32,22 @@ struct MainSectionScrollView: View { .debounce(for: 0.1, scheduler: RunLoop.main) .eraseToAnyPublisher() } + + public init( + items: [any Item], + genresByItem: @escaping (any Item) -> String, + navigateToItemDetails: @escaping (any Item) -> Void, + @ViewBuilder backgroundImage: @escaping (_ size: CGSize, _ path: String?) -> BackgroundImage, + @ViewBuilder cardImage: @escaping (_ item: any Item) -> CardImage, + ) { + self.items = items + self.genresByItem = genresByItem + self.navigateToItemDetails = navigateToItemDetails + self.backgroundImage = backgroundImage + self.cardImage = cardImage + } - var body: some View { + public var body: some View { GeometryReader { geometry in let padding = abs((geometry.size.width - 202) / 2) ScrollViewReader { proxy in @@ -61,11 +79,9 @@ struct MainSectionScrollView: View { .background( ZStack { LinearGradient.primaryBackground - ImageContainer( - size: .init(width: geometry.size.width * 2, height: geometry.size.height * 2), - path: items[safeIndex: midItemIndex]?.backdropPath, - type: .backdrop, - isLoaderPresented: false + backgroundImage( + CGSize(width: geometry.size.width * 2, height: geometry.size.height * 2), + items[safeIndex: midItemIndex]?.backdropPath ) .frame(geometry.size) .clipShape(Rectangle()) @@ -85,6 +101,7 @@ private extension MainSectionScrollView { HomeCardView( item: item, genres: genresByItem(item), + imageView: cardImage(item), style: .main, textOpacity: opacity[index] ?? 1 ) @@ -126,6 +143,12 @@ struct OffsetPreferenceKey: PreferenceKey { MainSectionScrollView( items: Movie.fakeItems(), genresByItem: { _ in "Fake genre" }, - navigateToItemDetails: { _ in } + navigateToItemDetails: { _ in }, + backgroundImage: { _, _ in + EmptyView() + }, + cardImage: { _ in + EmptyView() + } ) } diff --git a/Flick/Code/Common/CustomViews/PosterImageView.swift b/Core/CustomViews/Sources/PosterImageView.swift similarity index 58% rename from Flick/Code/Common/CustomViews/PosterImageView.swift rename to Core/CustomViews/Sources/PosterImageView.swift index 5f32c70..f9c67c2 100644 --- a/Flick/Code/Common/CustomViews/PosterImageView.swift +++ b/Core/CustomViews/Sources/PosterImageView.swift @@ -8,23 +8,33 @@ import SDWebImageSwiftUI import SwiftUI +import Common -struct PosterImageView: View { +public struct PosterImageView: View { @Environment(\.isRedacted) var isRedacted - var posterPath: String? var year: String var rating: Int var style: ItemSizeStyle = .default + var imageView: ImageView + + public init( + year: String, + rating: Int, + imageView: ImageView, + style: ItemSizeStyle = .default, + ) { + self.year = year + self.rating = rating + self.imageView = imageView + self.style = style + } - var body: some View { - ImageContainer( - size: style.coverSize, - path: posterPath - ) - .frame(width: style.coverSize.width, height: style.coverSize.height) - .overlay(cardOverlayView, alignment: .bottom) - .animatedRedacted(isRedacted) - .clipShape(RoundedRectangle(cornerRadius: 20)) + public var body: some View { + imageView + .frame(width: style.coverSize.width, height: style.coverSize.height) + .overlay(cardOverlayView, alignment: .bottom) + .animatedRedacted(isRedacted) + .clipShape(RoundedRectangle(cornerRadius: 20)) } var cardOverlayView: some View { @@ -49,8 +59,8 @@ struct PosterImageView: View { #Preview { PosterImageView( - posterPath: "/t6HIqrRAclMCA60NsSmeqe9RmNV.jpg", year: Date.testItem.asYearString, - rating: 63 + rating: 63, + imageView: EmptyView() ) } diff --git a/Flick/Code/Common/CustomViews/RatingCircle.swift b/Core/CustomViews/Sources/RatingCircle.swift similarity index 61% rename from Flick/Code/Common/CustomViews/RatingCircle.swift rename to Core/CustomViews/Sources/RatingCircle.swift index 53f7103..6779bd1 100644 --- a/Flick/Code/Common/CustomViews/RatingCircle.swift +++ b/Core/CustomViews/Sources/RatingCircle.swift @@ -2,19 +2,31 @@ // RatingCircle.swift // Flick // -// Created by Alexander Sharko on 18.01.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. +// Created by Bogdan Petkanych on 17.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. // - import SwiftUI +import SwiftUI_Kit -struct RatingCircle: View { +public struct RatingCircle: View { var value: String var strokeColor: Color var strokeWidth: CGFloat = 2 var backgroundColor: Color = .clear + + public init( + value: String, + strokeColor: Color, + strokeWidth: CGFloat = 2, + backgroundColor: Color = .clear + ) { + self.value = value + self.strokeColor = strokeColor + self.strokeWidth = strokeWidth + self.backgroundColor = backgroundColor + } - var body: some View { + public var body: some View { Circle() .fill(backgroundColor) .overlay( diff --git a/Flick/Code/Common/CustomViews/Review/ReviewHeaderView.swift b/Core/CustomViews/Sources/ReviewHeaderView.swift similarity index 63% rename from Flick/Code/Common/CustomViews/Review/ReviewHeaderView.swift rename to Core/CustomViews/Sources/ReviewHeaderView.swift index 8d69daf..41bd07d 100644 --- a/Flick/Code/Common/CustomViews/Review/ReviewHeaderView.swift +++ b/Core/CustomViews/Sources/ReviewHeaderView.swift @@ -8,21 +8,32 @@ import Localizations import SwiftUI +import Models +import DesignSystem -struct ReviewHeaderView: View { +public struct ReviewHeaderView: View { let review: Review - let size = CGSize(width: 48, height: 48) - var placeholderColor: Color = .flMain + let size: CGSize + var placeholderColor: Color + var imageView: ImageView + + public init( + review: Review, + size: CGSize = CGSize(width: 48, height: 48), + placeholderColor: Color = .flMain, + imageView: ImageView = EmptyView() + ) { + self.review = review + self.size = size + self.placeholderColor = placeholderColor + self.imageView = imageView + } - var body: some View { + public var body: some View { HStack(spacing: 10) { Group { if let path = review.authorDetails.avatarPath { - ImageContainer( - size: size, - path: path, - type: .profile - ) + imageView } else { placeholderColor .overlay( @@ -51,5 +62,5 @@ struct ReviewHeaderView: View { // MARK: - Preview #Preview { - ReviewHeaderView(review: .fakeItem()) + ReviewHeaderView(review: .fakeItem()) } diff --git a/Flick/Code/Common/CustomViews/Review/ReviewRatingView.swift b/Core/CustomViews/Sources/ReviewRatingView.swift similarity index 79% rename from Flick/Code/Common/CustomViews/Review/ReviewRatingView.swift rename to Core/CustomViews/Sources/ReviewRatingView.swift index 81f8f10..afce9df 100644 --- a/Flick/Code/Common/CustomViews/Review/ReviewRatingView.swift +++ b/Core/CustomViews/Sources/ReviewRatingView.swift @@ -9,10 +9,14 @@ import DesignSystem import SwiftUI -struct ReviewRatingView: View { - let rating: Int +public struct ReviewRatingView: View { + public let rating: Int + + public init(rating: Int) { + self.rating = rating + } - var body: some View { + public var body: some View { HStack(spacing: 6) { Image.starFill .template diff --git a/Flick/Code/Common/CustomViews/Review/ReviewRow.swift b/Core/CustomViews/Sources/ReviewRow.swift similarity index 63% rename from Flick/Code/Common/CustomViews/Review/ReviewRow.swift rename to Core/CustomViews/Sources/ReviewRow.swift index 961df5d..ccb59ed 100644 --- a/Flick/Code/Common/CustomViews/Review/ReviewRow.swift +++ b/Core/CustomViews/Sources/ReviewRow.swift @@ -7,13 +7,20 @@ // import SwiftUI +import Models -struct ReviewRow: View { +public struct ReviewRow: View { let review: Review + var imageView: ImageView + + public init(review: Review, imageView: ImageView) { + self.review = review + self.imageView = imageView + } - var body: some View { + public var body: some View { VStack(alignment: .leading, spacing: 10) { - ReviewHeaderView(review: review) + ReviewHeaderView(review: review, imageView: imageView) Text(review.content) .customFont(.body) @@ -32,5 +39,5 @@ struct ReviewRow: View { // MARK: - Preview #Preview { - ReviewRow(review: .fakeItem()) + ReviewRow(review: .fakeItem(), imageView: EmptyView()) } diff --git a/Flick/Code/Common/CustomViews/SectionHeaderView.swift b/Core/CustomViews/Sources/SectionHeaderView.swift similarity index 82% rename from Flick/Code/Common/CustomViews/SectionHeaderView.swift rename to Core/CustomViews/Sources/SectionHeaderView.swift index db21646..0d469ac 100644 --- a/Flick/Code/Common/CustomViews/SectionHeaderView.swift +++ b/Core/CustomViews/Sources/SectionHeaderView.swift @@ -9,11 +9,16 @@ import Localizations import SwiftUI -struct SectionHeaderView: View { +public struct SectionHeaderView: View { var title: String var seeAllAction: () -> Void + + public init(title: String, seeAllAction: @escaping () -> Void) { + self.title = title + self.seeAllAction = seeAllAction + } - var body: some View { + public var body: some View { HStack { Text(title) .customFont(.headline) diff --git a/Flick/Code/Common/CustomViews/SelectiveItemsList.swift b/Core/CustomViews/Sources/SelectiveItemsList.swift similarity index 86% rename from Flick/Code/Common/CustomViews/SelectiveItemsList.swift rename to Core/CustomViews/Sources/SelectiveItemsList.swift index 2464e9e..a63d0ff 100644 --- a/Flick/Code/Common/CustomViews/SelectiveItemsList.swift +++ b/Core/CustomViews/Sources/SelectiveItemsList.swift @@ -8,29 +8,33 @@ import SwiftUI import UDF +import Models -struct SelectiveItemsList: View { +public struct SelectiveItemsList: View { var items: [any Item] var genreById: (Genre.ID) -> Genre? var loadMoreAction: Command var isRedacted: Bool var header: () -> Header + var imageView: (_ path: String?) -> ImageView - init( + public init( items: [any Item], genreById: @escaping (Genre.ID) -> Genre?, loadMoreAction: @escaping Command, isRedacted: Bool, - @ViewBuilder header: @escaping () -> Header + @ViewBuilder header: @escaping () -> Header, + @ViewBuilder imageView: @escaping (_ path: String?) -> ImageView, ) { self.items = items self.genreById = genreById self.loadMoreAction = loadMoreAction self.isRedacted = isRedacted self.header = header + self.imageView = imageView } - var body: some View { + public var body: some View { List { Group { header() @@ -59,9 +63,9 @@ private extension SelectiveItemsList { func itemRow(item: any Item) -> some View { HStack(spacing: 16) { PosterImageView( - posterPath: item.posterPath, year: item.year, - rating: item.rating + rating: item.rating, + imageView: imageView(item.posterPath) ) .overlay(alignment: .topLeading) { heartButton @@ -125,6 +129,7 @@ private extension SelectiveItemsList { genreById: { _ in .testItem() }, loadMoreAction: {}, isRedacted: true, - header: { EmptyView() } + header: { EmptyView() }, + imageView: { _ in EmptyView() } ) } diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png b/Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png rename to Core/DesignSystem/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png diff --git a/DesignSystem/Sources/DesignSystem/ButtonStyle/CircleButtonStyle.swift b/Core/DesignSystem/Sources/ButtonStyle/CircleButtonStyle.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/ButtonStyle/CircleButtonStyle.swift rename to Core/DesignSystem/Sources/ButtonStyle/CircleButtonStyle.swift diff --git a/DesignSystem/Sources/DesignSystem/ButtonStyle/PrimaryButtonStyle.swift b/Core/DesignSystem/Sources/ButtonStyle/PrimaryButtonStyle.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/ButtonStyle/PrimaryButtonStyle.swift rename to Core/DesignSystem/Sources/ButtonStyle/PrimaryButtonStyle.swift diff --git a/DesignSystem/Sources/DesignSystem/ButtonStyle/ScaledButtonStyle.swift b/Core/DesignSystem/Sources/ButtonStyle/ScaledButtonStyle.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/ButtonStyle/ScaledButtonStyle.swift rename to Core/DesignSystem/Sources/ButtonStyle/ScaledButtonStyle.swift diff --git a/DesignSystem/Sources/DesignSystem/Extensions/Color.swift b/Core/DesignSystem/Sources/Extensions/Color.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/Extensions/Color.swift rename to Core/DesignSystem/Sources/Extensions/Color.swift diff --git a/DesignSystem/Sources/DesignSystem/Extensions/Image.swift b/Core/DesignSystem/Sources/Extensions/Image.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/Extensions/Image.swift rename to Core/DesignSystem/Sources/Extensions/Image.swift diff --git a/DesignSystem/Sources/DesignSystem/Extensions/LinearGradient.swift b/Core/DesignSystem/Sources/Extensions/LinearGradient.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/Extensions/LinearGradient.swift rename to Core/DesignSystem/Sources/Extensions/LinearGradient.swift diff --git a/Flick/Preview Content/Preview Assets.xcassets/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/Contents.json similarity index 100% rename from Flick/Preview Content/Preview Assets.xcassets/Contents.json rename to Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/Contents.json diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json new file mode 100644 index 0000000..2183b19 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flDark.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.204", + "green" : "0.125", + "red" : "0.122" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.204", + "green" : "0.125", + "red" : "0.122" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json new file mode 100644 index 0000000..f1b4d97 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGradientMain.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.961", + "green" : "0.953", + "red" : "0.953" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.294", + "green" : "0.161", + "red" : "0.153" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json new file mode 100644 index 0000000..0135e74 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGray.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.380", + "green" : "0.349", + "red" : "0.349" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.867", + "green" : "0.827", + "red" : "0.827" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json new file mode 100644 index 0000000..0383397 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flGreen.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.298", + "green" : "0.757", + "red" : "0.247" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.298", + "green" : "0.757", + "red" : "0.247" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json new file mode 100644 index 0000000..23f0c0c --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMain.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.204", + "green" : "0.125", + "red" : "0.122" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json new file mode 100644 index 0000000..06fed43 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flMainPink.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.471", + "green" : "0.290", + "red" : "0.988" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.471", + "green" : "0.290", + "red" : "0.988" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json new file mode 100644 index 0000000..cb9ad5a --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardBlue.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.761", + "red" : "0.337" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.761", + "red" : "0.337" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json new file mode 100644 index 0000000..ecc43a5 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardOrange.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.349", + "green" : "0.467", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.349", + "green" : "0.467", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json new file mode 100644 index 0000000..b7b3f33 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flOnboardYellow.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.192", + "green" : "0.773", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.192", + "green" : "0.773", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json new file mode 100644 index 0000000..49849ce --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink10.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.933", + "green" : "0.914", + "red" : "0.984" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.278", + "green" : "0.165", + "red" : "0.227" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json new file mode 100644 index 0000000..08deae2 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink20.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.878", + "green" : "0.839", + "red" : "0.980" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.294", + "green" : "0.173", + "red" : "0.306" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json new file mode 100644 index 0000000..e27fbec --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink40.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.776", + "green" : "0.702", + "red" : "0.984" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.337", + "green" : "0.200", + "red" : "0.475" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json new file mode 100644 index 0000000..d69354d --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink60.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.675", + "green" : "0.565", + "red" : "0.984" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.376", + "green" : "0.227", + "red" : "0.647" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json new file mode 100644 index 0000000..e4d084c --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPink80.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.573", + "green" : "0.427", + "red" : "0.984" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.424", + "green" : "0.259", + "red" : "0.816" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json new file mode 100644 index 0000000..c7a8cba --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flPurpleLight.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "205", + "green" : "174", + "red" : "173" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xA6", + "green" : "0x75", + "red" : "0x72" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json new file mode 100644 index 0000000..ef0396f --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flRedacted.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json new file mode 100644 index 0000000..81e4e88 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSecondary.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.965", + "green" : "0.965", + "red" : "0.965" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.231", + "green" : "0.165", + "red" : "0.161" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json new file mode 100644 index 0000000..85a14b7 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flStarYellow.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.145", + "green" : "0.710", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.145", + "green" : "0.710", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json new file mode 100644 index 0000000..805e831 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemBlue.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.478", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.478", + "red" : "0.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json new file mode 100644 index 0000000..4eb43a8 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flSystemRed.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.153", + "green" : "0.071", + "red" : "0.894" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.153", + "green" : "0.071", + "red" : "0.894" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json new file mode 100644 index 0000000..b8297e3 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flText.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.204", + "green" : "0.125", + "red" : "0.122" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json new file mode 100644 index 0000000..22c4bb0 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Colors/flWhite.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json new file mode 100644 index 0000000..78104a1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "arrow-down.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "arrow-down@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "arrow-down@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png new file mode 100644 index 0000000..aad229e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png new file mode 100644 index 0000000..416e0b0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png new file mode 100644 index 0000000..b9fc01d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_down.imageset/arrow-down@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json new file mode 100644 index 0000000..e879996 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "arrow-left.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "arrow-left@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "arrow-left@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png new file mode 100644 index 0000000..6e518f1 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png new file mode 100644 index 0000000..ab9c1ec Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png new file mode 100644 index 0000000..a858fb4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_left.imageset/arrow-left@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json new file mode 100644 index 0000000..8f8e6a2 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "arrow-right.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "arrow-right@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "arrow-right@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png new file mode 100644 index 0000000..c2be5a5 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png new file mode 100644 index 0000000..ca21f80 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png new file mode 100644 index 0000000..4c76383 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_right.imageset/arrow-right@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json new file mode 100644 index 0000000..93ed2b1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "arrow-up.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "arrow-up@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "arrow-up@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png new file mode 100644 index 0000000..282ca6f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png new file mode 100644 index 0000000..72832db Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png new file mode 100644 index 0000000..9706de9 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/arrow_up.imageset/arrow-up@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json new file mode 100644 index 0000000..628217b --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "camera.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "camera@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "camera@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera.png new file mode 100644 index 0000000..07388c7 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png new file mode 100644 index 0000000..0b498e4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png new file mode 100644 index 0000000..54e69ab Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera.imageset/camera@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json new file mode 100644 index 0000000..628217b --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "camera.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "camera@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "camera@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png new file mode 100644 index 0000000..202a011 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png new file mode 100644 index 0000000..2fe59d4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png new file mode 100644 index 0000000..5edd75c Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/camera_normal.imageset/camera@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/Contents.json new file mode 100644 index 0000000..940a6d1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "close.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "close@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "close@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close.png new file mode 100644 index 0000000..235229e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png new file mode 100644 index 0000000..f82df6a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png new file mode 100644 index 0000000..47d1910 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close.imageset/close@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json new file mode 100644 index 0000000..940a6d1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "close.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "close@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "close@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png new file mode 100644 index 0000000..b2e6a4a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png new file mode 100644 index 0000000..31801a8 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png new file mode 100644 index 0000000..059069a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/close_normal.imageset/close@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json new file mode 100644 index 0000000..3719cf6 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "edit.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "edit@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "edit@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit.png new file mode 100644 index 0000000..655e34e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png new file mode 100644 index 0000000..59fd30a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png new file mode 100644 index 0000000..ba2d184 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/edit.imageset/edit@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json new file mode 100644 index 0000000..6cd7cfd --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "eye.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "eye@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "eye@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye.png new file mode 100644 index 0000000..1fbc152 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png new file mode 100644 index 0000000..85ecce1 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png new file mode 100644 index 0000000..9d6981d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye.imageset/eye@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json new file mode 100644 index 0000000..1cd90a7 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "eye-slash.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "eye-slash@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "eye-slash@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png new file mode 100644 index 0000000..7ada71d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png new file mode 100644 index 0000000..f0430a8 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png new file mode 100644 index 0000000..2af4e8b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/eye_slash.imageset/eye-slash@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json new file mode 100644 index 0000000..9added4 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "filter.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "filter@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "filter@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter.png new file mode 100644 index 0000000..e90a5fc Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png new file mode 100644 index 0000000..1b2369a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png new file mode 100644 index 0000000..d10060b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter.imageset/filter@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json new file mode 100644 index 0000000..1258ad2 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "applied filter.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "applied filter@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "applied filter@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png new file mode 100644 index 0000000..4ea0e6f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png new file mode 100644 index 0000000..962ec11 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png new file mode 100644 index 0000000..277d40c Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/filter_applied.imageset/applied filter@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json new file mode 100644 index 0000000..48896be --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "Flick it.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Flick it 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Flick it@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Flick it@2x 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Flick it@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Flick it@3x 1.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png new file mode 100644 index 0000000..c7e202f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png new file mode 100644 index 0000000..781ad8b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png new file mode 100644 index 0000000..f523ab3 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png new file mode 100644 index 0000000..efe0626 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png new file mode 100644 index 0000000..59846d4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png new file mode 100644 index 0000000..2664616 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/flick.imageset/Flick it@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json new file mode 100644 index 0000000..b34c25e --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "frame.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame.png new file mode 100644 index 0000000..126e917 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png new file mode 100644 index 0000000..68ce253 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png new file mode 100644 index 0000000..8d655af Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/frame.imageset/frame@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/Contents.json new file mode 100644 index 0000000..0a6d4fb --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "global.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "global@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "global@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global.png new file mode 100644 index 0000000..4187ec3 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png new file mode 100644 index 0000000..f9cc619 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png new file mode 100644 index 0000000..6d50666 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/global.imageset/global@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json new file mode 100644 index 0000000..0a38ba1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heart.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heart@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heart@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart.png new file mode 100644 index 0000000..e6ce762 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png new file mode 100644 index 0000000..ca7ed48 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png new file mode 100644 index 0000000..9a648fd Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart.imageset/heart@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json new file mode 100644 index 0000000..0a38ba1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heart.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heart@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heart@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png new file mode 100644 index 0000000..469acbd Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png new file mode 100644 index 0000000..7230667 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png new file mode 100644 index 0000000..f436b41 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_fill.imageset/heart@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json new file mode 100644 index 0000000..0a38ba1 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "heart.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "heart@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "heart@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png new file mode 100644 index 0000000..973fc14 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png new file mode 100644 index 0000000..b075054 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png new file mode 100644 index 0000000..e92e142 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/heart_normal.imageset/heart@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/Contents.json new file mode 100644 index 0000000..e5abe94 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "location.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "location@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "location@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location.png new file mode 100644 index 0000000..276ccca Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png new file mode 100644 index 0000000..41ee5f0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png new file mode 100644 index 0000000..22e0d00 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/location.imageset/location@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json new file mode 100644 index 0000000..f03e824 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "lock.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "lock@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "lock@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock.png new file mode 100644 index 0000000..70d9b58 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png new file mode 100644 index 0000000..a183127 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png new file mode 100644 index 0000000..5ba12ce Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/lock.imageset/lock@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json new file mode 100644 index 0000000..cfb04dc --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "logout.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "logout@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "logout@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png new file mode 100644 index 0000000..389e33b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png new file mode 100644 index 0000000..f0065e5 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png new file mode 100644 index 0000000..0543d1e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_right.imageset/logout@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json new file mode 100644 index 0000000..cfb04dc --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "logout.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "logout@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "logout@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png new file mode 100644 index 0000000..e85ec83 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png new file mode 100644 index 0000000..af2d062 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png new file mode 100644 index 0000000..694040f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/logout_up.imageset/logout@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json new file mode 100644 index 0000000..6d33df9 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "money-recive.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "money-recive@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "money-recive@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png new file mode 100644 index 0000000..2e530bd Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png new file mode 100644 index 0000000..3df9551 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png new file mode 100644 index 0000000..225da4f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_recieve.imageset/money-recive@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json new file mode 100644 index 0000000..d1ae1a9 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "money-send.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "money-send@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "money-send@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png new file mode 100644 index 0000000..88de27a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png new file mode 100644 index 0000000..5642ed6 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png new file mode 100644 index 0000000..4f59b59 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/money_send.imageset/money-send@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json new file mode 100644 index 0000000..bf2d9db --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "edit-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "edit-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "edit-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png new file mode 100644 index 0000000..6321937 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png new file mode 100644 index 0000000..1ab3e74 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png new file mode 100644 index 0000000..2ea88f8 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/pencil.imageset/edit-2@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json new file mode 100644 index 0000000..7a0710c --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video-circle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video-circle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video-circle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png new file mode 100644 index 0000000..7ad0146 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png new file mode 100644 index 0000000..45973d4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png new file mode 100644 index 0000000..b31fc61 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/play_circle.imageset/video-circle@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json new file mode 100644 index 0000000..a6bd9aa --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "receipt.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "receipt@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "receipt@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png new file mode 100644 index 0000000..11d28f4 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png new file mode 100644 index 0000000..4a7dd6a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png new file mode 100644 index 0000000..fb0d63b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/receipt.imageset/receipt@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/Contents.json new file mode 100644 index 0000000..b59c79f --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "search.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "search@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "search@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search.png new file mode 100644 index 0000000..0af209a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png new file mode 100644 index 0000000..272158d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png new file mode 100644 index 0000000..ca56e25 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search.imageset/search@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json new file mode 100644 index 0000000..b59c79f --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "search.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "search@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "search@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png new file mode 100644 index 0000000..786a3a0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png new file mode 100644 index 0000000..9b44f11 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png new file mode 100644 index 0000000..60f9cbf Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_fill.imageset/search@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json new file mode 100644 index 0000000..027f13c --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "search-normal.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "search-normal@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "search-normal@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png new file mode 100644 index 0000000..e799e80 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png new file mode 100644 index 0000000..d39e98c Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png new file mode 100644 index 0000000..ab8d43f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/search_normal.imageset/search-normal@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json new file mode 100644 index 0000000..ffbe4b3 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "sms.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "sms@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "sms@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms.png new file mode 100644 index 0000000..759eabe Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png new file mode 100644 index 0000000..c421bbe Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png new file mode 100644 index 0000000..7f48d42 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/sms.imageset/sms@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/Contents.json new file mode 100644 index 0000000..930178e --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "star.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "star@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "star@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star.png new file mode 100644 index 0000000..759164e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png new file mode 100644 index 0000000..d78bc92 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png new file mode 100644 index 0000000..17c8d15 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star.imageset/star@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json new file mode 100644 index 0000000..930178e --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "star.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "star@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "star@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png new file mode 100644 index 0000000..d13746d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png new file mode 100644 index 0000000..684af85 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png new file mode 100644 index 0000000..ba5b302 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_fill.imageset/star@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json new file mode 100644 index 0000000..930178e --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "star.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "star@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "star@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png new file mode 100644 index 0000000..9332125 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png new file mode 100644 index 0000000..428ad57 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png new file mode 100644 index 0000000..50aa1b8 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/star_normal.imageset/star@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json new file mode 100644 index 0000000..6f7534a --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "subtitle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "subtitle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "subtitle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png new file mode 100644 index 0000000..3f3532b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png new file mode 100644 index 0000000..621cd13 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png new file mode 100644 index 0000000..5eb6e7d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/subtitle.imageset/subtitle@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/Contents.json new file mode 100644 index 0000000..bea72e0 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "title.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "title@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "title@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title.png new file mode 100644 index 0000000..e8762d5 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png new file mode 100644 index 0000000..e1b3535 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png new file mode 100644 index 0000000..807641b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/title.imageset/title@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json new file mode 100644 index 0000000..fbcec31 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "device-tv.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "device-tv@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "device-tv@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png new file mode 100644 index 0000000..0fd8f93 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png new file mode 100644 index 0000000..4a1ba1e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png new file mode 100644 index 0000000..0cacf8b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/tv.imageset/device-tv@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json new file mode 100644 index 0000000..26431d4 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profile-circle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profile-circle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profile-circle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png new file mode 100644 index 0000000..4c8c1e7 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png new file mode 100644 index 0000000..a6b661a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png new file mode 100644 index 0000000..0945f06 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_circle.imageset/profile-circle@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json new file mode 100644 index 0000000..d334e39 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "user-square.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "user-square@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "user-square@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png new file mode 100644 index 0000000..415b44f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png new file mode 100644 index 0000000..2ffaa68 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png new file mode 100644 index 0000000..310321a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square.imageset/user-square@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json new file mode 100644 index 0000000..d334e39 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "user-square.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "user-square@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "user-square@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png new file mode 100644 index 0000000..c1896a2 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png new file mode 100644 index 0000000..85dfcd3 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png new file mode 100644 index 0000000..7762e02 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/user_square_fill.imageset/user-square@3x.png differ diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/Contents.json similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json rename to Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/Contents.json diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png rename to Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@2x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png rename to Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@2x.png diff --git a/DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@3x.png similarity index 100% rename from DesignSystem/Sources/DesignSystem/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png rename to Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video-play.imageset/video-play@3x.png diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/Contents.json new file mode 100644 index 0000000..bdd58fd --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video.png new file mode 100644 index 0000000..f88ba61 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png new file mode 100644 index 0000000..294795d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png new file mode 100644 index 0000000..02f90cb Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video.imageset/video@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json new file mode 100644 index 0000000..bdd58fd --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png new file mode 100644 index 0000000..95e0098 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png new file mode 100644 index 0000000..3f872b0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png new file mode 100644 index 0000000..e03e57d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_normal.imageset/video@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json new file mode 100644 index 0000000..254cb1b --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video-play.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video-play@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video-play@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png new file mode 100644 index 0000000..6625f27 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png new file mode 100644 index 0000000..f9a23bf Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png new file mode 100644 index 0000000..ca25a50 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play.imageset/video-play@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json new file mode 100644 index 0000000..254cb1b --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video-play.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video-play@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video-play@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png new file mode 100644 index 0000000..ff72437 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png new file mode 100644 index 0000000..5c4d8a0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png new file mode 100644 index 0000000..171a7e6 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_play_fill.imageset/video-play@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json new file mode 100644 index 0000000..3fa209b --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "video-vertical.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "video-vertical@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "video-vertical@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png new file mode 100644 index 0000000..96fd9f0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png new file mode 100644 index 0000000..67e2478 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png new file mode 100644 index 0000000..2e8f299 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Icons/video_vertical.imageset/video-vertical@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json new file mode 100644 index 0000000..12079ba --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "background circles.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "background circles 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "background circles@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "background circles@2x 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "background circles@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "background circles@3x 1.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png new file mode 100644 index 0000000..f516596 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png new file mode 100644 index 0000000..23b2a4d Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png new file mode 100644 index 0000000..01f5a87 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png new file mode 100644 index 0000000..0151191 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png new file mode 100644 index 0000000..ed283c5 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x 1.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png new file mode 100644 index 0000000..b087970 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/auth_circles.imageset/background circles@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json new file mode 100644 index 0000000..26431d4 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "profile-circle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "profile-circle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "profile-circle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png new file mode 100644 index 0000000..213b5ff Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png new file mode 100644 index 0000000..6332bea Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png new file mode 100644 index 0000000..95de5d5 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/cast_placeholder.imageset/profile-circle@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json new file mode 100644 index 0000000..b54d4d9 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "logo@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "logo@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png new file mode 100644 index 0000000..a6e383b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png new file mode 100644 index 0000000..a7d2b2a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png new file mode 100644 index 0000000..4764bc0 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_dark.imageset/logo@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json new file mode 100644 index 0000000..b54d4d9 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "logo@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "logo@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png new file mode 100644 index 0000000..b8aa61e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png new file mode 100644 index 0000000..475581b Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png new file mode 100644 index 0000000..692ab6f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/logo_light.imageset/logo@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json new file mode 100644 index 0000000..5c5b502 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png new file mode 100644 index 0000000..050ae21 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png new file mode 100644 index 0000000..982af16 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png new file mode 100644 index 0000000..bc9b3e3 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_first.imageset/background@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json new file mode 100644 index 0000000..1abbabf --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png new file mode 100644 index 0000000..521002f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png new file mode 100644 index 0000000..de86d45 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png new file mode 100644 index 0000000..541263f Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_fourth.imageset/Frame 2@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json new file mode 100644 index 0000000..5c5b502 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png new file mode 100644 index 0000000..c685526 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png new file mode 100644 index 0000000..fe8cc54 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png new file mode 100644 index 0000000..1261978 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_second.imageset/background@3x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json new file mode 100644 index 0000000..5c5b502 --- /dev/null +++ b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "background.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png new file mode 100644 index 0000000..575570e Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png new file mode 100644 index 0000000..109154a Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@2x.png differ diff --git a/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png new file mode 100644 index 0000000..07d68a7 Binary files /dev/null and b/Core/DesignSystem/Sources/Resources/Assets.xcassets/Images/onboarding_third.imageset/background@3x.png differ diff --git a/DesignSystem/Sources/DesignSystem/TextFields/AuthTextField.swift b/Core/DesignSystem/Sources/TextFields/AuthTextField.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/TextFields/AuthTextField.swift rename to Core/DesignSystem/Sources/TextFields/AuthTextField.swift diff --git a/DesignSystem/Sources/DesignSystem/TextFields/Debouncer.swift b/Core/DesignSystem/Sources/TextFields/Debouncer.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/TextFields/Debouncer.swift rename to Core/DesignSystem/Sources/TextFields/Debouncer.swift diff --git a/DesignSystem/Sources/DesignSystem/TextFields/SearchTextField.swift b/Core/DesignSystem/Sources/TextFields/SearchTextField.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/TextFields/SearchTextField.swift rename to Core/DesignSystem/Sources/TextFields/SearchTextField.swift diff --git a/DesignSystem/Sources/DesignSystem/ViewModifiers/CustomFont.swift b/Core/DesignSystem/Sources/ViewModifiers/CustomFont.swift similarity index 100% rename from DesignSystem/Sources/DesignSystem/ViewModifiers/CustomFont.swift rename to Core/DesignSystem/Sources/ViewModifiers/CustomFont.swift diff --git a/Localizations/.gitignore b/Core/Localizations/.gitignore similarity index 100% rename from Localizations/.gitignore rename to Core/Localizations/.gitignore diff --git a/Localizations/Sources/Localizations/Resources/en.lproj/Localizable.strings b/Core/Localizations/Resources/en.lproj/Localizable.strings similarity index 100% rename from Localizations/Sources/Localizations/Resources/en.lproj/Localizable.strings rename to Core/Localizations/Resources/en.lproj/Localizable.strings diff --git a/Localizations/Sources/Localizations/Localizations.swift b/Core/Localizations/Sources/Localizations.swift similarity index 59% rename from Localizations/Sources/Localizations/Localizations.swift rename to Core/Localizations/Sources/Localizations.swift index 08b22b8..d584e0f 100644 --- a/Localizations/Sources/Localizations/Localizations.swift +++ b/Core/Localizations/Sources/Localizations.swift @@ -1,2 +1,4 @@ // The Swift Programming Language // https://docs.swift.org/swift-book + +public let Localization = R.string.localizable diff --git a/Core/Localizations/Sources/R.generated.swift b/Core/Localizations/Sources/R.generated.swift new file mode 100644 index 0000000..ec59da8 --- /dev/null +++ b/Core/Localizations/Sources/R.generated.swift @@ -0,0 +1,502 @@ +// +// This is a generated file, do not edit! +// Generated by R.swift, see https://github.com/mac-cain13/R.swift +// + +import Foundation +import RswiftResources + +private class BundleFinder {} +public let R = _R(bundle: Bundle(for: BundleFinder.self)) + +public struct _R: Sendable { + public let bundle: Foundation.Bundle + public init(bundle: Foundation.Bundle) { + self.bundle = bundle + } + public var string: string { .init(bundle: bundle, preferredLanguages: nil, locale: nil) } + + public func string(bundle: Foundation.Bundle) -> string { + .init(bundle: bundle, preferredLanguages: nil, locale: nil) + } + public func string(locale: Foundation.Locale) -> string { + .init(bundle: bundle, preferredLanguages: nil, locale: locale) + } + public func string(preferredLanguages: [String], locale: Locale? = nil) -> string { + .init(bundle: bundle, preferredLanguages: preferredLanguages, locale: locale) + } + public func validate() throws { + + } + + public struct project: Sendable { + public let developmentRegion = "en" + } + + /// This `_R.string` struct is generated, and contains static references to 1 localization tables. + public struct string: Sendable { + public let bundle: Foundation.Bundle + public let preferredLanguages: [String]? + public let locale: Locale? + public init(bundle: Foundation.Bundle, preferredLanguages: [String]? = nil, locale: Locale? = nil) { + self.bundle = bundle + self.preferredLanguages = preferredLanguages + self.locale = locale + } + public var localizable: localizable { .init(source: .init(bundle: bundle, tableName: "Localizable", preferredLanguages: preferredLanguages, locale: locale)) } + + public func localizable(preferredLanguages: [String]) -> localizable { + .init(source: .init(bundle: bundle, tableName: "Localizable", preferredLanguages: preferredLanguages, locale: locale)) + } + + + /// This `_R.string.localizable` struct is generated, and contains static references to 63 localization keys. + public struct localizable: Sendable { + public let source: RswiftResources.StringResource.Source + public init(source: RswiftResources.StringResource.Source) { + self.source = source + } + + /// en translation: Confirm Password + /// + /// Key: auth.confirmPasswordPlaceholder + /// + /// Locales: en + public var authConfirmPasswordPlaceholder: RswiftResources.StringResource { .init(key: "auth.confirmPasswordPlaceholder", tableName: "Localizable", source: source, developmentValue: "Confirm Password", comment: nil) } + + /// en translation: Create account + /// + /// Key: auth.createAccountButtonTitle + /// + /// Locales: en + public var authCreateAccountButtonTitle: RswiftResources.StringResource { .init(key: "auth.createAccountButtonTitle", tableName: "Localizable", source: source, developmentValue: "Create account", comment: nil) } + + /// en translation: Email + /// + /// Key: auth.emailPlaceholder + /// + /// Locales: en + public var authEmailPlaceholder: RswiftResources.StringResource { .init(key: "auth.emailPlaceholder", tableName: "Localizable", source: source, developmentValue: "Email", comment: nil) } + + /// en translation: Forgot password? + /// + /// Key: auth.forgotPasswordButtonTitle + /// + /// Locales: en + public var authForgotPasswordButtonTitle: RswiftResources.StringResource { .init(key: "auth.forgotPasswordButtonTitle", tableName: "Localizable", source: source, developmentValue: "Forgot password?", comment: nil) } + + /// en translation: Flick + /// + /// Key: auth.navigationTitle + /// + /// Locales: en + public var authNavigationTitle: RswiftResources.StringResource { .init(key: "auth.navigationTitle", tableName: "Localizable", source: source, developmentValue: "Flick", comment: nil) } + + /// en translation: Password + /// + /// Key: auth.passwordPlaceholder + /// + /// Locales: en + public var authPasswordPlaceholder: RswiftResources.StringResource { .init(key: "auth.passwordPlaceholder", tableName: "Localizable", source: source, developmentValue: "Password", comment: nil) } + + /// en translation: Reset password + /// + /// Key: auth.resetPasswordButtonTitle + /// + /// Locales: en + public var authResetPasswordButtonTitle: RswiftResources.StringResource { .init(key: "auth.resetPasswordButtonTitle", tableName: "Localizable", source: source, developmentValue: "Reset password", comment: nil) } + + /// en translation: Reset password + /// + /// Key: auth.resetPasswordTitle + /// + /// Locales: en + public var authResetPasswordTitle: RswiftResources.StringResource { .init(key: "auth.resetPasswordTitle", tableName: "Localizable", source: source, developmentValue: "Reset password", comment: nil) } + + /// en translation: Save password + /// + /// Key: auth.savePasswordButtonTitle + /// + /// Locales: en + public var authSavePasswordButtonTitle: RswiftResources.StringResource { .init(key: "auth.savePasswordButtonTitle", tableName: "Localizable", source: source, developmentValue: "Save password", comment: nil) } + + /// en translation: Already have an account? + /// + /// Key: auth.signInButtonDescription + /// + /// Locales: en + public var authSignInButtonDescription: RswiftResources.StringResource { .init(key: "auth.signInButtonDescription", tableName: "Localizable", source: source, developmentValue: "Already have an account?", comment: nil) } + + /// en translation: Sign in + /// + /// Key: auth.signInButtonTitle + /// + /// Locales: en + public var authSignInButtonTitle: RswiftResources.StringResource { .init(key: "auth.signInButtonTitle", tableName: "Localizable", source: source, developmentValue: "Sign in", comment: nil) } + + /// en translation: Login to your account + /// + /// Key: auth.signInTitle + /// + /// Locales: en + public var authSignInTitle: RswiftResources.StringResource { .init(key: "auth.signInTitle", tableName: "Localizable", source: source, developmentValue: "Login to your account", comment: nil) } + + /// en translation: Don`t have an account? + /// + /// Key: auth.signUpButtonDescription + /// + /// Locales: en + public var authSignUpButtonDescription: RswiftResources.StringResource { .init(key: "auth.signUpButtonDescription", tableName: "Localizable", source: source, developmentValue: "Don`t have an account?", comment: nil) } + + /// en translation: SignUp + /// + /// Key: auth.signUpButtonTitle + /// + /// Locales: en + public var authSignUpButtonTitle: RswiftResources.StringResource { .init(key: "auth.signUpButtonTitle", tableName: "Localizable", source: source, developmentValue: "SignUp", comment: nil) } + + /// en translation: Create your account + /// + /// Key: auth.signUpTitle + /// + /// Locales: en + public var authSignUpTitle: RswiftResources.StringResource { .init(key: "auth.signUpTitle", tableName: "Localizable", source: source, developmentValue: "Create your account", comment: nil) } + + /// en translation: Username + /// + /// Key: auth.usernamePlaceholder + /// + /// Locales: en + public var authUsernamePlaceholder: RswiftResources.StringResource { .init(key: "auth.usernamePlaceholder", tableName: "Localizable", source: source, developmentValue: "Username", comment: nil) } + + /// en translation: Movies + /// + /// Key: contentToggle.moviesTitle + /// + /// Locales: en + public var contentToggleMoviesTitle: RswiftResources.StringResource { .init(key: "contentToggle.moviesTitle", tableName: "Localizable", source: source, developmentValue: "Movies", comment: nil) } + + /// en translation: TV Series + /// + /// Key: contentToggle.showsTitle + /// + /// Locales: en + public var contentToggleShowsTitle: RswiftResources.StringResource { .init(key: "contentToggle.showsTitle", tableName: "Localizable", source: source, developmentValue: "TV Series", comment: nil) } + + /// en translation: Airing today + /// + /// Key: home.airingTodayShowsSectionTitle + /// + /// Locales: en + public var homeAiringTodayShowsSectionTitle: RswiftResources.StringResource { .init(key: "home.airingTodayShowsSectionTitle", tableName: "Localizable", source: source, developmentValue: "Airing today", comment: nil) } + + /// en translation: Home + /// + /// Key: home.navigationTitle + /// + /// Locales: en + public var homeNavigationTitle: RswiftResources.StringResource { .init(key: "home.navigationTitle", tableName: "Localizable", source: source, developmentValue: "Home", comment: nil) } + + /// en translation: Now playing + /// + /// Key: home.nowPlayingMoviesSectionTitle + /// + /// Locales: en + public var homeNowPlayingMoviesSectionTitle: RswiftResources.StringResource { .init(key: "home.nowPlayingMoviesSectionTitle", tableName: "Localizable", source: source, developmentValue: "Now playing", comment: nil) } + + /// en translation: On TV + /// + /// Key: home.onTVShowsSectionTitle + /// + /// Locales: en + public var homeOnTVShowsSectionTitle: RswiftResources.StringResource { .init(key: "home.onTVShowsSectionTitle", tableName: "Localizable", source: source, developmentValue: "On TV", comment: nil) } + + /// en translation: Popular + /// + /// Key: home.popularMoviesSectionTitle + /// + /// Locales: en + public var homePopularMoviesSectionTitle: RswiftResources.StringResource { .init(key: "home.popularMoviesSectionTitle", tableName: "Localizable", source: source, developmentValue: "Popular", comment: nil) } + + /// en translation: Popular + /// + /// Key: home.popularShowsSectionTitle + /// + /// Locales: en + public var homePopularShowsSectionTitle: RswiftResources.StringResource { .init(key: "home.popularShowsSectionTitle", tableName: "Localizable", source: source, developmentValue: "Popular", comment: nil) } + + /// en translation: See all + /// + /// Key: home.sectionHeaderButtonTitle + /// + /// Locales: en + public var homeSectionHeaderButtonTitle: RswiftResources.StringResource { .init(key: "home.sectionHeaderButtonTitle", tableName: "Localizable", source: source, developmentValue: "See all", comment: nil) } + + /// en translation: Top Rated + /// + /// Key: home.topRatedMoviesSectionTitle + /// + /// Locales: en + public var homeTopRatedMoviesSectionTitle: RswiftResources.StringResource { .init(key: "home.topRatedMoviesSectionTitle", tableName: "Localizable", source: source, developmentValue: "Top Rated", comment: nil) } + + /// en translation: Top Rated + /// + /// Key: home.topRatedShowsSectionTitle + /// + /// Locales: en + public var homeTopRatedShowsSectionTitle: RswiftResources.StringResource { .init(key: "home.topRatedShowsSectionTitle", tableName: "Localizable", source: source, developmentValue: "Top Rated", comment: nil) } + + /// en translation: Upcoming + /// + /// Key: home.upcomingMoviesSectionTitle + /// + /// Locales: en + public var homeUpcomingMoviesSectionTitle: RswiftResources.StringResource { .init(key: "home.upcomingMoviesSectionTitle", tableName: "Localizable", source: source, developmentValue: "Upcoming", comment: nil) } + + /// en translation: Budget + /// + /// Key: itemDetails.budgetSectionTitle + /// + /// Locales: en + public var itemDetailsBudgetSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.budgetSectionTitle", tableName: "Localizable", source: source, developmentValue: "Budget", comment: nil) } + + /// en translation: Cast + /// + /// Key: itemDetails.castNavigationTitle + /// + /// Locales: en + public var itemDetailsCastNavigationTitle: RswiftResources.StringResource { .init(key: "itemDetails.castNavigationTitle", tableName: "Localizable", source: source, developmentValue: "Cast", comment: nil) } + + /// en translation: Cast + /// + /// Key: itemDetails.castSectionTitle + /// + /// Locales: en + public var itemDetailsCastSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.castSectionTitle", tableName: "Localizable", source: source, developmentValue: "Cast", comment: nil) } + + /// en translation: Language + /// + /// Key: itemDetails.languageSectionTitle + /// + /// Locales: en + public var itemDetailsLanguageSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.languageSectionTitle", tableName: "Localizable", source: source, developmentValue: "Language", comment: nil) } + + /// en translation: Network + /// + /// Key: itemDetails.networkSectionTitle + /// + /// Locales: en + public var itemDetailsNetworkSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.networkSectionTitle", tableName: "Localizable", source: source, developmentValue: "Network", comment: nil) } + + /// en translation: Recommendations + /// + /// Key: itemDetails.recommendationsSectionTitle + /// + /// Locales: en + public var itemDetailsRecommendationsSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.recommendationsSectionTitle", tableName: "Localizable", source: source, developmentValue: "Recommendations", comment: nil) } + + /// en translation: Revenue + /// + /// Key: itemDetails.revenueSectionTitle + /// + /// Locales: en + public var itemDetailsRevenueSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.revenueSectionTitle", tableName: "Localizable", source: source, developmentValue: "Revenue", comment: nil) } + + /// en translation: Reviews + /// + /// Key: itemDetails.reviewDetailsNavigationTitle + /// + /// Locales: en + public var itemDetailsReviewDetailsNavigationTitle: RswiftResources.StringResource { .init(key: "itemDetails.reviewDetailsNavigationTitle", tableName: "Localizable", source: source, developmentValue: "Reviews", comment: nil) } + + /// en translation: A review by %@ + /// + /// Key: itemDetails.reviewHeaderTitle + /// + /// Locales: en + public var itemDetailsReviewHeaderTitle: RswiftResources.StringResource1 { .init(key: "itemDetails.reviewHeaderTitle", tableName: "Localizable", source: source, developmentValue: "A review by %@", comment: nil) } + + /// en translation: Reviews + /// + /// Key: itemDetails.reviewsNavigationTitle + /// + /// Locales: en + public var itemDetailsReviewsNavigationTitle: RswiftResources.StringResource { .init(key: "itemDetails.reviewsNavigationTitle", tableName: "Localizable", source: source, developmentValue: "Reviews", comment: nil) } + + /// en translation: Reviews (%d) + /// + /// Key: itemDetails.reviewsSectionTitle + /// + /// Locales: en + public var itemDetailsReviewsSectionTitle: RswiftResources.StringResource1 { .init(key: "itemDetails.reviewsSectionTitle", tableName: "Localizable", source: source, developmentValue: "Reviews (%d)", comment: nil) } + + /// en translation: Status + /// + /// Key: itemDetails.statusSectionTitle + /// + /// Locales: en + public var itemDetailsStatusSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.statusSectionTitle", tableName: "Localizable", source: source, developmentValue: "Status", comment: nil) } + + /// en translation: Trailer + /// + /// Key: itemDetails.trailerButtonTitle + /// + /// Locales: en + public var itemDetailsTrailerButtonTitle: RswiftResources.StringResource { .init(key: "itemDetails.trailerButtonTitle", tableName: "Localizable", source: source, developmentValue: "Trailer", comment: nil) } + + /// en translation: Type + /// + /// Key: itemDetails.typeSectionTitle + /// + /// Locales: en + public var itemDetailsTypeSectionTitle: RswiftResources.StringResource { .init(key: "itemDetails.typeSectionTitle", tableName: "Localizable", source: source, developmentValue: "Type", comment: nil) } + + /// en translation: Where to watch + /// + /// Key: itemDetails.whereToWatchButtonTitle + /// + /// Locales: en + public var itemDetailsWhereToWatchButtonTitle: RswiftResources.StringResource { .init(key: "itemDetails.whereToWatchButtonTitle", tableName: "Localizable", source: source, developmentValue: "Where to watch", comment: nil) } + + /// en translation: My Favorites + /// + /// Key: myFavorites.navigationTitle + /// + /// Locales: en + public var myFavoritesNavigationTitle: RswiftResources.StringResource { .init(key: "myFavorites.navigationTitle", tableName: "Localizable", source: source, developmentValue: "My Favorites", comment: nil) } + + /// en translation: Discover your favorite movies & TV shows + /// + /// Key: onboarding.firstPageTitle + /// + /// Locales: en + public var onboardingFirstPageTitle: RswiftResources.StringResource { .init(key: "onboarding.firstPageTitle", tableName: "Localizable", source: source, developmentValue: "Discover your favorite\nmovies & TV shows", comment: nil) } + + /// en translation: Stay up with new releases + /// + /// Key: onboarding.fourthPageTitle + /// + /// Locales: en + public var onboardingFourthPageTitle: RswiftResources.StringResource { .init(key: "onboarding.fourthPageTitle", tableName: "Localizable", source: source, developmentValue: "Stay up with\nnew releases", comment: nil) } + + /// en translation: Get Started + /// + /// Key: onboarding.getStartedButtonTitle + /// + /// Locales: en + public var onboardingGetStartedButtonTitle: RswiftResources.StringResource { .init(key: "onboarding.getStartedButtonTitle", tableName: "Localizable", source: source, developmentValue: "Get Started", comment: nil) } + + /// en translation: Express your opinion in ratings and reviews + /// + /// Key: onboarding.secondPageTitle + /// + /// Locales: en + public var onboardingSecondPageTitle: RswiftResources.StringResource { .init(key: "onboarding.secondPageTitle", tableName: "Localizable", source: source, developmentValue: "Express your opinion\nin ratings and reviews", comment: nil) } + + /// en translation: Skip + /// + /// Key: onboarding.skipButtonTitle + /// + /// Locales: en + public var onboardingSkipButtonTitle: RswiftResources.StringResource { .init(key: "onboarding.skipButtonTitle", tableName: "Localizable", source: source, developmentValue: "Skip", comment: nil) } + + /// en translation: Add the best movies & TV Shows to favorites + /// + /// Key: onboarding.thirdPageTitle + /// + /// Locales: en + public var onboardingThirdPageTitle: RswiftResources.StringResource { .init(key: "onboarding.thirdPageTitle", tableName: "Localizable", source: source, developmentValue: "Add the best movies &\nTV Shows to favorites", comment: nil) } + + /// en translation: Start search right now! + /// + /// Key: search.listPlaceholder + /// + /// Locales: en + public var searchListPlaceholder: RswiftResources.StringResource { .init(key: "search.listPlaceholder", tableName: "Localizable", source: source, developmentValue: "Start search right now!", comment: nil) } + + /// en translation: Search + /// + /// Key: search.navigationTitle + /// + /// Locales: en + public var searchNavigationTitle: RswiftResources.StringResource { .init(key: "search.navigationTitle", tableName: "Localizable", source: source, developmentValue: "Search", comment: nil) } + + /// en translation: No search results. + /// + /// Key: search.noResultsPlaceholder + /// + /// Locales: en + public var searchNoResultsPlaceholder: RswiftResources.StringResource { .init(key: "search.noResultsPlaceholder", tableName: "Localizable", source: source, developmentValue: "No search results.", comment: nil) } + + /// en translation: Search for a movie, TV series... + /// + /// Key: search.searchPlaceholder + /// + /// Locales: en + public var searchSearchPlaceholder: RswiftResources.StringResource { .init(key: "search.searchPlaceholder", tableName: "Localizable", source: source, developmentValue: "Search for a movie, TV series...", comment: nil) } + + /// en translation: About Us + /// + /// Key: settings.aboutUsTitle + /// + /// Locales: en + public var settingsAboutUsTitle: RswiftResources.StringResource { .init(key: "settings.aboutUsTitle", tableName: "Localizable", source: source, developmentValue: "About Us", comment: nil) } + + /// en translation: Settings + /// + /// Key: settings.navigationTitle + /// + /// Locales: en + public var settingsNavigationTitle: RswiftResources.StringResource { .init(key: "settings.navigationTitle", tableName: "Localizable", source: source, developmentValue: "Settings", comment: nil) } + + /// en translation: Privacy Policy + /// + /// Key: settings.privacyPolicyTitle + /// + /// Locales: en + public var settingsPrivacyPolicyTitle: RswiftResources.StringResource { .init(key: "settings.privacyPolicyTitle", tableName: "Localizable", source: source, developmentValue: "Privacy Policy", comment: nil) } + + /// en translation: Rate this App + /// + /// Key: settings.rateThisAppTitle + /// + /// Locales: en + public var settingsRateThisAppTitle: RswiftResources.StringResource { .init(key: "settings.rateThisAppTitle", tableName: "Localizable", source: source, developmentValue: "Rate this App", comment: nil) } + + /// en translation: TMDB API + /// + /// Key: settings.tmdbAPITitle + /// + /// Locales: en + public var settingsTmdbAPITitle: RswiftResources.StringResource { .init(key: "settings.tmdbAPITitle", tableName: "Localizable", source: source, developmentValue: "TMDB API", comment: nil) } + + /// en translation: Buy + /// + /// Key: whereToWatch.buyTitle + /// + /// Locales: en + public var whereToWatchBuyTitle: RswiftResources.StringResource { .init(key: "whereToWatch.buyTitle", tableName: "Localizable", source: source, developmentValue: "Buy", comment: nil) } + + /// en translation: Where to Watch + /// + /// Key: whereToWatch.navigationTitle + /// + /// Locales: en + public var whereToWatchNavigationTitle: RswiftResources.StringResource { .init(key: "whereToWatch.navigationTitle", tableName: "Localizable", source: source, developmentValue: "Where to Watch", comment: nil) } + + /// en translation: Select country + /// + /// Key: whereToWatch.selectCountryTitle + /// + /// Locales: en + public var whereToWatchSelectCountryTitle: RswiftResources.StringResource { .init(key: "whereToWatch.selectCountryTitle", tableName: "Localizable", source: source, developmentValue: "Select country", comment: nil) } + + /// en translation: Stream + /// + /// Key: whereToWatch.streamTitle + /// + /// Locales: en + public var whereToWatchStreamTitle: RswiftResources.StringResource { .init(key: "whereToWatch.streamTitle", tableName: "Localizable", source: source, developmentValue: "Stream", comment: nil) } + } + } +} \ No newline at end of file diff --git a/Core/Localizations/Sources/Resources/en.lproj/Localizable.strings b/Core/Localizations/Sources/Resources/en.lproj/Localizable.strings new file mode 100644 index 0000000..976488a --- /dev/null +++ b/Core/Localizations/Sources/Resources/en.lproj/Localizable.strings @@ -0,0 +1,80 @@ +// MARK: - Onboarding +"onboarding.firstPageTitle" = "Discover your favorite\nmovies & TV shows"; +"onboarding.secondPageTitle" = "Express your opinion\nin ratings and reviews"; +"onboarding.thirdPageTitle" = "Add the best movies &\nTV Shows to favorites"; +"onboarding.fourthPageTitle" = "Stay up with\nnew releases"; +"onboarding.skipButtonTitle" = "Skip"; +"onboarding.getStartedButtonTitle" = "Get Started"; + +//MARK: - Auth +"auth.navigationTitle" = "Flick"; +"auth.signUpTitle" = "Create your account"; +"auth.usernamePlaceholder" = "Username"; +"auth.passwordPlaceholder" = "Password"; +"auth.confirmPasswordPlaceholder" = "Confirm Password"; +"auth.emailPlaceholder" = "Email"; +"auth.createAccountButtonTitle" = "Create account"; +"auth.signInButtonDescription" = "Already have an account?"; +"auth.signInButtonTitle" = "Sign in"; +"auth.signInTitle" = "Login to your account"; +"auth.forgotPasswordButtonTitle" = "Forgot password?"; +"auth.signUpButtonDescription" = "Don`t have an account?"; +"auth.signUpButtonTitle" = "SignUp"; +"auth.resetPasswordTitle" = "Reset password"; +"auth.resetPasswordButtonTitle" = "Reset password"; +"auth.savePasswordButtonTitle" = "Save password"; + +//MARK: - Home +"home.navigationTitle" = "Home"; +"home.sectionHeaderButtonTitle" = "See all"; +"home.popularMoviesSectionTitle" = "Popular"; +"home.nowPlayingMoviesSectionTitle" = "Now playing"; +"home.upcomingMoviesSectionTitle" = "Upcoming"; +"home.topRatedMoviesSectionTitle" = "Top Rated"; +"home.popularShowsSectionTitle" = "Popular"; +"home.airingTodayShowsSectionTitle" = "Airing today"; +"home.onTVShowsSectionTitle" = "On TV"; +"home.topRatedShowsSectionTitle" = "Top Rated"; + +//MARK: - Search +"search.navigationTitle" = "Search"; +"search.searchPlaceholder" = "Search for a movie, TV series..."; +"search.listPlaceholder" = "Start search right now!"; +"search.noResultsPlaceholder" = "No search results."; + +//MARK: - Item Details +"itemDetails.whereToWatchButtonTitle" = "Where to watch"; +"itemDetails.statusSectionTitle" = "Status"; +"itemDetails.languageSectionTitle" = "Language"; +"itemDetails.budgetSectionTitle" = "Budget"; +"itemDetails.revenueSectionTitle" = "Revenue"; +"itemDetails.networkSectionTitle" = "Network"; +"itemDetails.typeSectionTitle" = "Type"; +"itemDetails.trailerButtonTitle" = "Trailer"; +"itemDetails.castNavigationTitle" = "Cast"; +"itemDetails.castSectionTitle" = "Cast"; +"itemDetails.recommendationsSectionTitle" = "Recommendations"; +"itemDetails.reviewHeaderTitle" = "A review by %@"; +"itemDetails.reviewsSectionTitle" = "Reviews (%d)"; +"itemDetails.reviewsNavigationTitle" = "Reviews"; +"itemDetails.reviewDetailsNavigationTitle" = "Reviews"; + +//MARK: - Settings +"settings.navigationTitle" = "Settings"; +"settings.privacyPolicyTitle" = "Privacy Policy"; +"settings.tmdbAPITitle" = "TMDB API"; +"settings.aboutUsTitle" = "About Us"; +"settings.rateThisAppTitle" = "Rate this App"; + +//MARK: - Where To Watch +"whereToWatch.navigationTitle" = "Where to Watch"; +"whereToWatch.selectCountryTitle" = "Select country"; +"whereToWatch.streamTitle" = "Stream"; +"whereToWatch.buyTitle" = "Buy"; + +//MARK: - My Favorites +"myFavorites.navigationTitle" = "My Favorites"; + +//MARK: - Content Toggle +"contentToggle.moviesTitle" = "Movies"; +"contentToggle.showsTitle" = "TV Series"; diff --git a/Core/Localizations/rswift b/Core/Localizations/rswift new file mode 100755 index 0000000..c55ae0c Binary files /dev/null and b/Core/Localizations/rswift differ diff --git a/Flick/Code/Domain/Models/Author.swift b/Core/Models/Sources/Author.swift similarity index 82% rename from Flick/Code/Domain/Models/Author.swift rename to Core/Models/Sources/Author.swift index 1b284c4..d6dbde3 100644 --- a/Flick/Code/Domain/Models/Author.swift +++ b/Core/Models/Sources/Author.swift @@ -10,13 +10,13 @@ import API import Foundation import SwiftFoundation -struct Author { - var name: String - var username: String - var avatarPath: String? - var rating: Int? +public struct Author { + public var name: String + public var username: String + public var avatarPath: String? + public var rating: Int? - init( + public init( name: String, username: String, avatarPath: String?, @@ -36,7 +36,7 @@ extension Author: Hashable, Codable {} // MARK: - Faking extension Author: Faking { - init() { + public init() { name = "Cat Ellington" username = "CatEllington" avatarPath = "/uCmwgSbJAcHqNwSvQvTv2dB95tx.jpg" @@ -46,7 +46,7 @@ extension Author: Faking { // MARK: - empty -extension Author { +public extension Author { static var empty = Author( name: "", username: "", @@ -57,8 +57,8 @@ extension Author { // MARK: - Test -extension Author { - public static func testItem( +public extension Author { + static func testItem( name: String = "", username: String = "John Chard", avatarPath: String? = "/utEXl2EDiXBK6f41wCLsvprvMg4.jpg", @@ -75,7 +75,7 @@ extension Author { // MARK: - asAuthor -extension AuthorRemote { +public extension AuthorRemote { var asAuthor: Author { .init( name: name, diff --git a/Flick/Code/Domain/Models/Cast.swift b/Core/Models/Sources/Cast.swift similarity index 74% rename from Flick/Code/Domain/Models/Cast.swift rename to Core/Models/Sources/Cast.swift index 5b21012..95e8c6c 100644 --- a/Flick/Code/Domain/Models/Cast.swift +++ b/Core/Models/Sources/Cast.swift @@ -10,17 +10,21 @@ import API import Foundation import SwiftFoundation -struct Cast: Identifiable { - struct ID: Hashable, Codable { - var value: Int +public struct Cast: Identifiable { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var name: String - var character: String - var profilePath: String? + public var id: ID + public var name: String + public var character: String + public var profilePath: String? - init( + public init( id: ID, name: String, character: String, @@ -40,7 +44,7 @@ extension Cast: Hashable, Codable {} // MARK: - Faking extension Cast: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) name = "Emilia Clarke" character = "Daenerys Targaryen" @@ -50,7 +54,7 @@ extension Cast: Faking { // MARK: - empty -extension Cast { +public extension Cast { static var empty = Cast( id: .init(value: Int.random(in: Int.min ... 0)), name: "", @@ -61,8 +65,8 @@ extension Cast { // MARK: - Test -extension Cast { - public static func testItem( +public extension Cast { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), name: String = "Emilia Clarke", character: String = "Daenerys Targaryen", @@ -76,18 +80,18 @@ extension Cast { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asCast -extension CastRemote { +public extension CastRemote { var asCast: Cast { .init( id: .init(value: id), diff --git a/Flick/Code/Domain/Models/ContentType.swift b/Core/Models/Sources/ContentType.swift similarity index 88% rename from Flick/Code/Domain/Models/ContentType.swift rename to Core/Models/Sources/ContentType.swift index 3d57570..6dd6826 100644 --- a/Flick/Code/Domain/Models/ContentType.swift +++ b/Core/Models/Sources/ContentType.swift @@ -8,7 +8,7 @@ import Foundation -enum ContentType { +public enum ContentType { case movie case show } diff --git a/Flick/Code/Domain/Models/Genre.swift b/Core/Models/Sources/Genre.swift similarity index 69% rename from Flick/Code/Domain/Models/Genre.swift rename to Core/Models/Sources/Genre.swift index 3239641..1239fe0 100644 --- a/Flick/Code/Domain/Models/Genre.swift +++ b/Core/Models/Sources/Genre.swift @@ -10,15 +10,19 @@ import API import Foundation import SwiftFoundation -struct Genre: Identifiable { - struct ID: Hashable, Codable { - var value: Int +public struct Genre: Identifiable { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var name: String + public var id: ID + public var name: String - init( + public init( id: ID, name: String ) { @@ -34,7 +38,7 @@ extension Genre: Hashable, Codable {} // MARK: - Faking extension Genre: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) name = "Pretty Little Liars" } @@ -42,7 +46,7 @@ extension Genre: Faking { // MARK: - empty -extension Genre { +public extension Genre { static var empty = Genre( id: .init(value: Int.random(in: Int.min ... 0)), name: "" @@ -51,8 +55,8 @@ extension Genre { // MARK: - Test -extension Genre { - public static func testItem( +public extension Genre { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), name: String = "Pretty Little Liars" ) -> Self { @@ -62,18 +66,18 @@ extension Genre { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asGenre -extension GenreRemote { +public extension GenreRemote { var asGenre: Genre { .init( id: .init(value: id), diff --git a/Flick/Code/Domain/Models/ImageConfigs.swift b/Core/Models/Sources/ImageConfigs.swift similarity index 84% rename from Flick/Code/Domain/Models/ImageConfigs.swift rename to Core/Models/Sources/ImageConfigs.swift index da3d563..1c65abe 100644 --- a/Flick/Code/Domain/Models/ImageConfigs.swift +++ b/Core/Models/Sources/ImageConfigs.swift @@ -10,16 +10,16 @@ import API import Foundation import SwiftFoundation -struct ImageConfigs: Hashable { - var baseUrl: String - var secureBaseUrl: String - var backdropSizes: [Int] - var logoSizes: [Int] - var posterSizes: [Int] - var profileSizes: [Int] - var stillSizes: [Int] +public struct ImageConfigs: Hashable { + public var baseUrl: String + public var secureBaseUrl: String + public var backdropSizes: [Int] + public var logoSizes: [Int] + public var posterSizes: [Int] + public var profileSizes: [Int] + public var stillSizes: [Int] - init( + public init( baseUrl: String, secureBaseUrl: String, backdropSizes: [Int], @@ -40,7 +40,7 @@ struct ImageConfigs: Hashable { // MARK: - asImageConfiguration -extension ImageConfigsRemote { +public extension ImageConfigsRemote { var asImageConfigs: ImageConfigs { .init( baseUrl: baseUrl, @@ -56,8 +56,8 @@ extension ImageConfigsRemote { // MARK: - Test -extension ImageConfigs { - public static func testItem( +public extension ImageConfigs { + static func testItem( baseUrl: String = "", secureBaseUrl: String = "", backdropSizes: [Int] = [300], @@ -78,7 +78,7 @@ extension ImageConfigs { } } -extension ImageConfigs { +public extension ImageConfigs { func sizeUrlComponent(for size: CGSize, in sizes: [Int]) -> String { let maxImageSize = Int(max(size.width, size.height)) if let sizeUrlComponent = sizes.first(where: { maxImageSize <= $0 }) { @@ -90,7 +90,7 @@ extension ImageConfigs { // MARK: - Basic configs -extension ImageConfigs { +public extension ImageConfigs { static var basic: ImageConfigs { .init( baseUrl: "http://image.tmdb.org/t/p/", diff --git a/Flick/Code/Domain/Models/Item.swift b/Core/Models/Sources/Item.swift similarity index 96% rename from Flick/Code/Domain/Models/Item.swift rename to Core/Models/Sources/Item.swift index e607b71..3b55e33 100644 --- a/Flick/Code/Domain/Models/Item.swift +++ b/Core/Models/Sources/Item.swift @@ -10,7 +10,7 @@ import DesignSystem import Foundation import SwiftUI -protocol Item: Identifiable, Hashable { +public protocol Item: Identifiable, Hashable { var title: String { get } var year: String { get } var rating: Int { get } @@ -23,7 +23,7 @@ protocol Item: Identifiable, Hashable { var genreIds: [Int] { get } } -extension Item { +public extension Item { var durationText: String { guard duration > 0 else { return "" diff --git a/Flick/Code/Domain/Models/Movie.swift b/Core/Models/Sources/Movie.swift similarity index 83% rename from Flick/Code/Domain/Models/Movie.swift rename to Core/Models/Sources/Movie.swift index e54d241..974c5f2 100644 --- a/Flick/Code/Domain/Models/Movie.swift +++ b/Core/Models/Sources/Movie.swift @@ -10,32 +10,37 @@ import API import Foundation import SwiftFoundation import UDF - -struct Movie: Item { - struct ID: Hashable, Codable { - var value: Int +import Common + +public struct Movie: Item { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var posterPath: String? - var adult: Bool - var overview: String - var releaseDate: Date? - var genreIds: [Int] - var originalTitle: String - var originalLanguage: String - var title: String - var backdropPath: String? - var popularity: Double - var voteCount: Int - var video: Bool - var voteAverage: Double - var revenue: Int - var budget: Int - var status: String - var runtime: Minutes? - - init( + public var id: ID + public var posterPath: String? + public var adult: Bool + public var overview: String + public var releaseDate: Date? + public var genreIds: [Int] + public var originalTitle: String + public var originalLanguage: String + public var title: String + public var backdropPath: String? + public var popularity: Double + public var voteCount: Int + public var video: Bool + public var voteAverage: Double + public var revenue: Int + public var budget: Int + public var status: String + public var runtime: Minutes? + + public init( id: ID, posterPath: String?, adult: Bool, @@ -83,7 +88,7 @@ extension Movie: Hashable, Codable {} // MARK: - Faking extension Movie: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) posterPath = "/e1mjopzAS2KNsvpbpahQ1a6SkSn.jpg" adult = false @@ -107,7 +112,7 @@ extension Movie: Faking { // MARK: - empty -extension Movie { +public extension Movie { static var empty = Movie( id: .init(value: Int.random(in: Int.min ... 0)), posterPath: nil, @@ -132,8 +137,8 @@ extension Movie { // MARK: - Test -extension Movie { - public static func testItem( +public extension Movie { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), posterPath: String = "/t6HIqrRAclMCA60NsSmeqe9RmNV.jpg", adult: Bool = false, @@ -175,18 +180,18 @@ extension Movie { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asMovie -extension MovieRemote { +public extension MovieRemote { var asMovie: Movie { .init( id: .init(value: id), @@ -213,7 +218,7 @@ extension MovieRemote { // MARK: - Item -extension Movie { +public extension Movie { var year: String { releaseDate?.asYearString ?? "" } var duration: Minutes { runtime ?? 0 } var rating: Int { Int(voteAverage * 10) } @@ -222,7 +227,7 @@ extension Movie { // MARK: - Mergeable extension Movie: Mergeable { - func merging(_ newValue: Movie) -> Movie { + public func merging(_ newValue: Movie) -> Movie { filled(from: newValue) { filledValue, oldValue in filledValue.genreIds = newValue.genreIds.isEmpty ? oldValue.genreIds : newValue.genreIds filledValue.budget = newValue.budget == 0 ? oldValue.budget : newValue.budget diff --git a/Flick/Code/Domain/Models/MovieSection.swift b/Core/Models/Sources/MovieSection.swift similarity index 85% rename from Flick/Code/Domain/Models/MovieSection.swift rename to Core/Models/Sources/MovieSection.swift index c97d5a5..bde3911 100644 --- a/Flick/Code/Domain/Models/MovieSection.swift +++ b/Core/Models/Sources/MovieSection.swift @@ -9,15 +9,15 @@ import Foundation import Localizations -enum MovieSection: Section { +public enum MovieSection: Section { case popular case nowPlaying case upcoming case topRated - var id: Self { self } + public var id: Self { self } - var title: String { + public var title: String { switch self { case .popular: Localization.homePopularMoviesSectionTitle() case .nowPlaying: Localization.homeNowPlayingMoviesSectionTitle() @@ -26,7 +26,7 @@ enum MovieSection: Section { } } - var urlValue: String { + public var urlValue: String { switch self { case .popular: "popular" case .nowPlaying: "now_playing" diff --git a/Flick/Code/Domain/Models/Network.swift b/Core/Models/Sources/Network.swift similarity index 68% rename from Flick/Code/Domain/Models/Network.swift rename to Core/Models/Sources/Network.swift index d15059e..2810f88 100644 --- a/Flick/Code/Domain/Models/Network.swift +++ b/Core/Models/Sources/Network.swift @@ -10,15 +10,19 @@ import API import Foundation import SwiftFoundation -struct Network: Identifiable { - struct ID: Hashable, Codable { - var value: Int +public struct Network: Identifiable { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var name: String + public var id: ID + public var name: String - init( + public init( id: ID, name: String ) { @@ -34,7 +38,7 @@ extension Network: Hashable, Codable {} // MARK: - Faking extension Network: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) name = "HBO" } @@ -42,7 +46,7 @@ extension Network: Faking { // MARK: - empty -extension Network { +public extension Network { static var empty = Genre( id: .init(value: Int.random(in: Int.min ... 0)), name: "" @@ -51,8 +55,8 @@ extension Network { // MARK: - Test -extension Network { - public static func testItem( +public extension Network { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), name: String = "HBO" ) -> Self { @@ -62,18 +66,18 @@ extension Network { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asNetwork -extension NetworkRemote { +public extension NetworkRemote { var asNetwork: Network { .init( id: .init(value: id), diff --git a/Flick/Code/Domain/Models/Provider.swift b/Core/Models/Sources/Provider.swift similarity index 63% rename from Flick/Code/Domain/Models/Provider.swift rename to Core/Models/Sources/Provider.swift index 4ac3331..3b3892c 100644 --- a/Flick/Code/Domain/Models/Provider.swift +++ b/Core/Models/Sources/Provider.swift @@ -7,30 +7,31 @@ // import Foundation -import Localizations import SwiftFoundation +import Common +import Localizations -struct Provider { - var type: ProviderType - var items: [ProviderItem] +public struct Provider { + public var type: ProviderType + public var items: [ProviderItem] - init(type: ProviderType, items: [ProviderItem]) { + public init(type: ProviderType, items: [ProviderItem]) { self.type = type self.items = items } } -struct ProviderItem { - struct ID: Hashable, Codable { - var value: Int +public struct ProviderItem { + public struct ID: Hashable, Codable { + public var value: Int } - var id: ID - var logoPath: String? - var name: String - var displayPriority: Int + public var id: ID + public var logoPath: String? + public var name: String + public var displayPriority: Int - init(id: ID, logoPath: String? = nil, name: String, displayPriority: Int) { + public init(id: ID, logoPath: String? = nil, name: String, displayPriority: Int) { self.id = id self.logoPath = logoPath self.name = name @@ -40,12 +41,12 @@ struct ProviderItem { // MARK: - ProviderType -enum ProviderType { +public enum ProviderType { case flatRate case rent case buy - var localizableTitle: String { + public var localizableTitle: String { switch self { case .flatRate, .rent: Localization.whereToWatchStreamTitle() @@ -58,14 +59,14 @@ enum ProviderType { // MARK: - Faking extension Provider: Faking { - init() { + public init() { type = .flatRate items = ProviderItem.fakeItems(count: 4) } } extension ProviderItem: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) logoPath = "/peURlLlr8jggOwK53fJ5wdQl05y.jpg" name = "Apple TV" diff --git a/Flick/Code/Domain/Models/Review.swift b/Core/Models/Sources/Review.swift similarity index 79% rename from Flick/Code/Domain/Models/Review.swift rename to Core/Models/Sources/Review.swift index 251cb35..a1ff133 100644 --- a/Flick/Code/Domain/Models/Review.swift +++ b/Core/Models/Sources/Review.swift @@ -9,17 +9,21 @@ import API import SwiftFoundation -struct Review: Identifiable { - struct ID: Hashable, Codable { - var value: String +public struct Review: Identifiable { + public struct ID: Hashable, Codable { + public var value: String + + public init(value: String) { + self.value = value + } } - var id: ID - var author: String - var authorDetails: Author - var content: String + public var id: ID + public var author: String + public var authorDetails: Author + public var content: String - init( + public init( id: ID, author: String, authorDetails: Author, @@ -39,7 +43,7 @@ extension Review: Hashable, Codable {} // MARK: - Faking extension Review: Faking { - init() { + public init() { id = .init(value: "\(Int.random(in: Int.min ... 0))") author = "Cat Ellington" authorDetails = Author.fakeItem() @@ -49,7 +53,7 @@ extension Review: Faking { // MARK: - empty -extension Review { +public extension Review { static var empty = Review( id: .init(value: "\(Int.random(in: Int.min ... 0))"), author: "", @@ -60,8 +64,8 @@ extension Review { // MARK: - Test -extension Review { - public static func testItem( +public extension Review { + static func testItem( id: ID = .init(value: "\(Int.random(in: Int.min ... 0))"), author: String = "Cat Ellington", authorDetails: Author = Author.testItem(), @@ -75,18 +79,18 @@ extension Review { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: "\($0)")) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: "\($0)") } } } // MARK: - asReview -extension ReviewRemote { +public extension ReviewRemote { var asReview: Review { .init( id: .init(value: id), diff --git a/Flick/Code/Domain/Models/SearchItem.swift b/Core/Models/Sources/SearchItem.swift similarity index 84% rename from Flick/Code/Domain/Models/SearchItem.swift rename to Core/Models/Sources/SearchItem.swift index b04f194..a68ec53 100644 --- a/Flick/Code/Domain/Models/SearchItem.swift +++ b/Core/Models/Sources/SearchItem.swift @@ -10,32 +10,37 @@ import API import Foundation import SwiftFoundation import UDF - -struct SearchItem { - struct ID: Hashable, Codable { - var value: Int +import Common + +public struct SearchItem { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var adult: Bool - var backdropPath: String? - var name: String? - var originalLanguage: String - var originalName: String? - var overview: String - var posterPath: String? - var mediaType: String - var genreIds: [Int] - var popularity: Double - var firstAirDate: Date? - var voteAverage: Double - var voteCount: Int - var originCountry: [String] - var title, originalTitle: String? - var releaseDate: Date? - var video: Bool - - init(id: ID, + public var id: ID + public var adult: Bool + public var backdropPath: String? + public var name: String? + public var originalLanguage: String + public var originalName: String? + public var overview: String + public var posterPath: String? + public var mediaType: String + public var genreIds: [Int] + public var popularity: Double + public var firstAirDate: Date? + public var voteAverage: Double + public var voteCount: Int + public var originCountry: [String] + public var title, originalTitle: String? + public var releaseDate: Date? + public var video: Bool + + public init(id: ID, adult: Bool, backdropPath: String? = nil, name: String? = nil, @@ -84,7 +89,7 @@ extension SearchItem: Hashable, Codable, Identifiable {} // MARK: - Faking extension SearchItem: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) adult = false backdropPath = "/uGy4DCmM33I7l86W7iCskNkvmLD.jpg" @@ -106,7 +111,7 @@ extension SearchItem: Faking { // MARK: - empty -extension SearchItem { +public extension SearchItem { static var empty = SearchItem( id: .init(value: Int.random(in: Int.min ... 0)), adult: false, @@ -124,8 +129,8 @@ extension SearchItem { // MARK: - Test -extension SearchItem { - public static func testItem( +public extension SearchItem { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), adult: Bool = false, backdropPath: String = "/uGy4DCmM33I7l86W7iCskNkvmLD.jpg", @@ -169,18 +174,18 @@ extension SearchItem { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asSearchItem -extension SearchItemRemote { +public extension SearchItemRemote { var asSearchItem: SearchItem { .init(id: .init(value: id), adult: adult, @@ -206,7 +211,7 @@ extension SearchItemRemote { // MARK: - SearchItem -extension SearchItem { +public extension SearchItem { var theTitle: String { title ?? name ?? "" } var year: String { releaseDate?.asYearString ?? firstAirDate?.asYearString ?? "" } var rating: Int { Int(voteAverage * 10) } diff --git a/Flick/Code/Domain/Models/Section.swift b/Core/Models/Sources/Section.swift similarity index 75% rename from Flick/Code/Domain/Models/Section.swift rename to Core/Models/Sources/Section.swift index c7130b7..3ee10eb 100644 --- a/Flick/Code/Domain/Models/Section.swift +++ b/Core/Models/Sources/Section.swift @@ -8,6 +8,6 @@ import Foundation -protocol Section: Identifiable, CaseIterable, Hashable { +public protocol Section: Identifiable, CaseIterable, Hashable { var title: String { get } } diff --git a/Flick/Code/Domain/Models/Show.swift b/Core/Models/Sources/Show.swift similarity index 83% rename from Flick/Code/Domain/Models/Show.swift rename to Core/Models/Sources/Show.swift index 6b663b0..76fa515 100644 --- a/Flick/Code/Domain/Models/Show.swift +++ b/Core/Models/Sources/Show.swift @@ -10,31 +10,36 @@ import API import Foundation import SwiftFoundation import UDF - -struct Show: Item { - struct ID: Hashable, Codable { - var value: Int +import Common + +public struct Show: Item { + public struct ID: Hashable, Codable { + public var value: Int + + public init(value: Int) { + self.value = value + } } - var id: ID - var posterPath: String? - var popularity: Double - var backdropPath: String? - var voteAverage: Double - var overview: String - var firstAirDate: Date? - var originCountry: [String] - var genreIds: [Int] - var originalLanguage: String - var voteCount: Int - var name: String - var originalName: String - var episodeRunTime: [Minutes] - var status: String - var networks: [Network] - var type: String - - init( + public var id: ID + public var posterPath: String? + public var popularity: Double + public var backdropPath: String? + public var voteAverage: Double + public var overview: String + public var firstAirDate: Date? + public var originCountry: [String] + public var genreIds: [Int] + public var originalLanguage: String + public var voteCount: Int + public var name: String + public var originalName: String + public var episodeRunTime: [Minutes] + public var status: String + public var networks: [Network] + public var type: String + + public init( id: ID, posterPath: String?, popularity: Double, @@ -80,7 +85,7 @@ extension Show: Hashable, Codable {} // MARK: - Faking extension Show: Faking { - init() { + public init() { id = .init(value: Int.random(in: Int.min ... 0)) posterPath = "/vC324sdfcS313vh9QXwijLIHPJp.jpg" popularity = 47.432451 @@ -103,7 +108,7 @@ extension Show: Faking { // MARK: - empty -extension Show { +public extension Show { static var empty = Show( id: .init(value: Int.random(in: Int.min ... 0)), posterPath: "", @@ -127,8 +132,8 @@ extension Show { // MARK: - Test -extension Show { - public static func testItem( +public extension Show { + static func testItem( id: ID = .init(value: Int.random(in: Int.min ... 0)), posterPath: String = "/vC324sdfcS313vh9QXwijLIHPJp.jpg", popularity: Double = 47.432451, @@ -168,18 +173,18 @@ extension Show { ) } - public static func testItems(count: Int) -> [Self] { + static func testItems(count: Int) -> [Self] { (0 ..< count).map { .testItem(id: ID(value: $0)) } } - public static func testItemIds(count: Int) -> [Self.ID] { + static func testItemIds(count: Int) -> [Self.ID] { (0 ..< count).map { ID(value: $0) } } } // MARK: - asShow -extension ShowRemote { +public extension ShowRemote { var asShow: Show { .init( id: .init(value: id), @@ -205,7 +210,7 @@ extension ShowRemote { // MARK: - Item -extension Show { +public extension Show { var title: String { name } var year: String { firstAirDate?.asYearString ?? "" } var duration: Minutes { episodeRunTime.first ?? 0 } @@ -215,7 +220,7 @@ extension Show { // MARK: - Mergeable extension Show: Mergeable { - func merging(_ newValue: Show) -> Show { + public func merging(_ newValue: Show) -> Show { filled(from: newValue) { filledValue, oldValue in filledValue.genreIds = newValue.genreIds.isEmpty ? oldValue.genreIds : newValue.genreIds filledValue.episodeRunTime = newValue.episodeRunTime.isEmpty ? oldValue.episodeRunTime : newValue.episodeRunTime @@ -229,5 +234,5 @@ extension Show: Mergeable { // MARK: - Computed properties extension Show { - var typeText: String { type.isEmpty ? "-" : type } + public var typeText: String { type.isEmpty ? "-" : type } } diff --git a/Flick/Code/Domain/Models/ShowSection.swift b/Core/Models/Sources/ShowSection.swift similarity index 83% rename from Flick/Code/Domain/Models/ShowSection.swift rename to Core/Models/Sources/ShowSection.swift index 37f9eab..b09f746 100644 --- a/Flick/Code/Domain/Models/ShowSection.swift +++ b/Core/Models/Sources/ShowSection.swift @@ -7,16 +7,17 @@ // import Foundation +import Common import Localizations -enum ShowSection: Section { +public enum ShowSection: Section { case popular case airingToday case onTheAir case topRated - var id: Self { self } - var title: String { + public var id: Self { self } + public var title: String { switch self { case .popular: Localization.homePopularShowsSectionTitle() case .airingToday: Localization.homeAiringTodayShowsSectionTitle() @@ -25,7 +26,7 @@ enum ShowSection: Section { } } - var urlValue: String { + public var urlValue: String { switch self { case .popular: "popular" case .airingToday: "airing_today" diff --git a/DesignSystem/.gitignore b/DesignSystem/.gitignore deleted file mode 100644 index 3b29812..0000000 --- a/DesignSystem/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.DS_Store -/.build -/Packages -/*.xcodeproj -xcuserdata/ -DerivedData/ -.swiftpm/config/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/DesignSystem/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/DesignSystem/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/DesignSystem/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/DesignSystem/Package.swift b/DesignSystem/Package.swift deleted file mode 100644 index c200e06..0000000 --- a/DesignSystem/Package.swift +++ /dev/null @@ -1,28 +0,0 @@ -// swift-tools-version: 5.7 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "DesignSystem", - platforms: [ - .iOS(.v16), - ], - products: [ - .library( - name: "DesignSystem", - targets: ["DesignSystem"] - ), - ], - dependencies: [ - .package(url: "https://github.com/Maks-Jago/SwiftUIKit", from: "0.3.5"), - ], - targets: [ - .target( - name: "DesignSystem", - dependencies: [ - .product(name: "SwiftUI-Kit", package: "SwiftUIKit"), - ] - ), - ] -) diff --git a/DesignSystem/README.md b/DesignSystem/README.md deleted file mode 100644 index 53ac668..0000000 --- a/DesignSystem/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# DesignSystem - -A description of this package. diff --git a/Flick.xcodeproj/project.pbxproj b/Flick.xcodeproj/project.pbxproj deleted file mode 100644 index 62defca..0000000 --- a/Flick.xcodeproj/project.pbxproj +++ /dev/null @@ -1,782 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 70; - objects = { - -/* Begin PBXBuildFile section */ - 508E9EA629127A6F00C8BE18 /* API in Frameworks */ = {isa = PBXBuildFile; productRef = 508E9EA529127A6F00C8BE18 /* API */; }; - 508E9EAD29127BD700C8BE18 /* SwiftFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = 508E9EAC29127BD700C8BE18 /* SwiftFoundation */; }; - 508E9EB029127BF000C8BE18 /* SwiftUI-Kit in Frameworks */ = {isa = PBXBuildFile; productRef = 508E9EAF29127BF000C8BE18 /* SwiftUI-Kit */; }; - 508E9EB629127C9C00C8BE18 /* SwiftUISnapshotTestCase in Frameworks */ = {isa = PBXBuildFile; productRef = 508E9EB529127C9C00C8BE18 /* SwiftUISnapshotTestCase */; }; - 50F2C67D2A0823D700600695 /* UDF in Frameworks */ = {isa = PBXBuildFile; productRef = 50F2C67C2A0823D700600695 /* UDF */; }; - AB808D952A13DC4700B23260 /* FlagKit in Frameworks */ = {isa = PBXBuildFile; productRef = AB808D942A13DC4700B23260 /* FlagKit */; }; - B9F0F5972D75F84600231F1F /* Localizations in Frameworks */ = {isa = PBXBuildFile; productRef = 5071C7512989387F00591ACD /* Localizations */; settings = {ATTRIBUTES = (Required, ); }; }; - C66B31BB291CFFC90043CC0F /* DesignSystem in Frameworks */ = {isa = PBXBuildFile; productRef = C66B31BA291CFFC90043CC0F /* DesignSystem */; }; - C6E02A762964664F001853A3 /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = C6E02A752964664F001853A3 /* SDWebImageSwiftUI */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 508E9E84291278E200C8BE18 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 508E9E6B291278DC00C8BE18 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 508E9E72291278DC00C8BE18; - remoteInfo = Flick; - }; - 508E9ECA2912809A00C8BE18 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 508E9E6B291278DC00C8BE18 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 508E9E72291278DC00C8BE18; - remoteInfo = Flick; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 508E9E73291278DC00C8BE18 /* Flick.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Flick.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 508E9E83291278E200C8BE18 /* SnapshotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SnapshotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 508E9EA329127A2600C8BE18 /* API */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = API; sourceTree = ""; }; - 508E9EC62912809900C8BE18 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 508E9ED02912BD9A00C8BE18 /* DesignSystem */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = DesignSystem; sourceTree = ""; }; - B9E3FA712D75D8FB006EB33F /* Localizations */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Localizations; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - B98F5F7E2D79EB0800F0FD60 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - Info.plist, - ); - target = 508E9E72291278DC00C8BE18 /* Flick */; - }; - B98F5F7F2D79EB0800F0FD60 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - "Preview Content/Preview Assets.xcassets", - ); - target = 508E9E82291278E200C8BE18 /* SnapshotTests */; - }; -/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - B98F5EDE2D79EB0800F0FD60 /* Flick */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (B98F5F7E2D79EB0800F0FD60 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, B98F5F7F2D79EB0800F0FD60 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Flick; sourceTree = ""; }; - B98F632E2D79EB4100F0FD60 /* SnapshotTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = SnapshotTests; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 508E9E70291278DC00C8BE18 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B9F0F5972D75F84600231F1F /* Localizations in Frameworks */, - C6E02A762964664F001853A3 /* SDWebImageSwiftUI in Frameworks */, - AB808D952A13DC4700B23260 /* FlagKit in Frameworks */, - C66B31BB291CFFC90043CC0F /* DesignSystem in Frameworks */, - 50F2C67D2A0823D700600695 /* UDF in Frameworks */, - 508E9EA629127A6F00C8BE18 /* API in Frameworks */, - 508E9EAD29127BD700C8BE18 /* SwiftFoundation in Frameworks */, - 508E9EB029127BF000C8BE18 /* SwiftUI-Kit in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9E80291278E200C8BE18 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 508E9EB629127C9C00C8BE18 /* SwiftUISnapshotTestCase in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9EC32912809900C8BE18 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 508E9E6A291278DC00C8BE18 = { - isa = PBXGroup; - children = ( - 508E9EA229127A2600C8BE18 /* Packages */, - B98F5EDE2D79EB0800F0FD60 /* Flick */, - B98F632E2D79EB4100F0FD60 /* SnapshotTests */, - 508E9EC72912809A00C8BE18 /* UnitTests */, - 508E9E74291278DC00C8BE18 /* Products */, - 508E9EA429127A6F00C8BE18 /* Frameworks */, - ); - sourceTree = ""; - }; - 508E9E74291278DC00C8BE18 /* Products */ = { - isa = PBXGroup; - children = ( - 508E9E73291278DC00C8BE18 /* Flick.app */, - 508E9E83291278E200C8BE18 /* SnapshotTests.xctest */, - 508E9EC62912809900C8BE18 /* UnitTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 508E9EA229127A2600C8BE18 /* Packages */ = { - isa = PBXGroup; - children = ( - 508E9EA329127A2600C8BE18 /* API */, - 508E9ED02912BD9A00C8BE18 /* DesignSystem */, - B9E3FA712D75D8FB006EB33F /* Localizations */, - ); - name = Packages; - sourceTree = ""; - }; - 508E9EA429127A6F00C8BE18 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - 508E9EC72912809A00C8BE18 /* UnitTests */ = { - isa = PBXGroup; - children = ( - 508E9ECF2912B9D400C8BE18 /* Modules */, - ); - path = UnitTests; - sourceTree = ""; - }; - 508E9ECF2912B9D400C8BE18 /* Modules */ = { - isa = PBXGroup; - children = ( - ); - path = Modules; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 508E9E72291278DC00C8BE18 /* Flick */ = { - isa = PBXNativeTarget; - buildConfigurationList = 508E9E97291278E200C8BE18 /* Build configuration list for PBXNativeTarget "Flick" */; - buildPhases = ( - 508E9E6F291278DC00C8BE18 /* Sources */, - 508E9E70291278DC00C8BE18 /* Frameworks */, - 508E9E71291278DC00C8BE18 /* Resources */, - B96AF5CC2D79DB79000F9C6E /* Swift Format */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - B98F5EDE2D79EB0800F0FD60 /* Flick */, - ); - name = Flick; - packageProductDependencies = ( - 508E9EA529127A6F00C8BE18 /* API */, - 508E9EAC29127BD700C8BE18 /* SwiftFoundation */, - 508E9EAF29127BF000C8BE18 /* SwiftUI-Kit */, - C66B31BA291CFFC90043CC0F /* DesignSystem */, - C6E02A752964664F001853A3 /* SDWebImageSwiftUI */, - 5071C7512989387F00591ACD /* Localizations */, - 50F2C67C2A0823D700600695 /* UDF */, - AB808D942A13DC4700B23260 /* FlagKit */, - ); - productName = Flick; - productReference = 508E9E73291278DC00C8BE18 /* Flick.app */; - productType = "com.apple.product-type.application"; - }; - 508E9E82291278E200C8BE18 /* SnapshotTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 508E9E9A291278E200C8BE18 /* Build configuration list for PBXNativeTarget "SnapshotTests" */; - buildPhases = ( - 508E9E7F291278E200C8BE18 /* Sources */, - 508E9E80291278E200C8BE18 /* Frameworks */, - 508E9E81291278E200C8BE18 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 508E9E85291278E200C8BE18 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - B98F632E2D79EB4100F0FD60 /* SnapshotTests */, - ); - name = SnapshotTests; - packageProductDependencies = ( - 508E9EB529127C9C00C8BE18 /* SwiftUISnapshotTestCase */, - ); - productName = FlickTests; - productReference = 508E9E83291278E200C8BE18 /* SnapshotTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 508E9EC52912809900C8BE18 /* UnitTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 508E9ECC2912809A00C8BE18 /* Build configuration list for PBXNativeTarget "UnitTests" */; - buildPhases = ( - 508E9EC22912809900C8BE18 /* Sources */, - 508E9EC32912809900C8BE18 /* Frameworks */, - 508E9EC42912809900C8BE18 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 508E9ECB2912809A00C8BE18 /* PBXTargetDependency */, - ); - name = UnitTests; - productName = UnitTests; - productReference = 508E9EC62912809900C8BE18 /* UnitTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 508E9E6B291278DC00C8BE18 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1410; - LastUpgradeCheck = 1410; - ORGANIZATIONNAME = urlaunched.com; - TargetAttributes = { - 508E9E72291278DC00C8BE18 = { - CreatedOnToolsVersion = 14.1; - }; - 508E9E82291278E200C8BE18 = { - CreatedOnToolsVersion = 14.1; - TestTargetID = 508E9E72291278DC00C8BE18; - }; - 508E9EC52912809900C8BE18 = { - CreatedOnToolsVersion = 14.1; - TestTargetID = 508E9E72291278DC00C8BE18; - }; - }; - }; - buildConfigurationList = 508E9E6E291278DC00C8BE18 /* Build configuration list for PBXProject "Flick" */; - compatibilityVersion = "Xcode 13.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 508E9E6A291278DC00C8BE18; - packageReferences = ( - 508E9EA729127AEA00C8BE18 /* XCRemoteSwiftPackageReference "SwiftUI-UDF" */, - 508E9EAB29127BD700C8BE18 /* XCRemoteSwiftPackageReference "SwiftFoundation" */, - 508E9EAE29127BF000C8BE18 /* XCRemoteSwiftPackageReference "SwiftUIKit" */, - 508E9EB429127C9C00C8BE18 /* XCRemoteSwiftPackageReference "swiftui-snapshot-test-case" */, - C6E02A742964664F001853A3 /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */, - AB808D932A13DC4700B23260 /* XCRemoteSwiftPackageReference "FlagKit" */, - ); - productRefGroup = 508E9E74291278DC00C8BE18 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 508E9E72291278DC00C8BE18 /* Flick */, - 508E9E82291278E200C8BE18 /* SnapshotTests */, - 508E9EC52912809900C8BE18 /* UnitTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 508E9E71291278DC00C8BE18 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9E81291278E200C8BE18 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9EC42912809900C8BE18 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - B96AF5CC2D79DB79000F9C6E /* Swift Format */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Swift Format"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/bash\n\n# Get the value of core.hooksPath\nHOOKS_PATH=$(git config --get core.hooksPath)\n\n# Check if core.hooksPath is set to '.githooks'\nif [ \"$HOOKS_PATH\" != \".githooks\" ]; then\n echo \"Setting up pre-commit hook...\"\n chmod +x .githooks/pre-commit\n git config core.hooksPath .githooks\nfi\n\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 508E9E6F291278DC00C8BE18 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9E7F291278E200C8BE18 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508E9EC22912809900C8BE18 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 508E9E85291278E200C8BE18 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 508E9E72291278DC00C8BE18 /* Flick */; - targetProxy = 508E9E84291278E200C8BE18 /* PBXContainerItemProxy */; - }; - 508E9ECB2912809A00C8BE18 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 508E9E72291278DC00C8BE18 /* Flick */; - targetProxy = 508E9ECA2912809A00C8BE18 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 508E9E95291278E200C8BE18 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_TESTING_SEARCH_PATHS = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 508E9E96291278E200C8BE18 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTING_SEARCH_PATHS = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 508E9E98291278E200C8BE18 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Flick/Preview Content\""; - DEVELOPMENT_TEAM = XK5AEQZHJU; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Flick/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard"; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.flick; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Debug; - }; - 508E9E99291278E200C8BE18 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Flick/Preview Content\""; - DEVELOPMENT_TEAM = XK5AEQZHJU; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Flick/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard"; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.flick; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Release; - }; - 508E9E9B291278E200C8BE18 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XK5AEQZHJU; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.SnapshotTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flick.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flick"; - }; - name = Debug; - }; - 508E9E9C291278E200C8BE18 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XK5AEQZHJU; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.SnapshotTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flick.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flick"; - }; - name = Release; - }; - 508E9ECD2912809A00C8BE18 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XK5AEQZHJU; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.UnitTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flick.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flick"; - }; - name = Debug; - }; - 508E9ECE2912809A00C8BE18 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XK5AEQZHJU; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.urlaunched.UnitTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flick.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flick"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 508E9E6E291278DC00C8BE18 /* Build configuration list for PBXProject "Flick" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 508E9E95291278E200C8BE18 /* Debug */, - 508E9E96291278E200C8BE18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 508E9E97291278E200C8BE18 /* Build configuration list for PBXNativeTarget "Flick" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 508E9E98291278E200C8BE18 /* Debug */, - 508E9E99291278E200C8BE18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 508E9E9A291278E200C8BE18 /* Build configuration list for PBXNativeTarget "SnapshotTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 508E9E9B291278E200C8BE18 /* Debug */, - 508E9E9C291278E200C8BE18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 508E9ECC2912809A00C8BE18 /* Build configuration list for PBXNativeTarget "UnitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 508E9ECD2912809A00C8BE18 /* Debug */, - 508E9ECE2912809A00C8BE18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 508E9EA729127AEA00C8BE18 /* XCRemoteSwiftPackageReference "SwiftUI-UDF" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Maks-Jago/SwiftUI-UDF"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = "1.5.1-rc.1"; - }; - }; - 508E9EAB29127BD700C8BE18 /* XCRemoteSwiftPackageReference "SwiftFoundation" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Maks-Jago/SwiftFoundation.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.3.6; - }; - }; - 508E9EAE29127BF000C8BE18 /* XCRemoteSwiftPackageReference "SwiftUIKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Maks-Jago/SwiftUIKit"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.4.0; - }; - }; - 508E9EB429127C9C00C8BE18 /* XCRemoteSwiftPackageReference "swiftui-snapshot-test-case" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Maks-Jago/swiftui-snapshot-test-case"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.6.2; - }; - }; - AB808D932A13DC4700B23260 /* XCRemoteSwiftPackageReference "FlagKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/madebybowtie/FlagKit"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; - C6E02A742964664F001853A3 /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/SDWebImage/SDWebImageSwiftUI"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 3.1.3; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 5071C7512989387F00591ACD /* Localizations */ = { - isa = XCSwiftPackageProductDependency; - productName = Localizations; - }; - 508E9EA529127A6F00C8BE18 /* API */ = { - isa = XCSwiftPackageProductDependency; - productName = API; - }; - 508E9EAC29127BD700C8BE18 /* SwiftFoundation */ = { - isa = XCSwiftPackageProductDependency; - package = 508E9EAB29127BD700C8BE18 /* XCRemoteSwiftPackageReference "SwiftFoundation" */; - productName = SwiftFoundation; - }; - 508E9EAF29127BF000C8BE18 /* SwiftUI-Kit */ = { - isa = XCSwiftPackageProductDependency; - package = 508E9EAE29127BF000C8BE18 /* XCRemoteSwiftPackageReference "SwiftUIKit" */; - productName = "SwiftUI-Kit"; - }; - 508E9EB529127C9C00C8BE18 /* SwiftUISnapshotTestCase */ = { - isa = XCSwiftPackageProductDependency; - package = 508E9EB429127C9C00C8BE18 /* XCRemoteSwiftPackageReference "swiftui-snapshot-test-case" */; - productName = SwiftUISnapshotTestCase; - }; - 50F2C67C2A0823D700600695 /* UDF */ = { - isa = XCSwiftPackageProductDependency; - package = 508E9EA729127AEA00C8BE18 /* XCRemoteSwiftPackageReference "SwiftUI-UDF" */; - productName = UDF; - }; - AB808D942A13DC4700B23260 /* FlagKit */ = { - isa = XCSwiftPackageProductDependency; - package = AB808D932A13DC4700B23260 /* XCRemoteSwiftPackageReference "FlagKit" */; - productName = FlagKit; - }; - C66B31BA291CFFC90043CC0F /* DesignSystem */ = { - isa = XCSwiftPackageProductDependency; - productName = DesignSystem; - }; - C6E02A752964664F001853A3 /* SDWebImageSwiftUI */ = { - isa = XCSwiftPackageProductDependency; - package = C6E02A742964664F001853A3 /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */; - productName = SDWebImageSwiftUI; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 508E9E6B291278DC00C8BE18 /* Project object */; -} diff --git a/Flick.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Flick.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/Flick.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Flick.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Flick.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Flick.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Flick.xcodeproj/xcshareddata/xcschemes/Flick.xcscheme b/Flick.xcodeproj/xcshareddata/xcschemes/Flick.xcscheme deleted file mode 100644 index cdb0be8..0000000 --- a/Flick.xcodeproj/xcshareddata/xcschemes/Flick.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Flick/Code/Common/Common.swift b/Flick/Code/Common/Common.swift deleted file mode 100644 index 819584b..0000000 --- a/Flick/Code/Common/Common.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// Common.swift -// Flick -// -// Created by Alexander Sharko on 20.01.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import Localizations -import SwiftUI - -// MARK: - Typealiases - -typealias Minutes = Int - -let Localization = R.string.localizable - -// MARK: - Constants - -let kPerPage: Int = 20 - -// MARK: - AppLink - -enum AppLink: String, Identifiable { - case aboutUs = "https://www.themoviedb.org/about" - case tmdbAPI = "https://developer.themoviedb.org/docs/getting-started" - case privacyPolicy = "https://www.themoviedb.org/privacy-policy" - - var id: Self { self } - var urlValue: URL { URL(string: rawValue)! } -} - -// MARK: - Helpers - -func areEqual(_ lhs: Lhs, _ rhs: some Equatable) -> Bool { - guard let rhsAs = rhs as? Lhs else { - return false - } - - return lhs == rhsAs -} - -@ViewBuilder -func buildView( - item: any Item, - movieView: (Movie) -> some View, - showView: (Show) -> some View -) -> some View { - switch item { - case let item as Movie: - movieView(item) - case let item as Show: - showView(item) - default: - EmptyView() - } -} diff --git a/Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastComponent.swift b/Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastComponent.swift deleted file mode 100644 index 9aa2d1c..0000000 --- a/Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastComponent.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// ItemDetailsCastComponent.swift -// Flick -// -// Created by Alexander Sharko on 19.01.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct ItemDetailsCastComponent: Component { - struct Props { - var cast: [Cast.ID] - var castById: (Cast.ID) -> Cast - var isRedacted: Bool - var router: Router = .init() - } - - var props: Props - - @Environment(\.width) private var componentWidth - @Environment(\.globalRouter) private var globalRouter - - var body: some View { - if props.cast.isNotEmpty { - VStack(alignment: .leading, spacing: 21) { - SectionHeaderView( - title: Localization.itemDetailsCastSectionTitle(), - seeAllAction: { - globalRouter.navigate(for: ItemDetailsCastRouting.self, to: .cast(props.cast)) - } - ) - - ScrollView(.horizontal) { - HStack(alignment: .top, spacing: 16) { - let width = abs(componentWidth - 64) / 3 - let height = width * 1.25 - ForEach(props.cast, id: \.self) { id in - CastCardView( - cast: props.castById(id), - size: .init(width: width, height: height), - lineLimit: 1 - ) - .frame(width: width) - } - } - .padding(.horizontal) - } - .scrollIndicators(.hidden) - } - .isRedacted(props.isRedacted) - .disabled(props.isRedacted) - } - } -} - -// MARK: - Preview - -#Preview { - ItemDetailsCastComponent( - props: .init( - cast: [], - castById: { _ in .fakeItem() }, - isRedacted: false - ) - ) -} diff --git a/Flick/Code/Modules/Cast/View/CastComponent.swift b/Flick/Code/Modules/Cast/View/CastComponent.swift deleted file mode 100644 index 82ab1ce..0000000 --- a/Flick/Code/Modules/Cast/View/CastComponent.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// CastComponent.swift -// Flick -// -// Created by Alexander Sharko on 20.01.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct CastComponent: Component { - struct Props { - var cast: [Cast.ID] - var castById: (Cast.ID) -> Cast - var dialogStatus: Binding - var router: Router = .init() - } - - var props: Props - - let columns: [GridItem] = [GridItem(.flexible(), spacing: 16, alignment: .top), - GridItem(.flexible(), spacing: 16, alignment: .top), - GridItem(.flexible(), alignment: .top)] - - var body: some View { - GeometryReader { geometry in - ScrollView { - LazyVGrid(columns: columns, spacing: 0) { - let width = abs(geometry.size.width - 64) / 3 - let height = width * 1.25 - ForEach(props.cast, id: \.value) { id in - let cast = props.castById(id) - CastCardView( - cast: cast, - size: .init(width: width, height: height) - ) - .padding(.bottom) - } - } - .padding(.horizontal) - .padding(.top) - } - } - .background(Color.flMain.edgesIgnoringSafeArea(.all)) - .customNavigationTitle(Localization.itemDetailsCastNavigationTitle()) - .dialog(status: props.dialogStatus) - } -} - -// MARK: - Preview - -#Preview { - CastComponent( - props: .init( - cast: [], - castById: { _ in .fakeItem() }, - dialogStatus: .constant(.dismissed) - ) - ) -} diff --git a/Flick/Code/Modules/Home/View/Home/HomeComponent.swift b/Flick/Code/Modules/Home/View/Home/HomeComponent.swift deleted file mode 100644 index 157a824..0000000 --- a/Flick/Code/Modules/Home/View/Home/HomeComponent.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// HomeComponent.swift -// Flick -// -// Created by Alexander Sharko on 30.11.2022. -// Copyright © 2022 urlaunched.com. All rights reserved. -// - -import Localizations -import SwiftUI -import UDF - -struct HomeComponent: Component { - struct Props { - var contentType: Binding - var movieSections: [MovieSection] - var showSections: [ShowSection] - var moviesForSection: (MovieSection) -> [Movie] - var showsForSection: (ShowSection) -> [Show] - var isMoviesRedacted: (MovieSection) -> Bool - var isShowsRedacted: (ShowSection) -> Bool - var dialogStatus: Binding - } - - var props: Props - - var body: some View { - ScrollView { - VStack(spacing: 8) { - ContentToggle(contentType: props.contentType) - - switch props.contentType.wrappedValue { - case .movie: - movieSectionsView - case .show: - showSectionsView - } - } - .padding(.bottom) - } - .navigationBarTitleDisplayMode(.inline) - .customNavigationTitle(Localization.homeNavigationTitle()) - } -} - -extension HomeComponent { - var movieSectionsView: some View { - ForEach(MovieSection.allCases) { movieSection in - let isRedacted = props.isMoviesRedacted(movieSection) - Group { - if movieSection == MovieSection.popular { - MainHomeSectionContainer( - section: movieSection, - retrieveItems: { props.moviesForSection(movieSection) }, - scopeOfWork: { state in state.allMovies } - ) - } else { - HomeSectionContainer( - section: movieSection, - retrieveItems: { props.moviesForSection(movieSection) }, - scopeOfWork: { state in state.allMovies } - ) - } - } - .isRedacted(isRedacted) - .disabled(isRedacted) - } - } - - var showSectionsView: some View { - ForEach(ShowSection.allCases) { showSection in - let isRedacted = props.isShowsRedacted(showSection) - Group { - if showSection == ShowSection.popular { - MainHomeSectionContainer( - section: showSection, - retrieveItems: { props.showsForSection(showSection) }, - scopeOfWork: { state in state.allShows } - ) - } else { - HomeSectionContainer( - section: showSection, - retrieveItems: { props.showsForSection(showSection) }, - scopeOfWork: { state in state.allShows } - ) - } - } - .isRedacted(isRedacted) - .disabled(isRedacted) - } - .dialog(status: props.dialogStatus) - } -} - -// MARK: - Preview - -#Preview { - HomeComponent( - props: .init( - contentType: .constant(.movie), - movieSections: [], - showSections: [], - moviesForSection: { _ in Movie.fakeItems() }, - showsForSection: { _ in Show.fakeItems() }, - isMoviesRedacted: { _ in false }, - isShowsRedacted: { _ in false }, - dialogStatus: .constant(.dismissed) - ) - ) -} diff --git a/Flick/Code/Modules/Home/View/HomeSection/HomeSectionComponent.swift b/Flick/Code/Modules/Home/View/HomeSection/HomeSectionComponent.swift deleted file mode 100644 index ddca369..0000000 --- a/Flick/Code/Modules/Home/View/HomeSection/HomeSectionComponent.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// HomeSectionComponent.swift -// Flick -// -// Created by Alexander Sharko on 30.11.2022. -// Copyright © 2022 urlaunched.com. All rights reserved. -// - -import DesignSystem -import SwiftUI -import UDF - -struct HomeSectionComponent: Component { - struct Props { - var section: S - var items: [any Item] - var genreById: (Genre.ID) -> Genre? - var router: Router = .init() - } - - var props: Props - - @Environment(\.globalRouter) private var globalRouter - - var body: some View { - VStack(spacing: 24) { - SectionHeaderView( - title: props.section.title, - seeAllAction: { - globalRouter.navigate(for: HomeRouting.self, to: .sectionDetails(props.section)) - } - ) - - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack(alignment: .top, spacing: 16) { - ForEach(props.items.indices, id: \.self) { index in - let item = props.items[index] - HomeCardView( - item: item, - genres: item.genres(action: props.genreById) - ) - .padding(.leading, index == props.items.indices.first ? 16 : 0) - .padding(.trailing, index == props.items.indices.last ? 16 : 0) - .embedInPlainButton { - globalRouter.navigate(for: HomeRouting.self, to: .itemDetails(item)) - } - .buttonStyle(.scaled) - } - } - } - } - .frame(height: 340, alignment: .top) - } -} - -// MARK: - Preview - -#Preview { - HomeSectionComponent( - props: .init( - section: MovieSection.nowPlaying, - items: [], - genreById: { _ in .fakeItem() } - ) - ) -} diff --git a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionComponent.swift b/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionComponent.swift deleted file mode 100644 index 116b030..0000000 --- a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionComponent.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// MainHomeSectionComponent.swift -// Flick -// -// Created by Alexander Sharko on 01.12.2022. -// Copyright © 2022 urlaunched.com. All rights reserved. -// - -import SwiftUI -import SwiftUI_Kit -import UDF - -struct MainHomeSectionComponent: Component { - struct Props { - var section: S - var items: [any Item] - var genreById: (Genre.ID) -> Genre? - var router: Router = .init() - } - - var props: Props - - @Environment(\.globalRouter) private var globalRouter - - var body: some View { - VStack(spacing: 10) { - SectionHeaderView( - title: props.section.title, - seeAllAction: { - globalRouter.navigate(for: MainHomeSectionRouting.self, to: .sectionDetails(props.section)) - } - ) - .padding(.bottom) - - MainSectionScrollView( - items: props.items, - genresByItem: { $0.genres(action: props.genreById) }, - navigateToItemDetails: { item in - globalRouter.navigate(for: MainHomeSectionRouting.self, to: .itemDetails(item)) - } - ) - } - .clipShape(RoundedCorner(radius: 50, corners: [.bottomLeft, .bottomRight])) - .frame(height: 460) - } -} diff --git a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift b/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift deleted file mode 100644 index 69c7eb2..0000000 --- a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// MainHomeSectionRouter.swift -// Flick -// -// Created by Valentin Petrulia on 27.02.2025. -// Copyright © 2025 urlaunched.com. All rights reserved. -// - -import SwiftUI -import UDF - -struct MainHomeSectionRouting: Routing { - enum Route: Hashable { - case itemDetails(any Item) - case sectionDetails(any Section) - - func hash(into hasher: inout Hasher) { - switch self { - case let .itemDetails(item): - hasher.combine(item) - case let .sectionDetails(section): - hasher.combine(section) - } - } - - static func == (lhs: Self, rhs: Self) -> Bool { - switch (lhs, rhs) { - case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): - areEqual(lhsItem, rhsItem) - case let (.sectionDetails(lhsSection), .sectionDetails(rhsSection)): - areEqual(lhsSection, rhsSection) - default: - false - } - } - } - - @ViewBuilder func view(for route: Route) -> some View { - switch route { - case let .itemDetails(item): - buildView( - item: item, - movieView: { MovieDetailsContainer(id: $0.id) }, - showView: { ShowDetailsContainer(id: $0.id) } - ) - - case let .sectionDetails(section): - if let movieSection = section as? MovieSection { - SectionDetailsContainer(section: movieSection) - } else if let showSection = section as? ShowSection { - SectionDetailsContainer(section: showSection) - } - } - } -} diff --git a/Flick/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift b/Flick/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift deleted file mode 100644 index 3850781..0000000 --- a/Flick/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift +++ /dev/null @@ -1,76 +0,0 @@ -// -// ItemDetailsRouter.swift -// Flick -// -// Created by Alexander Sharko on 20.01.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import SwiftUI -import UDF - -struct ItemDetailsRouting: Routing { - enum Route: Hashable { - case cast(any Item) - case reviews(any Item) - case recommendations(any Item) - case whereToWatch(any Item) - - func hash(into hasher: inout Hasher) { - switch self { - case let .cast(item): - hasher.combine(item) - case let .reviews(item): - hasher.combine(item) - case let .recommendations(item): - hasher.combine(item) - case let .whereToWatch(item): - hasher.combine(item) - } - } - - static func == (lhs: Self, rhs: Self) -> Bool { - switch (lhs, rhs) { - case let (.cast(lhsItem), .cast(rhsItem)): - areEqual(lhsItem, rhsItem) - case let (.reviews(lhsItem), .reviews(rhsItem)): - areEqual(lhsItem, rhsItem) - case let (.recommendations(lhsItem), .recommendations(rhsItem)): - areEqual(lhsItem, rhsItem) - case let (.whereToWatch(lhsItem), .whereToWatch(rhsItem)): - areEqual(lhsItem, rhsItem) - default: - false - } - } - } - - @ViewBuilder - func view(for route: Route) -> some View { - switch route { - case let .cast(item): - buildView( - item: item, - movieView: { MovieCastContainer(id: $0.id) }, - showView: { ShowCastContainer(id: $0.id) } - ) - - case let .reviews(item): - buildView( - item: item, - movieView: { MovieDetailsReviewsContainer(id: $0.id) }, - showView: { ShowDetailsReviewsContainer(id: $0.id) } - ) - - case let .recommendations(item): - buildView( - item: item, - movieView: { MovieDetailsRecommendationsContainer(id: $0.id) }, - showView: { ShowDetailsRecommendationsContainer(id: $0.id) } - ) - - case let .whereToWatch(item): - WhereToWatchContainer(item: item) - } - } -} diff --git a/Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesComponent.swift b/Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesComponent.swift deleted file mode 100644 index 63eeffb..0000000 --- a/Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesComponent.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// MyFavoritesComponent.swift -// Flick -// -// Created by Vlad Andrieiev on 22.05.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct MyFavoritesComponent: Component { - struct Props { - var contentType: Binding - var items: [any Item] - var genreById: (Genre.ID) -> Genre? - var loadMoreAction: Command - var isRedacted: Bool - var dialogStatus: Binding - } - - var props: Props - - var body: some View { - SelectiveItemsList(items: props.items, genreById: props.genreById, loadMoreAction: props.loadMoreAction, isRedacted: props.isRedacted) { - ContentToggle(contentType: props.contentType) - } - .customNavigationTitle(Localization.myFavoritesNavigationTitle()) - .navigationBarTitleDisplayMode(.inline) - .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - Button(action: {}) { - Image.filter - .aspectFit() - .frame(24) - } - } - } - .dialog(status: props.dialogStatus) - } -} - -// MARK: - Preview - -#Preview { - MyFavoritesComponent( - props: .init( - contentType: .constant(.movie), - items: Movie.testItems(count: 10), - genreById: { _ in .testItem() }, - loadMoreAction: {}, - isRedacted: true, - dialogStatus: .constant(.dismissed) - ) - ) -} diff --git a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift b/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift deleted file mode 100644 index 66f8cec..0000000 --- a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// ItemDetailsRecommendationsRouting.swift -// Flick -// -// Created by Alexander Sharko on 05.02.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import SwiftUI -import UDF - -struct ItemDetailsRecommendationsRouting: Routing { - enum Route: Hashable { - case itemDetails(any Item) - case recommendations(any Item) - - func hash(into hasher: inout Hasher) { - switch self { - case let .itemDetails(item): - hasher.combine(item) - case let .recommendations(item): - hasher.combine(item) - } - } - - static func == (lhs: Self, rhs: Self) -> Bool { - switch (lhs, rhs) { - case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): - areEqual(lhsItem, rhsItem) - case let (.recommendations(lhsItem), .recommendations(rhsItem)): - areEqual(lhsItem, rhsItem) - default: - false - } - } - } - - @ViewBuilder func view(for route: Route) -> some View { - switch route { - case let .itemDetails(item): - if let movie = item as? Movie { - MovieDetailsContainer(id: movie.id) - } else if let show = item as? Show { - ShowDetailsContainer(id: show.id) - } - case let .recommendations(item): - if let movie = item as? Movie { - MovieRecommendationsContainer(id: movie.id) - } else if let show = item as? Show { - ShowRecommendationsContainer(id: show.id) - } - } - } -} diff --git a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsComponent.swift b/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsComponent.swift deleted file mode 100644 index bf85f73..0000000 --- a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsComponent.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// ItemDetailsReviewsComponent.swift -// Flick -// -// Created by Alexander Sharko on 08.02.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct ItemDetailsReviewsComponent: Component { - struct Props { - var item: any Item - var reviews: [Review.ID] - var reviewById: (Review.ID) -> Review - var isRedacted: Bool - var router: Router = .init() - } - - var props: Props - - @Environment(\.globalRouter) private var globalRouter - - var body: some View { - if let id = props.reviews.first { - VStack(alignment: .leading, spacing: 24) { - SectionHeaderView( - title: Localization.itemDetailsReviewsSectionTitle(props.reviews.count), - seeAllAction: { - globalRouter.navigate(for: ItemDetailsReviewsRouting.self, to: .reviews(props.item)) - } - ) - - ReviewRow(review: props.reviewById(id)) - .embedInPlainButton { - globalRouter.navigate(for: ItemDetailsReviewsRouting.self, to: .reviewDetails(id)) - } - .buttonStyle(.scaled) - .padding(.horizontal) - } - .isRedacted(props.isRedacted) - .disabled(props.isRedacted) - .toolbar(.hidden, for: .tabBar) - } - } -} diff --git a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift b/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift deleted file mode 100644 index 81dc570..0000000 --- a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// ItemDetailsReviewsRouter.swift -// Flick -// -// Created by Alexander Sharko on 08.02.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import SwiftUI -import UDF - -struct ItemDetailsReviewsRouting: Routing { - enum Route: Hashable { - case reviewDetails(Review.ID) - case reviews(any Item) - - func hash(into hasher: inout Hasher) { - switch self { - case let .reviewDetails(id): - hasher.combine(id) - case let .reviews(item): - hasher.combine(item) - } - } - - static func == (lhs: Self, rhs: Self) -> Bool { - switch (lhs, rhs) { - case let (.reviewDetails(lhsId), .reviewDetails(rhsId)): - areEqual(lhsId, rhsId) - case let (.reviews(lhsItem), .reviews(rhsItem)): - areEqual(lhsItem, rhsItem) - default: - false - } - } - } - - @ViewBuilder func view(for route: Route) -> some View { - switch route { - case let .reviewDetails(id): - ReviewDetailsContainer(reviewId: id) - case let .reviews(item): - if let movie = item as? Movie { - MovieReviewsContainer(id: movie.id) - } else if let show = item as? Show { - ShowReviewsContainer(id: show.id) - } - } - } -} diff --git a/Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsComponent.swift b/Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsComponent.swift deleted file mode 100644 index 3b60f38..0000000 --- a/Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsComponent.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// ReviewDetailsComponent.swift -// Flick -// -// Created by Alexander Sharko on 10.02.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct ReviewDetailsComponent: Component { - struct Props { - var review: Review - } - - var props: Props - - var body: some View { - ScrollView { - VStack(alignment: .leading, spacing: 16) { - ReviewHeaderView(review: props.review, placeholderColor: .flSecondary) - .padding(.horizontal, 10) - Text(props.review.content) - .customFont(.body) - .foregroundStyle(.flText) - } - .padding() - } - .customNavigationTitle(Localization.itemDetailsReviewsNavigationTitle()) - .background(Color.flMain.edgesIgnoringSafeArea(.all)) - } -} - -// MARK: - Preview - -#Preview { - ReviewDetailsComponent( - props: .init( - review: .fakeItem() - ) - ) -} diff --git a/Flick/Code/Modules/Reviews/View/Reviews/ReviewsComponent.swift b/Flick/Code/Modules/Reviews/View/Reviews/ReviewsComponent.swift deleted file mode 100644 index 98c9899..0000000 --- a/Flick/Code/Modules/Reviews/View/Reviews/ReviewsComponent.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// ReviewsComponent.swift -// Flick -// -// Created by Alexander Sharko on 10.02.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. -// - -import DesignSystem -import Localizations -import SwiftUI -import UDF - -struct ReviewsComponent: Component { - struct Props { - var reviews: [Review.ID] - var reviewById: (Review.ID) -> Review - var loadMoreAction: Command - var dialogStatus: Binding - var router: Router = .init() - } - - var props: Props - - @Environment(\.globalRouter) private var globalRouter - - var body: some View { - VStack(spacing: 16) { - List(props.reviews, id: \.self) { id in - ReviewRow(review: props.reviewById(id)) - .embedInPlainButton { - globalRouter.navigate(for: ReviewsRouting.self, to: .reviewDetails(id)) - } - .onAppear { - if id == props.reviews.last { - props.loadMoreAction() - } - } - .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) - .listRowBackground(Color.flMain) - .listRowSeparator(.hidden) - } - .listStyle(.plain) - .scrollContentBackground(.hidden) - } - .customNavigationTitle(Localization.itemDetailsReviewsNavigationTitle()) - .background(Color.flMain.edgesIgnoringSafeArea(.all)) - } -} - -// MARK: - Preview - -#Preview { - ReviewsComponent( - props: .init( - reviews: Review.testItemIds(count: 10), - reviewById: { _ in .fakeItem() }, - loadMoreAction: {}, - dialogStatus: .constant(.dismissed) - ) - ) -} diff --git a/Flick/Code/Modules/SignIn/View/SignInRouter.swift b/Flick/Code/Modules/SignIn/View/SignInRouter.swift deleted file mode 100644 index 5a909ce..0000000 --- a/Flick/Code/Modules/SignIn/View/SignInRouter.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// SignInRouter.swift -// Flick -// -// Created by Alexander Sharko on 18.11.2022. -// Copyright © 2022 urlaunched.com. All rights reserved. -// - -import SwiftUI -import UDF - -struct SignInRouting: Routing { - enum Route { - case resetPassword - case signUp - } - - @ViewBuilder func view(for route: Route) -> some View { - switch route { - case .resetPassword: Text("Reset password") - case .signUp: Text("Sign Up") - } - } -} diff --git a/Flick/Info.plist b/Flick/Info.plist deleted file mode 100644 index 832db83..0000000 --- a/Flick/Info.plist +++ /dev/null @@ -1,15 +0,0 @@ - - - - - CFBundleAllowMixedLocalizations - - ITSAppUsesNonExemptEncryption - - UIAppFonts - - Poppins-Regular.ttf - Poppins-SemiBold.ttf - - - diff --git a/Flick/Resources/Preview Content/Preview Assets.xcassets/Contents.json b/Flick/Resources/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Flick/Resources/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Flick/Preview Content/Preview Assets.xcassets/poster.imageset/Contents.json b/Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/Contents.json similarity index 100% rename from Flick/Preview Content/Preview Assets.xcassets/poster.imageset/Contents.json rename to Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/Contents.json diff --git a/Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster.png b/Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster.png similarity index 100% rename from Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster.png rename to Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster.png diff --git a/Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@2x.png b/Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@2x.png similarity index 100% rename from Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@2x.png rename to Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@2x.png diff --git a/Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@3x.png b/Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@3x.png similarity index 100% rename from Flick/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@3x.png rename to Flick/Resources/Preview Content/Preview Assets.xcassets/poster.imageset/film poster@3x.png diff --git a/Flick/Resources/SplashScreen/Launch Screen.storyboard b/Flick/Resources/SplashScreen/LaunchScreen.storyboard similarity index 100% rename from Flick/Resources/SplashScreen/Launch Screen.storyboard rename to Flick/Resources/SplashScreen/LaunchScreen.storyboard diff --git a/Flick/Sources/Code/Common/Common.swift b/Flick/Sources/Code/Common/Common.swift new file mode 100644 index 0000000..01555f6 --- /dev/null +++ b/Flick/Sources/Code/Common/Common.swift @@ -0,0 +1,26 @@ +// +// Common.swift +// Flick +// +// Created by Bogdan Petkanych on 04.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import SwiftUI +import Models +import Localizations + +@ViewBuilder +func buildView( + item: any Item, + movieView: (Movie) -> some View, + showView: (Show) -> some View +) -> some View { + switch item { + case let item as Movie: + movieView(item) + case let item as Show: + showView(item) + default: + EmptyView() + } +} diff --git a/Flick/Code/Domain/UDF/Actions.swift b/Flick/Sources/Code/Domain/UDF/Actions.swift similarity index 100% rename from Flick/Code/Domain/UDF/Actions.swift rename to Flick/Sources/Code/Domain/UDF/Actions.swift diff --git a/Flick/Code/Domain/UDF/AppState.swift b/Flick/Sources/Code/Domain/UDF/AppState.swift similarity index 100% rename from Flick/Code/Domain/UDF/AppState.swift rename to Flick/Sources/Code/Domain/UDF/AppState.swift diff --git a/Flick/Code/Domain/UDF/Storage/Cast/CastStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Cast/CastStorage.swift similarity index 97% rename from Flick/Code/Domain/UDF/Storage/Cast/CastStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Cast/CastStorage.swift index 93fbf5d..4c3b612 100644 --- a/Flick/Code/Domain/UDF/Storage/Cast/CastStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Cast/CastStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllCast: Reducible { var byId: [Cast.ID: Cast] = [:] diff --git a/Flick/Code/Domain/UDF/Storage/Genres/GenresStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Genres/GenresStorage.swift similarity index 96% rename from Flick/Code/Domain/UDF/Storage/Genres/GenresStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Genres/GenresStorage.swift index 7cd30b1..d532aad 100644 --- a/Flick/Code/Domain/UDF/Storage/Genres/GenresStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Genres/GenresStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllGenres: Reducible { var byId: [Genre.ID: Genre] = [:] diff --git a/Flick/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift similarity index 97% rename from Flick/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift index 074119c..6221513 100644 --- a/Flick/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Movies/MoviesStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllMovies: Reducible { var byId: [Movie.ID: Movie] = [:] diff --git a/Flick/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift similarity index 97% rename from Flick/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift index 6e10e8b..5ec2f8d 100644 --- a/Flick/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Reviews/ReviewsStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllReviews: Reducible { var byId: [Review.ID: Review] = [:] diff --git a/Flick/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift similarity index 96% rename from Flick/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift index ac0992b..41ef284 100644 --- a/Flick/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Search Items/SearchItemsStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllSearchItems: Reducible { var byId: [SearchItem.ID: SearchItem] = [:] diff --git a/Flick/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift b/Flick/Sources/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift similarity index 97% rename from Flick/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift rename to Flick/Sources/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift index 3aad701..8356bc8 100644 --- a/Flick/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift +++ b/Flick/Sources/Code/Domain/UDF/Storage/Shows/ShowsStorage.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct AllShows: Reducible { var byId: [Show.ID: Show] = [:] diff --git a/Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift b/Flick/Sources/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift similarity index 72% rename from Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift rename to Flick/Sources/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift index e721d28..ec824f7 100644 --- a/Flick/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift +++ b/Flick/Sources/Code/Modules/Cast/ItemDetailsCast/ItemDetailsCastRouter.swift @@ -8,13 +8,11 @@ import SwiftUI import UDF +import Models +import ItemDetailsCastComponent struct ItemDetailsCastRouting: Routing { - enum Route: Hashable { - case cast([Cast.ID]) - } - - @ViewBuilder func view(for route: Route) -> some View { + @ViewBuilder func view(for route: ItemDetailsCastRoute) -> some View { switch route { case let .cast(cast): CastContainer(cast: cast) } diff --git a/Flick/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift b/Flick/Sources/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift rename to Flick/Sources/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift index e70071e..56e3821 100644 --- a/Flick/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift +++ b/Flick/Sources/Code/Modules/Cast/MovieCast/MovieCastMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +import Models final class MovieCastMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift b/Flick/Sources/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift similarity index 96% rename from Flick/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift rename to Flick/Sources/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift index 08534fd..167352a 100644 --- a/Flick/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift +++ b/Flick/Sources/Code/Modules/Cast/MovieCast/State/MovieCastFlow.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models enum MovieCastFlow: IdentifiableFlow { case none diff --git a/Flick/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift b/Flick/Sources/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift similarity index 72% rename from Flick/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift rename to Flick/Sources/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift index 5f08a5b..9ab99de 100644 --- a/Flick/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift +++ b/Flick/Sources/Code/Modules/Cast/MovieCast/View/MovieCastContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import ItemDetailsCastComponent +import Common struct MovieCastContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsCastComponent + typealias ContainerComponent = ItemDetailsCastComponent let id: Movie.ID @@ -21,7 +24,13 @@ struct MovieCastContainer: BindableContainer { .init( cast: cast, castById: { castById(id: $0) }, - isRedacted: isRedacted + isRedacted: isRedacted, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift b/Flick/Sources/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift rename to Flick/Sources/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift index dbe42e3..806ac70 100644 --- a/Flick/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift +++ b/Flick/Sources/Code/Modules/Cast/ShowCast/ShowCastMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +import Models final class ShowCastMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift b/Flick/Sources/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift similarity index 96% rename from Flick/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift rename to Flick/Sources/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift index 5ee47ff..e259a18 100644 --- a/Flick/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift +++ b/Flick/Sources/Code/Modules/Cast/ShowCast/State/ShowCastFlow.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models enum ShowCastFlow: IdentifiableFlow { case none diff --git a/Flick/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift b/Flick/Sources/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift similarity index 72% rename from Flick/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift rename to Flick/Sources/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift index 40b1a8a..3f42e0e 100644 --- a/Flick/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift +++ b/Flick/Sources/Code/Modules/Cast/ShowCast/View/ShowCastContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import ItemDetailsCastComponent +import Common struct ShowCastContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsCastComponent + typealias ContainerComponent = ItemDetailsCastComponent let id: Show.ID @@ -21,7 +24,13 @@ struct ShowCastContainer: BindableContainer { .init( cast: cast, castById: { castById(id: $0) }, - isRedacted: isRedacted + isRedacted: isRedacted, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Cast/State/CastForm.swift b/Flick/Sources/Code/Modules/Cast/State/CastForm.swift similarity index 100% rename from Flick/Code/Modules/Cast/State/CastForm.swift rename to Flick/Sources/Code/Modules/Cast/State/CastForm.swift diff --git a/Flick/Code/Modules/Cast/View/CastContainer.swift b/Flick/Sources/Code/Modules/Cast/View/CastContainer.swift similarity index 50% rename from Flick/Code/Modules/Cast/View/CastContainer.swift rename to Flick/Sources/Code/Modules/Cast/View/CastContainer.swift index eb0d3bf..20cb549 100644 --- a/Flick/Code/Modules/Cast/View/CastContainer.swift +++ b/Flick/Sources/Code/Modules/Cast/View/CastContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import Common +import CastComponent struct CastContainer: Container { - typealias ContainerComponent = CastComponent + typealias ContainerComponent = CastComponent let cast: [Cast.ID] @@ -21,7 +24,13 @@ struct CastContainer: Container { .init( cast: cast, castById: store.state.allCast.castBy, - dialogStatus: store.$state.castForm.dialog + dialogStatus: store.$state.castForm.dialog, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } } diff --git a/Flick/Sources/Code/Modules/Cast/View/CastRouter.swift b/Flick/Sources/Code/Modules/Cast/View/CastRouter.swift new file mode 100644 index 0000000..e3215dd --- /dev/null +++ b/Flick/Sources/Code/Modules/Cast/View/CastRouter.swift @@ -0,0 +1,20 @@ +// +// ItemDetailsCastRouter.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import CastComponent + +struct CastRouting: Routing { + @ViewBuilder func view(for route: CastRoute) -> some View { + switch route { + case let .cast(cast): CastContainer(cast: cast) + } + } +} diff --git a/Flick/Code/Modules/Home/GenresMiddleware.swift b/Flick/Sources/Code/Modules/Home/GenresMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Home/GenresMiddleware.swift rename to Flick/Sources/Code/Modules/Home/GenresMiddleware.swift index 69980f0..b28faec 100644 --- a/Flick/Code/Modules/Home/GenresMiddleware.swift +++ b/Flick/Sources/Code/Modules/Home/GenresMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +import Models final class GenresMiddleware: BaseObservableMiddleware { var environment: Environment! diff --git a/Flick/Code/Modules/Home/HomeMiddleware.swift b/Flick/Sources/Code/Modules/Home/HomeMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Home/HomeMiddleware.swift rename to Flick/Sources/Code/Modules/Home/HomeMiddleware.swift index be87f0f..8e9c54b 100644 --- a/Flick/Code/Modules/Home/HomeMiddleware.swift +++ b/Flick/Sources/Code/Modules/Home/HomeMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +import Models final class HomeMiddleware: BaseReducibleMiddleware { var environment: Environment! diff --git a/Flick/Code/Modules/Home/State/HomeFlow.swift b/Flick/Sources/Code/Modules/Home/State/HomeFlow.swift similarity index 98% rename from Flick/Code/Modules/Home/State/HomeFlow.swift rename to Flick/Sources/Code/Modules/Home/State/HomeFlow.swift index 8f222ea..04f5327 100644 --- a/Flick/Code/Modules/Home/State/HomeFlow.swift +++ b/Flick/Sources/Code/Modules/Home/State/HomeFlow.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import Models enum HomeFlow: IdentifiableFlow { case none, loading diff --git a/Flick/Code/Modules/Home/State/HomeForm.swift b/Flick/Sources/Code/Modules/Home/State/HomeForm.swift similarity index 94% rename from Flick/Code/Modules/Home/State/HomeForm.swift rename to Flick/Sources/Code/Modules/Home/State/HomeForm.swift index b0322eb..6e1d5f2 100644 --- a/Flick/Code/Modules/Home/State/HomeForm.swift +++ b/Flick/Sources/Code/Modules/Home/State/HomeForm.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models struct HomeForm: Form { var contentType: ContentType = .movie diff --git a/Flick/Code/Modules/Home/State/MovieGenresFlow.swift b/Flick/Sources/Code/Modules/Home/State/MovieGenresFlow.swift similarity index 97% rename from Flick/Code/Modules/Home/State/MovieGenresFlow.swift rename to Flick/Sources/Code/Modules/Home/State/MovieGenresFlow.swift index 8b23015..cd0feb8 100644 --- a/Flick/Code/Modules/Home/State/MovieGenresFlow.swift +++ b/Flick/Sources/Code/Modules/Home/State/MovieGenresFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum MovieGenresFlow: IdentifiableFlow { case none, loading diff --git a/Flick/Code/Modules/Home/State/ShowGenresFlow.swift b/Flick/Sources/Code/Modules/Home/State/ShowGenresFlow.swift similarity index 97% rename from Flick/Code/Modules/Home/State/ShowGenresFlow.swift rename to Flick/Sources/Code/Modules/Home/State/ShowGenresFlow.swift index b2e6ad8..f0de9c5 100644 --- a/Flick/Code/Modules/Home/State/ShowGenresFlow.swift +++ b/Flick/Sources/Code/Modules/Home/State/ShowGenresFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum ShowGenresFlow: IdentifiableFlow { case none, loading diff --git a/Flick/Code/Modules/Home/View/Home/HomeContainer.swift b/Flick/Sources/Code/Modules/Home/View/Home/HomeContainer.swift similarity index 68% rename from Flick/Code/Modules/Home/View/Home/HomeContainer.swift rename to Flick/Sources/Code/Modules/Home/View/Home/HomeContainer.swift index 4bf2eff..455b323 100644 --- a/Flick/Code/Modules/Home/View/Home/HomeContainer.swift +++ b/Flick/Sources/Code/Modules/Home/View/Home/HomeContainer.swift @@ -8,6 +8,9 @@ import SwiftUI import UDF +import Models +import Common +import HomeComponent struct HomeContainer: Container { typealias ContainerComponent = HomeComponent @@ -34,7 +37,21 @@ struct HomeContainer: Container { showsForSection: { isShowsRedacted(section: $0) ? Show.fakeItems(count: 3) : showsForSection($0, store: store) }, isMoviesRedacted: { isMoviesRedacted(section: $0) }, isShowsRedacted: { isShowsRedacted(section: $0) }, - dialogStatus: store.$state.homeForm.dialog + dialogStatus: store.$state.homeForm.dialog, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .mainHomeSection(section: section as Models.MovieSection, retrieveItems: retrieveItems): + MainHomeSectionContainer(section: section, retrieveItems: retrieveItems) + case let .mainHomeSection(section: section as Models.ShowSection, retrieveItems: retrieveItems): + MainHomeSectionContainer(section: section, retrieveItems: retrieveItems) + case let .homeSection(section: section as Models.MovieSection, retrieveItems: retrieveItems): + HomeSectionContainer(section: section, retrieveItems: retrieveItems) + case let .homeSection(section: section as Models.ShowSection, retrieveItems: retrieveItems): + HomeSectionContainer(section: section, retrieveItems: retrieveItems) + default: + EmptyView() + } + }) ) } } diff --git a/Flick/Code/Modules/Home/View/Home/HomeRouter.swift b/Flick/Sources/Code/Modules/Home/View/Home/HomeRouter.swift similarity index 95% rename from Flick/Code/Modules/Home/View/Home/HomeRouter.swift rename to Flick/Sources/Code/Modules/Home/View/Home/HomeRouter.swift index 947ae63..c4de44d 100644 --- a/Flick/Code/Modules/Home/View/Home/HomeRouter.swift +++ b/Flick/Sources/Code/Modules/Home/View/Home/HomeRouter.swift @@ -8,11 +8,13 @@ import SwiftUI import UDF +import Common +import Models struct HomeRouting: Routing { enum Route: Hashable { case itemDetails(any Item) - case sectionDetails(any Section) + case sectionDetails(any Models.Section) func hash(into hasher: inout Hasher) { switch self { diff --git a/Flick/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift b/Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift similarity index 53% rename from Flick/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift rename to Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift index 982c6f2..2d6bb74 100644 --- a/Flick/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift +++ b/Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionContainer.swift @@ -8,33 +8,40 @@ import SwiftUI import UDF +import Models +import Common +import HomeSectionComponent -struct HomeSectionContainer: Container { - typealias ContainerComponent = HomeSectionComponent +struct HomeSectionContainer: Container { + typealias ContainerComponent = HomeSectionComponent let section: S var retrieveItems: () -> [any Item] - var scopeOfWork: (_ state: AppState) -> Scope init( section: S, - retrieveItems: @escaping () -> [any Item], - @ScopeBuilder scopeOfWork: @escaping (_ state: AppState) -> Scope + retrieveItems: @escaping () -> [any Item] ) { self.section = section self.retrieveItems = retrieveItems - self.scopeOfWork = scopeOfWork } func scope(for state: AppState) -> Scope { - return scopeOfWork(state) + state.allShows + state.allMovies } func map(store: EnvironmentStore) -> ContainerComponent.Props { .init( section: section, items: retrieveItems(), - genreById: { store.state.allGenres.byId[$0] } + genreById: { store.state.allGenres.byId[$0] }, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionRouter.swift b/Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionRouter.swift new file mode 100644 index 0000000..7915a33 --- /dev/null +++ b/Flick/Sources/Code/Modules/Home/View/HomeSection/HomeSectionRouter.swift @@ -0,0 +1,33 @@ +// +// HomeSectionRouter.swift +// Flick +// +// Created by Valentin Petrulia on 27.02.2025. +// Copyright © 2025 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common +import HomeSectionComponent + +struct HomeSectionRouter: Routing { + @ViewBuilder func view(for route: HomeSectionRoute) -> some View { + switch route { + case let .itemDetails(item): + buildView( + item: item, + movieView: { MovieDetailsContainer(id: $0.id) }, + showView: { ShowDetailsContainer(id: $0.id) } + ) + + case let .sectionDetails(section): + if let movieSection = section as? MovieSection { + SectionDetailsContainer(section: movieSection) + } else if let showSection = section as? ShowSection { + SectionDetailsContainer(section: showSection) + } + } + } +} diff --git a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift b/Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift similarity index 53% rename from Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift rename to Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift index 8534d02..28d43b3 100644 --- a/Flick/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift +++ b/Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionContainer.swift @@ -7,33 +7,40 @@ // import UDF +import Models +import Common +import MainHomeSectionComponent struct MainHomeSectionContainer: Container { - typealias ContainerComponent = MainHomeSectionComponent + typealias ContainerComponent = MainHomeSectionComponent let section: S var retrieveItems: () -> [any Item] - var scopeOfWork: (_ state: AppState) -> Scope init( section: S, - retrieveItems: @escaping () -> [any Item], - @ScopeBuilder scopeOfWork: @escaping (_ state: AppState) -> Scope + retrieveItems: @escaping () -> [any Item] ) { self.section = section self.retrieveItems = retrieveItems - self.scopeOfWork = scopeOfWork } func scope(for state: AppState) -> Scope { - return scopeOfWork(state) + state.allShows + state.allMovies } func map(store: EnvironmentStore) -> ContainerComponent.Props { .init( section: section, items: retrieveItems(), - genreById: { store.state.allGenres.byId[$0] } + genreById: { store.state.allGenres.byId[$0] }, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type, isLoaderPresented: isLoaderPresented): + ImageContainer(size: size, path: path, type: type, isLoaderPresented: isLoaderPresented) + } + }) ) } diff --git a/Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift b/Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift new file mode 100644 index 0000000..598420b --- /dev/null +++ b/Flick/Sources/Code/Modules/Home/View/MainHomeSection/MainHomeSectionRouter.swift @@ -0,0 +1,33 @@ +// +// MainHomeSectionRouter.swift +// Flick +// +// Created by Valentin Petrulia on 27.02.2025. +// Copyright © 2025 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common +import MainHomeSectionComponent + +struct MainHomeSectionRouting: Routing { + @ViewBuilder func view(for route: MainHomeSectionRoute) -> some View { + switch route { + case let .itemDetails(item): + buildView( + item: item, + movieView: { MovieDetailsContainer(id: $0.id) }, + showView: { ShowDetailsContainer(id: $0.id) } + ) + + case let .sectionDetails(section): + if let movieSection = section as? MovieSection { + SectionDetailsContainer(section: movieSection) + } else if let showSection = section as? ShowSection { + SectionDetailsContainer(section: showSection) + } + } + } +} diff --git a/Flick/Code/Modules/Image/ImageConfigsMiddleware.swift b/Flick/Sources/Code/Modules/Image/ImageConfigsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Image/ImageConfigsMiddleware.swift rename to Flick/Sources/Code/Modules/Image/ImageConfigsMiddleware.swift index ba5b00c..21354ec 100644 --- a/Flick/Code/Modules/Image/ImageConfigsMiddleware.swift +++ b/Flick/Sources/Code/Modules/Image/ImageConfigsMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +import Models final class ImageConfigsMiddleware: BaseObservableMiddleware { var environment: Environment! diff --git a/Flick/Code/Modules/Image/State/ImageConfigsFlow.swift b/Flick/Sources/Code/Modules/Image/State/ImageConfigsFlow.swift similarity index 97% rename from Flick/Code/Modules/Image/State/ImageConfigsFlow.swift rename to Flick/Sources/Code/Modules/Image/State/ImageConfigsFlow.swift index 60bc81b..76becf4 100644 --- a/Flick/Code/Modules/Image/State/ImageConfigsFlow.swift +++ b/Flick/Sources/Code/Modules/Image/State/ImageConfigsFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum ImageConfigsFlow: IdentifiableFlow { case none, loading diff --git a/Flick/Code/Modules/Image/State/ImageConfigsForm.swift b/Flick/Sources/Code/Modules/Image/State/ImageConfigsForm.swift similarity index 94% rename from Flick/Code/Modules/Image/State/ImageConfigsForm.swift rename to Flick/Sources/Code/Modules/Image/State/ImageConfigsForm.swift index 493765d..b021eae 100644 --- a/Flick/Code/Modules/Image/State/ImageConfigsForm.swift +++ b/Flick/Sources/Code/Modules/Image/State/ImageConfigsForm.swift @@ -8,6 +8,7 @@ import Foundation import UDF +@preconcurrency import Models struct ImageConfigsForm: Form { var configs: ImageConfigs = .basic diff --git a/Flick/Code/Modules/Image/View/ImageContainer.swift b/Flick/Sources/Code/Modules/Image/View/ImageContainer.swift similarity index 72% rename from Flick/Code/Modules/Image/View/ImageContainer.swift rename to Flick/Sources/Code/Modules/Image/View/ImageContainer.swift index 289acea..c178627 100644 --- a/Flick/Code/Modules/Image/View/ImageContainer.swift +++ b/Flick/Sources/Code/Modules/Image/View/ImageContainer.swift @@ -8,6 +8,8 @@ import SwiftUI import UDF +import Common +import ImageComponent struct ImageContainer: Container { typealias ContainerComponent = ImageComponent @@ -46,20 +48,17 @@ private extension ImageContainer { } } -extension ImageContainer { - enum ImageType { - case backdrop, logo, poster, profile, still - - func sizes(_ state: AppState) -> [Int] { - let configs = state.imageConfigsForm.configs - - switch self { - case .backdrop: return configs.backdropSizes - case .logo: return configs.logoSizes - case .poster: return configs.posterSizes - case .profile: return configs.profileSizes - case .still: return configs.stillSizes - } +extension ImageType { + + func sizes(_ state: AppState) -> [Int] { + let configs = state.imageConfigsForm.configs + + switch self { + case .backdrop: return configs.backdropSizes + case .logo: return configs.logoSizes + case .poster: return configs.posterSizes + case .profile: return configs.profileSizes + case .still: return configs.stillSizes } } } diff --git a/Flick/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift rename to Flick/Sources/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift index a68b75c..f16a104 100644 --- a/Flick/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/MovieDetailsMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +import Models final class MovieDetailsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift similarity index 96% rename from Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift rename to Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift index 2ddeaf5..8854b9f 100644 --- a/Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsFlow.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models enum MovieDetailsFlow: IdentifiableFlow { case none diff --git a/Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift similarity index 94% rename from Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift rename to Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift index 64052d4..929abfa 100644 --- a/Flick/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/State/MovieDetailsForm.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models struct MovieDetailsForm: Form { var dialog: DialogStatus = .dismissed diff --git a/Flick/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift similarity index 63% rename from Flick/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift rename to Flick/Sources/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift index 30cd480..14154dd 100644 --- a/Flick/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/MovieDetails/View/MovieDetailsContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import Common +import ItemDetailsComponent struct MovieDetailsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsComponent + typealias ContainerComponent = ItemDetailsComponent let id: Movie.ID @@ -21,7 +24,13 @@ struct MovieDetailsContainer: BindableContainer { .init( item: store.state.allMovies.movieBy(id: id), genreById: store.state.allGenres.genreBy, - dialog: store.$state.movieDetailsForm[id].dialog + dialog: store.$state.movieDetailsForm[id].dialog, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift rename to Flick/Sources/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift index 720bd07..4b6fd41 100644 --- a/Flick/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/ShowDetailsMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +import Models final class ShowDetailsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift similarity index 96% rename from Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift rename to Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift index e2a2319..d55c695 100644 --- a/Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsFlow.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models enum ShowDetailsFlow: IdentifiableFlow { case none diff --git a/Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift similarity index 94% rename from Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift rename to Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift index a073c7e..56faed0 100644 --- a/Flick/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/State/ShowDetailsForm.swift @@ -7,6 +7,7 @@ // import UDF +@preconcurrency import Models struct ShowDetailsForm: Form { var dialog: DialogStatus = .dismissed diff --git a/Flick/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift similarity index 61% rename from Flick/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift rename to Flick/Sources/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift index ef0a97b..8638d50 100644 --- a/Flick/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift +++ b/Flick/Sources/Code/Modules/ItemDetails/ShowDetails/View/ShowDetailsContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import ItemDetailsComponent +import Common struct ShowDetailsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsComponent + typealias ContainerComponent = ItemDetailsComponent let id: Show.ID @@ -21,7 +24,14 @@ struct ShowDetailsContainer: BindableContainer { .init( item: store.state.allShows.showBy(id: id), genreById: store.state.allGenres.genreBy, - dialog: store.$state.showDetailsForm[id].dialog + dialog: store.$state.showDetailsForm[id].dialog, + router: .init(), + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Sources/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift b/Flick/Sources/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift new file mode 100644 index 0000000..4aef9e3 --- /dev/null +++ b/Flick/Sources/Code/Modules/ItemDetails/View/ItemDetailsRouter.swift @@ -0,0 +1,44 @@ +// +// ItemDetailsRouter.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common +import ItemDetailsComponent + +struct ItemDetailsRouting: Routing { + @ViewBuilder + func view(for route: ItemDetailsRoute) -> some View { + switch route { + case let .cast(item): + buildView( + item: item, + movieView: { MovieCastContainer(id: $0.id) }, + showView: { ShowCastContainer(id: $0.id) } + ) + + case let .reviews(item): + buildView( + item: item, + movieView: { MovieDetailsReviewsContainer(id: $0.id) }, + showView: { ShowDetailsReviewsContainer(id: $0.id) } + ) + + case let .recommendations(item): + buildView( + item: item, + movieView: { MovieDetailsRecommendationsContainer(id: $0.id) }, + showView: { ShowDetailsRecommendationsContainer(id: $0.id) } + ) + + case let .whereToWatch(item): + WhereToWatchContainer(item: item) + } + } +} diff --git a/Flick/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift b/Flick/Sources/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift similarity index 99% rename from Flick/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift rename to Flick/Sources/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift index 2236977..5c85fdb 100644 --- a/Flick/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift +++ b/Flick/Sources/Code/Modules/MyFavorites/MyFavoritesMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +import Models final class MyFavoritesMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable, CaseIterable { diff --git a/Flick/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift b/Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift similarity index 99% rename from Flick/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift rename to Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift index d2eb809..a7faf64 100644 --- a/Flick/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift +++ b/Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesFlow.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import Models enum MyFavoritesFlow: IdentifiableFlow { case none, loadMovies(Int), loadShows(Int) diff --git a/Flick/Code/Modules/MyFavorites/State/MyFavoritesForm.swift b/Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesForm.swift similarity index 96% rename from Flick/Code/Modules/MyFavorites/State/MyFavoritesForm.swift rename to Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesForm.swift index e5c8b67..ef32420 100644 --- a/Flick/Code/Modules/MyFavorites/State/MyFavoritesForm.swift +++ b/Flick/Sources/Code/Modules/MyFavorites/State/MyFavoritesForm.swift @@ -7,6 +7,8 @@ // import UDF +@preconcurrency import Models +import Common struct MyFavoritesForm: Form { var contentType: ContentType = .movie diff --git a/Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift b/Flick/Sources/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift similarity index 87% rename from Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift rename to Flick/Sources/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift index a96592a..07dca73 100644 --- a/Flick/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift +++ b/Flick/Sources/Code/Modules/MyFavorites/View/MyFavorites/MyFavoritesContainer.swift @@ -8,6 +8,9 @@ import SwiftUI import UDF +import Models +import MyFavoritesComponent +import Common struct MyFavoritesContainer: Container { typealias ContainerComponent = MyFavoritesComponent @@ -26,7 +29,13 @@ struct MyFavoritesContainer: Container { genreById: { store.state.allGenres.byId[$0] }, loadMoreAction: loadNewPageIfNeeded, isRedacted: isRedacted, - dialogStatus: store.$state.myFavoritesForm.dialog + dialogStatus: store.$state.myFavoritesForm.dialog, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/NetworkConnectivity/NetworkConnectivityMiddleware.swift b/Flick/Sources/Code/Modules/NetworkConnectivity/NetworkConnectivityMiddleware.swift similarity index 100% rename from Flick/Code/Modules/NetworkConnectivity/NetworkConnectivityMiddleware.swift rename to Flick/Sources/Code/Modules/NetworkConnectivity/NetworkConnectivityMiddleware.swift diff --git a/Flick/Code/Modules/NetworkConnectivity/State/NetworkConnectivityForm.swift b/Flick/Sources/Code/Modules/NetworkConnectivity/State/NetworkConnectivityForm.swift similarity index 100% rename from Flick/Code/Modules/NetworkConnectivity/State/NetworkConnectivityForm.swift rename to Flick/Sources/Code/Modules/NetworkConnectivity/State/NetworkConnectivityForm.swift diff --git a/Flick/Code/Modules/Onboarding/View/OnboardingContainer.swift b/Flick/Sources/Code/Modules/Onboarding/View/OnboardingContainer.swift similarity index 96% rename from Flick/Code/Modules/Onboarding/View/OnboardingContainer.swift rename to Flick/Sources/Code/Modules/Onboarding/View/OnboardingContainer.swift index 93e703f..a749b1b 100644 --- a/Flick/Code/Modules/Onboarding/View/OnboardingContainer.swift +++ b/Flick/Sources/Code/Modules/Onboarding/View/OnboardingContainer.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import OnboardingComponent struct OnboardingContainer: Container { typealias ContainerComponent = OnboardingComponent diff --git a/Flick/Code/Modules/Profile/View/SettingsContainer.swift b/Flick/Sources/Code/Modules/Profile/View/SettingsContainer.swift similarity index 95% rename from Flick/Code/Modules/Profile/View/SettingsContainer.swift rename to Flick/Sources/Code/Modules/Profile/View/SettingsContainer.swift index c668377..043ac26 100644 --- a/Flick/Code/Modules/Profile/View/SettingsContainer.swift +++ b/Flick/Sources/Code/Modules/Profile/View/SettingsContainer.swift @@ -8,6 +8,7 @@ import UDF import UIKit +import SettingsComponent struct SettingsContainer: Container { typealias ContainerComponent = SettingsComponent diff --git a/Flick/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift rename to Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift index 329995f..90a4114 100644 --- a/Flick/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift +++ b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/MovieRecommendationsMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +@preconcurrency import Models final class MovieRecommendationsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift similarity index 98% rename from Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift rename to Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift index 27d16a9..77f1087 100644 --- a/Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift +++ b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum MovieRecommendationsFlow: IdentifiableFlow { case none, loadMovies(Int) diff --git a/Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift similarity index 94% rename from Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift rename to Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift index 9a78edc..361b654 100644 --- a/Flick/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift +++ b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/State/MovieRecommendationsForm.swift @@ -7,6 +7,8 @@ // import UDF +@preconcurrency import Models +import Common struct MovieRecommendationsForm: Form { var paginator: Paginator = .init( diff --git a/Flick/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift similarity index 93% rename from Flick/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift rename to Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift index 32f3b3f..2909ccd 100644 --- a/Flick/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift +++ b/Flick/Sources/Code/Modules/Recommendations/MovieRecommendations/View/MovieRecommendationsContainer.swift @@ -7,9 +7,11 @@ // import UDF +import Models +import SectionDetailsComponent struct MovieRecommendationsContainer: BindableContainer { - typealias ContainerComponent = SectionDetailsComponent + typealias ContainerComponent = SectionDetailsComponent let id: Movie.ID @@ -24,7 +26,7 @@ struct MovieRecommendationsContainer: BindableContainer { items: movies, genreById: store.state.allGenres.genreBy, loadMoreAction: loadNewPageIfNeeded, - dialogStatus: store.$state.movieRecommendationsForm[id].dialog + dialogStatus: store.$state.movieRecommendationsForm[id].dialog, ) } diff --git a/Flick/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift rename to Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift index feeb4f1..354a761 100644 --- a/Flick/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift +++ b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/ShowRecommendationsMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +@preconcurrency import Models final class ShowRecommendationsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift similarity index 98% rename from Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift rename to Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift index 407d801..5ead755 100644 --- a/Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift +++ b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum ShowRecommendationsFlow: IdentifiableFlow { case none, loadShows(Int) diff --git a/Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift similarity index 94% rename from Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift rename to Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift index c48c9ec..c93d5e6 100644 --- a/Flick/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift +++ b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/State/ShowRecommendationsForm.swift @@ -7,6 +7,8 @@ // import UDF +import Common +@preconcurrency import Models struct ShowRecommendationsForm: Form { var paginator: Paginator = .init( diff --git a/Flick/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift similarity index 93% rename from Flick/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift rename to Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift index 48a2e9d..e6361a8 100644 --- a/Flick/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift +++ b/Flick/Sources/Code/Modules/Recommendations/ShowRecommendations/View/ShowRecommendationsContainer.swift @@ -7,9 +7,11 @@ // import UDF +import Models +import SectionDetailsComponent struct ShowRecommendationsContainer: BindableContainer { - typealias ContainerComponent = SectionDetailsComponent + typealias ContainerComponent = SectionDetailsComponent let id: Show.ID diff --git a/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift new file mode 100644 index 0000000..8495279 --- /dev/null +++ b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsRouting.swift @@ -0,0 +1,32 @@ +// +// ItemDetailsRecommendationsRouting.swift +// Flick +// +// Created by Alexander Sharko on 05.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common +import ItemDetailsRecommendationsComponent + +struct ItemDetailsRecommendationsRouting: Routing { + @ViewBuilder func view(for route: ItemDetailsRecommendationsRoute) -> some View { + switch route { + case let .itemDetails(item): + if let movie = item as? Movie { + MovieDetailsContainer(id: movie.id) + } else if let show = item as? Show { + ShowDetailsContainer(id: show.id) + } + case let .recommendations(item): + if let movie = item as? Movie { + MovieRecommendationsContainer(id: movie.id) + } else if let show = item as? Show { + ShowRecommendationsContainer(id: show.id) + } + } + } +} diff --git a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift similarity index 74% rename from Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift rename to Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift index a1c3e4d..e109414 100644 --- a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift +++ b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/MovieDetailsRecommendationsContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import Common +import ItemDetailsRecommendationsComponent struct MovieDetailsRecommendationsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsRecommendationsComponent + typealias ContainerComponent = ItemDetailsRecommendationsComponent let id: Movie.ID @@ -23,7 +26,13 @@ struct MovieDetailsRecommendationsContainer: BindableContainer { item: store.state.allMovies.movieBy(id: id), items: isRedacted ? Movie.fakeItems(count: 3) : movies, isRedacted: isRedacted, - genreById: store.state.allGenres.genreBy + genreById: store.state.allGenres.genreBy, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift similarity index 73% rename from Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift rename to Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift index 0a3dea4..85fdf7e 100644 --- a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift +++ b/Flick/Sources/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ShowDetailsRecommendationsContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import Common +import ItemDetailsRecommendationsComponent struct ShowDetailsRecommendationsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsRecommendationsComponent + typealias ContainerComponent = ItemDetailsRecommendationsComponent let id: Show.ID @@ -22,7 +25,13 @@ struct ShowDetailsRecommendationsContainer: BindableContainer { item: store.state.allShows.showBy(id: id), items: isRedacted ? Show.fakeItems(count: 3) : shows, isRedacted: isRedacted, - genreById: store.state.allGenres.genreBy + genreById: store.state.allGenres.genreBy, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift b/Flick/Sources/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift similarity index 96% rename from Flick/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift rename to Flick/Sources/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift index 2db0b02..fed1f18 100644 --- a/Flick/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift +++ b/Flick/Sources/Code/Modules/Reviews/MovieReviews/MovieReviewsMiddleware.swift @@ -8,8 +8,9 @@ import API import UDF +@preconcurrency import Models -final class MovieReviewsMiddleware: BaseObservableMiddleware { +final class MovieReviewsMiddleware: Middleware, @unchecked Sendable { enum Cancellation: Hashable { case loadMovieReviews(Movie.ID) } diff --git a/Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift b/Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift similarity index 98% rename from Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift rename to Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift index 5c054e8..a10452e 100644 --- a/Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift +++ b/Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsFlow.swift @@ -7,6 +7,7 @@ // import UDF +import Models enum MovieReviewsFlow: IdentifiableFlow { case none, loadMovieReviews(Int) diff --git a/Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift b/Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift similarity index 94% rename from Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift rename to Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift index 0d08bae..3e88a11 100644 --- a/Flick/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift +++ b/Flick/Sources/Code/Modules/Reviews/MovieReviews/State/MovieReviewsForm.swift @@ -7,6 +7,8 @@ // import UDF +@preconcurrency import Models +import Common struct MovieReviewsForm: Form { var paginator: Paginator = .init( diff --git a/Flick/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift b/Flick/Sources/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift similarity index 93% rename from Flick/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift rename to Flick/Sources/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift index a6ee0d4..1a4fb05 100644 --- a/Flick/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift +++ b/Flick/Sources/Code/Modules/Reviews/MovieReviews/View/MovieReviewsContainer.swift @@ -7,9 +7,11 @@ // import UDF +import Models +import ReviewsComponent struct MovieReviewsContainer: BindableContainer { - typealias ContainerComponent = ReviewsComponent + typealias ContainerComponent = ReviewsComponent let id: Movie.ID diff --git a/Flick/Code/Modules/Reviews/View/Reviews/ReviewsRouter.swift b/Flick/Sources/Code/Modules/Reviews/ReviewsRouter.swift similarity index 71% rename from Flick/Code/Modules/Reviews/View/Reviews/ReviewsRouter.swift rename to Flick/Sources/Code/Modules/Reviews/ReviewsRouter.swift index 18044bc..5a1ed23 100644 --- a/Flick/Code/Modules/Reviews/View/Reviews/ReviewsRouter.swift +++ b/Flick/Sources/Code/Modules/Reviews/ReviewsRouter.swift @@ -8,13 +8,12 @@ import SwiftUI import UDF +import Models +import ReviewsComponent struct ReviewsRouting: Routing { - enum Route: Hashable { - case reviewDetails(Review.ID) - } - - @ViewBuilder func view(for route: Route) -> some View { + + @ViewBuilder func view(for route: ReviewsRoute) -> some View { switch route { case let .reviewDetails(id): ReviewDetailsContainer(reviewId: id) } diff --git a/Flick/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift b/Flick/Sources/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift rename to Flick/Sources/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift index 1cf2c15..3917c82 100644 --- a/Flick/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift +++ b/Flick/Sources/Code/Modules/Reviews/ShowReviews/ShowReviewsMiddleware.swift @@ -8,6 +8,7 @@ import API import UDF +@preconcurrency import Models final class ShowReviewsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable { diff --git a/Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift b/Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift similarity index 98% rename from Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift rename to Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift index a7f9389..ef9b84f 100644 --- a/Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift +++ b/Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsFlow.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import Models enum ShowReviewsFlow: IdentifiableFlow { case none, loadShowReviews(Int) diff --git a/Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift b/Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift similarity index 94% rename from Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift rename to Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift index 45546a7..feb11ba 100644 --- a/Flick/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift +++ b/Flick/Sources/Code/Modules/Reviews/ShowReviews/State/ShowReviewsForm.swift @@ -7,6 +7,8 @@ // import UDF +@preconcurrency import Models +import Common struct ShowReviewsForm: Form { var paginator: Paginator = .init( diff --git a/Flick/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift b/Flick/Sources/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift similarity index 93% rename from Flick/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift rename to Flick/Sources/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift index 50c2b45..03dad09 100644 --- a/Flick/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift +++ b/Flick/Sources/Code/Modules/Reviews/ShowReviews/View/ShowReviewsContainer.swift @@ -7,9 +7,11 @@ // import UDF +import Models +import ReviewsComponent struct ShowReviewsContainer: BindableContainer { - typealias ContainerComponent = ReviewsComponent + typealias ContainerComponent = ReviewsComponent let id: Show.ID diff --git a/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift new file mode 100644 index 0000000..03cc313 --- /dev/null +++ b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ItemDetailsReviewsRouter.swift @@ -0,0 +1,28 @@ +// +// ItemDetailsReviewsRouter.swift +// Flick +// +// Created by Alexander Sharko on 08.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common +import ItemDetailsReviewsComponent + +struct ItemDetailsReviewsRouting: Routing { + @ViewBuilder func view(for route: ItemDetailsReviewsRoute) -> some View { + switch route { + case let .reviewDetails(id): + ReviewDetailsContainer(reviewId: id) + case let .reviews(item): + if let movie = item as? Movie { + MovieReviewsContainer(id: movie.id) + } else if let show = item as? Show { + ShowReviewsContainer(id: show.id) + } + } + } +} diff --git a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift similarity index 73% rename from Flick/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift rename to Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift index bc3baa8..112aace 100644 --- a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift +++ b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/MovieDetailsReviewsContainer.swift @@ -7,10 +7,12 @@ // import UDF +import Models +import ItemDetailsReviewsComponent +import Common struct MovieDetailsReviewsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsReviewsComponent - + typealias ContainerComponent = ItemDetailsReviewsComponent let id: Movie.ID func scope(for state: AppState) -> Scope { @@ -25,7 +27,14 @@ struct MovieDetailsReviewsContainer: BindableContainer { item: store.state.allMovies.movieBy(id: id), reviews: isRedacted ? Review.fakeItems().ids : reviews, reviewById: reviewById, - isRedacted: isRedacted + isRedacted: isRedacted, + router: .init(), + destinationBuilder: DestinationBuilder.init(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift similarity index 73% rename from Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift rename to Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift index 2f6e4a2..03a2012 100644 --- a/Flick/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift +++ b/Flick/Sources/Code/Modules/Reviews/View/ItemDetailsReviews/ShowDetailsReviewsContainer.swift @@ -7,9 +7,12 @@ // import UDF +import Models +import ItemDetailsReviewsComponent +import Common struct ShowDetailsReviewsContainer: BindableContainer { - typealias ContainerComponent = ItemDetailsReviewsComponent + typealias ContainerComponent = ItemDetailsReviewsComponent let id: Show.ID @@ -25,7 +28,14 @@ struct ShowDetailsReviewsContainer: BindableContainer { item: store.state.allShows.showBy(id: id), reviews: isRedacted ? Review.fakeItems().ids : reviews, reviewById: reviewById, - isRedacted: isRedacted + isRedacted: isRedacted, + router: .init(), + destinationBuilder: DestinationBuilder.init(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } diff --git a/Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift b/Flick/Sources/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift similarity index 54% rename from Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift rename to Flick/Sources/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift index 4579084..ea1e4b8 100644 --- a/Flick/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift +++ b/Flick/Sources/Code/Modules/Reviews/View/ReviewDetails/ReviewDetailsContainer.swift @@ -7,6 +7,9 @@ // import UDF +import Models +import ReviewDetailsComponent +import Common struct ReviewDetailsContainer: Container { typealias ContainerComponent = ReviewDetailsComponent @@ -19,7 +22,13 @@ struct ReviewDetailsContainer: Container { func map(store: EnvironmentStore) -> ContainerComponent.Props { .init( - review: store.state.allReviews.byId[reviewId]! + review: store.state.allReviews.byId[reviewId]!, + destinationBuilder: DestinationBuilder { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + } ) } } diff --git a/Flick/Code/Modules/Root/State/RootForm.swift b/Flick/Sources/Code/Modules/Root/State/RootForm.swift similarity index 96% rename from Flick/Code/Modules/Root/State/RootForm.swift rename to Flick/Sources/Code/Modules/Root/State/RootForm.swift index 06cf1ae..25ccf87 100644 --- a/Flick/Code/Modules/Root/State/RootForm.swift +++ b/Flick/Sources/Code/Modules/Root/State/RootForm.swift @@ -8,6 +8,7 @@ import Foundation import SwiftFoundation import UDF +import Common struct RootForm: Form { var dialog: DialogStatus = .dismissed diff --git a/Flick/Code/Modules/Root/View/RootComponent.swift b/Flick/Sources/Code/Modules/Root/View/RootComponent.swift similarity index 96% rename from Flick/Code/Modules/Root/View/RootComponent.swift rename to Flick/Sources/Code/Modules/Root/View/RootComponent.swift index fcbdf62..1a47b78 100644 --- a/Flick/Code/Modules/Root/View/RootComponent.swift +++ b/Flick/Sources/Code/Modules/Root/View/RootComponent.swift @@ -7,6 +7,8 @@ import SwiftUI import UDF +import Common +import SignInComponent struct RootComponent: Component { struct Props { @@ -86,5 +88,6 @@ private extension View { .navigationDestination(for: ItemDetailsReviewsRouting.self) .navigationDestination(for: ItemDetailsRecommendationsRouting.self) .navigationDestination(for: ReviewsRouting.self) + .navigationDestination(for: SectionDetailsRouting.self) } } diff --git a/Flick/Code/Modules/Root/View/RootContainer.swift b/Flick/Sources/Code/Modules/Root/View/RootContainer.swift similarity index 100% rename from Flick/Code/Modules/Root/View/RootContainer.swift rename to Flick/Sources/Code/Modules/Root/View/RootContainer.swift diff --git a/Flick/Code/Modules/Root/View/RootRouter.swift b/Flick/Sources/Code/Modules/Root/View/RootRouter.swift similarity index 100% rename from Flick/Code/Modules/Root/View/RootRouter.swift rename to Flick/Sources/Code/Modules/Root/View/RootRouter.swift diff --git a/Flick/Code/Modules/Search/SearchMiddleware.swift b/Flick/Sources/Code/Modules/Search/SearchMiddleware.swift similarity index 98% rename from Flick/Code/Modules/Search/SearchMiddleware.swift rename to Flick/Sources/Code/Modules/Search/SearchMiddleware.swift index 039ad44..55d9527 100644 --- a/Flick/Code/Modules/Search/SearchMiddleware.swift +++ b/Flick/Sources/Code/Modules/Search/SearchMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +@preconcurrency import Models final class SearchMiddleware: BaseObservableMiddleware { var environment: Environment! diff --git a/Flick/Code/Modules/Search/State/SearchFlow.swift b/Flick/Sources/Code/Modules/Search/State/SearchFlow.swift similarity index 85% rename from Flick/Code/Modules/Search/State/SearchFlow.swift rename to Flick/Sources/Code/Modules/Search/State/SearchFlow.swift index c6848b2..1b49a21 100644 --- a/Flick/Code/Modules/Search/State/SearchFlow.swift +++ b/Flick/Sources/Code/Modules/Search/State/SearchFlow.swift @@ -8,11 +8,16 @@ import SwiftUI import UDF +import Models -enum SearchFlow: IdentifiableFlow { +enum SearchFlow: IdentifiableFlow, InitialSetup { case none, loadItems(Int) init() { self = .none } + + func initialSetup(with state: AppState) { + + } mutating func reduce(_ action: some Action) { switch action { diff --git a/Flick/Code/Modules/Search/State/SearchForm.swift b/Flick/Sources/Code/Modules/Search/State/SearchForm.swift similarity index 94% rename from Flick/Code/Modules/Search/State/SearchForm.swift rename to Flick/Sources/Code/Modules/Search/State/SearchForm.swift index aef27a1..35d7f6c 100644 --- a/Flick/Code/Modules/Search/State/SearchForm.swift +++ b/Flick/Sources/Code/Modules/Search/State/SearchForm.swift @@ -9,6 +9,8 @@ import Foundation import SwiftFoundation import UDF +@preconcurrency import Models +import Common struct SearchForm: Form { var searchText = "" diff --git a/Flick/Code/Modules/Search/View/SearchContainer.swift b/Flick/Sources/Code/Modules/Search/View/SearchContainer.swift similarity index 78% rename from Flick/Code/Modules/Search/View/SearchContainer.swift rename to Flick/Sources/Code/Modules/Search/View/SearchContainer.swift index 9e15635..94b6739 100644 --- a/Flick/Code/Modules/Search/View/SearchContainer.swift +++ b/Flick/Sources/Code/Modules/Search/View/SearchContainer.swift @@ -8,6 +8,8 @@ import SwiftUI import UDF +import SearchComponent +import Common struct SearchContainer: Container { typealias ContainerComponent = SearchComponent @@ -24,7 +26,13 @@ struct SearchContainer: Container { itemIds: store.state.searchForm.items, searchItemById: store.state.allSearchItems.searchItemBy, genreById: { _ in .testItem() }, - loadMoreAction: loadNewPageIfNeeded + loadMoreAction: loadNewPageIfNeeded, + destinationBuilder: DestinationBuilder(destination: { value in + switch value { + case let .imageContainer(path: path, size: size): + ImageContainer(size: size, path: path) + } + }) ) } diff --git a/Flick/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift b/Flick/Sources/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift similarity index 99% rename from Flick/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift rename to Flick/Sources/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift index f56a679..df821c8 100644 --- a/Flick/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift +++ b/Flick/Sources/Code/Modules/SectionDetails/SectionDetailsMiddleware.swift @@ -9,6 +9,7 @@ import API import Foundation import UDF +@preconcurrency import Models final class SectionDetailsMiddleware: BaseObservableMiddleware { enum Cancellation: Hashable, CaseIterable { diff --git a/Flick/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift b/Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift similarity index 98% rename from Flick/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift rename to Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift index 8a953d1..d84dd34 100644 --- a/Flick/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift +++ b/Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsFlow.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import Models enum SectionDetailsFlow: IdentifiableFlow { case none, loadMovies(Int), loadShows(Int) diff --git a/Flick/Code/Modules/SectionDetails/State/SectionDetailsForm.swift b/Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsForm.swift similarity index 96% rename from Flick/Code/Modules/SectionDetails/State/SectionDetailsForm.swift rename to Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsForm.swift index ff590be..a707f4d 100644 --- a/Flick/Code/Modules/SectionDetails/State/SectionDetailsForm.swift +++ b/Flick/Sources/Code/Modules/SectionDetails/State/SectionDetailsForm.swift @@ -7,6 +7,8 @@ // import UDF +@preconcurrency import Models +import Common struct SectionDetailsForm: Form { var moviesPaginator: Paginator = .init( diff --git a/Flick/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift b/Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift similarity index 89% rename from Flick/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift rename to Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift index 4d334c3..af2e350 100644 --- a/Flick/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift +++ b/Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsContainer.swift @@ -7,10 +7,13 @@ // import UDF +import Models +import SectionDetailsComponent +import Common +import SwiftUI -struct SectionDetailsContainer: Container { - typealias ContainerComponent = SectionDetailsComponent - +struct SectionDetailsContainer: Container { + typealias ContainerComponent = SectionDetailsComponent let section: S func scope(for state: AppState) -> Scope { @@ -24,7 +27,8 @@ struct SectionDetailsContainer: Container { items: items, genreById: store.state.allGenres.genreBy, loadMoreAction: loadNewPageIfNeeded, - dialogStatus: store.$state.homeForm.dialog + dialogStatus: store.$state.homeForm.dialog, + router: SectionDetailsRouting() ) } diff --git a/Flick/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift b/Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift similarity index 54% rename from Flick/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift rename to Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift index 146f017..a27d788 100644 --- a/Flick/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift +++ b/Flick/Sources/Code/Modules/SectionDetails/View/SectionDetailsRouter.swift @@ -8,26 +8,13 @@ import SwiftUI import UDF +import Models +import Common +import SectionDetailsComponent struct SectionDetailsRouting: Routing { - enum Route: Hashable { - case itemDetails(any Item) - - func hash(into hasher: inout Hasher) { - switch self { - case let .itemDetails(item): - hasher.combine(item) - } - } - - static func == (lhs: Self, rhs: Self) -> Bool { - switch (lhs, rhs) { - case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): - areEqual(lhsItem, rhsItem) - } - } - } - + typealias Route = SectionDetailsRoute + @ViewBuilder func view(for route: Route) -> some View { switch route { case let .itemDetails(item): @@ -36,6 +23,8 @@ struct SectionDetailsRouting: Routing { } else if let show = item as? Show { ShowDetailsContainer(id: show.id) } + case .imageContainer(path: let path, size: let size): + ImageContainer(size: size, path: path) } } } diff --git a/Flick/Code/Modules/SignIn/State/SignInFlow.swift b/Flick/Sources/Code/Modules/SignIn/State/SignInFlow.swift similarity index 100% rename from Flick/Code/Modules/SignIn/State/SignInFlow.swift rename to Flick/Sources/Code/Modules/SignIn/State/SignInFlow.swift diff --git a/Flick/Code/Modules/SignIn/State/SignInForm.swift b/Flick/Sources/Code/Modules/SignIn/State/SignInForm.swift similarity index 100% rename from Flick/Code/Modules/SignIn/State/SignInForm.swift rename to Flick/Sources/Code/Modules/SignIn/State/SignInForm.swift diff --git a/Flick/Code/Modules/SignIn/View/SignInContainer.swift b/Flick/Sources/Code/Modules/SignIn/View/SignInContainer.swift similarity index 75% rename from Flick/Code/Modules/SignIn/View/SignInContainer.swift rename to Flick/Sources/Code/Modules/SignIn/View/SignInContainer.swift index 6fe447a..8d09631 100644 --- a/Flick/Code/Modules/SignIn/View/SignInContainer.swift +++ b/Flick/Sources/Code/Modules/SignIn/View/SignInContainer.swift @@ -8,9 +8,11 @@ import SwiftUI import UDF +import SignInComponent +import Common struct SignInContainer: Container { - typealias ContainerComponent = SignInComponent + typealias ContainerComponent = SignInComponent @Environment(\.dismiss) var dismiss func scope(for state: AppState) -> Scope { @@ -18,12 +20,13 @@ struct SignInContainer: Container { } func map(store: EnvironmentStore) -> ContainerComponent.Props { - .init( + return .init( username: store.$state.signInForm.username, password: store.$state.signInForm.password, signInAction: { dismiss() }, isLoaderPresented: .init { store.state.signInFlow != .none }, - dialogStatus: store.$state.signInForm.dialog + dialogStatus: store.$state.signInForm.dialog, + router: .init() ) } } diff --git a/Flick/Sources/Code/Modules/SignIn/View/SignInRouter.swift b/Flick/Sources/Code/Modules/SignIn/View/SignInRouter.swift new file mode 100644 index 0000000..150e030 --- /dev/null +++ b/Flick/Sources/Code/Modules/SignIn/View/SignInRouter.swift @@ -0,0 +1,25 @@ +// +// SignInRouter.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import UDF +import SignInComponent +import SwiftUI + +struct SignInRouter: Routing { + typealias Route = SignInRoute + + @ViewBuilder + func view(for route: Route) -> some View { + switch route { + case .resetPassword: + Text("Reset password") + case .signUp: + Text("Sign Up") + } + } +} diff --git a/Flick/Code/Modules/TabBar/State/TabBarForm.swift b/Flick/Sources/Code/Modules/TabBar/State/TabBarForm.swift similarity index 99% rename from Flick/Code/Modules/TabBar/State/TabBarForm.swift rename to Flick/Sources/Code/Modules/TabBar/State/TabBarForm.swift index 13dcc6a..84c5898 100644 --- a/Flick/Code/Modules/TabBar/State/TabBarForm.swift +++ b/Flick/Sources/Code/Modules/TabBar/State/TabBarForm.swift @@ -9,6 +9,7 @@ import SwiftFoundation import SwiftUI import UDF +@preconcurrency import Common struct TabBarForm: UDF.Form { enum HomeTab {} diff --git a/Flick/Code/Modules/TabBar/View/TabBarContainer.swift b/Flick/Sources/Code/Modules/TabBar/View/TabBarContainer.swift similarity index 96% rename from Flick/Code/Modules/TabBar/View/TabBarContainer.swift rename to Flick/Sources/Code/Modules/TabBar/View/TabBarContainer.swift index 38cb007..558d461 100644 --- a/Flick/Code/Modules/TabBar/View/TabBarContainer.swift +++ b/Flick/Sources/Code/Modules/TabBar/View/TabBarContainer.swift @@ -8,6 +8,7 @@ import SwiftUI import UDF +import TabBarComponent struct TabBarContainer: Container { typealias ContainerComponent = TabBarComponent diff --git a/Flick/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift b/Flick/Sources/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift similarity index 75% rename from Flick/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift rename to Flick/Sources/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift index 3b9a0c4..15265ab 100644 --- a/Flick/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift +++ b/Flick/Sources/Code/Modules/WhereToWatch/View/WhereToWatchContainer.swift @@ -8,6 +8,9 @@ import FlagKit import UDF +import Models +import WhereToWatchComponent +import Common struct WhereToWatchContainer: Container { typealias ContainerComponent = WhereToWatchComponent @@ -35,7 +38,13 @@ struct WhereToWatchContainer: Container { return .init(title: code, image: image) } }(), - providers: Provider.fakeItems(count: 3) + providers: Provider.fakeItems(count: 3), + destinationBuilder: DestinationBuilder.init(destination: { value in + switch value { + case let .imageContainer(path: path, size: size, type: type): + ImageContainer(size: size, path: path, type: type) + } + }) ) } } diff --git a/Flick/FlickApp.swift b/Flick/Sources/FlickApp.swift similarity index 95% rename from Flick/FlickApp.swift rename to Flick/Sources/FlickApp.swift index ba6f04f..03664ea 100644 --- a/Flick/FlickApp.swift +++ b/Flick/Sources/FlickApp.swift @@ -10,12 +10,12 @@ import SwiftUI import UDF private let token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJidW5kbGVfaWRzIjpbImNvbS51cmxhdW5jaGVkLmZsaWNrIl19.HjROptJlsO915Ju0fw7VtO-FhHZlZSdDRALOrFQOvPU" -private var store: EnvironmentStore! +var globalStore: EnvironmentStore! @main struct FlickApp: App { init() { - store = EnvironmentStore( + globalStore = EnvironmentStore( initial: AppState(), logger: .consoleDebug ) @@ -36,7 +36,7 @@ struct FlickApp: App { private extension FlickApp { func originalSubscribe() { - store.subscribe { _ in + globalStore.subscribe { _ in HomeMiddleware.self GenresMiddleware.self NetworkConnectivityMiddleware.self diff --git a/Info.plist b/Info.plist new file mode 100644 index 0000000..0ee22fb --- /dev/null +++ b/Info.plist @@ -0,0 +1,23 @@ + + + + +CFBundleIdentifier +$(PRODUCT_BUNDLE_IDENTIFIER) +CFBundleExecutable +$(EXECUTABLE_NAME) +CFBundlePackageType +$(PRODUCT_BUNDLE_PACKAGE_TYPE) +UILaunchStoryboardName +LaunchScreen +CFBundleAllowMixedLocalizations + +ITSAppUsesNonExemptEncryption + +UIAppFonts + + Poppins-Regular.ttf + Poppins-SemiBold.ttf + + + \ No newline at end of file diff --git a/Localizations/Package.swift b/Localizations/Package.swift deleted file mode 100644 index 357f80b..0000000 --- a/Localizations/Package.swift +++ /dev/null @@ -1,30 +0,0 @@ -// swift-tools-version: 6.0 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "Localizations", - defaultLocalization: "en", - products: [ - .library( - name: "Localizations", - targets: ["Localizations"] - ), - ], - dependencies: [ - .package(url: "https://github.com/mac-cain13/R.swift.git", from: "7.0.0"), - ], - targets: [ - .target( - name: "Localizations", - dependencies: [.product(name: "RswiftLibrary", package: "R.swift")], - resources: [ - .process("Resources"), - ], - plugins: [ - .plugin(name: "RswiftGeneratePublicResources", package: "R.swift"), - ] - ), - ] -) diff --git a/Project.swift b/Project.swift new file mode 100644 index 0000000..9485ac5 --- /dev/null +++ b/Project.swift @@ -0,0 +1,527 @@ +import ProjectDescription +import ProjectDescriptionHelpers + +let settings: Settings = .settings( + base: [ + "OTHER_LDFLAGS": ["$(inherited)", "-ObjC"], + ], + configurations: [ + .debug(name: "Debug", xcconfig: "./xcconfigs/Flick-Project.xcconfig"), + .release(name: "Release", xcconfig: "./xcconfigs/Flick-Project.xcconfig"), + ] +) + + +let appSettings: Settings = .settings( + configurations: [ + .debug(name: "Debug", xcconfig: "./xcconfigs/Flick.xcconfig"), + .release(name: "Release", xcconfig: "./xcconfigs/Flick.xcconfig"), + ] +) + +let project = Project.app( + name: "Flick", + organizationName: "urlaunched", + packages: [ + ], + settings: settings, + appSettings: appSettings, + targetDependancies: [ + .external(name: "FlagKit"), + .external(name: "SDWebImageSwiftUI"), + .external(name: "UDF"), + .external(name: "SwiftFoundation"), + .external(name: "SwiftUI-Kit"), + ], + moduleTargets: [ + makeAllCoreModules(), + makeUIModules() + ].flatMap { $0 } +) + +func makeAllCoreModules() -> [Module] { + return [ + makeCommanModule(), + makeModelsModule(), + makeAPIModule(), + makeDesignSystemModule(), + makeLocalizationModule(), + makeCustomViewsModule(), + ] +} + +func makeUIModules() -> [Module] { + return [ + makeOnboardingUIComponent(), + makeOnboardingSignInComponent(), + makeWhereToWatchComponent(), + makeTabBarComponent(), + makeImageComponent(), + makeSectionDetailsComponent(), + makeReviewsComponent(), + makeReviewDetailsComponent(), + makeItemDetailsReviewsComponent(), + makeSearchComponent(), + makeItemDetailsRecommendationsComponent(), + makeSettingsComponent(), + makeMyFavoritesComponent(), + makeItemDetailsComponent(), + makeHomeComponent(), + makeMainHomeSectionComponent(), + makeHomeSectionComponent(), + makeCastComponent(), + makeItemDetailsCastComponent(), + ] +} + +func makeModelsModule() -> Module { + Module( + name: "Models", + moduleType: .core, + path: "Models", + frameworkDependancies: [ + .external(name: "SwiftFoundation"), + .external(name: "UDF"), + .target(name: "DesignSystem"), + .target(name: "Common"), + .target(name: "API"), + .target(name: "Localizations"), + .external(name: "RswiftLibrary"), + ], + frameworkResources: [] + ) +} + +func makeCommanModule() -> Module { + return Module( + name: "Common", + moduleType: .core, + path: "Common", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "DesignSystem"), + ], + frameworkResources: [] + ) +} + +func makeAPIModule() -> Module { + return Module( + name: "API", + moduleType: .core, + path: "API", + frameworkDependancies: [ + .external(name: "SwiftFoundation"), + ], + frameworkResources: [] + ) +} + +func makeDesignSystemModule() -> Module { + return Module( + name: "DesignSystem", + moduleType: .core, + path: "DesignSystem", + frameworkDependancies: [ + .external(name: "SwiftUI-Kit"), + ], + frameworkResources: [ + "Resources/**" + ] + ) +} + +func makeCustomViewsModule() -> Module { + return Module( + name: "CustomViews", + moduleType: .core, + path: "CustomViews", + frameworkDependancies: [ + .external(name: "SwiftUI-Kit"), + .external(name: "SDWebImageSwiftUI"), + .target(name: "DesignSystem"), + .target(name: "Models"), + ], + frameworkResources: [] + ) +} + +func makeLocalizationModule() -> Module { + return Module( + name: "Localizations", + moduleType: .core, + path: "Localizations", + frameworkDependancies: [ + .external(name: "RswiftLibrary") + ], + frameworkResources: [ + "Resources/**" + ], + frameworkScripts: [ + .pre( + script: """ + "$PROJECT_DIR/Core/Localizations/rswift" generate --access-level public "$PROJECT_DIR/Core/Localizations/Sources/R.generated.swift" + """, + name: "R.swift" + ) + ] + ) +} + +func makeOnboardingUIComponent() -> Module { + return Module( + name: "OnboardingComponent", + moduleType: .ui, + path: "OnboardingComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .external(name: "RswiftLibrary") + ], + frameworkResources: [], + snapshotDependencies: [ + .external(name: "SwiftUISnapshotTestCase"), + ], + targets: [.framework, .snapshotTests] + ) +} + +func makeOnboardingSignInComponent() -> Module { + return Module( + name: "SignInComponent", + moduleType: .ui, + path: "SignInComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .external(name: "RswiftLibrary"), + .target(name: "Common"), + ], + frameworkResources: [], + snapshotDependencies: [ + .external(name: "SwiftUISnapshotTestCase"), + ], + targets: [.framework, .snapshotTests] + ) +} + +func makeWhereToWatchComponent() -> Module { + return Module( + name: "WhereToWatchComponent", + moduleType: .ui, + path: "WhereToWatchComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Localizations"), + .external(name: "RswiftLibrary"), + .target(name: "Common"), + .target(name: "Models"), + .external(name: "FlagKit"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeTabBarComponent() -> Module { + return Module( + name: "TabBarComponent", + moduleType: .ui, + path: "TabBarComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "DesignSystem"), + .target(name: "Common"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeImageComponent() -> Module { + return Module( + name: "ImageComponent", + moduleType: .ui, + path: "ImageComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SDWebImageSwiftUI"), + .external(name: "SwiftUI-Kit"), + .target(name: "DesignSystem"), + .target(name: "Common"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeSectionDetailsComponent() -> Module { + return Module( + name: "SectionDetailsComponent", + moduleType: .ui, + path: "SectionDetailsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Common"), + .target(name: "Models"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeReviewsComponent() -> Module { + return Module( + name: "ReviewsComponent", + moduleType: .ui, + path: "ReviewsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeReviewDetailsComponent() -> Module { + return Module( + name: "ReviewDetailsComponent", + moduleType: .ui, + path: "ReviewDetailsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "CustomViews"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeItemDetailsReviewsComponent() -> Module { + return Module( + name: "ItemDetailsReviewsComponent", + moduleType: .ui, + path: "ItemDetailsReviewsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Models"), + .target(name: "CustomViews"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeSearchComponent() -> Module { + return Module( + name: "SearchComponent", + moduleType: .ui, + path: "SearchComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Models"), + .target(name: "CustomViews"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeItemDetailsRecommendationsComponent() -> Module { + return Module( + name: "ItemDetailsRecommendationsComponent", + moduleType: .ui, + path: "ItemDetailsRecommendationsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Models"), + .target(name: "CustomViews"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "Common"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeSettingsComponent() -> Module { + return Module( + name: "SettingsComponent", + moduleType: .ui, + path: "SettingsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Localizations"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeMyFavoritesComponent() -> Module { + return Module( + name: "MyFavoritesComponent", + moduleType: .ui, + path: "MyFavoritesComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + .target(name: "Common"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeItemDetailsComponent() -> Module { + return Module( + name: "ItemDetailsComponent", + moduleType: .ui, + path: "ItemDetailsComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeHomeComponent() -> Module { + return Module( + name: "HomeComponent", + moduleType: .ui, + path: "HomeComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeMainHomeSectionComponent() -> Module { + return Module( + name: "MainHomeSectionComponent", + moduleType: .ui, + path: "MainHomeSectionComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeHomeSectionComponent() -> Module { + return Module( + name: "HomeSectionComponent", + moduleType: .ui, + path: "HomeSectionComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeCastComponent() -> Module { + return Module( + name: "CastComponent", + moduleType: .ui, + path: "CastComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} + +func makeItemDetailsCastComponent() -> Module { + return Module( + name: "ItemDetailsCastComponent", + moduleType: .ui, + path: "ItemDetailsCastComponent", + frameworkDependancies: [ + .external(name: "UDF"), + .external(name: "SwiftUI-Kit"), + .target(name: "Common"), + .target(name: "Models"), + .target(name: "DesignSystem"), + .target(name: "Localizations"), + .target(name: "CustomViews"), + ], + frameworkResources: [], + snapshotDependencies: [], + targets: [.framework] + ) +} diff --git a/README.md b/README.md index 3a6c86b..b5bef43 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # 🎬 Flick — Movie App Demo -**Flick** is a modular Swift demo project built to demonstrate **Unidirectional Data Flow (UDF)** and **Swift Package Manager (SPM)** principles in iOS development. This app is designed to be a modern example of scalable architecture, modularization, and clean UI design. + +**Flick** is a modular Swift demo project built to demonstrate **Unidirectional Data Flow (UDF)** and **Tuist**-driven project generation principles in iOS development. + +The project showcases a modern approach to scalable architecture, modularization, dependency management, and clean UI design using a fully modular setup powered by **Tuist**. --- @@ -19,10 +22,34 @@ This project integrates with [The Movie Database (TMDB)](https://www.themoviedb. ### 🔧 To run the app properly, you need to: -1. **Create a TMDB account** and generate an API key: +1. **Install Tuist** (if not already installed) + + ```bash + brew install tuist + ``` + +2. **Then install project dependencies:** + + ```bash + tuist install + ``` + +3. **Generate the Xcode project** + + ```bash + tuist generate + ``` + +4. **Running Snapshot tests** + + ```bash + tuist test + ``` + +5. **Create a TMDB account** and generate an API key: [https://www.themoviedb.org/settings/api](https://www.themoviedb.org/settings/api) -2. **Add your API key** in the appropriate configuration file or environment. +6. **Add your API key** in the appropriate configuration file or environment. For this project, issert you API key in kTMDBApiKey property in [`BaseAPI.swift`](./API/Sources/API/BaseAPI.swift) ```swift @@ -35,13 +62,18 @@ This project integrates with [The Movie Database (TMDB)](https://www.themoviedb. ## 🗂️ Modules -Modularity is at the heart of Flick. Each feature is encapsulated in its own folder under `Modules/` and follows a clean separation of UI, logic, and state. +Modularity is at the heart of Flick. Each feature is encapsulated in its own folder under `Modules/`, while each reusable UI component is further encapsulated in its own Tuist framework under `UI/FrameworkName`. This structure follows a clean separation of UI, logic, and state, ensuring strong isolation between features, improved reusability, **selective testing with Tuist** and scalable architecture across the project. --- +## Tuist Dependency Graph + +The project structure is visualized through a generated dependency graph: +![Tuist Dependency Graph](./graph.png) + ## 🔍 Typical Module Structure -Most feature modules follow a consistent structure: +Most feature app feature modules follow a consistent structure: ``` 📁 ModuleName @@ -49,38 +81,35 @@ Most feature modules follow a consistent structure: │ ├── ModuleNameFlow.swift (e.g. SearchFlow.swift) │ └── ModuleNameForm.swift (e.g. SearchForm.swift) ├── 📁 View -│ ├── ModuleNameComponent.swift (e.g. SearchComponent.swift) +│ ├── ModuleNameRouting.swift (e.g. SearchRouting.swift) │ └── ModuleNameContainer.swift (e.g. SearchContainer.swift) ├── Middleware.swift (optional side effects, e.g. SearchMiddleware.swift) ``` +Framework module follow a consistent structure: + +``` +📁 ModuleName +├── 📁 Sources +│ ├── ModuleNameComponent.swift (e.g. SearchComponent.swift) +│ ├── ModuleNameContent.swift (e.g. SearchContent.swift) +│ ├── ModuleNameRoute.swift (e.g. SearchRoute.swift) +├── 📁 Snapshots +│ ├── 📁 __Snapshots__ +│ ├── ModuleComponentTests.swift (e.g. SearchComponentTests.swift) +``` + This ensures: + - Clear separation of concerns (UI, logic, effects) - Easy testability - Scalable modular design +- Modular architecture powered by Tuist: enabling independent feature frameworks; explicit dependency management, and reproducible Xcode project generation across the entire codebase 📦 Example: [`Search`](./Flick/Code/Modules/Search) --- -## 🧪 Snapshot Testing - -UI consistency is maintained using snapshot testing. - -📁 [`SnapshotTests/`](./SnapshotTests) -- Tests like `SnapshotTestCase+Component.swift` -- UI snapshots are stored under `Snapshots/` - ---- - -## 🔩 SPM Modularization - -Each logical unit (DesignSystem, API, Localization) is a Swift package: -- Improved compile times -- Better code reuse - ---- - ## 🔗 BindableReducer and BindableContainer Flick introduces dynamic reducer composition through the concept of `@BindableReducer`. diff --git a/SnapshotTests/SnapshotTestCase+Component.swift b/SnapshotTest/BaseSnapshotTestCase.swift similarity index 78% rename from SnapshotTests/SnapshotTestCase+Component.swift rename to SnapshotTest/BaseSnapshotTestCase.swift index b283f37..5ed377f 100644 --- a/SnapshotTests/SnapshotTestCase+Component.swift +++ b/SnapshotTest/BaseSnapshotTestCase.swift @@ -1,18 +1,30 @@ // -// SnapshotTestCase+Component.swift -// SnapshotTests +// BaseSnapshotTestCase.swift +// Flick // -// Created by Max Kuznetsov on 02.11.2022. +// Created by Bogdan Petkanych on 13.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. // -import Foundation -import SDWebImage -import SwiftUI import SwiftUISnapshotTestCase -import UDF import XCTest +import UDF + +@MainActor +class BaseSnapshotTestCase: SnapshotTestCase { + override class func setUp() { + deviceReference = "iPhone 17 Pro" + osVersionReference = "26.5" + super.setUp() + } + + override func setUp() { + super.setUp() + devices = [.iPhone17Pro] + super.setUp() + } +} -@testable import Flick extension SnapshotTestCase { func snapshot( @@ -98,20 +110,4 @@ extension SnapshotTestCase { line: line ) } - - func cacheImage(_ imageName: String) throws { - let image = try XCTUnwrap(UIImage(named: imageName)) - - SDImageCache.shared.store(image, forKey: imageName, toDisk: false) - SDWebImageManager.shared.cacheKeyFilter = SDWebImageCacheKeyFilter(block: { _ in - imageName - }) - - let exp = expectation(description: "waiting for store image") - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - exp.fulfill() - } - - wait(for: [exp], timeout: 1) - } } diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13Mini_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13Mini_portrait.1.jpg deleted file mode 100644 index b13070a..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13Mini_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13_portrait.1.jpg deleted file mode 100644 index ce1b203..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone13_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8Plus_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8Plus_portrait.1.jpg deleted file mode 100644 index b268d59..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8Plus_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8_portrait.1.jpg deleted file mode 100644 index 8713a55..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhone8_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhoneSE2_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhoneSE2_portrait.1.jpg deleted file mode 100644 index 8713a55..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_ColorScheme_isDark_iPhoneSE2_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png deleted file mode 100644 index 6a7f140..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13Mini_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13Mini_portrait.1.jpg deleted file mode 100644 index 1cf4209..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13Mini_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13_portrait.1.jpg deleted file mode 100644 index db56f40..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone13_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8Plus_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8Plus_portrait.1.jpg deleted file mode 100644 index 44bba7d..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8Plus_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8_portrait.1.jpg deleted file mode 100644 index df64f8e..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhone8_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhoneSE2_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhoneSE2_portrait.1.jpg deleted file mode 100644 index df64f8e..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty_iPhoneSE2_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png deleted file mode 100644 index 6606e96..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13Mini_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13Mini_portrait.1.jpg deleted file mode 100644 index a7d992b..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13Mini_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13_portrait.1.jpg deleted file mode 100644 index 4772377..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone13_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8Plus_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8Plus_portrait.1.jpg deleted file mode 100644 index 8a0fd42..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8Plus_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8_portrait.1.jpg deleted file mode 100644 index 33d689e..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhone8_portrait.1.jpg and /dev/null differ diff --git a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhoneSE2_portrait.1.jpg b/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhoneSE2_portrait.1.jpg deleted file mode 100644 index 33d689e..0000000 Binary files a/SnapshotTests/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled_iPhoneSE2_portrait.1.jpg and /dev/null differ diff --git a/Tuist.swift b/Tuist.swift new file mode 100644 index 0000000..8c40471 --- /dev/null +++ b/Tuist.swift @@ -0,0 +1,3 @@ +import ProjectDescription + +let tuist = Tuist(project: .tuist()) diff --git a/Flick.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Tuist/Package.resolved similarity index 99% rename from Flick.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to Tuist/Package.resolved index c20761e..d18fb41 100644 --- a/Flick.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Tuist/Package.resolved @@ -93,7 +93,7 @@ { "identity" : "swiftfoundation", "kind" : "remoteSourceControl", - "location" : "https://github.com/Maks-Jago/SwiftFoundation.git", + "location" : "https://github.com/Maks-Jago/SwiftFoundation", "state" : { "revision" : "b03db4a15a9f77c78f69b02fb8c5469c477be31b", "version" : "0.4.1" diff --git a/Tuist/Package.swift b/Tuist/Package.swift new file mode 100644 index 0000000..1abb576 --- /dev/null +++ b/Tuist/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +import PackageDescription + +#if TUIST + import ProjectDescription + + let packageSettings = PackageSettings( + productTypes: [ + "FlagKit": .framework, + "SDWebImageSwiftUI": .framework, + "SDWebImage": .framework, + "UDF": .framework, + "SwiftFoundation": .framework, + "SwiftUI-Kit": .framework, + "RswiftLibrary": .framework, + "SwiftUISnapshotTestCase": .staticFramework, + ] + ) +#endif // TUIST + +let package = Package( + name: "Flick", + dependencies: [ + .package(url: "https://github.com/madebybowtie/FlagKit", .upToNextMajor(from: "2.0.0")), + .package(url: "https://github.com/SDWebImage/SDWebImageSwiftUI", .upToNextMajor(from: "3.1.3")), + .package(url: "https://github.com/Maks-Jago/swiftui-snapshot-test-case", .upToNextMajor(from: "1.6.2")), + .package(url: "https://github.com/Maks-Jago/SwiftUI-UDF", .upToNextMajor(from: "1.5.1-rc.1")), + .package(url: "https://github.com/Maks-Jago/SwiftFoundation", .upToNextMajor(from: "0.4.1")), + .package(url: "https://github.com/Maks-Jago/SwiftUIKit", .upToNextMajor(from: "0.6.5")), + .package(url: "https://github.com/mac-cain13/R.swift.git", .upToNextMajor(from: "7.0.0")) + ] +) diff --git a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift new file mode 100644 index 0000000..1df6801 --- /dev/null +++ b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift @@ -0,0 +1,192 @@ +import ProjectDescription + +let uiPath = "UI" +let corePath = "Core" +let appPath = "Flick" +let reverseOrganizationName = "com.urlaunched" +let infoPlistPath: Path = "Info.plist" + +public enum ModuleType { + case core + case ui + case app + + func path() -> String { + switch self { + case .core: + return corePath + case .ui: + return uiPath + case .app: + return appPath + } + } +} + +public enum FeatureTarget { + case framework + case snapshotTests +} + +public struct Module { + let name: String + let path: String + let frameworkDependancies: [TargetDependency] + let frameworkResources: [String] + let snapshotDependencies: [TargetDependency] + let moduleType: ModuleType + let frameworkScripts: [TargetScript] + let targets: Set + + public init( + name: String, + moduleType: ModuleType, + path: String, + frameworkDependancies: [TargetDependency], + frameworkResources: [String], + snapshotDependencies: [TargetDependency] = [], + frameworkScripts: [TargetScript] = [], + targets: Set = Set(arrayLiteral: .framework) + ) { + self.name = name + self.path = path + self.moduleType = moduleType + self.frameworkDependancies = frameworkDependancies + self.frameworkResources = frameworkResources + self.snapshotDependencies = snapshotDependencies + self.frameworkScripts = frameworkScripts + self.targets = targets + } +} + +extension Project { + public static func app( + name: String, + organizationName: String, + packages: [Package] = [], + settings: Settings? = nil, + appSettings: Settings? = nil, + dependencies: [TargetDependency] = [], + targetDependancies: [TargetDependency] = [], + moduleTargets: [Module], + ) -> Project { + let organizationName = organizationName + var targets = [Target]() + var dependencies = moduleTargets.map { TargetDependency.target(name: $0.name) } + dependencies.append(contentsOf: targetDependancies) + + let appTargets = makeAppTargets( + name: name, + dependencies: dependencies, + settings: appSettings + ) + targets.append(contentsOf: appTargets) + + targets += moduleTargets.flatMap({ makeFrameworkTargets(module: $0) }) + + + return Project( + name: name, + organizationName: organizationName, + packages: packages, + settings: settings, + targets: targets + ) + } + + public static func makeFrameworkTargets(module: Module) -> [Target] { + var targets = [Target]() + let frameworkPath = "\(module.moduleType.path())/\(module.path)" + let frameworkResourceFilePaths = module.frameworkResources.map { + ResourceFileElement.glob(pattern: Path(stringLiteral: "\(module.moduleType.path())/\(module.path)/" + $0), tags: []) + } + + if module.targets.contains(.framework) { + let frameworkTarget = Target.target( + name: module.name, + destinations: .iOS, + product: .framework, + bundleId: "\(reverseOrganizationName).\(module.name)", + infoPlist: .default, + sources: [ + "\(frameworkPath)/Sources/**", + ], + resources: .resources(frameworkResourceFilePaths), + scripts: module.frameworkScripts, + dependencies: module.frameworkDependancies, + ) + + targets.append(frameworkTarget) + } + + if module.targets.contains(.snapshotTests) { + let settings: Settings = .settings( + configurations: [ + .debug(name: "Debug", xcconfig: "./xcconfigs/SnapshotTests.xcconfig"), + .release(name: "Release", xcconfig: "./xcconfigs/SnapshotTests.xcconfig"), + ] + ) + let hostAppName = "\(module.name)SnapshotTestsHostApp" + let appTarget = Target.target( + name: hostAppName, + destinations: .iOS, + product: .app, + bundleId: "\(reverseOrganizationName).\(module.name).app", + infoPlist: .extendingDefault(with: [ + "UIMainStoryboardFile": "", + "UILaunchStoryboardName": "LaunchScreen" + ]), + sources: ["\(frameworkPath)/Sources/**"], + resources: .resources(frameworkResourceFilePaths), + dependencies: module.frameworkDependancies, + ) + + let snapshotTarget = Target.target( + name: "\(module.name)SnapshotTests", + destinations: .iOS, + product: .unitTests, + bundleId: "\(reverseOrganizationName).\(module.name)SnapshotTests", + infoPlist: .default, + sources: [ + "\(frameworkPath)/Snapshots/**", + "SnapshotTest/**" + ], + resources: ["\(frameworkPath)/Snapshots/__Snapshots__/**"], + dependencies: module.snapshotDependencies + [ + .target(name: hostAppName), + .sdk(name: "XCTest", type: .framework, status: .required) + ], + settings: settings + ) + + targets.append(appTarget) + targets.append(snapshotTarget) + } + + return targets + } + + + public static func makeAppTargets( + name: String, + dependencies: [TargetDependency], + settings: Settings? = nil + ) -> [Target] { + var targets = [Target]() + + let mainTarget = Target.target( + name: name, + destinations: .iOS, + product: .app, + bundleId: "\(reverseOrganizationName).\(name)", + infoPlist: .file(path: infoPlistPath), + sources: ["\(appPath)/Sources/**"], + resources: ["\(appPath)/Resources/**"], + dependencies: dependencies, + settings: settings, + ) + + targets.append(mainTarget) + return targets + } +} diff --git a/UI/CastComponent/Sources/CastComponent.swift b/UI/CastComponent/Sources/CastComponent.swift new file mode 100644 index 0000000..6ffe3b2 --- /dev/null +++ b/UI/CastComponent/Sources/CastComponent.swift @@ -0,0 +1,100 @@ +// +// CastComponent.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import UIKit +import Common +import CustomViews + +public struct CastComponent: Component where R.Route == CastRoute { + public struct Props { + var cast: [Cast.ID] + var castById: (Cast.ID) -> Cast + var dialogStatus: Binding + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + cast: [Cast.ID], + castById: @escaping (Cast.ID) -> Cast, + dialogStatus: Binding, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.cast = cast + self.castById = castById + self.dialogStatus = dialogStatus + self.router = router + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + let columns: [GridItem] = [GridItem(.flexible(), spacing: 16, alignment: .top), + GridItem(.flexible(), spacing: 16, alignment: .top), + GridItem(.flexible(), alignment: .top)] + + public init(props: Props) { + self.props = props + } + + public var body: some View { + GeometryReader { geometry in + ScrollView { + LazyVGrid(columns: columns, spacing: 0) { + let width = abs(geometry.size.width - 64) / 3 + let height = width * 1.25 + ForEach(props.cast, id: \.value) { id in + let cast = props.castById(id) + let size = CGSize( + width: width, + height: height + ) + CastCardView( + cast: cast, + size: size, + imageView: { + props.destinationBuilder.view( + for: .imageContainer( + path: cast.profilePath, + size: size, + type: .profile + ) + ) + } + ) + .padding(.bottom) + } + } + .padding(.horizontal) + .padding(.top) + } + } + .background(Color.flMain.edgesIgnoringSafeArea(.all)) + .customNavigationTitle(Localization.itemDetailsCastNavigationTitle()) + .dialog(status: props.dialogStatus) + } +} + +// MARK: - Preview + +#Preview { + CastComponent( + props: .init( + cast: [], + castById: { _ in .fakeItem() }, + dialogStatus: .constant(.dismissed), + router: MockRouter() + ) + ) +} diff --git a/UI/CastComponent/Sources/CastContent.swift b/UI/CastComponent/Sources/CastContent.swift new file mode 100644 index 0000000..77745b5 --- /dev/null +++ b/UI/CastComponent/Sources/CastContent.swift @@ -0,0 +1,14 @@ +// +// CastContent.swift +// Flick +// +// Created by Bogdan Petkanych on 18.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum CastContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .profile) +} diff --git a/UI/CastComponent/Sources/CastRoute.swift b/UI/CastComponent/Sources/CastRoute.swift new file mode 100644 index 0000000..45534ad --- /dev/null +++ b/UI/CastComponent/Sources/CastRoute.swift @@ -0,0 +1,16 @@ +// +// CastRoute.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models + + +public enum CastRoute: Hashable { + case cast([Cast.ID]) +} diff --git a/UI/HomeComponent/Sources/HomeComponent.swift b/UI/HomeComponent/Sources/HomeComponent.swift new file mode 100644 index 0000000..a6421a0 --- /dev/null +++ b/UI/HomeComponent/Sources/HomeComponent.swift @@ -0,0 +1,144 @@ +// +// HomeComponent.swift +// Flick +// +// Created by Alexander Sharko on 30.11.2022. +// Copyright © 2022 urlaunched.com. All rights reserved. +// + +import Localizations +import SwiftUI +import UDF +import Models +import Common +import CustomViews + +public struct HomeComponent: Component { + public struct Props { + var contentType: Binding + var movieSections: [MovieSection] + var showSections: [ShowSection] + var moviesForSection: (MovieSection) -> [Movie] + var showsForSection: (ShowSection) -> [Show] + var isMoviesRedacted: (MovieSection) -> Bool + var isShowsRedacted: (ShowSection) -> Bool + var dialogStatus: Binding + var destinationBuilder: DestinationBuilder = .init() + + public init( + contentType: Binding, + movieSections: [MovieSection], + showSections: [ShowSection], + moviesForSection: @escaping (MovieSection) -> [Movie], + showsForSection: @escaping (ShowSection) -> [Show], + isMoviesRedacted: @escaping (MovieSection) -> Bool, + isShowsRedacted: @escaping (ShowSection) -> Bool, + dialogStatus: Binding, + destinationBuilder: DestinationBuilder = .init() + ) { + self.contentType = contentType + self.movieSections = movieSections + self.showSections = showSections + self.moviesForSection = moviesForSection + self.showsForSection = showsForSection + self.isMoviesRedacted = isMoviesRedacted + self.isShowsRedacted = isShowsRedacted + self.dialogStatus = dialogStatus + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + public init(props: Props) { + self.props = props + } + + public var body: some View { + ScrollView { + VStack(spacing: 8) { + ContentToggle(contentType: props.contentType) + + switch props.contentType.wrappedValue { + case .movie: + movieSectionsView + case .show: + showSectionsView + } + } + .padding(.bottom) + } + .navigationBarTitleDisplayMode(.inline) + .customNavigationTitle(Localization.homeNavigationTitle()) + } +} + +extension HomeComponent { + var movieSectionsView: some View { + ForEach(MovieSection.allCases, id: \.self) { (movieSection: MovieSection) in + let isRedacted = props.isMoviesRedacted(movieSection) + Group { + if movieSection == MovieSection.popular { + props.destinationBuilder.view( + for: .mainHomeSection( + section: movieSection, + retrieveItems: { props.moviesForSection(movieSection) } + ) + ) + } else { + props.destinationBuilder.view( + for: .homeSection( + section: movieSection, + retrieveItems: { props.moviesForSection(movieSection) } + ) + ) + } + } + .isRedacted(isRedacted) + .disabled(isRedacted) + } + } + + var showSectionsView: some View { + ForEach(ShowSection.allCases, id: \.self) { (showSection: ShowSection) in + let isRedacted = props.isShowsRedacted(showSection) + Group { + if showSection == ShowSection.popular { + props.destinationBuilder.view( + for: .mainHomeSection( + section: showSection, + retrieveItems: { props.showsForSection(showSection) } + ) + ) + } else { + props.destinationBuilder.view( + for: .homeSection( + section: showSection, + retrieveItems: { props.showsForSection(showSection) } + ) + ) + } + } + .isRedacted(isRedacted) + .disabled(isRedacted) + } + .dialog(status: props.dialogStatus) + } +} + +// MARK: - Preview + +#Preview { + HomeComponent( + props: .init( + contentType: .constant(.movie), + movieSections: [], + showSections: [], + moviesForSection: { _ in Movie.fakeItems() }, + showsForSection: { _ in Show.fakeItems() }, + isMoviesRedacted: { _ in false }, + isShowsRedacted: { _ in false }, + dialogStatus: .constant(.dismissed) + ) + ) +} diff --git a/UI/HomeComponent/Sources/HomeContent.swift b/UI/HomeComponent/Sources/HomeContent.swift new file mode 100644 index 0000000..725167d --- /dev/null +++ b/UI/HomeComponent/Sources/HomeContent.swift @@ -0,0 +1,22 @@ +// +// HomeContent.swift +// Flick +// +// Created by Bogdan Petkanych on 17.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Models +import UDF + +public enum HomeContent { + case mainHomeSection( + section: any Models.Section, + retrieveItems: () -> [any Item] + ) + + case homeSection( + section: any Models.Section, + retrieveItems: () -> [any Item] + ) +} diff --git a/UI/HomeSectionComponent/Sources/HomeContent.swift b/UI/HomeSectionComponent/Sources/HomeContent.swift new file mode 100644 index 0000000..38156c3 --- /dev/null +++ b/UI/HomeSectionComponent/Sources/HomeContent.swift @@ -0,0 +1,14 @@ +// +// MainHomeContent.swift +// Flick +// +// Created by Bogdan Petkanych on 17.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum HomeContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/HomeSectionComponent/Sources/HomeSectionComponent.swift b/UI/HomeSectionComponent/Sources/HomeSectionComponent.swift new file mode 100644 index 0000000..8b28521 --- /dev/null +++ b/UI/HomeSectionComponent/Sources/HomeSectionComponent.swift @@ -0,0 +1,96 @@ +// +// HomeSectionComponent.swift +// Flick +// +// Created by Alexander Sharko on 30.11.2022. +// Copyright © 2022 urlaunched.com. All rights reserved. +// + +import DesignSystem +import SwiftUI +import UDF +import Common +import CustomViews +import Models + +public struct HomeSectionComponent: Component where R.Route == HomeSectionRoute { + public struct Props { + var section: S + var items: [any Item] + var genreById: (Genre.ID) -> Genre? + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + section: S, + items: [any Item], + genreById: @escaping (Genre.ID) -> Genre?, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.section = section + self.items = items + self.genreById = genreById + self.router = router + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + @Environment(\.globalRouter) private var globalRouter + + public init(props: Props) { + self.props = props + } + + public var body: some View { + VStack(spacing: 24) { + SectionHeaderView( + title: props.section.title, + seeAllAction: { + globalRouter.navigate(for: R.self, to: .sectionDetails(props.section)) + } + ) + + ScrollView(.horizontal, showsIndicators: false) { + LazyHStack(alignment: .top, spacing: 16) { + ForEach(props.items.indices, id: \.self) { index in + let item = props.items[index] + HomeCardView( + item: item, + genres: item.genres(action: props.genreById), + imageView: props.destinationBuilder.view( + for: .imageContainer( + path: item.posterPath, + size: ItemSizeStyle.default.coverSize, + type: .poster + ) + ) + ) + .padding(.leading, index == props.items.indices.first ? 16 : 0) + .padding(.trailing, index == props.items.indices.last ? 16 : 0) + .embedInPlainButton { + globalRouter.navigate(for: R.self, to: .itemDetails(item)) + } + .buttonStyle(.scaled) + } + } + } + } + .frame(height: 340, alignment: .top) + } +} + +// MARK: - Preview + +#Preview { + HomeSectionComponent( + props: .init( + section: MovieSection.nowPlaying, + items: [], + genreById: { _ in .fakeItem() }, + router: MockRouter() + ) + ) +} diff --git a/UI/HomeSectionComponent/Sources/MainHomeSectionRoute.swift b/UI/HomeSectionComponent/Sources/MainHomeSectionRoute.swift new file mode 100644 index 0000000..64c1b38 --- /dev/null +++ b/UI/HomeSectionComponent/Sources/MainHomeSectionRoute.swift @@ -0,0 +1,37 @@ +// +// HomeSectionRoute.swift +// Flick +// +// Created by Valentin Petrulia on 27.02.2025. +// Copyright © 2025 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common + +public enum HomeSectionRoute: Hashable { + case itemDetails(any Item) + case sectionDetails(any Models.Section) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .itemDetails(item): + hasher.combine(item) + case let .sectionDetails(section): + hasher.combine(section) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.sectionDetails(lhsSection), .sectionDetails(rhsSection)): + areEqual(lhsSection, rhsSection) + default: + false + } + } +} diff --git a/Flick/Code/Modules/Image/View/ImageComponent.swift b/UI/ImageComponent/Sources/ImageComponent.swift similarity index 61% rename from Flick/Code/Modules/Image/View/ImageComponent.swift rename to UI/ImageComponent/Sources/ImageComponent.swift index 97602ec..192cb9e 100644 --- a/Flick/Code/Modules/Image/View/ImageComponent.swift +++ b/UI/ImageComponent/Sources/ImageComponent.swift @@ -9,17 +9,29 @@ import SDWebImageSwiftUI import SwiftUI import UDF +import SwiftUI_Kit +import DesignSystem -struct ImageComponent: Component { - struct Props { +public struct ImageComponent: Component { + public struct Props { var size: CGSize var url: URL? var isLoaderPresented: Bool + + public init(size: CGSize, url: URL? = nil, isLoaderPresented: Bool) { + self.size = size + self.url = url + self.isLoaderPresented = isLoaderPresented + } } - var props: Props + public var props: Props + + public init(props: Props) { + self.props = props + } - var body: some View { + public var body: some View { WebImage(url: props.url) .resizable() .renderingMode(.original) diff --git a/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastComponent.swift b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastComponent.swift new file mode 100644 index 0000000..06a31ba --- /dev/null +++ b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastComponent.swift @@ -0,0 +1,107 @@ +// +// ItemDetailsCastComponent.swift +// Flick +// +// Created by Alexander Sharko on 19.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import CustomViews +import Common + +public struct ItemDetailsCastComponent: Component where R.Route == ItemDetailsCastRoute { + public struct Props { + var cast: [Cast.ID] + var castById: (Cast.ID) -> Cast + var isRedacted: Bool + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + cast: [Cast.ID], + castById: @escaping (Cast.ID) -> Cast, + isRedacted: Bool, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.cast = cast + self.castById = castById + self.isRedacted = isRedacted + self.router = router + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + public init(props: Props) { + self.props = props + } + + @Environment(\.width) private var componentWidth + @Environment(\.globalRouter) private var globalRouter + + public var body: some View { + if props.cast.isNotEmpty { + VStack(alignment: .leading, spacing: 21) { + SectionHeaderView( + title: Localization.itemDetailsCastSectionTitle(), + seeAllAction: { + globalRouter.navigate(for: R.self, to: .cast(props.cast)) + } + ) + + ScrollView(.horizontal) { + HStack(alignment: .top, spacing: 16) { + let width = abs(componentWidth - 64) / 3 + let height = width * 1.25 + let size = CGSize( + width: width, + height: height + ) + ForEach(props.cast, id: \.self) { id in + let cast = props.castById(id) + CastCardView( + cast: props.castById(id), + size: size, + imageView: { + props.destinationBuilder.view( + for: .imageContainer( + path: cast.profilePath, + size: size, + type: .profile + ) + ) + }, + lineLimit: 1, + ) + .frame(width: width) + } + } + .padding(.horizontal) + } + .scrollIndicators(.hidden) + } + .isRedacted(props.isRedacted) + .disabled(props.isRedacted) + } + } +} + +// MARK: - Preview + +#Preview { + ItemDetailsCastComponent( + props: .init( + cast: [], + castById: { _ in .fakeItem() }, + isRedacted: false, + router: MockRouter() + ) + ) +} diff --git a/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastContent.swift b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastContent.swift new file mode 100644 index 0000000..3b95d08 --- /dev/null +++ b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastContent.swift @@ -0,0 +1,14 @@ +// +// CastContent.swift +// Flick +// +// Created by Bogdan Petkanych on 18.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum ItemDetailsCastContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .profile) +} diff --git a/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastRoute.swift b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastRoute.swift new file mode 100644 index 0000000..5b9e988 --- /dev/null +++ b/UI/ItemDetailsCastComponent/Sources/ItemDetailsCastRoute.swift @@ -0,0 +1,15 @@ +// +// ItemDetailsCastRoute.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models + +public enum ItemDetailsCastRoute: Hashable { + case cast([Cast.ID]) +} diff --git a/Flick/Code/Modules/ItemDetails/View/ItemDetailsComponent.swift b/UI/ItemDetailsComponent/Sources/ItemDetailsComponent.swift similarity index 86% rename from Flick/Code/Modules/ItemDetails/View/ItemDetailsComponent.swift rename to UI/ItemDetailsComponent/Sources/ItemDetailsComponent.swift index eb03bfb..138ebb8 100644 --- a/Flick/Code/Modules/ItemDetails/View/ItemDetailsComponent.swift +++ b/UI/ItemDetailsComponent/Sources/ItemDetailsComponent.swift @@ -11,28 +11,52 @@ import Localizations import SwiftUI import SwiftUI_Kit import UDF +import Models +import Common +import CustomViews -struct ItemDetailsComponent: Component { - struct Props { +public struct ItemDetailsComponent: Component where R.Route == ItemDetailsRoute { + public struct Props { var item: any Item var genreById: (Genre.ID) -> Genre? var dialog: Binding - var router: Router = .init() + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + item: any Item, + genreById: @escaping (Genre.ID) -> Genre?, + dialog: Binding, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.item = item + self.genreById = genreById + self.dialog = dialog + self.router = router + self.destinationBuilder = destinationBuilder + } } - var props: Props + public var props: Props @State private var imageScale: CGFloat = 1 + + public init(props: Props) { + self.props = props + } @Environment(\.globalRouter) private var globalRouter - var body: some View { + public var body: some View { GeometryReader { geometry in ScrollView { ZStack(alignment: .top) { let imageHeight = geometry.size.height * 0.7 - ImageContainer( - size: .init(width: geometry.size.width, height: imageHeight), - path: props.item.posterPath + props.destinationBuilder.view( + for: .imageContainer( + path: props.item.posterPath, + size: .init(width: geometry.size.width, height: imageHeight), + ) ) .frame(width: geometry.size.width, height: imageHeight) .clipped() @@ -164,7 +188,7 @@ private extension ItemDetailsComponent { .frame(maxWidth: .infinity) .embedInPlainButton { // TODO: - Add action later ??? - globalRouter.navigate(for: ItemDetailsRouting.self, to: .whereToWatch(props.item)) + globalRouter.navigate(for: R.self, to: .whereToWatch(props.item)) } .buttonStyle(PrimaryButtonStyle(fillColor: .flMainPink)) } @@ -258,7 +282,7 @@ private extension ItemDetailsComponent { // MARK: - Preview #Preview { - ItemDetailsComponent( + ItemDetailsComponent>( props: .init( item: Movie.fakeItem(), genreById: { _ in .fakeItem() }, diff --git a/UI/ItemDetailsComponent/Sources/ItemDetailsContent.swift b/UI/ItemDetailsComponent/Sources/ItemDetailsContent.swift new file mode 100644 index 0000000..f416d36 --- /dev/null +++ b/UI/ItemDetailsComponent/Sources/ItemDetailsContent.swift @@ -0,0 +1,14 @@ +// +// ItemDetailsContent.swift +// Flick +// +// Created by Bogdan Petkanych on 17.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum ItemDetailsContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/ItemDetailsComponent/Sources/ItemDetailsRoute.swift b/UI/ItemDetailsComponent/Sources/ItemDetailsRoute.swift new file mode 100644 index 0000000..0dc65ec --- /dev/null +++ b/UI/ItemDetailsComponent/Sources/ItemDetailsRoute.swift @@ -0,0 +1,47 @@ +// +// ItemDetailsRoute.swift +// Flick +// +// Created by Alexander Sharko on 20.01.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common + +public enum ItemDetailsRoute: Hashable { + case cast(any Item) + case reviews(any Item) + case recommendations(any Item) + case whereToWatch(any Item) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .cast(item): + hasher.combine(item) + case let .reviews(item): + hasher.combine(item) + case let .recommendations(item): + hasher.combine(item) + case let .whereToWatch(item): + hasher.combine(item) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.cast(lhsItem), .cast(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.reviews(lhsItem), .reviews(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.recommendations(lhsItem), .recommendations(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.whereToWatch(lhsItem), .whereToWatch(rhsItem)): + areEqual(lhsItem, rhsItem) + default: + false + } + } +} diff --git a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsComponent.swift b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsComponent.swift similarity index 52% rename from Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsComponent.swift rename to UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsComponent.swift index dc23c25..2e1db3f 100644 --- a/Flick/Code/Modules/Recommendations/View/ItemDetailsRecommendations/ItemDetailsRecommendationsComponent.swift +++ b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsComponent.swift @@ -10,27 +10,51 @@ import DesignSystem import Localizations import SwiftUI import UDF +import Models +import CustomViews +import Common -struct ItemDetailsRecommendationsComponent: Component { - struct Props { +public struct ItemDetailsRecommendationsComponent: Component where R.Route == ItemDetailsRecommendationsRoute { + public struct Props { var item: any Item var items: [any Item] var isRedacted: Bool var genreById: (Genre.ID) -> Genre? - var router: Router = .init() + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + item: any Item, + items: [any Item], + isRedacted: Bool, + genreById: @escaping (Genre.ID) -> Genre?, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.item = item + self.items = items + self.isRedacted = isRedacted + self.genreById = genreById + self.router = router + self.destinationBuilder = destinationBuilder + } } - var props: Props - + public var props: Props + @Environment(\.globalRouter) private var globalRouter - var body: some View { + public init(props: Props) { + self.props = props + } + + public var body: some View { if !props.items.isEmpty { VStack(alignment: .leading, spacing: 24) { SectionHeaderView( title: Localization.itemDetailsRecommendationsSectionTitle(), seeAllAction: { - globalRouter.navigate(for: ItemDetailsRecommendationsRouting.self, to: .recommendations(props.item)) + globalRouter.navigate(for: R.self, to: .recommendations(props.item)) } ) @@ -40,12 +64,19 @@ struct ItemDetailsRecommendationsComponent: Component { let item = props.items[index] HomeCardView( item: item, - genres: item.genres(action: props.genreById) + genres: item.genres(action: props.genreById), + imageView: props.destinationBuilder.view( + for: .imageContainer( + path: item.posterPath, + size: ItemSizeStyle.default.coverSize, + type: .poster + ) + ) ) .padding(.leading, index == props.items.indices.first ? 16 : 0) .padding(.trailing, index == props.items.indices.last ? 16 : 0) .embedInPlainButton { - globalRouter.navigate(for: ItemDetailsRecommendationsRouting.self, to: .itemDetails(item)) + globalRouter.navigate(for: R.self, to: .itemDetails(item)) } .buttonStyle(.scaled) } @@ -61,7 +92,7 @@ struct ItemDetailsRecommendationsComponent: Component { // MARK: - Preview #Preview { - ItemDetailsRecommendationsComponent( + ItemDetailsRecommendationsComponent>( props: .init( item: Movie.fakeItem(), items: [], diff --git a/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsContent.swift b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsContent.swift new file mode 100644 index 0000000..b3b31d3 --- /dev/null +++ b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsContent.swift @@ -0,0 +1,14 @@ +// +// ItemDetailsRecommendationsContent.swift +// Flick +// +// Created by Bogdan Petkanych on 15.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum ItemDetailsRecommendationsContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsRoute.swift b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsRoute.swift new file mode 100644 index 0000000..95823d1 --- /dev/null +++ b/UI/ItemDetailsRecommendationsComponent/Sources/ItemDetailsRecommendationsRoute.swift @@ -0,0 +1,37 @@ +// +// ItemDetailsRecommendationsRoute.swift +// Flick +// +// Created by Alexander Sharko on 05.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common + +public enum ItemDetailsRecommendationsRoute: Hashable { + case itemDetails(any Item) + case recommendations(any Item) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .itemDetails(item): + hasher.combine(item) + case let .recommendations(item): + hasher.combine(item) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.recommendations(lhsItem), .recommendations(rhsItem)): + areEqual(lhsItem, rhsItem) + default: + false + } + } +} diff --git a/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsComponent.swift b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsComponent.swift new file mode 100644 index 0000000..8f44b61 --- /dev/null +++ b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsComponent.swift @@ -0,0 +1,80 @@ +// +// ItemDetailsReviewsComponent.swift +// Flick +// +// Created by Alexander Sharko on 08.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import CustomViews +import Common + +public struct ItemDetailsReviewsComponent: Component where R.Route == ItemDetailsReviewsRoute { + public struct Props { + var item: any Item + var reviews: [Review.ID] + var reviewById: (Review.ID) -> Review + var isRedacted: Bool + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + item: any Item, + reviews: [Review.ID], + reviewById: @escaping (Review.ID) -> Review, + isRedacted: Bool, + router: R, + destinationBuilder: DestinationBuilder + ) { + self.item = item + self.reviews = reviews + self.reviewById = reviewById + self.isRedacted = isRedacted + self.router = router + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + public init(props: Props) { + self.props = props + } + + @Environment(\.globalRouter) private var globalRouter + + public var body: some View { + if let id = props.reviews.first { + VStack(alignment: .leading, spacing: 24) { + SectionHeaderView( + title: Localization.itemDetailsReviewsSectionTitle(props.reviews.count), + seeAllAction: { + globalRouter.navigate(for: R.self, to: .reviews(props.item)) + } + ) + + let review = props.reviewById(id) + ReviewRow(review: review, imageView: props.destinationBuilder.view( + for: .imageContainer( + path: review.authorDetails.avatarPath, + size: CGSize(width: 48, height: 48), + type: .profile + ) + )) + .embedInPlainButton { + globalRouter.navigate(for: R.self, to: .reviewDetails(id)) + } + .buttonStyle(.scaled) + .padding(.horizontal) + } + .isRedacted(props.isRedacted) + .disabled(props.isRedacted) + .toolbar(.hidden, for: .tabBar) + } + } +} diff --git a/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsContent.swift b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsContent.swift new file mode 100644 index 0000000..1376bd8 --- /dev/null +++ b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsContent.swift @@ -0,0 +1,13 @@ +// +// ItemDetailsContent.swift +// Flick +// +// Created by Bogdan Petkanych on 15.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import Common +import UIKit + +public enum ItemDetailsReviewsContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsRoute.swift b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsRoute.swift new file mode 100644 index 0000000..2b05178 --- /dev/null +++ b/UI/ItemDetailsReviewsComponent/Sources/ItemDetailsReviewsRoute.swift @@ -0,0 +1,37 @@ +// +// ItemDetailsReviewsRoute.swift +// Flick +// +// Created by Alexander Sharko on 08.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common + +public enum ItemDetailsReviewsRoute: Hashable { + case reviewDetails(Review.ID) + case reviews(any Item) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .reviewDetails(id): + hasher.combine(id) + case let .reviews(item): + hasher.combine(item) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.reviewDetails(lhsId), .reviewDetails(rhsId)): + areEqual(lhsId, rhsId) + case let (.reviews(lhsItem), .reviews(rhsItem)): + areEqual(lhsItem, rhsItem) + default: + false + } + } +} diff --git a/UI/MainHomeSectionComponent/Sources/MainHomeContent.swift b/UI/MainHomeSectionComponent/Sources/MainHomeContent.swift new file mode 100644 index 0000000..77fed29 --- /dev/null +++ b/UI/MainHomeSectionComponent/Sources/MainHomeContent.swift @@ -0,0 +1,14 @@ +// +// MainHomeContent.swift +// Flick +// +// Created by Bogdan Petkanych on 17.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import Common +import UIKit + +public enum MainHomeContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster, isLoaderPresented: Bool) +} diff --git a/UI/MainHomeSectionComponent/Sources/MainHomeSectionComponent.swift b/UI/MainHomeSectionComponent/Sources/MainHomeSectionComponent.swift new file mode 100644 index 0000000..195bcac --- /dev/null +++ b/UI/MainHomeSectionComponent/Sources/MainHomeSectionComponent.swift @@ -0,0 +1,88 @@ +// +// MainHomeSectionComponent.swift +// Flick +// +// Created by Alexander Sharko on 01.12.2022. +// Copyright © 2022 urlaunched.com. All rights reserved. +// + +import SwiftUI +import SwiftUI_Kit +import UDF +import Models +import Common +import CustomViews + +public struct MainHomeSectionComponent: Component where R.Route == MainHomeSectionRoute { + public struct Props { + var section: S + var items: [any Item] + var genreById: (Genre.ID) -> Genre? + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + section: S, + items: [any Item], + genreById: @escaping (Genre.ID) -> Genre?, + router: R = .init(), + destinationBuilder: DestinationBuilder = .init() + ) { + self.section = section + self.items = items + self.genreById = genreById + self.router = router + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + public init(props: Props) { + self.props = props + } + + @Environment(\.globalRouter) private var globalRouter + + public var body: some View { + VStack(spacing: 10) { + SectionHeaderView( + title: props.section.title, + seeAllAction: { + globalRouter.navigate(for: R.self, to: .sectionDetails(props.section)) + } + ) + .padding(.bottom) + + MainSectionScrollView( + items: props.items, + genresByItem: { $0.genres(action: props.genreById) }, + navigateToItemDetails: { item in + globalRouter.navigate(for: R.self, to: .itemDetails(item)) + }, + backgroundImage: { size, path in + props.destinationBuilder.view( + for: .imageContainer( + path: path, + size: size, + type: .backdrop, + isLoaderPresented: true + ) + ) + }, + cardImage: { item in + props.destinationBuilder.view( + for: .imageContainer( + path: item.posterPath, + size: ItemSizeStyle.default.coverSize, + type: .poster, + isLoaderPresented: false + ) + ) + } + ) + } + .clipShape(RoundedCorner(radius: 50, corners: [.bottomLeft, .bottomRight])) + .frame(height: 460) + } +} diff --git a/UI/MainHomeSectionComponent/Sources/MainHomeSectionRoute.swift b/UI/MainHomeSectionComponent/Sources/MainHomeSectionRoute.swift new file mode 100644 index 0000000..b46adad --- /dev/null +++ b/UI/MainHomeSectionComponent/Sources/MainHomeSectionRoute.swift @@ -0,0 +1,37 @@ +// +// MainHomeSectionRoute.swift +// Flick +// +// Created by Valentin Petrulia on 27.02.2025. +// Copyright © 2025 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models +import Common + +public enum MainHomeSectionRoute: Hashable { + case itemDetails(any Item) + case sectionDetails(any Models.Section) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .itemDetails(item): + hasher.combine(item) + case let .sectionDetails(section): + hasher.combine(section) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.sectionDetails(lhsSection), .sectionDetails(rhsSection)): + areEqual(lhsSection, rhsSection) + default: + false + } + } +} diff --git a/UI/MyFavoritesComponent/Sources/MyFavoritesComponent.swift b/UI/MyFavoritesComponent/Sources/MyFavoritesComponent.swift new file mode 100644 index 0000000..9b60bbd --- /dev/null +++ b/UI/MyFavoritesComponent/Sources/MyFavoritesComponent.swift @@ -0,0 +1,99 @@ +// +// MyFavoritesComponent.swift +// Flick +// +// Created by Vlad Andrieiev on 22.05.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import Common +import CustomViews + +public struct MyFavoritesComponent: Component { + public struct Props { + var contentType: Binding + var items: [any Item] + var genreById: (Genre.ID) -> Genre? + var loadMoreAction: Command + var isRedacted: Bool + var dialogStatus: Binding + var destinationBuilder: DestinationBuilder + + public init( + contentType: Binding, + items: [any Item], + genreById: @escaping (Genre.ID) -> Genre?, + loadMoreAction: @escaping Command, + isRedacted: Bool, + dialogStatus: Binding, + destinationBuilder: DestinationBuilder = .init() + ) { + self.contentType = contentType + self.items = items + self.genreById = genreById + self.loadMoreAction = loadMoreAction + self.isRedacted = isRedacted + self.dialogStatus = dialogStatus + self.destinationBuilder = destinationBuilder + } + } + + public var props: Props + + public init(props: Props) { + self.props = props + } + + public var body: some View { + SelectiveItemsList( + items: props.items, + genreById: props.genreById, + loadMoreAction: props.loadMoreAction, + isRedacted: props.isRedacted, + header: { + ContentToggle(contentType: props.contentType) + }, + imageView: { path in + props.destinationBuilder.view( + for: .imageContainer( + path: path, + size: ItemSizeStyle.default.coverSize, + type: .poster + ) + ) + } + ) + .customNavigationTitle(Localization.myFavoritesNavigationTitle()) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: {}) { + Image.filter + .aspectFit() + .frame(24) + } + } + } + .dialog(status: props.dialogStatus) + } +} + +// MARK: - Preview + +#Preview { + MyFavoritesComponent( + props: .init( + contentType: .constant(.movie), + items: Movie.testItems(count: 10), + genreById: { _ in .testItem() }, + loadMoreAction: {}, + isRedacted: true, + dialogStatus: .constant(.dismissed) + ) + ) +} diff --git a/UI/MyFavoritesComponent/Sources/MyFavoritesContent.swift b/UI/MyFavoritesComponent/Sources/MyFavoritesContent.swift new file mode 100644 index 0000000..46cd699 --- /dev/null +++ b/UI/MyFavoritesComponent/Sources/MyFavoritesContent.swift @@ -0,0 +1,13 @@ +// +// MyFavoritesContent.swift +// Flick +// +// Created by Bogdan Petkanych on 15.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import Common +import UIKit + +public enum MyFavoritesContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/SnapshotTests/Snapshots/OnboardingComponentTests.swift b/UI/OnboardingComponent/Snapshots/OnboardingComponentTests.swift similarity index 88% rename from SnapshotTests/Snapshots/OnboardingComponentTests.swift rename to UI/OnboardingComponent/Snapshots/OnboardingComponentTests.swift index ce394ed..d80e1f1 100644 --- a/SnapshotTests/Snapshots/OnboardingComponentTests.swift +++ b/UI/OnboardingComponent/Snapshots/OnboardingComponentTests.swift @@ -5,16 +5,17 @@ // Created by Alexander Sharko on 16.11.2022. // -@testable import Flick +@testable import OnboardingComponentSnapshotTestsHostApp import Foundation import SwiftUI import SwiftUISnapshotTestCase import UDF import XCTest -final class OnboardingComponentTests: SnapshotTestCase { +final class OnboardingComponentTests: BaseSnapshotTestCase { override func setUp() { isRecording = false + super.setUp() } func test_Onboarding_firstPage() { diff --git a/SnapshotTests/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_firstPage.1.png b/UI/OnboardingComponent/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_firstPage.1.png similarity index 100% rename from SnapshotTests/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_firstPage.1.png rename to UI/OnboardingComponent/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_firstPage.1.png diff --git a/SnapshotTests/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_lastPage.1.png b/UI/OnboardingComponent/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_lastPage.1.png similarity index 100% rename from SnapshotTests/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_lastPage.1.png rename to UI/OnboardingComponent/Snapshots/__Snapshots__/OnboardingComponentTests/test_Onboarding_lastPage.1.png diff --git a/UI/OnboardingComponent/Sources/OnboardingApp.swift b/UI/OnboardingComponent/Sources/OnboardingApp.swift new file mode 100644 index 0000000..8fa5df0 --- /dev/null +++ b/UI/OnboardingComponent/Sources/OnboardingApp.swift @@ -0,0 +1,18 @@ +// +// OnboardingApp.swift +// Flick +// +// Created by Bogdan Petkanych on 13.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import SwiftUI + +@main +struct OnboardingApp: App { + var body: some Scene { + WindowGroup { + EmptyView() + } + } +} diff --git a/Flick/Code/Modules/Onboarding/View/OnboardingComponent.swift b/UI/OnboardingComponent/Sources/OnboardingComponent.swift similarity index 93% rename from Flick/Code/Modules/Onboarding/View/OnboardingComponent.swift rename to UI/OnboardingComponent/Sources/OnboardingComponent.swift index c11838f..3e46b51 100644 --- a/Flick/Code/Modules/Onboarding/View/OnboardingComponent.swift +++ b/UI/OnboardingComponent/Sources/OnboardingComponent.swift @@ -12,15 +12,19 @@ import SwiftUI import SwiftUI_Kit import UDF -struct OnboardingComponent: Component { - struct Props { - let skipAction: Command +public struct OnboardingComponent: Component { + public struct Props { + public let skipAction: Command + + public init(skipAction: @escaping Command) { + self.skipAction = skipAction + } } - var props: Props + public var props: Props @State private var page: any Pageable - init(props: Props) { + public init(props: Props) { self.props = props _page = .init(initialValue: Page.first) } @@ -30,7 +34,7 @@ struct OnboardingComponent: Component { _page = .init(initialValue: page) } - var body: some View { + public var body: some View { ZStack { page.color GeometryReader { diff --git a/Flick/Code/Modules/Onboarding/View/OnboardingPage.swift b/UI/OnboardingComponent/Sources/OnboardingPage.swift similarity index 100% rename from Flick/Code/Modules/Onboarding/View/OnboardingPage.swift rename to UI/OnboardingComponent/Sources/OnboardingPage.swift index 606531a..6d1a7db 100644 --- a/Flick/Code/Modules/Onboarding/View/OnboardingPage.swift +++ b/UI/OnboardingComponent/Sources/OnboardingPage.swift @@ -8,8 +8,8 @@ import DesignSystem import Foundation -import Localizations import SwiftUI +import Localizations protocol Pageable: Identifiable where ID == Int { var id: Int { get } diff --git a/UI/ReviewDetailsComponent/Sources/ReviewDetailsComponent.swift b/UI/ReviewDetailsComponent/Sources/ReviewDetailsComponent.swift new file mode 100644 index 0000000..80d8f51 --- /dev/null +++ b/UI/ReviewDetailsComponent/Sources/ReviewDetailsComponent.swift @@ -0,0 +1,69 @@ +// +// ReviewDetailsComponent.swift +// Flick +// +// Created by Alexander Sharko on 10.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import CustomViews +import Common + +public struct ReviewDetailsComponent: Component { + public struct Props { + var review: Review + var destinationBuilder: DestinationBuilder + + public init(review: Review, destinationBuilder: DestinationBuilder = .init()) { + self.review = review + self.destinationBuilder = destinationBuilder + } + } + + public init(props: Props) { + self.props = props + } + + public var props: Props + + public var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + ReviewHeaderView( + review: props.review, + placeholderColor: .flSecondary, + imageView: props.destinationBuilder.view( + for: .imageContainer( + path: props.review.authorDetails.avatarPath, + size: CGSize(width: 48, height: 48), + type: .profile + ) + ) + ) + .padding(.horizontal, 10) + + Text(props.review.content) + .customFont(.body) + .foregroundStyle(.flText) + } + .padding() + } + .customNavigationTitle(Localization.itemDetailsReviewsNavigationTitle()) + .background(Color.flMain.edgesIgnoringSafeArea(.all)) + } +} + +// MARK: - Preview + +#Preview { + ReviewDetailsComponent( + props: .init( + review: .fakeItem() + ) + ) +} diff --git a/UI/ReviewDetailsComponent/Sources/ReviewDetailsContent.swift b/UI/ReviewDetailsComponent/Sources/ReviewDetailsContent.swift new file mode 100644 index 0000000..6d10ab8 --- /dev/null +++ b/UI/ReviewDetailsComponent/Sources/ReviewDetailsContent.swift @@ -0,0 +1,13 @@ +// +// ReviewDetailsContent.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import SwiftUI +import Common + +public enum ReviewDetailsContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/ReviewsComponent/Sources/ReviewsComponent.swift b/UI/ReviewsComponent/Sources/ReviewsComponent.swift new file mode 100644 index 0000000..2695001 --- /dev/null +++ b/UI/ReviewsComponent/Sources/ReviewsComponent.swift @@ -0,0 +1,93 @@ +// +// ReviewsComponent.swift +// Flick +// +// Created by Alexander Sharko on 10.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import DesignSystem +import Localizations +import SwiftUI +import UDF +import Models +import CustomViews +import Common + + +public struct ReviewsComponent: Component where R.Route == ReviewsRoute { + public struct Props { + var reviews: [Review.ID] + var reviewById: (Review.ID) -> Review + var loadMoreAction: Command + var dialogStatus: Binding + var router: R = .init() + var destinationBuilder: DestinationBuilder = .init() + + public init( + reviews: [Review.ID], + reviewById: @escaping (Review.ID) -> Review, + loadMoreAction: @escaping Command, + dialogStatus: Binding, + router: R = .init() + ) { + self.reviews = reviews + self.reviewById = reviewById + self.loadMoreAction = loadMoreAction + self.dialogStatus = dialogStatus + self.router = router + } + } + public var props: Props + + public init(props: Props) { + self.props = props + } + + @Environment(\.globalRouter) private var globalRouter + + public var body: some View { + VStack(spacing: 16) { + List(props.reviews, id: \.self) { id in + let review = props.reviewById(id) + ReviewRow( + review: review, + imageView: props.destinationBuilder.view( + for: .imageContainer( + path: review.authorDetails.avatarPath, + size: CGSize(width: 48, height: 48), type: .profile + ) + ) + ) + .embedInPlainButton { + globalRouter.navigate(for: R.self, to: .reviewDetails(id)) + } + .onAppear { + if id == props.reviews.last { + props.loadMoreAction() + } + } + .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) + .listRowBackground(Color.flMain) + .listRowSeparator(.hidden) + } + .listStyle(.plain) + .scrollContentBackground(.hidden) + } + .customNavigationTitle(Localization.itemDetailsReviewsNavigationTitle()) + .background(Color.flMain.edgesIgnoringSafeArea(.all)) + } +} + +// MARK: - Preview + +#Preview { + ReviewsComponent>( + props: .init( + reviews: Review.testItemIds(count: 10), + reviewById: { _ in .fakeItem() }, + loadMoreAction: {}, + dialogStatus: .constant(.dismissed) + ) + ) +} diff --git a/UI/ReviewsComponent/Sources/ReviewsContent.swift b/UI/ReviewsComponent/Sources/ReviewsContent.swift new file mode 100644 index 0000000..a7af280 --- /dev/null +++ b/UI/ReviewsComponent/Sources/ReviewsContent.swift @@ -0,0 +1,15 @@ +// +// ReviewsContent.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import UDF +import UIKit +import Common + +public enum ReviewsContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/UI/ReviewsComponent/Sources/ReviewsRoute.swift b/UI/ReviewsComponent/Sources/ReviewsRoute.swift new file mode 100644 index 0000000..a91908a --- /dev/null +++ b/UI/ReviewsComponent/Sources/ReviewsRoute.swift @@ -0,0 +1,15 @@ +// +// ReviewsRoute.swift +// Flick +// +// Created by Alexander Sharko on 10.02.2023. +// Copyright © 2023 urlaunched.com. All rights reserved. +// + +import SwiftUI +import UDF +import Models + +public enum ReviewsRoute: Hashable { + case reviewDetails(Review.ID) +} diff --git a/Flick/Code/Modules/Search/View/SearchComponent.swift b/UI/SearchComponent/Sources/SearchComponent.swift similarity index 78% rename from Flick/Code/Modules/Search/View/SearchComponent.swift rename to UI/SearchComponent/Sources/SearchComponent.swift index 867434d..e8473c5 100644 --- a/Flick/Code/Modules/Search/View/SearchComponent.swift +++ b/UI/SearchComponent/Sources/SearchComponent.swift @@ -11,21 +11,46 @@ import DesignSystem import Localizations import SwiftUI import UDF +import Models +import CustomViews +import Common -struct SearchComponent: Component { - struct Props { +public struct SearchComponent: Component { + public struct Props { var searchText: Binding var itemIds: [SearchItem.ID] var searchItemById: (SearchItem.ID) -> SearchItem var genreById: (Genre.ID) -> Genre var loadMoreAction: Command + var destinationBuilder: DestinationBuilder + + public init( + searchText: Binding, + itemIds: [SearchItem.ID], + searchItemById: @escaping (SearchItem.ID) -> SearchItem, + genreById: @escaping (Genre.ID) -> Genre, + loadMoreAction: @escaping Command, + destinationBuilder: DestinationBuilder + ) { + self.searchText = searchText + self.itemIds = itemIds + self.searchItemById = searchItemById + self.genreById = genreById + self.loadMoreAction = loadMoreAction + self.destinationBuilder = destinationBuilder + } } - var props: Props + public var props: Props + + public init(props: Props) { + self.props = props + self.focusedField = focusedField + } @FocusState private var focusedField: Field? - var body: some View { + public var body: some View { VStack(spacing: 16) { searchTextField .padding(.horizontal) @@ -95,7 +120,14 @@ private extension SearchComponent { func searchRow(item: SearchItem) -> some View { HStack(spacing: 16) { PosterImageView( - posterPath: item.posterPath, year: item.year, rating: item.rating + year: item.year, + rating: item.rating, + imageView: props.destinationBuilder.view( + for: .imageContainer( + path: item.posterPath, + size: ItemSizeStyle.default.coverSize + ) + ) ) .overlay(alignment: .topLeading) { heartButton @@ -192,7 +224,8 @@ private extension SearchComponent { itemIds: SearchItem.testItems(count: 10).ids, searchItemById: { _ in .fakeItem() }, genreById: { _ in .testItem() }, - loadMoreAction: {} + loadMoreAction: {}, + destinationBuilder: .init() ) ) } @@ -204,7 +237,8 @@ private extension SearchComponent { itemIds: [], searchItemById: { _ in .fakeItem() }, genreById: { _ in .testItem() }, - loadMoreAction: {} + loadMoreAction: {}, + destinationBuilder: .init() ) ) } diff --git a/UI/SearchComponent/Sources/SearchContent.swift b/UI/SearchComponent/Sources/SearchContent.swift new file mode 100644 index 0000000..d171d0a --- /dev/null +++ b/UI/SearchComponent/Sources/SearchContent.swift @@ -0,0 +1,13 @@ +// +// SearchContent.swift +// Flick +// +// Created by Bogdan Petkanych on 15.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import Foundation +import Common + +public enum SearchContent: Hashable { + case imageContainer(path: String?, size: CGSize) +} diff --git a/Flick/Code/Modules/SectionDetails/View/SectionDetailsComponent.swift b/UI/SectionDetailsComponent/Sources/SectionDetailsComponent.swift similarity index 60% rename from Flick/Code/Modules/SectionDetails/View/SectionDetailsComponent.swift rename to UI/SectionDetailsComponent/Sources/SectionDetailsComponent.swift index d9d7075..8e5a6e2 100644 --- a/Flick/Code/Modules/SectionDetails/View/SectionDetailsComponent.swift +++ b/UI/SectionDetailsComponent/Sources/SectionDetailsComponent.swift @@ -10,31 +10,55 @@ import DesignSystem import SwiftUI import SwiftUI_Kit import UDF +import Models +import Common -struct SectionDetailsComponent: Component { - struct Props { +public struct SectionDetailsComponent: Component where R.Route == SectionDetailsRoute { + public struct Props { var title: String var items: [any Item] var genreById: (Genre.ID) -> Genre? var loadMoreAction: Command var dialogStatus: Binding - var router: Router = .init() + var router: R = .init() + + public init( + title: String, + items: [any Item], + genreById: @escaping (Genre.ID) -> Genre?, + loadMoreAction: @escaping Command, + dialogStatus: Binding, + router: R = .init() + ) { + self.title = title + self.items = items + self.genreById = genreById + self.loadMoreAction = loadMoreAction + self.dialogStatus = dialogStatus + self.router = router + } } - var props: Props + public var props: Props + + public init(props: Props) { + self.props = props + } @Environment(\.globalRouter) private var globalRouter - var body: some View { + public var body: some View { GeometryReader { geometry in List(props.items.indices, id: \.self) { index in let item = props.items[index] + let size = CGSize(width: geometry.size.width, height: geometry.size.height * 0.75) SectionDetailsRow( item: item, genres: item.genres(action: props.genreById), size: .init(width: geometry.size.width, height: geometry.size.height * 0.75), toggleFavoriteAction: {}, - shareAction: {} + shareAction: {}, + imageView: props.router.view(for: .imageContainer(path: item.posterPath, size: size)) ) .onAppear { if index == props.items.indices.last { @@ -42,7 +66,7 @@ struct SectionDetailsComponent: Component { } } .embedInPlainButton { - globalRouter.navigate(for: SectionDetailsRouting.self, to: .itemDetails(item)) + globalRouter.navigate(for: R.self, to: .itemDetails(item)) } .listRowInsets(.zero) .listRowSeparator(.hidden) @@ -67,13 +91,14 @@ struct SectionDetailsComponent: Component { // MARK: - Preview #Preview { - SectionDetailsComponent( + SectionDetailsComponent>( props: .init( title: "Popular", items: Movie.testItems(count: 10), genreById: { _ in .fakeItem() }, loadMoreAction: {}, - dialogStatus: .constant(.dismissed) + dialogStatus: .constant(.dismissed), + router: MockRouter() ) ) } diff --git a/UI/SectionDetailsComponent/Sources/SectionDetailsRoute.swift b/UI/SectionDetailsComponent/Sources/SectionDetailsRoute.swift new file mode 100644 index 0000000..9eb0e41 --- /dev/null +++ b/UI/SectionDetailsComponent/Sources/SectionDetailsRoute.swift @@ -0,0 +1,37 @@ +// +// SectionDetailsRoute.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import UDF +import UIKit +import Common +import Models + +public enum SectionDetailsRoute: Hashable { + case imageContainer(path: String?, size: CGSize) + case itemDetails(any Item) + + public func hash(into hasher: inout Hasher) { + switch self { + case let .itemDetails(item): + hasher.combine(item) + case .imageContainer(path: let path, size: let size): + hasher.combine(path) + } + } + + public static func == (lhs: Self, rhs: Self) -> Bool { + switch (lhs, rhs) { + case let (.itemDetails(lhsItem), .itemDetails(rhsItem)): + areEqual(lhsItem, rhsItem) + case let (.imageContainer(path: lhsPath, size: lhsSize), .imageContainer(path: rhsPath, size: rhsSize)): + lhsPath == rhsPath && lhsSize == rhsSize + default: + false + } + } +} diff --git a/Flick/Code/Common/CustomViews/SectionDetailsRow.swift b/UI/SectionDetailsComponent/Sources/SectionDetailsRow.swift similarity index 91% rename from Flick/Code/Common/CustomViews/SectionDetailsRow.swift rename to UI/SectionDetailsComponent/Sources/SectionDetailsRow.swift index 6f4b745..306e56b 100644 --- a/Flick/Code/Common/CustomViews/SectionDetailsRow.swift +++ b/UI/SectionDetailsComponent/Sources/SectionDetailsRow.swift @@ -8,22 +8,21 @@ import DesignSystem import SwiftUI +import Models -struct SectionDetailsRow: View { +struct SectionDetailsRow: View { var item: any Item var genres: String var size: CGSize var toggleFavoriteAction: () -> Void var shareAction: () -> Void + var imageView: IV var body: some View { ZStack(alignment: .bottom) { - ImageContainer( - size: size, - path: item.posterPath - ) - .frame(size) - .clipped() + imageView + .frame(size) + .clipped() LinearGradient( colors: [.flDark.opacity(0.8), .flDark.opacity(0.7), .clear], @@ -95,6 +94,7 @@ private extension SectionDetailsRow { genres: "Fantasy • Action • Adventure", size: .init(width: 300, height: 500), toggleFavoriteAction: {}, - shareAction: {} + shareAction: {}, + imageView: EmptyView() ) } diff --git a/Flick/Code/Modules/Profile/View/SettingsComponent.swift b/UI/SettingsComponent/Sources/SettingsComponent.swift similarity index 85% rename from Flick/Code/Modules/Profile/View/SettingsComponent.swift rename to UI/SettingsComponent/Sources/SettingsComponent.swift index a14bdd7..8c54492 100644 --- a/Flick/Code/Modules/Profile/View/SettingsComponent.swift +++ b/UI/SettingsComponent/Sources/SettingsComponent.swift @@ -10,17 +10,26 @@ import Localizations import SwiftUI import SwiftUI_Kit import UDF +import Common -struct SettingsComponent: Component { - struct Props { +public struct SettingsComponent: Component { + public struct Props { var rateThisAppAction: Command + + public init(rateThisAppAction: @escaping Command) { + self.rateThisAppAction = rateThisAppAction + } } @State private var selectedLink: AppLink? - var props: Props + public var props: Props + + public init(props: Props) { + self.props = props + } - var body: some View { + public var body: some View { ScrollView { settingsRow(title: Localization.settingsPrivacyPolicyTitle()) { selectedLink = .privacyPolicy diff --git a/SnapshotTests/Snapshots/SignInComponentTests.swift b/UI/SignInComponent/Snapshots/SignInComponentTests.swift similarity index 82% rename from SnapshotTests/Snapshots/SignInComponentTests.swift rename to UI/SignInComponent/Snapshots/SignInComponentTests.swift index 86792f3..943ef28 100644 --- a/SnapshotTests/Snapshots/SignInComponentTests.swift +++ b/UI/SignInComponent/Snapshots/SignInComponentTests.swift @@ -6,15 +6,18 @@ // Copyright © 2022 urlaunched.com. All rights reserved. // -@testable import Flick +@testable import SignInComponentSnapshotTestsHostApp +@testable import Common import Foundation import SwiftUI import SwiftUISnapshotTestCase import UDF import XCTest -final class SignInComponentTests: SnapshotTestCase { - private var initialComponent: SignInComponent! +@MainActor +final class SignInComponentTests: BaseSnapshotTestCase { + private var initialComponent: SignInComponent>! + override func setUp() { super.setUp() isRecording = false diff --git a/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png b/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png new file mode 100644 index 0000000..9991ac6 Binary files /dev/null and b/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areEmpty.1.png differ diff --git a/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png b/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png new file mode 100644 index 0000000..91f8856 Binary files /dev/null and b/UI/SignInComponent/Snapshots/__Snapshots__/SignInComponentTests/test_TextFields_areFilled.1.png differ diff --git a/Flick/Code/Common/CustomViews/AuthView.swift b/UI/SignInComponent/Sources/AuthView.swift similarity index 100% rename from Flick/Code/Common/CustomViews/AuthView.swift rename to UI/SignInComponent/Sources/AuthView.swift diff --git a/UI/SignInComponent/Sources/Router.swift b/UI/SignInComponent/Sources/Router.swift new file mode 100644 index 0000000..fc372e4 --- /dev/null +++ b/UI/SignInComponent/Sources/Router.swift @@ -0,0 +1,13 @@ +// +// SignInRouter.swift +// Flick +// +// Created by Bogdan Petkanych on 06.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// +import SwiftUI + +public enum SignInRoute: Hashable { + case resetPassword + case signUp +} diff --git a/UI/SignInComponent/Sources/SignInApp.swift b/UI/SignInComponent/Sources/SignInApp.swift new file mode 100644 index 0000000..5c25b17 --- /dev/null +++ b/UI/SignInComponent/Sources/SignInApp.swift @@ -0,0 +1,18 @@ +// +// SignInApp.swift +// Flick +// +// Created by Bogdan Petkanych on 13.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + +import SwiftUI + +@main +struct SignInApp: App { + var body: some Scene { + WindowGroup { + EmptyView() + } + } +} diff --git a/Flick/Code/Modules/SignIn/View/SignInComponent.swift b/UI/SignInComponent/Sources/SignInComponent.swift similarity index 76% rename from Flick/Code/Modules/SignIn/View/SignInComponent.swift rename to UI/SignInComponent/Sources/SignInComponent.swift index b6cb8e4..03c94b2 100644 --- a/Flick/Code/Modules/SignIn/View/SignInComponent.swift +++ b/UI/SignInComponent/Sources/SignInComponent.swift @@ -10,23 +10,44 @@ import DesignSystem import Localizations import SwiftUI import UDF +import Common -struct SignInComponent: Component { - struct Props { +public struct SignInComponent: Component where R.Route == SignInRoute { + public struct Props { var username: Binding var password: Binding var signInAction: Command var isLoaderPresented: Binding var dialogStatus: Binding - var router: Router = .init() + var router: R = .init() + + public init( + username: Binding, + password: Binding, + signInAction: @escaping Command, + isLoaderPresented: Binding, + dialogStatus: Binding, + router: R = .init() + ) { + self.username = username + self.password = password + self.signInAction = signInAction + self.isLoaderPresented = isLoaderPresented + self.dialogStatus = dialogStatus + self.router = router + } } - var props: Props + public var props: Props @FocusState private var focusedField: Field? @Environment(\.globalRouter) private var globalRouter + + public init(props: Props) { + self.props = props + } - var body: some View { + public var body: some View { AuthView(title: Localization.authSignUpTitle()) { VStack { AuthTextField( @@ -61,7 +82,7 @@ struct SignInComponent: Component { .foregroundStyle(.flMainPink) .frame(maxWidth: .infinity, alignment: .trailing) .embedInPlainButton { - globalRouter.navigate(for: SignInRouting.self, to: .resetPassword) + globalRouter.navigate(for: R.self, to: .resetPassword) } .padding(.top) @@ -78,7 +99,7 @@ struct SignInComponent: Component { Text(Localization.authSignUpButtonTitle()) .foregroundStyle(.flMainPink) .embedInPlainButton { - globalRouter.navigate(for: SignInRouting.self, to: .signUp) + globalRouter.navigate(for: R.self, to: .signUp) } } .customFont(.subheadline) @@ -91,7 +112,7 @@ struct SignInComponent: Component { focusedField = .none } .hideKeyboardByTap() - .navigationDestination(for: SignInRouting.self) + .navigationDestination(for: R.self) .embedInNavigationStack() .dialog(status: props.dialogStatus) .loaderSheet(isPresented: props.isLoaderPresented) @@ -126,7 +147,8 @@ private extension SignInComponent { password: .constant(""), signInAction: {}, isLoaderPresented: .constant(false), - dialogStatus: .constant(.dismissed) + dialogStatus: .constant(.dismissed), + router: MockRouter() ) ) } diff --git a/Flick/Code/Modules/TabBar/View/TabBarComponent.swift b/UI/TabBarComponent/Sources/TabBarComponent.swift similarity index 82% rename from Flick/Code/Modules/TabBar/View/TabBarComponent.swift rename to UI/TabBarComponent/Sources/TabBarComponent.swift index cc67a80..a75a6a5 100644 --- a/Flick/Code/Modules/TabBar/View/TabBarComponent.swift +++ b/UI/TabBarComponent/Sources/TabBarComponent.swift @@ -10,16 +10,26 @@ import DesignSystem import SwiftUI import SwiftUI_Kit import UDF +import Common -struct TabBarComponent: Component { - struct Props { +public struct TabBarComponent: Component { + public struct Props { var selectedTab: Binding var isHidden: Binding + + public init(selectedTab: Binding, isHidden: Binding) { + self.selectedTab = selectedTab + self.isHidden = isHidden + } } - var props: Props + public var props: Props + + public init(props: Props) { + self.props = props + } - var body: some View { + public var body: some View { HStack(spacing: 0) { ForEach(TabBarItem.allCases, id: \.self) { tab in let presenter = TabBarItemPresenter( diff --git a/UI/TabBarComponent/Sources/TabBarItemPresenter.swift b/UI/TabBarComponent/Sources/TabBarItemPresenter.swift new file mode 100644 index 0000000..9d09b4e --- /dev/null +++ b/UI/TabBarComponent/Sources/TabBarItemPresenter.swift @@ -0,0 +1,39 @@ +// +// TabBarItemPresenter.swift +// Flick +// +// Created by Valentin Petrulia on 27.02.2025. +// Copyright © 2025 urlaunched.com. All rights reserved. +// + +import SwiftUI +import Common + +public struct TabBarItemPresenter { + private let tabBarItem: TabBarItem + private let isSelected: Bool + + public init(item: TabBarItem, isSelected: Bool) { + tabBarItem = item + self.isSelected = isSelected + } + + public var image: Image { + switch tabBarItem { + case .home: + isSelected ? .videoPlayFill : .videoPlay + case .search: + isSelected ? .searchFill : .search + case .randomizer: + .flick + case .favorites: + isSelected ? .heartFill : .heart + case .profile: + isSelected ? .userSquareFill : .userSquare + } + } + + public var foregroundColor: Color { + isSelected ? .flMainPink : .flPink60 + } +} diff --git a/Flick/Code/Common/CustomViews/DropdownSelector.swift b/UI/WhereToWatchComponent/Sources/DropdownSelector.swift similarity index 93% rename from Flick/Code/Common/CustomViews/DropdownSelector.swift rename to UI/WhereToWatchComponent/Sources/DropdownSelector.swift index 7da5ca3..0a8b266 100644 --- a/Flick/Code/Common/CustomViews/DropdownSelector.swift +++ b/UI/WhereToWatchComponent/Sources/DropdownSelector.swift @@ -2,17 +2,13 @@ // DropdownSelector.swift // Flick // -// Created by Arthur Zavolovych on 16.05.2023. -// Copyright © 2023 urlaunched.com. All rights reserved. +// Created by Bogdan Petkanych on 13.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. // -import Localizations import SwiftUI - -struct DropdownItem { - var title: String - var image: UIImage -} +import Localizations +import Common struct DropdownSelector: View { var placeholder: String @@ -20,7 +16,7 @@ struct DropdownSelector: View { @Binding var isSelecting: Bool @Binding var selectedItem: DropdownItem? - + var body: some View { VStack { HStack(spacing: 6) { @@ -106,7 +102,7 @@ private extension DropdownSelector { #Preview { DropdownSelector( - placeholder: Localization.whereToWatchSelectCountryTitle(), + placeholder: "", options: Array(repeating: .init(title: "Option", image: UIImage(systemName: "flag.fill")!), count: 4), isSelecting: .constant(false), selectedItem: .constant(.init(title: "Selected country", image: UIImage(systemName: "flag.fill")!)) diff --git a/Flick/Code/Modules/WhereToWatch/View/WhereToWatchComponent.swift b/UI/WhereToWatchComponent/Sources/WhereToWatchComponent.swift similarity index 81% rename from Flick/Code/Modules/WhereToWatch/View/WhereToWatchComponent.swift rename to UI/WhereToWatchComponent/Sources/WhereToWatchComponent.swift index 98ffddc..9e35131 100644 --- a/Flick/Code/Modules/WhereToWatch/View/WhereToWatchComponent.swift +++ b/UI/WhereToWatchComponent/Sources/WhereToWatchComponent.swift @@ -6,31 +6,47 @@ // Copyright © 2023 urlaunched.com. All rights reserved. // -import FlagKit import Localizations import SwiftUI import UDF +import Models +import Common +import FlagKit -struct WhereToWatchComponent: Component { - struct Props { +public struct WhereToWatchComponent: Component { + public struct Props { var item: any Item var countries: [DropdownItem] var providers: [Provider] + var destinationBuilder: DestinationBuilder = .init() + + public init( + item: any Item, + countries: [DropdownItem], + providers: [Provider], + destinationBuilder: DestinationBuilder = .init() + ) { + self.item = item + self.countries = countries + self.providers = providers + self.destinationBuilder = destinationBuilder + } + } + + public init(props: Props) { + self.props = props } - var props: Props + public var props: Props @State private var isSelecting: Bool = false @State private var selectedCountry: DropdownItem? - var body: some View { + public var body: some View { ScrollView(showsIndicators: false) { VStack { HStack(spacing: 19) { - ImageContainer( - size: .init(width: 97, height: 132), - path: props.item.posterPath - ) + props.destinationBuilder.view(for: .imageContainer(path: props.item.posterPath, size: .init(width: 97, height: 132))) .frame(width: 97, height: 132) .clipShape(RoundedRectangle(cornerRadius: 18)) Text(props.item.title) @@ -108,11 +124,7 @@ private extension WhereToWatchComponent { } func providerItem(_ item: ProviderItem) -> some View { - ImageContainer( - size: .init(width: 70, height: 70), - path: item.logoPath, - type: .profile - ) + props.destinationBuilder.view(for: .imageContainer(path: item.logoPath, size: .init(width: 70, height: 70), type: .profile)) .frame(width: 70, height: 70) .clipShape(RoundedRectangle(cornerRadius: 14.0)) } diff --git a/UI/WhereToWatchComponent/Sources/WhereToWatchContent.swift b/UI/WhereToWatchComponent/Sources/WhereToWatchContent.swift new file mode 100644 index 0000000..427615d --- /dev/null +++ b/UI/WhereToWatchComponent/Sources/WhereToWatchContent.swift @@ -0,0 +1,16 @@ +// +// WhereToWatchContent.swift +// Flick +// +// Created by Bogdan Petkanych on 14.05.2026. +// Copyright © 2026 urlaunched. All rights reserved. +// + + +import UDF +import UIKit +import Common + +public enum WhereToWatchContent: Hashable { + case imageContainer(path: String?, size: CGSize, type: ImageType = .poster) +} diff --git a/graph.png b/graph.png new file mode 100644 index 0000000..2aee34d Binary files /dev/null and b/graph.png differ diff --git a/xcconfigs/Flick-Project.xcconfig b/xcconfigs/Flick-Project.xcconfig new file mode 100644 index 0000000..0c7ed77 --- /dev/null +++ b/xcconfigs/Flick-Project.xcconfig @@ -0,0 +1,60 @@ +ALWAYS_SEARCH_USER_PATHS=NO +CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED=YES +CLANG_ANALYZER_NONNULL=YES +CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION=YES_AGGRESSIVE +CLANG_CXX_LANGUAGE_STANDARD=gnu++20 +CLANG_ENABLE_MODULES=YES +CLANG_ENABLE_OBJC_ARC=YES +CLANG_ENABLE_OBJC_WEAK=YES +CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING=YES +CLANG_WARN_BOOL_CONVERSION=YES +CLANG_WARN_COMMA=YES +CLANG_WARN_CONSTANT_CONVERSION=YES +CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS=YES +CLANG_WARN_DIRECT_OBJC_ISA_USAGE=YES_ERROR +CLANG_WARN_DOCUMENTATION_COMMENTS=YES +CLANG_WARN_EMPTY_BODY=YES +CLANG_WARN_ENUM_CONVERSION=YES +CLANG_WARN_INFINITE_RECURSION=YES +CLANG_WARN_INT_CONVERSION=YES +CLANG_WARN_NON_LITERAL_NULL_CONVERSION=YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF=YES +CLANG_WARN_OBJC_LITERAL_CONVERSION=YES +CLANG_WARN_OBJC_ROOT_CLASS=YES_ERROR +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER=YES +CLANG_WARN_RANGE_LOOP_ANALYSIS=YES +CLANG_WARN_STRICT_PROTOTYPES=YES +CLANG_WARN_SUSPICIOUS_MOVE=YES +CLANG_WARN_UNGUARDED_AVAILABILITY=YES_AGGRESSIVE +CLANG_WARN_UNREACHABLE_CODE=YES +CLANG_WARN__DUPLICATE_METHOD_MATCH=YES +COPY_PHASE_STRIP=NO +ENABLE_STRICT_OBJC_MSGSEND=YES +ENABLE_TESTING_SEARCH_PATHS=YES +GCC_C_LANGUAGE_STANDARD=gnu11 +GCC_NO_COMMON_BLOCKS=YES +GCC_WARN_64_TO_32_BIT_CONVERSION=YES +GCC_WARN_ABOUT_RETURN_TYPE=YES_ERROR +GCC_WARN_UNDECLARED_SELECTOR=YES +GCC_WARN_UNINITIALIZED_AUTOS=YES_AGGRESSIVE +GCC_WARN_UNUSED_FUNCTION=YES +GCC_WARN_UNUSED_VARIABLE=YES +IPHONEOS_DEPLOYMENT_TARGET=16.1 +MTL_FAST_MATH=YES +SDKROOT=iphoneos + +DEBUG_INFORMATION_FORMAT[config=Debug]=dwarf +DEBUG_INFORMATION_FORMAT[config=Release]=dwarf-with-dsym +ENABLE_NS_ASSERTIONS[config=Release]=NO +ENABLE_TESTABILITY[config=Debug]=YES +GCC_DYNAMIC_NO_PIC[config=Debug]=NO +GCC_OPTIMIZATION_LEVEL[config=Debug]=0 +GCC_PREPROCESSOR_DEFINITIONS[config=Debug]=DEBUG=1 $(inherited) +MTL_ENABLE_DEBUG_INFO[config=Debug]=INCLUDE_SOURCE +MTL_ENABLE_DEBUG_INFO[config=Release]=NO +ONLY_ACTIVE_ARCH[config=Debug]=YES +SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]=DEBUG +SWIFT_COMPILATION_MODE[config=Release]=wholemodule +SWIFT_OPTIMIZATION_LEVEL[config=Debug]=-Onone +SWIFT_OPTIMIZATION_LEVEL[config=Release]=-O +VALIDATE_PRODUCT[config=Release]=YES \ No newline at end of file diff --git a/xcconfigs/Flick.xcconfig b/xcconfigs/Flick.xcconfig new file mode 100644 index 0000000..0de169a --- /dev/null +++ b/xcconfigs/Flick.xcconfig @@ -0,0 +1,27 @@ +ASSETCATALOG_COMPILER_APPICON_NAME=AppIcon +ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME=AccentColor +CODE_SIGN_STYLE=Automatic +CURRENT_PROJECT_VERSION=1 +DEVELOPMENT_ASSET_PATHS="Flick/Resources/Preview Content" +DEVELOPMENT_TEAM=XK5AEQZHJU +ENABLE_PREVIEWS=YES +GENERATE_INFOPLIST_FILE=YES +INFOPLIST_FILE=Flick/Info.plist +INFOPLIST_KEY_LSApplicationCategoryType=public.app-category.entertainment +INFOPLIST_KEY_UIApplicationSceneManifest_Generation=YES +INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents=YES +INFOPLIST_KEY_UISupportedInterfaceOrientations=UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown +INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad=UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown +IPHONEOS_DEPLOYMENT_TARGET=17.0 +MARKETING_VERSION=1.0 +PRODUCT_BUNDLE_IDENTIFIER=com.urlaunched.flick +PRODUCT_NAME=$(TARGET_NAME) +SUPPORTED_PLATFORMS=iphoneos iphonesimulator +SUPPORTS_MACCATALYST=NO +SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD=YES +SWIFT_EMIT_LOC_STRINGS=YES +SWIFT_VERSION=5.0 +TARGETED_DEVICE_FAMILY=1 + +LD_RUNPATH_SEARCH_PATHS[config=Debug]=$(inherited) @executable_path/Frameworks +LD_RUNPATH_SEARCH_PATHS[config=Release]=$(inherited) @executable_path/Frameworks diff --git a/xcconfigs/SnapshotTests.xcconfig b/xcconfigs/SnapshotTests.xcconfig new file mode 100644 index 0000000..f09a6a2 --- /dev/null +++ b/xcconfigs/SnapshotTests.xcconfig @@ -0,0 +1,16 @@ +BUNDLE_LOADER=$(TEST_HOST) +CODE_SIGN_STYLE=Automatic +CURRENT_PROJECT_VERSION=1 +DEVELOPMENT_TEAM=XK5AEQZHJU +GENERATE_INFOPLIST_FILE=YES +IPHONEOS_DEPLOYMENT_TARGET=17.0 +MARKETING_VERSION=1.0 +PRODUCT_NAME=$(TARGET_NAME) +SUPPORTED_PLATFORMS=iphoneos iphonesimulator +SUPPORTS_MACCATALYST=NO +SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD=NO +SWIFT_EMIT_LOC_STRINGS=NO +SWIFT_VERSION=5.0 +TARGETED_DEVICE_FAMILY=1 +ENABLE_TESTING_SEARCH_PATHS=YES +