diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 245b3e536e..ba1468bd8a 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -683,7 +683,6 @@ 3706FCD9293F65D500E42796 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; - 3706FCDE293F65D500E42796 /* HomePageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */; }; 3706FCDF293F65D500E42796 /* shield-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6E627E8809D00036718 /* shield-mouse-over.json */; }; 3706FCE1293F65D500E42796 /* PermissionAuthorization.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B64C84DD2692D7400048FEBE /* PermissionAuthorization.storyboard */; }; 3706FCE2293F65D500E42796 /* dark-trackers-3.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439772754D55100B241FA /* dark-trackers-3.json */; }; @@ -1956,7 +1955,6 @@ 4B957C122AC7AE700062CA31 /* trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439732754D55100B241FA /* trackers-1.json */; }; 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439762754D55100B241FA /* dark-trackers-1.json */; }; 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA3863C427A1E28F00749AB5 /* Feedback.storyboard */; }; - 4B957C172AC7AE700062CA31 /* HomePageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */; }; 4B957C182AC7AE700062CA31 /* shield-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6E627E8809D00036718 /* shield-mouse-over.json */; }; 4B957C1A2AC7AE700062CA31 /* PermissionAuthorization.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B64C84DD2692D7400048FEBE /* PermissionAuthorization.storyboard */; }; 4B957C1B2AC7AE700062CA31 /* dark-trackers-3.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439772754D55100B241FA /* dark-trackers-3.json */; }; @@ -2343,7 +2341,6 @@ 85AC3B0525D6B1D800C7D2AA /* ScriptSourceProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AC3B0425D6B1D800C7D2AA /* ScriptSourceProviding.swift */; }; 85AC3B3525DA82A600C7D2AA /* DataTaskProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AC3B3425DA82A600C7D2AA /* DataTaskProviding.swift */; }; 85AC3B4925DAC9BD00C7D2AA /* ConfigurationStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AC3B4825DAC9BD00C7D2AA /* ConfigurationStorageTests.swift */; }; - 85AC7AD927BD625000FFB69B /* HomePageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */; }; 85AC7ADB27BD628400FFB69B /* HomePage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AC7ADA27BD628400FFB69B /* HomePage.swift */; }; 85AC7ADD27BEB6EE00FFB69B /* HomePageDefaultBrowserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AC7ADC27BEB6EE00FFB69B /* HomePageDefaultBrowserModel.swift */; }; 85B7184A27677C2D00B4277F /* Onboarding.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85B7184927677C2D00B4277F /* Onboarding.storyboard */; }; @@ -2757,6 +2754,9 @@ B65DA5F32A77D3C700CBEE8D /* UserDefaultsWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C6A29525CC1FFD00EEB5F1 /* UserDefaultsWrapper.swift */; }; B65DA5F42A77D3FA00CBEE8D /* BundleExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6106B9D26A565DA0013B453 /* BundleExtension.swift */; }; B65DA5F52A77D3FA00CBEE8D /* BundleExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6106B9D26A565DA0013B453 /* BundleExtension.swift */; }; + B65E5DAF2B74DE6D00480415 /* TrackerNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */; }; + B65E5DB02B74E6A900480415 /* TrackerNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */; }; + B65E5DB12B74E6AA00480415 /* TrackerNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */; }; B65E6B9E26D9EC0800095F96 /* CircularProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E6B9D26D9EC0800095F96 /* CircularProgressView.swift */; }; B65E6BA026D9F10600095F96 /* NSBezierPathExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E6B9F26D9F10600095F96 /* NSBezierPathExtension.swift */; }; B6619EF62B10DFF700CD9186 /* InstructionsFormatParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6619EF52B10DFF700CD9186 /* InstructionsFormatParserTests.swift */; }; @@ -3914,7 +3914,6 @@ 85AC3B0425D6B1D800C7D2AA /* ScriptSourceProviding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptSourceProviding.swift; sourceTree = ""; }; 85AC3B3425DA82A600C7D2AA /* DataTaskProviding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTaskProviding.swift; sourceTree = ""; }; 85AC3B4825DAC9BD00C7D2AA /* ConfigurationStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurationStorageTests.swift; sourceTree = ""; }; - 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = HomePageAssets.xcassets; sourceTree = ""; }; 85AC7ADA27BD628400FFB69B /* HomePage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePage.swift; sourceTree = ""; }; 85AC7ADC27BEB6EE00FFB69B /* HomePageDefaultBrowserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePageDefaultBrowserModel.swift; sourceTree = ""; }; 85AE2FF124A33A2D002D507F /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; @@ -4241,6 +4240,7 @@ B65C7DFA2B886CF0001E2D5C /* WKPDFHUDViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WKPDFHUDViewWrapper.swift; sourceTree = ""; }; B65CD8D42B316FCA00A595BB /* __Snapshots__ */ = {isa = PBXFileReference; lastKnownFileType = folder; path = __Snapshots__; sourceTree = ""; }; B65CD8D72B341FD300A595BB /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackerNetwork.swift; sourceTree = ""; }; B65E6B9D26D9EC0800095F96 /* CircularProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularProgressView.swift; sourceTree = ""; }; B65E6B9F26D9F10600095F96 /* NSBezierPathExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSBezierPathExtension.swift; sourceTree = ""; }; B6619EF52B10DFF700CD9186 /* InstructionsFormatParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstructionsFormatParserTests.swift; sourceTree = ""; }; @@ -7148,6 +7148,7 @@ 1D77921B28FFF26100BE0210 /* RunningApplication */, AA86491424D831C4001BABEE /* View */, 4B37EE5B2B4CFC3C00A89A61 /* Surveys */, + B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */, ); path = Common; sourceTree = ""; @@ -7696,7 +7697,6 @@ 85589E9D27BFE4500038AD11 /* DefaultBrowserPromptView.swift */, 85589E9327BFE1E70038AD11 /* FavoritesView.swift */, 56D6A3D529DB2BAB0055215A /* ContinueSetUpView.swift */, - 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */, 85589E7C27BBB8630038AD11 /* HomePageView.swift */, 1DCFBC8929ADF32B00313531 /* BurnerHomePageView.swift */, 85589E7D27BBB8630038AD11 /* HomePageViewController.swift */, @@ -9016,7 +9016,6 @@ 3706FCDA293F65D500E42796 /* dark-trackers-1.json in Resources */, 3706FCDB293F65D500E42796 /* Feedback.storyboard in Resources */, B658BAB72B0F848D00D1F2C7 /* Localizable.xcstrings in Resources */, - 3706FCDE293F65D500E42796 /* HomePageAssets.xcassets in Resources */, 3706FCDF293F65D500E42796 /* shield-mouse-over.json in Resources */, 3706FCE1293F65D500E42796 /* PermissionAuthorization.storyboard in Resources */, 3706FCE2293F65D500E42796 /* dark-trackers-3.json in Resources */, @@ -9144,7 +9143,6 @@ 4B957C132AC7AE700062CA31 /* dark-trackers-1.json in Resources */, 4B957C142AC7AE700062CA31 /* Feedback.storyboard in Resources */, B658BAB92B0F849100D1F2C7 /* Localizable.xcstrings in Resources */, - 4B957C172AC7AE700062CA31 /* HomePageAssets.xcassets in Resources */, 4B957C182AC7AE700062CA31 /* shield-mouse-over.json in Resources */, 4B957C1A2AC7AE700062CA31 /* PermissionAuthorization.storyboard in Resources */, 4B957C1B2AC7AE700062CA31 /* dark-trackers-3.json in Resources */, @@ -9262,7 +9260,6 @@ AA34397C2754D55100B241FA /* dark-trackers-1.json in Resources */, AA3863C527A1E28F00749AB5 /* Feedback.storyboard in Resources */, B658BAB62B0F845D00D1F2C7 /* Localizable.xcstrings in Resources */, - 85AC7AD927BD625000FFB69B /* HomePageAssets.xcassets in Resources */, AA7EB6E727E8809D00036718 /* shield-mouse-over.json in Resources */, B64C84DE2692D7400048FEBE /* PermissionAuthorization.storyboard in Resources */, AA34397D2754D55100B241FA /* dark-trackers-3.json in Resources */, @@ -10318,6 +10315,7 @@ 3706FC7C293F65D500E42796 /* ImportedBookmarks.swift in Sources */, 3706FC7D293F65D500E42796 /* NSMenuExtension.swift in Sources */, 3701C9CF29BD040C00305B15 /* FirefoxBerkeleyDatabaseReader.swift in Sources */, + B65E5DB02B74E6A900480415 /* TrackerNetwork.swift in Sources */, 3706FC7E293F65D500E42796 /* MainWindowController.swift in Sources */, 3706FC7F293F65D500E42796 /* Tab.swift in Sources */, 3706FC81293F65D500E42796 /* DispatchQueueExtensions.swift in Sources */, @@ -11207,6 +11205,7 @@ 4B957AA92AC7AE700062CA31 /* ContentOverlayPopover.swift in Sources */, 4B957AAA2AC7AE700062CA31 /* TabShadowView.swift in Sources */, 4B957AAB2AC7AE700062CA31 /* BWMessageIdGenerator.swift in Sources */, + B65E5DB12B74E6AA00480415 /* TrackerNetwork.swift in Sources */, 31F2D2022AF026D800BF0144 /* WaitlistTermsAndConditionsActionHandler.swift in Sources */, 4B957AAC2AC7AE700062CA31 /* EncryptedValueTransformer.swift in Sources */, 4B957AAD2AC7AE700062CA31 /* Tab+Dialogs.swift in Sources */, @@ -11669,6 +11668,7 @@ B60D64492AAF1B7C00B26F50 /* AddressBarTextSelectionNavigation.swift in Sources */, 3184AC6D288F29D800C35E4B /* BadgeNotificationAnimationModel.swift in Sources */, 857FFEC027D239DC00415E7A /* HyperLink.swift in Sources */, + B65E5DAF2B74DE6D00480415 /* TrackerNetwork.swift in Sources */, 37445F992A1566420029F789 /* SyncDataProviders.swift in Sources */, 4B9292A426670D2A00AD2C21 /* PasteboardWriting.swift in Sources */, 1D26EBAC2B74BECB0002A93F /* NSImageSendable.swift in Sources */, diff --git a/DuckDuckGo/Application/AppIconChanger.swift b/DuckDuckGo/Application/AppIconChanger.swift index 5d0c49fdd2..67c5880eb5 100644 --- a/DuckDuckGo/Application/AppIconChanger.swift +++ b/DuckDuckGo/Application/AppIconChanger.swift @@ -26,14 +26,10 @@ final class AppIconChanger { subscribeToIsInternal(internalUserDecider) } - enum Icons: String { - case internalChannelIcon = "InternalChannelIcon" - } - func updateIcon(isInternalChannel: Bool) { let icon: NSImage? if isInternalChannel { - icon = NSImage(named: Icons.internalChannelIcon.rawValue) + icon = .internalChannelIcon } else { icon = nil } diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeDefaultBrowserPromptBackgroundColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeDefaultBrowserPromptBackgroundColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeDefaultBrowserPromptBackgroundColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeDefaultBrowserPromptBackgroundColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeDefaultBrowserPromptTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeDefaultBrowserPromptTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeDefaultBrowserPromptTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeDefaultBrowserPromptTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeEntityIconBackgroundColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeEntityIconBackgroundColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeEntityIconBackgroundColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeEntityIconBackgroundColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeEntityIconTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeEntityIconTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeEntityIconTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeEntityIconTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesBackgroundColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesBackgroundColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesBackgroundColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesBackgroundColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesGhostColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesGhostColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesGhostColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesGhostColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesHoverColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesHoverColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFavoritesHoverColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFavoritesHoverColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedEmptyStateIconColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedEmptyStateIconColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedEmptyStateIconColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedEmptyStateIconColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedEmptyStateTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedEmptyStateTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedEmptyStateTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedEmptyStateTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemButtonTintColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemButtonTintColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemButtonTintColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemButtonTintColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverBackgroundColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverBackgroundColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverBackgroundColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverBackgroundColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverShadow1Color.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverShadow1Color.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverShadow1Color.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverShadow1Color.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverShadow2Color.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverShadow2Color.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemHoverShadow2Color.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemHoverShadow2Color.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemPageTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemPageTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemPageTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemPageTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemTimeTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemTimeTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemTimeTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemTimeTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemTitleColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemTitleColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedItemTitleColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedItemTitleColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedTitleColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedTitleColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeFeedTitleColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeFeedTitleColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeNextStepsTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeNextStepsTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomeNextStepsTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomeNextStepsTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomePageMoreOrLessTextColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/HomePageMoreOrLessTextColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/HomePageMoreOrLessTextColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/HomePageMoreOrLessTextColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/NewTabPageBackgroundColor.colorset/Contents.json b/DuckDuckGo/Assets.xcassets/Colors/HomePage/NewTabPageBackgroundColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/NewTabPageBackgroundColor.colorset/Contents.json rename to DuckDuckGo/Assets.xcassets/Colors/HomePage/NewTabPageBackgroundColor.colorset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Icon 7.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Icon 7.pdf similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Icon 7.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Icon 7.pdf diff --git a/DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Icon 8.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Icon 8.pdf similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/BurnerWindowHomepageImage.imageset/Icon 8.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/BurnerWindowHomepageImage.imageset/Icon 8.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowDown.imageset/Arrow - Down-16.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowDown.imageset/Arrow - Down-16.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowDown.imageset/Arrow - Down-16.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowDown.imageset/Arrow - Down-16.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowDown.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowDown.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowDown.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowDown.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowUp.imageset/Arrow - Up-16.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowUp.imageset/Arrow - Up-16.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowUp.imageset/Arrow - Up-16.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowUp.imageset/Arrow - Up-16.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowUp.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowUp.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeArrowUp.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeArrowUp.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/updatedLogoGrayText2-1.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/updatedLogoGrayText2-1.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/updatedLogoGrayText2-1.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/updatedLogoGrayText2-1.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/updatedLogoWhiteText2.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/updatedLogoWhiteText2.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeLogoText.imageset/updatedLogoWhiteText2.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeLogoText.imageset/updatedLogoWhiteText2.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomePageLogo.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomePageLogo.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomePageLogo.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomePageLogo.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomePageLogo.imageset/HomePageLogo.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomePageLogo.imageset/HomePageLogo.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomePageLogo.imageset/HomePageLogo.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomePageLogo.imageset/HomePageLogo.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeShield.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeShield.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeShield.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeShield.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeShield.imageset/Shield - 64.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeShield.imageset/Shield - 64.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeShield.imageset/Shield - 64.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeShield.imageset/Shield - 64.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMaximized.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMaximized.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMaximized.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMaximized.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMaximized.imageset/Sidebar - Minimized-16.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMaximized.imageset/Sidebar - Minimized-16.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMaximized.imageset/Sidebar - Minimized-16.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMaximized.imageset/Sidebar - Minimized-16.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMinimized.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMinimized.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMinimized.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMinimized.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMinimized.imageset/Sidebar-16.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMinimized.imageset/Sidebar-16.pdf similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/HomeSidebarMinimized.imageset/Sidebar-16.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/HomeSidebarMinimized.imageset/Sidebar-16.pdf diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Left-Dark.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Left-Dark.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Left-Dark.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Left-Dark.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Left.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Left.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsLeft.imageset/Left.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsLeft.imageset/Left.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Right-Dark.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Right-Dark.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Right-Dark.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Right-Dark.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Right.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Right.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/NextStepsRight.imageset/Right.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/NextStepsRight.imageset/Right.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/Rocket.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/Rocket.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Rocket.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/Rocket.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Rocket.imageset/rocket.pdf b/DuckDuckGo/Assets.xcassets/Images/HomePage/Rocket.imageset/rocket.pdf similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Rocket.imageset/rocket.pdf rename to DuckDuckGo/Assets.xcassets/Images/HomePage/Rocket.imageset/rocket.pdf diff --git a/DuckDuckGo/Assets.xcassets/Images/RocketNoColor.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/RocketGrayscale.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/RocketNoColor.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/RocketGrayscale.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/RocketNoColor.imageset/Rocket-16.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/RocketGrayscale.imageset/Rocket-16.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/RocketNoColor.imageset/Rocket-16.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/RocketGrayscale.imageset/Rocket-16.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Colors/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adform.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adform.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adform.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adform.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adform.imageset/adform.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adform.imageset/adform.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adform.imageset/adform.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adform.imageset/adform.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adobe.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adobe.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adobe.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adobe.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adobe.imageset/adobe.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adobe.imageset/adobe.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-adobe.imageset/adobe.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-adobe.imageset/adobe.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amazon.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amazon.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amazon.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amazon.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amazon.imageset/amazon.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amazon.imageset/amazon.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amazon.imageset/amazon.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amazon.imageset/amazon.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amobee.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amobee.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amobee.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amobee.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amobee.imageset/amobee.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amobee.imageset/amobee.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-amobee.imageset/amobee.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-amobee.imageset/amobee.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-appnexus.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-appnexus.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-appnexus.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-appnexus.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-appnexus.imageset/appnexus.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-appnexus.imageset/appnexus.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-appnexus.imageset/appnexus.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-appnexus.imageset/appnexus.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-centro.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-centro.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-centro.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-centro.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-centro.imageset/centro.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-centro.imageset/centro.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-centro.imageset/centro.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-centro.imageset/centro.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-cloudflare.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-cloudflare.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-cloudflare.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-cloudflare.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-cloudflare.imageset/cloudflare.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-cloudflare.imageset/cloudflare.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-cloudflare.imageset/cloudflare.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-cloudflare.imageset/cloudflare.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-comscore.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-comscore.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-comscore.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-comscore.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-comscore.imageset/comscore.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-comscore.imageset/comscore.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-comscore.imageset/comscore.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-comscore.imageset/comscore.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-conversant.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-conversant.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-conversant.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-conversant.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-conversant.imageset/conversant.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-conversant.imageset/conversant.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-conversant.imageset/conversant.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-conversant.imageset/conversant.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-criteo.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-criteo.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-criteo.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-criteo.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-criteo.imageset/criteo.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-criteo.imageset/criteo.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-criteo.imageset/criteo.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-criteo.imageset/criteo.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-dataxu.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-dataxu.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-dataxu.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-dataxu.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-dataxu.imageset/dataxu.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-dataxu.imageset/dataxu.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-dataxu.imageset/dataxu.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-dataxu.imageset/dataxu.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-facebook.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-facebook.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-facebook.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-facebook.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-facebook.imageset/facebook.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-facebook.imageset/facebook.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-facebook.imageset/facebook.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-facebook.imageset/facebook.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-google.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-google.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-google.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-google.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-google.imageset/google.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-google.imageset/google.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-google.imageset/google.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-google.imageset/google.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-hotjar.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-hotjar.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-hotjar.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-hotjar.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-hotjar.imageset/hotjar.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-hotjar.imageset/hotjar.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-hotjar.imageset/hotjar.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-hotjar.imageset/hotjar.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-indexexchange.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-indexexchange.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-indexexchange.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-indexexchange.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-indexexchange.imageset/indexexchange.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-indexexchange.imageset/indexexchange.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-indexexchange.imageset/indexexchange.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-indexexchange.imageset/indexexchange.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-iponweb.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-iponweb.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-iponweb.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-iponweb.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-iponweb.imageset/iponweb.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-iponweb.imageset/iponweb.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-iponweb.imageset/iponweb.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-iponweb.imageset/iponweb.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-linkedin.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-linkedin.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-linkedin.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-linkedin.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-linkedin.imageset/linkedin.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-linkedin.imageset/linkedin.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-linkedin.imageset/linkedin.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-linkedin.imageset/linkedin.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-lotamesolutions.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-lotamesolutions.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-lotamesolutions.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-lotamesolutions.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-lotamesolutions.imageset/lotamesolutions.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-lotamesolutions.imageset/lotamesolutions.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-lotamesolutions.imageset/lotamesolutions.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-lotamesolutions.imageset/lotamesolutions.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-mediamath.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-mediamath.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-mediamath.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-mediamath.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-mediamath.imageset/mediamath.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-mediamath.imageset/mediamath.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-mediamath.imageset/mediamath.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-mediamath.imageset/mediamath.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-microsoft.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-microsoft.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-microsoft.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-microsoft.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-microsoft.imageset/microsoft.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-microsoft.imageset/microsoft.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-microsoft.imageset/microsoft.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-microsoft.imageset/microsoft.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-neustar.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-neustar.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-neustar.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-neustar.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-neustar.imageset/neustar.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-neustar.imageset/neustar.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-neustar.imageset/neustar.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-neustar.imageset/neustar.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-newrelic.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-newrelic.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-newrelic.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-newrelic.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-newrelic.imageset/newrelic.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-newrelic.imageset/newrelic.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-newrelic.imageset/newrelic.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-newrelic.imageset/newrelic.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-openx.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-openx.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-openx.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-openx.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-openx.imageset/openx.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-openx.imageset/openx.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-openx.imageset/openx.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-openx.imageset/openx.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-oracle.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-oracle.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-oracle.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-oracle.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-oracle.imageset/oracle.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-oracle.imageset/oracle.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-oracle.imageset/oracle.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-oracle.imageset/oracle.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-pubmatic.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-pubmatic.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-pubmatic.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-pubmatic.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-pubmatic.imageset/pubmatic.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-pubmatic.imageset/pubmatic.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-pubmatic.imageset/pubmatic.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-pubmatic.imageset/pubmatic.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-quantcast.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-quantcast.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-quantcast.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-quantcast.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-quantcast.imageset/quantcast.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-quantcast.imageset/quantcast.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-quantcast.imageset/quantcast.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-quantcast.imageset/quantcast.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-rubicon.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-rubicon.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-rubicon.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-rubicon.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-rubicon.imageset/rubicon.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-rubicon.imageset/rubicon.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-rubicon.imageset/rubicon.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-rubicon.imageset/rubicon.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-salesforce.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-salesforce.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-salesforce.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-salesforce.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-salesforce.imageset/salesforce.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-salesforce.imageset/salesforce.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-salesforce.imageset/salesforce.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-salesforce.imageset/salesforce.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-smartadserver.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-smartadserver.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-smartadserver.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-smartadserver.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-smartadserver.imageset/smartadserver.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-smartadserver.imageset/smartadserver.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-smartadserver.imageset/smartadserver.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-smartadserver.imageset/smartadserver.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-spotx.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-spotx.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-spotx.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-spotx.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-spotx.imageset/spotx.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-spotx.imageset/spotx.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-spotx.imageset/spotx.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-spotx.imageset/spotx.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-stackpath.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-stackpath.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-stackpath.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-stackpath.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-stackpath.imageset/stackpath.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-stackpath.imageset/stackpath.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-stackpath.imageset/stackpath.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-stackpath.imageset/stackpath.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-taboola.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-taboola.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-taboola.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-taboola.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-taboola.imageset/taboola.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-taboola.imageset/taboola.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-taboola.imageset/taboola.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-taboola.imageset/taboola.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-tapad.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-tapad.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-tapad.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-tapad.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-tapad.imageset/tapad.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-tapad.imageset/tapad.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-tapad.imageset/tapad.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-tapad.imageset/tapad.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thenielsencompany.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thenielsencompany.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thenielsencompany.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thenielsencompany.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thenielsencompany.imageset/thenielsencompany.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thenielsencompany.imageset/thenielsencompany.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thenielsencompany.imageset/thenielsencompany.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thenielsencompany.imageset/thenielsencompany.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thetradedesk.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thetradedesk.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thetradedesk.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thetradedesk.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thetradedesk.imageset/thetradedesk.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thetradedesk.imageset/thetradedesk.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-thetradedesk.imageset/thetradedesk.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-thetradedesk.imageset/thetradedesk.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-towerdata.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-towerdata.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-towerdata.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-towerdata.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-towerdata.imageset/towerdata.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-towerdata.imageset/towerdata.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-towerdata.imageset/towerdata.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-towerdata.imageset/towerdata.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-twitter.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-twitter.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-twitter.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-twitter.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-twitter.imageset/twitter.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-twitter.imageset/twitter.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-twitter.imageset/twitter.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-twitter.imageset/twitter.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-verizonmedia.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-verizonmedia.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-verizonmedia.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-verizonmedia.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-verizonmedia.imageset/verizonmedia.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-verizonmedia.imageset/verizonmedia.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-verizonmedia.imageset/verizonmedia.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-verizonmedia.imageset/verizonmedia.svg diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-xaxis.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-xaxis.imageset/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-xaxis.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-xaxis.imageset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-xaxis.imageset/xaxis.svg b/DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-xaxis.imageset/xaxis.svg similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/feed-xaxis.imageset/xaxis.svg rename to DuckDuckGo/Assets.xcassets/Images/HomePage/trackers/feed-xaxis.imageset/xaxis.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/Contents.json b/DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Contents.json similarity index 75% rename from DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/Contents.json rename to DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Contents.json index 2e3acc9375..0cb9bd811a 100644 --- a/DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/Contents.json +++ b/DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "WarningColored.png", + "filename" : "Xaxis.svg", "idiom" : "universal" } ], diff --git a/DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Xaxis.svg b/DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Xaxis.svg new file mode 100644 index 0000000000..605718beb7 --- /dev/null +++ b/DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Xaxis.svg @@ -0,0 +1,4 @@ + + + + diff --git a/DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/WarningColored.png b/DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/WarningColored.png deleted file mode 100644 index 16c1f7482b..0000000000 Binary files a/DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/WarningColored.png and /dev/null differ diff --git a/DuckDuckGo/Bookmarks/View/BookmarkManagementDetailViewController.swift b/DuckDuckGo/Bookmarks/View/BookmarkManagementDetailViewController.swift index 6aaa23ab4d..a9b03ede97 100644 --- a/DuckDuckGo/Bookmarks/View/BookmarkManagementDetailViewController.swift +++ b/DuckDuckGo/Bookmarks/View/BookmarkManagementDetailViewController.swift @@ -71,7 +71,7 @@ final class BookmarkManagementDetailViewController: NSViewController, NSMenuItem NSAppearance.withAppAppearance { if editingBookmarkIndex != nil { - view.animator().layer?.backgroundColor = NSColor.backgroundSecondaryColor.cgColor + view.animator().layer?.backgroundColor = NSColor.backgroundSecondary.cgColor } else { view.animator().layer?.backgroundColor = NSColor.bookmarkPageBackground.cgColor } @@ -107,8 +107,8 @@ final class BookmarkManagementDetailViewController: NSViewController, NSMenuItem newBookmarkButton.bezelStyle = .shadowlessSquare newBookmarkButton.cornerRadius = 4 newBookmarkButton.normalTintColor = .button - newBookmarkButton.mouseDownColor = .buttonMouseDownColor - newBookmarkButton.mouseOverColor = .buttonMouseOverColor + newBookmarkButton.mouseDownColor = .buttonMouseDown + newBookmarkButton.mouseOverColor = .buttonMouseOver newBookmarkButton.imageHugsTitle = true newBookmarkButton.setContentHuggingPriority(.defaultHigh, for: .vertical) newBookmarkButton.translatesAutoresizingMaskIntoConstraints = false @@ -120,8 +120,8 @@ final class BookmarkManagementDetailViewController: NSViewController, NSMenuItem newFolderButton.bezelStyle = .shadowlessSquare newFolderButton.cornerRadius = 4 newFolderButton.normalTintColor = .button - newFolderButton.mouseDownColor = .buttonMouseDownColor - newFolderButton.mouseOverColor = .buttonMouseOverColor + newFolderButton.mouseDownColor = .buttonMouseDown + newFolderButton.mouseOverColor = .buttonMouseOver newFolderButton.imageHugsTitle = true newFolderButton.setContentHuggingPriority(.defaultHigh, for: .vertical) newFolderButton.translatesAutoresizingMaskIntoConstraints = false diff --git a/DuckDuckGo/Bookmarks/View/BookmarkTableCellView.swift b/DuckDuckGo/Bookmarks/View/BookmarkTableCellView.swift index b9cd014e05..195ad48845 100644 --- a/DuckDuckGo/Bookmarks/View/BookmarkTableCellView.swift +++ b/DuckDuckGo/Bookmarks/View/BookmarkTableCellView.swift @@ -141,10 +141,10 @@ final class BookmarkTableCellView: NSTableCellView { shadowView.borderColor = .clear shadowView.borderWidth = 1 shadowView.cornerRadius = 4 - shadowView.fillColor = .tableCellEditingColor + shadowView.fillColor = .tableCellEditing shadowView.translatesAutoresizingMaskIntoConstraints = false shadowView.wantsLayer = true - shadowView.layer?.backgroundColor = NSColor.tableCellEditingColor.cgColor + shadowView.layer?.backgroundColor = NSColor.tableCellEditing.cgColor shadowView.layer?.cornerRadius = 6 let shadow = NSShadow() @@ -161,7 +161,7 @@ final class BookmarkTableCellView: NSTableCellView { containerView.addSubview(bookmarkURLLabel) containerView.addSubview(favoriteButton) - faviconImageView.contentTintColor = .suggestionIconColor + faviconImageView.contentTintColor = .suggestionIcon faviconImageView.wantsLayer = true faviconImageView.layer?.cornerRadius = 2.0 faviconImageView.setContentHuggingPriority(.init(rawValue: 251), for: .horizontal) @@ -202,7 +202,7 @@ final class BookmarkTableCellView: NSTableCellView { accessoryImageView.widthAnchor.constraint(equalToConstant: 22).isActive = true accessoryImageView.heightAnchor.constraint(equalToConstant: 32).isActive = true - menuButton.contentTintColor = .buttonColor + menuButton.contentTintColor = .button menuButton.translatesAutoresizingMaskIntoConstraints = false menuButton.isBordered = false menuButton.isHidden = true @@ -392,9 +392,9 @@ final class BookmarkTableCellView: NSTableCellView { private func updateColors() { titleLabel.textColor = isSelected && !editing ? .white : .controlTextColor - menuButton.contentTintColor = isSelected ? .white : .buttonColor - faviconImageView.contentTintColor = isSelected ? .white : .suggestionIconColor - accessoryImageView.contentTintColor = isSelected ? .white : .suggestionIconColor + menuButton.contentTintColor = isSelected ? .white : .button + faviconImageView.contentTintColor = isSelected ? .white : .suggestionIcon + accessoryImageView.contentTintColor = isSelected ? .white : .suggestionIcon } private func ensureTrackingArea() { diff --git a/DuckDuckGo/Bookmarks/View/BookmarkTableRowView.swift b/DuckDuckGo/Bookmarks/View/BookmarkTableRowView.swift index a1f3194927..ebd3a9f318 100644 --- a/DuckDuckGo/Bookmarks/View/BookmarkTableRowView.swift +++ b/DuckDuckGo/Bookmarks/View/BookmarkTableRowView.swift @@ -58,7 +58,7 @@ final class BookmarkTableRowView: NSTableRowView { if mouseInside && !editing { let path = NSBezierPath(roundedRect: bounds, xRadius: 6, yRadius: 6) - NSColor.rowHoverColor.setFill() + NSColor.rowHover.setFill() path.fill() } diff --git a/DuckDuckGo/Bookmarks/View/RoundedSelectionRowView.swift b/DuckDuckGo/Bookmarks/View/RoundedSelectionRowView.swift index b7f8e2d1e8..c66224aa4f 100644 --- a/DuckDuckGo/Bookmarks/View/RoundedSelectionRowView.swift +++ b/DuckDuckGo/Bookmarks/View/RoundedSelectionRowView.swift @@ -37,7 +37,7 @@ final class RoundedSelectionRowView: NSTableRowView { selectionRect.size.height -= (insets.top + insets.bottom) let path = NSBezierPath(roundedRect: selectionRect, xRadius: 6, yRadius: 6) - NSColor.rowDragDropColor.setFill() + NSColor.rowDragDrop.setFill() path.fill() } @@ -50,7 +50,7 @@ final class RoundedSelectionRowView: NSTableRowView { selectionRect.size.height -= (insets.top + insets.bottom) let path = NSBezierPath(roundedRect: selectionRect, xRadius: 6, yRadius: 6) - NSColor.rowHoverColor.setFill() + NSColor.rowHover.setFill() path.fill() } @@ -65,7 +65,7 @@ final class RoundedSelectionRowView: NSTableRowView { selectionRect.size.height -= (insets.top + insets.bottom) let path = NSBezierPath(roundedRect: selectionRect, xRadius: 6, yRadius: 6) - NSColor.buttonMouseOverColor.setFill() + NSColor.buttonMouseOver.setFill() path.fill() } diff --git a/DuckDuckGo/Bookmarks/ViewModel/BookmarkViewModel.swift b/DuckDuckGo/Bookmarks/ViewModel/BookmarkViewModel.swift index c8ab04e8e2..f2229537d8 100644 --- a/DuckDuckGo/Bookmarks/ViewModel/BookmarkViewModel.swift +++ b/DuckDuckGo/Bookmarks/ViewModel/BookmarkViewModel.swift @@ -46,9 +46,9 @@ struct BookmarkViewModel { let favicon = bookmark.favicon(.small)?.copy() as? NSImage favicon?.size = NSSize.faviconSize - return favicon ?? NSImage(named: "BookmarkDefaultFavicon") + return favicon ?? .bookmarkDefaultFavicon } else if entity is BookmarkFolder { - return NSImage(named: "Folder") + return .folder } else { return nil } @@ -58,10 +58,8 @@ struct BookmarkViewModel { fileprivate extension NSImage { - static let favoriteFaviconImage = NSImage(named: "FavoriteFavicon")! - func makeFavoriteOverlay() -> NSImage { - let overlayImage = Self.favoriteFaviconImage + let overlayImage = NSImage.favoriteFavicon let newImage = NSImage(size: size) newImage.lockFocus() diff --git a/DuckDuckGo/BookmarksBar/View/BookmarksBarCollectionViewItem.swift b/DuckDuckGo/BookmarksBar/View/BookmarksBarCollectionViewItem.swift index 9490689fbb..61c0ec7630 100644 --- a/DuckDuckGo/BookmarksBar/View/BookmarksBarCollectionViewItem.swift +++ b/DuckDuckGo/BookmarksBar/View/BookmarksBarCollectionViewItem.swift @@ -95,9 +95,9 @@ final class BookmarksBarCollectionViewItem: NSCollectionViewItem { case .bookmark(_, let url, let storedFavicon, _): let host = URL(string: url)?.host ?? "" let favicon = storedFavicon ?? FaviconManager.shared.getCachedFavicon(for: host, sizeCategory: .small)?.image - faviconView.image = favicon ?? NSImage(named: "Bookmark") + faviconView.image = favicon ?? .bookmark case .folder: - faviconView.image = NSImage(named: "Folder-16") + faviconView.image = .folder16 } } diff --git a/DuckDuckGo/BookmarksBar/View/BookmarksBarViewModel.swift b/DuckDuckGo/BookmarksBar/View/BookmarksBarViewModel.swift index 99a2606d7e..2dc81a1596 100644 --- a/DuckDuckGo/BookmarksBar/View/BookmarksBarViewModel.swift +++ b/DuckDuckGo/BookmarksBar/View/BookmarksBarViewModel.swift @@ -306,8 +306,7 @@ extension BookmarksBarViewModel: NSCollectionViewDelegate, NSCollectionViewDataS return NSView() } - let image = NSImage(named: "Drop-Target-Indicator-16")! - let imageView = NSImageView(image: image) + let imageView = NSImageView(image: .dropTargetIndicator16) imageView.contentTintColor = NSColor.controlAccentColor return imageView diff --git a/DuckDuckGo/BookmarksBar/View/Prompt/BookmarksBarPromptPopover.swift b/DuckDuckGo/BookmarksBar/View/Prompt/BookmarksBarPromptPopover.swift index 398dbc5af1..b6dd6a5933 100644 --- a/DuckDuckGo/BookmarksBar/View/Prompt/BookmarksBarPromptPopover.swift +++ b/DuckDuckGo/BookmarksBar/View/Prompt/BookmarksBarPromptPopover.swift @@ -75,7 +75,7 @@ struct BookmarksBarPromptView: View { var body: some View { VStack(spacing: 0) { - Image("BookmarksBarIllustration") + Image(.bookmarksBarIllustration) .resizable() .frame(width: 256, height: 96) .padding(.bottom, 16) @@ -121,7 +121,7 @@ struct BookmarksBarPromptView: View { .padding(.top, 20) .padding(.bottom, 16) .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color("InterfaceBackgroundColor")) + .background(Color(.interfaceBackground)) } } diff --git a/DuckDuckGo/Common/Extensions/CIImageExtension.swift b/DuckDuckGo/Common/Extensions/CIImageExtension.swift index 143ab0e804..35b815e473 100644 --- a/DuckDuckGo/Common/Extensions/CIImageExtension.swift +++ b/DuckDuckGo/Common/Extensions/CIImageExtension.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import CoreImage.CIFilterBuiltins extension CIImage { @@ -82,10 +83,10 @@ extension CIImage { static let duckDuckGo: QRCodeParameters = { let logicalQrSize = QRCodeParameters.default.logicalQrSize let icon: CIImage = { - let logo = NSImage(named: "Logo")! + let logo = NSImage.logo let logoRadiusFactor: CGFloat = 0.77 let logoMargin: CGFloat = 6 - let logoBackgroundColor = NSColor.logoBackgroundColor + let logoBackgroundColor: NSColor = .logoBackground let logoSize = NSSize(width: logicalQrSize, height: logicalQrSize).scaled(by: CIImage.retinaScaleFactor) var image = logo.ciImage(with: logoSize) @@ -105,7 +106,7 @@ extension CIImage { return QRCodeParameters(logicalQrSize: logicalQrSize, correctionLevel: .high, icon: icon, - color: .logoBackgroundColor, + color: .logoBackground, backgroundColor: .white) }() } diff --git a/DuckDuckGo/Common/Extensions/NSAlertExtension.swift b/DuckDuckGo/Common/Extensions/NSAlertExtension.swift index 616df15e44..2c7e660d36 100644 --- a/DuckDuckGo/Common/Extensions/NSAlertExtension.swift +++ b/DuckDuckGo/Common/Extensions/NSAlertExtension.swift @@ -21,45 +21,12 @@ import Cocoa extension NSAlert { - static var cautionImage = NSImage(named: "NSCaution") - - static func javascriptAlert(with message: String) -> NSAlert { - let alert = NSAlert() - alert.icon = Self.cautionImage - alert.messageText = message - alert.addButton(withTitle: UserText.ok) - return alert - } - - static func javascriptConfirmation(with message: String) -> NSAlert { - let alert = NSAlert() - alert.icon = Self.cautionImage - alert.messageText = message - alert.addButton(withTitle: UserText.ok) - alert.addButton(withTitle: UserText.cancel) - return alert - } - - static func javascriptTextInput(prompt: String, defaultText: String?) -> NSAlert { - let alert = NSAlert() - alert.icon = Self.cautionImage - alert.messageText = prompt - alert.addButton(withTitle: UserText.ok) - alert.addButton(withTitle: UserText.cancel) - let textField = NSTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24)) - textField.stringValue = defaultText ?? "" - textField.placeholderString = defaultText - alert.accessoryView = textField - alert.window.initialFirstResponder = textField - return alert - } - static func fireproofAlert(with domain: String) -> NSAlert { let alert = NSAlert() alert.messageText = UserText.fireproofConfirmationTitle(domain: domain) alert.informativeText = UserText.fireproofConfirmationMessage alert.alertStyle = .warning - alert.icon = NSImage(named: "Fireproof") + alert.icon = .fireproof alert.addButton(withTitle: UserText.fireproof) alert.addButton(withTitle: UserText.notNow) return alert @@ -70,7 +37,7 @@ extension NSAlert { alert.messageText = UserText.clearAllDataQuestion alert.informativeText = UserText.clearAllDataDescription alert.alertStyle = .warning - alert.icon = NSImage(named: "BurnAlert") + alert.icon = .burnAlert alert.addButton(withTitle: UserText.clear) alert.addButton(withTitle: UserText.cancel) return alert @@ -86,7 +53,7 @@ extension NSAlert { alert.informativeText = UserText.clearDataTodayDescription } alert.alertStyle = .warning - alert.icon = NSImage(named: "BurnAlert") + alert.icon = .burnAlert alert.addButton(withTitle: UserText.clear) alert.addButton(withTitle: UserText.cancel) return alert diff --git a/DuckDuckGo/Common/Extensions/NSColorExtension.swift b/DuckDuckGo/Common/Extensions/NSColorExtension.swift index 47b6f6f157..3b54b8271c 100644 --- a/DuckDuckGo/Common/Extensions/NSColorExtension.swift +++ b/DuckDuckGo/Common/Extensions/NSColorExtension.swift @@ -20,21 +20,7 @@ import Cocoa extension NSColor { - static var homePageSearchBarBackgroundColor: NSColor { - return NSColor(named: "HomePageSearchBarBackgroundColor")! - } - - static var addressBarFocusedBackgroundColor: NSColor { - NSColor(named: "AddressBarFocusedBackgroundColor")! - } - - static var addressBarBackgroundColor: NSColor { - NSColor(named: "AddressBarBackgroundColor")! - } - - static var burnerAccentColor: NSColor { - NSColor(named: "BurnerAccentColor")! - } + // MARK: Aliases static var burnerWindowMouseOverColor: NSColor { .alternateSelectedControlTextColor.withAlphaComponent(0.1) @@ -44,127 +30,32 @@ extension NSColor { .alternateSelectedControlTextColor.withAlphaComponent(0.2) } - static var addressBarBorderColor: NSColor { - NSColor(named: "AddressBarBorderColor")! - } - - static var addressBarShadowColor: NSColor { - NSColor(named: "AddressBarShadowColor")! - } - - static var addressBarSolidSeparatorColor: NSColor { - NSColor(named: "AddressBarSolidSeparatorColor")! - } - - static var suggestionsShadowColor: NSColor { - NSColor(named: "SuggestionsShadowColor")! - } - static let detailAccentColor = NSColor(catalogName: "System", colorName: "detailAccentColor") ?? .controlAccentColor - static var addressBarSuffixColor: NSColor { + static var addressBarSuffix: NSColor { .detailAccentColor } - static var findInPageFocusedBackgroundColor: NSColor { - NSColor(named: "FindInPageFocusedBackgroundColor")! - } - - static var suggestionTextColor: NSColor { - NSColor(named: "SuggestionTextColor")! - } - - static var suggestionIconColor: NSColor { - NSColor(named: "SuggestionIconColor")! - } - - static var selectedSuggestionTintColor: NSColor { - NSColor(named: "SelectedSuggestionTintColor")! - } - - static var interfaceBackgroundColor: NSColor { - NSColor(named: "InterfaceBackgroundColor")! - } - - static var tabMouseOverColor: NSColor { - NSColor(named: "TabMouseOverColor")! - } - - static var buttonMouseOverColor: NSColor { - NSColor(named: "ButtonMouseOverColor")! - } - - static var progressBarGradientDarkColor: NSColor { + static var progressBarGradientDark: NSColor { .controlAccentColor } - static var progressBarGradientLightColor: NSColor { + static var progressBarGradientLight: NSColor { .detailAccentColor } - static var backgroundSecondaryColor: NSColor { - NSColor(named: "BackgroundSecondaryColor")! - } - - static var tableCellEditingColor: NSColor { - NSColor(named: "TableCellEditingColor")! - } - - static var rowHoverColor: NSColor { - NSColor(named: "RowHoverColor")! - } - - static var rowDragDropColor: NSColor { - NSColor(named: "RowDragDropColor")! - } - - static var privacyEnabledColor: NSColor { - NSColor(named: "PrivacyEnabledColor")! - } - - static var editingPanelColor: NSColor { - NSColor(named: "EditingPanelColor")! - } - - static var dialogPanelBackgroundColor: NSColor { - NSColor(named: "DialogPanelBackground")! + static var textEditorBackground: NSColor { + .blackWhite5 } - static var buttonMouseDownColor: NSColor { - NSColor(named: "ButtonMouseDownColor")! + static var textEditorBorder: NSColor { + .blackWhite10 } - static let buttonColor: NSColor = NSColor(named: "ButtonColor")! - - static var logoBackgroundColor: NSColor { - NSColor(named: "LogoBackgroundColor")! - } - - static var textEditorBackgroundColor: NSColor { - NSColor(named: "BlackWhite5")! - } - - static var textEditorBorderColor: NSColor { - NSColor(named: "BlackWhite10")! - } + // MARK: - Helpers var ciColor: CIColor { CIColor(color: self)! } - static var redButtonTintColor: NSColor { - NSColor(named: "RedButtonTintColor")! - } - - static var fireButtonRedBackgroundColor: NSColor { - NSColor(named: "FireButtonRedBackgroundColor")! - } - - static var fireButtonRedHoverColor: NSColor { - NSColor(named: "FireButtonRedHoverColor")! - } - - static var fireButtonRedPressedColor: NSColor { - NSColor(named: "FireButtonRedPressedColor")! - } } diff --git a/DuckDuckGo/Common/TrackerNetwork.swift b/DuckDuckGo/Common/TrackerNetwork.swift new file mode 100644 index 0000000000..db45716bf9 --- /dev/null +++ b/DuckDuckGo/Common/TrackerNetwork.swift @@ -0,0 +1,79 @@ +// +// TrackerNetwork.swift +// +// Copyright © 2024 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +enum TrackerNetwork: String, CaseIterable { + + case adform = "adform" + case adobe = "adobe" + case amazon = "amazon" + case amobee = "amobee" + case appnexus = "appnexus" + case centro = "centro" + case cloudflare = "cloudflare" + case comscore = "comscore" + case conversant = "conversant" + case criteo = "criteo" + case dataxu = "dataxu" + case facebook = "facebook" + case google = "google" + case hotjar = "hotjar" + case indexexchange = "indexexchange" + case iponweb = "iponweb" + case linkedin = "linkedin" + case lotame = "lotame" + case mediamath = "mediamath" + case microsoft = "microsoft" + case neustar = "neustar" + case newrelic = "newrelic" + case nielsen = "nielsen" + case openx = "openx" + case oracle = "oracle" + case pubmatic = "pubmatic" + case qwantcast = "qwantcast" + case rubicon = "rubicon" + case salesforce = "salesforce" + case smartadserver = "smartadserver" + case spotx = "spotx" + case stackpath = "stackpath" + case taboola = "taboola" + case tapad = "tapad" + case theTradeDesk = "the trade desk" + case towerdata = "towerdata" + case twitter = "twitter" + case verizonMedia = "verizon media" + case windows = "windows" + case xaxis = "xaxis" + +} + +extension TrackerNetwork { + + init?(trackerNetworkName name: String) { + if let some = TrackerNetwork(rawValue: name) { + self = some + return + } + switch name { + case "quancast": self = .qwantcast + case "lotamesolutions": self = .lotame + case "thenielsencompany": self = .nielsen + default: return nil + } + } + +} diff --git a/DuckDuckGo/Common/View/AppKit/CircularProgressView.swift b/DuckDuckGo/Common/View/AppKit/CircularProgressView.swift index 7afb3d8784..69c25009ae 100644 --- a/DuckDuckGo/Common/View/AppKit/CircularProgressView.swift +++ b/DuckDuckGo/Common/View/AppKit/CircularProgressView.swift @@ -39,7 +39,7 @@ final class CircularProgressView: NSView { progressLayer.strokeColor = strokeColor.cgColor } } - @IBInspectable var backgroundStrokeColor: NSColor = .buttonMouseOverColor { + @IBInspectable var backgroundStrokeColor: NSColor = .buttonMouseOver { didSet { backgroundLayer.fillColor = backgroundStrokeColor.cgColor } diff --git a/DuckDuckGo/Common/View/AppKit/FocusRingView.swift b/DuckDuckGo/Common/View/AppKit/FocusRingView.swift index efe9bc4ffa..552c575692 100644 --- a/DuckDuckGo/Common/View/AppKit/FocusRingView.swift +++ b/DuckDuckGo/Common/View/AppKit/FocusRingView.swift @@ -26,8 +26,8 @@ final class FocusRingView: NSView { case backgroundRadius = 8 } - var strokedBackgroundColor = NSColor.addressBarFocusedBackgroundColor - var unstrokedBackgroundColor = NSColor.addressBarBackgroundColor + var strokedBackgroundColor = NSColor.addressBarFocusedBackground + var unstrokedBackgroundColor = NSColor.addressBarBackground private let shadowLayer = CALayer() private let strokeLayer = CALayer() diff --git a/DuckDuckGo/Common/View/AppKit/LoadingProgressView.swift b/DuckDuckGo/Common/View/AppKit/LoadingProgressView.swift index 5dd87c33e8..56f6b2de2b 100644 --- a/DuckDuckGo/Common/View/AppKit/LoadingProgressView.swift +++ b/DuckDuckGo/Common/View/AppKit/LoadingProgressView.swift @@ -75,8 +75,8 @@ final class LoadingProgressView: NSView, CAAnimationDelegate { var colors = [CGColor]() for _ in 0...6 { - colors.append(NSColor.progressBarGradientDarkColor.cgColor) - colors.append(NSColor.progressBarGradientLightColor.cgColor) + colors.append(NSColor.progressBarGradientDark.cgColor) + colors.append(NSColor.progressBarGradientLight.cgColor) } progressLayer.colors = colors @@ -257,7 +257,7 @@ final class LoadingProgressView: NSView, CAAnimationDelegate { // MARK: IB override func prepareForInterfaceBuilder() { - layer!.backgroundColor = NSColor.progressBarGradientDarkColor.cgColor + layer!.backgroundColor = NSColor.progressBarGradientDark.cgColor } } diff --git a/DuckDuckGo/Common/View/AppKit/MouseOverAnimationButton.swift b/DuckDuckGo/Common/View/AppKit/MouseOverAnimationButton.swift index 35cf63723f..ef7a94b642 100644 --- a/DuckDuckGo/Common/View/AppKit/MouseOverAnimationButton.swift +++ b/DuckDuckGo/Common/View/AppKit/MouseOverAnimationButton.swift @@ -16,9 +16,10 @@ // limitations under the License. // +import AppKit +import Combine import Foundation import Lottie -import Combine final class MouseOverAnimationButton: AddressBarButton { @@ -103,7 +104,7 @@ final class MouseOverAnimationButton: AddressBarButton { return } - let isAquaMode = NSApp.effectiveAppearance.name == NSAppearance.Name.aqua + let isAquaMode = NSApp.effectiveAppearance.name == .aqua let newAnimationView: AnimationView // Animation view causes problems in tests if case .normal = NSApp.runType { diff --git a/DuckDuckGo/Common/View/SwiftUI/FocusableTextEditor.swift b/DuckDuckGo/Common/View/SwiftUI/FocusableTextEditor.swift index 2522593b97..6e42dbb8e1 100644 --- a/DuckDuckGo/Common/View/SwiftUI/FocusableTextEditor.swift +++ b/DuckDuckGo/Common/View/SwiftUI/FocusableTextEditor.swift @@ -44,9 +44,9 @@ struct FocusableTextEditor: View { RoundedRectangle(cornerRadius: cornerRadius).stroke(Color.accentColor.opacity(0.5), lineWidth: 4).opacity(isFocused ? 1 : 0).scaleEffect(isFocused ? 1 : 1.04) .animation(isFocused ? .easeIn(duration: 0.2) : .easeOut(duration: 0.0), value: isFocused) RoundedRectangle(cornerRadius: cornerRadius) - .stroke(Color(NSColor.textEditorBorderColor), lineWidth: borderWidth) + .stroke(Color(.textEditorBorder), lineWidth: borderWidth) RoundedRectangle(cornerRadius: cornerRadius) - .fill(Color(NSColor.textEditorBackgroundColor)) + .fill(Color(.textEditorBackground)) } ) } diff --git a/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift b/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift index f7532478c1..9894f85519 100644 --- a/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift +++ b/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift @@ -43,7 +43,7 @@ struct LoginFaviconView: View { @MainActor(unsafe) var favicon: NSImage? { - return faviconManagement.getCachedFavicon(for: domain, sizeCategory: .small)?.image ?? NSImage(named: "Login") + return faviconManagement.getCachedFavicon(for: domain, sizeCategory: .small)?.image ?? .login } } diff --git a/DuckDuckGo/DataImport/ThirdPartyBrowser.swift b/DuckDuckGo/DataImport/ThirdPartyBrowser.swift index 8692ac74e3..c749feeb1c 100644 --- a/DuckDuckGo/DataImport/ThirdPartyBrowser.swift +++ b/DuckDuckGo/DataImport/ThirdPartyBrowser.swift @@ -116,9 +116,9 @@ enum ThirdPartyBrowser: CaseIterable { /// Browsers are hidden when not installed, so this only applies to password managers. var fallbackApplicationIcon: NSImage? { switch self { - case .lastPass: return NSImage(named: "LastPassIcon") - case .onePassword8: return NSImage(named: "1PasswordIcon") - case .onePassword7: return NSImage(named: "1PasswordIcon") + case .lastPass: return .lastPassIcon + case .onePassword8: return ._1PasswordIcon + case .onePassword7: return ._1PasswordIcon default: return nil } } diff --git a/DuckDuckGo/DataImport/View/FileImportView.swift b/DuckDuckGo/DataImport/View/FileImportView.swift index 0663fb5350..8b70d513a0 100644 --- a/DuckDuckGo/DataImport/View/FileImportView.swift +++ b/DuckDuckGo/DataImport/View/FileImportView.swift @@ -500,11 +500,11 @@ struct FileImportView: View { Spacer() } .padding(EdgeInsets(top: 8, leading: 8, bottom: 8, trailing: 8)) - .background(Color("BlackWhite5")) + .background(Color(.blackWhite5)) .cornerRadius(8) .overlay( RoundedRectangle(cornerRadius: 8) - .stroke(Color("SeparatorColor"), + .stroke(Color(.separator), style: StrokeStyle(lineWidth: 1)) ) .padding(.top, 8) @@ -816,7 +816,7 @@ struct CircleNumberView: View { .frame(width: Constants.diameter, height: Constants.diameter) .overlay( Text("\(number)") - .foregroundColor(.onboardingActionButton) + .foregroundColor(Color(.onboardingActionButton)) .bold() ) diff --git a/DuckDuckGo/FileDownload/View/DownloadsCellView.swift b/DuckDuckGo/FileDownload/View/DownloadsCellView.swift index 662a085cd1..87383a800e 100644 --- a/DuckDuckGo/FileDownload/View/DownloadsCellView.swift +++ b/DuckDuckGo/FileDownload/View/DownloadsCellView.swift @@ -46,9 +46,6 @@ final class DownloadsCellView: NSTableCellView { @IBOutlet var restartButton: MouseOverButton! @IBOutlet var separator: NSBox! - static let highlightedReloadImage = NSImage(named: "RestartDownloadHighlighted")! - static let normalReloadImage = NSImage(named: "RestartDownload")! - private var buttonOverCancellables = Set() private var cancellables = Set() private var progressCancellable: AnyCancellable? diff --git a/DuckDuckGo/FindInPage/FindInPageViewController.swift b/DuckDuckGo/FindInPage/FindInPageViewController.swift index 6edf93675e..985c634777 100644 --- a/DuckDuckGo/FindInPage/FindInPageViewController.swift +++ b/DuckDuckGo/FindInPage/FindInPageViewController.swift @@ -49,7 +49,7 @@ final class FindInPageViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() - focusRingView.strokedBackgroundColor = NSColor.findInPageFocusedBackgroundColor + focusRingView.strokedBackgroundColor = .findInPageFocusedBackground textField.placeholderString = UserText.findInPageTextFieldPlaceholder textField.delegate = self listenForTextFieldResponderNotifications() diff --git a/DuckDuckGo/Fire/View/FirePopoverCollectionViewItem.swift b/DuckDuckGo/Fire/View/FirePopoverCollectionViewItem.swift index 6e4a2855a7..6605521d21 100644 --- a/DuckDuckGo/Fire/View/FirePopoverCollectionViewItem.swift +++ b/DuckDuckGo/Fire/View/FirePopoverCollectionViewItem.swift @@ -27,7 +27,6 @@ protocol FirePopoverCollectionViewItemDelegate: AnyObject { final class FirePopoverCollectionViewItem: NSCollectionViewItem { static let identifier = NSUserInterfaceItemIdentifier(rawValue: "FirePopoverCollectionViewItem") - static let defaultFavicon = NSImage(named: "Web") weak var delegate: FirePopoverCollectionViewItemDelegate? @@ -41,7 +40,7 @@ final class FirePopoverCollectionViewItem: NSCollectionViewItem { func setItem(_ item: FirePopoverViewModel.Item, isFireproofed: Bool) { domainTextField.stringValue = item.domain - faviconImageView.image = item.favicon ?? Self.defaultFavicon + faviconImageView.image = item.favicon ?? .web checkButton.isHidden = isFireproofed } diff --git a/DuckDuckGo/Fire/View/FirePopoverViewController.swift b/DuckDuckGo/Fire/View/FirePopoverViewController.swift index 99376f1039..72708e500d 100644 --- a/DuckDuckGo/Fire/View/FirePopoverViewController.swift +++ b/DuckDuckGo/Fire/View/FirePopoverViewController.swift @@ -214,7 +214,7 @@ final class FirePopoverViewController: NSViewController { let range = NSRange(location: 0, length: button.title.count) attrTitle.addAttributes([ - .foregroundColor: NSColor.redButtonTintColor, + .foregroundColor: NSColor.redButtonTint, .font: NSFont.systemFont(ofSize: NSFont.systemFontSize)], range: range) diff --git a/DuckDuckGo/Fire/View/FireViewController.swift b/DuckDuckGo/Fire/View/FireViewController.swift index 2e99247ef0..a107578fef 100644 --- a/DuckDuckGo/Fire/View/FireViewController.swift +++ b/DuckDuckGo/Fire/View/FireViewController.swift @@ -117,7 +117,7 @@ final class FireViewController: NSViewController { animationView.animationSpeed = fireAnimationSpeed fakeFireButton.wantsLayer = true - fakeFireButton.layer?.backgroundColor = NSColor.buttonMouseDownColor.cgColor + fakeFireButton.layer?.backgroundColor = NSColor.buttonMouseDown.cgColor subscribeToIsBurning() } diff --git a/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift b/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift index 49c3dd9fad..33e2482333 100644 --- a/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift +++ b/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift @@ -544,23 +544,23 @@ extension HomePage.Models { switch self { case .defaultBrowser: - return NSImage(named: "Default-App-128")!.resized(to: iconSize)! + return .defaultApp128.resized(to: iconSize)! case .importBookmarksAndPasswords: - return NSImage(named: "Import-128")!.resized(to: iconSize)! + return .import128.resized(to: iconSize)! case .duckplayer: - return NSImage(named: "Clean-Tube-128")!.resized(to: iconSize)! + return .cleanTube128.resized(to: iconSize)! case .emailProtection: - return NSImage(named: "inbox-128")!.resized(to: iconSize)! + return .inbox128.resized(to: iconSize)! case .surveyDay0: - return NSImage(named: "Survey-128")!.resized(to: iconSize)! + return .survey128.resized(to: iconSize)! case .surveyDay7: - return NSImage(named: "Survey-128")!.resized(to: iconSize)! + return .survey128.resized(to: iconSize)! case .networkProtectionRemoteMessage: - return NSImage(named: "VPN-Ended")!.resized(to: iconSize)! + return .vpnEnded.resized(to: iconSize)! case .dataBrokerProtectionRemoteMessage: - return NSImage(named: "DBP-Information-Remover")!.resized(to: iconSize)! + return .dbpInformationRemover.resized(to: iconSize)! case .dataBrokerProtectionWaitlistInvited: - return NSImage(named: "DBP-Information-Remover")!.resized(to: iconSize)! + return .dbpInformationRemover.resized(to: iconSize)! } } } diff --git a/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift b/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift index 3c57e55f26..2e627932cc 100644 --- a/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift +++ b/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift @@ -279,8 +279,55 @@ final class RecentlyVisitedSiteModel: ObservableObject { }) } - func entityImageName(_ entityName: String) -> String { - return entityDisplayName(entityName).slugfiscated() + func entityImage(_ entityName: String) -> NSImage? { + guard let trackerNetwork = TrackerNetwork(rawValue: entityDisplayName(entityName).slugfiscated()) else { return nil } + return Self.feedImage(for: trackerNetwork) + } + + // swiftlint:disable:next cyclomatic_complexity + static func feedImage(for trackerNetwork: TrackerNetwork) -> NSImage? { + switch trackerNetwork { + case .adform: .feedAdform + case .adobe: .feedAdobe + case .amazon: .feedAmazon + case .amobee: .feedAmobee + case .appnexus: .feedAppnexus + case .centro: .feedCentro + case .cloudflare: .feedCloudflare + case .comscore: .feedComscore + case .conversant: .feedConversant + case .criteo: .feedCriteo + case .dataxu: .feedDataxu + case .facebook: .feedFacebook + case .google: .feedGoogle + case .hotjar: .feedHotjar + case .indexexchange: .feedIndexexchange + case .iponweb: .feedIponweb + case .linkedin: .feedLinkedin + case .lotame: .feedLotamesolutions + case .mediamath: .feedMediamath + case .microsoft: .feedMicrosoft + case .neustar: .feedNeustar + case .newrelic: .feedNewrelic + case .nielsen: .feedThenielsencompany + case .openx: .feedOpenx + case .oracle: .feedOracle + case .pubmatic: .feedPubmatic + case .qwantcast: .feedQuantcast + case .rubicon: .feedRubicon + case .salesforce: .feedSalesforce + case .smartadserver: .feedSmartadserver + case .spotx: .feedSpotx + case .stackpath: .feedStackpath + case .taboola: .feedTaboola + case .tapad: .feedTapad + case .theTradeDesk: .feedThetradedesk + case .towerdata: .feedTowerdata + case .twitter: .feedTwitter + case .verizonMedia: .feedVerizonmedia + case .xaxis: .feedXaxis + case .windows: nil + } } func entityDisplayName(_ entityName: String, _ contentBlocking: AnyContentBlocking = ContentBlocking.shared) -> String { diff --git a/DuckDuckGo/HomePage/View/BurnerHomePageView.swift b/DuckDuckGo/HomePage/View/BurnerHomePageView.swift index d73fb8a87f..f35a0d6cc7 100644 --- a/DuckDuckGo/HomePage/View/BurnerHomePageView.swift +++ b/DuckDuckGo/HomePage/View/BurnerHomePageView.swift @@ -27,7 +27,7 @@ extension HomePage.Views { @Environment(\.colorScheme) var colorScheme - let backgroundColor = Color("NewTabPageBackgroundColor") + let backgroundColor = Color(.newTabPageBackground) private var infoBackgroundColor: Color { return colorScheme == .dark ? Color.white.opacity(0.03) : backgroundColor } @@ -50,7 +50,7 @@ extension HomePage.Views { VStack(alignment: .leading, spacing: 16) { HStack { - Image("BurnerWindowHomepageImage") + Image(.burnerWindowHomepage) .resizable() .aspectRatio(contentMode: .fit) .frame(width: 64, height: 48) @@ -84,7 +84,7 @@ extension HomePage.Views { var body: some View { VStack(alignment: .leading, spacing: 16) { HStack { - Image("BurnerWindowIcon1") + Image(.burnerWindowIcon1) .resizable() .frame(width: 16, height: 16) .foregroundColor(Color.primary) @@ -95,7 +95,7 @@ extension HomePage.Views { } HStack { - Image("BurnerWindowIcon2") + Image(.burnerWindowIcon2) .resizable() .frame(width: 16, height: 16) .foregroundColor(Color.primary) @@ -105,7 +105,7 @@ extension HomePage.Views { } HStack { - Image("BurnerWindowIcon3") + Image(.burnerWindowIcon3) .resizable() .frame(width: 16, height: 16) .foregroundColor(Color.primary) @@ -117,7 +117,7 @@ extension HomePage.Views { Divider() HStack { - Image("BurnerWindowIcon4") + Image(.burnerWindowIcon4) .resizable() .frame(width: 16, height: 16) .foregroundColor(Color.primary) diff --git a/DuckDuckGo/HomePage/View/ContinueSetUpView.swift b/DuckDuckGo/HomePage/View/ContinueSetUpView.swift index 074f0ddaa3..1fa9e6639b 100644 --- a/DuckDuckGo/HomePage/View/ContinueSetUpView.swift +++ b/DuckDuckGo/HomePage/View/ContinueSetUpView.swift @@ -109,7 +109,7 @@ extension HomePage.Views { HStack { Spacer() VStack { - RemoveIemButton(icon: NSImage(named: "Close")!) { + RemoveIemButton(icon: .close) { model.removeItem(for: featureType) } .visibility(isHovering ? .visible : .gone) @@ -158,7 +158,7 @@ extension HomePage.Views { .multilineTextAlignment(.center) .lineLimit(3) .font(.system(size: 11)) - .foregroundColor(Color("GreyTextColor")) + .foregroundColor(Color(.greyText)) .fixedSize(horizontal: false, vertical: true) } Spacer() @@ -182,8 +182,8 @@ extension HomePage.Views { let title: String let action: () -> Void let foregroundColor: Color = .clear - let foregroundColorOnHover: Color = Color("HomeFavoritesHoverColor") - let foregroundColorOnHoverOnCard: Color = Color("HomeFavoritesBackgroundColor") + let foregroundColorOnHover: Color = .homeFavoritesHover + let foregroundColorOnHoverOnCard: Color = .homeFavoritesBackground private let titleWidth: Double @State var isHovering = false @@ -214,7 +214,7 @@ extension HomePage.Views { .cornerRadius(5.0) Text(title) .font(.system(size: 11)) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) } .onTapGesture { action() @@ -233,8 +233,8 @@ extension HomePage.Views { struct RemoveIemButton: View { let icon: NSImage let action: () -> Void - let foreGroundColor: Color = Color("HomeFavoritesBackgroundColor") - let foregroundColorOnHover: Color = Color("HomeFavoritesHoverColor") + let foreGroundColor: Color = .homeFavoritesBackground + let foregroundColorOnHover: Color = .homeFavoritesHover @State var isHovering = false @@ -262,17 +262,17 @@ extension HomePage.Views { var body: some View { HStack(spacing: 0) { - Image("NextStepsLeft") + Image(.nextStepsLeft) .frame(width: 12, height: 5) .padding(.top, 6) ZStack { Rectangle() - .fill(Color("LinkBlueColor")) + .fill(Color(.linkBlue)) .frame(width: textWidth, height: 20) Text(text) - .foregroundColor(Color("HomeNextStepsTextColor")) + .foregroundColor(Color(.homeNextStepsText)) } - Image("NextStepsRight") + Image(.nextStepsRight) .frame(width: 10, height: 19) } } diff --git a/DuckDuckGo/HomePage/View/DefaultBrowserPromptView.swift b/DuckDuckGo/HomePage/View/DefaultBrowserPromptView.swift index 20165c3440..b1a5578346 100644 --- a/DuckDuckGo/HomePage/View/DefaultBrowserPromptView.swift +++ b/DuckDuckGo/HomePage/View/DefaultBrowserPromptView.swift @@ -28,12 +28,12 @@ struct DefaultBrowserPrompt: View { HStack { Spacer() - Image("DefaultBrowser") + Image(.defaultBrowser) .frame(width: 32, height: 32) Text(UserText.defaultBrowserPromptMessage) .font(.system(size: 13, weight: .medium)) - .foregroundColor(Color("HomeDefaultBrowserPromptTextColor")) + .foregroundColor(Color.homeDefaultBrowserPromptText) let button = Button(UserText.defaultBrowserPromptButton) { self.model.requestSetDefault() @@ -43,13 +43,13 @@ struct DefaultBrowserPrompt: View { Spacer() - HoverButton(imageName: "Close", imageSize: 22, cornerRadius: 4) { + HoverButton(image: .close, imageSize: 22, cornerRadius: 4) { self.model.close() }.padding() }.background( RoundedRectangle(cornerRadius: 8) - .fill(Color("HomeDefaultBrowserPromptBackgroundColor")) + .fill(Color.homeDefaultBrowserPromptBackground) ) .visibility(model.shouldShow ? .visible : .gone) .padding(.top, 24) diff --git a/DuckDuckGo/HomePage/View/FavoritesView.swift b/DuckDuckGo/HomePage/View/FavoritesView.swift index f6255579c2..90956a4a66 100644 --- a/DuckDuckGo/HomePage/View/FavoritesView.swift +++ b/DuckDuckGo/HomePage/View/FavoritesView.swift @@ -221,7 +221,7 @@ fileprivate struct FavoritesGridAddButton: View { ZStack(alignment: .top) { FavoriteTemplate(title: UserText.addFavorite, url: nil, onFaviconMissing: model.onFaviconMissing) ZStack { - Image("Add") + Image(.add) .resizable() .frame(width: 22, height: 22) }.frame(width: FavoritesGrid.GridDimensions.itemWidth, height: FavoritesGrid.GridDimensions.itemWidth) @@ -240,7 +240,7 @@ fileprivate struct FavoritesGridGhostButton: View { VStack { RoundedRectangle(cornerRadius: 12) - .stroke(Color("HomeFavoritesGhostColor"), style: StrokeStyle(lineWidth: 1.5, dash: [4.0, 2.0])) + .stroke(Color(.homeFavoritesGhost), style: StrokeStyle(lineWidth: 1.5, dash: [4.0, 2.0])) .frame(width: FavoritesGrid.GridDimensions.itemWidth, height: FavoritesGrid.GridDimensions.itemWidth) Spacer() } @@ -264,7 +264,7 @@ struct FavoriteTemplate: View { ZStack(alignment: .center) { RoundedRectangle(cornerRadius: 12) - .foregroundColor(isHovering ? Color("HomeFavoritesHoverColor") : Color("HomeFavoritesBackgroundColor")) + .foregroundColor(isHovering ? .homeFavoritesHover : .homeFavoritesBackground) if let url = url { FaviconView(url: url, onFaviconMissing: onFaviconMissing) diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/Contents.json b/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/Contents.json deleted file mode 100644 index 73c00596a7..0000000000 --- a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/DuckDuckGo/HomePage/View/HomePageView.swift b/DuckDuckGo/HomePage/View/HomePageView.swift index 2a0e5a7545..03866e0e29 100644 --- a/DuckDuckGo/HomePage/View/HomePageView.swift +++ b/DuckDuckGo/HomePage/View/HomePageView.swift @@ -24,7 +24,7 @@ extension HomePage.Views { struct RootView: View { - let backgroundColor = Color("NewTabPageBackgroundColor") + let backgroundColor: Color = .newTabPageBackground static let targetWidth: CGFloat = 508 let isBurner: Bool @@ -104,9 +104,9 @@ extension HomePage.Views { } struct HomeContentButtonView: View { - let defaultColor: Color = Color("NewTabPageBackgroundColor") - let onHoverColor: Color = Color("ButtonMouseOverColor") - let onSelectedColor: Color = Color("ButtonMouseDownColor") + let defaultColor: Color = .newTabPageBackground + let onHoverColor: Color = .buttonMouseOver + let onSelectedColor: Color = .buttonMouseDown let iconSize = 16.02 let targetSize = 28.0 @@ -129,7 +129,7 @@ extension HomePage.Views { .fill(buttonBackgroundColor) .frame(width: targetSize, height: targetSize, alignment: .bottomTrailing) .cornerRadius(3) - Image("OptionsMainView") + Image(.optionsMainView) .resizable() .frame(width: iconSize, height: iconSize) .scaledToFit() @@ -160,7 +160,7 @@ extension HomePage.Views { HStack { Toggle(isOn: $model.isContinueSetUpVisible, label: { HStack { - Image("RocketNoColor") + Image(.rocketGrayscale) .frame(width: iconSize, height: iconSize) Text(UserText.newTabSetUpSectionTitle) } @@ -172,7 +172,7 @@ extension HomePage.Views { HStack { Toggle(isOn: $model.isFavoriteVisible, label: { HStack { - Image("Favorite") + Image(.favorite) .frame(width: iconSize, height: iconSize) Text(UserText.newTabFavoriteSectionTitle) } @@ -182,7 +182,7 @@ extension HomePage.Views { HStack { Toggle(isOn: $model.isRecentActivityVisible, label: { HStack { - Image("Shield") + Image(.shield) .frame(width: iconSize, height: iconSize) Text(UserText.newTabRecentActivitySectionTitle) } diff --git a/DuckDuckGo/HomePage/View/HyperLink.swift b/DuckDuckGo/HomePage/View/HyperLink.swift index 3220391b08..3eb82f1591 100644 --- a/DuckDuckGo/HomePage/View/HyperLink.swift +++ b/DuckDuckGo/HomePage/View/HyperLink.swift @@ -34,7 +34,7 @@ struct HyperLink: View { var body: some View { Text(text) - .foregroundColor(isHovering ? Color("LinkBlueColor") : textColor) + .foregroundColor(isHovering ? .linkBlue : textColor) .optionalUnderline(isHovering) .link { isHovering = $0 diff --git a/DuckDuckGo/HomePage/View/MoreOrLessView.swift b/DuckDuckGo/HomePage/View/MoreOrLessView.swift index 70558612c5..222c43c26d 100644 --- a/DuckDuckGo/HomePage/View/MoreOrLessView.swift +++ b/DuckDuckGo/HomePage/View/MoreOrLessView.swift @@ -29,19 +29,19 @@ extension HomePage.Views { VStack { Divider() - .foregroundColor(Color("HomePageMoreOrLessTextColor")) + .foregroundColor((.homePageMoreOrLessText)) }.frame(maxWidth: .infinity) HStack { Text(isExpanded ? UserText.moreOrLessCollapse : UserText.moreOrLessExpand) - Image("HomeArrowUp") + Image(.homeArrowUp) .rotationEffect(.degrees(isExpanded ? 0 : 180)) } - .foregroundColor(Color("HomePageMoreOrLessTextColor")) + .foregroundColor((.homePageMoreOrLessText)) VStack { Divider() - .foregroundColor(Color("HomePageMoreOrLessTextColor")) + .foregroundColor((.homePageMoreOrLessText)) }.frame(maxWidth: .infinity) } .frame(height: 32) diff --git a/DuckDuckGo/HomePage/View/RecentlyVisitedView.swift b/DuckDuckGo/HomePage/View/RecentlyVisitedView.swift index c7e865ac7a..8dd63310f7 100644 --- a/DuckDuckGo/HomePage/View/RecentlyVisitedView.swift +++ b/DuckDuckGo/HomePage/View/RecentlyVisitedView.swift @@ -60,9 +60,9 @@ struct RecentlyVisited: View { struct RecentlyVisitedSiteEmptyState: View { - let textColor = Color("HomeFeedEmptyStateTextColor") - let iconColor = Color("HomeFeedEmptyStateIconColor") - let connectorColor = Color("HomeFavoritesBackgroundColor") + let textColor = Color.homeFeedEmptyStateText + let iconColor = Color.homeFeedEmptyStateIcon + let connectorColor = Color.homeFavoritesBackground var body: some View { @@ -70,7 +70,7 @@ struct RecentlyVisitedSiteEmptyState: View { ZStack { RoundedRectangle(cornerRadius: 6) .fill(connectorColor) - Image("Web") + Image(.web) .resizable() .frame(width: 16, height: 16) .foregroundColor(iconColor) @@ -109,9 +109,9 @@ struct RecentlyVisitedSite: View { ZStack(alignment: .top) { RoundedRectangle(cornerRadius: 8) - .fill(Color("HomeFeedItemHoverBackgroundColor")) - .shadow(color: Color("HomeFeedItemHoverShadow1Color"), radius: 4, x: 0, y: 4) - .shadow(color: Color("HomeFeedItemHoverShadow2Color"), radius: 2, x: 0, y: 1) + .fill(Color(.homeFeedItemHoverBackground)) + .shadow(color: .homeFeedItemHoverShadow1, radius: 4, x: 0, y: 4) + .shadow(color: .homeFeedItemHoverShadow2, radius: 2, x: 0, y: 1) .visibility(isHovering && model.showPagesOnHover ? .visible : .gone) HStack(alignment: .top, spacing: 12) { @@ -121,13 +121,13 @@ struct RecentlyVisitedSite: View { VStack(alignment: .leading, spacing: 6) { if site.isRealDomain { - HyperLink(site.domainToDisplay, textColor: Color("HomeFeedItemTitleColor")) { + HyperLink(site.domainToDisplay, textColor: .homeFeedItemTitle) { model.open(site) } .font(.system(size: 15, weight: .semibold, design: .default)) } else { Text(site.domainToDisplay) - .foregroundColor(Color("HomeFeedItemTitleColor")) + .foregroundColor(Color(.homeFeedItemTitle)) .font(.system(size: 15, weight: .semibold, design: .default)) } @@ -151,13 +151,13 @@ struct RecentlyVisitedSite: View { Spacer() - HoverButton(size: 24, imageName: site.isFavorite ? "FavoriteFilled" : "Favorite", imageSize: 16, cornerRadius: 4) { + HoverButton(size: 24, image: site.isFavorite ? .favoriteFilled : .favorite, imageSize: 16, cornerRadius: 4) { model.toggleFavoriteSite(site) } - .foregroundColor(Color("HomeFeedItemButtonTintColor")) + .foregroundColor(Color.homeFeedItemButtonTint) .tooltip(UserText.tooltipAddToFavorites) - HoverButton(size: 24, imageName: "Burn", imageSize: 16, cornerRadius: 4) { + HoverButton(size: 24, image: .burn, imageSize: 16, cornerRadius: 4) { isHovering = false if site.isFireproof { showsAlert = true @@ -170,7 +170,7 @@ struct RecentlyVisitedSite: View { primaryButton: .destructive(Text(UserText.homePageClearHistory), action: burn), secondaryButton: .cancel(Text(UserText.cancel))) } - .foregroundColor(Color("HomeFeedItemButtonTintColor")) + .foregroundColor(Color(.homeFeedItemButtonTint)) .tooltip(fireButtonTooltip) } @@ -247,9 +247,9 @@ struct RecentlyVisitedPage: View { @EnvironmentObject var model: HomePage.Models.RecentlyVisitedModel - let linkColor = Color("LinkBlueColor") - let pageTextColor = Color("HomeFeedItemPageTextColor") - let timeTextColor = Color("HomeFeedItemTimeTextColor") + let linkColor = Color.linkBlue + let pageTextColor = Color.homeFeedItemPageText + let timeTextColor = Color.homeFeedItemTimeText let page: HomePage.Models.RecentlyVisitedPageModel let showExpandButton: Bool @@ -285,7 +285,7 @@ struct RecentlyVisitedPage: View { model.open(page.url) } - HoverButton(size: 16, imageName: "HomeArrowDown", imageSize: 8, cornerRadius: 4) { + HoverButton(size: 16, image: .homeArrowDown, imageSize: 8, cornerRadius: 4) { withAnimation { isExpanded.toggle() } @@ -310,7 +310,7 @@ struct RecentlyVisitedTitle: View { var body: some View { HStack(alignment: .top, spacing: 12) { - Image("HomeShield") + Image(.homeShield) .resizable() .frame(width: 22, height: 22) .onTapGesture(count: 2) { @@ -322,11 +322,11 @@ struct RecentlyVisitedTitle: View { VStack(alignment: isExpanded ? .leading : .center, spacing: 6) { Text(UserText.homePageProtectionSummaryMessage(numberOfTrackersBlocked: model.numberOfTrackersBlocked)) .font(.system(size: 17, weight: .bold, design: .default)) - .foregroundColor(Color("HomeFeedTitleColor")) + .foregroundColor(Color(.homeFeedTitle)) Text(UserText.homePageProtectionDurationInfo) .font(.system(size: 13, weight: .medium, design: .default)) - .foregroundColor(Color("HomeFeedItemTimeTextColor")) + .foregroundColor(Color(.homeFeedItemTimeText)) } .visibility(model.recentSites.count > 0 ? .visible : .gone) .padding(.leading, 4) @@ -334,13 +334,13 @@ struct RecentlyVisitedTitle: View { Text(UserText.homePageProtectionSummaryInfo) .font(.system(size: 17, weight: .bold, design: .default)) - .foregroundColor(Color("HomeFeedTitleColor")) + .foregroundColor(Color(.homeFeedTitle)) .visibility(model.recentSites.count > 0 ? .gone : .visible) Spacer() .visibility(isExpanded ? .visible : .gone) - HoverButton(size: 24, imageName: "HomeArrowUp", imageSize: 16, cornerRadius: 4) { + HoverButton(size: 24, image: .homeArrowUp, imageSize: 16, cornerRadius: 4) { withAnimation { isExpanded.toggle() } @@ -354,8 +354,8 @@ struct RecentlyVisitedTitle: View { struct SiteIconAndConnector: View { - let backgroundColor = Color("HomeFavoritesBackgroundColor") - let mouseOverColor: Color = Color("HomeFavoritesHoverColor") + let backgroundColor = Color.homeFavoritesBackground + let mouseOverColor = Color.homeFavoritesHover @EnvironmentObject var model: HomePage.Models.RecentlyVisitedModel @ObservedObject var site: HomePage.Models.RecentlyVisitedSiteModel @@ -428,7 +428,7 @@ struct SiteTrackerSummary: View { // Top 3 entities HStack(spacing: 2) { ForEach(site.blockedEntities.prefix(trackerIconCount), id: \.self) { - EntityIcon(imageName: site.entityImageName($0), displayName: site.entityDisplayName($0)) + EntityIcon(image: site.entityImage($0), displayName: site.entityDisplayName($0)) } // Count of other entities, if any @@ -470,24 +470,22 @@ struct EntityIcon: View { let size: CGFloat = 18 - var imageName: String + var image: NSImage? var displayName: String var body: some View { Group { - if let image = NSImage(named: "feed-" + imageName) { + if let image { Image(nsImage: image) .resizable() .aspectRatio(contentMode: .fit) .tooltip(displayName) } else { - SmallCircleText(text: String(displayName.first ?? "?")) .tooltip(displayName) - } }.frame(width: size, height: size, alignment: .center) @@ -502,7 +500,7 @@ struct SmallCircleText: View { let backgroundColor: Color let textColor: Color - init(text: String, backgroundColor: Color = Color("HomeEntityIconBackgroundColor"), textColor: Color = Color("HomeEntityIconTextColor")) { + init(text: String, backgroundColor: Color = .homeEntityIconBackground, textColor: Color = .homeEntityIconText) { self.text = text self.backgroundColor = backgroundColor self.textColor = textColor diff --git a/DuckDuckGo/MainWindow/MainViewController.swift b/DuckDuckGo/MainWindow/MainViewController.swift index 9ae65a8b30..3c8d81e47d 100644 --- a/DuckDuckGo/MainWindow/MainViewController.swift +++ b/DuckDuckGo/MainWindow/MainViewController.swift @@ -249,7 +249,7 @@ final class MainViewController: NSViewController { private func updateDividerColor(isShowingHomePage isHomePage: Bool) { NSAppearance.withAppAppearance { - let backgroundColor: NSColor = (bookmarksBarIsVisible || isHomePage) ? .bookmarkBarBackground : .addressBarSolidSeparatorColor + let backgroundColor: NSColor = (bookmarksBarIsVisible || isHomePage) ? .bookmarkBarBackground : .addressBarSolidSeparator mainView.divider.backgroundColor = backgroundColor } } diff --git a/DuckDuckGo/Menus/MainMenu.swift b/DuckDuckGo/Menus/MainMenu.swift index e27e55b644..f86e6650a8 100644 --- a/DuckDuckGo/Menus/MainMenu.swift +++ b/DuckDuckGo/Menus/MainMenu.swift @@ -312,10 +312,10 @@ import SubscriptionUI NSMenuItem(title: UserText.favorites) .submenu(favoritesMenu.buildItems { NSMenuItem(title: UserText.mainMenuHistoryFavoriteThisPage, action: #selector(MainViewController.favoriteThisPage)) - .withImage(NSImage(named: "Favorite")) + .withImage(.favorite) NSMenuItem.separator() }) - .withImage(NSImage(named: "Favorite")) + .withImage(.favorite) NSMenuItem.separator() }) diff --git a/DuckDuckGo/MessageViews/PopoverMessageViewController.swift b/DuckDuckGo/MessageViews/PopoverMessageViewController.swift index 1771a97424..b0533f8712 100644 --- a/DuckDuckGo/MessageViews/PopoverMessageViewController.swift +++ b/DuckDuckGo/MessageViews/PopoverMessageViewController.swift @@ -34,7 +34,7 @@ final class PopoverMessageViewController: NSHostingController Void)? = nil, onDismiss: (() -> Void)? = nil) { diff --git a/DuckDuckGo/NavigationBar/View/AddressBarButtonsViewController.swift b/DuckDuckGo/NavigationBar/View/AddressBarButtonsViewController.swift index 8b565aec74..2457def59b 100644 --- a/DuckDuckGo/NavigationBar/View/AddressBarButtonsViewController.swift +++ b/DuckDuckGo/NavigationBar/View/AddressBarButtonsViewController.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import BrowserServicesKit import Cocoa import Combine @@ -31,14 +32,6 @@ protocol AddressBarButtonsViewControllerDelegate: AnyObject { // swiftlint:disable:next type_body_length final class AddressBarButtonsViewController: NSViewController { - static let homeFaviconImage = NSImage(named: "Search") - static let searchImage = NSImage(named: "Search") - static let webImage = NSImage(named: "Web") - static let bookmarkImage = NSImage(named: "Bookmark") - static let bookmarkFilledImage = NSImage(named: "BookmarkFilled") - static let shieldImage = NSImage(named: "Shield") - static let shieldDotImage = NSImage(named: "ShieldDot") - weak var delegate: AddressBarButtonsViewControllerDelegate? private var bookmarkPopover: AddBookmarkPopover? @@ -526,7 +519,7 @@ final class AddressBarButtonsViewController: NSViewController { privacyEntryPointButton.position = .left } - privacyEntryPointButton.contentTintColor = .privacyEnabledColor + privacyEntryPointButton.contentTintColor = .privacyEnabled privacyEntryPointButton.sendAction(on: .leftMouseUp) imageButton.applyFaviconStyle() @@ -579,7 +572,7 @@ final class AddressBarButtonsViewController: NSViewController { return newAnimationView } - let isAquaMode = NSApp.effectiveAppearance.name == NSAppearance.Name.aqua + let isAquaMode = NSApp.effectiveAppearance.name == .aqua trackerAnimationView1 = addAndLayoutAnimationViewIfNeeded(animationView: trackerAnimationView1, animationName: isAquaMode ? "trackers-1" : "dark-trackers-1") @@ -731,12 +724,12 @@ final class AddressBarButtonsViewController: NSViewController { private func updateBookmarkButtonImage(isUrlBookmarked: Bool = false) { if let url = tabViewModel?.tab.content.url, isUrlBookmarked || bookmarkManager.isUrlBookmarked(url: url) { - bookmarkButton.image = Self.bookmarkFilledImage + bookmarkButton.image = .bookmarkFilled bookmarkButton.mouseOverTintColor = NSColor.bookmarkFilledTint bookmarkButton.toolTip = UserText.editBookmarkTooltip } else { bookmarkButton.mouseOverTintColor = nil - bookmarkButton.image = Self.bookmarkImage + bookmarkButton.image = .bookmark bookmarkButton.contentTintColor = nil bookmarkButton.toolTip = UserText.addBookmarkTooltip } @@ -747,13 +740,13 @@ final class AddressBarButtonsViewController: NSViewController { // Image button switch controllerMode { case .browsing where tabViewModel.isShowingErrorPage: - imageButton.image = Self.webImage + imageButton.image = .web case .browsing: imageButton.image = tabViewModel.favicon case .editing(isUrl: true): - imageButton.image = Self.webImage + imageButton.image = .web case .editing(isUrl: false): - imageButton.image = Self.homeFaviconImage + imageButton.image = .search default: imageButton.image = nil } @@ -799,7 +792,7 @@ final class AddressBarButtonsViewController: NSViewController { let isShieldDotVisible = isNotSecure || isUnprotected - privacyEntryPointButton.image = isShieldDotVisible ? Self.shieldDotImage : Self.shieldImage + privacyEntryPointButton.image = isShieldDotVisible ? .shieldDot : .shield let shieldDotMouseOverAnimationNames = MouseOverAnimationButton.AnimationNames(aqua: "shield-dot-mouse-over", dark: "dark-shield-dot-mouse-over") diff --git a/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift b/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift index 73ebe99437..c834cdd58e 100644 --- a/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift +++ b/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift @@ -821,7 +821,7 @@ extension AddressBarTextField { case title(String) func toAttributedString(size: CGFloat, isBurner: Bool) -> NSAttributedString { - let suffixColor = isBurner ? NSColor.burnerAccentColor : NSColor.addressBarSuffixColor + let suffixColor = isBurner ? NSColor.burnerAccent : NSColor.addressBarSuffix let attrs: [NSAttributedString.Key: Any] = [ .font: NSFont.systemFont(ofSize: size, weight: .light), .foregroundColor: suffixColor diff --git a/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift b/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift index 1a739143f0..4caad386b5 100644 --- a/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift @@ -308,7 +308,7 @@ final class AddressBarViewController: NSViewController { } var accentColor: NSColor { - return isBurner ? NSColor.burnerAccentColor : NSColor.controlAccentColor + return isBurner ? NSColor.burnerAccent : NSColor.controlAccentColor } private func updateView() { @@ -345,7 +345,7 @@ final class AddressBarViewController: NSViewController { private func updateShadowView(_ isSuggestionsWindowVisible: Bool) { shadowView.shadowSides = isSuggestionsWindowVisible ? [.left, .top, .right] : [] - shadowView.shadowColor = isSuggestionsWindowVisible ? .suggestionsShadowColor : .clear + shadowView.shadowColor = isSuggestionsWindowVisible ? .suggestionsShadow : .clear shadowView.shadowRadius = isSuggestionsWindowVisible ? 8.0 : 0.0 activeOuterBorderView.isHidden = isSuggestionsWindowVisible @@ -383,7 +383,7 @@ final class AddressBarViewController: NSViewController { if window.isKeyWindow { activeBackgroundView.layer?.borderWidth = 2.0 activeBackgroundView.layer?.borderColor = accentColor.withAlphaComponent(0.6).cgColor - activeBackgroundView.layer?.backgroundColor = NSColor.addressBarBackgroundColor.cgColor + activeBackgroundView.layer?.backgroundColor = NSColor.addressBarBackground.cgColor activeOuterBorderView.isHidden = !isHomePage } else { diff --git a/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/BadgeAnimationContainer/BadgeAnimationView.swift b/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/BadgeAnimationContainer/BadgeAnimationView.swift index dd770560db..23d187e160 100644 --- a/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/BadgeAnimationContainer/BadgeAnimationView.swift +++ b/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/BadgeAnimationContainer/BadgeAnimationView.swift @@ -128,7 +128,7 @@ private enum Consts { } enum Colors { - static let badgeBackgroundColor = Color("URLNotificationBadgeBackground") + static let badgeBackgroundColor = Color.urlNotificationBadgeBackground } } diff --git a/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/CookieManaged/CookieManagedNotificationView.swift b/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/CookieManaged/CookieManagedNotificationView.swift index f2c600ea4c..ce220600f3 100644 --- a/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/CookieManaged/CookieManagedNotificationView.swift +++ b/DuckDuckGo/NavigationBar/View/Animations/BadgeAnimations/CookieManaged/CookieManagedNotificationView.swift @@ -41,12 +41,12 @@ struct CookieAnimationView: View { Group { ZStack(alignment: .center) { Group { - Image("Cookie") + Image(.cookie) .resizable() .foregroundColor(.primary) .opacity(cookieAlpha) - Image("CookieBite") + Image(.cookieBite) .resizable() .foregroundColor(.primary) .opacity(bittenCookieAlpha) @@ -217,7 +217,7 @@ struct CookieManagedNotificationView_Previews: PreviewProvider { private enum Consts { enum Colors { - static let badgeBackgroundColor = Color("URLNotificationBadgeBackground") + static let badgeBackgroundColor = Color.urlNotificationBadgeBackground } enum CookieAnimation { diff --git a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift index 8243d4ee8b..d0c8feda57 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -147,7 +147,7 @@ final class MoreOptionsMenu: NSMenu { addUtilityItems() addItem(withTitle: UserText.emailOptionsMenuItem, action: nil, keyEquivalent: "") - .withImage(NSImage(named: "OptionsButtonMenuEmail")) + .withImage(.optionsButtonMenuEmail) .withSubmenu(EmailOptionsButtonSubMenu(tabCollectionViewModel: tabCollectionViewModel, emailManager: emailManager)) addItem(NSMenuItem.separator()) @@ -158,7 +158,7 @@ final class MoreOptionsMenu: NSMenu { let preferencesItem = NSMenuItem(title: UserText.settings, action: #selector(openPreferences(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Preferences")) + .withImage(.preferences) addItem(preferencesItem) } @@ -275,12 +275,12 @@ final class MoreOptionsMenu: NSMenu { // New Tab addItem(withTitle: UserText.plusButtonNewTabMenuItem, action: #selector(newTab(_:)), keyEquivalent: "t") .targetting(self) - .withImage(NSImage(named: "Add")) + .withImage(.add) // New Window addItem(withTitle: UserText.newWindowMenuItem, action: #selector(newWindow(_:)), keyEquivalent: "n") .targetting(self) - .withImage(NSImage(named: "NewWindow")) + .withImage(.newWindow) // New Burner Window let burnerWindowItem = NSMenuItem(title: UserText.newBurnerWindowMenuItem, @@ -288,7 +288,7 @@ final class MoreOptionsMenu: NSMenu { target: self) burnerWindowItem.keyEquivalent = "n" burnerWindowItem.keyEquivalentModifierMask = [.command, .shift] - burnerWindowItem.image = NSImage(named: "NewBurnerWindow") + burnerWindowItem.image = .newBurnerWindow addItem(burnerWindowItem) addItem(NSMenuItem.separator()) @@ -299,19 +299,19 @@ final class MoreOptionsMenu: NSMenu { addItem(withTitle: UserText.bookmarks, action: #selector(openBookmarks), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Bookmarks")) + .withImage(.bookmarks) .withSubmenu(bookmarksSubMenu) addItem(withTitle: UserText.downloads, action: #selector(openDownloads), keyEquivalent: "j") .targetting(self) - .withImage(NSImage(named: "Downloads")) + .withImage(.downloads) let loginsSubMenu = LoginsSubMenu(targetting: self, passwordManagerCoordinator: passwordManagerCoordinator) addItem(withTitle: UserText.passwordManagement, action: #selector(openAutofillWithAllItems), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "PasswordManagement")) + .withImage(.passwordManagement) .withSubmenu(loginsSubMenu) addItem(NSMenuItem.separator()) @@ -364,7 +364,7 @@ final class MoreOptionsMenu: NSMenu { action: #selector(openDataBrokerProtection), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "DBP-Icon")) + .withImage(.dbpIcon) items.append(dataBrokerProtectionItem) DataBrokerProtectionExternalWaitlistPixels.fire(pixel: .dataBrokerProtectionWaitlistEntryPointMenuItemDisplayed, frequency: .dailyAndCount) @@ -380,7 +380,7 @@ final class MoreOptionsMenu: NSMenu { action: #selector(openIdentityTheftRestoration), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "ITR-Icon")) + .withImage(.itrIcon) items.append(identityTheftRestorationItem) } #endif @@ -394,13 +394,13 @@ final class MoreOptionsMenu: NSMenu { action: #selector(openSubscriptionPurchasePage(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "SubscriptionIcon")) + .withImage(.subscriptionIcon) let attributedText = NSMutableAttributedString(string: UserText.subscriptionOptionsMenuItem) attributedText.append(NSAttributedString(string: " ")) let imageAttachment = NSTextAttachment() - imageAttachment.image = NSImage(named: "NewLabel") + imageAttachment.image = .newLabel imageAttachment.setImageHeight(height: 16, offset: .init(x: 0, y: -4)) attributedText.append(NSAttributedString(attachment: imageAttachment)) @@ -418,7 +418,7 @@ final class MoreOptionsMenu: NSMenu { let isFireproof = FireproofDomains.shared.isFireproof(fireproofDomain: host) let title = isFireproof ? UserText.removeFireproofing : UserText.fireproofSite - let image = isFireproof ? NSImage(named: "Burn") : NSImage(named: "Fireproof") + let image: NSImage = isFireproof ? .burn : .fireproof addItem(withTitle: title, action: #selector(toggleFireproofing(_:)), keyEquivalent: "") .targetting(self) @@ -428,16 +428,16 @@ final class MoreOptionsMenu: NSMenu { addItem(withTitle: UserText.findInPageMenuItem, action: #selector(findInPage(_:)), keyEquivalent: "f") .targetting(self) - .withImage(NSImage(named: "Find-Search")) + .withImage(.findSearch) addItem(withTitle: UserText.shareMenuItem, action: nil, keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Share")) + .withImage(.share) .withSubmenu(sharingMenu) addItem(withTitle: UserText.printMenuItem, action: #selector(doPrint(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Print")) + .withImage(.print) addItem(NSMenuItem.separator()) @@ -454,7 +454,7 @@ final class MoreOptionsMenu: NSMenu { attributedText.append(NSAttributedString(string: " ")) let imageAttachment = NSTextAttachment() - imageAttachment.image = NSImage(named: "NewLabel") + imageAttachment.image = .newLabel imageAttachment.setImageHeight(height: 16, offset: .init(x: 0, y: -4)) attributedText.append(NSAttributedString(attachment: imageAttachment)) @@ -504,22 +504,22 @@ final class EmailOptionsButtonSubMenu: NSMenu { if emailManager.isSignedIn { addItem(withTitle: UserText.emailOptionsMenuCreateAddressSubItem, action: #selector(createAddressAction(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "OptionsButtonMenuEmailGenerateAddress")) + .withImage(.optionsButtonMenuEmailGenerateAddress) addItem(withTitle: UserText.emailOptionsMenuManageAccountSubItem, action: #selector(manageAccountAction(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Identity-16")) + .withImage(.identity16) addItem(.separator()) addItem(withTitle: UserText.emailOptionsMenuTurnOffSubItem, action: #selector(turnOffEmailAction(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "Email-Disabled-16")) + .withImage(.emailDisabled16) } else { addItem(withTitle: UserText.emailOptionsMenuTurnOnSubItem, action: #selector(turnOnEmailAction(_:)), keyEquivalent: "") .targetting(self) - .withImage(NSImage(named: "OptionsButtonMenuEmail")) + .withImage(.optionsButtonMenuEmail) } } @@ -581,13 +581,13 @@ final class FeedbackSubMenu: NSMenu { let reportBrokenSiteItem = NSMenuItem(title: UserText.reportBrokenSite, action: #selector(AppDelegate.openReportBrokenSite(_:)), keyEquivalent: "") - .withImage(NSImage(named: "Exclamation")) + .withImage(.exclamation) addItem(reportBrokenSiteItem) let browserFeedbackItem = NSMenuItem(title: UserText.browserFeedback, action: #selector(AppDelegate.openFeedback(_:)), keyEquivalent: "") - .withImage(NSImage(named: "Feedback")) + .withImage(.feedback) addItem(browserFeedbackItem) } } @@ -667,7 +667,7 @@ final class BookmarksSubMenu: NSMenu { let favoritesItem = addItem(withTitle: UserText.favorites, action: nil, keyEquivalent: "") favoritesItem.submenu = NSMenu(items: favoriteMenuItems) - favoritesItem.image = NSImage(named: "Favorite") + favoritesItem.image = .favorite addItem(NSMenuItem.separator()) } @@ -758,15 +758,15 @@ final class LoginsSubMenu: NSMenu { addItem(withTitle: autofillTitle, action: autofillSelector, keyEquivalent: "") .targetting(target) - .withImage(NSImage(named: "LoginGlyph")) + .withImage(.loginGlyph) addItem(withTitle: UserText.passwordManagementIdentities, action: #selector(MoreOptionsMenu.openAutofillWithIdentities), keyEquivalent: "") .targetting(target) - .withImage(NSImage(named: "IdentityGlyph")) + .withImage(.identityGlyph) addItem(withTitle: UserText.passwordManagementCreditCards, action: #selector(MoreOptionsMenu.openAutofillWithCreditCards), keyEquivalent: "") .targetting(target) - .withImage(NSImage(named: "CreditCardGlyph")) + .withImage(.creditCardGlyph) } } diff --git a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift index cfcc7cf553..cc26f59474 100644 --- a/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/NavigationBarViewController.swift @@ -37,9 +37,6 @@ final class NavigationBarViewController: NSViewController { enum Constants { static let downloadsButtonAutoHidingInterval: TimeInterval = 5 * 60 - static let activeDownloadsImage = NSImage(named: "DownloadsActive") - static let inactiveDownloadsImage = NSImage(named: "Downloads") - static let autosavePopoverImageName = "PasswordManagement" static let homeButtonSeparatorSpacing: CGFloat = 12 static let homeButtonSeparatorHeight: CGFloat = 20 } @@ -491,7 +488,7 @@ final class NavigationBarViewController: NSViewController { self.showPasswordManagerPopover(selectedWebsiteAccount: account) } let popoverMessage = PopoverMessageViewController(message: UserText.passwordManagerAutosavePopoverText(domain: domain), - image: Self.Constants.autosavePopoverImageName, + image: .passwordManagement, buttonText: UserText.passwordManagerAutosaveButtonText, buttonAction: action, onDismiss: { @@ -719,14 +716,14 @@ final class NavigationBarViewController: NSViewController { let url = tabCollectionViewModel.selectedTabViewModel?.tab.content.url - passwordManagementButton.image = NSImage(named: "PasswordManagement") + passwordManagementButton.image = .passwordManagement if popovers.hasAnySavePopoversVisible() { return } if popovers.isPasswordManagementDirty { - passwordManagementButton.image = NSImage(named: "PasswordManagementDirty") + passwordManagementButton.image = .passwordManagementDirty return } @@ -795,7 +792,7 @@ final class NavigationBarViewController: NSViewController { } let hasActiveDownloads = downloadListCoordinator.hasActiveDownloads - downloadsButton.image = hasActiveDownloads ? Self.Constants.activeDownloadsImage : Self.Constants.inactiveDownloadsImage + downloadsButton.image = hasActiveDownloads ? .downloadsActive : .downloads let isTimerActive = downloadsButtonHidingTimer != nil if popovers.isDownloadsPopoverShown { @@ -920,7 +917,7 @@ final class NavigationBarViewController: NSViewController { selectedTabViewModel.$isLoading .removeDuplicates() .sink { [weak refreshOrStopButton] isLoading in - refreshOrStopButton?.image = isLoading ? NSImage(named: "Stop") : NSImage(named: "Refresh") + refreshOrStopButton?.image = isLoading ? .stop : .refresh refreshOrStopButton?.toolTip = isLoading ? UserText.stopLoadingTooltip : UserText.refreshPageTooltip } .store(in: &navigationButtonsCancellables) diff --git a/DuckDuckGo/NavigationBar/ViewModel/PrivacyIconViewModel.swift b/DuckDuckGo/NavigationBar/ViewModel/PrivacyIconViewModel.swift index 1ee8519c5c..c588a5e843 100644 --- a/DuckDuckGo/NavigationBar/ViewModel/PrivacyIconViewModel.swift +++ b/DuckDuckGo/NavigationBar/ViewModel/PrivacyIconViewModel.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import Foundation import PrivacyDashboard @@ -26,7 +27,7 @@ struct PrivacyIconViewModel { static func trackerImages(from trackerInfo: TrackerInfo) -> [CGImage] { let sortedEntities = sortedEntities(from: trackerInfo).prefix(maxNumberOfIcons) var images: [CGImage] = sortedEntities.map { - if let logo = logos[$0] { + if let logo = logo(for: $0) { return logo } else if let letter = letters[$0[$0.startIndex]] { return letter @@ -74,194 +75,166 @@ struct PrivacyIconViewModel { // MARK: - Images - static var shadowTrackerImage: CGImage { - if NSApp.effectiveAppearance.name == NSAppearance.Name.aqua { - return shadowTrackerImageAqua - } else { - return shadowTrackerImageDark - } + static var shadowTrackerImage: CGImage! { + { + if NSApp.effectiveAppearance.name == .aqua { + NSImage.shadowtracker + } else { + NSImage.shadowtrackerDark + } + }().cgImage(forProposedRect: nil, context: .current, hints: nil) } - static let shadowTrackerImageAqua = NSImage(named: "shadowtracker")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - static let shadowTrackerImageDark = NSImage(named: "shadowtracker_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - - static var blankTrackerImage: CGImage { - if NSApp.effectiveAppearance.name == NSAppearance.Name.aqua { - return blankTrackerImageAqua - } else { - return blankTrackerImageDark - } + static var blankTrackerImage: CGImage! { + { + if NSApp.effectiveAppearance.name == .aqua { + NSImage.blanktracker + } else { + NSImage.blanktrackerDark + } + }().cgImage(forProposedRect: nil, context: .current, hints: nil) } - static let blankTrackerImageAqua = NSImage(named: "blanktracker")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - static let blankTrackerImageDark = NSImage(named: "blanktracker_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - static var letters: [Character: CGImage] { - if NSApp.effectiveAppearance.name == NSAppearance.Name.aqua { + if NSApp.effectiveAppearance.name == .aqua { return lettersAqua } else { return lettersDark } } - static let lettersAqua: [Character: CGImage] = { - return [ - "a": NSImage(named: "a")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "b": NSImage(named: "b")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "c": NSImage(named: "c")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "d": NSImage(named: "d")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "e": NSImage(named: "e")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "f": NSImage(named: "f")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "g": NSImage(named: "g")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "h": NSImage(named: "h")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "i": NSImage(named: "i")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "j": NSImage(named: "j")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "k": NSImage(named: "k")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "l": NSImage(named: "l")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "m": NSImage(named: "m")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "n": NSImage(named: "n")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "o": NSImage(named: "o")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "p": NSImage(named: "p")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "q": NSImage(named: "q")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "r": NSImage(named: "r")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "s": NSImage(named: "s")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "t": NSImage(named: "t")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "u": NSImage(named: "u")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "v": NSImage(named: "v")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "w": NSImage(named: "w")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "x": NSImage(named: "x")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "y": NSImage(named: "y")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "z": NSImage(named: "z")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - ] + private static let lettersAqua: [Character: CGImage] = { + Character.reduceCharacters(from: "a", to: "z", into: [:]) { + $0[$1] = NSImage(named: "\($1)")!.cgImage(forProposedRect: nil, context: .current, hints: nil) + } }() - static let lettersDark: [Character: CGImage] = { - return [ - "a": NSImage(named: "a_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "b": NSImage(named: "b_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "c": NSImage(named: "c_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "d": NSImage(named: "d_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "e": NSImage(named: "e_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "f": NSImage(named: "f_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "g": NSImage(named: "g_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "h": NSImage(named: "h_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "i": NSImage(named: "i_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "j": NSImage(named: "j_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "k": NSImage(named: "k_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "l": NSImage(named: "l_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "m": NSImage(named: "m_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "n": NSImage(named: "n_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "o": NSImage(named: "o_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "p": NSImage(named: "p_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "q": NSImage(named: "q_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "r": NSImage(named: "r_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "s": NSImage(named: "s_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "t": NSImage(named: "t_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "u": NSImage(named: "u_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "v": NSImage(named: "v_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "w": NSImage(named: "w_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "x": NSImage(named: "x_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "y": NSImage(named: "y_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "z": NSImage(named: "z_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - ] + private static let lettersDark: [Character: CGImage] = { + Character.reduceCharacters(from: "a", to: "z", into: [:]) { + $0[$1] = NSImage(named: "\($1)_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil) + } }() - static var logos: [String: CGImage] { - if NSApp.effectiveAppearance.name == NSAppearance.Name.aqua { - return logosAqua - } else { - return logosDark + static func logo(for trackerNetworkName: String) -> CGImage? { + guard let trackerNetwork = TrackerNetwork(trackerNetworkName: trackerNetworkName) else { return nil } + return { + if NSApp.effectiveAppearance.name == .aqua { + aquaLogo(for: trackerNetwork) + } else { + darkLogo(for: trackerNetwork) + } + }()?.cgImage(forProposedRect: nil, context: .current, hints: nil) + } + + // swiftlint:disable cyclomatic_complexity + private static func aquaLogo(for trackerNetwork: TrackerNetwork) -> NSImage? { + switch trackerNetwork { + case .adform: .adform + case .adobe: .adobe + case .amazon: .amazon + case .amobee: .amobee + case .appnexus: .appnexus + case .centro: .centro + case .cloudflare: .cloudflare + case .comscore: .comscore + case .conversant: .conversant + case .criteo: .criteo + case .dataxu: .dataxu + case .facebook: .facebook + case .google: .google + case .hotjar: .hotjar + case .indexexchange: .indexexchange + case .iponweb: .iponweb + case .linkedin: .linkedin + case .lotame: .lotame + case .mediamath: .mediamath + case .microsoft: .microsoft + case .neustar: .neustar + case .newrelic: .newrelic + case .nielsen: .nielsen + case .openx: .openx + case .oracle: .oracle + case .pubmatic: .pubmatic + case .qwantcast: .qwantcast + case .rubicon: .rubicon + case .salesforce: .salesforce + case .smartadserver: .smartadserver + case .spotx: .spotx + case .stackpath: .stackpath + case .taboola: .taboola + case .tapad: .tapad + case .theTradeDesk: .thetradedesk + case .towerdata: .towerdata + case .twitter: .twitter + case .verizonMedia: .verizonmedia + case .windows: .windows + case .xaxis: .xaxis } } - static let logosAqua: [String: CGImage] = { - return [ - "adform": NSImage(named: "adform")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "adobe": NSImage(named: "adobe")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "amazon": NSImage(named: "amazon")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "amobee": NSImage(named: "amobee")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "appnexus": NSImage(named: "appnexus")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "centro": NSImage(named: "centro")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "cloudflare": NSImage(named: "cloudflare")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "comscore": NSImage(named: "comscore")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "conversant": NSImage(named: "conversant")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "criteo": NSImage(named: "criteo")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "dataxu": NSImage(named: "dataxu")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "facebook": NSImage(named: "facebook")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "google": NSImage(named: "google")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "hotjar": NSImage(named: "hotjar")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "indexexchange": NSImage(named: "indexexchange")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "iponweb": NSImage(named: "iponweb")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "linkedin": NSImage(named: "linkedin")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "lotame": NSImage(named: "lotame")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "mediamath": NSImage(named: "mediamath")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "microsoft": NSImage(named: "microsoft")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "neustar": NSImage(named: "neustar")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "newrelic": NSImage(named: "newrelic")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "nielsen": NSImage(named: "nielsen")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "openx": NSImage(named: "openx")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "oracle": NSImage(named: "oracle")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "pubmatic": NSImage(named: "pubmatic")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "qwantcast": NSImage(named: "qwantcast")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "rubicon": NSImage(named: "rubicon")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "salesforce": NSImage(named: "salesforce")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "smartadserver": NSImage(named: "smartadserver")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "spotx": NSImage(named: "spotx")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "stackpath": NSImage(named: "stackpath")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "taboola": NSImage(named: "taboola")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "tapad": NSImage(named: "tapad")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "the trade desk": NSImage(named: "thetradedesk")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "towerdata": NSImage(named: "towerdata")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "twitter": NSImage(named: "twitter")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "verizon media": NSImage(named: "verizonmedia")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "windows": NSImage(named: "windows")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "xaxis": NSImage(named: "xaxis")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - ] - }() + private static func darkLogo(for trackerNetwork: TrackerNetwork) -> NSImage? { + switch trackerNetwork { + case .adform: .adformDark + case .adobe: .adobeDark + case .amazon: .amazonDark + case .amobee: .amobeeDark + case .appnexus: .appnexusDark + case .centro: .centroDark + case .cloudflare: .cloudflareDark + case .comscore: .comscoreDark + case .conversant: .conversantDark + case .criteo: .criteoDark + case .dataxu: .dataxuDark + case .facebook: .facebookDark + case .google: .googleDark + case .hotjar: .hotjarDark + case .indexexchange: .indexexchangeDark + case .iponweb: .iponwebDark + case .linkedin: .linkedinDark + case .lotame: .lotameDark + case .mediamath: .mediamathDark + case .microsoft: .microsoftDark + case .neustar: .neustarDark + case .newrelic: .newrelicDark + case .nielsen: .nielsenDark + case .openx: .openxDark + case .oracle: .oracleDark + case .pubmatic: .pubmaticDark + case .qwantcast: .qwantcastDark + case .rubicon: .rubiconDark + case .salesforce: .salesforceDark + case .smartadserver: .smartadserverDark + case .spotx: .spotxDark + case .stackpath: .stackpathDark + case .taboola: .taboolaDark + case .tapad: .tapadDark + case .theTradeDesk: .thetradedeskDark + case .towerdata: .towerdataDark + case .twitter: .twitterDark + case .verizonMedia: .verizonmediaDark + case .windows: .windowsDark + case .xaxis: .xaxisDark + } + } + // swiftlint:enable cyclomatic_complexity - static let logosDark: [String: CGImage] = { - return [ - "adform": NSImage(named: "adform_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "adobe": NSImage(named: "adobe_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "amazon": NSImage(named: "amazon_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "amobee": NSImage(named: "amobee_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "appnexus": NSImage(named: "appnexus_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "centro": NSImage(named: "centro_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "cloudflare": NSImage(named: "cloudflare_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "comscore": NSImage(named: "comscore_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "conversant": NSImage(named: "conversant_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "criteo": NSImage(named: "criteo_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "dataxu": NSImage(named: "dataxu_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "facebook": NSImage(named: "facebook_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "google": NSImage(named: "google_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "hotjar": NSImage(named: "hotjar_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "indexexchange": NSImage(named: "indexexchange_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "lponweb": NSImage(named: "iponweb_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "linkedin": NSImage(named: "linkedin_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "lotame": NSImage(named: "lotame_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "mediamath": NSImage(named: "mediamath_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "microsoft": NSImage(named: "microsoft_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "neustar": NSImage(named: "neustar_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "newrelic": NSImage(named: "newrelic_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "nielsen": NSImage(named: "nielsen_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "openx": NSImage(named: "openx_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "oracle": NSImage(named: "oracle_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "pubmatic": NSImage(named: "pubmatic_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "qwantcast": NSImage(named: "qwantcast_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "rubicon": NSImage(named: "rubicon_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "salesforce": NSImage(named: "salesforce_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "smartadserver": NSImage(named: "smartadserver_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "spotx": NSImage(named: "spotx_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "stackpath": NSImage(named: "stackpath_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "taboola": NSImage(named: "taboola_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "tapad": NSImage(named: "tapad_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "the trade desk": NSImage(named: "thetradedesk_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "towerdata": NSImage(named: "towerdata_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "twitter": NSImage(named: "twitter_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "verizon media": NSImage(named: "verizonmedia_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "windows": NSImage(named: "windows_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)!, - "xaxis": NSImage(named: "xaxis_dark")!.cgImage(forProposedRect: nil, context: .current, hints: nil)! - ] - }() +} + +extension Character { + + @inlinable static func reduceCharacters(from startCharacter: Character, to endCharacter: Character, into initialResult: Result, _ updateAccumulatingResult: (_ partialResult: inout Result, Character) throws -> Void) rethrows -> Result { + assert(startCharacter.unicodeScalars.count == 1) + assert(endCharacter.unicodeScalars.count == 1) + guard let start = startCharacter.unicodeScalars.first?.value, + let end = endCharacter.unicodeScalars.first?.value, + start <= end else { + assertionFailure("Characters \(startCharacter) and \(endCharacter) do not form sequence") + return initialResult + } + + return try (start...end).reduce(into: initialResult) { result, char in + try updateAccumulatingResult(&result, Character(UnicodeScalar(char)!)) + } + } } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionNavBarButtonModel.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionNavBarButtonModel.swift index df0b97b8ac..8812470f5e 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionNavBarButtonModel.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/NetworkProtectionNavBarButtonModel.swift @@ -130,11 +130,11 @@ final class NetworkProtectionNavBarButtonModel: NSObject, ObservableObject { let hasAuthToken = NetworkProtectionKeychainTokenStore().isFeatureActivated if !isWaitlistUser && !hasAuthToken { - return NSImage(named: "NetworkProtectionAvailableButton")! + return .networkProtectionAvailableButton } if NetworkProtectionWaitlist().readyToAcceptTermsAndConditions { - return NSImage(named: "NetworkProtectionAvailableButton")! + return .networkProtectionAvailableButton } if NetworkProtectionKeychainTokenStore().isFeatureActivated { diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationPreferenceItem.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationPreferenceItem.swift index 1cf5878f3b..17750d602b 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationPreferenceItem.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationPreferenceItem.swift @@ -30,8 +30,8 @@ struct VPNLocationPreferenceItem: View { HStack(spacing: 10) { switch model.icon { case .defaultIcon: - Image("Location-16-Solid") - .foregroundColor(Color("BlackWhite100").opacity(0.9)) + Image(.location16Solid) + .foregroundColor(Color(.blackWhite100).opacity(0.9)) case .emoji(let string): Text(string).font(.system(size: 16)) } @@ -58,7 +58,7 @@ struct VPNLocationPreferenceItem: View { .frame(idealWidth: .infinity, maxWidth: .infinity, alignment: .topLeading) .frame(height: 52) .padding(.horizontal, 10) - .background(Color("BlackWhite1")) + .background(Color.blackWhite1) .roundedBorder() } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift index 59dd198fbc..01b7b3f4ec 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift @@ -84,9 +84,9 @@ struct VPNLocationView: View { await model.onNearestItemSelection() } }, label: { - Image("Location-16-Solid") + Image(.location16Solid) .padding(4) - .foregroundColor(Color("BlackWhite100").opacity(0.9)) + .foregroundColor(Color(.blackWhite100).opacity(0.9)) VStack(alignment: .leading, spacing: 2) { Text(UserText.vpnLocationNearestAvailable) .font(.system(size: 13)) @@ -129,7 +129,7 @@ struct VPNLocationView: View { ForEach(countries) { country in if !country.isFirstItem { Rectangle() - .fill(Color("BlackWhite10")) + .fill(Color(.blackWhite10)) .frame(height: 1) .padding(.init(top: 0, leading: 10, bottom: 0, trailing: 10)) } @@ -188,7 +188,7 @@ private struct CountryItem: View { } ) .frame(idealWidth: .infinity, maxWidth: .infinity) - .background(Color("BlackWhite1")) + .background(Color(.blackWhite1)) } @ViewBuilder @@ -259,7 +259,7 @@ private struct VPNLocationViewButtons: View { var body: some View { VStack(spacing: 0) { Rectangle() - .fill(Color("BlackWhite10")) + .fill(Color(.blackWhite10)) .frame(height: 1) HStack { Spacer() @@ -273,7 +273,7 @@ private struct VPNLocationViewButtons: View { } .padding(.vertical, 16) .padding(.horizontal, 20) - .background(Color("BlackWhite1")) + .background(Color.blackWhite1) } } diff --git a/DuckDuckGo/Onboarding/View/DaxSpeech.swift b/DuckDuckGo/Onboarding/View/DaxSpeech.swift index a401b57374..a9a3764744 100644 --- a/DuckDuckGo/Onboarding/View/DaxSpeech.swift +++ b/DuckDuckGo/Onboarding/View/DaxSpeech.swift @@ -74,7 +74,7 @@ struct DaxSpeech: View { .multilineTextAlignment(.leading) .font(.daxSpeech) .lineSpacing(2.5) - .foregroundColor(Color("OnboardingDaxSpeechTextColor")) + .foregroundColor(Color(.onboardingDaxSpeechText)) .frame(width: speechWidth) .background(SpeechBubble()) .onReceive(timer, perform: { _ in @@ -154,8 +154,8 @@ fileprivate struct SpeechBubble: View { ) } - .fill(Color(NSColor.interfaceBackgroundColor)) - .shadow(color: Color("OnboardingDaxSpeechShadowColor"), radius: 2, x: 0, y: 0) + .fill(Color(.interfaceBackground)) + .shadow(color: Color(.onboardingDaxSpeechShadow), radius: 2, x: 0, y: 0) } } diff --git a/DuckDuckGo/Onboarding/View/OnboardingButtonStyles.swift b/DuckDuckGo/Onboarding/View/OnboardingButtonStyles.swift index f5935ed742..1a7d02135e 100644 --- a/DuckDuckGo/Onboarding/View/OnboardingButtonStyles.swift +++ b/DuckDuckGo/Onboarding/View/OnboardingButtonStyles.swift @@ -24,7 +24,7 @@ struct ActionButtonStyle: ButtonStyle { func makeBody(configuration: Self.Configuration) -> some View { - let color = configuration.isPressed ? Color("OnboardingActionButtonPressedColor") : Color("OnboardingActionButtonColor") + let color: Color = configuration.isPressed ? .onboardingActionButtonPressed : .onboardingActionButton configuration.label .padding(.vertical, 8) @@ -41,7 +41,7 @@ struct SkipButtonStyle: ButtonStyle { func makeBody(configuration: Self.Configuration) -> some View { - let color = configuration.isPressed ? Color("OnboardingSkipButtonPressedColor") : Color("OnboardingSkipButtonColor") + let color: Color = configuration.isPressed ? .onboardingSkipButtonPressed : .onboardingSkipButton configuration.label .padding(.vertical, 8) @@ -50,8 +50,8 @@ struct SkipButtonStyle: ButtonStyle { .foregroundColor(.black) .font(.system(size: 13, weight: .semibold, design: .default)) .background(RoundedRectangle(cornerRadius: 8, style: .continuous).fill(color) - // background for the background to prevent transparency show matt anderson details - .background(RoundedRectangle(cornerRadius: 8, style: .continuous).fill(Color("OnboardingSkipButtonBaseColor")))) + // background for the background to prevent transparency show matt anderson details + .background(RoundedRectangle(cornerRadius: 8, style: .continuous).fill(Color(.onboardingSkipButtonBase)))) } } diff --git a/DuckDuckGo/Onboarding/View/OnboardingFlow.swift b/DuckDuckGo/Onboarding/View/OnboardingFlow.swift index 0024ac492f..721f60bb88 100644 --- a/DuckDuckGo/Onboarding/View/OnboardingFlow.swift +++ b/DuckDuckGo/Onboarding/View/OnboardingFlow.swift @@ -36,7 +36,7 @@ struct OnboardingFlow: View { HStack(alignment: .top, spacing: 23) { - Image("OnboardingDax") + Image(.onboardingDax) .resizable() .frame(width: 64, height: 64) .shadow(color: .black.opacity(0.16), radius: 6, x: 0, y: 3) diff --git a/DuckDuckGo/PasswordManager/Bitwarden/View/ConnectBitwardenView.swift b/DuckDuckGo/PasswordManager/Bitwarden/View/ConnectBitwardenView.swift index b5a6dc56f6..6373dee683 100644 --- a/DuckDuckGo/PasswordManager/Bitwarden/View/ConnectBitwardenView.swift +++ b/DuckDuckGo/PasswordManager/Bitwarden/View/ConnectBitwardenView.swift @@ -111,7 +111,7 @@ struct BitwardenTitleView: View { var body: some View { HStack(spacing: 10) { - Image("BitwardenLogo") + Image(.bitwardenLogo) .resizable() .frame(width: 32, height: 32) @@ -136,12 +136,12 @@ private struct ConnectToBitwardenDisclaimerView: View { .padding(.top, 10) HStack { - Image("BitwardenLock") + Image(.bitwardenLock) Text(UserText.bitwardenCommunicationInfo) } HStack { - Image("BitwardenClock") + Image(.bitwardenClock) Text(UserText.bitwardenHistoryInfo) } } @@ -181,7 +181,7 @@ private struct BitwardenInstallationDetectionView: View { Button(action: { viewModel.process(action: .openBitwardenProductPage) }, label: { - Image("MacAppStoreButton") + Image(.macAppStoreButton) }) .buttonStyle(PlainButtonStyle()) .frame(width: 156, height: 40) @@ -195,7 +195,7 @@ private struct BitwardenInstallationDetectionView: View { } } else { HStack { - Image("SuccessCheckmark") + Image(.successCheckmark) Text(UserText.bitwardenAppFound) } } @@ -266,11 +266,11 @@ private struct ConnectToBitwardenView: View { Spacer() } - Image("BitwardenSettingsIllustration") + Image(.bitwardenSettingsIllustration) if canConnect { HStack { - Image("SuccessCheckmark") + Image(.successCheckmark) Text(UserText.bitwardenIsReadyToConnect) @@ -311,7 +311,7 @@ private struct ConnectedToBitwardenView: View { .font(.system(size: 13, weight: .bold)) HStack { - Image("SuccessCheckmark") + Image(.successCheckmark) Text(UserText.bitwardenIntegrationCompleteInfo) diff --git a/DuckDuckGo/PinnedTabs/View/PinnedTabView.swift b/DuckDuckGo/PinnedTabs/View/PinnedTabView.swift index 278fdfa7ca..40768d20a3 100644 --- a/DuckDuckGo/PinnedTabs/View/PinnedTabView.swift +++ b/DuckDuckGo/PinnedTabs/View/PinnedTabView.swift @@ -71,10 +71,10 @@ struct PinnedTabView: View { private var foregroundColor: Color { if isSelected { - return Color.navigationBarBackground + return .navigationBarBackground } let isHovered = collectionModel.hoveredItem == model - return showsHover && isHovered ? Color("TabMouseOverColor") : Color.clear + return showsHover && isHovered ? .tabMouseOver : Color.clear } @ViewBuilder @@ -135,11 +135,11 @@ private struct BorderView: View { let size: CGFloat private var borderColor: Color { - isSelected ? Color(TabShadowConfig.colorName) : .clear + isSelected ? .tabShadowLine : .clear } private var bottomLineColor: Color { - isSelected ? Color.navigationBarBackground : Color(TabShadowConfig.colorName) + isSelected ? .navigationBarBackground : .tabShadowLine } private var cornerPixelsColor: Color { @@ -184,7 +184,7 @@ struct PinnedTabInnerView: View { if drawSeparator { GeometryReader { proxy in Rectangle() - .foregroundColor(Color("SeparatorColor")) + .foregroundColor(.separator) .frame(width: 1, height: 20) .offset(x: proxy.size.width-1, y: 6) } @@ -205,9 +205,9 @@ struct PinnedTabInnerView: View { ZStack { Circle() .stroke(Color.gray.opacity(0.5), lineWidth: 0.5) - .background(Circle().foregroundColor(Color("PinnedTabMuteStateCircleColor"))) + .background(Circle().foregroundColor(.pinnedTabMuteStateCircle)) .frame(width: 16, height: 16) - Image("Audio-Mute") + Image(.audioMute) .resizable() .renderingMode(.template) .frame(width: 12, height: 12) @@ -236,7 +236,7 @@ struct PinnedTabInnerView: View { .cornerRadius(4.0) } else { ZStack { - Image(nsImage: #imageLiteral(resourceName: "Web")) + Image(nsImage: .web) .resizable() mutedTabIndicator } diff --git a/DuckDuckGo/Preferences/View/PreferencesAboutView.swift b/DuckDuckGo/Preferences/View/PreferencesAboutView.swift index d5b5cbae02..4eefb33428 100644 --- a/DuckDuckGo/Preferences/View/PreferencesAboutView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesAboutView.swift @@ -43,7 +43,7 @@ extension Preferences { PreferencePaneSection { HStack { - Image("AboutPageLogo") + Image(.aboutPageLogo) VStack(alignment: .leading, spacing: 8) { #if APPSTORE Text(UserText.duckDuckGoForMacAppStore).font(.companyName) @@ -121,7 +121,7 @@ extension Preferences { } var body: some View { - let image = Image("Alert-Color-16") + let image = Image(.alertColor16) .resizable() .frame(width: 16, height: 16) .padding(.trailing, 4) @@ -150,7 +150,7 @@ extension Preferences { } } .padding() - .background(Color("UnsupportedOSWarningColor")) + .background(Color.unsupportedOSWarning) .cornerRadius(8) .frame(width: width, height: height) } diff --git a/DuckDuckGo/Preferences/View/PreferencesAppearanceView.swift b/DuckDuckGo/Preferences/View/PreferencesAppearanceView.swift index 5ebc18ddc5..8e9e46fdfd 100644 --- a/DuckDuckGo/Preferences/View/PreferencesAppearanceView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesAppearanceView.swift @@ -47,7 +47,7 @@ extension Preferences { private var selectionBackground: some View { if isSelected { RoundedRectangle(cornerRadius: 6) - .stroke(Color("LinkBlueColor"), lineWidth: 2) + .stroke(Color(.linkBlue), lineWidth: 2) } } diff --git a/DuckDuckGo/Preferences/View/PreferencesGeneralView.swift b/DuckDuckGo/Preferences/View/PreferencesGeneralView.swift index e37871112c..6ad97d6463 100644 --- a/DuckDuckGo/Preferences/View/PreferencesGeneralView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesGeneralView.swift @@ -38,10 +38,10 @@ extension Preferences { PreferencePaneSubSection { HStack { if defaultBrowserModel.isDefault { - Image("SolidCheckmark") + Image(.solidCheckmark) Text(UserText.isDefaultBrowser) } else { - Image("Warning").foregroundColor(Color("LinkBlueColor")) + Image(.warning).foregroundColor(Color(.linkBlue)) Text(UserText.isNotDefaultBrowser) Button(action: { defaultBrowserModel.becomeDefault() diff --git a/DuckDuckGo/Preferences/View/PreferencesSidebar.swift b/DuckDuckGo/Preferences/View/PreferencesSidebar.swift index 8a78d016cb..1a0c1babc6 100644 --- a/DuckDuckGo/Preferences/View/PreferencesSidebar.swift +++ b/DuckDuckGo/Preferences/View/PreferencesSidebar.swift @@ -112,10 +112,10 @@ extension Preferences { let bgColor: Color = { if isSelected { - return Color("RowHoverColor") + return .rowHover } if isHovered { - return Color("ButtonMouseOverColor") + return .buttonMouseOver } return Color(NSColor.clear.withAlphaComponent(0.001)) }() diff --git a/DuckDuckGo/Preferences/View/PreferencesVPNView.swift b/DuckDuckGo/Preferences/View/PreferencesVPNView.swift index 499f36bd91..2485bbb6c5 100644 --- a/DuckDuckGo/Preferences/View/PreferencesVPNView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesVPNView.swift @@ -58,14 +58,14 @@ extension Preferences { VStack(alignment: .leading) { HStack(spacing: 10) { - Image("InfoSubtle-16") + Image(.infoSubtle16) VStack { HStack { Text(UserText.vpnSecureDNSSettingDescription) .padding(0) .font(.system(size: 11)) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) .multilineTextAlignment(.leading) .fixMultilineScrollableText() @@ -79,7 +79,7 @@ extension Preferences { }.frame(alignment: .topLeading) .frame(idealWidth: .infinity, maxWidth: .infinity) .padding(10) - .background(Color("BlackWhite1")) + .background(Color(.blackWhite1)) .roundedBorder() } diff --git a/DuckDuckGo/SecureVault/Model/SecureVaultSorting.swift b/DuckDuckGo/SecureVault/Model/SecureVaultSorting.swift index 9bb3187f9b..d4a2e92ec0 100644 --- a/DuckDuckGo/SecureVault/Model/SecureVaultSorting.swift +++ b/DuckDuckGo/SecureVault/Model/SecureVaultSorting.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import Foundation import SwiftUI @@ -40,21 +41,21 @@ struct SecureVaultSorting: Equatable { } } - var imageName: String? { + var image: NSImage? { switch self { case .allItems: return nil - case .logins: return "LoginGlyph" - case .identities: return "IdentityGlyph" - case .cards: return "CreditCardGlyph" + case .logins: return .loginGlyph + case .identities: return .identityGlyph + case .cards: return .creditCardGlyph } } var backgroundColor: NSColor { switch self { - case .allItems: return NSColor(named: "SecureVaultCategoryDefaultColor")! - case .logins: return NSColor(named: "LoginsColor")! - case .identities: return NSColor(named: "IdentitiesColor")! - case .cards: return NSColor(named: "CardsColor")! + case .allItems: .secureVaultCategoryDefault + case .logins: .logins + case .identities: .identities + case .cards: .cards } } diff --git a/DuckDuckGo/SecureVault/View/EditableTextView.swift b/DuckDuckGo/SecureVault/View/EditableTextView.swift index 80c3a91223..77a864ae19 100644 --- a/DuckDuckGo/SecureVault/View/EditableTextView.swift +++ b/DuckDuckGo/SecureVault/View/EditableTextView.swift @@ -30,7 +30,7 @@ struct EditableTextView: NSViewRepresentable { var maxLength: Int? var insets: NSSize? var cornerRadius: CGFloat = 0 - var backgroundColor: NSColor? = .textEditorBackgroundColor + var backgroundColor: NSColor? = .textEditorBackground var textColor: NSColor? = .textColor var focusRingType: NSFocusRingType = .default var isFocusedOnAppear: Bool = true diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementBitwardenItemView.swift b/DuckDuckGo/SecureVault/View/PasswordManagementBitwardenItemView.swift index d7e967fbfd..aad40477d2 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementBitwardenItemView.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementBitwardenItemView.swift @@ -24,7 +24,7 @@ struct PasswordManagementBitwardenItemView: View { var body: some View { VStack(spacing: 16) { - Image("BitwardenLogin") + Image(.bitwardenLogin) VStack(spacing: 2) { Text(UserText.passwordManagerPopoverTitle(managerName: manager.displayName)) @@ -41,7 +41,7 @@ struct PasswordManagementBitwardenItemView: View { if let email = manager.username { Text(UserText.passwordManagerPopoverConnectedToUser(user: email)) .font(.subheadline) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } Button { diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementCreditCardItemView.swift b/DuckDuckGo/SecureVault/View/PasswordManagementCreditCardItemView.swift index 85454df87b..c758fb88ce 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementCreditCardItemView.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementCreditCardItemView.swift @@ -39,7 +39,7 @@ struct PasswordManagementCreditCardItemView: View { if model.isInEditMode { RoundedRectangle(cornerRadius: 8) - .foregroundColor(Color(NSColor.editingPanelColor)) + .foregroundColor(Color(.editingPanel)) .shadow(radius: 6) } @@ -119,7 +119,7 @@ private struct HeaderView: View { HStack(alignment: .center, spacing: 0) { - Image("Card") + Image(.card) .padding(.trailing, 10) if model.isNew || model.isEditing { @@ -221,7 +221,7 @@ private struct EditableCreditCardField: View { Button { model.copy(textFieldValue) } label: { - Image("Copy") + Image(.copy) }.buttonStyle(PlainButtonStyle()) } diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementIdentityItemView.swift b/DuckDuckGo/SecureVault/View/PasswordManagementIdentityItemView.swift index 639c11a82f..cd76160edf 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementIdentityItemView.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementIdentityItemView.swift @@ -41,7 +41,7 @@ struct PasswordManagementIdentityItemView: View { if editMode { RoundedRectangle(cornerRadius: 8) - .foregroundColor(Color(NSColor.editingPanelColor)) + .foregroundColor(Color(.editingPanel)) .shadow(radius: 6) } @@ -297,7 +297,7 @@ private struct HeaderView: View { HStack(alignment: .center, spacing: 0) { - Image("Identity") + Image(.identity) .padding(.trailing, 10) if model.isNew || model.isEditing { @@ -398,7 +398,7 @@ private struct EditableIdentityField: View { Button { model.copy(textFieldValue) } label: { - Image("Copy") + Image(.copy) }.buttonStyle(PlainButtonStyle()) } diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementItemList.swift b/DuckDuckGo/SecureVault/View/PasswordManagementItemList.swift index 6c91e23fc9..61bd2137a6 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementItemList.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementItemList.swift @@ -97,15 +97,8 @@ struct PasswordManagementItemListCategoryView: View { let button = PopUpButton() for category in SecureVaultSorting.Category.allCases { - button.addItem(withTitle: category.title, - foregroundColor: category.foregroundColor, - backgroundColor: category.backgroundColor) - - if let imageName = category.imageName { - button.lastItem?.image = NSImage(named: imageName) - } - - button.lastItem?.representedObject = category + button.add(NSMenuItem(title: category.title, representedObject: category).withImage(category.image), + withForegroundColor: category.foregroundColor, backgroundColor: category.backgroundColor) if category == .allItems { button.menu?.addItem(NSMenuItem.separator()) @@ -225,10 +218,10 @@ private struct PasswordManagerItemView: View { Button(action: action, label: { HStack(spacing: 3) { ZStack { - Image("BitwardenIcon") + Image(.bitwardenIcon) if isLocked { - Image("PasswordManager-lock") + Image(.passwordManagerLock) .padding(.leading, 28) .padding(.top, 21) } @@ -286,15 +279,15 @@ private struct ItemView: View { LetterIconView(title: "#") } case .card: - Image("Card") + Image(.card) .frame(width: 32) .padding(.leading, 6) case .identity: - Image("Identity") + Image(.identity) .frame(width: 32) .padding(.leading, 6) case .note: - Image("Note") + Image(.note) .frame(width: 32) .padding(.leading, 6) } @@ -324,7 +317,7 @@ private struct ItemView: View { .buttonStyle(selected ? PasswordManagerItemButtonStyle(bgColor: Color.accentColor) : // Almost clear, so that whole view is clickable - PasswordManagerItemButtonStyle(bgColor: Color(NSColor.windowBackgroundColor.withAlphaComponent(0.001)))) + PasswordManagerItemButtonStyle(bgColor: Color(NSColor.windowBackground.withAlphaComponent(0.001)))) } } @@ -381,7 +374,7 @@ struct PasswordManagementSortButton: View { } .menuButtonStyle(BorderlessButtonMenuButtonStyle()) .padding(5) - .background(RoundedRectangle(cornerRadius: 5).foregroundColor(sortHover ? Color("SecureVaultCategoryDefaultColor") : Color.clear)) + .background(RoundedRectangle(cornerRadius: 5).foregroundColor(sortHover ? .secureVaultCategoryDefault : .clear)) .onHover { isOver in sortHover = isOver } diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementLoginItemView.swift b/DuckDuckGo/SecureVault/View/PasswordManagementLoginItemView.swift index b351d5e210..cf1bb663e2 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementLoginItemView.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementLoginItemView.swift @@ -42,7 +42,7 @@ struct PasswordManagementLoginItemView: View { if editMode { RoundedRectangle(cornerRadius: 8) - .foregroundColor(Color(NSColor.editingPanelColor)) + .foregroundColor(Color(.editingPanel)) .shadow(radius: 6) } @@ -221,7 +221,7 @@ private struct UsernameLabel: View { Button { model.copy(model.username) } label: { - Image("Copy") + Image(.copy) } .buttonStyle(PlainButtonStyle()) .tooltip(UserText.copyUsernameTooltip) @@ -287,7 +287,7 @@ private struct PrivateEmailMessage: View { let text = String(format: UserText.pmSignInToManageEmail, UserText.pmEnableEmailProtection) var attributedString = AttributedString(text) if let range = attributedString.range(of: UserText.pmEnableEmailProtection) { - attributedString[range].foregroundColor = Color("LinkBlueColor") + attributedString[range].foregroundColor = Color(.linkBlue) } return attributedString } @@ -375,7 +375,7 @@ private struct PasswordView: View { Button { isPasswordVisible = !isPasswordVisible } label: { - Image("SecureEyeToggle") + Image(.secureEyeToggle) } .buttonStyle(PlainButtonStyle()) .tooltip(isPasswordVisible ? UserText.hidePasswordTooltip : UserText.showPasswordTooltip) @@ -398,7 +398,7 @@ private struct PasswordView: View { Button { isPasswordVisible = !isPasswordVisible } label: { - Image("SecureEyeToggle") + Image(.secureEyeToggle) } .buttonStyle(PlainButtonStyle()) .tooltip(isPasswordVisible ? UserText.hidePasswordTooltip : UserText.showPasswordTooltip) @@ -408,7 +408,7 @@ private struct PasswordView: View { Button { model.copy(model.password) } label: { - Image("Copy") + Image(.copy) } .buttonStyle(PlainButtonStyle()) .tooltip(UserText.copyPasswordTooltip) @@ -493,9 +493,9 @@ private struct NotesView: View { .background( ZStack { RoundedRectangle(cornerRadius: cornerRadius) - .stroke(Color(NSColor.textEditorBorderColor), lineWidth: borderWidth) + .stroke(Color(.textEditorBorder), lineWidth: borderWidth) RoundedRectangle(cornerRadius: cornerRadius) - .fill(Color(NSColor.textEditorBackgroundColor)) + .fill(Color(.textEditorBackground)) } ) } diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementNoteItemView.swift b/DuckDuckGo/SecureVault/View/PasswordManagementNoteItemView.swift index 943cef3a69..8fcafa3453 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementNoteItemView.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementNoteItemView.swift @@ -138,7 +138,7 @@ private struct HeaderView: View { HStack(alignment: .center, spacing: 0) { - Image("Note") + Image(.note) .padding(.trailing, 10) Text(model.title) diff --git a/DuckDuckGo/SecureVault/View/PasswordManagementViewController.swift b/DuckDuckGo/SecureVault/View/PasswordManagementViewController.swift index de0eaba54f..602eae318c 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManagementViewController.swift +++ b/DuckDuckGo/SecureVault/View/PasswordManagementViewController.swift @@ -16,13 +16,14 @@ // limitations under the License. // -import Foundation +import AppKit +import BrowserServicesKit import Combine import Common import DDGSync -import SwiftUI -import BrowserServicesKit +import Foundation import SecureStorage +import SwiftUI protocol PasswordManagementDelegate: AnyObject { @@ -68,9 +69,9 @@ final class PasswordManagementViewController: NSViewController { @IBOutlet var lockScreenIconImageView: NSImageView! { didSet { if DeviceAuthenticator.deviceSupportsBiometrics { - lockScreenIconImageView.image = NSImage(named: "LoginsLockTouchID") + lockScreenIconImageView.image = .loginsLockTouchID } else { - lockScreenIconImageView.image = NSImage(named: "LoginsLockPassword") + lockScreenIconImageView.image = .loginsLockPassword } } } @@ -81,7 +82,7 @@ final class PasswordManagementViewController: NSViewController { lockScreenOpenInPreferencesTextView.delegate = self let linkAttributes: [NSAttributedString.Key: Any] = [ - .foregroundColor: NSColor(named: "LinkBlueColor")!, + .foregroundColor: NSColor.linkBlue, .cursor: NSCursor.pointingHand ] @@ -100,7 +101,7 @@ final class PasswordManagementViewController: NSViewController { .cursor: NSCursor.arrow, .paragraphStyle: paragraphStyle, .font: NSFont.systemFont(ofSize: 13, weight: .regular), - .foregroundColor: NSColor(named: "BlackWhite60")! + .foregroundColor: NSColor.blackWhite60 ], range: NSRange(location: 0, length: string.length)) lockScreenOpenInPreferencesTextView.textStorage?.setAttributedString(string) @@ -803,22 +804,11 @@ final class PasswordManagementViewController: NSViewController { // swiftlint:enable function_body_length private func createNewSecureVaultItemMenu() -> NSMenu { - let menu = NSMenu() - - func createMenuItem(title: String, action: Selector, imageName: String) -> NSMenuItem { - let item = NSMenuItem(title: title, action: action, target: self, keyEquivalent: "") - item.image = NSImage(named: imageName) - - return item + NSMenu { + NSMenuItem(title: UserText.pmNewLogin, action: #selector(createNewLogin)).withImage(.loginGlyph) + NSMenuItem(title: UserText.pmNewIdentity, action: #selector(createNewIdentity)).withImage(.identityGlyph) + NSMenuItem(title: UserText.pmNewCard, action: #selector(createNewCreditCard)).withImage(.creditCardGlyph) } - - menu.items = [ - createMenuItem(title: UserText.pmNewLogin, action: #selector(createNewLogin), imageName: "LoginGlyph"), - createMenuItem(title: UserText.pmNewIdentity, action: #selector(createNewIdentity), imageName: "IdentityGlyph"), - createMenuItem(title: UserText.pmNewCard, action: #selector(createNewCreditCard), imageName: "CreditCardGlyph"), - ] - - return menu } private func updateFilter() { @@ -982,9 +972,9 @@ final class PasswordManagementViewController: NSViewController { private func showEmptyState(category: SecureVaultSorting.Category) { switch category { case .allItems: showDefaultEmptyState() - case .logins: showEmptyState(imageName: "LoginsEmpty", title: UserText.pmEmptyStateLoginsTitle) - case .identities: showEmptyState(imageName: "IdentitiesEmpty", title: UserText.pmEmptyStateIdentitiesTitle) - case .cards: showEmptyState(imageName: "CreditCardsEmpty", title: UserText.pmEmptyStateCardsTitle) + case .logins: showEmptyState(image: .loginsEmpty, title: UserText.pmEmptyStateLoginsTitle) + case .identities: showEmptyState(image: .identitiesEmpty, title: UserText.pmEmptyStateIdentitiesTitle) + case .cards: showEmptyState(image: .creditCardsEmpty, title: UserText.pmEmptyStateCardsTitle) } } @@ -997,16 +987,16 @@ final class PasswordManagementViewController: NSViewController { emptyStateMessage.isHidden = false emptyStateButton.isHidden = false - emptyStateImageView.image = NSImage(named: "LoginsEmpty") + emptyStateImageView.image = .loginsEmpty emptyStateTitle.attributedStringValue = NSAttributedString.make(UserText.pmEmptyStateDefaultTitle, lineHeight: 1.14, kern: -0.23) emptyStateMessage.attributedStringValue = NSAttributedString.make(UserText.pmEmptyStateDefaultDescription, lineHeight: 1.05, kern: -0.08) } - private func showEmptyState(imageName: String, title: String) { + private func showEmptyState(image: NSImage, title: String) { emptyState.isHidden = false - emptyStateImageView.image = NSImage(named: imageName) + emptyStateImageView.image = image emptyStateTitle.attributedStringValue = NSAttributedString.make(title, lineHeight: 1.14, kern: -0.23) emptyStateMessage.isHidden = true emptyStateButton.isHidden = true diff --git a/DuckDuckGo/SecureVault/View/PopUpButton.swift b/DuckDuckGo/SecureVault/View/PopUpButton.swift index a77831daa8..64ab5b1a8f 100644 --- a/DuckDuckGo/SecureVault/View/PopUpButton.swift +++ b/DuckDuckGo/SecureVault/View/PopUpButton.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import Foundation private struct NSMenuItemColor { @@ -43,20 +44,18 @@ final class PopUpButton: NSPopUpButton { fatalError("init(coder:) has not been implemented") } - func addItem(withTitle title: String, - foregroundColor: NSColor?, - backgroundColor: NSColor) { - self.addItem(withTitle: title) + func add(_ item: NSMenuItem, withForegroundColor foregroundColor: NSColor?, backgroundColor: NSColor) { + self.menu?.addItem(item) let itemColor = NSMenuItemColor(foregroundColor: foregroundColor, backgroundColor: backgroundColor) - backgroundColorCell?.colors[title] = itemColor + backgroundColorCell?.colors[item.title] = itemColor } } final class NSPopUpButtonBackgroundColorCell: NSPopUpButtonCell { - private static let chevronsImage = NSImage(named: "PopUpButtonChevrons")! + private static let chevronsImage = NSImage.popUpButtonChevrons fileprivate var colors: [String: NSMenuItemColor] = [:] diff --git a/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift b/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift index 91f2aea8c6..cc1ae4fcba 100644 --- a/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift +++ b/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift @@ -336,11 +336,10 @@ final class SaveCredentialsViewController: NSViewController { func loadFaviconForDomain(_ domain: String?) { guard let domain else { - faviconImage.image = NSImage(named: NSImage.Name("Web")) + faviconImage.image = .web return } - faviconImage.image = faviconManagement.getCachedFavicon(for: domain, sizeCategory: .small)?.image - ?? NSImage(named: NSImage.Name("Web")) + faviconImage.image = faviconManagement.getCachedFavicon(for: domain, sizeCategory: .small)?.image ?? .web } private func updatePasswordFieldVisibility(visible: Bool) { diff --git a/DuckDuckGo/Sharing/QRSharingService.swift b/DuckDuckGo/Sharing/QRSharingService.swift index b4d0fbc803..d975bf7610 100644 --- a/DuckDuckGo/Sharing/QRSharingService.swift +++ b/DuckDuckGo/Sharing/QRSharingService.swift @@ -26,15 +26,11 @@ extension NSSharingService { final class QRSharingService: NSSharingService { - private enum Constants { - static let menuIcon = NSImage(named: "QR-Icon")! - } - fileprivate var qrImage: NSImage? fileprivate var imageUrl: URL? fileprivate init() { - super.init(title: UserText.shareViaQRCodeMenuItem, image: Constants.menuIcon, alternateImage: nil) {} + super.init(title: UserText.shareViaQRCodeMenuItem, image: .qrIcon, alternateImage: nil) {} } /// Get ASCII `Data` for an array of items to share that can be represented as strings (e.g., URLs or Strings). diff --git a/DuckDuckGo/Suggestions/View/SuggestionTableCellView.swift b/DuckDuckGo/Suggestions/View/SuggestionTableCellView.swift index 98a15c3edc..b28e21545d 100644 --- a/DuckDuckGo/Suggestions/View/SuggestionTableCellView.swift +++ b/DuckDuckGo/Suggestions/View/SuggestionTableCellView.swift @@ -23,11 +23,11 @@ final class SuggestionTableCellView: NSTableCellView { static let identifier = "SuggestionTableCellView" - static let textColor = NSColor.suggestionTextColor - static let suffixColor = NSColor.addressBarSuffixColor - static let burnerSuffixColor = NSColor.burnerAccentColor - static let iconColor = NSColor.suggestionIconColor - static let selectedTintColor = NSColor.selectedSuggestionTintColor + static let textColor: NSColor = .suggestionText + static let suffixColor: NSColor = .addressBarSuffix + static let burnerSuffixColor: NSColor = .burnerAccent + static let iconColor: NSColor = .suggestionIcon + static let selectedTintColor: NSColor = .selectedSuggestionTint @IBOutlet weak var iconImageView: NSImageView! @IBOutlet weak var suffixTextField: NSTextField! diff --git a/DuckDuckGo/Suggestions/View/SuggestionTableRowView.swift b/DuckDuckGo/Suggestions/View/SuggestionTableRowView.swift index ffcb2139f5..3cbd291993 100644 --- a/DuckDuckGo/Suggestions/View/SuggestionTableRowView.swift +++ b/DuckDuckGo/Suggestions/View/SuggestionTableRowView.swift @@ -50,7 +50,7 @@ final class SuggestionTableRowView: NSTableRowView { } private func updateBackgroundColor() { - let accentColor: NSColor = isBurner ? .burnerAccentColor : .controlAccentColor + let accentColor: NSColor = isBurner ? .burnerAccent : .controlAccentColor backgroundColor = isSelected ? accentColor : .clear } diff --git a/DuckDuckGo/Suggestions/ViewModel/SuggestionViewModel.swift b/DuckDuckGo/Suggestions/ViewModel/SuggestionViewModel.swift index 1c56cb0682..e3aac3ea0c 100644 --- a/DuckDuckGo/Suggestions/ViewModel/SuggestionViewModel.swift +++ b/DuckDuckGo/Suggestions/ViewModel/SuggestionViewModel.swift @@ -160,26 +160,20 @@ struct SuggestionViewModel: Equatable { // MARK: - Icon - static let webImage = NSImage(named: "Web") - static let searchImage = NSImage(named: "Search") - static let historyImage = NSImage(named: "HistorySuggestion") - static let bookmarkImage = NSImage(named: "BookmarkSuggestion") - static let favoriteImage = NSImage(named: "FavoritedBookmarkSuggestion") - var icon: NSImage? { switch suggestion { case .phrase: - return Self.searchImage + return .search case .website: - return Self.webImage + return .web case .historyEntry: - return Self.historyImage + return .historySuggestion case .bookmark(title: _, url: _, isFavorite: false, allowedInTopHits: _): - return Self.bookmarkImage + return .bookmarkSuggestion case .bookmark(title: _, url: _, isFavorite: true, allowedInTopHits: _): - return Self.favoriteImage + return .favoritedBookmarkSuggestion case .unknown: - return Self.webImage + return .web } } diff --git a/DuckDuckGo/Tab/View/WebViewSnapshotView.swift b/DuckDuckGo/Tab/View/WebViewSnapshotView.swift index 8d79fb8129..986b50ddfc 100644 --- a/DuckDuckGo/Tab/View/WebViewSnapshotView.swift +++ b/DuckDuckGo/Tab/View/WebViewSnapshotView.swift @@ -63,7 +63,7 @@ final class WebViewSnapshotView: NSView { private func updateDimColor() { NSAppearance.withAppAppearance { - dimmingView.layer?.backgroundColor = NSColor(named: "WindowBackgroundColor")?.withAlphaComponent(1.0).cgColor + dimmingView.layer?.backgroundColor = NSColor.windowBackground.withAlphaComponent(1.0).cgColor } } } diff --git a/DuckDuckGo/Tab/ViewModel/TabViewModel.swift b/DuckDuckGo/Tab/ViewModel/TabViewModel.swift index d90fa2aa37..09f4779513 100644 --- a/DuckDuckGo/Tab/ViewModel/TabViewModel.swift +++ b/DuckDuckGo/Tab/ViewModel/TabViewModel.swift @@ -23,11 +23,11 @@ import BrowserServicesKit final class TabViewModel { enum Favicon { - static let home = NSImage(named: "HomeFavicon")! - static let burnerHome = NSImage(named: "BurnerTabFavicon")! - static let preferences = NSImage(named: "Preferences")! - static let bookmarks = NSImage(named: "Bookmarks")! - static let dataBrokerProtection = NSImage(named: "BurnerWindowIcon2")! // PLACEHOLDER: Change it once we have the final icon + static let home = NSImage.homeFavicon + static let burnerHome = NSImage.burnerTabFavicon + static let preferences = NSImage.preferences + static let bookmarks = NSImage.bookmarks + static let dataBrokerProtection = NSImage.burnerWindowIcon2 // PLACEHOLDER: Change it once we have the final icon } private(set) var tab: Tab diff --git a/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard b/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard index ff559dfdfe..807f51be5c 100644 --- a/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard +++ b/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard @@ -44,20 +44,6 @@ - @@ -118,7 +104,6 @@ - @@ -264,7 +249,6 @@ - @@ -275,7 +259,6 @@ - @@ -286,7 +269,6 @@ - @@ -301,7 +283,6 @@ - @@ -312,7 +293,6 @@ - @@ -340,12 +320,6 @@ - - - - - - @@ -358,9 +332,6 @@ - - - diff --git a/DuckDuckGo/TabBar/View/TabBarViewController.swift b/DuckDuckGo/TabBar/View/TabBarViewController.swift index f3677287ca..3835b9531a 100644 --- a/DuckDuckGo/TabBar/View/TabBarViewController.swift +++ b/DuckDuckGo/TabBar/View/TabBarViewController.swift @@ -31,7 +31,6 @@ final class TabBarViewController: NSViewController { } @IBOutlet weak var visualEffectBackgroundView: NSVisualEffectView! - @IBOutlet weak var gradientBackgroundView: GradientView! @IBOutlet weak var pinnedTabsContainerView: NSView! @IBOutlet private weak var collectionView: TabBarCollectionView! @IBOutlet private weak var scrollView: TabBarScrollView! @@ -168,9 +167,9 @@ final class TabBarViewController: NSViewController { if tabCollectionViewModel.isBurner { burnerWindowBackgroundView.isHidden = false fireButton.isAnimationEnabled = false - fireButton.backgroundColor = NSColor.fireButtonRedBackgroundColor - fireButton.mouseOverColor = NSColor.fireButtonRedHoverColor - fireButton.mouseDownColor = NSColor.fireButtonRedPressedColor + fireButton.backgroundColor = NSColor.fireButtonRedBackground + fireButton.mouseOverColor = NSColor.fireButtonRedHover + fireButton.mouseDownColor = NSColor.fireButtonRedPressed fireButton.normalTintColor = NSColor.white fireButton.mouseDownTintColor = NSColor.white fireButton.mouseOverTintColor = NSColor.white diff --git a/DuckDuckGo/TabBar/View/TabBarViewItem.swift b/DuckDuckGo/TabBar/View/TabBarViewItem.swift index 266bfacd21..4c75c69bdf 100644 --- a/DuckDuckGo/TabBar/View/TabBarViewItem.swift +++ b/DuckDuckGo/TabBar/View/TabBarViewItem.swift @@ -320,7 +320,7 @@ final class TabBarViewItem: NSCollectionViewItem { private func updateBorderLayerColor() { NSAppearance.withAppAppearance { withoutAnimation { - borderLayer.borderColor = NSColor(named: TabShadowConfig.colorName)?.cgColor + borderLayer.borderColor = NSColor.tabShadowLine.cgColor } } } @@ -339,9 +339,9 @@ final class TabBarViewItem: NSCollectionViewItem { private func updateSubviews() { NSAppearance.withAppAppearance { - let backgroundColor = isSelected || isDragged ? NSColor.navigationBarBackground : NSColor.clear + let backgroundColor: NSColor = isSelected || isDragged ? .navigationBarBackground : .clear view.layer?.backgroundColor = backgroundColor.cgColor - mouseOverView.mouseOverColor = isSelected || isDragged ? NSColor.clear : NSColor.tabMouseOverColor + mouseOverView.mouseOverColor = isSelected || isDragged ? .clear : .tabMouseOver } let showCloseButton = (isMouseOver && !widthStage.isCloseButtonHidden) || isSelected @@ -384,13 +384,13 @@ final class TabBarViewItem: NSCollectionViewItem { } private func updateUsedPermissions() { if usedPermissions.camera.isActive { - permissionButton.image = .cameraActiveImage + permissionButton.image = .cameraTabActive } else if usedPermissions.microphone.isActive { - permissionButton.image = .micActiveImage + permissionButton.image = .microphoneActive } else if usedPermissions.camera.isPaused { - permissionButton.image = .cameraBlockedImage + permissionButton.image = .cameraTabBlocked } else if usedPermissions.microphone.isPaused { - permissionButton.image = .micBlockedImage + permissionButton.image = .microphoneIcon } else { permissionButton.isHidden = true tabLoadingPermissionLeadingConstraint.isActive = false @@ -451,7 +451,7 @@ final class TabBarViewItem: NSCollectionViewItem { private func setupMutedTabIconColor() { mutedTabIcon.image?.isTemplate = true - mutedTabIcon.contentTintColor = NSColor(named: "MutedTabIconColor") + mutedTabIcon.contentTintColor = .mutedTabIcon } private func setupMutedTabIconPosition() { @@ -649,11 +649,3 @@ private extension TabBarViewItem { static let trailingSpaceWithPermissionAndButton: CGFloat = 40 } } - -private extension NSImage { - static let cameraActiveImage = NSImage(named: "Camera-Tab-Active") - static let cameraBlockedImage = NSImage(named: "Camera-Tab-Blocked") - - static let micActiveImage = NSImage(named: "Microphone-Active") - static let micBlockedImage = NSImage(named: "Microphone-Icon") -} diff --git a/DuckDuckGo/TabBar/View/TabShadowConfig.swift b/DuckDuckGo/TabBar/View/TabShadowConfig.swift index 8e13cb6ca5..f0a22d1e17 100644 --- a/DuckDuckGo/TabBar/View/TabShadowConfig.swift +++ b/DuckDuckGo/TabBar/View/TabShadowConfig.swift @@ -20,6 +20,5 @@ import Foundation enum TabShadowConfig { static let alpha: Float = 1 - static let colorName: String = "TabShadowLine" static let dividerSize: CGFloat = 1 } diff --git a/DuckDuckGo/TabBar/View/TabShadowView.swift b/DuckDuckGo/TabBar/View/TabShadowView.swift index fa81c17eca..7ccc071374 100644 --- a/DuckDuckGo/TabBar/View/TabShadowView.swift +++ b/DuckDuckGo/TabBar/View/TabShadowView.swift @@ -38,7 +38,7 @@ final class TabShadowView: NSView { override func layout() { super.layout() shadowLine.wantsLayer = true - shadowLine.layer?.backgroundColor = NSColor(named: TabShadowConfig.colorName)?.cgColor + shadowLine.layer?.backgroundColor = NSColor.tabShadowLine.cgColor shadowLine.frame = CGRect(x: 0, y: 0, width: frame.width, height: TabShadowConfig.dividerSize) } } diff --git a/DuckDuckGo/VPNFeedbackForm/VPNFeedbackFormView.swift b/DuckDuckGo/VPNFeedbackForm/VPNFeedbackFormView.swift index bf65e004dd..17323bbedc 100644 --- a/DuckDuckGo/VPNFeedbackForm/VPNFeedbackFormView.swift +++ b/DuckDuckGo/VPNFeedbackForm/VPNFeedbackFormView.swift @@ -149,9 +149,9 @@ private struct VPNFeedbackFormIssueDescriptionForm: View { .background( ZStack { RoundedRectangle(cornerRadius: 8.0) - .stroke(Color(NSColor.textEditorBorderColor), lineWidth: 0.4) + .stroke(Color(.textEditorBorder), lineWidth: 0.4) RoundedRectangle(cornerRadius: 8.0) - .fill(Color(NSColor.textEditorBackgroundColor)) + .fill(Color(.textEditorBackground)) } ) } @@ -164,7 +164,7 @@ private struct VPNFeedbackFormSentView: View { var body: some View { VStack(spacing: 0) { - Image("VPNFeedbackSent") + Image(.vpnFeedbackSent) .padding(.top, 20) Text(UserText.vpnFeedbackFormSendingConfirmationTitle) diff --git a/DuckDuckGo/Waitlist/Views/WaitlistSteps/EnableWaitlistFeatureView.swift b/DuckDuckGo/Waitlist/Views/WaitlistSteps/EnableWaitlistFeatureView.swift index cda84273a3..074c74d1ca 100644 --- a/DuckDuckGo/Waitlist/Views/WaitlistSteps/EnableWaitlistFeatureView.swift +++ b/DuckDuckGo/Waitlist/Views/WaitlistSteps/EnableWaitlistFeatureView.swift @@ -43,12 +43,12 @@ struct EnableWaitlistFeatureView: View { Text(viewData.subtitle) .multilineTextAlignment(.center) - .foregroundColor(Color("BlackWhite80")) + .foregroundColor(Color(.blackWhite80)) Text(viewData.availabilityDisclaimer) .multilineTextAlignment(.center) .font(.system(size: 12)) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } } buttons: { Button(viewData.buttonConfirmLabel) { diff --git a/DuckDuckGo/Waitlist/Views/WaitlistSteps/InvitedToWaitlistView.swift b/DuckDuckGo/Waitlist/Views/WaitlistSteps/InvitedToWaitlistView.swift index 0789889fc9..dc4b75749c 100644 --- a/DuckDuckGo/Waitlist/Views/WaitlistSteps/InvitedToWaitlistView.swift +++ b/DuckDuckGo/Waitlist/Views/WaitlistSteps/InvitedToWaitlistView.swift @@ -47,7 +47,7 @@ struct InvitedToWaitlistView: View { Text(viewData.subtitle) .multilineTextAlignment(.center) - .foregroundColor(Color("BlackWhite80")) + .foregroundColor(Color(.blackWhite80)) if !viewData.entryViewViewDataList.isEmpty { VStack(spacing: 16.0) { @@ -57,14 +57,14 @@ struct InvitedToWaitlistView: View { } .padding(20.0) .frame(maxWidth: .infinity) - .background(Color("BlackWhite1")) - .border(Color("BlackWhite5")) + .background(Color.blackWhite1) + .border(.blackWhite5) } Text(viewData.availabilityDisclaimer) .multilineTextAlignment(.center) .font(.system(size: 12)) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } } buttons: { Button(viewData.buttonDismissLabel) { @@ -95,13 +95,13 @@ private struct WaitlistListEntryView: View { VStack(alignment: .leading, spacing: 6) { Text(viewData.title) .font(.system(size: 13, weight: .bold)) - .foregroundColor(Color("BlackWhite80")) + .foregroundColor(Color(.blackWhite80)) .multilineTextAlignment(.leading) .frame(maxWidth: .infinity, alignment: .leading) Text(viewData.subtitle) .font(.system(size: 13)) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) .multilineTextAlignment(.leading) .frame(maxWidth: .infinity, alignment: .leading) } diff --git a/DuckDuckGo/Waitlist/Views/WaitlistSteps/JoinWaitlistView.swift b/DuckDuckGo/Waitlist/Views/WaitlistSteps/JoinWaitlistView.swift index ae0692ff14..47aaf86705 100644 --- a/DuckDuckGo/Waitlist/Views/WaitlistSteps/JoinWaitlistView.swift +++ b/DuckDuckGo/Waitlist/Views/WaitlistSteps/JoinWaitlistView.swift @@ -48,18 +48,18 @@ struct JoinWaitlistView: View { Text(viewData.subtitle1) .multilineTextAlignment(.center) - .foregroundColor(Color("BlackWhite80")) + .foregroundColor(Color(.blackWhite80)) if !viewData.subtitle2.isEmpty { Text(viewData.subtitle2) .multilineTextAlignment(.center) - .foregroundColor(Color("BlackWhite80")) + .foregroundColor(Color(.blackWhite80)) } Text(viewData.availabilityDisclaimer) .multilineTextAlignment(.center) .font(.system(size: 12)) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } } buttons: { Button(viewData.buttonCloseLabel) { diff --git a/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/SwiftUI/TextButton.swift b/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/SwiftUI/TextButton.swift index 1fdf619890..87079ea5c0 100644 --- a/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/SwiftUI/TextButton.swift +++ b/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/SwiftUI/TextButton.swift @@ -31,7 +31,7 @@ struct TextButton: View { var body: some View { Button(action: action) { Text(title) - .foregroundColor(Color("LinkBlueColor", bundle: Bundle.module)) + .foregroundColor(Color(.linkBlue)) } .buttonStyle(.plain) .cursor(.pointingHand) diff --git a/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/Views/StatusView/NetworkProtectionStatusView.swift b/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/Views/StatusView/NetworkProtectionStatusView.swift index 2575803866..a70e22f729 100644 --- a/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/Views/StatusView/NetworkProtectionStatusView.swift +++ b/LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionUI/Views/StatusView/NetworkProtectionStatusView.swift @@ -84,7 +84,7 @@ public struct NetworkProtectionStatusView: View { private func connectionHealthWarningView(message: String) -> some View { VStack(spacing: 0) { HStack(alignment: .top, spacing: 12) { - Image("WarningColored", bundle: Bundle.module) + Image(.warningColored) /// Text elements in SwiftUI don't expand horizontally more than needed, so we're adding an "optional" spacer at the end so that /// the alert bubble won't shrink if there's not enough text. diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Extensions/RoundedBorder.swift b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Extensions/RoundedBorder.swift index 2151f80638..b4bb101f1f 100644 --- a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Extensions/RoundedBorder.swift +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Extensions/RoundedBorder.swift @@ -22,9 +22,9 @@ extension View { func roundedBorder() -> some View { background(ZStack { RoundedRectangle(cornerRadius: 8) - .stroke(Color("BlackWhite10"), lineWidth: 1) + .stroke(Color(.blackWhite10), lineWidth: 1) RoundedRectangle(cornerRadius: 8) - .fill(Color("BlackWhite1")) + .fill(Color(.blackWhite1)) }) } } diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Preferences/PreferencesSubscriptionView.swift b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Preferences/PreferencesSubscriptionView.swift index 5ef3942106..10c02f815e 100644 --- a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Preferences/PreferencesSubscriptionView.swift +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Preferences/PreferencesSubscriptionView.swift @@ -83,7 +83,7 @@ public struct PreferencesSubscriptionView: View { VStack { if model.isUserAuthenticated { UniversalHeaderView { - Image("subscription-active-icon", bundle: .module) + Image(.subscriptionActiveIcon) .padding(4) } content: { TextMenuItemHeader(UserText.preferencesSubscriptionActiveHeader) @@ -116,7 +116,7 @@ public struct PreferencesSubscriptionView: View { } else { UniversalHeaderView { - Image("subscription-inactive-icon", bundle: .module) + Image(.subscriptionInactiveIcon) .padding(4) .background(Color.black.opacity(0.06)) .cornerRadius(4) @@ -230,7 +230,7 @@ public struct SectionView: View { HStack(alignment: .center, spacing: 8) { Image(iconName, bundle: .module) .padding(4) - .background(Color("BadgeBackground", bundle: .module)) + .background(Color(.badgeBackground)) .cornerRadius(4) VStack (alignment: .leading) { @@ -238,12 +238,12 @@ public struct SectionView: View { .frame(maxWidth: .infinity, alignment: .leading) .fixMultilineScrollableText() .font(.body) - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) Text(description) .frame(maxWidth: .infinity, alignment: .leading) .fixMultilineScrollableText() .font(.system(size: 11, weight: .regular, design: .default)) - .foregroundColor(Color("TextSecondary", bundle: .module)) + .foregroundColor(Color(.textSecondary)) } if let name = buttonName, !name.isEmpty, let action = buttonAction { @@ -271,12 +271,12 @@ private struct SubscriptionDialog: View where Buttons: View { Text(title) .font(.title2) .bold() - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) Text(description) .font(.body) .multilineTextAlignment(.center) .fixMultilineScrollableText() - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) } buttons: { buttons() } diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite1.colorset/Contents.json b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite1.colorset/Contents.json new file mode 100644 index 0000000000..44048d2abc --- /dev/null +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite1.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite10.colorset/Contents.json b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite10.colorset/Contents.json new file mode 100644 index 0000000000..f690a0bfd9 --- /dev/null +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite10.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessRow.swift b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessRow.swift index 523fb91fcc..6e899f9583 100644 --- a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessRow.swift +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessRow.swift @@ -62,12 +62,12 @@ public struct SubscriptionAccessRow: View { if let header = descriptionHeader, !header.isEmpty { Text(header) .bold() - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) } Text(description) .font(.system(size: 13, weight: .regular, design: .default)) - .foregroundColor(Color("TextSecondary", bundle: .module)) + .foregroundColor(Color(.textSecondary)) .fixMultilineScrollableText() if let title = buttonTitle, let action = buttonAction { diff --git a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessView.swift b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessView.swift index bfc0fc386f..1081864819 100644 --- a/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessView.swift +++ b/LocalPackages/SubscriptionUI/Sources/SubscriptionUI/SubscriptionAccessView/SubscriptionAccessView.swift @@ -41,12 +41,12 @@ public struct SubscriptionAccessView: View { Text(model.title) .font(.title2) .bold() - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) Text(model.description) .font(.body) .multilineTextAlignment(.center) .fixMultilineScrollableText() - .foregroundColor(Color("TextPrimary", bundle: .module)) + .foregroundColor(Color(.textPrimary)) } .padding(4) diff --git a/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Colors/GreyTextColor.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Colors/GreyTextColor.colorset/Contents.json new file mode 100644 index 0000000000..19795b27b4 --- /dev/null +++ b/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Colors/GreyTextColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.500", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.500", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Contents.json diff --git a/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/PreferencesViews.swift b/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/PreferencesViews.swift index ad3c14b9f8..9dad9d679c 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/PreferencesViews.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/PreferencesViews.swift @@ -59,7 +59,7 @@ public struct TextMenuItemCaption: View { Text(text) .frame(maxWidth: .infinity, alignment: .leading) .fixMultilineScrollableText() - .foregroundColor(Color("GreyTextColor")) + .foregroundColor(Color(.greyText)) } } diff --git a/DuckDuckGo/Assets.xcassets/Colors/AlertRedLightDefaultText.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/AlertRedLightDefaultText.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/AlertRedLightDefaultText.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/AlertRedLightDefaultText.colorset/Contents.json diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/ButtonMouseOverColor.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/ButtonMouseOverColor.colorset/Contents.json new file mode 100644 index 0000000000..d183249666 --- /dev/null +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/ButtonMouseOverColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.050", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.050", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json new file mode 100644 index 0000000000..bb413935ee --- /dev/null +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xEE", + "green" : "0x69", + "red" : "0x39" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF6", + "green" : "0x94", + "red" : "0x71" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.933", + "green" : "0.412", + "red" : "0.224" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.965", + "green" : "0.580", + "red" : "0.443" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/Colors/PWMActionButtonLabel.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMActionButtonLabel.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PWMActionButtonLabel.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMActionButtonLabel.colorset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Colors/PWMButtonBackground-Pressed.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonBackground-Pressed.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PWMButtonBackground-Pressed.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonBackground-Pressed.colorset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Colors/PWMButtonBackground.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonBackground.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PWMButtonBackground.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonBackground.colorset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Colors/PWMButtonLabel.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonLabel.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PWMButtonLabel.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMButtonLabel.colorset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Colors/PWMEditingControlColor.colorset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMEditingControlColor.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PWMEditingControlColor.colorset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/PWMEditingControlColor.colorset/Contents.json diff --git a/DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Contents.json similarity index 100% rename from DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset/Intive-Lock-Succes-96.pdf b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset/Intive-Lock-Succes-96.pdf similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset/Intive-Lock-Succes-96.pdf rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset/Intive-Lock-Succes-96.pdf diff --git a/DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset/Contents.json b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset/Contents.json rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset/Invite-Lock-96.pdf b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset/Invite-Lock-96.pdf similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset/Invite-Lock-96.pdf rename to LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset/Invite-Lock-96.pdf diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/ButtonStyles.swift b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/ButtonStyles.swift index 2c2aad1b82..718f9b029d 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/ButtonStyles.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/ButtonStyles.swift @@ -25,8 +25,8 @@ public struct StandardButtonStyle: ButtonStyle { public func makeBody(configuration: Self.Configuration) -> some View { - let backgroundColor = Color("PWMButtonBackground\(configuration.isPressed ? "-Pressed" : "")") - let labelColor = Color("PWMButtonLabel") + let backgroundColor = configuration.isPressed ? Color(.pwmButtonBackgroundPressed) : Color(.pwmButtonBackground) + let labelColor = Color(.pwmButtonLabel) configuration.label .font(.system(size: 13)) @@ -75,7 +75,7 @@ public struct DismissActionButtonStyle: ButtonStyle { public init() {} public func makeBody(configuration: Self.Configuration) -> some View { - let backgroundColor = configuration.isPressed ? Color(NSColor.windowBackgroundColor) : Color(NSColor.controlColor) + let backgroundColor = configuration.isPressed ? Color(.windowBackgroundColor) : Color(.controlColor) let labelColor = Color.primary let outerShadowOpacity = colorScheme == .dark ? 0.8 : 0.0 @@ -110,7 +110,7 @@ public struct DestructiveActionButtonStyle: ButtonStyle { } public func makeBody(configuration: Self.Configuration) -> some View { - let enabledBackgroundColor = configuration.isPressed ? Color("PWMButtonBackground-Pressed") : Color.red + let enabledBackgroundColor = configuration.isPressed ? Color(.pwmButtonBackgroundPressed) : .red let disabledBackgroundColor = Color.gray.opacity(0.1) let labelColor = enabled ? Color.white : Color.primary.opacity(0.3) diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/HoverButton.swift b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/HoverButton.swift index dcf4dc096f..785f325f6b 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/HoverButton.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/HoverButton.swift @@ -16,6 +16,7 @@ // limitations under the License. // +import AppKit import SwiftUI public struct HoverButton: View { @@ -23,7 +24,7 @@ public struct HoverButton: View { public let size: CGFloat public let backgroundColor: Color public let mouseOverColor: Color - public let imageName: String + public let image: NSImage public let imageSize: CGFloat? public let action: () -> Void public let cornerRadius: CGFloat @@ -32,18 +33,18 @@ public struct HoverButton: View { public init( size: CGFloat = 32, - backgroundColor: Color = Color.clear, - mouseOverColor: Color = Color("ButtonMouseOverColor"), - imageName: String, + backgroundColor: Color? = nil, + mouseOverColor: Color? = nil, + image: NSImage, imageSize: CGFloat = 16, cornerRadius: CGFloat, action: @escaping () -> Void ) { self.size = size - self.backgroundColor = backgroundColor - self.mouseOverColor = mouseOverColor - self.imageName = imageName + self.backgroundColor = backgroundColor ?? .clear + self.mouseOverColor = mouseOverColor ?? Color(.buttonMouseOver) + self.image = image self.imageSize = imageSize self.cornerRadius = cornerRadius self.action = action @@ -56,13 +57,8 @@ public struct HoverButton: View { .fill(isHovering ? mouseOverColor : backgroundColor) Group { - if NSImage(named: imageName) != nil { - Image(imageName) - .resizable() - } else { - Image(systemName: imageName) - .resizable() - } + Image(nsImage: image) + .resizable() } .frame(width: imageSize ?? size, height: imageSize ?? size) diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/IniviteCodeView/InviteCodeView.swift b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/IniviteCodeView/InviteCodeView.swift index 830209f303..fa3faed3a0 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/IniviteCodeView/InviteCodeView.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/IniviteCodeView/InviteCodeView.swift @@ -28,7 +28,7 @@ public struct InviteCodeView: View where ViewModel: InviteCodeViewMod public var body: some View { Dialog { VStack(spacing: 20) { - Image("InviteLock") + Image(.inviteLock96) Text(viewModel.titleText) .font(.system(size: 17, weight: .semibold)) .fixedSize(horizontal: false, vertical: true) @@ -50,7 +50,7 @@ public struct InviteCodeView: View where ViewModel: InviteCodeViewMod if let errorText = viewModel.errorText { Text(errorText) .font(.system(size: 13)) - .foregroundColor(Color("AlertRedLightDefaultText")) + .foregroundColor(Color(.alertRedLightDefaultText)) .multilineTextAlignment(.center) } } @@ -97,7 +97,7 @@ public struct InviteCodeSuccessView: View where ViewModel: InviteCode public var body: some View { Dialog { VStack(spacing: 20) { - Image("InviteLockSuccess") + Image(.intiveLockSucces96) Text(viewModel.titleText) .font(.system(size: 17, weight: .semibold)) .fixedSize(horizontal: false, vertical: true) diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/PopoverMessageView.swift b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/PopoverMessageView.swift index 6dc028dc55..d08f3e7f48 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/PopoverMessageView.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/PopoverMessageView.swift @@ -16,17 +16,18 @@ // limitations under the License. // +import AppKit import Foundation import SwiftUI public final class PopoverMessageViewModel: ObservableObject { @Published var message: String - @Published var image: String? + @Published var image: NSImage? @Published var buttonText: String? @Published var buttonAction: (() -> Void)? public init(message: String, - image: String? = nil, + image: NSImage? = nil, buttonText: String? = nil, buttonAction: (() -> Void)? = nil) { self.message = message @@ -46,7 +47,7 @@ public struct PopoverMessageView: View { public var body: some View { HStack { if let image = viewModel.image { - Image(image) + Image(nsImage: image) } Text(viewModel.message) diff --git a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/TextButton.swift b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/TextButton.swift index 1e73626837..12dc49952c 100644 --- a/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/TextButton.swift +++ b/LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/TextButton.swift @@ -34,7 +34,7 @@ public struct TextButton: View { Button(action: action) { Text(title) .fontWeight(fontWeight) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) } .buttonStyle(.plain) .cursor(.pointingHand) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Alert-Color-16.pdf b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Alert-Color-16.pdf new file mode 100644 index 0000000000..c7a1c442b8 Binary files /dev/null and b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Alert-Color-16.pdf differ diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Contents.json new file mode 100644 index 0000000000..abb8f2c9c1 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Alert-Color-16.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/Colors/AlertBubbleBackground.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/AlertBubbleBackground.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/AlertBubbleBackground.colorset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/AlertBubbleBackground.colorset/Contents.json diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite1.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite1.colorset/Contents.json new file mode 100644 index 0000000000..44048d2abc --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite1.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.010", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite10.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite10.colorset/Contents.json new file mode 100644 index 0000000000..f690a0bfd9 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite10.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite100.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite100.colorset/Contents.json new file mode 100644 index 0000000000..cef72204a0 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite100.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite60.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite60.colorset/Contents.json new file mode 100644 index 0000000000..f5d2804bd2 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite60.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.600", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/DialogPanelBackground.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/DialogPanelBackground.colorset/Contents.json new file mode 100644 index 0000000000..3369c9fd39 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/DialogPanelBackground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.992", + "green" : "0.992", + "red" : "0.992" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "82", + "green" : "82", + "red" : "82" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json new file mode 100644 index 0000000000..bb413935ee --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xEE", + "green" : "0x69", + "red" : "0x39" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF6", + "green" : "0x94", + "red" : "0x71" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.933", + "green" : "0.412", + "red" : "0.224" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.965", + "green" : "0.580", + "red" : "0.443" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DuckDuckGo/Assets.xcassets/Colors/PickerViewSelected.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/PickerViewSelected.colorset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Colors/PickerViewSelected.colorset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/PickerViewSelected.colorset/Contents.json diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/SeparatorColor.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/SeparatorColor.colorset/Contents.json new file mode 100644 index 0000000000..2e1baf42f5 --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/SeparatorColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.100", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/WindowBackgroundColor.colorset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/WindowBackgroundColor.colorset/Contents.json new file mode 100644 index 0000000000..ae31447f3c --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/WindowBackgroundColor.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x11", + "green" : "0x11", + "red" : "0x11" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.067", + "green" : "0.067", + "red" : "0.067" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Contents.json new file mode 100644 index 0000000000..7cd8eaf7ee --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "Copy.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Copy.pdf b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Copy.pdf new file mode 100644 index 0000000000..d6f70acd8d Binary files /dev/null and b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Copy.pdf differ diff --git a/DuckDuckGo/Assets.xcassets/Images/Lock-Succes-96.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Lock-Succes-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Lock-Succes-96.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Lock-Succes-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Lock-Succes-96.imageset/Lock-Succes-96.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Lock-Succes-96.imageset/Lock-Succes-96.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Lock-Succes-96.imageset/Lock-Succes-96.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Lock-Succes-96.imageset/Lock-Succes-96.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/Paste.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Paste.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Paste.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Paste.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Paste.imageset/Paste.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Paste.imageset/Paste.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Paste.imageset/Paste.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Paste.imageset/Paste.svg diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/Contents.json new file mode 100644 index 0000000000..21a7942fab --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icon-16-share.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/icon-16-share.pdf b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/icon-16-share.pdf new file mode 100644 index 0000000000..96eb3cd071 Binary files /dev/null and b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/icon-16-share.pdf differ diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/Contents.json new file mode 100644 index 0000000000..7186bab91f --- /dev/null +++ b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "SolidCheckmark.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/SolidCheckmark.pdf b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/SolidCheckmark.pdf new file mode 100644 index 0000000000..a61533646d Binary files /dev/null and b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/SolidCheckmark.pdf differ diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-96.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-96.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-96.imageset/Sync-96 1.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-96.imageset/Sync-96 1.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-96.imageset/Sync-96 1.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-96.imageset/Sync-96 1.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-Pair-96.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Pair-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-Pair-96.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Pair-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-Pair-96.imageset/Sync-Pair-96.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Pair-96.imageset/Sync-Pair-96.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-Pair-96.imageset/Sync-Pair-96.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Pair-96.imageset/Sync-Pair-96.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-Server-96.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Server-96.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-Server-96.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Server-96.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-Server-96.imageset/Sync-Server-96.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Server-96.imageset/Sync-Server-96.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-Server-96.imageset/Sync-Server-96.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-Server-96.imageset/Sync-Server-96.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-setup-success.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-setup-success.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-setup-success.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-setup-success.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/Sync-setup-success.imageset/Sync-setup-success.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-setup-success.imageset/Sync-setup-success.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/Sync-setup-success.imageset/Sync-setup-success.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Sync-setup-success.imageset/Sync-setup-success.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncFetchFavicons.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncFetchFavicons.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncFetchFavicons.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncFetchFavicons.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncFetchFavicons.imageset/SyncFetchFavicons.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncFetchFavicons.imageset/SyncFetchFavicons.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncFetchFavicons.imageset/SyncFetchFavicons.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncFetchFavicons.imageset/SyncFetchFavicons.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRecoveryPDF.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRecoveryPDF.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRecoveryPDF.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRecoveryPDF.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRecoveryPDF.imageset/SyncRecoveryPDF.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRecoveryPDF.imageset/SyncRecoveryPDF.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRecoveryPDF.imageset/SyncRecoveryPDF.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRecoveryPDF.imageset/SyncRecoveryPDF.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Remove-Device-Desktop-96.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Remove-Device-Desktop-96.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Remove-Device-Desktop-96.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Remove-Device-Desktop-96.svg diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Contents.json b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Contents.json similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Contents.json rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Contents.json diff --git a/DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Remove-Device-Mobile-96.svg b/LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Remove-Device-Mobile-96.svg similarity index 100% rename from DuckDuckGo/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Remove-Device-Mobile-96.svg rename to LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Remove-Device-Mobile-96.svg diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeleteAccountView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeleteAccountView.swift index 3f9e2e647f..10c65140f5 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeleteAccountView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeleteAccountView.swift @@ -28,7 +28,7 @@ struct DeleteAccountView: View { var body: some View { SyncDialog { VStack(spacing: 20.0) { - Image("SyncRemoveDeviceDesktop") + Image(.syncRemoveDeviceDesktop) SyncUIViews.TextHeader(text: UserText.deleteAccountTitle) SyncUIViews.TextDetailMultiline(text: UserText.deleteAccountMessage) } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeviceSyncedView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeviceSyncedView.swift index f3a46a0c61..90e7ab1aa1 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeviceSyncedView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/DeviceSyncedView.swift @@ -26,7 +26,7 @@ struct DeviceSyncedView: View { var body: some View { SyncDialog(spacing: 20.0) { VStack(alignment: .center, spacing: 20) { - Image("Sync-setup-success") + Image(.syncSetupSuccess) SyncUIViews.TextHeader(text: UserText.deviceSynced) } .frame(width: 320) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/EnterRecoveryCodeView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/EnterRecoveryCodeView.swift index 475726a7f3..e878076767 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/EnterRecoveryCodeView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/EnterRecoveryCodeView.swift @@ -30,7 +30,7 @@ public struct EnterRecoveryCodeView: View { public var body: some View { SyncDialog(spacing: 20.0) { - Image("Lock-Succes-96") + Image(.lockSucces96) SyncUIViews.TextHeader(text: UserText.enterRecoveryCodeDialogTitle) SyncUIViews.TextDetailMultiline(text: UserText.enterRecoveryCodeDialogSubtitle) VStack(spacing: 16) { @@ -43,7 +43,7 @@ public struct EnterRecoveryCodeView: View { model.delegate?.recoveryCodePasted(recoveryCodeModel.recoveryCode, fromRecoveryScreen: true) } label: { HStack { - Image("Paste") + Image(.paste) Text(UserText.paste) } } @@ -59,7 +59,7 @@ public struct EnterRecoveryCodeView: View { .frame(width: 184) .fixedSize() .multilineTextAlignment(.center) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) line() } QRCode(string: code, size: CGSize(width: 192, height: 192)) @@ -76,6 +76,6 @@ public struct EnterRecoveryCodeView: View { return Rectangle() .foregroundColor(.clear) .frame(maxWidth: .infinity, minHeight: 0.5, maxHeight: 0.5) - .background(Color("BlackWhite10")) + .background(Color(.blackWhite10)) } } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/FaviconsFetcherOnboardingView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/FaviconsFetcherOnboardingView.swift index 082087fad1..c5660d43ae 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/FaviconsFetcherOnboardingView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/FaviconsFetcherOnboardingView.swift @@ -31,7 +31,7 @@ public struct FaviconsFetcherOnboardingView: View { SyncDialog(spacing: 20.0) { VStack(alignment: .center, spacing: 20) { - Image("SyncFetchFavicons") + Image(.syncFetchFavicons) Text(UserText.fetchFaviconsOnboardingTitle) .font(.system(size: 17, weight: .bold)) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/PreparingToSyncView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/PreparingToSyncView.swift index c0c5a57b8e..2b9902fb7d 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/PreparingToSyncView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/PreparingToSyncView.swift @@ -24,7 +24,7 @@ struct PreparingToSyncView: View { var body: some View { SyncDialog(spacing: 20.0, bottomText: UserText.preparingToSyncDialogAction) { VStack(alignment: .center, spacing: 20) { - Image("Sync-96") + Image(.sync96) SyncUIViews.TextHeader(text: UserText.preparingToSyncDialogTitle) .fixedSize(horizontal: false, vertical: /*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/) .multilineTextAlignment(.center) @@ -43,7 +43,7 @@ struct RecoverSyncedDataView: View { var body: some View { SyncDialog(spacing: 20.0) { VStack(alignment: .center, spacing: 20) { - Image("Sync-Pair-96") + Image(.syncPair96) SyncUIViews.TextHeader(text: UserText.reciverSyncedDataDialogTitle) SyncUIViews.TextDetailMultiline(text: UserText.reciverSyncedDataDialogSubitle) } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SaveRecoveryPDFView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SaveRecoveryPDFView.swift index 61e93944d3..0de7a18f60 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SaveRecoveryPDFView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SaveRecoveryPDFView.swift @@ -26,7 +26,7 @@ struct SaveRecoveryPDFView: View { var body: some View { SyncDialog { VStack(spacing: 20.0) { - Image("SyncRecoveryPDF") + Image(.syncRecoveryPDF) SyncUIViews.TextHeader(text: UserText.saveRecoveryPDF) SyncUIViews.TextDetailMultiline(text: UserText.recoveryPDFExplanation) } @@ -60,7 +60,7 @@ struct SaveRecoveryPDFView: View { .padding(20) Text(UserText.recoveryPDFWarning) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) } buttons: { diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithAnotherDeviceView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithAnotherDeviceView.swift index 61ce3d1bb8..87f0ca1bba 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithAnotherDeviceView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithAnotherDeviceView.swift @@ -30,7 +30,7 @@ struct SyncWithAnotherDeviceView: View { var body: some View { SyncDialog(spacing: 20.0) { - Image("Sync-Pair-96") + Image(.syncPair96) SyncUIViews.TextHeader(text: UserText.syncWithAnotherDeviceTitle) if #available(macOS 12.0, *) { Text(syncWithAnotherDeviceInstruction) @@ -104,9 +104,9 @@ struct SyncWithAnotherDeviceView: View { .background( ZStack { RoundedRectangle(cornerRadius: 8) - .stroke(selectedSegment == tag ? Color("BlackWhite10") : .clear, lineWidth: 1) + .stroke(selectedSegment == tag ? Color(.blackWhite10) : .clear, lineWidth: 1) RoundedRectangle(cornerRadius: 8) - .fill(selectedSegment == tag ? Color("PickerViewSelected") : Color("BlackWhite1")) + .fill(selectedSegment == tag ? Color(.pickerViewSelected) : Color(.blackWhite1)) } ) } @@ -119,7 +119,7 @@ struct SyncWithAnotherDeviceView: View { QRCode(string: code, size: CGSize(width: 164, height: 164)) Text(UserText.syncWithAnotherDeviceViewTextCode) .fontWeight(.semibold) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) .onTapGesture { showQRCode = false } @@ -136,7 +136,7 @@ struct SyncWithAnotherDeviceView: View { model.delegate?.recoveryCodePasted(recoveryCodeModel.recoveryCode, fromRecoveryScreen: false) } label: { HStack { - Image("Paste") + Image(.paste) Text(UserText.paste) } } @@ -162,7 +162,7 @@ struct SyncWithAnotherDeviceView: View { shareContent(code) } label: { HStack { - Image("Share") + Image(.share) Text(UserText.share) } .frame(width: 153, height: 28) @@ -171,7 +171,7 @@ struct SyncWithAnotherDeviceView: View { model.delegate?.copyCode() } label: { HStack { - Image("Copy") + Image(.copy) Text(UserText.copy) } .frame(width: 153, height: 28) @@ -180,7 +180,7 @@ struct SyncWithAnotherDeviceView: View { .frame(width: 348, height: 32) Text(UserText.syncWithAnotherDeviceViewQRCode) .fontWeight(.semibold) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) .onTapGesture { showQRCode = true } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithServerView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithServerView.swift index 2249714764..dc5b5725ce 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithServerView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/SyncWithServerView.swift @@ -24,7 +24,7 @@ struct SyncWithServerView: View { var body: some View { SyncDialog(spacing: 20.0) { - Image("Sync-Server-96") + Image(.syncServer96) SyncUIViews.TextHeader(text: UserText.syncWithServerTitle) SyncUIViews.TextDetailMultiline(text: UserText.syncWithServerSubtitle1) SyncUIViews.TextDetailMultiline(text: UserText.syncWithServerSubtitle2) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/TurnOffSyncView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/TurnOffSyncView.swift index e8642e6c34..0e1888c4a7 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/TurnOffSyncView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/Dialogs/TurnOffSyncView.swift @@ -26,7 +26,7 @@ struct TurnOffSyncView: View { var body: some View { SyncDialog { VStack(spacing: 20.0) { - Image("SyncRemoveDeviceDesktop") + Image(.syncRemoveDeviceDesktop) SyncUIViews.TextHeader(text: UserText.turnOffSyncConfirmTitle) SyncUIViews.TextDetailMultiline(text: UserText.turnOffSyncConfirmMessage) } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncSetupView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncSetupView.swift index 6743f311ce..b8fefdb0ec 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncSetupView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncSetupView.swift @@ -55,7 +55,7 @@ struct SyncSetupView: View where ViewModel: ManagementViewModel { fileprivate func syncWithAnotherDeviceView() -> some View { VStack(alignment: .center, spacing: 16) { - Image("Sync-Pair-96") + Image(.syncPair96) VStack(alignment: .center, spacing: 8) { SyncUIViews.TextHeader(text: UserText.beginSyncTitle) SyncUIViews.TextDetailSecondary(text: UserText.beginSyncDescription) diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncStatusView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncStatusView.swift index 0e0f3e033f..8be4a55325 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncStatusView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncStatusView.swift @@ -24,10 +24,10 @@ struct SyncStatusView: View where ViewModel: ManagementViewModel { var body: some View { VStack(alignment: .leading, spacing: 8) { SyncPreferencesRow { - Image("SolidCheckmark") + Image(.solidCheckmark) } centerContent: { Text(UserText.syncConnected) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } rightContent: { Button(UserText.turnOffSync) { model.turnOffSyncPressed() diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncWarningMessage.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncWarningMessage.swift index 14e8010e40..b1247ca72a 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncWarningMessage.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncWarningMessage.swift @@ -34,7 +34,7 @@ struct SyncWarningMessage: View { var body: some View { HStack(alignment: .top, spacing: 16) { - Image("Alert-Color-16") + Image(.alertColor16) .frame(width: 16) VStack(alignment: .leading, spacing: 8) { Text(title).bold() @@ -48,7 +48,7 @@ struct SyncWarningMessage: View { .padding(.leading, -12) .frame(maxWidth: .infinity) .padding() - .background(RoundedRectangle(cornerRadius: 8).foregroundColor(Color("AlertBubbleBackground"))) + .background(RoundedRectangle(cornerRadius: 8).foregroundColor(Color(.alertBubbleBackground))) .padding(.top, 16) } } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncedDevicesView.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncedDevicesView.swift index 415c523b79..07d64214c7 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncedDevicesView.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/ManagementView/SyncedDevicesView.swift @@ -77,7 +77,7 @@ struct IconOnBackground: View { var body: some View { ZStack { RoundedRectangle(cornerRadius: 4) - .fill(Color("BlackWhite100").opacity(0.06)) + .fill(Color(.blackWhite100).opacity(0.06)) .frame(width: 24, height: 24) Image(nsImage: image) @@ -105,7 +105,7 @@ struct SyncedDevicesList: View { ForEach(devices) { device in if !device.isCurrent { Rectangle() - .fill(Color("BlackWhite10")) + .fill(Color(.blackWhite10)) .frame(height: 1) .padding(.init(top: 0, leading: 10, bottom: 0, trailing: 10)) } @@ -145,7 +145,7 @@ struct SyncedDevicesList: View { } } Rectangle() - .fill(Color("BlackWhite10")) + .fill(Color(.blackWhite10)) .frame(height: 1) .padding(.init(top: 0, leading: 10, bottom: 0, trailing: 10)) } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/RoundedBorder.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/RoundedBorder.swift index d9fe97f6c6..b184f88554 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/RoundedBorder.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/RoundedBorder.swift @@ -22,9 +22,9 @@ public extension View { func roundedBorder() -> some View { background(ZStack { RoundedRectangle(cornerRadius: 8) - .stroke(Color("BlackWhite10"), lineWidth: 1) + .stroke(Color(.blackWhite10), lineWidth: 1) RoundedRectangle(cornerRadius: 8) - .fill(Color("BlackWhite1")) + .fill(Color(.blackWhite1)) }) } } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncDialog.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncDialog.swift index a38613220b..946113fed1 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncDialog.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncDialog.swift @@ -47,7 +47,7 @@ struct SyncDialog: View where Content: View, Buttons: View { if let bottomText { Spacer() Text(bottomText) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) } Spacer() buttons() @@ -58,7 +58,7 @@ struct SyncDialog: View where Content: View, Buttons: View { .padding(.bottom, 16.0) .frame(minWidth: 360, idealHeight: 314) .background( - Color("DialogPanelBackground") + Color(.dialogPanelBackground) ) } } diff --git a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncUIViews.swift b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncUIViews.swift index b36dd20085..e9652c6e36 100644 --- a/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncUIViews.swift +++ b/LocalPackages/SyncUI/Sources/SyncUI/Views/internal/SyncUIViews.swift @@ -59,7 +59,7 @@ enum SyncUIViews { var body: some View { Text(text) - .foregroundColor(Color("BlackWhite60")) + .foregroundColor(Color(.blackWhite60)) .multilineTextAlignment(.center) } } @@ -70,7 +70,7 @@ enum SyncUIViews { var body: some View { Text(text) .fontWeight(.semibold) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) } } } diff --git a/UnitTests/NavigationBar/ViewModel/PrivacyIconViewModelTests.swift b/UnitTests/NavigationBar/ViewModel/PrivacyIconViewModelTests.swift index cd0c669ea4..1cebd78205 100644 --- a/UnitTests/NavigationBar/ViewModel/PrivacyIconViewModelTests.swift +++ b/UnitTests/NavigationBar/ViewModel/PrivacyIconViewModelTests.swift @@ -21,15 +21,78 @@ import XCTest class PrivacyIconViewModelTests: XCTestCase { + override class func tearDown() { + NSApp.appearance = nil + } + func testWhenIconsAccessed_ThenNoException() throws { - _ = PrivacyIconViewModel.logosAqua[""] - _ = PrivacyIconViewModel.logosDark[""] - _ = PrivacyIconViewModel.lettersAqua["a"] - _ = PrivacyIconViewModel.lettersDark["a"] - _ = PrivacyIconViewModel.blankTrackerImageAqua - _ = PrivacyIconViewModel.blankTrackerImageDark - _ = PrivacyIconViewModel.shadowTrackerImageAqua - _ = PrivacyIconViewModel.shadowTrackerImageDark + var letterImages: [NSAppearance.Name: [Character: CGImage]] = [:] + var blankTrackerImages: [NSAppearance.Name: CGImage] = [:] + var shadowTrackerImages: [NSAppearance.Name: CGImage] = [:] + var logos: [NSAppearance.Name: [TrackerNetwork: CGImage]] = [:] + + for appearanceName: NSAppearance.Name in [.aqua, .darkAqua] { + NSApp.appearance = .init(named: appearanceName)! + + XCTAssertNil(PrivacyIconViewModel.logo(for: "")) // shouldn‘t assert + for tracker in TrackerNetwork.allCases { + let logo = PrivacyIconViewModel.logo(for: tracker.rawValue) + let feedLogo = HomePage.Models.RecentlyVisitedSiteModel.feedImage(for: tracker)? + .cgImage(forProposedRect: nil, context: .current, hints: nil) + + XCTAssertNotNil(logo) + if case .windows = tracker { + XCTAssertNil(feedLogo, "\(tracker) – \(appearanceName.rawValue)") + } else { + XCTAssertNotNil(feedLogo, "\(tracker) – \(appearanceName.rawValue)") + } + + logos[appearanceName, default: [:]][tracker] = logo + + // shouldn‘t be regenerated + XCTAssertEqual(PrivacyIconViewModel.logo(for: tracker.rawValue), logo, + "\(tracker) – \(appearanceName.rawValue)") + XCTAssertEqual(HomePage.Models.RecentlyVisitedSiteModel.feedImage(for: tracker)?.cgImage(forProposedRect: nil, context: .current, hints: nil), + feedLogo, + "\(tracker) – \(appearanceName.rawValue)") + + // dark image should be different from aqua + if case .darkAqua = appearanceName { + XCTAssertNotEqual(logos[.aqua]![tracker], logo) + } + } + + for ascii in UInt8(ascii: "a")...UInt8(ascii: "z") { + let letter = Character(UnicodeScalar(ascii)) + let letterImage = PrivacyIconViewModel.letters[letter] + + XCTAssertNotNil(letterImage, + "\(letter) – \(appearanceName.rawValue)") + XCTAssertEqual(letterImage, PrivacyIconViewModel.letters[letter], + "\(letter) – \(appearanceName.rawValue)") // shouldn‘t be regenerated + + letterImages[appearanceName, default: [:]][letter] = letterImage + + // dark image should be different from aqua + if case .darkAqua = appearanceName { + XCTAssertNotEqual(letterImages[.aqua]![letter], letterImage) + } + } + + let blankTrackerImage = PrivacyIconViewModel.blankTrackerImage + let shadowTrackerImage = PrivacyIconViewModel.shadowTrackerImage + XCTAssertNotNil(blankTrackerImage) + XCTAssertNotNil(shadowTrackerImage) + XCTAssertEqual(PrivacyIconViewModel.blankTrackerImage, blankTrackerImage) // shouldn‘t be regenerated + XCTAssertEqual(PrivacyIconViewModel.shadowTrackerImage, shadowTrackerImage) // shouldn‘t be regenerated + + blankTrackerImages[appearanceName] = blankTrackerImage + shadowTrackerImages[appearanceName] = shadowTrackerImage + } + + // dark image should be different from aqua + XCTAssertNotEqual(blankTrackerImages[.aqua], blankTrackerImages[.darkAqua]) + XCTAssertNotEqual(shadowTrackerImages[.aqua], shadowTrackerImages[.darkAqua]) } }