forked from intitni/CopilotForXcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModuleDependency.swift
More file actions
109 lines (91 loc) · 3.3 KB
/
ModuleDependency.swift
File metadata and controls
109 lines (91 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import ActiveApplicationMonitor
import AppKit
import ChatTab
import ComposableArchitecture
import Dependencies
import Foundation
import Preferences
import SwiftUI
import UserDefaultsObserver
import XcodeInspector
public final class SuggestionWidgetControllerDependency {
public var suggestionWidgetDataSource: SuggestionWidgetDataSource?
public var onOpenChatClicked: () -> Void = {}
public var onCustomCommandClicked: (CustomCommand) -> Void = { _ in }
public var windows: WidgetWindows = .init()
public init() {}
}
@MainActor
public final class WidgetWindows {
var fullscreenDetector: NSWindow!
var widgetWindow: NSWindow!
var sharedPanelWindow: NSWindow!
var suggestionPanelWindow: NSWindow!
var chatPanelWindow: NSWindow!
var toastWindow: NSWindow!
nonisolated
init() {}
func orderFront() {
widgetWindow?.orderFrontRegardless()
toastWindow?.orderFrontRegardless()
sharedPanelWindow?.orderFrontRegardless()
suggestionPanelWindow?.orderFrontRegardless()
chatPanelWindow?.orderFrontRegardless()
}
}
public final class WidgetUserDefaultsObservers {
let presentationModeChangeObserver = UserDefaultsObserver(
object: UserDefaults.shared,
forKeyPaths: [
UserDefaultPreferenceKeys().suggestionPresentationMode.key,
], context: nil
)
let colorSchemeChangeObserver = UserDefaultsObserver(
object: UserDefaults.shared, forKeyPaths: [
UserDefaultPreferenceKeys().widgetColorScheme.key,
], context: nil
)
let systemColorSchemeChangeObserver = UserDefaultsObserver(
object: UserDefaults.standard, forKeyPaths: ["AppleInterfaceStyle"], context: nil
)
public init() {}
}
struct SuggestionWidgetControllerDependencyKey: DependencyKey {
static let liveValue = SuggestionWidgetControllerDependency()
}
struct UserDefaultsDependencyKey: DependencyKey {
static let liveValue = WidgetUserDefaultsObservers()
}
struct XcodeInspectorKey: DependencyKey {
static let liveValue = XcodeInspector.shared
}
struct ActiveApplicationMonitorKey: DependencyKey {
static let liveValue = ActiveApplicationMonitor.shared
}
struct ChatTabBuilderCollectionKey: DependencyKey {
static let liveValue: () -> [ChatTabBuilderCollection] = { [] }
}
public extension DependencyValues {
var suggestionWidgetControllerDependency: SuggestionWidgetControllerDependency {
get { self[SuggestionWidgetControllerDependencyKey.self] }
set { self[SuggestionWidgetControllerDependencyKey.self] = newValue }
}
var suggestionWidgetUserDefaultsObservers: WidgetUserDefaultsObservers {
get { self[UserDefaultsDependencyKey.self] }
set { self[UserDefaultsDependencyKey.self] = newValue }
}
var chatTabBuilderCollection: () -> [ChatTabBuilderCollection] {
get { self[ChatTabBuilderCollectionKey.self] }
set { self[ChatTabBuilderCollectionKey.self] = newValue }
}
}
extension DependencyValues {
var xcodeInspector: XcodeInspector {
get { self[XcodeInspectorKey.self] }
set { self[XcodeInspectorKey.self] = newValue }
}
var activeApplicationMonitor: ActiveApplicationMonitor {
get { self[ActiveApplicationMonitorKey.self] }
set { self[ActiveApplicationMonitorKey.self] = newValue }
}
}