@lattices/cli 0.4.14 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +5 -7
  2. package/apps/mac/Info.plist +2 -2
  3. package/apps/mac/Lattices.app/Contents/Info.plist +4 -12
  4. package/apps/mac/Lattices.app/Contents/MacOS/Lattices +0 -0
  5. package/bin/lattices-app.ts +110 -17
  6. package/bin/lattices-build +125 -0
  7. package/bin/lattices-dev +89 -16
  8. package/bin/lattices.ts +977 -16
  9. package/docs/agents.md +81 -4
  10. package/docs/ai-chat-ux-review.md +416 -0
  11. package/docs/api.md +135 -3
  12. package/docs/app.md +30 -8
  13. package/docs/config.md +4 -0
  14. package/docs/mouse-gestures.md +60 -1
  15. package/docs/proposals/LAT-004-interactive-overlay-actors.md +1 -1
  16. package/docs/proposals/LAT-005-action-runtime-product-spine.md +914 -0
  17. package/docs/proposals/LAT-006-mira-in-lattices.md +553 -0
  18. package/docs/reference/dewey.config.ts +2 -2
  19. package/docs/release.md +171 -0
  20. package/docs/repo-structure.md +4 -5
  21. package/docs/voice.md +11 -27
  22. package/package.json +9 -10
  23. package/apps/mac/Package.swift +0 -27
  24. package/apps/mac/Sources/AppShell/App.swift +0 -26
  25. package/apps/mac/Sources/AppShell/AppActivationCoordinator.swift +0 -27
  26. package/apps/mac/Sources/AppShell/AppDelegate.swift +0 -189
  27. package/apps/mac/Sources/AppShell/AppServicesBootstrap.swift +0 -25
  28. package/apps/mac/Sources/AppShell/AppShellView.swift +0 -171
  29. package/apps/mac/Sources/AppShell/AppUpdater.swift +0 -305
  30. package/apps/mac/Sources/AppShell/CliActionLauncher.swift +0 -50
  31. package/apps/mac/Sources/AppShell/HomeDashboardView.swift +0 -133
  32. package/apps/mac/Sources/AppShell/HotkeyBootstrap.swift +0 -87
  33. package/apps/mac/Sources/AppShell/KeyRecorderView.swift +0 -210
  34. package/apps/mac/Sources/AppShell/LatticesRuntime.swift +0 -104
  35. package/apps/mac/Sources/AppShell/MainView.swift +0 -847
  36. package/apps/mac/Sources/AppShell/MainWindow.swift +0 -83
  37. package/apps/mac/Sources/AppShell/MenuBarController.swift +0 -177
  38. package/apps/mac/Sources/AppShell/OnboardingView.swift +0 -483
  39. package/apps/mac/Sources/AppShell/PermissionsAssistantView.swift +0 -366
  40. package/apps/mac/Sources/AppShell/PermissionsAssistantWindow.swift +0 -70
  41. package/apps/mac/Sources/AppShell/Preferences.swift +0 -297
  42. package/apps/mac/Sources/AppShell/SettingsView.swift +0 -3163
  43. package/apps/mac/Sources/AppShell/SettingsWindow.swift +0 -34
  44. package/apps/mac/Sources/AppShell/WorkspaceInspectorPresenter.swift +0 -13
  45. package/apps/mac/Sources/Core/Actions/HotkeyManager.swift +0 -256
  46. package/apps/mac/Sources/Core/Actions/HotkeyStore.swift +0 -399
  47. package/apps/mac/Sources/Core/Actions/IntentEngine.swift +0 -988
  48. package/apps/mac/Sources/Core/Actions/IntentSchema.swift +0 -94
  49. package/apps/mac/Sources/Core/Actions/Intents/CreateLayerIntent.swift +0 -54
  50. package/apps/mac/Sources/Core/Actions/Intents/DistributeIntent.swift +0 -56
  51. package/apps/mac/Sources/Core/Actions/Intents/FocusIntent.swift +0 -69
  52. package/apps/mac/Sources/Core/Actions/Intents/HelpIntent.swift +0 -41
  53. package/apps/mac/Sources/Core/Actions/Intents/KillIntent.swift +0 -47
  54. package/apps/mac/Sources/Core/Actions/Intents/LatticeIntent.swift +0 -53
  55. package/apps/mac/Sources/Core/Actions/Intents/LaunchIntent.swift +0 -67
  56. package/apps/mac/Sources/Core/Actions/Intents/ListSessionsIntent.swift +0 -32
  57. package/apps/mac/Sources/Core/Actions/Intents/ListWindowsIntent.swift +0 -30
  58. package/apps/mac/Sources/Core/Actions/Intents/ScanIntent.swift +0 -52
  59. package/apps/mac/Sources/Core/Actions/Intents/SearchIntent.swift +0 -190
  60. package/apps/mac/Sources/Core/Actions/Intents/SwitchLayerIntent.swift +0 -50
  61. package/apps/mac/Sources/Core/Actions/Intents/TileIntent.swift +0 -61
  62. package/apps/mac/Sources/Core/Actions/PaletteCommand.swift +0 -439
  63. package/apps/mac/Sources/Core/Actions/VoiceIntentResolver.swift +0 -713
  64. package/apps/mac/Sources/Core/Companion/CompanionActivityLog.swift +0 -70
  65. package/apps/mac/Sources/Core/Companion/CompanionKeyboardController.swift +0 -141
  66. package/apps/mac/Sources/Core/Companion/LatticesCompanionBridgeServer.swift +0 -454
  67. package/apps/mac/Sources/Core/Companion/LatticesCompanionCockpit.swift +0 -555
  68. package/apps/mac/Sources/Core/Companion/LatticesCompanionSecurityCoordinator.swift +0 -629
  69. package/apps/mac/Sources/Core/Companion/LatticesCompanionTrackpadController.swift +0 -204
  70. package/apps/mac/Sources/Core/Companion/LatticesDeckHost.swift +0 -1463
  71. package/apps/mac/Sources/Core/Daemon/DaemonProtocol.swift +0 -114
  72. package/apps/mac/Sources/Core/Daemon/DaemonServer.swift +0 -427
  73. package/apps/mac/Sources/Core/Daemon/LatticesApi.swift +0 -2965
  74. package/apps/mac/Sources/Core/Desktop/AccessibilityTextExtractor.swift +0 -111
  75. package/apps/mac/Sources/Core/Desktop/AppTypeClassifier.swift +0 -106
  76. package/apps/mac/Sources/Core/Desktop/DesktopModel.swift +0 -331
  77. package/apps/mac/Sources/Core/Desktop/DesktopModelTypes.swift +0 -73
  78. package/apps/mac/Sources/Core/Desktop/InventoryManager.swift +0 -35
  79. package/apps/mac/Sources/Core/Desktop/InventoryPath.swift +0 -43
  80. package/apps/mac/Sources/Core/Desktop/MouseFinder.swift +0 -527
  81. package/apps/mac/Sources/Core/Desktop/OcrModel.swift +0 -467
  82. package/apps/mac/Sources/Core/Desktop/OcrStore.swift +0 -329
  83. package/apps/mac/Sources/Core/Desktop/PlacementSpec.swift +0 -195
  84. package/apps/mac/Sources/Core/Desktop/SessionWindowLocator.swift +0 -139
  85. package/apps/mac/Sources/Core/Desktop/TilePickerView.swift +0 -209
  86. package/apps/mac/Sources/Core/Desktop/WindowCapture.swift +0 -33
  87. package/apps/mac/Sources/Core/Desktop/WindowDragSnapController.swift +0 -429
  88. package/apps/mac/Sources/Core/Desktop/WindowPreviewCard.swift +0 -100
  89. package/apps/mac/Sources/Core/Desktop/WindowPreviewStore.swift +0 -112
  90. package/apps/mac/Sources/Core/Desktop/WindowSelectionStore.swift +0 -76
  91. package/apps/mac/Sources/Core/Desktop/WindowTiler.swift +0 -2222
  92. package/apps/mac/Sources/Core/Input/EventTapBreaker.swift +0 -124
  93. package/apps/mac/Sources/Core/Input/EventTapThread.swift +0 -54
  94. package/apps/mac/Sources/Core/Input/InputCaptureResetCenter.swift +0 -20
  95. package/apps/mac/Sources/Core/Input/KeyboardRemapConfig.swift +0 -69
  96. package/apps/mac/Sources/Core/Input/KeyboardRemapController.swift +0 -346
  97. package/apps/mac/Sources/Core/Input/KeyboardRemapStore.swift +0 -141
  98. package/apps/mac/Sources/Core/Input/MouseGestureConfig.swift +0 -499
  99. package/apps/mac/Sources/Core/Input/MouseGestureController.swift +0 -2583
  100. package/apps/mac/Sources/Core/Input/MouseInputDeviceStore.swift +0 -98
  101. package/apps/mac/Sources/Core/Input/MouseInputEventViewer.swift +0 -272
  102. package/apps/mac/Sources/Core/Input/MouseShortcutStore.swift +0 -170
  103. package/apps/mac/Sources/Core/Input/SecureEventInputMonitor.swift +0 -39
  104. package/apps/mac/Sources/Core/Input/ShapeRecognizer.swift +0 -624
  105. package/apps/mac/Sources/Core/Input/TapBudgetMeter.swift +0 -56
  106. package/apps/mac/Sources/Core/Overlays/AppWindowShell.swift +0 -63
  107. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeState.swift +0 -1566
  108. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeView.swift +0 -1927
  109. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeWindow.swift +0 -196
  110. package/apps/mac/Sources/Core/Overlays/CommandPalette/CommandPaletteView.swift +0 -307
  111. package/apps/mac/Sources/Core/Overlays/CommandPalette/CommandPaletteWindow.swift +0 -67
  112. package/apps/mac/Sources/Core/Overlays/HUD/CheatSheetHUD.swift +0 -576
  113. package/apps/mac/Sources/Core/Overlays/HUD/HUDBottomBar.swift +0 -279
  114. package/apps/mac/Sources/Core/Overlays/HUD/HUDController.swift +0 -1158
  115. package/apps/mac/Sources/Core/Overlays/HUD/HUDLeftBar.swift +0 -849
  116. package/apps/mac/Sources/Core/Overlays/HUD/HUDMinimap.swift +0 -179
  117. package/apps/mac/Sources/Core/Overlays/HUD/HUDRightBar.swift +0 -596
  118. package/apps/mac/Sources/Core/Overlays/HUD/HUDState.swift +0 -367
  119. package/apps/mac/Sources/Core/Overlays/HUD/HUDTopBar.swift +0 -243
  120. package/apps/mac/Sources/Core/Overlays/HUD/LauncherHUD.swift +0 -334
  121. package/apps/mac/Sources/Core/Overlays/HUD/LayerBezel.swift +0 -203
  122. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchState.swift +0 -280
  123. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchView.swift +0 -422
  124. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchWindow.swift +0 -94
  125. package/apps/mac/Sources/Core/Overlays/OverlayPanelShell.swift +0 -241
  126. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapState.swift +0 -3135
  127. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapView.swift +0 -3977
  128. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapWindowController.swift +0 -119
  129. package/apps/mac/Sources/Core/Overlays/ScreenOverlayCanvasController.swift +0 -1217
  130. package/apps/mac/Sources/Core/Overlays/Voice/VoiceCommandWindow.swift +0 -1575
  131. package/apps/mac/Sources/Core/Pi/PiAuthNextStepCard.swift +0 -148
  132. package/apps/mac/Sources/Core/Pi/PiAuthPromptCard.swift +0 -90
  133. package/apps/mac/Sources/Core/Pi/PiChatDock.swift +0 -564
  134. package/apps/mac/Sources/Core/Pi/PiChatSession.swift +0 -1948
  135. package/apps/mac/Sources/Core/Pi/PiInstallCallout.swift +0 -86
  136. package/apps/mac/Sources/Core/Pi/PiProviderSetupCallout.swift +0 -99
  137. package/apps/mac/Sources/Core/Pi/PiWorkspaceView.swift +0 -510
  138. package/apps/mac/Sources/Core/System/Capability.swift +0 -79
  139. package/apps/mac/Sources/Core/System/DiagnosticLog.swift +0 -373
  140. package/apps/mac/Sources/Core/System/EventBus.swift +0 -31
  141. package/apps/mac/Sources/Core/System/PermissionChecker.swift +0 -224
  142. package/apps/mac/Sources/Core/System/ProcessModel.swift +0 -199
  143. package/apps/mac/Sources/Core/System/ProcessQuery.swift +0 -151
  144. package/apps/mac/Sources/Core/System/SystemTelemetryMonitor.swift +0 -273
  145. package/apps/mac/Sources/Core/Voice/AdvisorLearningStore.swift +0 -90
  146. package/apps/mac/Sources/Core/Voice/AgentSession.swift +0 -377
  147. package/apps/mac/Sources/Core/Voice/AudioProvider.swift +0 -555
  148. package/apps/mac/Sources/Core/Voice/HandsOffSession.swift +0 -839
  149. package/apps/mac/Sources/Core/Voice/VoiceChatView.swift +0 -192
  150. package/apps/mac/Sources/Core/Voice/VoxClient.swift +0 -454
  151. package/apps/mac/Sources/Core/Workspace/Project.swift +0 -28
  152. package/apps/mac/Sources/Core/Workspace/ProjectScanner.swift +0 -141
  153. package/apps/mac/Sources/Core/Workspace/SessionLayerStore.swift +0 -285
  154. package/apps/mac/Sources/Core/Workspace/SessionManager.swift +0 -75
  155. package/apps/mac/Sources/Core/Workspace/Terminal/Terminal.swift +0 -259
  156. package/apps/mac/Sources/Core/Workspace/Terminal/TerminalQuery.swift +0 -156
  157. package/apps/mac/Sources/Core/Workspace/Terminal/TerminalSynthesizer.swift +0 -200
  158. package/apps/mac/Sources/Core/Workspace/Tmux/TmuxModel.swift +0 -60
  159. package/apps/mac/Sources/Core/Workspace/Tmux/TmuxQuery.swift +0 -105
  160. package/apps/mac/Sources/Core/Workspace/WorkspaceManager.swift +0 -1027
  161. package/apps/mac/Sources/UI/ActionRow.swift +0 -78
  162. package/apps/mac/Sources/UI/OrphanRow.swift +0 -129
  163. package/apps/mac/Sources/UI/ProjectRow.swift +0 -368
  164. package/apps/mac/Sources/UI/TabGroupRow.swift +0 -178
  165. package/apps/mac/Sources/UI/Theme.swift +0 -164
  166. package/apps/mac/Tests/StageDragTests.swift +0 -333
  167. package/apps/mac/Tests/StageJoinTests.swift +0 -313
  168. package/apps/mac/Tests/StageManagerTests.swift +0 -280
  169. package/apps/mac/Tests/StageTileTests.swift +0 -353
  170. package/swift/Package.swift +0 -20
  171. package/swift/Sources/DeckKit/DeckAction.swift +0 -51
  172. package/swift/Sources/DeckKit/DeckBridgeSecurity.swift +0 -152
  173. package/swift/Sources/DeckKit/DeckCockpit.swift +0 -82
  174. package/swift/Sources/DeckKit/DeckHost.swift +0 -7
  175. package/swift/Sources/DeckKit/DeckManifest.swift +0 -145
  176. package/swift/Sources/DeckKit/DeckRuntimeSnapshot.swift +0 -533
  177. package/swift/Sources/DeckKit/DeckTrackpad.swift +0 -63
  178. package/swift/Sources/DeckKit/DeckValue.swift +0 -93
  179. package/swift/Sources/DeckKit/DeckVoiceError.swift +0 -88
  180. package/swift/Tests/DeckKitTests/DeckKitTests.swift +0 -286
@@ -1,148 +0,0 @@
1
- import SwiftUI
2
-
3
- struct PiAuthNextStepCard: View {
4
- @ObservedObject var session: PiChatSession
5
- let compact: Bool
6
-
7
- var body: some View {
8
- VStack(alignment: .leading, spacing: compact ? 10 : 12) {
9
- HStack(spacing: 8) {
10
- Circle()
11
- .fill(Palette.running)
12
- .frame(width: compact ? 6 : 7, height: compact ? 6 : 7)
13
-
14
- Text(session.authStepLabel)
15
- .font(Typo.geistMonoBold(compact ? 9 : 10))
16
- .foregroundColor(Palette.running.opacity(0.95))
17
- }
18
-
19
- Text(session.authStepTitle)
20
- .font(Typo.geistMonoBold(compact ? 11 : 13))
21
- .foregroundColor(Palette.text)
22
-
23
- Text(session.authStepDescription)
24
- .font(Typo.mono(compact ? 10 : 11))
25
- .foregroundColor(Palette.textDim)
26
- .fixedSize(horizontal: false, vertical: true)
27
-
28
- if let code = session.authVerificationCode {
29
- VStack(alignment: .leading, spacing: 6) {
30
- HStack(spacing: 6) {
31
- Text("CODE READY")
32
- .font(Typo.geistMonoBold(compact ? 8 : 9))
33
- .foregroundColor(Palette.textMuted)
34
-
35
- if session.authVerificationCodeCopied {
36
- statusCapsule("COPIED")
37
- }
38
- }
39
-
40
- Text(code)
41
- .font(Typo.geistMonoBold(compact ? 14 : 16))
42
- .foregroundColor(Palette.text)
43
- .textSelection(.enabled)
44
- .frame(maxWidth: .infinity, alignment: .leading)
45
- .padding(.horizontal, compact ? 10 : 12)
46
- .padding(.vertical, compact ? 9 : 10)
47
- .background(
48
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
49
- .fill(Color.white.opacity(0.04))
50
- .overlay(
51
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
52
- .strokeBorder(Palette.borderLit.opacity(0.5), lineWidth: 0.5)
53
- )
54
- )
55
- }
56
- }
57
-
58
- primaryActionButton(
59
- session.latestAuthURL == nil
60
- ? "OPENING BROWSER..."
61
- : (session.authVerificationCode != nil ? "OPEN PAGE AGAIN" : "OPEN BROWSER AGAIN"),
62
- tint: Palette.running,
63
- disabled: session.latestAuthURL == nil
64
- ) {
65
- session.reopenLatestAuthURL()
66
- }
67
-
68
- HStack(spacing: 8) {
69
- if session.authVerificationCode != nil {
70
- secondaryActionButton("COPY AGAIN", tint: Palette.text) {
71
- session.copyAuthVerificationCode()
72
- }
73
- }
74
-
75
- Spacer(minLength: 0)
76
-
77
- secondaryActionButton("CANCEL", tint: Palette.textMuted) {
78
- session.cancelAuthFlow()
79
- }
80
- }
81
- }
82
- .padding(.horizontal, compact ? 10 : 16)
83
- .padding(.vertical, compact ? 10 : 14)
84
- .background(
85
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
86
- .fill(Palette.running.opacity(0.06))
87
- .overlay(
88
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
89
- .strokeBorder(Palette.running.opacity(0.22), lineWidth: 0.5)
90
- )
91
- )
92
- }
93
-
94
- private func primaryActionButton(_ label: String, tint: Color, disabled: Bool = false, action: @escaping () -> Void) -> some View {
95
- Button(action: action) {
96
- Text(label)
97
- .font(Typo.geistMonoBold(compact ? 10 : 11))
98
- .foregroundColor(disabled ? Palette.textMuted : tint)
99
- .frame(maxWidth: .infinity)
100
- .padding(.horizontal, compact ? 10 : 12)
101
- .padding(.vertical, compact ? 8 : 10)
102
- .background(
103
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
104
- .fill(tint.opacity(disabled ? 0.05 : 0.12))
105
- .overlay(
106
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
107
- .strokeBorder((disabled ? Palette.border : tint.opacity(0.35)), lineWidth: 0.5)
108
- )
109
- )
110
- }
111
- .buttonStyle(.plain)
112
- .opacity(disabled ? 0.7 : 1)
113
- .disabled(disabled)
114
- }
115
-
116
- private func secondaryActionButton(_ label: String, tint: Color, action: @escaping () -> Void) -> some View {
117
- Button(label, action: action)
118
- .buttonStyle(.plain)
119
- .font(Typo.geistMonoBold(compact ? 9 : 10))
120
- .foregroundColor(tint)
121
- .padding(.horizontal, compact ? 8 : 10)
122
- .padding(.vertical, compact ? 5 : 6)
123
- .background(
124
- Capsule()
125
- .fill(Color.white.opacity(0.03))
126
- .overlay(
127
- Capsule()
128
- .strokeBorder(Palette.border, lineWidth: 0.5)
129
- )
130
- )
131
- }
132
-
133
- private func statusCapsule(_ text: String) -> some View {
134
- Text(text)
135
- .font(Typo.geistMonoBold(compact ? 8 : 9))
136
- .foregroundColor(Palette.running.opacity(0.95))
137
- .padding(.horizontal, compact ? 6 : 7)
138
- .padding(.vertical, compact ? 3 : 4)
139
- .background(
140
- Capsule()
141
- .fill(Palette.running.opacity(0.12))
142
- .overlay(
143
- Capsule()
144
- .strokeBorder(Palette.running.opacity(0.28), lineWidth: 0.5)
145
- )
146
- )
147
- }
148
- }
@@ -1,90 +0,0 @@
1
- import SwiftUI
2
-
3
- struct PiAuthPromptCard: View {
4
- @ObservedObject var session: PiChatSession
5
- let prompt: PiAuthPrompt
6
- let compact: Bool
7
- var focus: FocusState<Bool>.Binding
8
-
9
- var body: some View {
10
- VStack(alignment: .leading, spacing: compact ? 10 : 12) {
11
- HStack(spacing: 8) {
12
- Circle()
13
- .fill(Palette.detach)
14
- .frame(width: compact ? 6 : 7, height: compact ? 6 : 7)
15
-
16
- Text("STEP 1")
17
- .font(Typo.geistMonoBold(compact ? 9 : 10))
18
- .foregroundColor(Palette.detach.opacity(0.95))
19
- }
20
-
21
- Text("One quick question")
22
- .font(Typo.geistMonoBold(compact ? 11 : 13))
23
- .foregroundColor(Palette.text)
24
-
25
- Text(prompt.message)
26
- .font(Typo.mono(compact ? 10 : 11))
27
- .foregroundColor(Palette.textDim)
28
- .fixedSize(horizontal: false, vertical: true)
29
-
30
- HStack(spacing: 8) {
31
- TextField(prompt.placeholder ?? "Type your answer", text: $session.authPromptInput)
32
- .textFieldStyle(.plain)
33
- .font(Typo.mono(compact ? 11 : 12))
34
- .foregroundColor(Palette.text)
35
- .focused(focus)
36
-
37
- actionButton("CONTINUE", tint: Palette.detach, disabled: !session.canSubmitAuthPrompt) {
38
- session.submitAuthPrompt()
39
- }
40
- }
41
- .padding(.horizontal, compact ? 10 : 12)
42
- .padding(.vertical, compact ? 8 : 10)
43
- .background(
44
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
45
- .fill(Color.white.opacity(0.04))
46
- .overlay(
47
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
48
- .strokeBorder(Palette.border.opacity(0.85), lineWidth: 0.5)
49
- )
50
- )
51
-
52
- HStack(spacing: 8) {
53
- Spacer(minLength: 0)
54
-
55
- actionButton("CANCEL", tint: Palette.textMuted) {
56
- session.cancelAuthFlow()
57
- }
58
- }
59
- }
60
- .padding(.horizontal, compact ? 10 : 16)
61
- .padding(.vertical, compact ? 10 : 14)
62
- .background(
63
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
64
- .fill(Palette.detach.opacity(0.06))
65
- .overlay(
66
- RoundedRectangle(cornerRadius: compact ? 6 : 8)
67
- .strokeBorder(Palette.detach.opacity(0.22), lineWidth: 0.5)
68
- )
69
- )
70
- }
71
-
72
- private func actionButton(_ label: String, tint: Color, disabled: Bool = false, action: @escaping () -> Void) -> some View {
73
- Button(label, action: action)
74
- .buttonStyle(.plain)
75
- .font(Typo.geistMonoBold(compact ? 9 : 10))
76
- .foregroundColor(disabled ? Palette.textMuted : tint)
77
- .padding(.horizontal, compact ? 8 : 10)
78
- .padding(.vertical, compact ? 5 : 6)
79
- .background(
80
- Capsule()
81
- .fill(Color.white.opacity(0.03))
82
- .overlay(
83
- Capsule()
84
- .strokeBorder(Palette.border, lineWidth: 0.5)
85
- )
86
- )
87
- .opacity(disabled ? 0.65 : 1)
88
- .disabled(disabled)
89
- }
90
- }