@tooee/themes 0.7.2 → 0.8.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.
- package/dist/context.d.ts +4 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +4 -3
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +19 -64
- package/dist/loader.js.map +1 -1
- package/dist/types.d.ts +56 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +31 -80
- package/dist/types.js.map +1 -1
- package/package.json +2 -4
- package/src/context.tsx +5 -4
- package/src/index.ts +1 -6
- package/src/loader.ts +29 -70
- package/src/types.ts +39 -85
- package/dist/close-button.d.ts +0 -17
- package/dist/close-button.d.ts.map +0 -1
- package/dist/close-button.js +0 -23
- package/dist/close-button.js.map +0 -1
- package/dist/theme-picker.d.ts +0 -14
- package/dist/theme-picker.d.ts.map +0 -1
- package/dist/theme-picker.js +0 -109
- package/dist/theme-picker.js.map +0 -1
- package/src/close-button.tsx +0 -45
- package/src/theme-picker.tsx +0 -189
package/dist/context.d.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import type { SyntaxStyle } from "@opentui/core";
|
|
3
|
+
import type { ColorMode } from "@tooee/config";
|
|
3
4
|
import type { ResolvedTheme } from "./types.js";
|
|
4
5
|
import type { Theme } from "./loader.js";
|
|
5
6
|
interface ThemeContextValue {
|
|
6
7
|
theme: ResolvedTheme;
|
|
7
8
|
syntax: SyntaxStyle;
|
|
8
9
|
name: string;
|
|
9
|
-
mode:
|
|
10
|
+
mode: ColorMode;
|
|
10
11
|
}
|
|
11
12
|
export interface ThemeProviderProps {
|
|
12
13
|
/** Theme name (e.g. "tokyonight", "catppuccin", "dracula") */
|
|
13
14
|
name?: string;
|
|
14
15
|
/** Color mode */
|
|
15
|
-
mode?:
|
|
16
|
+
mode?: ColorMode;
|
|
16
17
|
/** Full Theme object (overrides name/mode if provided) */
|
|
17
18
|
theme?: Theme;
|
|
18
19
|
children: ReactNode;
|
|
@@ -29,7 +30,7 @@ interface ThemeSwitcherContextValue extends ThemeContextValue {
|
|
|
29
30
|
}
|
|
30
31
|
export interface ThemeSwitcherProviderProps {
|
|
31
32
|
initialTheme?: string;
|
|
32
|
-
initialMode?:
|
|
33
|
+
initialMode?: ColorMode;
|
|
33
34
|
children: ReactNode;
|
|
34
35
|
}
|
|
35
36
|
export declare const ThemeSwitcherProvider: ({ initialTheme, initialMode, children, }: ThemeSwitcherProviderProps) => ReactNode;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC,UAAU,iBAAiB;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC,UAAU,iBAAiB;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AASD,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,gDAKvB,kBAAkB,KAAG,SAgBvB,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAwB,iBAE5C,CAAC;AAMF,UAAU,yBAA0B,SAAQ,iBAAiB;IAC3D,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,qBAAqB,6CAI/B,0BAA0B,KAAG,SAwD/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAgC,yBAM5D,CAAC"}
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
export { resolveTheme } from "./types.js";
|
|
1
|
+
export { FALLBACKS, RESOLVED_KEYS, resolveTheme } from "./types.js";
|
|
2
2
|
export type { ThemeJSON, ResolvedTheme } from "./types.js";
|
|
3
3
|
export { buildSyntaxStyle } from "./syntax-rules.js";
|
|
4
4
|
export { loadThemes, getThemeNames, defaultTheme } from "./loader.js";
|
|
5
5
|
export type { Theme } from "./loader.js";
|
|
6
6
|
export { ThemeProvider, ThemeSwitcherProvider, useTheme, useThemeSwitcher } from "./context.js";
|
|
7
7
|
export type { ThemeProviderProps, ThemeSwitcherProviderProps } from "./context.js";
|
|
8
|
-
export { ThemePicker } from "./theme-picker.js";
|
|
9
|
-
export type { ThemePickerEntry } from "./theme-picker.js";
|
|
10
|
-
export { CloseButton } from "./close-button.js";
|
|
11
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChG,YAAY,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
export { resolveTheme } from "./types.js";
|
|
1
|
+
export { FALLBACKS, RESOLVED_KEYS, resolveTheme } from "./types.js";
|
|
2
2
|
export { buildSyntaxStyle } from "./syntax-rules.js";
|
|
3
3
|
export { loadThemes, getThemeNames, defaultTheme } from "./loader.js";
|
|
4
4
|
export { ThemeProvider, ThemeSwitcherProvider, useTheme, useThemeSwitcher } from "./context.js";
|
|
5
|
-
export { ThemePicker } from "./theme-picker.js";
|
|
6
|
-
export { CloseButton } from "./close-button.js";
|
|
7
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { SyntaxStyle } from "@opentui/core";
|
|
2
|
+
import type { ColorMode } from "@tooee/config";
|
|
2
3
|
import type { ThemeJSON, ResolvedTheme } from "./types.js";
|
|
3
4
|
export interface Theme {
|
|
4
5
|
name: string;
|
|
5
|
-
mode:
|
|
6
|
+
mode: ColorMode;
|
|
6
7
|
colors: ResolvedTheme;
|
|
7
8
|
syntax: SyntaxStyle;
|
|
8
9
|
}
|
|
9
10
|
export declare const loadThemes: () => Map<string, ThemeJSON>;
|
|
10
11
|
export declare const getThemeNames: () => string[];
|
|
11
12
|
export declare const DEFAULT_THEME_NAME = "tokyonight";
|
|
12
|
-
export declare const DEFAULT_MODE:
|
|
13
|
+
export declare const DEFAULT_MODE: ColorMode;
|
|
13
14
|
export declare const defaultTheme: Theme;
|
|
14
|
-
export declare const buildTheme: (name: string, mode:
|
|
15
|
+
export declare const buildTheme: (name: string, mode: ColorMode) => Theme;
|
|
15
16
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO3D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB;AAmED,eAAO,MAAM,UAAU,QAA0B,GAAG,CAAC,MAAM,EAAE,SAAS,CAErE,CAAC;AAEF,eAAO,MAAM,aAAa,QAA6B,MAAM,EAE5D,CAAC;AAMF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,YAAY,EAAE,SAAkB,CAAC;AAc9C,eAAO,MAAM,YAAY,EAAE,KAA8C,CAAC;AAE1E,eAAO,MAAM,UAAU,SAA6B,MAAM,QAAQ,SAAS,KAAG,KAkB7E,CAAC"}
|
package/dist/loader.js
CHANGED
|
@@ -16,8 +16,13 @@ const loadJsonThemesFromDir = function loadJsonThemesFromDir(dir, target) {
|
|
|
16
16
|
const name = path.basename(file, ".json");
|
|
17
17
|
try {
|
|
18
18
|
const content = readFileSync(path.join(dir, file), "utf-8");
|
|
19
|
-
//
|
|
20
|
-
//
|
|
19
|
+
// SAFETY: the file is not validated here on purpose. Its only consumer is
|
|
20
|
+
// `resolveTheme`, which reads each key with a per-key fallback, and
|
|
21
|
+
// `buildTheme` catches every malformed value and returns the hardcoded
|
|
22
|
+
// theme, so a document that is not a ThemeJSON cannot escape this module.
|
|
23
|
+
// A strict decoder would also drop malformed files from `getThemeNames`,
|
|
24
|
+
// which is a behaviour change reserved for a separate decision.
|
|
25
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- tolerant consumer boundary; see the SAFETY note
|
|
21
26
|
target.set(name, JSON.parse(content));
|
|
22
27
|
}
|
|
23
28
|
catch {
|
|
@@ -65,83 +70,33 @@ export const getThemeNames = function getThemeNames() {
|
|
|
65
70
|
// ---------------------------------------------------------------------------
|
|
66
71
|
export const DEFAULT_THEME_NAME = "tokyonight";
|
|
67
72
|
export const DEFAULT_MODE = "dark";
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
cursorLine: "#222436",
|
|
78
|
-
diffAdded: "#4fd6be",
|
|
79
|
-
diffAddedBg: "#20303b",
|
|
80
|
-
diffAddedLineNumberBg: "#1b2b34",
|
|
81
|
-
diffContext: "#828bb8",
|
|
82
|
-
diffContextBg: "#1e2030",
|
|
83
|
-
diffHighlightAdded: "#b8db87",
|
|
84
|
-
diffHighlightRemoved: "#e26a75",
|
|
85
|
-
diffHunkHeader: "#828bb8",
|
|
86
|
-
diffLineNumber: "#222436",
|
|
87
|
-
diffRemoved: "#c53b53",
|
|
88
|
-
diffRemovedBg: "#37222c",
|
|
89
|
-
diffRemovedLineNumberBg: "#2d1f26",
|
|
90
|
-
error: "#f7768e",
|
|
91
|
-
info: "#7aa2f7",
|
|
92
|
-
markdownBlockQuote: "#e0af68",
|
|
93
|
-
markdownCode: "#9ece6a",
|
|
94
|
-
markdownCodeBlock: "#c0caf5",
|
|
95
|
-
markdownEmph: "#e0af68",
|
|
96
|
-
markdownHeading: "#bb9af7",
|
|
97
|
-
markdownHorizontalRule: "#565f89",
|
|
98
|
-
markdownImage: "#7aa2f7",
|
|
99
|
-
markdownImageText: "#7dcfff",
|
|
100
|
-
markdownLink: "#7aa2f7",
|
|
101
|
-
markdownLinkText: "#7dcfff",
|
|
102
|
-
markdownListEnumeration: "#7dcfff",
|
|
103
|
-
markdownListItem: "#7aa2f7",
|
|
104
|
-
markdownStrong: "#ff966c",
|
|
105
|
-
markdownText: "#c0caf5",
|
|
106
|
-
primary: "#7aa2f7",
|
|
107
|
-
secondary: "#bb9af7",
|
|
108
|
-
selection: "#1e2030",
|
|
109
|
-
success: "#9ece6a",
|
|
110
|
-
syntaxComment: "#565f89",
|
|
111
|
-
syntaxFunction: "#7aa2f7",
|
|
112
|
-
syntaxKeyword: "#bb9af7",
|
|
113
|
-
syntaxNumber: "#ff9e64",
|
|
114
|
-
syntaxOperator: "#89ddff",
|
|
115
|
-
syntaxPunctuation: "#a9b1d6",
|
|
116
|
-
syntaxString: "#9ece6a",
|
|
117
|
-
syntaxType: "#2ac3de",
|
|
118
|
-
syntaxVariable: "#c0caf5",
|
|
119
|
-
text: "#c0caf5",
|
|
120
|
-
textMuted: "#565f89",
|
|
121
|
-
warning: "#e0af68",
|
|
122
|
-
};
|
|
123
|
-
return { colors, mode: DEFAULT_MODE, name: DEFAULT_THEME_NAME, syntax: buildSyntaxStyle(colors) };
|
|
124
|
-
})();
|
|
125
|
-
export const defaultTheme = hardcodedDefaultTheme;
|
|
73
|
+
// SAFETY: this package owns the bundled theme document. resolveTheme validates
|
|
74
|
+
// every consumed color and fills every omitted key from FALLBACKS.
|
|
75
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- trusted package-owned JSON boundary
|
|
76
|
+
const bundledDefaultThemeJson = JSON.parse(readFileSync(new URL("../themes/tokyonight.json", import.meta.url), "utf-8"));
|
|
77
|
+
const buildBundledDefaultTheme = function buildBundledDefaultTheme(mode) {
|
|
78
|
+
const colors = resolveTheme(bundledDefaultThemeJson, mode);
|
|
79
|
+
return { colors, mode, name: DEFAULT_THEME_NAME, syntax: buildSyntaxStyle(colors) };
|
|
80
|
+
};
|
|
81
|
+
export const defaultTheme = buildBundledDefaultTheme(DEFAULT_MODE);
|
|
126
82
|
export const buildTheme = function buildTheme(name, mode) {
|
|
127
83
|
const themes = loadThemes();
|
|
128
84
|
const json = themes.get(name);
|
|
129
85
|
if (!json) {
|
|
130
|
-
// Fall back to tokyonight, then first available, then
|
|
86
|
+
// Fall back to tokyonight, then first available, then the bundled default.
|
|
131
87
|
const fallbackJson = themes.get(DEFAULT_THEME_NAME) ?? themes.values().next().value;
|
|
132
88
|
if (fallbackJson) {
|
|
133
89
|
const resolved = resolveTheme(fallbackJson, mode);
|
|
134
90
|
return { colors: resolved, mode, name, syntax: buildSyntaxStyle(resolved) };
|
|
135
91
|
}
|
|
136
|
-
|
|
137
|
-
return hardcodedDefaultTheme;
|
|
92
|
+
return buildBundledDefaultTheme(mode);
|
|
138
93
|
}
|
|
139
94
|
try {
|
|
140
95
|
const resolved = resolveTheme(json, mode);
|
|
141
96
|
return { colors: resolved, mode, name, syntax: buildSyntaxStyle(resolved) };
|
|
142
97
|
}
|
|
143
98
|
catch {
|
|
144
|
-
return
|
|
99
|
+
return buildBundledDefaultTheme(mode);
|
|
145
100
|
}
|
|
146
101
|
};
|
|
147
102
|
//# sourceMappingURL=loader.js.map
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ColorMode } from "@tooee/config";
|
|
1
2
|
interface Variant {
|
|
2
3
|
dark: string;
|
|
3
4
|
light: string;
|
|
@@ -62,8 +63,61 @@ export interface ResolvedTheme {
|
|
|
62
63
|
syntaxOperator: string;
|
|
63
64
|
syntaxPunctuation: string;
|
|
64
65
|
}
|
|
66
|
+
export declare const FALLBACKS: {
|
|
67
|
+
accent: string;
|
|
68
|
+
background: string;
|
|
69
|
+
backgroundElement: string;
|
|
70
|
+
backgroundPanel: string;
|
|
71
|
+
border: string;
|
|
72
|
+
borderActive: string;
|
|
73
|
+
borderSubtle: string;
|
|
74
|
+
cursorLine: string;
|
|
75
|
+
diffAdded: string;
|
|
76
|
+
diffAddedBg: string;
|
|
77
|
+
diffAddedLineNumberBg: string;
|
|
78
|
+
diffContext: string;
|
|
79
|
+
diffContextBg: string;
|
|
80
|
+
diffHighlightAdded: string;
|
|
81
|
+
diffHighlightRemoved: string;
|
|
82
|
+
diffHunkHeader: string;
|
|
83
|
+
diffLineNumber: string;
|
|
84
|
+
diffRemoved: string;
|
|
85
|
+
diffRemovedBg: string;
|
|
86
|
+
diffRemovedLineNumberBg: string;
|
|
87
|
+
error: string;
|
|
88
|
+
info: string;
|
|
89
|
+
markdownBlockQuote: string;
|
|
90
|
+
markdownCode: string;
|
|
91
|
+
markdownCodeBlock: string;
|
|
92
|
+
markdownEmph: string;
|
|
93
|
+
markdownHeading: string;
|
|
94
|
+
markdownHorizontalRule: string;
|
|
95
|
+
markdownImage: string;
|
|
96
|
+
markdownImageText: string;
|
|
97
|
+
markdownLink: string;
|
|
98
|
+
markdownLinkText: string;
|
|
99
|
+
markdownListEnumeration: string;
|
|
100
|
+
markdownListItem: string;
|
|
101
|
+
markdownStrong: string;
|
|
102
|
+
markdownText: string;
|
|
103
|
+
primary: string;
|
|
104
|
+
secondary: string;
|
|
105
|
+
selection: string;
|
|
106
|
+
success: string;
|
|
107
|
+
syntaxComment: string;
|
|
108
|
+
syntaxFunction: string;
|
|
109
|
+
syntaxKeyword: string;
|
|
110
|
+
syntaxNumber: string;
|
|
111
|
+
syntaxOperator: string;
|
|
112
|
+
syntaxPunctuation: string;
|
|
113
|
+
syntaxString: string;
|
|
114
|
+
syntaxType: string;
|
|
115
|
+
syntaxVariable: string;
|
|
116
|
+
text: string;
|
|
117
|
+
textMuted: string;
|
|
118
|
+
warning: string;
|
|
119
|
+
};
|
|
65
120
|
export declare const RESOLVED_KEYS: (keyof ResolvedTheme)[];
|
|
66
|
-
export declare const
|
|
67
|
-
export declare const resolveTheme: (json: ThemeJSON, mode: "dark" | "light") => ResolvedTheme;
|
|
121
|
+
export declare const resolveTheme: (json: ThemeJSON, mode: ColorMode) => ResolvedTheme;
|
|
68
122
|
export {};
|
|
69
123
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AACD,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnC,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACnC;AAMD,MAAM,WAAW,aAAa;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAEhC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAGD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDyB,CAAC;AAEhD,eAAO,MAAM,aAAa,EAGE,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC;AAWpD,eAAO,MAAM,YAAY,SAA+B,SAAS,QAAQ,SAAS,KAAG,aAyCpF,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -1,62 +1,4 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Theme JSON format (OpenCode-compatible)
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// All keys of ResolvedTheme for iteration
|
|
5
|
-
export const RESOLVED_KEYS = [
|
|
6
|
-
"primary",
|
|
7
|
-
"secondary",
|
|
8
|
-
"accent",
|
|
9
|
-
"error",
|
|
10
|
-
"warning",
|
|
11
|
-
"success",
|
|
12
|
-
"info",
|
|
13
|
-
"text",
|
|
14
|
-
"textMuted",
|
|
15
|
-
"background",
|
|
16
|
-
"backgroundPanel",
|
|
17
|
-
"backgroundElement",
|
|
18
|
-
"border",
|
|
19
|
-
"borderActive",
|
|
20
|
-
"borderSubtle",
|
|
21
|
-
"cursorLine",
|
|
22
|
-
"selection",
|
|
23
|
-
"diffAdded",
|
|
24
|
-
"diffRemoved",
|
|
25
|
-
"diffContext",
|
|
26
|
-
"diffHunkHeader",
|
|
27
|
-
"diffHighlightAdded",
|
|
28
|
-
"diffHighlightRemoved",
|
|
29
|
-
"diffAddedBg",
|
|
30
|
-
"diffRemovedBg",
|
|
31
|
-
"diffContextBg",
|
|
32
|
-
"diffLineNumber",
|
|
33
|
-
"diffAddedLineNumberBg",
|
|
34
|
-
"diffRemovedLineNumberBg",
|
|
35
|
-
"markdownText",
|
|
36
|
-
"markdownHeading",
|
|
37
|
-
"markdownLink",
|
|
38
|
-
"markdownLinkText",
|
|
39
|
-
"markdownCode",
|
|
40
|
-
"markdownBlockQuote",
|
|
41
|
-
"markdownEmph",
|
|
42
|
-
"markdownStrong",
|
|
43
|
-
"markdownHorizontalRule",
|
|
44
|
-
"markdownListItem",
|
|
45
|
-
"markdownListEnumeration",
|
|
46
|
-
"markdownImage",
|
|
47
|
-
"markdownImageText",
|
|
48
|
-
"markdownCodeBlock",
|
|
49
|
-
"syntaxComment",
|
|
50
|
-
"syntaxKeyword",
|
|
51
|
-
"syntaxFunction",
|
|
52
|
-
"syntaxVariable",
|
|
53
|
-
"syntaxString",
|
|
54
|
-
"syntaxNumber",
|
|
55
|
-
"syntaxType",
|
|
56
|
-
"syntaxOperator",
|
|
57
|
-
"syntaxPunctuation",
|
|
58
|
-
];
|
|
59
|
-
// Fallbacks used when a theme key is missing
|
|
1
|
+
// Fallbacks used when a theme key is missing: a complete theme in its own right.
|
|
60
2
|
export const FALLBACKS = {
|
|
61
3
|
accent: "#808080",
|
|
62
4
|
background: "#1e1e1e",
|
|
@@ -111,36 +53,47 @@ export const FALLBACKS = {
|
|
|
111
53
|
textMuted: "#808080",
|
|
112
54
|
warning: "#808080",
|
|
113
55
|
};
|
|
56
|
+
export const RESOLVED_KEYS =
|
|
57
|
+
// SAFETY: FALLBACKS satisfies a complete ResolvedTheme Record, so Object.keys contains only its keys.
|
|
58
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- Object.keys does not preserve Record key types
|
|
59
|
+
Object.keys(FALLBACKS);
|
|
114
60
|
// ---------------------------------------------------------------------------
|
|
115
61
|
// Resolution
|
|
116
62
|
// ---------------------------------------------------------------------------
|
|
63
|
+
/** A mode-specific colour pair is an object; a single colour is a string. */
|
|
64
|
+
const isVariant = function isVariant(value) {
|
|
65
|
+
return value instanceof Object;
|
|
66
|
+
};
|
|
117
67
|
export const resolveTheme = function resolveTheme(json, mode) {
|
|
118
68
|
const defs = json.defs ?? {};
|
|
119
69
|
const resolveColor = function resolveColor(c, seen = new Set()) {
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (defs[c] !== undefined && defs[c] !== null) {
|
|
131
|
-
return resolveColor(defs[c], new Set(seen).add(c));
|
|
132
|
-
}
|
|
133
|
-
if (json.theme[c] !== undefined) {
|
|
134
|
-
return resolveColor(json.theme[c], new Set(seen).add(c));
|
|
135
|
-
}
|
|
70
|
+
if (isVariant(c)) {
|
|
71
|
+
return resolveColor(c[mode], seen);
|
|
72
|
+
}
|
|
73
|
+
if (c === "transparent" || c === "none") {
|
|
74
|
+
return "#00000000";
|
|
75
|
+
}
|
|
76
|
+
if (c.startsWith("#")) {
|
|
77
|
+
return c;
|
|
78
|
+
}
|
|
79
|
+
if (seen.has(c)) {
|
|
136
80
|
return "#808080";
|
|
137
81
|
}
|
|
138
|
-
|
|
82
|
+
if (defs[c] !== undefined && defs[c] !== null) {
|
|
83
|
+
return resolveColor(defs[c], new Set(seen).add(c));
|
|
84
|
+
}
|
|
85
|
+
if (json.theme[c] !== undefined) {
|
|
86
|
+
return resolveColor(json.theme[c], new Set(seen).add(c));
|
|
87
|
+
}
|
|
88
|
+
return "#808080";
|
|
139
89
|
};
|
|
140
|
-
|
|
90
|
+
// Start from the complete fallback theme, then resolve every key the JSON defines.
|
|
91
|
+
const result = { ...FALLBACKS };
|
|
141
92
|
for (const key of RESOLVED_KEYS) {
|
|
142
93
|
const val = json.theme[key];
|
|
143
|
-
|
|
94
|
+
if (val !== undefined) {
|
|
95
|
+
result[key] = resolveColor(val);
|
|
96
|
+
}
|
|
144
97
|
}
|
|
145
98
|
// Dynamic fallbacks that reference other resolved keys
|
|
146
99
|
if (json.theme.cursorLine === undefined) {
|
|
@@ -149,8 +102,6 @@ export const resolveTheme = function resolveTheme(json, mode) {
|
|
|
149
102
|
if (json.theme.selection === undefined) {
|
|
150
103
|
result.selection = result.backgroundPanel;
|
|
151
104
|
}
|
|
152
|
-
// Deferred(lint-sweep): replace with a typed exhaustive key map for compile-time completeness
|
|
153
|
-
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- RESOLVED_KEYS drives every required key and defaults missing values
|
|
154
105
|
return result;
|
|
155
106
|
};
|
|
156
107
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tooee/themes",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Theme management with 34 bundled themes for Tooee",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -40,9 +40,7 @@
|
|
|
40
40
|
"typecheck": "tsc --noEmit"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@tooee/
|
|
44
|
-
"@tooee/config": "0.7.2",
|
|
45
|
-
"@tooee/fuzzy": "0.7.2"
|
|
43
|
+
"@tooee/config": "0.8.0"
|
|
46
44
|
},
|
|
47
45
|
"devDependencies": {
|
|
48
46
|
"@opentui/core": "^0.5.1",
|
package/src/context.tsx
CHANGED
|
@@ -2,6 +2,7 @@ import { createContext, useContext, useState, useCallback, useMemo } from "react
|
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
3
|
import type { SyntaxStyle } from "@opentui/core";
|
|
4
4
|
import { writeGlobalConfig } from "@tooee/config";
|
|
5
|
+
import type { ColorMode } from "@tooee/config";
|
|
5
6
|
import type { ResolvedTheme } from "./types.js";
|
|
6
7
|
import {
|
|
7
8
|
buildTheme,
|
|
@@ -20,7 +21,7 @@ interface ThemeContextValue {
|
|
|
20
21
|
theme: ResolvedTheme;
|
|
21
22
|
syntax: SyntaxStyle;
|
|
22
23
|
name: string;
|
|
23
|
-
mode:
|
|
24
|
+
mode: ColorMode;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
const ThemeContext = createContext<ThemeContextValue>({
|
|
@@ -34,7 +35,7 @@ export interface ThemeProviderProps {
|
|
|
34
35
|
/** Theme name (e.g. "tokyonight", "catppuccin", "dracula") */
|
|
35
36
|
name?: string;
|
|
36
37
|
/** Color mode */
|
|
37
|
-
mode?:
|
|
38
|
+
mode?: ColorMode;
|
|
38
39
|
/** Full Theme object (overrides name/mode if provided) */
|
|
39
40
|
theme?: Theme;
|
|
40
41
|
children: ReactNode;
|
|
@@ -82,7 +83,7 @@ const ThemeSwitcherContext = createContext<ThemeSwitcherContextValue | null>(nul
|
|
|
82
83
|
|
|
83
84
|
export interface ThemeSwitcherProviderProps {
|
|
84
85
|
initialTheme?: string;
|
|
85
|
-
initialMode?:
|
|
86
|
+
initialMode?: ColorMode;
|
|
86
87
|
children: ReactNode;
|
|
87
88
|
}
|
|
88
89
|
|
|
@@ -93,7 +94,7 @@ export const ThemeSwitcherProvider = function ThemeSwitcherProvider({
|
|
|
93
94
|
}: ThemeSwitcherProviderProps): ReactNode {
|
|
94
95
|
const allThemes = useMemo(() => getThemeNames(), []);
|
|
95
96
|
const [themeName, setThemeName] = useState(initialTheme ?? DEFAULT_THEME_NAME);
|
|
96
|
-
const [mode, setMode] = useState<
|
|
97
|
+
const [mode, setMode] = useState<ColorMode>(initialMode ?? DEFAULT_MODE);
|
|
97
98
|
void setMode;
|
|
98
99
|
|
|
99
100
|
const theme = useMemo(() => buildTheme(themeName, mode), [themeName, mode]);
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { resolveTheme } from "./types.js";
|
|
1
|
+
export { FALLBACKS, RESOLVED_KEYS, resolveTheme } from "./types.js";
|
|
2
2
|
export type { ThemeJSON, ResolvedTheme } from "./types.js";
|
|
3
3
|
|
|
4
4
|
export { buildSyntaxStyle } from "./syntax-rules.js";
|
|
@@ -8,8 +8,3 @@ export type { Theme } from "./loader.js";
|
|
|
8
8
|
|
|
9
9
|
export { ThemeProvider, ThemeSwitcherProvider, useTheme, useThemeSwitcher } from "./context.js";
|
|
10
10
|
export type { ThemeProviderProps, ThemeSwitcherProviderProps } from "./context.js";
|
|
11
|
-
|
|
12
|
-
export { ThemePicker } from "./theme-picker.js";
|
|
13
|
-
export type { ThemePickerEntry } from "./theme-picker.js";
|
|
14
|
-
|
|
15
|
-
export { CloseButton } from "./close-button.js";
|