@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.
Files changed (74) hide show
  1. package/package.json +1 -1
  2. package/src/actions.ts +39 -0
  3. package/src/defaults.ts +2 -0
  4. package/src/index.ts +9 -1
  5. package/src/normalize-theme.ts +260 -0
  6. package/src/themes/generated/andromeeda.ts +346 -0
  7. package/src/themes/generated/aurora-x.ts +603 -0
  8. package/src/themes/generated/ayu-dark.ts +817 -0
  9. package/src/themes/generated/ayu-light.ts +817 -0
  10. package/src/themes/generated/ayu-mirage.ts +817 -0
  11. package/src/themes/generated/catppuccin-frappe.ts +2041 -0
  12. package/src/themes/generated/catppuccin-latte.ts +2041 -0
  13. package/src/themes/generated/catppuccin-macchiato.ts +2041 -0
  14. package/src/themes/generated/catppuccin-mocha.ts +2041 -0
  15. package/src/themes/generated/dark-plus.ts +614 -0
  16. package/src/themes/generated/dracula-soft.ts +947 -0
  17. package/src/themes/generated/dracula.ts +947 -0
  18. package/src/themes/generated/everforest-dark.ts +2246 -0
  19. package/src/themes/generated/everforest-light.ts +2246 -0
  20. package/src/themes/generated/github-dark-default.ts +605 -0
  21. package/src/themes/generated/github-dark-dimmed.ts +605 -0
  22. package/src/themes/generated/github-dark-high-contrast.ts +608 -0
  23. package/src/themes/generated/github-dark.ts +519 -0
  24. package/src/themes/generated/github-light-default.ts +602 -0
  25. package/src/themes/generated/github-light-high-contrast.ts +604 -0
  26. package/src/themes/generated/github-light.ts +515 -0
  27. package/src/themes/generated/gruvbox-dark-hard.ts +1124 -0
  28. package/src/themes/generated/gruvbox-dark-medium.ts +1124 -0
  29. package/src/themes/generated/gruvbox-dark-soft.ts +1124 -0
  30. package/src/themes/generated/gruvbox-light-hard.ts +1124 -0
  31. package/src/themes/generated/gruvbox-light-medium.ts +1124 -0
  32. package/src/themes/generated/gruvbox-light-soft.ts +1124 -0
  33. package/src/themes/generated/horizon-bright.ts +420 -0
  34. package/src/themes/generated/horizon.ts +418 -0
  35. package/src/themes/generated/houston.ts +1819 -0
  36. package/src/themes/generated/index.ts +140 -0
  37. package/src/themes/generated/kanagawa-dragon.ts +753 -0
  38. package/src/themes/generated/kanagawa-lotus.ts +753 -0
  39. package/src/themes/generated/kanagawa-wave.ts +753 -0
  40. package/src/themes/generated/laserwave.ts +489 -0
  41. package/src/themes/generated/light-plus.ts +639 -0
  42. package/src/themes/generated/material-theme-darker.ts +759 -0
  43. package/src/themes/generated/material-theme-lighter.ts +759 -0
  44. package/src/themes/generated/material-theme-ocean.ts +759 -0
  45. package/src/themes/generated/material-theme-palenight.ts +759 -0
  46. package/src/themes/generated/material-theme.ts +759 -0
  47. package/src/themes/generated/min-dark.ts +326 -0
  48. package/src/themes/generated/min-light.ts +331 -0
  49. package/src/themes/generated/monokai.ts +463 -0
  50. package/src/themes/generated/night-owl-light.ts +1526 -0
  51. package/src/themes/generated/night-owl.ts +1628 -0
  52. package/src/themes/generated/nord.ts +1277 -0
  53. package/src/themes/generated/one-dark-pro.ts +1920 -0
  54. package/src/themes/generated/one-light.ts +1599 -0
  55. package/src/themes/generated/plastic.ts +315 -0
  56. package/src/themes/generated/poimandres.ts +1233 -0
  57. package/src/themes/generated/red.ts +395 -0
  58. package/src/themes/generated/rose-pine-dawn.ts +696 -0
  59. package/src/themes/generated/rose-pine-moon.ts +696 -0
  60. package/src/themes/generated/rose-pine.ts +696 -0
  61. package/src/themes/generated/slack-dark.ts +594 -0
  62. package/src/themes/generated/slack-ochin.ts +461 -0
  63. package/src/themes/generated/snazzy-light.ts +1254 -0
  64. package/src/themes/generated/solarized-dark.ts +387 -0
  65. package/src/themes/generated/solarized-light.ts +379 -0
  66. package/src/themes/generated/synthwave-84.ts +751 -0
  67. package/src/themes/generated/tokyo-night.ts +1420 -0
  68. package/src/themes/generated/vesper.ts +578 -0
  69. package/src/themes/generated/vitesse-black.ts +629 -0
  70. package/src/themes/generated/vitesse-dark.ts +629 -0
  71. package/src/themes/generated/vitesse-light.ts +627 -0
  72. package/src/themes.ts +57 -10
  73. package/src/types.ts +17 -3
  74. 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 { GENERATED_THEME_IDS, GENERATED_THEMES } from './themes.generated'
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 'aimux'
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. Clones `base`'s Theme and patches a few VSCode color keys
35
- * in `colors`. Token settings inherit from the base unchanged.
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
- * Identity passthrough for a full raw Shiki theme. Use this to drop a VSCode
48
- * theme JSON verbatim into aimux config.
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: NamedTheme): NamedTheme {
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