@bastani/atomic 0.9.29 → 0.9.30-alpha.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/CHANGELOG.md +19 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/core/anthropic-thinking-guard.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +6 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +2 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/key-id-schema.d.ts +6 -0
- package/dist/core/key-id-schema.d.ts.map +1 -0
- package/dist/core/key-id-schema.js +16 -0
- package/dist/core/key-id-schema.js.map +1 -0
- package/dist/core/keybindings-schema.d.ts +4 -0
- package/dist/core/keybindings-schema.d.ts.map +1 -0
- package/dist/core/keybindings-schema.js +20 -0
- package/dist/core/keybindings-schema.js.map +1 -0
- package/dist/core/keybindings.d.ts +226 -79
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +25 -20
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +685 -164
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +22 -176
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +2 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/settings-defaults.d.ts +80 -0
- package/dist/core/settings-defaults.d.ts.map +1 -0
- package/dist/core/settings-defaults.js +81 -0
- package/dist/core/settings-defaults.js.map +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +34 -29
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-resource-accessors.js +10 -9
- package/dist/core/settings-manager-resource-accessors.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +26 -18
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-schema.d.ts +292 -0
- package/dist/core/settings-schema.d.ts.map +1 -0
- package/dist/core/settings-schema.js +403 -0
- package/dist/core/settings-schema.js.map +1 -0
- package/dist/core/settings-types.d.ts +2 -181
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/extensions/codemode/index.d.ts.map +1 -1
- package/dist/extensions/codemode/index.js +2 -1
- package/dist/extensions/codemode/index.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +1 -1
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +2 -1
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/herdr/index.d.ts.map +1 -1
- package/dist/extensions/herdr/index.js +4 -1
- package/dist/extensions/herdr/index.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +2 -4
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js +2 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -1
- package/dist/modes/interactive/theme/catppuccin-latte.json +1 -1
- package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -1
- package/dist/modes/interactive/theme/catppuccin-mocha.json +1 -1
- package/dist/modes/interactive/theme/dark.json +1 -1
- package/dist/modes/interactive/theme/light.json +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +3 -12
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -9
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +3 -21
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-parse.js +3 -0
- package/dist/modes/interactive/theme/theme-parse.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.d.ts +5 -224
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +47 -72
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-tokens.d.ts +262 -0
- package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-tokens.js +126 -0
- package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
- package/docs/compaction/reference.md +1 -1
- package/docs/compaction.md +2 -2
- package/docs/keybindings.md +2 -0
- package/docs/models.md +2 -0
- package/docs/providers.md +1 -1
- package/docs/settings.md +2 -0
- package/docs/themes/reference.md +2 -2
- package/docs/themes.md +3 -1
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/npm-shrinkwrap.json +32 -32
- package/package.json +5 -3
- package/schemas/keybindings.schema.json +413 -0
- package/schemas/models.schema.json +1178 -0
- package/schemas/settings.schema.json +940 -0
- package/schemas/theme.schema.json +369 -0
- package/dist/modes/interactive/theme/theme-schema.json +0 -361
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-loading.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-loading.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getCustomThemesDir, getThemesDir } from \"../../../config.js\";\nimport { type ColorMode, detectColorMode, resolveThemeColors } from \"./color-utils.ts\";\nimport { generateSystemThemeColors, SYSTEM_THEME_NAME } from \"./system-theme.js\";\nimport { areTerminalColorsPending, getTerminalColors, getTerminalTheme } from \"./terminal-colors.js\";\nimport { Theme, type ThemeBg, type ThemeColor, type WorkingIndicatorTone } from \"./theme-class.ts\";\nimport { assertThemeNameIsValid, parseThemeJsonContent } from \"./theme-parse.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\n\nlet BUILTIN_THEMES: Record<string, ThemeJson> | undefined;\nconst registeredThemes = new Map<string, Theme>();\n\nexport interface ThemeInfo {\n\tname: string;\n\tpath: string | undefined;\n}\n\nexport function getBuiltinThemes(): Record<string, ThemeJson> {\n\tif (!BUILTIN_THEMES) {\n\t\tconst themesDir = getThemesDir();\n\t\tconst themes: Record<string, ThemeJson> = {};\n\t\tfor (const file of fs.readdirSync(themesDir).sort()) {\n\t\t\tif (!file.endsWith(\".json\") || file === \"theme-schema.json\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst themePath = path.join(themesDir, file);\n\t\t\tconst themeJson = parseThemeJsonContent(themePath, fs.readFileSync(themePath, \"utf-8\"));\n\t\t\tthemes[themeJson.name] = themeJson;\n\t\t}\n\t\tBUILTIN_THEMES = themes;\n\t}\n\treturn BUILTIN_THEMES;\n}\n\nexport function getAvailableThemes(): string[] {\n\treturn getAvailableThemesWithPaths().map(({ name }) => name);\n}\n\nexport function getAvailableThemesWithPaths(): ThemeInfo[] {\n\tconst themesDir = getThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tconst seen = new Set<string>();\n\tconst addTheme = (info: ThemeInfo) => {\n\t\tif (seen.has(info.name)) return;\n\t\tseen.add(info.name);\n\t\tresult.push(info);\n\t};\n\taddTheme({ name: SYSTEM_THEME_NAME, path: undefined });\n\n\t// Built-in themes\n\tfor (const name of Object.keys(getBuiltinThemes())) {\n\t\taddTheme({ name, path: path.join(themesDir, `${name}.json`) });\n\t}\n\n\t// Custom themes\n\tfor (const info of getCustomThemeInfos()) {\n\t\taddTheme(info);\n\t}\n\n\tfor (const [name, theme] of registeredThemes.entries()) {\n\t\taddTheme({ name, path: theme.sourcePath });\n\t}\n\n\treturn result.sort((a, b) =>\n\t\ta.name === SYSTEM_THEME_NAME ? -1 : b.name === SYSTEM_THEME_NAME ? 1 : a.name.localeCompare(b.name),\n\t);\n}\n\nfunction getCustomThemeInfos(): ThemeInfo[] {\n\tconst customThemesDir = getCustomThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tif (!fs.existsSync(customThemesDir)) {\n\t\treturn result;\n\t}\n\n\tfor (const file of fs.readdirSync(customThemesDir)) {\n\t\tif (!file.endsWith(\".json\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst themePath = path.join(customThemesDir, file);\n\t\ttry {\n\t\t\tconst customTheme = loadThemeFromPath(themePath);\n\t\t\tif (customTheme.name) {\n\t\t\t\tresult.push({ name: customTheme.name, path: themePath });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid themes are ignored here; the resource loader reports them\n\t\t\t// during normal startup/reload.\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function loadThemeJson(name: string): ThemeJson {\n\tif (name === SYSTEM_THEME_NAME)\n\t\treturn {\n\t\t\tname,\n\t\t\tcolors: generateSystemThemeColors({\n\t\t\t\t...getTerminalColors(),\n\t\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\t\tappearanceHint: getTerminalTheme(),\n\t\t\t}).colors,\n\t\t};\n\tconst builtinThemes = getBuiltinThemes();\n\tif (name in builtinThemes) {\n\t\treturn builtinThemes[name];\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme?.sourcePath) {\n\t\tconst content = fs.readFileSync(registeredTheme.sourcePath, \"utf-8\");\n\t\treturn parseThemeJsonContent(registeredTheme.sourcePath, content);\n\t}\n\tif (registeredTheme) {\n\t\tthrow new Error(`Theme \"${name}\" does not have a source path for export`);\n\t}\n\tconst customThemesDir = getCustomThemesDir();\n\tconst themePath = path.join(customThemesDir, `${name}.json`);\n\tif (!fs.existsSync(themePath)) {\n\t\tthrow new Error(`Theme not found: ${name}`);\n\t}\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn parseThemeJsonContent(name, content);\n}\n\nfunction createTheme(themeJson: ThemeJson, mode?: ColorMode, sourcePath?: string, dim?: ThemeColor[]): Theme {\n\tconst colorMode = mode ?? detectColorMode();\n\tconst resolvedColors = resolveThemeColors(themeJson.colors, themeJson.vars);\n\tconst workingIndicator = themeJson.workingIndicator\n\t\t? resolveThemeColors(themeJson.workingIndicator, themeJson.vars)\n\t\t: undefined;\n\tconst fgColors: Record<ThemeColor, string | number> = {} as Record<ThemeColor, string | number>;\n\tconst bgColors: Record<ThemeBg, string | number> = {} as Record<ThemeBg, string | number>;\n\tconst bgColorKeys: Set<string> = new Set([\n\t\t\"selectedBg\",\n\t\t\"scrollbarThumb\",\n\t\t\"searchMatchBg\",\n\t\t\"userMessageBg\",\n\t\t\"customMessageBg\",\n\t\t\"toolPendingBg\",\n\t\t\"toolSuccessBg\",\n\t\t\"toolErrorBg\",\n\t]);\n\tfor (const [key, value] of Object.entries(resolvedColors)) {\n\t\tif (bgColorKeys.has(key)) {\n\t\t\tbgColors[key as ThemeBg] = value;\n\t\t} else {\n\t\t\tfgColors[key as ThemeColor] = value;\n\t\t}\n\t}\n\treturn new Theme(fgColors, bgColors, colorMode, {\n\t\tname: themeJson.name,\n\t\tsourcePath,\n\t\tworkingIndicator: workingIndicator as Partial<Record<WorkingIndicatorTone, string | number>> | undefined,\n\t\tdim,\n\t});\n}\n\nexport function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme {\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn loadThemeFromContent(themePath, content, mode);\n}\n\nexport function loadThemeFromContent(themePath: string, content: string, mode?: ColorMode): Theme {\n\tconst themeJson = parseThemeJsonContent(themePath, content);\n\treturn createTheme(themeJson, mode, themePath);\n}\n\nexport function loadTheme(name: string, mode?: ColorMode): Theme {\n\tif (name === SYSTEM_THEME_NAME) {\n\t\tconst generated = generateSystemThemeColors({\n\t\t\t...getTerminalColors(),\n\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\tappearanceHint: getTerminalTheme(),\n\t\t});\n\t\treturn createTheme({ name, colors: generated.colors }, mode, undefined, generated.dim);\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme) {\n\t\treturn registeredTheme;\n\t}\n\tconst themeJson = loadThemeJson(name);\n\treturn createTheme(themeJson, mode);\n}\n\nexport function getThemeByName(name: string): Theme | undefined {\n\ttry {\n\t\treturn loadTheme(name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function setRegisteredThemes(themes: Theme[]): void {\n\tregisteredThemes.clear();\n\tfor (const theme of themes) {\n\t\tif (theme.name) {\n\t\t\tassertThemeNameIsValid(theme.name);\n\t\t\tregisteredThemes.set(theme.name, theme);\n\t\t}\n\t}\n}\n\nexport function setRegisteredTheme(name: string, theme: Theme): void {\n\tregisteredThemes.set(name, theme);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"theme-loading.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-loading.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getCustomThemesDir, getThemesDir } from \"../../../config.js\";\nimport { type ColorMode, detectColorMode, resolveThemeColors } from \"./color-utils.ts\";\nimport { generateSystemThemeColors, SYSTEM_THEME_NAME } from \"./system-theme.js\";\nimport { areTerminalColorsPending, getTerminalColors, getTerminalTheme } from \"./terminal-colors.js\";\nimport { Theme, type ThemeColor, type WorkingIndicatorTone } from \"./theme-class.ts\";\nimport { assertThemeNameIsValid, parseThemeJsonContent } from \"./theme-parse.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { splitThemeColors, withThemeTokenFallbacks } from \"./theme-tokens.ts\";\n\nlet BUILTIN_THEMES: Record<string, ThemeJson> | undefined;\nconst registeredThemes = new Map<string, Theme>();\n\nexport interface ThemeInfo {\n\tname: string;\n\tpath: string | undefined;\n}\n\nexport function getBuiltinThemes(): Record<string, ThemeJson> {\n\tif (!BUILTIN_THEMES) {\n\t\tconst themesDir = getThemesDir();\n\t\tconst themes: Record<string, ThemeJson> = {};\n\t\tfor (const file of fs.readdirSync(themesDir).sort()) {\n\t\t\tif (!file.endsWith(\".json\")) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst themePath = path.join(themesDir, file);\n\t\t\tconst themeJson = parseThemeJsonContent(themePath, fs.readFileSync(themePath, \"utf-8\"));\n\t\t\tthemes[themeJson.name] = themeJson;\n\t\t}\n\t\tBUILTIN_THEMES = themes;\n\t}\n\treturn BUILTIN_THEMES;\n}\n\nexport function getAvailableThemes(): string[] {\n\treturn getAvailableThemesWithPaths().map(({ name }) => name);\n}\n\nexport function getAvailableThemesWithPaths(): ThemeInfo[] {\n\tconst themesDir = getThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tconst seen = new Set<string>();\n\tconst addTheme = (info: ThemeInfo) => {\n\t\tif (seen.has(info.name)) return;\n\t\tseen.add(info.name);\n\t\tresult.push(info);\n\t};\n\taddTheme({ name: SYSTEM_THEME_NAME, path: undefined });\n\n\t// Built-in themes\n\tfor (const name of Object.keys(getBuiltinThemes())) {\n\t\taddTheme({ name, path: path.join(themesDir, `${name}.json`) });\n\t}\n\n\t// Custom themes\n\tfor (const info of getCustomThemeInfos()) {\n\t\taddTheme(info);\n\t}\n\n\tfor (const [name, theme] of registeredThemes.entries()) {\n\t\taddTheme({ name, path: theme.sourcePath });\n\t}\n\n\treturn result.sort((a, b) =>\n\t\ta.name === SYSTEM_THEME_NAME ? -1 : b.name === SYSTEM_THEME_NAME ? 1 : a.name.localeCompare(b.name),\n\t);\n}\n\nfunction getCustomThemeInfos(): ThemeInfo[] {\n\tconst customThemesDir = getCustomThemesDir();\n\tconst result: ThemeInfo[] = [];\n\tif (!fs.existsSync(customThemesDir)) {\n\t\treturn result;\n\t}\n\n\tfor (const file of fs.readdirSync(customThemesDir)) {\n\t\tif (!file.endsWith(\".json\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst themePath = path.join(customThemesDir, file);\n\t\ttry {\n\t\t\tconst customTheme = loadThemeFromPath(themePath);\n\t\t\tif (customTheme.name) {\n\t\t\t\tresult.push({ name: customTheme.name, path: themePath });\n\t\t\t}\n\t\t} catch {\n\t\t\t// Invalid themes are ignored here; the resource loader reports them\n\t\t\t// during normal startup/reload.\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function loadThemeJson(name: string): ThemeJson {\n\tif (name === SYSTEM_THEME_NAME)\n\t\treturn {\n\t\t\tname,\n\t\t\tcolors: generateSystemThemeColors({\n\t\t\t\t...getTerminalColors(),\n\t\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\t\tappearanceHint: getTerminalTheme(),\n\t\t\t}).colors,\n\t\t};\n\tconst builtinThemes = getBuiltinThemes();\n\tif (name in builtinThemes) {\n\t\treturn builtinThemes[name];\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme?.sourcePath) {\n\t\tconst content = fs.readFileSync(registeredTheme.sourcePath, \"utf-8\");\n\t\treturn parseThemeJsonContent(registeredTheme.sourcePath, content);\n\t}\n\tif (registeredTheme) {\n\t\tthrow new Error(`Theme \"${name}\" does not have a source path for export`);\n\t}\n\tconst customThemesDir = getCustomThemesDir();\n\tconst themePath = path.join(customThemesDir, `${name}.json`);\n\tif (!fs.existsSync(themePath)) {\n\t\tthrow new Error(`Theme not found: ${name}`);\n\t}\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn parseThemeJsonContent(name, content);\n}\n\nfunction createTheme(themeJson: ThemeJson, mode?: ColorMode, sourcePath?: string, dim?: ThemeColor[]): Theme {\n\tconst colorMode = mode ?? detectColorMode();\n\tconst resolvedColors = resolveThemeColors(themeJson.colors, themeJson.vars);\n\tconst workingIndicator = themeJson.workingIndicator\n\t\t? resolveThemeColors(themeJson.workingIndicator, themeJson.vars)\n\t\t: undefined;\n\tconst { fgColors, bgColors } = splitThemeColors(withThemeTokenFallbacks(resolvedColors));\n\treturn new Theme(fgColors, bgColors, colorMode, {\n\t\tname: themeJson.name,\n\t\tsourcePath,\n\t\tworkingIndicator: workingIndicator as Partial<Record<WorkingIndicatorTone, string | number>> | undefined,\n\t\tdim,\n\t});\n}\n\nexport function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme {\n\tconst content = fs.readFileSync(themePath, \"utf-8\");\n\treturn loadThemeFromContent(themePath, content, mode);\n}\n\nexport function loadThemeFromContent(themePath: string, content: string, mode?: ColorMode): Theme {\n\tconst themeJson = parseThemeJsonContent(themePath, content);\n\treturn createTheme(themeJson, mode, themePath);\n}\n\nexport function loadTheme(name: string, mode?: ColorMode): Theme {\n\tif (name === SYSTEM_THEME_NAME) {\n\t\tconst generated = generateSystemThemeColors({\n\t\t\t...getTerminalColors(),\n\t\t\tsaturation: areTerminalColorsPending() ? 0 : 1,\n\t\t\tappearanceHint: getTerminalTheme(),\n\t\t});\n\t\treturn createTheme({ name, colors: generated.colors }, mode, undefined, generated.dim);\n\t}\n\tconst registeredTheme = registeredThemes.get(name);\n\tif (registeredTheme) {\n\t\treturn registeredTheme;\n\t}\n\tconst themeJson = loadThemeJson(name);\n\treturn createTheme(themeJson, mode);\n}\n\nexport function getThemeByName(name: string): Theme | undefined {\n\ttry {\n\t\treturn loadTheme(name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function setRegisteredThemes(themes: Theme[]): void {\n\tregisteredThemes.clear();\n\tfor (const theme of themes) {\n\t\tif (theme.name) {\n\t\t\tassertThemeNameIsValid(theme.name);\n\t\t\tregisteredThemes.set(theme.name, theme);\n\t\t}\n\t}\n}\n\nexport function setRegisteredTheme(name: string, theme: Theme): void {\n\tregisteredThemes.set(name, theme);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-parse.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"theme-parse.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CA0CtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAQ/E"}
|
|
@@ -6,6 +6,9 @@ export function assertThemeNameIsValid(name) {
|
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
export function parseThemeJson(label, json) {
|
|
9
|
+
if (typeof json === "object" && json !== null && "name" in json && typeof json.name === "string") {
|
|
10
|
+
assertThemeNameIsValid(json.name);
|
|
11
|
+
}
|
|
9
12
|
if (!validateThemeJson.Check(json)) {
|
|
10
13
|
const errors = Array.from(validateThemeJson.Errors(json));
|
|
11
14
|
const missingColors = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-parse.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,UAAU,sBAAsB,CAAC,IAAY;IAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,uBAAuB,IAAI,mGAAmG,CAC9H,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAa;IAC1D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtE,MAAM,kBAAkB,GAAI,KAAK,CAAC,MAA4C,CAAC,kBAAkB,CAAC;gBAClG,KAAK,MAAM,gBAAgB,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;oBACzD,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACrC,CAAC;gBACD,SAAS;YACV,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,YAAY,GAAG,kBAAkB,KAAK,MAAM,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,oCAAoC,CAAC;YACrD,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;iBACvC,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;iBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,+DAA+D,CAAC;YAChF,YAAY,IAAI,yEAAyE,CAAC;QAC3F,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,sBAAsB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,IAAiB,CAAC;IACpC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,OAAe;IACnE,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { stripBom } from \"../../../utils/text.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { validateThemeJson } from \"./theme-schema.ts\";\n\nexport function assertThemeNameIsValid(name: string): void {\n\tif (name.includes(\"/\")) {\n\t\tthrow new Error(\n\t\t\t`Invalid theme name \"${name}\": theme names cannot contain \"/\" because it is reserved for automatic light/dark theme settings.`,\n\t\t);\n\t}\n}\n\nexport function parseThemeJson(label: string, json: unknown): ThemeJson {\n\tif (!validateThemeJson.Check(json)) {\n\t\tconst errors = Array.from(validateThemeJson.Errors(json));\n\t\tconst missingColors = new Set<string>();\n\t\tconst otherErrors: string[] = [];\n\n\t\tfor (const error of errors) {\n\t\t\tif (error.keyword === \"required\" && error.instancePath === \"/colors\") {\n\t\t\t\tconst requiredProperties = (error.params as { requiredProperties?: string[] }).requiredProperties;\n\t\t\t\tfor (const requiredProperty of requiredProperties ?? []) {\n\t\t\t\t\tmissingColors.add(requiredProperty);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst path = error.instancePath || \"/\";\n\t\t\totherErrors.push(` - ${path}: ${error.message}`);\n\t\t}\n\n\t\tlet errorMessage = `Invalid theme \"${label}\":\\n`;\n\t\tif (missingColors.size > 0) {\n\t\t\terrorMessage += \"\\nMissing required color tokens:\\n\";\n\t\t\terrorMessage += Array.from(missingColors)\n\t\t\t\t.sort()\n\t\t\t\t.map((color) => ` - ${color}`)\n\t\t\t\t.join(\"\\n\");\n\t\t\terrorMessage += '\\n\\nPlease add these colors to your theme\\'s \"colors\" object.';\n\t\t\terrorMessage += \"\\nSee the built-in themes (dark.json, light.json) for reference values.\";\n\t\t}\n\t\tif (otherErrors.length > 0) {\n\t\t\terrorMessage += `\\n\\nOther errors:\\n${otherErrors.join(\"\\n\")}`;\n\t\t}\n\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst themeJson = json as ThemeJson;\n\tassertThemeNameIsValid(themeJson.name);\n\treturn themeJson;\n}\n\nexport function parseThemeJsonContent(label: string, content: string): ThemeJson {\n\tlet json: unknown;\n\ttry {\n\t\tjson = JSON.parse(stripBom(content));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse theme ${label}: ${error}`);\n\t}\n\treturn parseThemeJson(label, json);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"theme-parse.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,UAAU,sBAAsB,CAAC,IAAY;IAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,uBAAuB,IAAI,mGAAmG,CAC9H,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,IAAa;IAC1D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtE,MAAM,kBAAkB,GAAI,KAAK,CAAC,MAA4C,CAAC,kBAAkB,CAAC;gBAClG,KAAK,MAAM,gBAAgB,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAC;oBACzD,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACrC,CAAC;gBACD,SAAS;YACV,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,YAAY,GAAG,kBAAkB,KAAK,MAAM,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,oCAAoC,CAAC;YACrD,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;iBACvC,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;iBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,YAAY,IAAI,+DAA+D,CAAC;YAChF,YAAY,IAAI,yEAAyE,CAAC;QAC3F,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,IAAI,sBAAsB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,IAAiB,CAAC;IACpC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,OAAe;IACnE,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { stripBom } from \"../../../utils/text.ts\";\nimport type { ThemeJson } from \"./theme-schema.ts\";\nimport { validateThemeJson } from \"./theme-schema.ts\";\n\nexport function assertThemeNameIsValid(name: string): void {\n\tif (name.includes(\"/\")) {\n\t\tthrow new Error(\n\t\t\t`Invalid theme name \"${name}\": theme names cannot contain \"/\" because it is reserved for automatic light/dark theme settings.`,\n\t\t);\n\t}\n}\n\nexport function parseThemeJson(label: string, json: unknown): ThemeJson {\n\tif (typeof json === \"object\" && json !== null && \"name\" in json && typeof json.name === \"string\") {\n\t\tassertThemeNameIsValid(json.name);\n\t}\n\tif (!validateThemeJson.Check(json)) {\n\t\tconst errors = Array.from(validateThemeJson.Errors(json));\n\t\tconst missingColors = new Set<string>();\n\t\tconst otherErrors: string[] = [];\n\n\t\tfor (const error of errors) {\n\t\t\tif (error.keyword === \"required\" && error.instancePath === \"/colors\") {\n\t\t\t\tconst requiredProperties = (error.params as { requiredProperties?: string[] }).requiredProperties;\n\t\t\t\tfor (const requiredProperty of requiredProperties ?? []) {\n\t\t\t\t\tmissingColors.add(requiredProperty);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst path = error.instancePath || \"/\";\n\t\t\totherErrors.push(` - ${path}: ${error.message}`);\n\t\t}\n\n\t\tlet errorMessage = `Invalid theme \"${label}\":\\n`;\n\t\tif (missingColors.size > 0) {\n\t\t\terrorMessage += \"\\nMissing required color tokens:\\n\";\n\t\t\terrorMessage += Array.from(missingColors)\n\t\t\t\t.sort()\n\t\t\t\t.map((color) => ` - ${color}`)\n\t\t\t\t.join(\"\\n\");\n\t\t\terrorMessage += '\\n\\nPlease add these colors to your theme\\'s \"colors\" object.';\n\t\t\terrorMessage += \"\\nSee the built-in themes (dark.json, light.json) for reference values.\";\n\t\t}\n\t\tif (otherErrors.length > 0) {\n\t\t\terrorMessage += `\\n\\nOther errors:\\n${otherErrors.join(\"\\n\")}`;\n\t\t}\n\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst themeJson = json as ThemeJson;\n\tassertThemeNameIsValid(themeJson.name);\n\treturn themeJson;\n}\n\nexport function parseThemeJsonContent(label: string, content: string): ThemeJson {\n\tlet json: unknown;\n\ttry {\n\t\tjson = JSON.parse(stripBom(content));\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse theme ${label}: ${error}`);\n\t}\n\treturn parseThemeJson(label, json);\n}\n"]}
|
|
@@ -1,66 +1,12 @@
|
|
|
1
1
|
import { type Static, Type } from "typebox";
|
|
2
|
+
import { type ThemeColorValues } from "./theme-tokens.ts";
|
|
2
3
|
export declare const ColorValueSchema: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
3
4
|
export type ColorValue = Static<typeof ColorValueSchema>;
|
|
4
5
|
export declare const ThemeJsonSchema: Type.TObject<{
|
|
5
6
|
$schema: Type.TOptional<Type.TString>;
|
|
6
7
|
name: Type.TString;
|
|
7
8
|
vars: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TInteger]>>>;
|
|
8
|
-
colors: Type.
|
|
9
|
-
accent: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
10
|
-
border: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
11
|
-
borderAccent: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
12
|
-
borderMuted: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
13
|
-
success: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
14
|
-
error: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
15
|
-
warning: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
16
|
-
muted: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
17
|
-
dim: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
18
|
-
text: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
19
|
-
thinkingText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
20
|
-
selectedBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
21
|
-
scrollbarThumb: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
22
|
-
searchMatchBg: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
23
|
-
searchMatchText: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
24
|
-
userMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
25
|
-
userMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
26
|
-
customMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
27
|
-
customMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
28
|
-
customMessageLabel: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
29
|
-
toolPendingBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
30
|
-
toolSuccessBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
31
|
-
toolErrorBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
32
|
-
toolTitle: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
33
|
-
toolOutput: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
34
|
-
mdHeading: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
35
|
-
mdLink: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
36
|
-
mdLinkUrl: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
37
|
-
mdCode: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
38
|
-
mdCodeBlock: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
39
|
-
mdCodeBlockBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
40
|
-
mdQuote: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
41
|
-
mdQuoteBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
42
|
-
mdHr: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
43
|
-
mdListBullet: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
44
|
-
toolDiffAdded: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
45
|
-
toolDiffRemoved: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
46
|
-
toolDiffContext: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
47
|
-
syntaxComment: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
48
|
-
syntaxKeyword: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
49
|
-
syntaxFunction: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
50
|
-
syntaxVariable: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
51
|
-
syntaxString: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
52
|
-
syntaxNumber: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
53
|
-
syntaxType: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
54
|
-
syntaxOperator: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
55
|
-
syntaxPunctuation: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
56
|
-
thinkingOff: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
57
|
-
thinkingMinimal: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
58
|
-
thinkingLow: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
59
|
-
thinkingMedium: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
60
|
-
thinkingHigh: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
61
|
-
thinkingXhigh: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
62
|
-
bashMode: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
63
|
-
}>;
|
|
9
|
+
colors: Type.TUnsafe<ThemeColorValues<string | number>>;
|
|
64
10
|
workingIndicator: Type.TOptional<Type.TObject<{
|
|
65
11
|
dark: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
66
12
|
lift: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
@@ -80,62 +26,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
|
|
|
80
26
|
$schema: Type.TOptional<Type.TString>;
|
|
81
27
|
name: Type.TString;
|
|
82
28
|
vars: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TInteger]>>>;
|
|
83
|
-
colors: Type.
|
|
84
|
-
accent: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
85
|
-
border: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
86
|
-
borderAccent: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
87
|
-
borderMuted: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
88
|
-
success: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
89
|
-
error: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
90
|
-
warning: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
91
|
-
muted: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
92
|
-
dim: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
93
|
-
text: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
94
|
-
thinkingText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
95
|
-
selectedBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
96
|
-
scrollbarThumb: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
97
|
-
searchMatchBg: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
98
|
-
searchMatchText: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
99
|
-
userMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
100
|
-
userMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
101
|
-
customMessageBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
102
|
-
customMessageText: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
103
|
-
customMessageLabel: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
104
|
-
toolPendingBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
105
|
-
toolSuccessBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
106
|
-
toolErrorBg: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
107
|
-
toolTitle: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
108
|
-
toolOutput: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
109
|
-
mdHeading: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
110
|
-
mdLink: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
111
|
-
mdLinkUrl: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
112
|
-
mdCode: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
113
|
-
mdCodeBlock: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
114
|
-
mdCodeBlockBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
115
|
-
mdQuote: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
116
|
-
mdQuoteBorder: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
117
|
-
mdHr: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
118
|
-
mdListBullet: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
119
|
-
toolDiffAdded: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
120
|
-
toolDiffRemoved: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
121
|
-
toolDiffContext: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
122
|
-
syntaxComment: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
123
|
-
syntaxKeyword: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
124
|
-
syntaxFunction: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
125
|
-
syntaxVariable: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
126
|
-
syntaxString: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
127
|
-
syntaxNumber: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
128
|
-
syntaxType: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
129
|
-
syntaxOperator: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
130
|
-
syntaxPunctuation: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
131
|
-
thinkingOff: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
132
|
-
thinkingMinimal: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
133
|
-
thinkingLow: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
134
|
-
thinkingMedium: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
135
|
-
thinkingHigh: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
136
|
-
thinkingXhigh: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
137
|
-
bashMode: Type.TUnion<[Type.TString, Type.TInteger]>;
|
|
138
|
-
}>;
|
|
29
|
+
colors: Type.TUnsafe<ThemeColorValues<string | number>>;
|
|
139
30
|
workingIndicator: Type.TOptional<Type.TObject<{
|
|
140
31
|
dark: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
141
32
|
lift: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
@@ -153,62 +44,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
|
|
|
153
44
|
$schema?: string | undefined;
|
|
154
45
|
name: string;
|
|
155
46
|
vars?: Record<string, string | number> | undefined;
|
|
156
|
-
colors:
|
|
157
|
-
accent: string | number;
|
|
158
|
-
border: string | number;
|
|
159
|
-
borderAccent: string | number;
|
|
160
|
-
borderMuted: string | number;
|
|
161
|
-
success: string | number;
|
|
162
|
-
error: string | number;
|
|
163
|
-
warning: string | number;
|
|
164
|
-
muted: string | number;
|
|
165
|
-
dim: string | number;
|
|
166
|
-
text: string | number;
|
|
167
|
-
thinkingText: string | number;
|
|
168
|
-
selectedBg: string | number;
|
|
169
|
-
scrollbarThumb?: string | number | undefined;
|
|
170
|
-
searchMatchBg?: string | number | undefined;
|
|
171
|
-
searchMatchText?: string | number | undefined;
|
|
172
|
-
userMessageBg: string | number;
|
|
173
|
-
userMessageText: string | number;
|
|
174
|
-
customMessageBg: string | number;
|
|
175
|
-
customMessageText: string | number;
|
|
176
|
-
customMessageLabel: string | number;
|
|
177
|
-
toolPendingBg: string | number;
|
|
178
|
-
toolSuccessBg: string | number;
|
|
179
|
-
toolErrorBg: string | number;
|
|
180
|
-
toolTitle: string | number;
|
|
181
|
-
toolOutput: string | number;
|
|
182
|
-
mdHeading: string | number;
|
|
183
|
-
mdLink: string | number;
|
|
184
|
-
mdLinkUrl: string | number;
|
|
185
|
-
mdCode: string | number;
|
|
186
|
-
mdCodeBlock: string | number;
|
|
187
|
-
mdCodeBlockBorder: string | number;
|
|
188
|
-
mdQuote: string | number;
|
|
189
|
-
mdQuoteBorder: string | number;
|
|
190
|
-
mdHr: string | number;
|
|
191
|
-
mdListBullet: string | number;
|
|
192
|
-
toolDiffAdded: string | number;
|
|
193
|
-
toolDiffRemoved: string | number;
|
|
194
|
-
toolDiffContext: string | number;
|
|
195
|
-
syntaxComment: string | number;
|
|
196
|
-
syntaxKeyword: string | number;
|
|
197
|
-
syntaxFunction: string | number;
|
|
198
|
-
syntaxVariable: string | number;
|
|
199
|
-
syntaxString: string | number;
|
|
200
|
-
syntaxNumber: string | number;
|
|
201
|
-
syntaxType: string | number;
|
|
202
|
-
syntaxOperator: string | number;
|
|
203
|
-
syntaxPunctuation: string | number;
|
|
204
|
-
thinkingOff: string | number;
|
|
205
|
-
thinkingMinimal: string | number;
|
|
206
|
-
thinkingLow: string | number;
|
|
207
|
-
thinkingMedium: string | number;
|
|
208
|
-
thinkingHigh: string | number;
|
|
209
|
-
thinkingXhigh: string | number;
|
|
210
|
-
bashMode: string | number;
|
|
211
|
-
};
|
|
47
|
+
colors: ThemeColorValues<string | number>;
|
|
212
48
|
workingIndicator?: {
|
|
213
49
|
dark?: string | number | undefined;
|
|
214
50
|
lift?: string | number | undefined;
|
|
@@ -226,62 +62,7 @@ export declare const validateThemeJson: import("typebox/compile").Validator<{},
|
|
|
226
62
|
$schema?: string | undefined;
|
|
227
63
|
name: string;
|
|
228
64
|
vars?: Record<string, string | number> | undefined;
|
|
229
|
-
colors:
|
|
230
|
-
accent: string | number;
|
|
231
|
-
border: string | number;
|
|
232
|
-
borderAccent: string | number;
|
|
233
|
-
borderMuted: string | number;
|
|
234
|
-
success: string | number;
|
|
235
|
-
error: string | number;
|
|
236
|
-
warning: string | number;
|
|
237
|
-
muted: string | number;
|
|
238
|
-
dim: string | number;
|
|
239
|
-
text: string | number;
|
|
240
|
-
thinkingText: string | number;
|
|
241
|
-
selectedBg: string | number;
|
|
242
|
-
scrollbarThumb?: string | number | undefined;
|
|
243
|
-
searchMatchBg?: string | number | undefined;
|
|
244
|
-
searchMatchText?: string | number | undefined;
|
|
245
|
-
userMessageBg: string | number;
|
|
246
|
-
userMessageText: string | number;
|
|
247
|
-
customMessageBg: string | number;
|
|
248
|
-
customMessageText: string | number;
|
|
249
|
-
customMessageLabel: string | number;
|
|
250
|
-
toolPendingBg: string | number;
|
|
251
|
-
toolSuccessBg: string | number;
|
|
252
|
-
toolErrorBg: string | number;
|
|
253
|
-
toolTitle: string | number;
|
|
254
|
-
toolOutput: string | number;
|
|
255
|
-
mdHeading: string | number;
|
|
256
|
-
mdLink: string | number;
|
|
257
|
-
mdLinkUrl: string | number;
|
|
258
|
-
mdCode: string | number;
|
|
259
|
-
mdCodeBlock: string | number;
|
|
260
|
-
mdCodeBlockBorder: string | number;
|
|
261
|
-
mdQuote: string | number;
|
|
262
|
-
mdQuoteBorder: string | number;
|
|
263
|
-
mdHr: string | number;
|
|
264
|
-
mdListBullet: string | number;
|
|
265
|
-
toolDiffAdded: string | number;
|
|
266
|
-
toolDiffRemoved: string | number;
|
|
267
|
-
toolDiffContext: string | number;
|
|
268
|
-
syntaxComment: string | number;
|
|
269
|
-
syntaxKeyword: string | number;
|
|
270
|
-
syntaxFunction: string | number;
|
|
271
|
-
syntaxVariable: string | number;
|
|
272
|
-
syntaxString: string | number;
|
|
273
|
-
syntaxNumber: string | number;
|
|
274
|
-
syntaxType: string | number;
|
|
275
|
-
syntaxOperator: string | number;
|
|
276
|
-
syntaxPunctuation: string | number;
|
|
277
|
-
thinkingOff: string | number;
|
|
278
|
-
thinkingMinimal: string | number;
|
|
279
|
-
thinkingLow: string | number;
|
|
280
|
-
thinkingMedium: string | number;
|
|
281
|
-
thinkingHigh: string | number;
|
|
282
|
-
thinkingXhigh: string | number;
|
|
283
|
-
bashMode: string | number;
|
|
284
|
-
};
|
|
65
|
+
colors: ThemeColorValues<string | number>;
|
|
285
66
|
workingIndicator?: {
|
|
286
67
|
dark?: string | number | undefined;
|
|
287
68
|
lift?: string | number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-schema.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"theme-schema.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAoB,IAAI,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAgB,KAAK,gBAAgB,EAA8B,MAAM,mBAAmB,CAAC;AAmBpG,eAAO,MAAM,gBAAgB,4CAAe,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAmBzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAiD3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAEvD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2B,CAAC"}
|
|
@@ -1,76 +1,41 @@
|
|
|
1
1
|
import { Type } from "typebox";
|
|
2
2
|
import { Compile } from "typebox/compile";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Type.
|
|
6
|
-
|
|
3
|
+
import { THEME_TOKENS } from "./theme-tokens.js";
|
|
4
|
+
function colorValue(description) {
|
|
5
|
+
return Type.Union([
|
|
6
|
+
Type.String({
|
|
7
|
+
description: "Hex color (#RRGGBB), OKHSL color (okhsl(H S L)), variable reference, or empty string for terminal default",
|
|
8
|
+
}),
|
|
9
|
+
Type.Integer({
|
|
10
|
+
minimum: 0,
|
|
11
|
+
maximum: 255,
|
|
12
|
+
description: "256-color palette index (0-255)",
|
|
13
|
+
}),
|
|
14
|
+
], description ? { description } : {});
|
|
15
|
+
}
|
|
16
|
+
export const ColorValueSchema = colorValue();
|
|
17
|
+
function themeTokenProperties(tokens) {
|
|
18
|
+
const properties = {};
|
|
19
|
+
for (const [name, descriptor] of Object.entries(tokens)) {
|
|
20
|
+
const schema = colorValue(descriptor.description);
|
|
21
|
+
properties[name] = descriptor.fallback === undefined ? schema : Type.Optional(schema);
|
|
22
|
+
}
|
|
23
|
+
return properties;
|
|
24
|
+
}
|
|
25
|
+
const ThemeColorsSchema = Type.Unsafe(Type.Object(themeTokenProperties(THEME_TOKENS), {
|
|
26
|
+
description: "Theme color definitions (scrollbarThumb and the search highlight colors are optional and fall back to compatible colors)",
|
|
27
|
+
additionalProperties: false,
|
|
28
|
+
}));
|
|
7
29
|
export const ThemeJsonSchema = Type.Object({
|
|
8
|
-
$schema: Type.Optional(Type.String()),
|
|
9
|
-
name: Type.String(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// Core UI (10 colors)
|
|
13
|
-
accent: ColorValueSchema,
|
|
14
|
-
border: ColorValueSchema,
|
|
15
|
-
borderAccent: ColorValueSchema,
|
|
16
|
-
borderMuted: ColorValueSchema,
|
|
17
|
-
success: ColorValueSchema,
|
|
18
|
-
error: ColorValueSchema,
|
|
19
|
-
warning: ColorValueSchema,
|
|
20
|
-
muted: ColorValueSchema,
|
|
21
|
-
dim: ColorValueSchema,
|
|
22
|
-
text: ColorValueSchema,
|
|
23
|
-
thinkingText: ColorValueSchema,
|
|
24
|
-
// Backgrounds & Content Text (11 required, 3 optional)
|
|
25
|
-
selectedBg: ColorValueSchema,
|
|
26
|
-
scrollbarThumb: Type.Optional(ColorValueSchema),
|
|
27
|
-
searchMatchBg: Type.Optional(ColorValueSchema),
|
|
28
|
-
searchMatchText: Type.Optional(ColorValueSchema),
|
|
29
|
-
userMessageBg: ColorValueSchema,
|
|
30
|
-
userMessageText: ColorValueSchema,
|
|
31
|
-
customMessageBg: ColorValueSchema,
|
|
32
|
-
customMessageText: ColorValueSchema,
|
|
33
|
-
customMessageLabel: ColorValueSchema,
|
|
34
|
-
toolPendingBg: ColorValueSchema,
|
|
35
|
-
toolSuccessBg: ColorValueSchema,
|
|
36
|
-
toolErrorBg: ColorValueSchema,
|
|
37
|
-
toolTitle: ColorValueSchema,
|
|
38
|
-
toolOutput: ColorValueSchema,
|
|
39
|
-
// Markdown (10 colors)
|
|
40
|
-
mdHeading: ColorValueSchema,
|
|
41
|
-
mdLink: ColorValueSchema,
|
|
42
|
-
mdLinkUrl: ColorValueSchema,
|
|
43
|
-
mdCode: ColorValueSchema,
|
|
44
|
-
mdCodeBlock: ColorValueSchema,
|
|
45
|
-
mdCodeBlockBorder: ColorValueSchema,
|
|
46
|
-
mdQuote: ColorValueSchema,
|
|
47
|
-
mdQuoteBorder: ColorValueSchema,
|
|
48
|
-
mdHr: ColorValueSchema,
|
|
49
|
-
mdListBullet: ColorValueSchema,
|
|
50
|
-
// Tool Diffs (3 colors)
|
|
51
|
-
toolDiffAdded: ColorValueSchema,
|
|
52
|
-
toolDiffRemoved: ColorValueSchema,
|
|
53
|
-
toolDiffContext: ColorValueSchema,
|
|
54
|
-
// Syntax Highlighting (9 colors)
|
|
55
|
-
syntaxComment: ColorValueSchema,
|
|
56
|
-
syntaxKeyword: ColorValueSchema,
|
|
57
|
-
syntaxFunction: ColorValueSchema,
|
|
58
|
-
syntaxVariable: ColorValueSchema,
|
|
59
|
-
syntaxString: ColorValueSchema,
|
|
60
|
-
syntaxNumber: ColorValueSchema,
|
|
61
|
-
syntaxType: ColorValueSchema,
|
|
62
|
-
syntaxOperator: ColorValueSchema,
|
|
63
|
-
syntaxPunctuation: ColorValueSchema,
|
|
64
|
-
// Thinking Level Borders (6 colors)
|
|
65
|
-
thinkingOff: ColorValueSchema,
|
|
66
|
-
thinkingMinimal: ColorValueSchema,
|
|
67
|
-
thinkingLow: ColorValueSchema,
|
|
68
|
-
thinkingMedium: ColorValueSchema,
|
|
69
|
-
thinkingHigh: ColorValueSchema,
|
|
70
|
-
thinkingXhigh: ColorValueSchema,
|
|
71
|
-
// Bash Mode (1 color)
|
|
72
|
-
bashMode: ColorValueSchema,
|
|
30
|
+
$schema: Type.Optional(Type.String({ description: "JSON schema reference" })),
|
|
31
|
+
name: Type.String({
|
|
32
|
+
pattern: "^[^/]+$",
|
|
33
|
+
description: "Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.",
|
|
73
34
|
}),
|
|
35
|
+
vars: Type.Optional(Type.Record(Type.String(), ColorValueSchema, {
|
|
36
|
+
description: "Reusable color variables",
|
|
37
|
+
})),
|
|
38
|
+
colors: ThemeColorsSchema,
|
|
74
39
|
workingIndicator: Type.Optional(Type.Object({
|
|
75
40
|
dark: Type.Optional(ColorValueSchema),
|
|
76
41
|
lift: Type.Optional(ColorValueSchema),
|
|
@@ -78,12 +43,22 @@ export const ThemeJsonSchema = Type.Object({
|
|
|
78
43
|
accent: Type.Optional(ColorValueSchema),
|
|
79
44
|
bright: Type.Optional(ColorValueSchema),
|
|
80
45
|
peak: Type.Optional(ColorValueSchema),
|
|
46
|
+
}, {
|
|
47
|
+
description: "Optional partial six-tone palette for Atomic's ordinary working identity",
|
|
48
|
+
additionalProperties: false,
|
|
81
49
|
})),
|
|
82
50
|
export: Type.Optional(Type.Object({
|
|
83
|
-
pageBg: Type.Optional(
|
|
84
|
-
cardBg: Type.Optional(
|
|
85
|
-
infoBg: Type.Optional(
|
|
51
|
+
pageBg: Type.Optional(colorValue("Page background color")),
|
|
52
|
+
cardBg: Type.Optional(colorValue("Card/container background color")),
|
|
53
|
+
infoBg: Type.Optional(colorValue("Info sections background (system prompt, notices)")),
|
|
54
|
+
}, {
|
|
55
|
+
description: "Optional colors for HTML export (defaults derived from userMessageBg if not specified)",
|
|
56
|
+
additionalProperties: false,
|
|
86
57
|
})),
|
|
58
|
+
}, {
|
|
59
|
+
title: "Atomic Coding Agent Theme",
|
|
60
|
+
description: "Theme schema for the Atomic coding agent",
|
|
61
|
+
additionalProperties: false,
|
|
87
62
|
});
|
|
88
63
|
export const validateThemeJson = Compile(ThemeJsonSchema);
|
|
89
64
|
//# sourceMappingURL=theme-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-schema.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"theme-schema.js","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Static, type TProperties, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport { THEME_TOKENS, type ThemeColorValues, type ThemeTokenDescriptors } from \"./theme-tokens.ts\";\n\nfunction colorValue(description?: string) {\n\treturn Type.Union(\n\t\t[\n\t\t\tType.String({\n\t\t\t\tdescription:\n\t\t\t\t\t\"Hex color (#RRGGBB), OKHSL color (okhsl(H S L)), variable reference, or empty string for terminal default\",\n\t\t\t}),\n\t\t\tType.Integer({\n\t\t\t\tminimum: 0,\n\t\t\t\tmaximum: 255,\n\t\t\t\tdescription: \"256-color palette index (0-255)\",\n\t\t\t}),\n\t\t],\n\t\tdescription ? { description } : {},\n\t);\n}\n\nexport const ColorValueSchema = colorValue();\n\nexport type ColorValue = Static<typeof ColorValueSchema>;\n\nfunction themeTokenProperties(tokens: ThemeTokenDescriptors): TProperties {\n\tconst properties: TProperties = {};\n\tfor (const [name, descriptor] of Object.entries(tokens)) {\n\t\tconst schema = colorValue(descriptor.description);\n\t\tproperties[name] = descriptor.fallback === undefined ? schema : Type.Optional(schema);\n\t}\n\treturn properties;\n}\n\nconst ThemeColorsSchema = Type.Unsafe<ThemeColorValues<ColorValue>>(\n\tType.Object(themeTokenProperties(THEME_TOKENS), {\n\t\tdescription:\n\t\t\t\"Theme color definitions (scrollbarThumb and the search highlight colors are optional and fall back to compatible colors)\",\n\t\tadditionalProperties: false,\n\t}),\n);\n\nexport const ThemeJsonSchema = Type.Object(\n\t{\n\t\t$schema: Type.Optional(Type.String({ description: \"JSON schema reference\" })),\n\t\tname: Type.String({\n\t\t\tpattern: \"^[^/]+$\",\n\t\t\tdescription:\n\t\t\t\t\"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\",\n\t\t}),\n\t\tvars: Type.Optional(\n\t\t\tType.Record(Type.String(), ColorValueSchema, {\n\t\t\t\tdescription: \"Reusable color variables\",\n\t\t\t}),\n\t\t),\n\t\tcolors: ThemeColorsSchema,\n\t\tworkingIndicator: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tdark: Type.Optional(ColorValueSchema),\n\t\t\t\t\tlift: Type.Optional(ColorValueSchema),\n\t\t\t\t\tmuted: Type.Optional(ColorValueSchema),\n\t\t\t\t\taccent: Type.Optional(ColorValueSchema),\n\t\t\t\t\tbright: Type.Optional(ColorValueSchema),\n\t\t\t\t\tpeak: Type.Optional(ColorValueSchema),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdescription: \"Optional partial six-tone palette for Atomic's ordinary working identity\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\texport: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tpageBg: Type.Optional(colorValue(\"Page background color\")),\n\t\t\t\t\tcardBg: Type.Optional(colorValue(\"Card/container background color\")),\n\t\t\t\t\tinfoBg: Type.Optional(colorValue(\"Info sections background (system prompt, notices)\")),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdescription: \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t},\n\t{\n\t\ttitle: \"Atomic Coding Agent Theme\",\n\t\tdescription: \"Theme schema for the Atomic coding agent\",\n\t\tadditionalProperties: false,\n\t},\n);\n\nexport type ThemeJson = Static<typeof ThemeJsonSchema>;\n\nexport const validateThemeJson = Compile(ThemeJsonSchema);\n"]}
|