@sagmans/dsh-tui 0.4.0 → 0.5.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/LICENSE +1 -1
- package/README.md +270 -68
- package/lib/agent/present.js +1 -1
- package/lib/agent/present.js.map +1 -1
- package/lib/agent/prompt-history.d.ts.map +1 -1
- package/lib/agent/prompt-history.js +5 -3
- package/lib/agent/prompt-history.js.map +1 -1
- package/lib/agent/status.d.ts +1 -1
- package/lib/cards.d.ts +83 -13
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +96 -28
- package/lib/cards.js.map +1 -1
- package/lib/export.d.ts +3 -3
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +23 -13
- package/lib/export.js.map +1 -1
- package/lib/fold-cursor.d.ts +12 -5
- package/lib/fold-cursor.d.ts.map +1 -1
- package/lib/fold-cursor.js +16 -5
- package/lib/fold-cursor.js.map +1 -1
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +42 -9
- package/lib/gates.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +459 -72
- package/lib/index.js.map +1 -1
- package/lib/injection.d.ts +9 -0
- package/lib/injection.d.ts.map +1 -0
- package/lib/injection.js +128 -0
- package/lib/injection.js.map +1 -0
- package/lib/input/actions.d.ts +19 -2
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +57 -11
- package/lib/input/actions.js.map +1 -1
- package/lib/input/cancel.d.ts +55 -0
- package/lib/input/cancel.d.ts.map +1 -0
- package/lib/input/cancel.js +47 -0
- package/lib/input/cancel.js.map +1 -0
- package/lib/input/completion.d.ts +5 -2
- package/lib/input/completion.d.ts.map +1 -1
- package/lib/input/completion.js +79 -4
- package/lib/input/completion.js.map +1 -1
- package/lib/input/file-search.d.ts +105 -0
- package/lib/input/file-search.d.ts.map +1 -0
- package/lib/input/file-search.js +665 -0
- package/lib/input/file-search.js.map +1 -0
- package/lib/input/fuzzy.d.ts +42 -0
- package/lib/input/fuzzy.d.ts.map +1 -0
- package/lib/input/fuzzy.js +289 -0
- package/lib/input/fuzzy.js.map +1 -0
- package/lib/input/keymap.d.ts +3 -1
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +14 -3
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/match.d.ts +12 -4
- package/lib/input/match.d.ts.map +1 -1
- package/lib/input/match.js +50 -51
- package/lib/input/match.js.map +1 -1
- package/lib/input/submission.d.ts +10 -0
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +7 -6
- package/lib/input/submission.js.map +1 -1
- package/lib/keys-command.d.ts +19 -3
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/keys-command.js +34 -31
- package/lib/keys-command.js.map +1 -1
- package/lib/settings-notice.d.ts +5 -0
- package/lib/settings-notice.d.ts.map +1 -1
- package/lib/settings-notice.js +9 -7
- package/lib/settings-notice.js.map +1 -1
- package/lib/stash/paths.d.ts +8 -8
- package/lib/stash/paths.d.ts.map +1 -1
- package/lib/stash/paths.js +19 -18
- package/lib/stash/paths.js.map +1 -1
- package/lib/stash/schema.d.ts +11 -12
- package/lib/stash/schema.d.ts.map +1 -1
- package/lib/stash/schema.js +10 -29
- package/lib/stash/schema.js.map +1 -1
- package/lib/stash/store.js +10 -10
- package/lib/stash/store.js.map +1 -1
- package/lib/stash.d.ts +37 -6
- package/lib/stash.d.ts.map +1 -1
- package/lib/stash.js +93 -36
- package/lib/stash.js.map +1 -1
- package/lib/terminal/external-editor.d.ts +93 -0
- package/lib/terminal/external-editor.d.ts.map +1 -0
- package/lib/terminal/external-editor.js +263 -0
- package/lib/terminal/external-editor.js.map +1 -0
- package/lib/terminal/host-writes.d.ts +39 -0
- package/lib/terminal/host-writes.d.ts.map +1 -0
- package/lib/terminal/host-writes.js +136 -0
- package/lib/terminal/host-writes.js.map +1 -0
- package/lib/terminal/signals.d.ts +25 -0
- package/lib/terminal/signals.d.ts.map +1 -0
- package/lib/terminal/signals.js +39 -0
- package/lib/terminal/signals.js.map +1 -0
- package/lib/terminal/warning-screen.d.ts +19 -1
- package/lib/terminal/warning-screen.d.ts.map +1 -1
- package/lib/terminal/warning-screen.js +37 -1
- package/lib/terminal/warning-screen.js.map +1 -1
- package/lib/terminal-text.d.ts +72 -0
- package/lib/terminal-text.d.ts.map +1 -0
- package/lib/terminal-text.js +603 -0
- package/lib/terminal-text.js.map +1 -0
- package/lib/text.d.ts +45 -6
- package/lib/text.d.ts.map +1 -1
- package/lib/text.js +106 -46
- package/lib/text.js.map +1 -1
- package/lib/theme-command.d.ts +7 -4
- package/lib/theme-command.d.ts.map +1 -1
- package/lib/theme-command.js +32 -12
- package/lib/theme-command.js.map +1 -1
- package/lib/theme-files.d.ts +110 -0
- package/lib/theme-files.d.ts.map +1 -0
- package/lib/theme-files.js +352 -0
- package/lib/theme-files.js.map +1 -0
- package/lib/theme-schema.d.ts +121 -0
- package/lib/theme-schema.d.ts.map +1 -0
- package/lib/theme-schema.js +87 -0
- package/lib/theme-schema.js.map +1 -0
- package/lib/theme-settings.d.ts +43 -10
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +103 -43
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +39 -7
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +96 -13
- package/lib/theme-tokens.js.map +1 -1
- package/lib/theme.d.ts +24 -2
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +49 -6
- package/lib/theme.js.map +1 -1
- package/lib/tool-display.d.ts +57 -0
- package/lib/tool-display.d.ts.map +1 -0
- package/lib/tool-display.js +51 -0
- package/lib/tool-display.js.map +1 -0
- package/lib/transcript.d.ts +28 -0
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +126 -37
- package/lib/transcript.js.map +1 -1
- package/lib/ui/diff.d.ts +49 -0
- package/lib/ui/diff.d.ts.map +1 -0
- package/lib/ui/diff.js +208 -0
- package/lib/ui/diff.js.map +1 -0
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +9 -6
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +4 -2
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/frame.d.ts +16 -5
- package/lib/ui/frame.d.ts.map +1 -1
- package/lib/ui/frame.js +32 -13
- package/lib/ui/frame.js.map +1 -1
- package/lib/ui/keymap-picker.d.ts +16 -0
- package/lib/ui/keymap-picker.d.ts.map +1 -0
- package/lib/ui/keymap-picker.js +41 -0
- package/lib/ui/keymap-picker.js.map +1 -0
- package/lib/ui/layout.d.ts +33 -0
- package/lib/ui/layout.d.ts.map +1 -0
- package/lib/ui/layout.js +33 -0
- package/lib/ui/layout.js.map +1 -0
- package/lib/ui/markdown.d.ts +25 -3
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +12 -8
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/picker-card.d.ts +42 -0
- package/lib/ui/picker-card.d.ts.map +1 -0
- package/lib/ui/picker-card.js +148 -0
- package/lib/ui/picker-card.js.map +1 -0
- package/lib/ui/picker.d.ts +40 -2
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +50 -6
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/prompt.d.ts +10 -2
- package/lib/ui/prompt.d.ts.map +1 -1
- package/lib/ui/prompt.js +21 -2
- package/lib/ui/prompt.js.map +1 -1
- package/lib/ui/rows.d.ts +8 -6
- package/lib/ui/rows.d.ts.map +1 -1
- package/lib/ui/rows.js +10 -18
- package/lib/ui/rows.js.map +1 -1
- package/lib/ui/stash-picker.d.ts +2 -2
- package/lib/ui/stash-picker.d.ts.map +1 -1
- package/lib/ui/stash-picker.js +4 -4
- package/lib/ui/stash-picker.js.map +1 -1
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +18 -16
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/theme-picker.d.ts +18 -0
- package/lib/ui/theme-picker.d.ts.map +1 -0
- package/lib/ui/theme-picker.js +68 -0
- package/lib/ui/theme-picker.js.map +1 -0
- package/lib/ui/view.d.ts +146 -22
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +461 -154
- package/lib/ui/view.js.map +1 -1
- package/package.json +3 -1
- package/themes/deepseek-blue.yaml +183 -0
- package/themes/violet-orbit.yaml +178 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
// The themes on disk.
|
|
2
|
+
//
|
|
3
|
+
// Two places, two owners: the package ships the built-ins, and `$DSH_HOME/themes`
|
|
4
|
+
// holds the reader's own. The split is what makes "a reader cannot override a
|
|
5
|
+
// built-in" true by construction rather than by a rule — a built-in is not in a
|
|
6
|
+
// directory the reader is invited to open, and a reader's file cannot take its
|
|
7
|
+
// name. `/theme export` is the sanctioned way across.
|
|
8
|
+
//
|
|
9
|
+
// Everything here is synchronous: the surface reads both directories once when it
|
|
10
|
+
// starts and again whenever one changes, and a theme is a few kilobytes, so a read
|
|
11
|
+
// never costs a frame.
|
|
12
|
+
import { mkdirSync, readFileSync, readdirSync, statSync, watch, writeFileSync } from 'node:fs';
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import { load as parseYaml } from 'js-yaml';
|
|
17
|
+
import { dshHomeDir } from "./stash/paths.js";
|
|
18
|
+
import { asRecord, PALETTE_NAME_SET, TOKEN_NAME_SET, unknownNames, writtenPalette, writtenTokens, } from "./theme-schema.js";
|
|
19
|
+
/** The directory under `DSH_HOME` the reader's own themes live in. */
|
|
20
|
+
export const THEMES_DIR_NAME = 'themes';
|
|
21
|
+
/**
|
|
22
|
+
* The theme the surface draws until the reader names another.
|
|
23
|
+
*
|
|
24
|
+
* A name rather than the table underneath, because the default look should be one
|
|
25
|
+
* a reader can read, list, and copy: the package's own theme takes its place in
|
|
26
|
+
* the list beside every other, so no default hides behind an absence.
|
|
27
|
+
*/
|
|
28
|
+
export const DEFAULT_THEME = 'deepseek-blue';
|
|
29
|
+
/** The extensions a theme file may carry, best first. */
|
|
30
|
+
const THEME_EXTENSIONS = ['.yaml', '.yml'];
|
|
31
|
+
/** The only keys a theme file may hold; a misspelled section would otherwise do nothing. */
|
|
32
|
+
const THEME_SECTIONS = new Set(['palette', 'tokens']);
|
|
33
|
+
/**
|
|
34
|
+
* The largest theme file the surface will read.
|
|
35
|
+
*
|
|
36
|
+
* js-yaml bounds neither the size of a document nor how far an alias chain may
|
|
37
|
+
* expand it, so a file small enough to type can still be a bomb. A cap does not
|
|
38
|
+
* stop that on its own — the host parses settings.yaml with the same library, so a
|
|
39
|
+
* theme file adds no exposure that is not already there — but it keeps the crude
|
|
40
|
+
* case away from the parser.
|
|
41
|
+
*/
|
|
42
|
+
export const MAX_THEME_FILE_BYTES = 64 * 1024;
|
|
43
|
+
/** How long a burst of writes to the theme directory is allowed to settle. */
|
|
44
|
+
const WATCH_DEBOUNCE_MS = 150;
|
|
45
|
+
/**
|
|
46
|
+
* The themes directory inside the installed package.
|
|
47
|
+
*
|
|
48
|
+
* Resolved from this module's own URL so the answer survives installation:
|
|
49
|
+
* `lib/` and `themes/` are siblings in the tarball and `src/` and `themes/` are
|
|
50
|
+
* siblings in the checkout, so the same relative step lands in both.
|
|
51
|
+
*/
|
|
52
|
+
export function builtinThemesDir() {
|
|
53
|
+
return fileURLToPath(new URL('../themes', import.meta.url));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The directory the reader's own themes live in.
|
|
57
|
+
*
|
|
58
|
+
* The harness home comes from the stash's helper rather than from another copy of
|
|
59
|
+
* the same precedence rule — "where is DSH_HOME" has more than one answer in this
|
|
60
|
+
* tree already, and a third would be one more to keep in step.
|
|
61
|
+
*/
|
|
62
|
+
export function themesHomeDir(env = process.env, home = homedir()) {
|
|
63
|
+
return path.join(dshHomeDir(env, home), THEMES_DIR_NAME);
|
|
64
|
+
}
|
|
65
|
+
/** Create the reader's theme directory if it is missing; empty when it is there. */
|
|
66
|
+
export function ensureThemesHome(dir) {
|
|
67
|
+
try {
|
|
68
|
+
mkdirSync(dir, { recursive: true });
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return [`themes: cannot create ${dir}: ${message(error)}`];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** The names the package ships a file for, which are the ones an export can copy. */
|
|
76
|
+
export function builtinNames(library) {
|
|
77
|
+
return library.list()
|
|
78
|
+
.filter(theme => theme.builtin && theme.path !== '')
|
|
79
|
+
.map(theme => theme.name);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The name a copy of `name` takes, given the names already in use.
|
|
83
|
+
*
|
|
84
|
+
* Numbered rather than overwritten: a second export is a reader asking for a fresh
|
|
85
|
+
* copy of a built-in that has moved on since the first, and the file they have been
|
|
86
|
+
* editing is the one thing that must survive the request.
|
|
87
|
+
*/
|
|
88
|
+
export function exportName(name, taken) {
|
|
89
|
+
for (let n = 1;; n += 1) {
|
|
90
|
+
const candidate = `${name}_export_${n}`;
|
|
91
|
+
if (!taken.has(candidate))
|
|
92
|
+
return candidate;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Write a built-in out as a theme of the reader's own.
|
|
97
|
+
*
|
|
98
|
+
* The bytes are copied rather than re-serialized, so the comments a built-in
|
|
99
|
+
* carries — which is where a port records why a shade is the shade it is — arrive
|
|
100
|
+
* with it. The one line added says where the copy came from, because a fork nobody
|
|
101
|
+
* can date is a fork nobody can rebase onto a later reference.
|
|
102
|
+
*/
|
|
103
|
+
export function exportTheme(library, name) {
|
|
104
|
+
const theme = library.get(name);
|
|
105
|
+
if (theme === undefined) {
|
|
106
|
+
return { ok: false, problem: `themes: no theme named "${name}"; the surface ships ${library.names().join(', ')}` };
|
|
107
|
+
}
|
|
108
|
+
if (!theme.builtin) {
|
|
109
|
+
return { ok: false, problem: `themes: "${name}" is already yours (${theme.path}); this command copies a built-in` };
|
|
110
|
+
}
|
|
111
|
+
if (theme.path === '') {
|
|
112
|
+
return { ok: false, problem: `themes: "${name}" has no file to copy; the package does not ship one` };
|
|
113
|
+
}
|
|
114
|
+
const select = exportName(name, new Set(library.names()));
|
|
115
|
+
const target = path.join(library.home, `${select}.yaml`);
|
|
116
|
+
let source;
|
|
117
|
+
try {
|
|
118
|
+
source = readFileSync(theme.path, 'utf8');
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return { ok: false, problem: `themes: cannot read ${theme.path}: ${message(error)}` };
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
mkdirSync(library.home, { recursive: true });
|
|
125
|
+
// Exclusive, so a file that appeared between the listing and this write is
|
|
126
|
+
// never the one that gets clobbered.
|
|
127
|
+
writeFileSyncExclusive(target, provenance(name) + source);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return { ok: false, problem: `themes: cannot write ${target}: ${message(error)}` };
|
|
131
|
+
}
|
|
132
|
+
return { ok: true, path: target, select };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Read every theme the surface can draw.
|
|
136
|
+
*
|
|
137
|
+
* One broken file never costs the others, and never throws: a reader is editing
|
|
138
|
+
* these by hand, so a save caught mid-write has to leave the screen exactly as it
|
|
139
|
+
* was and say so, rather than take the session down.
|
|
140
|
+
*/
|
|
141
|
+
export function loadThemes(homeDir, builtinDir) {
|
|
142
|
+
const problems = [];
|
|
143
|
+
const themes = new Map();
|
|
144
|
+
const builtinFiles = readThemeFiles(builtinDir, problems);
|
|
145
|
+
for (const file of builtinFiles) {
|
|
146
|
+
const theme = readThemeFile(file, true, problems);
|
|
147
|
+
if (theme !== undefined)
|
|
148
|
+
themes.set(theme.name, theme);
|
|
149
|
+
}
|
|
150
|
+
// Reserved from the files the package ships, not from the ones that parsed: a
|
|
151
|
+
// broken built-in must not hand its name to a reader's file for the session it
|
|
152
|
+
// takes to fix it.
|
|
153
|
+
const reserved = new Set(builtinFiles.map(file => file.stem));
|
|
154
|
+
for (const file of readThemeFiles(homeDir, problems)) {
|
|
155
|
+
if (reserved.has(file.stem)) {
|
|
156
|
+
problems.push(`themes: ${file.path}: "${file.stem}" is a built-in theme; rename the file and select that name`
|
|
157
|
+
+ ` — for example "${file.stem}_export_1.yaml"`);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const theme = readThemeFile(file, false, problems);
|
|
161
|
+
if (theme !== undefined)
|
|
162
|
+
themes.set(theme.name, theme);
|
|
163
|
+
}
|
|
164
|
+
const list = [...themes.values()].sort((left, right) => (left.builtin === right.builtin ? 0 : left.builtin ? -1 : 1) || left.name.localeCompare(right.name));
|
|
165
|
+
return {
|
|
166
|
+
home: homeDir,
|
|
167
|
+
list: () => list,
|
|
168
|
+
names: () => list.map(theme => theme.name),
|
|
169
|
+
get: name => (name === undefined ? undefined : themes.get(name)),
|
|
170
|
+
problems: () => problems,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Call `onChange` after a burst of changes settles in a theme directory.
|
|
175
|
+
*
|
|
176
|
+
* Not persistent, because a theme is not a reason to keep a process alive: the
|
|
177
|
+
* terminal owns the session, and a watcher that outlived it would be a handle
|
|
178
|
+
* nobody closes.
|
|
179
|
+
*/
|
|
180
|
+
export function watchThemes(dir, onChange) {
|
|
181
|
+
let pending;
|
|
182
|
+
let watcher;
|
|
183
|
+
try {
|
|
184
|
+
watcher = watch(dir, () => {
|
|
185
|
+
// An editor writes a file more than once — truncate, write, chmod, rename —
|
|
186
|
+
// and each step is an event. Letting the burst finish is what keeps one save
|
|
187
|
+
// from repainting the screen four times.
|
|
188
|
+
if (pending !== undefined)
|
|
189
|
+
clearTimeout(pending);
|
|
190
|
+
pending = setTimeout(() => {
|
|
191
|
+
pending = undefined;
|
|
192
|
+
onChange();
|
|
193
|
+
}, WATCH_DEBOUNCE_MS);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// A directory that is not there is a session with only built-ins, which is a
|
|
198
|
+
// normal state rather than a failure to start.
|
|
199
|
+
return () => { };
|
|
200
|
+
}
|
|
201
|
+
// A directory removed under a running session stops the watcher; reloading once
|
|
202
|
+
// is what lets the library drop the themes that went with it.
|
|
203
|
+
watcher.on('error', () => { onChange(); });
|
|
204
|
+
return () => {
|
|
205
|
+
if (pending !== undefined)
|
|
206
|
+
clearTimeout(pending);
|
|
207
|
+
watcher.close();
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/** The theme files one directory holds, one per name, in name order. */
|
|
211
|
+
function readThemeFiles(dir, problems) {
|
|
212
|
+
let names;
|
|
213
|
+
try {
|
|
214
|
+
names = readdirSync(dir, { withFileTypes: true })
|
|
215
|
+
.filter(entry => entry.isFile() || entry.isSymbolicLink())
|
|
216
|
+
.map(entry => entry.name);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
// The reader's directory is created at start-up and the package's is shipped,
|
|
220
|
+
// so a missing one draws the built-in table and says nothing: reporting it
|
|
221
|
+
// would greet every reader who has never written a theme with a fault.
|
|
222
|
+
if (error.code !== 'ENOENT')
|
|
223
|
+
problems.push(`themes: ${dir}: ${message(error)}`);
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
const byStem = new Map();
|
|
227
|
+
for (const name of names) {
|
|
228
|
+
if (name.startsWith('.'))
|
|
229
|
+
continue;
|
|
230
|
+
const stem = stemOf(name);
|
|
231
|
+
if (stem === undefined)
|
|
232
|
+
continue;
|
|
233
|
+
const file = { stem, path: path.join(dir, name), rank: extensionRank(name) };
|
|
234
|
+
const held = byStem.get(stem);
|
|
235
|
+
if (held === undefined || file.rank < held.rank) {
|
|
236
|
+
if (held !== undefined)
|
|
237
|
+
problems.push(`themes: ${held.path}: ignored; ${file.path} is the file in use`);
|
|
238
|
+
byStem.set(stem, file);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
problems.push(`themes: ${file.path}: ignored; ${held.path} is the file in use`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return [...byStem.values()].sort((left, right) => left.stem.localeCompare(right.stem));
|
|
245
|
+
}
|
|
246
|
+
/** Read and validate one theme file, or say what is wrong with it. */
|
|
247
|
+
function readThemeFile(file, builtin, problems) {
|
|
248
|
+
let source;
|
|
249
|
+
try {
|
|
250
|
+
if (statSync(file.path).size > MAX_THEME_FILE_BYTES) {
|
|
251
|
+
problems.push(`themes: ${file.path}: larger than ${MAX_THEME_FILE_BYTES} bytes; not read`);
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
source = readFileSync(file.path, 'utf8');
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
problems.push(`themes: ${file.path}: ${message(error)}`);
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
let document;
|
|
261
|
+
try {
|
|
262
|
+
document = parseYaml(source);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
problems.push(`themes: ${file.path}: ${message(error)}`);
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
if (document === null || document === undefined) {
|
|
269
|
+
return { name: file.stem, path: file.path, builtin, palette: {}, tokens: {} };
|
|
270
|
+
}
|
|
271
|
+
const body = asRecord(document);
|
|
272
|
+
if (body === undefined) {
|
|
273
|
+
problems.push(`themes: ${file.path}: a theme is a mapping of "palette" and "tokens"`);
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
const unknownSections = Object.keys(body).filter(key => !THEME_SECTIONS.has(key));
|
|
277
|
+
if (unknownSections.length > 0) {
|
|
278
|
+
problems.push(`themes: ${file.path}: unknown ${plural('section', unknownSections)}: ${unknownSections.join(', ')}`);
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
const unknownTokens = unknownNames(body.tokens, TOKEN_NAME_SET);
|
|
282
|
+
if (unknownTokens.length > 0) {
|
|
283
|
+
problems.push(`themes: ${file.path}: unknown ${plural('element', unknownTokens)}: ${unknownTokens.join(', ')}`);
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
const unknownPalette = unknownNames(body.palette, PALETTE_NAME_SET);
|
|
287
|
+
if (unknownPalette.length > 0) {
|
|
288
|
+
problems.push(`themes: ${file.path}: unknown ${plural('palette entry', unknownPalette, 'palette entries')}: ${unknownPalette.join(', ')}`);
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
return {
|
|
293
|
+
name: file.stem,
|
|
294
|
+
path: file.path,
|
|
295
|
+
builtin,
|
|
296
|
+
palette: writtenPalette(body.palette),
|
|
297
|
+
tokens: writtenTokens(body.tokens),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
problems.push(`themes: ${file.path}: ${message(error)}`);
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** The reference line an exported copy carries. */
|
|
306
|
+
function provenance(name) {
|
|
307
|
+
const version = packageVersion();
|
|
308
|
+
const release = version === undefined ? '' : ` ${version}`;
|
|
309
|
+
return `# exported from ${name} by dsh-tui${release} — this file is yours: edit it, then select it by name.\n`;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* This package's version, read rather than compiled in.
|
|
313
|
+
*
|
|
314
|
+
* A fork of a built-in is only diagnosable against the release that produced it,
|
|
315
|
+
* and the version is the one thing the sources do not know. An unreadable manifest
|
|
316
|
+
* is not a failure: the line just says less.
|
|
317
|
+
*/
|
|
318
|
+
function packageVersion() {
|
|
319
|
+
try {
|
|
320
|
+
const manifest = asRecord(JSON.parse(readFileSync(fileURLToPath(new URL('../package.json', import.meta.url)), 'utf8')));
|
|
321
|
+
return typeof manifest?.version === 'string' ? manifest.version : undefined;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/** Write a file only if nothing is at that path already. */
|
|
328
|
+
function writeFileSyncExclusive(target, body) {
|
|
329
|
+
writeFileSync(target, body, { flag: 'wx' });
|
|
330
|
+
}
|
|
331
|
+
/** The name a file would answer to, or undefined when it is not a theme file. */
|
|
332
|
+
function stemOf(fileName) {
|
|
333
|
+
const rank = extensionRank(fileName);
|
|
334
|
+
const extension = THEME_EXTENSIONS[rank];
|
|
335
|
+
if (extension === undefined)
|
|
336
|
+
return undefined;
|
|
337
|
+
const stem = fileName.slice(0, -extension.length);
|
|
338
|
+
return stem === '' ? undefined : stem;
|
|
339
|
+
}
|
|
340
|
+
/** Where a file name sits among the extensions a theme may carry; -1 when it has none. */
|
|
341
|
+
function extensionRank(fileName) {
|
|
342
|
+
return THEME_EXTENSIONS.findIndex(extension => fileName.endsWith(extension));
|
|
343
|
+
}
|
|
344
|
+
/** One sentence out of an error, for a notice that has one line. */
|
|
345
|
+
function message(error) {
|
|
346
|
+
return error instanceof Error ? error.message.split('\n')[0] ?? String(error) : String(error);
|
|
347
|
+
}
|
|
348
|
+
/** A count and its noun, so a refusal reads as a sentence either way. */
|
|
349
|
+
function plural(noun, names, many = `${noun}s`) {
|
|
350
|
+
return names.length === 1 ? noun : many;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=theme-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-files.js","sourceRoot":"","sources":["../src/theme-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import z from '@deepseek-ai/schemastery';
|
|
2
|
+
import { type PaletteName, type StyleSpec } from './theme-tokens.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A colour a writer may name.
|
|
5
|
+
*
|
|
6
|
+
* Enumerated rather than a free string: a misspelled colour must fail at load
|
|
7
|
+
* with the offending value named, not silently paint nothing for the rest of the
|
|
8
|
+
* session. A bare number is a terminal's own 256-colour index, which is what
|
|
9
|
+
* makes a theme portable to a palette the surface cannot see.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ColourSchema: z<string | number, string | number>;
|
|
12
|
+
/** One element's appearance; every field optional so a writer sets only what they mean. */
|
|
13
|
+
export declare const StyleSpecSchema: z<Schemastery.ObjectS<{
|
|
14
|
+
fg: z<string | number, string | number>;
|
|
15
|
+
bg: z<string | number, string | number>;
|
|
16
|
+
bold: z<boolean, boolean>;
|
|
17
|
+
dim: z<boolean, boolean>;
|
|
18
|
+
italic: z<boolean, boolean>;
|
|
19
|
+
underline: z<boolean, boolean>;
|
|
20
|
+
strike: z<boolean, boolean>;
|
|
21
|
+
glyph: z<string, string>;
|
|
22
|
+
hidden: z<boolean, boolean>;
|
|
23
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
24
|
+
}>, Schemastery.ObjectT<{
|
|
25
|
+
fg: z<string | number, string | number>;
|
|
26
|
+
bg: z<string | number, string | number>;
|
|
27
|
+
bold: z<boolean, boolean>;
|
|
28
|
+
dim: z<boolean, boolean>;
|
|
29
|
+
italic: z<boolean, boolean>;
|
|
30
|
+
underline: z<boolean, boolean>;
|
|
31
|
+
strike: z<boolean, boolean>;
|
|
32
|
+
glyph: z<string, string>;
|
|
33
|
+
hidden: z<boolean, boolean>;
|
|
34
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
35
|
+
}>>;
|
|
36
|
+
/** The palette half: every entry optional, each defaulting to the shipped shade. */
|
|
37
|
+
export declare const PaletteSchema: z<Schemastery.ObjectS<{
|
|
38
|
+
[k: string]: z<string | number, string | number>;
|
|
39
|
+
}>, Schemastery.ObjectT<{
|
|
40
|
+
[k: string]: z<string | number, string | number>;
|
|
41
|
+
}>>;
|
|
42
|
+
/**
|
|
43
|
+
* The token half: every element optional, but an unknown name rejected.
|
|
44
|
+
*
|
|
45
|
+
* Spelled out rather than `z.dict` because `dict` would accept any key, which is
|
|
46
|
+
* exactly the silent-typo failure this schema has to prevent.
|
|
47
|
+
*/
|
|
48
|
+
export declare const TokensSchema: z<Schemastery.ObjectS<{
|
|
49
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
50
|
+
fg: z<string | number, string | number>;
|
|
51
|
+
bg: z<string | number, string | number>;
|
|
52
|
+
bold: z<boolean, boolean>;
|
|
53
|
+
dim: z<boolean, boolean>;
|
|
54
|
+
italic: z<boolean, boolean>;
|
|
55
|
+
underline: z<boolean, boolean>;
|
|
56
|
+
strike: z<boolean, boolean>;
|
|
57
|
+
glyph: z<string, string>;
|
|
58
|
+
hidden: z<boolean, boolean>;
|
|
59
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
60
|
+
}>, Schemastery.ObjectT<{
|
|
61
|
+
fg: z<string | number, string | number>;
|
|
62
|
+
bg: z<string | number, string | number>;
|
|
63
|
+
bold: z<boolean, boolean>;
|
|
64
|
+
dim: z<boolean, boolean>;
|
|
65
|
+
italic: z<boolean, boolean>;
|
|
66
|
+
underline: z<boolean, boolean>;
|
|
67
|
+
strike: z<boolean, boolean>;
|
|
68
|
+
glyph: z<string, string>;
|
|
69
|
+
hidden: z<boolean, boolean>;
|
|
70
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
71
|
+
}>>;
|
|
72
|
+
}>, Schemastery.ObjectT<{
|
|
73
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
74
|
+
fg: z<string | number, string | number>;
|
|
75
|
+
bg: z<string | number, string | number>;
|
|
76
|
+
bold: z<boolean, boolean>;
|
|
77
|
+
dim: z<boolean, boolean>;
|
|
78
|
+
italic: z<boolean, boolean>;
|
|
79
|
+
underline: z<boolean, boolean>;
|
|
80
|
+
strike: z<boolean, boolean>;
|
|
81
|
+
glyph: z<string, string>;
|
|
82
|
+
hidden: z<boolean, boolean>;
|
|
83
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
84
|
+
}>, Schemastery.ObjectT<{
|
|
85
|
+
fg: z<string | number, string | number>;
|
|
86
|
+
bg: z<string | number, string | number>;
|
|
87
|
+
bold: z<boolean, boolean>;
|
|
88
|
+
dim: z<boolean, boolean>;
|
|
89
|
+
italic: z<boolean, boolean>;
|
|
90
|
+
underline: z<boolean, boolean>;
|
|
91
|
+
strike: z<boolean, boolean>;
|
|
92
|
+
glyph: z<string, string>;
|
|
93
|
+
hidden: z<boolean, boolean>;
|
|
94
|
+
inherit: z<"transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.assistant.border" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diff.header" | "markdown.diff.hunk" | "markdown.diff.context" | "markdown.diff.added" | "markdown.diff.removed" | "markdown.diff.addedEmphasis" | "markdown.diff.removedEmphasis" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "picker.border" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.stash" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.ghost" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
95
|
+
}>>;
|
|
96
|
+
}>>;
|
|
97
|
+
/** Every element the surface draws, for refusing a name it does not know. */
|
|
98
|
+
export declare const TOKEN_NAME_SET: ReadonlySet<string>;
|
|
99
|
+
/** Every palette entry the surface has, for the same reason. */
|
|
100
|
+
export declare const PALETTE_NAME_SET: ReadonlySet<string>;
|
|
101
|
+
/** A mapping as it was written, or undefined when the value is not one. */
|
|
102
|
+
export declare function asRecord(value: unknown): Record<string, unknown> | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Names in a written block that the surface does not have.
|
|
105
|
+
*
|
|
106
|
+
* Schemastery keeps a key it did not declare, so without this check a misspelled
|
|
107
|
+
* element or palette entry would parse cleanly and do nothing at all — the one
|
|
108
|
+
* outcome a writer could not debug from the screen.
|
|
109
|
+
*/
|
|
110
|
+
export declare function unknownNames(block: unknown, known: ReadonlySet<string>): string[];
|
|
111
|
+
/** The palette a written block set, keeping only the entries it named. */
|
|
112
|
+
export declare function writtenPalette(raw: unknown): Readonly<Partial<Record<PaletteName, string>>>;
|
|
113
|
+
/**
|
|
114
|
+
* The elements a written block named, with the spec each was given.
|
|
115
|
+
*
|
|
116
|
+
* An empty spec is kept rather than dropped: a full reference says "this element
|
|
117
|
+
* ships plain" by writing `{}`, and dropping it would leave the reference one
|
|
118
|
+
* element short of the table it documents.
|
|
119
|
+
*/
|
|
120
|
+
export declare function writtenTokens(raw: unknown): Readonly<Partial<Record<string, StyleSpec>>>;
|
|
121
|
+
//# sourceMappingURL=theme-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-schema.d.ts","sourceRoot":"","sources":["../src/theme-schema.ts"],"names":[],"mappings":"AAQA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,qCAIvB,CAAA;AAEF,2FAA2F;AAC3F,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;GAW1B,CAAA;AAEF,oFAAoF;AACpF,eAAO,MAAM,aAAa;;;;GAExB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEvB,CAAA;AAEF,6EAA6E;AAC7E,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAAuB,CAAA;AAEtE,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA0B,CAAA;AAE3E,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE5E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEjF;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAM3F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAMxF"}
|