@brimveyn/aimux-config 0.4.0 → 0.4.1
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 +39 -0
- package/src/defaults.ts +2 -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 +17 -3
- 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
|
@@ -170,7 +170,7 @@ export interface GitPaneState {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
export type GitFileStatus = 'M' | 'A' | 'D' | 'R' | 'C' | 'U' | '?'
|
|
173
|
-
export type GitFileSection = 'staged' | 'unstaged' | 'untracked'
|
|
173
|
+
export type GitFileSection = 'staged' | 'unstaged' | 'untracked' | 'historical'
|
|
174
174
|
|
|
175
175
|
export interface GitFileEntry {
|
|
176
176
|
path: string
|
|
@@ -220,6 +220,7 @@ export interface GitModeState {
|
|
|
220
220
|
actionMessage: string | null
|
|
221
221
|
diffView: GitDiffView
|
|
222
222
|
folds: Record<string, Record<string, FoldState>>
|
|
223
|
+
headOffset: number
|
|
223
224
|
}
|
|
224
225
|
|
|
225
226
|
interface ModalBase {
|
|
@@ -469,6 +470,8 @@ export type GitModeAction =
|
|
|
469
470
|
| { type: 'git-mode-clear-diff-cache'; path: string }
|
|
470
471
|
| { type: 'git-mode-set-message'; message: string | null }
|
|
471
472
|
| { type: 'git-mode-toggle-diff-view' }
|
|
473
|
+
| { type: 'git-mode-shift-head-offset'; delta: number }
|
|
474
|
+
| { type: 'git-mode-set-head-offset'; offset: number }
|
|
472
475
|
| {
|
|
473
476
|
type: 'git-mode-fold-adjust'
|
|
474
477
|
key: string
|
|
@@ -680,6 +683,17 @@ export interface NamedTheme extends Theme {
|
|
|
680
683
|
displayName: string
|
|
681
684
|
}
|
|
682
685
|
|
|
686
|
+
/**
|
|
687
|
+
* Input shape accepted by `themes.full(...)` — lets users paste a shiki /
|
|
688
|
+
* VSCode theme JSON without typing every AIMUX_COLOR_KEY. `registerUserThemes`
|
|
689
|
+
* runs it through `normalizeTheme` to produce a complete `Theme`.
|
|
690
|
+
*/
|
|
691
|
+
export interface UserThemeInput extends Partial<Omit<Theme, 'colors' | 'name' | 'displayName'>> {
|
|
692
|
+
name: string
|
|
693
|
+
displayName: string
|
|
694
|
+
colors?: Partial<ThemeColorMap> & Record<string, string | undefined>
|
|
695
|
+
}
|
|
696
|
+
|
|
683
697
|
// ─── Backend config (stub) ────────────────────────────────────────────────────
|
|
684
698
|
|
|
685
699
|
export interface BackendConfig {
|
|
@@ -791,7 +805,7 @@ export type GitPaneConfig = GitPaneEmbeddedConfig | GitPanePaneConfig
|
|
|
791
805
|
|
|
792
806
|
export interface AimuxUserConfig {
|
|
793
807
|
theme?: ThemeId
|
|
794
|
-
themes?: Record<string, NamedThemeDefinition>
|
|
808
|
+
themes?: Record<string, NamedThemeDefinition | UserThemeInput>
|
|
795
809
|
keymaps?: (k: KeymapBuilderApi) => KeymapBuilderApi
|
|
796
810
|
backends?: Record<string, BackendConfig>
|
|
797
811
|
sidebar?: SidebarConfig
|
|
@@ -825,7 +839,7 @@ export interface ResolvedKeymapConfig {
|
|
|
825
839
|
|
|
826
840
|
export interface ResolvedConfig {
|
|
827
841
|
theme: ThemeId | undefined
|
|
828
|
-
themes: Record<string, NamedThemeDefinition>
|
|
842
|
+
themes: Record<string, NamedThemeDefinition | UserThemeInput>
|
|
829
843
|
keymaps: ResolvedKeymapConfig
|
|
830
844
|
backends: Record<string, BackendConfig>
|
|
831
845
|
sidebar: SidebarConfig
|