@lattices/cli 0.4.14 → 0.6.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 (181) hide show
  1. package/README.md +5 -7
  2. package/apps/mac/Info.plist +4 -4
  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/proposals/LAT-007-unified-app-shell.md +128 -0
  19. package/docs/reference/dewey.config.ts +2 -2
  20. package/docs/release.md +171 -0
  21. package/docs/repo-structure.md +5 -5
  22. package/docs/voice.md +11 -27
  23. package/package.json +11 -10
  24. package/apps/mac/Package.swift +0 -27
  25. package/apps/mac/Sources/AppShell/App.swift +0 -26
  26. package/apps/mac/Sources/AppShell/AppActivationCoordinator.swift +0 -27
  27. package/apps/mac/Sources/AppShell/AppDelegate.swift +0 -189
  28. package/apps/mac/Sources/AppShell/AppServicesBootstrap.swift +0 -25
  29. package/apps/mac/Sources/AppShell/AppShellView.swift +0 -171
  30. package/apps/mac/Sources/AppShell/AppUpdater.swift +0 -305
  31. package/apps/mac/Sources/AppShell/CliActionLauncher.swift +0 -50
  32. package/apps/mac/Sources/AppShell/HomeDashboardView.swift +0 -133
  33. package/apps/mac/Sources/AppShell/HotkeyBootstrap.swift +0 -87
  34. package/apps/mac/Sources/AppShell/KeyRecorderView.swift +0 -210
  35. package/apps/mac/Sources/AppShell/LatticesRuntime.swift +0 -104
  36. package/apps/mac/Sources/AppShell/MainView.swift +0 -847
  37. package/apps/mac/Sources/AppShell/MainWindow.swift +0 -83
  38. package/apps/mac/Sources/AppShell/MenuBarController.swift +0 -177
  39. package/apps/mac/Sources/AppShell/OnboardingView.swift +0 -483
  40. package/apps/mac/Sources/AppShell/PermissionsAssistantView.swift +0 -366
  41. package/apps/mac/Sources/AppShell/PermissionsAssistantWindow.swift +0 -70
  42. package/apps/mac/Sources/AppShell/Preferences.swift +0 -297
  43. package/apps/mac/Sources/AppShell/SettingsView.swift +0 -3163
  44. package/apps/mac/Sources/AppShell/SettingsWindow.swift +0 -34
  45. package/apps/mac/Sources/AppShell/WorkspaceInspectorPresenter.swift +0 -13
  46. package/apps/mac/Sources/Core/Actions/HotkeyManager.swift +0 -256
  47. package/apps/mac/Sources/Core/Actions/HotkeyStore.swift +0 -399
  48. package/apps/mac/Sources/Core/Actions/IntentEngine.swift +0 -988
  49. package/apps/mac/Sources/Core/Actions/IntentSchema.swift +0 -94
  50. package/apps/mac/Sources/Core/Actions/Intents/CreateLayerIntent.swift +0 -54
  51. package/apps/mac/Sources/Core/Actions/Intents/DistributeIntent.swift +0 -56
  52. package/apps/mac/Sources/Core/Actions/Intents/FocusIntent.swift +0 -69
  53. package/apps/mac/Sources/Core/Actions/Intents/HelpIntent.swift +0 -41
  54. package/apps/mac/Sources/Core/Actions/Intents/KillIntent.swift +0 -47
  55. package/apps/mac/Sources/Core/Actions/Intents/LatticeIntent.swift +0 -53
  56. package/apps/mac/Sources/Core/Actions/Intents/LaunchIntent.swift +0 -67
  57. package/apps/mac/Sources/Core/Actions/Intents/ListSessionsIntent.swift +0 -32
  58. package/apps/mac/Sources/Core/Actions/Intents/ListWindowsIntent.swift +0 -30
  59. package/apps/mac/Sources/Core/Actions/Intents/ScanIntent.swift +0 -52
  60. package/apps/mac/Sources/Core/Actions/Intents/SearchIntent.swift +0 -190
  61. package/apps/mac/Sources/Core/Actions/Intents/SwitchLayerIntent.swift +0 -50
  62. package/apps/mac/Sources/Core/Actions/Intents/TileIntent.swift +0 -61
  63. package/apps/mac/Sources/Core/Actions/PaletteCommand.swift +0 -439
  64. package/apps/mac/Sources/Core/Actions/VoiceIntentResolver.swift +0 -713
  65. package/apps/mac/Sources/Core/Companion/CompanionActivityLog.swift +0 -70
  66. package/apps/mac/Sources/Core/Companion/CompanionKeyboardController.swift +0 -141
  67. package/apps/mac/Sources/Core/Companion/LatticesCompanionBridgeServer.swift +0 -454
  68. package/apps/mac/Sources/Core/Companion/LatticesCompanionCockpit.swift +0 -555
  69. package/apps/mac/Sources/Core/Companion/LatticesCompanionSecurityCoordinator.swift +0 -629
  70. package/apps/mac/Sources/Core/Companion/LatticesCompanionTrackpadController.swift +0 -204
  71. package/apps/mac/Sources/Core/Companion/LatticesDeckHost.swift +0 -1463
  72. package/apps/mac/Sources/Core/Daemon/DaemonProtocol.swift +0 -114
  73. package/apps/mac/Sources/Core/Daemon/DaemonServer.swift +0 -427
  74. package/apps/mac/Sources/Core/Daemon/LatticesApi.swift +0 -2965
  75. package/apps/mac/Sources/Core/Desktop/AccessibilityTextExtractor.swift +0 -111
  76. package/apps/mac/Sources/Core/Desktop/AppTypeClassifier.swift +0 -106
  77. package/apps/mac/Sources/Core/Desktop/DesktopModel.swift +0 -331
  78. package/apps/mac/Sources/Core/Desktop/DesktopModelTypes.swift +0 -73
  79. package/apps/mac/Sources/Core/Desktop/InventoryManager.swift +0 -35
  80. package/apps/mac/Sources/Core/Desktop/InventoryPath.swift +0 -43
  81. package/apps/mac/Sources/Core/Desktop/MouseFinder.swift +0 -527
  82. package/apps/mac/Sources/Core/Desktop/OcrModel.swift +0 -467
  83. package/apps/mac/Sources/Core/Desktop/OcrStore.swift +0 -329
  84. package/apps/mac/Sources/Core/Desktop/PlacementSpec.swift +0 -195
  85. package/apps/mac/Sources/Core/Desktop/SessionWindowLocator.swift +0 -139
  86. package/apps/mac/Sources/Core/Desktop/TilePickerView.swift +0 -209
  87. package/apps/mac/Sources/Core/Desktop/WindowCapture.swift +0 -33
  88. package/apps/mac/Sources/Core/Desktop/WindowDragSnapController.swift +0 -429
  89. package/apps/mac/Sources/Core/Desktop/WindowPreviewCard.swift +0 -100
  90. package/apps/mac/Sources/Core/Desktop/WindowPreviewStore.swift +0 -112
  91. package/apps/mac/Sources/Core/Desktop/WindowSelectionStore.swift +0 -76
  92. package/apps/mac/Sources/Core/Desktop/WindowTiler.swift +0 -2222
  93. package/apps/mac/Sources/Core/Input/EventTapBreaker.swift +0 -124
  94. package/apps/mac/Sources/Core/Input/EventTapThread.swift +0 -54
  95. package/apps/mac/Sources/Core/Input/InputCaptureResetCenter.swift +0 -20
  96. package/apps/mac/Sources/Core/Input/KeyboardRemapConfig.swift +0 -69
  97. package/apps/mac/Sources/Core/Input/KeyboardRemapController.swift +0 -346
  98. package/apps/mac/Sources/Core/Input/KeyboardRemapStore.swift +0 -141
  99. package/apps/mac/Sources/Core/Input/MouseGestureConfig.swift +0 -499
  100. package/apps/mac/Sources/Core/Input/MouseGestureController.swift +0 -2583
  101. package/apps/mac/Sources/Core/Input/MouseInputDeviceStore.swift +0 -98
  102. package/apps/mac/Sources/Core/Input/MouseInputEventViewer.swift +0 -272
  103. package/apps/mac/Sources/Core/Input/MouseShortcutStore.swift +0 -170
  104. package/apps/mac/Sources/Core/Input/SecureEventInputMonitor.swift +0 -39
  105. package/apps/mac/Sources/Core/Input/ShapeRecognizer.swift +0 -624
  106. package/apps/mac/Sources/Core/Input/TapBudgetMeter.swift +0 -56
  107. package/apps/mac/Sources/Core/Overlays/AppWindowShell.swift +0 -63
  108. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeState.swift +0 -1566
  109. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeView.swift +0 -1927
  110. package/apps/mac/Sources/Core/Overlays/CommandMode/CommandModeWindow.swift +0 -196
  111. package/apps/mac/Sources/Core/Overlays/CommandPalette/CommandPaletteView.swift +0 -307
  112. package/apps/mac/Sources/Core/Overlays/CommandPalette/CommandPaletteWindow.swift +0 -67
  113. package/apps/mac/Sources/Core/Overlays/HUD/CheatSheetHUD.swift +0 -576
  114. package/apps/mac/Sources/Core/Overlays/HUD/HUDBottomBar.swift +0 -279
  115. package/apps/mac/Sources/Core/Overlays/HUD/HUDController.swift +0 -1158
  116. package/apps/mac/Sources/Core/Overlays/HUD/HUDLeftBar.swift +0 -849
  117. package/apps/mac/Sources/Core/Overlays/HUD/HUDMinimap.swift +0 -179
  118. package/apps/mac/Sources/Core/Overlays/HUD/HUDRightBar.swift +0 -596
  119. package/apps/mac/Sources/Core/Overlays/HUD/HUDState.swift +0 -367
  120. package/apps/mac/Sources/Core/Overlays/HUD/HUDTopBar.swift +0 -243
  121. package/apps/mac/Sources/Core/Overlays/HUD/LauncherHUD.swift +0 -334
  122. package/apps/mac/Sources/Core/Overlays/HUD/LayerBezel.swift +0 -203
  123. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchState.swift +0 -280
  124. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchView.swift +0 -422
  125. package/apps/mac/Sources/Core/Overlays/OmniSearch/OmniSearchWindow.swift +0 -94
  126. package/apps/mac/Sources/Core/Overlays/OverlayPanelShell.swift +0 -241
  127. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapState.swift +0 -3135
  128. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapView.swift +0 -3977
  129. package/apps/mac/Sources/Core/Overlays/ScreenMap/ScreenMapWindowController.swift +0 -119
  130. package/apps/mac/Sources/Core/Overlays/ScreenOverlayCanvasController.swift +0 -1217
  131. package/apps/mac/Sources/Core/Overlays/Voice/VoiceCommandWindow.swift +0 -1575
  132. package/apps/mac/Sources/Core/Pi/PiAuthNextStepCard.swift +0 -148
  133. package/apps/mac/Sources/Core/Pi/PiAuthPromptCard.swift +0 -90
  134. package/apps/mac/Sources/Core/Pi/PiChatDock.swift +0 -564
  135. package/apps/mac/Sources/Core/Pi/PiChatSession.swift +0 -1948
  136. package/apps/mac/Sources/Core/Pi/PiInstallCallout.swift +0 -86
  137. package/apps/mac/Sources/Core/Pi/PiProviderSetupCallout.swift +0 -99
  138. package/apps/mac/Sources/Core/Pi/PiWorkspaceView.swift +0 -510
  139. package/apps/mac/Sources/Core/System/Capability.swift +0 -79
  140. package/apps/mac/Sources/Core/System/DiagnosticLog.swift +0 -373
  141. package/apps/mac/Sources/Core/System/EventBus.swift +0 -31
  142. package/apps/mac/Sources/Core/System/PermissionChecker.swift +0 -224
  143. package/apps/mac/Sources/Core/System/ProcessModel.swift +0 -199
  144. package/apps/mac/Sources/Core/System/ProcessQuery.swift +0 -151
  145. package/apps/mac/Sources/Core/System/SystemTelemetryMonitor.swift +0 -273
  146. package/apps/mac/Sources/Core/Voice/AdvisorLearningStore.swift +0 -90
  147. package/apps/mac/Sources/Core/Voice/AgentSession.swift +0 -377
  148. package/apps/mac/Sources/Core/Voice/AudioProvider.swift +0 -555
  149. package/apps/mac/Sources/Core/Voice/HandsOffSession.swift +0 -839
  150. package/apps/mac/Sources/Core/Voice/VoiceChatView.swift +0 -192
  151. package/apps/mac/Sources/Core/Voice/VoxClient.swift +0 -454
  152. package/apps/mac/Sources/Core/Workspace/Project.swift +0 -28
  153. package/apps/mac/Sources/Core/Workspace/ProjectScanner.swift +0 -141
  154. package/apps/mac/Sources/Core/Workspace/SessionLayerStore.swift +0 -285
  155. package/apps/mac/Sources/Core/Workspace/SessionManager.swift +0 -75
  156. package/apps/mac/Sources/Core/Workspace/Terminal/Terminal.swift +0 -259
  157. package/apps/mac/Sources/Core/Workspace/Terminal/TerminalQuery.swift +0 -156
  158. package/apps/mac/Sources/Core/Workspace/Terminal/TerminalSynthesizer.swift +0 -200
  159. package/apps/mac/Sources/Core/Workspace/Tmux/TmuxModel.swift +0 -60
  160. package/apps/mac/Sources/Core/Workspace/Tmux/TmuxQuery.swift +0 -105
  161. package/apps/mac/Sources/Core/Workspace/WorkspaceManager.swift +0 -1027
  162. package/apps/mac/Sources/UI/ActionRow.swift +0 -78
  163. package/apps/mac/Sources/UI/OrphanRow.swift +0 -129
  164. package/apps/mac/Sources/UI/ProjectRow.swift +0 -368
  165. package/apps/mac/Sources/UI/TabGroupRow.swift +0 -178
  166. package/apps/mac/Sources/UI/Theme.swift +0 -164
  167. package/apps/mac/Tests/StageDragTests.swift +0 -333
  168. package/apps/mac/Tests/StageJoinTests.swift +0 -313
  169. package/apps/mac/Tests/StageManagerTests.swift +0 -280
  170. package/apps/mac/Tests/StageTileTests.swift +0 -353
  171. package/swift/Package.swift +0 -20
  172. package/swift/Sources/DeckKit/DeckAction.swift +0 -51
  173. package/swift/Sources/DeckKit/DeckBridgeSecurity.swift +0 -152
  174. package/swift/Sources/DeckKit/DeckCockpit.swift +0 -82
  175. package/swift/Sources/DeckKit/DeckHost.swift +0 -7
  176. package/swift/Sources/DeckKit/DeckManifest.swift +0 -145
  177. package/swift/Sources/DeckKit/DeckRuntimeSnapshot.swift +0 -533
  178. package/swift/Sources/DeckKit/DeckTrackpad.swift +0 -63
  179. package/swift/Sources/DeckKit/DeckValue.swift +0 -93
  180. package/swift/Sources/DeckKit/DeckVoiceError.swift +0 -88
  181. 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
- }