diff --git a/.gitignore b/.gitignore index 56663b1..59aef74 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ Frameworks/ GHOSTTY_*.md TERMINAL_INTEGRATION_STEPS.md build/ + +# License configuration (contains device-specific Pro activation) +GitMac/Services/LicenseValidator.swift diff --git a/GitMac.xcodeproj/project.pbxproj b/GitMac.xcodeproj/project.pbxproj index d894f2b..640d3a8 100644 --- a/GitMac.xcodeproj/project.pbxproj +++ b/GitMac.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ 202918A372C3231F73C2E578 /* GhosttyEnhancedTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D743335AA1A3796B0A2723 /* GhosttyEnhancedTerminalView.swift */; }; 2038FF09A32DA081F716D446 /* SubmoduleComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3856F1845C89352A8A46D281 /* SubmoduleComponents.swift */; }; 2063193ABD2D00DB87C13D7E /* LayoutConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C05E76268C1B2E5E38FEFE08 /* LayoutConstants.swift */; }; + 21C8232A914DFC79854BA9C4 /* WorkspaceManagerTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 444CA9DF14F6B3EC7A83A1F6 /* WorkspaceManagerTab.swift */; }; 25315F328208FE548BB7046E /* TerminalSharedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD1AE5A8CFE26E6E4BD11A6 /* TerminalSharedTypes.swift */; }; 257E6E17F55F28953F58EC42 /* DSGroupedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 557CA937B9386B978825F7B6 /* DSGroupedList.swift */; }; 258ACA9CDDED686CD5E1BAB8 /* CommitDetailPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C2B56F9C9BF273E8E7A5FD /* CommitDetailPanel.swift */; }; @@ -93,6 +94,7 @@ 45842BEA4117D259C3B46782 /* BranchSelectorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311732177EB42C4A81308A02 /* BranchSelectorButton.swift */; }; 45EF972E2923EAED6BB5CBD3 /* SubscriptionSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB6FE5C91B2C9441FED36A8 /* SubscriptionSettingsTab.swift */; }; 45F557B8C61B3336E38C6478 /* CloudPatchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A9EEC65D538BDB576F332D /* CloudPatchService.swift */; }; + 4620E28E85D7D297476B2615 /* WorkspaceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B0A93D8A2587AC8E5E5CEF /* WorkspaceManager.swift */; }; 4678F616E4B627558CE1D996 /* DSButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5FA97CD68426F1A4DD31CE /* DSButton.swift */; }; 4685EC657E869B0ADA90A2A2 /* FileTypeIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9AD8F4D449606E5E5A4A2EC /* FileTypeIcon.swift */; }; 478A4BF99A071621F35DEE1B /* RepositoryActivityPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C74CC38DF0CD9C9105122B /* RepositoryActivityPanel.swift */; }; @@ -149,6 +151,7 @@ 6C0AC788C2EAD1379BADBDBC /* DiffCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB901F90B7E62C601A805FA3 /* DiffCache.swift */; }; 6FA8EF328900860116035D76 /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D39602F9B9FA2983FFA4B5 /* Branch.swift */; }; 70D84221BBE81104974AFA87 /* InitRepositorySheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59820498B20A741308942117 /* InitRepositorySheet.swift */; }; + 715B18D5F7FFBFEC63C8F7BE /* SyncButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F0823301FFD9666FF23BB6B /* SyncButton.swift */; }; 724B0CAB7823EA602CFC7EEE /* DiffSearchAndNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FDB310B5DBFC8EC103E983 /* DiffSearchAndNavigation.swift */; }; 728028D683743DD8430D2F42 /* CommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59B7AE52B61BB88CB19938B7 /* CommandPalette.swift */; }; 735FE47AEA03BFB17CF41C85 /* TerminalInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40520EC2939EE30B975A15C7 /* TerminalInputBar.swift */; }; @@ -157,6 +160,7 @@ 76A3D8DE8385AE1A4832551A /* RepositorySelectorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C95B46D74511D3AAAE763C /* RepositorySelectorButton.swift */; }; 77681E64D2ECD6FC80EBF73B /* ViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607DA6098E0A0A61782A0DF3 /* ViewModifiers.swift */; }; 77D0CF71978693C5CBA20BE7 /* KeyboardShortcutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19F6D20DD97CD5B0028A4E1B /* KeyboardShortcutManager.swift */; }; + 787C9B1064B5E35BC1E8F8AD /* Components in Sources */ = {isa = PBXBuildFile; fileRef = 4BD0BD26988ABF1E4F35AF6B /* Components */; }; 79D272B536B0A42597F2EA4E /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FC445669998FA52E288626 /* SettingsView.swift */; }; 7A1DD8B750553E26E2A618D3 /* WorktreeComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCAFD73F48F11025E3F5E23 /* WorktreeComponents.swift */; }; 7A5D3444D05FD844A956FEA6 /* BottomPanelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A86BF2D1C0B6AD97B874C0 /* BottomPanelType.swift */; }; @@ -192,6 +196,7 @@ 8F41AD98DF8C48DEAAE582FD /* BinaryFileRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7989C44ACCDF1E41D18E2AC1 /* BinaryFileRenderers.swift */; }; 8F65EB1EFFEAEF68E338A7E1 /* Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E98303F1CD64673B43F9639 /* Remote.swift */; }; 8FADAF249BC45C769FA7E331 /* TaigaSettingsContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6FDC6090C9B3BBB620A7518 /* TaigaSettingsContent.swift */; }; + 901B42AAD687F5C1277CE833 /* LicenseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A1AB403E73EA0598C9F699 /* LicenseManager.swift */; }; 90439F29474CA28547F86A1D /* DSInfiniteList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1711398A1F8B37AACCC5D04A /* DSInfiniteList.swift */; }; 90A3ADAC5D4F7C21D32B1892 /* DiffSyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC089E4A7F2E77BE940AC78E /* DiffSyntaxHighlighter.swift */; }; 90C08EC91988E33831C31240 /* IssueRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C801F2B416A00F555CA272A8 /* IssueRow.swift */; }; @@ -257,6 +262,7 @@ B4DA26C56859D2E184D7E860 /* DSDropZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F22F52D0E8130CC29E01D3 /* DSDropZone.swift */; }; B4F3A4510237C4B0D93B029C /* RemoteManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1202B39970A7D013600F46DF /* RemoteManagementView.swift */; }; B5D31659B0B71093C78ECFC1 /* RevertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FED351FD1776BBF7E389FFA /* RevertView.swift */; }; + B7819B89F1E5B86F9551E12C /* GitProgressTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */; }; B792010810824E7B2933630E /* JiraViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBD224C28988637497A106C /* JiraViewModel.swift */; }; B79DB79AA761D5CD94662D14 /* GitHubOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86FA50E65BBBBC71CBFD6ED7 /* GitHubOAuth.swift */; }; B9101E55494C607B5E900A74 /* DSLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD7CE628B2B5B937AB429B6 /* DSLoginPrompt.swift */; }; @@ -271,6 +277,7 @@ BEEC4A2DB5D5582D8B492BA0 /* KaleidoscopeSplitDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A9F580892364D6F487D3D4 /* KaleidoscopeSplitDiffView.swift */; }; BF3725FB16445B45FFFD566A /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9429CC1284A41A1A5A7741F /* NotificationManager.swift */; }; BF4F585F81DBFC23F4BCB0BE /* ConflictResolverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CF81A55F5DF67A99DF4F52 /* ConflictResolverView.swift */; }; + BRANCHPR0001BUILD000000001 /* BranchPRTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */; }; C1F9A554C25B4FC9A1492EF9 /* UniversalResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4E9CDA3CADA6831328A87B5 /* UniversalResizer.swift */; }; C26E99D3F81D4583828E3A78 /* InsightsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C039C6AB6CAE0BFC42BECBC /* InsightsView.swift */; }; C2B7667B558CE8196CE0A378 /* DSFilterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4F843954F997AD46CDBAE8 /* DSFilterMenu.swift */; }; @@ -289,12 +296,11 @@ CE6DC227F90A9E0F084729FC /* DSTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF76682BE59E45805F06FCF /* DSTextEditor.swift */; }; CE7F5C391B4D9B0CA9AACF35 /* MarkdownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22280A02889B243FEA6F332 /* MarkdownView.swift */; }; CE80D1870754D5739A0223C0 /* RemoteOperationTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE7FD2660507EDB36634450 /* RemoteOperationTracker.swift */; }; + CEVF01 /* CodeEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEVR01 /* CodeEditorView.swift */; }; D04B3915422AA379ED9AAA84 /* AnimationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778017C0C82557A417F6EBD /* AnimationExtensions.swift */; }; D31155F217037D5B7777EED0 /* LinearContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72B4B428ACA0A1D3C01558D /* LinearContentView.swift */; }; D36FC421805A89519D5C8731 /* ResetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E42F45A779174FB0192AA60 /* ResetView.swift */; }; D37C7945444AF7F89EE1F35A /* GitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9B988D57B4EBA758747115 /* GitService.swift */; }; - BRANCHPR0001BUILD000000001 /* BranchPRTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */; }; - GHSYNCMG0001BUILD000000001 /* GitHubSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */; }; D49227F9CCA29A4F6DC6129E /* DiffToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EC18843562D7D622FA0E10 /* DiffToolbar.swift */; }; D4C8907702C129E8CBFB0870 /* DSPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96298B0967612ED6114D608E /* DSPanel.swift */; }; D586D60CC063E011026505D0 /* TaigaTicketsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32798DDE1B043BCB72AFEDC5 /* TaigaTicketsPanel.swift */; }; @@ -363,13 +369,13 @@ FC63DEDA367E365A790DEFF2 /* TreeExpansionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60149B22A9C3833A45E1138 /* TreeExpansionState.swift */; }; FCCC056A77275438CF6C3030 /* OperationProgressOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D35666EBED293412AD3325 /* OperationProgressOverlay.swift */; }; FCE7733F5EE79F6938CF6652 /* DSSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309335EA370B8E36FD9B9860 /* DSSearchBar.swift */; }; - WELCOME01BUILD0000000001 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = WELCOME01FILE00000000001 /* WelcomeView.swift */; }; + FE81C6B0E94463788DE8D787 /* GitOperationProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */; }; FE93CAC0A8120FDFAE04609A /* ConflictPreventionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE362A1585EF74F0F8CD5300 /* ConflictPreventionService.swift */; }; FED0784BE2D7966EF4DC830E /* CenterPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF47093BEBDD1408A3C68E6 /* CenterPanel.swift */; }; + GHSYNCMG0001BUILD000000001 /* GitHubSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */; }; PKG001 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DEP001 /* KeychainAccess */; }; PKG002 /* Splash in Frameworks */ = {isa = PBXBuildFile; productRef = DEP002 /* Splash */; }; - PKG003 /* CodeEditSourceEditor in Frameworks */ = {isa = PBXBuildFile; productRef = DEP003 /* CodeEditSourceEditor */; }; - CEVF01 /* CodeEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEVR01 /* CodeEditorView.swift */; }; + WELCOME01BUILD0000000001 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = WELCOME01FILE00000000001 /* WelcomeView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -421,8 +427,6 @@ 1BE7FD2660507EDB36634450 /* RemoteOperationTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/RemoteOperationTracker.swift; sourceTree = SOURCE_ROOT; }; 1C7B6E6EE3D71DBE737B4C1D /* DiffLineRenderers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffLineRenderers.swift; path = ../Features/Diff/Renderers/DiffLineRenderers.swift; sourceTree = ""; }; 1D9B988D57B4EBA758747115 /* GitService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitService.swift; path = Core/Services/GitService.swift; sourceTree = ""; }; - BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchPRTracker.swift; path = Core/Services/BranchPRTracker.swift; sourceTree = ""; }; - GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubSyncManager.swift; path = Core/Services/GitHubSyncManager.swift; sourceTree = ""; }; 1E722C9BE39DB145F515EE7A /* AWSCodeBuildService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/CICD/AWSCodeBuildService.swift; sourceTree = SOURCE_ROOT; }; 1F038DA5BD2F2882EEDC31EA /* DiffOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffOptions.swift; path = ../Features/Diff/DiffOptions.swift; sourceTree = ""; }; 202778629A618B9E881C961C /* DiffMinimap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffMinimap.swift; path = ../Features/Diff/Renderers/DiffMinimap.swift; sourceTree = ""; }; @@ -473,12 +477,14 @@ 3DCECE17C0C42203380CB8A6 /* GhosttyEnhancedViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyEnhancedViewModel.swift; path = Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift; sourceTree = ""; }; 3E42F45A779174FB0192AA60 /* ResetView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Reset/ResetView.swift; sourceTree = SOURCE_ROOT; }; 3E5FE2C8F4C1E2317EDCFB9A /* Repository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repository.swift; path = Core/Git/Repository.swift; sourceTree = ""; }; + 3F0823301FFD9666FF23BB6B /* SyncButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncButton.swift; path = ../../Features/CommitGraph/Components/SyncButton.swift; sourceTree = ""; }; 40520EC2939EE30B975A15C7 /* TerminalInputBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalInputBar.swift; path = GitMac/Features/Terminal/Views/TerminalInputBar.swift; sourceTree = SOURCE_ROOT; }; 414FA69A53C987CDE2E1312F /* StashService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashService.swift; path = Core/Services/Specialized/StashService.swift; sourceTree = ""; }; 416D4860255DDA9948479B7A /* FuzzyFileFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Search/FuzzyFileFinder.swift; sourceTree = SOURCE_ROOT; }; 418DEF04AD5914A0852FBE2F /* TerminalCommandPalette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalCommandPalette.swift; path = Features/Terminal/Enhanced/TerminalCommandPalette.swift; sourceTree = ""; }; 43BA801C0F45F514B99B0554 /* BranchComparisonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Branches/BranchComparisonView.swift; sourceTree = SOURCE_ROOT; }; 44313C9929F962B9469DE8E7 /* LayoutHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutHelpers.swift; path = ../Components/Utilities/LayoutHelpers.swift; sourceTree = ""; }; + 444CA9DF14F6B3EC7A83A1F6 /* WorkspaceManagerTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceManagerTab.swift; path = ../../Features/Settings/Tabs/WorkspaceManagerTab.swift; sourceTree = ""; }; 451F64E5457594941DF51A31 /* EnhancedTerminalPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnhancedTerminalPanel.swift; path = Features/Terminal/Views/EnhancedTerminalPanel.swift; sourceTree = ""; }; 45438C33E7FA5A730083B876 /* TerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalView.swift; path = Features/Terminal/TerminalView.swift; sourceTree = ""; }; 46786D226E232F901D917031 /* CommitDetailViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitDetailViewModel.swift; path = ../App/ViewModels/CommitDetailViewModel.swift; sourceTree = ""; }; @@ -487,11 +493,13 @@ 47CDACC9DB306400AB277B7A /* SearchView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Search/SearchView.swift; sourceTree = SOURCE_ROOT; }; 48195E942F327C928D76E3F0 /* DiffBreadcrumb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffBreadcrumb.swift; path = ../Features/Diff/DiffBreadcrumb.swift; sourceTree = ""; }; 489CFEF8C9808C1898F88636 /* MergeService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MergeService.swift; path = Core/Services/Specialized/MergeService.swift; sourceTree = ""; }; + 48B0A93D8A2587AC8E5E5CEF /* WorkspaceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceManager.swift; path = Core/Services/WorkspaceManager.swift; sourceTree = ""; }; 48CED6026902BB06896B1582 /* BottomPanelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelManager.swift; path = Features/BottomPanel/BottomPanelManager.swift; sourceTree = ""; }; 49D415137CD4DBE6C277B0AD /* DSResizablePanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSResizablePanel.swift; path = Organisms/Panels/DSResizablePanel.swift; sourceTree = ""; }; 49DCB09417068B1BF850DA18 /* IntegrationPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationPlugin.swift; sourceTree = SOURCE_ROOT; }; 4A9CA1C982F3BD6FBF50546C /* AISettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AISettingsTab.swift; path = ../../Features/Settings/Tabs/AISettingsTab.swift; sourceTree = ""; }; 4B436DF92856B5B4E564361C /* StagingFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingFile.swift; path = ../App/Models/StagingFile.swift; sourceTree = ""; }; + 4BD0BD26988ABF1E4F35AF6B /* Components */ = {isa = PBXFileReference; includeInIndex = 1; name = Components; path = ../../Features/CommitGraph/Components; sourceTree = ""; }; 4CAF4B562204156C4866EFD7 /* DeepLinkService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DeepLinkService.swift; path = ../Features/DeepLinking/DeepLinkService.swift; sourceTree = ""; }; 50BF4669D757C60A0A258549 /* DSSkeletonBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift; sourceTree = SOURCE_ROOT; }; 51E2503BBB1447E619977588 /* DiffStatusBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffStatusBar.swift; path = ../Features/Diff/DiffStatusBar.swift; sourceTree = ""; }; @@ -532,6 +540,7 @@ 64D7DD67F634F228B2BA0CEE /* StoreManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoreManager.swift; path = Core/StoreKit/StoreManager.swift; sourceTree = ""; }; 66B057DE0EB0A466E9E33BC9 /* RightStagingPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RightStagingPanel.swift; path = ../App/Panels/Right/RightStagingPanel.swift; sourceTree = ""; }; 68995E0B81A9B7E42741AE47 /* GitSubmoduleService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitSubmoduleService.swift; path = Core/Services/GitSubmoduleService.swift; sourceTree = ""; }; + 68A1AB403E73EA0598C9F699 /* LicenseManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LicenseManager.swift; path = Core/Services/LicenseManager.swift; sourceTree = ""; }; 6A3DB6D02E367EF664B47F0D /* TerminalSessionSharingService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalSessionSharingService.swift; path = GitMac/Features/Terminal/Enhanced/TerminalSessionSharingService.swift; sourceTree = SOURCE_ROOT; }; 6A6251BEE308BCE87B307FDF /* CompactRepoTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactRepoTab.swift; path = ../App/Toolbars/CompactRepoTab.swift; sourceTree = ""; }; 6B39632AD8E994CCDF797593 /* GitHooksComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitHooksComponents.swift; sourceTree = ""; }; @@ -556,6 +565,7 @@ 77DF6AB18445C7F81E95CD87 /* TaigaContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaContentView.swift; path = Features/Taiga/TaigaContentView.swift; sourceTree = ""; }; 77FDB310B5DBFC8EC103E983 /* DiffSearchAndNavigation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffSearchAndNavigation.swift; path = ../Features/Diff/DiffSearchAndNavigation.swift; sourceTree = ""; }; 7801DE614213369EF2205E93 /* AICommandSuggestions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AICommandSuggestions.swift; path = Features/Terminal/Enhanced/AICommandSuggestions.swift; sourceTree = ""; }; + 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitOperationProgressView.swift; path = Components/GitOperationProgressView.swift; sourceTree = ""; }; 79542D479476AE91B3E954EF /* PlannerSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlannerSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/PlannerSettingsViews.swift; sourceTree = ""; }; 7989C44ACCDF1E41D18E2AC1 /* BinaryFileRenderers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryFileRenderers.swift; path = ../Features/Diff/Renderers/BinaryFileRenderers.swift; sourceTree = ""; }; 7A74E0458D50F1A151CCA0F0 /* SubmoduleComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SubmoduleComponents.swift; sourceTree = ""; }; @@ -671,6 +681,7 @@ BCCD2C3F507ABF68B24D8B6C /* RepositoryTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryTabBar.swift; path = ../App/Toolbars/RepositoryTabBar.swift; sourceTree = ""; }; BCE5F58D381B393D52C8166A /* DSTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift; sourceTree = SOURCE_ROOT; }; BFCAFD73F48F11025E3F5E23 /* WorktreeComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorktreeComponents.swift; path = GitMac/App/Panels/Left/WorktreeComponents.swift; sourceTree = SOURCE_ROOT; }; + BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchPRTracker.swift; path = Core/Services/BranchPRTracker.swift; sourceTree = ""; }; C05E76268C1B2E5E38FEFE08 /* LayoutConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstants.swift; path = Components/Common/LayoutConstants.swift; sourceTree = ""; }; C0A3477C5429FE5F172621B6 /* TiledDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TiledDiffView.swift; path = ../Features/Diff/TiledDiffView.swift; sourceTree = ""; }; C0CBCEB9467ACA32A1448C2B /* TaigaEpicsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaEpicsView.swift; path = Features/Taiga/Views/TaigaEpicsView.swift; sourceTree = ""; }; @@ -685,11 +696,13 @@ C8A9F580892364D6F487D3D4 /* KaleidoscopeSplitDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KaleidoscopeSplitDiffView.swift; path = ../Features/Diff/KaleidoscopeSplitDiffView.swift; sourceTree = ""; }; C8B9CDBE3A7D0DA2C86612D0 /* IntegrationsSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegrationsSettingsTab.swift; path = ../../Features/Settings/Tabs/IntegrationsSettingsTab.swift; sourceTree = ""; }; C8EC18843562D7D622FA0E10 /* DiffToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffToolbar.swift; path = Components/Diff/DiffToolbar.swift; sourceTree = ""; }; + C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitProgressTracker.swift; path = Core/Services/GitProgressTracker.swift; sourceTree = ""; }; C947465962BAE24E11E5BE8A /* XcodeSidebarNavigator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeSidebarNavigator.swift; path = Components/Xcode/XcodeSidebarNavigator.swift; sourceTree = ""; }; CCDBE3D0C01B79C8DA32D290 /* SyntaxHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Utils/SyntaxHighlighter.swift; sourceTree = SOURCE_ROOT; }; CDC2D84E539F3E4F59585DB1 /* DSIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSIcon.swift; sourceTree = SOURCE_ROOT; }; CE362A1585EF74F0F8CD5300 /* ConflictPreventionService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConflictPreventionService.swift; path = ../Features/ConflictPrevention/ConflictPreventionService.swift; sourceTree = ""; }; CED81242689EF445019AB70B /* SidebarSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SidebarSection.swift; path = App/Components/SidebarSection.swift; sourceTree = ""; }; + CEVR01 /* CodeEditorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodeEditorView.swift; path = GitMac/Features/Editor/CodeEditorView.swift; sourceTree = SOURCE_ROOT; }; CF2442A09016D286CE8F2BA0 /* StagingViewMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingViewMode.swift; path = ../App/Models/StagingViewMode.swift; sourceTree = ""; }; CF321C6AF283F55B69F37966 /* AvatarImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/AvatarImageView.swift; sourceTree = SOURCE_ROOT; }; CF4F843954F997AD46CDBAE8 /* DSFilterMenu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift; sourceTree = SOURCE_ROOT; }; @@ -731,7 +744,6 @@ E5D39602F9B9FA2983FFA4B5 /* Branch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Branch.swift; path = Core/Git/Branch.swift; sourceTree = ""; }; E60149B22A9C3833A45E1138 /* TreeExpansionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TreeExpansionState.swift; path = Components/FileTree/TreeExpansionState.swift; sourceTree = ""; }; E68762388E84A0E1E76D28A8 /* DiffStatsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffStatsView.swift; path = Components/Diff/DiffStatsView.swift; sourceTree = ""; }; - WELCOME01FILE00000000001 /* WelcomeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WelcomeView.swift; path = WelcomeView.swift; sourceTree = ""; }; E6FDEA200BE2DF21B853FDFC /* RecentRepositoriesList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecentRepositoriesList.swift; sourceTree = ""; }; E729B4D59A2644F69C62C147 /* CICDComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CICDComponents.swift; path = GitMac/App/Panels/Left/CICDComponents.swift; sourceTree = SOURCE_ROOT; }; E74448138294C0683E8713C8 /* CodeReviewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CodeReviewService.swift; path = GitMac/Features/CodeReview/CodeReviewService.swift; sourceTree = SOURCE_ROOT; }; @@ -763,10 +775,11 @@ FE31450EF2F2870D73689BE9 /* RepositoryTabsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryTabsView.swift; path = Components/Navigation/RepositoryTabsView.swift; sourceTree = ""; }; FE61B5268D38F24336EF3822 /* DSCloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift; sourceTree = SOURCE_ROOT; }; FEF04D5AAFB91C9592A5045E /* ContributionGraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ContributionGraphView.swift; path = GitMac/Features/BottomPanel/Views/ContributionGraphView.swift; sourceTree = SOURCE_ROOT; }; + GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubSyncManager.swift; path = Core/Services/GitHubSyncManager.swift; sourceTree = ""; }; INFO01 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; PROD01 /* GitMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GitMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; RES001 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - CEVR01 /* CodeEditorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodeEditorView.swift; path = GitMac/Features/Editor/CodeEditorView.swift; sourceTree = SOURCE_ROOT; }; + WELCOME01FILE00000000001 /* WelcomeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WelcomeView.swift; path = WelcomeView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1004,6 +1017,7 @@ 0F8938D30C93984F880916CA /* UnifiedFileContextMenu.swift */, 52DB5D866FC40BF9D4931F12 /* ContextMenus.swift */, CF321C6AF283F55B69F37966 /* AvatarImageView.swift */, + 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */, ); name = Components; sourceTree = ""; @@ -1041,6 +1055,8 @@ 5A83152F6E2CD6F4E437C5C3 /* PushFetchButtons.swift */, 311732177EB42C4A81308A02 /* BranchSelectorButton.swift */, 96C2B56F9C9BF273E8E7A5FD /* CommitDetailPanel.swift */, + 3F0823301FFD9666FF23BB6B /* SyncButton.swift */, + 4BD0BD26988ABF1E4F35AF6B /* Components */, ); name = Components; path = Components; @@ -1065,6 +1081,7 @@ C23DEFD3BDC948044E9F7E59 /* KeyboardShortcutsTab.swift */, 1540D12594BA091D091556B9 /* WorkspaceSettingsTab.swift */, A1B3C55C29AB720739CDE519 /* AccountsSettingsTab.swift */, + 444CA9DF14F6B3EC7A83A1F6 /* WorkspaceManagerTab.swift */, ); name = Tabs; path = Tabs; @@ -1674,6 +1691,9 @@ 84CC1EF63080BB92CDB995DF /* AI */, 8FEE4054B2842E02ED448EF0 /* CloudSyncService.swift */, 05A44BE48A6BAAD7525A8D2A /* PresenceService.swift */, + C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */, + 48B0A93D8A2587AC8E5E5CEF /* WorkspaceManager.swift */, + 68A1AB403E73EA0598C9F699 /* LicenseManager.swift */, ); name = Services; sourceTree = ""; @@ -2659,6 +2679,13 @@ FAE9C67E11FEF853B37CD1B2 /* JiraPanel.swift in Sources */, 3A1FBB575237C360F6C5A416 /* MemoryPressureHandler.swift in Sources */, CEVF01 /* CodeEditorView.swift in Sources */, + B7819B89F1E5B86F9551E12C /* GitProgressTracker.swift in Sources */, + FE81C6B0E94463788DE8D787 /* GitOperationProgressView.swift in Sources */, + 715B18D5F7FFBFEC63C8F7BE /* SyncButton.swift in Sources */, + 787C9B1064B5E35BC1E8F8AD /* Components in Sources */, + 4620E28E85D7D297476B2615 /* WorkspaceManager.swift in Sources */, + 21C8232A914DFC79854BA9C4 /* WorkspaceManagerTab.swift in Sources */, + 901B42AAD687F5C1277CE833 /* LicenseManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/GitMac.xcodeproj/project.pbxproj.backup b/GitMac.xcodeproj/project.pbxproj.backup deleted file mode 100644 index 9c96d88..0000000 --- a/GitMac.xcodeproj/project.pbxproj.backup +++ /dev/null @@ -1,1584 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 56; - objects = { - -/* Begin PBXBuildFile section */ - 011EEBA959D2683E15C23AE0 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */; }; - 025153B6DF9247DD577BB90D /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */; }; - 05BD9B5EFCE2EF13BE0D8785 /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */; }; - 071E6F3C86BA418CBAAABC10 /* GitMac/Core/Services/Specialized/DiffService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */; }; - 077C9761271C430390829DC4 /* GitMac/UI/Components/Rows/BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */; }; - 0B110979D687480F9568261C /* GitMac/Core/Services/Specialized/TagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */; }; - 0D3D055176FF4E77AF97C3F9 /* Features/PullRequests/PRListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */; }; - 0F1E7E1C27EB47F29936A82C /* Features/Diff/DiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 653680820091489887257EC3 /* Features/Diff/DiffView.swift */; }; - 0F6D0B17E4F94686B4D3581E /* GitMac/Core/Services/Specialized/StagingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */; }; - 10149A8AA816427784F3917E /* GitMac/Core/Services/Specialized/BranchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */; }; - 10722C36120E452A954A5C34 /* GitMac/UI/Components/Layout/SectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */; }; - 128A13B3887B4109A5059EF4 /* GitMac/Features/Diff/Renderers/DiffParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */; }; - 13B6C91AEA8E670BB2357C82 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */; }; - 14251E68A10431607FD81BED /* BottomPanelResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */; }; - 1705954E5B714752B9B1D090 /* Core/Services/GitHubService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */; }; - 18133BDB02AD310F3DCD933A /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */; }; - 194BFB877B0C483691B960B9 /* Features/Taiga/TaigaTicketsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */; }; - 1AC1766730959255403C4EA2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */; }; - 1BCDD11EE839484DB0C0BA9F /* Features/Worktrees/WorktreeListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */; }; - 1E0AB440EFC701900B322297 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */; }; - 1E8CDFA5E335FBCBEAA61B45 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */; }; - 22156E10FB604F4E87EA5C9D /* Features/Staging/StagingAreaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */; }; - 227AC51E448C4CDFBE937534 /* Core/Services/MicrosoftOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */; }; - 23CF2BC056564115AC922309 /* Core/Git/Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */; }; - 23F59A5692CE4B529CE47DF8 /* GitMac/UI/Components/Rows/ListRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */; }; - 292240020C0CCE4C28679261 /* TaigaEpicsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */; }; - 293C2B8DBF0A4C39A63D607E /* Features/Remotes/RemoteListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */; }; - 2997ADCD07B2400A84304290 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */; }; - 2A3290BA1E9AA18CED1A3817 /* TaigaIssuesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */; }; - 2B20A8BB42C6596D5F938307 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */; }; - 2B9950663DDB76A17AD4BFA9 /* BottomPanelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A6E5B72144B52AC053813D /* BottomPanelType.swift */; }; - 2DE7FB809DE64F96916D75A1 /* Features/Branches/BranchListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */; }; - 2E4FFFDFAC66F10402025F5B /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */; }; - 2ECCBA94025D46619633D059 /* Core/Services/AIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */; }; - 2F3531A32151515A63679091 /* GitMac/UI/Components/Icons/FileTypeIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */; }; - 2FE4F60BF0FD4078AFA3F8BB /* Features/Issues/IssueListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */; }; - 330ACD6D6FB94B468ECA4FA0 /* GitMac/UI/Components/Common/UniversalResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */; }; - 33E17B57FA9D4CA1B3B708A3 /* GitMac/Core/Models/GitHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */; }; - 3410F14BD12B49D28665E2A3 /* Features/Settings/SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */; }; - 3780CFA63E8FBAB8DB262C60 /* GitMac/Core/PluginSystem/PluginRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */; }; - 3883439F563C40B485F460F5 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */; }; - 39F2E859A621E04E59338150 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */; }; - 3B202A05F8024888BF8386BE /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */; }; - 3DF2C65DA1D046C6A657B6F5 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */; }; - 411EE8E24820B19E458C98EA /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */; }; - 44D2EEB68993CA4714674E6A /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */; }; - 4678F616E4B627558CE1D996 /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */; }; - 47A04D733A15416C9417CECA /* Core/Git/Worktree.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */; }; - 4B6E9C051D7A4D02A466FE4E /* Features/History/HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */; }; - 504DCBFB526F46E3958E34A3 /* Core/Services/GitHubOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */; }; - 514CC38B4E6146C788C7E04C /* GitMac/UI/Components/FileTree/TreeExpansionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */; }; - 5593E25F2327E846A0FEEDF2 /* Features/Taiga/TaigaViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */; }; - 5A431653DA454AE88ED73FFD /* Core/Git/Stash.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */; }; - 5CC69E076E264870AA0C7F38 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */; }; - 5F3CE842686C4E37811983FA /* Features/Stash/StashListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */; }; - 606A08D80271F6F8F2CE3A15 /* GitMac/UI/Components/ComponentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */; }; - 608D9FA09DC9438CB9AEC4F8 /* GitMac/Core/Services/GitHooksService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */; }; - 6377E846CB2F4BA2B9E7E454 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */; }; - 65C6D7B1D3BC4C46804FBAC2 /* GitMac/Core/Models/GitSubmodule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */; }; - 6700C7C42963864A6E288032 /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */; }; - 681023EDB4F3424E8C2A5752 /* Features/CherryPick/CherryPickView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */; }; - 692C9ED8C703198612A88D80 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */; }; - 693A5D442AF846DD93792B19 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */; }; - 6A63391DAEC9454891091E35 /* Core/Services/MicrosoftPlannerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */; }; - 6A93112D00D09D85BC817378 /* GitMac/Features/Jira/JiraPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */; }; - 70D6620C892D488B90479648 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */; }; - 73C8DBE08FC24847B16135A5 /* Core/Utils/ShellExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */; }; - 7B78FA5E545C1AA746771F1A /* BottomPanelTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */; }; - 7C513261CA64EE5CB89C0DD8 /* UnifiedBottomPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */; }; - 7DDF3B6AB1CD4A298AC023EE /* GitMac/Features/Submodules/SubmoduleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */; }; - 7F639A2DCE90F380654018C2 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */; }; - 8027AA858E2013D7F57DE99A /* BottomPanelTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */; }; - 8252E184E6A24337B4EE1242 /* Core/StoreKit/StoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */; }; - 854B11941BF245638BA20FDB /* TaigaSharedViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */; }; - 870022C6A156528820E52A04 /* GitMac/UI/Components/Atoms/Display/DSBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */; }; - 8AC7D258532342BF841C0A12 /* GitMac/UI/Components/Diff/DiffHunkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */; }; - 8C04729C0FB24B649A27A8F3 /* GitMac/UI/Components/Rows/RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */; }; - 8C670A9D38474274A04AFFD8 /* GitMac/Core/Services/Specialized/StashService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */; }; - 8E210720DA1047ECA734C786 /* Features/Launchpad/LaunchpadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */; }; - 8E589E6FF70C /* GitMac/Features/Diff/WordLevelDiff.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */; }; - 90E17B673646FBB941792FEB /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */; }; - 91E03468A5173B0AEC039B40 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */; }; - 9254A96CA98A61C1EC0435B5 /* GitMac/UI/Components/Atoms/Display/DSText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */; }; - 93B29E6BD2524365845BFE55 /* Core/Git/GitEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */; }; - 9514CACB50D94A6AB2DD6683 /* GitMac/UI/Components/Rows/BranchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */; }; - 9DB2758C88EE487DBFB9906B /* Core/Git/Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */; }; - A297B77215ADAA3F996C4CC2 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */; }; - A29EF1F3B98D4EE1A290464F /* Core/Utils/KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */; }; - A44D05C9CC5F4468B8898071 /* Core/Git/Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */; }; - A56BA8CC4CB25CC4F77D5B20 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */; }; - A6F51E6777487026188DD38D /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */; }; - A9FA029924774C729FDE3F91 /* Core/Services/UndoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */; }; - AA12670EFE8FCC58340FC75E /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */; }; - AADA43DBCE496DD142441A23 /* BottomPanelContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */; }; - AC0864B0C8C2443BBB705DE5 /* GitMac/UI/Components/Layout/Separator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */; }; - AC9431802EE96F9D00A59026 /* PullSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94317F2EE96F9D00A59026 /* PullSheet.swift */; }; - AC9431822EE96FB400A59026 /* FileBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431812EE96FB400A59026 /* FileBrowserView.swift */; }; - AC9431842EE9786B00A59026 /* ResetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431832EE9786B00A59026 /* ResetView.swift */; }; - AC9431862EE9789700A59026 /* RevertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431852EE9789700A59026 /* RevertView.swift */; }; - AC9431882EE978E500A59026 /* ReflogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431872EE978E500A59026 /* ReflogView.swift */; }; - AC94318A2EE9791900A59026 /* InteractiveRebaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */; }; - AC94318C2EE9795800A59026 /* CommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94318B2EE9795800A59026 /* CommandPalette.swift */; }; - AC94318E2EE979A600A59026 /* FuzzyFileFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */; }; - AC9431922EE97A3700A59026 /* SyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */; }; - AC9431942EE97A6D00A59026 /* RemoteManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */; }; - AC9431982EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */; }; - AC94319A2EE97BBF00A59026 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431992EE97BBF00A59026 /* ThemeManager.swift */; }; - AC94319E2EE97C3B00A59026 /* MinimapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94319D2EE97C3B00A59026 /* MinimapView.swift */; }; - AC9431A02EE97C8400A59026 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94319F2EE97C8400A59026 /* SearchView.swift */; }; - AC9431A42EE97D6000A59026 /* BUILD_FIX.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431A32EE97D6000A59026 /* BUILD_FIX.md */; }; - AC9431A62EE97D8000A59026 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431A52EE97D8000A59026 /* NotificationManager.swift */; }; - AC9431A82EE97DB400A59026 /* ExternalToolsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */; }; - AC9431AA2EE97DE700A59026 /* FASE3_PROGRESS.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */; }; - AC9431B02EE97F5B00A59026 /* INTEGRATION_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */; }; - AC9431B22EE97FAF00A59026 /* REVIEW_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */; }; - AC9431B82EE980A900A59026 /* INTEGRATION_CHECKLIST.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */; }; - AC9431BA2EE980CD00A59026 /* FIX_BUILD_NOW.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */; }; - AC9431BE2EE9822D00A59026 /* QUICK_START.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431BD2EE9822D00A59026 /* QUICK_START.md */; }; - AC9431C02EE99A4800A59026 /* RemoteOperationTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */; }; - AC9431C22EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */; }; - AC9431C42EE9A33100A59026 /* WARNING_FIXES.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */; }; - ACC600512F024855005DC34D /* DSVirtualizedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600472F024855005DC34D /* DSVirtualizedList.swift */; }; - ACC600522F024855005DC34D /* DSPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004A2F024855005DC34D /* DSPanel.swift */; }; - ACC600532F024855005DC34D /* DSLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600412F024855005DC34D /* DSLoginPrompt.swift */; }; - ACC600542F024855005DC34D /* DSResizablePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004B2F024855005DC34D /* DSResizablePanel.swift */; }; - ACC600552F024855005DC34D /* DSIntegrationPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600402F024855005DC34D /* DSIntegrationPanel.swift */; }; - ACC600562F024855005DC34D /* DSInfiniteList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600462F024855005DC34D /* DSInfiniteList.swift */; }; - ACC600572F024855005DC34D /* DSTabContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004F2F024855005DC34D /* DSTabContainer.swift */; }; - ACC600582F024855005DC34D /* DSSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600422F024855005DC34D /* DSSettingsSheet.swift */; }; - ACC600592F024855005DC34D /* DSSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004E2F024855005DC34D /* DSSheet.swift */; }; - ACC6005A2F024855005DC34D /* DSTabPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004C2F024855005DC34D /* DSTabPanel.swift */; }; - ACC6005B2F024855005DC34D /* DSDraggableList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600442F024855005DC34D /* DSDraggableList.swift */; }; - ACC6005C2F024855005DC34D /* DSGroupedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600452F024855005DC34D /* DSGroupedList.swift */; }; - ACC6005D2F024855005DC34D /* DSCollapsiblePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */; }; - AD16C2E522DD4E7A9F2DA2E6 /* Features/Tags/TagListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */; }; - AE0A7C8E9DD312717EFA13E4 /* TaigaContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3798A1846650C01AD285DC8 /* TaigaContentView.swift */; }; - AE73EFC4B423FEF2DF409575 /* GitMac/Features/Planner/PlannerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */; }; - AEFDAA89AAEB49EA93E09E1A /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */; }; - APP001 /* App/GitMacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = SRC001 /* App/GitMacApp.swift */; }; - APP002 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = RES001 /* Assets.xcassets */; }; - AVTRSVC1B526F46E3958E34A /* Core/Services/AvatarService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */; }; - AWSCB001B526F46E3958E34A /* AWSCodeBuildService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */; }; - B22085A223F142A680B2B116 /* App/ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */; }; - B288434E27474BCE8B605D16 /* Core/Git/Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */; }; - B38FE133F96B4801B072C31A /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */; }; - B3A46B7AB4C14FE7ABB248DE /* Features/CommitGraph/CommitGraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */; }; - B4DA26C56859D2E184D7E860 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */; }; - B6189D2FE47A4D7EA34D9F06 /* GitMac/UI/Components/Rows/FileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */; }; - B6FF711E9D904DC5A13E334F /* GitMac/UI/Components/Commit/CommitMessageArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */; }; - B77A120C3CF2461C8B4B09BE /* GitMac/UI/Components/Icons/StatusIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */; }; - B792010810824E7B2933630E /* GitMac/Features/Jira/JiraViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */; }; - B8B777FE4088470CBA4427C7 /* Core/Services/WorkspaceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */; }; - B988102E6AE44D00BD7465C4 /* Features/Terminal/TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */; }; - BD25E53A92994727308E78E1 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */; }; - BD7718FD3031E989055C841C /* GitMac/Features/Notion/NotionPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */; }; - BF29CA1FCD714F51A1F45AB0 /* Features/GitFlow/GitFlowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */; }; - C0FCA2D59D0B4674801C30B7 /* GitMac/UI/Utilities/ModalCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */; }; - C1432F5677FB440BBBCE1D37 /* Core/Utils/FileWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */; }; - C17B40AC6D74427DAB28B049 /* GitMac/UI/Components/Common/LayoutConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */; }; - C3D6450D4DF146A0A1893725 /* Features/MergeConflict/ConflictResolverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */; }; - C539555536ED4764ACF01929 /* Features/Settings/SubscriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */; }; - C539F53A651A0250BCAA9015 /* GitMac/UI/Components/Cards/CardStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */; }; - C64FAAF81040CB6F41F12CFD /* Features/Taiga/TaigaPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */; }; - C6F50D7463C0809C142616EE /* GitMac/Features/Linear/LinearPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */; }; - C748B34DF85B4250B12ADABE /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */; }; - C8184F3EA7F1402896DD1A5D /* GitMac/UI/Components/Diff/DiffToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */; }; - C8DF98EC71AC165EDBF9F79E /* BottomPanelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */; }; - C8E01AA078734F7686AD1DB8 /* Core/Git/Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */; }; - C964E76B6FCE4A16BC3CA967 /* GitMac/UI/Components/Diff/DiffLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */; }; - CACHETTL1B526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift in Sources */ = {isa = PBXBuildFile; fileRef = CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */; }; - CE6DC227F90A9E0F084729FC /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */; }; - CF2B788DBC9C46B8AD5689DB /* GitMac/Core/Services/GitSubmoduleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */; }; - CTXMNU01B526F46E3958E34A /* UI/Components/ContextMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */; }; - D05B742B6423469E806FD3B1 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */; }; - D3881EDC974B4F1B953A71DF /* GitMac/GitOperationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */; }; - D5351C2C701B487793E0C515 /* Core/Services/TaigaService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */; }; - D5A8566ED7F1576C0C1F2CF3 /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */; }; - D7C739877F294D99869D0B8A /* GitMac/UI/Components/Layout/FileListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */; }; - DB71F6B7480346E2A13CDA2D /* GitMac/Core/Services/Specialized/CommitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */; }; - DCA2305BB8A842369E2DFDE0 /* GitMac/Features/GitHooks/GitHooksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */; }; - DED68D219BE1413499206E43 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */; }; - E03E61A15F828ADE3955FC07 /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */; }; - E3F494D2DF37C541988BE1FD /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */; }; - E5FD5D5C1CC70A44623C5E5B /* TaigaLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */; }; - E63C04837ABDB169AC668FA7 /* TaigaTasksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */; }; - E750BCECFCF5443488BB893A /* GitMac/Core/Services/Specialized/RemoteService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */; }; - ED061CB6EEEE5AF4D74E749D /* GitMac/Core/PluginSystem/IntegrationPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */; }; - ED6FCEB928FF0E3EE8308D26 /* GitMac/UI/Components/Molecules/Display/DSHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */; }; - EE253019E62CF52CDFFEC69A /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */; }; - F446CD9EB8254FDDBC44396D /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */; }; - F706F47EC2E998C18214DBD8 /* GitMac/Core/PluginSystem/IntegrationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */; }; - F7B1EE9C38ADA4FC61EEBD64 /* TaigaUserStoriesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */; }; - F81A394FC5284A539A11879C /* GitMac/Core/Services/Specialized/MergeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */; }; - F915E96872D140E997144CF7 /* Core/Services/GitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */; }; - F94BB1BCB04F4885BF46F509 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */; }; - FF97BDC528EB4762A9D35B04 /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */; }; - FFBD69F7105D47AFB9832131 /* GitMac/UI/Components/Diff/DiffStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */; }; - FLVIEW01B526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */; }; - GKTHEME1B526F46E3958E34A /* UI/Components/AppTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */; }; - JIRAPNL1B526F46E3958E34A /* Features/Jira/JiraPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */; }; - JIRASVC1B526F46E3958E34A /* Core/Services/JiraService.swift in Sources */ = {isa = PBXBuildFile; fileRef = JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */; }; - KBSHRT01B526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */; }; - LNRPNL01B526F46E3958E34A /* Features/Linear/LinearPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */; }; - LNRSVC01B526F46E3958E34A /* Core/Services/LinearService.swift in Sources */ = {isa = PBXBuildFile; fileRef = LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */; }; - LWDIFF01B526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */; }; - MDVIEW01B526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */; }; - MERMAID1B526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift in Sources */ = {isa = PBXBuildFile; fileRef = MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */; }; - NOTNPNL1B526F46E3958E34A /* Features/Notion/NotionPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */; }; - NOTNSVC1B526F46E3958E34A /* Core/Services/NotionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */; }; - PATCHMAN01B526F46E3958E34 /* Core/Git/PatchManipulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */; }; - PKG001 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DEP001 /* KeychainAccess */; }; - PKG002 /* Splash in Frameworks */ = {isa = PBXBuildFile; productRef = DEP002 /* Splash */; }; - PLNR001B526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */; }; - REPOCTX01B526F46E3958E34 /* Core/Git/RepositoryContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */; }; - UNIFCTX001B526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */; }; - WKFLW001B526F46E3958E34A /* WorkflowsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = WKFLW001F526F46E3958E34A /* WorkflowsView.swift */; }; - 11412D2CD2554F6880201DCC /* RepoGroupsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */; }; - 33CA842A6DDA4AA58FD66460 /* ComponentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748878172E9B4D15B1366993 /* ComponentCatalog.swift */; }; - 9E864EB499F54029820F722D /* GitMac/Features/Jira/JiraContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BAB5AFE9928439D8EE9A26F /* GitMac/Features/Jira/JiraContentView.swift */; }; - 051044BE277D49BF9A932FF2 /* GitMac/Features/Jira/JiraIssuesList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B693AD0A2D24357974C51C0 /* GitMac/Features/Jira/JiraIssuesList.swift */; }; - F3790BD2B0FD4D4CB36658CC /* GitMac/Features/Jira/JiraLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82DFFB2CBBE44482A5C7C387 /* GitMac/Features/Jira/JiraLoginPrompt.swift */; }; - B707301E0C13408BBB3CD17A /* GitMac/Features/Jira/JiraSettingsContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C339C9E70FF42748E5B8904 /* GitMac/Features/Jira/JiraSettingsContent.swift */; }; - 2E7F77965FAF4325A9AFCEC0 /* GitMac/Features/Linear/LinearContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F2776E2AA14A848E1224C9 /* GitMac/Features/Linear/LinearContentView.swift */; }; - F8FF74927C564D5BAB210C98 /* GitMac/Features/Notion/NotionContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C6AD2BA34E741D6A64F41ED /* GitMac/Features/Notion/NotionContentView.swift */; }; - 448A954BF47C4C9097A4C3AC /* GitMac/Features/Taiga/TaigaContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65ED7ADF00814187AFA86B50 /* GitMac/Features/Taiga/TaigaContentView.swift */; }; - AA11BB22CC3344DD55EE66FF /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AA22BB33CC44DD55EE66FF /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift */; }; - AA22BB33CC4455DD66EE77FF /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22AA33BB44CC55DD66EE77FF /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/TagService.swift; sourceTree = ""; }; - 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Commit/CommitMessageArea.swift; sourceTree = ""; }; - 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSAvatar.swift; sourceTree = SOURCE_ROOT; }; - 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Remote.swift; sourceTree = ""; }; - 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Tags/TagListView.swift; sourceTree = ""; }; - 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Launchpad/LaunchpadView.swift; sourceTree = ""; }; - 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextField.swift; sourceTree = SOURCE_ROOT; }; - 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitHubService.swift; sourceTree = ""; }; - 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/PluginRegistry.swift; sourceTree = SOURCE_ROOT; }; - 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Cards/CardStyle.swift; sourceTree = SOURCE_ROOT; }; - 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/GitOperationHandler.swift; sourceTree = ""; }; - 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/GitEngine.swift; sourceTree = ""; }; - 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/FileTreeProtocols.swift; sourceTree = ""; }; - 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/MicrosoftOAuth.swift; sourceTree = ""; }; - 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift; sourceTree = ""; }; - 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift; sourceTree = SOURCE_ROOT; }; - 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSText.swift; sourceTree = SOURCE_ROOT; }; - 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift; sourceTree = ""; }; - 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSPicker.swift; sourceTree = SOURCE_ROOT; }; - 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/GenericTreeNode.swift; sourceTree = ""; }; - 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Branches/BranchListView.swift; sourceTree = ""; }; - 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/RowProtocols.swift; sourceTree = ""; }; - 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift; sourceTree = SOURCE_ROOT; }; - 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/GitHooksService.swift; sourceTree = ""; }; - 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift; sourceTree = SOURCE_ROOT; }; - 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/ListRow.swift; sourceTree = ""; }; - 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaLoginPrompt.swift; path = Features/Taiga/Views/TaigaLoginPrompt.swift; sourceTree = ""; }; - 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Models/GitSubmodule.swift; sourceTree = ""; }; - 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTabBar.swift; path = Features/BottomPanel/Views/BottomPanelTabBar.swift; sourceTree = ""; }; - 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffStatsView.swift; sourceTree = ""; }; - 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationViewModel.swift; sourceTree = SOURCE_ROOT; }; - 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Tag.swift; sourceTree = ""; }; - 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/RemoteService.swift; sourceTree = ""; }; - 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitHubOAuth.swift; sourceTree = ""; }; - 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/TreeExpansionState.swift; sourceTree = ""; }; - 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DesignTokens.swift; sourceTree = ""; }; - 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelContent.swift; path = Features/BottomPanel/Views/BottomPanelContent.swift; sourceTree = ""; }; - 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraPlugin.swift; sourceTree = SOURCE_ROOT; }; - 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSSpacer.swift; sourceTree = SOURCE_ROOT; }; - 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift; sourceTree = SOURCE_ROOT; }; - 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift; sourceTree = SOURCE_ROOT; }; - 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraViewModel.swift; sourceTree = SOURCE_ROOT; }; - 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/WorkspaceSettings.swift; sourceTree = ""; }; - 42A6E5B72144B52AC053813D /* BottomPanelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelType.swift; path = Features/BottomPanel/Models/BottomPanelType.swift; sourceTree = ""; }; - 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Repository.swift; sourceTree = ""; }; - 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationPlugin.swift; sourceTree = SOURCE_ROOT; }; - 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Issues/IssueListView.swift; sourceTree = ""; }; - 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift; sourceTree = SOURCE_ROOT; }; - 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/FileListSection.swift; sourceTree = ""; }; - 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Submodules/SubmoduleView.swift; sourceTree = ""; }; - 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDropZone.swift; sourceTree = SOURCE_ROOT; }; - 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Branch.swift; sourceTree = ""; }; - 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Models/GitHook.swift; sourceTree = ""; }; - 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Staging/StagingAreaView.swift; sourceTree = ""; }; - 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/MicrosoftPlannerService.swift; sourceTree = ""; }; - 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSEmptyState.swift; sourceTree = SOURCE_ROOT; }; - 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift; sourceTree = SOURCE_ROOT; }; - 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSLoadingState.swift; sourceTree = SOURCE_ROOT; }; - 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift; sourceTree = SOURCE_ROOT; }; - 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaEpicsView.swift; path = Features/Taiga/Views/TaigaEpicsView.swift; sourceTree = ""; }; - 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSActionBar.swift; sourceTree = SOURCE_ROOT; }; - 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/TaigaService.swift; sourceTree = ""; }; - 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/KeychainManager.swift; sourceTree = ""; }; - 653680820091489887257EC3 /* Features/Diff/DiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Diff/DiffView.swift; sourceTree = ""; }; - 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift; sourceTree = SOURCE_ROOT; }; - 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSDivider.swift; sourceTree = SOURCE_ROOT; }; - 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/FileWatcher.swift; sourceTree = ""; }; - 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/SectionHeader.swift; sourceTree = ""; }; - 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaPlugin.swift; sourceTree = ""; }; - 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift; sourceTree = ""; }; - 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffHunkView.swift; sourceTree = ""; }; - 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Remotes/RemoteListView.swift; sourceTree = ""; }; - 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/FileRow.swift; sourceTree = ""; }; - 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/BaseRow.swift; sourceTree = ""; }; - 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/GenericFileTreeView.swift; sourceTree = ""; }; - 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Commit.swift; sourceTree = ""; }; - 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift; sourceTree = SOURCE_ROOT; }; - 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSButton.swift; sourceTree = SOURCE_ROOT; }; - 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Settings/SettingsView.swift; sourceTree = ""; }; - 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTab.swift; path = Features/BottomPanel/Models/BottomPanelTab.swift; sourceTree = ""; }; - 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Icons/FileTypeIcon.swift; sourceTree = ""; }; - 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/MergeConflict/ConflictResolverView.swift; sourceTree = ""; }; - 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/MergeService.swift; sourceTree = ""; }; - 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffLineView.swift; sourceTree = ""; }; - 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift; sourceTree = SOURCE_ROOT; }; - 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift; sourceTree = SOURCE_ROOT; }; - 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/ComponentCatalog.swift; sourceTree = SOURCE_ROOT; }; - 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift; sourceTree = SOURCE_ROOT; }; - 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/BranchRow.swift; sourceTree = ""; }; - 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitService.swift; sourceTree = ""; }; - 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffToolbar.swift; sourceTree = ""; }; - A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/CommitGraph/CommitGraphView.swift; sourceTree = ""; }; - A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaUserStoriesView.swift; path = Features/Taiga/Views/TaigaUserStoriesView.swift; sourceTree = ""; }; - A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/History/HistoryView.swift; sourceTree = ""; }; - A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/DiffService.swift; sourceTree = ""; }; - A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/Separator.swift; sourceTree = ""; }; - A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift; sourceTree = SOURCE_ROOT; }; - A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSHeader.swift; sourceTree = SOURCE_ROOT; }; - A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/CherryPick/CherryPickView.swift; sourceTree = ""; }; - A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/BranchService.swift; sourceTree = ""; }; - AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/GitSubmoduleService.swift; sourceTree = ""; }; - AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/UndoManager.swift; sourceTree = ""; }; - AC94317D2EE96F9100A59026 /* AvatarImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarImageView.swift; sourceTree = ""; }; - AC94317F2EE96F9D00A59026 /* PullSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PullSheet.swift; sourceTree = ""; }; - AC9431812EE96FB400A59026 /* FileBrowserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileBrowserView.swift; sourceTree = ""; }; - AC9431832EE9786B00A59026 /* ResetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetView.swift; sourceTree = ""; }; - AC9431852EE9789700A59026 /* RevertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevertView.swift; sourceTree = ""; }; - AC9431872EE978E500A59026 /* ReflogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReflogView.swift; sourceTree = ""; }; - AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractiveRebaseView.swift; sourceTree = ""; }; - AC94318B2EE9795800A59026 /* CommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandPalette.swift; sourceTree = ""; }; - AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FuzzyFileFinder.swift; sourceTree = ""; }; - AC94318F2EE979FF00A59026 /* SplitDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitDiffView.swift; sourceTree = ""; }; - AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntaxHighlighter.swift; sourceTree = ""; }; - AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteManagementView.swift; sourceTree = ""; }; - AC9431952EE97AA500A59026 /* BranchComparisonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchComparisonView.swift; sourceTree = ""; }; - AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = IMPLEMENTATION_ROADMAP.md; sourceTree = ""; }; - AC9431992EE97BBF00A59026 /* ThemeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeManager.swift; sourceTree = ""; }; - AC94319B2EE97BFF00A59026 /* KeyboardShortcutManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardShortcutManager.swift; sourceTree = ""; }; - AC94319D2EE97C3B00A59026 /* MinimapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MinimapView.swift; sourceTree = ""; }; - AC94319F2EE97C8400A59026 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; - AC9431A12EE97CC800A59026 /* FileAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileAnnotationView.swift; sourceTree = ""; }; - AC9431A32EE97D6000A59026 /* BUILD_FIX.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = BUILD_FIX.md; sourceTree = ""; }; - AC9431A52EE97D8000A59026 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; - AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalToolsManager.swift; sourceTree = ""; }; - AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FASE3_PROGRESS.md; sourceTree = ""; }; - AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INTEGRATION_GUIDE.md; sourceTree = ""; }; - AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = REVIEW_GUIDE.md; sourceTree = ""; }; - AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INTEGRATION_CHECKLIST.md; sourceTree = ""; }; - AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FIX_BUILD_NOW.md; sourceTree = ""; }; - AC9431BD2EE9822D00A59026 /* QUICK_START.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = QUICK_START.md; sourceTree = ""; }; - AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteOperationTracker.swift; sourceTree = ""; }; - AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = REMOTE_STATUS_INTEGRATION.md; sourceTree = ""; }; - AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = WARNING_FIXES.md; sourceTree = ""; }; - AC9431C52EED65B400A59026 /* DIFFVIEW_PERFORMANCE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DIFFVIEW_PERFORMANCE.md; sourceTree = ""; }; - ACB688DC2EEE3AA200CCD845 /* DiffOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffOptions.swift; sourceTree = ""; }; - ACB688DD2EEE3AC400CCD845 /* DiffCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffCache.swift; sourceTree = ""; }; - ACB688DE2EEE3B0100CCD845 /* DiffEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffEngine.swift; sourceTree = ""; }; - ACB688DF2EEE3B2A00CCD845 /* DiffEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffEngineTests.swift; sourceTree = ""; }; - ACB688E02EEE3B6000CCD845 /* TiledDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiledDiffView.swift; sourceTree = ""; }; - ACB688E12EEE3B8100CCD845 /* DiffSearchEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffSearchEngine.swift; sourceTree = ""; }; - ACB688E22EEE3BA100CCD845 /* DiffStatusBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffStatusBar.swift; sourceTree = ""; }; - ACC600402F024855005DC34D /* DSIntegrationPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSIntegrationPanel.swift; sourceTree = ""; }; - ACC600412F024855005DC34D /* DSLoginPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSLoginPrompt.swift; sourceTree = ""; }; - ACC600422F024855005DC34D /* DSSettingsSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSSettingsSheet.swift; sourceTree = ""; }; - ACC600442F024855005DC34D /* DSDraggableList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSDraggableList.swift; sourceTree = ""; }; - ACC600452F024855005DC34D /* DSGroupedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSGroupedList.swift; sourceTree = ""; }; - ACC600462F024855005DC34D /* DSInfiniteList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSInfiniteList.swift; sourceTree = ""; }; - ACC600472F024855005DC34D /* DSVirtualizedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSVirtualizedList.swift; sourceTree = ""; }; - ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSCollapsiblePanel.swift; sourceTree = ""; }; - ACC6004A2F024855005DC34D /* DSPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSPanel.swift; sourceTree = ""; }; - ACC6004B2F024855005DC34D /* DSResizablePanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSResizablePanel.swift; sourceTree = ""; }; - ACC6004C2F024855005DC34D /* DSTabPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSTabPanel.swift; sourceTree = ""; }; - ACC6004E2F024855005DC34D /* DSSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSSheet.swift; sourceTree = ""; }; - ACC6004F2F024855005DC34D /* DSTabContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSTabContainer.swift; sourceTree = ""; }; - AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Planner/PlannerPlugin.swift; sourceTree = SOURCE_ROOT; }; - AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/AvatarService.swift; sourceTree = ""; }; - AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AWSCodeBuildService.swift; sourceTree = ""; }; - B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift; sourceTree = ""; }; - B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/GitFlow/GitFlowManager.swift; sourceTree = ""; }; - B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelManager.swift; path = Features/BottomPanel/BottomPanelManager.swift; sourceTree = ""; }; - B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/StagingService.swift; sourceTree = ""; }; - B3798A1846650C01AD285DC8 /* TaigaContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaContentView.swift; path = Features/Taiga/TaigaContentView.swift; sourceTree = ""; }; - B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Notion/NotionPlugin.swift; sourceTree = SOURCE_ROOT; }; - B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift; sourceTree = ""; }; - BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift; sourceTree = SOURCE_ROOT; }; - BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift; sourceTree = ""; }; - BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/TerminalAIService.swift; sourceTree = ""; }; - C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Worktrees/WorktreeListView.swift; sourceTree = ""; }; - C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/WordLevelDiff.swift; sourceTree = ""; }; - C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/StashService.swift; sourceTree = ""; }; - C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/PullRequests/PRListView.swift; sourceTree = ""; }; - C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Settings/SubscriptionView.swift; sourceTree = ""; }; - C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift; sourceTree = ""; }; - C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaViewModel.swift; sourceTree = ""; }; - C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffScrollViews.swift; sourceTree = ""; }; - C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Terminal/TerminalView.swift; sourceTree = ""; }; - C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaIssuesView.swift; path = Features/Taiga/Views/TaigaIssuesView.swift; sourceTree = ""; }; - CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffMinimap.swift; sourceTree = ""; }; - CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Utils/CacheWithTTL.swift; sourceTree = ""; }; - CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Utilities/ModalCoordinator.swift; sourceTree = ""; }; - CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSIcon.swift; sourceTree = SOURCE_ROOT; }; - CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/ContextMenus.swift; sourceTree = ""; }; - D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift; sourceTree = ""; }; - D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSBadge.swift; sourceTree = SOURCE_ROOT; }; - D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSErrorState.swift; sourceTree = SOURCE_ROOT; }; - D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffParser.swift; sourceTree = ""; }; - D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Common/UniversalResizer.swift; sourceTree = ""; }; - D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSListItem.swift; sourceTree = SOURCE_ROOT; }; - D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Linear/LinearPlugin.swift; sourceTree = SOURCE_ROOT; }; - DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/CommitService.swift; sourceTree = ""; }; - DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/GitHooks/GitHooksView.swift; sourceTree = ""; }; - E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/AIService.swift; sourceTree = ""; }; - E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Common/LayoutConstants.swift; sourceTree = ""; }; - E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Stash/StashListView.swift; sourceTree = ""; }; - E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffLineRenderers.swift; sourceTree = ""; }; - EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSToggle.swift; sourceTree = SOURCE_ROOT; }; - ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Worktree.swift; sourceTree = ""; }; - EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaTicketsPanel.swift; sourceTree = ""; }; - F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelResizer.swift; path = Features/BottomPanel/Views/BottomPanelResizer.swift; sourceTree = ""; }; - F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaSharedViews.swift; path = Features/Taiga/Views/TaigaSharedViews.swift; sourceTree = ""; }; - F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaTasksView.swift; path = Features/Taiga/Views/TaigaTasksView.swift; sourceTree = ""; }; - F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/StoreKit/StoreManager.swift; sourceTree = ""; }; - F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnifiedBottomPanel.swift; path = Features/BottomPanel/Views/UnifiedBottomPanel.swift; sourceTree = ""; }; - F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/ContentView.swift; sourceTree = ""; }; - F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Icons/StatusIcon.swift; sourceTree = ""; }; - FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Stash.swift; sourceTree = ""; }; - FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/ShellExecutor.swift; sourceTree = ""; }; - FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift; sourceTree = SOURCE_ROOT; }; - FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/FileViewer/FileContentView.swift; sourceTree = ""; }; - GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/AppTheme.swift; sourceTree = ""; }; - INFO01 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Jira/JiraPanel.swift; sourceTree = ""; }; - JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/JiraService.swift; sourceTree = ""; }; - KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/KeyboardShortcuts.swift; sourceTree = ""; }; - LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Linear/LinearPanel.swift; sourceTree = ""; }; - LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/LinearService.swift; sourceTree = ""; }; - LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/LightweightDiffView.swift; sourceTree = ""; }; - MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Markdown/MarkdownView.swift; sourceTree = ""; }; - MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Markdown/MermaidDiagramView.swift; sourceTree = ""; }; - NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Notion/NotionPanel.swift; sourceTree = ""; }; - NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/NotionService.swift; sourceTree = ""; }; - PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/PatchManipulator.swift; sourceTree = ""; }; - PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Planner/PlannerTasksPanel.swift; sourceTree = ""; }; - PROD01 /* GitMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GitMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; - REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/RepositoryContext.swift; sourceTree = ""; }; - RES001 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - SRC001 /* App/GitMacApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/GitMacApp.swift; sourceTree = ""; }; - UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/UnifiedFileContextMenu.swift; sourceTree = ""; }; - WKFLW001F526F46E3958E34A /* WorkflowsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkflowsView.swift; sourceTree = ""; }; - F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Features/RepoGroups/RepoGroupsService.swift"; sourceTree = ""; }; - 748878172E9B4D15B1366993 /* ComponentCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentCatalog.swift; sourceTree = ""; }; - 2BAB5AFE9928439D8EE9A26F /* GitMac/Features/Jira/JiraContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JiraContentView.swift; sourceTree = ""; }; - 9B693AD0A2D24357974C51C0 /* GitMac/Features/Jira/JiraIssuesList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JiraIssuesList.swift; sourceTree = ""; }; - 82DFFB2CBBE44482A5C7C387 /* GitMac/Features/Jira/JiraLoginPrompt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JiraLoginPrompt.swift; sourceTree = ""; }; - 3C339C9E70FF42748E5B8904 /* GitMac/Features/Jira/JiraSettingsContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JiraSettingsContent.swift; sourceTree = ""; }; - E8F2776E2AA14A848E1224C9 /* GitMac/Features/Linear/LinearContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinearContentView.swift; sourceTree = ""; }; - 9C6AD2BA34E741D6A64F41ED /* GitMac/Features/Notion/NotionContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotionContentView.swift; sourceTree = ""; }; - 65ED7ADF00814187AFA86B50 /* GitMac/Features/Taiga/TaigaContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TaigaContentView.swift; sourceTree = ""; }; - 11AA22BB33CC44DD55EE66FF /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSFilterMenu.swift; sourceTree = ""; }; - 22AA33BB44CC55DD66EE77FF /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSSearchBar.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - FWK001 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - PKG001 /* KeychainAccess in Frameworks */, - PKG002 /* Splash in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 061615B533CC32DE604E5D24 /* UI */ = { - isa = PBXGroup; - children = ( - 748878172E9B4D15B1366993 /* ComponentCatalog.swift */, - - 194DEFF63E9D4C27B198FF5B /* Components */, - 6A2E226D937FB98A3FE278A0 /* Theme */, - ); - path = UI; - sourceTree = ""; - }; - 06983A91035DDA7F7FD10CB8 /* Display */ = { - isa = PBXGroup; - children = ( - 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */, - 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */, - A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */, - D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */, - 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */, - ); - name = Display; - sourceTree = ""; - }; - 0807DEFD2BA4ED674651C935 /* Views */ = { - isa = PBXGroup; - children = ( - 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */, - F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */, - A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */, - F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */, - C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */, - 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */, - ); - name = Views; - sourceTree = ""; - }; - 080F827FCBC2755BF8F41B23 /* Lists */ = { - isa = PBXGroup; - children = ( - A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */, - 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */, - D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */, - 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */, - ); - name = Lists; - sourceTree = ""; - }; - 098C8AC6853F8B819F7C1ABB /* Linear */ = { - isa = PBXGroup; - children = ( - D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */, - ); - name = Linear; - sourceTree = ""; - }; - 0F9F2D5E501D4C4523A80A0C /* Feedback */ = { - isa = PBXGroup; - children = ( - BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */, - 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */, - 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */, - 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */, - ); - name = Feedback; - sourceTree = ""; - }; - 122202BC827A90670787BA7F /* Display */ = { - isa = PBXGroup; - children = ( - 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */, - 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */, - D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */, - 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */, - CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */, - 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */, - ); - name = Display; - sourceTree = ""; - }; - 194DEFF63E9D4C27B198FF5B /* Components */ = { - isa = PBXGroup; - children = ( - 3E6FCD5575134DBFEC63FB50 /* Atoms */, - 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */, - AB8A98491E4F87A127F20E2A /* Molecules */, - E438FEA1651A5E4BE709432B /* Organisms */, - ); - name = Components; - sourceTree = ""; - }; - 2C3CD67873D5AEB2337EB466 /* Lists */ = { - isa = PBXGroup; - children = ( - ); - name = Lists; - sourceTree = ""; - }; - 3E6FCD5575134DBFEC63FB50 /* Atoms */ = { - isa = PBXGroup; - children = ( - F15D2084D4EA5C3563277867 /* Inputs */, - B2F9F7593A8E298C00404A28 /* Buttons */, - 122202BC827A90670787BA7F /* Display */, - 0F9F2D5E501D4C4523A80A0C /* Feedback */, - ); - name = Atoms; - sourceTree = ""; - }; - 3FE0E0E74E8765998AD50CE2 /* PluginSystem */ = { - isa = PBXGroup; - children = ( - 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */, - 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */, - 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */, - ); - name = PluginSystem; - sourceTree = ""; - }; - 5532E83FF675C7A46865EEC2 /* Features */ = { - isa = PBXGroup; - children = ( - D16BE1D3398BD1068630C734 /* Jira */, - F4A15FC3C2AF1135F49E2B33 /* Taiga */, - AFE2CBBCBAFF02C17DF4B1F1 /* Notion */, - 098C8AC6853F8B819F7C1ABB /* Linear */, - 9F93ECF704A7077E5068E9BE /* Planner */, - - 3E673DC0846645FCBBE2567D /* RepoGroups */,); - name = Features; - sourceTree = ""; - }; - 6A2E226D937FB98A3FE278A0 /* Theme */ = { - isa = PBXGroup; - children = ( - 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */, - ); - path = Theme; - sourceTree = ""; - }; - 9F93ECF704A7077E5068E9BE /* Planner */ = { - isa = PBXGroup; - children = ( - AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */, - ); - name = Planner; - sourceTree = ""; - }; - AB8A98491E4F87A127F20E2A /* Molecules */ = { - isa = PBXGroup; - children = ( - 06983A91035DDA7F7FD10CB8 /* Display */, - C734952412915F42A24F7E96 /* Forms */, - 080F827FCBC2755BF8F41B23 /* Lists */, - ); - name = Molecules; - sourceTree = ""; - }; - AC94317C2EE9223600A59026 /* Recovered References */ = { - isa = PBXGroup; - children = ( - CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */, - LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */, - MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */, - MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */, - FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */, - 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */, - E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */, - 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */, - 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */, - 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */, - 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */, - 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */, - 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */, - 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */, - 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */, - F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */, - 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */, - 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */, - A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */, - 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */, - 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */, - 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */, - 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */, - 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */, - C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */, - 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */, - UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */, - 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */, - CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */, - 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */, - 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */, - DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */, - 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */, - AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */, - 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */, - A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */, - B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */, - DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */, - 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */, - C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */, - 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */, - 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */, - A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */, - B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */, - BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */, - E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */, - CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */, - D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */, - C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */, - 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */, - D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */, - 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */, - 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */, - B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */, - C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */, - BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */, - D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */, - 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */, - ); - name = "Recovered References"; - sourceTree = ""; - }; - ACC600432F024855005DC34D /* Integration */ = { - isa = PBXGroup; - children = ( - ACC600402F024855005DC34D /* DSIntegrationPanel.swift */, - ACC600412F024855005DC34D /* DSLoginPrompt.swift */, - ACC600422F024855005DC34D /* DSSettingsSheet.swift */, - ); - path = Integration; - sourceTree = ""; - }; - ACC600482F024855005DC34D /* Lists */ = { - isa = PBXGroup; - children = ( - ACC600442F024855005DC34D /* DSDraggableList.swift */, - ACC600452F024855005DC34D /* DSGroupedList.swift */, - ACC600462F024855005DC34D /* DSInfiniteList.swift */, - ACC600472F024855005DC34D /* DSVirtualizedList.swift */, - ); - path = Lists; - sourceTree = ""; - }; - ACC6004D2F024855005DC34D /* Panels */ = { - isa = PBXGroup; - children = ( - ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */, - ACC6004A2F024855005DC34D /* DSPanel.swift */, - ACC6004B2F024855005DC34D /* DSResizablePanel.swift */, - ACC6004C2F024855005DC34D /* DSTabPanel.swift */, - ); - path = Panels; - sourceTree = ""; - }; - ACC600502F024855005DC34D /* Organisms */ = { - isa = PBXGroup; - children = ( - ACC600432F024855005DC34D /* Integration */, - ACC600482F024855005DC34D /* Lists */, - ACC6004D2F024855005DC34D /* Panels */, - ACC6004E2F024855005DC34D /* DSSheet.swift */, - ACC6004F2F024855005DC34D /* DSTabContainer.swift */, - ); - path = Organisms; - sourceTree = ""; - }; - AFE2CBBCBAFF02C17DF4B1F1 /* Notion */ = { - isa = PBXGroup; - children = ( - B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */, - ); - name = Notion; - sourceTree = ""; - }; - B2F9F7593A8E298C00404A28 /* Buttons */ = { - isa = PBXGroup; - children = ( - 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */, - 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */, - 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */, - 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */, - 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */, - FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */, - ); - name = Buttons; - sourceTree = ""; - }; - C734952412915F42A24F7E96 /* Forms */ = { - isa = PBXGroup; - children = ( - 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */, - 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */, - ); - name = Forms; - sourceTree = ""; - }; - CC4087FD6C87491E4AFED6A6 /* Core */ = { - isa = PBXGroup; - children = ( - 3FE0E0E74E8765998AD50CE2 /* PluginSystem */, - ); - name = Core; - sourceTree = ""; - }; - D16BE1D3398BD1068630C734 /* Jira */ = { - isa = PBXGroup; - children = ( - 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */, - 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */, - ); - name = Jira; - sourceTree = ""; - }; - E438FEA1651A5E4BE709432B /* Organisms */ = { - isa = PBXGroup; - children = ( - ACC600502F024855005DC34D /* Organisms */, - 2C3CD67873D5AEB2337EB466 /* Lists */, - F87ABC0A30217D07D4CA3454 /* Integration */, - ); - name = Organisms; - sourceTree = ""; - }; - F15D2084D4EA5C3563277867 /* Inputs */ = { - isa = PBXGroup; - children = ( - 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */, - 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */, - 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */, - EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */, - 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */, - 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */, - ); - name = Inputs; - sourceTree = ""; - }; - F4A15FC3C2AF1135F49E2B33 /* Taiga */ = { - isa = PBXGroup; - children = ( - C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */, - 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */, - 0807DEFD2BA4ED674651C935 /* Views */, - B3798A1846650C01AD285DC8 /* TaigaContentView.swift */, - ); - name = Taiga; - sourceTree = ""; - }; - F87ABC0A30217D07D4CA3454 /* Integration */ = { - isa = PBXGroup; - children = ( - ); - name = Integration; - sourceTree = ""; - }; - GRP001 /* GitMac */ = { - isa = PBXGroup; - children = ( - SRC001 /* App/GitMacApp.swift */, - F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */, - 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */, - FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */, - 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */, - 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */, - E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */, - 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */, - 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */, - 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */, - 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */, - AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */, - 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */, - 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */, - FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */, - 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */, - 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */, - 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */, - 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */, - ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */, - 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */, - REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */, - PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */, - 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */, - F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */, - 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */, - C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */, - 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */, - A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */, - EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */, - A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */, - C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */, - 653680820091489887257EC3 /* Features/Diff/DiffView.swift */, - B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */, - 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */, - 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */, - 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */, - E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */, - C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */, - A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */, - 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */, - C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */, - 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */, - 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */, - PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */, - LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */, - JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */, - NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */, - LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */, - JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */, - NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */, - AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */, - CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */, - GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */, - LDBTN001F526F46E3958E34A /* UI/Components/LoadingButton.swift */, - KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */, - RES001 /* Assets.xcassets */, - INFO01 /* Info.plist */, - AC94317D2EE96F9100A59026 /* AvatarImageView.swift */, - AC94317F2EE96F9D00A59026 /* PullSheet.swift */, - AC9431812EE96FB400A59026 /* FileBrowserView.swift */, - AC9431832EE9786B00A59026 /* ResetView.swift */, - AC9431852EE9789700A59026 /* RevertView.swift */, - AC9431872EE978E500A59026 /* ReflogView.swift */, - AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */, - AC94318B2EE9795800A59026 /* CommandPalette.swift */, - AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */, - AC94318F2EE979FF00A59026 /* SplitDiffView.swift */, - AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */, - AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */, - AC9431952EE97AA500A59026 /* BranchComparisonView.swift */, - AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */, - AC9431992EE97BBF00A59026 /* ThemeManager.swift */, - AC94319B2EE97BFF00A59026 /* KeyboardShortcutManager.swift */, - AC94319D2EE97C3B00A59026 /* MinimapView.swift */, - AC94319F2EE97C8400A59026 /* SearchView.swift */, - AC9431A12EE97CC800A59026 /* FileAnnotationView.swift */, - AC9431A32EE97D6000A59026 /* BUILD_FIX.md */, - AC9431A52EE97D8000A59026 /* NotificationManager.swift */, - AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */, - AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */, - AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */, - AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */, - AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */, - AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */, - AC9431BD2EE9822D00A59026 /* QUICK_START.md */, - AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */, - AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */, - AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */, - WKFLW001F526F46E3958E34A /* WorkflowsView.swift */, - AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */, - B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */, - 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */, - 42A6E5B72144B52AC053813D /* BottomPanelType.swift */, - F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */, - F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */, - 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */, - 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */, - 061615B533CC32DE604E5D24 /* UI */, - CC4087FD6C87491E4AFED6A6 /* Core */, - 5532E83FF675C7A46865EEC2 /* Features */, - ); - path = GitMac; - sourceTree = ""; - }; - GRP002 /* Products */ = { - isa = PBXGroup; - children = ( - PROD01 /* GitMac.app */, - ); - name = Products; - sourceTree = ""; - }; - ROOT01 = { - isa = PBXGroup; - children = ( - GRP001 /* GitMac */, - GRP002 /* Products */, - AC94317C2EE9223600A59026 /* Recovered References */, - AC9431C52EED65B400A59026 /* DIFFVIEW_PERFORMANCE.md */, - ACB688DC2EEE3AA200CCD845 /* DiffOptions.swift */, - ACB688DD2EEE3AC400CCD845 /* DiffCache.swift */, - ACB688DE2EEE3B0100CCD845 /* DiffEngine.swift */, - ACB688DF2EEE3B2A00CCD845 /* DiffEngineTests.swift */, - ACB688E02EEE3B6000CCD845 /* TiledDiffView.swift */, - ACB688E12EEE3B8100CCD845 /* DiffSearchEngine.swift */, - ACB688E22EEE3BA100CCD845 /* DiffStatusBar.swift */, - ); - sourceTree = ""; - }; - 3E673DC0846645FCBBE2567D /* RepoGroups */ = { - isa = PBXGroup; - children = ( - F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */, - ); - name = RepoGroups; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - TGT001 /* GitMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = CFG002 /* Build configuration list for PBXNativeTarget "GitMac" */; - buildPhases = ( - SRC002 /* Sources */, - FWK001 /* Frameworks */, - RES002 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GitMac; - packageProductDependencies = ( - DEP001 /* KeychainAccess */, - DEP002 /* Splash */, - ); - productName = GitMac; - productReference = PROD01 /* GitMac.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - PRJ001 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; - TargetAttributes = { - TGT001 = { - CreatedOnToolsVersion = 15.0; - }; - }; - }; - buildConfigurationList = CFG001 /* Build configuration list for PBXProject "GitMac" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = ROOT01; - packageReferences = ( - PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */, - PKR002 /* XCRemoteSwiftPackageReference "Splash" */, - ); - productRefGroup = GRP002 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - TGT001 /* GitMac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - RES002 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AA11BB22CC3344DD55EE66FF /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift in Sources */, - AA22BB33CC4455DD66EE77FF /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift in Sources */, - 9E864EB499F54029820F722D /* GitMac/Features/Jira/JiraContentView.swift in Sources */, - 051044BE277D49BF9A932FF2 /* GitMac/Features/Jira/JiraIssuesList.swift in Sources */, - F3790BD2B0FD4D4CB36658CC /* GitMac/Features/Jira/JiraLoginPrompt.swift in Sources */, - B707301E0C13408BBB3CD17A /* GitMac/Features/Jira/JiraSettingsContent.swift in Sources */, - 2E7F77965FAF4325A9AFCEC0 /* GitMac/Features/Linear/LinearContentView.swift in Sources */, - F8FF74927C564D5BAB210C98 /* GitMac/Features/Notion/NotionContentView.swift in Sources */, - 448A954BF47C4C9097A4C3AC /* GitMac/Features/Taiga/TaigaContentView.swift in Sources */, - APP002 /* Assets.xcassets in Resources */, - AC9431A42EE97D6000A59026 /* BUILD_FIX.md in Resources */, - AC9431AA2EE97DE700A59026 /* FASE3_PROGRESS.md in Resources */, - AC9431B82EE980A900A59026 /* INTEGRATION_CHECKLIST.md in Resources */, - AC9431BE2EE9822D00A59026 /* QUICK_START.md in Resources */, - AC9431982EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md in Resources */, - AC9431B02EE97F5B00A59026 /* INTEGRATION_GUIDE.md in Resources */, - AC9431C22EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md in Resources */, - AC9431BA2EE980CD00A59026 /* FIX_BUILD_NOW.md in Resources */, - AC9431C42EE9A33100A59026 /* WARNING_FIXES.md in Resources */, - AC9431B22EE97FAF00A59026 /* REVIEW_GUIDE.md in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - SRC002 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 11412D2CD2554F6880201DCC /* RepoGroupsService.swift in Sources */, - B6FF711E9D904DC5A13E334F /* GitMac/UI/Components/Commit/CommitMessageArea.swift in Sources */, - C17B40AC6D74427DAB28B049 /* GitMac/UI/Components/Common/LayoutConstants.swift in Sources */, - 8AC7D258532342BF841C0A12 /* GitMac/UI/Components/Diff/DiffHunkView.swift in Sources */, - C964E76B6FCE4A16BC3CA967 /* GitMac/UI/Components/Diff/DiffLineView.swift in Sources */, - FFBD69F7105D47AFB9832131 /* GitMac/UI/Components/Diff/DiffStatsView.swift in Sources */, - C8184F3EA7F1402896DD1A5D /* GitMac/UI/Components/Diff/DiffToolbar.swift in Sources */, - 2997ADCD07B2400A84304290 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift in Sources */, - 70D6620C892D488B90479648 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift in Sources */, - F94BB1BCB04F4885BF46F509 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift in Sources */, - 514CC38B4E6146C788C7E04C /* GitMac/UI/Components/FileTree/TreeExpansionState.swift in Sources */, - B77A120C3CF2461C8B4B09BE /* GitMac/UI/Components/Icons/StatusIcon.swift in Sources */, - D7C739877F294D99869D0B8A /* GitMac/UI/Components/Layout/FileListSection.swift in Sources */, - 10722C36120E452A954A5C34 /* GitMac/UI/Components/Layout/SectionHeader.swift in Sources */, - AC0864B0C8C2443BBB705DE5 /* GitMac/UI/Components/Layout/Separator.swift in Sources */, - 077C9761271C430390829DC4 /* GitMac/UI/Components/Rows/BaseRow.swift in Sources */, - 9514CACB50D94A6AB2DD6683 /* GitMac/UI/Components/Rows/BranchRow.swift in Sources */, - B6189D2FE47A4D7EA34D9F06 /* GitMac/UI/Components/Rows/FileRow.swift in Sources */, - 23F59A5692CE4B529CE47DF8 /* GitMac/UI/Components/Rows/ListRow.swift in Sources */, - 8C04729C0FB24B649A27A8F3 /* GitMac/UI/Components/Rows/RowProtocols.swift in Sources */, - 8E589E6FF70C /* GitMac/Features/Diff/WordLevelDiff.swift in Sources */, - 2F3531A32151515A63679091 /* GitMac/UI/Components/Icons/FileTypeIcon.swift in Sources */, - AC9431802EE96F9D00A59026 /* PullSheet.swift in Sources */, - APP001 /* App/GitMacApp.swift in Sources */, - 8252E184E6A24337B4EE1242 /* Core/StoreKit/StoreManager.swift in Sources */, - A29EF1F3B98D4EE1A290464F /* Core/Utils/KeychainManager.swift in Sources */, - 73C8DBE08FC24847B16135A5 /* Core/Utils/ShellExecutor.swift in Sources */, - AC9431822EE96FB400A59026 /* FileBrowserView.swift in Sources */, - C1432F5677FB440BBBCE1D37 /* Core/Utils/FileWatcher.swift in Sources */, - CACHETTL1B526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift in Sources */, - F915E96872D140E997144CF7 /* Core/Services/GitService.swift in Sources */, - 2ECCBA94025D46619633D059 /* Core/Services/AIService.swift in Sources */, - 1705954E5B714752B9B1D090 /* Core/Services/GitHubService.swift in Sources */, - B8B777FE4088470CBA4427C7 /* Core/Services/WorkspaceSettings.swift in Sources */, - AC9431862EE9789700A59026 /* RevertView.swift in Sources */, - 6A63391DAEC9454891091E35 /* Core/Services/MicrosoftPlannerService.swift in Sources */, - AC94319A2EE97BBF00A59026 /* ThemeManager.swift in Sources */, - 504DCBFB526F46E3958E34A3 /* Core/Services/GitHubOAuth.swift in Sources */, - A9FA029924774C729FDE3F91 /* Core/Services/UndoManager.swift in Sources */, - 227AC51E448C4CDFBE937534 /* Core/Services/MicrosoftOAuth.swift in Sources */, - D5351C2C701B487793E0C515 /* Core/Services/TaigaService.swift in Sources */, - 5A431653DA454AE88ED73FFD /* Core/Git/Stash.swift in Sources */, - 23CF2BC056564115AC922309 /* Core/Git/Remote.swift in Sources */, - 9DB2758C88EE487DBFB9906B /* Core/Git/Branch.swift in Sources */, - C8E01AA078734F7686AD1DB8 /* Core/Git/Commit.swift in Sources */, - AC9431922EE97A3700A59026 /* SyntaxHighlighter.swift in Sources */, - B288434E27474BCE8B605D16 /* Core/Git/Repository.swift in Sources */, - 47A04D733A15416C9417CECA /* Core/Git/Worktree.swift in Sources */, - 93B29E6BD2524365845BFE55 /* Core/Git/GitEngine.swift in Sources */, - REPOCTX01B526F46E3958E34 /* Core/Git/RepositoryContext.swift in Sources */, - PATCHMAN01B526F46E3958E34 /* Core/Git/PatchManipulator.swift in Sources */, - A44D05C9CC5F4468B8898071 /* Core/Git/Tag.swift in Sources */, - B22085A223F142A680B2B116 /* App/ContentView.swift in Sources */, - 3410F14BD12B49D28665E2A3 /* Features/Settings/SettingsView.swift in Sources */, - C539555536ED4764ACF01929 /* Features/Settings/SubscriptionView.swift in Sources */, - 22156E10FB604F4E87EA5C9D /* Features/Staging/StagingAreaView.swift in Sources */, - B3A46B7AB4C14FE7ABB248DE /* Features/CommitGraph/CommitGraphView.swift in Sources */, - AC9431A62EE97D8000A59026 /* NotificationManager.swift in Sources */, - 194BFB877B0C483691B960B9 /* Features/Taiga/TaigaTicketsPanel.swift in Sources */, - 681023EDB4F3424E8C2A5752 /* Features/CherryPick/CherryPickView.swift in Sources */, - B988102E6AE44D00BD7465C4 /* Features/Terminal/TerminalView.swift in Sources */, - 0F1E7E1C27EB47F29936A82C /* Features/Diff/DiffView.swift in Sources */, - AC9431A02EE97C8400A59026 /* SearchView.swift in Sources */, - LWDIFF01B526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift in Sources */, - AC94318A2EE9791900A59026 /* InteractiveRebaseView.swift in Sources */, - MDVIEW01B526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift in Sources */, - MERMAID1B526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift in Sources */, - FLVIEW01B526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift in Sources */, - BF29CA1FCD714F51A1F45AB0 /* Features/GitFlow/GitFlowManager.swift in Sources */, - AD16C2E522DD4E7A9F2DA2E6 /* Features/Tags/TagListView.swift in Sources */, - 8E210720DA1047ECA734C786 /* Features/Launchpad/LaunchpadView.swift in Sources */, - 293C2B8DBF0A4C39A63D607E /* Features/Remotes/RemoteListView.swift in Sources */, - 5F3CE842686C4E37811983FA /* Features/Stash/StashListView.swift in Sources */, - AC94318C2EE9795800A59026 /* CommandPalette.swift in Sources */, - AC94318E2EE979A600A59026 /* FuzzyFileFinder.swift in Sources */, - AC94319E2EE97C3B00A59026 /* MinimapView.swift in Sources */, - 1BCDD11EE839484DB0C0BA9F /* Features/Worktrees/WorktreeListView.swift in Sources */, - 4B6E9C051D7A4D02A466FE4E /* Features/History/HistoryView.swift in Sources */, - AC9431A82EE97DB400A59026 /* ExternalToolsManager.swift in Sources */, - 2DE7FB809DE64F96916D75A1 /* Features/Branches/BranchListView.swift in Sources */, - 0D3D055176FF4E77AF97C3F9 /* Features/PullRequests/PRListView.swift in Sources */, - 2FE4F60BF0FD4078AFA3F8BB /* Features/Issues/IssueListView.swift in Sources */, - C3D6450D4DF146A0A1893725 /* Features/MergeConflict/ConflictResolverView.swift in Sources */, - PLNR001B526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift in Sources */, - LNRSVC01B526F46E3958E34A /* Core/Services/LinearService.swift in Sources */, - JIRASVC1B526F46E3958E34A /* Core/Services/JiraService.swift in Sources */, - NOTNSVC1B526F46E3958E34A /* Core/Services/NotionService.swift in Sources */, - LNRPNL01B526F46E3958E34A /* Features/Linear/LinearPanel.swift in Sources */, - JIRAPNL1B526F46E3958E34A /* Features/Jira/JiraPanel.swift in Sources */, - AC9431842EE9786B00A59026 /* ResetView.swift in Sources */, - NOTNPNL1B526F46E3958E34A /* Features/Notion/NotionPanel.swift in Sources */, - AC9431C02EE99A4800A59026 /* RemoteOperationTracker.swift in Sources */, - ACC600512F024855005DC34D /* DSVirtualizedList.swift in Sources */, - ACC600522F024855005DC34D /* DSPanel.swift in Sources */, - ACC600532F024855005DC34D /* DSLoginPrompt.swift in Sources */, - ACC600542F024855005DC34D /* DSResizablePanel.swift in Sources */, - ACC600552F024855005DC34D /* DSIntegrationPanel.swift in Sources */, - ACC600562F024855005DC34D /* DSInfiniteList.swift in Sources */, - ACC600572F024855005DC34D /* DSTabContainer.swift in Sources */, - ACC600582F024855005DC34D /* DSSettingsSheet.swift in Sources */, - ACC600592F024855005DC34D /* DSSheet.swift in Sources */, - ACC6005A2F024855005DC34D /* DSTabPanel.swift in Sources */, - ACC6005B2F024855005DC34D /* DSDraggableList.swift in Sources */, - ACC6005C2F024855005DC34D /* DSGroupedList.swift in Sources */, - ACC6005D2F024855005DC34D /* DSCollapsiblePanel.swift in Sources */, - WKFLW001B526F46E3958E34A /* WorkflowsView.swift in Sources */, - AWSCB001B526F46E3958E34A /* AWSCodeBuildService.swift in Sources */, - AVTRSVC1B526F46E3958E34A /* Core/Services/AvatarService.swift in Sources */, - AC9431942EE97A6D00A59026 /* RemoteManagementView.swift in Sources */, - CTXMNU01B526F46E3958E34A /* UI/Components/ContextMenus.swift in Sources */, - GKTHEME1B526F46E3958E34A /* UI/Components/AppTheme.swift in Sources */, - AC9431882EE978E500A59026 /* ReflogView.swift in Sources */, - LDBTN001B526F46E3958E34A /* UI/Components/LoadingButton.swift in Sources */, - KBSHRT01B526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift in Sources */, - UNIFCTX001B526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift in Sources */, - D3881EDC974B4F1B953A71DF /* GitMac/GitOperationHandler.swift in Sources */, - C0FCA2D59D0B4674801C30B7 /* GitMac/UI/Utilities/ModalCoordinator.swift in Sources */, - 33E17B57FA9D4CA1B3B708A3 /* GitMac/Core/Models/GitHook.swift in Sources */, - 608D9FA09DC9438CB9AEC4F8 /* GitMac/Core/Services/GitHooksService.swift in Sources */, - DCA2305BB8A842369E2DFDE0 /* GitMac/Features/GitHooks/GitHooksView.swift in Sources */, - 65C6D7B1D3BC4C46804FBAC2 /* GitMac/Core/Models/GitSubmodule.swift in Sources */, - CF2B788DBC9C46B8AD5689DB /* GitMac/Core/Services/GitSubmoduleService.swift in Sources */, - 7DDF3B6AB1CD4A298AC023EE /* GitMac/Features/Submodules/SubmoduleView.swift in Sources */, - 10149A8AA816427784F3917E /* GitMac/Core/Services/Specialized/BranchService.swift in Sources */, - 0F6D0B17E4F94686B4D3581E /* GitMac/Core/Services/Specialized/StagingService.swift in Sources */, - DB71F6B7480346E2A13CDA2D /* GitMac/Core/Services/Specialized/CommitService.swift in Sources */, - E750BCECFCF5443488BB893A /* GitMac/Core/Services/Specialized/RemoteService.swift in Sources */, - 8C670A9D38474274A04AFFD8 /* GitMac/Core/Services/Specialized/StashService.swift in Sources */, - 0B110979D687480F9568261C /* GitMac/Core/Services/Specialized/TagService.swift in Sources */, - F81A394FC5284A539A11879C /* GitMac/Core/Services/Specialized/MergeService.swift in Sources */, - 071E6F3C86BA418CBAAABC10 /* GitMac/Core/Services/Specialized/DiffService.swift in Sources */, - FF97BDC528EB4762A9D35B04 /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift in Sources */, - F446CD9EB8254FDDBC44396D /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift in Sources */, - 3DF2C65DA1D046C6A657B6F5 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift in Sources */, - 6377E846CB2F4BA2B9E7E454 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift in Sources */, - 128A13B3887B4109A5059EF4 /* GitMac/Features/Diff/Renderers/DiffParser.swift in Sources */, - AEFDAA89AAEB49EA93E09E1A /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift in Sources */, - 3B202A05F8024888BF8386BE /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift in Sources */, - D05B742B6423469E806FD3B1 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift in Sources */, - 3883439F563C40B485F460F5 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift in Sources */, - 5CC69E076E264870AA0C7F38 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift in Sources */, - DED68D219BE1413499206E43 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift in Sources */, - 693A5D442AF846DD93792B19 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift in Sources */, - C748B34DF85B4250B12ADABE /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift in Sources */, - C8DF98EC71AC165EDBF9F79E /* BottomPanelManager.swift in Sources */, - 7B78FA5E545C1AA746771F1A /* BottomPanelTab.swift in Sources */, - 2B9950663DDB76A17AD4BFA9 /* BottomPanelType.swift in Sources */, - 14251E68A10431607FD81BED /* BottomPanelResizer.swift in Sources */, - 7C513261CA64EE5CB89C0DD8 /* UnifiedBottomPanel.swift in Sources */, - AADA43DBCE496DD142441A23 /* BottomPanelContent.swift in Sources */, - 8027AA858E2013D7F57DE99A /* BottomPanelTabBar.swift in Sources */, - 330ACD6D6FB94B468ECA4FA0 /* GitMac/UI/Components/Common/UniversalResizer.swift in Sources */, - EE253019E62CF52CDFFEC69A /* DesignTokens.swift in Sources */, - 606A08D80271F6F8F2CE3A15 /* GitMac/UI/Components/ComponentCatalog.swift in Sources */, - ED061CB6EEEE5AF4D74E749D /* GitMac/Core/PluginSystem/IntegrationPlugin.swift in Sources */, - F706F47EC2E998C18214DBD8 /* GitMac/Core/PluginSystem/IntegrationViewModel.swift in Sources */, - 3780CFA63E8FBAB8DB262C60 /* GitMac/Core/PluginSystem/PluginRegistry.swift in Sources */, - B792010810824E7B2933630E /* GitMac/Features/Jira/JiraViewModel.swift in Sources */, - 5593E25F2327E846A0FEEDF2 /* Features/Taiga/TaigaViewModel.swift in Sources */, - 025153B6DF9247DD577BB90D /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift in Sources */, - 4678F616E4B627558CE1D996 /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift in Sources */, - 1E0AB440EFC701900B322297 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift in Sources */, - A56BA8CC4CB25CC4F77D5B20 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift in Sources */, - AA12670EFE8FCC58340FC75E /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift in Sources */, - 011EEBA959D2683E15C23AE0 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift in Sources */, - D5A8566ED7F1576C0C1F2CF3 /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift in Sources */, - E3F494D2DF37C541988BE1FD /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift in Sources */, - 6700C7C42963864A6E288032 /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift in Sources */, - 18133BDB02AD310F3DCD933A /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift in Sources */, - 9254A96CA98A61C1EC0435B5 /* GitMac/UI/Components/Atoms/Display/DSText.swift in Sources */, - 90E17B673646FBB941792FEB /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift in Sources */, - 870022C6A156528820E52A04 /* GitMac/UI/Components/Atoms/Display/DSBadge.swift in Sources */, - 91E03468A5173B0AEC039B40 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift in Sources */, - 1E8CDFA5E335FBCBEAA61B45 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift in Sources */, - C539F53A651A0250BCAA9015 /* GitMac/UI/Components/Cards/CardStyle.swift in Sources */, - E03E61A15F828ADE3955FC07 /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift in Sources */, - A6F51E6777487026188DD38D /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift in Sources */, - 411EE8E24820B19E458C98EA /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift in Sources */, - 44D2EEB68993CA4714674E6A /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift in Sources */, - 05BD9B5EFCE2EF13BE0D8785 /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift in Sources */, - BD25E53A92994727308E78E1 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift in Sources */, - B4DA26C56859D2E184D7E860 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift in Sources */, - A297B77215ADAA3F996C4CC2 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift in Sources */, - 2E4FFFDFAC66F10402025F5B /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift in Sources */, - ED6FCEB928FF0E3EE8308D26 /* GitMac/UI/Components/Molecules/Display/DSHeader.swift in Sources */, - 13B6C91AEA8E670BB2357C82 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift in Sources */, - 2B20A8BB42C6596D5F938307 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift in Sources */, - BD7718FD3031E989055C841C /* GitMac/Features/Notion/NotionPlugin.swift in Sources */, - C6F50D7463C0809C142616EE /* GitMac/Features/Linear/LinearPlugin.swift in Sources */, - 6A93112D00D09D85BC817378 /* GitMac/Features/Jira/JiraPlugin.swift in Sources */, - C64FAAF81040CB6F41F12CFD /* Features/Taiga/TaigaPlugin.swift in Sources */, - AE73EFC4B423FEF2DF409575 /* GitMac/Features/Planner/PlannerPlugin.swift in Sources */, - CE6DC227F90A9E0F084729FC /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift in Sources */, - 39F2E859A621E04E59338150 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift in Sources */, - 7F639A2DCE90F380654018C2 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift in Sources */, - 1AC1766730959255403C4EA2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift in Sources */, - 692C9ED8C703198612A88D80 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift in Sources */, - B38FE133F96B4801B072C31A /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift in Sources */, - E5FD5D5C1CC70A44623C5E5B /* TaigaLoginPrompt.swift in Sources */, - 854B11941BF245638BA20FDB /* TaigaSharedViews.swift in Sources */, - F7B1EE9C38ADA4FC61EEBD64 /* TaigaUserStoriesView.swift in Sources */, - E63C04837ABDB169AC668FA7 /* TaigaTasksView.swift in Sources */, - 2A3290BA1E9AA18CED1A3817 /* TaigaIssuesView.swift in Sources */, - 292240020C0CCE4C28679261 /* TaigaEpicsView.swift in Sources */, - AE0A7C8E9DD312717EFA13E4 /* TaigaContentView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - DBG001 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 14.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG GHOSTTY_AVAILABLE $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - DBG002 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = GitMac/GitMac.entitlements; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = ""; - ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks", - ); - GENERATE_INFOPLIST_FILE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64/Headers", - ); - INFOPLIST_FILE = GitMac/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-lc++", - "-lghostty", - "-framework", - Metal, - "-framework", - CoreText, - "-framework", - Carbon, - "-framework", - IOKit, - ); - PRODUCT_BUNDLE_IDENTIFIER = com.gitmac.app; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "GitMac/GitMac-Bridging-Header.h"; - SWIFT_VERSION = 6.0; - }; - name = Debug; - }; - REL001 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - "INSTALL_PATH[sdk=macosx*]" = ""; - MACOSX_DEPLOYMENT_TARGET = 14.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "GHOSTTY_AVAILABLE $(inherited)"; - SWIFT_COMPILATION_MODE = wholemodule; - }; - name = Release; - }; - REL002 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = GitMac/GitMac.entitlements; - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = ""; - ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks", - ); - GENERATE_INFOPLIST_FILE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64/Headers", - ); - INFOPLIST_FILE = GitMac/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-lc++", - "-lghostty", - "-framework", - Metal, - "-framework", - CoreText, - "-framework", - Carbon, - "-framework", - IOKit, - ); - PRODUCT_BUNDLE_IDENTIFIER = com.gitmac.app; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "GitMac/GitMac-Bridging-Header.h"; - SWIFT_VERSION = 6.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - CFG001 /* Build configuration list for PBXProject "GitMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DBG001 /* Debug */, - REL001 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CFG002 /* Build configuration list for PBXNativeTarget "GitMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DBG002 /* Debug */, - REL002 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.2.2; - }; - }; - PKR002 /* XCRemoteSwiftPackageReference "Splash" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/JohnSundell/Splash.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.16.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - DEP001 /* KeychainAccess */ = { - isa = XCSwiftPackageProductDependency; - package = PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */; - productName = KeychainAccess; - }; - DEP002 /* Splash */ = { - isa = XCSwiftPackageProductDependency; - package = PKR002 /* XCRemoteSwiftPackageReference "Splash" */; - productName = Splash; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = PRJ001 /* Project object */; -} diff --git a/GitMac.xcodeproj/project.pbxproj.backup2 b/GitMac.xcodeproj/project.pbxproj.backup2 index cd76857..258bdca 100644 --- a/GitMac.xcodeproj/project.pbxproj.backup2 +++ b/GitMac.xcodeproj/project.pbxproj.backup2 @@ -7,464 +7,777 @@ objects = { /* Begin PBXBuildFile section */ - 011EEBA959D2683E15C23AE0 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */; }; - 025153B6DF9247DD577BB90D /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */; }; - 05BD9B5EFCE2EF13BE0D8785 /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */; }; - 071E6F3C86BA418CBAAABC10 /* GitMac/Core/Services/Specialized/DiffService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */; }; - 077C9761271C430390829DC4 /* GitMac/UI/Components/Rows/BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */; }; - 0B110979D687480F9568261C /* GitMac/Core/Services/Specialized/TagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */; }; - 0D3D055176FF4E77AF97C3F9 /* Features/PullRequests/PRListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */; }; - 0D6F81FC202F4A445EB2EEAC /* GitMac/UI/Components/Search/FilterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2368B43F70049E34A0D255DC /* GitMac/UI/Components/Search/FilterMenu.swift */; }; - 0F1E7E1C27EB47F29936A82C /* Features/Diff/DiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 653680820091489887257EC3 /* Features/Diff/DiffView.swift */; }; - 0F6D0B17E4F94686B4D3581E /* GitMac/Core/Services/Specialized/StagingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */; }; - 10149A8AA816427784F3917E /* GitMac/Core/Services/Specialized/BranchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */; }; - 10722C36120E452A954A5C34 /* GitMac/UI/Components/Layout/SectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */; }; - 128A13B3887B4109A5059EF4 /* GitMac/Features/Diff/Renderers/DiffParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */; }; - 13B6C91AEA8E670BB2357C82 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */; }; - 14251E68A10431607FD81BED /* BottomPanelResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */; }; - 1705954E5B714752B9B1D090 /* Core/Services/GitHubService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */; }; - 18133BDB02AD310F3DCD933A /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */; }; - 194BFB877B0C483691B960B9 /* Features/Taiga/TaigaTicketsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */; }; - 1AC1766730959255403C4EA2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */; }; - 1BCDD11EE839484DB0C0BA9F /* Features/Worktrees/WorktreeListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */; }; - 1E0AB440EFC701900B322297 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */; }; - 1E8CDFA5E335FBCBEAA61B45 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */; }; - 22156E10FB604F4E87EA5C9D /* Features/Staging/StagingAreaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */; }; - 227AC51E448C4CDFBE937534 /* Core/Services/MicrosoftOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */; }; - 23CF2BC056564115AC922309 /* Core/Git/Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */; }; - 23F59A5692CE4B529CE47DF8 /* GitMac/UI/Components/Rows/ListRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */; }; - 292240020C0CCE4C28679261 /* TaigaEpicsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */; }; - 293C2B8DBF0A4C39A63D607E /* Features/Remotes/RemoteListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */; }; - 2997ADCD07B2400A84304290 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */; }; - 2A3290BA1E9AA18CED1A3817 /* TaigaIssuesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */; }; - 2B20A8BB42C6596D5F938307 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */; }; - 2B9950663DDB76A17AD4BFA9 /* BottomPanelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A6E5B72144B52AC053813D /* BottomPanelType.swift */; }; - 2DE7FB809DE64F96916D75A1 /* Features/Branches/BranchListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */; }; - 2E4FFFDFAC66F10402025F5B /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */; }; - 2ECCBA94025D46619633D059 /* Core/Services/AIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */; }; - 2F3531A32151515A63679091 /* GitMac/UI/Components/Icons/FileTypeIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */; }; - 2FE4F60BF0FD4078AFA3F8BB /* Features/Issues/IssueListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */; }; - 330ACD6D6FB94B468ECA4FA0 /* GitMac/UI/Components/Common/UniversalResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */; }; - 33E17B57FA9D4CA1B3B708A3 /* GitMac/Core/Models/GitHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */; }; - 3410F14BD12B49D28665E2A3 /* Features/Settings/SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */; }; - 3780CFA63E8FBAB8DB262C60 /* GitMac/Core/PluginSystem/PluginRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */; }; - 3883439F563C40B485F460F5 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */; }; - 39F2E859A621E04E59338150 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */; }; - 3B202A05F8024888BF8386BE /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */; }; - 3DF2C65DA1D046C6A657B6F5 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */; }; - 411EE8E24820B19E458C98EA /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */; }; - 44D2EEB68993CA4714674E6A /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */; }; - 4678F616E4B627558CE1D996 /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */; }; - 47A04D733A15416C9417CECA /* Core/Git/Worktree.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */; }; - 4B6E9C051D7A4D02A466FE4E /* Features/History/HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */; }; - 504DCBFB526F46E3958E34A3 /* Core/Services/GitHubOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */; }; - 514CC38B4E6146C788C7E04C /* GitMac/UI/Components/FileTree/TreeExpansionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */; }; - 5593E25F2327E846A0FEEDF2 /* Features/Taiga/TaigaViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */; }; - 5A431653DA454AE88ED73FFD /* Core/Git/Stash.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */; }; - 5CC69E076E264870AA0C7F38 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */; }; - 5F3CE842686C4E37811983FA /* Features/Stash/StashListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */; }; - 606A08D80271F6F8F2CE3A15 /* GitMac/UI/Components/ComponentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */; }; - 608D9FA09DC9438CB9AEC4F8 /* GitMac/Core/Services/GitHooksService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */; }; - 6377E846CB2F4BA2B9E7E454 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */; }; - 65C6D7B1D3BC4C46804FBAC2 /* GitMac/Core/Models/GitSubmodule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */; }; - 6700C7C42963864A6E288032 /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */; }; - 681023EDB4F3424E8C2A5752 /* Features/CherryPick/CherryPickView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */; }; - 692C9ED8C703198612A88D80 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */; }; - 693A5D442AF846DD93792B19 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */; }; - 6A63391DAEC9454891091E35 /* Core/Services/MicrosoftPlannerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */; }; - 6A93112D00D09D85BC817378 /* GitMac/Features/Jira/JiraPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */; }; - 70D6620C892D488B90479648 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */; }; - 73C8DBE08FC24847B16135A5 /* Core/Utils/ShellExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */; }; - 74A3A3F1A4C6475889D05E50 /* GitMac/UI/Components/Search/SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D1161872BBC40C4A645C204 /* GitMac/UI/Components/Search/SearchBar.swift */; }; - 7B78FA5E545C1AA746771F1A /* BottomPanelTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */; }; - 7C513261CA64EE5CB89C0DD8 /* UnifiedBottomPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */; }; - 7DDF3B6AB1CD4A298AC023EE /* GitMac/Features/Submodules/SubmoduleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */; }; - 7F639A2DCE90F380654018C2 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */; }; - 8027AA858E2013D7F57DE99A /* BottomPanelTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */; }; - 8252E184E6A24337B4EE1242 /* Core/StoreKit/StoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */; }; - 854B11941BF245638BA20FDB /* TaigaSharedViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */; }; - 870022C6A156528820E52A04 /* GitMac/UI/Components/Atoms/Display/DSBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */; }; - 8AC7D258532342BF841C0A12 /* GitMac/UI/Components/Diff/DiffHunkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */; }; - 8C04729C0FB24B649A27A8F3 /* GitMac/UI/Components/Rows/RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */; }; - 8C670A9D38474274A04AFFD8 /* GitMac/Core/Services/Specialized/StashService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */; }; - 8E210720DA1047ECA734C786 /* Features/Launchpad/LaunchpadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */; }; - 8E589E6FF70C /* GitMac/Features/Diff/WordLevelDiff.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */; }; - 90E17B673646FBB941792FEB /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */; }; - 91E03468A5173B0AEC039B40 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */; }; - 9254A96CA98A61C1EC0435B5 /* GitMac/UI/Components/Atoms/Display/DSText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */; }; - 93B29E6BD2524365845BFE55 /* Core/Git/GitEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */; }; - 9514CACB50D94A6AB2DD6683 /* GitMac/UI/Components/Rows/BranchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */; }; - 9DB2758C88EE487DBFB9906B /* Core/Git/Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */; }; - A297B77215ADAA3F996C4CC2 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */; }; - A29EF1F3B98D4EE1A290464F /* Core/Utils/KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */; }; - A44D05C9CC5F4468B8898071 /* Core/Git/Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */; }; - A56BA8CC4CB25CC4F77D5B20 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */; }; - A6F51E6777487026188DD38D /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */; }; - A9FA029924774C729FDE3F91 /* Core/Services/UndoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */; }; - AA12670EFE8FCC58340FC75E /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */; }; - AADA43DBCE496DD142441A23 /* BottomPanelContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */; }; - AC0864B0C8C2443BBB705DE5 /* GitMac/UI/Components/Layout/Separator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */; }; - AC9431802EE96F9D00A59026 /* PullSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94317F2EE96F9D00A59026 /* PullSheet.swift */; }; - AC9431822EE96FB400A59026 /* FileBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431812EE96FB400A59026 /* FileBrowserView.swift */; }; - AC9431842EE9786B00A59026 /* ResetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431832EE9786B00A59026 /* ResetView.swift */; }; - AC9431862EE9789700A59026 /* RevertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431852EE9789700A59026 /* RevertView.swift */; }; - AC9431882EE978E500A59026 /* ReflogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431872EE978E500A59026 /* ReflogView.swift */; }; - AC94318A2EE9791900A59026 /* InteractiveRebaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */; }; - AC94318C2EE9795800A59026 /* CommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94318B2EE9795800A59026 /* CommandPalette.swift */; }; - AC94318E2EE979A600A59026 /* FuzzyFileFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */; }; - AC9431922EE97A3700A59026 /* SyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */; }; - AC9431942EE97A6D00A59026 /* RemoteManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */; }; + 011EEBA959D2683E15C23AE0 /* DSCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE61B5268D38F24336EF3822 /* DSCloseButton.swift */; }; + 0179E319032D3C6E6CA403D8 /* Stash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741B533442FCDD65DEE553DA /* Stash.swift */; }; + 01C51A3BA0BBD95C872BC730 /* PatchManipulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD96131AC7ED8E7F29D35CB6 /* PatchManipulator.swift */; }; + 01E488829F7F4DA2C7EFE01C /* BranchComparisonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BA801C0F45F514B99B0554 /* BranchComparisonView.swift */; }; + 025153B6DF9247DD577BB90D /* DSTabButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 268952AE4D12EAE5E4A47B3A /* DSTabButton.swift */; }; + 03E6239ED34114F755A0CD88 /* GitMacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97396DC70529FC8190378B29 /* GitMacApp.swift */; }; + 05BD9B5EFCE2EF13BE0D8785 /* DSExpandableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28CF794CA5CBA4509C1129DB /* DSExpandableItem.swift */; }; + 05C72084337EFE72DF6DAA39 /* DiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8E11127F294B1C3EB7DA927 /* DiffView.swift */; }; + 0636C166410264DDE6B0E535 /* DiffSearchEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9242EE99EDC7C5261B2CE9A /* DiffSearchEngine.swift */; }; + 06AB4CEC3FDEFE8695F56007 /* DiffService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EA0C9DF38025EE57835ABB5 /* DiffService.swift */; }; + 085F6910CF88FEBE9B2FA7E7 /* Separator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7185C6D6E41796EB55EEF098 /* Separator.swift */; }; + 0DB14192B98FCE46D804E26B /* TerminalNLTranslationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56BCC2A0CBE440FE161710C /* TerminalNLTranslationService.swift */; }; + 0DB645D5AAE7FFC0E503241D /* AIServiceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38AF44C8ADA6FAF518572B88 /* AIServiceExtensions.swift */; }; + 0E632C69DE3C7FEB51B55B7C /* FileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12E643D92471924D88FBEFE /* FileRow.swift */; }; + 0ED6500CDF7088D37F13E92E /* StateManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 019084753E518DA25F69140E /* StateManagement.swift */; }; + 0F0392D16729D25A02FA61DF /* GitHooksComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625A6458860C14BBBAFB1A1F /* GitHooksComponents.swift */; }; + 0F1D5485A078C2EB220F3DD5 /* FileBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA7B4BEC591DFBFD7420A56D /* FileBrowserView.swift */; }; + 114B7FDF9FFDCCB629DEDB2F /* TerminalNLInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C639B695B6861F665F5E095 /* TerminalNLInputView.swift */; }; + 11729BCEFFC83646B0F8568C /* ActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31850924BB032CD7AAE897D5 /* ActionButton.swift */; }; + 135EF951BE46B93A0B97306C /* StagingAreaPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FF2714B9F2DB8A978C0EF8 /* StagingAreaPanel.swift */; }; + 139271C1E6D2004870679E7A /* FileAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A088455C222CD24BD8A385 /* FileAnnotationView.swift */; }; + 13B6C91AEA8E670BB2357C82 /* DSErrorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19D7A85D4110AB3954044F9 /* DSErrorState.swift */; }; + 142D69BCE5234CFD085F69CB /* PRListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3CAA4AAC09839FD89D948B /* PRListView.swift */; }; + 1636BF6E95E6083C096D2BF5 /* BranchPanelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1959EDC993C5EBC8C305A4F /* BranchPanelView.swift */; }; + 16FE878B5150049FCF623EDD /* GitHooksService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8A795E6B8F62D83A911CA9 /* GitHooksService.swift */; }; + 1737047D3D397E490A04F82E /* StagingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 592CDACB1F95C1AFF782008E /* StagingService.swift */; }; + 173F4FE19F91D1E4447F9461 /* PromptTemplateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2E7451DB3B6F1CB079757B0 /* PromptTemplateManager.swift */; }; + 1810AA298FCF14BF6445D6AB /* EnhancedTerminalPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451F64E5457594941DF51A31 /* EnhancedTerminalPanel.swift */; }; + 18133BDB02AD310F3DCD933A /* DSSkeletonBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BF4669D757C60A0A258549 /* DSSkeletonBox.swift */; }; + 188CCF984171708DBB39331B /* TaigaService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C03FD5905DF5162D37E89E /* TaigaService.swift */; }; + 1A789183A1C3E75EEA931501 /* EmbeddedTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7F82ACD609B8D561720E7D /* EmbeddedTerminalView.swift */; }; + 1AC1766730959255403C4EA2 /* DSToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAD36D44E199613FD60C7B2 /* DSToggle.swift */; }; + 1B17CEEE0F5A96D79AE531C6 /* ListRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F045ABAFE63E9A78313271A /* ListRow.swift */; }; + 1B3AC04978A2FEFCB03188A5 /* StagingComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA39C01D990E7F7EFCCDFE23 /* StagingComponents.swift */; }; + 1BB7E872B52459C8C2FC36AF /* AppTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741C54327F7D0A9ED06C024F /* AppTheme.swift */; }; + 1C46F1BA5158A592D442F839 /* DiffParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8FB12219D2488819C343911 /* DiffParser.swift */; }; + 1D63613571170159A5704573 /* ExternalToolsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CB34938E677983AF18543E /* ExternalToolsManager.swift */; }; + 1E0AB440EFC701900B322297 /* DSToolbarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAB74E609D51B22B8049D13 /* DSToolbarButton.swift */; }; + 1E8CDFA5E335FBCBEAA61B45 /* DSIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC2D84E539F3E4F59585DB1 /* DSIcon.swift */; }; + 1E92E3802AEF4561C15A15E8 /* DSSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16DFE5164DF91A0796214C07 /* DSSettingsSheet.swift */; }; + 202918A372C3231F73C2E578 /* GhosttyEnhancedTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D743335AA1A3796B0A2723 /* GhosttyEnhancedTerminalView.swift */; }; + 2038FF09A32DA081F716D446 /* SubmoduleComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3856F1845C89352A8A46D281 /* SubmoduleComponents.swift */; }; + 2063193ABD2D00DB87C13D7E /* LayoutConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C05E76268C1B2E5E38FEFE08 /* LayoutConstants.swift */; }; + 25315F328208FE548BB7046E /* TerminalSharedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD1AE5A8CFE26E6E4BD11A6 /* TerminalSharedTypes.swift */; }; + 257E6E17F55F28953F58EC42 /* DSGroupedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 557CA937B9386B978825F7B6 /* DSGroupedList.swift */; }; + 258ACA9CDDED686CD5E1BAB8 /* CommitDetailPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C2B56F9C9BF273E8E7A5FD /* CommitDetailPanel.swift */; }; + 258FB68B66F09FCD945C731B /* GestureHandlers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F0B86246C677DB1D4CDBC6 /* GestureHandlers.swift */; }; + 2904549D2DD3D9E3FB00D7BB /* CommitFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E442DAD4EDA28B5EB206F5F /* CommitFile.swift */; }; + 2A8F81DBA7807E6843F37DA2 /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E5FE2C8F4C1E2317EDCFB9A /* Repository.swift */; }; + 2AA8E330CE76B02611C7FAB5 /* LeftSidebarPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C434CD617523BD86CCA4C169 /* LeftSidebarPanel.swift */; }; + 2B20A8BB42C6596D5F938307 /* DSEmptyState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C083D4B07B57253A6C74896 /* DSEmptyState.swift */; }; + 2B3E387360396E8F5E1ABC15 /* LicenseValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD50DBAE423A86E69313A5D2 /* LicenseValidator.swift */; }; + 2BE41E0ECB5DF6AC65E8BC66 /* DSIntegrationPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8919B5353DAAE1D6C06F8BBB /* DSIntegrationPanel.swift */; }; + 2C7B781FB9453730AF5CB941 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D288AEB2C54F54B1E3C13E /* Tag.swift */; }; + 2CE1AD591E7D6F365E28A827 /* RemoteListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF0843F0AA4E95384583544 /* RemoteListView.swift */; }; + 2CFAE83A7F1BA59EA2D65725 /* NotionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA53424BA0CE1910F723088 /* NotionService.swift */; }; + 2D4FBFF88394B793CAD45927 /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D5B35E5A8E665E718E7F76 /* HistoryView.swift */; }; + 2D96548491BE3DFD9152E3F5 /* CacheWithTTL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186CAFBEF34A292AB9868362 /* CacheWithTTL.swift */; }; + 2E4FFFDFAC66F10402025F5B /* DSLoadingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7FB0ED01FC81BE9CFEAA25 /* DSLoadingState.swift */; }; + 2E651EE2B3DFFFDDB4EB1F69 /* FeatureManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DBF4D2461784FF64126C205 /* FeatureManager.swift */; }; + 2EB329603B3404BF2CC6BE88 /* KaleidoscopeDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D359DD82979AF160C3A6257C /* KaleidoscopeDiffView.swift */; }; + 331DA536A6F439966A164BF0 /* GitFlowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF69A8507A78495E37168B6 /* GitFlowManager.swift */; }; + 338609A9890C174FAC467CA4 /* GitSubmodule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB1EA918F36B9CA215847E9 /* GitSubmodule.swift */; }; + 33C575986A3993FAB015C586 /* ConflictPreventionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5811E200D2846DB2F3B5A1F5 /* ConflictPreventionView.swift */; }; + 35F254E4B0B494B8895E8871 /* UnifiedFileContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F8938D30C93984F880916CA /* UnifiedFileContextMenu.swift */; }; + 364FDC51036CD19A228EC00B /* MergeBranchSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F715ACED106D700C4870CA9 /* MergeBranchSheet.swift */; }; + 3780CFA63E8FBAB8DB262C60 /* PluginRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DA46B215C509E7162E6325 /* PluginRegistry.swift */; }; + 3855843F399E892582649A00 /* RepositoryHierarchicalNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B8981DC4D0469E4A2A142E /* RepositoryHierarchicalNavigator.swift */; }; + 3890BF19DD65B1F83E11CFF4 /* Worktree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00928620E5BDBA2B55DDCA9E /* Worktree.swift */; }; + 39F2E859A621E04E59338150 /* DSSecureField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AFAACE42C7F37924C183068 /* DSSecureField.swift */; }; + 3A1FBB575237C360F6C5A416 /* MemoryPressureHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273DB06557D32B01CB61BEE5 /* MemoryPressureHandler.swift */; }; + 3A5F4D9A80EE6CB6B627CD3C /* RepositoryActivityViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99214D51AED49AD69405C6FF /* RepositoryActivityViewModel.swift */; }; + 3B0544E95DA36A53885E8E5F /* MinimalTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479358BE8600B9F9CE64EC29 /* MinimalTerminalView.swift */; }; + 3C62AD95CD068EE1A7C2943C /* RightStagingPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B057DE0EB0A466E9E33BC9 /* RightStagingPanel.swift */; }; + 3DE1FA5CCF32ABAFCD969FE3 /* AccountsSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B3C55C29AB720739CDE519 /* AccountsSettingsTab.swift */; }; + 3F3DE8BAE7DC7CDD55DA2C9F /* FileChangesIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E7BE67D49ECABECC42D99C /* FileChangesIndicator.swift */; }; + 411EE8E24820B19E458C98EA /* DSActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E99A07FBA1E2DA4CDF2D8F3 /* DSActionBar.swift */; }; + 42620233A90137B2BEDEF688 /* UnifiedBottomPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28EB01A5FA82BA5F5A3728A /* UnifiedBottomPanel.swift */; }; + 42EE92CC8919B6BC223491BA /* WorkspaceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B04DFEA202E551F0C5CE9419 /* WorkspaceSettings.swift */; }; + 42F89A759EAD6CDD4CD5FBFA /* BranchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BA4D4445F5C1D715738856 /* BranchService.swift */; }; + 448754C2A8C90839BF1B7D46 /* GitEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4B737145B8FD686DDAC7FC /* GitEngine.swift */; }; + 44D2EEB68993CA4714674E6A /* DSDraggableItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6949012590C4505C0112608 /* DSDraggableItem.swift */; }; + 44E2ACDB3765475EF99F57BB /* XcodeToolbarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE3A5493D73AF5335D28E79 /* XcodeToolbarButton.swift */; }; + 45842BEA4117D259C3B46782 /* BranchSelectorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311732177EB42C4A81308A02 /* BranchSelectorButton.swift */; }; + 45EF972E2923EAED6BB5CBD3 /* SubscriptionSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB6FE5C91B2C9441FED36A8 /* SubscriptionSettingsTab.swift */; }; + 45F557B8C61B3336E38C6478 /* CloudPatchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A9EEC65D538BDB576F332D /* CloudPatchService.swift */; }; + 4678F616E4B627558CE1D996 /* DSButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E5FA97CD68426F1A4DD31CE /* DSButton.swift */; }; + 4685EC657E869B0ADA90A2A2 /* FileTypeIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9AD8F4D449606E5E5A4A2EC /* FileTypeIcon.swift */; }; + 478A4BF99A071621F35DEE1B /* RepositoryActivityPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C74CC38DF0CD9C9105122B /* RepositoryActivityPanel.swift */; }; + 48B7FAF77FF920156B00E484 /* JiraSettingsContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC8732E820ED04A145A96F21 /* JiraSettingsContent.swift */; }; + 4A3F7A53E510D2BAF7381717 /* TerminalAIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15161D366FAC91D524B1F99C /* TerminalAIService.swift */; }; + 4AF3FA66E96333FEA7AB2990 /* JiraService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710BE37EEC4AE2E2EDE63535 /* JiraService.swift */; }; + 4B71CB7D429E4F4BB2A82DBF /* CICDComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = E729B4D59A2644F69C62C147 /* CICDComponents.swift */; }; + 4C90D13F0F251AEBC05D5DA5 /* LinearService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6FFF74126F40CCF366AC65 /* LinearService.swift */; }; + 4D073D671268B1EFB50AA91A /* LFSManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5709C8F7572B6F391068E6FC /* LFSManager.swift */; }; + 4D31E834EEDB95BF29CAF088 /* DiffLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E55C59F6D86FDDC89B870D89 /* DiffLineView.swift */; }; + 4F40DF182254519294F3343B /* RepositoryContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A63DBE9BFC4E46B5AE10BD /* RepositoryContext.swift */; }; + 4FD15B865E39740018AD2FCB /* BottomPanelTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = D677ACBA3E4FD4FB7DFAD138 /* BottomPanelTab.swift */; }; + 5020173DF62A32D51CA10D4D /* GraphMinimapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35FF5038CA6532569A529AAA /* GraphMinimapView.swift */; }; + 50862CEED949B2C54AF16F56 /* AWSCodeBuildService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E722C9BE39DB145F515EE7A /* AWSCodeBuildService.swift */; }; + 51AA9F2DA167C08E48F61A85 /* SidebarSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = CED81242689EF445019AB70B /* SidebarSection.swift */; }; + 5261C6C6D3260AE42F619C4F /* AWSSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4BFCD937C8EA030DB8F6FDE /* AWSSettingsViews.swift */; }; + 52751A8344E6AFC7E2474C33 /* CommitGraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C2B31BA27529F5863734DC0 /* CommitGraphView.swift */; }; + 52E0C484B10963A516F2F82C /* SubmoduleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 596427854C21B15DD7CC428A /* SubmoduleView.swift */; }; + 53C18397B4294B5D3105BA4B /* TerminalBlocksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9688CF7D96D31FCC27CAB3EC /* TerminalBlocksView.swift */; }; + 541D92DD4EF266B8998B5006 /* TaigaIssuesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002E3D8656362AB1260403C1 /* TaigaIssuesView.swift */; }; + 5491571A8A582CF8C0592963 /* CherryPickView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2342CC3BD113FD751EF8DD94 /* CherryPickView.swift */; }; + 556686817084AA100171F328 /* RightCommitDetailPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17012E024F076BAAD919FF1C /* RightCommitDetailPanel.swift */; }; + 558F5ABD33291FB3CBCE25B9 /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B264A6AC4FE74DAB2008F55B /* Commit.swift */; }; + 56532F2779C5AF820DED35BC /* DeepLinkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAF4B562204156C4866EFD7 /* DeepLinkService.swift */; }; + 565D064CC8F25B0A426CD5A6 /* DiffEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83AF412DBC595003F22E6FCA /* DiffEngine.swift */; }; + 56D910506046104084FA7BD8 /* GhosttyTerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 700C8193E2C9ABEEC282E57C /* GhosttyTerminalView.swift */; }; + 573F3CCC3D54900A7F77DE24 /* TerminalSessionSharingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3DB6D02E367EF664B47F0D /* TerminalSessionSharingService.swift */; }; + 58F5FDA448ABFBCB84E7FAAB /* ContextMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DB5D866FC40BF9D4931F12 /* ContextMenus.swift */; }; + 59FF295859B774567F77C602 /* SettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114B5EA3C64BF616103018C2 /* SettingsSection.swift */; }; + 5AF86D8476FF91B9121ECE76 /* AnalyticsDashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF614FA8AD81B6D7D15104FA /* AnalyticsDashboard.swift */; }; + 5B3D39275E9892058DC0189A /* PanelHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212D7F9876239E3FD1A6ED39 /* PanelHeader.swift */; }; + 5C95292701A0C7557F4EAB33 /* KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 901D56504BADF5FC43A6EA46 /* KeychainManager.swift */; }; + 5DBD7F93391740939E1C91BE /* DSGenericIntegrationPanel+Examples.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F77455C01C15BDB2F9E883 /* DSGenericIntegrationPanel+Examples.swift */; }; + 5DE65295FCD9CBF529C7138E /* DSCollapsiblePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87918D7DE285A283FF241764 /* DSCollapsiblePanel.swift */; }; + 5F554587B84ECD2D958FF10F /* ContributionGraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF04D5AAFB91C9592A5045E /* ContributionGraphView.swift */; }; + 5FAAC3C9EBBD7093A180022A /* DiffViewWithClose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF5781EDDF9059C148481E7 /* DiffViewWithClose.swift */; }; + 602D67EF018C276123629D01 /* StoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D7DD67F634F228B2BA0CEE /* StoreManager.swift */; }; + 606A08D80271F6F8F2CE3A15 /* ComponentCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3A169E41245ABA5B312C38 /* ComponentCatalog.swift */; }; + 6073CD6F568BB400533F128C /* DSDraggableList.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BFECF7549F727776FCA676 /* DSDraggableList.swift */; }; + 614DC1CBD6A3FD6402928F34 /* WarpAIInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F12FFF9CD468B05E92D4271 /* WarpAIInputBar.swift */; }; + 6160CBA19ACF48482550B83E /* TerminalContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B307864D0B1648BF91E0BAD1 /* TerminalContext.swift */; }; + 61CF478CA5D5AE185242221E /* PresenceService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A44BE48A6BAAD7525A8D2A /* PresenceService.swift */; }; + 63119CBB952238FF689EED9D /* MicrosoftOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = C383AE50662C2E7BCD28F425 /* MicrosoftOAuth.swift */; }; + 639E5318F12FE7E443353643 /* XcodeBottomBarTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = B99F846B0D4585643F00BD77 /* XcodeBottomBarTab.swift */; }; + 63D4EBA68098EB78E6F6DEE1 /* EnhancedDiffToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8263EEAA4CA902E6D88CC782 /* EnhancedDiffToolbar.swift */; }; + 6700C7C42963864A6E288032 /* DSProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C72A5B4B589599572CCE32D /* DSProgressBar.swift */; }; + 671C7AA457D286A11FF7A783 /* DiffScrollViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = B167860182E35112201A438D /* DiffScrollViews.swift */; }; + 673AB2F66093A910DF89E1A8 /* SectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6117B76D20F187270457CD67 /* SectionHeader.swift */; }; + 674D23AFC65FE0FB8591AD2D /* NotionContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 895A0312F04D67E50BB88FCA /* NotionContentView.swift */; }; + 679298094D077FFCCC84463F /* DSTabPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FFF8DA7810B657987C810D /* DSTabPanel.swift */; }; + 67D7412561CBCAAC9B2A530D /* DiffStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68762388E84A0E1E76D28A8 /* DiffStatsView.swift */; }; + 692C9ED8C703198612A88D80 /* DSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F96668869E06EF60C86ED41 /* DSTextField.swift */; }; + 6A93112D00D09D85BC817378 /* JiraPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398BB78A6379748BC49FA09F /* JiraPlugin.swift */; }; + 6C0AC788C2EAD1379BADBDBC /* DiffCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB901F90B7E62C601A805FA3 /* DiffCache.swift */; }; + 6FA8EF328900860116035D76 /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D39602F9B9FA2983FFA4B5 /* Branch.swift */; }; + 70D84221BBE81104974AFA87 /* InitRepositorySheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59820498B20A741308942117 /* InitRepositorySheet.swift */; }; + 715B18D5F7FFBFEC63C8F7BE /* SyncButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F0823301FFD9666FF23BB6B /* SyncButton.swift */; }; + 724B0CAB7823EA602CFC7EEE /* DiffSearchAndNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FDB310B5DBFC8EC103E983 /* DiffSearchAndNavigation.swift */; }; + 728028D683743DD8430D2F42 /* CommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59B7AE52B61BB88CB19938B7 /* CommandPalette.swift */; }; + 735FE47AEA03BFB17CF41C85 /* TerminalInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40520EC2939EE30B975A15C7 /* TerminalInputBar.swift */; }; + 75769434F995F881C4664D25 /* MergeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 489CFEF8C9808C1898F88636 /* MergeService.swift */; }; + 75B2FA8BEDC9389FE9017B59 /* RemoteService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7BC62988F7BB78244932153 /* RemoteService.swift */; }; + 76A3D8DE8385AE1A4832551A /* RepositorySelectorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C95B46D74511D3AAAE763C /* RepositorySelectorButton.swift */; }; + 77681E64D2ECD6FC80EBF73B /* ViewModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607DA6098E0A0A61782A0DF3 /* ViewModifiers.swift */; }; + 77D0CF71978693C5CBA20BE7 /* KeyboardShortcutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19F6D20DD97CD5B0028A4E1B /* KeyboardShortcutManager.swift */; }; + 787C9B1064B5E35BC1E8F8AD /* Components in Sources */ = {isa = PBXBuildFile; fileRef = 4BD0BD26988ABF1E4F35AF6B /* Components */; }; + 79D272B536B0A42597F2EA4E /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FC445669998FA52E288626 /* SettingsView.swift */; }; + 7A1DD8B750553E26E2A618D3 /* WorktreeComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCAFD73F48F11025E3F5E23 /* WorktreeComponents.swift */; }; + 7A5D3444D05FD844A956FEA6 /* BottomPanelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A86BF2D1C0B6AD97B874C0 /* BottomPanelType.swift */; }; + 7AEC49FDEE0A40FEADBF0A94 /* DiffLineRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7B6E6EE3D71DBE737B4C1D /* DiffLineRenderers.swift */; }; + 7D301ECE89E70C8DE39AB5C9 /* AlignedDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA2C545B49F67E44DA12A41 /* AlignedDiffView.swift */; }; + 7D526EF990849BF32B8C1E8D /* CreateBranchSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF55B48131B9F6858E03454 /* CreateBranchSheet.swift */; }; + 7DBC99128781A6527852A691 /* ConnectionRibbonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21AA0E718F7F86B46BFD4922 /* ConnectionRibbonsView.swift */; }; + 7E4E88E294033B61F366281B /* LargeDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F8D7BD58D43721D608D383 /* LargeDiffView.swift */; }; + 7F639A2DCE90F380654018C2 /* DSSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93997D6789256BCEC9328D26 /* DSSearchField.swift */; }; + 80A6CA8F3D9975219B5B3E57 /* BranchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88BD0BE0F4444FCE1396A212 /* BranchRow.swift */; }; + 810530D672789FDE7A5CF901 /* DiffMinimap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 202778629A618B9E881C961C /* DiffMinimap.swift */; }; + 81C2D571C7651F96E8C7B3A0 /* TaigaTasksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 946B0E647FF99145573D874E /* TaigaTasksView.swift */; }; + 81D264BCE0C9E288C789CCBA /* TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45438C33E7FA5A730083B876 /* TerminalView.swift */; }; + 828BB25AC54F36715A313178 /* GeneralSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1169A7CE797833DAB1113376 /* GeneralSettingsTab.swift */; }; + 829F68FEF62B134675571C23 /* TiledDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A3477C5429FE5F172621B6 /* TiledDiffView.swift */; }; + 84EA111FB47AC6FC85811516 /* DSGenericIntegrationPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8861735FD09AB43C10F3AD /* DSGenericIntegrationPanel.swift */; }; + 857B3746AFFBC72DE1D99087 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED654E601E53971CD5E465F6 /* ContentView.swift */; }; + 8616CCBFC792559AE7841F06 /* LayoutHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44313C9929F962B9469DE8E7 /* LayoutHelpers.swift */; }; + 86664E54C7DD00CEA25CBF5E /* XcodeSidebarNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C947465962BAE24E11E5BE8A /* XcodeSidebarNavigator.swift */; }; + 8689D9483F0CB8EC4D860218 /* TagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A524DDCBE31594D98C8518CD /* TagService.swift */; }; + 870022C6A156528820E52A04 /* DSBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0993E603E925AF5F885A2FB /* DSBadge.swift */; }; + 8741FC04D2F1EABE2070FB25 /* EnhancedSplitDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43D322A36A57AE33E47CB62 /* EnhancedSplitDiffView.swift */; }; + 89E657B1F1DA798909573F50 /* RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D486C8039F2AEC1E1F9C4B /* RowProtocols.swift */; }; + 8A02982DED8C15D4B26420F2 /* DSSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B1AE96185C72EB618AB03C /* DSSheet.swift */; }; + 8AE790AE3C421D037A039247 /* StashComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AB5CD84F6C72FACD1271F13 /* StashComponents.swift */; }; + 8AE7DDC47E09F14D001C3150 /* DiffLineContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D561F402979003953F081D /* DiffLineContextMenu.swift */; }; + 8C30BB592751F6A14B532893 /* BranchListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB473F75EE804687EDA23604 /* BranchListView.swift */; }; + 8C7886909222951738050C96 /* FuzzyFileFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416D4860255DDA9948479B7A /* FuzzyFileFinder.swift */; }; + 8D3421CE1DFB13B7B146E219 /* LargeFileDiffRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 563DA23E60975240AFB050EE /* LargeFileDiffRenderer.swift */; }; + 8DA30082EFCCDBFB4E8E53A8 /* TagListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF700E92570DDFE3AED8E46 /* TagListView.swift */; }; + 8E93DE94727C388F49B38E0F /* ReflogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B111412EB02064E54C157E /* ReflogView.swift */; }; + 8EA493649E4C870552462849 /* VisualEffectBlur.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2B5752EF1BB8E8762717F1F /* VisualEffectBlur.swift */; }; + 8F41AD98DF8C48DEAAE582FD /* BinaryFileRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7989C44ACCDF1E41D18E2AC1 /* BinaryFileRenderers.swift */; }; + 8F65EB1EFFEAEF68E338A7E1 /* Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E98303F1CD64673B43F9639 /* Remote.swift */; }; + 8FADAF249BC45C769FA7E331 /* TaigaSettingsContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6FDC6090C9B3BBB620A7518 /* TaigaSettingsContent.swift */; }; + 90439F29474CA28547F86A1D /* DSInfiniteList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1711398A1F8B37AACCC5D04A /* DSInfiniteList.swift */; }; + 90A3ADAC5D4F7C21D32B1892 /* DiffSyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC089E4A7F2E77BE940AC78E /* DiffSyntaxHighlighter.swift */; }; + 90C08EC91988E33831C31240 /* IssueRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C801F2B416A00F555CA272A8 /* IssueRow.swift */; }; + 90E17B673646FBB941792FEB /* DSAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03550275E10C261CACDABFA2 /* DSAvatar.swift */; }; + 91E03468A5173B0AEC039B40 /* DSDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA53B9200B4A53D2CB6D1C9 /* DSDivider.swift */; }; + 9254A96CA98A61C1EC0435B5 /* DSText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 206B997E7B2BDA3CFF449B39 /* DSText.swift */; }; + 9378DD8648BED068B9C9095A /* WordLevelDiff.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0F7D30FD32DB6AC065F6149 /* WordLevelDiff.swift */; }; + 9385A47FAD156F15D2C89669 /* InteractiveRebaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40127F9810F49AB9C7C338F /* InteractiveRebaseView.swift */; }; + 940BF6E41305DF279D17FB6E /* GitHubPRService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F069FB912BF25DF89EF1F94 /* GitHubPRService.swift */; }; + 9550F522FC22CDDBDBE2B41B /* WorktreeListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D4393B45041101C7B5B1DF2 /* WorktreeListView.swift */; }; + 96C518C31B9029FF4F69F778 /* StashDetailPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C63DF08665ADFBF854585A2 /* StashDetailPanel.swift */; }; + 974194EE8CE740424C469D1C /* CommitMessageArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 597B2B4C7339D9BDBF7F562F /* CommitMessageArea.swift */; }; + 97460DF30BEB09DEAE39A077 /* GroupSheets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E8846BFD8F23014F452AD1 /* GroupSheets.swift */; }; + 9846D1D830EED6452B4E33EB /* StagingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3512F76E08429FBAF6FD71 /* StagingViewModel.swift */; }; + 987ABC776698EB5A02DF8290 /* BottomPanelContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDDC61D881750DCCDC9554F /* BottomPanelContent.swift */; }; + 99F126807BFB55B16AE5D2EA /* MicrosoftPlannerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B82AC93A83839A10C7CDCC /* MicrosoftPlannerService.swift */; }; + 9A8647BAACE5524A3A8C1A9D /* CodeReviewService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E74448138294C0683E8713C8 /* CodeReviewService.swift */; }; + 9BD8A0EBCBE28FFE2BD90F3D /* GhosttyNativeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A192FF680B6F020F6E148E4A /* GhosttyNativeView.swift */; }; + 9C5EF99076A6010448D13107 /* BottomPanelResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D83C36E1A44394BA96DA4A87 /* BottomPanelResizer.swift */; }; + 9D91E95B27E511668856E784 /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = C66E660CDE7966A5367E5F3A /* DesignTokens.swift */; }; + 9DF10EEEFE028CF8E0725CFE /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDACC9DB306400AB277B7A /* SearchView.swift */; }; + 9E6E253BF07A224FF60AA2F0 /* MinimapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723BC39F5123B40D0EB427E3 /* MinimapView.swift */; }; + 9E8EF6F08AF38497C5EC3667 /* TaigaSharedViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DFDD01854D7819AD01985D9 /* TaigaSharedViews.swift */; }; + 9EFA5ABBF7FA4E9BC0C76AF5 /* UndoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A15833A17361DA91C02EF00 /* UndoManager.swift */; }; + A1DB9080DDF01E04B7651C9B /* BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A2EC67E6ADB3171F1139CD /* BaseRow.swift */; }; + A297B77215ADAA3F996C4CC2 /* DSStatusBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96E0BBC802E33B600517DE03 /* DSStatusBadge.swift */; }; + A2EA8C73616100D678A318F3 /* AITerminalInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 199A9B206229569CD300315B /* AITerminalInputView.swift */; }; + A56BA8CC4CB25CC4F77D5B20 /* DSIconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2047A6AF811FD0BC3F05BBB3 /* DSIconButton.swift */; }; + A6CACB9F9898072FF60B6D1A /* TerminalWorkflowsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068E2976B54047B4D0261D74 /* TerminalWorkflowsView.swift */; }; + A6F51E6777487026188DD38D /* DSLabeledField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9AE8B50C11C983BA3F87BC /* DSLabeledField.swift */; }; + A70EEF59AC4DF6D59D4B4AF8 /* JiraContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ED30154FBD5E02F2BB86ABF /* JiraContentView.swift */; }; + A71EBC4E0777305FFE7007F3 /* TaigaSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1640300D8BF15C19ED177B81 /* TaigaSettingsViews.swift */; }; + A95C50B49D734ADB08767CCF /* BottomPanelTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366910B3DFF367ACB578E2B7 /* BottomPanelTabBar.swift */; }; + AA12670EFE8FCC58340FC75E /* DSLinkButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF60F8365023DDDA48C436F /* DSLinkButton.swift */; }; + AA78D21033726D44C941E64B /* WorkflowsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F0E9289D4F18B6269F785F /* WorkflowsView.swift */; }; + AC03C07BC65CA3253601A134 /* AISettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9CA1C982F3BD6FBF50546C /* AISettingsTab.swift */; }; + AC28C30B2F08591500A86A78 /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = AC28C30A2F08591500A86A78 /* DifferenceKit */; }; AC9431982EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */; }; - AC94319A2EE97BBF00A59026 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431992EE97BBF00A59026 /* ThemeManager.swift */; }; - AC94319E2EE97C3B00A59026 /* MinimapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94319D2EE97C3B00A59026 /* MinimapView.swift */; }; - AC9431A02EE97C8400A59026 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94319F2EE97C8400A59026 /* SearchView.swift */; }; AC9431A42EE97D6000A59026 /* BUILD_FIX.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431A32EE97D6000A59026 /* BUILD_FIX.md */; }; - AC9431A62EE97D8000A59026 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431A52EE97D8000A59026 /* NotificationManager.swift */; }; - AC9431A82EE97DB400A59026 /* ExternalToolsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */; }; AC9431AA2EE97DE700A59026 /* FASE3_PROGRESS.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */; }; AC9431B02EE97F5B00A59026 /* INTEGRATION_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */; }; AC9431B22EE97FAF00A59026 /* REVIEW_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */; }; AC9431B82EE980A900A59026 /* INTEGRATION_CHECKLIST.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */; }; AC9431BA2EE980CD00A59026 /* FIX_BUILD_NOW.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */; }; AC9431BE2EE9822D00A59026 /* QUICK_START.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431BD2EE9822D00A59026 /* QUICK_START.md */; }; - AC9431C02EE99A4800A59026 /* RemoteOperationTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */; }; AC9431C22EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */; }; AC9431C42EE9A33100A59026 /* WARNING_FIXES.md in Resources */ = {isa = PBXBuildFile; fileRef = AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */; }; - ACC600512F024855005DC34D /* DSVirtualizedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600472F024855005DC34D /* DSVirtualizedList.swift */; }; - ACC600522F024855005DC34D /* DSPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004A2F024855005DC34D /* DSPanel.swift */; }; - ACC600532F024855005DC34D /* DSLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600412F024855005DC34D /* DSLoginPrompt.swift */; }; - ACC600542F024855005DC34D /* DSResizablePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004B2F024855005DC34D /* DSResizablePanel.swift */; }; - ACC600552F024855005DC34D /* DSIntegrationPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600402F024855005DC34D /* DSIntegrationPanel.swift */; }; - ACC600562F024855005DC34D /* DSInfiniteList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600462F024855005DC34D /* DSInfiniteList.swift */; }; - ACC600572F024855005DC34D /* DSTabContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004F2F024855005DC34D /* DSTabContainer.swift */; }; - ACC600582F024855005DC34D /* DSSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600422F024855005DC34D /* DSSettingsSheet.swift */; }; - ACC600592F024855005DC34D /* DSSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004E2F024855005DC34D /* DSSheet.swift */; }; - ACC6005A2F024855005DC34D /* DSTabPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC6004C2F024855005DC34D /* DSTabPanel.swift */; }; - ACC6005B2F024855005DC34D /* DSDraggableList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600442F024855005DC34D /* DSDraggableList.swift */; }; - ACC6005C2F024855005DC34D /* DSGroupedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600452F024855005DC34D /* DSGroupedList.swift */; }; - ACC6005D2F024855005DC34D /* DSCollapsiblePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */; }; - AD16C2E522DD4E7A9F2DA2E6 /* Features/Tags/TagListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */; }; - AE0A7C8E9DD312717EFA13E4 /* TaigaContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3798A1846650C01AD285DC8 /* TaigaContentView.swift */; }; - AE73EFC4B423FEF2DF409575 /* GitMac/Features/Planner/PlannerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */; }; - AEFDAA89AAEB49EA93E09E1A /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */; }; - APP001 /* App/GitMacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = SRC001 /* App/GitMacApp.swift */; }; + ADE029EDEB898CE737508C81 /* DSResizablePanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D415137CD4DBE6C277B0AD /* DSResizablePanel.swift */; }; + AE682F609BCCF88820364E71 /* WorkspaceSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1540D12594BA091D091556B9 /* WorkspaceSettingsTab.swift */; }; + AE73EFC4B423FEF2DF409575 /* PlannerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE04DB22D1DA264CD46CE7E9 /* PlannerPlugin.swift */; }; + AEDE428F614861F30CC4B49B /* StagingAreaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6A32870540289FBF9180EA /* StagingAreaView.swift */; }; APP002 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = RES001 /* Assets.xcassets */; }; - AVTRSVC1B526F46E3958E34A /* Core/Services/AvatarService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */; }; - AWSCB001B526F46E3958E34A /* AWSCodeBuildService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */; }; - B22085A223F142A680B2B116 /* App/ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */; }; - B288434E27474BCE8B605D16 /* Core/Git/Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */; }; - B38FE133F96B4801B072C31A /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */; }; - B3A46B7AB4C14FE7ABB248DE /* Features/CommitGraph/CommitGraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */; }; - B4DA26C56859D2E184D7E860 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */; }; - B6189D2FE47A4D7EA34D9F06 /* GitMac/UI/Components/Rows/FileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */; }; - B6FF711E9D904DC5A13E334F /* GitMac/UI/Components/Commit/CommitMessageArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */; }; - B77A120C3CF2461C8B4B09BE /* GitMac/UI/Components/Icons/StatusIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */; }; - B792010810824E7B2933630E /* GitMac/Features/Jira/JiraViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */; }; - B8B777FE4088470CBA4427C7 /* Core/Services/WorkspaceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */; }; - B988102E6AE44D00BD7465C4 /* Features/Terminal/TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */; }; - BD25E53A92994727308E78E1 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */; }; - BD7718FD3031E989055C841C /* GitMac/Features/Notion/NotionPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */; }; - BF29CA1FCD714F51A1F45AB0 /* Features/GitFlow/GitFlowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */; }; - C0FCA2D59D0B4674801C30B7 /* GitMac/UI/Utilities/ModalCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */; }; - C1432F5677FB440BBBCE1D37 /* Core/Utils/FileWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */; }; - C17B40AC6D74427DAB28B049 /* GitMac/UI/Components/Common/LayoutConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */; }; - C2B7667B558CE8196CE0A378 /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4F843954F997AD46CDBAE8 /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift */; }; - C3D6450D4DF146A0A1893725 /* Features/MergeConflict/ConflictResolverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */; }; - C539555536ED4764ACF01929 /* Features/Settings/SubscriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */; }; - C539F53A651A0250BCAA9015 /* GitMac/UI/Components/Cards/CardStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */; }; - C64FAAF81040CB6F41F12CFD /* Features/Taiga/TaigaPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */; }; - C6F50D7463C0809C142616EE /* GitMac/Features/Linear/LinearPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */; }; - C748B34DF85B4250B12ADABE /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */; }; - C8184F3EA7F1402896DD1A5D /* GitMac/UI/Components/Diff/DiffToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */; }; - C8DF98EC71AC165EDBF9F79E /* BottomPanelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */; }; - C8E01AA078734F7686AD1DB8 /* Core/Git/Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */; }; - C964E76B6FCE4A16BC3CA967 /* GitMac/UI/Components/Diff/DiffLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */; }; - CACHETTL1B526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift in Sources */ = {isa = PBXBuildFile; fileRef = CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */; }; - CE6DC227F90A9E0F084729FC /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */; }; - CF2B788DBC9C46B8AD5689DB /* GitMac/Core/Services/GitSubmoduleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */; }; - CTXMNU01B526F46E3958E34A /* UI/Components/ContextMenus.swift in Sources */ = {isa = PBXBuildFile; fileRef = CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */; }; - D05B742B6423469E806FD3B1 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */; }; - D3881EDC974B4F1B953A71DF /* GitMac/GitOperationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */; }; - D5351C2C701B487793E0C515 /* Core/Services/TaigaService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */; }; - D5A8566ED7F1576C0C1F2CF3 /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */; }; - D7C739877F294D99869D0B8A /* GitMac/UI/Components/Layout/FileListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */; }; - DB71F6B7480346E2A13CDA2D /* GitMac/Core/Services/Specialized/CommitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */; }; - DCA2305BB8A842369E2DFDE0 /* GitMac/Features/GitHooks/GitHooksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */; }; - DED68D219BE1413499206E43 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */; }; - E03E61A15F828ADE3955FC07 /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */; }; - E3F494D2DF37C541988BE1FD /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */; }; - E5FD5D5C1CC70A44623C5E5B /* TaigaLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */; }; - E63C04837ABDB169AC668FA7 /* TaigaTasksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */; }; - E750BCECFCF5443488BB893A /* GitMac/Core/Services/Specialized/RemoteService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */; }; - ED061CB6EEEE5AF4D74E749D /* GitMac/Core/PluginSystem/IntegrationPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */; }; - ED6FCEB928FF0E3EE8308D26 /* GitMac/UI/Components/Molecules/Display/DSHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */; }; - EE253019E62CF52CDFFEC69A /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */; }; - F446CD9EB8254FDDBC44396D /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */; }; - F706F47EC2E998C18214DBD8 /* GitMac/Core/PluginSystem/IntegrationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */; }; - F7B1EE9C38ADA4FC61EEBD64 /* TaigaUserStoriesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */; }; - F81A394FC5284A539A11879C /* GitMac/Core/Services/Specialized/MergeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */; }; - F915E96872D140E997144CF7 /* Core/Services/GitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */; }; - F94BB1BCB04F4885BF46F509 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */; }; - FCE7733F5EE79F6938CF6652 /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309335EA370B8E36FD9B9860 /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift */; }; - FF97BDC528EB4762A9D35B04 /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */; }; - FFBD69F7105D47AFB9832131 /* GitMac/UI/Components/Diff/DiffStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */; }; - FLVIEW01B526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */; }; - GKTHEME1B526F46E3958E34A /* UI/Components/AppTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */; }; - JIRAPNL1B526F46E3958E34A /* Features/Jira/JiraPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */; }; - JIRASVC1B526F46E3958E34A /* Core/Services/JiraService.swift in Sources */ = {isa = PBXBuildFile; fileRef = JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */; }; - KBSHRT01B526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */; }; - LNRPNL01B526F46E3958E34A /* Features/Linear/LinearPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */; }; - LNRSVC01B526F46E3958E34A /* Core/Services/LinearService.swift in Sources */ = {isa = PBXBuildFile; fileRef = LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */; }; - LWDIFF01B526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */; }; - MDVIEW01B526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */; }; - MERMAID1B526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift in Sources */ = {isa = PBXBuildFile; fileRef = MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */; }; - NOTNPNL1B526F46E3958E34A /* Features/Notion/NotionPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */; }; - NOTNSVC1B526F46E3958E34A /* Core/Services/NotionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */; }; - PATCHMAN01B526F46E3958E34 /* Core/Git/PatchManipulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */; }; + B01E000382E76589FFC47FE8 /* WorkspaceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7B28DDCCB9274FB3C1B0ADE /* WorkspaceManager.swift */; }; + B051313AF74F9BA791E3F23A /* CloneRepositorySheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83E77F535DA31CCD185F87AF /* CloneRepositorySheet.swift */; }; + B148D8FC4B491F777493986A /* GitHubIntegration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2744088EB2B2CB3C9C518657 /* GitHubIntegration.swift */; }; + B151DC00FFED37EF971E253F /* FileListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABAB2827F401F387B51BC038 /* FileListSection.swift */; }; + B18924C7746FDCA18B427115 /* LaunchpadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F70BEAF1B46EFA08BD447ED /* LaunchpadView.swift */; }; + B21354D400079A50FEFC5070 /* NotionPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B70C1A5D0DB3C69996CE7FA /* NotionPanel.swift */; }; + B2EBAF7C10A2145058E5645D /* ThemeButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54D444D43369E58E93BE1A2 /* ThemeButton.swift */; }; + B38FE133F96B4801B072C31A /* DSPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232C0B51BBB0007A1C5DB910 /* DSPicker.swift */; }; + B394734B9FD8178D35E52C48 /* JiraPanelGeneric.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B73ABCA48989962336F44BE /* JiraPanelGeneric.swift */; }; + B4343C3D6E06E1BF0EC0FF39 /* AICommandSuggestions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7801DE614213369EF2205E93 /* AICommandSuggestions.swift */; }; + B4C18233BCE290AE127401B6 /* TaigaContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DF6AB18445C7F81E95CD87 /* TaigaContentView.swift */; }; + B4DA26C56859D2E184D7E860 /* DSDropZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F22F52D0E8130CC29E01D3 /* DSDropZone.swift */; }; + B4F3A4510237C4B0D93B029C /* RemoteManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1202B39970A7D013600F46DF /* RemoteManagementView.swift */; }; + B5D31659B0B71093C78ECFC1 /* RevertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FED351FD1776BBF7E389FFA /* RevertView.swift */; }; + B7819B89F1E5B86F9551E12C /* GitProgressTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */; }; + B792010810824E7B2933630E /* JiraViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBD224C28988637497A106C /* JiraViewModel.swift */; }; + B79DB79AA761D5CD94662D14 /* GitHubOAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86FA50E65BBBBC71CBFD6ED7 /* GitHubOAuth.swift */; }; + B9101E55494C607B5E900A74 /* DSLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD7CE628B2B5B937AB429B6 /* DSLoginPrompt.swift */; }; + BA290F88C2CE39C8A6A22083 /* FileTreeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A327C112284D1DF0EFDF4DD /* FileTreeProtocols.swift */; }; + BA3E522F8D441E07681B4F15 /* IssueListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D8DDC9BB7A5208EF261161 /* IssueListView.swift */; }; + BCC6C6707CC684D2365EBFA4 /* PlannerTasksPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927BAABEB70CD3F99787E642 /* PlannerTasksPanel.swift */; }; + BD25E53A92994727308E78E1 /* DSListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D869EB4C178E9237E81CE462 /* DSListItem.swift */; }; + BD4379DD0E129C03F2CCC223 /* TerminalPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311819CE85C69FBD8317B971 /* TerminalPanel.swift */; }; + BD7718FD3031E989055C841C /* NotionPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B478D68ED8A95275ECAA2AD4 /* NotionPlugin.swift */; }; + BEB221F38DF2B23460199734 /* TaigaUserStoriesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D006D41F21EE7EEAE2145D57 /* TaigaUserStoriesView.swift */; }; + BEE29CC2926B75EE4072A0C2 /* SidebarComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF930CD85CE354BBD0E542F /* SidebarComponents.swift */; }; + BEEC4A2DB5D5582D8B492BA0 /* KaleidoscopeSplitDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A9F580892364D6F487D3D4 /* KaleidoscopeSplitDiffView.swift */; }; + BF3725FB16445B45FFFD566A /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9429CC1284A41A1A5A7741F /* NotificationManager.swift */; }; + BF4F585F81DBFC23F4BCB0BE /* ConflictResolverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CF81A55F5DF67A99DF4F52 /* ConflictResolverView.swift */; }; + BRANCHPR0001BUILD000000001 /* BranchPRTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */; }; + C1F9A554C25B4FC9A1492EF9 /* UniversalResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4E9CDA3CADA6831328A87B5 /* UniversalResizer.swift */; }; + C26E99D3F81D4583828E3A78 /* InsightsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C039C6AB6CAE0BFC42BECBC /* InsightsView.swift */; }; + C2B7667B558CE8196CE0A378 /* DSFilterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4F843954F997AD46CDBAE8 /* DSFilterMenu.swift */; }; + C4486A6EFFA39D75DB4DFF96 /* MermaidDiagramView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F089DDFC4BED3E5F4F8E4DE4 /* MermaidDiagramView.swift */; }; + C4687902260CEB17D47DFF91 /* TaigaEpicsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0CBCEB9467ACA32A1448C2B /* TaigaEpicsView.swift */; }; + C539F53A651A0250BCAA9015 /* CardStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1319443A5D6F0D217BF7BEDA /* CardStyle.swift */; }; + C595ED8C3BDD36D4ECBBA1DB /* StagingFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B436DF92856B5B4E564361C /* StagingFile.swift */; }; + C5F10040C80DB32837889119 /* GitHooksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1239024F83757F6F28F31270 /* GitHooksView.swift */; }; + C60BC0B812343301A989BEFA /* TerminalCompletions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56F5CD5D6138045969197FF2 /* TerminalCompletions.swift */; }; + C6F50D7463C0809C142616EE /* LinearPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D939A8E106120281579FF2E1 /* LinearPlugin.swift */; }; + C9A512A4DDA6A1AB2D103FD5 /* FileContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FE59D2EAA5418172A52CBA /* FileContentView.swift */; }; + C9EDED5484F7DFC999A9FA26 /* DiffStatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E2503BBB1447E619977588 /* DiffStatusBar.swift */; }; + CAC4427F5058B41A10CC7671 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE686394363A5627F695C23 /* ThemeManager.swift */; }; + CC7FE5482277C66A289B982B /* PlannerSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79542D479476AE91B3E954EF /* PlannerSettingsViews.swift */; }; + CDBF875323FA9E0F69B1105C /* JiraLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02DCCABAE7BA3E98C2B5C13D /* JiraLoginPrompt.swift */; }; + CE6DC227F90A9E0F084729FC /* DSTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF76682BE59E45805F06FCF /* DSTextEditor.swift */; }; + CE7F5C391B4D9B0CA9AACF35 /* MarkdownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22280A02889B243FEA6F332 /* MarkdownView.swift */; }; + CE80D1870754D5739A0223C0 /* RemoteOperationTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE7FD2660507EDB36634450 /* RemoteOperationTracker.swift */; }; + CEVF01 /* CodeEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEVR01 /* CodeEditorView.swift */; }; + D04B3915422AA379ED9AAA84 /* AnimationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778017C0C82557A417F6EBD /* AnimationExtensions.swift */; }; + D31155F217037D5B7777EED0 /* LinearContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72B4B428ACA0A1D3C01558D /* LinearContentView.swift */; }; + D36FC421805A89519D5C8731 /* ResetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E42F45A779174FB0192AA60 /* ResetView.swift */; }; + D37C7945444AF7F89EE1F35A /* GitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9B988D57B4EBA758747115 /* GitService.swift */; }; + D49227F9CCA29A4F6DC6129E /* DiffToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EC18843562D7D622FA0E10 /* DiffToolbar.swift */; }; + D4C8907702C129E8CBFB0870 /* DSPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96298B0967612ED6114D608E /* DSPanel.swift */; }; + D586D60CC063E011026505D0 /* TaigaTicketsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32798DDE1B043BCB72AFEDC5 /* TaigaTicketsPanel.swift */; }; + D59A65944CDDF748D7095C82 /* CommitComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751B4C6A40ABDFF0FB9131F1 /* CommitComponents.swift */; }; + D5A8566ED7F1576C0C1F2CF3 /* DSTooltip.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE5F58D381B393D52C8166A /* DSTooltip.swift */; }; + D5AEDCE8304A70941A8BC48D /* ShellExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 226F99F90E8A33A69220136F /* ShellExecutor.swift */; }; + D6EBF5672FBF37280D376719 /* DSTabContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B32BADC104E4660C5B68987 /* DSTabContainer.swift */; }; + D79F7A285081A584112C5EBC /* IntegrationsSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B9CDBE3A7D0DA2C86612D0 /* IntegrationsSettingsTab.swift */; }; + D80182AE40947A39CCE18AAB /* LinearPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D667A4EEB0DA338B05F87CC9 /* LinearPanel.swift */; }; + D8A72741F1C126B02D622F3F /* AvatarService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C1CCA3687DD1D264360CB1 /* AvatarService.swift */; }; + D8A8817DEE1581AC61A2A022 /* LightweightDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 709B89F0F410533E74A4D21D /* LightweightDiffView.swift */; }; + D97779F54B14F2FB461BDA40 /* TerminalSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD659E6E5A08F2B73A353B4 /* TerminalSuggestionEngine.swift */; }; + DA9E7B526F5E3A719D2000E2 /* KaleidoscopeFileList.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22461AAF391C4D4E7B598E2 /* KaleidoscopeFileList.swift */; }; + DBD912183194A4E7C42C2144 /* XcodeToolbarDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8316008DE7D82F7A62DC0F82 /* XcodeToolbarDivider.swift */; }; + DCAA339817D053DA1AC4ABCB /* RepositoryTabsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE31450EF2F2870D73689BE9 /* RepositoryTabsView.swift */; }; + DD8F46FE884EC63E601B728D /* CloudSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEE4054B2842E02ED448EF0 /* CloudSyncService.swift */; }; + DF7B34A27B02DB66E81688C8 /* DiffHunkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D94CA49974C2D1377D31F8 /* DiffHunkView.swift */; }; + E03E61A15F828ADE3955FC07 /* DSSpacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3AAFD8CF5452E47AD098EB /* DSSpacer.swift */; }; + E06D2471579344441C31C6B5 /* BisectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E52FAFB00F326698DC786462 /* BisectView.swift */; }; + E0705D7BF274FD091FA5C7D3 /* GitOperationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D1227A3429891C6E909AC6 /* GitOperationHandler.swift */; }; + E1424667B9BA6555CD40DEFA /* FileWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF17B3676A0FF04037522572 /* FileWatcher.swift */; }; + E1677637DDDE428D358C7D26 /* LinearSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24FF2E3D9D995902DAD59928 /* LinearSettingsViews.swift */; }; + E2D60CB4DB0E2E428B70B27B /* GitSubmoduleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68995E0B81A9B7E42741AE47 /* GitSubmoduleService.swift */; }; + E2DC6F1F800CEDEAB6143D2C /* PushFetchButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A83152F6E2CD6F4E437C5C3 /* PushFetchButtons.swift */; }; + E2DE9809294499F69934ED13 /* SyntaxHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCDBE3D0C01B79C8DA32D290 /* SyntaxHighlighter.swift */; }; + E31D0AE2FBC3898B195BDCC4 /* AIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99AA1FB5A8306B98A36E3C86 /* AIService.swift */; }; + E39B3EC735C63758C8855612 /* RepoGroupsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEC0281C1B6ECA4E3B07D30 /* RepoGroupsService.swift */; }; + E3F494D2DF37C541988BE1FD /* DSSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C38069C386D2444ADE094A5 /* DSSpinner.swift */; }; + E40DFD849A489D0953DE0899 /* SecretRedactionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BED603E9B131C466C78CE5 /* SecretRedactionService.swift */; }; + E4807BCD1C25C1167BB0680D /* GhosttyEnhancedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DCECE17C0C42203380CB8A6 /* GhosttyEnhancedViewModel.swift */; }; + E5C758304DB450B21CBD3A04 /* GenericFileTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611701D71659694B52140952 /* GenericFileTreeView.swift */; }; + E5EDE508B8D2210A1289A26D /* GitSettingsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8091762F903234CDECBD980F /* GitSettingsTab.swift */; }; + E685415C8BAE832DF936D83C /* TerminalCommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418DEF04AD5914A0852FBE2F /* TerminalCommandPalette.swift */; }; + E6C11E094C850F7D0DD9AE3E /* SearchSyntaxParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B684A269B043CF4172FEBD53 /* SearchSyntaxParser.swift */; }; + E6F64B372727112EF636DBCE /* TaigaViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3500F4E08558A1C65E4E6108 /* TaigaViewModel.swift */; }; + E8595C1C9E91E9A13CDA7F36 /* BottomPanelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CED6026902BB06896B1582 /* BottomPanelManager.swift */; }; + E9C01B6AE799F709F67A6549 /* NotionSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC4ADFAC6AD64D8E79C0C9A /* NotionSettingsViews.swift */; }; + EAAA7140BCA69E1F76879A69 /* GhosttyDirect.swift in Sources */ = {isa = PBXBuildFile; fileRef = E75012ED186D7236EF6AC78A /* GhosttyDirect.swift */; }; + EB17F46A1960BCDE6F08CBE7 /* StatusIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0590EB77B9C55A604A68F573 /* StatusIcon.swift */; }; + ECBC20DEE50CCD7452A1DCDC /* StashListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90CD7B4608F6E75CA6DBE9CB /* StashListView.swift */; }; + ECECD1789252590D9C40340C /* StashService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414FA69A53C987CDE2E1312F /* StashService.swift */; }; + ED061CB6EEEE5AF4D74E749D /* IntegrationPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49DCB09417068B1BF850DA18 /* IntegrationPlugin.swift */; }; + ED6FCEB928FF0E3EE8308D26 /* DSHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A72EC9847E8539DA57C4CE /* DSHeader.swift */; }; + EEB6874705B3088EC71F6FA3 /* TaigaPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41A68E2DF8729EA40C149C6 /* TaigaPlugin.swift */; }; + EEC5FD52708C17DA03581BAC /* SearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7FCE58539D9D09BCEB7261 /* SearchQuery.swift */; }; + F18E05B60D6AB67A1CFD22EC /* PullSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AC05D32D81D7C384612D99 /* PullSheet.swift */; }; + F1A8C4C6FAF4A907FFAE77A7 /* AnalyticsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17F4FAEB8F8E5AF525BF3E9 /* AnalyticsViewModel.swift */; }; + F26FC2660FA73DFC56A653DC /* CommitDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46786D226E232F901D917031 /* CommitDetailViewModel.swift */; }; + F2BC2A1403166453E40C25EE /* GitHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = F589958E042B6BD39D5C02C2 /* GitHook.swift */; }; + F33F3ED30023FB4F63F59B08 /* GitHubService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E284BF9CDF10EDB4C57C2244 /* GitHubService.swift */; }; + F45B5B3A5D6D784B0781A392 /* DiffBreadcrumb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48195E942F327C928D76E3F0 /* DiffBreadcrumb.swift */; }; + F4B450C22FE1F972BDF36FA0 /* SplitDiffView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B003B6D2E2E859899B257A /* SplitDiffView.swift */; }; + F55D1ED79ADBDA6C10CDE083 /* JiraSettingsViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADC883D77ADF2991AC3477CC /* JiraSettingsViews.swift */; }; + F60B50B514AC48031685CB38 /* DiffPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC7110872A0069C25C89D7CF /* DiffPreferences.swift */; }; + F626C426A14A04C27F413C1D /* IntegrationHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0154FE34793BBE67B322FBCD /* IntegrationHelpers.swift */; }; + F65BAC301B1CEF4E61CF6576 /* GitProfilesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC0A275A93476AE5F7067 /* GitProfilesService.swift */; }; + F6DABB08B5D272FFC22358F6 /* DSVirtualizedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCFCEB0041C2DAA5055A26EF /* DSVirtualizedList.swift */; }; + F706F47EC2E998C18214DBD8 /* IntegrationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D7B28A4BC77B8C9638775F /* IntegrationViewModel.swift */; }; + F82A9AA3F09807BCDA320CCA /* TaigaLoginPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06712DD09898444608AA4C53 /* TaigaLoginPrompt.swift */; }; + F8DA65C2146769577BAFC611 /* CommitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FF0182C99EE397632A9599 /* CommitService.swift */; }; + F8F5B0B54798D38764455511 /* KeyboardShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D149E4EDF936AA9FC1857FFD /* KeyboardShortcuts.swift */; }; + FA62769E0E6F531ED989B5B2 /* SubscriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A78C8CA3402C6DF0DB467BE0 /* SubscriptionView.swift */; }; + FAE9C67E11FEF853B37CD1B2 /* JiraPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E53BC3B1A105F3E502F1C772 /* JiraPanel.swift */; }; + FAFA8685F672ACC48734BA94 /* KeyboardShortcutsTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23DEFD3BDC948044E9F7E59 /* KeyboardShortcutsTab.swift */; }; + FB65BBC8B7913D48B0EA2D94 /* ModalCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFC356069FFEC9D8B55DBAA /* ModalCoordinator.swift */; }; + FBBB4ECA925A4E628E1EB8DE /* WorkspaceManagerTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF85B9EB03B18167844D0F6 /* WorkspaceManagerTab.swift */; }; + FC63DEDA367E365A790DEFF2 /* TreeExpansionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60149B22A9C3833A45E1138 /* TreeExpansionState.swift */; }; + FCCC056A77275438CF6C3030 /* OperationProgressOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D35666EBED293412AD3325 /* OperationProgressOverlay.swift */; }; + FCE7733F5EE79F6938CF6652 /* DSSearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309335EA370B8E36FD9B9860 /* DSSearchBar.swift */; }; + FE81C6B0E94463788DE8D787 /* GitOperationProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */; }; + FE93CAC0A8120FDFAE04609A /* ConflictPreventionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE362A1585EF74F0F8CD5300 /* ConflictPreventionService.swift */; }; + FED0784BE2D7966EF4DC830E /* CenterPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF47093BEBDD1408A3C68E6 /* CenterPanel.swift */; }; + GHSYNCMG0001BUILD000000001 /* GitHubSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */; }; PKG001 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DEP001 /* KeychainAccess */; }; PKG002 /* Splash in Frameworks */ = {isa = PBXBuildFile; productRef = DEP002 /* Splash */; }; - PLNR001B526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */; }; - REPOCTX01B526F46E3958E34 /* Core/Git/RepositoryContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */; }; - UNIFCTX001B526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */; }; - WKFLW001B526F46E3958E34A /* WorkflowsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = WKFLW001F526F46E3958E34A /* WorkflowsView.swift */; }; - 11412D2CD2554F6880201DCC /* RepoGroupsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */; }; + WELCOME01BUILD0000000001 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = WELCOME01FILE00000000001 /* WelcomeView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/TagService.swift; sourceTree = ""; }; - 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Commit/CommitMessageArea.swift; sourceTree = ""; }; - 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSAvatar.swift; sourceTree = SOURCE_ROOT; }; - 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Remote.swift; sourceTree = ""; }; - 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Tags/TagListView.swift; sourceTree = ""; }; - 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Launchpad/LaunchpadView.swift; sourceTree = ""; }; - 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextField.swift; sourceTree = SOURCE_ROOT; }; - 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitHubService.swift; sourceTree = ""; }; - 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/PluginRegistry.swift; sourceTree = SOURCE_ROOT; }; - 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Cards/CardStyle.swift; sourceTree = SOURCE_ROOT; }; - 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/GitOperationHandler.swift; sourceTree = ""; }; - 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/GitEngine.swift; sourceTree = ""; }; - 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/FileTreeProtocols.swift; sourceTree = ""; }; - 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/MicrosoftOAuth.swift; sourceTree = ""; }; - 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift; sourceTree = ""; }; - 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift; sourceTree = SOURCE_ROOT; }; - 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSText.swift; sourceTree = SOURCE_ROOT; }; - 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift; sourceTree = ""; }; - 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSPicker.swift; sourceTree = SOURCE_ROOT; }; - 2368B43F70049E34A0D255DC /* GitMac/UI/Components/Search/FilterMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Search/FilterMenu.swift; sourceTree = ""; }; - 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/GenericTreeNode.swift; sourceTree = ""; }; - 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Branches/BranchListView.swift; sourceTree = ""; }; - 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/RowProtocols.swift; sourceTree = ""; }; - 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift; sourceTree = SOURCE_ROOT; }; - 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/GitHooksService.swift; sourceTree = ""; }; - 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift; sourceTree = SOURCE_ROOT; }; - 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/ListRow.swift; sourceTree = ""; }; - 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaLoginPrompt.swift; path = Features/Taiga/Views/TaigaLoginPrompt.swift; sourceTree = ""; }; - 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Models/GitSubmodule.swift; sourceTree = ""; }; - 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTabBar.swift; path = Features/BottomPanel/Views/BottomPanelTabBar.swift; sourceTree = ""; }; - 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffStatsView.swift; sourceTree = ""; }; - 309335EA370B8E36FD9B9860 /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift; sourceTree = SOURCE_ROOT; }; - 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationViewModel.swift; sourceTree = SOURCE_ROOT; }; - 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Tag.swift; sourceTree = ""; }; - 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/RemoteService.swift; sourceTree = ""; }; - 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitHubOAuth.swift; sourceTree = ""; }; - 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/TreeExpansionState.swift; sourceTree = ""; }; - 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DesignTokens.swift; sourceTree = ""; }; - 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelContent.swift; path = Features/BottomPanel/Views/BottomPanelContent.swift; sourceTree = ""; }; - 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraPlugin.swift; sourceTree = SOURCE_ROOT; }; - 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSSpacer.swift; sourceTree = SOURCE_ROOT; }; - 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift; sourceTree = SOURCE_ROOT; }; - 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift; sourceTree = SOURCE_ROOT; }; - 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraViewModel.swift; sourceTree = SOURCE_ROOT; }; - 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/WorkspaceSettings.swift; sourceTree = ""; }; - 42A6E5B72144B52AC053813D /* BottomPanelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelType.swift; path = Features/BottomPanel/Models/BottomPanelType.swift; sourceTree = ""; }; - 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Repository.swift; sourceTree = ""; }; - 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationPlugin.swift; sourceTree = SOURCE_ROOT; }; - 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Issues/IssueListView.swift; sourceTree = ""; }; - 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift; sourceTree = SOURCE_ROOT; }; - 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/FileListSection.swift; sourceTree = ""; }; - 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Submodules/SubmoduleView.swift; sourceTree = ""; }; - 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDropZone.swift; sourceTree = SOURCE_ROOT; }; - 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Branch.swift; sourceTree = ""; }; - 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Models/GitHook.swift; sourceTree = ""; }; - 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Staging/StagingAreaView.swift; sourceTree = ""; }; - 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/MicrosoftPlannerService.swift; sourceTree = ""; }; - 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSEmptyState.swift; sourceTree = SOURCE_ROOT; }; - 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift; sourceTree = SOURCE_ROOT; }; - 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSLoadingState.swift; sourceTree = SOURCE_ROOT; }; - 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift; sourceTree = SOURCE_ROOT; }; - 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaEpicsView.swift; path = Features/Taiga/Views/TaigaEpicsView.swift; sourceTree = ""; }; - 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSActionBar.swift; sourceTree = SOURCE_ROOT; }; - 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/TaigaService.swift; sourceTree = ""; }; - 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/KeychainManager.swift; sourceTree = ""; }; - 653680820091489887257EC3 /* Features/Diff/DiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Diff/DiffView.swift; sourceTree = ""; }; - 6D1161872BBC40C4A645C204 /* GitMac/UI/Components/Search/SearchBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Search/SearchBar.swift; sourceTree = ""; }; - 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift; sourceTree = SOURCE_ROOT; }; - 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSDivider.swift; sourceTree = SOURCE_ROOT; }; - 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/FileWatcher.swift; sourceTree = ""; }; - 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/SectionHeader.swift; sourceTree = ""; }; - 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaPlugin.swift; sourceTree = ""; }; - 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift; sourceTree = ""; }; - 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffHunkView.swift; sourceTree = ""; }; - 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Remotes/RemoteListView.swift; sourceTree = ""; }; - 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/FileRow.swift; sourceTree = ""; }; - 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/BaseRow.swift; sourceTree = ""; }; - 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/FileTree/GenericFileTreeView.swift; sourceTree = ""; }; - 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Commit.swift; sourceTree = ""; }; - 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift; sourceTree = SOURCE_ROOT; }; - 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSButton.swift; sourceTree = SOURCE_ROOT; }; - 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Settings/SettingsView.swift; sourceTree = ""; }; - 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTab.swift; path = Features/BottomPanel/Models/BottomPanelTab.swift; sourceTree = ""; }; - 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Icons/FileTypeIcon.swift; sourceTree = ""; }; - 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/MergeConflict/ConflictResolverView.swift; sourceTree = ""; }; - 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/MergeService.swift; sourceTree = ""; }; - 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffLineView.swift; sourceTree = ""; }; - 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift; sourceTree = SOURCE_ROOT; }; - 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift; sourceTree = SOURCE_ROOT; }; - 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/ComponentCatalog.swift; sourceTree = SOURCE_ROOT; }; - 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift; sourceTree = SOURCE_ROOT; }; - 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Rows/BranchRow.swift; sourceTree = ""; }; - 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/GitService.swift; sourceTree = ""; }; - 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Diff/DiffToolbar.swift; sourceTree = ""; }; - A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/CommitGraph/CommitGraphView.swift; sourceTree = ""; }; - A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaUserStoriesView.swift; path = Features/Taiga/Views/TaigaUserStoriesView.swift; sourceTree = ""; }; - A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/History/HistoryView.swift; sourceTree = ""; }; - A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/DiffService.swift; sourceTree = ""; }; - A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Layout/Separator.swift; sourceTree = ""; }; - A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift; sourceTree = SOURCE_ROOT; }; - A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSHeader.swift; sourceTree = SOURCE_ROOT; }; - A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/CherryPick/CherryPickView.swift; sourceTree = ""; }; - A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/BranchService.swift; sourceTree = ""; }; - AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/GitSubmoduleService.swift; sourceTree = ""; }; - AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/UndoManager.swift; sourceTree = ""; }; - AC94317D2EE96F9100A59026 /* AvatarImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarImageView.swift; sourceTree = ""; }; - AC94317F2EE96F9D00A59026 /* PullSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PullSheet.swift; sourceTree = ""; }; - AC9431812EE96FB400A59026 /* FileBrowserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileBrowserView.swift; sourceTree = ""; }; - AC9431832EE9786B00A59026 /* ResetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetView.swift; sourceTree = ""; }; - AC9431852EE9789700A59026 /* RevertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevertView.swift; sourceTree = ""; }; - AC9431872EE978E500A59026 /* ReflogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReflogView.swift; sourceTree = ""; }; - AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractiveRebaseView.swift; sourceTree = ""; }; - AC94318B2EE9795800A59026 /* CommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandPalette.swift; sourceTree = ""; }; - AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FuzzyFileFinder.swift; sourceTree = ""; }; - AC94318F2EE979FF00A59026 /* SplitDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitDiffView.swift; sourceTree = ""; }; - AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntaxHighlighter.swift; sourceTree = ""; }; - AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteManagementView.swift; sourceTree = ""; }; - AC9431952EE97AA500A59026 /* BranchComparisonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BranchComparisonView.swift; sourceTree = ""; }; + 002E3D8656362AB1260403C1 /* TaigaIssuesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaIssuesView.swift; path = Features/Taiga/Views/TaigaIssuesView.swift; sourceTree = ""; }; + 00928620E5BDBA2B55DDCA9E /* Worktree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Worktree.swift; path = Core/Git/Worktree.swift; sourceTree = ""; }; + 00B003B6D2E2E859899B257A /* SplitDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/SplitDiffView.swift; sourceTree = SOURCE_ROOT; }; + 0154FE34793BBE67B322FBCD /* IntegrationHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Utils/IntegrationHelpers.swift; sourceTree = SOURCE_ROOT; }; + 019084753E518DA25F69140E /* StateManagement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StateManagement.swift; path = ../Components/Utilities/StateManagement.swift; sourceTree = ""; }; + 02DCCABAE7BA3E98C2B5C13D /* JiraLoginPrompt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraLoginPrompt.swift; path = Features/Jira/JiraLoginPrompt.swift; sourceTree = ""; }; + 03550275E10C261CACDABFA2 /* DSAvatar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSAvatar.swift; sourceTree = SOURCE_ROOT; }; + 0590EB77B9C55A604A68F573 /* StatusIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatusIcon.swift; path = Components/Icons/StatusIcon.swift; sourceTree = ""; }; + 05A44BE48A6BAAD7525A8D2A /* PresenceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PresenceService.swift; path = GitMac/Core/Services/PresenceService.swift; sourceTree = SOURCE_ROOT; }; + 05D35666EBED293412AD3325 /* OperationProgressOverlay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationProgressOverlay.swift; path = App/Components/OperationProgressOverlay.swift; sourceTree = ""; }; + 06712DD09898444608AA4C53 /* TaigaLoginPrompt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaLoginPrompt.swift; path = Features/Taiga/Views/TaigaLoginPrompt.swift; sourceTree = ""; }; + 068E2976B54047B4D0261D74 /* TerminalWorkflowsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalWorkflowsView.swift; path = GitMac/Features/Terminal/Enhanced/TerminalWorkflowsView.swift; sourceTree = SOURCE_ROOT; }; + 08F8D7BD58D43721D608D383 /* LargeDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LargeDiffView.swift; path = ../Features/Diff/LargeDiffView.swift; sourceTree = ""; }; + 0B70C1A5D0DB3C69996CE7FA /* NotionPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotionPanel.swift; path = Features/Notion/NotionPanel.swift; sourceTree = ""; }; + 0B7F82ACD609B8D561720E7D /* EmbeddedTerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EmbeddedTerminalView.swift; path = Features/Terminal/EmbeddedTerminalView.swift; sourceTree = ""; }; + 0C2B31BA27529F5863734DC0 /* CommitGraphView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitGraphView.swift; path = ../Features/CommitGraph/CommitGraphView.swift; sourceTree = ""; }; + 0D4393B45041101C7B5B1DF2 /* WorktreeListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorktreeListView.swift; path = Features/Worktrees/WorktreeListView.swift; sourceTree = ""; }; + 0D7BA9451B9BDFAF6D436787 /* DiffEngineView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffEngineView.swift; path = ../Features/Diff/DiffEngineView.swift; sourceTree = ""; }; + 0DFDD01854D7819AD01985D9 /* TaigaSharedViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaSharedViews.swift; path = Features/Taiga/Views/TaigaSharedViews.swift; sourceTree = ""; }; + 0E8861735FD09AB43C10F3AD /* DSGenericIntegrationPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSGenericIntegrationPanel.swift; path = Components/Organisms/Integration/DSGenericIntegrationPanel.swift; sourceTree = ""; }; + 0F069FB912BF25DF89EF1F94 /* GitHubPRService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubPRService.swift; path = ../../Features/CommitGraph/Services/GitHubPRService.swift; sourceTree = ""; }; + 0F8938D30C93984F880916CA /* UnifiedFileContextMenu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnifiedFileContextMenu.swift; path = Components/UnifiedFileContextMenu.swift; sourceTree = ""; }; + 0F96668869E06EF60C86ED41 /* DSTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextField.swift; sourceTree = SOURCE_ROOT; }; + 10E8846BFD8F23014F452AD1 /* GroupSheets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupSheets.swift; path = GitMac/App/Sheets/GroupSheets.swift; sourceTree = SOURCE_ROOT; }; + 114B5EA3C64BF616103018C2 /* SettingsSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SettingsSection.swift; path = ../../Features/Settings/Components/SettingsSection.swift; sourceTree = ""; }; + 1169A7CE797833DAB1113376 /* GeneralSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeneralSettingsTab.swift; path = ../../Features/Settings/Tabs/GeneralSettingsTab.swift; sourceTree = ""; }; + 1202B39970A7D013600F46DF /* RemoteManagementView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Remotes/RemoteManagementView.swift; sourceTree = SOURCE_ROOT; }; + 1239024F83757F6F28F31270 /* GitHooksView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHooksView.swift; path = Features/GitHooks/GitHooksView.swift; sourceTree = ""; }; + 12A2EC67E6ADB3171F1139CD /* BaseRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseRow.swift; path = ../Components/Rows/BaseRow.swift; sourceTree = ""; }; + 12DA46B215C509E7162E6325 /* PluginRegistry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/PluginRegistry.swift; sourceTree = SOURCE_ROOT; }; + 1319443A5D6F0D217BF7BEDA /* CardStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Cards/CardStyle.swift; sourceTree = SOURCE_ROOT; }; + 15161D366FAC91D524B1F99C /* TerminalAIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalAIService.swift; path = Features/Terminal/Enhanced/TerminalAIService.swift; sourceTree = ""; }; + 1540D12594BA091D091556B9 /* WorkspaceSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceSettingsTab.swift; path = ../../Features/Settings/Tabs/WorkspaceSettingsTab.swift; sourceTree = ""; }; + 1640300D8BF15C19ED177B81 /* TaigaSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/TaigaSettingsViews.swift; sourceTree = ""; }; + 16DFE5164DF91A0796214C07 /* DSSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSSettingsSheet.swift; path = Organisms/Integration/DSSettingsSheet.swift; sourceTree = ""; }; + 17012E024F076BAAD919FF1C /* RightCommitDetailPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RightCommitDetailPanel.swift; path = GitMac/App/Panels/Right/RightCommitDetailPanel.swift; sourceTree = SOURCE_ROOT; }; + 1711398A1F8B37AACCC5D04A /* DSInfiniteList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSInfiniteList.swift; path = Organisms/Lists/DSInfiniteList.swift; sourceTree = ""; }; + 17D5B35E5A8E665E718E7F76 /* HistoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoryView.swift; path = Features/History/HistoryView.swift; sourceTree = ""; }; + 186CAFBEF34A292AB9868362 /* CacheWithTTL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheWithTTL.swift; path = Core/Utils/CacheWithTTL.swift; sourceTree = ""; }; + 199A9B206229569CD300315B /* AITerminalInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AITerminalInputView.swift; path = Components/Terminal/AITerminalInputView.swift; sourceTree = ""; }; + 19A63DBE9BFC4E46B5AE10BD /* RepositoryContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryContext.swift; path = Core/Git/RepositoryContext.swift; sourceTree = ""; }; + 19BA4D4445F5C1D715738856 /* BranchService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchService.swift; path = Core/Services/Specialized/BranchService.swift; sourceTree = ""; }; + 19F6D20DD97CD5B0028A4E1B /* KeyboardShortcutManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/KeyboardShortcutManager.swift; sourceTree = SOURCE_ROOT; }; + 1A15833A17361DA91C02EF00 /* UndoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UndoManager.swift; path = Core/Services/UndoManager.swift; sourceTree = ""; }; + 1AF0843F0AA4E95384583544 /* RemoteListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RemoteListView.swift; path = Features/Remotes/RemoteListView.swift; sourceTree = ""; }; + 1BE7FD2660507EDB36634450 /* RemoteOperationTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/RemoteOperationTracker.swift; sourceTree = SOURCE_ROOT; }; + 1C7B6E6EE3D71DBE737B4C1D /* DiffLineRenderers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffLineRenderers.swift; path = ../Features/Diff/Renderers/DiffLineRenderers.swift; sourceTree = ""; }; + 1D9B988D57B4EBA758747115 /* GitService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitService.swift; path = Core/Services/GitService.swift; sourceTree = ""; }; + 1E722C9BE39DB145F515EE7A /* AWSCodeBuildService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/CICD/AWSCodeBuildService.swift; sourceTree = SOURCE_ROOT; }; + 1F038DA5BD2F2882EEDC31EA /* DiffOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffOptions.swift; path = ../Features/Diff/DiffOptions.swift; sourceTree = ""; }; + 202778629A618B9E881C961C /* DiffMinimap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffMinimap.swift; path = ../Features/Diff/Renderers/DiffMinimap.swift; sourceTree = ""; }; + 2047A6AF811FD0BC3F05BBB3 /* DSIconButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift; sourceTree = SOURCE_ROOT; }; + 20655FA140637287314ADC9E /* TeamActivityViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamActivityViewModel.swift; path = App/Panels/Team/TeamActivityViewModel.swift; sourceTree = ""; }; + 206B997E7B2BDA3CFF449B39 /* DSText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSText.swift; sourceTree = SOURCE_ROOT; }; + 212D7F9876239E3FD1A6ED39 /* PanelHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PanelHeader.swift; path = ../Components/Layout/PanelHeader.swift; sourceTree = ""; }; + 21AA0E718F7F86B46BFD4922 /* ConnectionRibbonsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectionRibbonsView.swift; path = ../Features/Diff/ConnectionRibbonsView.swift; sourceTree = ""; }; + 221681E7C8A56E7B4E0A25DA /* StagingComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingComponents.swift; path = ../App/Panels/Right/StagingComponents.swift; sourceTree = ""; }; + 226F99F90E8A33A69220136F /* ShellExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShellExecutor.swift; path = Core/Utils/ShellExecutor.swift; sourceTree = ""; }; + 22D561F402979003953F081D /* DiffLineContextMenu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffLineContextMenu.swift; path = ../Features/Diff/Renderers/DiffLineContextMenu.swift; sourceTree = ""; }; + 232C0B51BBB0007A1C5DB910 /* DSPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSPicker.swift; sourceTree = SOURCE_ROOT; }; + 2342CC3BD113FD751EF8DD94 /* CherryPickView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CherryPickView.swift; path = Features/CherryPick/CherryPickView.swift; sourceTree = ""; }; + 24FF2E3D9D995902DAD59928 /* LinearSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/LinearSettingsViews.swift; sourceTree = ""; }; + 268952AE4D12EAE5E4A47B3A /* DSTabButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift; sourceTree = SOURCE_ROOT; }; + 273DB06557D32B01CB61BEE5 /* MemoryPressureHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MemoryPressureHandler.swift; path = GitMac/Core/Utils/MemoryPressureHandler.swift; sourceTree = SOURCE_ROOT; }; + 2744088EB2B2CB3C9C518657 /* GitHubIntegration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/GitHub/GitHubIntegration.swift; sourceTree = SOURCE_ROOT; }; + 28CF794CA5CBA4509C1129DB /* DSExpandableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift; sourceTree = SOURCE_ROOT; }; + 28FC445669998FA52E288626 /* SettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SettingsView.swift; path = ../Features/Settings/SettingsView.swift; sourceTree = ""; }; + 29A9EEC65D538BDB576F332D /* CloudPatchService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CloudPatchService.swift; path = ../Features/CloudPatches/CloudPatchService.swift; sourceTree = ""; }; + 29C1CCA3687DD1D264360CB1 /* AvatarService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AvatarService.swift; path = Core/Services/AvatarService.swift; sourceTree = ""; }; + 2BC4ADFAC6AD64D8E79C0C9A /* NotionSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotionSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/NotionSettingsViews.swift; sourceTree = ""; }; + 2BDDC61D881750DCCDC9554F /* BottomPanelContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelContent.swift; path = Features/BottomPanel/Views/BottomPanelContent.swift; sourceTree = ""; }; + 2DF700E92570DDFE3AED8E46 /* TagListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagListView.swift; path = Features/Tags/TagListView.swift; sourceTree = ""; }; + 2EE686394363A5627F695C23 /* ThemeManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Theme/ThemeManager.swift; sourceTree = SOURCE_ROOT; }; + 2F045ABAFE63E9A78313271A /* ListRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListRow.swift; path = ../Components/Rows/ListRow.swift; sourceTree = ""; }; + 2F12FFF9CD468B05E92D4271 /* WarpAIInputBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WarpAIInputBar.swift; path = Features/Terminal/Views/WarpAIInputBar.swift; sourceTree = ""; }; + 2F70BEAF1B46EFA08BD447ED /* LaunchpadView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LaunchpadView.swift; path = Features/Launchpad/LaunchpadView.swift; sourceTree = ""; }; + 2FED351FD1776BBF7E389FFA /* RevertView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Revert/RevertView.swift; sourceTree = SOURCE_ROOT; }; + 309335EA370B8E36FD9B9860 /* DSSearchBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift; sourceTree = SOURCE_ROOT; }; + 30D1227A3429891C6E909AC6 /* GitOperationHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Git/GitOperationHandler.swift; sourceTree = SOURCE_ROOT; }; + 30D7B28A4BC77B8C9638775F /* IntegrationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationViewModel.swift; sourceTree = SOURCE_ROOT; }; + 311732177EB42C4A81308A02 /* BranchSelectorButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchSelectorButton.swift; path = ../../Features/CommitGraph/Components/BranchSelectorButton.swift; sourceTree = ""; }; + 311819CE85C69FBD8317B971 /* TerminalPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalPanel.swift; path = App/Panels/Center/TerminalPanel.swift; sourceTree = ""; }; + 31850924BB032CD7AAE897D5 /* ActionButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ActionButton.swift; path = App/Components/ActionButton.swift; sourceTree = ""; }; + 32798DDE1B043BCB72AFEDC5 /* TaigaTicketsPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaTicketsPanel.swift; path = Features/Taiga/TaigaTicketsPanel.swift; sourceTree = ""; }; + 3500F4E08558A1C65E4E6108 /* TaigaViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaViewModel.swift; path = Features/Taiga/TaigaViewModel.swift; sourceTree = ""; }; + 35FF5038CA6532569A529AAA /* GraphMinimapView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GraphMinimapView.swift; path = ../../Features/CommitGraph/Components/GraphMinimapView.swift; sourceTree = ""; }; + 366910B3DFF367ACB578E2B7 /* BottomPanelTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTabBar.swift; path = Features/BottomPanel/Views/BottomPanelTabBar.swift; sourceTree = ""; }; + 3856F1845C89352A8A46D281 /* SubmoduleComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubmoduleComponents.swift; path = GitMac/App/Panels/Left/SubmoduleComponents.swift; sourceTree = SOURCE_ROOT; }; + 38AF44C8ADA6FAF518572B88 /* AIServiceExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AIServiceExtensions.swift; path = GitMac/Core/Services/AI/AIServiceExtensions.swift; sourceTree = SOURCE_ROOT; }; + 398BB78A6379748BC49FA09F /* JiraPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraPlugin.swift; sourceTree = SOURCE_ROOT; }; + 3A3AAFD8CF5452E47AD098EB /* DSSpacer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSSpacer.swift; sourceTree = SOURCE_ROOT; }; + 3AAB74E609D51B22B8049D13 /* DSToolbarButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift; sourceTree = SOURCE_ROOT; }; + 3AFAACE42C7F37924C183068 /* DSSecureField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift; sourceTree = SOURCE_ROOT; }; + 3BA53424BA0CE1910F723088 /* NotionService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotionService.swift; path = Core/Services/NotionService.swift; sourceTree = ""; }; + 3CBD224C28988637497A106C /* JiraViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Jira/JiraViewModel.swift; sourceTree = SOURCE_ROOT; }; + 3DCECE17C0C42203380CB8A6 /* GhosttyEnhancedViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyEnhancedViewModel.swift; path = Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift; sourceTree = ""; }; + 3E42F45A779174FB0192AA60 /* ResetView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Reset/ResetView.swift; sourceTree = SOURCE_ROOT; }; + 3E5FE2C8F4C1E2317EDCFB9A /* Repository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repository.swift; path = Core/Git/Repository.swift; sourceTree = ""; }; + 3F0823301FFD9666FF23BB6B /* SyncButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncButton.swift; path = ../../Features/CommitGraph/Components/SyncButton.swift; sourceTree = ""; }; + 40520EC2939EE30B975A15C7 /* TerminalInputBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalInputBar.swift; path = GitMac/Features/Terminal/Views/TerminalInputBar.swift; sourceTree = SOURCE_ROOT; }; + 414FA69A53C987CDE2E1312F /* StashService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashService.swift; path = Core/Services/Specialized/StashService.swift; sourceTree = ""; }; + 416D4860255DDA9948479B7A /* FuzzyFileFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Search/FuzzyFileFinder.swift; sourceTree = SOURCE_ROOT; }; + 418DEF04AD5914A0852FBE2F /* TerminalCommandPalette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalCommandPalette.swift; path = Features/Terminal/Enhanced/TerminalCommandPalette.swift; sourceTree = ""; }; + 43BA801C0F45F514B99B0554 /* BranchComparisonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Branches/BranchComparisonView.swift; sourceTree = SOURCE_ROOT; }; + 44313C9929F962B9469DE8E7 /* LayoutHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutHelpers.swift; path = ../Components/Utilities/LayoutHelpers.swift; sourceTree = ""; }; + 451F64E5457594941DF51A31 /* EnhancedTerminalPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnhancedTerminalPanel.swift; path = Features/Terminal/Views/EnhancedTerminalPanel.swift; sourceTree = ""; }; + 45438C33E7FA5A730083B876 /* TerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalView.swift; path = Features/Terminal/TerminalView.swift; sourceTree = ""; }; + 46786D226E232F901D917031 /* CommitDetailViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitDetailViewModel.swift; path = ../App/ViewModels/CommitDetailViewModel.swift; sourceTree = ""; }; + 479358BE8600B9F9CE64EC29 /* MinimalTerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MinimalTerminalView.swift; path = Features/Terminal/MinimalTerminalView.swift; sourceTree = ""; }; + 47CB34938E677983AF18543E /* ExternalToolsManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/ExternalToolsManager.swift; sourceTree = SOURCE_ROOT; }; + 47CDACC9DB306400AB277B7A /* SearchView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Search/SearchView.swift; sourceTree = SOURCE_ROOT; }; + 48195E942F327C928D76E3F0 /* DiffBreadcrumb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffBreadcrumb.swift; path = ../Features/Diff/DiffBreadcrumb.swift; sourceTree = ""; }; + 489CFEF8C9808C1898F88636 /* MergeService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MergeService.swift; path = Core/Services/Specialized/MergeService.swift; sourceTree = ""; }; + 48CED6026902BB06896B1582 /* BottomPanelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelManager.swift; path = Features/BottomPanel/BottomPanelManager.swift; sourceTree = ""; }; + 49D415137CD4DBE6C277B0AD /* DSResizablePanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSResizablePanel.swift; path = Organisms/Panels/DSResizablePanel.swift; sourceTree = ""; }; + 49DCB09417068B1BF850DA18 /* IntegrationPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/PluginSystem/IntegrationPlugin.swift; sourceTree = SOURCE_ROOT; }; + 4A9CA1C982F3BD6FBF50546C /* AISettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AISettingsTab.swift; path = ../../Features/Settings/Tabs/AISettingsTab.swift; sourceTree = ""; }; + 4B436DF92856B5B4E564361C /* StagingFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingFile.swift; path = ../App/Models/StagingFile.swift; sourceTree = ""; }; + 4BD0BD26988ABF1E4F35AF6B /* Components */ = {isa = PBXFileReference; includeInIndex = 1; name = Components; path = ../../Features/CommitGraph/Components; sourceTree = ""; }; + 4CAF4B562204156C4866EFD7 /* DeepLinkService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DeepLinkService.swift; path = ../Features/DeepLinking/DeepLinkService.swift; sourceTree = ""; }; + 4FF85B9EB03B18167844D0F6 /* WorkspaceManagerTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceManagerTab.swift; path = GitMac/Features/Settings/Tabs/WorkspaceManagerTab.swift; sourceTree = ""; }; + 50BF4669D757C60A0A258549 /* DSSkeletonBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift; sourceTree = SOURCE_ROOT; }; + 51E2503BBB1447E619977588 /* DiffStatusBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffStatusBar.swift; path = ../Features/Diff/DiffStatusBar.swift; sourceTree = ""; }; + 52DB5D866FC40BF9D4931F12 /* ContextMenus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContextMenus.swift; path = Components/ContextMenus.swift; sourceTree = ""; }; + 54F22F52D0E8130CC29E01D3 /* DSDropZone.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDropZone.swift; sourceTree = SOURCE_ROOT; }; + 54FF0182C99EE397632A9599 /* CommitService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitService.swift; path = Core/Services/Specialized/CommitService.swift; sourceTree = ""; }; + 557CA937B9386B978825F7B6 /* DSGroupedList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSGroupedList.swift; path = Organisms/Lists/DSGroupedList.swift; sourceTree = ""; }; + 563DA23E60975240AFB050EE /* LargeFileDiffRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LargeFileDiffRenderer.swift; path = ../Features/Diff/Renderers/LargeFileDiffRenderer.swift; sourceTree = ""; }; + 56A86BF2D1C0B6AD97B874C0 /* BottomPanelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelType.swift; path = Features/BottomPanel/Models/BottomPanelType.swift; sourceTree = ""; }; + 56C95B46D74511D3AAAE763C /* RepositorySelectorButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositorySelectorButton.swift; path = ../../Features/CommitGraph/Components/RepositorySelectorButton.swift; sourceTree = ""; }; + 56F5CD5D6138045969197FF2 /* TerminalCompletions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalCompletions.swift; path = GitMac/Features/Terminal/Core/TerminalCompletions.swift; sourceTree = SOURCE_ROOT; }; + 5709C8F7572B6F391068E6FC /* LFSManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LFSManager.swift; path = ../Features/LFS/LFSManager.swift; sourceTree = ""; }; + 5811E200D2846DB2F3B5A1F5 /* ConflictPreventionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConflictPreventionView.swift; path = ../Features/ConflictPrevention/ConflictPreventionView.swift; sourceTree = ""; }; + 592CDACB1F95C1AFF782008E /* StagingService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingService.swift; path = Core/Services/Specialized/StagingService.swift; sourceTree = ""; }; + 596427854C21B15DD7CC428A /* SubmoduleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubmoduleView.swift; path = ../Features/Submodules/SubmoduleView.swift; sourceTree = ""; }; + 597B2B4C7339D9BDBF7F562F /* CommitMessageArea.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitMessageArea.swift; path = Components/Commit/CommitMessageArea.swift; sourceTree = ""; }; + 59820498B20A741308942117 /* InitRepositorySheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InitRepositorySheet.swift; path = GitMac/App/Sheets/InitRepositorySheet.swift; sourceTree = SOURCE_ROOT; }; + 59B7AE52B61BB88CB19938B7 /* CommandPalette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/CommandPalette/CommandPalette.swift; sourceTree = SOURCE_ROOT; }; + 5A83152F6E2CD6F4E437C5C3 /* PushFetchButtons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushFetchButtons.swift; path = ../../Features/CommitGraph/Components/PushFetchButtons.swift; sourceTree = ""; }; + 5AB5CD84F6C72FACD1271F13 /* StashComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashComponents.swift; path = ../App/Panels/Right/StashComponents.swift; sourceTree = ""; }; + 5B73ABCA48989962336F44BE /* JiraPanelGeneric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraPanelGeneric.swift; path = Features/Jira/JiraPanelGeneric.swift; sourceTree = ""; }; + 5BD7CE628B2B5B937AB429B6 /* DSLoginPrompt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSLoginPrompt.swift; path = Organisms/Integration/DSLoginPrompt.swift; sourceTree = ""; }; + 5C083D4B07B57253A6C74896 /* DSEmptyState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSEmptyState.swift; sourceTree = SOURCE_ROOT; }; + 5C63DF08665ADFBF854585A2 /* StashDetailPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashDetailPanel.swift; path = GitMac/App/Panels/Right/StashDetailPanel.swift; sourceTree = SOURCE_ROOT; }; + 5C72A5B4B589599572CCE32D /* DSProgressBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift; sourceTree = SOURCE_ROOT; }; + 5C7FB0ED01FC81BE9CFEAA25 /* DSLoadingState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSLoadingState.swift; sourceTree = SOURCE_ROOT; }; + 5CF76682BE59E45805F06FCF /* DSTextEditor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift; sourceTree = SOURCE_ROOT; }; + 5D9EE2D5D4D92DD9E7A57156 /* TeamComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamComponents.swift; path = App/Panels/Team/TeamComponents.swift; sourceTree = ""; }; + 5DBF4D2461784FF64126C205 /* FeatureManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureManager.swift; sourceTree = ""; }; + 5E99A07FBA1E2DA4CDF2D8F3 /* DSActionBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSActionBar.swift; sourceTree = SOURCE_ROOT; }; + 5F1563EA7D7837627E6866A9 /* StashDetailPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashDetailPanel.swift; path = ../App/Panels/Right/StashDetailPanel.swift; sourceTree = ""; }; + 607DA6098E0A0A61782A0DF3 /* ViewModifiers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewModifiers.swift; path = ../Components/Utilities/ViewModifiers.swift; sourceTree = ""; }; + 60FE59D2EAA5418172A52CBA /* FileContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileContentView.swift; path = Features/FileViewer/FileContentView.swift; sourceTree = ""; }; + 611701D71659694B52140952 /* GenericFileTreeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericFileTreeView.swift; path = Components/FileTree/GenericFileTreeView.swift; sourceTree = ""; }; + 6117B76D20F187270457CD67 /* SectionHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionHeader.swift; path = ../Components/Layout/SectionHeader.swift; sourceTree = ""; }; + 625A6458860C14BBBAFB1A1F /* GitHooksComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHooksComponents.swift; path = GitMac/App/Panels/Left/GitHooksComponents.swift; sourceTree = SOURCE_ROOT; }; + 63D9F13789EF1312E75BA19B /* JiraPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraPanel.swift; path = Features/Jira/JiraPanel.swift; sourceTree = ""; }; + 64D7DD67F634F228B2BA0CEE /* StoreManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoreManager.swift; path = Core/StoreKit/StoreManager.swift; sourceTree = ""; }; + 66B057DE0EB0A466E9E33BC9 /* RightStagingPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RightStagingPanel.swift; path = ../App/Panels/Right/RightStagingPanel.swift; sourceTree = ""; }; + 68995E0B81A9B7E42741AE47 /* GitSubmoduleService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitSubmoduleService.swift; path = Core/Services/GitSubmoduleService.swift; sourceTree = ""; }; + 6A3DB6D02E367EF664B47F0D /* TerminalSessionSharingService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalSessionSharingService.swift; path = GitMac/Features/Terminal/Enhanced/TerminalSessionSharingService.swift; sourceTree = SOURCE_ROOT; }; + 6A6251BEE308BCE87B307FDF /* CompactRepoTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactRepoTab.swift; path = ../App/Toolbars/CompactRepoTab.swift; sourceTree = ""; }; + 6B39632AD8E994CCDF797593 /* GitHooksComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitHooksComponents.swift; sourceTree = ""; }; + 6BF5781EDDF9059C148481E7 /* DiffViewWithClose.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffViewWithClose.swift; path = App/Panels/Center/DiffViewWithClose.swift; sourceTree = ""; }; + 6C039C6AB6CAE0BFC42BECBC /* InsightsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InsightsView.swift; path = ../Features/Insights/InsightsView.swift; sourceTree = ""; }; + 6D9AE8B50C11C983BA3F87BC /* DSLabeledField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift; sourceTree = SOURCE_ROOT; }; + 6DA53B9200B4A53D2CB6D1C9 /* DSDivider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSDivider.swift; sourceTree = SOURCE_ROOT; }; + 6E6FFF74126F40CCF366AC65 /* LinearService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearService.swift; path = Core/Services/LinearService.swift; sourceTree = ""; }; + 6EA0C9DF38025EE57835ABB5 /* DiffService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffService.swift; path = Core/Services/Specialized/DiffService.swift; sourceTree = ""; }; + 700C8193E2C9ABEEC282E57C /* GhosttyTerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyTerminalView.swift; path = Features/Terminal/GhosttyTerminalView.swift; sourceTree = ""; }; + 709B89F0F410533E74A4D21D /* LightweightDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LightweightDiffView.swift; path = ../Features/Diff/LightweightDiffView.swift; sourceTree = ""; }; + 710BE37EEC4AE2E2EDE63535 /* JiraService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraService.swift; path = Core/Services/JiraService.swift; sourceTree = ""; }; + 7185C6D6E41796EB55EEF098 /* Separator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Separator.swift; path = ../Components/Layout/Separator.swift; sourceTree = ""; }; + 71CF81A55F5DF67A99DF4F52 /* ConflictResolverView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConflictResolverView.swift; path = Features/MergeConflict/ConflictResolverView.swift; sourceTree = ""; }; + 71D743335AA1A3796B0A2723 /* GhosttyEnhancedTerminalView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyEnhancedTerminalView.swift; path = Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift; sourceTree = ""; }; + 723BC39F5123B40D0EB427E3 /* MinimapView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/MinimapView.swift; sourceTree = SOURCE_ROOT; }; + 731D843C72FB99624C6C9211 /* GPGSSHManagementView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GPGSSHManagementView.swift; path = ../Features/Security/GPGSSHManagementView.swift; sourceTree = ""; }; + 741B533442FCDD65DEE553DA /* Stash.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stash.swift; path = Core/Git/Stash.swift; sourceTree = ""; }; + 741C54327F7D0A9ED06C024F /* AppTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppTheme.swift; path = Components/AppTheme.swift; sourceTree = ""; }; + 751B4C6A40ABDFF0FB9131F1 /* CommitComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitComponents.swift; path = GitMac/App/Panels/Right/CommitComponents.swift; sourceTree = SOURCE_ROOT; }; + 7778017C0C82557A417F6EBD /* AnimationExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationExtensions.swift; path = ../Components/Utilities/AnimationExtensions.swift; sourceTree = ""; }; + 77DF6AB18445C7F81E95CD87 /* TaigaContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaContentView.swift; path = Features/Taiga/TaigaContentView.swift; sourceTree = ""; }; + 77FDB310B5DBFC8EC103E983 /* DiffSearchAndNavigation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffSearchAndNavigation.swift; path = ../Features/Diff/DiffSearchAndNavigation.swift; sourceTree = ""; }; + 7801DE614213369EF2205E93 /* AICommandSuggestions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AICommandSuggestions.swift; path = Features/Terminal/Enhanced/AICommandSuggestions.swift; sourceTree = ""; }; + 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitOperationProgressView.swift; path = Components/GitOperationProgressView.swift; sourceTree = ""; }; + 79542D479476AE91B3E954EF /* PlannerSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlannerSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/PlannerSettingsViews.swift; sourceTree = ""; }; + 7989C44ACCDF1E41D18E2AC1 /* BinaryFileRenderers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryFileRenderers.swift; path = ../Features/Diff/Renderers/BinaryFileRenderers.swift; sourceTree = ""; }; + 7A74E0458D50F1A151CCA0F0 /* SubmoduleComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SubmoduleComponents.swift; sourceTree = ""; }; + 7BA474C56D92B033F71E4848 /* CommitComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitComponents.swift; path = ../App/Panels/Right/CommitComponents.swift; sourceTree = ""; }; + 7D540B10F6B69E9A7F813461 /* JiraLoginPromptView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraLoginPromptView.swift; path = ../Features/Jira/Views/JiraLoginPromptView.swift; sourceTree = ""; }; + 7E442DAD4EDA28B5EB206F5F /* CommitFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitFile.swift; path = ../App/Models/CommitFile.swift; sourceTree = ""; }; + 7E551DAE216359FB5ACFE700 /* JiraIssuesListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraIssuesListView.swift; path = ../Features/Jira/Views/JiraIssuesListView.swift; sourceTree = ""; }; + 7E98303F1CD64673B43F9639 /* Remote.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Remote.swift; path = Core/Git/Remote.swift; sourceTree = ""; }; + 8091762F903234CDECBD980F /* GitSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitSettingsTab.swift; path = ../../Features/Settings/Tabs/GitSettingsTab.swift; sourceTree = ""; }; + 80B1AE96185C72EB618AB03C /* DSSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSSheet.swift; path = Organisms/DSSheet.swift; sourceTree = ""; }; + 80BED603E9B131C466C78CE5 /* SecretRedactionService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecretRedactionService.swift; path = GitMac/Features/Terminal/Enhanced/SecretRedactionService.swift; sourceTree = SOURCE_ROOT; }; + 81B111412EB02064E54C157E /* ReflogView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Reflog/ReflogView.swift; sourceTree = SOURCE_ROOT; }; + 8263EEAA4CA902E6D88CC782 /* EnhancedDiffToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnhancedDiffToolbar.swift; path = ../../Features/Diff/Components/EnhancedDiffToolbar.swift; sourceTree = ""; }; + 82FF2714B9F2DB8A978C0EF8 /* StagingAreaPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingAreaPanel.swift; path = GitMac/App/Panels/Right/StagingAreaPanel.swift; sourceTree = SOURCE_ROOT; }; + 8316008DE7D82F7A62DC0F82 /* XcodeToolbarDivider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeToolbarDivider.swift; path = Components/Xcode/XcodeToolbarDivider.swift; sourceTree = ""; }; + 83AF412DBC595003F22E6FCA /* DiffEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffEngine.swift; path = Core/Git/DiffEngine.swift; sourceTree = ""; }; + 83E77F535DA31CCD185F87AF /* CloneRepositorySheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CloneRepositorySheet.swift; path = GitMac/App/Sheets/CloneRepositorySheet.swift; sourceTree = SOURCE_ROOT; }; + 83FFF8DA7810B657987C810D /* DSTabPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSTabPanel.swift; path = Organisms/Panels/DSTabPanel.swift; sourceTree = ""; }; + 86FA50E65BBBBC71CBFD6ED7 /* GitHubOAuth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubOAuth.swift; path = Core/Services/GitHubOAuth.swift; sourceTree = ""; }; + 87918D7DE285A283FF241764 /* DSCollapsiblePanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSCollapsiblePanel.swift; path = Organisms/Panels/DSCollapsiblePanel.swift; sourceTree = ""; }; + 88BD0BE0F4444FCE1396A212 /* BranchRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchRow.swift; path = ../Components/Rows/BranchRow.swift; sourceTree = ""; }; + 8919B5353DAAE1D6C06F8BBB /* DSIntegrationPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSIntegrationPanel.swift; path = Organisms/Integration/DSIntegrationPanel.swift; sourceTree = ""; }; + 895A0312F04D67E50BB88FCA /* NotionContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotionContentView.swift; path = Features/Notion/NotionContentView.swift; sourceTree = ""; }; + 8AB1EA918F36B9CA215847E9 /* GitSubmodule.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitSubmodule.swift; path = Core/Models/GitSubmodule.swift; sourceTree = ""; }; + 8B32BADC104E4660C5B68987 /* DSTabContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSTabContainer.swift; path = Organisms/DSTabContainer.swift; sourceTree = ""; }; + 8BE3A5493D73AF5335D28E79 /* XcodeToolbarButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeToolbarButton.swift; path = Components/Xcode/XcodeToolbarButton.swift; sourceTree = ""; }; + 8C38069C386D2444ADE094A5 /* DSSpinner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift; sourceTree = SOURCE_ROOT; }; + 8E5FA97CD68426F1A4DD31CE /* DSButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSButton.swift; sourceTree = SOURCE_ROOT; }; + 8ED30154FBD5E02F2BB86ABF /* JiraContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraContentView.swift; path = Features/Jira/JiraContentView.swift; sourceTree = ""; }; + 8F715ACED106D700C4870CA9 /* MergeBranchSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MergeBranchSheet.swift; path = GitMac/App/Sheets/MergeBranchSheet.swift; sourceTree = SOURCE_ROOT; }; + 8FEE4054B2842E02ED448EF0 /* CloudSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CloudSyncService.swift; path = GitMac/Core/Services/CloudSyncService.swift; sourceTree = SOURCE_ROOT; }; + 901D56504BADF5FC43A6EA46 /* KeychainManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainManager.swift; path = Core/Utils/KeychainManager.swift; sourceTree = ""; }; + 90CD7B4608F6E75CA6DBE9CB /* StashListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StashListView.swift; path = Features/Stash/StashListView.swift; sourceTree = ""; }; + 91F1ADE5FB755F6E1A0E5CDE /* ToolbarComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToolbarComponents.swift; path = ../App/Toolbars/ToolbarComponents.swift; sourceTree = ""; }; + 927BAABEB70CD3F99787E642 /* PlannerTasksPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlannerTasksPanel.swift; path = Features/Planner/PlannerTasksPanel.swift; sourceTree = ""; }; + 93997D6789256BCEC9328D26 /* DSSearchField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift; sourceTree = SOURCE_ROOT; }; + 946B0E647FF99145573D874E /* TaigaTasksView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaTasksView.swift; path = Features/Taiga/Views/TaigaTasksView.swift; sourceTree = ""; }; + 96298B0967612ED6114D608E /* DSPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSPanel.swift; path = Organisms/Panels/DSPanel.swift; sourceTree = ""; }; + 9688CF7D96D31FCC27CAB3EC /* TerminalBlocksView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalBlocksView.swift; path = GitMac/Features/Terminal/Enhanced/TerminalBlocksView.swift; sourceTree = SOURCE_ROOT; }; + 969C5AC483183BB48CD34C4D /* RightCommitDetailPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RightCommitDetailPanel.swift; path = ../App/Panels/Right/RightCommitDetailPanel.swift; sourceTree = ""; }; + 96C2B56F9C9BF273E8E7A5FD /* CommitDetailPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommitDetailPanel.swift; path = ../../Features/CommitGraph/Components/CommitDetailPanel.swift; sourceTree = ""; }; + 96E0BBC802E33B600517DE03 /* DSStatusBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift; sourceTree = SOURCE_ROOT; }; + 97396DC70529FC8190378B29 /* GitMacApp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitMacApp.swift; path = App/GitMacApp.swift; sourceTree = ""; }; + 98E23A49EE7DBFA428FF243F /* JiraSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraSettingsSheet.swift; path = ../Features/Jira/Views/JiraSettingsSheet.swift; sourceTree = ""; }; + 99214D51AED49AD69405C6FF /* RepositoryActivityViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RepositoryActivityViewModel.swift; path = GitMac/Features/BottomPanel/ViewModels/RepositoryActivityViewModel.swift; sourceTree = SOURCE_ROOT; }; + 999FC0A275A93476AE5F7067 /* GitProfilesService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitProfilesService.swift; path = ../Features/Profiles/GitProfilesService.swift; sourceTree = ""; }; + 99AA1FB5A8306B98A36E3C86 /* AIService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AIService.swift; path = Core/Services/AIService.swift; sourceTree = ""; }; + 99C03FD5905DF5162D37E89E /* TaigaService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaService.swift; path = Core/Services/TaigaService.swift; sourceTree = ""; }; + 99E7BE67D49ECABECC42D99C /* FileChangesIndicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileChangesIndicator.swift; path = ../../Features/CommitGraph/Components/FileChangesIndicator.swift; sourceTree = ""; }; + 9A327C112284D1DF0EFDF4DD /* FileTreeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileTreeProtocols.swift; path = Components/FileTree/FileTreeProtocols.swift; sourceTree = ""; }; + 9A3A169E41245ABA5B312C38 /* ComponentCatalog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/ComponentCatalog.swift; sourceTree = SOURCE_ROOT; }; + 9AF69A8507A78495E37168B6 /* GitFlowManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitFlowManager.swift; path = ../Features/GitFlow/GitFlowManager.swift; sourceTree = ""; }; + 9BF55B48131B9F6858E03454 /* CreateBranchSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CreateBranchSheet.swift; path = GitMac/App/Sheets/CreateBranchSheet.swift; sourceTree = SOURCE_ROOT; }; + 9C639B695B6861F665F5E095 /* TerminalNLInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalNLInputView.swift; path = Features/Terminal/Enhanced/TerminalNLInputView.swift; sourceTree = ""; }; + 9CF60F8365023DDDA48C436F /* DSLinkButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift; sourceTree = SOURCE_ROOT; }; + 9D7FCE58539D9D09BCEB7261 /* SearchQuery.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchQuery.swift; path = ../Features/CommitGraph/Search/SearchQuery.swift; sourceTree = ""; }; + A107764C0991E138D3BEEF65 /* SubmoduleManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubmoduleManager.swift; path = ../Features/Submodules/SubmoduleManager.swift; sourceTree = ""; }; + A12E643D92471924D88FBEFE /* FileRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRow.swift; path = ../Components/Rows/FileRow.swift; sourceTree = ""; }; + A192FF680B6F020F6E148E4A /* GhosttyNativeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyNativeView.swift; path = Features/Terminal/GhosttyNativeView.swift; sourceTree = ""; }; + A1B3C55C29AB720739CDE519 /* AccountsSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccountsSettingsTab.swift; path = ../../Features/Settings/Tabs/AccountsSettingsTab.swift; sourceTree = ""; }; + A28EB01A5FA82BA5F5A3728A /* UnifiedBottomPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnifiedBottomPanel.swift; path = Features/BottomPanel/Views/UnifiedBottomPanel.swift; sourceTree = ""; }; + A3D8DDC9BB7A5208EF261161 /* IssueListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IssueListView.swift; path = Features/Issues/IssueListView.swift; sourceTree = ""; }; + A524DDCBE31594D98C8518CD /* TagService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagService.swift; path = Core/Services/Specialized/TagService.swift; sourceTree = ""; }; + A6949012590C4505C0112608 /* DSDraggableItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift; sourceTree = SOURCE_ROOT; }; + A72B4B428ACA0A1D3C01558D /* LinearContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearContentView.swift; path = Features/Linear/LinearContentView.swift; sourceTree = ""; }; + A78C8CA3402C6DF0DB467BE0 /* SubscriptionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionView.swift; path = ../Features/Settings/SubscriptionView.swift; sourceTree = ""; }; + A7A72EC9847E8539DA57C4CE /* DSHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSHeader.swift; sourceTree = SOURCE_ROOT; }; + A8BFECF7549F727776FCA676 /* DSDraggableList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSDraggableList.swift; path = Organisms/Lists/DSDraggableList.swift; sourceTree = ""; }; + A9429CC1284A41A1A5A7741F /* NotificationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/NotificationManager.swift; sourceTree = SOURCE_ROOT; }; + A9AD8F4D449606E5E5A4A2EC /* FileTypeIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileTypeIcon.swift; path = Components/Icons/FileTypeIcon.swift; sourceTree = ""; }; + AA1C6958688FFE9EDBCC16D0 /* CICDComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CICDComponents.swift; sourceTree = ""; }; + AA39C01D990E7F7EFCCDFE23 /* StagingComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingComponents.swift; path = GitMac/App/Panels/Right/StagingComponents.swift; sourceTree = SOURCE_ROOT; }; + AA7B4BEC591DFBFD7420A56D /* FileBrowserView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/FileViewer/FileBrowserView.swift; sourceTree = SOURCE_ROOT; }; + ABAB2827F401F387B51BC038 /* FileListSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileListSection.swift; path = ../Components/Layout/FileListSection.swift; sourceTree = ""; }; AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = IMPLEMENTATION_ROADMAP.md; sourceTree = ""; }; - AC9431992EE97BBF00A59026 /* ThemeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeManager.swift; sourceTree = ""; }; - AC94319B2EE97BFF00A59026 /* KeyboardShortcutManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardShortcutManager.swift; sourceTree = ""; }; - AC94319D2EE97C3B00A59026 /* MinimapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MinimapView.swift; sourceTree = ""; }; - AC94319F2EE97C8400A59026 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; - AC9431A12EE97CC800A59026 /* FileAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileAnnotationView.swift; sourceTree = ""; }; AC9431A32EE97D6000A59026 /* BUILD_FIX.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = BUILD_FIX.md; sourceTree = ""; }; - AC9431A52EE97D8000A59026 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; - AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalToolsManager.swift; sourceTree = ""; }; AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FASE3_PROGRESS.md; sourceTree = ""; }; AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INTEGRATION_GUIDE.md; sourceTree = ""; }; AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = REVIEW_GUIDE.md; sourceTree = ""; }; AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INTEGRATION_CHECKLIST.md; sourceTree = ""; }; AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FIX_BUILD_NOW.md; sourceTree = ""; }; AC9431BD2EE9822D00A59026 /* QUICK_START.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = QUICK_START.md; sourceTree = ""; }; - AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteOperationTracker.swift; sourceTree = ""; }; AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = REMOTE_STATUS_INTEGRATION.md; sourceTree = ""; }; AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = WARNING_FIXES.md; sourceTree = ""; }; AC9431C52EED65B400A59026 /* DIFFVIEW_PERFORMANCE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DIFFVIEW_PERFORMANCE.md; sourceTree = ""; }; - ACB688DC2EEE3AA200CCD845 /* DiffOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffOptions.swift; sourceTree = ""; }; - ACB688DD2EEE3AC400CCD845 /* DiffCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffCache.swift; sourceTree = ""; }; - ACB688DE2EEE3B0100CCD845 /* DiffEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffEngine.swift; sourceTree = ""; }; - ACB688DF2EEE3B2A00CCD845 /* DiffEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffEngineTests.swift; sourceTree = ""; }; - ACB688E02EEE3B6000CCD845 /* TiledDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiledDiffView.swift; sourceTree = ""; }; - ACB688E12EEE3B8100CCD845 /* DiffSearchEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffSearchEngine.swift; sourceTree = ""; }; - ACB688E22EEE3BA100CCD845 /* DiffStatusBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffStatusBar.swift; sourceTree = ""; }; - ACC600402F024855005DC34D /* DSIntegrationPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSIntegrationPanel.swift; sourceTree = ""; }; - ACC600412F024855005DC34D /* DSLoginPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSLoginPrompt.swift; sourceTree = ""; }; - ACC600422F024855005DC34D /* DSSettingsSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSSettingsSheet.swift; sourceTree = ""; }; - ACC600442F024855005DC34D /* DSDraggableList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSDraggableList.swift; sourceTree = ""; }; - ACC600452F024855005DC34D /* DSGroupedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSGroupedList.swift; sourceTree = ""; }; - ACC600462F024855005DC34D /* DSInfiniteList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSInfiniteList.swift; sourceTree = ""; }; - ACC600472F024855005DC34D /* DSVirtualizedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSVirtualizedList.swift; sourceTree = ""; }; - ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSCollapsiblePanel.swift; sourceTree = ""; }; - ACC6004A2F024855005DC34D /* DSPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSPanel.swift; sourceTree = ""; }; - ACC6004B2F024855005DC34D /* DSResizablePanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSResizablePanel.swift; sourceTree = ""; }; - ACC6004C2F024855005DC34D /* DSTabPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSTabPanel.swift; sourceTree = ""; }; - ACC6004E2F024855005DC34D /* DSSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSSheet.swift; sourceTree = ""; }; - ACC6004F2F024855005DC34D /* DSTabContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSTabContainer.swift; sourceTree = ""; }; - AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Planner/PlannerPlugin.swift; sourceTree = SOURCE_ROOT; }; - AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/AvatarService.swift; sourceTree = ""; }; - AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AWSCodeBuildService.swift; sourceTree = ""; }; - B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift; sourceTree = ""; }; - B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/GitFlow/GitFlowManager.swift; sourceTree = ""; }; - B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelManager.swift; path = Features/BottomPanel/BottomPanelManager.swift; sourceTree = ""; }; - B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/StagingService.swift; sourceTree = ""; }; - B3798A1846650C01AD285DC8 /* TaigaContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaContentView.swift; path = Features/Taiga/TaigaContentView.swift; sourceTree = ""; }; - B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Notion/NotionPlugin.swift; sourceTree = SOURCE_ROOT; }; - B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift; sourceTree = ""; }; - BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift; sourceTree = SOURCE_ROOT; }; - BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift; sourceTree = ""; }; - BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/TerminalAIService.swift; sourceTree = ""; }; - C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Worktrees/WorktreeListView.swift; sourceTree = ""; }; - C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/WordLevelDiff.swift; sourceTree = ""; }; - C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/StashService.swift; sourceTree = ""; }; - C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/PullRequests/PRListView.swift; sourceTree = ""; }; - C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Settings/SubscriptionView.swift; sourceTree = ""; }; - C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift; sourceTree = ""; }; - C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaViewModel.swift; sourceTree = ""; }; - C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffScrollViews.swift; sourceTree = ""; }; - C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Terminal/TerminalView.swift; sourceTree = ""; }; - C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaIssuesView.swift; path = Features/Taiga/Views/TaigaIssuesView.swift; sourceTree = ""; }; - CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffMinimap.swift; sourceTree = ""; }; - CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Utils/CacheWithTTL.swift; sourceTree = ""; }; - CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Utilities/ModalCoordinator.swift; sourceTree = ""; }; - CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSIcon.swift; sourceTree = SOURCE_ROOT; }; - CF4F843954F997AD46CDBAE8 /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift; sourceTree = SOURCE_ROOT; }; - CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/ContextMenus.swift; sourceTree = ""; }; - D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift; sourceTree = ""; }; - D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSBadge.swift; sourceTree = SOURCE_ROOT; }; - D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSErrorState.swift; sourceTree = SOURCE_ROOT; }; - D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffParser.swift; sourceTree = ""; }; - D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Common/UniversalResizer.swift; sourceTree = ""; }; - D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSListItem.swift; sourceTree = SOURCE_ROOT; }; - D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Linear/LinearPlugin.swift; sourceTree = SOURCE_ROOT; }; - DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Services/Specialized/CommitService.swift; sourceTree = ""; }; - DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/GitHooks/GitHooksView.swift; sourceTree = ""; }; - E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/AIService.swift; sourceTree = ""; }; - E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Common/LayoutConstants.swift; sourceTree = ""; }; - E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Stash/StashListView.swift; sourceTree = ""; }; - E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/Renderers/DiffLineRenderers.swift; sourceTree = ""; }; - EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSToggle.swift; sourceTree = SOURCE_ROOT; }; - ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Worktree.swift; sourceTree = ""; }; - EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Taiga/TaigaTicketsPanel.swift; sourceTree = ""; }; - F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelResizer.swift; path = Features/BottomPanel/Views/BottomPanelResizer.swift; sourceTree = ""; }; - F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaSharedViews.swift; path = Features/Taiga/Views/TaigaSharedViews.swift; sourceTree = ""; }; - F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaTasksView.swift; path = Features/Taiga/Views/TaigaTasksView.swift; sourceTree = ""; }; - F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/StoreKit/StoreManager.swift; sourceTree = ""; }; - F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnifiedBottomPanel.swift; path = Features/BottomPanel/Views/UnifiedBottomPanel.swift; sourceTree = ""; }; - F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/ContentView.swift; sourceTree = ""; }; - F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Icons/StatusIcon.swift; sourceTree = ""; }; - FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/Stash.swift; sourceTree = ""; }; - FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Utils/ShellExecutor.swift; sourceTree = ""; }; - FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift; sourceTree = SOURCE_ROOT; }; - FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/FileViewer/FileContentView.swift; sourceTree = ""; }; - GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/AppTheme.swift; sourceTree = ""; }; + AD4B737145B8FD686DDAC7FC /* GitEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitEngine.swift; path = Core/Git/GitEngine.swift; sourceTree = ""; }; + AD50DBAE423A86E69313A5D2 /* LicenseValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LicenseValidator.swift; sourceTree = ""; }; + ADC883D77ADF2991AC3477CC /* JiraSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/JiraSettingsViews.swift; sourceTree = ""; }; + ADEC0281C1B6ECA4E3B07D30 /* RepoGroupsService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepoGroupsService.swift; path = Features/RepoGroups/RepoGroupsService.swift; sourceTree = ""; }; + AE04DB22D1DA264CD46CE7E9 /* PlannerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Planner/PlannerPlugin.swift; sourceTree = SOURCE_ROOT; }; + AFA2C545B49F67E44DA12A41 /* AlignedDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlignedDiffView.swift; path = ../Features/Diff/AlignedDiffView.swift; sourceTree = ""; }; + B04DFEA202E551F0C5CE9419 /* WorkspaceSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceSettings.swift; path = Core/Services/WorkspaceSettings.swift; sourceTree = ""; }; + B0F7D30FD32DB6AC065F6149 /* WordLevelDiff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WordLevelDiff.swift; path = ../Features/Diff/WordLevelDiff.swift; sourceTree = ""; }; + B167860182E35112201A438D /* DiffScrollViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffScrollViews.swift; path = ../Features/Diff/Renderers/DiffScrollViews.swift; sourceTree = ""; }; + B22280A02889B243FEA6F332 /* MarkdownView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkdownView.swift; path = Features/Markdown/MarkdownView.swift; sourceTree = ""; }; + B22461AAF391C4D4E7B598E2 /* KaleidoscopeFileList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KaleidoscopeFileList.swift; path = ../Features/Diff/KaleidoscopeFileList.swift; sourceTree = ""; }; + B264A6AC4FE74DAB2008F55B /* Commit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Commit.swift; path = Core/Git/Commit.swift; sourceTree = ""; }; + B307864D0B1648BF91E0BAD1 /* TerminalContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalContext.swift; path = GitMac/Features/Terminal/Core/TerminalContext.swift; sourceTree = SOURCE_ROOT; }; + B478D68ED8A95275ECAA2AD4 /* NotionPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Notion/NotionPlugin.swift; sourceTree = SOURCE_ROOT; }; + B47A42DE3EBEAFC138E09E36 /* WorktreeComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WorktreeComponents.swift; sourceTree = ""; }; + B54D444D43369E58E93BE1A2 /* ThemeButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThemeButton.swift; path = ../../Features/Settings/Components/ThemeButton.swift; sourceTree = ""; }; + B56BCC2A0CBE440FE161710C /* TerminalNLTranslationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalNLTranslationService.swift; path = Features/Terminal/Enhanced/TerminalNLTranslationService.swift; sourceTree = ""; }; + B5C016214CFF745CFA9D01C3 /* DiffEnhancements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffEnhancements.swift; path = ../Features/Diff/DiffEnhancements.swift; sourceTree = ""; }; + B684A269B043CF4172FEBD53 /* SearchSyntaxParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchSyntaxParser.swift; path = ../Features/CommitGraph/Search/SearchSyntaxParser.swift; sourceTree = ""; }; + B7AC05D32D81D7C384612D99 /* PullSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/PullRequests/PullSheet.swift; sourceTree = SOURCE_ROOT; }; + B7BC62988F7BB78244932153 /* RemoteService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RemoteService.swift; path = Core/Services/Specialized/RemoteService.swift; sourceTree = ""; }; + B8E11127F294B1C3EB7DA927 /* DiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffView.swift; path = ../Features/Diff/DiffView.swift; sourceTree = ""; }; + B8FB12219D2488819C343911 /* DiffParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffParser.swift; path = ../Features/Diff/Renderers/DiffParser.swift; sourceTree = ""; }; + B99F846B0D4585643F00BD77 /* XcodeBottomBarTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeBottomBarTab.swift; path = Components/Xcode/XcodeBottomBarTab.swift; sourceTree = ""; }; + B9A088455C222CD24BD8A385 /* FileAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Blame/FileAnnotationView.swift; sourceTree = SOURCE_ROOT; }; + B9F0B86246C677DB1D4CDBC6 /* GestureHandlers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GestureHandlers.swift; path = ../Components/Utilities/GestureHandlers.swift; sourceTree = ""; }; + BC089E4A7F2E77BE940AC78E /* DiffSyntaxHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffSyntaxHighlighter.swift; path = ../Features/Diff/Renderers/DiffSyntaxHighlighter.swift; sourceTree = ""; }; + BCCD2C3F507ABF68B24D8B6C /* RepositoryTabBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryTabBar.swift; path = ../App/Toolbars/RepositoryTabBar.swift; sourceTree = ""; }; + BCE5F58D381B393D52C8166A /* DSTooltip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift; sourceTree = SOURCE_ROOT; }; + BFCAFD73F48F11025E3F5E23 /* WorktreeComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorktreeComponents.swift; path = GitMac/App/Panels/Left/WorktreeComponents.swift; sourceTree = SOURCE_ROOT; }; + BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchPRTracker.swift; path = Core/Services/BranchPRTracker.swift; sourceTree = ""; }; + C05E76268C1B2E5E38FEFE08 /* LayoutConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstants.swift; path = Components/Common/LayoutConstants.swift; sourceTree = ""; }; + C0A3477C5429FE5F172621B6 /* TiledDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TiledDiffView.swift; path = ../Features/Diff/TiledDiffView.swift; sourceTree = ""; }; + C0CBCEB9467ACA32A1448C2B /* TaigaEpicsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaEpicsView.swift; path = Features/Taiga/Views/TaigaEpicsView.swift; sourceTree = ""; }; + C23DEFD3BDC948044E9F7E59 /* KeyboardShortcutsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardShortcutsTab.swift; path = ../../Features/Settings/Tabs/KeyboardShortcutsTab.swift; sourceTree = ""; }; + C26B3B93F4ED225A6D9FBA1B /* TerminalIntegration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Terminal/TerminalIntegration.swift; sourceTree = SOURCE_ROOT; }; + C383AE50662C2E7BCD28F425 /* MicrosoftOAuth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MicrosoftOAuth.swift; path = Core/Services/MicrosoftOAuth.swift; sourceTree = ""; }; + C40BC362D0EB0CD1FDEE75DF /* StagingAreaPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingAreaPanel.swift; path = ../App/Panels/Right/StagingAreaPanel.swift; sourceTree = ""; }; + C41A68E2DF8729EA40C149C6 /* TaigaPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaPlugin.swift; path = Features/Taiga/TaigaPlugin.swift; sourceTree = ""; }; + C434CD617523BD86CCA4C169 /* LeftSidebarPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LeftSidebarPanel.swift; sourceTree = ""; }; + C66E660CDE7966A5367E5F3A /* DesignTokens.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DesignTokens.swift; sourceTree = ""; }; + C801F2B416A00F555CA272A8 /* IssueRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IssueRow.swift; path = ../Components/Rows/IssueRow.swift; sourceTree = ""; }; + C8A9F580892364D6F487D3D4 /* KaleidoscopeSplitDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KaleidoscopeSplitDiffView.swift; path = ../Features/Diff/KaleidoscopeSplitDiffView.swift; sourceTree = ""; }; + C8B9CDBE3A7D0DA2C86612D0 /* IntegrationsSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegrationsSettingsTab.swift; path = ../../Features/Settings/Tabs/IntegrationsSettingsTab.swift; sourceTree = ""; }; + C8EC18843562D7D622FA0E10 /* DiffToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffToolbar.swift; path = Components/Diff/DiffToolbar.swift; sourceTree = ""; }; + C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitProgressTracker.swift; path = Core/Services/GitProgressTracker.swift; sourceTree = ""; }; + C947465962BAE24E11E5BE8A /* XcodeSidebarNavigator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeSidebarNavigator.swift; path = Components/Xcode/XcodeSidebarNavigator.swift; sourceTree = ""; }; + CCDBE3D0C01B79C8DA32D290 /* SyntaxHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Core/Utils/SyntaxHighlighter.swift; sourceTree = SOURCE_ROOT; }; + CDC2D84E539F3E4F59585DB1 /* DSIcon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSIcon.swift; sourceTree = SOURCE_ROOT; }; + CE362A1585EF74F0F8CD5300 /* ConflictPreventionService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConflictPreventionService.swift; path = ../Features/ConflictPrevention/ConflictPreventionService.swift; sourceTree = ""; }; + CED81242689EF445019AB70B /* SidebarSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SidebarSection.swift; path = App/Components/SidebarSection.swift; sourceTree = ""; }; + CEVR01 /* CodeEditorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodeEditorView.swift; path = GitMac/Features/Editor/CodeEditorView.swift; sourceTree = SOURCE_ROOT; }; + CF2442A09016D286CE8F2BA0 /* StagingViewMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingViewMode.swift; path = ../App/Models/StagingViewMode.swift; sourceTree = ""; }; + CF321C6AF283F55B69F37966 /* AvatarImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/AvatarImageView.swift; sourceTree = SOURCE_ROOT; }; + CF4F843954F997AD46CDBAE8 /* DSFilterMenu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift; sourceTree = SOURCE_ROOT; }; + CFD1AE5A8CFE26E6E4BD11A6 /* TerminalSharedTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalSharedTypes.swift; path = GitMac/Features/Terminal/Core/TerminalSharedTypes.swift; sourceTree = SOURCE_ROOT; }; + D006D41F21EE7EEAE2145D57 /* TaigaUserStoriesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaUserStoriesView.swift; path = Features/Taiga/Views/TaigaUserStoriesView.swift; sourceTree = ""; }; + D0993E603E925AF5F885A2FB /* DSBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Display/DSBadge.swift; sourceTree = SOURCE_ROOT; }; + D149E4EDF936AA9FC1857FFD /* KeyboardShortcuts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardShortcuts.swift; path = Components/KeyboardShortcuts.swift; sourceTree = ""; }; + D1959EDC993C5EBC8C305A4F /* BranchPanelView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchPanelView.swift; path = ../../Features/CommitGraph/Components/BranchPanelView.swift; sourceTree = ""; }; + D19D7A85D4110AB3954044F9 /* DSErrorState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Display/DSErrorState.swift; sourceTree = SOURCE_ROOT; }; + D359DD82979AF160C3A6257C /* KaleidoscopeDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KaleidoscopeDiffView.swift; path = ../Features/Diff/KaleidoscopeDiffView.swift; sourceTree = ""; }; + D4BFCD937C8EA030DB8F6FDE /* AWSSettingsViews.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AWSSettingsViews.swift; path = ../../../Features/Settings/Components/IntegrationViews/AWSSettingsViews.swift; sourceTree = ""; }; + D667A4EEB0DA338B05F87CC9 /* LinearPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearPanel.swift; path = Features/Linear/LinearPanel.swift; sourceTree = ""; }; + D677ACBA3E4FD4FB7DFAD138 /* BottomPanelTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelTab.swift; path = Features/BottomPanel/Models/BottomPanelTab.swift; sourceTree = ""; }; + D839A0472AD094A916658152 /* TeamActivityPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamActivityPanel.swift; path = App/Panels/Team/TeamActivityPanel.swift; sourceTree = ""; }; + D83C36E1A44394BA96DA4A87 /* BottomPanelResizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomPanelResizer.swift; path = Features/BottomPanel/Views/BottomPanelResizer.swift; sourceTree = ""; }; + D869EB4C178E9237E81CE462 /* DSListItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Molecules/Lists/DSListItem.swift; sourceTree = SOURCE_ROOT; }; + D9242EE99EDC7C5261B2CE9A /* DiffSearchEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffSearchEngine.swift; path = ../Features/Diff/DiffSearchEngine.swift; sourceTree = ""; }; + D939A8E106120281579FF2E1 /* LinearPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Linear/LinearPlugin.swift; sourceTree = SOURCE_ROOT; }; + DA9481335957DF01895B7DA2 /* JiraIssuesList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraIssuesList.swift; path = Features/Jira/JiraIssuesList.swift; sourceTree = ""; }; + DAD659E6E5A08F2B73A353B4 /* TerminalSuggestionEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TerminalSuggestionEngine.swift; path = GitMac/Features/Terminal/Core/TerminalSuggestionEngine.swift; sourceTree = SOURCE_ROOT; }; + DB473F75EE804687EDA23604 /* BranchListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BranchListView.swift; path = Features/Branches/BranchListView.swift; sourceTree = ""; }; + DBBB6144DE205194BA8FF36C /* SidebarComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SidebarComponents.swift; sourceTree = ""; }; + DC8732E820ED04A145A96F21 /* JiraSettingsContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraSettingsContent.swift; path = Features/Jira/JiraSettingsContent.swift; sourceTree = ""; }; + DCFCEB0041C2DAA5055A26EF /* DSVirtualizedList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSVirtualizedList.swift; path = Organisms/Lists/DSVirtualizedList.swift; sourceTree = ""; }; + DD6A32870540289FBF9180EA /* StagingAreaView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingAreaView.swift; path = Features/Staging/StagingAreaView.swift; sourceTree = ""; }; + DD96131AC7ED8E7F29D35CB6 /* PatchManipulator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PatchManipulator.swift; path = Core/Git/PatchManipulator.swift; sourceTree = ""; }; + DE3CAA4AAC09839FD89D948B /* PRListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PRListView.swift; path = Features/PullRequests/PRListView.swift; sourceTree = ""; }; + DEFC356069FFEC9D8B55DBAA /* ModalCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ModalCoordinator.swift; path = Utilities/ModalCoordinator.swift; sourceTree = ""; }; + DF614FA8AD81B6D7D15104FA /* AnalyticsDashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AnalyticsDashboard.swift; path = GitMac/Features/Analytics/AnalyticsDashboard.swift; sourceTree = SOURCE_ROOT; }; + E26310CC16E27A2D1A155B7C /* ProAPIClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProAPIClient.swift; sourceTree = ""; }; + E284BF9CDF10EDB4C57C2244 /* GitHubService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubService.swift; path = Core/Services/GitHubService.swift; sourceTree = ""; }; + E2B5752EF1BB8E8762717F1F /* VisualEffectBlur.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VisualEffectBlur.swift; path = Utilities/VisualEffectBlur.swift; sourceTree = ""; }; + E3C74CC38DF0CD9C9105122B /* RepositoryActivityPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RepositoryActivityPanel.swift; path = GitMac/Features/BottomPanel/Views/RepositoryActivityPanel.swift; sourceTree = SOURCE_ROOT; }; + E43D322A36A57AE33E47CB62 /* EnhancedSplitDiffView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnhancedSplitDiffView.swift; path = ../../Features/Diff/Components/EnhancedSplitDiffView.swift; sourceTree = ""; }; + E4E4FEFA0B8EF72D2ED91A95 /* FileChange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileChange.swift; path = ../App/Models/FileChange.swift; sourceTree = ""; }; + E52FAFB00F326698DC786462 /* BisectView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BisectView.swift; path = ../Features/Bisect/BisectView.swift; sourceTree = ""; }; + E53BC3B1A105F3E502F1C772 /* JiraPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JiraPanel.swift; path = GitMac/Features/Jira/JiraPanel.swift; sourceTree = SOURCE_ROOT; }; + E55C59F6D86FDDC89B870D89 /* DiffLineView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffLineView.swift; path = Components/Diff/DiffLineView.swift; sourceTree = ""; }; + E5D39602F9B9FA2983FFA4B5 /* Branch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Branch.swift; path = Core/Git/Branch.swift; sourceTree = ""; }; + E60149B22A9C3833A45E1138 /* TreeExpansionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TreeExpansionState.swift; path = Components/FileTree/TreeExpansionState.swift; sourceTree = ""; }; + E68762388E84A0E1E76D28A8 /* DiffStatsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffStatsView.swift; path = Components/Diff/DiffStatsView.swift; sourceTree = ""; }; + E6FDEA200BE2DF21B853FDFC /* RecentRepositoriesList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecentRepositoriesList.swift; sourceTree = ""; }; + E729B4D59A2644F69C62C147 /* CICDComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CICDComponents.swift; path = GitMac/App/Panels/Left/CICDComponents.swift; sourceTree = SOURCE_ROOT; }; + E74448138294C0683E8713C8 /* CodeReviewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CodeReviewService.swift; path = GitMac/Features/CodeReview/CodeReviewService.swift; sourceTree = SOURCE_ROOT; }; + E75012ED186D7236EF6AC78A /* GhosttyDirect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GhosttyDirect.swift; path = Features/Terminal/GhosttyDirect.swift; sourceTree = ""; }; + E7B28DDCCB9274FB3C1B0ADE /* WorkspaceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WorkspaceManager.swift; path = GitMac/Core/Services/WorkspaceManager.swift; sourceTree = ""; }; + E8D486C8039F2AEC1E1F9C4B /* RowProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowProtocols.swift; path = ../Components/Rows/RowProtocols.swift; sourceTree = ""; }; + E8D94CA49974C2D1377D31F8 /* DiffHunkView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffHunkView.swift; path = Components/Diff/DiffHunkView.swift; sourceTree = ""; }; + EAAD36D44E199613FD60C7B2 /* DSToggle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Inputs/DSToggle.swift; sourceTree = SOURCE_ROOT; }; + EB901F90B7E62C601A805FA3 /* DiffCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffCache.swift; path = ../Features/Diff/DiffCache.swift; sourceTree = ""; }; + EBF930CD85CE354BBD0E542F /* SidebarComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SidebarComponents.swift; path = GitMac/App/Panels/Left/SidebarComponents.swift; sourceTree = SOURCE_ROOT; }; + EC3512F76E08429FBAF6FD71 /* StagingViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StagingViewModel.swift; path = ../App/ViewModels/StagingViewModel.swift; sourceTree = ""; }; + ECF47093BEBDD1408A3C68E6 /* CenterPanel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CenterPanel.swift; path = App/Panels/Center/CenterPanel.swift; sourceTree = ""; }; + ED654E601E53971CD5E465F6 /* ContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContentView.swift; path = App/ContentView.swift; sourceTree = ""; }; + EF17B3676A0FF04037522572 /* FileWatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileWatcher.swift; path = Core/Utils/FileWatcher.swift; sourceTree = ""; }; + F089DDFC4BED3E5F4F8E4DE4 /* MermaidDiagramView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MermaidDiagramView.swift; path = Features/Markdown/MermaidDiagramView.swift; sourceTree = ""; }; + F17F4FAEB8F8E5AF525BF3E9 /* AnalyticsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AnalyticsViewModel.swift; path = GitMac/Features/Analytics/AnalyticsViewModel.swift; sourceTree = SOURCE_ROOT; }; + F1B8981DC4D0469E4A2A142E /* RepositoryHierarchicalNavigator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryHierarchicalNavigator.swift; path = Features/Repositories/RepositoryHierarchicalNavigator.swift; sourceTree = ""; }; + F2E7451DB3B6F1CB079757B0 /* PromptTemplateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PromptTemplateManager.swift; path = GitMac/Core/Services/AI/PromptTemplateManager.swift; sourceTree = SOURCE_ROOT; }; + F3F77455C01C15BDB2F9E883 /* DSGenericIntegrationPanel+Examples.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSGenericIntegrationPanel+Examples.swift"; path = "Components/Organisms/Integration/DSGenericIntegrationPanel+Examples.swift"; sourceTree = ""; }; + F40127F9810F49AB9C7C338F /* InteractiveRebaseView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Rebase/InteractiveRebaseView.swift; sourceTree = SOURCE_ROOT; }; + F4E9CDA3CADA6831328A87B5 /* UniversalResizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UniversalResizer.swift; path = Components/Common/UniversalResizer.swift; sourceTree = ""; }; + F589958E042B6BD39D5C02C2 /* GitHook.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHook.swift; path = Core/Models/GitHook.swift; sourceTree = ""; }; + F5F0E9289D4F18B6269F785F /* WorkflowsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Workflows/WorkflowsView.swift; sourceTree = SOURCE_ROOT; }; + F6FDC6090C9B3BBB620A7518 /* TaigaSettingsContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaigaSettingsContent.swift; path = Features/Taiga/TaigaSettingsContent.swift; sourceTree = ""; }; + F7B82AC93A83839A10C7CDCC /* MicrosoftPlannerService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MicrosoftPlannerService.swift; path = Core/Services/MicrosoftPlannerService.swift; sourceTree = ""; }; + F8D288AEB2C54F54B1E3C13E /* Tag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tag.swift; path = Core/Git/Tag.swift; sourceTree = ""; }; + FC7110872A0069C25C89D7CF /* DiffPreferences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffPreferences.swift; path = ../Features/Diff/DiffPreferences.swift; sourceTree = ""; }; + FD8A795E6B8F62D83A911CA9 /* GitHooksService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHooksService.swift; path = Core/Services/GitHooksService.swift; sourceTree = ""; }; + FDB6FE5C91B2C9441FED36A8 /* SubscriptionSettingsTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionSettingsTab.swift; path = ../../Features/Settings/Tabs/SubscriptionSettingsTab.swift; sourceTree = ""; }; + FE31450EF2F2870D73689BE9 /* RepositoryTabsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepositoryTabsView.swift; path = Components/Navigation/RepositoryTabsView.swift; sourceTree = ""; }; + FE61B5268D38F24336EF3822 /* DSCloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift; sourceTree = SOURCE_ROOT; }; + FEF04D5AAFB91C9592A5045E /* ContributionGraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ContributionGraphView.swift; path = GitMac/Features/BottomPanel/Views/ContributionGraphView.swift; sourceTree = SOURCE_ROOT; }; + GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GitHubSyncManager.swift; path = Core/Services/GitHubSyncManager.swift; sourceTree = ""; }; INFO01 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Jira/JiraPanel.swift; sourceTree = ""; }; - JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/JiraService.swift; sourceTree = ""; }; - KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UI/Components/KeyboardShortcuts.swift; sourceTree = ""; }; - LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Linear/LinearPanel.swift; sourceTree = ""; }; - LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/LinearService.swift; sourceTree = ""; }; - LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Diff/LightweightDiffView.swift; sourceTree = ""; }; - MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Markdown/MarkdownView.swift; sourceTree = ""; }; - MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/Features/Markdown/MermaidDiagramView.swift; sourceTree = ""; }; - NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Notion/NotionPanel.swift; sourceTree = ""; }; - NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Services/NotionService.swift; sourceTree = ""; }; - PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/PatchManipulator.swift; sourceTree = ""; }; - PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Features/Planner/PlannerTasksPanel.swift; sourceTree = ""; }; PROD01 /* GitMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GitMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; - REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Core/Git/RepositoryContext.swift; sourceTree = ""; }; RES001 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - SRC001 /* App/GitMacApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/GitMacApp.swift; sourceTree = ""; }; - UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitMac/UI/Components/UnifiedFileContextMenu.swift; sourceTree = ""; }; - WKFLW001F526F46E3958E34A /* WorkflowsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkflowsView.swift; sourceTree = ""; }; - F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Features/RepoGroups/RepoGroupsService.swift"; sourceTree = ""; }; + WELCOME01FILE00000000001 /* WelcomeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WelcomeView.swift; path = WelcomeView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -472,6 +785,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + AC28C30B2F08591500A86A78 /* DifferenceKit in Frameworks */, PKG001 /* KeychainAccess in Frameworks */, PKG002 /* Splash in Frameworks */, ); @@ -480,11 +794,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0102A37A8500E1EB7094E336 /* Models */ = { + isa = PBXGroup; + children = ( + F589958E042B6BD39D5C02C2 /* GitHook.swift */, + 8AB1EA918F36B9CA215847E9 /* GitSubmodule.swift */, + ); + name = Models; + sourceTree = ""; + }; + 0342EFE3A35C2BA992BA5F2B /* Profiles */ = { + isa = PBXGroup; + children = ( + 999FC0A275A93476AE5F7067 /* GitProfilesService.swift */, + ); + name = Profiles; + path = Profiles; + sourceTree = ""; + }; 061615B533CC32DE604E5D24 /* UI */ = { isa = PBXGroup; children = ( 194DEFF63E9D4C27B198FF5B /* Components */, 6A2E226D937FB98A3FE278A0 /* Theme */, + 77E68E596D4AA75863C3A6C3 /* Utilities */, + AE68ED6C9A01D7EABACB38AE /* Organisms */, ); path = UI; sourceTree = ""; @@ -492,24 +826,48 @@ 06983A91035DDA7F7FD10CB8 /* Display */ = { isa = PBXGroup; children = ( - 96E0BBC802E33B600517DE03 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift */, - 5C7FB0ED01FC81BE9CFEAA25 /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift */, - A7A72EC9847E8539DA57C4CE /* GitMac/UI/Components/Molecules/Display/DSHeader.swift */, - D19D7A85D4110AB3954044F9 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift */, - 5C083D4B07B57253A6C74896 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift */, + 96E0BBC802E33B600517DE03 /* DSStatusBadge.swift */, + 5C7FB0ED01FC81BE9CFEAA25 /* DSLoadingState.swift */, + A7A72EC9847E8539DA57C4CE /* DSHeader.swift */, + D19D7A85D4110AB3954044F9 /* DSErrorState.swift */, + 5C083D4B07B57253A6C74896 /* DSEmptyState.swift */, ); name = Display; sourceTree = ""; }; + 0701A9D29CB685F297988021 /* CommitGraph */ = { + isa = PBXGroup; + children = ( + 2763992261C1D80FC7E53252 /* Components */, + 1721ED772B3DA8B46DBA0406 /* Services */, + 0C2B31BA27529F5863734DC0 /* CommitGraphView.swift */, + B5B0BA5BDD09A227257F055E /* Search */, + ); + name = CommitGraph; + path = CommitGraph; + sourceTree = ""; + }; + 07F98821D625793D6601AEF0 /* Settings */ = { + isa = PBXGroup; + children = ( + 2AEE9B53D0B7DAA3FFEA4BC5 /* Tabs */, + B5593DA8ACD80F98FAF0A75D /* Components */, + 28FC445669998FA52E288626 /* SettingsView.swift */, + A78C8CA3402C6DF0DB467BE0 /* SubscriptionView.swift */, + ); + name = Settings; + path = Settings; + sourceTree = ""; + }; 0807DEFD2BA4ED674651C935 /* Views */ = { isa = PBXGroup; children = ( - 2CCC1D2B7CB1C95200072AC7 /* TaigaLoginPrompt.swift */, - F1F396E3A656AE5DD992EB5C /* TaigaSharedViews.swift */, - A0758FE71F9986B7F04E9062 /* TaigaUserStoriesView.swift */, - F2A481FE12E9105E7C44162B /* TaigaTasksView.swift */, - C9FF68FC3A47E31601781924 /* TaigaIssuesView.swift */, - 5E2AFA64BFF468180372A5AF /* TaigaEpicsView.swift */, + 0DFDD01854D7819AD01985D9 /* TaigaSharedViews.swift */, + D006D41F21EE7EEAE2145D57 /* TaigaUserStoriesView.swift */, + 06712DD09898444608AA4C53 /* TaigaLoginPrompt.swift */, + C0CBCEB9467ACA32A1448C2B /* TaigaEpicsView.swift */, + 946B0E647FF99145573D874E /* TaigaTasksView.swift */, + 002E3D8656362AB1260403C1 /* TaigaIssuesView.swift */, ); name = Views; sourceTree = ""; @@ -517,55 +875,223 @@ 080F827FCBC2755BF8F41B23 /* Lists */ = { isa = PBXGroup; children = ( - A6949012590C4505C0112608 /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift */, - 28CF794CA5CBA4509C1129DB /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift */, - D869EB4C178E9237E81CE462 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift */, - 54F22F52D0E8130CC29E01D3 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift */, + A6949012590C4505C0112608 /* DSDraggableItem.swift */, + 28CF794CA5CBA4509C1129DB /* DSExpandableItem.swift */, + D869EB4C178E9237E81CE462 /* DSListItem.swift */, + 54F22F52D0E8130CC29E01D3 /* DSDropZone.swift */, ); name = Lists; sourceTree = ""; }; + 087A2F16ED92F5C3525D9356 /* Bisect */ = { + isa = PBXGroup; + children = ( + E52FAFB00F326698DC786462 /* BisectView.swift */, + ); + name = Bisect; + path = Bisect; + sourceTree = ""; + }; 098C8AC6853F8B819F7C1ABB /* Linear */ = { isa = PBXGroup; children = ( - D939A8E106120281579FF2E1 /* GitMac/Features/Linear/LinearPlugin.swift */, + D939A8E106120281579FF2E1 /* LinearPlugin.swift */, + D667A4EEB0DA338B05F87CC9 /* LinearPanel.swift */, + A72B4B428ACA0A1D3C01558D /* LinearContentView.swift */, ); name = Linear; sourceTree = ""; }; + 0E06BA52C02B83BCD1AAE92B /* Staging */ = { + isa = PBXGroup; + children = ( + DD6A32870540289FBF9180EA /* StagingAreaView.swift */, + ); + name = Staging; + sourceTree = ""; + }; + 0F44F0BAA5E41764E30F2F6B /* Branches */ = { + isa = PBXGroup; + children = ( + DB473F75EE804687EDA23604 /* BranchListView.swift */, + 43BA801C0F45F514B99B0554 /* BranchComparisonView.swift */, + ); + name = Branches; + sourceTree = ""; + }; 0F9F2D5E501D4C4523A80A0C /* Feedback */ = { isa = PBXGroup; children = ( - BCE5F58D381B393D52C8166A /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift */, - 8C38069C386D2444ADE094A5 /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift */, - 5C72A5B4B589599572CCE32D /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift */, - 50BF4669D757C60A0A258549 /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift */, + BCE5F58D381B393D52C8166A /* DSTooltip.swift */, + 8C38069C386D2444ADE094A5 /* DSSpinner.swift */, + 5C72A5B4B589599572CCE32D /* DSProgressBar.swift */, + 50BF4669D757C60A0A258549 /* DSSkeletonBox.swift */, ); name = Feedback; sourceTree = ""; }; + 11949771AD9CE4AA8AB8F1BA /* Layout */ = { + isa = PBXGroup; + children = ( + 212D7F9876239E3FD1A6ED39 /* PanelHeader.swift */, + ABAB2827F401F387B51BC038 /* FileListSection.swift */, + 7185C6D6E41796EB55EEF098 /* Separator.swift */, + 6117B76D20F187270457CD67 /* SectionHeader.swift */, + ); + name = Layout; + path = Layout; + sourceTree = ""; + }; 122202BC827A90670787BA7F /* Display */ = { isa = PBXGroup; children = ( - 206B997E7B2BDA3CFF449B39 /* GitMac/UI/Components/Atoms/Display/DSText.swift */, - 03550275E10C261CACDABFA2 /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift */, - D0993E603E925AF5F885A2FB /* GitMac/UI/Components/Atoms/Display/DSBadge.swift */, - 6DA53B9200B4A53D2CB6D1C9 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift */, - CDC2D84E539F3E4F59585DB1 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift */, - 3A3AAFD8CF5452E47AD098EB /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift */, + 206B997E7B2BDA3CFF449B39 /* DSText.swift */, + 03550275E10C261CACDABFA2 /* DSAvatar.swift */, + D0993E603E925AF5F885A2FB /* DSBadge.swift */, + 6DA53B9200B4A53D2CB6D1C9 /* DSDivider.swift */, + CDC2D84E539F3E4F59585DB1 /* DSIcon.swift */, + 3A3AAFD8CF5452E47AD098EB /* DSSpacer.swift */, ); name = Display; sourceTree = ""; }; + 12B3BEBABAE9FC6AFBC7EF26 /* Submodules */ = { + isa = PBXGroup; + children = ( + 596427854C21B15DD7CC428A /* SubmoduleView.swift */, + A107764C0991E138D3BEEF65 /* SubmoduleManager.swift */, + ); + name = Submodules; + path = Submodules; + sourceTree = ""; + }; + 13380C038CE9C5F20D5B2213 /* Insights */ = { + isa = PBXGroup; + children = ( + 6C039C6AB6CAE0BFC42BECBC /* InsightsView.swift */, + ); + name = Insights; + path = Insights; + sourceTree = ""; + }; + 13BDA8782348320CB84C92B6 /* Remotes */ = { + isa = PBXGroup; + children = ( + 1AF0843F0AA4E95384583544 /* RemoteListView.swift */, + 1202B39970A7D013600F46DF /* RemoteManagementView.swift */, + ); + name = Remotes; + sourceTree = ""; + }; + 1721ED772B3DA8B46DBA0406 /* Services */ = { + isa = PBXGroup; + children = ( + 0F069FB912BF25DF89EF1F94 /* GitHubPRService.swift */, + ); + name = Services; + path = Services; + sourceTree = ""; + }; 194DEFF63E9D4C27B198FF5B /* Components */ = { isa = PBXGroup; children = ( 3E6FCD5575134DBFEC63FB50 /* Atoms */, - 9A3A169E41245ABA5B312C38 /* GitMac/UI/Components/ComponentCatalog.swift */, + 9A3A169E41245ABA5B312C38 /* ComponentCatalog.swift */, AB8A98491E4F87A127F20E2A /* Molecules */, E438FEA1651A5E4BE709432B /* Organisms */, + 11949771AD9CE4AA8AB8F1BA /* Layout */, + 501D318E97E11CF1800B3E87 /* Rows */, + 9434FEA166D95DE237E2A1D3 /* Utilities */, + 8033377EAC9F020AEC32B0BB /* Xcode */, + D149E4EDF936AA9FC1857FFD /* KeyboardShortcuts.swift */, + CB566A216F98AAF0ED430B8F /* Commit */, + BBFF77377EBA36920070559E /* FileTree */, + 56CFC6C90661310FC03B3B2B /* Navigation */, + AD5F4DC67A34775FC8433721 /* Terminal */, + 86B78F4D766D400A5C01603F /* Diff */, + CDC87F2085C380497492BFF4 /* Common */, + 31CE88B9BBE1D9C5FAE424BB /* Icons */, + 741C54327F7D0A9ED06C024F /* AppTheme.swift */, + 0F8938D30C93984F880916CA /* UnifiedFileContextMenu.swift */, + 52DB5D866FC40BF9D4931F12 /* ContextMenus.swift */, + CF321C6AF283F55B69F37966 /* AvatarImageView.swift */, + 79365048F272AB01D311D7AD /* GitOperationProgressView.swift */, + ); + name = Components; + sourceTree = ""; + }; + 2202A1011D5365F54FB5DFED /* Models */ = { + isa = PBXGroup; + children = ( + E4E4FEFA0B8EF72D2ED91A95 /* FileChange.swift */, + CF2442A09016D286CE8F2BA0 /* StagingViewMode.swift */, + 4B436DF92856B5B4E564361C /* StagingFile.swift */, + 7E442DAD4EDA28B5EB206F5F /* CommitFile.swift */, + ); + name = Models; + path = Models; + sourceTree = ""; + }; + 27185404A23D7B71F06B0C99 /* Panels */ = { + isa = PBXGroup; + children = ( + 83FFF8DA7810B657987C810D /* DSTabPanel.swift */, + 49D415137CD4DBE6C277B0AD /* DSResizablePanel.swift */, + 87918D7DE285A283FF241764 /* DSCollapsiblePanel.swift */, + 96298B0967612ED6114D608E /* DSPanel.swift */, + ); + name = Panels; + sourceTree = ""; + }; + 2763992261C1D80FC7E53252 /* Components */ = { + isa = PBXGroup; + children = ( + 99E7BE67D49ECABECC42D99C /* FileChangesIndicator.swift */, + 35FF5038CA6532569A529AAA /* GraphMinimapView.swift */, + 56C95B46D74511D3AAAE763C /* RepositorySelectorButton.swift */, + D1959EDC993C5EBC8C305A4F /* BranchPanelView.swift */, + 5A83152F6E2CD6F4E437C5C3 /* PushFetchButtons.swift */, + 311732177EB42C4A81308A02 /* BranchSelectorButton.swift */, + 96C2B56F9C9BF273E8E7A5FD /* CommitDetailPanel.swift */, + 3F0823301FFD9666FF23BB6B /* SyncButton.swift */, + 4BD0BD26988ABF1E4F35AF6B /* Components */, ); name = Components; + path = Components; + sourceTree = ""; + }; + 276D13D00FCB4EBF4A238286 /* StoreKit */ = { + isa = PBXGroup; + children = ( + 64D7DD67F634F228B2BA0CEE /* StoreManager.swift */, + ); + name = StoreKit; + sourceTree = ""; + }; + 2AEE9B53D0B7DAA3FFEA4BC5 /* Tabs */ = { + isa = PBXGroup; + children = ( + 4A9CA1C982F3BD6FBF50546C /* AISettingsTab.swift */, + 1169A7CE797833DAB1113376 /* GeneralSettingsTab.swift */, + 8091762F903234CDECBD980F /* GitSettingsTab.swift */, + C8B9CDBE3A7D0DA2C86612D0 /* IntegrationsSettingsTab.swift */, + FDB6FE5C91B2C9441FED36A8 /* SubscriptionSettingsTab.swift */, + C23DEFD3BDC948044E9F7E59 /* KeyboardShortcutsTab.swift */, + 1540D12594BA091D091556B9 /* WorkspaceSettingsTab.swift */, + A1B3C55C29AB720739CDE519 /* AccountsSettingsTab.swift */, + 4FF85B9EB03B18167844D0F6 /* WorkspaceManagerTab.swift */, + ); + name = Tabs; + path = Tabs; + sourceTree = ""; + }; + 2C25132305583A46353A2BED /* LFS */ = { + isa = PBXGroup; + children = ( + 5709C8F7572B6F391068E6FC /* LFSManager.swift */, + ); + name = LFS; + path = LFS; sourceTree = ""; }; 2C3CD67873D5AEB2337EB466 /* Lists */ = { @@ -575,6 +1101,68 @@ name = Lists; sourceTree = ""; }; + 2D9553456DD6C7DBDE010DD7 /* Reflog */ = { + isa = PBXGroup; + children = ( + 81B111412EB02064E54C157E /* ReflogView.swift */, + ); + name = Reflog; + sourceTree = ""; + }; + 31CE88B9BBE1D9C5FAE424BB /* Icons */ = { + isa = PBXGroup; + children = ( + A9AD8F4D449606E5E5A4A2EC /* FileTypeIcon.swift */, + 0590EB77B9C55A604A68F573 /* StatusIcon.swift */, + ); + name = Icons; + sourceTree = ""; + }; + 33F402E9FE2CD29CE005E68A /* Analytics */ = { + isa = PBXGroup; + children = ( + DF614FA8AD81B6D7D15104FA /* AnalyticsDashboard.swift */, + F17F4FAEB8F8E5AF525BF3E9 /* AnalyticsViewModel.swift */, + ); + name = Analytics; + sourceTree = ""; + }; + 379D3A6098A3D6306E4A4C14 /* CICD */ = { + isa = PBXGroup; + children = ( + 1E722C9BE39DB145F515EE7A /* AWSCodeBuildService.swift */, + ); + name = CICD; + sourceTree = ""; + }; + 3872D9A474B6E80E170C9D7B /* Core */ = { + isa = PBXGroup; + children = ( + 56F5CD5D6138045969197FF2 /* TerminalCompletions.swift */, + B307864D0B1648BF91E0BAD1 /* TerminalContext.swift */, + DAD659E6E5A08F2B73A353B4 /* TerminalSuggestionEngine.swift */, + CFD1AE5A8CFE26E6E4BD11A6 /* TerminalSharedTypes.swift */, + ); + name = Core; + sourceTree = ""; + }; + 3BF20B9AF97DE44A2820BBAE /* CloudPatches */ = { + isa = PBXGroup; + children = ( + 29A9EEC65D538BDB576F332D /* CloudPatchService.swift */, + ); + name = CloudPatches; + path = CloudPatches; + sourceTree = ""; + }; + 3E673DC0846645FCBBE2567D /* RepoGroups */ = { + isa = PBXGroup; + children = ( + ADEC0281C1B6ECA4E3B07D30 /* RepoGroupsService.swift */, + ); + name = RepoGroups; + sourceTree = ""; + }; 3E6FCD5575134DBFEC63FB50 /* Atoms */ = { isa = PBXGroup; children = ( @@ -586,16 +1174,154 @@ name = Atoms; sourceTree = ""; }; + 3FA1F1C866290E0001DD3FC5 /* Models */ = { + isa = PBXGroup; + children = ( + D677ACBA3E4FD4FB7DFAD138 /* BottomPanelTab.swift */, + 56A86BF2D1C0B6AD97B874C0 /* BottomPanelType.swift */, + ); + name = Models; + sourceTree = ""; + }; 3FE0E0E74E8765998AD50CE2 /* PluginSystem */ = { isa = PBXGroup; children = ( - 49DCB09417068B1BF850DA18 /* GitMac/Core/PluginSystem/IntegrationPlugin.swift */, - 30D7B28A4BC77B8C9638775F /* GitMac/Core/PluginSystem/IntegrationViewModel.swift */, - 12DA46B215C509E7162E6325 /* GitMac/Core/PluginSystem/PluginRegistry.swift */, + 49DCB09417068B1BF850DA18 /* IntegrationPlugin.swift */, + 30D7B28A4BC77B8C9638775F /* IntegrationViewModel.swift */, + 12DA46B215C509E7162E6325 /* PluginRegistry.swift */, ); name = PluginSystem; sourceTree = ""; }; + 421AC817EE8D0B81AD8046AC /* ConflictPrevention */ = { + isa = PBXGroup; + children = ( + CE362A1585EF74F0F8CD5300 /* ConflictPreventionService.swift */, + 5811E200D2846DB2F3B5A1F5 /* ConflictPreventionView.swift */, + ); + name = ConflictPrevention; + path = ConflictPrevention; + sourceTree = ""; + }; + 424E2F8C47032B424C15AA36 /* Center */ = { + isa = PBXGroup; + children = ( + 311819CE85C69FBD8317B971 /* TerminalPanel.swift */, + ECF47093BEBDD1408A3C68E6 /* CenterPanel.swift */, + 6BF5781EDDF9059C148481E7 /* DiffViewWithClose.swift */, + ); + name = Center; + sourceTree = ""; + }; + 44032DC8EA8BA76D80C1DA4D /* Specialized */ = { + isa = PBXGroup; + children = ( + 6EA0C9DF38025EE57835ABB5 /* DiffService.swift */, + A524DDCBE31594D98C8518CD /* TagService.swift */, + B7BC62988F7BB78244932153 /* RemoteService.swift */, + 414FA69A53C987CDE2E1312F /* StashService.swift */, + 19BA4D4445F5C1D715738856 /* BranchService.swift */, + 54FF0182C99EE397632A9599 /* CommitService.swift */, + 592CDACB1F95C1AFF782008E /* StagingService.swift */, + 489CFEF8C9808C1898F88636 /* MergeService.swift */, + ); + name = Specialized; + sourceTree = ""; + }; + 4945A15B6B6622CC6C970313 /* Utils */ = { + isa = PBXGroup; + children = ( + 186CAFBEF34A292AB9868362 /* CacheWithTTL.swift */, + 901D56504BADF5FC43A6EA46 /* KeychainManager.swift */, + 226F99F90E8A33A69220136F /* ShellExecutor.swift */, + EF17B3676A0FF04037522572 /* FileWatcher.swift */, + 273DB06557D32B01CB61BEE5 /* MemoryPressureHandler.swift */, + CCDBE3D0C01B79C8DA32D290 /* SyntaxHighlighter.swift */, + 0154FE34793BBE67B322FBCD /* IntegrationHelpers.swift */, + ); + name = Utils; + sourceTree = ""; + }; + 4976AE7A2BD146629A8B5953 /* Sheets */ = { + isa = PBXGroup; + children = ( + 83E77F535DA31CCD185F87AF /* CloneRepositorySheet.swift */, + 9BF55B48131B9F6858E03454 /* CreateBranchSheet.swift */, + 8F715ACED106D700C4870CA9 /* MergeBranchSheet.swift */, + 59820498B20A741308942117 /* InitRepositorySheet.swift */, + 10E8846BFD8F23014F452AD1 /* GroupSheets.swift */, + ); + name = Sheets; + sourceTree = ""; + }; + 4AC7718618A8A716C29D1028 /* Launchpad */ = { + isa = PBXGroup; + children = ( + 2F70BEAF1B46EFA08BD447ED /* LaunchpadView.swift */, + ); + name = Launchpad; + sourceTree = ""; + }; + 501D318E97E11CF1800B3E87 /* Rows */ = { + isa = PBXGroup; + children = ( + 88BD0BE0F4444FCE1396A212 /* BranchRow.swift */, + C801F2B416A00F555CA272A8 /* IssueRow.swift */, + 12A2EC67E6ADB3171F1139CD /* BaseRow.swift */, + 2F045ABAFE63E9A78313271A /* ListRow.swift */, + E8D486C8039F2AEC1E1F9C4B /* RowProtocols.swift */, + A12E643D92471924D88FBEFE /* FileRow.swift */, + ); + name = Rows; + path = Rows; + sourceTree = ""; + }; + 501DC4055DCB1E46750814D5 /* Integration */ = { + isa = PBXGroup; + children = ( + 5BD7CE628B2B5B937AB429B6 /* DSLoginPrompt.swift */, + 8919B5353DAAE1D6C06F8BBB /* DSIntegrationPanel.swift */, + 16DFE5164DF91A0796214C07 /* DSSettingsSheet.swift */, + ); + name = Integration; + sourceTree = ""; + }; + 505932A8C22BB2E9AD06E36C /* GitFlow */ = { + isa = PBXGroup; + children = ( + 9AF69A8507A78495E37168B6 /* GitFlowManager.swift */, + ); + name = GitFlow; + path = GitFlow; + sourceTree = ""; + }; + 511E77AFDD48EDA904CBBCE7 /* App */ = { + isa = PBXGroup; + children = ( + 4976AE7A2BD146629A8B5953 /* Sheets */, + BF104625298941E1285613FC /* Panels */, + 84D103675C8275EE25F0592B /* Components */, + E1C910203A1F51EF3CEF6115 /* Toolbars */, + 2202A1011D5365F54FB5DFED /* Models */, + DF0B794E27914569EBD1820E /* ViewModels */, + A779073E6636D2C37CBA8DF6 /* Welcome */, + 97396DC70529FC8190378B29 /* GitMacApp.swift */, + ED654E601E53971CD5E465F6 /* ContentView.swift */, + ); + name = App; + sourceTree = ""; + }; + 51BFE48868831676AE6C3DFB /* Services */ = { + isa = PBXGroup; + children = ( + E26310CC16E27A2D1A155B7C /* ProAPIClient.swift */, + 5DBF4D2461784FF64126C205 /* FeatureManager.swift */, + AD50DBAE423A86E69313A5D2 /* LicenseValidator.swift */, + ); + name = Services; + path = Services; + sourceTree = ""; + }; 5532E83FF675C7A46865EEC2 /* Features */ = { isa = PBXGroup; children = ( @@ -604,27 +1330,396 @@ AFE2CBBCBAFF02C17DF4B1F1 /* Notion */, 098C8AC6853F8B819F7C1ABB /* Linear */, 9F93ECF704A7077E5068E9BE /* Planner */, - - 3E673DC0846645FCBBE2567D /* RepoGroups */,); + 3E673DC0846645FCBBE2567D /* RepoGroups */, + C7F13029000BCA5357F85FC1 /* Terminal */, + 07F98821D625793D6601AEF0 /* Settings */, + BCAE304C152BD8807C61FD46 /* Diff */, + 0701A9D29CB685F297988021 /* CommitGraph */, + 13380C038CE9C5F20D5B2213 /* Insights */, + 087A2F16ED92F5C3525D9356 /* Bisect */, + 3BF20B9AF97DE44A2820BBAE /* CloudPatches */, + 421AC817EE8D0B81AD8046AC /* ConflictPrevention */, + CA6D6DE63CC182C11267BCF6 /* DeepLinking */, + 505932A8C22BB2E9AD06E36C /* GitFlow */, + 2C25132305583A46353A2BED /* LFS */, + 0342EFE3A35C2BA992BA5F2B /* Profiles */, + 93192C0BEA8CFF9AA668BE63 /* Security */, + 12B3BEBABAE9FC6AFBC7EF26 /* Submodules */, + 0E06BA52C02B83BCD1AAE92B /* Staging */, + 9B94E3D12588150E1BA8957C /* CherryPick */, + 936CBE6CBD8D455A606E8DF9 /* Markdown */, + C615D52107EF2D3EA74ADE80 /* BottomPanel */, + CCF3F91A839A1A16021BB7AF /* FileViewer */, + B1F84483137132D3A72A6DC6 /* Repositories */, + 8A5555122943274165D3DDA0 /* Tags */, + 4AC7718618A8A716C29D1028 /* Launchpad */, + 13BDA8782348320CB84C92B6 /* Remotes */, + E79239023FCBC9E18654E7C0 /* Stash */, + BD84F811C48E673EBD27CA25 /* Worktrees */, + BDB46F4CD2EC752E11CC2017 /* History */, + 8750808CF0871EBF17F534FB /* GitHooks */, + 0F44F0BAA5E41764E30F2F6B /* Branches */, + B8BFA89B8F8842AC68DE9EDF /* PullRequests */, + F48E11A1ADC398C3BD9EEE98 /* Issues */, + FD0A74A99DB221529BCDEC69 /* MergeConflict */, + 59CE7E66A867A285CDEC0F90 /* Workflows */, + CD532547B3BED8A329BE06A5 /* Search */, + A7CEEDE185B2D04F6AEE9A50 /* GitHub */, + 7B97E38516B20FA924A7C0E8 /* Reset */, + 2D9553456DD6C7DBDE010DD7 /* Reflog */, + 379D3A6098A3D6306E4A4C14 /* CICD */, + D6B7C5ACF1D10ACA91F926E6 /* CommandPalette */, + 6C6EC4ACD17CADFF520A192D /* Blame */, + D21C9812252B018CA9EE7C88 /* Rebase */, + 98A3C07AA0E1F7EAA46E1E07 /* Revert */, + 33F402E9FE2CD29CE005E68A /* Analytics */, + A4A9134E1AF47FDB2A03F48F /* CodeReview */, + ); name = Features; sourceTree = ""; }; + 56BFBD0300DA8996FAB0CDB0 /* Lists */ = { + isa = PBXGroup; + children = ( + 1711398A1F8B37AACCC5D04A /* DSInfiniteList.swift */, + DCFCEB0041C2DAA5055A26EF /* DSVirtualizedList.swift */, + 557CA937B9386B978825F7B6 /* DSGroupedList.swift */, + A8BFECF7549F727776FCA676 /* DSDraggableList.swift */, + ); + name = Lists; + sourceTree = ""; + }; + 56CFC6C90661310FC03B3B2B /* Navigation */ = { + isa = PBXGroup; + children = ( + FE31450EF2F2870D73689BE9 /* RepositoryTabsView.swift */, + ); + name = Navigation; + sourceTree = ""; + }; + 59CE7E66A867A285CDEC0F90 /* Workflows */ = { + isa = PBXGroup; + children = ( + F5F0E9289D4F18B6269F785F /* WorkflowsView.swift */, + ); + name = Workflows; + sourceTree = ""; + }; + 5E7465D46095F5749665C379 /* Right */ = { + isa = PBXGroup; + children = ( + 7BA474C56D92B033F71E4848 /* CommitComponents.swift */, + 5AB5CD84F6C72FACD1271F13 /* StashComponents.swift */, + 66B057DE0EB0A466E9E33BC9 /* RightStagingPanel.swift */, + 969C5AC483183BB48CD34C4D /* RightCommitDetailPanel.swift */, + 221681E7C8A56E7B4E0A25DA /* StagingComponents.swift */, + C40BC362D0EB0CD1FDEE75DF /* StagingAreaPanel.swift */, + 5F1563EA7D7837627E6866A9 /* StashDetailPanel.swift */, + 17012E024F076BAAD919FF1C /* RightCommitDetailPanel.swift */, + 5C63DF08665ADFBF854585A2 /* StashDetailPanel.swift */, + 82FF2714B9F2DB8A978C0EF8 /* StagingAreaPanel.swift */, + 751B4C6A40ABDFF0FB9131F1 /* CommitComponents.swift */, + AA39C01D990E7F7EFCCDFE23 /* StagingComponents.swift */, + ); + name = Right; + path = Right; + sourceTree = ""; + }; 6A2E226D937FB98A3FE278A0 /* Theme */ = { isa = PBXGroup; children = ( - 356E7A4FC3B9557DB15F5B46 /* DesignTokens.swift */, + C66E660CDE7966A5367E5F3A /* DesignTokens.swift */, + 2EE686394363A5627F695C23 /* ThemeManager.swift */, ); path = Theme; sourceTree = ""; }; + 6C6EC4ACD17CADFF520A192D /* Blame */ = { + isa = PBXGroup; + children = ( + B9A088455C222CD24BD8A385 /* FileAnnotationView.swift */, + ); + name = Blame; + sourceTree = ""; + }; + 7073C6B8F9BCD7CC36CE5CC1 /* Renderers */ = { + isa = PBXGroup; + children = ( + B8FB12219D2488819C343911 /* DiffParser.swift */, + 202778629A618B9E881C961C /* DiffMinimap.swift */, + B167860182E35112201A438D /* DiffScrollViews.swift */, + 22D561F402979003953F081D /* DiffLineContextMenu.swift */, + BC089E4A7F2E77BE940AC78E /* DiffSyntaxHighlighter.swift */, + 563DA23E60975240AFB050EE /* LargeFileDiffRenderer.swift */, + 1C7B6E6EE3D71DBE737B4C1D /* DiffLineRenderers.swift */, + 7989C44ACCDF1E41D18E2AC1 /* BinaryFileRenderers.swift */, + ); + name = Renderers; + sourceTree = ""; + }; + 7085DDA21D210DEE641F4FAD /* Git */ = { + isa = PBXGroup; + children = ( + 741B533442FCDD65DEE553DA /* Stash.swift */, + 7E98303F1CD64673B43F9639 /* Remote.swift */, + E5D39602F9B9FA2983FFA4B5 /* Branch.swift */, + DD96131AC7ED8E7F29D35CB6 /* PatchManipulator.swift */, + B264A6AC4FE74DAB2008F55B /* Commit.swift */, + 3E5FE2C8F4C1E2317EDCFB9A /* Repository.swift */, + 00928620E5BDBA2B55DDCA9E /* Worktree.swift */, + 83AF412DBC595003F22E6FCA /* DiffEngine.swift */, + AD4B737145B8FD686DDAC7FC /* GitEngine.swift */, + 19A63DBE9BFC4E46B5AE10BD /* RepositoryContext.swift */, + F8D288AEB2C54F54B1E3C13E /* Tag.swift */, + 30D1227A3429891C6E909AC6 /* GitOperationHandler.swift */, + ); + name = Git; + sourceTree = ""; + }; + 77E68E596D4AA75863C3A6C3 /* Utilities */ = { + isa = PBXGroup; + children = ( + E2B5752EF1BB8E8762717F1F /* VisualEffectBlur.swift */, + DEFC356069FFEC9D8B55DBAA /* ModalCoordinator.swift */, + ); + name = Utilities; + sourceTree = ""; + }; + 7B97E38516B20FA924A7C0E8 /* Reset */ = { + isa = PBXGroup; + children = ( + 3E42F45A779174FB0192AA60 /* ResetView.swift */, + ); + name = Reset; + sourceTree = ""; + }; + 7C56653F31E2EE5F1A01BDD6 /* ViewModels */ = { + isa = PBXGroup; + children = ( + 99214D51AED49AD69405C6FF /* RepositoryActivityViewModel.swift */, + ); + name = ViewModels; + sourceTree = ""; + }; + 8033377EAC9F020AEC32B0BB /* Xcode */ = { + isa = PBXGroup; + children = ( + 8BE3A5493D73AF5335D28E79 /* XcodeToolbarButton.swift */, + 8316008DE7D82F7A62DC0F82 /* XcodeToolbarDivider.swift */, + C947465962BAE24E11E5BE8A /* XcodeSidebarNavigator.swift */, + B99F846B0D4585643F00BD77 /* XcodeBottomBarTab.swift */, + ); + name = Xcode; + sourceTree = ""; + }; + 84CC1EF63080BB92CDB995DF /* AI */ = { + isa = PBXGroup; + children = ( + 38AF44C8ADA6FAF518572B88 /* AIServiceExtensions.swift */, + F2E7451DB3B6F1CB079757B0 /* PromptTemplateManager.swift */, + ); + name = AI; + sourceTree = ""; + }; + 84D103675C8275EE25F0592B /* Components */ = { + isa = PBXGroup; + children = ( + CED81242689EF445019AB70B /* SidebarSection.swift */, + 05D35666EBED293412AD3325 /* OperationProgressOverlay.swift */, + 31850924BB032CD7AAE897D5 /* ActionButton.swift */, + ); + name = Components; + sourceTree = ""; + }; + 86B78F4D766D400A5C01603F /* Diff */ = { + isa = PBXGroup; + children = ( + C8EC18843562D7D622FA0E10 /* DiffToolbar.swift */, + E68762388E84A0E1E76D28A8 /* DiffStatsView.swift */, + E8D94CA49974C2D1377D31F8 /* DiffHunkView.swift */, + E55C59F6D86FDDC89B870D89 /* DiffLineView.swift */, + ); + name = Diff; + sourceTree = ""; + }; + 86D7FD79DD8FE3AE900947A1 /* Left */ = { + isa = PBXGroup; + children = ( + 7A74E0458D50F1A151CCA0F0 /* SubmoduleComponents.swift */, + DBBB6144DE205194BA8FF36C /* SidebarComponents.swift */, + 6B39632AD8E994CCDF797593 /* GitHooksComponents.swift */, + E6FDEA200BE2DF21B853FDFC /* RecentRepositoriesList.swift */, + AA1C6958688FFE9EDBCC16D0 /* CICDComponents.swift */, + B47A42DE3EBEAFC138E09E36 /* WorktreeComponents.swift */, + C434CD617523BD86CCA4C169 /* LeftSidebarPanel.swift */, + EBF930CD85CE354BBD0E542F /* SidebarComponents.swift */, + 625A6458860C14BBBAFB1A1F /* GitHooksComponents.swift */, + 3856F1845C89352A8A46D281 /* SubmoduleComponents.swift */, + BFCAFD73F48F11025E3F5E23 /* WorktreeComponents.swift */, + E729B4D59A2644F69C62C147 /* CICDComponents.swift */, + ); + name = Left; + path = App/Panels/Left; + sourceTree = ""; + }; + 8750808CF0871EBF17F534FB /* GitHooks */ = { + isa = PBXGroup; + children = ( + 1239024F83757F6F28F31270 /* GitHooksView.swift */, + ); + name = GitHooks; + sourceTree = ""; + }; + 8A5555122943274165D3DDA0 /* Tags */ = { + isa = PBXGroup; + children = ( + 2DF700E92570DDFE3AED8E46 /* TagListView.swift */, + ); + name = Tags; + sourceTree = ""; + }; + 902D7CCF9933174ACF01C888 /* IntegrationViews */ = { + isa = PBXGroup; + children = ( + 79542D479476AE91B3E954EF /* PlannerSettingsViews.swift */, + 2BC4ADFAC6AD64D8E79C0C9A /* NotionSettingsViews.swift */, + 1640300D8BF15C19ED177B81 /* TaigaSettingsViews.swift */, + D4BFCD937C8EA030DB8F6FDE /* AWSSettingsViews.swift */, + ADC883D77ADF2991AC3477CC /* JiraSettingsViews.swift */, + 24FF2E3D9D995902DAD59928 /* LinearSettingsViews.swift */, + ); + name = IntegrationViews; + path = IntegrationViews; + sourceTree = ""; + }; + 93192C0BEA8CFF9AA668BE63 /* Security */ = { + isa = PBXGroup; + children = ( + 731D843C72FB99624C6C9211 /* GPGSSHManagementView.swift */, + ); + name = Security; + path = Security; + sourceTree = ""; + }; + 936CBE6CBD8D455A606E8DF9 /* Markdown */ = { + isa = PBXGroup; + children = ( + F089DDFC4BED3E5F4F8E4DE4 /* MermaidDiagramView.swift */, + B22280A02889B243FEA6F332 /* MarkdownView.swift */, + ); + name = Markdown; + sourceTree = ""; + }; + 9434FEA166D95DE237E2A1D3 /* Utilities */ = { + isa = PBXGroup; + children = ( + 7778017C0C82557A417F6EBD /* AnimationExtensions.swift */, + 44313C9929F962B9469DE8E7 /* LayoutHelpers.swift */, + 607DA6098E0A0A61782A0DF3 /* ViewModifiers.swift */, + 019084753E518DA25F69140E /* StateManagement.swift */, + B9F0B86246C677DB1D4CDBC6 /* GestureHandlers.swift */, + ); + name = Utilities; + path = Utilities; + sourceTree = ""; + }; + 98A3C07AA0E1F7EAA46E1E07 /* Revert */ = { + isa = PBXGroup; + children = ( + 2FED351FD1776BBF7E389FFA /* RevertView.swift */, + ); + name = Revert; + sourceTree = ""; + }; + 9B94E3D12588150E1BA8957C /* CherryPick */ = { + isa = PBXGroup; + children = ( + 2342CC3BD113FD751EF8DD94 /* CherryPickView.swift */, + ); + name = CherryPick; + sourceTree = ""; + }; + 9EE58DFCFBF78FAC2F1D3B26 /* Views */ = { + isa = PBXGroup; + children = ( + D83C36E1A44394BA96DA4A87 /* BottomPanelResizer.swift */, + A28EB01A5FA82BA5F5A3728A /* UnifiedBottomPanel.swift */, + 2BDDC61D881750DCCDC9554F /* BottomPanelContent.swift */, + 366910B3DFF367ACB578E2B7 /* BottomPanelTabBar.swift */, + E3C74CC38DF0CD9C9105122B /* RepositoryActivityPanel.swift */, + FEF04D5AAFB91C9592A5045E /* ContributionGraphView.swift */, + ); + name = Views; + sourceTree = ""; + }; 9F93ECF704A7077E5068E9BE /* Planner */ = { isa = PBXGroup; children = ( - AE04DB22D1DA264CD46CE7E9 /* GitMac/Features/Planner/PlannerPlugin.swift */, + AE04DB22D1DA264CD46CE7E9 /* PlannerPlugin.swift */, + 927BAABEB70CD3F99787E642 /* PlannerTasksPanel.swift */, ); name = Planner; sourceTree = ""; }; + A34BCD0AB058B12F53120ADD /* Services */ = { + isa = PBXGroup; + children = ( + FD8A795E6B8F62D83A911CA9 /* GitHooksService.swift */, + 1D9B988D57B4EBA758747115 /* GitService.swift */, + 99AA1FB5A8306B98A36E3C86 /* AIService.swift */, + E284BF9CDF10EDB4C57C2244 /* GitHubService.swift */, + BRANCHPR0001FILE0000000001 /* BranchPRTracker.swift */, + GHSYNCMG0001FILE0000000001 /* GitHubSyncManager.swift */, + B04DFEA202E551F0C5CE9419 /* WorkspaceSettings.swift */, + F7B82AC93A83839A10C7CDCC /* MicrosoftPlannerService.swift */, + 68995E0B81A9B7E42741AE47 /* GitSubmoduleService.swift */, + 44032DC8EA8BA76D80C1DA4D /* Specialized */, + 86FA50E65BBBBC71CBFD6ED7 /* GitHubOAuth.swift */, + 6E6FFF74126F40CCF366AC65 /* LinearService.swift */, + 710BE37EEC4AE2E2EDE63535 /* JiraService.swift */, + 3BA53424BA0CE1910F723088 /* NotionService.swift */, + 1A15833A17361DA91C02EF00 /* UndoManager.swift */, + 29C1CCA3687DD1D264360CB1 /* AvatarService.swift */, + C383AE50662C2E7BCD28F425 /* MicrosoftOAuth.swift */, + 99C03FD5905DF5162D37E89E /* TaigaService.swift */, + 47CB34938E677983AF18543E /* ExternalToolsManager.swift */, + 1BE7FD2660507EDB36634450 /* RemoteOperationTracker.swift */, + A9429CC1284A41A1A5A7741F /* NotificationManager.swift */, + 19F6D20DD97CD5B0028A4E1B /* KeyboardShortcutManager.swift */, + 84CC1EF63080BB92CDB995DF /* AI */, + 8FEE4054B2842E02ED448EF0 /* CloudSyncService.swift */, + 05A44BE48A6BAAD7525A8D2A /* PresenceService.swift */, + C8EC6DEB6AB138EA7776EA86 /* GitProgressTracker.swift */, + E7B28DDCCB9274FB3C1B0ADE /* WorkspaceManager.swift */, + ); + name = Services; + sourceTree = ""; + }; + A4A9134E1AF47FDB2A03F48F /* CodeReview */ = { + isa = PBXGroup; + children = ( + E74448138294C0683E8713C8 /* CodeReviewService.swift */, + ); + name = CodeReview; + sourceTree = ""; + }; + A779073E6636D2C37CBA8DF6 /* Welcome */ = { + isa = PBXGroup; + children = ( + WELCOME01FILE00000000001 /* WelcomeView.swift */, + ); + name = Welcome; + path = App/Welcome; + sourceTree = ""; + }; + A7CEEDE185B2D04F6AEE9A50 /* GitHub */ = { + isa = PBXGroup; + children = ( + 2744088EB2B2CB3C9C518657 /* GitHubIntegration.swift */, + ); + name = GitHub; + sourceTree = ""; + }; AB8A98491E4F87A127F20E2A /* Molecules */ = { isa = PBXGroup; children = ( @@ -638,66 +1733,7 @@ AC94317C2EE9223600A59026 /* Recovered References */ = { isa = PBXGroup; children = ( - CACHETTL1F526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift */, - LWDIFF01F526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift */, - MDVIEW01F526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift */, - MERMAID1F526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift */, - FLVIEW01F526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift */, - 0278585C275E4816A6E5DBE9 /* GitMac/UI/Components/Commit/CommitMessageArea.swift */, - E6C58CC8B384497E977827CA /* GitMac/UI/Components/Common/LayoutConstants.swift */, - 7CFF62B92BDB4F918A07C58D /* GitMac/UI/Components/Diff/DiffHunkView.swift */, - 93212444F5C44A7DBDD8741F /* GitMac/UI/Components/Diff/DiffLineView.swift */, - 2FBEB0B20054436A94B8EA19 /* GitMac/UI/Components/Diff/DiffStatsView.swift */, - 9FF5F0593F674233B11F2062 /* GitMac/UI/Components/Diff/DiffToolbar.swift */, - 1AEA0F60570D4E8EAD469319 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift */, - 892060A0F971407B8E86E730 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift */, - 23ACB3A6D01341AA83FE1484 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift */, - 34E6699489D248A5A9159D76 /* GitMac/UI/Components/FileTree/TreeExpansionState.swift */, - F99F327755C543D2BAF776D0 /* GitMac/UI/Components/Icons/StatusIcon.swift */, - 5105088ACFFE494993A0E4B4 /* GitMac/UI/Components/Layout/FileListSection.swift */, - 7982AA1A45504968BF479382 /* GitMac/UI/Components/Layout/SectionHeader.swift */, - A584635B781B4E78B9458816 /* GitMac/UI/Components/Layout/Separator.swift */, - 86DF4C8B66944FC4BC3DEADF /* GitMac/UI/Components/Rows/BaseRow.swift */, - 9E4A0BDBA889412C9E51E1AA /* GitMac/UI/Components/Rows/BranchRow.swift */, - 841142FB4BB04F52A38F80EB /* GitMac/UI/Components/Rows/FileRow.swift */, - 2AE3FEB7A3784054971C3AD4 /* GitMac/UI/Components/Rows/ListRow.swift */, - 267BB01E74AF44C9B3C9596C /* GitMac/UI/Components/Rows/RowProtocols.swift */, - 6D1161872BBC40C4A645C204 /* GitMac/UI/Components/Search/SearchBar.swift */, - C2AFF044956B /* GitMac/Features/Diff/WordLevelDiff.swift */, - 8F2DFC8AA2A2B7D0B01AC504 /* GitMac/UI/Components/Icons/FileTypeIcon.swift */, - 2368B43F70049E34A0D255DC /* GitMac/UI/Components/Search/FilterMenu.swift */, - UNIFCTX001F526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift */, - 147A503D9F474B078C7BEE31 /* GitMac/GitOperationHandler.swift */, - CAE1F7D4CBB444D9943B71B4 /* GitMac/UI/Utilities/ModalCoordinator.swift */, - 5665CCAF5B474343B5EF2EC6 /* GitMac/Core/Models/GitHook.swift */, - 28A7B19191DD477B968740A6 /* GitMac/Core/Services/GitHooksService.swift */, - DC2C6CC5BD3A4E599AF1D25E /* GitMac/Features/GitHooks/GitHooksView.swift */, - 2D368F6EA7904E0FA0B0F13E /* GitMac/Core/Models/GitSubmodule.swift */, - AABD4D3FF0764834B96432C5 /* GitMac/Core/Services/GitSubmoduleService.swift */, - 52E333B6FDF7446C84D42546 /* GitMac/Features/Submodules/SubmoduleView.swift */, - A8569CE512F04DD2934CA67D /* GitMac/Core/Services/Specialized/BranchService.swift */, - B30B93C2B6324B20910477EE /* GitMac/Core/Services/Specialized/StagingService.swift */, - DB8B21CB71764FDA84D6A13C /* GitMac/Core/Services/Specialized/CommitService.swift */, - 316D8CADD85D4FD180845A12 /* GitMac/Core/Services/Specialized/RemoteService.swift */, - C43ECFABAAE6482689E982D9 /* GitMac/Core/Services/Specialized/StashService.swift */, - 022A2E75CE334A6F9DD805DC /* GitMac/Core/Services/Specialized/TagService.swift */, - 9130B8C1A5864342B76DC646 /* GitMac/Core/Services/Specialized/MergeService.swift */, - A2D42ED56A0B40979DD15162 /* GitMac/Core/Services/Specialized/DiffService.swift */, - B6C996AAE11C461687B8AE4B /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift */, - BE4ECB5B47B84326AD7BB66A /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift */, - E9CF696BFA224C54B47A74E9 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift */, - CAB380172C6E42F1929A7713 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift */, - D560DF79B4C54BEF9A68C140 /* GitMac/Features/Diff/Renderers/DiffParser.swift */, - C835DF0B771744A1A44430BF /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift */, - 2296EAF548A94B6680DCE15A /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift */, - D00A28D6E71845779A4C0742 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift */, - 7BA805D6EB83496085F6C9D0 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift */, - 1D244A654ECE45FCBD5687B8 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift */, - B1D91D10301146AEA4248665 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift */, - C5386BB8C45449FEB5253D02 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift */, - BE60B58A50E74871B2985540 /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift */, - D7B6322736F24CDF879EBC1C /* GitMac/UI/Components/Common/UniversalResizer.swift */, - 1319443A5D6F0D217BF7BEDA /* GitMac/UI/Components/Cards/CardStyle.swift */, + 1319443A5D6F0D217BF7BEDA /* CardStyle.swift */, ); name = "Recovered References"; sourceTree = ""; @@ -705,9 +1741,6 @@ ACC600432F024855005DC34D /* Integration */ = { isa = PBXGroup; children = ( - ACC600402F024855005DC34D /* DSIntegrationPanel.swift */, - ACC600412F024855005DC34D /* DSLoginPrompt.swift */, - ACC600422F024855005DC34D /* DSSettingsSheet.swift */, ); path = Integration; sourceTree = ""; @@ -715,10 +1748,6 @@ ACC600482F024855005DC34D /* Lists */ = { isa = PBXGroup; children = ( - ACC600442F024855005DC34D /* DSDraggableList.swift */, - ACC600452F024855005DC34D /* DSGroupedList.swift */, - ACC600462F024855005DC34D /* DSInfiniteList.swift */, - ACC600472F024855005DC34D /* DSVirtualizedList.swift */, ); path = Lists; sourceTree = ""; @@ -726,10 +1755,6 @@ ACC6004D2F024855005DC34D /* Panels */ = { isa = PBXGroup; children = ( - ACC600492F024855005DC34D /* DSCollapsiblePanel.swift */, - ACC6004A2F024855005DC34D /* DSPanel.swift */, - ACC6004B2F024855005DC34D /* DSResizablePanel.swift */, - ACC6004C2F024855005DC34D /* DSTabPanel.swift */, ); path = Panels; sourceTree = ""; @@ -740,61 +1765,347 @@ ACC600432F024855005DC34D /* Integration */, ACC600482F024855005DC34D /* Lists */, ACC6004D2F024855005DC34D /* Panels */, - ACC6004E2F024855005DC34D /* DSSheet.swift */, - ACC6004F2F024855005DC34D /* DSTabContainer.swift */, ); path = Organisms; sourceTree = ""; }; + AD5F4DC67A34775FC8433721 /* Terminal */ = { + isa = PBXGroup; + children = ( + 199A9B206229569CD300315B /* AITerminalInputView.swift */, + ); + name = Terminal; + sourceTree = ""; + }; + AE68ED6C9A01D7EABACB38AE /* Organisms */ = { + isa = PBXGroup; + children = ( + 56BFBD0300DA8996FAB0CDB0 /* Lists */, + 501DC4055DCB1E46750814D5 /* Integration */, + 27185404A23D7B71F06B0C99 /* Panels */, + 8B32BADC104E4660C5B68987 /* DSTabContainer.swift */, + 80B1AE96185C72EB618AB03C /* DSSheet.swift */, + ); + name = Organisms; + sourceTree = ""; + }; AFE2CBBCBAFF02C17DF4B1F1 /* Notion */ = { isa = PBXGroup; children = ( - B478D68ED8A95275ECAA2AD4 /* GitMac/Features/Notion/NotionPlugin.swift */, + B478D68ED8A95275ECAA2AD4 /* NotionPlugin.swift */, + 0B70C1A5D0DB3C69996CE7FA /* NotionPanel.swift */, + 895A0312F04D67E50BB88FCA /* NotionContentView.swift */, ); name = Notion; sourceTree = ""; }; + B1F84483137132D3A72A6DC6 /* Repositories */ = { + isa = PBXGroup; + children = ( + F1B8981DC4D0469E4A2A142E /* RepositoryHierarchicalNavigator.swift */, + ); + name = Repositories; + sourceTree = ""; + }; B2F9F7593A8E298C00404A28 /* Buttons */ = { isa = PBXGroup; children = ( - 268952AE4D12EAE5E4A47B3A /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift */, - 8E5FA97CD68426F1A4DD31CE /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift */, - 3AAB74E609D51B22B8049D13 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift */, - 2047A6AF811FD0BC3F05BBB3 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift */, - 9CF60F8365023DDDA48C436F /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift */, - FE61B5268D38F24336EF3822 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift */, + 268952AE4D12EAE5E4A47B3A /* DSTabButton.swift */, + 8E5FA97CD68426F1A4DD31CE /* DSButton.swift */, + 3AAB74E609D51B22B8049D13 /* DSToolbarButton.swift */, + 2047A6AF811FD0BC3F05BBB3 /* DSIconButton.swift */, + 9CF60F8365023DDDA48C436F /* DSLinkButton.swift */, + FE61B5268D38F24336EF3822 /* DSCloseButton.swift */, ); name = Buttons; sourceTree = ""; }; + B5593DA8ACD80F98FAF0A75D /* Components */ = { + isa = PBXGroup; + children = ( + 902D7CCF9933174ACF01C888 /* IntegrationViews */, + 114B5EA3C64BF616103018C2 /* SettingsSection.swift */, + B54D444D43369E58E93BE1A2 /* ThemeButton.swift */, + ); + name = Components; + path = Components; + sourceTree = ""; + }; + B5A8FF83C6DD81410B6E7D4C /* Enhanced */ = { + isa = PBXGroup; + children = ( + 9688CF7D96D31FCC27CAB3EC /* TerminalBlocksView.swift */, + 6A3DB6D02E367EF664B47F0D /* TerminalSessionSharingService.swift */, + 068E2976B54047B4D0261D74 /* TerminalWorkflowsView.swift */, + 80BED603E9B131C466C78CE5 /* SecretRedactionService.swift */, + 15161D366FAC91D524B1F99C /* TerminalAIService.swift */, + 71D743335AA1A3796B0A2723 /* GhosttyEnhancedTerminalView.swift */, + 7801DE614213369EF2205E93 /* AICommandSuggestions.swift */, + 418DEF04AD5914A0852FBE2F /* TerminalCommandPalette.swift */, + 3DCECE17C0C42203380CB8A6 /* GhosttyEnhancedViewModel.swift */, + 9C639B695B6861F665F5E095 /* TerminalNLInputView.swift */, + B56BCC2A0CBE440FE161710C /* TerminalNLTranslationService.swift */, + ); + name = Enhanced; + sourceTree = ""; + }; + B5B0BA5BDD09A227257F055E /* Search */ = { + isa = PBXGroup; + children = ( + B684A269B043CF4172FEBD53 /* SearchSyntaxParser.swift */, + 9D7FCE58539D9D09BCEB7261 /* SearchQuery.swift */, + ); + name = Search; + sourceTree = ""; + }; + B8BFA89B8F8842AC68DE9EDF /* PullRequests */ = { + isa = PBXGroup; + children = ( + DE3CAA4AAC09839FD89D948B /* PRListView.swift */, + B7AC05D32D81D7C384612D99 /* PullSheet.swift */, + ); + name = PullRequests; + sourceTree = ""; + }; + BBFF77377EBA36920070559E /* FileTree */ = { + isa = PBXGroup; + children = ( + 611701D71659694B52140952 /* GenericFileTreeView.swift */, + E60149B22A9C3833A45E1138 /* TreeExpansionState.swift */, + 9A327C112284D1DF0EFDF4DD /* FileTreeProtocols.swift */, + ); + name = FileTree; + sourceTree = ""; + }; + BCAE304C152BD8807C61FD46 /* Diff */ = { + isa = PBXGroup; + children = ( + EFA5703D084B837337090FC8 /* Components */, + 7073C6B8F9BCD7CC36CE5CC1 /* Renderers */, + C8A9F580892364D6F487D3D4 /* KaleidoscopeSplitDiffView.swift */, + C0A3477C5429FE5F172621B6 /* TiledDiffView.swift */, + B22461AAF391C4D4E7B598E2 /* KaleidoscopeFileList.swift */, + 1F038DA5BD2F2882EEDC31EA /* DiffOptions.swift */, + FC7110872A0069C25C89D7CF /* DiffPreferences.swift */, + B0F7D30FD32DB6AC065F6149 /* WordLevelDiff.swift */, + B8E11127F294B1C3EB7DA927 /* DiffView.swift */, + AFA2C545B49F67E44DA12A41 /* AlignedDiffView.swift */, + 08F8D7BD58D43721D608D383 /* LargeDiffView.swift */, + 709B89F0F410533E74A4D21D /* LightweightDiffView.swift */, + 21AA0E718F7F86B46BFD4922 /* ConnectionRibbonsView.swift */, + B5C016214CFF745CFA9D01C3 /* DiffEnhancements.swift */, + EB901F90B7E62C601A805FA3 /* DiffCache.swift */, + 0D7BA9451B9BDFAF6D436787 /* DiffEngineView.swift */, + D359DD82979AF160C3A6257C /* KaleidoscopeDiffView.swift */, + D9242EE99EDC7C5261B2CE9A /* DiffSearchEngine.swift */, + 51E2503BBB1447E619977588 /* DiffStatusBar.swift */, + 48195E942F327C928D76E3F0 /* DiffBreadcrumb.swift */, + 77FDB310B5DBFC8EC103E983 /* DiffSearchAndNavigation.swift */, + 723BC39F5123B40D0EB427E3 /* MinimapView.swift */, + 00B003B6D2E2E859899B257A /* SplitDiffView.swift */, + ); + name = Diff; + path = Diff; + sourceTree = ""; + }; + BD84F811C48E673EBD27CA25 /* Worktrees */ = { + isa = PBXGroup; + children = ( + 0D4393B45041101C7B5B1DF2 /* WorktreeListView.swift */, + ); + name = Worktrees; + sourceTree = ""; + }; + BDB46F4CD2EC752E11CC2017 /* History */ = { + isa = PBXGroup; + children = ( + 17D5B35E5A8E665E718E7F76 /* HistoryView.swift */, + ); + name = History; + sourceTree = ""; + }; + BF104625298941E1285613FC /* Panels */ = { + isa = PBXGroup; + children = ( + 424E2F8C47032B424C15AA36 /* Center */, + E35A74EA0B207E7600A1B663 /* Team */, + 86D7FD79DD8FE3AE900947A1 /* Left */, + 5E7465D46095F5749665C379 /* Right */, + ); + name = Panels; + sourceTree = ""; + }; + C615D52107EF2D3EA74ADE80 /* BottomPanel */ = { + isa = PBXGroup; + children = ( + 3FA1F1C866290E0001DD3FC5 /* Models */, + 9EE58DFCFBF78FAC2F1D3B26 /* Views */, + 48CED6026902BB06896B1582 /* BottomPanelManager.swift */, + 7C56653F31E2EE5F1A01BDD6 /* ViewModels */, + ); + name = BottomPanel; + sourceTree = ""; + }; C734952412915F42A24F7E96 /* Forms */ = { isa = PBXGroup; children = ( - CF4F843954F997AD46CDBAE8 /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift */, - 6D9AE8B50C11C983BA3F87BC /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift */, - 309335EA370B8E36FD9B9860 /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift */, - 5E99A07FBA1E2DA4CDF2D8F3 /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift */, + CF4F843954F997AD46CDBAE8 /* DSFilterMenu.swift */, + 6D9AE8B50C11C983BA3F87BC /* DSLabeledField.swift */, + 309335EA370B8E36FD9B9860 /* DSSearchBar.swift */, + 5E99A07FBA1E2DA4CDF2D8F3 /* DSActionBar.swift */, ); name = Forms; sourceTree = ""; }; + C7F13029000BCA5357F85FC1 /* Terminal */ = { + isa = PBXGroup; + children = ( + B5A8FF83C6DD81410B6E7D4C /* Enhanced */, + 3872D9A474B6E80E170C9D7B /* Core */, + F20404FCDC6B27287F41961B /* Views */, + 479358BE8600B9F9CE64EC29 /* MinimalTerminalView.swift */, + 700C8193E2C9ABEEC282E57C /* GhosttyTerminalView.swift */, + E75012ED186D7236EF6AC78A /* GhosttyDirect.swift */, + A192FF680B6F020F6E148E4A /* GhosttyNativeView.swift */, + 45438C33E7FA5A730083B876 /* TerminalView.swift */, + 0B7F82ACD609B8D561720E7D /* EmbeddedTerminalView.swift */, + C26B3B93F4ED225A6D9FBA1B /* TerminalIntegration.swift */, + ); + name = Terminal; + sourceTree = ""; + }; + CA6D6DE63CC182C11267BCF6 /* DeepLinking */ = { + isa = PBXGroup; + children = ( + 4CAF4B562204156C4866EFD7 /* DeepLinkService.swift */, + ); + name = DeepLinking; + path = DeepLinking; + sourceTree = ""; + }; + CB566A216F98AAF0ED430B8F /* Commit */ = { + isa = PBXGroup; + children = ( + 597B2B4C7339D9BDBF7F562F /* CommitMessageArea.swift */, + ); + name = Commit; + sourceTree = ""; + }; CC4087FD6C87491E4AFED6A6 /* Core */ = { isa = PBXGroup; children = ( 3FE0E0E74E8765998AD50CE2 /* PluginSystem */, + 276D13D00FCB4EBF4A238286 /* StoreKit */, + 4945A15B6B6622CC6C970313 /* Utils */, + 0102A37A8500E1EB7094E336 /* Models */, + A34BCD0AB058B12F53120ADD /* Services */, + 7085DDA21D210DEE641F4FAD /* Git */, ); name = Core; sourceTree = ""; }; + CCF3F91A839A1A16021BB7AF /* FileViewer */ = { + isa = PBXGroup; + children = ( + 60FE59D2EAA5418172A52CBA /* FileContentView.swift */, + AA7B4BEC591DFBFD7420A56D /* FileBrowserView.swift */, + ); + name = FileViewer; + sourceTree = ""; + }; + CD532547B3BED8A329BE06A5 /* Search */ = { + isa = PBXGroup; + children = ( + 47CDACC9DB306400AB277B7A /* SearchView.swift */, + 416D4860255DDA9948479B7A /* FuzzyFileFinder.swift */, + ); + name = Search; + sourceTree = ""; + }; + CDC87F2085C380497492BFF4 /* Common */ = { + isa = PBXGroup; + children = ( + C05E76268C1B2E5E38FEFE08 /* LayoutConstants.swift */, + F4E9CDA3CADA6831328A87B5 /* UniversalResizer.swift */, + ); + name = Common; + sourceTree = ""; + }; D16BE1D3398BD1068630C734 /* Jira */ = { isa = PBXGroup; children = ( - 3CBD224C28988637497A106C /* GitMac/Features/Jira/JiraViewModel.swift */, - 398BB78A6379748BC49FA09F /* GitMac/Features/Jira/JiraPlugin.swift */, + 3CBD224C28988637497A106C /* JiraViewModel.swift */, + 398BB78A6379748BC49FA09F /* JiraPlugin.swift */, + E1AB808BA2AB6D04CAD3ECAB /* Views */, + 5B73ABCA48989962336F44BE /* JiraPanelGeneric.swift */, + DC8732E820ED04A145A96F21 /* JiraSettingsContent.swift */, + DA9481335957DF01895B7DA2 /* JiraIssuesList.swift */, + 63D9F13789EF1312E75BA19B /* JiraPanel.swift */, + 02DCCABAE7BA3E98C2B5C13D /* JiraLoginPrompt.swift */, + 8ED30154FBD5E02F2BB86ABF /* JiraContentView.swift */, + E53BC3B1A105F3E502F1C772 /* JiraPanel.swift */, ); name = Jira; sourceTree = ""; }; + D21C9812252B018CA9EE7C88 /* Rebase */ = { + isa = PBXGroup; + children = ( + F40127F9810F49AB9C7C338F /* InteractiveRebaseView.swift */, + ); + name = Rebase; + sourceTree = ""; + }; + D6B7C5ACF1D10ACA91F926E6 /* CommandPalette */ = { + isa = PBXGroup; + children = ( + 59B7AE52B61BB88CB19938B7 /* CommandPalette.swift */, + ); + name = CommandPalette; + sourceTree = ""; + }; + DF0B794E27914569EBD1820E /* ViewModels */ = { + isa = PBXGroup; + children = ( + 46786D226E232F901D917031 /* CommitDetailViewModel.swift */, + EC3512F76E08429FBAF6FD71 /* StagingViewModel.swift */, + ); + name = ViewModels; + path = ViewModels; + sourceTree = ""; + }; + E1AB808BA2AB6D04CAD3ECAB /* Views */ = { + isa = PBXGroup; + children = ( + 98E23A49EE7DBFA428FF243F /* JiraSettingsSheet.swift */, + 7E551DAE216359FB5ACFE700 /* JiraIssuesListView.swift */, + 7D540B10F6B69E9A7F813461 /* JiraLoginPromptView.swift */, + ); + name = Views; + path = Views; + sourceTree = ""; + }; + E1C910203A1F51EF3CEF6115 /* Toolbars */ = { + isa = PBXGroup; + children = ( + 6A6251BEE308BCE87B307FDF /* CompactRepoTab.swift */, + 91F1ADE5FB755F6E1A0E5CDE /* ToolbarComponents.swift */, + BCCD2C3F507ABF68B24D8B6C /* RepositoryTabBar.swift */, + ); + name = Toolbars; + path = Toolbars; + sourceTree = ""; + }; + E35A74EA0B207E7600A1B663 /* Team */ = { + isa = PBXGroup; + children = ( + D839A0472AD094A916658152 /* TeamActivityPanel.swift */, + 5D9EE2D5D4D92DD9E7A57156 /* TeamComponents.swift */, + 20655FA140637287314ADC9E /* TeamActivityViewModel.swift */, + ); + name = Team; + sourceTree = ""; + }; E438FEA1651A5E4BE709432B /* Organisms */ = { isa = PBXGroup; children = ( @@ -805,26 +2116,64 @@ name = Organisms; sourceTree = ""; }; + E79239023FCBC9E18654E7C0 /* Stash */ = { + isa = PBXGroup; + children = ( + 90CD7B4608F6E75CA6DBE9CB /* StashListView.swift */, + ); + name = Stash; + sourceTree = ""; + }; + EFA5703D084B837337090FC8 /* Components */ = { + isa = PBXGroup; + children = ( + 8263EEAA4CA902E6D88CC782 /* EnhancedDiffToolbar.swift */, + E43D322A36A57AE33E47CB62 /* EnhancedSplitDiffView.swift */, + ); + name = Components; + path = Components; + sourceTree = ""; + }; F15D2084D4EA5C3563277867 /* Inputs */ = { isa = PBXGroup; children = ( - 5CF76682BE59E45805F06FCF /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift */, - 3AFAACE42C7F37924C183068 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift */, - 93997D6789256BCEC9328D26 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift */, - EAAD36D44E199613FD60C7B2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift */, - 0F96668869E06EF60C86ED41 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift */, - 232C0B51BBB0007A1C5DB910 /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift */, + 5CF76682BE59E45805F06FCF /* DSTextEditor.swift */, + 3AFAACE42C7F37924C183068 /* DSSecureField.swift */, + 93997D6789256BCEC9328D26 /* DSSearchField.swift */, + EAAD36D44E199613FD60C7B2 /* DSToggle.swift */, + 0F96668869E06EF60C86ED41 /* DSTextField.swift */, + 232C0B51BBB0007A1C5DB910 /* DSPicker.swift */, ); name = Inputs; sourceTree = ""; }; + F20404FCDC6B27287F41961B /* Views */ = { + isa = PBXGroup; + children = ( + 40520EC2939EE30B975A15C7 /* TerminalInputBar.swift */, + 2F12FFF9CD468B05E92D4271 /* WarpAIInputBar.swift */, + 451F64E5457594941DF51A31 /* EnhancedTerminalPanel.swift */, + ); + name = Views; + sourceTree = ""; + }; + F48E11A1ADC398C3BD9EEE98 /* Issues */ = { + isa = PBXGroup; + children = ( + A3D8DDC9BB7A5208EF261161 /* IssueListView.swift */, + ); + name = Issues; + sourceTree = ""; + }; F4A15FC3C2AF1135F49E2B33 /* Taiga */ = { isa = PBXGroup; children = ( - C7C8B3FDC1C6C5B40234A3FE /* Features/Taiga/TaigaViewModel.swift */, - 7B94015A3FF5EA966BC5ABEF /* Features/Taiga/TaigaPlugin.swift */, 0807DEFD2BA4ED674651C935 /* Views */, - B3798A1846650C01AD285DC8 /* TaigaContentView.swift */, + 77DF6AB18445C7F81E95CD87 /* TaigaContentView.swift */, + 3500F4E08558A1C65E4E6108 /* TaigaViewModel.swift */, + 32798DDE1B043BCB72AFEDC5 /* TaigaTicketsPanel.swift */, + C41A68E2DF8729EA40C149C6 /* TaigaPlugin.swift */, + F6FDC6090C9B3BBB620A7518 /* TaigaSettingsContent.swift */, ); name = Taiga; sourceTree = ""; @@ -832,114 +2181,40 @@ F87ABC0A30217D07D4CA3454 /* Integration */ = { isa = PBXGroup; children = ( + F3F77455C01C15BDB2F9E883 /* DSGenericIntegrationPanel+Examples.swift */, + 0E8861735FD09AB43C10F3AD /* DSGenericIntegrationPanel.swift */, ); name = Integration; sourceTree = ""; }; + FD0A74A99DB221529BCDEC69 /* MergeConflict */ = { + isa = PBXGroup; + children = ( + 71CF81A55F5DF67A99DF4F52 /* ConflictResolverView.swift */, + ); + name = MergeConflict; + sourceTree = ""; + }; GRP001 /* GitMac */ = { isa = PBXGroup; children = ( - SRC001 /* App/GitMacApp.swift */, - F3F8B015C29B4A6CA6826C60 /* Core/StoreKit/StoreManager.swift */, - 64ABE56227B24161879D0CF5 /* Core/Utils/KeychainManager.swift */, - FCE46C5A51584BEAA7157198 /* Core/Utils/ShellExecutor.swift */, - 785500BECF07420C8BF7154F /* Core/Utils/FileWatcher.swift */, - 9E8E5E6A6DC644C3BE12AC71 /* Core/Services/GitService.swift */, - E3E591974B8848B6B95A24C5 /* Core/Services/AIService.swift */, - 0FA7D9629C3A4E94AA815F10 /* Core/Services/GitHubService.swift */, - 424D8CE9CCF640CFB463812E /* Core/Services/WorkspaceSettings.swift */, - 59E1FD52D6F94C618B87728D /* Core/Services/MicrosoftPlannerService.swift */, - 33BE327DCA7C432CB5ACD429 /* Core/Services/GitHubOAuth.swift */, - AC2B9D9AD93D4C849430B33A /* Core/Services/UndoManager.swift */, - 1BBDA782B5334ADBB37A85A2 /* Core/Services/MicrosoftOAuth.swift */, - 624FBC21EE1949A182255005 /* Core/Services/TaigaService.swift */, - FCD7E4FE60FC4D2AA634276B /* Core/Git/Stash.swift */, - 056E6AA36D094327AE13F525 /* Core/Git/Remote.swift */, - 5642A2C2CA5B4EC7B7F9A4A8 /* Core/Git/Branch.swift */, - 89BB6F179D7F45699C8290E7 /* Core/Git/Commit.swift */, - 45056B3410F84FBE87F85752 /* Core/Git/Repository.swift */, - ECC927E0DBEE478EBF4A503F /* Core/Git/Worktree.swift */, - 16FAFECA970C46BC86DEEB01 /* Core/Git/GitEngine.swift */, - REPOCTX01F526F46E3958E34 /* Core/Git/RepositoryContext.swift */, - PATCHMAN01F526F46E3958E34 /* Core/Git/PatchManipulator.swift */, - 3163AE41EEA248F3AB7DED92 /* Core/Git/Tag.swift */, - F7F03F2B6A4D4CA1B7A62F19 /* App/ContentView.swift */, - 8EE4CBAA27CD4F849DDA3CF1 /* Features/Settings/SettingsView.swift */, - C4EB0E4C83554CEF90309925 /* Features/Settings/SubscriptionView.swift */, - 57097A08561A4AFAACC21076 /* Features/Staging/StagingAreaView.swift */, - A052AB429346498D89696798 /* Features/CommitGraph/CommitGraphView.swift */, - EEBF72A6083D459FBB087BCF /* Features/Taiga/TaigaTicketsPanel.swift */, - A85333FB1D024131ABCE6E3F /* Features/CherryPick/CherryPickView.swift */, - C88C0A7D9D694448BFEE1A4E /* Features/Terminal/TerminalView.swift */, - 653680820091489887257EC3 /* Features/Diff/DiffView.swift */, - B2DB7601C3F04EEBB40EBBEA /* Features/GitFlow/GitFlowManager.swift */, - 07A0562AED2641F98A85EABD /* Features/Tags/TagListView.swift */, - 08F914D8A56D43AF988240BB /* Features/Launchpad/LaunchpadView.swift */, - 7D998EF22AEF4536BD27F7C8 /* Features/Remotes/RemoteListView.swift */, - E82EFD51A1814437BE886850 /* Features/Stash/StashListView.swift */, - C291CEC87A0B4E0686E32180 /* Features/Worktrees/WorktreeListView.swift */, - A08BF58859F34C4684C76BEC /* Features/History/HistoryView.swift */, - 25C758869BDD466A9F25AB89 /* Features/Branches/BranchListView.swift */, - C4DB863C48084E76B7AE0888 /* Features/PullRequests/PRListView.swift */, - 4FF93CC15BF746729CBC5467 /* Features/Issues/IssueListView.swift */, - 9085FF6654004A1785CF1AFE /* Features/MergeConflict/ConflictResolverView.swift */, - PLNR001F526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift */, - LNRSVC01F526F46E3958E34A /* Core/Services/LinearService.swift */, - JIRASVC1F526F46E3958E34A /* Core/Services/JiraService.swift */, - NOTNSVC1F526F46E3958E34A /* Core/Services/NotionService.swift */, - LNRPNL01F526F46E3958E34A /* Features/Linear/LinearPanel.swift */, - JIRAPNL1F526F46E3958E34A /* Features/Jira/JiraPanel.swift */, - NOTNPNL1F526F46E3958E34A /* Features/Notion/NotionPanel.swift */, - AVTRSVC1F526F46E3958E34A /* Core/Services/AvatarService.swift */, - CTXMNU01F526F46E3958E34A /* UI/Components/ContextMenus.swift */, - GKTHEME1F526F46E3958E34A /* UI/Components/AppTheme.swift */, - LDBTN001F526F46E3958E34A /* UI/Components/LoadingButton.swift */, - KBSHRT01F526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift */, RES001 /* Assets.xcassets */, INFO01 /* Info.plist */, - AC94317D2EE96F9100A59026 /* AvatarImageView.swift */, - AC94317F2EE96F9D00A59026 /* PullSheet.swift */, - AC9431812EE96FB400A59026 /* FileBrowserView.swift */, - AC9431832EE9786B00A59026 /* ResetView.swift */, - AC9431852EE9789700A59026 /* RevertView.swift */, - AC9431872EE978E500A59026 /* ReflogView.swift */, - AC9431892EE9791900A59026 /* InteractiveRebaseView.swift */, - AC94318B2EE9795800A59026 /* CommandPalette.swift */, - AC94318D2EE979A600A59026 /* FuzzyFileFinder.swift */, - AC94318F2EE979FF00A59026 /* SplitDiffView.swift */, - AC9431912EE97A3700A59026 /* SyntaxHighlighter.swift */, - AC9431932EE97A6D00A59026 /* RemoteManagementView.swift */, - AC9431952EE97AA500A59026 /* BranchComparisonView.swift */, AC9431972EE97AF100A59026 /* IMPLEMENTATION_ROADMAP.md */, - AC9431992EE97BBF00A59026 /* ThemeManager.swift */, - AC94319B2EE97BFF00A59026 /* KeyboardShortcutManager.swift */, - AC94319D2EE97C3B00A59026 /* MinimapView.swift */, - AC94319F2EE97C8400A59026 /* SearchView.swift */, - AC9431A12EE97CC800A59026 /* FileAnnotationView.swift */, AC9431A32EE97D6000A59026 /* BUILD_FIX.md */, - AC9431A52EE97D8000A59026 /* NotificationManager.swift */, - AC9431A72EE97DB400A59026 /* ExternalToolsManager.swift */, AC9431A92EE97DE700A59026 /* FASE3_PROGRESS.md */, AC9431AF2EE97F5B00A59026 /* INTEGRATION_GUIDE.md */, AC9431B12EE97FAF00A59026 /* REVIEW_GUIDE.md */, AC9431B72EE980A900A59026 /* INTEGRATION_CHECKLIST.md */, AC9431B92EE980CD00A59026 /* FIX_BUILD_NOW.md */, AC9431BD2EE9822D00A59026 /* QUICK_START.md */, - AC9431BF2EE99A4800A59026 /* RemoteOperationTracker.swift */, AC9431C12EE99AA000A59026 /* REMOTE_STATUS_INTEGRATION.md */, AC9431C32EE9A33100A59026 /* WARNING_FIXES.md */, - WKFLW001F526F46E3958E34A /* WorkflowsView.swift */, - AWSCB001F526F46E3958E34A /* AWSCodeBuildService.swift */, - B2F1AAD499A9AB14BC5A7E20 /* BottomPanelManager.swift */, - 8F1027D35B92326DD64B9A97 /* BottomPanelTab.swift */, - 42A6E5B72144B52AC053813D /* BottomPanelType.swift */, - F13EAD6CBFC2CB67F3FCA053 /* BottomPanelResizer.swift */, - F69E901593785DE0363A8261 /* UnifiedBottomPanel.swift */, - 38DEC4D523BC3EFF1A432D11 /* BottomPanelContent.swift */, - 2E8949FE6151BCFC66C2361C /* BottomPanelTabBar.swift */, 061615B533CC32DE604E5D24 /* UI */, CC4087FD6C87491E4AFED6A6 /* Core */, 5532E83FF675C7A46865EEC2 /* Features */, + 511E77AFDD48EDA904CBBCE7 /* App */, + 51BFE48868831676AE6C3DFB /* Services */, ); path = GitMac; sourceTree = ""; @@ -959,24 +2234,9 @@ GRP002 /* Products */, AC94317C2EE9223600A59026 /* Recovered References */, AC9431C52EED65B400A59026 /* DIFFVIEW_PERFORMANCE.md */, - ACB688DC2EEE3AA200CCD845 /* DiffOptions.swift */, - ACB688DD2EEE3AC400CCD845 /* DiffCache.swift */, - ACB688DE2EEE3B0100CCD845 /* DiffEngine.swift */, - ACB688DF2EEE3B2A00CCD845 /* DiffEngineTests.swift */, - ACB688E02EEE3B6000CCD845 /* TiledDiffView.swift */, - ACB688E12EEE3B8100CCD845 /* DiffSearchEngine.swift */, - ACB688E22EEE3BA100CCD845 /* DiffStatusBar.swift */, ); sourceTree = ""; }; - 3E673DC0846645FCBBE2567D /* RepoGroups */ = { - isa = PBXGroup; - children = ( - F74C1E00507D408D86CEE731 /* RepoGroupsService.swift */, - ); - name = RepoGroups; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -996,6 +2256,8 @@ packageProductDependencies = ( DEP001 /* KeychainAccess */, DEP002 /* Splash */, + AC28C30A2F08591500A86A78 /* DifferenceKit */, + DEP003 /* CodeEditSourceEditor */, ); productName = GitMac; productReference = PROD01 /* GitMac.app */; @@ -1009,7 +2271,7 @@ attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; + LastUpgradeCheck = 2620; TargetAttributes = { TGT001 = { CreatedOnToolsVersion = 15.0; @@ -1028,6 +2290,8 @@ packageReferences = ( PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */, PKR002 /* XCRemoteSwiftPackageReference "Splash" */, + AC28C3092F08591500A86A78 /* XCRemoteSwiftPackageReference "DifferenceKit" */, + PKR003 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */, ); productRefGroup = GRP002 /* Products */; projectDirPath = ""; @@ -1064,215 +2328,360 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 11412D2CD2554F6880201DCC /* RepoGroupsService.swift in Sources */, - B6FF711E9D904DC5A13E334F /* GitMac/UI/Components/Commit/CommitMessageArea.swift in Sources */, - C17B40AC6D74427DAB28B049 /* GitMac/UI/Components/Common/LayoutConstants.swift in Sources */, - 8AC7D258532342BF841C0A12 /* GitMac/UI/Components/Diff/DiffHunkView.swift in Sources */, - C964E76B6FCE4A16BC3CA967 /* GitMac/UI/Components/Diff/DiffLineView.swift in Sources */, - FFBD69F7105D47AFB9832131 /* GitMac/UI/Components/Diff/DiffStatsView.swift in Sources */, - C8184F3EA7F1402896DD1A5D /* GitMac/UI/Components/Diff/DiffToolbar.swift in Sources */, - 2997ADCD07B2400A84304290 /* GitMac/UI/Components/FileTree/FileTreeProtocols.swift in Sources */, - 70D6620C892D488B90479648 /* GitMac/UI/Components/FileTree/GenericFileTreeView.swift in Sources */, - F94BB1BCB04F4885BF46F509 /* GitMac/UI/Components/FileTree/GenericTreeNode.swift in Sources */, - 514CC38B4E6146C788C7E04C /* GitMac/UI/Components/FileTree/TreeExpansionState.swift in Sources */, - B77A120C3CF2461C8B4B09BE /* GitMac/UI/Components/Icons/StatusIcon.swift in Sources */, - D7C739877F294D99869D0B8A /* GitMac/UI/Components/Layout/FileListSection.swift in Sources */, - 10722C36120E452A954A5C34 /* GitMac/UI/Components/Layout/SectionHeader.swift in Sources */, - AC0864B0C8C2443BBB705DE5 /* GitMac/UI/Components/Layout/Separator.swift in Sources */, - 077C9761271C430390829DC4 /* GitMac/UI/Components/Rows/BaseRow.swift in Sources */, - 9514CACB50D94A6AB2DD6683 /* GitMac/UI/Components/Rows/BranchRow.swift in Sources */, - B6189D2FE47A4D7EA34D9F06 /* GitMac/UI/Components/Rows/FileRow.swift in Sources */, - 23F59A5692CE4B529CE47DF8 /* GitMac/UI/Components/Rows/ListRow.swift in Sources */, - 8C04729C0FB24B649A27A8F3 /* GitMac/UI/Components/Rows/RowProtocols.swift in Sources */, - 74A3A3F1A4C6475889D05E50 /* GitMac/UI/Components/Search/SearchBar.swift in Sources */, - 8E589E6FF70C /* GitMac/Features/Diff/WordLevelDiff.swift in Sources */, - 2F3531A32151515A63679091 /* GitMac/UI/Components/Icons/FileTypeIcon.swift in Sources */, - 0D6F81FC202F4A445EB2EEAC /* GitMac/UI/Components/Search/FilterMenu.swift in Sources */, - AC9431802EE96F9D00A59026 /* PullSheet.swift in Sources */, - APP001 /* App/GitMacApp.swift in Sources */, - 8252E184E6A24337B4EE1242 /* Core/StoreKit/StoreManager.swift in Sources */, - A29EF1F3B98D4EE1A290464F /* Core/Utils/KeychainManager.swift in Sources */, - 73C8DBE08FC24847B16135A5 /* Core/Utils/ShellExecutor.swift in Sources */, - AC9431822EE96FB400A59026 /* FileBrowserView.swift in Sources */, - C1432F5677FB440BBBCE1D37 /* Core/Utils/FileWatcher.swift in Sources */, - CACHETTL1B526F46E3958E34A /* GitMac/Core/Utils/CacheWithTTL.swift in Sources */, - F915E96872D140E997144CF7 /* Core/Services/GitService.swift in Sources */, - 2ECCBA94025D46619633D059 /* Core/Services/AIService.swift in Sources */, - 1705954E5B714752B9B1D090 /* Core/Services/GitHubService.swift in Sources */, - B8B777FE4088470CBA4427C7 /* Core/Services/WorkspaceSettings.swift in Sources */, - AC9431862EE9789700A59026 /* RevertView.swift in Sources */, - 6A63391DAEC9454891091E35 /* Core/Services/MicrosoftPlannerService.swift in Sources */, - AC94319A2EE97BBF00A59026 /* ThemeManager.swift in Sources */, - 504DCBFB526F46E3958E34A3 /* Core/Services/GitHubOAuth.swift in Sources */, - A9FA029924774C729FDE3F91 /* Core/Services/UndoManager.swift in Sources */, - 227AC51E448C4CDFBE937534 /* Core/Services/MicrosoftOAuth.swift in Sources */, - D5351C2C701B487793E0C515 /* Core/Services/TaigaService.swift in Sources */, - 5A431653DA454AE88ED73FFD /* Core/Git/Stash.swift in Sources */, - 23CF2BC056564115AC922309 /* Core/Git/Remote.swift in Sources */, - 9DB2758C88EE487DBFB9906B /* Core/Git/Branch.swift in Sources */, - C8E01AA078734F7686AD1DB8 /* Core/Git/Commit.swift in Sources */, - AC9431922EE97A3700A59026 /* SyntaxHighlighter.swift in Sources */, - B288434E27474BCE8B605D16 /* Core/Git/Repository.swift in Sources */, - 47A04D733A15416C9417CECA /* Core/Git/Worktree.swift in Sources */, - 93B29E6BD2524365845BFE55 /* Core/Git/GitEngine.swift in Sources */, - REPOCTX01B526F46E3958E34 /* Core/Git/RepositoryContext.swift in Sources */, - PATCHMAN01B526F46E3958E34 /* Core/Git/PatchManipulator.swift in Sources */, - A44D05C9CC5F4468B8898071 /* Core/Git/Tag.swift in Sources */, - B22085A223F142A680B2B116 /* App/ContentView.swift in Sources */, - 3410F14BD12B49D28665E2A3 /* Features/Settings/SettingsView.swift in Sources */, - C539555536ED4764ACF01929 /* Features/Settings/SubscriptionView.swift in Sources */, - 22156E10FB604F4E87EA5C9D /* Features/Staging/StagingAreaView.swift in Sources */, - B3A46B7AB4C14FE7ABB248DE /* Features/CommitGraph/CommitGraphView.swift in Sources */, - AC9431A62EE97D8000A59026 /* NotificationManager.swift in Sources */, - 194BFB877B0C483691B960B9 /* Features/Taiga/TaigaTicketsPanel.swift in Sources */, - 681023EDB4F3424E8C2A5752 /* Features/CherryPick/CherryPickView.swift in Sources */, - B988102E6AE44D00BD7465C4 /* Features/Terminal/TerminalView.swift in Sources */, - 0F1E7E1C27EB47F29936A82C /* Features/Diff/DiffView.swift in Sources */, - AC9431A02EE97C8400A59026 /* SearchView.swift in Sources */, - LWDIFF01B526F46E3958E34A /* GitMac/Features/Diff/LightweightDiffView.swift in Sources */, - AC94318A2EE9791900A59026 /* InteractiveRebaseView.swift in Sources */, - MDVIEW01B526F46E3958E34A /* GitMac/Features/Markdown/MarkdownView.swift in Sources */, - MERMAID1B526F46E3958E34A /* GitMac/Features/Markdown/MermaidDiagramView.swift in Sources */, - FLVIEW01B526F46E3958E34A /* GitMac/Features/FileViewer/FileContentView.swift in Sources */, - BF29CA1FCD714F51A1F45AB0 /* Features/GitFlow/GitFlowManager.swift in Sources */, - AD16C2E522DD4E7A9F2DA2E6 /* Features/Tags/TagListView.swift in Sources */, - 8E210720DA1047ECA734C786 /* Features/Launchpad/LaunchpadView.swift in Sources */, - 293C2B8DBF0A4C39A63D607E /* Features/Remotes/RemoteListView.swift in Sources */, - 5F3CE842686C4E37811983FA /* Features/Stash/StashListView.swift in Sources */, - AC94318C2EE9795800A59026 /* CommandPalette.swift in Sources */, - AC94318E2EE979A600A59026 /* FuzzyFileFinder.swift in Sources */, - AC94319E2EE97C3B00A59026 /* MinimapView.swift in Sources */, - 1BCDD11EE839484DB0C0BA9F /* Features/Worktrees/WorktreeListView.swift in Sources */, - 4B6E9C051D7A4D02A466FE4E /* Features/History/HistoryView.swift in Sources */, - AC9431A82EE97DB400A59026 /* ExternalToolsManager.swift in Sources */, - 2DE7FB809DE64F96916D75A1 /* Features/Branches/BranchListView.swift in Sources */, - 0D3D055176FF4E77AF97C3F9 /* Features/PullRequests/PRListView.swift in Sources */, - 2FE4F60BF0FD4078AFA3F8BB /* Features/Issues/IssueListView.swift in Sources */, - C3D6450D4DF146A0A1893725 /* Features/MergeConflict/ConflictResolverView.swift in Sources */, - PLNR001B526F46E3958E34A3 /* Features/Planner/PlannerTasksPanel.swift in Sources */, - LNRSVC01B526F46E3958E34A /* Core/Services/LinearService.swift in Sources */, - JIRASVC1B526F46E3958E34A /* Core/Services/JiraService.swift in Sources */, - NOTNSVC1B526F46E3958E34A /* Core/Services/NotionService.swift in Sources */, - LNRPNL01B526F46E3958E34A /* Features/Linear/LinearPanel.swift in Sources */, - JIRAPNL1B526F46E3958E34A /* Features/Jira/JiraPanel.swift in Sources */, - AC9431842EE9786B00A59026 /* ResetView.swift in Sources */, - NOTNPNL1B526F46E3958E34A /* Features/Notion/NotionPanel.swift in Sources */, - AC9431C02EE99A4800A59026 /* RemoteOperationTracker.swift in Sources */, - ACC600512F024855005DC34D /* DSVirtualizedList.swift in Sources */, - ACC600522F024855005DC34D /* DSPanel.swift in Sources */, - ACC600532F024855005DC34D /* DSLoginPrompt.swift in Sources */, - ACC600542F024855005DC34D /* DSResizablePanel.swift in Sources */, - ACC600552F024855005DC34D /* DSIntegrationPanel.swift in Sources */, - ACC600562F024855005DC34D /* DSInfiniteList.swift in Sources */, - ACC600572F024855005DC34D /* DSTabContainer.swift in Sources */, - ACC600582F024855005DC34D /* DSSettingsSheet.swift in Sources */, - ACC600592F024855005DC34D /* DSSheet.swift in Sources */, - ACC6005A2F024855005DC34D /* DSTabPanel.swift in Sources */, - ACC6005B2F024855005DC34D /* DSDraggableList.swift in Sources */, - ACC6005C2F024855005DC34D /* DSGroupedList.swift in Sources */, - ACC6005D2F024855005DC34D /* DSCollapsiblePanel.swift in Sources */, - WKFLW001B526F46E3958E34A /* WorkflowsView.swift in Sources */, - AWSCB001B526F46E3958E34A /* AWSCodeBuildService.swift in Sources */, - AVTRSVC1B526F46E3958E34A /* Core/Services/AvatarService.swift in Sources */, - AC9431942EE97A6D00A59026 /* RemoteManagementView.swift in Sources */, - CTXMNU01B526F46E3958E34A /* UI/Components/ContextMenus.swift in Sources */, - GKTHEME1B526F46E3958E34A /* UI/Components/AppTheme.swift in Sources */, - AC9431882EE978E500A59026 /* ReflogView.swift in Sources */, - LDBTN001B526F46E3958E34A /* UI/Components/LoadingButton.swift in Sources */, - KBSHRT01B526F46E3958E34A /* UI/Components/KeyboardShortcuts.swift in Sources */, - UNIFCTX001B526F46E3958E3 /* GitMac/UI/Components/UnifiedFileContextMenu.swift in Sources */, - D3881EDC974B4F1B953A71DF /* GitMac/GitOperationHandler.swift in Sources */, - C0FCA2D59D0B4674801C30B7 /* GitMac/UI/Utilities/ModalCoordinator.swift in Sources */, - 33E17B57FA9D4CA1B3B708A3 /* GitMac/Core/Models/GitHook.swift in Sources */, - 608D9FA09DC9438CB9AEC4F8 /* GitMac/Core/Services/GitHooksService.swift in Sources */, - DCA2305BB8A842369E2DFDE0 /* GitMac/Features/GitHooks/GitHooksView.swift in Sources */, - 65C6D7B1D3BC4C46804FBAC2 /* GitMac/Core/Models/GitSubmodule.swift in Sources */, - CF2B788DBC9C46B8AD5689DB /* GitMac/Core/Services/GitSubmoduleService.swift in Sources */, - 7DDF3B6AB1CD4A298AC023EE /* GitMac/Features/Submodules/SubmoduleView.swift in Sources */, - 10149A8AA816427784F3917E /* GitMac/Core/Services/Specialized/BranchService.swift in Sources */, - 0F6D0B17E4F94686B4D3581E /* GitMac/Core/Services/Specialized/StagingService.swift in Sources */, - DB71F6B7480346E2A13CDA2D /* GitMac/Core/Services/Specialized/CommitService.swift in Sources */, - E750BCECFCF5443488BB893A /* GitMac/Core/Services/Specialized/RemoteService.swift in Sources */, - 8C670A9D38474274A04AFFD8 /* GitMac/Core/Services/Specialized/StashService.swift in Sources */, - 0B110979D687480F9568261C /* GitMac/Core/Services/Specialized/TagService.swift in Sources */, - F81A394FC5284A539A11879C /* GitMac/Core/Services/Specialized/MergeService.swift in Sources */, - 071E6F3C86BA418CBAAABC10 /* GitMac/Core/Services/Specialized/DiffService.swift in Sources */, - FF97BDC528EB4762A9D35B04 /* GitMac/Features/Diff/Renderers/BinaryFileRenderers.swift in Sources */, - F446CD9EB8254FDDBC44396D /* GitMac/Features/Diff/Renderers/DiffLineContextMenu.swift in Sources */, - 3DF2C65DA1D046C6A657B6F5 /* GitMac/Features/Diff/Renderers/DiffLineRenderers.swift in Sources */, - 6377E846CB2F4BA2B9E7E454 /* GitMac/Features/Diff/Renderers/DiffMinimap.swift in Sources */, - 128A13B3887B4109A5059EF4 /* GitMac/Features/Diff/Renderers/DiffParser.swift in Sources */, - AEFDAA89AAEB49EA93E09E1A /* GitMac/Features/Diff/Renderers/DiffScrollViews.swift in Sources */, - 3B202A05F8024888BF8386BE /* GitMac/Features/Diff/Renderers/DiffSyntaxHighlighter.swift in Sources */, - D05B742B6423469E806FD3B1 /* GitMac/Features/Diff/Renderers/LargeFileDiffRenderer.swift in Sources */, - 3883439F563C40B485F460F5 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedViewModel.swift in Sources */, - 5CC69E076E264870AA0C7F38 /* GitMac/Features/Terminal/Enhanced/AICommandSuggestions.swift in Sources */, - DED68D219BE1413499206E43 /* GitMac/Features/Terminal/Enhanced/TerminalCommandPalette.swift in Sources */, - 693A5D442AF846DD93792B19 /* GitMac/Features/Terminal/Enhanced/GhosttyEnhancedTerminalView.swift in Sources */, - C748B34DF85B4250B12ADABE /* GitMac/Features/Terminal/Enhanced/TerminalAIService.swift in Sources */, - C8DF98EC71AC165EDBF9F79E /* BottomPanelManager.swift in Sources */, - 7B78FA5E545C1AA746771F1A /* BottomPanelTab.swift in Sources */, - 2B9950663DDB76A17AD4BFA9 /* BottomPanelType.swift in Sources */, - 14251E68A10431607FD81BED /* BottomPanelResizer.swift in Sources */, - 7C513261CA64EE5CB89C0DD8 /* UnifiedBottomPanel.swift in Sources */, - AADA43DBCE496DD142441A23 /* BottomPanelContent.swift in Sources */, - 8027AA858E2013D7F57DE99A /* BottomPanelTabBar.swift in Sources */, - 330ACD6D6FB94B468ECA4FA0 /* GitMac/UI/Components/Common/UniversalResizer.swift in Sources */, - EE253019E62CF52CDFFEC69A /* DesignTokens.swift in Sources */, - 606A08D80271F6F8F2CE3A15 /* GitMac/UI/Components/ComponentCatalog.swift in Sources */, - ED061CB6EEEE5AF4D74E749D /* GitMac/Core/PluginSystem/IntegrationPlugin.swift in Sources */, - F706F47EC2E998C18214DBD8 /* GitMac/Core/PluginSystem/IntegrationViewModel.swift in Sources */, - 3780CFA63E8FBAB8DB262C60 /* GitMac/Core/PluginSystem/PluginRegistry.swift in Sources */, - B792010810824E7B2933630E /* GitMac/Features/Jira/JiraViewModel.swift in Sources */, - 5593E25F2327E846A0FEEDF2 /* Features/Taiga/TaigaViewModel.swift in Sources */, - 025153B6DF9247DD577BB90D /* GitMac/UI/Components/Atoms/Buttons/DSTabButton.swift in Sources */, - 4678F616E4B627558CE1D996 /* GitMac/UI/Components/Atoms/Buttons/DSButton.swift in Sources */, - 1E0AB440EFC701900B322297 /* GitMac/UI/Components/Atoms/Buttons/DSToolbarButton.swift in Sources */, - A56BA8CC4CB25CC4F77D5B20 /* GitMac/UI/Components/Atoms/Buttons/DSIconButton.swift in Sources */, - AA12670EFE8FCC58340FC75E /* GitMac/UI/Components/Atoms/Buttons/DSLinkButton.swift in Sources */, - 011EEBA959D2683E15C23AE0 /* GitMac/UI/Components/Atoms/Buttons/DSCloseButton.swift in Sources */, - D5A8566ED7F1576C0C1F2CF3 /* GitMac/UI/Components/Atoms/Feedback/DSTooltip.swift in Sources */, - E3F494D2DF37C541988BE1FD /* GitMac/UI/Components/Atoms/Feedback/DSSpinner.swift in Sources */, - 6700C7C42963864A6E288032 /* GitMac/UI/Components/Atoms/Feedback/DSProgressBar.swift in Sources */, - 18133BDB02AD310F3DCD933A /* GitMac/UI/Components/Atoms/Feedback/DSSkeletonBox.swift in Sources */, - 9254A96CA98A61C1EC0435B5 /* GitMac/UI/Components/Atoms/Display/DSText.swift in Sources */, - 90E17B673646FBB941792FEB /* GitMac/UI/Components/Atoms/Display/DSAvatar.swift in Sources */, - 870022C6A156528820E52A04 /* GitMac/UI/Components/Atoms/Display/DSBadge.swift in Sources */, - 91E03468A5173B0AEC039B40 /* GitMac/UI/Components/Atoms/Display/DSDivider.swift in Sources */, - 1E8CDFA5E335FBCBEAA61B45 /* GitMac/UI/Components/Atoms/Display/DSIcon.swift in Sources */, - C539F53A651A0250BCAA9015 /* GitMac/UI/Components/Cards/CardStyle.swift in Sources */, - E03E61A15F828ADE3955FC07 /* GitMac/UI/Components/Atoms/Display/DSSpacer.swift in Sources */, - C2B7667B558CE8196CE0A378 /* GitMac/UI/Components/Molecules/Forms/DSFilterMenu.swift in Sources */, - A6F51E6777487026188DD38D /* GitMac/UI/Components/Molecules/Forms/DSLabeledField.swift in Sources */, - FCE7733F5EE79F6938CF6652 /* GitMac/UI/Components/Molecules/Forms/DSSearchBar.swift in Sources */, - 411EE8E24820B19E458C98EA /* GitMac/UI/Components/Molecules/Forms/DSActionBar.swift in Sources */, - 44D2EEB68993CA4714674E6A /* GitMac/UI/Components/Molecules/Lists/DSDraggableItem.swift in Sources */, - 05BD9B5EFCE2EF13BE0D8785 /* GitMac/UI/Components/Molecules/Lists/DSExpandableItem.swift in Sources */, - BD25E53A92994727308E78E1 /* GitMac/UI/Components/Molecules/Lists/DSListItem.swift in Sources */, - B4DA26C56859D2E184D7E860 /* GitMac/UI/Components/Molecules/Lists/DSDropZone.swift in Sources */, - A297B77215ADAA3F996C4CC2 /* GitMac/UI/Components/Molecules/Display/DSStatusBadge.swift in Sources */, - 2E4FFFDFAC66F10402025F5B /* GitMac/UI/Components/Molecules/Display/DSLoadingState.swift in Sources */, - ED6FCEB928FF0E3EE8308D26 /* GitMac/UI/Components/Molecules/Display/DSHeader.swift in Sources */, - 13B6C91AEA8E670BB2357C82 /* GitMac/UI/Components/Molecules/Display/DSErrorState.swift in Sources */, - 2B20A8BB42C6596D5F938307 /* GitMac/UI/Components/Molecules/Display/DSEmptyState.swift in Sources */, - BD7718FD3031E989055C841C /* GitMac/Features/Notion/NotionPlugin.swift in Sources */, - C6F50D7463C0809C142616EE /* GitMac/Features/Linear/LinearPlugin.swift in Sources */, - 6A93112D00D09D85BC817378 /* GitMac/Features/Jira/JiraPlugin.swift in Sources */, - C64FAAF81040CB6F41F12CFD /* Features/Taiga/TaigaPlugin.swift in Sources */, - AE73EFC4B423FEF2DF409575 /* GitMac/Features/Planner/PlannerPlugin.swift in Sources */, - CE6DC227F90A9E0F084729FC /* GitMac/UI/Components/Atoms/Inputs/DSTextEditor.swift in Sources */, - 39F2E859A621E04E59338150 /* GitMac/UI/Components/Atoms/Inputs/DSSecureField.swift in Sources */, - 7F639A2DCE90F380654018C2 /* GitMac/UI/Components/Atoms/Inputs/DSSearchField.swift in Sources */, - 1AC1766730959255403C4EA2 /* GitMac/UI/Components/Atoms/Inputs/DSToggle.swift in Sources */, - 692C9ED8C703198612A88D80 /* GitMac/UI/Components/Atoms/Inputs/DSTextField.swift in Sources */, - B38FE133F96B4801B072C31A /* GitMac/UI/Components/Atoms/Inputs/DSPicker.swift in Sources */, - E5FD5D5C1CC70A44623C5E5B /* TaigaLoginPrompt.swift in Sources */, - 854B11941BF245638BA20FDB /* TaigaSharedViews.swift in Sources */, - F7B1EE9C38ADA4FC61EEBD64 /* TaigaUserStoriesView.swift in Sources */, - E63C04837ABDB169AC668FA7 /* TaigaTasksView.swift in Sources */, - 2A3290BA1E9AA18CED1A3817 /* TaigaIssuesView.swift in Sources */, - 292240020C0CCE4C28679261 /* TaigaEpicsView.swift in Sources */, - AE0A7C8E9DD312717EFA13E4 /* TaigaContentView.swift in Sources */, + 606A08D80271F6F8F2CE3A15 /* ComponentCatalog.swift in Sources */, + ED061CB6EEEE5AF4D74E749D /* IntegrationPlugin.swift in Sources */, + F706F47EC2E998C18214DBD8 /* IntegrationViewModel.swift in Sources */, + 3780CFA63E8FBAB8DB262C60 /* PluginRegistry.swift in Sources */, + B792010810824E7B2933630E /* JiraViewModel.swift in Sources */, + 025153B6DF9247DD577BB90D /* DSTabButton.swift in Sources */, + 4678F616E4B627558CE1D996 /* DSButton.swift in Sources */, + 1E0AB440EFC701900B322297 /* DSToolbarButton.swift in Sources */, + A56BA8CC4CB25CC4F77D5B20 /* DSIconButton.swift in Sources */, + AA12670EFE8FCC58340FC75E /* DSLinkButton.swift in Sources */, + 011EEBA959D2683E15C23AE0 /* DSCloseButton.swift in Sources */, + D5A8566ED7F1576C0C1F2CF3 /* DSTooltip.swift in Sources */, + E3F494D2DF37C541988BE1FD /* DSSpinner.swift in Sources */, + 6700C7C42963864A6E288032 /* DSProgressBar.swift in Sources */, + 18133BDB02AD310F3DCD933A /* DSSkeletonBox.swift in Sources */, + 9254A96CA98A61C1EC0435B5 /* DSText.swift in Sources */, + 90E17B673646FBB941792FEB /* DSAvatar.swift in Sources */, + 870022C6A156528820E52A04 /* DSBadge.swift in Sources */, + 91E03468A5173B0AEC039B40 /* DSDivider.swift in Sources */, + 1E8CDFA5E335FBCBEAA61B45 /* DSIcon.swift in Sources */, + C539F53A651A0250BCAA9015 /* CardStyle.swift in Sources */, + E03E61A15F828ADE3955FC07 /* DSSpacer.swift in Sources */, + C2B7667B558CE8196CE0A378 /* DSFilterMenu.swift in Sources */, + A6F51E6777487026188DD38D /* DSLabeledField.swift in Sources */, + FCE7733F5EE79F6938CF6652 /* DSSearchBar.swift in Sources */, + 411EE8E24820B19E458C98EA /* DSActionBar.swift in Sources */, + 44D2EEB68993CA4714674E6A /* DSDraggableItem.swift in Sources */, + 05BD9B5EFCE2EF13BE0D8785 /* DSExpandableItem.swift in Sources */, + BD25E53A92994727308E78E1 /* DSListItem.swift in Sources */, + B4DA26C56859D2E184D7E860 /* DSDropZone.swift in Sources */, + A297B77215ADAA3F996C4CC2 /* DSStatusBadge.swift in Sources */, + 2E4FFFDFAC66F10402025F5B /* DSLoadingState.swift in Sources */, + ED6FCEB928FF0E3EE8308D26 /* DSHeader.swift in Sources */, + 13B6C91AEA8E670BB2357C82 /* DSErrorState.swift in Sources */, + 2B20A8BB42C6596D5F938307 /* DSEmptyState.swift in Sources */, + BD7718FD3031E989055C841C /* NotionPlugin.swift in Sources */, + C6F50D7463C0809C142616EE /* LinearPlugin.swift in Sources */, + 6A93112D00D09D85BC817378 /* JiraPlugin.swift in Sources */, + AE73EFC4B423FEF2DF409575 /* PlannerPlugin.swift in Sources */, + CE6DC227F90A9E0F084729FC /* DSTextEditor.swift in Sources */, + 39F2E859A621E04E59338150 /* DSSecureField.swift in Sources */, + 7F639A2DCE90F380654018C2 /* DSSearchField.swift in Sources */, + 1AC1766730959255403C4EA2 /* DSToggle.swift in Sources */, + 692C9ED8C703198612A88D80 /* DSTextField.swift in Sources */, + B38FE133F96B4801B072C31A /* DSPicker.swift in Sources */, + 478A4BF99A071621F35DEE1B /* RepositoryActivityPanel.swift in Sources */, + 5F554587B84ECD2D958FF10F /* ContributionGraphView.swift in Sources */, + 3A5F4D9A80EE6CB6B627CD3C /* RepositoryActivityViewModel.swift in Sources */, + 0DB645D5AAE7FFC0E503241D /* AIServiceExtensions.swift in Sources */, + 173F4FE19F91D1E4447F9461 /* PromptTemplateManager.swift in Sources */, + DD8F46FE884EC63E601B728D /* CloudSyncService.swift in Sources */, + 61CF478CA5D5AE185242221E /* PresenceService.swift in Sources */, + 9A8647BAACE5524A3A8C1A9D /* CodeReviewService.swift in Sources */, + 53C18397B4294B5D3105BA4B /* TerminalBlocksView.swift in Sources */, + 573F3CCC3D54900A7F77DE24 /* TerminalSessionSharingService.swift in Sources */, + A6CACB9F9898072FF60B6D1A /* TerminalWorkflowsView.swift in Sources */, + E40DFD849A489D0953DE0899 /* SecretRedactionService.swift in Sources */, + C60BC0B812343301A989BEFA /* TerminalCompletions.swift in Sources */, + 6160CBA19ACF48482550B83E /* TerminalContext.swift in Sources */, + D97779F54B14F2FB461BDA40 /* TerminalSuggestionEngine.swift in Sources */, + 735FE47AEA03BFB17CF41C85 /* TerminalInputBar.swift in Sources */, + 25315F328208FE548BB7046E /* TerminalSharedTypes.swift in Sources */, + B051313AF74F9BA791E3F23A /* CloneRepositorySheet.swift in Sources */, + 7D526EF990849BF32B8C1E8D /* CreateBranchSheet.swift in Sources */, + 364FDC51036CD19A228EC00B /* MergeBranchSheet.swift in Sources */, + 70D84221BBE81104974AFA87 /* InitRepositorySheet.swift in Sources */, + 97460DF30BEB09DEAE39A077 /* GroupSheets.swift in Sources */, + 8EA493649E4C870552462849 /* VisualEffectBlur.swift in Sources */, + FB65BBC8B7913D48B0EA2D94 /* ModalCoordinator.swift in Sources */, + 44E2ACDB3765475EF99F57BB /* XcodeToolbarButton.swift in Sources */, + DBD912183194A4E7C42C2144 /* XcodeToolbarDivider.swift in Sources */, + 86664E54C7DD00CEA25CBF5E /* XcodeSidebarNavigator.swift in Sources */, + 639E5318F12FE7E443353643 /* XcodeBottomBarTab.swift in Sources */, + F8F5B0B54798D38764455511 /* KeyboardShortcuts.swift in Sources */, + 974194EE8CE740424C469D1C /* CommitMessageArea.swift in Sources */, + E5C758304DB450B21CBD3A04 /* GenericFileTreeView.swift in Sources */, + FC63DEDA367E365A790DEFF2 /* TreeExpansionState.swift in Sources */, + BA290F88C2CE39C8A6A22083 /* FileTreeProtocols.swift in Sources */, + 5B3D39275E9892058DC0189A /* PanelHeader.swift in Sources */, + B151DC00FFED37EF971E253F /* FileListSection.swift in Sources */, + 085F6910CF88FEBE9B2FA7E7 /* Separator.swift in Sources */, + 673AB2F66093A910DF89E1A8 /* SectionHeader.swift in Sources */, + DCAA339817D053DA1AC4ABCB /* RepositoryTabsView.swift in Sources */, + A2EA8C73616100D678A318F3 /* AITerminalInputView.swift in Sources */, + D49227F9CCA29A4F6DC6129E /* DiffToolbar.swift in Sources */, + 67D7412561CBCAAC9B2A530D /* DiffStatsView.swift in Sources */, + DF7B34A27B02DB66E81688C8 /* DiffHunkView.swift in Sources */, + 4D31E834EEDB95BF29CAF088 /* DiffLineView.swift in Sources */, + 80A6CA8F3D9975219B5B3E57 /* BranchRow.swift in Sources */, + 90C08EC91988E33831C31240 /* IssueRow.swift in Sources */, + A1DB9080DDF01E04B7651C9B /* BaseRow.swift in Sources */, + 1B17CEEE0F5A96D79AE531C6 /* ListRow.swift in Sources */, + 89E657B1F1DA798909573F50 /* RowProtocols.swift in Sources */, + 0E632C69DE3C7FEB51B55B7C /* FileRow.swift in Sources */, + D04B3915422AA379ED9AAA84 /* AnimationExtensions.swift in Sources */, + 77681E64D2ECD6FC80EBF73B /* ViewModifiers.swift in Sources */, + 0ED6500CDF7088D37F13E92E /* StateManagement.swift in Sources */, + 258FB68B66F09FCD945C731B /* GestureHandlers.swift in Sources */, + 2063193ABD2D00DB87C13D7E /* LayoutConstants.swift in Sources */, + C1F9A554C25B4FC9A1492EF9 /* UniversalResizer.swift in Sources */, + 4685EC657E869B0ADA90A2A2 /* FileTypeIcon.swift in Sources */, + EB17F46A1960BCDE6F08CBE7 /* StatusIcon.swift in Sources */, + 1BB7E872B52459C8C2FC36AF /* AppTheme.swift in Sources */, + 35F254E4B0B494B8895E8871 /* UnifiedFileContextMenu.swift in Sources */, + 5DBD7F93391740939E1C91BE /* DSGenericIntegrationPanel+Examples.swift in Sources */, + 58F5FDA448ABFBCB84E7FAAB /* ContextMenus.swift in Sources */, + 9D91E95B27E511668856E784 /* DesignTokens.swift in Sources */, + 90439F29474CA28547F86A1D /* DSInfiniteList.swift in Sources */, + F6DABB08B5D272FFC22358F6 /* DSVirtualizedList.swift in Sources */, + 257E6E17F55F28953F58EC42 /* DSGroupedList.swift in Sources */, + 6073CD6F568BB400533F128C /* DSDraggableList.swift in Sources */, + B9101E55494C607B5E900A74 /* DSLoginPrompt.swift in Sources */, + 2BE41E0ECB5DF6AC65E8BC66 /* DSIntegrationPanel.swift in Sources */, + 1E92E3802AEF4561C15A15E8 /* DSSettingsSheet.swift in Sources */, + 679298094D077FFCCC84463F /* DSTabPanel.swift in Sources */, + ADE029EDEB898CE737508C81 /* DSResizablePanel.swift in Sources */, + 5DE65295FCD9CBF529C7138E /* DSCollapsiblePanel.swift in Sources */, + D4C8907702C129E8CBFB0870 /* DSPanel.swift in Sources */, + D6EBF5672FBF37280D376719 /* DSTabContainer.swift in Sources */, + 8A02982DED8C15D4B26420F2 /* DSSheet.swift in Sources */, + AA78D21033726D44C941E64B /* WorkflowsView.swift in Sources */, + 9E6E253BF07A224FF60AA2F0 /* MinimapView.swift in Sources */, + 1D63613571170159A5704573 /* ExternalToolsManager.swift in Sources */, + CE80D1870754D5739A0223C0 /* RemoteOperationTracker.swift in Sources */, + 9DF10EEEFE028CF8E0725CFE /* SearchView.swift in Sources */, + 602D67EF018C276123629D01 /* StoreManager.swift in Sources */, + 2D96548491BE3DFD9152E3F5 /* CacheWithTTL.swift in Sources */, + 5C95292701A0C7557F4EAB33 /* KeychainManager.swift in Sources */, + D5AEDCE8304A70941A8BC48D /* ShellExecutor.swift in Sources */, + E1424667B9BA6555CD40DEFA /* FileWatcher.swift in Sources */, + F2BC2A1403166453E40C25EE /* GitHook.swift in Sources */, + 338609A9890C174FAC467CA4 /* GitSubmodule.swift in Sources */, + 16FE878B5150049FCF623EDD /* GitHooksService.swift in Sources */, + D37C7945444AF7F89EE1F35A /* GitService.swift in Sources */, + BRANCHPR0001BUILD000000001 /* BranchPRTracker.swift in Sources */, + GHSYNCMG0001BUILD000000001 /* GitHubSyncManager.swift in Sources */, + E31D0AE2FBC3898B195BDCC4 /* AIService.swift in Sources */, + F33F3ED30023FB4F63F59B08 /* GitHubService.swift in Sources */, + 42EE92CC8919B6BC223491BA /* WorkspaceSettings.swift in Sources */, + 99F126807BFB55B16AE5D2EA /* MicrosoftPlannerService.swift in Sources */, + E2D60CB4DB0E2E428B70B27B /* GitSubmoduleService.swift in Sources */, + 06AB4CEC3FDEFE8695F56007 /* DiffService.swift in Sources */, + 8689D9483F0CB8EC4D860218 /* TagService.swift in Sources */, + 75B2FA8BEDC9389FE9017B59 /* RemoteService.swift in Sources */, + ECECD1789252590D9C40340C /* StashService.swift in Sources */, + 42F89A759EAD6CDD4CD5FBFA /* BranchService.swift in Sources */, + F8DA65C2146769577BAFC611 /* CommitService.swift in Sources */, + 1737047D3D397E490A04F82E /* StagingService.swift in Sources */, + 75769434F995F881C4664D25 /* MergeService.swift in Sources */, + B79DB79AA761D5CD94662D14 /* GitHubOAuth.swift in Sources */, + 4C90D13F0F251AEBC05D5DA5 /* LinearService.swift in Sources */, + 4AF3FA66E96333FEA7AB2990 /* JiraService.swift in Sources */, + 2CFAE83A7F1BA59EA2D65725 /* NotionService.swift in Sources */, + 9EFA5ABBF7FA4E9BC0C76AF5 /* UndoManager.swift in Sources */, + D8A72741F1C126B02D622F3F /* AvatarService.swift in Sources */, + 63119CBB952238FF689EED9D /* MicrosoftOAuth.swift in Sources */, + 188CCF984171708DBB39331B /* TaigaService.swift in Sources */, + 0179E319032D3C6E6CA403D8 /* Stash.swift in Sources */, + 8F65EB1EFFEAEF68E338A7E1 /* Remote.swift in Sources */, + 6FA8EF328900860116035D76 /* Branch.swift in Sources */, + 01C51A3BA0BBD95C872BC730 /* PatchManipulator.swift in Sources */, + 558F5ABD33291FB3CBCE25B9 /* Commit.swift in Sources */, + 2A8F81DBA7807E6843F37DA2 /* Repository.swift in Sources */, + 3890BF19DD65B1F83E11CFF4 /* Worktree.swift in Sources */, + 448754C2A8C90839BF1B7D46 /* GitEngine.swift in Sources */, + 4F40DF182254519294F3343B /* RepositoryContext.swift in Sources */, + 2C7B781FB9453730AF5CB941 /* Tag.swift in Sources */, + 03E6239ED34114F755A0CD88 /* GitMacApp.swift in Sources */, + 51AA9F2DA167C08E48F61A85 /* SidebarSection.swift in Sources */, + FCCC056A77275438CF6C3030 /* OperationProgressOverlay.swift in Sources */, + 11729BCEFFC83646B0F8568C /* ActionButton.swift in Sources */, + 857B3746AFFBC72DE1D99087 /* ContentView.swift in Sources */, + 8C7886909222951738050C96 /* FuzzyFileFinder.swift in Sources */, + B148D8FC4B491F777493986A /* GitHubIntegration.swift in Sources */, + D36FC421805A89519D5C8731 /* ResetView.swift in Sources */, + BF3725FB16445B45FFFD566A /* NotificationManager.swift in Sources */, + C26E99D3F81D4583828E3A78 /* InsightsView.swift in Sources */, + AC03C07BC65CA3253601A134 /* AISettingsTab.swift in Sources */, + 828BB25AC54F36715A313178 /* GeneralSettingsTab.swift in Sources */, + E5EDE508B8D2210A1289A26D /* GitSettingsTab.swift in Sources */, + D79F7A285081A584112C5EBC /* IntegrationsSettingsTab.swift in Sources */, + 45EF972E2923EAED6BB5CBD3 /* SubscriptionSettingsTab.swift in Sources */, + FAFA8685F672ACC48734BA94 /* KeyboardShortcutsTab.swift in Sources */, + AE682F609BCCF88820364E71 /* WorkspaceSettingsTab.swift in Sources */, + 3DE1FA5CCF32ABAFCD969FE3 /* AccountsSettingsTab.swift in Sources */, + 79D272B536B0A42597F2EA4E /* SettingsView.swift in Sources */, + 59FF295859B774567F77C602 /* SettingsSection.swift in Sources */, + B2EBAF7C10A2145058E5645D /* ThemeButton.swift in Sources */, + CC7FE5482277C66A289B982B /* PlannerSettingsViews.swift in Sources */, + E9C01B6AE799F709F67A6549 /* NotionSettingsViews.swift in Sources */, + A71EBC4E0777305FFE7007F3 /* TaigaSettingsViews.swift in Sources */, + 5261C6C6D3260AE42F619C4F /* AWSSettingsViews.swift in Sources */, + F55D1ED79ADBDA6C10CDE083 /* JiraSettingsViews.swift in Sources */, + E1677637DDDE428D358C7D26 /* LinearSettingsViews.swift in Sources */, + FA62769E0E6F531ED989B5B2 /* SubscriptionView.swift in Sources */, + AEDE428F614861F30CC4B49B /* StagingAreaView.swift in Sources */, + 45F557B8C61B3336E38C6478 /* CloudPatchService.swift in Sources */, + 52751A8344E6AFC7E2474C33 /* CommitGraphView.swift in Sources */, + E6C11E094C850F7D0DD9AE3E /* SearchSyntaxParser.swift in Sources */, + EEC5FD52708C17DA03581BAC /* SearchQuery.swift in Sources */, + 3F3DE8BAE7DC7CDD55DA2C9F /* FileChangesIndicator.swift in Sources */, + 5020173DF62A32D51CA10D4D /* GraphMinimapView.swift in Sources */, + 76A3D8DE8385AE1A4832551A /* RepositorySelectorButton.swift in Sources */, + 1636BF6E95E6083C096D2BF5 /* BranchPanelView.swift in Sources */, + E2DC6F1F800CEDEAB6143D2C /* PushFetchButtons.swift in Sources */, + 45842BEA4117D259C3B46782 /* BranchSelectorButton.swift in Sources */, + 258ACA9CDDED686CD5E1BAB8 /* CommitDetailPanel.swift in Sources */, + 940BF6E41305DF279D17FB6E /* GitHubPRService.swift in Sources */, + B4C18233BCE290AE127401B6 /* TaigaContentView.swift in Sources */, + E6F64B372727112EF636DBCE /* TaigaViewModel.swift in Sources */, + D586D60CC063E011026505D0 /* TaigaTicketsPanel.swift in Sources */, + EEB6874705B3088EC71F6FA3 /* TaigaPlugin.swift in Sources */, + 8FADAF249BC45C769FA7E331 /* TaigaSettingsContent.swift in Sources */, + 9E8EF6F08AF38497C5EC3667 /* TaigaSharedViews.swift in Sources */, + F82A9AA3F09807BCDA320CCA /* TaigaLoginPrompt.swift in Sources */, + 5491571A8A582CF8C0592963 /* CherryPickView.swift in Sources */, + C4486A6EFFA39D75DB4DFF96 /* MermaidDiagramView.swift in Sources */, + CE7F5C391B4D9B0CA9AACF35 /* MarkdownView.swift in Sources */, + BCC6C6707CC684D2365EBFA4 /* PlannerTasksPanel.swift in Sources */, + E06D2471579344441C31C6B5 /* BisectView.swift in Sources */, + D31155F217037D5B7777EED0 /* LinearContentView.swift in Sources */, + 4FD15B865E39740018AD2FCB /* BottomPanelTab.swift in Sources */, + 7A5D3444D05FD844A956FEA6 /* BottomPanelType.swift in Sources */, + 9C5EF99076A6010448D13107 /* BottomPanelResizer.swift in Sources */, + 42620233A90137B2BEDEF688 /* UnifiedBottomPanel.swift in Sources */, + 987ABC776698EB5A02DF8290 /* BottomPanelContent.swift in Sources */, + A95C50B49D734ADB08767CCF /* BottomPanelTabBar.swift in Sources */, + E8595C1C9E91E9A13CDA7F36 /* BottomPanelManager.swift in Sources */, + 3B0544E95DA36A53885E8E5F /* MinimalTerminalView.swift in Sources */, + 56D910506046104084FA7BD8 /* GhosttyTerminalView.swift in Sources */, + EAAA7140BCA69E1F76879A69 /* GhosttyDirect.swift in Sources */, + 9BD8A0EBCBE28FFE2BD90F3D /* GhosttyNativeView.swift in Sources */, + 81D264BCE0C9E288C789CCBA /* TerminalView.swift in Sources */, + 4A3F7A53E510D2BAF7381717 /* TerminalAIService.swift in Sources */, + 202918A372C3231F73C2E578 /* GhosttyEnhancedTerminalView.swift in Sources */, + B4343C3D6E06E1BF0EC0FF39 /* AICommandSuggestions.swift in Sources */, + E685415C8BAE832DF936D83C /* TerminalCommandPalette.swift in Sources */, + E4807BCD1C25C1167BB0680D /* GhosttyEnhancedViewModel.swift in Sources */, + 114B7FDF9FFDCCB629DEDB2F /* TerminalNLInputView.swift in Sources */, + 0DB14192B98FCE46D804E26B /* TerminalNLTranslationService.swift in Sources */, + 1A789183A1C3E75EEA931501 /* EmbeddedTerminalView.swift in Sources */, + 614DC1CBD6A3FD6402928F34 /* WarpAIInputBar.swift in Sources */, + 1810AA298FCF14BF6445D6AB /* EnhancedTerminalPanel.swift in Sources */, + C9A512A4DDA6A1AB2D103FD5 /* FileContentView.swift in Sources */, + 1C46F1BA5158A592D442F839 /* DiffParser.swift in Sources */, + 810530D672789FDE7A5CF901 /* DiffMinimap.swift in Sources */, + 671C7AA457D286A11FF7A783 /* DiffScrollViews.swift in Sources */, + 8AE7DDC47E09F14D001C3150 /* DiffLineContextMenu.swift in Sources */, + 90A3ADAC5D4F7C21D32B1892 /* DiffSyntaxHighlighter.swift in Sources */, + 8D3421CE1DFB13B7B146E219 /* LargeFileDiffRenderer.swift in Sources */, + 7AEC49FDEE0A40FEADBF0A94 /* DiffLineRenderers.swift in Sources */, + 8F41AD98DF8C48DEAAE582FD /* BinaryFileRenderers.swift in Sources */, + BEEC4A2DB5D5582D8B492BA0 /* KaleidoscopeSplitDiffView.swift in Sources */, + 829F68FEF62B134675571C23 /* TiledDiffView.swift in Sources */, + DA9E7B526F5E3A719D2000E2 /* KaleidoscopeFileList.swift in Sources */, + 9378DD8648BED068B9C9095A /* WordLevelDiff.swift in Sources */, + 05C72084337EFE72DF6DAA39 /* DiffView.swift in Sources */, + 7D301ECE89E70C8DE39AB5C9 /* AlignedDiffView.swift in Sources */, + D8A8817DEE1581AC61A2A022 /* LightweightDiffView.swift in Sources */, + 63D4EBA68098EB78E6F6DEE1 /* EnhancedDiffToolbar.swift in Sources */, + 7DBC99128781A6527852A691 /* ConnectionRibbonsView.swift in Sources */, + 2EB329603B3404BF2CC6BE88 /* KaleidoscopeDiffView.swift in Sources */, + 0636C166410264DDE6B0E535 /* DiffSearchEngine.swift in Sources */, + F45B5B3A5D6D784B0781A392 /* DiffBreadcrumb.swift in Sources */, + 3855843F399E892582649A00 /* RepositoryHierarchicalNavigator.swift in Sources */, + 331DA536A6F439966A164BF0 /* GitFlowManager.swift in Sources */, + 8DA30082EFCCDBFB4E8E53A8 /* TagListView.swift in Sources */, + B18924C7746FDCA18B427115 /* LaunchpadView.swift in Sources */, + 2CE1AD591E7D6F365E28A827 /* RemoteListView.swift in Sources */, + B394734B9FD8178D35E52C48 /* JiraPanelGeneric.swift in Sources */, + 48B7FAF77FF920156B00E484 /* JiraSettingsContent.swift in Sources */, + CDBF875323FA9E0F69B1105C /* JiraLoginPrompt.swift in Sources */, + A70EEF59AC4DF6D59D4B4AF8 /* JiraContentView.swift in Sources */, + ECBC20DEE50CCD7452A1DCDC /* StashListView.swift in Sources */, + 56532F2779C5AF820DED35BC /* DeepLinkService.swift in Sources */, + 9550F522FC22CDDBDBE2B41B /* WorktreeListView.swift in Sources */, + 52E0C484B10963A516F2F82C /* SubmoduleView.swift in Sources */, + 2D4FBFF88394B793CAD45927 /* HistoryView.swift in Sources */, + C5F10040C80DB32837889119 /* GitHooksView.swift in Sources */, + 4D073D671268B1EFB50AA91A /* LFSManager.swift in Sources */, + 8C30BB592751F6A14B532893 /* BranchListView.swift in Sources */, + 142D69BCE5234CFD085F69CB /* PRListView.swift in Sources */, + F65BAC301B1CEF4E61CF6576 /* GitProfilesService.swift in Sources */, + BA3E522F8D441E07681B4F15 /* IssueListView.swift in Sources */, + BF4F585F81DBFC23F4BCB0BE /* ConflictResolverView.swift in Sources */, + E39B3EC735C63758C8855612 /* RepoGroupsService.swift in Sources */, + FE93CAC0A8120FDFAE04609A /* ConflictPreventionService.swift in Sources */, + 33C575986A3993FAB015C586 /* ConflictPreventionView.swift in Sources */, + F18E05B60D6AB67A1CFD22EC /* PullSheet.swift in Sources */, + CAC4427F5058B41A10CC7671 /* ThemeManager.swift in Sources */, + 8E93DE94727C388F49B38E0F /* ReflogView.swift in Sources */, + 50862CEED949B2C54AF16F56 /* AWSCodeBuildService.swift in Sources */, + B4F3A4510237C4B0D93B029C /* RemoteManagementView.swift in Sources */, + 77D0CF71978693C5CBA20BE7 /* KeyboardShortcutManager.swift in Sources */, + E2DE9809294499F69934ED13 /* SyntaxHighlighter.swift in Sources */, + 728028D683743DD8430D2F42 /* CommandPalette.swift in Sources */, + 0F1D5485A078C2EB220F3DD5 /* FileBrowserView.swift in Sources */, + 139271C1E6D2004870679E7A /* FileAnnotationView.swift in Sources */, + 9385A47FAD156F15D2C89669 /* InteractiveRebaseView.swift in Sources */, + F626C426A14A04C27F413C1D /* IntegrationHelpers.swift in Sources */, + B5D31659B0B71093C78ECFC1 /* RevertView.swift in Sources */, + E0705D7BF274FD091FA5C7D3 /* GitOperationHandler.swift in Sources */, + 2E651EE2B3DFFFDDB4EB1F69 /* FeatureManager.swift in Sources */, + 2B3E387360396E8F5E1ABC15 /* LicenseValidator.swift in Sources */, + BEB221F38DF2B23460199734 /* TaigaUserStoriesView.swift in Sources */, + C4687902260CEB17D47DFF91 /* TaigaEpicsView.swift in Sources */, + 81C2D571C7651F96E8C7B3A0 /* TaigaTasksView.swift in Sources */, + 541D92DD4EF266B8998B5006 /* TaigaIssuesView.swift in Sources */, + 5AF86D8476FF91B9121ECE76 /* AnalyticsDashboard.swift in Sources */, + F1A8C4C6FAF4A907FFAE77A7 /* AnalyticsViewModel.swift in Sources */, + 8616CCBFC792559AE7841F06 /* LayoutHelpers.swift in Sources */, + D80182AE40947A39CCE18AAB /* LinearPanel.swift in Sources */, + B21354D400079A50FEFC5070 /* NotionPanel.swift in Sources */, + F4B450C22FE1F972BDF36FA0 /* SplitDiffView.swift in Sources */, + 01E488829F7F4DA2C7EFE01C /* BranchComparisonView.swift in Sources */, + 2904549D2DD3D9E3FB00D7BB /* CommitFile.swift in Sources */, + F26FC2660FA73DFC56A653DC /* CommitDetailViewModel.swift in Sources */, + 565D064CC8F25B0A426CD5A6 /* DiffEngine.swift in Sources */, + 84EA111FB47AC6FC85811516 /* DSGenericIntegrationPanel.swift in Sources */, + 674D23AFC65FE0FB8591AD2D /* NotionContentView.swift in Sources */, + 8741FC04D2F1EABE2070FB25 /* EnhancedSplitDiffView.swift in Sources */, + F60B50B514AC48031685CB38 /* DiffPreferences.swift in Sources */, + 7E4E88E294033B61F366281B /* LargeDiffView.swift in Sources */, + 6C0AC788C2EAD1379BADBDBC /* DiffCache.swift in Sources */, + C9EDED5484F7DFC999A9FA26 /* DiffStatusBar.swift in Sources */, + 724B0CAB7823EA602CFC7EEE /* DiffSearchAndNavigation.swift in Sources */, + WELCOME01BUILD0000000001 /* WelcomeView.swift in Sources */, + C595ED8C3BDD36D4ECBBA1DB /* StagingFile.swift in Sources */, + BD4379DD0E129C03F2CCC223 /* TerminalPanel.swift in Sources */, + FED0784BE2D7966EF4DC830E /* CenterPanel.swift in Sources */, + 5FAAC3C9EBBD7093A180022A /* DiffViewWithClose.swift in Sources */, + 2AA8E330CE76B02611C7FAB5 /* LeftSidebarPanel.swift in Sources */, + 3C62AD95CD068EE1A7C2943C /* RightStagingPanel.swift in Sources */, + 9846D1D830EED6452B4E33EB /* StagingViewModel.swift in Sources */, + 8AE790AE3C421D037A039247 /* StashComponents.swift in Sources */, + BEE29CC2926B75EE4072A0C2 /* SidebarComponents.swift in Sources */, + 0F0392D16729D25A02FA61DF /* GitHooksComponents.swift in Sources */, + 2038FF09A32DA081F716D446 /* SubmoduleComponents.swift in Sources */, + 7A1DD8B750553E26E2A618D3 /* WorktreeComponents.swift in Sources */, + 4B71CB7D429E4F4BB2A82DBF /* CICDComponents.swift in Sources */, + 556686817084AA100171F328 /* RightCommitDetailPanel.swift in Sources */, + 96C518C31B9029FF4F69F778 /* StashDetailPanel.swift in Sources */, + 135EF951BE46B93A0B97306C /* StagingAreaPanel.swift in Sources */, + D59A65944CDDF748D7095C82 /* CommitComponents.swift in Sources */, + 1B3AC04978A2FEFCB03188A5 /* StagingComponents.swift in Sources */, + FAE9C67E11FEF853B37CD1B2 /* JiraPanel.swift in Sources */, + 3A1FBB575237C360F6C5A416 /* MemoryPressureHandler.swift in Sources */, + CEVF01 /* CodeEditorView.swift in Sources */, + B7819B89F1E5B86F9551E12C /* GitProgressTracker.swift in Sources */, + FE81C6B0E94463788DE8D787 /* GitOperationProgressView.swift in Sources */, + 715B18D5F7FFBFEC63C8F7BE /* SyncButton.swift in Sources */, + 787C9B1064B5E35BC1E8F8AD /* Components in Sources */, + B01E000382E76589FFC47FE8 /* WorkspaceManager.swift in Sources */, + FBBB4ECA925A4E628E1EB8DE /* WorkspaceManagerTab.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1337,6 +2746,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG GHOSTTY_AVAILABLE $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -1353,7 +2763,10 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; + ENABLE_APP_SANDBOX = NO; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readwrite; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -1373,6 +2786,12 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64", + "$(SRCROOT)/GitMac/Features/BottomPanel/Views", + "$(SRCROOT)/GitMac/Features/BottomPanel/ViewModels", + "$(SRCROOT)/GitMac/Core/Services/AI", + "$(SRCROOT)/GitMac/Features/Analytics", + "$(SRCROOT)/GitMac/Core/Services", + "$(SRCROOT)/GitMac/Features/CodeReview", ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( @@ -1450,6 +2869,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "GHOSTTY_AVAILABLE $(inherited)"; SWIFT_COMPILATION_MODE = wholemodule; }; @@ -1466,7 +2886,10 @@ COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; + ENABLE_APP_SANDBOX = NO; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readwrite; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -1486,6 +2909,12 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks/GhosttyKit.xcframework/macos-arm64_x86_64", + "$(SRCROOT)/GitMac/Features/BottomPanel/Views", + "$(SRCROOT)/GitMac/Features/BottomPanel/ViewModels", + "$(SRCROOT)/GitMac/Core/Services/AI", + "$(SRCROOT)/GitMac/Features/Analytics", + "$(SRCROOT)/GitMac/Core/Services", + "$(SRCROOT)/GitMac/Features/CodeReview", ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( @@ -1534,6 +2963,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + AC28C3092F08591500A86A78 /* XCRemoteSwiftPackageReference "DifferenceKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ra1028/DifferenceKit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.3.0; + }; + }; PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; @@ -1550,9 +2987,22 @@ minimumVersion = 0.16.0; }; }; + PKR003 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.9.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + AC28C30A2F08591500A86A78 /* DifferenceKit */ = { + isa = XCSwiftPackageProductDependency; + package = AC28C3092F08591500A86A78 /* XCRemoteSwiftPackageReference "DifferenceKit" */; + productName = DifferenceKit; + }; DEP001 /* KeychainAccess */ = { isa = XCSwiftPackageProductDependency; package = PKR001 /* XCRemoteSwiftPackageReference "KeychainAccess" */; @@ -1563,6 +3013,11 @@ package = PKR002 /* XCRemoteSwiftPackageReference "Splash" */; productName = Splash; }; + DEP003 /* CodeEditSourceEditor */ = { + isa = XCSwiftPackageProductDependency; + package = PKR003 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */; + productName = CodeEditSourceEditor; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = PRJ001 /* Project object */; diff --git a/GitMac/App/ContentView.swift b/GitMac/App/ContentView.swift index 7d5b525..57fcaad 100644 --- a/GitMac/App/ContentView.swift +++ b/GitMac/App/ContentView.swift @@ -11,12 +11,15 @@ struct ContentView: View { @State private var showOpenPanel = false @State private var showNewBranchSheet = false @State private var showMergeSheet = false - @State private var leftPanelWidth: CGFloat = 260 - @State private var rightPanelWidth: CGFloat = 380 + @State private var leftPanelWidth: CGFloat = DesignTokens.Layout.Sidebar.defaultWidth + @State private var rightPanelWidth: CGFloat = DesignTokens.Layout.StagingPanel.defaultWidth @State private var showRevertSheet = false @State private var revertCommits: [Commit] = [] + @State private var showCherryPickSheet = false + @State private var cherryPickCommits: [Commit] = [] @State private var showDetachedHeadAlert = false @State private var themeRefreshTrigger = UUID() + @State private var createBranchFromCommitSHA: String? @AppStorage("toolbarDisplayMode") private var toolbarDisplayMode: ToolbarDisplayMode = .iconAndText enum ToolbarDisplayMode: String, CaseIterable { @@ -58,17 +61,32 @@ struct ContentView: View { } } .sheet(isPresented: $showNewBranchSheet) { - CreateBranchSheet(isPresented: $showNewBranchSheet) - .environmentObject(appState) + CreateBranchSheet( + isPresented: $showNewBranchSheet, + fromCommitSHA: createBranchFromCommitSHA + ) + .environmentObject(appState) + .onDisappear { + // Clear the commit SHA when sheet is dismissed + createBranchFromCommitSHA = nil + } } .sheet(isPresented: $showRevertSheet) { RevertView(targetCommits: revertCommits) .environmentObject(appState) } + .sheet(isPresented: $showCherryPickSheet) { + CherryPickView(commits: cherryPickCommits) + .environmentObject(appState) + } .sheet(isPresented: $showMergeSheet) { MergeBranchSheet(isPresented: $showMergeSheet) .environmentObject(appState) } + .overlay(alignment: .bottomTrailing) { + // Git operation progress overlay + GitOperationProgressView() + } .overlay { if gitOperationHandler.isOperationInProgress { OperationProgressOverlay(message: gitOperationHandler.operationMessage) @@ -124,10 +142,50 @@ struct ContentView: View { .onReceive(NotificationCenter.default.publisher(for: .openRepository)) { _ in showOpenPanel = true } .onReceive(NotificationCenter.default.publisher(for: .cloneRepository)) { _ in showCloneSheet = true } .onReceive(NotificationCenter.default.publisher(for: .newBranch)) { _ in showNewBranchSheet = true } + .onReceive(NotificationCenter.default.publisher(for: .createBranchFromCommit)) { notification in + handleCreateBranchFromCommit(notification) + } + .onReceive(NotificationCenter.default.publisher(for: .cherryPickCommit)) { notification in + handleCherryPickNotification(notification) + } + .onReceive(NotificationCenter.default.publisher(for: .revertCommit)) { notification in + handleRevertNotification(notification) + } .modifier(GitOperationListeners()) .modifier(NavigationListeners(columnVisibility: $columnVisibility, selectedFileDiff: $selectedFileDiff)) } + private func handleCherryPickNotification(_ notification: Notification) { + // Handle single commit SHA + if let sha = notification.object as? String { + // Find the commit in the repository + if let repo = appState.currentRepository, + let commit = repo.commits.first(where: { $0.sha == sha }) { + cherryPickCommits = [commit] + showCherryPickSheet = true + } + } + // Handle multiple commits + else if let commits = notification.object as? [Commit] { + cherryPickCommits = commits + showCherryPickSheet = true + } + } + + private func handleRevertNotification(_ notification: Notification) { + if let commits = notification.object as? [Commit] { + revertCommits = commits + showRevertSheet = true + } + } + + private func handleCreateBranchFromCommit(_ notification: Notification) { + if let commitSHA = notification.object as? String { + createBranchFromCommitSHA = commitSHA + showNewBranchSheet = true + } + } + struct GitOperationListeners: ViewModifier { @EnvironmentObject var appState: AppState func body(content: Content) -> some View { diff --git a/GitMac/App/Sheets/CreateBranchSheet.swift b/GitMac/App/Sheets/CreateBranchSheet.swift index 356ddc2..8ca4fc5 100644 --- a/GitMac/App/Sheets/CreateBranchSheet.swift +++ b/GitMac/App/Sheets/CreateBranchSheet.swift @@ -11,6 +11,9 @@ struct CreateBranchSheet: View { @EnvironmentObject var appState: AppState @Binding var isPresented: Bool + // Optional commit SHA to create branch from + var fromCommitSHA: String? = nil + @State private var branchName = "" @State private var baseBranch = "HEAD" @State private var checkoutAfterCreate = true @@ -61,14 +64,28 @@ struct CreateBranchSheet: View { .foregroundColor(AppTheme.textPrimary) } - // Current branch - HStack(spacing: 4) { - Image(systemName: "arrow.triangle.branch") - .font(.system(size: 10)) - .foregroundColor(AppTheme.success) - Text(currentBranchName) - .font(.system(size: 11, weight: .medium)) - .foregroundColor(AppTheme.textPrimary) + // Current branch or commit SHA + if let commitSHA = fromCommitSHA { + HStack(spacing: 4) { + Image(systemName: "arrow.turn.down.right") + .font(.system(size: 10)) + .foregroundColor(AppTheme.warning) + Text("from commit") + .font(.system(size: 11)) + .foregroundColor(AppTheme.textSecondary) + Text(String(commitSHA.prefix(7))) + .font(.system(size: 11, design: .monospaced)) + .foregroundColor(AppTheme.textPrimary) + } + } else { + HStack(spacing: 4) { + Image(systemName: "arrow.triangle.branch") + .font(.system(size: 10)) + .foregroundColor(AppTheme.success) + Text(currentBranchName) + .font(.system(size: 11, weight: .medium)) + .foregroundColor(AppTheme.textPrimary) + } } Spacer() @@ -104,14 +121,34 @@ struct CreateBranchSheet: View { .font(.system(size: 11, weight: .medium)) .foregroundColor(AppTheme.textSecondary) - Picker("", selection: $baseBranch) { - Text("Current HEAD").tag("HEAD") - ForEach(localBranches) { branch in - Text(branch.name).tag(branch.name) + if fromCommitSHA != nil { + // Show locked display when creating from specific commit + HStack { + Image(systemName: "lock.fill") + .font(.system(size: 10)) + .foregroundColor(AppTheme.textMuted) + Text(baseBranch) + .font(.system(size: 13)) + .foregroundColor(AppTheme.textSecondary) + Spacer() } + .padding(8) + .background(AppTheme.backgroundTertiary.opacity(0.5)) + .cornerRadius(6) + .overlay( + RoundedRectangle(cornerRadius: 6) + .stroke(AppTheme.border, lineWidth: 1) + ) + } else { + Picker("", selection: $baseBranch) { + Text("Current HEAD").tag("HEAD") + ForEach(localBranches) { branch in + Text(branch.name).tag(branch.name) + } + } + .pickerStyle(.menu) + .labelsHidden() } - .pickerStyle(.menu) - .labelsHidden() } // Checkout toggle @@ -163,6 +200,12 @@ struct CreateBranchSheet: View { } .frame(width: 380, height: 350) .background(AppTheme.backgroundSecondary) + .onAppear { + // If creating from a specific commit, set the base branch to that commit SHA + if let commitSHA = fromCommitSHA { + baseBranch = commitSHA + } + } } private func createBranch() { diff --git a/GitMac/Core/Git/Branch.swift b/GitMac/Core/Git/Branch.swift index cc6a627..c69cb34 100644 --- a/GitMac/Core/Git/Branch.swift +++ b/GitMac/Core/Git/Branch.swift @@ -2,7 +2,9 @@ import Foundation /// Represents a Git branch struct Branch: Identifiable, Equatable, Hashable { - let id: UUID + /// Stable ID includes isHead so SwiftUI detects checkout changes + var id: String { "\(fullName)-\(isHead)" } + let name: String let fullName: String let isRemote: Bool @@ -22,7 +24,6 @@ struct Branch: Identifiable, Equatable, Hashable { targetSHA: String, upstream: UpstreamInfo? = nil ) { - self.id = UUID() self.name = name self.fullName = fullName self.isRemote = isRemote @@ -44,9 +45,21 @@ struct Branch: Identifiable, Equatable, Hashable { return name } + /// Check if this is the main/default branch + /// Note: This requires the repository context to be set + /// Use isMainBranch(in:) to check against a specific repository var isMainBranch: Bool { - let mainNames = ["main", "master", "develop", "development"] - return mainNames.contains(name.lowercased()) + // Fallback when no repository context is available + let commonMainNames = ["main", "master"] + return commonMainNames.contains(name.lowercased()) + } + + /// Check if this is the main/default branch for a specific repository + func isMainBranch(in repository: Repository?) -> Bool { + guard let repo = repository, let defaultBranch = repo.defaultBranch else { + return isMainBranch + } + return name.lowercased() == defaultBranch.lowercased() } /// Alias for isHead - whether this is the current checked out branch @@ -61,7 +74,7 @@ struct Branch: Identifiable, Equatable, Hashable { } static func == (lhs: Branch, rhs: Branch) -> Bool { - lhs.fullName == rhs.fullName + lhs.fullName == rhs.fullName && lhs.isHead == rhs.isHead } func hash(into hasher: inout Hasher) { diff --git a/GitMac/Core/Git/Commit.swift b/GitMac/Core/Git/Commit.swift index 7de4ebb..b2adf8c 100644 --- a/GitMac/Core/Git/Commit.swift +++ b/GitMac/Core/Git/Commit.swift @@ -85,11 +85,32 @@ struct Commit: Identifiable, Equatable, Hashable { return formatter.string(from: authorDate) } + /// Summary cleaned of markdown code block syntax (backticks) + var cleanSummary: String { + var cleaned = summary.trimmingCharacters(in: .whitespaces) + // Remove leading/trailing triple backticks + while cleaned.hasPrefix("```") { + cleaned = String(cleaned.dropFirst(3)).trimmingCharacters(in: .whitespaces) + } + while cleaned.hasSuffix("```") { + cleaned = String(cleaned.dropLast(3)).trimmingCharacters(in: .whitespaces) + } + // Remove single backticks at start/end + while cleaned.hasPrefix("`") && !cleaned.hasPrefix("``") { + cleaned = String(cleaned.dropFirst(1)).trimmingCharacters(in: .whitespaces) + } + while cleaned.hasSuffix("`") && !cleaned.hasSuffix("``") { + cleaned = String(cleaned.dropLast(1)).trimmingCharacters(in: .whitespaces) + } + return cleaned + } + var gravatarURL: URL? { let email = authorEmail.lowercased().trimmingCharacters(in: .whitespaces) guard let data = email.data(using: .utf8) else { return nil } let hash = data.md5Hash - return URL(string: "https://www.gravatar.com/avatar/\(hash)?d=identicon&s=80") + // Use identicon fallback to always return an image + return URL(string: "https://www.gravatar.com/avatar/\(hash)?s=80&d=identicon") } static func == (lhs: Commit, rhs: Commit) -> Bool { diff --git a/GitMac/Core/Git/GitEngine.swift b/GitMac/Core/Git/GitEngine.swift index 814a1d5..3504103 100644 --- a/GitMac/Core/Git/GitEngine.swift +++ b/GitMac/Core/Git/GitEngine.swift @@ -76,6 +76,7 @@ actor GitEngine { async let remotes = getRemotes(at: path) async let stashes = getStashes(at: path) async let status = getStatus(at: path) + async let defaultBranch = getDefaultBranch(at: path) repo.head = try? await head repo.branches = (try? await branches) ?? [] @@ -84,10 +85,87 @@ actor GitEngine { repo.remotes = (try? await remotes) ?? [] repo.stashes = (try? await stashes) ?? [] repo.status = (try? await status) ?? RepositoryStatus() + repo.defaultBranch = await defaultBranch return repo } + /// Get default/main branch for the repository + /// Uses multiple strategies: + /// 1. gh CLI to detect GitHub's default branch + /// 2. git symbolic-ref for origin/HEAD + /// 3. Fallback to common names + func getDefaultBranch(at path: String) async -> String { + // Strategy 1: Use gh CLI to get default branch from GitHub + let ghResult = await shellExecutor.execute( + "gh", + arguments: ["repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], + workingDirectory: path + ) + + if ghResult.exitCode == 0 { + let branchName = ghResult.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + if !branchName.isEmpty && !branchName.contains("error") && !branchName.contains("not found") { + return branchName + } + } + + // Strategy 2: Check git's symbolic-ref for origin/HEAD + let symbolicResult = await shellExecutor.execute( + "git", + arguments: ["symbolic-ref", "refs/remotes/origin/HEAD"], + workingDirectory: path + ) + + if symbolicResult.exitCode == 0 { + let ref = symbolicResult.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + // Output is like "refs/remotes/origin/main" + if let branchName = ref.split(separator: "/").last { + return String(branchName) + } + } + + // Strategy 3: Try to set origin/HEAD if not set + let setHeadResult = await shellExecutor.execute( + "git", + arguments: ["remote", "set-head", "origin", "-a"], + workingDirectory: path + ) + + if setHeadResult.exitCode == 0 { + // Try reading symbolic-ref again + let retryResult = await shellExecutor.execute( + "git", + arguments: ["symbolic-ref", "refs/remotes/origin/HEAD"], + workingDirectory: path + ) + + if retryResult.exitCode == 0 { + let ref = retryResult.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + if let branchName = ref.split(separator: "/").last { + return String(branchName) + } + } + } + + // Strategy 4: Check git config for init.defaultBranch + let configResult = await shellExecutor.execute( + "git", + arguments: ["config", "--get", "init.defaultBranch"], + workingDirectory: path + ) + + if configResult.exitCode == 0 { + let branchName = configResult.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + if !branchName.isEmpty { + return branchName + } + } + + // Fallback: Return "main" as most repos use it now + return "main" + } + // MARK: - Reference Operations /// Get current HEAD reference @@ -153,8 +231,7 @@ actor GitEngine { throw GitError.commandFailed("git for-each-ref", result.stderr) } - _ = try? await getHeadSHA(at: path) - + // Note: %(HEAD) marker from git outputs "*" for the current branch return result.stdout .components(separatedBy: .newlines) .filter { !$0.isEmpty } @@ -172,7 +249,7 @@ actor GitEngine { name: name, fullName: "refs/heads/\(name)", isRemote: false, - isHead: isHead, // Only use git's HEAD marker, not SHA comparison + isHead: isHead, trackingBranch: upstream, targetSHA: sha, upstream: trackInfo diff --git a/GitMac/Core/Git/Repository.swift b/GitMac/Core/Git/Repository.swift index 33f4c7c..922145c 100644 --- a/GitMac/Core/Git/Repository.swift +++ b/GitMac/Core/Git/Repository.swift @@ -26,6 +26,9 @@ struct Repository: Identifiable, Equatable { // Working directory state var status: RepositoryStatus = RepositoryStatus() + // Default branch (detected from GitHub or git config) + var defaultBranch: String? + init(path: String) { self.id = UUID() self.path = path @@ -40,7 +43,9 @@ struct Repository: Identifiable, Equatable { /// The currently checked out branch var currentBranch: Branch? { - branches.first { $0.isHead } + let headBranches = branches.filter { $0.isHead } + assert(headBranches.count <= 1, "Multiple branches marked as HEAD: \(headBranches.map(\.name))") + return headBranches.first } /// All commits (loaded on demand) diff --git a/GitMac/Core/Services/AvatarService.swift b/GitMac/Core/Services/AvatarService.swift index 792283f..e2371fd 100644 --- a/GitMac/Core/Services/AvatarService.swift +++ b/GitMac/Core/Services/AvatarService.swift @@ -256,9 +256,49 @@ actor AvatarService { return URL(string: "https://avatars.githubusercontent.com/\(username)?size=80") } + // Search GitHub for user by email + if let avatarURL = await searchGitHubUserByEmail(email: emailLower, token: token) { + repoAuthorsCache[emailLower] = avatarURL + return avatarURL + } + return nil } + /// Search GitHub for a user by their email address + private func searchGitHubUserByEmail(email: String, token: String) async -> URL? { + // Use GitHub search API to find user by email + let query = email.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? email + guard let url = URL(string: "https://api.github.com/search/users?q=\(query)+in:email") else { return nil } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let items = json["items"] as? [[String: Any]], + let firstUser = items.first, + let avatarUrl = firstUser["avatar_url"] as? String, + let avatarURL = URL(string: avatarUrl) else { + return nil + } + + // Cache the username for future use + if let username = firstUser["login"] as? String { + setGithubUsername(username, for: email) + } + + return avatarURL + } catch { + return nil + } + } + /// Load commit authors from a GitHub repository func loadRepoAuthors(owner: String, repo: String, token: String) async { let repoKey = "\(owner)/\(repo)" diff --git a/GitMac/Core/Services/GitProgressTracker.swift b/GitMac/Core/Services/GitProgressTracker.swift new file mode 100644 index 0000000..06771dc --- /dev/null +++ b/GitMac/Core/Services/GitProgressTracker.swift @@ -0,0 +1,190 @@ +// +// GitProgressTracker.swift +// GitMac +// +// Service for tracking git operation progress in real-time +// + +import SwiftUI +import Combine + +@MainActor +class GitProgressTracker: ObservableObject { + static let shared = GitProgressTracker() + + @Published var activeOperations: [GitOperation] = [] + + private init() {} + + // MARK: - Operation Management + + func startOperation(type: GitOperation.OperationType, repositoryPath: String) -> UUID { + let operation = GitOperation(type: type, repositoryPath: repositoryPath) + activeOperations.append(operation) + return operation.id + } + + func updateProgress(operationId: UUID, phase: GitOperation.Phase, current: Int, total: Int, message: String? = nil) { + guard let index = activeOperations.firstIndex(where: { $0.id == operationId }) else { return } + + activeOperations[index].progress = GitOperation.Progress(current: current, total: total) + activeOperations[index].phase = phase + if let message = message { + activeOperations[index].message = message + } + } + + func completeOperation(operationId: UUID, success: Bool = true, error: Error? = nil) { + guard let index = activeOperations.firstIndex(where: { $0.id == operationId }) else { return } + + if success { + activeOperations[index].phase = .complete + } else { + activeOperations[index].phase = .failed(error ?? NSError(domain: "GitMac", code: -1)) + } + + // Remove after 2 seconds + Task { + try? await Task.sleep(nanoseconds: 2_000_000_000) + activeOperations.removeAll(where: { $0.id == operationId }) + } + } + + func cancelOperation(operationId: UUID) { + activeOperations.removeAll(where: { $0.id == operationId }) + } + + // MARK: - Models + + struct GitOperation: Identifiable { + let id = UUID() + let type: OperationType + let repositoryPath: String + var progress: Progress + var phase: Phase + var message: String + let startTime = Date() + + init(type: OperationType, repositoryPath: String) { + self.type = type + self.repositoryPath = repositoryPath + self.progress = Progress(current: 0, total: 100) + self.phase = .starting + self.message = type.initialMessage + } + + var isActive: Bool { + switch phase { + case .complete, .failed: + return false + default: + return true + } + } + + enum OperationType { + case push + case pull + case fetch + case clone + case sync + + var icon: String { + switch self { + case .push: return "arrow.up.circle" + case .pull: return "arrow.down.circle" + case .fetch: return "arrow.down.circle.dotted" + case .clone: return "square.and.arrow.down" + case .sync: return "arrow.triangle.2.circlepath" + } + } + + var initialMessage: String { + switch self { + case .push: return "Pushing changes..." + case .pull: return "Pulling changes..." + case .fetch: return "Fetching updates..." + case .clone: return "Cloning repository..." + case .sync: return "Syncing..." + } + } + } + + enum Phase { + case starting + case counting + case compressing + case writing + case receiving + case resolving + case updating + case complete + case failed(Error) + + var description: String { + switch self { + case .starting: return "Starting" + case .counting: return "Counting objects" + case .compressing: return "Compressing" + case .writing: return "Writing objects" + case .receiving: return "Receiving objects" + case .resolving: return "Resolving deltas" + case .updating: return "Updating refs" + case .complete: return "Complete" + case .failed: return "Failed" + } + } + } + + struct Progress { + var current: Int + var total: Int + + var percentage: Double { + total > 0 ? Double(current) / Double(total) * 100 : 0 + } + + var isIndeterminate: Bool { + total == 0 + } + } + } +} + +// MARK: - Progress Parsing Utilities + +extension GitProgressTracker { + /// Parse git progress output and extract progress information + /// Examples: + /// - "Counting objects: 100% (5/5)" + /// - "Compressing objects: 50% (3/6)" + /// - "Writing objects: 33% (1/3)" + static func parseProgress(from output: String) -> (phase: GitOperation.Phase, current: Int, total: Int)? { + let patterns: [(phase: GitOperation.Phase, pattern: String)] = [ + (.counting, "Counting objects:\\s+(\\d+)% \\((\\d+)/(\\d+)\\)"), + (.compressing, "Compressing objects:\\s+(\\d+)% \\((\\d+)/(\\d+)\\)"), + (.writing, "Writing objects:\\s+(\\d+)% \\((\\d+)/(\\d+)\\)"), + (.receiving, "Receiving objects:\\s+(\\d+)% \\((\\d+)/(\\d+)\\)"), + (.resolving, "Resolving deltas:\\s+(\\d+)% \\((\\d+)/(\\d+)\\)") + ] + + for (phase, pattern) in patterns { + if let regex = try? NSRegularExpression(pattern: pattern), + let match = regex.firstMatch(in: output, range: NSRange(output.startIndex..., in: output)), + match.numberOfRanges == 4 { + + let currentRange = Range(match.range(at: 2), in: output) + let totalRange = Range(match.range(at: 3), in: output) + + if let currentRange = currentRange, + let totalRange = totalRange, + let current = Int(output[currentRange]), + let total = Int(output[totalRange]) { + return (phase, current, total) + } + } + } + + return nil + } +} diff --git a/GitMac/Core/Services/LicenseManager.swift b/GitMac/Core/Services/LicenseManager.swift new file mode 100644 index 0000000..861d087 --- /dev/null +++ b/GitMac/Core/Services/LicenseManager.swift @@ -0,0 +1,229 @@ +// +// LicenseManager.swift +// GitMac +// +// Pro version license manager +// + +import Foundation +import SwiftUI + +/// License tier for GitMac +enum LicenseTier: String, Codable { + case free = "Free" + case pro = "Pro" + case enterprise = "Enterprise" + + var displayName: String { rawValue } + + var features: [String] { + switch self { + case .free: + return [ + "Basic Git operations", + "Single repository", + "Limited integrations" + ] + case .pro: + return [ + "Unlimited repositories", + "Workspace Manager", + "Auto-discovery", + "All integrations", + "Templates & Groups", + "Import/Export configs", + "Priority support" + ] + case .enterprise: + return [ + "Everything in Pro", + "Team management", + "Custom integrations", + "SSO support", + "Dedicated support" + ] + } + } +} + +/// License information +struct License: Codable { + let tier: LicenseTier + let activatedAt: Date + let expiresAt: Date? + let email: String? + let key: String + + var isActive: Bool { + if let expiresAt = expiresAt { + return Date() < expiresAt + } + return true // Lifetime license + } + + var daysRemaining: Int? { + guard let expiresAt = expiresAt else { return nil } + return Calendar.current.dateComponents([.day], from: Date(), to: expiresAt).day + } +} + +/// License manager for GitMac +@MainActor +class LicenseManager: ObservableObject { + static let shared = LicenseManager() + + @Published var currentLicense: License? + + private let licenseKey = "gitmac_license" + + // Pro license key for user (hardcoded unlock) + private let proLicenseKey = "GITMAC-PRO-2026-UNLIMITED" + + private init() { + loadLicense() + // Auto-activate Pro if no license exists + if currentLicense == nil { + activateProLicense() + } + } + + var currentTier: LicenseTier { + currentLicense?.tier ?? .free + } + + var isPro: Bool { + guard let license = currentLicense, license.isActive else { return false } + return license.tier == .pro || license.tier == .enterprise + } + + var isEnterprise: Bool { + guard let license = currentLicense, license.isActive else { return false } + return license.tier == .enterprise + } + + // MARK: - Activation + + func activateProLicense() { + let license = License( + tier: .pro, + activatedAt: Date(), + expiresAt: nil, // Lifetime + email: nil, + key: proLicenseKey + ) + currentLicense = license + saveLicense() + } + + func activate(key: String, email: String? = nil) -> Bool { + // Validate key format + guard !key.isEmpty else { return false } + + // Check if it's the Pro key + if key.uppercased() == proLicenseKey { + activateProLicense() + return true + } + + // For demo: accept any key starting with "GITMAC-PRO" + if key.uppercased().hasPrefix("GITMAC-PRO") { + let license = License( + tier: .pro, + activatedAt: Date(), + expiresAt: nil, + email: email, + key: key.uppercased() + ) + currentLicense = license + saveLicense() + return true + } + + // Enterprise keys + if key.uppercased().hasPrefix("GITMAC-ENT") { + let license = License( + tier: .enterprise, + activatedAt: Date(), + expiresAt: nil, + email: email, + key: key.uppercased() + ) + currentLicense = license + saveLicense() + return true + } + + return false + } + + func deactivate() { + currentLicense = nil + UserDefaults.standard.removeObject(forKey: licenseKey) + } + + // MARK: - Feature Checks + + func canUse(_ feature: LicenseFeature) -> Bool { + switch feature { + case .workspaceManager, .autoDiscovery, .templates, .groups, .importExport, .bulkOperations: + return isPro || isEnterprise + case .teamManagement, .customIntegrations, .sso: + return isEnterprise + case .basicGit: + return true + } + } + + func requiresPro(for feature: LicenseFeature, action: () -> Void) { + if canUse(feature) { + action() + } else { + // Show upgrade prompt + print("⚠️ Feature '\(feature.displayName)' requires Pro license") + } + } + + // MARK: - Persistence + + private func saveLicense() { + if let data = try? JSONEncoder().encode(currentLicense) { + UserDefaults.standard.set(data, forKey: licenseKey) + } + } + + private func loadLicense() { + if let data = UserDefaults.standard.data(forKey: licenseKey), + let license = try? JSONDecoder().decode(License.self, from: data) { + currentLicense = license + } + } +} + +/// License features that require specific tiers +enum LicenseFeature { + case basicGit + case workspaceManager + case autoDiscovery + case templates + case groups + case importExport + case bulkOperations + case teamManagement + case customIntegrations + case sso + + var displayName: String { + switch self { + case .basicGit: return "Basic Git Operations" + case .workspaceManager: return "Workspace Manager" + case .autoDiscovery: return "Auto-Discovery" + case .templates: return "Templates" + case .groups: return "Groups" + case .importExport: return "Import/Export" + case .bulkOperations: return "Bulk Operations" + case .teamManagement: return "Team Management" + case .customIntegrations: return "Custom Integrations" + case .sso: return "SSO Support" + } + } +} diff --git a/GitMac/Core/Services/WorkspaceManager.swift b/GitMac/Core/Services/WorkspaceManager.swift new file mode 100644 index 0000000..cf18ad4 --- /dev/null +++ b/GitMac/Core/Services/WorkspaceManager.swift @@ -0,0 +1,497 @@ +// +// WorkspaceManager.swift +// GitMac +// +// Centralized workspace configuration manager for multi-repo setups +// + +import Foundation +import SwiftUI + +/// Workspace template for reusable configurations +struct WorkspaceTemplate: Identifiable, Codable, Equatable, Hashable { + let id: UUID + var name: String + var description: String + var config: WorkspaceConfig + var icon: String + var color: String + var tags: [String] + var createdAt: Date + var modifiedAt: Date + + init( + id: UUID = UUID(), + name: String, + description: String = "", + config: WorkspaceConfig, + icon: String = "folder.fill", + color: String = "blue", + tags: [String] = [], + createdAt: Date = Date(), + modifiedAt: Date = Date() + ) { + self.id = id + self.name = name + self.description = description + self.config = config + self.icon = icon + self.color = color + self.tags = tags + self.createdAt = createdAt + self.modifiedAt = modifiedAt + } +} + +/// Workspace group for organizing related repositories +struct WorkspaceGroup: Identifiable, Codable, Equatable { + let id: UUID + var name: String + var description: String + var repositoryPaths: [String] + var sharedConfig: WorkspaceConfig? + var icon: String + var color: String + var createdAt: Date + + init( + id: UUID = UUID(), + name: String, + description: String = "", + repositoryPaths: [String] = [], + sharedConfig: WorkspaceConfig? = nil, + icon: String = "folder.badge.gearshape", + color: String = "purple", + createdAt: Date = Date() + ) { + self.id = id + self.name = name + self.description = description + self.repositoryPaths = repositoryPaths + self.sharedConfig = sharedConfig + self.icon = icon + self.color = color + self.createdAt = createdAt + } + + var repositoryCount: Int { + repositoryPaths.count + } +} + +/// Centralized workspace manager for multi-repo configurations +@MainActor +class WorkspaceManager: ObservableObject { + static let shared = WorkspaceManager() + + @Published var templates: [WorkspaceTemplate] = [] + @Published var groups: [WorkspaceGroup] = [] + + private let templatesKey = "workspace_templates" + private let groupsKey = "workspace_groups" + + private init() { + loadTemplates() + loadGroups() + createDefaultTemplates() + } + + // MARK: - Templates Management + + /// Create default workspace templates + private func createDefaultTemplates() { + guard templates.isEmpty else { return } + + // Template 1: Open Source Project + var openSourceConfig = WorkspaceConfig() + openSourceConfig.displayName = "Open Source Project" + openSourceConfig.mainBranchName = "main" + openSourceConfig.featureBranchPrefix = "feature/" + openSourceConfig.bugfixBranchPrefix = "bugfix/" + openSourceConfig.releaseBranchPrefix = "release/" + openSourceConfig.autoDeleteMergedBranches = true + openSourceConfig.requireIssueReference = true + openSourceConfig.defaultPRBaseBranch = "main" + + templates.append(WorkspaceTemplate( + name: "Open Source", + description: "Standard configuration for open source projects", + config: openSourceConfig, + icon: "globe", + color: "green", + tags: ["open-source", "public", "community"] + )) + + // Template 2: Enterprise Project + var enterpriseConfig = WorkspaceConfig() + enterpriseConfig.displayName = "Enterprise Project" + enterpriseConfig.mainBranchName = "master" + enterpriseConfig.featureBranchPrefix = "feature/" + enterpriseConfig.bugfixBranchPrefix = "fix/" + enterpriseConfig.releaseBranchPrefix = "release/" + enterpriseConfig.hotfixBranchPrefix = "hotfix/" + enterpriseConfig.signCommits = true + enterpriseConfig.requireIssueReference = true + enterpriseConfig.commitMessageTemplate = "[TICKET-XXX] \n\nWhat:\n\nWhy:\n\nHow:" + + templates.append(WorkspaceTemplate( + name: "Enterprise", + description: "Corporate workflow with strict conventions", + config: enterpriseConfig, + icon: "building.2", + color: "blue", + tags: ["enterprise", "corporate", "strict"] + )) + + // Template 3: Personal Project + var personalConfig = WorkspaceConfig() + personalConfig.displayName = "Personal Project" + personalConfig.mainBranchName = "main" + personalConfig.autoDeleteMergedBranches = false + personalConfig.requireIssueReference = false + + templates.append(WorkspaceTemplate( + name: "Personal", + description: "Lightweight config for personal projects", + config: personalConfig, + icon: "person.fill", + color: "orange", + tags: ["personal", "simple"] + )) + + // Template 4: Microservices + var microservicesConfig = WorkspaceConfig() + microservicesConfig.displayName = "Microservice" + microservicesConfig.mainBranchName = "main" + microservicesConfig.featureBranchPrefix = "feat/" + microservicesConfig.bugfixBranchPrefix = "fix/" + microservicesConfig.releaseBranchPrefix = "release/" + microservicesConfig.autoDeleteMergedBranches = true + microservicesConfig.commitMessageTemplate = "type(scope): subject\n\nbody\n\nfooter" + + templates.append(WorkspaceTemplate( + name: "Microservices", + description: "Configuration for microservice architecture", + config: microservicesConfig, + icon: "server.rack", + color: "purple", + tags: ["microservices", "architecture", "conventional-commits"] + )) + + saveTemplates() + } + + func addTemplate(_ template: WorkspaceTemplate) { + templates.append(template) + saveTemplates() + } + + func updateTemplate(_ template: WorkspaceTemplate) { + if let index = templates.firstIndex(where: { $0.id == template.id }) { + var updated = template + updated.modifiedAt = Date() + templates[index] = updated + saveTemplates() + } + } + + func deleteTemplate(_ template: WorkspaceTemplate) { + templates.removeAll { $0.id == template.id } + saveTemplates() + } + + func applyTemplate(_ template: WorkspaceTemplate, to repositoryPath: String) { + var config = template.config + // Preserve repository-specific display name if exists + if let existing = WorkspaceSettingsManager.shared.workspaces[repositoryPath] { + config.displayName = existing.displayName + } + WorkspaceSettingsManager.shared.workspaces[repositoryPath] = config + WorkspaceSettingsManager.shared.save() + } + + func applyTemplateToGroup(_ template: WorkspaceTemplate, groupId: UUID) { + guard let group = groups.first(where: { $0.id == groupId }) else { return } + for repoPath in group.repositoryPaths { + applyTemplate(template, to: repoPath) + } + } + + // MARK: - Groups Management + + func addGroup(_ group: WorkspaceGroup) { + groups.append(group) + saveGroups() + } + + func updateGroup(_ group: WorkspaceGroup) { + if let index = groups.firstIndex(where: { $0.id == group.id }) { + groups[index] = group + saveGroups() + } + } + + func deleteGroup(_ group: WorkspaceGroup) { + groups.removeAll { $0.id == group.id } + saveGroups() + } + + func addRepositoryToGroup(_ repositoryPath: String, groupId: UUID) { + if let index = groups.firstIndex(where: { $0.id == groupId }) { + if !groups[index].repositoryPaths.contains(repositoryPath) { + groups[index].repositoryPaths.append(repositoryPath) + saveGroups() + } + } + } + + func removeRepositoryFromGroup(_ repositoryPath: String, groupId: UUID) { + if let index = groups.firstIndex(where: { $0.id == groupId }) { + groups[index].repositoryPaths.removeAll { $0 == repositoryPath } + saveGroups() + } + } + + func applyGroupConfig(_ groupId: UUID) { + guard let group = groups.first(where: { $0.id == groupId }), + let sharedConfig = group.sharedConfig else { return } + + for repoPath in group.repositoryPaths { + WorkspaceSettingsManager.shared.workspaces[repoPath] = sharedConfig + } + WorkspaceSettingsManager.shared.save() + } + + // MARK: - Import/Export + + struct WorkspaceExport: Codable { + let version: String + let exportDate: Date + let templates: [WorkspaceTemplate] + let groups: [WorkspaceGroup] + let workspaces: [String: WorkspaceConfig] + } + + func exportConfiguration() -> Data? { + let export = WorkspaceExport( + version: "1.0", + exportDate: Date(), + templates: templates, + groups: groups, + workspaces: WorkspaceSettingsManager.shared.workspaces + ) + + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .iso8601 + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + + return try? encoder.encode(export) + } + + func importConfiguration(from data: Data, merge: Bool = true) throws { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + + let imported = try decoder.decode(WorkspaceExport.self, from: data) + + if merge { + // Merge templates (avoid duplicates by name) + for template in imported.templates { + if !templates.contains(where: { $0.name == template.name }) { + templates.append(template) + } + } + + // Merge groups (avoid duplicates by name) + for group in imported.groups { + if !groups.contains(where: { $0.name == group.name }) { + groups.append(group) + } + } + + // Merge workspace configs + for (path, config) in imported.workspaces { + WorkspaceSettingsManager.shared.workspaces[path] = config + } + } else { + // Replace all + templates = imported.templates + groups = imported.groups + WorkspaceSettingsManager.shared.workspaces = imported.workspaces + } + + saveTemplates() + saveGroups() + WorkspaceSettingsManager.shared.save() + } + + // MARK: - Bulk Operations + + func applyConfigToMultipleRepos(_ config: WorkspaceConfig, repositories: [String]) { + for repoPath in repositories { + var repoConfig = config + // Preserve repository-specific display name + if let existing = WorkspaceSettingsManager.shared.workspaces[repoPath] { + repoConfig.displayName = existing.displayName + } + WorkspaceSettingsManager.shared.workspaces[repoPath] = repoConfig + } + WorkspaceSettingsManager.shared.save() + } + + func resetAllRepositories() { + WorkspaceSettingsManager.shared.workspaces.removeAll() + WorkspaceSettingsManager.shared.save() + } + + // MARK: - Statistics + + var totalRepositories: Int { + WorkspaceSettingsManager.shared.workspaces.count + } + + var totalGroups: Int { + groups.count + } + + var totalTemplates: Int { + templates.count + } + + func repositoriesWithIntegrations() -> [String] { + WorkspaceSettingsManager.shared.workspaces.filter { _, config in + config.taigaProjectId != nil || + config.jiraProjectKey != nil || + config.linearTeamId != nil || + config.notionDatabaseId != nil || + config.codeBuildProjectName != nil + }.map { $0.key } + } + + // MARK: - Auto-Discovery + + /// Auto-discover groups from GitHub organizations and local repositories + func discoverGroups() async -> [WorkspaceGroup] { + var discoveredGroups: [WorkspaceGroup] = [] + + // Strategy 1: Discover GitHub organizations + let orgsResult = await executeShell("gh", args: ["org", "list"]) + if orgsResult.success { + let orgNames = orgsResult.output.split(separator: "\n").map { String($0).trimmingCharacters(in: .whitespaces) } + + for orgName in orgNames where !orgName.isEmpty { + // Get repos for this org + let reposResult = await executeShell("gh", args: ["repo", "list", orgName, "--json", "nameWithOwner", "--jq", ".[].nameWithOwner"]) + + if reposResult.success { + let repoPaths = reposResult.output.split(separator: "\n").map { String($0).trimmingCharacters(in: .whitespaces) } + + if !repoPaths.isEmpty { + let group = WorkspaceGroup( + name: orgName, + description: "GitHub organization: \(orgName)", + repositoryPaths: repoPaths.filter { !$0.isEmpty }, + icon: "building.2", + color: "blue" + ) + discoveredGroups.append(group) + } + } + } + } + + // Strategy 2: Group by common prefix in local repos + let localRepos = Array(WorkspaceSettingsManager.shared.workspaces.keys) + var prefixGroups: [String: [String]] = [:] + + for repoPath in localRepos { + // Extract organization/owner from path + let components = repoPath.split(separator: "/") + if components.count >= 2 { + let possibleOrg = String(components[components.count - 2]) + prefixGroups[possibleOrg, default: []].append(repoPath) + } + } + + // Create groups for common prefixes with 2+ repos + for (prefix, repos) in prefixGroups where repos.count >= 2 { + let group = WorkspaceGroup( + name: prefix, + description: "Local repositories under \(prefix)", + repositoryPaths: repos, + icon: "folder.badge.gearshape", + color: "purple" + ) + discoveredGroups.append(group) + } + + return discoveredGroups + } + + /// Apply discovered groups (merge with existing) + func applyDiscoveredGroups(_ discoveredGroups: [WorkspaceGroup]) { + for discovered in discoveredGroups { + // Check if group already exists + if let existing = groups.first(where: { $0.name == discovered.name }) { + // Update existing group with new repos + var updated = existing + let newRepos = Set(discovered.repositoryPaths).subtracting(existing.repositoryPaths) + updated.repositoryPaths.append(contentsOf: newRepos) + updateGroup(updated) + } else { + // Add new group + addGroup(discovered) + } + } + } + + private func executeShell(_ command: String, args: [String]) async -> (success: Bool, output: String) { + let process = Process() + process.executableURL = URL(fileURLWithPath: "/usr/bin/env") + process.arguments = [command] + args + + let pipe = Pipe() + process.standardOutput = pipe + process.standardError = pipe + + do { + try process.run() + process.waitUntilExit() + + let data = pipe.fileHandleForReading.readDataToEndOfFile() + let output = String(data: data, encoding: .utf8) ?? "" + + return (process.terminationStatus == 0, output) + } catch { + return (false, "") + } + } + + // MARK: - Persistence + + private func saveTemplates() { + if let data = try? JSONEncoder().encode(templates) { + UserDefaults.standard.set(data, forKey: templatesKey) + } + } + + private func loadTemplates() { + if let data = UserDefaults.standard.data(forKey: templatesKey), + let decoded = try? JSONDecoder().decode([WorkspaceTemplate].self, from: data) { + templates = decoded + } + } + + private func saveGroups() { + if let data = try? JSONEncoder().encode(groups) { + UserDefaults.standard.set(data, forKey: groupsKey) + } + } + + private func loadGroups() { + if let data = UserDefaults.standard.data(forKey: groupsKey), + let decoded = try? JSONDecoder().decode([WorkspaceGroup].self, from: data) { + groups = decoded + } + } +} diff --git a/GitMac/Core/Services/WorkspaceSettings.swift b/GitMac/Core/Services/WorkspaceSettings.swift index e3d7df1..fa3409d 100644 --- a/GitMac/Core/Services/WorkspaceSettings.swift +++ b/GitMac/Core/Services/WorkspaceSettings.swift @@ -75,7 +75,7 @@ class WorkspaceSettingsManager: ObservableObject { // MARK: - Workspace Configuration -struct WorkspaceConfig: Codable { +struct WorkspaceConfig: Codable, Equatable, Hashable { // MARK: - Repository Info var displayName: String? // Custom display name/alias for the repo var repositoryColor: String? // Hex color for visual identification diff --git a/GitMac/Core/StoreKit/StoreManager.swift b/GitMac/Core/StoreKit/StoreManager.swift index 1f2658e..55d51be 100644 --- a/GitMac/Core/StoreKit/StoreManager.swift +++ b/GitMac/Core/StoreKit/StoreManager.swift @@ -25,6 +25,12 @@ class StoreManager: ObservableObject { private init() { updateListenerTask = listenForTransactions() + // Check license validator immediately for instant Pro access + if GitMacLicenseValidator.shared.hasProFeatures { + isProUser = true + subscriptionStatus = .lifetime + } + Task { await loadProducts() await updateSubscriptionStatus() @@ -98,11 +104,16 @@ class StoreManager: ObservableObject { } } - isProUser = foundActiveSubscription + // Check both StoreKit subscription AND GitMacLicenseValidator + let hasLicenseValidatorAccess = GitMacLicenseValidator.shared.hasProFeatures + isProUser = foundActiveSubscription || hasLicenseValidatorAccess - if !foundActiveSubscription { + if !foundActiveSubscription && !hasLicenseValidatorAccess { purchasedProductIDs.removeAll() subscriptionStatus = .inactive + } else if hasLicenseValidatorAccess && !foundActiveSubscription { + // License validator grants Pro access + subscriptionStatus = .lifetime } } @@ -168,10 +179,11 @@ enum SubscriptionStatus { case unknown case inactive case active(expiresAt: Date) + case lifetime var isActive: Bool { switch self { - case .active: + case .active, .lifetime: return true default: return false @@ -188,6 +200,8 @@ enum SubscriptionStatus { let formatter = DateFormatter() formatter.dateStyle = .medium return "Active until \(formatter.string(from: date))" + case .lifetime: + return "Lifetime License" } } } diff --git a/GitMac/Features/Blame/FileAnnotationView.swift b/GitMac/Features/Blame/FileAnnotationView.swift index 52f62a3..c4f0140 100644 --- a/GitMac/Features/Blame/FileAnnotationView.swift +++ b/GitMac/Features/Blame/FileAnnotationView.swift @@ -239,31 +239,28 @@ struct AnnotationRow: View { } // MARK: - Commit Info - + private var commitInfo: some View { HStack(spacing: 8) { - // Author avatar (first letter) - Text(annotation.author.prefix(1).uppercased()) - .font(.system(size: 10, weight: .bold)) - .foregroundColor(AppTheme.textPrimary) - .frame(width: 24, height: 24) - .background( - Circle() - .fill(authorColor) - ) - + // Author avatar + AvatarImageView( + email: annotation.email, + size: 24, + fallbackInitial: String(annotation.author.prefix(1)) + ) + // Author name Text(annotation.author) .frame(width: 120, alignment: .leading) .lineLimit(1) .truncationMode(.tail) - + // Commit SHA Text(annotation.shortSHA) .font(.system(.caption, design: .monospaced)) .foregroundColor(AppTheme.textPrimary) .frame(width: 60, alignment: .leading) - + // Date Text(annotation.relativeDate) .font(.caption) diff --git a/GitMac/Features/BottomPanel/BottomPanelManager.swift b/GitMac/Features/BottomPanel/BottomPanelManager.swift index ba9ccea..1228c57 100644 --- a/GitMac/Features/BottomPanel/BottomPanelManager.swift +++ b/GitMac/Features/BottomPanel/BottomPanelManager.swift @@ -14,7 +14,8 @@ class BottomPanelManager: ObservableObject { @Published var openTabs: [BottomPanelTab] = [] @Published var activeTabId: UUID? @Published var isPanelVisible: Bool = false - @Published var panelHeight: CGFloat = 300 + @Published var panelHeight: CGFloat = 180 // Will be updated in init based on screen size + @Published var autoCollapseEnabled: Bool = false private let userDefaults = UserDefaults.standard private let openTabsKey = "bottomPanelOpenTabs" @@ -23,6 +24,14 @@ class BottomPanelManager: ObservableObject { private let heightKey = "bottomPanelHeight" private init() { + // Configure auto-collapse for compact screens + if NSScreen.main?.is14InchMacBook == true { + autoCollapseEnabled = true + isPanelVisible = false // Start collapsed on 14" MacBook + panelHeight = 120 // Compact height for 14" + } else { + panelHeight = 180 // Standard height + } restoreState() } diff --git a/GitMac/Features/BottomPanel/ViewModels/RepositoryActivityViewModel.swift b/GitMac/Features/BottomPanel/ViewModels/RepositoryActivityViewModel.swift index f3b2080..d389b83 100644 --- a/GitMac/Features/BottomPanel/ViewModels/RepositoryActivityViewModel.swift +++ b/GitMac/Features/BottomPanel/ViewModels/RepositoryActivityViewModel.swift @@ -13,13 +13,14 @@ import CryptoKit // MARK: - Models struct Contributor: Identifiable, Hashable { - var id: String { email } + let id: String // GitHub username or normalized name let name: String let email: String var commitCount: Int var lastCommitDate: Date? var avatarURL: URL? - + var githubUsername: String? + // Gravatar URL from email var gravatarURL: URL? { let hash = email.lowercased().trimmingCharacters(in: CharacterSet.whitespaces).md5 @@ -111,38 +112,179 @@ class RepositoryActivityViewModel: ObservableObject { private func loadContributors(repoPath: String) async throws -> [Contributor] { // git shortlog -sne --all let result = await shell.execute( - "sh", arguments: ["-c", "git shortlog -sne --all 2>/dev/null | head -20"], + "sh", arguments: ["-c", "git shortlog -sne --all 2>/dev/null"], workingDirectory: repoPath ) - - var contributors: [Contributor] = [] - + + // Parse raw contributors + var rawContributors: [(name: String, email: String, count: Int)] = [] + for line in result.output.components(separatedBy: "\n") where !line.isEmpty { - // Format: " 123\tName " let trimmed = line.trimmingCharacters(in: CharacterSet.whitespaces) guard let tabIndex = trimmed.firstIndex(of: "\t") else { continue } - + let countStr = String(trimmed[.." + if let emailStart = rest.lastIndex(of: "<"), let emailEnd = rest.lastIndex(of: ">") { let name = String(rest[.. $1.commitCount } + + // Try to get GitHub info for unification + let (githubOwner, githubRepo) = await parseGitHubRemote(repoPath: repoPath) + let token = try? await KeychainManager.shared.getGitHubToken() + + var emailToGitHubUser: [String: String] = [:] + + if let owner = githubOwner, let repo = githubRepo, let token = token { + // Load GitHub contributors + let ghContributors = await fetchGitHubContributors(owner: owner, repo: repo, token: token) + + // For each GitHub contributor, get their emails + for ghContrib in ghContributors.prefix(30) { + let emails = await fetchContributorEmails(owner: owner, repo: repo, username: ghContrib.login, token: token) + for email in emails { + emailToGitHubUser[email.lowercased()] = ghContrib.login.lowercased() + } + } + } + + // Build name -> GitHub username map + var nameToGitHubUser: [String: String] = [:] + for raw in rawContributors { + let normalizedName = raw.name.lowercased().trimmingCharacters(in: .whitespaces) + let email = raw.email.lowercased() + if let username = emailToGitHubUser[email] { + nameToGitHubUser[normalizedName] = username + } + } + + // Unify contributors + var unifiedContributors: [String: (name: String, email: String, count: Int, ghUsername: String?)] = [:] + + for raw in rawContributors { + let email = raw.email.lowercased() + let normalizedName = raw.name.lowercased().trimmingCharacters(in: .whitespaces) + + let unifyKey: String + let ghUsername: String? + + if let username = emailToGitHubUser[email] { + unifyKey = "gh:\(username)" + ghUsername = username + } else if let username = nameToGitHubUser[normalizedName] { + unifyKey = "gh:\(username)" + ghUsername = username + } else { + unifyKey = "name:\(normalizedName)" + ghUsername = nil + } + + if var existing = unifiedContributors[unifyKey] { + existing.count += raw.count + unifiedContributors[unifyKey] = existing + } else { + unifiedContributors[unifyKey] = (raw.name, email, raw.count, ghUsername) + } + } + + return unifiedContributors.map { key, value in + Contributor( + id: key, + name: value.name, + email: value.email, + commitCount: value.count, + lastCommitDate: nil, + avatarURL: nil, + githubUsername: value.ghUsername + ) + }.sorted { $0.commitCount > $1.commitCount } + } + + private func parseGitHubRemote(repoPath: String) async -> (owner: String?, repo: String?) { + let result = await shell.execute( + "git", arguments: ["remote", "get-url", "origin"], + workingDirectory: repoPath + ) + + guard result.isSuccess else { return (nil, nil) } + + let url = result.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + if let match = url.range(of: "github.com[/:]([^/]+)/([^/.]+)", options: .regularExpression) { + let path = String(url[match]) + let parts = path.replacingOccurrences(of: "github.com", with: "") + .replacingOccurrences(of: ":", with: "/") + .split(separator: "/") + .map(String.init) + if parts.count >= 2 { + return (parts[0], parts[1].replacingOccurrences(of: ".git", with: "")) + } + } + return (nil, nil) + } + + private func fetchGitHubContributors(owner: String, repo: String, token: String) async -> [(login: String, avatarUrl: String)] { + guard let url = URL(string: "https://api.github.com/repos/\(owner)/\(repo)/contributors?per_page=100") else { + return [] + } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { + return [] + } + + return json.compactMap { item -> (login: String, avatarUrl: String)? in + guard let login = item["login"] as? String, + let avatarUrl = item["avatar_url"] as? String else { return nil } + return (login, avatarUrl) + } + } catch { + return [] + } + } + + private func fetchContributorEmails(owner: String, repo: String, username: String, token: String) async -> [String] { + guard let url = URL(string: "https://api.github.com/repos/\(owner)/\(repo)/commits?author=\(username)&per_page=30") else { + return [] + } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { + return [] + } + + var emails = Set() + for item in json { + if let commit = item["commit"] as? [String: Any], + let author = commit["author"] as? [String: Any], + let email = author["email"] as? String { + emails.insert(email) + } + } + return Array(emails) + } catch { + return [] + } } private func loadRecentCommits(repoPath: String, limit: Int) async throws -> [CommitActivity] { diff --git a/GitMac/Features/BottomPanel/Views/RepositoryActivityPanel.swift b/GitMac/Features/BottomPanel/Views/RepositoryActivityPanel.swift index fcd6fba..2b29caa 100644 --- a/GitMac/Features/BottomPanel/Views/RepositoryActivityPanel.swift +++ b/GitMac/Features/BottomPanel/Views/RepositoryActivityPanel.swift @@ -293,15 +293,11 @@ struct RepositoryActivityPanel: View { VStack(alignment: .leading, spacing: DesignTokens.Spacing.lg) { // Header HStack(spacing: DesignTokens.Spacing.md) { - AsyncImage(url: contributor.gravatarURL) { image in - image.resizable() - } placeholder: { - Image(systemName: "person.circle.fill") - .resizable() - .foregroundColor(AppTheme.textSecondary) - } - .frame(width: 64, height: 64) - .clipShape(Circle()) + AvatarImageView( + email: contributor.email, + size: 64, + fallbackInitial: String(contributor.name.prefix(1)) + ) VStack(alignment: .leading, spacing: 4) { Text(contributor.name) @@ -443,15 +439,11 @@ struct ContributorRow: View { var body: some View { HStack(spacing: DesignTokens.Spacing.sm) { - AsyncImage(url: contributor.gravatarURL) { image in - image.resizable() - } placeholder: { - Image(systemName: "person.circle.fill") - .resizable() - .foregroundColor(AppTheme.textSecondary) - } - .frame(width: 32, height: 32) - .clipShape(Circle()) + AvatarImageView( + email: contributor.email, + size: 32, + fallbackInitial: String(contributor.name.prefix(1)) + ) VStack(alignment: .leading, spacing: 2) { Text(contributor.name) diff --git a/GitMac/Features/CherryPick/CherryPickView.swift b/GitMac/Features/CherryPick/CherryPickView.swift index 60cc8dc..9ac49c6 100644 --- a/GitMac/Features/CherryPick/CherryPickView.swift +++ b/GitMac/Features/CherryPick/CherryPickView.swift @@ -221,15 +221,17 @@ struct CherryPickCommitRow: View { var body: some View { VStack(alignment: .leading, spacing: DesignTokens.Spacing.xs) { HStack { - Circle() - .fill(AppTheme.accent) - .frame(width: 8, height: 8) + AvatarImageView( + email: commit.authorEmail, + size: 20, + fallbackInitial: String(commit.author.prefix(1)) + ) Text(commit.shortSHA) .font(.caption.monospaced()) .foregroundColor(AppTheme.textPrimary) - Text(commit.summary) + Text(commit.cleanSummary) .lineLimit(1) Spacer() diff --git a/GitMac/Features/CommitGraph/CommitGraphView.swift b/GitMac/Features/CommitGraph/CommitGraphView.swift index d73793d..ccc67e1 100644 --- a/GitMac/Features/CommitGraph/CommitGraphView.swift +++ b/GitMac/Features/CommitGraph/CommitGraphView.swift @@ -994,7 +994,7 @@ struct CommitGraphView: View { ) .draggable(CommitTransferable(commit: node.commit)) .accessibilityElement(children: .combine) - .accessibilityLabel("Commit \(node.commit.shortSha) by \(node.commit.author): \(node.commit.summary)") + .accessibilityLabel("Commit \(node.commit.shortSha) by \(node.commit.author): \(node.commit.cleanSummary)") .accessibilityHint("Double tap to view details, drag branch to create PR, context click for more actions") } case .stash(let stashNode): @@ -1537,7 +1537,7 @@ struct GraphRow: View { // Commit message VStack(alignment: .leading, spacing: DesignTokens.Spacing.xxs) { - Text(node.commit.summary) + Text(node.commit.cleanSummary) .font(settings.compactMode ? DesignTokens.Typography.caption : DesignTokens.Typography.callout) .foregroundColor(AppTheme.textPrimary) .lineLimit(1) @@ -2240,7 +2240,10 @@ struct CommitContextMenu: View { } Button { - // Placeholder for multi cherry-pick + NotificationCenter.default.post( + name: .cherryPickCommit, + object: commits + ) } label: { Label("Cherry-pick \(commits.count) Commits...", systemImage: "arrow.right.doc.on.clipboard") } diff --git a/GitMac/Features/CommitGraph/Components/CommitDetailPanel.swift b/GitMac/Features/CommitGraph/Components/CommitDetailPanel.swift index 89c2296..dc44d04 100644 --- a/GitMac/Features/CommitGraph/Components/CommitDetailPanel.swift +++ b/GitMac/Features/CommitGraph/Components/CommitDetailPanel.swift @@ -5,8 +5,13 @@ struct CommitDetailPanel: View { let onClose: () -> Void var onOpenDiff: ((Commit) -> Void)? = nil + @EnvironmentObject var appState: AppState @ObservedObject private var themeManager = ThemeManager.shared @State private var selectedTab: DetailTab = .info + @State private var changedFiles: [CommitFile] = [] + @State private var isLoadingFiles = false + + private let gitEngine = GitEngine() enum DetailTab: String, CaseIterable { case info = "Info" @@ -31,17 +36,28 @@ struct CommitDetailPanel: View { Button { selectedTab = tab } label: { - Text(tab.rawValue) - .font(DesignTokens.Typography.callout) - .fontWeight(selectedTab == tab ? .semibold : .regular) - .foregroundColor( - selectedTab == tab ? AppTheme.accent : theme.textSecondary - ) - .padding(.horizontal, DesignTokens.Spacing.md) - .padding(.vertical, DesignTokens.Spacing.sm) - .background( - selectedTab == tab ? theme.backgroundSecondary : Color.clear - ) + HStack(spacing: 4) { + Text(tab.rawValue) + .font(DesignTokens.Typography.callout) + .fontWeight(selectedTab == tab ? .semibold : .regular) + if tab == .files && !changedFiles.isEmpty { + Text("\(changedFiles.count)") + .font(DesignTokens.Typography.caption2) + .foregroundColor(theme.textMuted) + .padding(.horizontal, 4) + .padding(.vertical, 1) + .background(theme.backgroundSecondary) + .cornerRadius(4) + } + } + .foregroundColor( + selectedTab == tab ? AppTheme.accent : theme.textSecondary + ) + .padding(.horizontal, DesignTokens.Spacing.md) + .padding(.vertical, DesignTokens.Spacing.sm) + .background( + selectedTab == tab ? theme.backgroundSecondary : Color.clear + ) } .buttonStyle(.plain) } @@ -66,6 +82,9 @@ struct CommitDetailPanel: View { } .frame(width: 400) .background(theme.background) + .task(id: commit.sha) { + await loadFiles(for: commit) + } ) } else { return AnyView( @@ -82,6 +101,23 @@ struct CommitDetailPanel: View { } } + private func loadFiles(for commit: Commit) async { + guard let path = appState.currentRepository?.path else { return } + isLoadingFiles = true + defer { isLoadingFiles = false } + + do { + let files = try await gitEngine.getCommitFiles(sha: commit.sha, at: path) + await MainActor.run { + changedFiles = files + } + } catch { + await MainActor.run { + changedFiles = [] + } + } + } + private func detailHeader(commit: Commit, theme: Color.Theme) -> some View { VStack(alignment: .leading, spacing: DesignTokens.Spacing.sm) { HStack { @@ -103,35 +139,29 @@ struct CommitDetailPanel: View { } // Commit summary - Text(commit.summary) + Text(commit.cleanSummary) .font(DesignTokens.Typography.body) .fontWeight(.semibold) .foregroundColor(theme.text) .lineLimit(2) - // Metadata with enhanced icons + // Metadata with avatar HStack(spacing: DesignTokens.Spacing.sm) { - Label { - Text(commit.author) - .font(DesignTokens.Typography.caption) - .foregroundColor(theme.textSecondary) - } icon: { - Image(systemName: "person.crop.circle.fill") - .font(.system(size: 11)) - .foregroundColor(AppTheme.accent) - .symbolRenderingMode(.hierarchical) - } + AvatarImageView( + email: commit.authorEmail, + size: 20, + fallbackInitial: String(commit.author.prefix(1)) + ) - Label { - Text(commit.shortSHA) - .font(DesignTokens.Typography.caption.monospaced()) - .foregroundColor(theme.textSecondary) - } icon: { - Image(systemName: "number.circle.fill") - .font(.system(size: 11)) - .foregroundColor(theme.textMuted) - .symbolRenderingMode(.hierarchical) - } + Text(commit.author) + .font(DesignTokens.Typography.caption) + .foregroundColor(theme.textSecondary) + + Spacer() + + Text(commit.shortSHA) + .font(DesignTokens.Typography.caption.monospaced()) + .foregroundColor(theme.textMuted) } } .padding(DesignTokens.Spacing.md) @@ -196,29 +226,95 @@ struct CommitDetailPanel: View { } private func commitFilesView(commit: Commit, theme: Color.Theme) -> some View { - VStack { - Text("Files changed") - .font(DesignTokens.Typography.caption) - .foregroundColor(theme.textMuted) - - if let filesChanged = commit.filesChanged, filesChanged > 0 { - FileChangesIndicator( - additions: commit.additions ?? 0, - deletions: commit.deletions ?? 0, - filesChanged: filesChanged - ) - .padding() - } else { - Text("No file change information") + VStack(spacing: 0) { + // Header + HStack { + Text("Changed Files") .font(DesignTokens.Typography.caption) + .fontWeight(.semibold) .foregroundColor(theme.textMuted) - .padding() + Spacer() + if !changedFiles.isEmpty { + FileChangesIndicator( + additions: changedFiles.reduce(0) { $0 + $1.additions }, + deletions: changedFiles.reduce(0) { $0 + $1.deletions }, + filesChanged: changedFiles.count, + compact: true + ) + } + } + .padding(.horizontal, DesignTokens.Spacing.md) + .padding(.vertical, DesignTokens.Spacing.sm) + + Divider() + + if isLoadingFiles { + Spacer() + ProgressView() + .scaleEffect(0.8) + Spacer() + } else if changedFiles.isEmpty { + Spacer() + VStack(spacing: 8) { + Image(systemName: "doc.text") + .font(.system(size: 24)) + .foregroundColor(theme.textMuted) + Text("No files changed") + .font(DesignTokens.Typography.caption) + .foregroundColor(theme.textMuted) + } + Spacer() + } else { + ScrollView { + LazyVStack(spacing: 0) { + ForEach(changedFiles) { file in + commitFileRow(file: file, theme: theme) + } + } + } + } + } + } + + private func commitFileRow(file: CommitFile, theme: Color.Theme) -> some View { + HStack(spacing: 8) { + // Status icon + Image(systemName: file.status.icon) + .font(.system(size: 10, weight: .bold)) + .foregroundColor(file.status.color) + .frame(width: 16) + + // File name + Text((file.path as NSString).lastPathComponent) + .font(DesignTokens.Typography.caption) + .foregroundColor(theme.text) + .lineLimit(1) + + Spacer() + + // Additions/deletions + HStack(spacing: 4) { + if file.additions > 0 { + Text("+\(file.additions)") + .font(DesignTokens.Typography.caption2.monospaced()) + .foregroundColor(AppTheme.success) + } + if file.deletions > 0 { + Text("-\(file.deletions)") + .font(DesignTokens.Typography.caption2.monospaced()) + .foregroundColor(AppTheme.error) + } } } + .padding(.horizontal, DesignTokens.Spacing.md) + .padding(.vertical, DesignTokens.Spacing.xs) + .background(theme.background) } private func commitDiffView(commit: Commit, theme: Color.Theme) -> some View { VStack(spacing: DesignTokens.Spacing.md) { + Spacer() + Image(systemName: "doc.text.magnifyingglass") .font(.system(size: 32)) .foregroundColor(theme.textMuted) @@ -227,13 +323,13 @@ struct CommitDetailPanel: View { .font(DesignTokens.Typography.body.weight(.semibold)) .foregroundColor(theme.text) - Text("Open this commit in the full Kaleidoscope view to inspect changes.") + Text("Open this commit in the full diff view to inspect changes.") .font(DesignTokens.Typography.caption) .foregroundColor(theme.textSecondary) .multilineTextAlignment(.center) .padding(.horizontal) - Button { + Button { onOpenDiff?(commit) } label: { Text("Open Diff") @@ -245,9 +341,10 @@ struct CommitDetailPanel: View { .cornerRadius(DesignTokens.CornerRadius.md) } .buttonStyle(.plain) + + Spacer() } .padding() - .frame(maxHeight: .infinity) } private func infoRow(label: String, value: String, theme: Color.Theme) -> some View { diff --git a/GitMac/Features/CommitGraph/Components/GraphMinimapView.swift b/GitMac/Features/CommitGraph/Components/GraphMinimapView.swift index 179af9b..a94b2bb 100644 --- a/GitMac/Features/CommitGraph/Components/GraphMinimapView.swift +++ b/GitMac/Features/CommitGraph/Components/GraphMinimapView.swift @@ -14,17 +14,13 @@ struct GraphMinimapView: View { return VStack(spacing: 0) { // Header - HStack { - Text("OVERVIEW") - .font(DesignTokens.Typography.caption2) - .fontWeight(.semibold) - .foregroundColor(theme.text) - - Spacer() - } - .padding(.horizontal, DesignTokens.Spacing.sm) - .padding(.vertical, DesignTokens.Spacing.xs) - .background(theme.backgroundSecondary) + Text("MAP") + .font(DesignTokens.Typography.caption2) + .fontWeight(.semibold) + .foregroundColor(theme.text) + .frame(maxWidth: .infinity) + .padding(.vertical, DesignTokens.Spacing.xs) + .background(theme.backgroundSecondary) Divider() @@ -36,16 +32,17 @@ struct GraphMinimapView: View { // Commit dots Canvas { ctx, size in - let scale = size.height / max(totalHeight, 1) + let nodeCount = max(nodes.count, 1) + let rowHeight = size.height / CGFloat(nodeCount) for (index, node) in nodes.enumerated() { - let y = CGFloat(index) * 3 * scale // Simplified positioning - let x = CGFloat(node.lane) * 4 + 4 + let y = CGFloat(index) * rowHeight + rowHeight / 2 + let x = CGFloat(node.lane) * 6 + 8 - let dotSize: CGFloat = 2 + let dotSize: CGFloat = max(2, min(rowHeight * 0.6, 4)) let dotRect = CGRect( x: x - dotSize/2, - y: y, + y: y - dotSize/2, width: dotSize, height: dotSize ) diff --git a/GitMac/Features/CommitGraph/Components/PushFetchButtons.swift b/GitMac/Features/CommitGraph/Components/PushFetchButtons.swift index c416cdf..8af97ef 100644 --- a/GitMac/Features/CommitGraph/Components/PushFetchButtons.swift +++ b/GitMac/Features/CommitGraph/Components/PushFetchButtons.swift @@ -20,6 +20,12 @@ struct PushFetchButtons: View { if let status = cicdStatus.lastBuildStatus { CICDBadge(status: status, isLoading: cicdStatus.isLoading) } + + // Sync button (one-click pull + push) + if aheadCount > 0 || behindCount > 0 { + SyncButton(currentBranch: currentBranch) + } + // Push button with enhanced icons Button(action: onPush) { HStack(spacing: DesignTokens.Spacing.xs) { diff --git a/GitMac/Features/CommitGraph/Components/SyncButton.swift b/GitMac/Features/CommitGraph/Components/SyncButton.swift new file mode 100644 index 0000000..57ed9d3 --- /dev/null +++ b/GitMac/Features/CommitGraph/Components/SyncButton.swift @@ -0,0 +1,208 @@ +// +// SyncButton.swift +// GitMac +// +// One-click sync button for pull + push operations +// + +import SwiftUI + +struct SyncButton: View { + @EnvironmentObject var appState: AppState + let currentBranch: Branch? + + @State private var isSyncing = false + @State private var showError = false + @State private var errorMessage = "" + + private var aheadCount: Int { + currentBranch?.upstream?.ahead ?? 0 + } + + private var behindCount: Int { + currentBranch?.upstream?.behind ?? 0 + } + + private var totalChanges: Int { + aheadCount + behindCount + } + + private var syncIcon: String { + if isSyncing { + return "arrow.triangle.2.circlepath" + } else if aheadCount > 0 && behindCount > 0 { + return "arrow.triangle.2.circlepath" + } else if aheadCount > 0 { + return "arrow.up.circle" + } else if behindCount > 0 { + return "arrow.down.circle" + } + return "arrow.triangle.2.circlepath" + } + + private var buttonLabel: String { + if isSyncing { + return "Syncing..." + } else if totalChanges > 0 { + return "Sync (\(totalChanges))" + } + return "Sync" + } + + private var isDisabled: Bool { + isSyncing || currentBranch == nil || totalChanges == 0 + } + + var body: some View { + Button { + performSync() + } label: { + HStack(spacing: DesignTokens.Spacing.xs) { + Image(systemName: syncIcon) + .font(.system(size: DesignTokens.Size.iconSM)) + .rotationEffect(isSyncing ? .degrees(360) : .degrees(0)) + .animation(isSyncing ? .linear(duration: 1).repeatForever(autoreverses: false) : .default, value: isSyncing) + + Text(buttonLabel) + .font(DesignTokens.Typography.callout) + } + .padding(.horizontal, DesignTokens.Spacing.sm) + .padding(.vertical, DesignTokens.Spacing.xs) + } + .buttonStyle(.bordered) + .disabled(isDisabled) + .help(syncTooltip) + .keyboardShortcut("s", modifiers: [.command, .shift]) + .alert("Sync Failed", isPresented: $showError) { + Button("OK", role: .cancel) {} + } message: { + Text(errorMessage) + } + } + + private var syncTooltip: String { + if currentBranch == nil { + return "No branch selected" + } else if totalChanges == 0 { + return "Already up to date" + } else if aheadCount > 0 && behindCount > 0 { + return "Pull \(behindCount) and push \(aheadCount) commits (⌘⇧S)" + } else if behindCount > 0 { + return "Pull \(behindCount) commits (⌘⇧S)" + } else if aheadCount > 0 { + return "Push \(aheadCount) commits (⌘⇧S)" + } + return "Sync with remote (⌘⇧S)" + } + + private func performSync() { + guard let repoPath = appState.currentRepository?.path, + let branch = currentBranch else { + return + } + + isSyncing = true + + Task { + do { + let tracker = GitProgressTracker.shared + let operationId = tracker.startOperation(type: .sync, repositoryPath: repoPath) + + // Step 1: Fetch to update refs + tracker.updateProgress( + operationId: operationId, + phase: .starting, + current: 0, + total: 3, + message: "Fetching updates..." + ) + + try await appState.gitService.fetch(prune: true) + + // Step 2: Pull if behind + if behindCount > 0 { + tracker.updateProgress( + operationId: operationId, + phase: .receiving, + current: 1, + total: 3, + message: "Pulling \(behindCount) commits..." + ) + + try await appState.gitService.pull(rebase: false) + } + + // Step 3: Push if ahead + if aheadCount > 0 { + tracker.updateProgress( + operationId: operationId, + phase: .writing, + current: 2, + total: 3, + message: "Pushing \(aheadCount) commits..." + ) + + try await appState.gitService.push() + } + + // Complete + tracker.updateProgress( + operationId: operationId, + phase: .complete, + current: 3, + total: 3, + message: "Sync complete" + ) + + tracker.completeOperation(operationId: operationId, success: true) + + // Refresh repository + await appState.refresh() + + // Show success notification + await MainActor.run { + let pulledText = behindCount > 0 ? "\(behindCount) pulled" : nil + let pushedText = aheadCount > 0 ? "\(aheadCount) pushed" : nil + let details = [pulledText, pushedText].compactMap { $0 }.joined(separator: ", ") + let message = "Sync Complete: \(details)" + + NotificationManager.shared.show(message, type: .success) + } + + } catch { + await MainActor.run { + errorMessage = error.localizedDescription + showError = true + } + + // Mark operation as failed + if let operation = GitProgressTracker.shared.activeOperations.first(where: { $0.repositoryPath == repoPath }) { + GitProgressTracker.shared.completeOperation(operationId: operation.id, success: false, error: error) + } + } + + await MainActor.run { + isSyncing = false + } + } + } +} + +// MARK: - Preview + +#Preview { + SyncButton(currentBranch: Branch( + name: "main", + fullName: "refs/heads/main", + isRemote: false, + isHead: true, + targetSHA: "abc123def456", + upstream: UpstreamInfo( + name: "origin/main", + ahead: 2, + behind: 1 + ) + )) + .environmentObject(AppState()) + .padding() +} diff --git a/GitMac/Features/History/HistoryView.swift b/GitMac/Features/History/HistoryView.swift index 7a672cc..2317a70 100644 --- a/GitMac/Features/History/HistoryView.swift +++ b/GitMac/Features/History/HistoryView.swift @@ -148,6 +148,7 @@ class HistoryViewModel: ObservableObject { var lines: [BlameLine] = [] var currentSha = "" var currentAuthor = "" + var currentEmail = "" var currentDate = Date() var lineNumber = 0 @@ -161,7 +162,7 @@ class HistoryViewModel: ObservableObject { lines.append(BlameLine( commitSHA: currentSha, author: currentAuthor, - email: "", + email: currentEmail, date: currentDate, message: "", lineNumber: lineNumber, @@ -172,6 +173,10 @@ class HistoryViewModel: ObservableObject { currentSha = String(line.prefix(40)) } else if line.hasPrefix("author ") { currentAuthor = String(line.dropFirst(7)) + } else if line.hasPrefix("author-mail ") { + // Extract email from format + let mailPart = String(line.dropFirst(12)) + currentEmail = mailPart.trimmingCharacters(in: CharacterSet(charactersIn: "<>")) } else if line.hasPrefix("author-time ") { if let timestamp = TimeInterval(line.dropFirst(12)) { currentDate = Date(timeIntervalSince1970: timestamp) @@ -257,17 +262,19 @@ struct FileCommitRow: View { .background(AppTheme.accent.opacity(0.1)) .cornerRadius(4) - Text(commit.summary) + Text(commit.cleanSummary) .font(.system(size: 13, weight: .medium)) .foregroundColor(AppTheme.textPrimary) .lineLimit(1) } HStack { - Image(systemName: "person.fill") - .font(.system(size: 10)) - .foregroundColor(AppTheme.textSecondary) - + AvatarImageView( + email: commit.authorEmail, + size: 16, + fallbackInitial: String(commit.author.prefix(1)) + ) + Text(commit.author) .font(.system(size: 11, weight: .medium)) .foregroundColor(AppTheme.textSecondary) @@ -424,40 +431,42 @@ struct BlameLineRow: View { // Reuse BlameView layout constants private enum Layout { - static let authorIndicatorWidth: CGFloat = DesignTokens.Spacing.xxs + 1 // 3px color bar + static let avatarSize: CGFloat = 18 static let shaColumnWidth: CGFloat = 60 // Width for 7-char SHA static let authorColumnWidth: CGFloat = 100 // Typical author name length static let dateColumnWidth: CGFloat = 50 // Relative date format ("2h ago") static let lineNumberWidth: CGFloat = 40 // Line numbers up to 9999 - static let blameInfoWidth: CGFloat = 240 // Total width of blame metadata section + static let blameInfoWidth: CGFloat = 270 // Total width of blame metadata section } var body: some View { HStack(spacing: 0) { // Blame info HStack(spacing: DesignTokens.Spacing.sm) { - Rectangle() - .fill(color) - .frame(width: Layout.authorIndicatorWidth) + AvatarImageView( + email: line.email, + size: Layout.avatarSize, + fallbackInitial: String(line.author.prefix(1)) + ) Text(line.shortSHA) - .font(.system(size: 11, weight: .bold, design: .monospaced)) // Monospaced & Bold - .foregroundColor(AppTheme.accent) // Accent color + .font(.system(size: 11, weight: .bold, design: .monospaced)) + .foregroundColor(AppTheme.accent) .frame(width: Layout.shaColumnWidth, alignment: .leading) Text(line.author) - .font(.system(size: 11, weight: .medium)) // Medium weight - .foregroundColor(AppTheme.textSecondary) // Secondary text color + .font(.system(size: 11, weight: .medium)) + .foregroundColor(AppTheme.textSecondary) .frame(width: Layout.authorColumnWidth, alignment: .leading) .lineLimit(1) Text(line.relativeDate) .font(.system(size: 11)) - .foregroundColor(AppTheme.textMuted) // Muted text color + .foregroundColor(AppTheme.textMuted) .frame(width: Layout.dateColumnWidth, alignment: .trailing) } .frame(width: Layout.blameInfoWidth) - .padding(.vertical, 1) // Precise 1px padding for tight row spacing + .padding(.vertical, 1) .background(isHovered ? AppTheme.textSecondary.opacity(0.1) : Color.clear) Divider() diff --git a/GitMac/Features/Insights/InsightsView.swift b/GitMac/Features/Insights/InsightsView.swift index 39d534e..12f21d0 100644 --- a/GitMac/Features/Insights/InsightsView.swift +++ b/GitMac/Features/Insights/InsightsView.swift @@ -223,14 +223,11 @@ struct InsightsView: View { ForEach(metrics.topContributors.prefix(5)) { contributor in HStack { - Circle() - .fill(AppTheme.info.opacity(0.3)) - .frame(width: DesignTokens.Size.avatarLG, height: DesignTokens.Size.avatarLG) - .overlay( - Text(String(contributor.name.prefix(1)).uppercased()) - .font(DesignTokens.Typography.callout.bold()) - .foregroundColor(AppTheme.info) - ) + AvatarImageView( + email: contributor.email, + size: DesignTokens.Size.avatarLG, + fallbackInitial: String(contributor.name.prefix(1)) + ) VStack(alignment: .leading, spacing: DesignTokens.Spacing.xxs) { Text(contributor.name) @@ -410,7 +407,7 @@ class InsightsViewModel: ObservableObject { let dateFormatter = ISO8601DateFormatter() let sinceString = dateFormatter.string(from: sinceDate) - // Get commits in time range + // Get commits in time range with SHA for GitHub lookup let commitsResult = await shell.execute( "git", arguments: ["log", "--since=\(sinceString)", "--format=%H|%an|%ae|%aI", "--no-merges"], @@ -445,19 +442,8 @@ class InsightsViewModel: ObservableObject { let sortedDaily = dailyCommits.map { InsightMetrics.DailyCommit(date: $0.key, count: $0.value) } .sorted { $0.date < $1.date } - // Calculate contributors - var contributorCounts: [String: (name: String, email: String, count: Int)] = [:] - for commit in commits { - if let existing = contributorCounts[commit.email] { - contributorCounts[commit.email] = (existing.name, existing.email, existing.count + 1) - } else { - contributorCounts[commit.email] = (commit.author, commit.email, 1) - } - } - - let topContributors = contributorCounts.values - .map { InsightMetrics.InsightContributor(name: $0.name, email: $0.email, commits: $0.count) } - .sorted { $0.commits > $1.commits } + // Unify contributors by normalized name (handles same person with different emails) + let topContributors = await unifyContributors(commits: commits, repoPath: repoPath) // Calculate trends (compare first half to second half) let midpoint = commits.count / 2 @@ -469,7 +455,7 @@ class InsightsViewModel: ObservableObject { totalCommits: commits.count, averageCycleTime: 3600 * 24 * 2, // Placeholder - would need PR data mergeRate: 0.85, // Placeholder - activeContributors: contributorCounts.count, + activeContributors: topContributors.count, commitsTrend: commitsTrend, cycleTimeTrend: nil, mergeRateTrend: nil, @@ -482,4 +468,216 @@ class InsightsViewModel: ObservableObject { isLoading = false } + + /// Unify contributors by looking up GitHub team and commit info + private func unifyContributors( + commits: [(sha: String, author: String, email: String, date: Date)], + repoPath: String + ) async -> [InsightMetrics.InsightContributor] { + // First, try to get GitHub remote info + let remoteResult = await shell.execute( + "git", + arguments: ["remote", "get-url", "origin"], + workingDirectory: repoPath + ) + + var githubOwner: String? + var githubRepo: String? + + if remoteResult.isSuccess { + let url = remoteResult.stdout.trimmingCharacters(in: .whitespacesAndNewlines) + // Parse github.com/owner/repo from URL + if let match = url.range(of: "github.com[/:]([^/]+)/([^/.]+)", options: .regularExpression) { + let path = String(url[match]) + let parts = path.replacingOccurrences(of: "github.com", with: "") + .replacingOccurrences(of: ":", with: "/") + .split(separator: "/") + .map(String.init) + if parts.count >= 2 { + githubOwner = parts[0] + githubRepo = parts[1].replacingOccurrences(of: ".git", with: "") + } + } + } + + // Get GitHub token for API calls + let token = try? await KeychainManager.shared.getGitHubToken() + + // Map email -> GitHub username (for unification) + var emailToGitHubUser: [String: String] = [:] + + if let owner = githubOwner, let repo = githubRepo, let token = token { + // Step 1: Load all contributors from GitHub API (includes all emails associated with commits) + let contributors = await fetchGitHubContributors(owner: owner, repo: repo, token: token) + + // Step 2: For each contributor, get their commits to find all their emails + for contributor in contributors.prefix(20) { // Limit to avoid rate limits + let emails = await fetchContributorEmails( + owner: owner, + repo: repo, + username: contributor.login, + token: token + ) + for email in emails { + emailToGitHubUser[email.lowercased()] = contributor.login.lowercased() + } + } + + // Step 3: For any remaining unknown emails, look up via commit SHA + let unknownEmails = Set(commits.map { $0.email.lowercased() }).subtracting(emailToGitHubUser.keys) + for email in unknownEmails.prefix(10) { + if let commit = commits.first(where: { $0.email.lowercased() == email }) { + if let (username, _) = await fetchGitHubCommitAuthor( + owner: owner, + repo: repo, + sha: commit.sha, + token: token + ) { + emailToGitHubUser[email] = username.lowercased() + } + } + } + } + + // Build a map: normalized name -> GitHub username (if any email for that name has a GitHub user) + var nameToGitHubUser: [String: String] = [:] + for commit in commits { + let normalizedName = commit.author.lowercased().trimmingCharacters(in: .whitespaces) + let email = commit.email.lowercased() + if let username = emailToGitHubUser[email] { + nameToGitHubUser[normalizedName] = username + } + } + + // Group commits by unified identifier (GitHub username preferred) + var unifiedContributors: [String: (name: String, email: String, count: Int)] = [:] + + for commit in commits { + let email = commit.email.lowercased() + let normalizedName = commit.author.lowercased().trimmingCharacters(in: .whitespaces) + + // Priority: 1. GitHub username from email, 2. GitHub username from name, 3. normalized name + let unifyKey: String + if let username = emailToGitHubUser[email] { + unifyKey = "gh:\(username)" + } else if let username = nameToGitHubUser[normalizedName] { + unifyKey = "gh:\(username)" + } else { + unifyKey = "name:\(normalizedName)" + } + + if var existing = unifiedContributors[unifyKey] { + existing.count += 1 + unifiedContributors[unifyKey] = existing + } else { + unifiedContributors[unifyKey] = ( + name: commit.author, + email: email, + count: 1 + ) + } + } + + return unifiedContributors.values + .map { InsightMetrics.InsightContributor(name: $0.name, email: $0.email, commits: $0.count) } + .sorted { $0.commits > $1.commits } + } + + /// Fetch all contributors from GitHub repository + private func fetchGitHubContributors(owner: String, repo: String, token: String) async -> [(login: String, avatarUrl: String)] { + guard let url = URL(string: "https://api.github.com/repos/\(owner)/\(repo)/contributors?per_page=100") else { + return [] + } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { + return [] + } + + return json.compactMap { item -> (login: String, avatarUrl: String)? in + guard let login = item["login"] as? String, + let avatarUrl = item["avatar_url"] as? String else { + return nil + } + return (login, avatarUrl) + } + } catch { + return [] + } + } + + /// Fetch all emails associated with a contributor's commits + private func fetchContributorEmails(owner: String, repo: String, username: String, token: String) async -> [String] { + guard let url = URL(string: "https://api.github.com/repos/\(owner)/\(repo)/commits?author=\(username)&per_page=30") else { + return [] + } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { + return [] + } + + var emails = Set() + for item in json { + if let commit = item["commit"] as? [String: Any], + let author = commit["author"] as? [String: Any], + let email = author["email"] as? String { + emails.insert(email) + } + } + return Array(emails) + } catch { + return [] + } + } + + /// Fetch GitHub commit author info by SHA + private func fetchGitHubCommitAuthor( + owner: String, + repo: String, + sha: String, + token: String + ) async -> (username: String, avatarURL: URL)? { + guard let url = URL(string: "https://api.github.com/repos/\(owner)/\(repo)/commits/\(sha)") else { + return nil + } + + var request = URLRequest(url: url) + request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept") + + do { + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200, + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let author = json["author"] as? [String: Any], + let login = author["login"] as? String, + let avatarURLString = author["avatar_url"] as? String, + let avatarURL = URL(string: avatarURLString) else { + return nil + } + + return (login, avatarURL) + } catch { + return nil + } + } } diff --git a/GitMac/Features/Markdown/MarkdownView.swift b/GitMac/Features/Markdown/MarkdownView.swift index b5e4e2c..cf7be8a 100644 --- a/GitMac/Features/Markdown/MarkdownView.swift +++ b/GitMac/Features/Markdown/MarkdownView.swift @@ -33,6 +33,9 @@ struct MarkdownView: View { /// Threshold for switching to fast renderer private static let fastRenderThreshold = 500 + /// Threshold for switching to ultra-fast chunked renderer + private static let ultraFastRenderThreshold = 3000 + init(content: String, fileName: String? = nil) { self.content = content self.fileName = fileName @@ -50,6 +53,9 @@ struct MarkdownView: View { if hasMermaid { // Use mixed renderer for Mermaid content MermaidMarkdownView(content: content, isDarkMode: isDarkMode) + } else if lineCount > Self.ultraFastRenderThreshold { + // Ultra-fast chunked renderer for very large files + ChunkedMarkdownView(content: content, isDarkMode: isDarkMode) } else if lineCount > Self.fastRenderThreshold { FastMarkdownView(content: content, isDarkMode: isDarkMode) } else { @@ -74,7 +80,11 @@ struct MarkdownView: View { .foregroundColor(AppTheme.accent) } - if lineCount > Self.fastRenderThreshold { + if lineCount > Self.ultraFastRenderThreshold { + Label("Chunked mode", systemImage: "bolt.horizontal.fill") + .font(.caption) + .foregroundColor(AppTheme.accent) + } else if lineCount > Self.fastRenderThreshold { Label("Fast mode", systemImage: "bolt.fill") .font(.caption) .foregroundColor(AppTheme.warning) @@ -244,6 +254,113 @@ private struct MermaidSegmentView: View { // RectCorner is defined in UI/Components/Utilities/ViewModifiers.swift +// MARK: - Chunked Markdown View (For Very Large Files 3000+ lines) + +/// Ultra-fast chunked markdown renderer for files with 3000+ lines +/// Splits content into chunks and uses LazyVStack for virtualized rendering +/// Only renders visible chunks, dramatically reducing memory and CPU usage +struct ChunkedMarkdownView: View { + let content: String + let isDarkMode: Bool + + /// Number of lines per chunk - balance between rendering speed and scroll smoothness + private static let linesPerChunk = 150 + + /// Pre-computed chunks for efficient rendering + private var chunks: [MarkdownChunk] { + let lines = content.components(separatedBy: "\n") + var result: [MarkdownChunk] = [] + var currentIndex = 0 + var chunkId = 0 + + while currentIndex < lines.count { + let endIndex = min(currentIndex + Self.linesPerChunk, lines.count) + let chunkLines = lines[currentIndex.. NSTextView { + let textView = NSTextView() + textView.isEditable = false + textView.isSelectable = true + textView.drawsBackground = false + textView.textContainerInset = .zero + + // Performance optimizations + textView.isAutomaticSpellingCorrectionEnabled = false + textView.isAutomaticQuoteSubstitutionEnabled = false + textView.isAutomaticDashSubstitutionEnabled = false + textView.isAutomaticTextReplacementEnabled = false + textView.isAutomaticLinkDetectionEnabled = true + textView.usesFontPanel = false + textView.usesRuler = false + textView.allowsUndo = false + + // Non-contiguous layout for this chunk + textView.layoutManager?.allowsNonContiguousLayout = true + + // Make it size to content + textView.isVerticallyResizable = true + textView.isHorizontallyResizable = false + textView.textContainer?.widthTracksTextView = true + textView.textContainer?.heightTracksTextView = false + + return textView + } + + func updateNSView(_ textView: NSTextView, context: Context) { + let attributed = FastMarkdownRenderer.render(chunk.content, isDarkMode: isDarkMode) + textView.textStorage?.setAttributedString(attributed) + + // Calculate intrinsic height + if let layoutManager = textView.layoutManager, + let textContainer = textView.textContainer { + layoutManager.ensureLayout(for: textContainer) + let size = layoutManager.usedRect(for: textContainer).size + textView.frame.size.height = size.height + textView.invalidateIntrinsicContentSize() + } + } +} + // MARK: - Fast Markdown View (For Large Files) /// Ultra-fast markdown renderer using TextKit 2 with lazy line rendering diff --git a/GitMac/Features/Settings/SettingsView.swift b/GitMac/Features/Settings/SettingsView.swift index 7ada2bd..aa87667 100644 --- a/GitMac/Features/Settings/SettingsView.swift +++ b/GitMac/Features/Settings/SettingsView.swift @@ -44,6 +44,12 @@ struct SettingsView: View { } .tag("workspace") + WorkspaceManagerTab() + .tabItem { + Label("Manager", systemImage: "chart.bar.doc.horizontal") + } + .tag("manager") + KeyboardShortcutsView() .tabItem { Label("Shortcuts", systemImage: "keyboard") diff --git a/GitMac/Features/Settings/Tabs/SubscriptionSettingsTab.swift b/GitMac/Features/Settings/Tabs/SubscriptionSettingsTab.swift index a5dcd04..2783cbb 100644 --- a/GitMac/Features/Settings/Tabs/SubscriptionSettingsTab.swift +++ b/GitMac/Features/Settings/Tabs/SubscriptionSettingsTab.swift @@ -3,12 +3,13 @@ import SwiftUI struct SubscriptionSettingsView: View { @ObservedObject private var themeManager = ThemeManager.shared @StateObject private var storeManager = StoreManager.shared + @StateObject private var licenseValidator = GitMacLicenseValidator.shared @State private var showSubscriptionSheet = false var body: some View { Form { SettingsSection(title: "Current Plan") { - if storeManager.isProUser { + if licenseValidator.hasProFeatures { HStack { Image(systemName: "star.fill") .foregroundColor(AppTheme.warning) @@ -17,10 +18,17 @@ struct SubscriptionSettingsView: View { .foregroundColor(AppTheme.textPrimary) .fontWeight(.semibold) .foregroundColor(AppTheme.textPrimary) - Text(storeManager.subscriptionStatus.description) - .foregroundColor(AppTheme.textPrimary) - .font(DesignTokens.Typography.caption) - .foregroundColor(AppTheme.textSecondary) + if let info = licenseValidator.licenseInfo { + Text(info.is_lifetime ? "Lifetime License" : "Active") + .foregroundColor(AppTheme.textPrimary) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } else { + Text("Pro Features Unlocked") + .foregroundColor(AppTheme.textPrimary) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } } Spacer() DSButton("Manage", variant: .secondary, size: .sm) { @@ -66,7 +74,7 @@ struct SubscriptionSettingsView: View { .foregroundColor(AppTheme.textSecondary) } Spacer() - if storeManager.isProUser { + if licenseValidator.hasProFeatures { Image(systemName: "checkmark.circle.fill") .foregroundColor(AppTheme.success) } else { diff --git a/GitMac/Features/Settings/Tabs/WorkspaceManagerTab.swift b/GitMac/Features/Settings/Tabs/WorkspaceManagerTab.swift new file mode 100644 index 0000000..aeefc0a --- /dev/null +++ b/GitMac/Features/Settings/Tabs/WorkspaceManagerTab.swift @@ -0,0 +1,1002 @@ +// +// WorkspaceManagerTab.swift +// GitMac +// +// Centralized workspace management for multiple repositories +// + +import SwiftUI + +struct WorkspaceManagerTab: View { + @StateObject private var workspaceManager = WorkspaceManager.shared + @StateObject private var workspaceSettings = WorkspaceSettingsManager.shared + @State private var selectedView: WorkspaceManagerView = .overview + @State private var showingImportSheet = false + @State private var showingExportSheet = false + @State private var showingTemplateEditor = false + @State private var showingGroupEditor = false + @State private var selectedTemplate: WorkspaceTemplate? + @State private var selectedGroup: WorkspaceGroup? + @State private var exportMessage: String? + + enum WorkspaceManagerView: String, CaseIterable { + case overview = "Overview" + case templates = "Templates" + case groups = "Groups" + case repositories = "Repositories" + case bulk = "Bulk Operations" + + var icon: String { + switch self { + case .overview: return "chart.bar.doc.horizontal" + case .templates: return "doc.text.image" + case .groups: return "folder.badge.gearshape" + case .repositories: return "externaldrive.fill.badge.checkmark" + case .bulk: return "square.stack.3d.up" + } + } + } + + var body: some View { + HSplitView { + // Sidebar + VStack(alignment: .leading, spacing: 0) { + Text("Workspace Manager") + .font(DesignTokens.Typography.headline) + .padding() + + Divider() + + List(WorkspaceManagerView.allCases, id: \.self, selection: $selectedView) { view in + Label(view.rawValue, systemImage: view.icon) + .tag(view) + } + .listStyle(.sidebar) + } + .frame(width: 200) + + // Content + VStack(spacing: 0) { + contentView + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .sheet(isPresented: $showingTemplateEditor) { + TemplateEditorSheet( + template: selectedTemplate, + onSave: { template in + if selectedTemplate != nil { + workspaceManager.updateTemplate(template) + } else { + workspaceManager.addTemplate(template) + } + showingTemplateEditor = false + } + ) + } + .sheet(isPresented: $showingGroupEditor) { + GroupEditorSheet( + group: selectedGroup, + onSave: { group in + if selectedGroup != nil { + workspaceManager.updateGroup(group) + } else { + workspaceManager.addGroup(group) + } + showingGroupEditor = false + } + ) + } + .fileImporter( + isPresented: $showingImportSheet, + allowedContentTypes: [.json], + allowsMultipleSelection: false + ) { result in + handleImport(result: result) + } + } + + @ViewBuilder + private var contentView: some View { + switch selectedView { + case .overview: + OverviewView() + case .templates: + TemplatesView( + showingEditor: $showingTemplateEditor, + selectedTemplate: $selectedTemplate + ) + case .groups: + GroupsView( + showingEditor: $showingGroupEditor, + selectedGroup: $selectedGroup + ) + case .repositories: + RepositoriesView() + case .bulk: + BulkOperationsView() + } + } + + private func handleImport(result: Result<[URL], Error>) { + switch result { + case .success(let urls): + guard let url = urls.first else { return } + do { + let data = try Data(contentsOf: url) + try workspaceManager.importConfiguration(from: data, merge: true) + exportMessage = "Configuration imported successfully!" + } catch { + exportMessage = "Import failed: \(error.localizedDescription)" + } + case .failure(let error): + exportMessage = "Import failed: \(error.localizedDescription)" + } + } +} + +// MARK: - Overview View + +private struct OverviewView: View { + @StateObject private var workspaceManager = WorkspaceManager.shared + @StateObject private var workspaceSettings = WorkspaceSettingsManager.shared + @StateObject private var licenseManager = LicenseManager.shared + + var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.lg) { + // Header with License Badge + HStack { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.xs) { + HStack { + Text("Workspace Overview") + .font(DesignTokens.Typography.title2) + + // Pro Badge + if licenseManager.isPro { + HStack(spacing: 4) { + Image(systemName: "star.fill") + .font(.system(size: 10)) + Text("PRO") + .font(.system(size: 10, weight: .bold)) + } + .foregroundColor(.white) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background( + LinearGradient( + colors: [Color.purple, Color.blue], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + ) + .cornerRadius(12) + } + } + Text("Manage configurations for all your repositories") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + Spacer() + } + .padding() + + // Statistics Cards + HStack(spacing: DesignTokens.Spacing.md) { + StatCard( + title: "Repositories", + value: "\(workspaceManager.totalRepositories)", + icon: "folder.fill", + color: .blue + ) + + StatCard( + title: "Groups", + value: "\(workspaceManager.totalGroups)", + icon: "folder.badge.gearshape", + color: .purple + ) + + StatCard( + title: "Templates", + value: "\(workspaceManager.totalTemplates)", + icon: "doc.text.image", + color: .green + ) + + StatCard( + title: "Integrations", + value: "\(workspaceManager.repositoriesWithIntegrations().count)", + icon: "link", + color: .orange + ) + } + .padding(.horizontal) + + // Quick Actions + VStack(alignment: .leading, spacing: DesignTokens.Spacing.md) { + Text("Quick Actions") + .font(DesignTokens.Typography.headline) + .padding(.horizontal) + + HStack(spacing: DesignTokens.Spacing.md) { + QuickActionButton( + title: "Create Template", + icon: "plus.circle.fill", + color: .blue + ) { + // Create template action + } + + QuickActionButton( + title: "Create Group", + icon: "folder.badge.plus", + color: .purple + ) { + // Create group action + } + + QuickActionButton( + title: "Import Config", + icon: "square.and.arrow.down", + color: .green + ) { + // Import action + } + + QuickActionButton( + title: "Export Config", + icon: "square.and.arrow.up", + color: .orange + ) { + // Export action + } + } + .padding(.horizontal) + } + + // Recent Activity + VStack(alignment: .leading, spacing: DesignTokens.Spacing.md) { + Text("Recent Templates") + .font(DesignTokens.Typography.headline) + .padding(.horizontal) + + if workspaceManager.templates.isEmpty { + EmptyStateView( + icon: "doc.text.image", + title: "No Templates Yet", + message: "Create templates to quickly configure repositories" + ) + } else { + ForEach(workspaceManager.templates.prefix(5)) { template in + TemplateRow(template: template) + } + } + } + .padding(.bottom) + } + } + } +} + +// MARK: - Templates View + +private struct TemplatesView: View { + @StateObject private var workspaceManager = WorkspaceManager.shared + @Binding var showingEditor: Bool + @Binding var selectedTemplate: WorkspaceTemplate? + @State private var searchText = "" + + var filteredTemplates: [WorkspaceTemplate] { + if searchText.isEmpty { + return workspaceManager.templates + } + return workspaceManager.templates.filter { + $0.name.localizedCaseInsensitiveContains(searchText) || + $0.description.localizedCaseInsensitiveContains(searchText) || + $0.tags.contains { $0.localizedCaseInsensitiveContains(searchText) } + } + } + + var body: some View { + VStack(spacing: 0) { + // Toolbar + HStack { + TextField("Search templates...", text: $searchText) + .textFieldStyle(.roundedBorder) + .frame(width: 250) + + Spacer() + + Button { + selectedTemplate = nil + showingEditor = true + } label: { + Label("New Template", systemImage: "plus") + } + .buttonStyle(.borderedProminent) + } + .padding() + + Divider() + + // Templates Grid + if filteredTemplates.isEmpty { + EmptyStateView( + icon: "doc.text.image", + title: searchText.isEmpty ? "No Templates" : "No Results", + message: searchText.isEmpty ? "Create your first template" : "Try a different search" + ) + } else { + ScrollView { + LazyVGrid( + columns: [ + GridItem(.adaptive(minimum: 280, maximum: 350), spacing: DesignTokens.Spacing.md) + ], + spacing: DesignTokens.Spacing.md + ) { + ForEach(filteredTemplates) { template in + TemplateCard( + template: template, + onEdit: { + selectedTemplate = template + showingEditor = true + }, + onDelete: { + workspaceManager.deleteTemplate(template) + } + ) + } + } + .padding() + } + } + } + } +} + +// MARK: - Groups View + +private struct GroupsView: View { + @StateObject private var workspaceManager = WorkspaceManager.shared + @Binding var showingEditor: Bool + @Binding var selectedGroup: WorkspaceGroup? + @State private var searchText = "" + @State private var isDiscovering = false + + var filteredGroups: [WorkspaceGroup] { + if searchText.isEmpty { + return workspaceManager.groups + } + return workspaceManager.groups.filter { + $0.name.localizedCaseInsensitiveContains(searchText) || + $0.description.localizedCaseInsensitiveContains(searchText) + } + } + + var body: some View { + VStack(spacing: 0) { + // Toolbar + HStack { + TextField("Search groups...", text: $searchText) + .textFieldStyle(.roundedBorder) + .frame(width: 250) + + Spacer() + + Button { + Task { + isDiscovering = true + let discovered = await workspaceManager.discoverGroups() + workspaceManager.applyDiscoveredGroups(discovered) + isDiscovering = false + } + } label: { + if isDiscovering { + ProgressView() + .scaleEffect(0.8) + .frame(width: 16, height: 16) + } else { + Label("Auto-Discover", systemImage: "sparkles") + } + } + .disabled(isDiscovering) + .help("Automatically detect groups from GitHub organizations") + + Button { + selectedGroup = nil + showingEditor = true + } label: { + Label("New Group", systemImage: "plus") + } + .buttonStyle(.borderedProminent) + } + .padding() + + Divider() + + // Groups List + if filteredGroups.isEmpty { + EmptyStateView( + icon: "folder.badge.gearshape", + title: searchText.isEmpty ? "No Groups" : "No Results", + message: searchText.isEmpty ? "Create your first group" : "Try a different search" + ) + } else { + List(filteredGroups) { group in + GroupRow( + group: group, + onEdit: { + selectedGroup = group + showingEditor = true + }, + onDelete: { + workspaceManager.deleteGroup(group) + } + ) + } + } + } + } +} + +// MARK: - Repositories View + +private struct RepositoryItem: Identifiable { + let id: String + let path: String + let config: WorkspaceConfig + + init(path: String, config: WorkspaceConfig) { + self.id = path + self.path = path + self.config = config + } +} + +private struct RepositoriesView: View { + @StateObject private var workspaceSettings = WorkspaceSettingsManager.shared + @State private var searchText = "" + @State private var selectedRepos: Set = [] + + var filteredRepositories: [RepositoryItem] { + let repos = workspaceSettings.workspaces.sorted { $0.key < $1.key }.map { RepositoryItem(path: $0.key, config: $0.value) } + if searchText.isEmpty { + return repos + } + return repos.filter { + $0.path.localizedCaseInsensitiveContains(searchText) || + ($0.config.displayName?.localizedCaseInsensitiveContains(searchText) ?? false) + } + } + + var body: some View { + VStack(spacing: 0) { + // Toolbar + HStack { + TextField("Search repositories...", text: $searchText) + .textFieldStyle(.roundedBorder) + .frame(width: 250) + + Spacer() + + if !selectedRepos.isEmpty { + Text("\(selectedRepos.count) selected") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + } + .padding() + + Divider() + + // Repositories Table + if filteredRepositories.isEmpty { + EmptyStateView( + icon: "externaldrive.fill.badge.checkmark", + title: "No Repositories", + message: "Open repositories to see them here" + ) + } else { + Table(filteredRepositories) { + TableColumn("Repository") { item in + VStack(alignment: .leading, spacing: 2) { + Text(item.config.displayName ?? item.path) + .font(DesignTokens.Typography.body) + Text(item.path) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + } + + TableColumn("Main Branch") { item in + Text(item.config.mainBranchName ?? "main") + .font(DesignTokens.Typography.callout.monospaced()) + } + + TableColumn("Integrations") { item in + IntegrationsTagsView(config: item.config) + } + } + } + } + } +} + +// MARK: - Bulk Operations View + +private struct BulkOperationsView: View { + @StateObject private var workspaceManager = WorkspaceManager.shared + @StateObject private var workspaceSettings = WorkspaceSettingsManager.shared + @State private var selectedTemplate: WorkspaceTemplate? + @State private var selectedRepos: Set = [] + @State private var showingConfirmation = false + + var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.lg) { + Text("Bulk Operations") + .font(DesignTokens.Typography.title2) + .padding() + + // Apply Template to Multiple Repos + GroupBox("Apply Template to Repositories") { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.md) { + Text("Select a template and repositories to apply it to") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + + Picker("Template", selection: $selectedTemplate) { + Text("Select a template...").tag(nil as WorkspaceTemplate?) + ForEach(workspaceManager.templates) { template in + Text(template.name).tag(template as WorkspaceTemplate?) + } + } + + MultipleRepositorySelector(selectedRepos: $selectedRepos) + + Button("Apply Template") { + showingConfirmation = true + } + .disabled(selectedTemplate == nil || selectedRepos.isEmpty) + .buttonStyle(.borderedProminent) + } + .padding() + } + .padding(.horizontal) + } + } + .alert("Apply Template?", isPresented: $showingConfirmation) { + Button("Cancel", role: .cancel) { } + Button("Apply", role: .destructive) { + if let template = selectedTemplate { + workspaceManager.applyConfigToMultipleRepos( + template.config, + repositories: Array(selectedRepos) + ) + selectedRepos.removeAll() + } + } + } message: { + Text("This will apply '\(selectedTemplate?.name ?? "")' template to \(selectedRepos.count) repositories. This will overwrite their current configurations.") + } + } +} + +// MARK: - Helper Components + +private struct StatCard: View { + let title: String + let value: String + let icon: String + let color: Color + + var body: some View { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.sm) { + HStack { + Image(systemName: icon) + .foregroundColor(color) + .font(.title2) + Spacer() + } + + Text(value) + .font(.system(size: 32, weight: .bold)) + + Text(title) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background(AppTheme.backgroundSecondary) + .cornerRadius(DesignTokens.CornerRadius.lg) + } +} + +private struct QuickActionButton: View { + let title: String + let icon: String + let color: Color + let action: () -> Void + + var body: some View { + Button(action: action) { + VStack(spacing: DesignTokens.Spacing.xs) { + Image(systemName: icon) + .font(.title2) + .foregroundColor(color) + Text(title) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textPrimary) + } + .frame(maxWidth: .infinity) + .padding() + .background(AppTheme.backgroundSecondary) + .cornerRadius(DesignTokens.CornerRadius.md) + } + .buttonStyle(.plain) + } +} + +private struct TemplateRow: View { + let template: WorkspaceTemplate + + var body: some View { + HStack(spacing: DesignTokens.Spacing.md) { + Image(systemName: template.icon) + .foregroundColor(Color(template.color)) + .frame(width: 32, height: 32) + + VStack(alignment: .leading, spacing: 2) { + Text(template.name) + .font(DesignTokens.Typography.body) + Text(template.description) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + + Spacer() + + ForEach(template.tags.prefix(3), id: \.self) { tag in + Text(tag) + .font(DesignTokens.Typography.caption) + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(AppTheme.accent.opacity(0.1)) + .foregroundColor(AppTheme.accent) + .cornerRadius(4) + } + } + .padding() + .background(AppTheme.backgroundSecondary) + .cornerRadius(DesignTokens.CornerRadius.md) + .padding(.horizontal) + } +} + +private struct TemplateCard: View { + let template: WorkspaceTemplate + let onEdit: () -> Void + let onDelete: () -> Void + + var body: some View { + VStack(alignment: .leading, spacing: DesignTokens.Spacing.md) { + HStack { + Image(systemName: template.icon) + .foregroundColor(Color(template.color)) + .font(.title2) + + Spacer() + + Menu { + Button("Edit") { onEdit() } + Button("Duplicate") { /* Duplicate */ } + Divider() + Button("Delete", role: .destructive) { onDelete() } + } label: { + Image(systemName: "ellipsis.circle") + .foregroundColor(AppTheme.textSecondary) + } + .menuStyle(.borderlessButton) + } + + Text(template.name) + .font(DesignTokens.Typography.headline) + + Text(template.description) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + .lineLimit(2) + + FlowLayout(spacing: 4) { + ForEach(template.tags, id: \.self) { tag in + Text(tag) + .font(DesignTokens.Typography.caption) + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(AppTheme.accent.opacity(0.1)) + .foregroundColor(AppTheme.accent) + .cornerRadius(4) + } + } + + Divider() + + HStack { + Text("Modified: \(template.modifiedAt, formatter: dateFormatter)") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textMuted) + Spacer() + } + } + .padding() + .background(AppTheme.backgroundSecondary) + .cornerRadius(DesignTokens.CornerRadius.lg) + } +} + +private struct GroupRow: View { + let group: WorkspaceGroup + let onEdit: () -> Void + let onDelete: () -> Void + + var body: some View { + HStack(spacing: DesignTokens.Spacing.md) { + Image(systemName: group.icon) + .foregroundColor(Color(group.color)) + .frame(width: 32, height: 32) + + VStack(alignment: .leading, spacing: 4) { + Text(group.name) + .font(DesignTokens.Typography.body) + Text(group.description) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + Text("\(group.repositoryCount) repositories") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textMuted) + } + + Spacer() + + Button("Edit") { onEdit() } + .buttonStyle(.borderless) + + Button { + onDelete() + } label: { + Image(systemName: "trash") + .foregroundColor(.red) + } + .buttonStyle(.borderless) + } + .padding(.vertical, 4) + } +} + +private struct IntegrationsTagsView: View { + let config: WorkspaceConfig + + var integrations: [String] { + var result: [String] = [] + if config.taigaProjectId != nil { result.append("Taiga") } + if config.jiraProjectKey != nil { result.append("Jira") } + if config.linearTeamId != nil { result.append("Linear") } + if config.notionDatabaseId != nil { result.append("Notion") } + if config.codeBuildProjectName != nil { result.append("AWS") } + return result + } + + var body: some View { + HStack(spacing: 4) { + if integrations.isEmpty { + Text("None") + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textMuted) + } else { + ForEach(integrations, id: \.self) { integration in + Text(integration) + .font(DesignTokens.Typography.caption) + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(AppTheme.accent.opacity(0.1)) + .foregroundColor(AppTheme.accent) + .cornerRadius(4) + } + } + } + } +} + +private struct EmptyStateView: View { + let icon: String + let title: String + let message: String + + var body: some View { + VStack(spacing: DesignTokens.Spacing.md) { + Image(systemName: icon) + .font(.system(size: 48)) + .foregroundColor(AppTheme.textMuted) + + Text(title) + .font(DesignTokens.Typography.headline) + .foregroundColor(AppTheme.textSecondary) + + Text(message) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textMuted) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding() + } +} + +private struct MultipleRepositorySelector: View { + @StateObject private var workspaceSettings = WorkspaceSettingsManager.shared + @Binding var selectedRepos: Set + + var body: some View { + List(selection: $selectedRepos) { + ForEach(Array(workspaceSettings.workspaces.keys.sorted()), id: \.self) { path in + HStack { + Text(workspaceSettings.workspaces[path]?.displayName ?? "Unknown") + Spacer() + Text(path) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + } + .tag(path) + } + } + .frame(height: 200) + } +} + +// MARK: - Sheets + +private struct TemplateEditorSheet: View { + let template: WorkspaceTemplate? + let onSave: (WorkspaceTemplate) -> Void + @Environment(\.dismiss) private var dismiss + + @State private var name: String + @State private var description: String + @State private var icon: String + @State private var color: String + @State private var tags: String + + init(template: WorkspaceTemplate?, onSave: @escaping (WorkspaceTemplate) -> Void) { + self.template = template + self.onSave = onSave + _name = State(initialValue: template?.name ?? "") + _description = State(initialValue: template?.description ?? "") + _icon = State(initialValue: template?.icon ?? "folder.fill") + _color = State(initialValue: template?.color ?? "blue") + _tags = State(initialValue: template?.tags.joined(separator: ", ") ?? "") + } + + var body: some View { + VStack(spacing: DesignTokens.Spacing.md) { + Text(template == nil ? "New Template" : "Edit Template") + .font(DesignTokens.Typography.title2) + .padding() + + Form { + TextField("Name", text: $name) + TextField("Description", text: $description) + TextField("Icon (SF Symbol)", text: $icon) + TextField("Color", text: $color) + TextField("Tags (comma-separated)", text: $tags) + } + .padding() + + HStack { + Button("Cancel") { + dismiss() + } + .buttonStyle(.bordered) + + Spacer() + + Button("Save") { + let tagArray = tags.split(separator: ",").map { $0.trimmingCharacters(in: .whitespaces) } + let config = template?.config ?? WorkspaceConfig() + let newTemplate = WorkspaceTemplate( + id: template?.id ?? UUID(), + name: name, + description: description, + config: config, + icon: icon, + color: color, + tags: tagArray + ) + onSave(newTemplate) + } + .buttonStyle(.borderedProminent) + .disabled(name.isEmpty) + } + .padding() + } + .frame(width: 500, height: 400) + } +} + +private struct GroupEditorSheet: View { + let group: WorkspaceGroup? + let onSave: (WorkspaceGroup) -> Void + @Environment(\.dismiss) private var dismiss + + @State private var name: String + @State private var description: String + @State private var icon: String + @State private var color: String + + init(group: WorkspaceGroup?, onSave: @escaping (WorkspaceGroup) -> Void) { + self.group = group + self.onSave = onSave + _name = State(initialValue: group?.name ?? "") + _description = State(initialValue: group?.description ?? "") + _icon = State(initialValue: group?.icon ?? "folder.badge.gearshape") + _color = State(initialValue: group?.color ?? "purple") + } + + var body: some View { + VStack(spacing: DesignTokens.Spacing.md) { + Text(group == nil ? "New Group" : "Edit Group") + .font(DesignTokens.Typography.title2) + .padding() + + Form { + TextField("Name", text: $name) + TextField("Description", text: $description) + TextField("Icon (SF Symbol)", text: $icon) + TextField("Color", text: $color) + } + .padding() + + HStack { + Button("Cancel") { + dismiss() + } + .buttonStyle(.bordered) + + Spacer() + + Button("Save") { + let newGroup = WorkspaceGroup( + id: group?.id ?? UUID(), + name: name, + description: description, + repositoryPaths: group?.repositoryPaths ?? [], + sharedConfig: group?.sharedConfig, + icon: icon, + color: color + ) + onSave(newGroup) + } + .buttonStyle(.borderedProminent) + .disabled(name.isEmpty) + } + .padding() + } + .frame(width: 500, height: 350) + } +} + +// MARK: - Formatters + +private let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .none + return formatter +}() + +// MARK: - Previews + +#Preview("Workspace Manager") { + WorkspaceManagerTab() + .frame(width: 900, height: 600) +} diff --git a/GitMac/Services/LicenseValidator.swift b/GitMac/Services/LicenseValidator.swift deleted file mode 100644 index 4069464..0000000 --- a/GitMac/Services/LicenseValidator.swift +++ /dev/null @@ -1,338 +0,0 @@ -import Foundation - -// MARK: - License Models - -struct LicenseValidationRequest: Codable { - let license_key: String - let device_id: String - let device_name: String -} - -struct LicenseValidationResponse: Codable { - let valid: Bool - let license: LicenseInfo? - let error: String? -} - -struct LicenseInfo: Codable { - let key: String - let email: String - let product: String - let status: String - let expires_at: String? - let is_lifetime: Bool -} - -// MARK: - License Validator - -@MainActor -class GitMacLicenseValidator: ObservableObject { - @Published var isLicenseValid: Bool = false - @Published var licenseInfo: LicenseInfo? - @Published var errorMessage: String? - - // Production License Server - private let serverURL = "https://gitmac-license-server-production.up.railway.app" - - // Development bypass (set to true for personal use) - private let isDevelopmentMode = false - - // Hardcoded developer license for offline use - private let developerLicenseKey = "DEV-PERSONAL-LICENSE-KEY" - - // Singleton - static let shared = GitMacLicenseValidator() - - private init() { - // Load cached license on init - loadCachedLicense() - } - - // MARK: - Device ID - - /// Get unique device identifier - private func getDeviceID() -> String { - // Use hardware UUID as device ID - if let uuid = getMacSerialNumber() { - return uuid - } - - // Fallback to system identifier - return getSystemIdentifier() - } - - private func getMacSerialNumber() -> String? { - let platformExpert = IOServiceGetMatchingService( - kIOMainPortDefault, - IOServiceMatching("IOPlatformExpertDevice") - ) - - guard platformExpert != 0 else { return nil } - - defer { IOObjectRelease(platformExpert) } - - guard let serialNumber = IORegistryEntryCreateCFProperty( - platformExpert, - kIOPlatformSerialNumberKey as CFString, - kCFAllocatorDefault, - 0 - ).takeRetainedValue() as? String else { - return nil - } - - return serialNumber - } - - private func getSystemIdentifier() -> String { - var size = 0 - sysctlbyname("kern.uuid", nil, &size, nil, 0) - var uuid = [CChar](repeating: 0, count: size) - sysctlbyname("kern.uuid", &uuid, &size, nil, 0) - return String(decoding: uuid.map { UInt8(bitPattern: $0) }, as: UTF8.self).trimmingCharacters(in: CharacterSet(["\0"])) - } - - private func getDeviceName() -> String { - return Host.current().localizedName ?? "Mac" - } - - // MARK: - License Validation - - /// Validate license key - func validateLicense(_ licenseKey: String) async -> Bool { - // Development bypass for personal use - if isDevelopmentMode || licenseKey == developerLicenseKey { - await MainActor.run { - self.isLicenseValid = true - self.licenseInfo = LicenseInfo( - key: licenseKey, - email: "developer@local", - product: "GitMac Pro", - status: "active", - expires_at: nil, - is_lifetime: true - ) - self.errorMessage = nil - } - cacheLicense(licenseKey) - return true - } - - let deviceID = getDeviceID() - let deviceName = getDeviceName() - - let request = LicenseValidationRequest( - license_key: licenseKey, - device_id: deviceID, - device_name: deviceName - ) - - guard let url = URL(string: "\(serverURL)/api/validate") else { - await MainActor.run { - self.errorMessage = "Invalid server URL" - self.isLicenseValid = false - } - return false - } - - var urlRequest = URLRequest(url: url) - urlRequest.httpMethod = "POST" - urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") - - do { - urlRequest.httpBody = try JSONEncoder().encode(request) - - let (data, response) = try await URLSession.shared.data(for: urlRequest) - - guard let httpResponse = response as? HTTPURLResponse, - httpResponse.statusCode == 200 else { - await MainActor.run { - self.errorMessage = "Server error" - self.isLicenseValid = false - } - return false - } - - let validationResponse = try JSONDecoder().decode( - LicenseValidationResponse.self, - from: data - ) - - await MainActor.run { - self.isLicenseValid = validationResponse.valid - self.licenseInfo = validationResponse.license - self.errorMessage = validationResponse.error - - if validationResponse.valid { - // Cache license locally - self.cacheLicense(licenseKey) - } - } - - return validationResponse.valid - - } catch { - await MainActor.run { - self.errorMessage = "Network error: \(error.localizedDescription)" - self.isLicenseValid = false - } - return false - } - } - - // MARK: - License Caching - - private func cacheLicense(_ licenseKey: String) { - UserDefaults.standard.set(licenseKey, forKey: "cached_license_key") - UserDefaults.standard.set(Date(), forKey: "license_validated_at") - } - - private func loadCachedLicense() { - guard let cachedKey = UserDefaults.standard.string(forKey: "cached_license_key"), - let validatedAt = UserDefaults.standard.object(forKey: "license_validated_at") as? Date else { - return - } - - // Development bypass always works - if isDevelopmentMode || cachedKey == developerLicenseKey { - isLicenseValid = true - return - } - - // Revalidate if cache is older than 7 days - let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: Date())! - if validatedAt < sevenDaysAgo { - Task { - // Try to revalidate, but keep cached state if offline - let result = await validateLicense(cachedKey) - if !result { - // If revalidation fails, trust the cache for offline use - await MainActor.run { - self.isLicenseValid = true - self.errorMessage = "Using cached license (offline mode)" - } - } - } - } else { - // Use cached validation - isLicenseValid = true - } - } - - func clearLicense() { - UserDefaults.standard.removeObject(forKey: "cached_license_key") - UserDefaults.standard.removeObject(forKey: "license_validated_at") - isLicenseValid = false - licenseInfo = nil - } - - // MARK: - Feature Checks - - /// Check if user has Pro features - var hasProFeatures: Bool { - return isLicenseValid - } -} - -// MARK: - Usage Example in SwiftUI - -/* -import SwiftUI - -struct LicenseActivationView: View { - @StateObject private var validator = GitMacLicenseValidator.shared - @State private var licenseKey = "" - @State private var isValidating = false - - var body: some View { - VStack(spacing: 20) { - Text("Activate GitMac Pro") - .font(.title) - - DSTextField(placeholder: "License Key (XXXX-XXXX-XXXX-XXXX)", text: $licenseKey) - .frame(width: 300) - - if let error = validator.errorMessage { - Text(error) - .foregroundColor(AppTheme.error) - .font(.caption) - } - - Button(action: { - Task { - isValidating = true - await validator.validateLicense(licenseKey) - isValidating = false - } - }) { - if isValidating { - ProgressView() - .progressViewStyle(.linear) - .frame(width: 200) - } else { - Text("Activate License") - } - } - .disabled(licenseKey.isEmpty || isValidating) - - if validator.isLicenseValid { - VStack { - Image(systemName: "checkmark.circle.fill") - .foregroundColor(AppTheme.success) - .font(.system(size: 48)) - - Text("License Activated!") - .font(.headline) - - if let info = validator.licenseInfo { - Text(info.email) - .font(.caption) - - if info.is_lifetime { - Text("Lifetime License") - .font(.caption2) - .foregroundColor(AppTheme.success) - } else if let expiresAt = info.expires_at { - Text("Expires: \(expiresAt)") - .font(.caption2) - } - } - } - .padding() - } - } - .padding() - } -} - -// Usage in App: -struct ContentView: View { - @StateObject private var validator = GitMacLicenseValidator.shared - - var body: some View { - VStack { - if validator.hasProFeatures { - // Show Pro UI - Text("Welcome to GitMac Pro!") - .font(.title) - } else { - // Show Free UI with upgrade prompt - VStack { - Text("GitMac Free") - .font(.title) - - Button("Upgrade to Pro") { - // Show license activation view - } - } - } - } - } -} - -// Check feature availability: -if GitMacLicenseValidator.shared.canUseFeature(.aiCommits) { - // Show AI commit button -} else { - // Show upgrade prompt -} -*/ diff --git a/GitMac/UI/Components/AvatarImageView.swift b/GitMac/UI/Components/AvatarImageView.swift index 3e20585..2575468 100644 --- a/GitMac/UI/Components/AvatarImageView.swift +++ b/GitMac/UI/Components/AvatarImageView.swift @@ -113,7 +113,8 @@ struct AvatarImageView: View { private func gravatarURL() -> URL? { guard !emailHash.isEmpty else { return nil } - return URL(string: "https://www.gravatar.com/avatar/\(emailHash)?s=\(pixelSize)&d=404") + // Use identicon as fallback instead of 404 - always returns an image + return URL(string: "https://www.gravatar.com/avatar/\(emailHash)?s=\(pixelSize)&d=identicon") } private func loadAvatar() async { diff --git a/GitMac/UI/Components/GitOperationProgressView.swift b/GitMac/UI/Components/GitOperationProgressView.swift new file mode 100644 index 0000000..b44dbb7 --- /dev/null +++ b/GitMac/UI/Components/GitOperationProgressView.swift @@ -0,0 +1,128 @@ +// +// GitOperationProgressView.swift +// GitMac +// +// UI component for displaying git operation progress +// + +import SwiftUI + +struct GitOperationProgressView: View { + @ObservedObject var tracker = GitProgressTracker.shared + + var body: some View { + VStack(alignment: .trailing, spacing: DesignTokens.Spacing.sm) { + ForEach(tracker.activeOperations) { operation in + OperationProgressCard(operation: operation) + .transition(.move(edge: .trailing).combined(with: .opacity)) + } + } + .padding(DesignTokens.Spacing.md) + } +} + +struct OperationProgressCard: View { + let operation: GitProgressTracker.GitOperation + @State private var isHovered = false + + var body: some View { + HStack(spacing: DesignTokens.Spacing.sm) { + // Icon + Image(systemName: operation.type.icon) + .font(.system(size: DesignTokens.Size.iconMD)) + .foregroundColor(iconColor) + .frame(width: 20, height: 20) + + // Content + VStack(alignment: .leading, spacing: 4) { + Text(operation.message) + .font(DesignTokens.Typography.callout) + .foregroundColor(AppTheme.textPrimary) + + HStack(spacing: DesignTokens.Spacing.xs) { + Text(operation.phase.description) + .font(DesignTokens.Typography.caption) + .foregroundColor(AppTheme.textSecondary) + + if !operation.progress.isIndeterminate { + Text("·") + .foregroundColor(AppTheme.textMuted) + Text("\(Int(operation.progress.percentage))%") + .font(DesignTokens.Typography.caption.monospacedDigit()) + .foregroundColor(AppTheme.textSecondary) + } + } + + // Progress bar + if operation.isActive { + ProgressView(value: operation.progress.percentage, total: 100) + .progressViewStyle(.linear) + .tint(AppTheme.accent) + .frame(height: 4) + } + } + + // Close button (on hover) + if isHovered { + Button { + GitProgressTracker.shared.cancelOperation(operationId: operation.id) + } label: { + Image(systemName: "xmark") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(AppTheme.textMuted) + } + .buttonStyle(.plain) + .frame(width: 16, height: 16) + } + } + .padding(DesignTokens.Spacing.sm) + .frame(width: 280) + .background(backgroundMaterial) + .cornerRadius(DesignTokens.CornerRadius.lg) + .shadow(color: Color.black.opacity(0.15), radius: 8, x: 0, y: 4) + .onHover { hovering in + withAnimation(.easeInOut(duration: 0.15)) { + isHovered = hovering + } + } + } + + private var iconColor: Color { + switch operation.phase { + case .complete: + return AppTheme.success + case .failed: + return AppTheme.error + default: + return AppTheme.accent + } + } + + @ViewBuilder + private var backgroundMaterial: some View { + if #available(macOS 12.0, *) { + Color(nsColor: .controlBackgroundColor) + .overlay(Material.ultraThinMaterial) + } else { + Color(nsColor: .controlBackgroundColor) + } + } +} + +// MARK: - Preview + +#Preview { + ZStack { + Color.gray.opacity(0.2) + .ignoresSafeArea() + + VStack { + Spacer() + HStack { + Spacer() + GitOperationProgressView() + } + } + } + .frame(width: 800, height: 600) +} diff --git a/GitMac/UI/Theme/DesignTokens.swift b/GitMac/UI/Theme/DesignTokens.swift index 167d122..fab9e58 100644 --- a/GitMac/UI/Theme/DesignTokens.swift +++ b/GitMac/UI/Theme/DesignTokens.swift @@ -75,6 +75,31 @@ enum DesignTokens { static let branchName: Font = .system(size: 12, weight: .medium) static let diffLine: Font = .system(size: 12, design: .monospaced) + // Compact variants for smaller screens (14" MacBook) + static let compactCaption2: Font = .system(size: 9) + static let compactCaption: Font = .system(size: 10) + static let compactCallout: Font = .system(size: 11) + static let compactBody: Font = .system(size: 12) + + // Git-specific compact variants + static let compactCommitHash: Font = .system(size: 10, design: .monospaced) + static let compactCommitMessage: Font = .system(size: 12) + static let compactBranchName: Font = .system(size: 11, weight: .medium) + static let compactDiffLine: Font = .system(size: 11, design: .monospaced) + + // Adaptive font helpers + static func adaptiveCommitHash() -> Font { + NSScreen.main?.is14InchMacBook == true ? compactCommitHash : commitHash + } + + static func adaptiveCommitMessage() -> Font { + NSScreen.main?.is14InchMacBook == true ? compactCommitMessage : commitMessage + } + + static func adaptiveBranchName() -> Font { + NSScreen.main?.is14InchMacBook == true ? compactBranchName : branchName + } + // MARK: - NSFont Helpers (for AppKit components) /// Convierte tokens de Font a NSFont para uso en componentes AppKit @@ -150,29 +175,43 @@ enum DesignTokens { enum Layout { /// Sidebar metrics (left panel) enum Sidebar { - static let minWidth: CGFloat = 120 - static let idealWidth: CGFloat = 180 - static let maxWidth: CGFloat = 300 + static let minWidth: CGFloat = 100 + static let idealWidth: CGFloat = 140 + static let maxWidth: CGFloat = 250 + + // Adaptive defaults based on screen size + static var defaultWidth: CGFloat { + NSScreen.main?.is14InchMacBook == true ? 140 : 180 + } } /// Staging Panel metrics (right inspector) enum StagingPanel { - static let minWidth: CGFloat = 180 - static let idealWidth: CGFloat = 260 - static let maxWidth: CGFloat = 380 + static let minWidth: CGFloat = 140 + static let idealWidth: CGFloat = 200 + static let maxWidth: CGFloat = 320 + + // Adaptive defaults based on screen size + static var defaultWidth: CGFloat { + NSScreen.main?.is14InchMacBook == true ? 200 : 260 + } } /// Bottom Panel metrics enum BottomPanel { - static let minHeight: CGFloat = 100 - static let maxHeight: CGFloat = 500 - static let defaultHeight: CGFloat = 180 + static let minHeight: CGFloat = 80 + static let maxHeight: CGFloat = 400 + + // Adaptive defaults based on screen size + static var defaultHeight: CGFloat { + NSScreen.main?.is14InchMacBook == true ? 120 : 180 + } } /// Window metrics - compact with all 3 panels enum Window { - static let minWidth: CGFloat = 580 // 120 + 100 + 180 + margins - static let minHeight: CGFloat = 380 + static let minWidth: CGFloat = 520 // Optimized for 14" MacBook + static let minHeight: CGFloat = 340 } /// CI/CD Panel metrics @@ -227,17 +266,61 @@ enum DesignTokens { static let iconLG: CGFloat = 20 static let iconXL: CGFloat = 24 + // Compact icon variants (14" MacBook) + static let compactIconXS: CGFloat = 11 + static let compactIconSM: CGFloat = 12 + static let compactIconMD: CGFloat = 14 + static let compactIconLG: CGFloat = 18 + static let compactIconXL: CGFloat = 22 + // Buttons static let buttonHeightSM: CGFloat = 24 static let buttonHeightMD: CGFloat = 28 static let buttonHeightLG: CGFloat = 32 + // Compact button variants + static let compactButtonHeightSM: CGFloat = 22 + static let compactButtonHeightMD: CGFloat = 24 + static let compactButtonHeightLG: CGFloat = 28 + // Avatars static let avatarXS: CGFloat = 16 static let avatarSM: CGFloat = 20 static let avatarMD: CGFloat = 24 static let avatarLG: CGFloat = 32 static let avatarXL: CGFloat = 40 + + // Compact avatar variants + static let compactAvatarXS: CGFloat = 14 + static let compactAvatarSM: CGFloat = 18 + static let compactAvatarMD: CGFloat = 22 + static let compactAvatarLG: CGFloat = 28 + static let compactAvatarXL: CGFloat = 36 + + // Adaptive helpers + static func adaptiveIcon(_ standard: CGFloat) -> CGFloat { + guard NSScreen.main?.is14InchMacBook == true else { return standard } + switch standard { + case iconXS: return compactIconXS + case iconSM: return compactIconSM + case iconMD: return compactIconMD + case iconLG: return compactIconLG + case iconXL: return compactIconXL + default: return standard - 2 + } + } + + static func adaptiveAvatar(_ standard: CGFloat) -> CGFloat { + guard NSScreen.main?.is14InchMacBook == true else { return standard } + switch standard { + case avatarXS: return compactAvatarXS + case avatarSM: return compactAvatarSM + case avatarMD: return compactAvatarMD + case avatarLG: return compactAvatarLG + case avatarXL: return compactAvatarXL + default: return standard - 4 + } + } } // MARK: - Sizing (Alias for backwards compatibility) @@ -407,4 +490,27 @@ extension View { func padding(_ size: DesignTokens.Spacing.Type) -> some View { self.padding(DesignTokens.Spacing.md) } + + /// Apply adaptive font based on screen size + func adaptiveFont(_ standard: Font, compact: Font) -> some View { + self.font(NSScreen.main?.is14InchMacBook == true ? compact : standard) + } +} + +// MARK: - Screen Detection + +extension NSScreen { + /// Detects if the current screen is a 14" MacBook + /// 14" MacBook Pro: 3024 x 1964 (Retina) → 1512 x 982 (points) + var is14InchMacBook: Bool { + let width = frame.width + // 14" MBP typically has width around 1512 points + // Allow some tolerance for different configurations + return width >= 1470 && width <= 1600 + } + + /// Detects if screen is compact (any small screen) + var isCompactScreen: Bool { + frame.width <= 1600 || frame.height <= 1000 + } }