Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bookmarks onboarding #1420

Merged
merged 37 commits into from
Aug 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c6e359c
bookmarks bar appearance
brindy Jul 25, 2023
ac7e66b
adds appearence preferences and makes all browser bar related menus c…
brindy Jul 26, 2023
3d22452
fix keyboard shortcut logic
brindy Jul 26, 2023
41d491f
Update copy
brindy Jul 26, 2023
b6aa8d0
update copy
brindy Jul 26, 2023
4fa148d
fix copy
brindy Jul 26, 2023
6b5bca8
swift lint
brindy Jul 26, 2023
020b9c5
properly toggle visibility when in new tab only mode
brindy Jul 26, 2023
f7afc6c
move to common
brindy Jul 26, 2023
97e8671
support new menu items being switch out
brindy Jul 26, 2023
0bc7ae5
disable the drop down if show is off
brindy Jul 26, 2023
f8cb588
UI and logic for the dialog
brindy Jul 27, 2023
d0d9f73
implement triggers for the prompt
brindy Jul 27, 2023
2c74bb0
remove observer
brindy Jul 27, 2023
7cdc965
don't show it more than once
brindy Jul 27, 2023
30250ae
start of building pixel based experiment framework
brindy Jul 28, 2023
fb2605e
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Jul 28, 2023
3c81ce6
revert experiment setup
brindy Aug 1, 2023
9ed135f
only show on macOS 11
brindy Aug 1, 2023
3c109c9
pixel based experiment framework
brindy Aug 1, 2023
0375162
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Aug 1, 2023
0c4e410
ensure pixel firing
brindy Aug 1, 2023
4b92d28
update ui background and add some unit tests
brindy Aug 1, 2023
cb56345
experiment must be 'installed' during first run
brindy Aug 1, 2023
fc38e7e
more reliable positioning of the prompt
brindy Aug 2, 2023
87a9a5c
show popover centered
brindy Aug 2, 2023
124f691
if the user did not dismiss using a button then assume "not now"
brindy Aug 2, 2023
a804266
Updated Not Now to No Thanks
brindy Aug 2, 2023
f3abb56
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Aug 2, 2023
1fda8b7
correctly allocate to a cohort
brindy Aug 2, 2023
a58136b
fix dark mode and be explicit about the image size
brindy Aug 2, 2023
8213d44
update from code review
brindy Aug 2, 2023
14ff93a
update copy per ship review
brindy Aug 2, 2023
656c91e
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Aug 3, 2023
626d405
Use injected appearance settings
brindy Aug 3, 2023
1b98b7b
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Aug 3, 2023
129287a
Merge branch 'develop' into brindy/bookmarks-bar-prompt-part-2
brindy Aug 3, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1352,6 +1352,7 @@
8546DE6225C03056000CA5E1 /* UserAgentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8546DE6125C03056000CA5E1 /* UserAgentTests.swift */; };
85480F8A25CDC360009424E3 /* MainMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85480F8925CDC360009424E3 /* MainMenu.storyboard */; };
85480FCF25D1AA22009424E3 /* ConfigurationStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85480FCE25D1AA22009424E3 /* ConfigurationStore.swift */; };
854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; };
85589E7F27BBB8630038AD11 /* AddEditFavoriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7927BBB8620038AD11 /* AddEditFavoriteViewController.swift */; };
85589E8027BBB8630038AD11 /* AddEditFavoriteWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85589E7A27BBB8620038AD11 /* AddEditFavoriteWindow.swift */; };
85589E8127BBB8630038AD11 /* HomePage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85589E7B27BBB8630038AD11 /* HomePage.storyboard */; };
Expand Down Expand Up @@ -1384,6 +1385,10 @@
85774B032A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; };
85774B042A71CDD000DE0561 /* BlockMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85774B022A71CDD000DE0561 /* BlockMenuItem.swift */; };
85799C1825DEBB3F0007EC87 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85799C1725DEBB3F0007EC87 /* Logging.swift */; };
857E5AF52A79045800FC0FB4 /* PixelExperiment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857E5AF42A79045800FC0FB4 /* PixelExperiment.swift */; };
857E5AF62A790B7000FC0FB4 /* PixelExperiment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857E5AF42A79045800FC0FB4 /* PixelExperiment.swift */; };
857E5AFA2A7961FF00FC0FB4 /* PixelExperimentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857E5AF82A79618100FC0FB4 /* PixelExperimentTests.swift */; };
857E5AFB2A79628A00FC0FB4 /* PixelExperimentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857E5AF82A79618100FC0FB4 /* PixelExperimentTests.swift */; };
857FFEC027D239DC00415E7A /* HyperLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857FFEBF27D239DC00415E7A /* HyperLink.swift */; };
8589063A267BCD8E00D23B0D /* SaveCredentialsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85890639267BCD8E00D23B0D /* SaveCredentialsPopover.swift */; };
8589063C267BCDC000D23B0D /* SaveCredentialsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8589063B267BCDC000D23B0D /* SaveCredentialsViewController.swift */; };
Expand All @@ -1394,6 +1399,9 @@
858A798A26A9B35E00A75A42 /* PasswordManagementItemModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */; };
859E7D6B27453BF3009C2B69 /* BookmarksExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */; };
859E7D6D274548F2009C2B69 /* BookmarksExporterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */; };
859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; };
859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */; };
859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */; };
85A0116925AF1D8900FA6A0C /* FindInPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */; };
85A0117425AF2EDF00FA6A0C /* FindInPage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */; };
85A0118225AF60E700FA6A0C /* FindInPageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A0118125AF60E700FA6A0C /* FindInPageModel.swift */; };
Expand Down Expand Up @@ -2613,6 +2621,8 @@
85774AFE2A713D3B00DE0561 /* BookmarksBarMenuFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarMenuFactory.swift; sourceTree = "<group>"; };
85774B022A71CDD000DE0561 /* BlockMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockMenuItem.swift; sourceTree = "<group>"; };
85799C1725DEBB3F0007EC87 /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = "<group>"; };
857E5AF42A79045800FC0FB4 /* PixelExperiment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PixelExperiment.swift; sourceTree = "<group>"; };
857E5AF82A79618100FC0FB4 /* PixelExperimentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PixelExperimentTests.swift; sourceTree = "<group>"; };
857FFEBF27D239DC00415E7A /* HyperLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HyperLink.swift; sourceTree = "<group>"; };
85890639267BCD8E00D23B0D /* SaveCredentialsPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveCredentialsPopover.swift; sourceTree = "<group>"; };
8589063B267BCDC000D23B0D /* SaveCredentialsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveCredentialsViewController.swift; sourceTree = "<group>"; };
Expand All @@ -2623,6 +2633,8 @@
858A798926A9B35E00A75A42 /* PasswordManagementItemModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordManagementItemModelTests.swift; sourceTree = "<group>"; };
859E7D6A27453BF3009C2B69 /* BookmarksExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporter.swift; sourceTree = "<group>"; };
859E7D6C274548F2009C2B69 /* BookmarksExporterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExporterTests.swift; sourceTree = "<group>"; };
859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksBarPromptPopover.swift; sourceTree = "<group>"; };
859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = BookmarksBarPromptAssets.xcassets; sourceTree = "<group>"; };
85A0116825AF1D8900FA6A0C /* FindInPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageViewController.swift; sourceTree = "<group>"; };
85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = FindInPage.storyboard; sourceTree = "<group>"; };
85A0118125AF60E700FA6A0C /* FindInPageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindInPageModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -4419,6 +4431,7 @@
4BD18F02283F0F1000058124 /* View */ = {
isa = PBXGroup;
children = (
859F30622A72A7A900C20372 /* Prompt */,
4BD18EFF283F0BC500058124 /* BookmarksBarViewController.swift */,
4BE41A5D28446EAD00760399 /* BookmarksBarViewModel.swift */,
4BD18F04283F151F00058124 /* BookmarksBar.storyboard */,
Expand Down Expand Up @@ -4599,6 +4612,22 @@
path = ViewModel;
sourceTree = "<group>";
};
857E5AF32A79044900FC0FB4 /* Experiment */ = {
isa = PBXGroup;
children = (
857E5AF42A79045800FC0FB4 /* PixelExperiment.swift */,
);
path = Experiment;
sourceTree = "<group>";
};
857E5AF72A79617100FC0FB4 /* PixelExperiment */ = {
isa = PBXGroup;
children = (
857E5AF82A79618100FC0FB4 /* PixelExperimentTests.swift */,
);
path = PixelExperiment;
sourceTree = "<group>";
};
8585B63526D6E5F600C1416F /* SwiftUI */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -4662,6 +4691,15 @@
path = SecureVault;
sourceTree = "<group>";
};
859F30622A72A7A900C20372 /* Prompt */ = {
isa = PBXGroup;
children = (
859F30632A72A7BB00C20372 /* BookmarksBarPromptPopover.swift */,
859F30662A72B38500C20372 /* BookmarksBarPromptAssets.xcassets */,
);
path = Prompt;
sourceTree = "<group>";
};
85A0115D25AF1C4700FA6A0C /* FindInPage */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -6276,6 +6314,7 @@
B6A9E44E26142AF90067D1B9 /* Statistics */ = {
isa = PBXGroup;
children = (
857E5AF32A79044900FC0FB4 /* Experiment */,
B69B50332726A10700758A2B /* ATB */,
B6A9E45226142B070067D1B9 /* Pixel.swift */,
B6A9E498261474120067D1B9 /* TimedPixel.swift */,
Expand Down Expand Up @@ -6356,6 +6395,7 @@
B6DA440F2616C0F200DD1EC2 /* Statistics */ = {
isa = PBXGroup;
children = (
857E5AF72A79617100FC0FB4 /* PixelExperiment */,
B69B50402726C3F400758A2B /* ATB */,
B6DA44102616C0FC00DD1EC2 /* PixelTests.swift */,
4BC2621C293996410087A482 /* PixelEventTests.swift */,
Expand Down Expand Up @@ -6961,6 +7001,7 @@
3706FCBA293F65D500E42796 /* clickToLoadConfig.json in Resources */,
3706FCBB293F65D500E42796 /* Downloads.storyboard in Resources */,
3706FCBC293F65D500E42796 /* dark-shield.json in Resources */,
854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */,
3706FCBD293F65D500E42796 /* dark-shield-mouse-over.json in Resources */,
3706FCBE293F65D500E42796 /* autoconsent-bundle.js in Resources */,
3706FCBF293F65D500E42796 /* ContentOverlay.storyboard in Resources */,
Expand Down Expand Up @@ -7097,6 +7138,7 @@
EA477680272A21B700419EDA /* clickToLoadConfig.json in Resources */,
B6B1E88226D5DAC30062C350 /* Downloads.storyboard in Resources */,
AA3439712754D4E900B241FA /* dark-shield.json in Resources */,
859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */,
AA7EB6EB27E880AE00036718 /* dark-shield-mouse-over.json in Resources */,
B31055CB27A1BA1D001AC618 /* autoconsent-bundle.js in Resources */,
7B1E819F27C8874900FF0E60 /* ContentOverlay.storyboard in Resources */,
Expand Down Expand Up @@ -7459,6 +7501,7 @@
3707C724294B5D2900682A9F /* StringExtension.swift in Sources */,
4B4D60C82A0C849600BCD287 /* NetworkProtectionInviteCodeView.swift in Sources */,
3706FA9F293F65D500E42796 /* FeedbackPresenter.swift in Sources */,
859F30652A72A9FA00C20372 /* BookmarksBarPromptPopover.swift in Sources */,
37197EA22942441900394917 /* Tab+Dialogs.swift in Sources */,
3706FAA0293F65D500E42796 /* UserAgent.swift in Sources */,
3706FAA1293F65D500E42796 /* NSAlert+DataImport.swift in Sources */,
Expand Down Expand Up @@ -7660,6 +7703,7 @@
3706FB55293F65D500E42796 /* ContextMenuUserScript.swift in Sources */,
3706FB56293F65D500E42796 /* NSSavePanelExtension.swift in Sources */,
3706FB57293F65D500E42796 /* AppPrivacyConfigurationDataProvider.swift in Sources */,
857E5AF62A790B7000FC0FB4 /* PixelExperiment.swift in Sources */,
3706FB58293F65D500E42796 /* LinkButton.swift in Sources */,
3706FB59293F65D500E42796 /* TemporaryFileHandler.swift in Sources */,
37197EA62942443D00394917 /* WebViewSnapshotView.swift in Sources */,
Expand Down Expand Up @@ -8215,6 +8259,7 @@
3706FE61293F661700E42796 /* PinnedTabsViewModelTests.swift in Sources */,
3706FE62293F661700E42796 /* PasswordManagementListSectionTests.swift in Sources */,
3706FE63293F661700E42796 /* RecentlyClosedCoordinatorMock.swift in Sources */,
857E5AFB2A79628A00FC0FB4 /* PixelExperimentTests.swift in Sources */,
3706FE64293F661700E42796 /* DownloadListStoreTests.swift in Sources */,
3706FE65293F661700E42796 /* ContentBlockingUpdatingTests.swift in Sources */,
3706FE67293F661700E42796 /* EncryptionMocks.swift in Sources */,
Expand Down Expand Up @@ -8736,6 +8781,7 @@
4B723E0D26B0006100E14D75 /* SecureVaultLoginImporter.swift in Sources */,
B645D8F629FA95440024461F /* WKProcessPoolExtension.swift in Sources */,
4B9292D32667123700AD2C21 /* AddBookmarkModalViewController.swift in Sources */,
857E5AF52A79045800FC0FB4 /* PixelExperiment.swift in Sources */,
B6C416A7294A4AE500C4F2E7 /* DuckPlayerTabExtension.swift in Sources */,
AA5C1DD5285C780C0089850C /* RecentlyClosedCoordinator.swift in Sources */,
AA88D14B252A557100980B4E /* URLRequestExtension.swift in Sources */,
Expand Down Expand Up @@ -8935,6 +8981,7 @@
B693954E26F04BEB0015B914 /* ProgressView.swift in Sources */,
B69B503C2726A12500758A2B /* StatisticsStore.swift in Sources */,
4BBDEE9128FC14760092FAA6 /* BWInstallationService.swift in Sources */,
859F30642A72A7BB00C20372 /* BookmarksBarPromptPopover.swift in Sources */,
4B4D60CA2A0C849600BCD287 /* NetworkProtectionInvitePresenter.swift in Sources */,
B693955426F04BEC0015B914 /* ColorView.swift in Sources */,
AA5C1DD3285A217F0089850C /* RecentlyClosedCacheItem.swift in Sources */,
Expand Down Expand Up @@ -9201,6 +9248,7 @@
B60C6F7E29B1B41D007BFAA8 /* TestRunHelperInitializer.m in Sources */,
37479F152891BC8300302FE2 /* TabCollectionViewModelTests+WithoutPinnedTabsManager.swift in Sources */,
AA63745424C9BF9A00AB2AC4 /* SuggestionContainerTests.swift in Sources */,
857E5AFA2A7961FF00FC0FB4 /* PixelExperimentTests.swift in Sources */,
AAC9C01524CAFBCE00AD1325 /* TabTests.swift in Sources */,
B69B504C2726CA2900758A2B /* MockVariantManager.swift in Sources */,
310E79BF294A19A8007C49E8 /* FireproofingReferenceTests.swift in Sources */,
Expand Down
1 change: 1 addition & 0 deletions DuckDuckGo/AppDelegate/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, FileDownloadManagerDel

if LocalStatisticsStore().atb == nil {
Pixel.firstLaunchDate = Date()
PixelExperiment.install()
}
AtbAndVariantCleanup.cleanup()
DefaultVariantManager().assignVariantIfNeeded { _ in
Expand Down
2 changes: 2 additions & 0 deletions DuckDuckGo/Bookmarks/View/BookmarkPopover.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import Cocoa

final class BookmarkPopover: NSPopover {

var isNew = false

override init() {
super.init()

Expand Down
15 changes: 12 additions & 3 deletions DuckDuckGo/BookmarksBar/View/BookmarksBar.storyboard
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="JFF-Nj-8om">
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="JFF-Nj-8om">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="20037"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
Expand All @@ -15,6 +14,13 @@
<rect key="frame" x="0.0" y="0.0" width="676" height="56"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="cjE-4p-vxI">
<rect key="frame" x="328" y="18" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="GSP-kG-54V"/>
<constraint firstAttribute="width" constant="20" id="yib-Jv-zJp"/>
</constraints>
</customView>
<scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="0.0" horizontalPageScroll="0.0" verticalLineScroll="0.0" verticalPageScroll="0.0" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="D39-Of-BIh">
<rect key="frame" x="0.0" y="2" width="676" height="52"/>
<clipView key="contentView" drawsBackground="NO" id="yvk-6W-sd0">
Expand Down Expand Up @@ -58,11 +64,13 @@
<constraint firstItem="D39-Of-BIh" firstAttribute="top" secondItem="R54-3G-cms" secondAttribute="top" constant="2" id="1I1-kg-gBo"/>
<constraint firstAttribute="bottom" secondItem="D39-Of-BIh" secondAttribute="bottom" constant="2" id="1fG-Jn-HEl"/>
<constraint firstAttribute="trailing" secondItem="D39-Of-BIh" secondAttribute="trailing" id="Cvo-oT-HF2"/>
<constraint firstItem="cjE-4p-vxI" firstAttribute="centerX" secondItem="R54-3G-cms" secondAttribute="centerX" id="T6z-7g-NZA"/>
<constraint firstAttribute="trailing" secondItem="Mgr-xJ-Pl5" secondAttribute="trailing" constant="8" id="UCG-Ww-dsY"/>
<constraint firstAttribute="trailing" secondItem="X6g-3K-JDi" secondAttribute="trailing" id="ZaK-nU-eHk"/>
<constraint firstItem="Mgr-xJ-Pl5" firstAttribute="centerY" secondItem="R54-3G-cms" secondAttribute="centerY" constant="-1" id="eoh-hW-GcD"/>
<constraint firstItem="D39-Of-BIh" firstAttribute="leading" secondItem="R54-3G-cms" secondAttribute="leading" id="hOd-Bz-o5j"/>
<constraint firstAttribute="bottom" secondItem="X6g-3K-JDi" secondAttribute="bottom" id="iWj-iC-9gW"/>
<constraint firstItem="cjE-4p-vxI" firstAttribute="centerY" secondItem="R54-3G-cms" secondAttribute="centerY" id="s3N-bi-7Hr"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
Expand All @@ -73,6 +81,7 @@
<connections>
<outlet property="bookmarksBarCollectionView" destination="vwg-NL-UPk" id="1LG-QE-Dgd"/>
<outlet property="clippedItemsIndicator" destination="Mgr-xJ-Pl5" id="4ww-Po-dNb"/>
<outlet property="promptAnchor" destination="cjE-4p-vxI" id="IGH-2v-PGD"/>
</connections>
</viewController>
<customObject id="rrD-nk-5c1" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
Expand Down
Loading