@brimveyn/aimux 1.6.0 → 1.6.2

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 (56) hide show
  1. package/package.json +2 -2
  2. package/src/app-runtime/side-effects.ts +19 -0
  3. package/src/app.tsx +4 -0
  4. package/src/config.ts +19 -1
  5. package/src/git/diff-hash.ts +10 -0
  6. package/src/git/git-diff.ts +24 -12
  7. package/src/git/git-poller.ts +11 -3
  8. package/src/git/git-status.ts +98 -17
  9. package/src/input/modes/types.ts +1 -0
  10. package/src/pty/terminal-snapshot.ts +5 -5
  11. package/src/state/git-tree.ts +43 -17
  12. package/src/state/reducers/diff-cache.ts +64 -0
  13. package/src/state/reducers/git-mode-state.ts +135 -34
  14. package/src/state/reducers/git-panel-state.ts +39 -3
  15. package/src/state/store.ts +2 -0
  16. package/src/state/types.ts +63 -2
  17. package/src/ui/components/create-session-modal.tsx +5 -4
  18. package/src/ui/components/diff-renderer/fold-strip.tsx +3 -1
  19. package/src/ui/components/diff-renderer/pierre-diff.tsx +11 -32
  20. package/src/ui/components/diff-renderer/prepare-diff.ts +66 -0
  21. package/src/ui/components/diff-renderer/split-view.tsx +35 -6
  22. package/src/ui/components/diff-renderer/stacked-view.tsx +32 -5
  23. package/src/ui/components/diff-renderer/use-diff-prefetch.ts +191 -0
  24. package/src/ui/components/diff-renderer/use-diff-preparation.ts +106 -0
  25. package/src/ui/components/git-commit-modal.tsx +2 -1
  26. package/src/ui/components/git-pane-widget.tsx +3 -1
  27. package/src/ui/components/git-panel.tsx +92 -50
  28. package/src/ui/components/git-view.tsx +34 -5
  29. package/src/ui/components/help-modal.tsx +2 -1
  30. package/src/ui/components/input-field.tsx +2 -1
  31. package/src/ui/components/list-item.tsx +2 -1
  32. package/src/ui/components/modal-filter-bar.tsx +2 -1
  33. package/src/ui/components/modal-keybinds-overlay.tsx +2 -1
  34. package/src/ui/components/modal-shell.tsx +2 -1
  35. package/src/ui/components/new-tab-modal.tsx +2 -1
  36. package/src/ui/components/pending-chord-overlay.tsx +2 -1
  37. package/src/ui/components/session-bar.tsx +3 -1
  38. package/src/ui/components/session-picker-modal.tsx +2 -1
  39. package/src/ui/components/sidebar.tsx +8 -5
  40. package/src/ui/components/snippet-editor-modal.tsx +2 -1
  41. package/src/ui/components/snippet-picker-modal.tsx +2 -1
  42. package/src/ui/components/split-layout.tsx +2 -1
  43. package/src/ui/components/status-bar.tsx +8 -6
  44. package/src/ui/components/surface.tsx +6 -6
  45. package/src/ui/components/tab-item.tsx +14 -9
  46. package/src/ui/components/terminal-pane.tsx +7 -5
  47. package/src/ui/components/theme-picker-modal.tsx +2 -1
  48. package/src/ui/components/update-available-modal.tsx +2 -1
  49. package/src/ui/filter-themes.ts +7 -2
  50. package/src/ui/root.tsx +3 -1
  51. package/src/ui/status-bar-model.ts +13 -3
  52. package/src/ui/theme-store.ts +36 -0
  53. package/src/ui/theme.ts +4 -29
  54. package/src/ui/themes.ts +15 -63
  55. package/src/ui/house-themes.ts +0 -313
  56. package/src/ui/themes.generated.ts +0 -59794
@@ -1,313 +0,0 @@
1
- // Hand-curated aimux house themes, full Shiki theme shape. Colors follow the
2
- // VSCode workbench color key namespace; `settings` is a TextMate token rule
3
- // array shared by the in-repo diff highlighter and `shiki.loadTheme`.
4
- /* eslint-disable perfectionist/sort-objects */
5
-
6
- import type { Theme, ThemeColorMap } from './themes'
7
-
8
- // --- aimux --------------------------------------------------------------
9
- //
10
- // Teal accents on a deep blue-black background. Designed to look at home
11
- // inside the aimux chrome.
12
- const AIMUX_BG = '#11151b'
13
- const AIMUX_FG = '#edf4ff'
14
-
15
- const AIMUX_COLORS: ThemeColorMap = {
16
- 'contrastBorder': '#3a4c60',
17
- 'descriptionForeground': '#6b829a',
18
- 'diffEditor.insertedLineBackground': '#1e3d2b',
19
- 'diffEditor.removedLineBackground': '#3b1e27',
20
- 'editor.background': AIMUX_BG,
21
- 'editor.foreground': AIMUX_FG,
22
- 'editor.lineHighlightBackground': '#1a2330',
23
- 'editor.selectionBackground': '#1f3344',
24
- 'editorCursor.foreground': '#7cd1b8',
25
- 'editorError.foreground': '#f38ba8',
26
- 'editorGroup.border': '#2d3f52',
27
- 'editorGroupHeader.tabsBackground': '#16202b',
28
- 'editorLineNumber.foreground': '#3e506a',
29
- 'editorWarning.foreground': '#f6c177',
30
- 'editorWidget.background': '#0b1016',
31
- 'errorForeground': '#f38ba8',
32
- 'focusBorder': '#7cd1b8',
33
- 'foreground': AIMUX_FG,
34
- 'gitDecoration.addedResourceForeground': '#8bd5ca',
35
- 'gitDecoration.deletedResourceForeground': '#f38ba8',
36
- 'gitDecoration.modifiedResourceForeground': '#f6c177',
37
- 'gitDecoration.untrackedResourceForeground': '#8bd5ca',
38
- 'input.background': '#1c2734',
39
- 'input.border': '#2d3f52',
40
- 'input.foreground': AIMUX_FG,
41
- 'list.activeSelectionBackground': '#1f3344',
42
- 'list.activeSelectionForeground': AIMUX_FG,
43
- 'list.hoverBackground': '#1a2330',
44
- 'panel.background': '#16202b',
45
- 'panel.border': '#2d3f52',
46
- 'sideBar.background': '#16202b',
47
- 'sideBar.foreground': AIMUX_FG,
48
- 'sideBarSectionHeader.background': '#1c2734',
49
- 'sideBarSectionHeader.foreground': '#b8c5d6',
50
- 'terminal.ansiBlue': '#7cb3ff',
51
- 'terminal.ansiCyan': '#7cd1b8',
52
- 'terminal.ansiGreen': '#8bd5ca',
53
- 'terminal.ansiMagenta': '#c4a7e7',
54
- 'terminal.ansiRed': '#f38ba8',
55
- 'terminal.ansiYellow': '#f6c177',
56
- 'textLink.activeForeground': '#7cd1b8',
57
- 'textLink.foreground': '#7cd1b8',
58
- }
59
-
60
- // --- dracula-at-night --------------------------------------------------
61
- const DAN_BG = '#0e1419'
62
- const DAN_FG = '#f8f8f2'
63
-
64
- const DAN_COLORS: ThemeColorMap = {
65
- 'contrastBorder': '#44475a',
66
- 'descriptionForeground': '#6272a4',
67
- 'diffEditor.insertedLineBackground': '#162b1d',
68
- 'diffEditor.removedLineBackground': '#2a1820',
69
- 'editor.background': DAN_BG,
70
- 'editor.foreground': DAN_FG,
71
- 'editor.lineHighlightBackground': '#1a2129',
72
- 'editor.selectionBackground': '#222a33',
73
- 'editorCursor.foreground': '#f8f8f0',
74
- 'editorError.foreground': '#ff5555',
75
- 'editorGroup.border': '#2a3440',
76
- 'editorGroupHeader.tabsBackground': '#131920',
77
- 'editorLineNumber.foreground': '#495466',
78
- 'editorWarning.foreground': '#f1fa8c',
79
- 'editorWidget.background': '#090d11',
80
- 'errorForeground': '#ff5555',
81
- 'focusBorder': '#bd93f9',
82
- 'foreground': DAN_FG,
83
- 'gitDecoration.addedResourceForeground': '#50fa7b',
84
- 'gitDecoration.deletedResourceForeground': '#ff5555',
85
- 'gitDecoration.modifiedResourceForeground': '#f1fa8c',
86
- 'gitDecoration.untrackedResourceForeground': '#50fa7b',
87
- 'input.background': '#1a2129',
88
- 'input.border': '#2a3440',
89
- 'input.foreground': DAN_FG,
90
- 'list.activeSelectionBackground': '#222a33',
91
- 'list.activeSelectionForeground': DAN_FG,
92
- 'list.hoverBackground': '#1a2129',
93
- 'panel.background': '#131920',
94
- 'panel.border': '#2a3440',
95
- 'sideBar.background': '#131920',
96
- 'sideBar.foreground': DAN_FG,
97
- 'sideBarSectionHeader.background': '#1a2129',
98
- 'sideBarSectionHeader.foreground': '#bdc3cf',
99
- 'terminal.ansiBlue': '#6272a4',
100
- 'terminal.ansiCyan': '#8be9fd',
101
- 'terminal.ansiGreen': '#50fa7b',
102
- 'terminal.ansiMagenta': '#ff79c6',
103
- 'terminal.ansiRed': '#ff5555',
104
- 'terminal.ansiYellow': '#f1fa8c',
105
- 'textLink.activeForeground': '#ff79c6',
106
- 'textLink.foreground': '#bd93f9',
107
- }
108
-
109
- // --- Shared TextMate rule helpers --------------------------------------
110
-
111
- const AIMUX_SETTINGS = [
112
- { settings: { background: AIMUX_BG, foreground: AIMUX_FG } },
113
- {
114
- scope: ['comment', 'punctuation.definition.comment'],
115
- settings: { fontStyle: 'italic', foreground: '#6b829a' },
116
- },
117
- { scope: ['comment.documentation'], settings: { foreground: '#8fa6bf', fontStyle: 'italic' } },
118
- { scope: ['string', 'string.quoted'], settings: { foreground: '#f6c177' } },
119
- { scope: ['string.template'], settings: { foreground: '#f6c177' } },
120
- {
121
- scope: ['string.regexp', 'string.escape', 'constant.character.escape'],
122
- settings: { foreground: '#c4a7e7' },
123
- },
124
- {
125
- scope: ['constant.numeric', 'constant.language', 'constant.language.boolean'],
126
- settings: { foreground: '#f38ba8' },
127
- },
128
- { scope: ['constant.character', 'constant.other'], settings: { foreground: '#f38ba8' } },
129
- {
130
- scope: ['keyword', 'keyword.control', 'keyword.operator.new', 'keyword.other'],
131
- settings: { fontStyle: 'bold', foreground: '#c4a7e7' },
132
- },
133
- {
134
- scope: ['storage', 'storage.type', 'storage.modifier'],
135
- settings: { fontStyle: 'bold', foreground: '#c4a7e7' },
136
- },
137
- {
138
- scope: ['keyword.operator', 'punctuation', 'meta.brace', 'punctuation.separator'],
139
- settings: { foreground: '#6b829a' },
140
- },
141
- {
142
- scope: [
143
- 'entity.name.function',
144
- 'support.function',
145
- 'meta.function-call',
146
- 'entity.name.function.member',
147
- ],
148
- settings: { foreground: '#8bd5ca' },
149
- },
150
- {
151
- scope: [
152
- 'entity.name.type',
153
- 'support.type',
154
- 'support.class',
155
- 'entity.name.class',
156
- 'entity.name.interface',
157
- 'entity.name.namespace',
158
- ],
159
- settings: { fontStyle: 'italic', foreground: '#7cd1b8' },
160
- },
161
- {
162
- scope: ['entity.name.type.enum', 'entity.name.type.alias'],
163
- settings: { foreground: '#7cd1b8' },
164
- },
165
- { scope: ['variable', 'meta.variable'], settings: { foreground: AIMUX_FG } },
166
- {
167
- scope: ['variable.parameter', 'meta.function.parameters'],
168
- settings: { fontStyle: 'italic', foreground: AIMUX_FG },
169
- },
170
- {
171
- scope: ['variable.other.property', 'variable.other.member', 'meta.object-literal.key'],
172
- settings: { foreground: '#7cd1b8' },
173
- },
174
- {
175
- scope: ['variable.language', 'variable.language.this'],
176
- settings: { foreground: '#f38ba8', fontStyle: 'italic' },
177
- },
178
- { scope: ['entity.name.tag', 'meta.tag'], settings: { foreground: '#f38ba8' } },
179
- {
180
- scope: ['entity.other.attribute-name'],
181
- settings: { fontStyle: 'italic', foreground: '#f6c177' },
182
- },
183
- { scope: ['support.constant'], settings: { foreground: '#f38ba8' } },
184
- { scope: ['support.variable'], settings: { foreground: AIMUX_FG } },
185
- // Markdown
186
- { scope: ['markup.heading'], settings: { fontStyle: 'bold', foreground: '#7cd1b8' } },
187
- { scope: ['markup.bold'], settings: { fontStyle: 'bold', foreground: AIMUX_FG } },
188
- { scope: ['markup.italic'], settings: { fontStyle: 'italic', foreground: AIMUX_FG } },
189
- { scope: ['markup.underline.link', 'markup.inline.raw'], settings: { foreground: '#8bd5ca' } },
190
- { scope: ['markup.list'], settings: { foreground: '#c4a7e7' } },
191
- { scope: ['markup.quote'], settings: { foreground: '#6b829a', fontStyle: 'italic' } },
192
- { scope: ['markup.raw'], settings: { foreground: '#f6c177' } },
193
- // JSX / TSX
194
- {
195
- scope: ['entity.name.tag.jsx', 'support.class.component'],
196
- settings: { foreground: '#7cd1b8' },
197
- },
198
- { scope: ['meta.jsx.children'], settings: { foreground: AIMUX_FG } },
199
- // Diff
200
- { scope: ['markup.inserted', 'meta.diff.header.to-file'], settings: { foreground: '#8bd5ca' } },
201
- { scope: ['markup.deleted', 'meta.diff.header.from-file'], settings: { foreground: '#f38ba8' } },
202
- { scope: ['markup.changed'], settings: { foreground: '#f6c177' } },
203
- { scope: ['meta.diff.range'], settings: { foreground: '#c4a7e7' } },
204
- ]
205
-
206
- const DAN_SETTINGS = [
207
- { settings: { background: DAN_BG, foreground: DAN_FG } },
208
- {
209
- scope: ['comment', 'punctuation.definition.comment'],
210
- settings: { fontStyle: 'italic', foreground: '#6272a4' },
211
- },
212
- { scope: ['comment.documentation'], settings: { fontStyle: 'italic', foreground: '#8a96b4' } },
213
- { scope: ['string', 'string.quoted'], settings: { foreground: '#f1fa8c' } },
214
- { scope: ['string.template'], settings: { foreground: '#f1fa8c' } },
215
- {
216
- scope: ['string.regexp', 'string.escape', 'constant.character.escape'],
217
- settings: { foreground: '#ff79c6' },
218
- },
219
- {
220
- scope: ['constant.numeric', 'constant.language', 'constant.language.boolean'],
221
- settings: { foreground: '#bd93f9' },
222
- },
223
- { scope: ['constant.character', 'constant.other'], settings: { foreground: '#bd93f9' } },
224
- {
225
- scope: ['keyword', 'keyword.control', 'keyword.other'],
226
- settings: { fontStyle: 'bold', foreground: '#ff79c6' },
227
- },
228
- {
229
- scope: ['storage', 'storage.type', 'storage.modifier'],
230
- settings: { fontStyle: 'bold italic', foreground: '#ff79c6' },
231
- },
232
- {
233
- scope: ['keyword.operator', 'punctuation', 'meta.brace', 'punctuation.separator'],
234
- settings: { foreground: '#f8f8f2' },
235
- },
236
- {
237
- scope: ['entity.name.function', 'support.function', 'meta.function-call'],
238
- settings: { foreground: '#50fa7b' },
239
- },
240
- {
241
- scope: [
242
- 'entity.name.type',
243
- 'support.type',
244
- 'support.class',
245
- 'entity.name.class',
246
- 'entity.name.interface',
247
- ],
248
- settings: { fontStyle: 'italic', foreground: '#8be9fd' },
249
- },
250
- {
251
- scope: ['entity.name.type.enum', 'entity.name.type.alias'],
252
- settings: { foreground: '#8be9fd' },
253
- },
254
- { scope: ['variable', 'meta.variable'], settings: { foreground: DAN_FG } },
255
- {
256
- scope: ['variable.parameter', 'meta.function.parameters'],
257
- settings: { fontStyle: 'italic', foreground: '#ffb86c' },
258
- },
259
- {
260
- scope: ['variable.other.property', 'variable.other.member', 'meta.object-literal.key'],
261
- settings: { foreground: '#8be9fd' },
262
- },
263
- {
264
- scope: ['variable.language', 'variable.language.this'],
265
- settings: { foreground: '#bd93f9', fontStyle: 'italic' },
266
- },
267
- { scope: ['entity.name.tag', 'meta.tag'], settings: { foreground: '#ff79c6' } },
268
- {
269
- scope: ['entity.other.attribute-name'],
270
- settings: { fontStyle: 'italic', foreground: '#50fa7b' },
271
- },
272
- { scope: ['support.constant'], settings: { foreground: '#bd93f9' } },
273
- // Markdown
274
- { scope: ['markup.heading'], settings: { fontStyle: 'bold', foreground: '#bd93f9' } },
275
- { scope: ['markup.bold'], settings: { fontStyle: 'bold', foreground: '#ffb86c' } },
276
- { scope: ['markup.italic'], settings: { fontStyle: 'italic', foreground: '#f1fa8c' } },
277
- { scope: ['markup.underline.link', 'markup.inline.raw'], settings: { foreground: '#8be9fd' } },
278
- { scope: ['markup.list'], settings: { foreground: '#ff79c6' } },
279
- { scope: ['markup.quote'], settings: { foreground: '#6272a4', fontStyle: 'italic' } },
280
- { scope: ['markup.raw'], settings: { foreground: '#f1fa8c' } },
281
- // JSX / TSX
282
- {
283
- scope: ['entity.name.tag.jsx', 'support.class.component'],
284
- settings: { foreground: '#8be9fd' },
285
- },
286
- // Diff
287
- { scope: ['markup.inserted'], settings: { foreground: '#50fa7b' } },
288
- { scope: ['markup.deleted'], settings: { foreground: '#ff5555' } },
289
- { scope: ['markup.changed'], settings: { foreground: '#f1fa8c' } },
290
- ]
291
-
292
- export const HOUSE_THEMES: Record<string, Theme> = {
293
- 'aimux': {
294
- bg: AIMUX_BG,
295
- colors: AIMUX_COLORS,
296
- displayName: 'Aimux',
297
- fg: AIMUX_FG,
298
- name: 'aimux',
299
- settings: AIMUX_SETTINGS,
300
- type: 'dark',
301
- },
302
- 'dracula-at-night': {
303
- bg: DAN_BG,
304
- colors: DAN_COLORS,
305
- displayName: 'Dracula At Night',
306
- fg: DAN_FG,
307
- name: 'dracula-at-night',
308
- settings: DAN_SETTINGS,
309
- type: 'dark',
310
- },
311
- }
312
-
313
- export const HOUSE_THEME_IDS: string[] = Object.keys(HOUSE_THEMES)