diff --git a/Mail/Components/AttachmentView.swift b/Mail/Components/AttachmentView.swift index 2736f97d3..c76acbda2 100644 --- a/Mail/Components/AttachmentView.swift +++ b/Mail/Components/AttachmentView.swift @@ -34,7 +34,8 @@ struct AttachmentView: View { var body: some View { VStack(spacing: 0) { HStack { - IKIcon(size: .large, image: attachment.icon, shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor) + IKIcon(attachment.icon, size: .large) + .foregroundStyle(MailResourcesAsset.textSecondaryColor) HStack(spacing: UIPadding.small) { VStack(alignment: .leading, spacing: 0) { diff --git a/Mail/Components/Buttons/Custom Buttons/ExtendedFAB.swift b/Mail/Components/Buttons/Custom Buttons/ExtendedFAB.swift index 9d6fd8156..f64bd9b54 100644 --- a/Mail/Components/Buttons/Custom Buttons/ExtendedFAB.swift +++ b/Mail/Components/Buttons/Custom Buttons/ExtendedFAB.swift @@ -34,7 +34,7 @@ struct ExtendedFAB: View { action() } label: { HStack(spacing: 0) { - IKIcon(size: .medium, image: icon, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(icon) Text(title) .lineLimit(1) diff --git a/Mail/Components/Buttons/Custom Buttons/MenuDrawerButton.swift b/Mail/Components/Buttons/Custom Buttons/MenuDrawerButton.swift index 5d07cf014..2cad20e0e 100644 --- a/Mail/Components/Buttons/Custom Buttons/MenuDrawerButton.swift +++ b/Mail/Components/Buttons/Custom Buttons/MenuDrawerButton.swift @@ -32,8 +32,12 @@ struct MenuDrawerButton: View { matomo.track(eventWithCategory: .menuDrawer, name: "openByButton") navigationDrawerState.open() } label: { - IKIcon(size: .large, image: MailResourcesAsset.burger) + IKIcon(MailResourcesAsset.burger, size: .large) } .accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionButtonMenu) } } + +#Preview { + MenuDrawerButton() +} diff --git a/Mail/Components/Buttons/Custom Buttons/SearchButton.swift b/Mail/Components/Buttons/Custom Buttons/SearchButton.swift index 00a2e0c35..bb44e5fbc 100644 --- a/Mail/Components/Buttons/Custom Buttons/SearchButton.swift +++ b/Mail/Components/Buttons/Custom Buttons/SearchButton.swift @@ -27,7 +27,11 @@ struct SearchButton: View { Button { mainViewState.isShowingSearch = true } label: { - IKIcon(size: .large, image: MailResourcesAsset.search) + IKIcon(MailResourcesAsset.search, size: .large) } } } + +#Preview { + SearchButton() +} diff --git a/Mail/Components/Buttons/IKButton/ButtonStyle/IKFloatingAppButtonStyle.swift b/Mail/Components/Buttons/IKButton/ButtonStyle/IKFloatingAppButtonStyle.swift index 06be4f96d..235fff4be 100644 --- a/Mail/Components/Buttons/IKButton/ButtonStyle/IKFloatingAppButtonStyle.swift +++ b/Mail/Components/Buttons/IKButton/ButtonStyle/IKFloatingAppButtonStyle.swift @@ -54,7 +54,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { Button { /* Preview */ } label: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.pencilPlain) } .buttonStyle(.ikFloatingAppButton(isExtended: false)) } @@ -64,7 +64,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } } @@ -73,7 +73,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { Button { /* Preview */ } label: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.pencilPlain) } .buttonStyle(.ikFloatingAppButton(isExtended: false)) .controlSize(.large) @@ -83,7 +83,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { Button { /* Preview */ } label: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.pencilPlain) } .buttonStyle(.ikFloatingAppButton(isExtended: false)) .ikButtonLoading(true) @@ -94,7 +94,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .ikButtonLoading(true) @@ -105,7 +105,7 @@ struct IKFloatingAppButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .disabled(true) diff --git a/Mail/Components/Buttons/IKButton/ButtonStyle/IKLinkButtonStyle.swift b/Mail/Components/Buttons/IKButton/ButtonStyle/IKLinkButtonStyle.swift index 66bf961b3..ee96a9f3b 100644 --- a/Mail/Components/Buttons/IKButton/ButtonStyle/IKLinkButtonStyle.swift +++ b/Mail/Components/Buttons/IKButton/ButtonStyle/IKLinkButtonStyle.swift @@ -59,7 +59,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } } @@ -69,7 +69,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } } @@ -79,7 +79,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .controlSize(.small) @@ -90,7 +90,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .controlSize(.large) @@ -102,7 +102,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .ikButtonPrimaryStyle(MailResourcesAsset.aiColor.swiftUIColor) @@ -113,7 +113,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .buttonStyle(.ikLink(isInlined: true)) @@ -124,7 +124,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .ikButtonLoading(true) @@ -135,7 +135,7 @@ struct IKLinkButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .disabled(true) diff --git a/Mail/Components/Buttons/IKButton/ButtonStyle/IKPlainButtonStyle.swift b/Mail/Components/Buttons/IKButton/ButtonStyle/IKPlainButtonStyle.swift index a34b6aced..12684c30f 100644 --- a/Mail/Components/Buttons/IKButton/ButtonStyle/IKPlainButtonStyle.swift +++ b/Mail/Components/Buttons/IKButton/ButtonStyle/IKPlainButtonStyle.swift @@ -44,7 +44,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } } @@ -54,7 +54,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .controlSize(.large) @@ -65,7 +65,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .controlSize(.large) @@ -77,7 +77,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .ikButtonPrimaryStyle(MailResourcesAsset.aiColor.swiftUIColor) @@ -89,7 +89,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .ikButtonLoading(true) @@ -100,7 +100,7 @@ struct IKPlainButtonStyle: ButtonStyle { /* Preview */ } label: { Label { Text("Lorem Ipsum") } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: .primary) + IKIcon(MailResourcesAsset.pencilPlain) } } .disabled(true) diff --git a/Mail/Components/Buttons/IKButton/ButtonStyle/IKSquareButtonStyle.swift b/Mail/Components/Buttons/IKButton/ButtonStyle/IKSquareButtonStyle.swift index 45cb6971f..010b8d6d0 100644 --- a/Mail/Components/Buttons/IKButton/ButtonStyle/IKSquareButtonStyle.swift +++ b/Mail/Components/Buttons/IKButton/ButtonStyle/IKSquareButtonStyle.swift @@ -41,7 +41,7 @@ struct IKSquareButtonStyle: ButtonStyle { Button { /* Preview */ } label: { - IKIcon(size: .medium, image: MailResourcesAsset.pencilPlain, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.pencilPlain) } } } diff --git a/Mail/Components/Buttons/IKButton/IKButtonLabel.swift b/Mail/Components/Buttons/IKButton/IKButtonLabel.swift index 2b0fcba8d..816bcfd66 100644 --- a/Mail/Components/Buttons/IKButton/IKButtonLabel.swift +++ b/Mail/Components/Buttons/IKButton/IKButtonLabel.swift @@ -27,8 +27,6 @@ extension LabelStyle where Self == IKLabelStyle { } struct IKLabelStyle: LabelStyle { - private let size = IKIcon.Size.medium - func makeBody(configuration: Configuration) -> some View { HStack(spacing: UIPadding.small) { configuration.icon diff --git a/Mail/Components/ChevronIcon.swift b/Mail/Components/ChevronIcon.swift index f168ae045..c6fbc8eb1 100644 --- a/Mail/Components/ChevronIcon.swift +++ b/Mail/Components/ChevronIcon.swift @@ -41,8 +41,9 @@ struct ChevronIcon: View { var color: any ShapeStyle = MailResourcesAsset.textSecondaryColor.swiftUIColor var body: some View { - IKIcon(size: .small, image: MailResourcesAsset.chevronUp, shapeStyle: color) + IKIcon(MailResourcesAsset.chevronUp, size: .small) .rotationEffect(style.rotationAngle) + .foregroundStyle(AnyShapeStyle(color)) } } diff --git a/Mail/Components/IKIcon.swift b/Mail/Components/IKIcon.swift index 4876622ec..af83ca121 100644 --- a/Mail/Components/IKIcon.swift +++ b/Mail/Components/IKIcon.swift @@ -21,34 +21,39 @@ import MailResources import SwiftUI struct IKIcon: View { - enum Size { - case small, medium, large - - var heightAndWidth: CGFloat { - switch self { - case .small: - return 12 - case .medium: - return 16 - case .large: - return 24 - } - } + enum Size: CGFloat { + /// 12pt icon + case small = 12 + /// 16pt icon + case regular = 16 + /// 24pt icon + case large = 24 } + let icon: Image let size: Size - var image: MailResourcesImages - var shapeStyle: any ShapeStyle = Color.accentColor + + init(_ icon: Image, size: Size = .regular) { + self.icon = icon + self.size = size + } + + init(_ icon: MailResourcesImages, size: Size = .regular) { + self.init(icon.swiftUIImage, size: size) + } var body: some View { - image.swiftUIImage + icon .resizable() .scaledToFit() - .frame(width: size.heightAndWidth, height: size.heightAndWidth) - .foregroundStyle(AnyShapeStyle(shapeStyle)) + .frame(width: size.rawValue, height: size.rawValue) } } #Preview { - IKIcon(size: .large, image: MailResourcesAsset.folder) + HStack(spacing: UIPadding.regular) { + IKIcon(MailResourcesAsset.pencilPlain, size: .small) + IKIcon(MailResourcesAsset.pencilPlain, size: .regular) + IKIcon(MailResourcesAsset.pencilPlain, size: .large) + } } diff --git a/Mail/Components/MailboxListView.swift b/Mail/Components/MailboxListView.swift index 0a240dfe9..e71e588b3 100644 --- a/Mail/Components/MailboxListView.swift +++ b/Mail/Components/MailboxListView.swift @@ -39,10 +39,8 @@ struct MailboxListView: View { NavigationLink { AddMailboxView() } label: { - IKIcon( - size: .medium, - image: MailResourcesAsset.addCircle - ) + IKIcon(MailResourcesAsset.addCircle) + .foregroundStyle(.tint) } } .padding(value: .regular) @@ -65,3 +63,8 @@ struct MailboxListView: View { .frame(maxWidth: .infinity, alignment: .leading) } } + +#Preview { + MailboxListView(currentMailbox: PreviewHelper.sampleMailbox) + .environmentObject(PreviewHelper.sampleMailboxManager) +} diff --git a/Mail/Components/SearchTextField.swift b/Mail/Components/SearchTextField.swift index 0a257680c..3f01b03db 100644 --- a/Mail/Components/SearchTextField.swift +++ b/Mail/Components/SearchTextField.swift @@ -31,11 +31,8 @@ struct SearchTextField: View { var body: some View { HStack(spacing: UIPadding.small) { Button(action: onSubmit) { - IKIcon( - size: .medium, - image: MailResourcesAsset.search, - shapeStyle: MailResourcesAsset.textTertiaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.search) + .foregroundStyle(MailResourcesAsset.textTertiaryColor) } TextField(MailResourcesStrings.Localizable.searchFieldPlaceholder, text: $value) .autocorrectionDisabled() @@ -56,11 +53,8 @@ struct SearchTextField: View { .padding(.vertical, value: .intermediate) Button(action: onDelete) { - IKIcon( - size: .medium, - image: MailResourcesAsset.remove, - shapeStyle: MailResourcesAsset.textTertiaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.remove) + .foregroundStyle(MailResourcesAsset.textTertiaryColor) } .opacity(value.isEmpty ? 0 : 1) } diff --git a/Mail/Components/ThreadCellDetailsView.swift b/Mail/Components/ThreadCellDetailsView.swift index 063dd6d8a..7fea2905a 100644 --- a/Mail/Components/ThreadCellDetailsView.swift +++ b/Mail/Components/ThreadCellDetailsView.swift @@ -27,15 +27,29 @@ struct ThreadCellDetailsView: View { var body: some View { HStack(spacing: UIPadding.small) { if hasAttachments { - IKIcon( - size: .medium, - image: MailResourcesAsset.attachment, - shapeStyle: MailResourcesAsset.textPrimaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.attachment) + .foregroundStyle(MailResourcesAsset.textPrimaryColor) } if isFlagged { - IKIcon(size: .medium, image: MailResourcesAsset.starFull, shapeStyle: MailResourcesAsset.yellowColor.swiftUIColor) + IKIcon(MailResourcesAsset.starFull) + .foregroundStyle(MailResourcesAsset.yellowColor) } } } } + +#Preview("Attachments, Flagged") { + ThreadCellDetailsView(hasAttachments: true, isFlagged: true) +} + +#Preview("Attachments, Not flagged") { + ThreadCellDetailsView(hasAttachments: true, isFlagged: false) +} + +#Preview("No Attachment, Flagged") { + ThreadCellDetailsView(hasAttachments: false, isFlagged: true) +} + +#Preview("No Attachment, Not flagged") { + ThreadCellDetailsView(hasAttachments: false, isFlagged: false) +} diff --git a/Mail/Utils/CheckmarkToggleStyle.swift b/Mail/Utils/IKCheckmarkToggleStyle.swift similarity index 70% rename from Mail/Utils/CheckmarkToggleStyle.swift rename to Mail/Utils/IKCheckmarkToggleStyle.swift index beccc39f0..de5a26247 100644 --- a/Mail/Utils/CheckmarkToggleStyle.swift +++ b/Mail/Utils/IKCheckmarkToggleStyle.swift @@ -20,7 +20,13 @@ import MailCore import MailResources import SwiftUI -struct CheckmarkToggleStyle: ToggleStyle { +extension ToggleStyle where Self == IKCheckmarkToggleStyle { + static var ikCheckmark: IKCheckmarkToggleStyle { + IKCheckmarkToggleStyle() + } +} + +struct IKCheckmarkToggleStyle: ToggleStyle { func makeBody(configuration: Configuration) -> some View { Button { configuration.isOn.toggle() @@ -34,12 +40,9 @@ struct CheckmarkToggleStyle: ToggleStyle { RoundedRectangle(cornerRadius: 2) .fill(.tint) - IKIcon( - size: .medium, - image: MailResourcesAsset.check, - shapeStyle: MailResourcesAsset.backgroundColor.swiftUIColor - ) - .padding(2) + IKIcon(MailResourcesAsset.check) + .foregroundStyle(MailResourcesAsset.backgroundColor) + .padding(2) } .opacity(configuration.isOn ? 1 : 0) } @@ -50,3 +53,13 @@ struct CheckmarkToggleStyle: ToggleStyle { } } } + +#Preview("Is On") { + Toggle("Preview Toggle", isOn: .constant(true)) + .toggleStyle(.ikCheckmark) +} + +#Preview("Is Off") { + Toggle("Preview Toggle", isOn: .constant(false)) + .toggleStyle(.ikCheckmark) +} diff --git a/Mail/Views/AI Writer/AIHeaderView.swift b/Mail/Views/AI Writer/AIHeaderView.swift index e21338f2d..276bfde1c 100644 --- a/Mail/Views/AI Writer/AIHeaderView.swift +++ b/Mail/Views/AI Writer/AIHeaderView.swift @@ -30,7 +30,8 @@ struct AIHeaderView: View { var body: some View { HStack(spacing: UIPadding.small) { if style == .bottomSheet { - IKIcon(size: .large, image: MailResourcesAsset.aiWriter, shapeStyle: MailResourcesAsset.aiColor.swiftUIColor) + IKIcon(MailResourcesAsset.aiWriter, size: .large) + .foregroundStyle(MailResourcesAsset.aiColor) } Text(MailResourcesStrings.Localizable.aiPromptTitle) diff --git a/Mail/Views/AI Writer/Proposition/AIPropositionMenu.swift b/Mail/Views/AI Writer/Proposition/AIPropositionMenu.swift index 90bc0f80b..53de7c519 100644 --- a/Mail/Views/AI Writer/Proposition/AIPropositionMenu.swift +++ b/Mail/Views/AI Writer/Proposition/AIPropositionMenu.swift @@ -60,11 +60,7 @@ struct AIPropositionMenu: View { } } label: { HStack(spacing: UIPadding.small) { - IKIcon( - size: .large, - image: MailResourcesAsset.pencil, - shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.pencil, size: .large) Text(MailResourcesStrings.Localizable.aiButtonRefine) } } diff --git a/Mail/Views/AI Writer/Proposition/AIPropositionView.swift b/Mail/Views/AI Writer/Proposition/AIPropositionView.swift index fdc58e96d..5084374b1 100644 --- a/Mail/Views/AI Writer/Proposition/AIPropositionView.swift +++ b/Mail/Views/AI Writer/Proposition/AIPropositionView.swift @@ -100,7 +100,7 @@ struct AIPropositionView: View { aiModel.didTapInsert() } label: { Label { Text(MailResourcesStrings.Localizable.aiButtonInsert) } icon: { - IKIcon(size: .medium, image: MailResourcesAsset.plus) + IKIcon(MailResourcesAsset.plus) } } .buttonStyle(.ikPlain) diff --git a/Mail/Views/Alerts/ReplaceMessageBodyView.swift b/Mail/Views/Alerts/ReplaceMessageBodyView.swift index 0d05a2f9f..d2f3658ad 100644 --- a/Mail/Views/Alerts/ReplaceMessageBodyView.swift +++ b/Mail/Views/Alerts/ReplaceMessageBodyView.swift @@ -39,7 +39,7 @@ struct ReplaceMessageBodyView: View { Text(MailResourcesStrings.Localizable.aiReplacementDialogDescription) Toggle(MailResourcesStrings.Localizable.aiReplacementDialogDoNotShowAgain, isOn: $doNotShowAIReplaceMessageAgain) - .toggleStyle(CheckmarkToggleStyle()) + .toggleStyle(.ikCheckmark) } .textStyle(.bodySecondary) .padding(.bottom, UIPadding.alertDescriptionBottom) diff --git a/Mail/Views/Attachment/AttachmentPreview.swift b/Mail/Views/Attachment/AttachmentPreview.swift index a89a347e3..34c44bbb2 100644 --- a/Mail/Views/Attachment/AttachmentPreview.swift +++ b/Mail/Views/Attachment/AttachmentPreview.swift @@ -59,7 +59,7 @@ struct AttachmentPreview: View { Text(MailResourcesStrings.Localizable.buttonDownload) .font(MailTextStyle.labelSecondary.font) } icon: { - IKIcon(size: .large, image: MailResourcesAsset.download) + IKIcon(MailResourcesAsset.download, size: .large) } .dynamicLabelStyle(sizeClass: sizeClass ?? .regular) } diff --git a/Mail/Views/Menu Drawer/Folders/FolderCell.swift b/Mail/Views/Menu Drawer/Folders/FolderCell.swift index a57c21e4b..90d5f9684 100644 --- a/Mail/Views/Menu Drawer/Folders/FolderCell.swift +++ b/Mail/Views/Menu Drawer/Folders/FolderCell.swift @@ -165,7 +165,6 @@ struct FolderCellContent: View { .resizable() .scaledToFit() .frame(width: 24, height: 24) - .foregroundStyle(.tint) Text(folder.localizedName) .textStyle(textStyle) @@ -194,7 +193,7 @@ struct FolderCellContent: View { } } } else if isCurrentFolder { - IKIcon(size: .medium, image: MailResourcesAsset.check) + IKIcon(MailResourcesAsset.check) } } diff --git a/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift b/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift index 7c43f4271..93d136698 100644 --- a/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift +++ b/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift @@ -56,7 +56,7 @@ struct UserFoldersListView: View { matomo.track(eventWithCategory: .createFolder, name: "fromMenuDrawer") isShowingCreateFolderAlert.toggle() } label: { - IKIcon(size: .medium, image: MailResourcesAsset.addCircle) + IKIcon(MailResourcesAsset.addCircle) } .accessibilityLabel(MailResourcesStrings.Localizable.newFolderDialogTitle) .customAlert(isPresented: $isShowingCreateFolderAlert) { @@ -77,3 +77,11 @@ struct UserFoldersListView: View { } } } + +#Preview { + UserFoldersListView(folders: [NestableFolder(content: PreviewHelper.sampleFolder, children: [])]) + .environmentObject(MainViewState( + mailboxManager: PreviewHelper.sampleMailboxManager, + selectedFolder: PreviewHelper.sampleFolder + )) +} diff --git a/Mail/Views/Menu Drawer/Items/MenuDrawerItemCell.swift b/Mail/Views/Menu Drawer/Items/MenuDrawerItemCell.swift index 418565c92..bac7225d0 100644 --- a/Mail/Views/Menu Drawer/Items/MenuDrawerItemCell.swift +++ b/Mail/Views/Menu Drawer/Items/MenuDrawerItemCell.swift @@ -38,7 +38,7 @@ struct MenuDrawerItemCell: View { action() } label: { HStack(spacing: UIPadding.menuDrawerCellSpacing) { - IKIcon(size: .large, image: icon) + IKIcon(icon, size: .large) Text(label) .textStyle(.bodyMedium) @@ -51,7 +51,5 @@ struct MenuDrawerItemCell: View { } #Preview { - MenuDrawerItemCell(icon: MailResourcesAsset.drawerDownload, - label: "Importer des mails", - matomoName: "") { print("Hello") } + MenuDrawerItemCell(icon: MailResourcesAsset.drawerDownload, label: "Importer des mails", matomoName: "") { print("Hello") } } diff --git a/Mail/Views/Menu Drawer/MailboxManagement/MailboxesManagementView.swift b/Mail/Views/Menu Drawer/MailboxManagement/MailboxesManagementView.swift index c0ad8eb80..547c52ec5 100644 --- a/Mail/Views/Menu Drawer/MailboxManagement/MailboxesManagementView.swift +++ b/Mail/Views/Menu Drawer/MailboxManagement/MailboxesManagementView.swift @@ -56,7 +56,7 @@ struct MailboxesManagementView: View { } } label: { HStack(spacing: UIPadding.menuDrawerCellSpacing) { - IKIcon(size: .large, image: MailResourcesAsset.envelope) + IKIcon(MailResourcesAsset.envelope, size: .large) Text(mailboxManager.mailbox.email) .textStyle(navigationDrawerState.showMailboxes ? .bodyMediumAccent : .bodyMedium) diff --git a/Mail/Views/Menu Drawer/MailboxQuotaView.swift b/Mail/Views/Menu Drawer/MailboxQuotaView.swift index d3fcc8fb0..22ca767c5 100644 --- a/Mail/Views/Menu Drawer/MailboxQuotaView.swift +++ b/Mail/Views/Menu Drawer/MailboxQuotaView.swift @@ -59,8 +59,13 @@ private struct QuotaCircularProgressViewStyle: ProgressViewStyle { .rotationEffect(.degrees(-90)) .frame(width: UIConstants.menuDrawerQuotaSize) - IKIcon(size: .medium, image: MailResourcesAsset.drawer) + IKIcon(MailResourcesAsset.drawer) + .foregroundStyle(.tint) } .frame(height: UIConstants.menuDrawerQuotaSize) } } + +#Preview { + MailboxQuotaView(quotas: Quotas()) +} diff --git a/Mail/Views/Menu Drawer/MenuHeaderView.swift b/Mail/Views/Menu Drawer/MenuHeaderView.swift index c3ecd3c92..6b2a261b8 100644 --- a/Mail/Views/Menu Drawer/MenuHeaderView.swift +++ b/Mail/Views/Menu Drawer/MenuHeaderView.swift @@ -38,7 +38,7 @@ struct MenuHeaderView: View { Button { isShowingSettings.toggle() } label: { - IKIcon(size: .large, image: MailResourcesAsset.cog) + IKIcon(MailResourcesAsset.cog, size: .large) } .buttonStyle(.borderless) .accessibilityLabel(MailResourcesStrings.Localizable.settingsTitle) diff --git a/Mail/Views/New Message/Attachments/AttachmentUploadCell.swift b/Mail/Views/New Message/Attachments/AttachmentUploadCell.swift index ddd21de27..43b115fdb 100644 --- a/Mail/Views/New Message/Attachments/AttachmentUploadCell.swift +++ b/Mail/Views/New Message/Attachments/AttachmentUploadCell.swift @@ -41,11 +41,8 @@ struct AttachmentUploadCell: View { attachmentRemoved(attachment) } } label: { - IKIcon( - size: .small, - image: MailResourcesAsset.close, - shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.close, size: .small) + .foregroundStyle(MailResourcesAsset.textSecondaryColor) } .buttonStyle(.borderless) } diff --git a/Mail/Views/New Message/AutocompletionCell.swift b/Mail/Views/New Message/AutocompletionCell.swift index c94d82f88..0db7496bd 100644 --- a/Mail/Views/New Message/AutocompletionCell.swift +++ b/Mail/Views/New Message/AutocompletionCell.swift @@ -42,24 +42,20 @@ struct AutocompletionCell: View { .opacity(alreadyAppend && !unknownRecipient ? 0.5 : 1) if alreadyAppend && !unknownRecipient { - IKIcon( - size: .large, - image: MailResourcesAsset.checked, - shapeStyle: MailResourcesAsset.textTertiaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.checked, size: .large) + .foregroundStyle(MailResourcesAsset.textTertiaryColor) } } .padding(.horizontal, value: .regular) } } -struct AutocompletionCell_Previews: PreviewProvider { - static var previews: some View { - AutocompletionCell( - addRecipient: { _ in /* Preview */ }, - recipient: PreviewHelper.sampleRecipient1, - alreadyAppend: false, - unknownRecipient: false - ) - } +#Preview { + AutocompletionCell( + addRecipient: { _ in /* Preview */ }, + recipient: PreviewHelper.sampleRecipient1, + alreadyAppend: false, + unknownRecipient: false + ) + .environmentObject(PreviewHelper.sampleMailboxManager) } diff --git a/Mail/Views/New Message/ComposeMessageView.swift b/Mail/Views/New Message/ComposeMessageView.swift index 869f545c7..acb5cc969 100644 --- a/Mail/Views/New Message/ComposeMessageView.swift +++ b/Mail/Views/New Message/ComposeMessageView.swift @@ -285,35 +285,25 @@ struct ComposeMessageView: View { case .many, .one: HStack(spacing: UIPadding.medium) { Text(MailResourcesStrings.Localizable.externalDialogTitleRecipient) - .foregroundStyle(MailResourcesAsset.onTagExternalColor) - .textStyle(.bodySmall) - - Spacer() + .font(MailTextStyle.bodySmall.font) + .frame(maxWidth: .infinity, alignment: .leading) Button { matomo.track(eventWithCategory: .externals, name: "bannerInfo") alert.state = .externalRecipient(state: externalTag) } label: { - IKIcon( - size: .medium, - image: MailResourcesAsset.info, - shapeStyle: MailResourcesAsset.onTagExternalColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.info) } Button { matomo.track(eventWithCategory: .externals, name: "bannerManuallyClosed") isShowingExternalTag = false } label: { - IKIcon( - size: .medium, - image: MailResourcesAsset.close, - shapeStyle: MailResourcesAsset.onTagExternalColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.close) } } - .frame(maxWidth: .infinity) .padding(value: .regular) + .foregroundStyle(MailResourcesAsset.onTagExternalColor) .background(MailResourcesAsset.yellowColor.swiftUIColor) case .none: EmptyView() diff --git a/Mail/Views/New Message/RecipientField.swift b/Mail/Views/New Message/RecipientField.swift index 4f6111c32..81d9db5ff 100644 --- a/Mail/Views/New Message/RecipientField.swift +++ b/Mail/Views/New Message/RecipientField.swift @@ -78,11 +78,7 @@ struct RecipientField: View { Button { currentText = "" } label: { - IKIcon( - size: .medium, - image: MailResourcesAsset.remove, - shapeStyle: MailResourcesAsset.textTertiaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.remove) } .foregroundStyle(MailResourcesAsset.textTertiaryColor) .opacity(shouldDisplayEmptyButton ? 1 : 0) diff --git a/Mail/Views/Onboarding/OnboardingView.swift b/Mail/Views/Onboarding/OnboardingView.swift index 466caa64d..60f761719 100644 --- a/Mail/Views/Onboarding/OnboardingView.swift +++ b/Mail/Views/Onboarding/OnboardingView.swift @@ -220,7 +220,7 @@ struct OnboardingView: View { selection = min(slides.count, selection + 1) } } label: { - IKIcon(size: .large, image: MailResourcesAsset.fullArrowRight, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.fullArrowRight, size: .large) } .buttonStyle(.ikSquare) .controlSize(.large) diff --git a/Mail/Views/Search/SearchFilterCell.swift b/Mail/Views/Search/SearchFilterCell.swift index 935f5b276..071dc0395 100644 --- a/Mail/Views/Search/SearchFilterCell.swift +++ b/Mail/Views/Search/SearchFilterCell.swift @@ -28,7 +28,7 @@ struct SearchFilterCell: View { var body: some View { HStack(spacing: UIPadding.searchFolderCellSpacing) { if isSelected { - IKIcon(size: .small, image: MailResourcesAsset.check, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.check, size: .small) } Text(title) .font(MailTextStyle.bodyMedium.font) @@ -37,8 +37,10 @@ struct SearchFilterCell: View { } } -struct SearchFilterCell_Previews: PreviewProvider { - static var previews: some View { - SearchFilterCell(title: "Lus", isSelected: true) - } +#Preview("Selected") { + SearchFilterCell(title: "Lus", isSelected: true) +} + +#Preview("Not Selected") { + SearchFilterCell(title: "Lus", isSelected: false) } diff --git a/Mail/Views/Search/SearchFilterFolderCell.swift b/Mail/Views/Search/SearchFilterFolderCell.swift index 20d34af2e..0fe2c3d10 100644 --- a/Mail/Views/Search/SearchFilterFolderCell.swift +++ b/Mail/Views/Search/SearchFilterFolderCell.swift @@ -79,7 +79,7 @@ struct SearchFilterFolderCell: View { } label: { HStack(spacing: UIPadding.searchFolderCellSpacing) { if isSelected { - IKIcon(size: .small, image: MailResourcesAsset.check, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.check, size: .small) } Text(selectedFolderName) .font(MailTextStyle.bodyMedium.font) diff --git a/Mail/Views/Search/SearchHistorySectionView.swift b/Mail/Views/Search/SearchHistorySectionView.swift index db1342990..1ddb2ffa6 100644 --- a/Mail/Views/Search/SearchHistorySectionView.swift +++ b/Mail/Views/Search/SearchHistorySectionView.swift @@ -40,7 +40,8 @@ struct SearchHistorySectionView: View { ForEach(history, id: \.self) { searchItem in HStack(spacing: UIPadding.regular) { - IKIcon(size: .large, image: MailResourcesAsset.clock) + IKIcon(MailResourcesAsset.clock, size: .large) + .foregroundStyle(.tint) Text(searchItem) .textStyle(.bodyMedium) @@ -50,11 +51,8 @@ struct SearchHistorySectionView: View { Button { deleteSearchTapped(searchItem: searchItem) } label: { - IKIcon( - size: .medium, - image: MailResourcesAsset.close, - shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.close) + .foregroundStyle(MailResourcesAsset.textSecondaryColor) } .buttonStyle(BorderlessButtonStyle()) .accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionButtonDeleteHistory) diff --git a/Mail/Views/Settings/SettingsOptionCell.swift b/Mail/Views/Settings/SettingsOptionCell.swift index f32c9cf89..7c9d683e3 100644 --- a/Mail/Views/Settings/SettingsOptionCell.swift +++ b/Mail/Views/Settings/SettingsOptionCell.swift @@ -54,7 +54,8 @@ struct SettingsOptionCell: View { .frame(maxWidth: .infinity, alignment: .leading) if isSelected { - IKIcon(size: .medium, image: MailResourcesAsset.check) + IKIcon(MailResourcesAsset.check) + .foregroundStyle(.tint) } } .settingsItem() diff --git a/Mail/Views/Switch User/AccountCellView.swift b/Mail/Views/Switch User/AccountCellView.swift index 1ca455f28..527a5df91 100644 --- a/Mail/Views/Switch User/AccountCellView.swift +++ b/Mail/Views/Switch User/AccountCellView.swift @@ -89,7 +89,8 @@ struct AccountHeaderCell: View { Spacer(minLength: 0) if isSelected { - IKIcon(size: .medium, image: MailResourcesAsset.check) + IKIcon(MailResourcesAsset.check) + .foregroundStyle(.tint) } } } diff --git a/Mail/Views/Sync Profile/SyncCopyPasswordView.swift b/Mail/Views/Sync Profile/SyncCopyPasswordView.swift index 394bda41d..8365d45f7 100644 --- a/Mail/Views/Sync Profile/SyncCopyPasswordView.swift +++ b/Mail/Views/Sync Profile/SyncCopyPasswordView.swift @@ -51,7 +51,7 @@ struct SyncCopyPasswordView: View { Button { copyPassword() } label: { - IKIcon(size: .medium, image: MailResourcesAsset.duplicate) + IKIcon(MailResourcesAsset.duplicate) } .padding(.trailing, value: .regular) } diff --git a/Mail/Views/Thread List/FlushFolderView.swift b/Mail/Views/Thread List/FlushFolderView.swift index 4248f3e0c..b3f69857f 100644 --- a/Mail/Views/Thread List/FlushFolderView.swift +++ b/Mail/Views/Thread List/FlushFolderView.swift @@ -62,7 +62,7 @@ struct FlushFolderView: View { } } label: { HStack(spacing: UIPadding.small) { - IKIcon(size: .medium, image: MailResourcesAsset.bin) + IKIcon(MailResourcesAsset.bin) Text(button) } .textStyle(.bodySmallAccent) diff --git a/Mail/Views/Thread List/NoNetworkView.swift b/Mail/Views/Thread List/NoNetworkView.swift index a5a765079..9515522fc 100644 --- a/Mail/Views/Thread List/NoNetworkView.swift +++ b/Mail/Views/Thread List/NoNetworkView.swift @@ -23,10 +23,10 @@ import SwiftUI struct NoNetworkView: View { var body: some View { HStack { - IKIcon(size: .medium, image: MailResourcesAsset.noSignal, shapeStyle: MailResourcesAsset.orangeColor.swiftUIColor) + IKIcon(MailResourcesAsset.noSignal) Text(MailResourcesStrings.Localizable.noNetwork) - .textStyle(.bodySmallWarning) } + .textStyle(.bodySmallWarning) } } diff --git a/Mail/Views/Thread List/ThreadListHeader.swift b/Mail/Views/Thread List/ThreadListHeader.swift index e0c0ebaff..9692b9f1e 100644 --- a/Mail/Views/Thread List/ThreadListHeader.swift +++ b/Mail/Views/Thread List/ThreadListHeader.swift @@ -131,7 +131,7 @@ struct UnreadToggleStyle: ToggleStyle { HStack(spacing: 8) { configuration.label if configuration.isOn { - IKIcon(size: .small, image: MailResourcesAsset.close, shapeStyle: HierarchicalShapeStyle.primary) + IKIcon(MailResourcesAsset.close, size: .small) } } .textStyle(configuration.isOn ? .bodySmallMediumOnAccent : .bodySmallMediumAccent) diff --git a/Mail/Views/Thread/AttachmentsView.swift b/Mail/Views/Thread/AttachmentsView.swift index ab5d8a671..d41306c05 100644 --- a/Mail/Views/Thread/AttachmentsView.swift +++ b/Mail/Views/Thread/AttachmentsView.swift @@ -67,11 +67,8 @@ struct AttachmentsView: View { "\(MailResourcesStrings.Localizable.attachmentQuantity(attachments.count)) (\(message.attachmentsSize, format: .defaultByteCount))" ) } icon: { - IKIcon( - size: .medium, - image: MailResourcesAsset.attachment, - shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.attachment) + .foregroundStyle(MailResourcesAsset.textSecondaryColor) } .textStyle(.bodySmallSecondary) diff --git a/Mail/Views/Thread/MessageHeaderDetailView.swift b/Mail/Views/Thread/MessageHeaderDetailView.swift index e2e61cc81..f9f991f36 100644 --- a/Mail/Views/Thread/MessageHeaderDetailView.swift +++ b/Mail/Views/Thread/MessageHeaderDetailView.swift @@ -57,14 +57,10 @@ struct MessageHeaderDetailView: View { ) } HStack { - IKIcon( - size: .medium, - image: MailResourcesAsset.calendar, - shapeStyle: MailResourcesAsset.textSecondaryColor.swiftUIColor - ) + IKIcon(MailResourcesAsset.calendar) Text(message.date.formatted(date: .long, time: .shortened)) - .textStyle(.bodySmallSecondary) } + .textStyle(.bodySmallSecondary) } .frame(maxWidth: .infinity, alignment: .leading) .onPreferenceChange(ViewWidthKey.self) { diff --git a/Mail/Views/Thread/MessageHeaderSummaryView.swift b/Mail/Views/Thread/MessageHeaderSummaryView.swift index 52ac03444..7ef782f66 100644 --- a/Mail/Views/Thread/MessageHeaderSummaryView.swift +++ b/Mail/Views/Thread/MessageHeaderSummaryView.swift @@ -119,9 +119,10 @@ struct MessageHeaderSummaryView: View { if message.isDraft { Spacer() - Button(action: deleteDraftTapped) { - IKIcon(size: .large, image: MailResourcesAsset.bin, shapeStyle: MailResourcesAsset.redColor.swiftUIColor) + Button(role: .destructive, action: deleteDraftTapped) { + IKIcon(MailResourcesAsset.bin, size: .large) } + .foregroundStyle(MailResourcesAsset.redColor) } } @@ -140,13 +141,13 @@ struct MessageHeaderSummaryView: View { ) } } label: { - IKIcon(size: .large, image: MailResourcesAsset.emailActionReply) + IKIcon(MailResourcesAsset.emailActionReply, size: .large) } .adaptivePanel(item: $replyOrReplyAllMessage) { message in ReplyActionsView(message: message) } ActionsPanelButton(messages: [message], originFolder: message.folder) { - IKIcon(size: .large, image: MailResourcesAsset.plusActions) + IKIcon(MailResourcesAsset.plusActions, size: .large) } } .padding(.leading, 8)