From 8e3cf9a4a8b390e8020db3682ec4dea86977ea90 Mon Sep 17 00:00:00 2001 From: Ashley Date: Mon, 6 Jul 2026 15:51:53 -0400 Subject: [PATCH 1/7] wip avatar --- .../Thunderbird.xcodeproj/project.pbxproj | 2 + Thunderbird/Thunderbird/Util/AvatarView.swift | 48 +++++++++++++++++++ .../Thunderbird/Util/UtilFunctions.swift | 21 ++++++++ .../UtilTests/UtilFunctionTests.swift | 25 ++++++++++ 4 files changed, 96 insertions(+) create mode 100644 Thunderbird/Thunderbird/Util/AvatarView.swift create mode 100644 Thunderbird/Thunderbird/Util/UtilFunctions.swift create mode 100644 Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift diff --git a/Thunderbird/Thunderbird.xcodeproj/project.pbxproj b/Thunderbird/Thunderbird.xcodeproj/project.pbxproj index 0dfa94b1..c75930be 100644 --- a/Thunderbird/Thunderbird.xcodeproj/project.pbxproj +++ b/Thunderbird/Thunderbird.xcodeproj/project.pbxproj @@ -32,7 +32,9 @@ membershipExceptions = ( FeatureFlags/Distribution.swift, FeatureFlags/FeatureFlags.swift, + Util/AvatarView.swift, Util/SmartDateFormatter.swift, + Util/UtilFunctions.swift, ); target = 1521D8232D9C4D6300C4DFDF /* ThunderbirdTests */; }; diff --git a/Thunderbird/Thunderbird/Util/AvatarView.swift b/Thunderbird/Thunderbird/Util/AvatarView.swift new file mode 100644 index 00000000..681cd943 --- /dev/null +++ b/Thunderbird/Thunderbird/Util/AvatarView.swift @@ -0,0 +1,48 @@ +// AvatarView.swift +// Thunderbird +// +// Created by Ashley Soucar on 6/30/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + +import SwiftUI +import EmailAddress + +struct AvatarView: View { + private var avatarText: String = "" + private var bubbleColor: Color = .clear + + init(displayName: String = "", emailAddress: EmailAddress, bubbleColor: Color) { + if !displayName.isEmpty { + avatarText = createAvatarText(displayName: displayName) + } else { + avatarText = String(emailAddress.value.first!) + } + self.bubbleColor = bubbleColor + } + + var body: some View { + Text(avatarText) + .font(.body) + .overlay { + Circle() + .stroke( + bubbleColor, + style: StrokeStyle( + lineWidth: 1 + ) + ) + .fill(bubbleColor.opacity(0.15)) + .padding(3) + .frame(width: 40, height: 40) + + } + } +} + +#Preview { + AvatarView(displayName: "blakls ddfas", emailAddress: EmailAddress("blah@blah.com"), bubbleColor: .yellow) +} diff --git a/Thunderbird/Thunderbird/Util/UtilFunctions.swift b/Thunderbird/Thunderbird/Util/UtilFunctions.swift new file mode 100644 index 00000000..e788b148 --- /dev/null +++ b/Thunderbird/Thunderbird/Util/UtilFunctions.swift @@ -0,0 +1,21 @@ +// UtilFunctions.swift +// Thunderbird +// +// Created by Ashley Soucar on 7/6/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + +import Foundation + +func createAvatarText(displayName: String) -> String { + let splitName = displayName.split(separator: " ") + if splitName.count >= 2 { + let letter = "\(splitName[0].capitalized.first!)\(splitName[1].capitalized.first!)" + return letter + } else { + return String(splitName[0].capitalized.first!) + } +} diff --git a/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift b/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift new file mode 100644 index 00000000..a448325c --- /dev/null +++ b/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift @@ -0,0 +1,25 @@ +// UtilFunctionTests.swift +// Thunderbird +// +// Created by Ashley Soucar on 7/6/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + +import Testing + +struct UtilFunctionTests { + + @Test func displayName_firstLastNames() async throws { + #expect(createAvatarText(displayName: "Denny Klein") == "DK") + } + @Test func displayName_oneName() async throws { + #expect(createAvatarText(displayName: "DennyKlein") == "D") + } + @Test func displayName_moreThanTwoNames() async throws { + #expect(createAvatarText(displayName: "Denny Klein Two") == "DK") + } + +} From 7c2865c71eab9f5a6d96e0f547654b4a0f2285a5 Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 9 Jul 2026 13:51:37 -0400 Subject: [PATCH 2/7] v1 avatar and v1 account folder --- .../Account/UnifiedMailboxManager.swift | 20 +++++++ .../AccountFolderDisclosureView.swift | 54 +++++++++++++++---- .../Thunderbird/AccountList/DrawerView.swift | 4 +- Thunderbird/Thunderbird/App.swift | 3 +- .../Assets.xcassets/UserColors/Contents.json | 6 +++ .../user-blue.colorset/Contents.json | 29 ++++++++++ .../user-green.colorset/Contents.json | 29 ++++++++++ .../user-orange.colorset/Contents.json | 29 ++++++++++ .../user-pink.colorset/Contents.json | 29 ++++++++++ .../user-purple.colorset/Contents.json | 29 ++++++++++ .../user-red.colorset/Contents.json | 29 ++++++++++ .../user-yellow.colorset/Contents.json | 29 ++++++++++ Thunderbird/Thunderbird/Util/AvatarView.swift | 8 ++- .../Thunderbird/Util/UtilFunctions.swift | 6 +++ 14 files changed, 289 insertions(+), 15 deletions(-) create mode 100644 Core/Sources/Account/UnifiedMailboxManager.swift create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-blue.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-green.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-orange.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-pink.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-purple.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-red.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-yellow.colorset/Contents.json diff --git a/Core/Sources/Account/UnifiedMailboxManager.swift b/Core/Sources/Account/UnifiedMailboxManager.swift new file mode 100644 index 00000000..35398a27 --- /dev/null +++ b/Core/Sources/Account/UnifiedMailboxManager.swift @@ -0,0 +1,20 @@ +// UnifiedMailboxManager.swift +// Core +// +// Created by Ashley Soucar on 7/9/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + +import Foundation + +/// Manage each ``MailboxManager`` for every ``Account``. +@Observable +public final class UnifiedMailboxManager { + public var mailboxManagers: [MailboxManager] = [] + + public init() { + } +} diff --git a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift index 6fd3b875..63e4e64a 100644 --- a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift +++ b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift @@ -9,21 +9,53 @@ import SwiftUI import Account struct AccountFolderDisclosureView: View { - var account: Account + @Environment(MailboxManager.self) private var mailboxManager: MailboxManager + @State var isExpanded: Bool = false var body: some View { - DisclosureGroup { - HStack { - Text("Inbox") - Spacer() + DisclosureGroup(isExpanded: $isExpanded) { + ForEach(mailboxManager.mailboxes) { mailbox in + HStack { + Text(mailbox.name) + Spacer() + } } + .padding(.horizontal) } label: { - Label { - Text(account.name) - } icon: { - Image(systemName: "folder") - .foregroundStyle(Color.random) + HStack { + AvatarView(emailAddress: EmailAddress(mailboxManager.account.name), bubbleColor: .accent) + VStack(alignment: .leading) { + Text(mailboxManager.account.name) + .font(.body) + Text(mailboxManager.account.name) + .font(.caption2) + }.padding(.horizontal) + .foregroundStyle(.black) + Spacer() + if (!isExpanded) { + Text("3") + .font(.caption2) + .padding(.horizontal, 6) + .foregroundColor(.accent) + .overlay { + RoundedRectangle(cornerRadius: 18) + .stroke( + .accent, + style: StrokeStyle( + lineWidth: 1 + ) + ) + .frame(width: 20, height: 17) + + } + } } - } + + }.safeAreaPadding(.leading) } } + +#Preview { + @Previewable @State var mailboxes: MailboxManager = MailboxManager(account: Account("temp@email.com")) + AccountFolderDisclosureView() +} diff --git a/Thunderbird/Thunderbird/AccountList/DrawerView.swift b/Thunderbird/Thunderbird/AccountList/DrawerView.swift index e8500cd4..35e61b80 100644 --- a/Thunderbird/Thunderbird/AccountList/DrawerView.swift +++ b/Thunderbird/Thunderbird/AccountList/DrawerView.swift @@ -13,6 +13,7 @@ import SwiftUI struct DrawerView: View { @Environment(Accounts.self) private var accounts: Accounts + // @Environment(MailboxManager.self) private var mailboxs: MailboxManager @Binding var showDrawer: Bool // MARK: View @@ -69,7 +70,8 @@ struct DrawerContent: View { Divider() Text("Account Folders") ForEach(accounts.allAccounts) { account in - AccountFolderDisclosureView(account: account) + var mailboxes: MailboxManager = MailboxManager(account: account) + AccountFolderDisclosureView().environment(mailboxes) } } diff --git a/Thunderbird/Thunderbird/App.swift b/Thunderbird/Thunderbird/App.swift index fe021932..840d5ac6 100644 --- a/Thunderbird/Thunderbird/App.swift +++ b/Thunderbird/Thunderbird/App.swift @@ -8,6 +8,7 @@ import SwiftUI @main struct App: SwiftUI.App { @State private var accounts: Accounts = Accounts() + @State private var mailboxManagers: UnifiedMailboxManager = UnifiedMailboxManager() @State private var showAlert = false @State private var featureFlags: FeatureFlags = FeatureFlags(distribution: .current) @@ -16,7 +17,7 @@ struct App: SwiftUI.App { WindowGroup { ZStack { ContentView() - .environment(accounts).environment(featureFlags) + .environment(accounts).environment(featureFlags).environment(mailboxManagers) if showAlert { FeatureNotImplementedView() } diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-blue.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-blue.colorset/Contents.json new file mode 100644 index 00000000..99ca25ba --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-blue.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0x84", + "red" : "0x0A" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-green.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-green.colorset/Contents.json new file mode 100644 index 00000000..1c8a48c2 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-green.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x59", + "green" : "0xC7", + "red" : "0x34" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-orange.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-orange.colorset/Contents.json new file mode 100644 index 00000000..c8dad193 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-orange.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0x8C", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-pink.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-pink.colorset/Contents.json new file mode 100644 index 00000000..76f8b0a8 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-pink.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x63", + "green" : "0x1E", + "red" : "0xE9" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-purple.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-purple.colorset/Contents.json new file mode 100644 index 00000000..536103bf --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-purple.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xCC", + "green" : "0x53", + "red" : "0x77" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-red.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-red.colorset/Contents.json new file mode 100644 index 00000000..821185b3 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-red.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x35", + "green" : "0x39", + "red" : "0xE5" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-yellow.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-yellow.colorset/Contents.json new file mode 100644 index 00000000..7c38dd6c --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/UserColors/user-yellow.colorset/Contents.json @@ -0,0 +1,29 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x30", + "green" : "0xC4", + "red" : "0xF4" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Util/AvatarView.swift b/Thunderbird/Thunderbird/Util/AvatarView.swift index 681cd943..968f9d31 100644 --- a/Thunderbird/Thunderbird/Util/AvatarView.swift +++ b/Thunderbird/Thunderbird/Util/AvatarView.swift @@ -19,7 +19,7 @@ struct AvatarView: View { if !displayName.isEmpty { avatarText = createAvatarText(displayName: displayName) } else { - avatarText = String(emailAddress.value.first!) + avatarText = String(emailAddress.value.first!).capitalized } self.bubbleColor = bubbleColor } @@ -44,5 +44,9 @@ struct AvatarView: View { } #Preview { - AvatarView(displayName: "blakls ddfas", emailAddress: EmailAddress("blah@blah.com"), bubbleColor: .yellow) + AvatarView( + displayName: "blakls ddfas", + emailAddress: EmailAddress("blah@blah.com"), + bubbleColor: randomizeAvatarColor() + ) } diff --git a/Thunderbird/Thunderbird/Util/UtilFunctions.swift b/Thunderbird/Thunderbird/Util/UtilFunctions.swift index e788b148..ecd1d511 100644 --- a/Thunderbird/Thunderbird/Util/UtilFunctions.swift +++ b/Thunderbird/Thunderbird/Util/UtilFunctions.swift @@ -9,6 +9,7 @@ // import Foundation +import SwiftUI func createAvatarText(displayName: String) -> String { let splitName = displayName.split(separator: " ") @@ -19,3 +20,8 @@ func createAvatarText(displayName: String) -> String { return String(splitName[0].capitalized.first!) } } + +func randomizeAvatarColor() -> Color { + let userColors: [Color] = [.userRed, .userOrange, .userYellow, .userGreen, .userBlue, .userPink, .userPurple] + return userColors.randomElement()! +} From bcc366cb721c125f1ffad9dfcf8726d5f3160f75 Mon Sep 17 00:00:00 2001 From: Ashley Date: Wed, 15 Jul 2026 15:24:38 -0400 Subject: [PATCH 3/7] Account Drawer WIP icons and folders --- .../AccountAuth/AccountInformation.swift | 0 .../EmailAccountTypeSelection.swift | 0 .../AccountAuth/ManualAccount.swift | 0 .../AccountAuth/ManualServerSetup.swift | 0 .../AccountFolderDisclosureView.swift | 41 +- .../Thunderbird/AccountList/DrawerView.swift | 23 +- .../AccountList/FolderIconShapes.swift | 837 ++++++++++++++++++ .../AccountList/MailboxDropdownRowView.swift | 101 ++- .../surface.colorset/Contents.json | 38 + .../Localization/en.lproj/Localizable.strings | 8 + .../Thunderbird/Util/UnreadCounter.swift | 37 + 11 files changed, 1015 insertions(+), 70 deletions(-) rename Thunderbird/Thunderbird/{ => Account}/AccountAuth/AccountInformation.swift (100%) rename Thunderbird/Thunderbird/{ => Account}/AccountAuth/EmailAccountTypeSelection.swift (100%) rename Thunderbird/Thunderbird/{ => Account}/AccountAuth/ManualAccount.swift (100%) rename Thunderbird/Thunderbird/{ => Account}/AccountAuth/ManualServerSetup.swift (100%) create mode 100644 Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift create mode 100644 Thunderbird/Thunderbird/Assets.xcassets/surface.colorset/Contents.json create mode 100644 Thunderbird/Thunderbird/Util/UnreadCounter.swift diff --git a/Thunderbird/Thunderbird/AccountAuth/AccountInformation.swift b/Thunderbird/Thunderbird/Account/AccountAuth/AccountInformation.swift similarity index 100% rename from Thunderbird/Thunderbird/AccountAuth/AccountInformation.swift rename to Thunderbird/Thunderbird/Account/AccountAuth/AccountInformation.swift diff --git a/Thunderbird/Thunderbird/AccountAuth/EmailAccountTypeSelection.swift b/Thunderbird/Thunderbird/Account/AccountAuth/EmailAccountTypeSelection.swift similarity index 100% rename from Thunderbird/Thunderbird/AccountAuth/EmailAccountTypeSelection.swift rename to Thunderbird/Thunderbird/Account/AccountAuth/EmailAccountTypeSelection.swift diff --git a/Thunderbird/Thunderbird/AccountAuth/ManualAccount.swift b/Thunderbird/Thunderbird/Account/AccountAuth/ManualAccount.swift similarity index 100% rename from Thunderbird/Thunderbird/AccountAuth/ManualAccount.swift rename to Thunderbird/Thunderbird/Account/AccountAuth/ManualAccount.swift diff --git a/Thunderbird/Thunderbird/AccountAuth/ManualServerSetup.swift b/Thunderbird/Thunderbird/Account/AccountAuth/ManualServerSetup.swift similarity index 100% rename from Thunderbird/Thunderbird/AccountAuth/ManualServerSetup.swift rename to Thunderbird/Thunderbird/Account/AccountAuth/ManualServerSetup.swift diff --git a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift index 63e4e64a..2cb92030 100644 --- a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift +++ b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift @@ -11,16 +11,16 @@ import Account struct AccountFolderDisclosureView: View { @Environment(MailboxManager.self) private var mailboxManager: MailboxManager @State var isExpanded: Bool = false + @State var unreadCount: Int = 0 var body: some View { DisclosureGroup(isExpanded: $isExpanded) { ForEach(mailboxManager.mailboxes) { mailbox in HStack { - Text(mailbox.name) - Spacer() + MailboxDropdownRowView(mailbox: mailbox) } } - - .padding(.horizontal) + .padding(.vertical, 10) + .safeAreaPadding(.horizontal) } label: { HStack { AvatarView(emailAddress: EmailAddress(mailboxManager.account.name), bubbleColor: .accent) @@ -32,30 +32,25 @@ struct AccountFolderDisclosureView: View { }.padding(.horizontal) .foregroundStyle(.black) Spacer() - if (!isExpanded) { - Text("3") - .font(.caption2) - .padding(.horizontal, 6) - .foregroundColor(.accent) - .overlay { - RoundedRectangle(cornerRadius: 18) - .stroke( - .accent, - style: StrokeStyle( - lineWidth: 1 - ) - ) - .frame(width: 20, height: 17) - - } + if (!isExpanded && unreadCount > 0) { + UnreadCounter(unreadCount: unreadCount, hasNew: false) } + }.padding(.vertical, 10) + .safeAreaPadding(.horizontal) + }.task { + for mailbox in mailboxManager.mailboxes { + unreadCount += mailbox.unreadEmails! } - - }.safeAreaPadding(.leading) + } + .background { + RoundedRectangle(cornerRadius: 24) + .foregroundStyle(.white) + .frame(height: 56) + } } } #Preview { @Previewable @State var mailboxes: MailboxManager = MailboxManager(account: Account("temp@email.com")) - AccountFolderDisclosureView() + AccountFolderDisclosureView().environment(mailboxes) } diff --git a/Thunderbird/Thunderbird/AccountList/DrawerView.swift b/Thunderbird/Thunderbird/AccountList/DrawerView.swift index 35e61b80..d142cec4 100644 --- a/Thunderbird/Thunderbird/AccountList/DrawerView.swift +++ b/Thunderbird/Thunderbird/AccountList/DrawerView.swift @@ -13,7 +13,6 @@ import SwiftUI struct DrawerView: View { @Environment(Accounts.self) private var accounts: Accounts - // @Environment(MailboxManager.self) private var mailboxs: MailboxManager @Binding var showDrawer: Bool // MARK: View @@ -42,7 +41,7 @@ struct DrawerView: View { } } .padding() - .background() + .background(.surface) Spacer() } .transition(.move(edge: .leading)) @@ -59,33 +58,15 @@ struct DrawerView: View { DrawerView(showDrawer: $showDrawer).environment(accounts) } -//TODO: Connect to actual account and folder structure struct DrawerContent: View { @Environment(Accounts.self) private var accounts: Accounts @Binding var showDrawer: Bool var body: some View { VStack(alignment: .leading) { - MailboxDropdownRowView(mailboxName: "Inbox", iconName: "tray") - MailboxDropdownRowView(mailboxName: "Sent", iconName: "paperplane") - Divider() - Text("Account Folders") ForEach(accounts.allAccounts) { account in - var mailboxes: MailboxManager = MailboxManager(account: account) + let mailboxes: MailboxManager = MailboxManager(account: account) AccountFolderDisclosureView().environment(mailboxes) } - } } } - -//TODO: Remove when account color association happens -//we will associate a color with an account but don't yet -extension Color { - static var random: Color { - return Color( - red: .random(in: 0...1), - green: .random(in: 0...1), - blue: .random(in: 0...1) - ) - } -} diff --git a/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift b/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift new file mode 100644 index 00000000..f85e4ae1 --- /dev/null +++ b/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift @@ -0,0 +1,837 @@ +// FolderIconShapes.swift +// Thunderbird +// +// Created by Ashley Soucar on 7/15/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + + +import SwiftUI + +struct FolderIconShapes { + public let inboxPath = InboxIcon() + public let draftPath = DraftIcon() + public let sentPath = SentIcon() + public let archivePath = ArchiveIcon() + public let spamPath = SpamIcon() + public let trashPath = TrashIcon() + public let folderPath = FolderIcon() + public let inboxPathTinted = InboxIcon(tinted: true) + public let draftPathTinted = DraftIcon(tinted: true) + public let sentPathTinted = SentIcon(tinted: true) + public let archivePathTinted = ArchiveIcon(tinted: true) + public let spamPathTinted = SpamIcon(tinted: true) + public let trashPathTinted = TrashIcon(tinted: true) + public let folderPathTinted = FolderIcon(tinted: true) + +} + +struct InboxIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.75*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.25*height), control1: CGPoint(x: 0.84196*width, y: 0.08333*height), control2: CGPoint(x: 0.91667*width, y: 0.15804*height)) + path.addLine(to: CGPoint(x: 0.91667*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.91667*height), control1: CGPoint(x: 0.91667*width, y: 0.84196*height), control2: CGPoint(x: 0.84196*width, y: 0.91667*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.91667*height)) + path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.75*height), control1: CGPoint(x: 0.15804*width, y: 0.91667*height), control2: CGPoint(x: 0.08333*width, y: 0.84196*height)) + path.addLine(to: CGPoint(x: 0.08333*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.08333*width, y: 0.15804*height), control2: CGPoint(x: 0.15804*width, y: 0.08333*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.addQuadCurve(to: CGPoint(x: 0.22462*width, y: 0.1275*height), control: CGPoint(x: 0.23692*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.12754*width, y: 0.22458*height), control1: CGPoint(x: 0.17563*width, y: 0.1373*height), control2: CGPoint(x: 0.13734*width, y: 0.17559*height)) + path.addLine(to: CGPoint(x: 0.12754*width, y: 0.22479*height)) + path.addQuadCurve(to: CGPoint(x: 0.12567*width, y: 0.23713*height), control: CGPoint(x: 0.12629*width, y: 0.23083*height)) + path.addLine(to: CGPoint(x: 0.12567*width, y: 0.23721*height)) + path.addCurve(to: CGPoint(x: 0.125*width, y: 0.25*height), control1: CGPoint(x: 0.12523*width, y: 0.24146*height), control2: CGPoint(x: 0.125*width, y: 0.24573*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.34463*height), control1: CGPoint(x: 0.16667*width, y: 0.386*height), control2: CGPoint(x: 0.1835*width, y: 0.35917*height)) + path.addLine(to: CGPoint(x: 0.20833*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.20833*height), control1: CGPoint(x: 0.20833*width, y: 0.24583*height), control2: CGPoint(x: 0.24583*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.70833*width, y: 0.20833*height)) + path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.29167*height), control1: CGPoint(x: 0.75417*width, y: 0.20833*height), control2: CGPoint(x: 0.79167*width, y: 0.24583*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.34463*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.41667*height), control1: CGPoint(x: 0.8165*width, y: 0.35912*height), control2: CGPoint(x: 0.83333*width, y: 0.386*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.25*height)) + path.addQuadCurve(to: CGPoint(x: 0.87246*width, y: 0.22462*height), control: CGPoint(x: 0.875*width, y: 0.23692*height)) + path.addCurve(to: CGPoint(x: 0.77537*width, y: 0.12754*height), control1: CGPoint(x: 0.86266*width, y: 0.17563*height), control2: CGPoint(x: 0.82437*width, y: 0.13734*height)) + path.addLine(to: CGPoint(x: 0.77521*width, y: 0.12754*height)) + path.addQuadCurve(to: CGPoint(x: 0.76287*width, y: 0.12567*height), control: CGPoint(x: 0.76917*width, y: 0.12629*height)) + path.addLine(to: CGPoint(x: 0.76279*width, y: 0.12567*height)) + path.addQuadCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control: CGPoint(x: 0.7565*width, y: 0.125*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.move(to: CGPoint(x: 0.29167*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.29167*height), control1: CGPoint(x: 0.26821*width, y: 0.25*height), control2: CGPoint(x: 0.25*width, y: 0.26821*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.25*height), control1: CGPoint(x: 0.75*width, y: 0.26821*height), control2: CGPoint(x: 0.73179*width, y: 0.25*height)) + path.addLine(to: CGPoint(x: 0.29167*width, y: 0.25*height)) + path.move(to: CGPoint(x: 0.25*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.41667*height), control1: CGPoint(x: 0.22654*width, y: 0.375*height), control2: CGPoint(x: 0.20833*width, y: 0.39321*height)) + path.addLine(to: CGPoint(x: 0.20833*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.5*height)) + path.addCurve(to: CGPoint(x: 0.375*width, y: 0.52083*height), control1: CGPoint(x: 0.36567*width, y: 0.5*height), control2: CGPoint(x: 0.375*width, y: 0.50933*height)) + path.addLine(to: CGPoint(x: 0.375*width, y: 0.54167*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.66667*height), control1: CGPoint(x: 0.375*width, y: 0.61096*height), control2: CGPoint(x: 0.43071*width, y: 0.66667*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.54167*height), control1: CGPoint(x: 0.56929*width, y: 0.66667*height), control2: CGPoint(x: 0.625*width, y: 0.61096*height)) + path.addLine(to: CGPoint(x: 0.625*width, y: 0.52083*height)) + path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.5*height), control1: CGPoint(x: 0.625*width, y: 0.50933*height), control2: CGPoint(x: 0.63433*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.375*height), control1: CGPoint(x: 0.79167*width, y: 0.39321*height), control2: CGPoint(x: 0.77346*width, y: 0.375*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.375*height)) + path.move(to: CGPoint(x: 0.125*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.12562*width, y: 0.76279*height), control1: CGPoint(x: 0.12499*width, y: 0.75427*height), control2: CGPoint(x: 0.1252*width, y: 0.75854*height)) + path.addLine(to: CGPoint(x: 0.12563*width, y: 0.76288*height)) + path.addCurve(to: CGPoint(x: 0.1275*width, y: 0.77521*height), control1: CGPoint(x: 0.12604*width, y: 0.76701*height), control2: CGPoint(x: 0.12667*width, y: 0.77113*height)) + path.addLine(to: CGPoint(x: 0.1275*width, y: 0.77542*height)) + path.addCurve(to: CGPoint(x: 0.22458*width, y: 0.8725*height), control1: CGPoint(x: 0.1373*width, y: 0.82441*height), control2: CGPoint(x: 0.17559*width, y: 0.8627*height)) + path.addLine(to: CGPoint(x: 0.22479*width, y: 0.8725*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.875*height), control1: CGPoint(x: 0.23309*width, y: 0.87418*height), control2: CGPoint(x: 0.24153*width, y: 0.87502*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.875*height)) + path.addQuadCurve(to: CGPoint(x: 0.77542*width, y: 0.8725*height), control: CGPoint(x: 0.76312*width, y: 0.875*height)) + path.addCurve(to: CGPoint(x: 0.8725*width, y: 0.77542*height), control1: CGPoint(x: 0.82441*width, y: 0.8627*height), control2: CGPoint(x: 0.8627*width, y: 0.82441*height)) + path.addQuadCurve(to: CGPoint(x: 0.875*width, y: 0.75*height), control: CGPoint(x: 0.875*width, y: 0.76313*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.54167*height)) + path.addLine(to: CGPoint(x: 0.66667*width, y: 0.54167*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.70833*height), control1: CGPoint(x: 0.66667*width, y: 0.63346*height), control2: CGPoint(x: 0.59179*width, y: 0.70833*height)) + path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.54167*height), control1: CGPoint(x: 0.40821*width, y: 0.70833*height), control2: CGPoint(x: 0.33333*width, y: 0.63346*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.54167*height)) + path.closeSubpath() + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.75*width, y: 0.10417*height)) + path.addCurve(to: CGPoint(x: 0.89583*width, y: 0.25*height), control1: CGPoint(x: 0.83079*width, y: 0.10417*height), control2: CGPoint(x: 0.89583*width, y: 0.16921*height)) + path.addLine(to: CGPoint(x: 0.89583*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.89583*height), control1: CGPoint(x: 0.89583*width, y: 0.83079*height), control2: CGPoint(x: 0.83079*width, y: 0.89583*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.89583*height)) + path.addCurve(to: CGPoint(x: 0.10417*width, y: 0.75*height), control1: CGPoint(x: 0.16921*width, y: 0.89583*height), control2: CGPoint(x: 0.10417*width, y: 0.83079*height)) + path.addLine(to: CGPoint(x: 0.10417*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.14676*width, y: 0.14676*height), control1: CGPoint(x: 0.10406*width, y: 0.21129*height), control2: CGPoint(x: 0.11938*width, y: 0.17413*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.17413*width, y: 0.11938*height), control2: CGPoint(x: 0.21129*width, y: 0.10406*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.29167*width, y: 0.22917*height)) + path.addCurve(to: CGPoint(x: 0.22917*width, y: 0.29167*height), control1: CGPoint(x: 0.25704*width, y: 0.22917*height), control2: CGPoint(x: 0.22917*width, y: 0.25704*height)) + path.addLine(to: CGPoint(x: 0.22917*width, y: 0.35775*height)) + path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.41667*height), control1: CGPoint(x: 0.20488*width, y: 0.36629*height), control2: CGPoint(x: 0.1875*width, y: 0.38938*height)) + path.addLine(to: CGPoint(x: 0.1875*width, y: 0.52083*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.52083*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.54167*height)) + path.addCurve(to: CGPoint(x: 0.39676*width, y: 0.64491*height), control1: CGPoint(x: 0.35406*width, y: 0.58038*height), control2: CGPoint(x: 0.36938*width, y: 0.61754*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.6875*height), control1: CGPoint(x: 0.42413*width, y: 0.67228*height), control2: CGPoint(x: 0.46129*width, y: 0.68761*height)) + path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.54167*height), control1: CGPoint(x: 0.58079*width, y: 0.6875*height), control2: CGPoint(x: 0.64583*width, y: 0.62246*height)) + path.addLine(to: CGPoint(x: 0.64583*width, y: 0.52083*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.52083*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.77083*width, y: 0.35775*height), control1: CGPoint(x: 0.8125*width, y: 0.38938*height), control2: CGPoint(x: 0.79512*width, y: 0.36629*height)) + path.addLine(to: CGPoint(x: 0.77083*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.22917*height), control1: CGPoint(x: 0.77083*width, y: 0.25704*height), control2: CGPoint(x: 0.74296*width, y: 0.22917*height)) + path.addLine(to: CGPoint(x: 0.29167*width, y: 0.22917*height)) + return path + } + } +} +struct DraftIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.5625*width, y: 0.0625*height)) + path.addLine(to: CGPoint(x: 0.5625*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.35417*height), control1: CGPoint(x: 0.5625*width, y: 0.32629*height), control2: CGPoint(x: 0.59037*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.85417*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.85417*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.9375*height), control1: CGPoint(x: 0.85417*width, y: 0.89104*height), control2: CGPoint(x: 0.80771*width, y: 0.9375*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.9375*height)) + path.addCurve(to: CGPoint(x: 0.14583*width, y: 0.83333*height), control1: CGPoint(x: 0.19229*width, y: 0.9375*height), control2: CGPoint(x: 0.14583*width, y: 0.89104*height)) + path.addLine(to: CGPoint(x: 0.14583*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.17628*width, y: 0.09295*height), control1: CGPoint(x: 0.14578*width, y: 0.13902*height), control2: CGPoint(x: 0.15673*width, y: 0.1125*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.0625*height), control1: CGPoint(x: 0.19583*width, y: 0.0734*height), control2: CGPoint(x: 0.22236*width, y: 0.06244*height)) + path.closeSubpath() + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.5625*width, y: 0.04167*height)) + path.addCurve(to: CGPoint(x: 0.57725*width, y: 0.04775*height), control1: CGPoint(x: 0.56803*width, y: 0.04166*height), control2: CGPoint(x: 0.57334*width, y: 0.04385*height)) + path.addLine(to: CGPoint(x: 0.86892*width, y: 0.33942*height)) + path.addCurve(to: CGPoint(x: 0.87483*width, y: 0.35417*height), control1: CGPoint(x: 0.87276*width, y: 0.34336*height), control2: CGPoint(x: 0.87489*width, y: 0.34866*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.95833*height), control1: CGPoint(x: 0.875*width, y: 0.90221*height), control2: CGPoint(x: 0.81887*width, y: 0.95833*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.95833*height)) + path.addCurve(to: CGPoint(x: 0.125*width, y: 0.83333*height), control1: CGPoint(x: 0.18112*width, y: 0.95833*height), control2: CGPoint(x: 0.125*width, y: 0.90221*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.04167*height), control1: CGPoint(x: 0.125*width, y: 0.09779*height), control2: CGPoint(x: 0.18113*width, y: 0.04167*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.25*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.16667*height), control1: CGPoint(x: 0.20346*width, y: 0.08333*height), control2: CGPoint(x: 0.16667*width, y: 0.12012*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.91667*height), control1: CGPoint(x: 0.16667*width, y: 0.87988*height), control2: CGPoint(x: 0.20346*width, y: 0.91667*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.91667*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.83333*height), control1: CGPoint(x: 0.79654*width, y: 0.91667*height), control2: CGPoint(x: 0.83333*width, y: 0.87988*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.375*height)) + path.addLine(to: CGPoint(x: 0.625*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.54167*width, y: 0.29167*height), control1: CGPoint(x: 0.57917*width, y: 0.375*height), control2: CGPoint(x: 0.54167*width, y: 0.3375*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.08333*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.08333*height)) + path.move(to: CGPoint(x: 0.58333*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.33333*height), control1: CGPoint(x: 0.58333*width, y: 0.31512*height), control2: CGPoint(x: 0.60154*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.80388*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.58333*width, y: 0.11279*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.25*height)) + path.addLine(to: CGPoint(x: 0.3125*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.22917*height), control1: CGPoint(x: 0.30099*width, y: 0.25*height), control2: CGPoint(x: 0.29167*width, y: 0.24067*height)) + path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.20833*height), control1: CGPoint(x: 0.29167*width, y: 0.21766*height), control2: CGPoint(x: 0.30099*width, y: 0.20833*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.375*height)) + path.addLine(to: CGPoint(x: 0.3125*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.35417*height), control1: CGPoint(x: 0.30099*width, y: 0.375*height), control2: CGPoint(x: 0.29167*width, y: 0.36567*height)) + path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.33333*height), control1: CGPoint(x: 0.29167*width, y: 0.34266*height), control2: CGPoint(x: 0.30099*width, y: 0.33333*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.6875*width, y: 0.45833*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.47917*height), control1: CGPoint(x: 0.69901*width, y: 0.45833*height), control2: CGPoint(x: 0.70833*width, y: 0.46766*height)) + path.addCurve(to: CGPoint(x: 0.6875*width, y: 0.5*height), control1: CGPoint(x: 0.70833*width, y: 0.49067*height), control2: CGPoint(x: 0.69901*width, y: 0.5*height)) + path.addLine(to: CGPoint(x: 0.3125*width, y: 0.5*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.47917*height), control1: CGPoint(x: 0.30099*width, y: 0.5*height), control2: CGPoint(x: 0.29167*width, y: 0.49067*height)) + path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.45833*height), control1: CGPoint(x: 0.29167*width, y: 0.46766*height), control2: CGPoint(x: 0.30099*width, y: 0.45833*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5625*width, y: 0.58333*height)) + path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.60417*height), control1: CGPoint(x: 0.57401*width, y: 0.58333*height), control2: CGPoint(x: 0.58333*width, y: 0.59266*height)) + path.addCurve(to: CGPoint(x: 0.5625*width, y: 0.625*height), control1: CGPoint(x: 0.58333*width, y: 0.61567*height), control2: CGPoint(x: 0.57401*width, y: 0.625*height)) + path.addLine(to: CGPoint(x: 0.3125*width, y: 0.625*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.60417*height), control1: CGPoint(x: 0.30099*width, y: 0.625*height), control2: CGPoint(x: 0.29167*width, y: 0.61567*height)) + path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.58333*height), control1: CGPoint(x: 0.29167*width, y: 0.59266*height), control2: CGPoint(x: 0.30099*width, y: 0.58333*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.6875*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.76596*height), control1: CGPoint(x: 0.69904*width, y: 0.75*height), control2: CGPoint(x: 0.70833*width, y: 0.75712*height)) + path.addLine(to: CGPoint(x: 0.70833*width, y: 0.77571*height)) + path.addCurve(to: CGPoint(x: 0.6875*width, y: 0.79167*height), control1: CGPoint(x: 0.70833*width, y: 0.78458*height), control2: CGPoint(x: 0.69904*width, y: 0.79167*height)) + path.addLine(to: CGPoint(x: 0.4375*width, y: 0.79167*height)) + path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.77571*height), control1: CGPoint(x: 0.42596*width, y: 0.79167*height), control2: CGPoint(x: 0.41667*width, y: 0.78454*height)) + path.addLine(to: CGPoint(x: 0.41667*width, y: 0.76596*height)) + path.addCurve(to: CGPoint(x: 0.4375*width, y: 0.75*height), control1: CGPoint(x: 0.41667*width, y: 0.75708*height), control2: CGPoint(x: 0.42596*width, y: 0.75*height)) + path.closeSubpath() + return path + } + } +} +struct SentIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.42062*width, y: 0.57917*height)) + path.addLine(to: CGPoint(x: 0.15492*width, y: 0.47825*height)) + path.addCurve(to: CGPoint(x: 0.10429*width, y: 0.42117*height), control1: CGPoint(x: 0.12658*width, y: 0.47437*height), control2: CGPoint(x: 0.10429*width, y: 0.45029*height)) + path.addCurve(to: CGPoint(x: 0.15708*width, y: 0.35867*height), control1: CGPoint(x: 0.10429*width, y: 0.392*height), control2: CGPoint(x: 0.12758*width, y: 0.36658*height)) + path.addLine(to: CGPoint(x: 0.758*width, y: 0.12683*height)) + path.addCurve(to: CGPoint(x: 0.84287*width, y: 0.10417*height), control1: CGPoint(x: 0.79183*width, y: 0.11317*height), control2: CGPoint(x: 0.81371*width, y: 0.10417*height)) + path.addCurve(to: CGPoint(x: 0.89567*width, y: 0.15696*height), control1: CGPoint(x: 0.87204*width, y: 0.10417*height), control2: CGPoint(x: 0.89567*width, y: 0.12783*height)) + path.addCurve(to: CGPoint(x: 0.87404*width, y: 0.23138*height), control1: CGPoint(x: 0.89567*width, y: 0.18608*height), control2: CGPoint(x: 0.88321*width, y: 0.20313*height)) + path.addLine(to: CGPoint(x: 0.64117*width, y: 0.84596*height)) + path.addCurve(to: CGPoint(x: 0.579*width, y: 0.89583*height), control1: CGPoint(x: 0.62892*width, y: 0.87304*height), control2: CGPoint(x: 0.60817*width, y: 0.89583*height)) + path.addCurve(to: CGPoint(x: 0.52042*width, y: 0.84458*height), control1: CGPoint(x: 0.54954*width, y: 0.89545*height), control2: CGPoint(x: 0.52471*width, y: 0.87373*height)) + path.closeSubpath() + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.84288*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.9165*width, y: 0.157*height), control1: CGPoint(x: 0.88325*width, y: 0.08333*height), control2: CGPoint(x: 0.9165*width, y: 0.11658*height)) + path.addCurve(to: CGPoint(x: 0.89379*width, y: 0.23787*height), control1: CGPoint(x: 0.9165*width, y: 0.19204*height), control2: CGPoint(x: 0.90204*width, y: 0.2125*height)) + path.addLine(to: CGPoint(x: 0.89346*width, y: 0.23879*height)) + path.addLine(to: CGPoint(x: 0.66063*width, y: 0.85337*height)) + path.addLine(to: CGPoint(x: 0.66008*width, y: 0.8545*height)) + path.addCurve(to: CGPoint(x: 0.57904*width, y: 0.91667*height), control1: CGPoint(x: 0.646*width, y: 0.88567*height), control2: CGPoint(x: 0.61904*width, y: 0.91667*height)) + path.addCurve(to: CGPoint(x: 0.52663*width, y: 0.89471*height), control1: CGPoint(x: 0.55817*width, y: 0.91667*height), control2: CGPoint(x: 0.53996*width, y: 0.90729*height)) + path.addCurve(to: CGPoint(x: 0.50062*width, y: 0.85125*height), control1: CGPoint(x: 0.51379*width, y: 0.88258*height), control2: CGPoint(x: 0.50483*width, y: 0.8675*height)) + path.addLine(to: CGPoint(x: 0.50104*width, y: 0.85221*height)) + path.addLine(to: CGPoint(x: 0.50017*width, y: 0.84937*height)) + path.addLine(to: CGPoint(x: 0.50062*width, y: 0.85125*height)) + path.addLine(to: CGPoint(x: 0.40062*width, y: 0.59938*height)) + path.addLine(to: CGPoint(x: 0.14846*width, y: 0.49821*height)) + path.addLine(to: CGPoint(x: 0.15112*width, y: 0.49879*height)) + path.addLine(to: CGPoint(x: 0.14712*width, y: 0.49762*height)) + path.addLine(to: CGPoint(x: 0.14846*width, y: 0.49821*height)) + path.addCurve(to: CGPoint(x: 0.0835*width, y: 0.42112*height), control1: CGPoint(x: 0.115*width, y: 0.49071*height), control2: CGPoint(x: 0.0835*width, y: 0.46162*height)) + path.addCurve(to: CGPoint(x: 0.1505*width, y: 0.33896*height), control1: CGPoint(x: 0.0835*width, y: 0.38133*height), control2: CGPoint(x: 0.11342*width, y: 0.34937*height)) + path.addLine(to: CGPoint(x: 0.7505*width, y: 0.10733*height)) + path.addCurve(to: CGPoint(x: 0.84287*width, y: 0.08333*height), control1: CGPoint(x: 0.78412*width, y: 0.09379*height), control2: CGPoint(x: 0.80954*width, y: 0.08333*height)) + path.move(to: CGPoint(x: 0.84287*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.76583*width, y: 0.14617*height), control1: CGPoint(x: 0.818*width, y: 0.125*height), control2: CGPoint(x: 0.79971*width, y: 0.1325*height)) + path.addLine(to: CGPoint(x: 0.7655*width, y: 0.14625*height)) + path.addLine(to: CGPoint(x: 0.16467*width, y: 0.37817*height)) + path.addLine(to: CGPoint(x: 0.16246*width, y: 0.37875*height)) + path.addCurve(to: CGPoint(x: 0.12513*width, y: 0.42117*height), control1: CGPoint(x: 0.14113*width, y: 0.3845*height), control2: CGPoint(x: 0.12513*width, y: 0.40308*height)) + path.addCurve(to: CGPoint(x: 0.15888*width, y: 0.45783*height), control1: CGPoint(x: 0.12513*width, y: 0.43783*height), control2: CGPoint(x: 0.14421*width, y: 0.45508*height)) + path.addCurve(to: CGPoint(x: 0.16263*width, y: 0.459*height), control1: CGPoint(x: 0.16016*width, y: 0.4581*height), control2: CGPoint(x: 0.16141*width, y: 0.45849*height)) + path.addLine(to: CGPoint(x: 0.41167*width, y: 0.55892*height)) + path.addLine(to: CGPoint(x: 0.58933*width, y: 0.38108*height)) + path.addCurve(to: CGPoint(x: 0.60945*width, y: 0.37562*height), control1: CGPoint(x: 0.59458*width, y: 0.3758*height), control2: CGPoint(x: 0.60225*width, y: 0.37372*height)) + path.addCurve(to: CGPoint(x: 0.62424*width, y: 0.3903*height), control1: CGPoint(x: 0.61665*width, y: 0.37752*height), control2: CGPoint(x: 0.62229*width, y: 0.38312*height)) + path.addCurve(to: CGPoint(x: 0.61892*width, y: 0.41046*height), control1: CGPoint(x: 0.62619*width, y: 0.39749*height), control2: CGPoint(x: 0.62416*width, y: 0.40517*height)) + path.addLine(to: CGPoint(x: 0.44108*width, y: 0.58837*height)) + path.addLine(to: CGPoint(x: 0.53971*width, y: 0.83683*height)) + path.addCurve(to: CGPoint(x: 0.54063*width, y: 0.83983*height), control1: CGPoint(x: 0.54005*width, y: 0.83782*height), control2: CGPoint(x: 0.54036*width, y: 0.83882*height)) + path.addCurve(to: CGPoint(x: 0.55529*width, y: 0.86442*height), control1: CGPoint(x: 0.54322*width, y: 0.84919*height), control2: CGPoint(x: 0.54829*width, y: 0.85769*height)) + path.addCurve(to: CGPoint(x: 0.57904*width, y: 0.875*height), control1: CGPoint(x: 0.5625*width, y: 0.87125*height), control2: CGPoint(x: 0.57071*width, y: 0.875*height)) + path.addCurve(to: CGPoint(x: 0.62208*width, y: 0.8375*height), control1: CGPoint(x: 0.59725*width, y: 0.875*height), control2: CGPoint(x: 0.61167*width, y: 0.86042*height)) + path.addLine(to: CGPoint(x: 0.85425*width, y: 0.225*height)) + path.addCurve(to: CGPoint(x: 0.87483*width, y: 0.157*height), control1: CGPoint(x: 0.86442*width, y: 0.19383*height), control2: CGPoint(x: 0.87483*width, y: 0.18021*height)) + path.addCurve(to: CGPoint(x: 0.86557*width, y: 0.13429*height), control1: CGPoint(x: 0.87492*width, y: 0.14849*height), control2: CGPoint(x: 0.87159*width, y: 0.14031*height)) + path.addCurve(to: CGPoint(x: 0.84288*width, y: 0.125*height), control1: CGPoint(x: 0.85956*width, y: 0.12827*height), control2: CGPoint(x: 0.85138*width, y: 0.12492*height)) + return path + } + } +} +struct ArchiveIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.75*width, y: 0.10417*height)) + path.addCurve(to: CGPoint(x: 0.89583*width, y: 0.25*height), control1: CGPoint(x: 0.83079*width, y: 0.10417*height), control2: CGPoint(x: 0.89583*width, y: 0.16921*height)) + path.addLine(to: CGPoint(x: 0.89583*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.89583*height), control1: CGPoint(x: 0.89583*width, y: 0.83079*height), control2: CGPoint(x: 0.83079*width, y: 0.89583*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.89583*height)) + path.addCurve(to: CGPoint(x: 0.10417*width, y: 0.75*height), control1: CGPoint(x: 0.16921*width, y: 0.89583*height), control2: CGPoint(x: 0.10417*width, y: 0.83079*height)) + path.addLine(to: CGPoint(x: 0.10417*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.14676*width, y: 0.14676*height), control1: CGPoint(x: 0.10406*width, y: 0.21129*height), control2: CGPoint(x: 0.11938*width, y: 0.17413*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.17413*width, y: 0.11938*height), control2: CGPoint(x: 0.21129*width, y: 0.10406*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.77083*width, y: 0.19108*height)) + path.addCurve(to: CGPoint(x: 0.22917*width, y: 0.19108*height), control1: CGPoint(x: 0.60417*width, y: 0.1875*height), control2: CGPoint(x: 0.39583*width, y: 0.19108*height)) + path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.25*height), control1: CGPoint(x: 0.20488*width, y: 0.19963*height), control2: CGPoint(x: 0.1875*width, y: 0.22271*height)) + path.addLine(to: CGPoint(x: 0.1875*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.39676*width, y: 0.47824*height), control1: CGPoint(x: 0.35406*width, y: 0.41371*height), control2: CGPoint(x: 0.36938*width, y: 0.45087*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.52083*height), control1: CGPoint(x: 0.42413*width, y: 0.50562*height), control2: CGPoint(x: 0.46129*width, y: 0.52094*height)) + path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.375*height), control1: CGPoint(x: 0.58079*width, y: 0.52083*height), control2: CGPoint(x: 0.64583*width, y: 0.45579*height)) + path.addLine(to: CGPoint(x: 0.64583*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.35417*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.77083*width, y: 0.19108*height), control1: CGPoint(x: 0.8125*width, y: 0.22271*height), control2: CGPoint(x: 0.79512*width, y: 0.19963*height)) + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.75*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.25*height), control1: CGPoint(x: 0.84196*width, y: 0.08333*height), control2: CGPoint(x: 0.91667*width, y: 0.15804*height)) + path.addLine(to: CGPoint(x: 0.91667*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.91667*height), control1: CGPoint(x: 0.91667*width, y: 0.84196*height), control2: CGPoint(x: 0.84196*width, y: 0.91667*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.91667*height)) + path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.75*height), control1: CGPoint(x: 0.15804*width, y: 0.91667*height), control2: CGPoint(x: 0.08333*width, y: 0.84196*height)) + path.addLine(to: CGPoint(x: 0.08333*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.08333*width, y: 0.15804*height), control2: CGPoint(x: 0.15804*width, y: 0.08333*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.addQuadCurve(to: CGPoint(x: 0.22462*width, y: 0.1275*height), control: CGPoint(x: 0.23692*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.12754*width, y: 0.22458*height), control1: CGPoint(x: 0.17563*width, y: 0.1373*height), control2: CGPoint(x: 0.13734*width, y: 0.17559*height)) + path.addLine(to: CGPoint(x: 0.12754*width, y: 0.22479*height)) + path.addQuadCurve(to: CGPoint(x: 0.12567*width, y: 0.23713*height), control: CGPoint(x: 0.12629*width, y: 0.23083*height)) + path.addLine(to: CGPoint(x: 0.12567*width, y: 0.23721*height)) + path.addCurve(to: CGPoint(x: 0.125*width, y: 0.25*height), control1: CGPoint(x: 0.12523*width, y: 0.24146*height), control2: CGPoint(x: 0.125*width, y: 0.24573*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.17796*height), control1: CGPoint(x: 0.16667*width, y: 0.21933*height), control2: CGPoint(x: 0.1835*width, y: 0.1925*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.16667*height), control1: CGPoint(x: 0.21183*width, y: 0.17679*height), control2: CGPoint(x: 0.22917*width, y: 0.16667*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.17796*height), control1: CGPoint(x: 0.76762*width, y: 0.16667*height), control2: CGPoint(x: 0.77083*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.25*height), control1: CGPoint(x: 0.8165*width, y: 0.19246*height), control2: CGPoint(x: 0.83333*width, y: 0.21933*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.25*height)) + path.addQuadCurve(to: CGPoint(x: 0.87246*width, y: 0.22462*height), control: CGPoint(x: 0.875*width, y: 0.23692*height)) + path.addCurve(to: CGPoint(x: 0.77537*width, y: 0.12754*height), control1: CGPoint(x: 0.86266*width, y: 0.17563*height), control2: CGPoint(x: 0.82437*width, y: 0.13734*height)) + path.addLine(to: CGPoint(x: 0.77521*width, y: 0.12754*height)) + path.addQuadCurve(to: CGPoint(x: 0.76287*width, y: 0.12567*height), control: CGPoint(x: 0.76917*width, y: 0.12629*height)) + path.addLine(to: CGPoint(x: 0.76279*width, y: 0.12567*height)) + path.addQuadCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control: CGPoint(x: 0.7565*width, y: 0.125*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.move(to: CGPoint(x: 0.25*width, y: 0.20833*height)) + path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.25*height), control1: CGPoint(x: 0.22654*width, y: 0.20833*height), control2: CGPoint(x: 0.20833*width, y: 0.22654*height)) + path.addLine(to: CGPoint(x: 0.20833*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.33333*height)) + path.addCurve(to: CGPoint(x: 0.375*width, y: 0.35417*height), control1: CGPoint(x: 0.36567*width, y: 0.33333*height), control2: CGPoint(x: 0.375*width, y: 0.34266*height)) + path.addLine(to: CGPoint(x: 0.375*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.5*height), control1: CGPoint(x: 0.375*width, y: 0.45037*height), control2: CGPoint(x: 0.43071*width, y: 0.5*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.375*height), control1: CGPoint(x: 0.56929*width, y: 0.5*height), control2: CGPoint(x: 0.625*width, y: 0.44429*height)) + path.addLine(to: CGPoint(x: 0.625*width, y: 0.35417*height)) + path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.33333*height), control1: CGPoint(x: 0.625*width, y: 0.34266*height), control2: CGPoint(x: 0.63433*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.20833*height), control1: CGPoint(x: 0.79167*width, y: 0.22654*height), control2: CGPoint(x: 0.77346*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.20833*height)) + path.move(to: CGPoint(x: 0.125*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.12562*width, y: 0.76279*height), control1: CGPoint(x: 0.12499*width, y: 0.75427*height), control2: CGPoint(x: 0.1252*width, y: 0.75854*height)) + path.addLine(to: CGPoint(x: 0.12563*width, y: 0.76288*height)) + path.addCurve(to: CGPoint(x: 0.1275*width, y: 0.77521*height), control1: CGPoint(x: 0.12604*width, y: 0.76701*height), control2: CGPoint(x: 0.12667*width, y: 0.77113*height)) + path.addLine(to: CGPoint(x: 0.1275*width, y: 0.77542*height)) + path.addCurve(to: CGPoint(x: 0.22458*width, y: 0.8725*height), control1: CGPoint(x: 0.1373*width, y: 0.82441*height), control2: CGPoint(x: 0.17559*width, y: 0.8627*height)) + path.addLine(to: CGPoint(x: 0.22479*width, y: 0.8725*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.875*height), control1: CGPoint(x: 0.23309*width, y: 0.87418*height), control2: CGPoint(x: 0.24153*width, y: 0.87502*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.875*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.83333*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.83333*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.875*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.875*height)) + path.addQuadCurve(to: CGPoint(x: 0.77542*width, y: 0.8725*height), control: CGPoint(x: 0.76312*width, y: 0.875*height)) + path.addCurve(to: CGPoint(x: 0.8725*width, y: 0.77542*height), control1: CGPoint(x: 0.82441*width, y: 0.8627*height), control2: CGPoint(x: 0.8627*width, y: 0.82441*height)) + path.addQuadCurve(to: CGPoint(x: 0.875*width, y: 0.75*height), control: CGPoint(x: 0.875*width, y: 0.76313*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.375*height)) + path.addLine(to: CGPoint(x: 0.66667*width, y: 0.375*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.54167*height), control1: CGPoint(x: 0.66667*width, y: 0.46679*height), control2: CGPoint(x: 0.59179*width, y: 0.54167*height)) + path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.375*height), control1: CGPoint(x: 0.40821*width, y: 0.54167*height), control2: CGPoint(x: 0.33333*width, y: 0.47917*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.375*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.45833*width, y: 0.83333*height)) + path.addLine(to: CGPoint(x: 0.45833*width, y: 0.79167*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.79167*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.83333*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5*width, y: 0.75*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.75*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.79167*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.79167*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.45833*width, y: 0.75*height)) + path.addLine(to: CGPoint(x: 0.45833*width, y: 0.70833*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.70833*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.75*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5*width, y: 0.66667*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.66667*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.70833*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.70833*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.45833*width, y: 0.66667*height)) + path.addLine(to: CGPoint(x: 0.45833*width, y: 0.625*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.625*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.66667*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.5*width, y: 0.58333*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.58333*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.625*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.625*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.45833*width, y: 0.58333*height)) + path.addLine(to: CGPoint(x: 0.45833*width, y: 0.54167*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.54167*height)) + path.addLine(to: CGPoint(x: 0.5*width, y: 0.58333*height)) + path.closeSubpath() + return path + } + } +} +struct TrashIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.60417*width, y: 0.0625*height)) + path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.10417*height), control1: CGPoint(x: 0.62725*width, y: 0.0625*height), control2: CGPoint(x: 0.64583*width, y: 0.08108*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.10417*height)) + path.addCurve(to: CGPoint(x: 0.85417*width, y: 0.19792*height), control1: CGPoint(x: 0.80771*width, y: 0.10417*height), control2: CGPoint(x: 0.85417*width, y: 0.14596*height)) + path.addQuadCurve(to: CGPoint(x: 0.85342*width, y: 0.20833*height), control: CGPoint(x: 0.85412*width, y: 0.20321*height)) + path.addLine(to: CGPoint(x: 0.85417*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.85417*width, y: 0.3125*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.3125*height)) + path.addLine(to: CGPoint(x: 0.8125*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.9375*height), control1: CGPoint(x: 0.8125*width, y: 0.89104*height), control2: CGPoint(x: 0.76604*width, y: 0.9375*height)) + path.addLine(to: CGPoint(x: 0.29167*width, y: 0.9375*height)) + path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.83333*height), control1: CGPoint(x: 0.23396*width, y: 0.9375*height), control2: CGPoint(x: 0.1875*width, y: 0.89104*height)) + path.addLine(to: CGPoint(x: 0.1875*width, y: 0.3125*height)) + path.addLine(to: CGPoint(x: 0.14583*width, y: 0.3125*height)) + path.addLine(to: CGPoint(x: 0.14583*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.14658*width, y: 0.20833*height)) + path.addQuadCurve(to: CGPoint(x: 0.14583*width, y: 0.19792*height), control: CGPoint(x: 0.14592*width, y: 0.20321*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.14583*width, y: 0.14596*height), control2: CGPoint(x: 0.19229*width, y: 0.10417*height)) + path.addLine(to: CGPoint(x: 0.35417*width, y: 0.10417*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.0625*height), control1: CGPoint(x: 0.35417*width, y: 0.08108*height), control2: CGPoint(x: 0.37275*width, y: 0.0625*height)) + path.closeSubpath() + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.60417*width, y: 0.04167*height)) + path.addCurve(to: CGPoint(x: 0.66292*width, y: 0.08333*height), control1: CGPoint(x: 0.63113*width, y: 0.04167*height), control2: CGPoint(x: 0.65425*width, y: 0.05917*height)) + path.addLine(to: CGPoint(x: 0.75*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.83876*width, y: 0.12052*height), control1: CGPoint(x: 0.78336*width, y: 0.08341*height), control2: CGPoint(x: 0.81531*width, y: 0.0968*height)) + path.addCurve(to: CGPoint(x: 0.87492*width, y: 0.20971*height), control1: CGPoint(x: 0.86221*width, y: 0.14425*height), control2: CGPoint(x: 0.87523*width, y: 0.17635*height)) + path.addCurve(to: CGPoint(x: 0.875*width, y: 0.21088*height), control1: CGPoint(x: 0.87496*width, y: 0.20942*height), control2: CGPoint(x: 0.875*width, y: 0.20838*height)) + path.addLine(to: CGPoint(x: 0.875*width, y: 0.28917*height)) + path.addCurve(to: CGPoint(x: 0.83308*width, y: 0.33317*height), control1: CGPoint(x: 0.87474*width, y: 0.31256*height), control2: CGPoint(x: 0.85644*width, y: 0.33177*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.33583*height), control1: CGPoint(x: 0.83313*width, y: 0.33408*height), control2: CGPoint(x: 0.83333*width, y: 0.33492*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.95833*height), control1: CGPoint(x: 0.83333*width, y: 0.90221*height), control2: CGPoint(x: 0.77721*width, y: 0.95833*height)) + path.addLine(to: CGPoint(x: 0.29167*width, y: 0.95833*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.83333*height), control1: CGPoint(x: 0.22279*width, y: 0.95833*height), control2: CGPoint(x: 0.16667*width, y: 0.90221*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.33587*height)) + path.addQuadCurve(to: CGPoint(x: 0.16692*width, y: 0.33317*height), control: CGPoint(x: 0.16675*width, y: 0.3345*height)) + path.addCurve(to: CGPoint(x: 0.125*width, y: 0.28913*height), control1: CGPoint(x: 0.14383*width, y: 0.33196*height), control2: CGPoint(x: 0.125*width, y: 0.31246*height)) + path.addLine(to: CGPoint(x: 0.125*width, y: 0.21088*height)) + path.addCurve(to: CGPoint(x: 0.12508*width, y: 0.20971*height), control1: CGPoint(x: 0.125*width, y: 0.20854*height), control2: CGPoint(x: 0.12508*width, y: 0.20946*height)) + path.addCurve(to: CGPoint(x: 0.125*width, y: 0.20833*height), control1: CGPoint(x: 0.12504*width, y: 0.20979*height), control2: CGPoint(x: 0.125*width, y: 0.21*height)) + path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.125*width, y: 0.13946*height), control2: CGPoint(x: 0.18113*width, y: 0.08333*height)) + path.addLine(to: CGPoint(x: 0.33708*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.04167*height), control1: CGPoint(x: 0.34575*width, y: 0.05917*height), control2: CGPoint(x: 0.36888*width, y: 0.04167*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.39583*width, y: 0.08333*height)) + path.addCurve(to: CGPoint(x: 0.375*width, y: 0.10417*height), control1: CGPoint(x: 0.38392*width, y: 0.08333*height), control2: CGPoint(x: 0.375*width, y: 0.09225*height)) + path.addCurve(to: CGPoint(x: 0.38098*width, y: 0.11902*height), control1: CGPoint(x: 0.37489*width, y: 0.10973*height), control2: CGPoint(x: 0.37704*width, y: 0.11509*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.125*height), control1: CGPoint(x: 0.38491*width, y: 0.12296*height), control2: CGPoint(x: 0.39027*width, y: 0.12511*height)) + path.addLine(to: CGPoint(x: 0.60417*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.10417*height), control1: CGPoint(x: 0.61608*width, y: 0.125*height), control2: CGPoint(x: 0.625*width, y: 0.11608*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.08333*height), control1: CGPoint(x: 0.625*width, y: 0.09225*height), control2: CGPoint(x: 0.61608*width, y: 0.08333*height)) + path.addLine(to: CGPoint(x: 0.39583*width, y: 0.08333*height)) + path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.20833*height), control1: CGPoint(x: 0.20346*width, y: 0.125*height), control2: CGPoint(x: 0.16667*width, y: 0.16179*height)) + path.addQuadCurve(to: CGPoint(x: 0.16675*width, y: 0.20958*height), control: CGPoint(x: 0.16667*width, y: 0.20638*height)) + path.addLine(to: CGPoint(x: 0.16675*width, y: 0.21079*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.21083*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.28917*height)) + path.addCurve(to: CGPoint(x: 0.16917*width, y: 0.29167*height), control1: CGPoint(x: 0.16667*width, y: 0.29096*height), control2: CGPoint(x: 0.16742*width, y: 0.29167*height)) + path.addLine(to: CGPoint(x: 0.83083*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.28917*height), control1: CGPoint(x: 0.83263*width, y: 0.29167*height), control2: CGPoint(x: 0.83333*width, y: 0.29096*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.21083*height)) + path.addLine(to: CGPoint(x: 0.83325*width, y: 0.21083*height)) + path.addCurve(to: CGPoint(x: 0.80997*width, y: 0.15012*height), control1: CGPoint(x: 0.8341*width, y: 0.18827*height), control2: CGPoint(x: 0.82569*width, y: 0.16633*height)) + path.addCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control1: CGPoint(x: 0.79425*width, y: 0.13391*height), control2: CGPoint(x: 0.77258*width, y: 0.12484*height)) + path.addLine(to: CGPoint(x: 0.66292*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.16667*height), control1: CGPoint(x: 0.65425*width, y: 0.14917*height), control2: CGPoint(x: 0.63113*width, y: 0.16667*height)) + path.addLine(to: CGPoint(x: 0.39583*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.33708*width, y: 0.125*height), control1: CGPoint(x: 0.36888*width, y: 0.16667*height), control2: CGPoint(x: 0.34575*width, y: 0.14917*height)) + path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) + path.move(to: CGPoint(x: 0.21083*width, y: 0.33333*height)) + path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.33583*height), control1: CGPoint(x: 0.20904*width, y: 0.33333*height), control2: CGPoint(x: 0.20833*width, y: 0.33404*height)) + path.addLine(to: CGPoint(x: 0.20833*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.91667*height), control1: CGPoint(x: 0.20833*width, y: 0.87988*height), control2: CGPoint(x: 0.24513*width, y: 0.91667*height)) + path.addLine(to: CGPoint(x: 0.70833*width, y: 0.91667*height)) + path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.83333*height), control1: CGPoint(x: 0.75488*width, y: 0.91667*height), control2: CGPoint(x: 0.79167*width, y: 0.87988*height)) + path.addLine(to: CGPoint(x: 0.79167*width, y: 0.33583*height)) + path.addCurve(to: CGPoint(x: 0.78917*width, y: 0.33333*height), control1: CGPoint(x: 0.79167*width, y: 0.33404*height), control2: CGPoint(x: 0.79096*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.21083*width, y: 0.33333*height)) + path.move(to: CGPoint(x: 0.39583*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.45833*width, y: 0.47917*height), control1: CGPoint(x: 0.43008*width, y: 0.41667*height), control2: CGPoint(x: 0.45833*width, y: 0.44492*height)) + path.addLine(to: CGPoint(x: 0.45833*width, y: 0.77083*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.83333*height), control1: CGPoint(x: 0.45833*width, y: 0.80508*height), control2: CGPoint(x: 0.43008*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.77083*height), control1: CGPoint(x: 0.36158*width, y: 0.83333*height), control2: CGPoint(x: 0.33333*width, y: 0.80508*height)) + path.addLine(to: CGPoint(x: 0.33333*width, y: 0.47917*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.41667*height), control1: CGPoint(x: 0.33333*width, y: 0.44492*height), control2: CGPoint(x: 0.36158*width, y: 0.41667*height)) + path.move(to: CGPoint(x: 0.60417*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.66667*width, y: 0.47917*height), control1: CGPoint(x: 0.63842*width, y: 0.41667*height), control2: CGPoint(x: 0.66667*width, y: 0.44492*height)) + path.addLine(to: CGPoint(x: 0.66667*width, y: 0.77083*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.83333*height), control1: CGPoint(x: 0.66667*width, y: 0.80508*height), control2: CGPoint(x: 0.63842*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.54167*width, y: 0.77083*height), control1: CGPoint(x: 0.56992*width, y: 0.83333*height), control2: CGPoint(x: 0.54167*width, y: 0.80508*height)) + path.addLine(to: CGPoint(x: 0.54167*width, y: 0.47917*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.41667*height), control1: CGPoint(x: 0.54167*width, y: 0.44492*height), control2: CGPoint(x: 0.56992*width, y: 0.41667*height)) + path.move(to: CGPoint(x: 0.39583*width, y: 0.45833*height)) + path.addCurve(to: CGPoint(x: 0.375*width, y: 0.47917*height), control1: CGPoint(x: 0.38392*width, y: 0.45833*height), control2: CGPoint(x: 0.375*width, y: 0.46725*height)) + path.addLine(to: CGPoint(x: 0.375*width, y: 0.77083*height)) + path.addCurve(to: CGPoint(x: 0.38098*width, y: 0.78569*height), control1: CGPoint(x: 0.37489*width, y: 0.77639*height), control2: CGPoint(x: 0.37704*width, y: 0.78176*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.79167*height), control1: CGPoint(x: 0.38491*width, y: 0.78962*height), control2: CGPoint(x: 0.39027*width, y: 0.79178*height)) + path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.77083*height), control1: CGPoint(x: 0.40775*width, y: 0.79167*height), control2: CGPoint(x: 0.41667*width, y: 0.78275*height)) + path.addLine(to: CGPoint(x: 0.41667*width, y: 0.47917*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.45833*height), control1: CGPoint(x: 0.41667*width, y: 0.46725*height), control2: CGPoint(x: 0.40775*width, y: 0.45833*height)) + path.move(to: CGPoint(x: 0.60417*width, y: 0.45833*height)) + path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.47917*height), control1: CGPoint(x: 0.59225*width, y: 0.45833*height), control2: CGPoint(x: 0.58333*width, y: 0.46725*height)) + path.addLine(to: CGPoint(x: 0.58333*width, y: 0.77083*height)) + path.addCurve(to: CGPoint(x: 0.58931*width, y: 0.78569*height), control1: CGPoint(x: 0.58322*width, y: 0.77639*height), control2: CGPoint(x: 0.58538*width, y: 0.78176*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.79167*height), control1: CGPoint(x: 0.59324*width, y: 0.78962*height), control2: CGPoint(x: 0.59861*width, y: 0.79178*height)) + path.addCurve(to: CGPoint(x: 0.625*width, y: 0.77083*height), control1: CGPoint(x: 0.61608*width, y: 0.79167*height), control2: CGPoint(x: 0.625*width, y: 0.78275*height)) + path.addLine(to: CGPoint(x: 0.625*width, y: 0.47917*height)) + path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.45833*height), control1: CGPoint(x: 0.625*width, y: 0.46725*height), control2: CGPoint(x: 0.61608*width, y: 0.45833*height)) + return path + } + } +} +struct SpamIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.45833*width, y: 0.0625*height)) + path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.9375*height), control1: CGPoint(x: 1.03146*width, y: 0.29933*height), control2: CGPoint(x: 0.84233*width, y: 0.86992*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.6875*height), control1: CGPoint(x: 0.67608*width, y: 0.78083*height), control2: CGPoint(x: 0.59904*width, y: 0.685*height)) + path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.9375*height), control1: CGPoint(x: 0.40075*width, y: 0.68517*height), control2: CGPoint(x: 0.32412*width, y: 0.78596*height)) + path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.22917*height), control1: CGPoint(x: 0.22679*width, y: 0.9125*height), control2: CGPoint(x: 0.03271*width, y: 0.51638*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.4375*height), control1: CGPoint(x: 0.26733*width, y: 0.39929*height), control2: CGPoint(x: 0.33333*width, y: 0.4375*height)) + path.addCurve(to: CGPoint(x: 0.45833*width, y: 0.0625*height), control1: CGPoint(x: 0.52083*width, y: 0.4375*height), control2: CGPoint(x: 0.52679*width, y: 0.19554*height)) + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.46629*width, y: 0.04321*height)) + path.addCurve(to: CGPoint(x: 0.58863*width, y: 0.95767*height), control1: CGPoint(x: 1.05183*width, y: 0.28517*height), control2: CGPoint(x: 0.87296*width, y: 0.8835*height)) + path.addCurve(to: CGPoint(x: 0.56676*width, y: 0.95006*height), control1: CGPoint(x: 0.58047*width, y: 0.95979*height), control2: CGPoint(x: 0.57184*width, y: 0.95679*height)) + path.addCurve(to: CGPoint(x: 0.56542*width, y: 0.92696*height), control1: CGPoint(x: 0.56168*width, y: 0.94334*height), control2: CGPoint(x: 0.56115*width, y: 0.93422*height)) + path.addCurve(to: CGPoint(x: 0.59475*width, y: 0.76154*height), control1: CGPoint(x: 0.60958*width, y: 0.85238*height), control2: CGPoint(x: 0.61108*width, y: 0.79683*height)) + path.addCurve(to: CGPoint(x: 0.50058*width, y: 0.70833*height), control1: CGPoint(x: 0.57837*width, y: 0.72629*height), control2: CGPoint(x: 0.54325*width, y: 0.70725*height)) + path.addLine(to: CGPoint(x: 0.49954*width, y: 0.70833*height)) + path.addCurve(to: CGPoint(x: 0.40538*width, y: 0.76342*height), control1: CGPoint(x: 0.45704*width, y: 0.70733*height), control2: CGPoint(x: 0.42179*width, y: 0.72738*height)) + path.addCurve(to: CGPoint(x: 0.43442*width, y: 0.92667*height), control1: CGPoint(x: 0.38892*width, y: 0.79946*height), control2: CGPoint(x: 0.39054*width, y: 0.85483*height)) + path.addCurve(to: CGPoint(x: 0.4341*width, y: 0.94883*height), control1: CGPoint(x: 0.43858*width, y: 0.9335*height), control2: CGPoint(x: 0.43846*width, y: 0.94212*height)) + path.addCurve(to: CGPoint(x: 0.414*width, y: 0.95817*height), control1: CGPoint(x: 0.42975*width, y: 0.95554*height), control2: CGPoint(x: 0.42194*width, y: 0.95917*height)) + path.addCurve(to: CGPoint(x: 0.16583*width, y: 0.68742*height), control1: CGPoint(x: 0.30583*width, y: 0.94396*height), control2: CGPoint(x: 0.20742*width, y: 0.83133*height)) + path.addCurve(to: CGPoint(x: 0.27621*width, y: 0.21525*height), control1: CGPoint(x: 0.12429*width, y: 0.5435*height), control2: CGPoint(x: 0.14179*width, y: 0.36429*height)) + path.addCurve(to: CGPoint(x: 0.30042*width, y: 0.21041*height), control1: CGPoint(x: 0.28235*width, y: 0.20851*height), control2: CGPoint(x: 0.29216*width, y: 0.20655*height)) + path.addCurve(to: CGPoint(x: 0.31225*width, y: 0.23208*height), control1: CGPoint(x: 0.30868*width, y: 0.21427*height), control2: CGPoint(x: 0.31348*width, y: 0.22305*height)) + path.addCurve(to: CGPoint(x: 0.32829*width, y: 0.38533*height), control1: CGPoint(x: 0.3005*width, y: 0.31433*height), control2: CGPoint(x: 0.31146*width, y: 0.36092*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.41667*height), control1: CGPoint(x: 0.34512*width, y: 0.40975*height), control2: CGPoint(x: 0.36883*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.45083*width, y: 0.38583*height), control1: CGPoint(x: 0.42037*width, y: 0.41667*height), control2: CGPoint(x: 0.43667*width, y: 0.40637*height)) + path.addCurve(to: CGPoint(x: 0.47896*width, y: 0.29762*height), control1: CGPoint(x: 0.46504*width, y: 0.36525*height), control2: CGPoint(x: 0.47492*width, y: 0.33387*height)) + path.addCurve(to: CGPoint(x: 0.43979*width, y: 0.07204*height), control1: CGPoint(x: 0.48696*width, y: 0.22508*height), control2: CGPoint(x: 0.47154*width, y: 0.13375*height)) + path.addCurve(to: CGPoint(x: 0.44294*width, y: 0.04834*height), control1: CGPoint(x: 0.43575*width, y: 0.06427*height), control2: CGPoint(x: 0.43701*width, y: 0.05479*height)) + path.addCurve(to: CGPoint(x: 0.46629*width, y: 0.04321*height), control1: CGPoint(x: 0.44887*width, y: 0.04189*height), control2: CGPoint(x: 0.4582*width, y: 0.03984*height)) + path.move(to: CGPoint(x: 0.49421*width, y: 0.10663*height)) + path.addCurve(to: CGPoint(x: 0.52033*width, y: 0.30217*height), control1: CGPoint(x: 0.51542*width, y: 0.16917*height), control2: CGPoint(x: 0.52742*width, y: 0.23858*height)) + path.addCurve(to: CGPoint(x: 0.48513*width, y: 0.40942*height), control1: CGPoint(x: 0.51579*width, y: 0.34304*height), control2: CGPoint(x: 0.50508*width, y: 0.38046*height)) + path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.45833*height), control1: CGPoint(x: 0.46517*width, y: 0.43838*height), control2: CGPoint(x: 0.43379*width, y: 0.45833*height)) + path.addCurve(to: CGPoint(x: 0.29404*width, y: 0.40892*height), control1: CGPoint(x: 0.36033*width, y: 0.45833*height), control2: CGPoint(x: 0.31971*width, y: 0.44617*height)) + path.addCurve(to: CGPoint(x: 0.26913*width, y: 0.29838*height), control1: CGPoint(x: 0.27671*width, y: 0.38388*height), control2: CGPoint(x: 0.27004*width, y: 0.34492*height)) + path.addCurve(to: CGPoint(x: 0.20592*width, y: 0.67588*height), control1: CGPoint(x: 0.18438*width, y: 0.42338*height), control2: CGPoint(x: 0.17258*width, y: 0.56067*height)) + path.addCurve(to: CGPoint(x: 0.38133*width, y: 0.90242*height), control1: CGPoint(x: 0.23825*width, y: 0.78796*height), control2: CGPoint(x: 0.31033*width, y: 0.87183*height)) + path.addCurve(to: CGPoint(x: 0.36742*width, y: 0.74617*height), control1: CGPoint(x: 0.35608*width, y: 0.84233*height), control2: CGPoint(x: 0.34871*width, y: 0.78721*height)) + path.addCurve(to: CGPoint(x: 0.5*width, y: 0.66683*height), control1: CGPoint(x: 0.39092*width, y: 0.69467*height), control2: CGPoint(x: 0.44342*width, y: 0.66567*height)) + path.addCurve(to: CGPoint(x: 0.6325*width, y: 0.74404*height), control1: CGPoint(x: 0.55617*width, y: 0.66563*height), control2: CGPoint(x: 0.60883*width, y: 0.69304*height)) + path.addCurve(to: CGPoint(x: 0.62129*width, y: 0.89496*height), control1: CGPoint(x: 0.65067*width, y: 0.78329*height), control2: CGPoint(x: 0.64388*width, y: 0.83642*height)) + path.addCurve(to: CGPoint(x: 0.49421*width, y: 0.10663*height), control1: CGPoint(x: 0.82613*width, y: 0.787*height), control2: CGPoint(x: 0.95954*width, y: 0.33313*height)) + return path + } + } +} +struct FolderIcon: View { + var tinted: Bool = false + var body: some View { + ZStack { + ZStack { + ZStack { + Layer0().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + .compositingGroup() + .opacity(0.2) + ZStack { + Layer1().fill(tinted ? .accent : .black).stroke(tinted ? .accent : .clear) + } + } + } + } + + private struct Layer0: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.16667*width, y: 0.14583*height)) + path.addLine(to: CGPoint(x: 0.4375*width, y: 0.14583*height)) + path.addLine(to: CGPoint(x: 0.52083*width, y: 0.3125*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.3125*height)) + path.addCurve(to: CGPoint(x: 0.9375*width, y: 0.41667*height), control1: CGPoint(x: 0.89104*width, y: 0.3125*height), control2: CGPoint(x: 0.9375*width, y: 0.35896*height)) + path.addLine(to: CGPoint(x: 0.9375*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.85417*height), control1: CGPoint(x: 0.9375*width, y: 0.80771*height), control2: CGPoint(x: 0.89104*width, y: 0.85417*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.85417*height)) + path.addCurve(to: CGPoint(x: 0.09295*width, y: 0.82372*height), control1: CGPoint(x: 0.13902*width, y: 0.85422*height), control2: CGPoint(x: 0.1125*width, y: 0.84327*height)) + path.addCurve(to: CGPoint(x: 0.0625*width, y: 0.75*height), control1: CGPoint(x: 0.0734*width, y: 0.80417*height), control2: CGPoint(x: 0.06244*width, y: 0.77764*height)) + path.addLine(to: CGPoint(x: 0.0625*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.14583*height), control1: CGPoint(x: 0.0625*width, y: 0.19229*height), control2: CGPoint(x: 0.10896*width, y: 0.14583*height)) + return path + } + } + + private struct Layer1: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + let width = rect.size.width + let height = rect.size.height + path.move(to: CGPoint(x: 0.4375*width, y: 0.125*height)) + path.addCurve(to: CGPoint(x: 0.45612*width, y: 0.13654*height), control1: CGPoint(x: 0.44539*width, y: 0.12501*height), control2: CGPoint(x: 0.4526*width, y: 0.12948*height)) + path.addLine(to: CGPoint(x: 0.47121*width, y: 0.16667*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.95833*width, y: 0.29167*height), control1: CGPoint(x: 0.90221*width, y: 0.16667*height), control2: CGPoint(x: 0.95833*width, y: 0.22279*height)) + path.addLine(to: CGPoint(x: 0.95833*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.875*height), control1: CGPoint(x: 0.95833*width, y: 0.81887*height), control2: CGPoint(x: 0.90221*width, y: 0.875*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.875*height)) + path.addCurve(to: CGPoint(x: 0.04167*width, y: 0.75*height), control1: CGPoint(x: 0.09779*width, y: 0.875*height), control2: CGPoint(x: 0.04167*width, y: 0.81887*height)) + path.addLine(to: CGPoint(x: 0.04167*width, y: 0.25*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.125*height), control1: CGPoint(x: 0.04167*width, y: 0.18113*height), control2: CGPoint(x: 0.09779*width, y: 0.125*height)) + path.closeSubpath() + path.move(to: CGPoint(x: 0.16667*width, y: 0.16667*height)) + path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.25*height), control1: CGPoint(x: 0.12012*width, y: 0.16667*height), control2: CGPoint(x: 0.08333*width, y: 0.20346*height)) + path.addLine(to: CGPoint(x: 0.08333*width, y: 0.29167*height)) + path.addLine(to: CGPoint(x: 0.3125*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.3125*height), control1: CGPoint(x: 0.32401*width, y: 0.29167*height), control2: CGPoint(x: 0.33333*width, y: 0.30099*height)) + path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.33333*height), control1: CGPoint(x: 0.33333*width, y: 0.32401*height), control2: CGPoint(x: 0.32401*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.08333*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.08333*width, y: 0.75*height)) + path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.83333*height), control1: CGPoint(x: 0.08333*width, y: 0.79654*height), control2: CGPoint(x: 0.12012*width, y: 0.83333*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.83333*height)) + path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.75*height), control1: CGPoint(x: 0.87988*width, y: 0.83333*height), control2: CGPoint(x: 0.91667*width, y: 0.79654*height)) + path.addLine(to: CGPoint(x: 0.91667*width, y: 0.41667*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.33333*height), control1: CGPoint(x: 0.91667*width, y: 0.37012*height), control2: CGPoint(x: 0.87988*width, y: 0.33333*height)) + path.addLine(to: CGPoint(x: 0.52083*width, y: 0.33333*height)) + path.addCurve(to: CGPoint(x: 0.50221*width, y: 0.32187*height), control1: CGPoint(x: 0.51296*width, y: 0.33334*height), control2: CGPoint(x: 0.50575*width, y: 0.32891*height)) + path.addLine(to: CGPoint(x: 0.43904*width, y: 0.19546*height)) + path.addLine(to: CGPoint(x: 0.42462*width, y: 0.16667*height)) + path.addLine(to: CGPoint(x: 0.16667*width, y: 0.16667*height)) + path.move(to: CGPoint(x: 0.53371*width, y: 0.29167*height)) + path.addLine(to: CGPoint(x: 0.83333*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.32379*height), control1: CGPoint(x: 0.86413*width, y: 0.29167*height), control2: CGPoint(x: 0.89383*width, y: 0.30312*height)) + path.addLine(to: CGPoint(x: 0.91667*width, y: 0.29167*height)) + path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.20833*height), control1: CGPoint(x: 0.91667*width, y: 0.24513*height), control2: CGPoint(x: 0.87988*width, y: 0.20833*height)) + path.addLine(to: CGPoint(x: 0.49204*width, y: 0.20833*height)) + path.closeSubpath() + return path + } + } +} diff --git a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift index dddc2aeb..2edd3b46 100644 --- a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift +++ b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift @@ -8,42 +8,91 @@ import Account import SwiftUI -// TODO: Connect to actual account and folder structure -// Includes unread count with static number currently +let iconShapes = FolderIconShapes() struct MailboxDropdownRowView: View { - @Environment(Accounts.self) private var accounts: Accounts - var mailboxName: String - var iconName: String + @State var isExpanded: Bool = false + var mailbox: Mailbox + var tempHasSubfolders: Bool = true var body: some View { - DisclosureGroup { - ForEach(accounts.allAccounts) { account in + if tempHasSubfolders { + DisclosureGroup(isExpanded: $isExpanded) { + //TODO: Eventual subfolder + } label: { HStack { - RoundedRectangle(cornerRadius: 22.0) - .fill(Color.random) - .frame(width: 6, height: 22) - Text(account.name) - .font(.subheadline) + (iconSwitcher(folderName: mailbox.name, tinted: false)).frame(width: 24, height: 24) + Text(mailbox.name) + .foregroundStyle(.black) Spacer() - Text("3") - .font(.caption2) - .padding(.horizontal, 5) - .foregroundColor(.muted) - .overlay( - RoundedRectangle(cornerRadius: 18) - .stroke(lineWidth: 1) - .foregroundColor(.muted) - ) - - }.padding(.horizontal) + if (!isExpanded && mailbox.unreadEmails! > 0) { + UnreadCounter(unreadCount: mailbox.unreadEmails ?? 0, hasNew: false) + } + } + }.padding(.horizontal) + .font(.subheadline) + } else { + HStack { + (iconSwitcher(folderName: mailbox.name, tinted: false)).frame(width: 24, height: 24) + Text(mailbox.name) + .foregroundStyle(.black) + Spacer() + if mailbox.unreadEmails! > 0 { + UnreadCounter(unreadCount: mailbox.unreadEmails ?? 0, hasNew: false) + } } - } label: { - Label(mailboxName, systemImage: iconName) + .onTapGesture { + //TODO: Load relevant email list + } + .padding(.horizontal) + .font(.subheadline) } + } } #Preview { @Previewable @State var accounts: Accounts = Accounts() - MailboxDropdownRowView(mailboxName: "Inbox", iconName: "tray").environment(accounts) + @Previewable @State var mailbox: Mailbox = Mailbox("Inbox", unreadEmails: 2) + MailboxDropdownRowView(mailbox: mailbox).environment(accounts) +} + +@ViewBuilder func iconSwitcher(folderName: String, tinted: Bool) -> some View { + + switch iconName(folderName: folderName) { + case "inbox": + tinted ? iconShapes.inboxPathTinted : iconShapes.inboxPath + case "archive": + tinted ? iconShapes.archivePathTinted : iconShapes.archivePath + case "draft": + tinted ? iconShapes.draftPathTinted : iconShapes.draftPath + case "sent": + tinted ? iconShapes.sentPathTinted : iconShapes.sentPath + case "spam": + tinted ? iconShapes.spamPathTinted : iconShapes.spamPath + case "trash": + tinted ? iconShapes.trashPathTinted : iconShapes.trashPath + default: + tinted ? iconShapes.folderPathTinted : iconShapes.folderPath + } +} + +func iconName(folderName:String) -> String { + let localizedFolderIconNames: [String: String] = [ + "inbox": "inbox_localized", + "archive": "archive_localized", + "draft": "draft_localized", + "sent": "sent_localized", + "spam": "spam_localized", + "trash": "trash_localized" + ] + for (icon, localizedName) in localizedFolderIconNames { + if (folderName + .localizedCaseInsensitiveContains(icon) + || folderName + .localizedCaseInsensitiveContains(localizedName)) + { + return icon + } + } + return "folder" } diff --git a/Thunderbird/Thunderbird/Assets.xcassets/surface.colorset/Contents.json b/Thunderbird/Thunderbird/Assets.xcassets/surface.colorset/Contents.json new file mode 100644 index 00000000..fb83eb05 --- /dev/null +++ b/Thunderbird/Thunderbird/Assets.xcassets/surface.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF7", + "red" : "0xF7" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thunderbird/Thunderbird/Localization/en.lproj/Localizable.strings b/Thunderbird/Thunderbird/Localization/en.lproj/Localizable.strings index 140870a0..7facfe37 100644 --- a/Thunderbird/Thunderbird/Localization/en.lproj/Localizable.strings +++ b/Thunderbird/Thunderbird/Localization/en.lproj/Localizable.strings @@ -100,3 +100,11 @@ "select_all_button" = "Select All"; "done_button" = "Done"; + +//Predictable folder names +"inbox_localized" = "Inbox"; +"sent_localized" = "Sent"; +"archive_localized" = "Archive"; +"spam_localized" = "Spam"; +"draft_localized" = "Draft"; +"trash_localized" = "Trash"; diff --git a/Thunderbird/Thunderbird/Util/UnreadCounter.swift b/Thunderbird/Thunderbird/Util/UnreadCounter.swift new file mode 100644 index 00000000..1dafe367 --- /dev/null +++ b/Thunderbird/Thunderbird/Util/UnreadCounter.swift @@ -0,0 +1,37 @@ +// UnreadCounter.swift +// Thunderbird +// +// Created by Ashley Soucar on 7/14/26. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ +// + +import SwiftUI + +struct UnreadCounter: View { + @State var unreadCount: Int = 0 + @State var hasNew: Bool = false + var body: some View { + Text("\(unreadCount)") + .font(.caption2) + .padding(.horizontal, 6) + .foregroundColor(hasNew ? .accent : .white) + .background { + RoundedRectangle(cornerRadius: 18) + .stroke( + (hasNew ? .accent : .white), + style: StrokeStyle( + lineWidth: 1 + ) + ) + .fill(hasNew ? .white : .accent) + .frame(width: 20, height: 17) + } + } +} + +#Preview { + UnreadCounter(unreadCount: 8, hasNew: false) +} From 2ab605daf96f1fdc91d93f673393623dbfe7ca99 Mon Sep 17 00:00:00 2001 From: Ashley Date: Wed, 15 Jul 2026 15:25:33 -0400 Subject: [PATCH 4/7] lint --- .../AccountList/FolderIconShapes.swift | 1071 ++++++++--------- .../AccountList/MailboxDropdownRowView.swift | 6 +- 2 files changed, 538 insertions(+), 539 deletions(-) diff --git a/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift b/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift index f85e4ae1..f9667951 100644 --- a/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift +++ b/Thunderbird/Thunderbird/AccountList/FolderIconShapes.swift @@ -8,7 +8,6 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/ // - import SwiftUI struct FolderIconShapes { @@ -51,80 +50,80 @@ struct InboxIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.75*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.25*height), control1: CGPoint(x: 0.84196*width, y: 0.08333*height), control2: CGPoint(x: 0.91667*width, y: 0.15804*height)) - path.addLine(to: CGPoint(x: 0.91667*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.91667*height), control1: CGPoint(x: 0.91667*width, y: 0.84196*height), control2: CGPoint(x: 0.84196*width, y: 0.91667*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.91667*height)) - path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.75*height), control1: CGPoint(x: 0.15804*width, y: 0.91667*height), control2: CGPoint(x: 0.08333*width, y: 0.84196*height)) - path.addLine(to: CGPoint(x: 0.08333*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.08333*width, y: 0.15804*height), control2: CGPoint(x: 0.15804*width, y: 0.08333*height)) + path.move(to: CGPoint(x: 0.75 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.91667 * width, y: 0.25 * height), control1: CGPoint(x: 0.84196 * width, y: 0.08333 * height), control2: CGPoint(x: 0.91667 * width, y: 0.15804 * height)) + path.addLine(to: CGPoint(x: 0.91667 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.91667 * height), control1: CGPoint(x: 0.91667 * width, y: 0.84196 * height), control2: CGPoint(x: 0.84196 * width, y: 0.91667 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.91667 * height)) + path.addCurve(to: CGPoint(x: 0.08333 * width, y: 0.75 * height), control1: CGPoint(x: 0.15804 * width, y: 0.91667 * height), control2: CGPoint(x: 0.08333 * width, y: 0.84196 * height)) + path.addLine(to: CGPoint(x: 0.08333 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.08333 * height), control1: CGPoint(x: 0.08333 * width, y: 0.15804 * height), control2: CGPoint(x: 0.15804 * width, y: 0.08333 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.addQuadCurve(to: CGPoint(x: 0.22462*width, y: 0.1275*height), control: CGPoint(x: 0.23692*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.12754*width, y: 0.22458*height), control1: CGPoint(x: 0.17563*width, y: 0.1373*height), control2: CGPoint(x: 0.13734*width, y: 0.17559*height)) - path.addLine(to: CGPoint(x: 0.12754*width, y: 0.22479*height)) - path.addQuadCurve(to: CGPoint(x: 0.12567*width, y: 0.23713*height), control: CGPoint(x: 0.12629*width, y: 0.23083*height)) - path.addLine(to: CGPoint(x: 0.12567*width, y: 0.23721*height)) - path.addCurve(to: CGPoint(x: 0.125*width, y: 0.25*height), control1: CGPoint(x: 0.12523*width, y: 0.24146*height), control2: CGPoint(x: 0.125*width, y: 0.24573*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.34463*height), control1: CGPoint(x: 0.16667*width, y: 0.386*height), control2: CGPoint(x: 0.1835*width, y: 0.35917*height)) - path.addLine(to: CGPoint(x: 0.20833*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.20833*height), control1: CGPoint(x: 0.20833*width, y: 0.24583*height), control2: CGPoint(x: 0.24583*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.70833*width, y: 0.20833*height)) - path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.29167*height), control1: CGPoint(x: 0.75417*width, y: 0.20833*height), control2: CGPoint(x: 0.79167*width, y: 0.24583*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.34463*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.41667*height), control1: CGPoint(x: 0.8165*width, y: 0.35912*height), control2: CGPoint(x: 0.83333*width, y: 0.386*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.25*height)) - path.addQuadCurve(to: CGPoint(x: 0.87246*width, y: 0.22462*height), control: CGPoint(x: 0.875*width, y: 0.23692*height)) - path.addCurve(to: CGPoint(x: 0.77537*width, y: 0.12754*height), control1: CGPoint(x: 0.86266*width, y: 0.17563*height), control2: CGPoint(x: 0.82437*width, y: 0.13734*height)) - path.addLine(to: CGPoint(x: 0.77521*width, y: 0.12754*height)) - path.addQuadCurve(to: CGPoint(x: 0.76287*width, y: 0.12567*height), control: CGPoint(x: 0.76917*width, y: 0.12629*height)) - path.addLine(to: CGPoint(x: 0.76279*width, y: 0.12567*height)) - path.addQuadCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control: CGPoint(x: 0.7565*width, y: 0.125*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.move(to: CGPoint(x: 0.29167*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.29167*height), control1: CGPoint(x: 0.26821*width, y: 0.25*height), control2: CGPoint(x: 0.25*width, y: 0.26821*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.25*height), control1: CGPoint(x: 0.75*width, y: 0.26821*height), control2: CGPoint(x: 0.73179*width, y: 0.25*height)) - path.addLine(to: CGPoint(x: 0.29167*width, y: 0.25*height)) - path.move(to: CGPoint(x: 0.25*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.41667*height), control1: CGPoint(x: 0.22654*width, y: 0.375*height), control2: CGPoint(x: 0.20833*width, y: 0.39321*height)) - path.addLine(to: CGPoint(x: 0.20833*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.5*height)) - path.addCurve(to: CGPoint(x: 0.375*width, y: 0.52083*height), control1: CGPoint(x: 0.36567*width, y: 0.5*height), control2: CGPoint(x: 0.375*width, y: 0.50933*height)) - path.addLine(to: CGPoint(x: 0.375*width, y: 0.54167*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.66667*height), control1: CGPoint(x: 0.375*width, y: 0.61096*height), control2: CGPoint(x: 0.43071*width, y: 0.66667*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.54167*height), control1: CGPoint(x: 0.56929*width, y: 0.66667*height), control2: CGPoint(x: 0.625*width, y: 0.61096*height)) - path.addLine(to: CGPoint(x: 0.625*width, y: 0.52083*height)) - path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.5*height), control1: CGPoint(x: 0.625*width, y: 0.50933*height), control2: CGPoint(x: 0.63433*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.375*height), control1: CGPoint(x: 0.79167*width, y: 0.39321*height), control2: CGPoint(x: 0.77346*width, y: 0.375*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.375*height)) - path.move(to: CGPoint(x: 0.125*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.12562*width, y: 0.76279*height), control1: CGPoint(x: 0.12499*width, y: 0.75427*height), control2: CGPoint(x: 0.1252*width, y: 0.75854*height)) - path.addLine(to: CGPoint(x: 0.12563*width, y: 0.76288*height)) - path.addCurve(to: CGPoint(x: 0.1275*width, y: 0.77521*height), control1: CGPoint(x: 0.12604*width, y: 0.76701*height), control2: CGPoint(x: 0.12667*width, y: 0.77113*height)) - path.addLine(to: CGPoint(x: 0.1275*width, y: 0.77542*height)) - path.addCurve(to: CGPoint(x: 0.22458*width, y: 0.8725*height), control1: CGPoint(x: 0.1373*width, y: 0.82441*height), control2: CGPoint(x: 0.17559*width, y: 0.8627*height)) - path.addLine(to: CGPoint(x: 0.22479*width, y: 0.8725*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.875*height), control1: CGPoint(x: 0.23309*width, y: 0.87418*height), control2: CGPoint(x: 0.24153*width, y: 0.87502*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.875*height)) - path.addQuadCurve(to: CGPoint(x: 0.77542*width, y: 0.8725*height), control: CGPoint(x: 0.76312*width, y: 0.875*height)) - path.addCurve(to: CGPoint(x: 0.8725*width, y: 0.77542*height), control1: CGPoint(x: 0.82441*width, y: 0.8627*height), control2: CGPoint(x: 0.8627*width, y: 0.82441*height)) - path.addQuadCurve(to: CGPoint(x: 0.875*width, y: 0.75*height), control: CGPoint(x: 0.875*width, y: 0.76313*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.54167*height)) - path.addLine(to: CGPoint(x: 0.66667*width, y: 0.54167*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.70833*height), control1: CGPoint(x: 0.66667*width, y: 0.63346*height), control2: CGPoint(x: 0.59179*width, y: 0.70833*height)) - path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.54167*height), control1: CGPoint(x: 0.40821*width, y: 0.70833*height), control2: CGPoint(x: 0.33333*width, y: 0.63346*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.54167*height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.addQuadCurve(to: CGPoint(x: 0.22462 * width, y: 0.1275 * height), control: CGPoint(x: 0.23692 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.12754 * width, y: 0.22458 * height), control1: CGPoint(x: 0.17563 * width, y: 0.1373 * height), control2: CGPoint(x: 0.13734 * width, y: 0.17559 * height)) + path.addLine(to: CGPoint(x: 0.12754 * width, y: 0.22479 * height)) + path.addQuadCurve(to: CGPoint(x: 0.12567 * width, y: 0.23713 * height), control: CGPoint(x: 0.12629 * width, y: 0.23083 * height)) + path.addLine(to: CGPoint(x: 0.12567 * width, y: 0.23721 * height)) + path.addCurve(to: CGPoint(x: 0.125 * width, y: 0.25 * height), control1: CGPoint(x: 0.12523 * width, y: 0.24146 * height), control2: CGPoint(x: 0.125 * width, y: 0.24573 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.20833 * width, y: 0.34463 * height), control1: CGPoint(x: 0.16667 * width, y: 0.386 * height), control2: CGPoint(x: 0.1835 * width, y: 0.35917 * height)) + path.addLine(to: CGPoint(x: 0.20833 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.20833 * height), control1: CGPoint(x: 0.20833 * width, y: 0.24583 * height), control2: CGPoint(x: 0.24583 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.70833 * width, y: 0.20833 * height)) + path.addCurve(to: CGPoint(x: 0.79167 * width, y: 0.29167 * height), control1: CGPoint(x: 0.75417 * width, y: 0.20833 * height), control2: CGPoint(x: 0.79167 * width, y: 0.24583 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.34463 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.41667 * height), control1: CGPoint(x: 0.8165 * width, y: 0.35912 * height), control2: CGPoint(x: 0.83333 * width, y: 0.386 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.25 * height)) + path.addQuadCurve(to: CGPoint(x: 0.87246 * width, y: 0.22462 * height), control: CGPoint(x: 0.875 * width, y: 0.23692 * height)) + path.addCurve(to: CGPoint(x: 0.77537 * width, y: 0.12754 * height), control1: CGPoint(x: 0.86266 * width, y: 0.17563 * height), control2: CGPoint(x: 0.82437 * width, y: 0.13734 * height)) + path.addLine(to: CGPoint(x: 0.77521 * width, y: 0.12754 * height)) + path.addQuadCurve(to: CGPoint(x: 0.76287 * width, y: 0.12567 * height), control: CGPoint(x: 0.76917 * width, y: 0.12629 * height)) + path.addLine(to: CGPoint(x: 0.76279 * width, y: 0.12567 * height)) + path.addQuadCurve(to: CGPoint(x: 0.75 * width, y: 0.125 * height), control: CGPoint(x: 0.7565 * width, y: 0.125 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.move(to: CGPoint(x: 0.29167 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.29167 * height), control1: CGPoint(x: 0.26821 * width, y: 0.25 * height), control2: CGPoint(x: 0.25 * width, y: 0.26821 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.25 * height), control1: CGPoint(x: 0.75 * width, y: 0.26821 * height), control2: CGPoint(x: 0.73179 * width, y: 0.25 * height)) + path.addLine(to: CGPoint(x: 0.29167 * width, y: 0.25 * height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.20833 * width, y: 0.41667 * height), control1: CGPoint(x: 0.22654 * width, y: 0.375 * height), control2: CGPoint(x: 0.20833 * width, y: 0.39321 * height)) + path.addLine(to: CGPoint(x: 0.20833 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.5 * height)) + path.addCurve(to: CGPoint(x: 0.375 * width, y: 0.52083 * height), control1: CGPoint(x: 0.36567 * width, y: 0.5 * height), control2: CGPoint(x: 0.375 * width, y: 0.50933 * height)) + path.addLine(to: CGPoint(x: 0.375 * width, y: 0.54167 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.66667 * height), control1: CGPoint(x: 0.375 * width, y: 0.61096 * height), control2: CGPoint(x: 0.43071 * width, y: 0.66667 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.54167 * height), control1: CGPoint(x: 0.56929 * width, y: 0.66667 * height), control2: CGPoint(x: 0.625 * width, y: 0.61096 * height)) + path.addLine(to: CGPoint(x: 0.625 * width, y: 0.52083 * height)) + path.addCurve(to: CGPoint(x: 0.64583 * width, y: 0.5 * height), control1: CGPoint(x: 0.625 * width, y: 0.50933 * height), control2: CGPoint(x: 0.63433 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.375 * height), control1: CGPoint(x: 0.79167 * width, y: 0.39321 * height), control2: CGPoint(x: 0.77346 * width, y: 0.375 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.375 * height)) + path.move(to: CGPoint(x: 0.125 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.12562 * width, y: 0.76279 * height), control1: CGPoint(x: 0.12499 * width, y: 0.75427 * height), control2: CGPoint(x: 0.1252 * width, y: 0.75854 * height)) + path.addLine(to: CGPoint(x: 0.12563 * width, y: 0.76288 * height)) + path.addCurve(to: CGPoint(x: 0.1275 * width, y: 0.77521 * height), control1: CGPoint(x: 0.12604 * width, y: 0.76701 * height), control2: CGPoint(x: 0.12667 * width, y: 0.77113 * height)) + path.addLine(to: CGPoint(x: 0.1275 * width, y: 0.77542 * height)) + path.addCurve(to: CGPoint(x: 0.22458 * width, y: 0.8725 * height), control1: CGPoint(x: 0.1373 * width, y: 0.82441 * height), control2: CGPoint(x: 0.17559 * width, y: 0.8627 * height)) + path.addLine(to: CGPoint(x: 0.22479 * width, y: 0.8725 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.875 * height), control1: CGPoint(x: 0.23309 * width, y: 0.87418 * height), control2: CGPoint(x: 0.24153 * width, y: 0.87502 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.875 * height)) + path.addQuadCurve(to: CGPoint(x: 0.77542 * width, y: 0.8725 * height), control: CGPoint(x: 0.76312 * width, y: 0.875 * height)) + path.addCurve(to: CGPoint(x: 0.8725 * width, y: 0.77542 * height), control1: CGPoint(x: 0.82441 * width, y: 0.8627 * height), control2: CGPoint(x: 0.8627 * width, y: 0.82441 * height)) + path.addQuadCurve(to: CGPoint(x: 0.875 * width, y: 0.75 * height), control: CGPoint(x: 0.875 * width, y: 0.76313 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.54167 * height)) + path.addLine(to: CGPoint(x: 0.66667 * width, y: 0.54167 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.70833 * height), control1: CGPoint(x: 0.66667 * width, y: 0.63346 * height), control2: CGPoint(x: 0.59179 * width, y: 0.70833 * height)) + path.addCurve(to: CGPoint(x: 0.33333 * width, y: 0.54167 * height), control1: CGPoint(x: 0.40821 * width, y: 0.70833 * height), control2: CGPoint(x: 0.33333 * width, y: 0.63346 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.54167 * height)) path.closeSubpath() return path } @@ -135,33 +134,33 @@ struct InboxIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.75*width, y: 0.10417*height)) - path.addCurve(to: CGPoint(x: 0.89583*width, y: 0.25*height), control1: CGPoint(x: 0.83079*width, y: 0.10417*height), control2: CGPoint(x: 0.89583*width, y: 0.16921*height)) - path.addLine(to: CGPoint(x: 0.89583*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.89583*height), control1: CGPoint(x: 0.89583*width, y: 0.83079*height), control2: CGPoint(x: 0.83079*width, y: 0.89583*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.89583*height)) - path.addCurve(to: CGPoint(x: 0.10417*width, y: 0.75*height), control1: CGPoint(x: 0.16921*width, y: 0.89583*height), control2: CGPoint(x: 0.10417*width, y: 0.83079*height)) - path.addLine(to: CGPoint(x: 0.10417*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.14676*width, y: 0.14676*height), control1: CGPoint(x: 0.10406*width, y: 0.21129*height), control2: CGPoint(x: 0.11938*width, y: 0.17413*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.17413*width, y: 0.11938*height), control2: CGPoint(x: 0.21129*width, y: 0.10406*height)) + path.move(to: CGPoint(x: 0.75 * width, y: 0.10417 * height)) + path.addCurve(to: CGPoint(x: 0.89583 * width, y: 0.25 * height), control1: CGPoint(x: 0.83079 * width, y: 0.10417 * height), control2: CGPoint(x: 0.89583 * width, y: 0.16921 * height)) + path.addLine(to: CGPoint(x: 0.89583 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.89583 * height), control1: CGPoint(x: 0.89583 * width, y: 0.83079 * height), control2: CGPoint(x: 0.83079 * width, y: 0.89583 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.89583 * height)) + path.addCurve(to: CGPoint(x: 0.10417 * width, y: 0.75 * height), control1: CGPoint(x: 0.16921 * width, y: 0.89583 * height), control2: CGPoint(x: 0.10417 * width, y: 0.83079 * height)) + path.addLine(to: CGPoint(x: 0.10417 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.14676 * width, y: 0.14676 * height), control1: CGPoint(x: 0.10406 * width, y: 0.21129 * height), control2: CGPoint(x: 0.11938 * width, y: 0.17413 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.10417 * height), control1: CGPoint(x: 0.17413 * width, y: 0.11938 * height), control2: CGPoint(x: 0.21129 * width, y: 0.10406 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.29167*width, y: 0.22917*height)) - path.addCurve(to: CGPoint(x: 0.22917*width, y: 0.29167*height), control1: CGPoint(x: 0.25704*width, y: 0.22917*height), control2: CGPoint(x: 0.22917*width, y: 0.25704*height)) - path.addLine(to: CGPoint(x: 0.22917*width, y: 0.35775*height)) - path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.41667*height), control1: CGPoint(x: 0.20488*width, y: 0.36629*height), control2: CGPoint(x: 0.1875*width, y: 0.38938*height)) - path.addLine(to: CGPoint(x: 0.1875*width, y: 0.52083*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.52083*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.54167*height)) - path.addCurve(to: CGPoint(x: 0.39676*width, y: 0.64491*height), control1: CGPoint(x: 0.35406*width, y: 0.58038*height), control2: CGPoint(x: 0.36938*width, y: 0.61754*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.6875*height), control1: CGPoint(x: 0.42413*width, y: 0.67228*height), control2: CGPoint(x: 0.46129*width, y: 0.68761*height)) - path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.54167*height), control1: CGPoint(x: 0.58079*width, y: 0.6875*height), control2: CGPoint(x: 0.64583*width, y: 0.62246*height)) - path.addLine(to: CGPoint(x: 0.64583*width, y: 0.52083*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.52083*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.77083*width, y: 0.35775*height), control1: CGPoint(x: 0.8125*width, y: 0.38938*height), control2: CGPoint(x: 0.79512*width, y: 0.36629*height)) - path.addLine(to: CGPoint(x: 0.77083*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.22917*height), control1: CGPoint(x: 0.77083*width, y: 0.25704*height), control2: CGPoint(x: 0.74296*width, y: 0.22917*height)) - path.addLine(to: CGPoint(x: 0.29167*width, y: 0.22917*height)) + path.move(to: CGPoint(x: 0.29167 * width, y: 0.22917 * height)) + path.addCurve(to: CGPoint(x: 0.22917 * width, y: 0.29167 * height), control1: CGPoint(x: 0.25704 * width, y: 0.22917 * height), control2: CGPoint(x: 0.22917 * width, y: 0.25704 * height)) + path.addLine(to: CGPoint(x: 0.22917 * width, y: 0.35775 * height)) + path.addCurve(to: CGPoint(x: 0.1875 * width, y: 0.41667 * height), control1: CGPoint(x: 0.20488 * width, y: 0.36629 * height), control2: CGPoint(x: 0.1875 * width, y: 0.38938 * height)) + path.addLine(to: CGPoint(x: 0.1875 * width, y: 0.52083 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.52083 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.54167 * height)) + path.addCurve(to: CGPoint(x: 0.39676 * width, y: 0.64491 * height), control1: CGPoint(x: 0.35406 * width, y: 0.58038 * height), control2: CGPoint(x: 0.36938 * width, y: 0.61754 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.6875 * height), control1: CGPoint(x: 0.42413 * width, y: 0.67228 * height), control2: CGPoint(x: 0.46129 * width, y: 0.68761 * height)) + path.addCurve(to: CGPoint(x: 0.64583 * width, y: 0.54167 * height), control1: CGPoint(x: 0.58079 * width, y: 0.6875 * height), control2: CGPoint(x: 0.64583 * width, y: 0.62246 * height)) + path.addLine(to: CGPoint(x: 0.64583 * width, y: 0.52083 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.52083 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.77083 * width, y: 0.35775 * height), control1: CGPoint(x: 0.8125 * width, y: 0.38938 * height), control2: CGPoint(x: 0.79512 * width, y: 0.36629 * height)) + path.addLine(to: CGPoint(x: 0.77083 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.22917 * height), control1: CGPoint(x: 0.77083 * width, y: 0.25704 * height), control2: CGPoint(x: 0.74296 * width, y: 0.22917 * height)) + path.addLine(to: CGPoint(x: 0.29167 * width, y: 0.22917 * height)) return path } } @@ -188,17 +187,17 @@ struct DraftIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.5625*width, y: 0.0625*height)) - path.addLine(to: CGPoint(x: 0.5625*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.35417*height), control1: CGPoint(x: 0.5625*width, y: 0.32629*height), control2: CGPoint(x: 0.59037*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.85417*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.85417*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.9375*height), control1: CGPoint(x: 0.85417*width, y: 0.89104*height), control2: CGPoint(x: 0.80771*width, y: 0.9375*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.9375*height)) - path.addCurve(to: CGPoint(x: 0.14583*width, y: 0.83333*height), control1: CGPoint(x: 0.19229*width, y: 0.9375*height), control2: CGPoint(x: 0.14583*width, y: 0.89104*height)) - path.addLine(to: CGPoint(x: 0.14583*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.17628*width, y: 0.09295*height), control1: CGPoint(x: 0.14578*width, y: 0.13902*height), control2: CGPoint(x: 0.15673*width, y: 0.1125*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.0625*height), control1: CGPoint(x: 0.19583*width, y: 0.0734*height), control2: CGPoint(x: 0.22236*width, y: 0.06244*height)) + path.move(to: CGPoint(x: 0.5625 * width, y: 0.0625 * height)) + path.addLine(to: CGPoint(x: 0.5625 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.35417 * height), control1: CGPoint(x: 0.5625 * width, y: 0.32629 * height), control2: CGPoint(x: 0.59037 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.85417 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.85417 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.9375 * height), control1: CGPoint(x: 0.85417 * width, y: 0.89104 * height), control2: CGPoint(x: 0.80771 * width, y: 0.9375 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.9375 * height)) + path.addCurve(to: CGPoint(x: 0.14583 * width, y: 0.83333 * height), control1: CGPoint(x: 0.19229 * width, y: 0.9375 * height), control2: CGPoint(x: 0.14583 * width, y: 0.89104 * height)) + path.addLine(to: CGPoint(x: 0.14583 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.17628 * width, y: 0.09295 * height), control1: CGPoint(x: 0.14578 * width, y: 0.13902 * height), control2: CGPoint(x: 0.15673 * width, y: 0.1125 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.0625 * height), control1: CGPoint(x: 0.19583 * width, y: 0.0734 * height), control2: CGPoint(x: 0.22236 * width, y: 0.06244 * height)) path.closeSubpath() return path } @@ -209,68 +208,68 @@ struct DraftIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.5625*width, y: 0.04167*height)) - path.addCurve(to: CGPoint(x: 0.57725*width, y: 0.04775*height), control1: CGPoint(x: 0.56803*width, y: 0.04166*height), control2: CGPoint(x: 0.57334*width, y: 0.04385*height)) - path.addLine(to: CGPoint(x: 0.86892*width, y: 0.33942*height)) - path.addCurve(to: CGPoint(x: 0.87483*width, y: 0.35417*height), control1: CGPoint(x: 0.87276*width, y: 0.34336*height), control2: CGPoint(x: 0.87489*width, y: 0.34866*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.95833*height), control1: CGPoint(x: 0.875*width, y: 0.90221*height), control2: CGPoint(x: 0.81887*width, y: 0.95833*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.95833*height)) - path.addCurve(to: CGPoint(x: 0.125*width, y: 0.83333*height), control1: CGPoint(x: 0.18112*width, y: 0.95833*height), control2: CGPoint(x: 0.125*width, y: 0.90221*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.04167*height), control1: CGPoint(x: 0.125*width, y: 0.09779*height), control2: CGPoint(x: 0.18113*width, y: 0.04167*height)) + path.move(to: CGPoint(x: 0.5625 * width, y: 0.04167 * height)) + path.addCurve(to: CGPoint(x: 0.57725 * width, y: 0.04775 * height), control1: CGPoint(x: 0.56803 * width, y: 0.04166 * height), control2: CGPoint(x: 0.57334 * width, y: 0.04385 * height)) + path.addLine(to: CGPoint(x: 0.86892 * width, y: 0.33942 * height)) + path.addCurve(to: CGPoint(x: 0.87483 * width, y: 0.35417 * height), control1: CGPoint(x: 0.87276 * width, y: 0.34336 * height), control2: CGPoint(x: 0.87489 * width, y: 0.34866 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.95833 * height), control1: CGPoint(x: 0.875 * width, y: 0.90221 * height), control2: CGPoint(x: 0.81887 * width, y: 0.95833 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.95833 * height)) + path.addCurve(to: CGPoint(x: 0.125 * width, y: 0.83333 * height), control1: CGPoint(x: 0.18112 * width, y: 0.95833 * height), control2: CGPoint(x: 0.125 * width, y: 0.90221 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.04167 * height), control1: CGPoint(x: 0.125 * width, y: 0.09779 * height), control2: CGPoint(x: 0.18113 * width, y: 0.04167 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.25*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.16667*height), control1: CGPoint(x: 0.20346*width, y: 0.08333*height), control2: CGPoint(x: 0.16667*width, y: 0.12012*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.91667*height), control1: CGPoint(x: 0.16667*width, y: 0.87988*height), control2: CGPoint(x: 0.20346*width, y: 0.91667*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.91667*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.83333*height), control1: CGPoint(x: 0.79654*width, y: 0.91667*height), control2: CGPoint(x: 0.83333*width, y: 0.87988*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.375*height)) - path.addLine(to: CGPoint(x: 0.625*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.54167*width, y: 0.29167*height), control1: CGPoint(x: 0.57917*width, y: 0.375*height), control2: CGPoint(x: 0.54167*width, y: 0.3375*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.08333*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.08333*height)) - path.move(to: CGPoint(x: 0.58333*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.33333*height), control1: CGPoint(x: 0.58333*width, y: 0.31512*height), control2: CGPoint(x: 0.60154*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.80388*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.58333*width, y: 0.11279*height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.16667 * height), control1: CGPoint(x: 0.20346 * width, y: 0.08333 * height), control2: CGPoint(x: 0.16667 * width, y: 0.12012 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.91667 * height), control1: CGPoint(x: 0.16667 * width, y: 0.87988 * height), control2: CGPoint(x: 0.20346 * width, y: 0.91667 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.91667 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.83333 * height), control1: CGPoint(x: 0.79654 * width, y: 0.91667 * height), control2: CGPoint(x: 0.83333 * width, y: 0.87988 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.375 * height)) + path.addLine(to: CGPoint(x: 0.625 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.54167 * width, y: 0.29167 * height), control1: CGPoint(x: 0.57917 * width, y: 0.375 * height), control2: CGPoint(x: 0.54167 * width, y: 0.3375 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.08333 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.08333 * height)) + path.move(to: CGPoint(x: 0.58333 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.33333 * height), control1: CGPoint(x: 0.58333 * width, y: 0.31512 * height), control2: CGPoint(x: 0.60154 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.80388 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.58333 * width, y: 0.11279 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.25*height)) - path.addLine(to: CGPoint(x: 0.3125*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.22917*height), control1: CGPoint(x: 0.30099*width, y: 0.25*height), control2: CGPoint(x: 0.29167*width, y: 0.24067*height)) - path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.20833*height), control1: CGPoint(x: 0.29167*width, y: 0.21766*height), control2: CGPoint(x: 0.30099*width, y: 0.20833*height)) + path.move(to: CGPoint(x: 0.5 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.25 * height)) + path.addLine(to: CGPoint(x: 0.3125 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.22917 * height), control1: CGPoint(x: 0.30099 * width, y: 0.25 * height), control2: CGPoint(x: 0.29167 * width, y: 0.24067 * height)) + path.addCurve(to: CGPoint(x: 0.3125 * width, y: 0.20833 * height), control1: CGPoint(x: 0.29167 * width, y: 0.21766 * height), control2: CGPoint(x: 0.30099 * width, y: 0.20833 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.375*height)) - path.addLine(to: CGPoint(x: 0.3125*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.35417*height), control1: CGPoint(x: 0.30099*width, y: 0.375*height), control2: CGPoint(x: 0.29167*width, y: 0.36567*height)) - path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.33333*height), control1: CGPoint(x: 0.29167*width, y: 0.34266*height), control2: CGPoint(x: 0.30099*width, y: 0.33333*height)) + path.move(to: CGPoint(x: 0.5 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.375 * height)) + path.addLine(to: CGPoint(x: 0.3125 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.35417 * height), control1: CGPoint(x: 0.30099 * width, y: 0.375 * height), control2: CGPoint(x: 0.29167 * width, y: 0.36567 * height)) + path.addCurve(to: CGPoint(x: 0.3125 * width, y: 0.33333 * height), control1: CGPoint(x: 0.29167 * width, y: 0.34266 * height), control2: CGPoint(x: 0.30099 * width, y: 0.33333 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.6875*width, y: 0.45833*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.47917*height), control1: CGPoint(x: 0.69901*width, y: 0.45833*height), control2: CGPoint(x: 0.70833*width, y: 0.46766*height)) - path.addCurve(to: CGPoint(x: 0.6875*width, y: 0.5*height), control1: CGPoint(x: 0.70833*width, y: 0.49067*height), control2: CGPoint(x: 0.69901*width, y: 0.5*height)) - path.addLine(to: CGPoint(x: 0.3125*width, y: 0.5*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.47917*height), control1: CGPoint(x: 0.30099*width, y: 0.5*height), control2: CGPoint(x: 0.29167*width, y: 0.49067*height)) - path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.45833*height), control1: CGPoint(x: 0.29167*width, y: 0.46766*height), control2: CGPoint(x: 0.30099*width, y: 0.45833*height)) + path.move(to: CGPoint(x: 0.6875 * width, y: 0.45833 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.47917 * height), control1: CGPoint(x: 0.69901 * width, y: 0.45833 * height), control2: CGPoint(x: 0.70833 * width, y: 0.46766 * height)) + path.addCurve(to: CGPoint(x: 0.6875 * width, y: 0.5 * height), control1: CGPoint(x: 0.70833 * width, y: 0.49067 * height), control2: CGPoint(x: 0.69901 * width, y: 0.5 * height)) + path.addLine(to: CGPoint(x: 0.3125 * width, y: 0.5 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.47917 * height), control1: CGPoint(x: 0.30099 * width, y: 0.5 * height), control2: CGPoint(x: 0.29167 * width, y: 0.49067 * height)) + path.addCurve(to: CGPoint(x: 0.3125 * width, y: 0.45833 * height), control1: CGPoint(x: 0.29167 * width, y: 0.46766 * height), control2: CGPoint(x: 0.30099 * width, y: 0.45833 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5625*width, y: 0.58333*height)) - path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.60417*height), control1: CGPoint(x: 0.57401*width, y: 0.58333*height), control2: CGPoint(x: 0.58333*width, y: 0.59266*height)) - path.addCurve(to: CGPoint(x: 0.5625*width, y: 0.625*height), control1: CGPoint(x: 0.58333*width, y: 0.61567*height), control2: CGPoint(x: 0.57401*width, y: 0.625*height)) - path.addLine(to: CGPoint(x: 0.3125*width, y: 0.625*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.60417*height), control1: CGPoint(x: 0.30099*width, y: 0.625*height), control2: CGPoint(x: 0.29167*width, y: 0.61567*height)) - path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.58333*height), control1: CGPoint(x: 0.29167*width, y: 0.59266*height), control2: CGPoint(x: 0.30099*width, y: 0.58333*height)) + path.move(to: CGPoint(x: 0.5625 * width, y: 0.58333 * height)) + path.addCurve(to: CGPoint(x: 0.58333 * width, y: 0.60417 * height), control1: CGPoint(x: 0.57401 * width, y: 0.58333 * height), control2: CGPoint(x: 0.58333 * width, y: 0.59266 * height)) + path.addCurve(to: CGPoint(x: 0.5625 * width, y: 0.625 * height), control1: CGPoint(x: 0.58333 * width, y: 0.61567 * height), control2: CGPoint(x: 0.57401 * width, y: 0.625 * height)) + path.addLine(to: CGPoint(x: 0.3125 * width, y: 0.625 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.60417 * height), control1: CGPoint(x: 0.30099 * width, y: 0.625 * height), control2: CGPoint(x: 0.29167 * width, y: 0.61567 * height)) + path.addCurve(to: CGPoint(x: 0.3125 * width, y: 0.58333 * height), control1: CGPoint(x: 0.29167 * width, y: 0.59266 * height), control2: CGPoint(x: 0.30099 * width, y: 0.58333 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.6875*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.76596*height), control1: CGPoint(x: 0.69904*width, y: 0.75*height), control2: CGPoint(x: 0.70833*width, y: 0.75712*height)) - path.addLine(to: CGPoint(x: 0.70833*width, y: 0.77571*height)) - path.addCurve(to: CGPoint(x: 0.6875*width, y: 0.79167*height), control1: CGPoint(x: 0.70833*width, y: 0.78458*height), control2: CGPoint(x: 0.69904*width, y: 0.79167*height)) - path.addLine(to: CGPoint(x: 0.4375*width, y: 0.79167*height)) - path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.77571*height), control1: CGPoint(x: 0.42596*width, y: 0.79167*height), control2: CGPoint(x: 0.41667*width, y: 0.78454*height)) - path.addLine(to: CGPoint(x: 0.41667*width, y: 0.76596*height)) - path.addCurve(to: CGPoint(x: 0.4375*width, y: 0.75*height), control1: CGPoint(x: 0.41667*width, y: 0.75708*height), control2: CGPoint(x: 0.42596*width, y: 0.75*height)) + path.move(to: CGPoint(x: 0.6875 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.76596 * height), control1: CGPoint(x: 0.69904 * width, y: 0.75 * height), control2: CGPoint(x: 0.70833 * width, y: 0.75712 * height)) + path.addLine(to: CGPoint(x: 0.70833 * width, y: 0.77571 * height)) + path.addCurve(to: CGPoint(x: 0.6875 * width, y: 0.79167 * height), control1: CGPoint(x: 0.70833 * width, y: 0.78458 * height), control2: CGPoint(x: 0.69904 * width, y: 0.79167 * height)) + path.addLine(to: CGPoint(x: 0.4375 * width, y: 0.79167 * height)) + path.addCurve(to: CGPoint(x: 0.41667 * width, y: 0.77571 * height), control1: CGPoint(x: 0.42596 * width, y: 0.79167 * height), control2: CGPoint(x: 0.41667 * width, y: 0.78454 * height)) + path.addLine(to: CGPoint(x: 0.41667 * width, y: 0.76596 * height)) + path.addCurve(to: CGPoint(x: 0.4375 * width, y: 0.75 * height), control1: CGPoint(x: 0.41667 * width, y: 0.75708 * height), control2: CGPoint(x: 0.42596 * width, y: 0.75 * height)) path.closeSubpath() return path } @@ -298,17 +297,17 @@ struct SentIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.42062*width, y: 0.57917*height)) - path.addLine(to: CGPoint(x: 0.15492*width, y: 0.47825*height)) - path.addCurve(to: CGPoint(x: 0.10429*width, y: 0.42117*height), control1: CGPoint(x: 0.12658*width, y: 0.47437*height), control2: CGPoint(x: 0.10429*width, y: 0.45029*height)) - path.addCurve(to: CGPoint(x: 0.15708*width, y: 0.35867*height), control1: CGPoint(x: 0.10429*width, y: 0.392*height), control2: CGPoint(x: 0.12758*width, y: 0.36658*height)) - path.addLine(to: CGPoint(x: 0.758*width, y: 0.12683*height)) - path.addCurve(to: CGPoint(x: 0.84287*width, y: 0.10417*height), control1: CGPoint(x: 0.79183*width, y: 0.11317*height), control2: CGPoint(x: 0.81371*width, y: 0.10417*height)) - path.addCurve(to: CGPoint(x: 0.89567*width, y: 0.15696*height), control1: CGPoint(x: 0.87204*width, y: 0.10417*height), control2: CGPoint(x: 0.89567*width, y: 0.12783*height)) - path.addCurve(to: CGPoint(x: 0.87404*width, y: 0.23138*height), control1: CGPoint(x: 0.89567*width, y: 0.18608*height), control2: CGPoint(x: 0.88321*width, y: 0.20313*height)) - path.addLine(to: CGPoint(x: 0.64117*width, y: 0.84596*height)) - path.addCurve(to: CGPoint(x: 0.579*width, y: 0.89583*height), control1: CGPoint(x: 0.62892*width, y: 0.87304*height), control2: CGPoint(x: 0.60817*width, y: 0.89583*height)) - path.addCurve(to: CGPoint(x: 0.52042*width, y: 0.84458*height), control1: CGPoint(x: 0.54954*width, y: 0.89545*height), control2: CGPoint(x: 0.52471*width, y: 0.87373*height)) + path.move(to: CGPoint(x: 0.42062 * width, y: 0.57917 * height)) + path.addLine(to: CGPoint(x: 0.15492 * width, y: 0.47825 * height)) + path.addCurve(to: CGPoint(x: 0.10429 * width, y: 0.42117 * height), control1: CGPoint(x: 0.12658 * width, y: 0.47437 * height), control2: CGPoint(x: 0.10429 * width, y: 0.45029 * height)) + path.addCurve(to: CGPoint(x: 0.15708 * width, y: 0.35867 * height), control1: CGPoint(x: 0.10429 * width, y: 0.392 * height), control2: CGPoint(x: 0.12758 * width, y: 0.36658 * height)) + path.addLine(to: CGPoint(x: 0.758 * width, y: 0.12683 * height)) + path.addCurve(to: CGPoint(x: 0.84287 * width, y: 0.10417 * height), control1: CGPoint(x: 0.79183 * width, y: 0.11317 * height), control2: CGPoint(x: 0.81371 * width, y: 0.10417 * height)) + path.addCurve(to: CGPoint(x: 0.89567 * width, y: 0.15696 * height), control1: CGPoint(x: 0.87204 * width, y: 0.10417 * height), control2: CGPoint(x: 0.89567 * width, y: 0.12783 * height)) + path.addCurve(to: CGPoint(x: 0.87404 * width, y: 0.23138 * height), control1: CGPoint(x: 0.89567 * width, y: 0.18608 * height), control2: CGPoint(x: 0.88321 * width, y: 0.20313 * height)) + path.addLine(to: CGPoint(x: 0.64117 * width, y: 0.84596 * height)) + path.addCurve(to: CGPoint(x: 0.579 * width, y: 0.89583 * height), control1: CGPoint(x: 0.62892 * width, y: 0.87304 * height), control2: CGPoint(x: 0.60817 * width, y: 0.89583 * height)) + path.addCurve(to: CGPoint(x: 0.52042 * width, y: 0.84458 * height), control1: CGPoint(x: 0.54954 * width, y: 0.89545 * height), control2: CGPoint(x: 0.52471 * width, y: 0.87373 * height)) path.closeSubpath() return path } @@ -319,50 +318,50 @@ struct SentIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.84288*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.9165*width, y: 0.157*height), control1: CGPoint(x: 0.88325*width, y: 0.08333*height), control2: CGPoint(x: 0.9165*width, y: 0.11658*height)) - path.addCurve(to: CGPoint(x: 0.89379*width, y: 0.23787*height), control1: CGPoint(x: 0.9165*width, y: 0.19204*height), control2: CGPoint(x: 0.90204*width, y: 0.2125*height)) - path.addLine(to: CGPoint(x: 0.89346*width, y: 0.23879*height)) - path.addLine(to: CGPoint(x: 0.66063*width, y: 0.85337*height)) - path.addLine(to: CGPoint(x: 0.66008*width, y: 0.8545*height)) - path.addCurve(to: CGPoint(x: 0.57904*width, y: 0.91667*height), control1: CGPoint(x: 0.646*width, y: 0.88567*height), control2: CGPoint(x: 0.61904*width, y: 0.91667*height)) - path.addCurve(to: CGPoint(x: 0.52663*width, y: 0.89471*height), control1: CGPoint(x: 0.55817*width, y: 0.91667*height), control2: CGPoint(x: 0.53996*width, y: 0.90729*height)) - path.addCurve(to: CGPoint(x: 0.50062*width, y: 0.85125*height), control1: CGPoint(x: 0.51379*width, y: 0.88258*height), control2: CGPoint(x: 0.50483*width, y: 0.8675*height)) - path.addLine(to: CGPoint(x: 0.50104*width, y: 0.85221*height)) - path.addLine(to: CGPoint(x: 0.50017*width, y: 0.84937*height)) - path.addLine(to: CGPoint(x: 0.50062*width, y: 0.85125*height)) - path.addLine(to: CGPoint(x: 0.40062*width, y: 0.59938*height)) - path.addLine(to: CGPoint(x: 0.14846*width, y: 0.49821*height)) - path.addLine(to: CGPoint(x: 0.15112*width, y: 0.49879*height)) - path.addLine(to: CGPoint(x: 0.14712*width, y: 0.49762*height)) - path.addLine(to: CGPoint(x: 0.14846*width, y: 0.49821*height)) - path.addCurve(to: CGPoint(x: 0.0835*width, y: 0.42112*height), control1: CGPoint(x: 0.115*width, y: 0.49071*height), control2: CGPoint(x: 0.0835*width, y: 0.46162*height)) - path.addCurve(to: CGPoint(x: 0.1505*width, y: 0.33896*height), control1: CGPoint(x: 0.0835*width, y: 0.38133*height), control2: CGPoint(x: 0.11342*width, y: 0.34937*height)) - path.addLine(to: CGPoint(x: 0.7505*width, y: 0.10733*height)) - path.addCurve(to: CGPoint(x: 0.84287*width, y: 0.08333*height), control1: CGPoint(x: 0.78412*width, y: 0.09379*height), control2: CGPoint(x: 0.80954*width, y: 0.08333*height)) - path.move(to: CGPoint(x: 0.84287*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.76583*width, y: 0.14617*height), control1: CGPoint(x: 0.818*width, y: 0.125*height), control2: CGPoint(x: 0.79971*width, y: 0.1325*height)) - path.addLine(to: CGPoint(x: 0.7655*width, y: 0.14625*height)) - path.addLine(to: CGPoint(x: 0.16467*width, y: 0.37817*height)) - path.addLine(to: CGPoint(x: 0.16246*width, y: 0.37875*height)) - path.addCurve(to: CGPoint(x: 0.12513*width, y: 0.42117*height), control1: CGPoint(x: 0.14113*width, y: 0.3845*height), control2: CGPoint(x: 0.12513*width, y: 0.40308*height)) - path.addCurve(to: CGPoint(x: 0.15888*width, y: 0.45783*height), control1: CGPoint(x: 0.12513*width, y: 0.43783*height), control2: CGPoint(x: 0.14421*width, y: 0.45508*height)) - path.addCurve(to: CGPoint(x: 0.16263*width, y: 0.459*height), control1: CGPoint(x: 0.16016*width, y: 0.4581*height), control2: CGPoint(x: 0.16141*width, y: 0.45849*height)) - path.addLine(to: CGPoint(x: 0.41167*width, y: 0.55892*height)) - path.addLine(to: CGPoint(x: 0.58933*width, y: 0.38108*height)) - path.addCurve(to: CGPoint(x: 0.60945*width, y: 0.37562*height), control1: CGPoint(x: 0.59458*width, y: 0.3758*height), control2: CGPoint(x: 0.60225*width, y: 0.37372*height)) - path.addCurve(to: CGPoint(x: 0.62424*width, y: 0.3903*height), control1: CGPoint(x: 0.61665*width, y: 0.37752*height), control2: CGPoint(x: 0.62229*width, y: 0.38312*height)) - path.addCurve(to: CGPoint(x: 0.61892*width, y: 0.41046*height), control1: CGPoint(x: 0.62619*width, y: 0.39749*height), control2: CGPoint(x: 0.62416*width, y: 0.40517*height)) - path.addLine(to: CGPoint(x: 0.44108*width, y: 0.58837*height)) - path.addLine(to: CGPoint(x: 0.53971*width, y: 0.83683*height)) - path.addCurve(to: CGPoint(x: 0.54063*width, y: 0.83983*height), control1: CGPoint(x: 0.54005*width, y: 0.83782*height), control2: CGPoint(x: 0.54036*width, y: 0.83882*height)) - path.addCurve(to: CGPoint(x: 0.55529*width, y: 0.86442*height), control1: CGPoint(x: 0.54322*width, y: 0.84919*height), control2: CGPoint(x: 0.54829*width, y: 0.85769*height)) - path.addCurve(to: CGPoint(x: 0.57904*width, y: 0.875*height), control1: CGPoint(x: 0.5625*width, y: 0.87125*height), control2: CGPoint(x: 0.57071*width, y: 0.875*height)) - path.addCurve(to: CGPoint(x: 0.62208*width, y: 0.8375*height), control1: CGPoint(x: 0.59725*width, y: 0.875*height), control2: CGPoint(x: 0.61167*width, y: 0.86042*height)) - path.addLine(to: CGPoint(x: 0.85425*width, y: 0.225*height)) - path.addCurve(to: CGPoint(x: 0.87483*width, y: 0.157*height), control1: CGPoint(x: 0.86442*width, y: 0.19383*height), control2: CGPoint(x: 0.87483*width, y: 0.18021*height)) - path.addCurve(to: CGPoint(x: 0.86557*width, y: 0.13429*height), control1: CGPoint(x: 0.87492*width, y: 0.14849*height), control2: CGPoint(x: 0.87159*width, y: 0.14031*height)) - path.addCurve(to: CGPoint(x: 0.84288*width, y: 0.125*height), control1: CGPoint(x: 0.85956*width, y: 0.12827*height), control2: CGPoint(x: 0.85138*width, y: 0.12492*height)) + path.move(to: CGPoint(x: 0.84288 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.9165 * width, y: 0.157 * height), control1: CGPoint(x: 0.88325 * width, y: 0.08333 * height), control2: CGPoint(x: 0.9165 * width, y: 0.11658 * height)) + path.addCurve(to: CGPoint(x: 0.89379 * width, y: 0.23787 * height), control1: CGPoint(x: 0.9165 * width, y: 0.19204 * height), control2: CGPoint(x: 0.90204 * width, y: 0.2125 * height)) + path.addLine(to: CGPoint(x: 0.89346 * width, y: 0.23879 * height)) + path.addLine(to: CGPoint(x: 0.66063 * width, y: 0.85337 * height)) + path.addLine(to: CGPoint(x: 0.66008 * width, y: 0.8545 * height)) + path.addCurve(to: CGPoint(x: 0.57904 * width, y: 0.91667 * height), control1: CGPoint(x: 0.646 * width, y: 0.88567 * height), control2: CGPoint(x: 0.61904 * width, y: 0.91667 * height)) + path.addCurve(to: CGPoint(x: 0.52663 * width, y: 0.89471 * height), control1: CGPoint(x: 0.55817 * width, y: 0.91667 * height), control2: CGPoint(x: 0.53996 * width, y: 0.90729 * height)) + path.addCurve(to: CGPoint(x: 0.50062 * width, y: 0.85125 * height), control1: CGPoint(x: 0.51379 * width, y: 0.88258 * height), control2: CGPoint(x: 0.50483 * width, y: 0.8675 * height)) + path.addLine(to: CGPoint(x: 0.50104 * width, y: 0.85221 * height)) + path.addLine(to: CGPoint(x: 0.50017 * width, y: 0.84937 * height)) + path.addLine(to: CGPoint(x: 0.50062 * width, y: 0.85125 * height)) + path.addLine(to: CGPoint(x: 0.40062 * width, y: 0.59938 * height)) + path.addLine(to: CGPoint(x: 0.14846 * width, y: 0.49821 * height)) + path.addLine(to: CGPoint(x: 0.15112 * width, y: 0.49879 * height)) + path.addLine(to: CGPoint(x: 0.14712 * width, y: 0.49762 * height)) + path.addLine(to: CGPoint(x: 0.14846 * width, y: 0.49821 * height)) + path.addCurve(to: CGPoint(x: 0.0835 * width, y: 0.42112 * height), control1: CGPoint(x: 0.115 * width, y: 0.49071 * height), control2: CGPoint(x: 0.0835 * width, y: 0.46162 * height)) + path.addCurve(to: CGPoint(x: 0.1505 * width, y: 0.33896 * height), control1: CGPoint(x: 0.0835 * width, y: 0.38133 * height), control2: CGPoint(x: 0.11342 * width, y: 0.34937 * height)) + path.addLine(to: CGPoint(x: 0.7505 * width, y: 0.10733 * height)) + path.addCurve(to: CGPoint(x: 0.84287 * width, y: 0.08333 * height), control1: CGPoint(x: 0.78412 * width, y: 0.09379 * height), control2: CGPoint(x: 0.80954 * width, y: 0.08333 * height)) + path.move(to: CGPoint(x: 0.84287 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.76583 * width, y: 0.14617 * height), control1: CGPoint(x: 0.818 * width, y: 0.125 * height), control2: CGPoint(x: 0.79971 * width, y: 0.1325 * height)) + path.addLine(to: CGPoint(x: 0.7655 * width, y: 0.14625 * height)) + path.addLine(to: CGPoint(x: 0.16467 * width, y: 0.37817 * height)) + path.addLine(to: CGPoint(x: 0.16246 * width, y: 0.37875 * height)) + path.addCurve(to: CGPoint(x: 0.12513 * width, y: 0.42117 * height), control1: CGPoint(x: 0.14113 * width, y: 0.3845 * height), control2: CGPoint(x: 0.12513 * width, y: 0.40308 * height)) + path.addCurve(to: CGPoint(x: 0.15888 * width, y: 0.45783 * height), control1: CGPoint(x: 0.12513 * width, y: 0.43783 * height), control2: CGPoint(x: 0.14421 * width, y: 0.45508 * height)) + path.addCurve(to: CGPoint(x: 0.16263 * width, y: 0.459 * height), control1: CGPoint(x: 0.16016 * width, y: 0.4581 * height), control2: CGPoint(x: 0.16141 * width, y: 0.45849 * height)) + path.addLine(to: CGPoint(x: 0.41167 * width, y: 0.55892 * height)) + path.addLine(to: CGPoint(x: 0.58933 * width, y: 0.38108 * height)) + path.addCurve(to: CGPoint(x: 0.60945 * width, y: 0.37562 * height), control1: CGPoint(x: 0.59458 * width, y: 0.3758 * height), control2: CGPoint(x: 0.60225 * width, y: 0.37372 * height)) + path.addCurve(to: CGPoint(x: 0.62424 * width, y: 0.3903 * height), control1: CGPoint(x: 0.61665 * width, y: 0.37752 * height), control2: CGPoint(x: 0.62229 * width, y: 0.38312 * height)) + path.addCurve(to: CGPoint(x: 0.61892 * width, y: 0.41046 * height), control1: CGPoint(x: 0.62619 * width, y: 0.39749 * height), control2: CGPoint(x: 0.62416 * width, y: 0.40517 * height)) + path.addLine(to: CGPoint(x: 0.44108 * width, y: 0.58837 * height)) + path.addLine(to: CGPoint(x: 0.53971 * width, y: 0.83683 * height)) + path.addCurve(to: CGPoint(x: 0.54063 * width, y: 0.83983 * height), control1: CGPoint(x: 0.54005 * width, y: 0.83782 * height), control2: CGPoint(x: 0.54036 * width, y: 0.83882 * height)) + path.addCurve(to: CGPoint(x: 0.55529 * width, y: 0.86442 * height), control1: CGPoint(x: 0.54322 * width, y: 0.84919 * height), control2: CGPoint(x: 0.54829 * width, y: 0.85769 * height)) + path.addCurve(to: CGPoint(x: 0.57904 * width, y: 0.875 * height), control1: CGPoint(x: 0.5625 * width, y: 0.87125 * height), control2: CGPoint(x: 0.57071 * width, y: 0.875 * height)) + path.addCurve(to: CGPoint(x: 0.62208 * width, y: 0.8375 * height), control1: CGPoint(x: 0.59725 * width, y: 0.875 * height), control2: CGPoint(x: 0.61167 * width, y: 0.86042 * height)) + path.addLine(to: CGPoint(x: 0.85425 * width, y: 0.225 * height)) + path.addCurve(to: CGPoint(x: 0.87483 * width, y: 0.157 * height), control1: CGPoint(x: 0.86442 * width, y: 0.19383 * height), control2: CGPoint(x: 0.87483 * width, y: 0.18021 * height)) + path.addCurve(to: CGPoint(x: 0.86557 * width, y: 0.13429 * height), control1: CGPoint(x: 0.87492 * width, y: 0.14849 * height), control2: CGPoint(x: 0.87159 * width, y: 0.14031 * height)) + path.addCurve(to: CGPoint(x: 0.84288 * width, y: 0.125 * height), control1: CGPoint(x: 0.85956 * width, y: 0.12827 * height), control2: CGPoint(x: 0.85138 * width, y: 0.12492 * height)) return path } } @@ -389,29 +388,29 @@ struct ArchiveIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.75*width, y: 0.10417*height)) - path.addCurve(to: CGPoint(x: 0.89583*width, y: 0.25*height), control1: CGPoint(x: 0.83079*width, y: 0.10417*height), control2: CGPoint(x: 0.89583*width, y: 0.16921*height)) - path.addLine(to: CGPoint(x: 0.89583*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.89583*height), control1: CGPoint(x: 0.89583*width, y: 0.83079*height), control2: CGPoint(x: 0.83079*width, y: 0.89583*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.89583*height)) - path.addCurve(to: CGPoint(x: 0.10417*width, y: 0.75*height), control1: CGPoint(x: 0.16921*width, y: 0.89583*height), control2: CGPoint(x: 0.10417*width, y: 0.83079*height)) - path.addLine(to: CGPoint(x: 0.10417*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.14676*width, y: 0.14676*height), control1: CGPoint(x: 0.10406*width, y: 0.21129*height), control2: CGPoint(x: 0.11938*width, y: 0.17413*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.17413*width, y: 0.11938*height), control2: CGPoint(x: 0.21129*width, y: 0.10406*height)) + path.move(to: CGPoint(x: 0.75 * width, y: 0.10417 * height)) + path.addCurve(to: CGPoint(x: 0.89583 * width, y: 0.25 * height), control1: CGPoint(x: 0.83079 * width, y: 0.10417 * height), control2: CGPoint(x: 0.89583 * width, y: 0.16921 * height)) + path.addLine(to: CGPoint(x: 0.89583 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.89583 * height), control1: CGPoint(x: 0.89583 * width, y: 0.83079 * height), control2: CGPoint(x: 0.83079 * width, y: 0.89583 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.89583 * height)) + path.addCurve(to: CGPoint(x: 0.10417 * width, y: 0.75 * height), control1: CGPoint(x: 0.16921 * width, y: 0.89583 * height), control2: CGPoint(x: 0.10417 * width, y: 0.83079 * height)) + path.addLine(to: CGPoint(x: 0.10417 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.14676 * width, y: 0.14676 * height), control1: CGPoint(x: 0.10406 * width, y: 0.21129 * height), control2: CGPoint(x: 0.11938 * width, y: 0.17413 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.10417 * height), control1: CGPoint(x: 0.17413 * width, y: 0.11938 * height), control2: CGPoint(x: 0.21129 * width, y: 0.10406 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.77083*width, y: 0.19108*height)) - path.addCurve(to: CGPoint(x: 0.22917*width, y: 0.19108*height), control1: CGPoint(x: 0.60417*width, y: 0.1875*height), control2: CGPoint(x: 0.39583*width, y: 0.19108*height)) - path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.25*height), control1: CGPoint(x: 0.20488*width, y: 0.19963*height), control2: CGPoint(x: 0.1875*width, y: 0.22271*height)) - path.addLine(to: CGPoint(x: 0.1875*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.39676*width, y: 0.47824*height), control1: CGPoint(x: 0.35406*width, y: 0.41371*height), control2: CGPoint(x: 0.36938*width, y: 0.45087*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.52083*height), control1: CGPoint(x: 0.42413*width, y: 0.50562*height), control2: CGPoint(x: 0.46129*width, y: 0.52094*height)) - path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.375*height), control1: CGPoint(x: 0.58079*width, y: 0.52083*height), control2: CGPoint(x: 0.64583*width, y: 0.45579*height)) - path.addLine(to: CGPoint(x: 0.64583*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.35417*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.77083*width, y: 0.19108*height), control1: CGPoint(x: 0.8125*width, y: 0.22271*height), control2: CGPoint(x: 0.79512*width, y: 0.19963*height)) + path.move(to: CGPoint(x: 0.77083 * width, y: 0.19108 * height)) + path.addCurve(to: CGPoint(x: 0.22917 * width, y: 0.19108 * height), control1: CGPoint(x: 0.60417 * width, y: 0.1875 * height), control2: CGPoint(x: 0.39583 * width, y: 0.19108 * height)) + path.addCurve(to: CGPoint(x: 0.1875 * width, y: 0.25 * height), control1: CGPoint(x: 0.20488 * width, y: 0.19963 * height), control2: CGPoint(x: 0.1875 * width, y: 0.22271 * height)) + path.addLine(to: CGPoint(x: 0.1875 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.39676 * width, y: 0.47824 * height), control1: CGPoint(x: 0.35406 * width, y: 0.41371 * height), control2: CGPoint(x: 0.36938 * width, y: 0.45087 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.52083 * height), control1: CGPoint(x: 0.42413 * width, y: 0.50562 * height), control2: CGPoint(x: 0.46129 * width, y: 0.52094 * height)) + path.addCurve(to: CGPoint(x: 0.64583 * width, y: 0.375 * height), control1: CGPoint(x: 0.58079 * width, y: 0.52083 * height), control2: CGPoint(x: 0.64583 * width, y: 0.45579 * height)) + path.addLine(to: CGPoint(x: 0.64583 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.35417 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.77083 * width, y: 0.19108 * height), control1: CGPoint(x: 0.8125 * width, y: 0.22271 * height), control2: CGPoint(x: 0.79512 * width, y: 0.19963 * height)) return path } } @@ -421,110 +420,110 @@ struct ArchiveIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.75*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.25*height), control1: CGPoint(x: 0.84196*width, y: 0.08333*height), control2: CGPoint(x: 0.91667*width, y: 0.15804*height)) - path.addLine(to: CGPoint(x: 0.91667*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.91667*height), control1: CGPoint(x: 0.91667*width, y: 0.84196*height), control2: CGPoint(x: 0.84196*width, y: 0.91667*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.91667*height)) - path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.75*height), control1: CGPoint(x: 0.15804*width, y: 0.91667*height), control2: CGPoint(x: 0.08333*width, y: 0.84196*height)) - path.addLine(to: CGPoint(x: 0.08333*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.08333*width, y: 0.15804*height), control2: CGPoint(x: 0.15804*width, y: 0.08333*height)) + path.move(to: CGPoint(x: 0.75 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.91667 * width, y: 0.25 * height), control1: CGPoint(x: 0.84196 * width, y: 0.08333 * height), control2: CGPoint(x: 0.91667 * width, y: 0.15804 * height)) + path.addLine(to: CGPoint(x: 0.91667 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.91667 * height), control1: CGPoint(x: 0.91667 * width, y: 0.84196 * height), control2: CGPoint(x: 0.84196 * width, y: 0.91667 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.91667 * height)) + path.addCurve(to: CGPoint(x: 0.08333 * width, y: 0.75 * height), control1: CGPoint(x: 0.15804 * width, y: 0.91667 * height), control2: CGPoint(x: 0.08333 * width, y: 0.84196 * height)) + path.addLine(to: CGPoint(x: 0.08333 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.08333 * height), control1: CGPoint(x: 0.08333 * width, y: 0.15804 * height), control2: CGPoint(x: 0.15804 * width, y: 0.08333 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.addQuadCurve(to: CGPoint(x: 0.22462*width, y: 0.1275*height), control: CGPoint(x: 0.23692*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.12754*width, y: 0.22458*height), control1: CGPoint(x: 0.17563*width, y: 0.1373*height), control2: CGPoint(x: 0.13734*width, y: 0.17559*height)) - path.addLine(to: CGPoint(x: 0.12754*width, y: 0.22479*height)) - path.addQuadCurve(to: CGPoint(x: 0.12567*width, y: 0.23713*height), control: CGPoint(x: 0.12629*width, y: 0.23083*height)) - path.addLine(to: CGPoint(x: 0.12567*width, y: 0.23721*height)) - path.addCurve(to: CGPoint(x: 0.125*width, y: 0.25*height), control1: CGPoint(x: 0.12523*width, y: 0.24146*height), control2: CGPoint(x: 0.125*width, y: 0.24573*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.17796*height), control1: CGPoint(x: 0.16667*width, y: 0.21933*height), control2: CGPoint(x: 0.1835*width, y: 0.1925*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.16667*height), control1: CGPoint(x: 0.21183*width, y: 0.17679*height), control2: CGPoint(x: 0.22917*width, y: 0.16667*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.17796*height), control1: CGPoint(x: 0.76762*width, y: 0.16667*height), control2: CGPoint(x: 0.77083*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.25*height), control1: CGPoint(x: 0.8165*width, y: 0.19246*height), control2: CGPoint(x: 0.83333*width, y: 0.21933*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.25*height)) - path.addQuadCurve(to: CGPoint(x: 0.87246*width, y: 0.22462*height), control: CGPoint(x: 0.875*width, y: 0.23692*height)) - path.addCurve(to: CGPoint(x: 0.77537*width, y: 0.12754*height), control1: CGPoint(x: 0.86266*width, y: 0.17563*height), control2: CGPoint(x: 0.82437*width, y: 0.13734*height)) - path.addLine(to: CGPoint(x: 0.77521*width, y: 0.12754*height)) - path.addQuadCurve(to: CGPoint(x: 0.76287*width, y: 0.12567*height), control: CGPoint(x: 0.76917*width, y: 0.12629*height)) - path.addLine(to: CGPoint(x: 0.76279*width, y: 0.12567*height)) - path.addQuadCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control: CGPoint(x: 0.7565*width, y: 0.125*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.move(to: CGPoint(x: 0.25*width, y: 0.20833*height)) - path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.25*height), control1: CGPoint(x: 0.22654*width, y: 0.20833*height), control2: CGPoint(x: 0.20833*width, y: 0.22654*height)) - path.addLine(to: CGPoint(x: 0.20833*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.33333*height)) - path.addCurve(to: CGPoint(x: 0.375*width, y: 0.35417*height), control1: CGPoint(x: 0.36567*width, y: 0.33333*height), control2: CGPoint(x: 0.375*width, y: 0.34266*height)) - path.addLine(to: CGPoint(x: 0.375*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.5*height), control1: CGPoint(x: 0.375*width, y: 0.45037*height), control2: CGPoint(x: 0.43071*width, y: 0.5*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.375*height), control1: CGPoint(x: 0.56929*width, y: 0.5*height), control2: CGPoint(x: 0.625*width, y: 0.44429*height)) - path.addLine(to: CGPoint(x: 0.625*width, y: 0.35417*height)) - path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.33333*height), control1: CGPoint(x: 0.625*width, y: 0.34266*height), control2: CGPoint(x: 0.63433*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.20833*height), control1: CGPoint(x: 0.79167*width, y: 0.22654*height), control2: CGPoint(x: 0.77346*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.20833*height)) - path.move(to: CGPoint(x: 0.125*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.12562*width, y: 0.76279*height), control1: CGPoint(x: 0.12499*width, y: 0.75427*height), control2: CGPoint(x: 0.1252*width, y: 0.75854*height)) - path.addLine(to: CGPoint(x: 0.12563*width, y: 0.76288*height)) - path.addCurve(to: CGPoint(x: 0.1275*width, y: 0.77521*height), control1: CGPoint(x: 0.12604*width, y: 0.76701*height), control2: CGPoint(x: 0.12667*width, y: 0.77113*height)) - path.addLine(to: CGPoint(x: 0.1275*width, y: 0.77542*height)) - path.addCurve(to: CGPoint(x: 0.22458*width, y: 0.8725*height), control1: CGPoint(x: 0.1373*width, y: 0.82441*height), control2: CGPoint(x: 0.17559*width, y: 0.8627*height)) - path.addLine(to: CGPoint(x: 0.22479*width, y: 0.8725*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.875*height), control1: CGPoint(x: 0.23309*width, y: 0.87418*height), control2: CGPoint(x: 0.24153*width, y: 0.87502*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.875*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.83333*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.83333*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.875*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.875*height)) - path.addQuadCurve(to: CGPoint(x: 0.77542*width, y: 0.8725*height), control: CGPoint(x: 0.76312*width, y: 0.875*height)) - path.addCurve(to: CGPoint(x: 0.8725*width, y: 0.77542*height), control1: CGPoint(x: 0.82441*width, y: 0.8627*height), control2: CGPoint(x: 0.8627*width, y: 0.82441*height)) - path.addQuadCurve(to: CGPoint(x: 0.875*width, y: 0.75*height), control: CGPoint(x: 0.875*width, y: 0.76313*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.375*height)) - path.addLine(to: CGPoint(x: 0.66667*width, y: 0.375*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.54167*height), control1: CGPoint(x: 0.66667*width, y: 0.46679*height), control2: CGPoint(x: 0.59179*width, y: 0.54167*height)) - path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.375*height), control1: CGPoint(x: 0.40821*width, y: 0.54167*height), control2: CGPoint(x: 0.33333*width, y: 0.47917*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.375*height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.addQuadCurve(to: CGPoint(x: 0.22462 * width, y: 0.1275 * height), control: CGPoint(x: 0.23692 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.12754 * width, y: 0.22458 * height), control1: CGPoint(x: 0.17563 * width, y: 0.1373 * height), control2: CGPoint(x: 0.13734 * width, y: 0.17559 * height)) + path.addLine(to: CGPoint(x: 0.12754 * width, y: 0.22479 * height)) + path.addQuadCurve(to: CGPoint(x: 0.12567 * width, y: 0.23713 * height), control: CGPoint(x: 0.12629 * width, y: 0.23083 * height)) + path.addLine(to: CGPoint(x: 0.12567 * width, y: 0.23721 * height)) + path.addCurve(to: CGPoint(x: 0.125 * width, y: 0.25 * height), control1: CGPoint(x: 0.12523 * width, y: 0.24146 * height), control2: CGPoint(x: 0.125 * width, y: 0.24573 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.20833 * width, y: 0.17796 * height), control1: CGPoint(x: 0.16667 * width, y: 0.21933 * height), control2: CGPoint(x: 0.1835 * width, y: 0.1925 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.16667 * height), control1: CGPoint(x: 0.21183 * width, y: 0.17679 * height), control2: CGPoint(x: 0.22917 * width, y: 0.16667 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.79167 * width, y: 0.17796 * height), control1: CGPoint(x: 0.76762 * width, y: 0.16667 * height), control2: CGPoint(x: 0.77083 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.25 * height), control1: CGPoint(x: 0.8165 * width, y: 0.19246 * height), control2: CGPoint(x: 0.83333 * width, y: 0.21933 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.25 * height)) + path.addQuadCurve(to: CGPoint(x: 0.87246 * width, y: 0.22462 * height), control: CGPoint(x: 0.875 * width, y: 0.23692 * height)) + path.addCurve(to: CGPoint(x: 0.77537 * width, y: 0.12754 * height), control1: CGPoint(x: 0.86266 * width, y: 0.17563 * height), control2: CGPoint(x: 0.82437 * width, y: 0.13734 * height)) + path.addLine(to: CGPoint(x: 0.77521 * width, y: 0.12754 * height)) + path.addQuadCurve(to: CGPoint(x: 0.76287 * width, y: 0.12567 * height), control: CGPoint(x: 0.76917 * width, y: 0.12629 * height)) + path.addLine(to: CGPoint(x: 0.76279 * width, y: 0.12567 * height)) + path.addQuadCurve(to: CGPoint(x: 0.75 * width, y: 0.125 * height), control: CGPoint(x: 0.7565 * width, y: 0.125 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.20833 * height)) + path.addCurve(to: CGPoint(x: 0.20833 * width, y: 0.25 * height), control1: CGPoint(x: 0.22654 * width, y: 0.20833 * height), control2: CGPoint(x: 0.20833 * width, y: 0.22654 * height)) + path.addLine(to: CGPoint(x: 0.20833 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.33333 * height)) + path.addCurve(to: CGPoint(x: 0.375 * width, y: 0.35417 * height), control1: CGPoint(x: 0.36567 * width, y: 0.33333 * height), control2: CGPoint(x: 0.375 * width, y: 0.34266 * height)) + path.addLine(to: CGPoint(x: 0.375 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.5 * height), control1: CGPoint(x: 0.375 * width, y: 0.45037 * height), control2: CGPoint(x: 0.43071 * width, y: 0.5 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.375 * height), control1: CGPoint(x: 0.56929 * width, y: 0.5 * height), control2: CGPoint(x: 0.625 * width, y: 0.44429 * height)) + path.addLine(to: CGPoint(x: 0.625 * width, y: 0.35417 * height)) + path.addCurve(to: CGPoint(x: 0.64583 * width, y: 0.33333 * height), control1: CGPoint(x: 0.625 * width, y: 0.34266 * height), control2: CGPoint(x: 0.63433 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.20833 * height), control1: CGPoint(x: 0.79167 * width, y: 0.22654 * height), control2: CGPoint(x: 0.77346 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.20833 * height)) + path.move(to: CGPoint(x: 0.125 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.12562 * width, y: 0.76279 * height), control1: CGPoint(x: 0.12499 * width, y: 0.75427 * height), control2: CGPoint(x: 0.1252 * width, y: 0.75854 * height)) + path.addLine(to: CGPoint(x: 0.12563 * width, y: 0.76288 * height)) + path.addCurve(to: CGPoint(x: 0.1275 * width, y: 0.77521 * height), control1: CGPoint(x: 0.12604 * width, y: 0.76701 * height), control2: CGPoint(x: 0.12667 * width, y: 0.77113 * height)) + path.addLine(to: CGPoint(x: 0.1275 * width, y: 0.77542 * height)) + path.addCurve(to: CGPoint(x: 0.22458 * width, y: 0.8725 * height), control1: CGPoint(x: 0.1373 * width, y: 0.82441 * height), control2: CGPoint(x: 0.17559 * width, y: 0.8627 * height)) + path.addLine(to: CGPoint(x: 0.22479 * width, y: 0.8725 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.875 * height), control1: CGPoint(x: 0.23309 * width, y: 0.87418 * height), control2: CGPoint(x: 0.24153 * width, y: 0.87502 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.875 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.83333 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.83333 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.875 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.875 * height)) + path.addQuadCurve(to: CGPoint(x: 0.77542 * width, y: 0.8725 * height), control: CGPoint(x: 0.76312 * width, y: 0.875 * height)) + path.addCurve(to: CGPoint(x: 0.8725 * width, y: 0.77542 * height), control1: CGPoint(x: 0.82441 * width, y: 0.8627 * height), control2: CGPoint(x: 0.8627 * width, y: 0.82441 * height)) + path.addQuadCurve(to: CGPoint(x: 0.875 * width, y: 0.75 * height), control: CGPoint(x: 0.875 * width, y: 0.76313 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.375 * height)) + path.addLine(to: CGPoint(x: 0.66667 * width, y: 0.375 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.54167 * height), control1: CGPoint(x: 0.66667 * width, y: 0.46679 * height), control2: CGPoint(x: 0.59179 * width, y: 0.54167 * height)) + path.addCurve(to: CGPoint(x: 0.33333 * width, y: 0.375 * height), control1: CGPoint(x: 0.40821 * width, y: 0.54167 * height), control2: CGPoint(x: 0.33333 * width, y: 0.47917 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.375 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.45833*width, y: 0.83333*height)) - path.addLine(to: CGPoint(x: 0.45833*width, y: 0.79167*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.79167*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.83333*height)) + path.move(to: CGPoint(x: 0.45833 * width, y: 0.83333 * height)) + path.addLine(to: CGPoint(x: 0.45833 * width, y: 0.79167 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.79167 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.83333 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5*width, y: 0.75*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.75*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.79167*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.79167*height)) + path.move(to: CGPoint(x: 0.5 * width, y: 0.75 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.75 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.79167 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.79167 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.45833*width, y: 0.75*height)) - path.addLine(to: CGPoint(x: 0.45833*width, y: 0.70833*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.70833*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.75*height)) + path.move(to: CGPoint(x: 0.45833 * width, y: 0.75 * height)) + path.addLine(to: CGPoint(x: 0.45833 * width, y: 0.70833 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.70833 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.75 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5*width, y: 0.66667*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.66667*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.70833*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.70833*height)) + path.move(to: CGPoint(x: 0.5 * width, y: 0.66667 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.66667 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.70833 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.70833 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.45833*width, y: 0.66667*height)) - path.addLine(to: CGPoint(x: 0.45833*width, y: 0.625*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.625*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.66667*height)) + path.move(to: CGPoint(x: 0.45833 * width, y: 0.66667 * height)) + path.addLine(to: CGPoint(x: 0.45833 * width, y: 0.625 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.625 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.66667 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.5*width, y: 0.58333*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.58333*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.625*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.625*height)) + path.move(to: CGPoint(x: 0.5 * width, y: 0.58333 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.58333 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.625 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.625 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.45833*width, y: 0.58333*height)) - path.addLine(to: CGPoint(x: 0.45833*width, y: 0.54167*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.54167*height)) - path.addLine(to: CGPoint(x: 0.5*width, y: 0.58333*height)) + path.move(to: CGPoint(x: 0.45833 * width, y: 0.58333 * height)) + path.addLine(to: CGPoint(x: 0.45833 * width, y: 0.54167 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.54167 * height)) + path.addLine(to: CGPoint(x: 0.5 * width, y: 0.58333 * height)) path.closeSubpath() return path } @@ -552,26 +551,26 @@ struct TrashIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.60417*width, y: 0.0625*height)) - path.addCurve(to: CGPoint(x: 0.64583*width, y: 0.10417*height), control1: CGPoint(x: 0.62725*width, y: 0.0625*height), control2: CGPoint(x: 0.64583*width, y: 0.08108*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.10417*height)) - path.addCurve(to: CGPoint(x: 0.85417*width, y: 0.19792*height), control1: CGPoint(x: 0.80771*width, y: 0.10417*height), control2: CGPoint(x: 0.85417*width, y: 0.14596*height)) - path.addQuadCurve(to: CGPoint(x: 0.85342*width, y: 0.20833*height), control: CGPoint(x: 0.85412*width, y: 0.20321*height)) - path.addLine(to: CGPoint(x: 0.85417*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.85417*width, y: 0.3125*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.3125*height)) - path.addLine(to: CGPoint(x: 0.8125*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.9375*height), control1: CGPoint(x: 0.8125*width, y: 0.89104*height), control2: CGPoint(x: 0.76604*width, y: 0.9375*height)) - path.addLine(to: CGPoint(x: 0.29167*width, y: 0.9375*height)) - path.addCurve(to: CGPoint(x: 0.1875*width, y: 0.83333*height), control1: CGPoint(x: 0.23396*width, y: 0.9375*height), control2: CGPoint(x: 0.1875*width, y: 0.89104*height)) - path.addLine(to: CGPoint(x: 0.1875*width, y: 0.3125*height)) - path.addLine(to: CGPoint(x: 0.14583*width, y: 0.3125*height)) - path.addLine(to: CGPoint(x: 0.14583*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.14658*width, y: 0.20833*height)) - path.addQuadCurve(to: CGPoint(x: 0.14583*width, y: 0.19792*height), control: CGPoint(x: 0.14592*width, y: 0.20321*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.10417*height), control1: CGPoint(x: 0.14583*width, y: 0.14596*height), control2: CGPoint(x: 0.19229*width, y: 0.10417*height)) - path.addLine(to: CGPoint(x: 0.35417*width, y: 0.10417*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.0625*height), control1: CGPoint(x: 0.35417*width, y: 0.08108*height), control2: CGPoint(x: 0.37275*width, y: 0.0625*height)) + path.move(to: CGPoint(x: 0.60417 * width, y: 0.0625 * height)) + path.addCurve(to: CGPoint(x: 0.64583 * width, y: 0.10417 * height), control1: CGPoint(x: 0.62725 * width, y: 0.0625 * height), control2: CGPoint(x: 0.64583 * width, y: 0.08108 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.10417 * height)) + path.addCurve(to: CGPoint(x: 0.85417 * width, y: 0.19792 * height), control1: CGPoint(x: 0.80771 * width, y: 0.10417 * height), control2: CGPoint(x: 0.85417 * width, y: 0.14596 * height)) + path.addQuadCurve(to: CGPoint(x: 0.85342 * width, y: 0.20833 * height), control: CGPoint(x: 0.85412 * width, y: 0.20321 * height)) + path.addLine(to: CGPoint(x: 0.85417 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.85417 * width, y: 0.3125 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.3125 * height)) + path.addLine(to: CGPoint(x: 0.8125 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.9375 * height), control1: CGPoint(x: 0.8125 * width, y: 0.89104 * height), control2: CGPoint(x: 0.76604 * width, y: 0.9375 * height)) + path.addLine(to: CGPoint(x: 0.29167 * width, y: 0.9375 * height)) + path.addCurve(to: CGPoint(x: 0.1875 * width, y: 0.83333 * height), control1: CGPoint(x: 0.23396 * width, y: 0.9375 * height), control2: CGPoint(x: 0.1875 * width, y: 0.89104 * height)) + path.addLine(to: CGPoint(x: 0.1875 * width, y: 0.3125 * height)) + path.addLine(to: CGPoint(x: 0.14583 * width, y: 0.3125 * height)) + path.addLine(to: CGPoint(x: 0.14583 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.14658 * width, y: 0.20833 * height)) + path.addQuadCurve(to: CGPoint(x: 0.14583 * width, y: 0.19792 * height), control: CGPoint(x: 0.14592 * width, y: 0.20321 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.10417 * height), control1: CGPoint(x: 0.14583 * width, y: 0.14596 * height), control2: CGPoint(x: 0.19229 * width, y: 0.10417 * height)) + path.addLine(to: CGPoint(x: 0.35417 * width, y: 0.10417 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.0625 * height), control1: CGPoint(x: 0.35417 * width, y: 0.08108 * height), control2: CGPoint(x: 0.37275 * width, y: 0.0625 * height)) path.closeSubpath() return path } @@ -582,94 +581,94 @@ struct TrashIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.60417*width, y: 0.04167*height)) - path.addCurve(to: CGPoint(x: 0.66292*width, y: 0.08333*height), control1: CGPoint(x: 0.63113*width, y: 0.04167*height), control2: CGPoint(x: 0.65425*width, y: 0.05917*height)) - path.addLine(to: CGPoint(x: 0.75*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.83876*width, y: 0.12052*height), control1: CGPoint(x: 0.78336*width, y: 0.08341*height), control2: CGPoint(x: 0.81531*width, y: 0.0968*height)) - path.addCurve(to: CGPoint(x: 0.87492*width, y: 0.20971*height), control1: CGPoint(x: 0.86221*width, y: 0.14425*height), control2: CGPoint(x: 0.87523*width, y: 0.17635*height)) - path.addCurve(to: CGPoint(x: 0.875*width, y: 0.21088*height), control1: CGPoint(x: 0.87496*width, y: 0.20942*height), control2: CGPoint(x: 0.875*width, y: 0.20838*height)) - path.addLine(to: CGPoint(x: 0.875*width, y: 0.28917*height)) - path.addCurve(to: CGPoint(x: 0.83308*width, y: 0.33317*height), control1: CGPoint(x: 0.87474*width, y: 0.31256*height), control2: CGPoint(x: 0.85644*width, y: 0.33177*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.33583*height), control1: CGPoint(x: 0.83313*width, y: 0.33408*height), control2: CGPoint(x: 0.83333*width, y: 0.33492*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.70833*width, y: 0.95833*height), control1: CGPoint(x: 0.83333*width, y: 0.90221*height), control2: CGPoint(x: 0.77721*width, y: 0.95833*height)) - path.addLine(to: CGPoint(x: 0.29167*width, y: 0.95833*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.83333*height), control1: CGPoint(x: 0.22279*width, y: 0.95833*height), control2: CGPoint(x: 0.16667*width, y: 0.90221*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.33587*height)) - path.addQuadCurve(to: CGPoint(x: 0.16692*width, y: 0.33317*height), control: CGPoint(x: 0.16675*width, y: 0.3345*height)) - path.addCurve(to: CGPoint(x: 0.125*width, y: 0.28913*height), control1: CGPoint(x: 0.14383*width, y: 0.33196*height), control2: CGPoint(x: 0.125*width, y: 0.31246*height)) - path.addLine(to: CGPoint(x: 0.125*width, y: 0.21088*height)) - path.addCurve(to: CGPoint(x: 0.12508*width, y: 0.20971*height), control1: CGPoint(x: 0.125*width, y: 0.20854*height), control2: CGPoint(x: 0.12508*width, y: 0.20946*height)) - path.addCurve(to: CGPoint(x: 0.125*width, y: 0.20833*height), control1: CGPoint(x: 0.12504*width, y: 0.20979*height), control2: CGPoint(x: 0.125*width, y: 0.21*height)) - path.addCurve(to: CGPoint(x: 0.25*width, y: 0.08333*height), control1: CGPoint(x: 0.125*width, y: 0.13946*height), control2: CGPoint(x: 0.18113*width, y: 0.08333*height)) - path.addLine(to: CGPoint(x: 0.33708*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.04167*height), control1: CGPoint(x: 0.34575*width, y: 0.05917*height), control2: CGPoint(x: 0.36888*width, y: 0.04167*height)) + path.move(to: CGPoint(x: 0.60417 * width, y: 0.04167 * height)) + path.addCurve(to: CGPoint(x: 0.66292 * width, y: 0.08333 * height), control1: CGPoint(x: 0.63113 * width, y: 0.04167 * height), control2: CGPoint(x: 0.65425 * width, y: 0.05917 * height)) + path.addLine(to: CGPoint(x: 0.75 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.83876 * width, y: 0.12052 * height), control1: CGPoint(x: 0.78336 * width, y: 0.08341 * height), control2: CGPoint(x: 0.81531 * width, y: 0.0968 * height)) + path.addCurve(to: CGPoint(x: 0.87492 * width, y: 0.20971 * height), control1: CGPoint(x: 0.86221 * width, y: 0.14425 * height), control2: CGPoint(x: 0.87523 * width, y: 0.17635 * height)) + path.addCurve(to: CGPoint(x: 0.875 * width, y: 0.21088 * height), control1: CGPoint(x: 0.87496 * width, y: 0.20942 * height), control2: CGPoint(x: 0.875 * width, y: 0.20838 * height)) + path.addLine(to: CGPoint(x: 0.875 * width, y: 0.28917 * height)) + path.addCurve(to: CGPoint(x: 0.83308 * width, y: 0.33317 * height), control1: CGPoint(x: 0.87474 * width, y: 0.31256 * height), control2: CGPoint(x: 0.85644 * width, y: 0.33177 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.33583 * height), control1: CGPoint(x: 0.83313 * width, y: 0.33408 * height), control2: CGPoint(x: 0.83333 * width, y: 0.33492 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.70833 * width, y: 0.95833 * height), control1: CGPoint(x: 0.83333 * width, y: 0.90221 * height), control2: CGPoint(x: 0.77721 * width, y: 0.95833 * height)) + path.addLine(to: CGPoint(x: 0.29167 * width, y: 0.95833 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.83333 * height), control1: CGPoint(x: 0.22279 * width, y: 0.95833 * height), control2: CGPoint(x: 0.16667 * width, y: 0.90221 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.33587 * height)) + path.addQuadCurve(to: CGPoint(x: 0.16692 * width, y: 0.33317 * height), control: CGPoint(x: 0.16675 * width, y: 0.3345 * height)) + path.addCurve(to: CGPoint(x: 0.125 * width, y: 0.28913 * height), control1: CGPoint(x: 0.14383 * width, y: 0.33196 * height), control2: CGPoint(x: 0.125 * width, y: 0.31246 * height)) + path.addLine(to: CGPoint(x: 0.125 * width, y: 0.21088 * height)) + path.addCurve(to: CGPoint(x: 0.12508 * width, y: 0.20971 * height), control1: CGPoint(x: 0.125 * width, y: 0.20854 * height), control2: CGPoint(x: 0.12508 * width, y: 0.20946 * height)) + path.addCurve(to: CGPoint(x: 0.125 * width, y: 0.20833 * height), control1: CGPoint(x: 0.12504 * width, y: 0.20979 * height), control2: CGPoint(x: 0.125 * width, y: 0.21 * height)) + path.addCurve(to: CGPoint(x: 0.25 * width, y: 0.08333 * height), control1: CGPoint(x: 0.125 * width, y: 0.13946 * height), control2: CGPoint(x: 0.18113 * width, y: 0.08333 * height)) + path.addLine(to: CGPoint(x: 0.33708 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.04167 * height), control1: CGPoint(x: 0.34575 * width, y: 0.05917 * height), control2: CGPoint(x: 0.36888 * width, y: 0.04167 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.39583*width, y: 0.08333*height)) - path.addCurve(to: CGPoint(x: 0.375*width, y: 0.10417*height), control1: CGPoint(x: 0.38392*width, y: 0.08333*height), control2: CGPoint(x: 0.375*width, y: 0.09225*height)) - path.addCurve(to: CGPoint(x: 0.38098*width, y: 0.11902*height), control1: CGPoint(x: 0.37489*width, y: 0.10973*height), control2: CGPoint(x: 0.37704*width, y: 0.11509*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.125*height), control1: CGPoint(x: 0.38491*width, y: 0.12296*height), control2: CGPoint(x: 0.39027*width, y: 0.12511*height)) - path.addLine(to: CGPoint(x: 0.60417*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.10417*height), control1: CGPoint(x: 0.61608*width, y: 0.125*height), control2: CGPoint(x: 0.625*width, y: 0.11608*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.08333*height), control1: CGPoint(x: 0.625*width, y: 0.09225*height), control2: CGPoint(x: 0.61608*width, y: 0.08333*height)) - path.addLine(to: CGPoint(x: 0.39583*width, y: 0.08333*height)) - path.move(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.20833*height), control1: CGPoint(x: 0.20346*width, y: 0.125*height), control2: CGPoint(x: 0.16667*width, y: 0.16179*height)) - path.addQuadCurve(to: CGPoint(x: 0.16675*width, y: 0.20958*height), control: CGPoint(x: 0.16667*width, y: 0.20638*height)) - path.addLine(to: CGPoint(x: 0.16675*width, y: 0.21079*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.21083*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.28917*height)) - path.addCurve(to: CGPoint(x: 0.16917*width, y: 0.29167*height), control1: CGPoint(x: 0.16667*width, y: 0.29096*height), control2: CGPoint(x: 0.16742*width, y: 0.29167*height)) - path.addLine(to: CGPoint(x: 0.83083*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.28917*height), control1: CGPoint(x: 0.83263*width, y: 0.29167*height), control2: CGPoint(x: 0.83333*width, y: 0.29096*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.21083*height)) - path.addLine(to: CGPoint(x: 0.83325*width, y: 0.21083*height)) - path.addCurve(to: CGPoint(x: 0.80997*width, y: 0.15012*height), control1: CGPoint(x: 0.8341*width, y: 0.18827*height), control2: CGPoint(x: 0.82569*width, y: 0.16633*height)) - path.addCurve(to: CGPoint(x: 0.75*width, y: 0.125*height), control1: CGPoint(x: 0.79425*width, y: 0.13391*height), control2: CGPoint(x: 0.77258*width, y: 0.12484*height)) - path.addLine(to: CGPoint(x: 0.66292*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.16667*height), control1: CGPoint(x: 0.65425*width, y: 0.14917*height), control2: CGPoint(x: 0.63113*width, y: 0.16667*height)) - path.addLine(to: CGPoint(x: 0.39583*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.33708*width, y: 0.125*height), control1: CGPoint(x: 0.36888*width, y: 0.16667*height), control2: CGPoint(x: 0.34575*width, y: 0.14917*height)) - path.addLine(to: CGPoint(x: 0.25*width, y: 0.125*height)) - path.move(to: CGPoint(x: 0.21083*width, y: 0.33333*height)) - path.addCurve(to: CGPoint(x: 0.20833*width, y: 0.33583*height), control1: CGPoint(x: 0.20904*width, y: 0.33333*height), control2: CGPoint(x: 0.20833*width, y: 0.33404*height)) - path.addLine(to: CGPoint(x: 0.20833*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.91667*height), control1: CGPoint(x: 0.20833*width, y: 0.87988*height), control2: CGPoint(x: 0.24513*width, y: 0.91667*height)) - path.addLine(to: CGPoint(x: 0.70833*width, y: 0.91667*height)) - path.addCurve(to: CGPoint(x: 0.79167*width, y: 0.83333*height), control1: CGPoint(x: 0.75488*width, y: 0.91667*height), control2: CGPoint(x: 0.79167*width, y: 0.87988*height)) - path.addLine(to: CGPoint(x: 0.79167*width, y: 0.33583*height)) - path.addCurve(to: CGPoint(x: 0.78917*width, y: 0.33333*height), control1: CGPoint(x: 0.79167*width, y: 0.33404*height), control2: CGPoint(x: 0.79096*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.21083*width, y: 0.33333*height)) - path.move(to: CGPoint(x: 0.39583*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.45833*width, y: 0.47917*height), control1: CGPoint(x: 0.43008*width, y: 0.41667*height), control2: CGPoint(x: 0.45833*width, y: 0.44492*height)) - path.addLine(to: CGPoint(x: 0.45833*width, y: 0.77083*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.83333*height), control1: CGPoint(x: 0.45833*width, y: 0.80508*height), control2: CGPoint(x: 0.43008*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.77083*height), control1: CGPoint(x: 0.36158*width, y: 0.83333*height), control2: CGPoint(x: 0.33333*width, y: 0.80508*height)) - path.addLine(to: CGPoint(x: 0.33333*width, y: 0.47917*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.41667*height), control1: CGPoint(x: 0.33333*width, y: 0.44492*height), control2: CGPoint(x: 0.36158*width, y: 0.41667*height)) - path.move(to: CGPoint(x: 0.60417*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.66667*width, y: 0.47917*height), control1: CGPoint(x: 0.63842*width, y: 0.41667*height), control2: CGPoint(x: 0.66667*width, y: 0.44492*height)) - path.addLine(to: CGPoint(x: 0.66667*width, y: 0.77083*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.83333*height), control1: CGPoint(x: 0.66667*width, y: 0.80508*height), control2: CGPoint(x: 0.63842*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.54167*width, y: 0.77083*height), control1: CGPoint(x: 0.56992*width, y: 0.83333*height), control2: CGPoint(x: 0.54167*width, y: 0.80508*height)) - path.addLine(to: CGPoint(x: 0.54167*width, y: 0.47917*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.41667*height), control1: CGPoint(x: 0.54167*width, y: 0.44492*height), control2: CGPoint(x: 0.56992*width, y: 0.41667*height)) - path.move(to: CGPoint(x: 0.39583*width, y: 0.45833*height)) - path.addCurve(to: CGPoint(x: 0.375*width, y: 0.47917*height), control1: CGPoint(x: 0.38392*width, y: 0.45833*height), control2: CGPoint(x: 0.375*width, y: 0.46725*height)) - path.addLine(to: CGPoint(x: 0.375*width, y: 0.77083*height)) - path.addCurve(to: CGPoint(x: 0.38098*width, y: 0.78569*height), control1: CGPoint(x: 0.37489*width, y: 0.77639*height), control2: CGPoint(x: 0.37704*width, y: 0.78176*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.79167*height), control1: CGPoint(x: 0.38491*width, y: 0.78962*height), control2: CGPoint(x: 0.39027*width, y: 0.79178*height)) - path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.77083*height), control1: CGPoint(x: 0.40775*width, y: 0.79167*height), control2: CGPoint(x: 0.41667*width, y: 0.78275*height)) - path.addLine(to: CGPoint(x: 0.41667*width, y: 0.47917*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.45833*height), control1: CGPoint(x: 0.41667*width, y: 0.46725*height), control2: CGPoint(x: 0.40775*width, y: 0.45833*height)) - path.move(to: CGPoint(x: 0.60417*width, y: 0.45833*height)) - path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.47917*height), control1: CGPoint(x: 0.59225*width, y: 0.45833*height), control2: CGPoint(x: 0.58333*width, y: 0.46725*height)) - path.addLine(to: CGPoint(x: 0.58333*width, y: 0.77083*height)) - path.addCurve(to: CGPoint(x: 0.58931*width, y: 0.78569*height), control1: CGPoint(x: 0.58322*width, y: 0.77639*height), control2: CGPoint(x: 0.58538*width, y: 0.78176*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.79167*height), control1: CGPoint(x: 0.59324*width, y: 0.78962*height), control2: CGPoint(x: 0.59861*width, y: 0.79178*height)) - path.addCurve(to: CGPoint(x: 0.625*width, y: 0.77083*height), control1: CGPoint(x: 0.61608*width, y: 0.79167*height), control2: CGPoint(x: 0.625*width, y: 0.78275*height)) - path.addLine(to: CGPoint(x: 0.625*width, y: 0.47917*height)) - path.addCurve(to: CGPoint(x: 0.60417*width, y: 0.45833*height), control1: CGPoint(x: 0.625*width, y: 0.46725*height), control2: CGPoint(x: 0.61608*width, y: 0.45833*height)) + path.move(to: CGPoint(x: 0.39583 * width, y: 0.08333 * height)) + path.addCurve(to: CGPoint(x: 0.375 * width, y: 0.10417 * height), control1: CGPoint(x: 0.38392 * width, y: 0.08333 * height), control2: CGPoint(x: 0.375 * width, y: 0.09225 * height)) + path.addCurve(to: CGPoint(x: 0.38098 * width, y: 0.11902 * height), control1: CGPoint(x: 0.37489 * width, y: 0.10973 * height), control2: CGPoint(x: 0.37704 * width, y: 0.11509 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.125 * height), control1: CGPoint(x: 0.38491 * width, y: 0.12296 * height), control2: CGPoint(x: 0.39027 * width, y: 0.12511 * height)) + path.addLine(to: CGPoint(x: 0.60417 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.10417 * height), control1: CGPoint(x: 0.61608 * width, y: 0.125 * height), control2: CGPoint(x: 0.625 * width, y: 0.11608 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.08333 * height), control1: CGPoint(x: 0.625 * width, y: 0.09225 * height), control2: CGPoint(x: 0.61608 * width, y: 0.08333 * height)) + path.addLine(to: CGPoint(x: 0.39583 * width, y: 0.08333 * height)) + path.move(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.20833 * height), control1: CGPoint(x: 0.20346 * width, y: 0.125 * height), control2: CGPoint(x: 0.16667 * width, y: 0.16179 * height)) + path.addQuadCurve(to: CGPoint(x: 0.16675 * width, y: 0.20958 * height), control: CGPoint(x: 0.16667 * width, y: 0.20638 * height)) + path.addLine(to: CGPoint(x: 0.16675 * width, y: 0.21079 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.21083 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.28917 * height)) + path.addCurve(to: CGPoint(x: 0.16917 * width, y: 0.29167 * height), control1: CGPoint(x: 0.16667 * width, y: 0.29096 * height), control2: CGPoint(x: 0.16742 * width, y: 0.29167 * height)) + path.addLine(to: CGPoint(x: 0.83083 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.28917 * height), control1: CGPoint(x: 0.83263 * width, y: 0.29167 * height), control2: CGPoint(x: 0.83333 * width, y: 0.29096 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.21083 * height)) + path.addLine(to: CGPoint(x: 0.83325 * width, y: 0.21083 * height)) + path.addCurve(to: CGPoint(x: 0.80997 * width, y: 0.15012 * height), control1: CGPoint(x: 0.8341 * width, y: 0.18827 * height), control2: CGPoint(x: 0.82569 * width, y: 0.16633 * height)) + path.addCurve(to: CGPoint(x: 0.75 * width, y: 0.125 * height), control1: CGPoint(x: 0.79425 * width, y: 0.13391 * height), control2: CGPoint(x: 0.77258 * width, y: 0.12484 * height)) + path.addLine(to: CGPoint(x: 0.66292 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.16667 * height), control1: CGPoint(x: 0.65425 * width, y: 0.14917 * height), control2: CGPoint(x: 0.63113 * width, y: 0.16667 * height)) + path.addLine(to: CGPoint(x: 0.39583 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.33708 * width, y: 0.125 * height), control1: CGPoint(x: 0.36888 * width, y: 0.16667 * height), control2: CGPoint(x: 0.34575 * width, y: 0.14917 * height)) + path.addLine(to: CGPoint(x: 0.25 * width, y: 0.125 * height)) + path.move(to: CGPoint(x: 0.21083 * width, y: 0.33333 * height)) + path.addCurve(to: CGPoint(x: 0.20833 * width, y: 0.33583 * height), control1: CGPoint(x: 0.20904 * width, y: 0.33333 * height), control2: CGPoint(x: 0.20833 * width, y: 0.33404 * height)) + path.addLine(to: CGPoint(x: 0.20833 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.91667 * height), control1: CGPoint(x: 0.20833 * width, y: 0.87988 * height), control2: CGPoint(x: 0.24513 * width, y: 0.91667 * height)) + path.addLine(to: CGPoint(x: 0.70833 * width, y: 0.91667 * height)) + path.addCurve(to: CGPoint(x: 0.79167 * width, y: 0.83333 * height), control1: CGPoint(x: 0.75488 * width, y: 0.91667 * height), control2: CGPoint(x: 0.79167 * width, y: 0.87988 * height)) + path.addLine(to: CGPoint(x: 0.79167 * width, y: 0.33583 * height)) + path.addCurve(to: CGPoint(x: 0.78917 * width, y: 0.33333 * height), control1: CGPoint(x: 0.79167 * width, y: 0.33404 * height), control2: CGPoint(x: 0.79096 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.21083 * width, y: 0.33333 * height)) + path.move(to: CGPoint(x: 0.39583 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.45833 * width, y: 0.47917 * height), control1: CGPoint(x: 0.43008 * width, y: 0.41667 * height), control2: CGPoint(x: 0.45833 * width, y: 0.44492 * height)) + path.addLine(to: CGPoint(x: 0.45833 * width, y: 0.77083 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.83333 * height), control1: CGPoint(x: 0.45833 * width, y: 0.80508 * height), control2: CGPoint(x: 0.43008 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.33333 * width, y: 0.77083 * height), control1: CGPoint(x: 0.36158 * width, y: 0.83333 * height), control2: CGPoint(x: 0.33333 * width, y: 0.80508 * height)) + path.addLine(to: CGPoint(x: 0.33333 * width, y: 0.47917 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.41667 * height), control1: CGPoint(x: 0.33333 * width, y: 0.44492 * height), control2: CGPoint(x: 0.36158 * width, y: 0.41667 * height)) + path.move(to: CGPoint(x: 0.60417 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.66667 * width, y: 0.47917 * height), control1: CGPoint(x: 0.63842 * width, y: 0.41667 * height), control2: CGPoint(x: 0.66667 * width, y: 0.44492 * height)) + path.addLine(to: CGPoint(x: 0.66667 * width, y: 0.77083 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.83333 * height), control1: CGPoint(x: 0.66667 * width, y: 0.80508 * height), control2: CGPoint(x: 0.63842 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.54167 * width, y: 0.77083 * height), control1: CGPoint(x: 0.56992 * width, y: 0.83333 * height), control2: CGPoint(x: 0.54167 * width, y: 0.80508 * height)) + path.addLine(to: CGPoint(x: 0.54167 * width, y: 0.47917 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.41667 * height), control1: CGPoint(x: 0.54167 * width, y: 0.44492 * height), control2: CGPoint(x: 0.56992 * width, y: 0.41667 * height)) + path.move(to: CGPoint(x: 0.39583 * width, y: 0.45833 * height)) + path.addCurve(to: CGPoint(x: 0.375 * width, y: 0.47917 * height), control1: CGPoint(x: 0.38392 * width, y: 0.45833 * height), control2: CGPoint(x: 0.375 * width, y: 0.46725 * height)) + path.addLine(to: CGPoint(x: 0.375 * width, y: 0.77083 * height)) + path.addCurve(to: CGPoint(x: 0.38098 * width, y: 0.78569 * height), control1: CGPoint(x: 0.37489 * width, y: 0.77639 * height), control2: CGPoint(x: 0.37704 * width, y: 0.78176 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.79167 * height), control1: CGPoint(x: 0.38491 * width, y: 0.78962 * height), control2: CGPoint(x: 0.39027 * width, y: 0.79178 * height)) + path.addCurve(to: CGPoint(x: 0.41667 * width, y: 0.77083 * height), control1: CGPoint(x: 0.40775 * width, y: 0.79167 * height), control2: CGPoint(x: 0.41667 * width, y: 0.78275 * height)) + path.addLine(to: CGPoint(x: 0.41667 * width, y: 0.47917 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.45833 * height), control1: CGPoint(x: 0.41667 * width, y: 0.46725 * height), control2: CGPoint(x: 0.40775 * width, y: 0.45833 * height)) + path.move(to: CGPoint(x: 0.60417 * width, y: 0.45833 * height)) + path.addCurve(to: CGPoint(x: 0.58333 * width, y: 0.47917 * height), control1: CGPoint(x: 0.59225 * width, y: 0.45833 * height), control2: CGPoint(x: 0.58333 * width, y: 0.46725 * height)) + path.addLine(to: CGPoint(x: 0.58333 * width, y: 0.77083 * height)) + path.addCurve(to: CGPoint(x: 0.58931 * width, y: 0.78569 * height), control1: CGPoint(x: 0.58322 * width, y: 0.77639 * height), control2: CGPoint(x: 0.58538 * width, y: 0.78176 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.79167 * height), control1: CGPoint(x: 0.59324 * width, y: 0.78962 * height), control2: CGPoint(x: 0.59861 * width, y: 0.79178 * height)) + path.addCurve(to: CGPoint(x: 0.625 * width, y: 0.77083 * height), control1: CGPoint(x: 0.61608 * width, y: 0.79167 * height), control2: CGPoint(x: 0.625 * width, y: 0.78275 * height)) + path.addLine(to: CGPoint(x: 0.625 * width, y: 0.47917 * height)) + path.addCurve(to: CGPoint(x: 0.60417 * width, y: 0.45833 * height), control1: CGPoint(x: 0.625 * width, y: 0.46725 * height), control2: CGPoint(x: 0.61608 * width, y: 0.45833 * height)) return path } } @@ -696,13 +695,13 @@ struct SpamIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.45833*width, y: 0.0625*height)) - path.addCurve(to: CGPoint(x: 0.58333*width, y: 0.9375*height), control1: CGPoint(x: 1.03146*width, y: 0.29933*height), control2: CGPoint(x: 0.84233*width, y: 0.86992*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.6875*height), control1: CGPoint(x: 0.67608*width, y: 0.78083*height), control2: CGPoint(x: 0.59904*width, y: 0.685*height)) - path.addCurve(to: CGPoint(x: 0.41667*width, y: 0.9375*height), control1: CGPoint(x: 0.40075*width, y: 0.68517*height), control2: CGPoint(x: 0.32412*width, y: 0.78596*height)) - path.addCurve(to: CGPoint(x: 0.29167*width, y: 0.22917*height), control1: CGPoint(x: 0.22679*width, y: 0.9125*height), control2: CGPoint(x: 0.03271*width, y: 0.51638*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.4375*height), control1: CGPoint(x: 0.26733*width, y: 0.39929*height), control2: CGPoint(x: 0.33333*width, y: 0.4375*height)) - path.addCurve(to: CGPoint(x: 0.45833*width, y: 0.0625*height), control1: CGPoint(x: 0.52083*width, y: 0.4375*height), control2: CGPoint(x: 0.52679*width, y: 0.19554*height)) + path.move(to: CGPoint(x: 0.45833 * width, y: 0.0625 * height)) + path.addCurve(to: CGPoint(x: 0.58333 * width, y: 0.9375 * height), control1: CGPoint(x: 1.03146 * width, y: 0.29933 * height), control2: CGPoint(x: 0.84233 * width, y: 0.86992 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.6875 * height), control1: CGPoint(x: 0.67608 * width, y: 0.78083 * height), control2: CGPoint(x: 0.59904 * width, y: 0.685 * height)) + path.addCurve(to: CGPoint(x: 0.41667 * width, y: 0.9375 * height), control1: CGPoint(x: 0.40075 * width, y: 0.68517 * height), control2: CGPoint(x: 0.32412 * width, y: 0.78596 * height)) + path.addCurve(to: CGPoint(x: 0.29167 * width, y: 0.22917 * height), control1: CGPoint(x: 0.22679 * width, y: 0.9125 * height), control2: CGPoint(x: 0.03271 * width, y: 0.51638 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.4375 * height), control1: CGPoint(x: 0.26733 * width, y: 0.39929 * height), control2: CGPoint(x: 0.33333 * width, y: 0.4375 * height)) + path.addCurve(to: CGPoint(x: 0.45833 * width, y: 0.0625 * height), control1: CGPoint(x: 0.52083 * width, y: 0.4375 * height), control2: CGPoint(x: 0.52679 * width, y: 0.19554 * height)) return path } } @@ -712,41 +711,41 @@ struct SpamIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.46629*width, y: 0.04321*height)) - path.addCurve(to: CGPoint(x: 0.58863*width, y: 0.95767*height), control1: CGPoint(x: 1.05183*width, y: 0.28517*height), control2: CGPoint(x: 0.87296*width, y: 0.8835*height)) - path.addCurve(to: CGPoint(x: 0.56676*width, y: 0.95006*height), control1: CGPoint(x: 0.58047*width, y: 0.95979*height), control2: CGPoint(x: 0.57184*width, y: 0.95679*height)) - path.addCurve(to: CGPoint(x: 0.56542*width, y: 0.92696*height), control1: CGPoint(x: 0.56168*width, y: 0.94334*height), control2: CGPoint(x: 0.56115*width, y: 0.93422*height)) - path.addCurve(to: CGPoint(x: 0.59475*width, y: 0.76154*height), control1: CGPoint(x: 0.60958*width, y: 0.85238*height), control2: CGPoint(x: 0.61108*width, y: 0.79683*height)) - path.addCurve(to: CGPoint(x: 0.50058*width, y: 0.70833*height), control1: CGPoint(x: 0.57837*width, y: 0.72629*height), control2: CGPoint(x: 0.54325*width, y: 0.70725*height)) - path.addLine(to: CGPoint(x: 0.49954*width, y: 0.70833*height)) - path.addCurve(to: CGPoint(x: 0.40538*width, y: 0.76342*height), control1: CGPoint(x: 0.45704*width, y: 0.70733*height), control2: CGPoint(x: 0.42179*width, y: 0.72738*height)) - path.addCurve(to: CGPoint(x: 0.43442*width, y: 0.92667*height), control1: CGPoint(x: 0.38892*width, y: 0.79946*height), control2: CGPoint(x: 0.39054*width, y: 0.85483*height)) - path.addCurve(to: CGPoint(x: 0.4341*width, y: 0.94883*height), control1: CGPoint(x: 0.43858*width, y: 0.9335*height), control2: CGPoint(x: 0.43846*width, y: 0.94212*height)) - path.addCurve(to: CGPoint(x: 0.414*width, y: 0.95817*height), control1: CGPoint(x: 0.42975*width, y: 0.95554*height), control2: CGPoint(x: 0.42194*width, y: 0.95917*height)) - path.addCurve(to: CGPoint(x: 0.16583*width, y: 0.68742*height), control1: CGPoint(x: 0.30583*width, y: 0.94396*height), control2: CGPoint(x: 0.20742*width, y: 0.83133*height)) - path.addCurve(to: CGPoint(x: 0.27621*width, y: 0.21525*height), control1: CGPoint(x: 0.12429*width, y: 0.5435*height), control2: CGPoint(x: 0.14179*width, y: 0.36429*height)) - path.addCurve(to: CGPoint(x: 0.30042*width, y: 0.21041*height), control1: CGPoint(x: 0.28235*width, y: 0.20851*height), control2: CGPoint(x: 0.29216*width, y: 0.20655*height)) - path.addCurve(to: CGPoint(x: 0.31225*width, y: 0.23208*height), control1: CGPoint(x: 0.30868*width, y: 0.21427*height), control2: CGPoint(x: 0.31348*width, y: 0.22305*height)) - path.addCurve(to: CGPoint(x: 0.32829*width, y: 0.38533*height), control1: CGPoint(x: 0.3005*width, y: 0.31433*height), control2: CGPoint(x: 0.31146*width, y: 0.36092*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.41667*height), control1: CGPoint(x: 0.34512*width, y: 0.40975*height), control2: CGPoint(x: 0.36883*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.45083*width, y: 0.38583*height), control1: CGPoint(x: 0.42037*width, y: 0.41667*height), control2: CGPoint(x: 0.43667*width, y: 0.40637*height)) - path.addCurve(to: CGPoint(x: 0.47896*width, y: 0.29762*height), control1: CGPoint(x: 0.46504*width, y: 0.36525*height), control2: CGPoint(x: 0.47492*width, y: 0.33387*height)) - path.addCurve(to: CGPoint(x: 0.43979*width, y: 0.07204*height), control1: CGPoint(x: 0.48696*width, y: 0.22508*height), control2: CGPoint(x: 0.47154*width, y: 0.13375*height)) - path.addCurve(to: CGPoint(x: 0.44294*width, y: 0.04834*height), control1: CGPoint(x: 0.43575*width, y: 0.06427*height), control2: CGPoint(x: 0.43701*width, y: 0.05479*height)) - path.addCurve(to: CGPoint(x: 0.46629*width, y: 0.04321*height), control1: CGPoint(x: 0.44887*width, y: 0.04189*height), control2: CGPoint(x: 0.4582*width, y: 0.03984*height)) - path.move(to: CGPoint(x: 0.49421*width, y: 0.10663*height)) - path.addCurve(to: CGPoint(x: 0.52033*width, y: 0.30217*height), control1: CGPoint(x: 0.51542*width, y: 0.16917*height), control2: CGPoint(x: 0.52742*width, y: 0.23858*height)) - path.addCurve(to: CGPoint(x: 0.48513*width, y: 0.40942*height), control1: CGPoint(x: 0.51579*width, y: 0.34304*height), control2: CGPoint(x: 0.50508*width, y: 0.38046*height)) - path.addCurve(to: CGPoint(x: 0.39583*width, y: 0.45833*height), control1: CGPoint(x: 0.46517*width, y: 0.43838*height), control2: CGPoint(x: 0.43379*width, y: 0.45833*height)) - path.addCurve(to: CGPoint(x: 0.29404*width, y: 0.40892*height), control1: CGPoint(x: 0.36033*width, y: 0.45833*height), control2: CGPoint(x: 0.31971*width, y: 0.44617*height)) - path.addCurve(to: CGPoint(x: 0.26913*width, y: 0.29838*height), control1: CGPoint(x: 0.27671*width, y: 0.38388*height), control2: CGPoint(x: 0.27004*width, y: 0.34492*height)) - path.addCurve(to: CGPoint(x: 0.20592*width, y: 0.67588*height), control1: CGPoint(x: 0.18438*width, y: 0.42338*height), control2: CGPoint(x: 0.17258*width, y: 0.56067*height)) - path.addCurve(to: CGPoint(x: 0.38133*width, y: 0.90242*height), control1: CGPoint(x: 0.23825*width, y: 0.78796*height), control2: CGPoint(x: 0.31033*width, y: 0.87183*height)) - path.addCurve(to: CGPoint(x: 0.36742*width, y: 0.74617*height), control1: CGPoint(x: 0.35608*width, y: 0.84233*height), control2: CGPoint(x: 0.34871*width, y: 0.78721*height)) - path.addCurve(to: CGPoint(x: 0.5*width, y: 0.66683*height), control1: CGPoint(x: 0.39092*width, y: 0.69467*height), control2: CGPoint(x: 0.44342*width, y: 0.66567*height)) - path.addCurve(to: CGPoint(x: 0.6325*width, y: 0.74404*height), control1: CGPoint(x: 0.55617*width, y: 0.66563*height), control2: CGPoint(x: 0.60883*width, y: 0.69304*height)) - path.addCurve(to: CGPoint(x: 0.62129*width, y: 0.89496*height), control1: CGPoint(x: 0.65067*width, y: 0.78329*height), control2: CGPoint(x: 0.64388*width, y: 0.83642*height)) - path.addCurve(to: CGPoint(x: 0.49421*width, y: 0.10663*height), control1: CGPoint(x: 0.82613*width, y: 0.787*height), control2: CGPoint(x: 0.95954*width, y: 0.33313*height)) + path.move(to: CGPoint(x: 0.46629 * width, y: 0.04321 * height)) + path.addCurve(to: CGPoint(x: 0.58863 * width, y: 0.95767 * height), control1: CGPoint(x: 1.05183 * width, y: 0.28517 * height), control2: CGPoint(x: 0.87296 * width, y: 0.8835 * height)) + path.addCurve(to: CGPoint(x: 0.56676 * width, y: 0.95006 * height), control1: CGPoint(x: 0.58047 * width, y: 0.95979 * height), control2: CGPoint(x: 0.57184 * width, y: 0.95679 * height)) + path.addCurve(to: CGPoint(x: 0.56542 * width, y: 0.92696 * height), control1: CGPoint(x: 0.56168 * width, y: 0.94334 * height), control2: CGPoint(x: 0.56115 * width, y: 0.93422 * height)) + path.addCurve(to: CGPoint(x: 0.59475 * width, y: 0.76154 * height), control1: CGPoint(x: 0.60958 * width, y: 0.85238 * height), control2: CGPoint(x: 0.61108 * width, y: 0.79683 * height)) + path.addCurve(to: CGPoint(x: 0.50058 * width, y: 0.70833 * height), control1: CGPoint(x: 0.57837 * width, y: 0.72629 * height), control2: CGPoint(x: 0.54325 * width, y: 0.70725 * height)) + path.addLine(to: CGPoint(x: 0.49954 * width, y: 0.70833 * height)) + path.addCurve(to: CGPoint(x: 0.40538 * width, y: 0.76342 * height), control1: CGPoint(x: 0.45704 * width, y: 0.70733 * height), control2: CGPoint(x: 0.42179 * width, y: 0.72738 * height)) + path.addCurve(to: CGPoint(x: 0.43442 * width, y: 0.92667 * height), control1: CGPoint(x: 0.38892 * width, y: 0.79946 * height), control2: CGPoint(x: 0.39054 * width, y: 0.85483 * height)) + path.addCurve(to: CGPoint(x: 0.4341 * width, y: 0.94883 * height), control1: CGPoint(x: 0.43858 * width, y: 0.9335 * height), control2: CGPoint(x: 0.43846 * width, y: 0.94212 * height)) + path.addCurve(to: CGPoint(x: 0.414 * width, y: 0.95817 * height), control1: CGPoint(x: 0.42975 * width, y: 0.95554 * height), control2: CGPoint(x: 0.42194 * width, y: 0.95917 * height)) + path.addCurve(to: CGPoint(x: 0.16583 * width, y: 0.68742 * height), control1: CGPoint(x: 0.30583 * width, y: 0.94396 * height), control2: CGPoint(x: 0.20742 * width, y: 0.83133 * height)) + path.addCurve(to: CGPoint(x: 0.27621 * width, y: 0.21525 * height), control1: CGPoint(x: 0.12429 * width, y: 0.5435 * height), control2: CGPoint(x: 0.14179 * width, y: 0.36429 * height)) + path.addCurve(to: CGPoint(x: 0.30042 * width, y: 0.21041 * height), control1: CGPoint(x: 0.28235 * width, y: 0.20851 * height), control2: CGPoint(x: 0.29216 * width, y: 0.20655 * height)) + path.addCurve(to: CGPoint(x: 0.31225 * width, y: 0.23208 * height), control1: CGPoint(x: 0.30868 * width, y: 0.21427 * height), control2: CGPoint(x: 0.31348 * width, y: 0.22305 * height)) + path.addCurve(to: CGPoint(x: 0.32829 * width, y: 0.38533 * height), control1: CGPoint(x: 0.3005 * width, y: 0.31433 * height), control2: CGPoint(x: 0.31146 * width, y: 0.36092 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.41667 * height), control1: CGPoint(x: 0.34512 * width, y: 0.40975 * height), control2: CGPoint(x: 0.36883 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.45083 * width, y: 0.38583 * height), control1: CGPoint(x: 0.42037 * width, y: 0.41667 * height), control2: CGPoint(x: 0.43667 * width, y: 0.40637 * height)) + path.addCurve(to: CGPoint(x: 0.47896 * width, y: 0.29762 * height), control1: CGPoint(x: 0.46504 * width, y: 0.36525 * height), control2: CGPoint(x: 0.47492 * width, y: 0.33387 * height)) + path.addCurve(to: CGPoint(x: 0.43979 * width, y: 0.07204 * height), control1: CGPoint(x: 0.48696 * width, y: 0.22508 * height), control2: CGPoint(x: 0.47154 * width, y: 0.13375 * height)) + path.addCurve(to: CGPoint(x: 0.44294 * width, y: 0.04834 * height), control1: CGPoint(x: 0.43575 * width, y: 0.06427 * height), control2: CGPoint(x: 0.43701 * width, y: 0.05479 * height)) + path.addCurve(to: CGPoint(x: 0.46629 * width, y: 0.04321 * height), control1: CGPoint(x: 0.44887 * width, y: 0.04189 * height), control2: CGPoint(x: 0.4582 * width, y: 0.03984 * height)) + path.move(to: CGPoint(x: 0.49421 * width, y: 0.10663 * height)) + path.addCurve(to: CGPoint(x: 0.52033 * width, y: 0.30217 * height), control1: CGPoint(x: 0.51542 * width, y: 0.16917 * height), control2: CGPoint(x: 0.52742 * width, y: 0.23858 * height)) + path.addCurve(to: CGPoint(x: 0.48513 * width, y: 0.40942 * height), control1: CGPoint(x: 0.51579 * width, y: 0.34304 * height), control2: CGPoint(x: 0.50508 * width, y: 0.38046 * height)) + path.addCurve(to: CGPoint(x: 0.39583 * width, y: 0.45833 * height), control1: CGPoint(x: 0.46517 * width, y: 0.43838 * height), control2: CGPoint(x: 0.43379 * width, y: 0.45833 * height)) + path.addCurve(to: CGPoint(x: 0.29404 * width, y: 0.40892 * height), control1: CGPoint(x: 0.36033 * width, y: 0.45833 * height), control2: CGPoint(x: 0.31971 * width, y: 0.44617 * height)) + path.addCurve(to: CGPoint(x: 0.26913 * width, y: 0.29838 * height), control1: CGPoint(x: 0.27671 * width, y: 0.38388 * height), control2: CGPoint(x: 0.27004 * width, y: 0.34492 * height)) + path.addCurve(to: CGPoint(x: 0.20592 * width, y: 0.67588 * height), control1: CGPoint(x: 0.18438 * width, y: 0.42338 * height), control2: CGPoint(x: 0.17258 * width, y: 0.56067 * height)) + path.addCurve(to: CGPoint(x: 0.38133 * width, y: 0.90242 * height), control1: CGPoint(x: 0.23825 * width, y: 0.78796 * height), control2: CGPoint(x: 0.31033 * width, y: 0.87183 * height)) + path.addCurve(to: CGPoint(x: 0.36742 * width, y: 0.74617 * height), control1: CGPoint(x: 0.35608 * width, y: 0.84233 * height), control2: CGPoint(x: 0.34871 * width, y: 0.78721 * height)) + path.addCurve(to: CGPoint(x: 0.5 * width, y: 0.66683 * height), control1: CGPoint(x: 0.39092 * width, y: 0.69467 * height), control2: CGPoint(x: 0.44342 * width, y: 0.66567 * height)) + path.addCurve(to: CGPoint(x: 0.6325 * width, y: 0.74404 * height), control1: CGPoint(x: 0.55617 * width, y: 0.66563 * height), control2: CGPoint(x: 0.60883 * width, y: 0.69304 * height)) + path.addCurve(to: CGPoint(x: 0.62129 * width, y: 0.89496 * height), control1: CGPoint(x: 0.65067 * width, y: 0.78329 * height), control2: CGPoint(x: 0.64388 * width, y: 0.83642 * height)) + path.addCurve(to: CGPoint(x: 0.49421 * width, y: 0.10663 * height), control1: CGPoint(x: 0.82613 * width, y: 0.787 * height), control2: CGPoint(x: 0.95954 * width, y: 0.33313 * height)) return path } } @@ -773,18 +772,18 @@ struct FolderIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.16667*width, y: 0.14583*height)) - path.addLine(to: CGPoint(x: 0.4375*width, y: 0.14583*height)) - path.addLine(to: CGPoint(x: 0.52083*width, y: 0.3125*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.3125*height)) - path.addCurve(to: CGPoint(x: 0.9375*width, y: 0.41667*height), control1: CGPoint(x: 0.89104*width, y: 0.3125*height), control2: CGPoint(x: 0.9375*width, y: 0.35896*height)) - path.addLine(to: CGPoint(x: 0.9375*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.85417*height), control1: CGPoint(x: 0.9375*width, y: 0.80771*height), control2: CGPoint(x: 0.89104*width, y: 0.85417*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.85417*height)) - path.addCurve(to: CGPoint(x: 0.09295*width, y: 0.82372*height), control1: CGPoint(x: 0.13902*width, y: 0.85422*height), control2: CGPoint(x: 0.1125*width, y: 0.84327*height)) - path.addCurve(to: CGPoint(x: 0.0625*width, y: 0.75*height), control1: CGPoint(x: 0.0734*width, y: 0.80417*height), control2: CGPoint(x: 0.06244*width, y: 0.77764*height)) - path.addLine(to: CGPoint(x: 0.0625*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.14583*height), control1: CGPoint(x: 0.0625*width, y: 0.19229*height), control2: CGPoint(x: 0.10896*width, y: 0.14583*height)) + path.move(to: CGPoint(x: 0.16667 * width, y: 0.14583 * height)) + path.addLine(to: CGPoint(x: 0.4375 * width, y: 0.14583 * height)) + path.addLine(to: CGPoint(x: 0.52083 * width, y: 0.3125 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.3125 * height)) + path.addCurve(to: CGPoint(x: 0.9375 * width, y: 0.41667 * height), control1: CGPoint(x: 0.89104 * width, y: 0.3125 * height), control2: CGPoint(x: 0.9375 * width, y: 0.35896 * height)) + path.addLine(to: CGPoint(x: 0.9375 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.85417 * height), control1: CGPoint(x: 0.9375 * width, y: 0.80771 * height), control2: CGPoint(x: 0.89104 * width, y: 0.85417 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.85417 * height)) + path.addCurve(to: CGPoint(x: 0.09295 * width, y: 0.82372 * height), control1: CGPoint(x: 0.13902 * width, y: 0.85422 * height), control2: CGPoint(x: 0.1125 * width, y: 0.84327 * height)) + path.addCurve(to: CGPoint(x: 0.0625 * width, y: 0.75 * height), control1: CGPoint(x: 0.0734 * width, y: 0.80417 * height), control2: CGPoint(x: 0.06244 * width, y: 0.77764 * height)) + path.addLine(to: CGPoint(x: 0.0625 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.14583 * height), control1: CGPoint(x: 0.0625 * width, y: 0.19229 * height), control2: CGPoint(x: 0.10896 * width, y: 0.14583 * height)) return path } } @@ -794,42 +793,42 @@ struct FolderIcon: View { var path = Path() let width = rect.size.width let height = rect.size.height - path.move(to: CGPoint(x: 0.4375*width, y: 0.125*height)) - path.addCurve(to: CGPoint(x: 0.45612*width, y: 0.13654*height), control1: CGPoint(x: 0.44539*width, y: 0.12501*height), control2: CGPoint(x: 0.4526*width, y: 0.12948*height)) - path.addLine(to: CGPoint(x: 0.47121*width, y: 0.16667*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.95833*width, y: 0.29167*height), control1: CGPoint(x: 0.90221*width, y: 0.16667*height), control2: CGPoint(x: 0.95833*width, y: 0.22279*height)) - path.addLine(to: CGPoint(x: 0.95833*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.875*height), control1: CGPoint(x: 0.95833*width, y: 0.81887*height), control2: CGPoint(x: 0.90221*width, y: 0.875*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.875*height)) - path.addCurve(to: CGPoint(x: 0.04167*width, y: 0.75*height), control1: CGPoint(x: 0.09779*width, y: 0.875*height), control2: CGPoint(x: 0.04167*width, y: 0.81887*height)) - path.addLine(to: CGPoint(x: 0.04167*width, y: 0.25*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.125*height), control1: CGPoint(x: 0.04167*width, y: 0.18113*height), control2: CGPoint(x: 0.09779*width, y: 0.125*height)) + path.move(to: CGPoint(x: 0.4375 * width, y: 0.125 * height)) + path.addCurve(to: CGPoint(x: 0.45612 * width, y: 0.13654 * height), control1: CGPoint(x: 0.44539 * width, y: 0.12501 * height), control2: CGPoint(x: 0.4526 * width, y: 0.12948 * height)) + path.addLine(to: CGPoint(x: 0.47121 * width, y: 0.16667 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.95833 * width, y: 0.29167 * height), control1: CGPoint(x: 0.90221 * width, y: 0.16667 * height), control2: CGPoint(x: 0.95833 * width, y: 0.22279 * height)) + path.addLine(to: CGPoint(x: 0.95833 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.875 * height), control1: CGPoint(x: 0.95833 * width, y: 0.81887 * height), control2: CGPoint(x: 0.90221 * width, y: 0.875 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.875 * height)) + path.addCurve(to: CGPoint(x: 0.04167 * width, y: 0.75 * height), control1: CGPoint(x: 0.09779 * width, y: 0.875 * height), control2: CGPoint(x: 0.04167 * width, y: 0.81887 * height)) + path.addLine(to: CGPoint(x: 0.04167 * width, y: 0.25 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.125 * height), control1: CGPoint(x: 0.04167 * width, y: 0.18113 * height), control2: CGPoint(x: 0.09779 * width, y: 0.125 * height)) path.closeSubpath() - path.move(to: CGPoint(x: 0.16667*width, y: 0.16667*height)) - path.addCurve(to: CGPoint(x: 0.08333*width, y: 0.25*height), control1: CGPoint(x: 0.12012*width, y: 0.16667*height), control2: CGPoint(x: 0.08333*width, y: 0.20346*height)) - path.addLine(to: CGPoint(x: 0.08333*width, y: 0.29167*height)) - path.addLine(to: CGPoint(x: 0.3125*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.33333*width, y: 0.3125*height), control1: CGPoint(x: 0.32401*width, y: 0.29167*height), control2: CGPoint(x: 0.33333*width, y: 0.30099*height)) - path.addCurve(to: CGPoint(x: 0.3125*width, y: 0.33333*height), control1: CGPoint(x: 0.33333*width, y: 0.32401*height), control2: CGPoint(x: 0.32401*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.08333*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.08333*width, y: 0.75*height)) - path.addCurve(to: CGPoint(x: 0.16667*width, y: 0.83333*height), control1: CGPoint(x: 0.08333*width, y: 0.79654*height), control2: CGPoint(x: 0.12012*width, y: 0.83333*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.83333*height)) - path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.75*height), control1: CGPoint(x: 0.87988*width, y: 0.83333*height), control2: CGPoint(x: 0.91667*width, y: 0.79654*height)) - path.addLine(to: CGPoint(x: 0.91667*width, y: 0.41667*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.33333*height), control1: CGPoint(x: 0.91667*width, y: 0.37012*height), control2: CGPoint(x: 0.87988*width, y: 0.33333*height)) - path.addLine(to: CGPoint(x: 0.52083*width, y: 0.33333*height)) - path.addCurve(to: CGPoint(x: 0.50221*width, y: 0.32187*height), control1: CGPoint(x: 0.51296*width, y: 0.33334*height), control2: CGPoint(x: 0.50575*width, y: 0.32891*height)) - path.addLine(to: CGPoint(x: 0.43904*width, y: 0.19546*height)) - path.addLine(to: CGPoint(x: 0.42462*width, y: 0.16667*height)) - path.addLine(to: CGPoint(x: 0.16667*width, y: 0.16667*height)) - path.move(to: CGPoint(x: 0.53371*width, y: 0.29167*height)) - path.addLine(to: CGPoint(x: 0.83333*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.91667*width, y: 0.32379*height), control1: CGPoint(x: 0.86413*width, y: 0.29167*height), control2: CGPoint(x: 0.89383*width, y: 0.30312*height)) - path.addLine(to: CGPoint(x: 0.91667*width, y: 0.29167*height)) - path.addCurve(to: CGPoint(x: 0.83333*width, y: 0.20833*height), control1: CGPoint(x: 0.91667*width, y: 0.24513*height), control2: CGPoint(x: 0.87988*width, y: 0.20833*height)) - path.addLine(to: CGPoint(x: 0.49204*width, y: 0.20833*height)) + path.move(to: CGPoint(x: 0.16667 * width, y: 0.16667 * height)) + path.addCurve(to: CGPoint(x: 0.08333 * width, y: 0.25 * height), control1: CGPoint(x: 0.12012 * width, y: 0.16667 * height), control2: CGPoint(x: 0.08333 * width, y: 0.20346 * height)) + path.addLine(to: CGPoint(x: 0.08333 * width, y: 0.29167 * height)) + path.addLine(to: CGPoint(x: 0.3125 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.33333 * width, y: 0.3125 * height), control1: CGPoint(x: 0.32401 * width, y: 0.29167 * height), control2: CGPoint(x: 0.33333 * width, y: 0.30099 * height)) + path.addCurve(to: CGPoint(x: 0.3125 * width, y: 0.33333 * height), control1: CGPoint(x: 0.33333 * width, y: 0.32401 * height), control2: CGPoint(x: 0.32401 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.08333 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.08333 * width, y: 0.75 * height)) + path.addCurve(to: CGPoint(x: 0.16667 * width, y: 0.83333 * height), control1: CGPoint(x: 0.08333 * width, y: 0.79654 * height), control2: CGPoint(x: 0.12012 * width, y: 0.83333 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.83333 * height)) + path.addCurve(to: CGPoint(x: 0.91667 * width, y: 0.75 * height), control1: CGPoint(x: 0.87988 * width, y: 0.83333 * height), control2: CGPoint(x: 0.91667 * width, y: 0.79654 * height)) + path.addLine(to: CGPoint(x: 0.91667 * width, y: 0.41667 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.33333 * height), control1: CGPoint(x: 0.91667 * width, y: 0.37012 * height), control2: CGPoint(x: 0.87988 * width, y: 0.33333 * height)) + path.addLine(to: CGPoint(x: 0.52083 * width, y: 0.33333 * height)) + path.addCurve(to: CGPoint(x: 0.50221 * width, y: 0.32187 * height), control1: CGPoint(x: 0.51296 * width, y: 0.33334 * height), control2: CGPoint(x: 0.50575 * width, y: 0.32891 * height)) + path.addLine(to: CGPoint(x: 0.43904 * width, y: 0.19546 * height)) + path.addLine(to: CGPoint(x: 0.42462 * width, y: 0.16667 * height)) + path.addLine(to: CGPoint(x: 0.16667 * width, y: 0.16667 * height)) + path.move(to: CGPoint(x: 0.53371 * width, y: 0.29167 * height)) + path.addLine(to: CGPoint(x: 0.83333 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.91667 * width, y: 0.32379 * height), control1: CGPoint(x: 0.86413 * width, y: 0.29167 * height), control2: CGPoint(x: 0.89383 * width, y: 0.30312 * height)) + path.addLine(to: CGPoint(x: 0.91667 * width, y: 0.29167 * height)) + path.addCurve(to: CGPoint(x: 0.83333 * width, y: 0.20833 * height), control1: CGPoint(x: 0.91667 * width, y: 0.24513 * height), control2: CGPoint(x: 0.87988 * width, y: 0.20833 * height)) + path.addLine(to: CGPoint(x: 0.49204 * width, y: 0.20833 * height)) path.closeSubpath() return path } diff --git a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift index 2edd3b46..ee6ab442 100644 --- a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift +++ b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift @@ -44,7 +44,7 @@ struct MailboxDropdownRowView: View { //TODO: Load relevant email list } .padding(.horizontal) - .font(.subheadline) + .font(.subheadline) } } @@ -76,7 +76,7 @@ struct MailboxDropdownRowView: View { } } -func iconName(folderName:String) -> String { +func iconName(folderName: String) -> String { let localizedFolderIconNames: [String: String] = [ "inbox": "inbox_localized", "archive": "archive_localized", @@ -89,7 +89,7 @@ func iconName(folderName:String) -> String { if (folderName .localizedCaseInsensitiveContains(icon) || folderName - .localizedCaseInsensitiveContains(localizedName)) + .localizedCaseInsensitiveContains(localizedName)) { return icon } From 4dd276ca74e16164da29c0b42831ed80b438257e Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 16 Jul 2026 09:33:11 -0400 Subject: [PATCH 5/7] tests need assets --- Thunderbird/Thunderbird.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Thunderbird/Thunderbird.xcodeproj/project.pbxproj b/Thunderbird/Thunderbird.xcodeproj/project.pbxproj index 9e18bd18..71408fad 100644 --- a/Thunderbird/Thunderbird.xcodeproj/project.pbxproj +++ b/Thunderbird/Thunderbird.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 142ECC532ECE4D1C00518776 /* Exceptions for "Thunderbird" folder in "ThunderbirdTests" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( + Assets.xcassets, FeatureFlags/Distribution.swift, FeatureFlags/FeatureFlags.swift, Util/AvatarView.swift, From dfc12f3fac3d33dc32a0b03774641516d84c27f6 Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 16 Jul 2026 16:17:51 -0400 Subject: [PATCH 6/7] Cleanup and Settings button alignment --- .../AccountList/AccountFolderDisclosureView.swift | 8 ++++---- .../Thunderbird/AccountList/DrawerView.swift | 15 ++++++++++----- .../AccountList/MailboxDropdownRowView.swift | 11 +++++++---- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift index 2cb92030..9eccfe54 100644 --- a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift +++ b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift @@ -20,15 +20,16 @@ struct AccountFolderDisclosureView: View { } } .padding(.vertical, 10) - .safeAreaPadding(.horizontal) } label: { HStack { AvatarView(emailAddress: EmailAddress(mailboxManager.account.name), bubbleColor: .accent) VStack(alignment: .leading) { Text(mailboxManager.account.name) .font(.body) - Text(mailboxManager.account.name) - .font(.caption2) + .truncationMode(.middle) + // Text(mailboxManager.account.name) + // .font(.caption2) + // .truncationMode(.middle) }.padding(.horizontal) .foregroundStyle(.black) Spacer() @@ -45,7 +46,6 @@ struct AccountFolderDisclosureView: View { .background { RoundedRectangle(cornerRadius: 24) .foregroundStyle(.white) - .frame(height: 56) } } } diff --git a/Thunderbird/Thunderbird/AccountList/DrawerView.swift b/Thunderbird/Thunderbird/AccountList/DrawerView.swift index d142cec4..8bf7b6e9 100644 --- a/Thunderbird/Thunderbird/AccountList/DrawerView.swift +++ b/Thunderbird/Thunderbird/AccountList/DrawerView.swift @@ -33,11 +33,16 @@ struct DrawerView: View { VStack(alignment: .leading) { ScrollView { DrawerContent(showDrawer: $showDrawer) - } - Spacer() - NavigationLink(destination: GeneralSettingsView()) { - Label("settings_header", systemImage: "gearshape") - .foregroundStyle(.black) + }.toolbar { + ToolbarItem(id: "settings", placement: .bottomBar) { + NavigationLink(destination: GeneralSettingsView()) { + Text("settings_header") + .foregroundStyle(.black) + } + } + ToolbarItem(placement: .bottomBar) { + Spacer() + } } } .padding() diff --git a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift index ee6ab442..c7a20e0f 100644 --- a/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift +++ b/Thunderbird/Thunderbird/AccountList/MailboxDropdownRowView.swift @@ -12,7 +12,10 @@ let iconShapes = FolderIconShapes() struct MailboxDropdownRowView: View { @State var isExpanded: Bool = false var mailbox: Mailbox - var tempHasSubfolders: Bool = true + + //TODO: Subfolders and 'new' are not fully implemented + var tempHasSubfolders: Bool = false + var tempHasNew: Bool = false var body: some View { if tempHasSubfolders { @@ -20,7 +23,7 @@ struct MailboxDropdownRowView: View { //TODO: Eventual subfolder } label: { HStack { - (iconSwitcher(folderName: mailbox.name, tinted: false)).frame(width: 24, height: 24) + (iconSwitcher(folderName: mailbox.name, tinted: tempHasNew)).frame(width: 24, height: 24) Text(mailbox.name) .foregroundStyle(.black) Spacer() @@ -32,12 +35,12 @@ struct MailboxDropdownRowView: View { .font(.subheadline) } else { HStack { - (iconSwitcher(folderName: mailbox.name, tinted: false)).frame(width: 24, height: 24) + (iconSwitcher(folderName: mailbox.name, tinted: tempHasNew)).frame(width: 24, height: 24) Text(mailbox.name) .foregroundStyle(.black) Spacer() if mailbox.unreadEmails! > 0 { - UnreadCounter(unreadCount: mailbox.unreadEmails ?? 0, hasNew: false) + UnreadCounter(unreadCount: mailbox.unreadEmails ?? 0, hasNew: !tempHasNew) } } .onTapGesture { From 5c71258f22cf8ba0383f3dc9bd6b340e69c89e54 Mon Sep 17 00:00:00 2001 From: Ashley Date: Mon, 20 Jul 2026 15:45:26 -0400 Subject: [PATCH 7/7] PR review and add color to account --- Core/Sources/Account/Account.swift | 5 ++++- .../AccountList/AccountFolderDisclosureView.swift | 14 ++++++++++---- Thunderbird/Thunderbird/Util/AvatarView.swift | 11 +++++------ Thunderbird/Thunderbird/Util/UtilFunctions.swift | 11 ++++++++--- .../UtilTests/UtilFunctionTests.swift | 3 +++ 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/Core/Sources/Account/Account.swift b/Core/Sources/Account/Account.swift index 08487bc1..45b582b0 100644 --- a/Core/Sources/Account/Account.swift +++ b/Core/Sources/Account/Account.swift @@ -26,6 +26,7 @@ public struct Account: Codable, Equatable, Hashable, Identifiable { public var deletePolicy: DeletePolicy public var identities: [EmailAddress] public var servers: [Server] + public var avatarColor: String public var incomingServer: Server? { server(.jmap) ?? server(.imap) ?? nil } public var outgoingServer: Server? { server(.jmap) ?? server(.smtp) ?? nil } @@ -60,13 +61,15 @@ public struct Account: Codable, Equatable, Hashable, Identifiable { deletePolicy: DeletePolicy = .never, identities: [EmailAddress] = [], servers: [Server] = [], - id: UUID = UUID() + id: UUID = UUID(), + avatar: String = "user-blue" ) { self.name = name self.deletePolicy = deletePolicy self.identities = identities self.servers = servers self.id = id + self.avatarColor = avatar } // MARK: Identifiable diff --git a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift index 9eccfe54..27e6bd64 100644 --- a/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift +++ b/Thunderbird/Thunderbird/AccountList/AccountFolderDisclosureView.swift @@ -22,14 +22,20 @@ struct AccountFolderDisclosureView: View { .padding(.vertical, 10) } label: { HStack { - AvatarView(emailAddress: EmailAddress(mailboxManager.account.name), bubbleColor: .accent) + AvatarView( + displayName: mailboxManager.account.name, + bubbleColor: Color(mailboxManager.account.avatarColor) + ) VStack(alignment: .leading) { Text(mailboxManager.account.name) .font(.body) .truncationMode(.middle) - // Text(mailboxManager.account.name) - // .font(.caption2) - // .truncationMode(.middle) + if (!mailboxManager.account.name.isEmailAddress) { + Text(mailboxManager.account.identities[0].email) + .font(.caption2) + .truncationMode(.middle) + } + }.padding(.horizontal) .foregroundStyle(.black) Spacer() diff --git a/Thunderbird/Thunderbird/Util/AvatarView.swift b/Thunderbird/Thunderbird/Util/AvatarView.swift index 968f9d31..a0166a40 100644 --- a/Thunderbird/Thunderbird/Util/AvatarView.swift +++ b/Thunderbird/Thunderbird/Util/AvatarView.swift @@ -15,11 +15,11 @@ struct AvatarView: View { private var avatarText: String = "" private var bubbleColor: Color = .clear - init(displayName: String = "", emailAddress: EmailAddress, bubbleColor: Color) { - if !displayName.isEmpty { + init(displayName: String, bubbleColor: Color) { + if (!displayName.isEmpty && !displayName.isEmailAddress) { avatarText = createAvatarText(displayName: displayName) - } else { - avatarText = String(emailAddress.value.first!).capitalized + } else if (displayName.isEmailAddress) { + avatarText = String(displayName.first!).capitalized } self.bubbleColor = bubbleColor } @@ -46,7 +46,6 @@ struct AvatarView: View { #Preview { AvatarView( displayName: "blakls ddfas", - emailAddress: EmailAddress("blah@blah.com"), - bubbleColor: randomizeAvatarColor() + bubbleColor: Color(randomizeAvatarColor()) ) } diff --git a/Thunderbird/Thunderbird/Util/UtilFunctions.swift b/Thunderbird/Thunderbird/Util/UtilFunctions.swift index ecd1d511..9fe3e9dd 100644 --- a/Thunderbird/Thunderbird/Util/UtilFunctions.swift +++ b/Thunderbird/Thunderbird/Util/UtilFunctions.swift @@ -16,12 +16,17 @@ func createAvatarText(displayName: String) -> String { if splitName.count >= 2 { let letter = "\(splitName[0].capitalized.first!)\(splitName[1].capitalized.first!)" return letter - } else { + } else if (!splitName.isEmpty) { return String(splitName[0].capitalized.first!) + } else { + return "" } } -func randomizeAvatarColor() -> Color { - let userColors: [Color] = [.userRed, .userOrange, .userYellow, .userGreen, .userBlue, .userPink, .userPurple] +func randomizeAvatarColor() -> String { + let userColors: [String] = [ + "user-red", "user-orange", "user-yellow", "user-green", "user-blue", "user-pink", + "user-purple" + ] return userColors.randomElement()! } diff --git a/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift b/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift index a448325c..2fca969e 100644 --- a/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift +++ b/Thunderbird/ThunderbirdTests/UtilTests/UtilFunctionTests.swift @@ -21,5 +21,8 @@ struct UtilFunctionTests { @Test func displayName_moreThanTwoNames() async throws { #expect(createAvatarText(displayName: "Denny Klein Two") == "DK") } + @Test func displayName_empty() async throws { + #expect(createAvatarText(displayName: "") == "") + } }