From 69f1151ae3a23390ef9ee8cad3064a72ddae642e Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 8 Feb 2024 17:32:30 +0600 Subject: [PATCH 1/2] Use compile-time checked generated asset names --- DuckDuckGo.xcodeproj/project.pbxproj | 16 +- DuckDuckGo/Application/AppIconChanger.swift | 6 +- .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../HomeFeedTitleColor.colorset/Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../Icon 7.pdf | Bin .../Icon 8.pdf | Bin .../Arrow - Down-16.svg | 0 .../HomeArrowDown.imageset/Contents.json | 0 .../HomeArrowUp.imageset/Arrow - Up-16.svg | 0 .../HomeArrowUp.imageset/Contents.json | 0 .../HomeLogoText.imageset/Contents.json | 0 .../updatedLogoGrayText2-1.pdf | Bin .../updatedLogoWhiteText2.pdf | Bin .../HomePageLogo.imageset/Contents.json | 0 .../HomePageLogo.imageset/HomePageLogo.pdf | Bin .../HomeShield.imageset/Contents.json | 0 .../HomeShield.imageset/Shield - 64.pdf | Bin .../Contents.json | 0 .../Sidebar - Minimized-16.pdf | Bin .../Contents.json | 0 .../Sidebar-16.pdf | Bin .../NextStepsLeft.imageset/Contents.json | 0 .../NextStepsLeft.imageset/Left-Dark.svg | 0 .../HomePage}/NextStepsLeft.imageset/Left.svg | 0 .../NextStepsRight.imageset/Contents.json | 0 .../NextStepsRight.imageset/Right-Dark.svg | 0 .../NextStepsRight.imageset/Right.svg | 0 .../Rocket.imageset/Contents.json | 0 .../{ => HomePage}/Rocket.imageset/rocket.pdf | Bin .../RocketGrayscale.imageset}/Contents.json | 0 .../RocketGrayscale.imageset}/Rocket-16.svg | 0 .../Images/HomePage/trackers}/Contents.json | 0 .../feed-adform.imageset/Contents.json | 0 .../trackers/feed-adform.imageset/adform.svg | 0 .../feed-adobe.imageset/Contents.json | 0 .../trackers/feed-adobe.imageset/adobe.svg | 0 .../feed-amazon.imageset/Contents.json | 0 .../trackers/feed-amazon.imageset/amazon.svg | 0 .../feed-amobee.imageset/Contents.json | 0 .../trackers/feed-amobee.imageset/amobee.svg | 0 .../feed-appnexus.imageset/Contents.json | 0 .../feed-appnexus.imageset/appnexus.svg | 0 .../feed-centro.imageset/Contents.json | 0 .../trackers/feed-centro.imageset/centro.svg | 0 .../feed-cloudflare.imageset/Contents.json | 0 .../feed-cloudflare.imageset/cloudflare.svg | 0 .../feed-comscore.imageset/Contents.json | 0 .../feed-comscore.imageset/comscore.svg | 0 .../feed-conversant.imageset/Contents.json | 0 .../feed-conversant.imageset/conversant.svg | 0 .../feed-criteo.imageset/Contents.json | 0 .../trackers/feed-criteo.imageset/criteo.svg | 0 .../feed-dataxu.imageset/Contents.json | 0 .../trackers/feed-dataxu.imageset/dataxu.svg | 0 .../feed-facebook.imageset/Contents.json | 0 .../feed-facebook.imageset/facebook.svg | 0 .../feed-google.imageset/Contents.json | 0 .../trackers/feed-google.imageset/google.svg | 0 .../feed-hotjar.imageset/Contents.json | 0 .../trackers/feed-hotjar.imageset/hotjar.svg | 0 .../feed-indexexchange.imageset/Contents.json | 0 .../indexexchange.svg | 0 .../feed-iponweb.imageset/Contents.json | 0 .../feed-iponweb.imageset/iponweb.svg | 0 .../feed-linkedin.imageset/Contents.json | 0 .../feed-linkedin.imageset/linkedin.svg | 0 .../Contents.json | 0 .../lotamesolutions.svg | 0 .../feed-mediamath.imageset/Contents.json | 0 .../feed-mediamath.imageset/mediamath.svg | 0 .../feed-microsoft.imageset/Contents.json | 0 .../feed-microsoft.imageset/microsoft.svg | 0 .../feed-neustar.imageset/Contents.json | 0 .../feed-neustar.imageset/neustar.svg | 0 .../feed-newrelic.imageset/Contents.json | 0 .../feed-newrelic.imageset/newrelic.svg | 0 .../feed-openx.imageset/Contents.json | 0 .../trackers/feed-openx.imageset/openx.svg | 0 .../feed-oracle.imageset/Contents.json | 0 .../trackers/feed-oracle.imageset/oracle.svg | 0 .../feed-pubmatic.imageset/Contents.json | 0 .../feed-pubmatic.imageset/pubmatic.svg | 0 .../feed-quantcast.imageset/Contents.json | 0 .../feed-quantcast.imageset/quantcast.svg | 0 .../feed-rubicon.imageset/Contents.json | 0 .../feed-rubicon.imageset/rubicon.svg | 0 .../feed-salesforce.imageset/Contents.json | 0 .../feed-salesforce.imageset/salesforce.svg | 0 .../feed-smartadserver.imageset/Contents.json | 0 .../smartadserver.svg | 0 .../feed-spotx.imageset/Contents.json | 0 .../trackers/feed-spotx.imageset/spotx.svg | 0 .../feed-stackpath.imageset/Contents.json | 0 .../feed-stackpath.imageset/stackpath.svg | 0 .../feed-taboola.imageset/Contents.json | 0 .../feed-taboola.imageset/taboola.svg | 0 .../feed-tapad.imageset/Contents.json | 0 .../trackers/feed-tapad.imageset/tapad.svg | 0 .../Contents.json | 0 .../thenielsencompany.svg | 0 .../feed-thetradedesk.imageset/Contents.json | 0 .../thetradedesk.svg | 0 .../feed-towerdata.imageset/Contents.json | 0 .../feed-towerdata.imageset/towerdata.svg | 0 .../feed-twitter.imageset/Contents.json | 0 .../feed-twitter.imageset/twitter.svg | 0 .../feed-verizonmedia.imageset/Contents.json | 0 .../verizonmedia.svg | 0 .../feed-xaxis.imageset/Contents.json | 0 .../trackers/feed-xaxis.imageset/xaxis.svg | 0 .../Xaxis.imageset}/Contents.json | 2 +- .../Tracker Icons/Xaxis.imageset/Xaxis.svg | 4 + .../WarningColored.png | Bin 469 -> 0 bytes ...okmarkManagementDetailViewController.swift | 14 +- .../View/BookmarkTableCellView.swift | 14 +- .../Bookmarks/View/BookmarkTableRowView.swift | 2 +- .../View/RoundedSelectionRowView.swift | 6 +- .../ViewModel/BookmarkViewModel.swift | 8 +- .../View/BookmarksBarCollectionViewItem.swift | 4 +- .../View/BookmarksBarViewModel.swift | 3 +- .../Prompt/BookmarksBarPromptPopover.swift | 4 +- .../Common/Extensions/CIImageExtension.swift | 7 +- .../Common/Extensions/NSAlertExtension.swift | 39 +-- .../Common/Extensions/NSColorExtension.swift | 141 +------- DuckDuckGo/Common/TrackerNetwork.swift | 79 +++++ .../View/AppKit/CircularProgressView.swift | 2 +- .../Common/View/AppKit/FocusRingView.swift | 4 +- .../View/AppKit/LoadingProgressView.swift | 6 +- .../AppKit/MouseOverAnimationButton.swift | 5 +- .../View/SwiftUI/FocusableTextEditor.swift | 4 +- .../View/SwiftUI/LoginFaviconView.swift | 2 +- DuckDuckGo/DataImport/ThirdPartyBrowser.swift | 6 +- .../DataImport/View/FileImportView.swift | 6 +- .../FileDownload/View/DownloadsCellView.swift | 3 - .../FindInPage/FindInPageViewController.swift | 2 +- .../View/FirePopoverCollectionViewItem.swift | 3 +- .../Fire/View/FirePopoverViewController.swift | 2 +- DuckDuckGo/Fire/View/FireViewController.swift | 2 +- .../Model/HomePageContinueSetUpModel.swift | 18 +- .../Model/HomePageRecentlyVisitedModel.swift | 51 ++- .../HomePage/View/BurnerHomePageView.swift | 12 +- .../HomePage/View/ContinueSetUpView.swift | 24 +- .../View/DefaultBrowserPromptView.swift | 8 +- DuckDuckGo/HomePage/View/FavoritesView.swift | 6 +- .../Images/trackers/Contents.json | 6 - DuckDuckGo/HomePage/View/HomePageView.swift | 16 +- DuckDuckGo/HomePage/View/HyperLink.swift | 2 +- DuckDuckGo/HomePage/View/MoreOrLessView.swift | 8 +- .../HomePage/View/RecentlyVisitedView.swift | 58 ++-- .../MainWindow/MainViewController.swift | 2 +- DuckDuckGo/Menus/MainMenu.swift | 4 +- .../PopoverMessageViewController.swift | 2 +- .../AddressBarButtonsViewController.swift | 23 +- .../View/AddressBarTextField.swift | 2 +- .../View/AddressBarViewController.swift | 6 +- .../BadgeAnimationView.swift | 2 +- .../CookieManagedNotificationView.swift | 6 +- .../NavigationBar/View/MoreOptionsMenu.swift | 54 +-- .../View/NavigationBarViewController.swift | 13 +- .../ViewModel/PrivacyIconViewModel.swift | 315 ++++++++---------- .../NetworkProtectionNavBarButtonModel.swift | 4 +- .../VPNLocationPreferenceItem.swift | 6 +- .../VPNLocation/VPNLocationView.swift | 12 +- DuckDuckGo/Onboarding/View/DaxSpeech.swift | 6 +- .../View/OnboardingButtonStyles.swift | 8 +- .../Onboarding/View/OnboardingFlow.swift | 2 +- .../Bitwarden/View/ConnectBitwardenView.swift | 16 +- .../PinnedTabs/View/PinnedTabView.swift | 12 +- .../View/PreferencesAboutView.swift | 6 +- .../View/PreferencesAppearanceView.swift | 2 +- .../View/PreferencesGeneralView.swift | 4 +- .../View/PreferencesRootView.swift | 2 +- .../Preferences/View/PreferencesSidebar.swift | 4 +- .../Preferences/View/PreferencesVPNView.swift | 6 +- .../Model/SecureVaultSorting.swift | 17 +- .../SecureVault/View/EditableTextView.swift | 2 +- .../PasswordManagementBitwardenItemView.swift | 4 +- ...PasswordManagementCreditCardItemView.swift | 6 +- .../PasswordManagementIdentityItemView.swift | 6 +- .../View/PasswordManagementItemList.swift | 25 +- .../PasswordManagementLoginItemView.swift | 16 +- .../View/PasswordManagementNoteItemView.swift | 2 +- .../PasswordManagementViewController.swift | 46 +-- DuckDuckGo/SecureVault/View/PopUpButton.swift | 11 +- .../View/SaveCredentialsViewController.swift | 5 +- DuckDuckGo/Sharing/QRSharingService.swift | 6 +- .../View/SuggestionTableCellView.swift | 10 +- .../View/SuggestionTableRowView.swift | 2 +- .../ViewModel/SuggestionViewModel.swift | 18 +- .../SubscriptionPagesUserScript.swift | 2 +- DuckDuckGo/Tab/View/WebViewSnapshotView.swift | 2 +- DuckDuckGo/Tab/ViewModel/TabViewModel.swift | 10 +- .../TabBar/View/Base.lproj/TabBar.storyboard | 39 +-- .../TabBar/View/TabBarViewController.swift | 7 +- DuckDuckGo/TabBar/View/TabBarViewItem.swift | 22 +- DuckDuckGo/TabBar/View/TabShadowConfig.swift | 1 - DuckDuckGo/TabBar/View/TabShadowView.swift | 2 +- .../VPNFeedbackForm/VPNFeedbackFormView.swift | 6 +- .../EnableWaitlistFeatureView.swift | 4 +- .../WaitlistSteps/InvitedToWaitlistView.swift | 12 +- .../WaitlistSteps/JoinWaitlistView.swift | 6 +- .../SwiftUI/TextButton.swift | 2 +- .../NetworkProtectionStatusView.swift | 2 +- .../Extensions/RoundedBorder.swift | 4 +- .../PreferencesSubscriptionView.swift | 14 +- .../Colors/BlackWhite1.colorset/Contents.json | 78 +++++ .../BlackWhite10.colorset/Contents.json | 78 +++++ .../SubscriptionAccessRow.swift | 4 +- .../SubscriptionAccessView.swift | 4 +- .../GreyTextColor.colorset/Contents.json | 78 +++++ .../Assets.xcassets}/Contents.json | 0 .../PreferencesViews/PreferencesViews.swift | 2 +- .../Contents.json | 0 .../Contents.json | 78 +++++ .../LinkBlueColor.colorset/Contents.json | 78 +++++ .../Contents.json | 0 .../Contents.json | 0 .../Contents.json | 0 .../PWMButtonLabel.colorset/Contents.json | 0 .../Contents.json | 0 .../Assets.xcassets}/Contents.json | 0 .../Contents.json | 0 .../Intive-Lock-Succes-96.pdf | Bin .../Invite-Lock-96.imageset}/Contents.json | 0 .../Invite-Lock-96.pdf | Bin .../SwiftUIExtensions/ButtonStyles.swift | 8 +- .../SwiftUIExtensions/HoverButton.swift | 24 +- .../IniviteCodeView/InviteCodeView.swift | 6 +- .../PopoverMessageView.swift | 7 +- .../SwiftUIExtensions/TextButton.swift | 2 +- .../Alert-Color-16.pdf | Bin 0 -> 2915 bytes .../Alert-Color-16.imageset/Contents.json | 12 + .../Contents.json | 0 .../Colors/BlackWhite1.colorset/Contents.json | 78 +++++ .../BlackWhite10.colorset/Contents.json | 78 +++++ .../BlackWhite100.colorset/Contents.json | 78 +++++ .../BlackWhite60.colorset/Contents.json | 78 +++++ .../Contents.json | 38 +++ .../LinkBlueColor.colorset/Contents.json | 78 +++++ .../PickerViewSelected.colorset/Contents.json | 0 .../SeparatorColor.colorset/Contents.json | 78 +++++ .../Contents.json | 78 +++++ .../Images/Copy.imageset/Contents.json | 15 + .../Images/Copy.imageset/Copy.pdf | Bin 0 -> 2665 bytes .../Lock-Succes-96.imageset/Contents.json | 0 .../Lock-Succes-96.svg | 0 .../Images/Paste.imageset/Contents.json | 0 .../Images/Paste.imageset/Paste.svg | 0 .../Images/Share.imageset/Contents.json | 15 + .../Images/Share.imageset/icon-16-share.pdf | Bin 0 -> 2042 bytes .../SolidCheckmark.imageset/Contents.json | 12 + .../SolidCheckmark.pdf | Bin 0 -> 3648 bytes .../Images/Sync-96.imageset/Contents.json | 0 .../Images/Sync-96.imageset/Sync-96 1.svg | 0 .../Sync-Pair-96.imageset/Contents.json | 0 .../Sync-Pair-96.imageset/Sync-Pair-96.svg | 0 .../Sync-Server-96.imageset/Contents.json | 0 .../Sync-Server-96.svg | 0 .../Sync-setup-success.imageset/Contents.json | 0 .../Sync-setup-success.svg | 0 .../SyncFetchFavicons.imageset/Contents.json | 0 .../SyncFetchFavicons.svg | 0 .../SyncRecoveryPDF.imageset/Contents.json | 0 .../SyncRecoveryPDF.svg | 0 .../Contents.json | 0 .../Remove-Device-Desktop-96.svg | 0 .../Contents.json | 0 .../Remove-Device-Mobile-96.svg | 0 .../Views/Dialogs/DeleteAccountView.swift | 2 +- .../Views/Dialogs/DeviceSyncedView.swift | 2 +- .../Views/Dialogs/EnterRecoveryCodeView.swift | 8 +- .../FaviconsFetcherOnboardingView.swift | 2 +- .../Views/Dialogs/PreparingToSyncView.swift | 4 +- .../Views/Dialogs/SaveRecoveryPDFView.swift | 4 +- .../Dialogs/SyncWithAnotherDeviceView.swift | 16 +- .../Views/Dialogs/SyncWithServerView.swift | 2 +- .../Views/Dialogs/TurnOffSyncView.swift | 2 +- .../Views/ManagementView/SyncSetupView.swift | 2 +- .../Views/ManagementView/SyncStatusView.swift | 4 +- .../ManagementView/SyncWarningMessage.swift | 4 +- .../ManagementView/SyncedDevicesView.swift | 6 +- .../SyncUI/Views/internal/RoundedBorder.swift | 4 +- .../SyncUI/Views/internal/SyncDialog.swift | 4 +- .../SyncUI/Views/internal/SyncUIViews.swift | 4 +- .../ViewModel/PrivacyIconViewModelTests.swift | 79 ++++- 304 files changed, 1806 insertions(+), 863 deletions(-) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeDefaultBrowserPromptBackgroundColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeDefaultBrowserPromptTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeEntityIconBackgroundColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeEntityIconTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFavoritesBackgroundColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFavoritesGhostColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFavoritesHoverColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedEmptyStateIconColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedEmptyStateTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemButtonTintColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemHoverBackgroundColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemHoverShadow1Color.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemHoverShadow2Color.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemPageTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemTimeTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedItemTitleColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeFeedTitleColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomeNextStepsTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/HomePageMoreOrLessTextColor.colorset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Colors/HomePage}/NewTabPageBackgroundColor.colorset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/Images/{ => HomePage}/BurnerWindowHomepageImage.imageset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/Images/{ => HomePage}/BurnerWindowHomepageImage.imageset/Icon 7.pdf (100%) rename DuckDuckGo/Assets.xcassets/Images/{ => HomePage}/BurnerWindowHomepageImage.imageset/Icon 8.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeArrowDown.imageset/Arrow - Down-16.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeArrowDown.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeArrowUp.imageset/Arrow - Up-16.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeArrowUp.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeLogoText.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeLogoText.imageset/updatedLogoGrayText2-1.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeLogoText.imageset/updatedLogoWhiteText2.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomePageLogo.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomePageLogo.imageset/HomePageLogo.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeShield.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeShield.imageset/Shield - 64.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeSidebarMaximized.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeSidebarMaximized.imageset/Sidebar - Minimized-16.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeSidebarMinimized.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/HomeSidebarMinimized.imageset/Sidebar-16.pdf (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsLeft.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsLeft.imageset/Left-Dark.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsLeft.imageset/Left.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsRight.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsRight.imageset/Right-Dark.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/NextStepsRight.imageset/Right.svg (100%) rename DuckDuckGo/Assets.xcassets/Images/{ => HomePage}/Rocket.imageset/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/Images/{ => HomePage}/Rocket.imageset/rocket.pdf (100%) rename DuckDuckGo/Assets.xcassets/Images/{RocketNoColor.imageset => HomePage/RocketGrayscale.imageset}/Contents.json (100%) rename DuckDuckGo/Assets.xcassets/Images/{RocketNoColor.imageset => HomePage/RocketGrayscale.imageset}/Rocket-16.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Colors => Assets.xcassets/Images/HomePage/trackers}/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-adform.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-adform.imageset/adform.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-adobe.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-adobe.imageset/adobe.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-amazon.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-amazon.imageset/amazon.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-amobee.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-amobee.imageset/amobee.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-appnexus.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-appnexus.imageset/appnexus.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-centro.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-centro.imageset/centro.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-cloudflare.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-cloudflare.imageset/cloudflare.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-comscore.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-comscore.imageset/comscore.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-conversant.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-conversant.imageset/conversant.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-criteo.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-criteo.imageset/criteo.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-dataxu.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-dataxu.imageset/dataxu.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-facebook.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-facebook.imageset/facebook.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-google.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-google.imageset/google.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-hotjar.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-hotjar.imageset/hotjar.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-indexexchange.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-indexexchange.imageset/indexexchange.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-iponweb.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-iponweb.imageset/iponweb.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-linkedin.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-linkedin.imageset/linkedin.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-lotamesolutions.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-lotamesolutions.imageset/lotamesolutions.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-mediamath.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-mediamath.imageset/mediamath.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-microsoft.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-microsoft.imageset/microsoft.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-neustar.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-neustar.imageset/neustar.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-newrelic.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-newrelic.imageset/newrelic.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-openx.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-openx.imageset/openx.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-oracle.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-oracle.imageset/oracle.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-pubmatic.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-pubmatic.imageset/pubmatic.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-quantcast.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-quantcast.imageset/quantcast.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-rubicon.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-rubicon.imageset/rubicon.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-salesforce.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-salesforce.imageset/salesforce.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-smartadserver.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-smartadserver.imageset/smartadserver.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-spotx.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-spotx.imageset/spotx.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-stackpath.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-stackpath.imageset/stackpath.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-taboola.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-taboola.imageset/taboola.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-tapad.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-tapad.imageset/tapad.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-thenielsencompany.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-thenielsencompany.imageset/thenielsencompany.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-thetradedesk.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-thetradedesk.imageset/thetradedesk.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-towerdata.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-towerdata.imageset/towerdata.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-twitter.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-twitter.imageset/twitter.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-verizonmedia.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-verizonmedia.imageset/verizonmedia.svg (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-xaxis.imageset/Contents.json (100%) rename DuckDuckGo/{HomePage/View/HomePageAssets.xcassets/Images => Assets.xcassets/Images/HomePage}/trackers/feed-xaxis.imageset/xaxis.svg (100%) rename DuckDuckGo/Assets.xcassets/Images/{WarningColored.imageset => Tracker Icons/Xaxis.imageset}/Contents.json (75%) create mode 100644 DuckDuckGo/Assets.xcassets/Images/Tracker Icons/Xaxis.imageset/Xaxis.svg delete mode 100644 DuckDuckGo/Assets.xcassets/Images/WarningColored.imageset/WarningColored.png create mode 100644 DuckDuckGo/Common/TrackerNetwork.swift delete mode 100644 DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images/trackers/Contents.json create mode 100644 LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite1.colorset/Contents.json create mode 100644 LocalPackages/SubscriptionUI/Sources/SubscriptionUI/Resources/Subscription.xcassets/Colors/BlackWhite10.colorset/Contents.json create mode 100644 LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets/Colors/GreyTextColor.colorset/Contents.json rename {DuckDuckGo/HomePage/View/HomePageAssets.xcassets => LocalPackages/SwiftUIExtensions/Sources/PreferencesViews/Assets.xcassets}/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/AlertRedLightDefaultText.colorset/Contents.json (100%) create mode 100644 LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/ButtonMouseOverColor.colorset/Contents.json create mode 100644 LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/PWMActionButtonLabel.colorset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/PWMButtonBackground-Pressed.colorset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/PWMButtonBackground.colorset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/PWMButtonLabel.colorset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions}/Assets.xcassets/Colors/PWMEditingControlColor.colorset/Contents.json (100%) rename {DuckDuckGo/HomePage/View/HomePageAssets.xcassets/Images => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets}/Contents.json (100%) rename {DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset}/Contents.json (100%) rename {DuckDuckGo/Assets.xcassets/Images/InviteLockSuccess.imageset => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Intive-Lock-Succes-96.imageset}/Intive-Lock-Succes-96.pdf (100%) rename {DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset}/Contents.json (100%) rename {DuckDuckGo/Assets.xcassets/Images/InviteLock.imageset => LocalPackages/SwiftUIExtensions/Sources/SwiftUIExtensions/Assets.xcassets/Images/Invite-Lock-96.imageset}/Invite-Lock-96.pdf (100%) create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Alert-Color-16.pdf create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/Alert-Color-16.imageset/Contents.json rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Colors/AlertBubbleBackground.colorset/Contents.json (100%) create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite1.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite10.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite100.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/BlackWhite60.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/DialogPanelBackground.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/LinkBlueColor.colorset/Contents.json rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Colors/PickerViewSelected.colorset/Contents.json (100%) create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/SeparatorColor.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Colors/WindowBackgroundColor.colorset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Copy.imageset/Copy.pdf rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Lock-Succes-96.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Lock-Succes-96.imageset/Lock-Succes-96.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Paste.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Paste.imageset/Paste.svg (100%) create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/Share.imageset/icon-16-share.pdf create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/Contents.json create mode 100644 LocalPackages/SyncUI/Sources/SyncUI/Assets.xcassets/Images/SolidCheckmark.imageset/SolidCheckmark.pdf rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-96.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-96.imageset/Sync-96 1.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-Pair-96.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-Pair-96.imageset/Sync-Pair-96.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-Server-96.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-Server-96.imageset/Sync-Server-96.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-setup-success.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/Sync-setup-success.imageset/Sync-setup-success.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncFetchFavicons.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncFetchFavicons.imageset/SyncFetchFavicons.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRecoveryPDF.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRecoveryPDF.imageset/SyncRecoveryPDF.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRemoveDeviceDesktop.imageset/Remove-Device-Desktop-96.svg (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Contents.json (100%) rename {DuckDuckGo => LocalPackages/SyncUI/Sources/SyncUI}/Assets.xcassets/Images/SyncRemoveDeviceMobile.imageset/Remove-Device-Mobile-96.svg (100%) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index af9e909ab1..8c7145d737 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -655,7 +655,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 */; }; @@ -1944,7 +1943,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 */; }; @@ -2303,7 +2301,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 */; }; @@ -2715,6 +2712,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 */; }; @@ -3834,7 +3834,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; }; @@ -4165,6 +4164,7 @@ B658BAB52B0F845D00D1F2C7 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; 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 = ""; }; @@ -6983,6 +6983,7 @@ 1D77921B28FFF26100BE0210 /* RunningApplication */, AA86491424D831C4001BABEE /* View */, 4B37EE5B2B4CFC3C00A89A61 /* Surveys */, + B65E5DAE2B74DE6D00480415 /* TrackerNetwork.swift */, ); path = Common; sourceTree = ""; @@ -7529,7 +7530,6 @@ 85589E9D27BFE4500038AD11 /* DefaultBrowserPromptView.swift */, 85589E9327BFE1E70038AD11 /* FavoritesView.swift */, 56D6A3D529DB2BAB0055215A /* ContinueSetUpView.swift */, - 85AC7AD827BD625000FFB69B /* HomePageAssets.xcassets */, 85589E7C27BBB8630038AD11 /* HomePageView.swift */, 1DCFBC8929ADF32B00313531 /* BurnerHomePageView.swift */, 85589E7D27BBB8630038AD11 /* HomePageViewController.swift */, @@ -8790,7 +8790,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 */, @@ -8918,7 +8917,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 */, @@ -9015,7 +9013,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 */, @@ -10041,6 +10038,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 */, @@ -10915,6 +10913,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 */, @@ -11358,6 +11357,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 */, B6B4D1C52B0B3B5400C26286 /* DataImportReportModel.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 16c1f7482b24ea7eabe39e704ffbf583c4d1ddad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)s!KpCt-OapB04r)L6PEm{opa*wb&lrw6KbcA2%f+4 z1{|^NDZ<3$$Tb~%`WYE{1|d4CUJUWK2LqffE936=I*cIEW)R?}m@aaw8z?}_2FwPj zi4qEwz_rVw>KabPDoc?qLn15+^1aP}3@EVW3-l$sFonId>QXUR^&*f(q?@96e>lbU z?OU+{i@Iqijt+YHQ-m*b?3_F#{C&VpSGlD6xRVyqihM-YF|-#^&v@m#311bHY~_WY zu)ifS;c^}<9|iT$cUBuN4U-OO 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 628ddeddfc..c057ca9fe4 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 7330963968..25c5f503d4 100644 --- a/DuckDuckGo/Common/Extensions/NSColorExtension.swift +++ b/DuckDuckGo/Common/Extensions/NSColorExtension.swift @@ -19,156 +19,35 @@ import Cocoa extension NSColor { - - static var homePageBackgroundColor: NSColor { - NSColor(named: "HomePageBackgroundColor")! - } - - 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")! - } - - static var burnerWindowMouseOverColor: NSColor { - .alternateSelectedControlTextColor.withAlphaComponent(0.1) - } - - static var burnerWindowMouseDownColor: 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")! - } + + // MARK: Aliases 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 textEditorBackground: NSColor { + .blackWhite5 } - static var dialogPanelBackgroundColor: NSColor { - NSColor(named: "DialogPanelBackground")! + static var textEditorBorder: NSColor { + .blackWhite10 } - static var buttonMouseDownColor: NSColor { - NSColor(named: "ButtonMouseDownColor")! - } - - 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 bbeac9b5b1..26b99200af 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 0c16098da7..529cd1bac5 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 @@ -256,7 +256,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 a2c5557f6e..39bc675d29 100644 --- a/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift +++ b/DuckDuckGo/Common/View/SwiftUI/LoginFaviconView.swift @@ -42,7 +42,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 faab1cf62b..2dbb2b21fb 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 b891bbb620..d776abfede 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 c761ac0fc3..02cd535552 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.delegate = self listenForTextFieldResponderNotifications() subscribeToModelChanges() 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 41abbdf6e8..91007e3412 100644 --- a/DuckDuckGo/Fire/View/FirePopoverViewController.swift +++ b/DuckDuckGo/Fire/View/FirePopoverViewController.swift @@ -199,7 +199,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 919fc8bd71..f0c4ba0f12 100644 --- a/DuckDuckGo/Fire/View/FireViewController.swift +++ b/DuckDuckGo/Fire/View/FireViewController.swift @@ -116,7 +116,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 93e8b9ee74..b27a601a43 100644 --- a/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift +++ b/DuckDuckGo/HomePage/Model/HomePageContinueSetUpModel.swift @@ -543,23 +543,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 f92a544eaf..3502e54cc0 100644 --- a/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift +++ b/DuckDuckGo/HomePage/Model/HomePageRecentlyVisitedModel.swift @@ -278,8 +278,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 908a64373a..1b78396a27 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) @@ -139,7 +139,7 @@ extension HomePage.Views { var body: some View { ZStack(alignment: .center) { RoundedRectangle(cornerRadius: 12) - .stroke(Color("HomeFavoritesGhostColor"), style: StrokeStyle(lineWidth: 1.0)) + .stroke(Color(.homeFavoritesGhost), style: StrokeStyle(lineWidth: 1.0)) ZStack { VStack(spacing: 18) { icon @@ -156,7 +156,7 @@ extension HomePage.Views { .multilineTextAlignment(.center) .lineLimit(3) .font(.system(size: 11)) - .foregroundColor(Color("GreyTextColor")) + .foregroundColor(Color(.greyText)) .fixedSize(horizontal: false, vertical: true) } Spacer() @@ -180,8 +180,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 @@ -212,7 +212,7 @@ extension HomePage.Views { .cornerRadius(5.0) Text(title) .font(.system(size: 11)) - .foregroundColor(Color("LinkBlueColor")) + .foregroundColor(Color(.linkBlue)) } .onTapGesture { action() @@ -231,8 +231,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 @@ -260,17 +260,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 c57c95da96..2e238deeee 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 @@ -424,7 +424,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 @@ -466,24 +466,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) @@ -498,7 +496,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 011df2edaa..0317850899 100644 --- a/DuckDuckGo/MainWindow/MainViewController.swift +++ b/DuckDuckGo/MainWindow/MainViewController.swift @@ -239,7 +239,7 @@ final class MainViewController: NSViewController { private func updateDividerColor() { NSAppearance.withAppAppearance { let isHomePage = tabCollectionViewModel.selectedTabViewModel?.tab.content == .newtab - let backgroundColor: NSColor = (bookmarksBarIsVisible || isHomePage) ? .addressBarFocusedBackgroundColor : .addressBarSolidSeparatorColor + let backgroundColor: NSColor = (bookmarksBarIsVisible || isHomePage) ? .addressBarFocusedBackground : .addressBarSolidSeparator mainView.divider.backgroundColor = backgroundColor } } diff --git a/DuckDuckGo/Menus/MainMenu.swift b/DuckDuckGo/Menus/MainMenu.swift index 584481ac9f..2b0cfcabc0 100644 --- a/DuckDuckGo/Menus/MainMenu.swift +++ b/DuckDuckGo/Menus/MainMenu.swift @@ -289,10 +289,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 702fd0aa8b..55d3142a53 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? @@ -528,7 +521,7 @@ final class AddressBarButtonsViewController: NSViewController { privacyEntryPointButton.position = .left } - privacyEntryPointButton.contentTintColor = .privacyEnabledColor + privacyEntryPointButton.contentTintColor = .privacyEnabled privacyEntryPointButton.sendAction(on: .leftMouseUp) imageButton.applyFaviconStyle() @@ -581,7 +574,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") @@ -734,12 +727,12 @@ final class AddressBarButtonsViewController: NSViewController { private func updateBookmarkButtonImage(isUrlBookmarked: Bool = false) { if let url = tabCollectionViewModel.selectedTabViewModel?.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 } @@ -753,9 +746,9 @@ final class AddressBarButtonsViewController: NSViewController { case .browsing: imageButton.image = selectedTabViewModel.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 } @@ -808,7 +801,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 40262ad4c6..9b97f1555e 100644 --- a/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift +++ b/DuckDuckGo/NavigationBar/View/AddressBarTextField.swift @@ -772,7 +772,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 24d7ebe5fc..5dee90256d 100644 --- a/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift +++ b/DuckDuckGo/NavigationBar/View/AddressBarViewController.swift @@ -296,7 +296,7 @@ final class AddressBarViewController: NSViewController { } var accentColor: NSColor { - return isBurner ? NSColor.burnerAccentColor : NSColor.controlAccentColor + return isBurner ? NSColor.burnerAccent : NSColor.controlAccentColor } private func updateView() { @@ -331,7 +331,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 @@ -369,7 +369,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 45e2f941a4..fa47a74ff4 100644 --- a/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift +++ b/DuckDuckGo/NavigationBar/View/MoreOptionsMenu.swift @@ -115,7 +115,7 @@ final class MoreOptionsMenu: NSMenu { #if FEEDBACK let feedbackMenuItem = NSMenuItem(title: UserText.sendFeedback, action: nil, keyEquivalent: "") #if !APPSTORE - .withImage(NSImage(named: "BetaLabel")) + .withImage(.betaLabel) #endif // !APPSTORE feedbackMenuItem.submenu = FeedbackSubMenu(targetting: self, tabCollectionViewModel: tabCollectionViewModel) addItem(feedbackMenuItem) @@ -134,7 +134,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()) @@ -145,7 +145,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) } @@ -258,12 +258,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, @@ -271,7 +271,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()) @@ -282,19 +282,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()) @@ -347,7 +347,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) @@ -367,13 +367,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)) @@ -391,7 +391,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) @@ -401,16 +401,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()) @@ -427,7 +427,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)) @@ -477,22 +477,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) } } @@ -554,13 +554,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) } } @@ -640,7 +640,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()) } @@ -731,15 +731,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 f355c0c0b6..aa5e070c43 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 } @@ -488,7 +485,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: { @@ -652,14 +649,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 } @@ -728,7 +725,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 { @@ -853,7 +850,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 df8396f857..d509522475 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 4279088dce..e771411493 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) .animation(.default) .roundedBorder() } diff --git a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift index 3d693ff0f7..e3cf711d51 100644 --- a/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift +++ b/DuckDuckGo/NetworkProtection/AppTargets/BothAppTargets/VPNLocation/VPNLocationView.swift @@ -79,9 +79,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)) @@ -124,7 +124,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)) } @@ -183,7 +183,7 @@ private struct CountryItem: View { } ) .frame(idealWidth: .infinity, maxWidth: .infinity) - .background(Color("BlackWhite1")) + .background(Color(.blackWhite1)) } @ViewBuilder @@ -254,7 +254,7 @@ private struct VPNLocationViewButtons: View { var body: some View { VStack(spacing: 0) { Rectangle() - .fill(Color("BlackWhite10")) + .fill(Color(.blackWhite10)) .frame(height: 1) HStack { Spacer() @@ -268,7 +268,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 873aac4cad..db49bb7c5f 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("InterfaceBackgroundColor") + return .interfaceBackground } let isHovered = collectionModel.hoveredItem == model - return showsHover && isHovered ? Color("TabMouseOverColor") : Color.clear + return showsHover && isHovered ? .tabMouseOver : Color.clear } @ViewBuilder @@ -125,11 +125,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("InterfaceBackgroundColor") : Color(TabShadowConfig.colorName) + isSelected ? .interfaceBackground : .tabShadowLine } private var cornerPixelsColor: Color { @@ -173,7 +173,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) } @@ -202,7 +202,7 @@ struct PinnedTabInnerView: View { } .cornerRadius(4.0) } else { - Image(nsImage: #imageLiteral(resourceName: "Web")) + Image(nsImage: .web) .resizable() } } diff --git a/DuckDuckGo/Preferences/View/PreferencesAboutView.swift b/DuckDuckGo/Preferences/View/PreferencesAboutView.swift index 079e321920..07cfd6aad8 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) @@ -120,7 +120,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) @@ -164,7 +164,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 eb93571dab..9cccbff07b 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(UserText.makeDefaultBrowser) { defaultBrowserModel.becomeDefault() diff --git a/DuckDuckGo/Preferences/View/PreferencesRootView.swift b/DuckDuckGo/Preferences/View/PreferencesRootView.swift index 21504c2af7..75f5f177e8 100644 --- a/DuckDuckGo/Preferences/View/PreferencesRootView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesRootView.swift @@ -94,7 +94,7 @@ enum Preferences { .frame(maxWidth: .infinity) } .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color("InterfaceBackgroundColor")) + .background(Color(.interfaceBackground)) } #if SUBSCRIPTION diff --git a/DuckDuckGo/Preferences/View/PreferencesSidebar.swift b/DuckDuckGo/Preferences/View/PreferencesSidebar.swift index b948508d61..e2e4434dd0 100644 --- a/DuckDuckGo/Preferences/View/PreferencesSidebar.swift +++ b/DuckDuckGo/Preferences/View/PreferencesSidebar.swift @@ -107,10 +107,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 c82e1b5126..74be95c7e7 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 c717288450..db51ff133a 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 11e130f21c..e486d7d7cb 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 54e6d54121..a75fa1f878 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 2f6fbd8601..789ef92f57 100644 --- a/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift +++ b/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift @@ -317,11 +317,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/UserScripts/SubscriptionPagesUserScript.swift b/DuckDuckGo/Tab/UserScripts/SubscriptionPagesUserScript.swift index 5cb6e8fda0..2e5e3228ba 100644 --- a/DuckDuckGo/Tab/UserScripts/SubscriptionPagesUserScript.swift +++ b/DuckDuckGo/Tab/UserScripts/SubscriptionPagesUserScript.swift @@ -119,7 +119,7 @@ final class SubscriptionPagesUseSubscriptionFeature: Subfeature { } func getSubscription(params: Any, original: WKScriptMessage) async throws -> Encodable? { - if let authToken = AccountManager().authToken, let accessToken = AccountManager().accessToken { + if let authToken = AccountManager().authToken, AccountManager().accessToken != nil{ return Subscription(token: authToken) } else { return Subscription(token: "") 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 949e30de42..2b3faf3534 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 2bf37ba9b2..4bccd7cddd 100644 --- a/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard +++ b/DuckDuckGo/TabBar/View/Base.lproj/TabBar.storyboard @@ -1,7 +1,7 @@ - + - + @@ -44,20 +44,6 @@ - @@ -101,11 +87,11 @@ - + - + @@ -118,7 +104,6 @@ - @@ -126,7 +111,7 @@ - +