@brimveyn/aimux-config 0.4.0 → 0.4.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.
- package/package.json +1 -1
- package/src/actions.ts +47 -0
- package/src/defaults.ts +3 -0
- package/src/index.ts +9 -1
- package/src/normalize-theme.ts +260 -0
- package/src/themes/generated/andromeeda.ts +346 -0
- package/src/themes/generated/aurora-x.ts +603 -0
- package/src/themes/generated/ayu-dark.ts +817 -0
- package/src/themes/generated/ayu-light.ts +817 -0
- package/src/themes/generated/ayu-mirage.ts +817 -0
- package/src/themes/generated/catppuccin-frappe.ts +2041 -0
- package/src/themes/generated/catppuccin-latte.ts +2041 -0
- package/src/themes/generated/catppuccin-macchiato.ts +2041 -0
- package/src/themes/generated/catppuccin-mocha.ts +2041 -0
- package/src/themes/generated/dark-plus.ts +614 -0
- package/src/themes/generated/dracula-soft.ts +947 -0
- package/src/themes/generated/dracula.ts +947 -0
- package/src/themes/generated/everforest-dark.ts +2246 -0
- package/src/themes/generated/everforest-light.ts +2246 -0
- package/src/themes/generated/github-dark-default.ts +605 -0
- package/src/themes/generated/github-dark-dimmed.ts +605 -0
- package/src/themes/generated/github-dark-high-contrast.ts +608 -0
- package/src/themes/generated/github-dark.ts +519 -0
- package/src/themes/generated/github-light-default.ts +602 -0
- package/src/themes/generated/github-light-high-contrast.ts +604 -0
- package/src/themes/generated/github-light.ts +515 -0
- package/src/themes/generated/gruvbox-dark-hard.ts +1124 -0
- package/src/themes/generated/gruvbox-dark-medium.ts +1124 -0
- package/src/themes/generated/gruvbox-dark-soft.ts +1124 -0
- package/src/themes/generated/gruvbox-light-hard.ts +1124 -0
- package/src/themes/generated/gruvbox-light-medium.ts +1124 -0
- package/src/themes/generated/gruvbox-light-soft.ts +1124 -0
- package/src/themes/generated/horizon-bright.ts +420 -0
- package/src/themes/generated/horizon.ts +418 -0
- package/src/themes/generated/houston.ts +1819 -0
- package/src/themes/generated/index.ts +140 -0
- package/src/themes/generated/kanagawa-dragon.ts +753 -0
- package/src/themes/generated/kanagawa-lotus.ts +753 -0
- package/src/themes/generated/kanagawa-wave.ts +753 -0
- package/src/themes/generated/laserwave.ts +489 -0
- package/src/themes/generated/light-plus.ts +639 -0
- package/src/themes/generated/material-theme-darker.ts +759 -0
- package/src/themes/generated/material-theme-lighter.ts +759 -0
- package/src/themes/generated/material-theme-ocean.ts +759 -0
- package/src/themes/generated/material-theme-palenight.ts +759 -0
- package/src/themes/generated/material-theme.ts +759 -0
- package/src/themes/generated/min-dark.ts +326 -0
- package/src/themes/generated/min-light.ts +331 -0
- package/src/themes/generated/monokai.ts +463 -0
- package/src/themes/generated/night-owl-light.ts +1526 -0
- package/src/themes/generated/night-owl.ts +1628 -0
- package/src/themes/generated/nord.ts +1277 -0
- package/src/themes/generated/one-dark-pro.ts +1920 -0
- package/src/themes/generated/one-light.ts +1599 -0
- package/src/themes/generated/plastic.ts +315 -0
- package/src/themes/generated/poimandres.ts +1233 -0
- package/src/themes/generated/red.ts +395 -0
- package/src/themes/generated/rose-pine-dawn.ts +696 -0
- package/src/themes/generated/rose-pine-moon.ts +696 -0
- package/src/themes/generated/rose-pine.ts +696 -0
- package/src/themes/generated/slack-dark.ts +594 -0
- package/src/themes/generated/slack-ochin.ts +461 -0
- package/src/themes/generated/snazzy-light.ts +1254 -0
- package/src/themes/generated/solarized-dark.ts +387 -0
- package/src/themes/generated/solarized-light.ts +379 -0
- package/src/themes/generated/synthwave-84.ts +751 -0
- package/src/themes/generated/tokyo-night.ts +1420 -0
- package/src/themes/generated/vesper.ts +578 -0
- package/src/themes/generated/vitesse-black.ts +629 -0
- package/src/themes/generated/vitesse-dark.ts +629 -0
- package/src/themes/generated/vitesse-light.ts +627 -0
- package/src/themes.ts +57 -10
- package/src/types.ts +29 -4
- package/src/themes.generated.ts +0 -59794
package/src/themes.ts
CHANGED
|
@@ -5,14 +5,18 @@ import type {
|
|
|
5
5
|
ThemeColorMap,
|
|
6
6
|
ThemeDefinition,
|
|
7
7
|
ThemeId,
|
|
8
|
+
UserThemeInput,
|
|
8
9
|
} from './types'
|
|
9
10
|
|
|
10
11
|
import { HOUSE_THEME_IDS, HOUSE_THEMES } from './house-themes'
|
|
11
|
-
import {
|
|
12
|
+
import { normalizeTheme } from './normalize-theme'
|
|
13
|
+
import { GENERATED_THEME_IDS, GENERATED_THEMES } from './themes/generated'
|
|
12
14
|
|
|
13
15
|
export const THEMES: Record<string, Theme> = { ...GENERATED_THEMES, ...HOUSE_THEMES }
|
|
14
16
|
export const THEME_IDS: ThemeId[] = [...GENERATED_THEME_IDS, ...HOUSE_THEME_IDS]
|
|
15
17
|
|
|
18
|
+
const DEFAULT_THEME_ID: ThemeId = 'aimux'
|
|
19
|
+
|
|
16
20
|
const LEGACY_THEME_ALIASES: Record<string, ThemeId> = {
|
|
17
21
|
'everforest': 'everforest-dark',
|
|
18
22
|
'gruvbox-dark': 'gruvbox-dark-hard',
|
|
@@ -26,28 +30,71 @@ export function migrateThemeId(id: string | undefined): ThemeId {
|
|
|
26
30
|
const alias = LEGACY_THEME_ALIASES[id]
|
|
27
31
|
if (alias !== undefined) return alias
|
|
28
32
|
}
|
|
29
|
-
return
|
|
33
|
+
return DEFAULT_THEME_ID
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function isKnownThemeId(id: string): boolean {
|
|
37
|
+
return id in THEMES
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function isFullTheme(
|
|
41
|
+
def: NamedTheme | NamedThemeDefinition | UserThemeInput
|
|
42
|
+
): def is NamedTheme | UserThemeInput {
|
|
43
|
+
return 'settings' in def || 'fg' in def || 'bg' in def
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Merge user-declared themes into the registry. Both the full and palette
|
|
48
|
+
* shortcut paths run through `normalizeTheme` so every registered theme has
|
|
49
|
+
* all AIMUX_COLOR_KEYS populated — same guarantees as shipped themes.
|
|
50
|
+
*/
|
|
51
|
+
export function registerUserThemes(
|
|
52
|
+
defs: Record<string, NamedTheme | NamedThemeDefinition | UserThemeInput> | undefined
|
|
53
|
+
): void {
|
|
54
|
+
if (!defs) return
|
|
55
|
+
const fallback = THEMES[DEFAULT_THEME_ID]
|
|
56
|
+
if (!fallback) return
|
|
57
|
+
for (const [id, def] of Object.entries(defs)) {
|
|
58
|
+
if (isFullTheme(def)) {
|
|
59
|
+
THEMES[id] = normalizeTheme({ ...def, name: def.name ?? id })
|
|
60
|
+
} else {
|
|
61
|
+
const base = def.base ? (THEMES[def.base] ?? fallback) : fallback
|
|
62
|
+
const colors: Record<string, string> = { ...base.colors }
|
|
63
|
+
for (const [k, v] of Object.entries(def.colors ?? {})) {
|
|
64
|
+
if (typeof v === 'string') colors[k] = v
|
|
65
|
+
}
|
|
66
|
+
THEMES[id] = normalizeTheme({
|
|
67
|
+
bg: base.bg,
|
|
68
|
+
colors,
|
|
69
|
+
displayName: def.name,
|
|
70
|
+
fg: base.fg,
|
|
71
|
+
name: id,
|
|
72
|
+
settings: base.settings,
|
|
73
|
+
type: base.type,
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
if (!THEME_IDS.includes(id)) THEME_IDS.push(id)
|
|
77
|
+
}
|
|
30
78
|
}
|
|
31
79
|
|
|
32
80
|
export const themes = {
|
|
33
81
|
/**
|
|
34
|
-
* Palette shortcut.
|
|
35
|
-
*
|
|
82
|
+
* Palette shortcut. Patches VSCode color keys on top of an existing theme;
|
|
83
|
+
* token settings inherit from the base unchanged.
|
|
36
84
|
*/
|
|
37
85
|
define(name: string, base: ThemeId, overrides: Partial<ThemeColorMap>): NamedThemeDefinition {
|
|
38
86
|
return { base, colors: overrides, name }
|
|
39
87
|
},
|
|
40
|
-
/**
|
|
41
|
-
* Lower-level, unnamed variant of `define`. Prefer `define` for config entries.
|
|
42
|
-
*/
|
|
88
|
+
/** Unnamed variant of `define`. Prefer `define` in config. */
|
|
43
89
|
extend(base: ThemeId, overrides: Partial<ThemeColorMap>): ThemeDefinition {
|
|
44
90
|
return { base, colors: overrides }
|
|
45
91
|
},
|
|
46
92
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
93
|
+
* Passthrough for a raw Shiki / VSCode-shape theme. Missing
|
|
94
|
+
* `AIMUX_COLOR_KEYS` are filled at registration via the same fallback chain
|
|
95
|
+
* the shipped themes go through.
|
|
49
96
|
*/
|
|
50
|
-
full(theme:
|
|
97
|
+
full(theme: UserThemeInput): UserThemeInput {
|
|
51
98
|
return theme
|
|
52
99
|
},
|
|
53
100
|
}
|
package/src/types.ts
CHANGED
|
@@ -165,12 +165,14 @@ export interface GitPaneState {
|
|
|
165
165
|
ratio: number
|
|
166
166
|
diffModeRatio: number
|
|
167
167
|
fileListMode: GitFileListMode
|
|
168
|
+
treeCompaction: boolean
|
|
168
169
|
path: GitPanePathConfig
|
|
169
170
|
diffCount: GitPaneDiffCountConfig
|
|
171
|
+
prefetchRadius: number
|
|
170
172
|
}
|
|
171
173
|
|
|
172
174
|
export type GitFileStatus = 'M' | 'A' | 'D' | 'R' | 'C' | 'U' | '?'
|
|
173
|
-
export type GitFileSection = 'staged' | 'unstaged' | 'untracked'
|
|
175
|
+
export type GitFileSection = 'staged' | 'unstaged' | 'untracked' | 'historical'
|
|
174
176
|
|
|
175
177
|
export interface GitFileEntry {
|
|
176
178
|
path: string
|
|
@@ -215,11 +217,16 @@ export interface GitModeState {
|
|
|
215
217
|
selectedEntryKey: string | null
|
|
216
218
|
collapsedFolders: Record<string, true>
|
|
217
219
|
diffs: Record<string, DiffData>
|
|
220
|
+
/** Parsed diff cache (internal); detailed shape lives in src/state/types. */
|
|
221
|
+
parsedFiles: Record<string, { hash: string; file: unknown }>
|
|
222
|
+
/** Syntax-highlight cache (internal). */
|
|
223
|
+
highlights: Record<string, { hash: string; themeId: string; add: unknown; del: unknown }>
|
|
218
224
|
loading: Record<string, boolean>
|
|
219
225
|
pendingDeletePath: string | null
|
|
220
226
|
actionMessage: string | null
|
|
221
227
|
diffView: GitDiffView
|
|
222
228
|
folds: Record<string, Record<string, FoldState>>
|
|
229
|
+
headOffset: number
|
|
223
230
|
}
|
|
224
231
|
|
|
225
232
|
interface ModalBase {
|
|
@@ -463,12 +470,15 @@ export type GitModeAction =
|
|
|
463
470
|
| { type: 'git-mode-collapse-selection' }
|
|
464
471
|
| { type: 'git-mode-expand-selection' }
|
|
465
472
|
| { type: 'git-mode-toggle-file-list-mode' }
|
|
466
|
-
| { type: 'git-mode-
|
|
473
|
+
| { type: 'git-mode-toggle-tree-compaction' }
|
|
474
|
+
| { type: 'git-mode-set-diff'; key: string; diff: DiffData; hash: string }
|
|
467
475
|
| { type: 'git-mode-set-loading'; key: string; loading: boolean }
|
|
468
476
|
| { type: 'git-mode-set-pending-delete'; path: string | null }
|
|
469
477
|
| { type: 'git-mode-clear-diff-cache'; path: string }
|
|
470
478
|
| { type: 'git-mode-set-message'; message: string | null }
|
|
471
479
|
| { type: 'git-mode-toggle-diff-view' }
|
|
480
|
+
| { type: 'git-mode-shift-head-offset'; delta: number }
|
|
481
|
+
| { type: 'git-mode-set-head-offset'; offset: number }
|
|
472
482
|
| {
|
|
473
483
|
type: 'git-mode-fold-adjust'
|
|
474
484
|
key: string
|
|
@@ -526,6 +536,7 @@ export type SideEffect =
|
|
|
526
536
|
| { type: 'scroll-git-diff'; delta: number }
|
|
527
537
|
| { type: 'persist-git-diff-mode-ratio'; ratio: number }
|
|
528
538
|
| { type: 'persist-git-file-list-mode'; mode: GitFileListMode }
|
|
539
|
+
| { type: 'persist-git-tree-compaction'; enabled: boolean }
|
|
529
540
|
| { type: 'git-stage'; path: string }
|
|
530
541
|
| { type: 'git-unstage'; path: string }
|
|
531
542
|
| { type: 'git-restore'; path: string }
|
|
@@ -680,6 +691,17 @@ export interface NamedTheme extends Theme {
|
|
|
680
691
|
displayName: string
|
|
681
692
|
}
|
|
682
693
|
|
|
694
|
+
/**
|
|
695
|
+
* Input shape accepted by `themes.full(...)` — lets users paste a shiki /
|
|
696
|
+
* VSCode theme JSON without typing every AIMUX_COLOR_KEY. `registerUserThemes`
|
|
697
|
+
* runs it through `normalizeTheme` to produce a complete `Theme`.
|
|
698
|
+
*/
|
|
699
|
+
export interface UserThemeInput extends Partial<Omit<Theme, 'colors' | 'name' | 'displayName'>> {
|
|
700
|
+
name: string
|
|
701
|
+
displayName: string
|
|
702
|
+
colors?: Partial<ThemeColorMap> & Record<string, string | undefined>
|
|
703
|
+
}
|
|
704
|
+
|
|
683
705
|
// ─── Backend config (stub) ────────────────────────────────────────────────────
|
|
684
706
|
|
|
685
707
|
export interface BackendConfig {
|
|
@@ -773,8 +795,11 @@ interface GitPaneBaseConfig {
|
|
|
773
795
|
ratio?: number
|
|
774
796
|
diffModeRatio?: number
|
|
775
797
|
fileListMode?: GitFileListMode
|
|
798
|
+
treeCompaction?: boolean
|
|
776
799
|
path?: GitPanePathConfig
|
|
777
800
|
diffCount?: GitPaneDiffCountConfig
|
|
801
|
+
/** Prefetch N neighbouring diffs around the cursor; 0 disables. */
|
|
802
|
+
prefetchRadius?: number
|
|
778
803
|
}
|
|
779
804
|
|
|
780
805
|
export interface GitPaneEmbeddedConfig extends GitPaneBaseConfig {
|
|
@@ -791,7 +816,7 @@ export type GitPaneConfig = GitPaneEmbeddedConfig | GitPanePaneConfig
|
|
|
791
816
|
|
|
792
817
|
export interface AimuxUserConfig {
|
|
793
818
|
theme?: ThemeId
|
|
794
|
-
themes?: Record<string, NamedThemeDefinition>
|
|
819
|
+
themes?: Record<string, NamedThemeDefinition | UserThemeInput>
|
|
795
820
|
keymaps?: (k: KeymapBuilderApi) => KeymapBuilderApi
|
|
796
821
|
backends?: Record<string, BackendConfig>
|
|
797
822
|
sidebar?: SidebarConfig
|
|
@@ -825,7 +850,7 @@ export interface ResolvedKeymapConfig {
|
|
|
825
850
|
|
|
826
851
|
export interface ResolvedConfig {
|
|
827
852
|
theme: ThemeId | undefined
|
|
828
|
-
themes: Record<string, NamedThemeDefinition>
|
|
853
|
+
themes: Record<string, NamedThemeDefinition | UserThemeInput>
|
|
829
854
|
keymaps: ResolvedKeymapConfig
|
|
830
855
|
backends: Record<string, BackendConfig>
|
|
831
856
|
sidebar: SidebarConfig
|