@vibecook/ghosttea-react 0.8.0 → 0.9.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.
Files changed (65) hide show
  1. package/README.md +10 -0
  2. package/THIRD_PARTY_NOTICES.md +62 -0
  3. package/dist/appearance/AdvancedConfigSettings.d.ts +12 -0
  4. package/dist/appearance/AdvancedConfigSettings.d.ts.map +1 -0
  5. package/dist/appearance/AdvancedConfigSettings.js +362 -0
  6. package/dist/appearance/AdvancedConfigSettings.js.map +1 -0
  7. package/dist/appearance/AppearanceSettings.d.ts +21 -0
  8. package/dist/appearance/AppearanceSettings.d.ts.map +1 -0
  9. package/dist/appearance/AppearanceSettings.js +175 -0
  10. package/dist/appearance/AppearanceSettings.js.map +1 -0
  11. package/dist/appearance/catalog.d.ts +39 -0
  12. package/dist/appearance/catalog.d.ts.map +1 -0
  13. package/dist/appearance/catalog.js +56 -0
  14. package/dist/appearance/catalog.js.map +1 -0
  15. package/dist/appearance/config-draft.d.ts +35 -0
  16. package/dist/appearance/config-draft.d.ts.map +1 -0
  17. package/dist/appearance/config-draft.js +289 -0
  18. package/dist/appearance/config-draft.js.map +1 -0
  19. package/dist/appearance/shaders.d.ts +14 -0
  20. package/dist/appearance/shaders.d.ts.map +1 -0
  21. package/dist/appearance/shaders.js +71 -0
  22. package/dist/appearance/shaders.js.map +1 -0
  23. package/dist/appearance/theme-catalog.generated.json +16260 -0
  24. package/dist/appearance/types.d.ts +61 -0
  25. package/dist/appearance/types.d.ts.map +1 -0
  26. package/dist/appearance/types.js +2 -0
  27. package/dist/appearance/types.js.map +1 -0
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +23 -4
  30. package/dist/config.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/renderers/canvas-renderer.d.ts.map +1 -1
  36. package/dist/renderers/canvas-renderer.js +9 -1
  37. package/dist/renderers/canvas-renderer.js.map +1 -1
  38. package/dist/renderers/shader-effects.d.ts +2 -0
  39. package/dist/renderers/shader-effects.d.ts.map +1 -0
  40. package/dist/renderers/shader-effects.js +206 -0
  41. package/dist/renderers/shader-effects.js.map +1 -0
  42. package/dist/renderers/types.d.ts +7 -0
  43. package/dist/renderers/types.d.ts.map +1 -1
  44. package/dist/renderers/types.js +11 -0
  45. package/dist/renderers/types.js.map +1 -1
  46. package/dist/renderers/webgpu-renderer.d.ts +2 -1
  47. package/dist/renderers/webgpu-renderer.d.ts.map +1 -1
  48. package/dist/renderers/webgpu-renderer.js +250 -159
  49. package/dist/renderers/webgpu-renderer.js.map +1 -1
  50. package/dist/terminal-render.worker.js +479 -165
  51. package/dist/terminal-render.worker.js.map +3 -3
  52. package/dist/workspace/Workspace.d.ts +7 -2
  53. package/dist/workspace/Workspace.d.ts.map +1 -1
  54. package/dist/workspace/Workspace.js +15 -7
  55. package/dist/workspace/Workspace.js.map +1 -1
  56. package/dist/workspace/index.d.ts +3 -0
  57. package/dist/workspace/index.d.ts.map +1 -1
  58. package/dist/workspace/index.js +2 -0
  59. package/dist/workspace/index.js.map +1 -1
  60. package/dist/workspace/themes.d.ts +4 -0
  61. package/dist/workspace/themes.d.ts.map +1 -1
  62. package/dist/workspace/themes.js +4 -0
  63. package/dist/workspace/themes.js.map +1 -1
  64. package/dist/workspace.css +1122 -5
  65. package/package.json +6 -5
@@ -0,0 +1,289 @@
1
+ export const FRIENDLY_BLOCK_START = "# >>> Ghosttea common settings (managed; edit through Settings)";
2
+ export const FRIENDLY_BLOCK_END = "# <<< Ghosttea common settings";
3
+ const ALL_FRIENDLY_CONFIG_SECTIONS = new Set([
4
+ "colors",
5
+ "opacity",
6
+ "scrollback",
7
+ "typography",
8
+ "padding",
9
+ "keybindings",
10
+ ]);
11
+ export function preferredConfigNewline(contents, fallback = "\n") {
12
+ const first = contents.match(/\r\n|\n/u)?.[0];
13
+ return first === "\r\n" ? "\r\n" : first === "\n" ? "\n" : fallback;
14
+ }
15
+ function normalizedTextareaContents(contents) {
16
+ return contents.replaceAll(/\r\n|\r|\n/gu, "\n");
17
+ }
18
+ function originalOffset(contents, normalizedOffset) {
19
+ let normalized = 0;
20
+ let original = 0;
21
+ while (original < contents.length && normalized < normalizedOffset) {
22
+ if (contents[original] === "\r" && contents[original + 1] === "\n")
23
+ original += 2;
24
+ else
25
+ original += 1;
26
+ normalized += 1;
27
+ }
28
+ return original;
29
+ }
30
+ /** Preserve every untouched newline token while applying one textarea edit. */
31
+ export function applyConfigTextareaEdit(previous, textareaValue, insertedNewline = preferredConfigNewline(previous)) {
32
+ const before = normalizedTextareaContents(previous);
33
+ const after = normalizedTextareaContents(textareaValue);
34
+ if (before === after)
35
+ return previous;
36
+ let prefix = 0;
37
+ while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix])
38
+ prefix += 1;
39
+ let suffix = 0;
40
+ while (suffix < before.length - prefix &&
41
+ suffix < after.length - prefix &&
42
+ before[before.length - suffix - 1] === after[after.length - suffix - 1]) {
43
+ suffix += 1;
44
+ }
45
+ const originalStart = originalOffset(previous, prefix);
46
+ const originalEnd = originalOffset(previous, before.length - suffix);
47
+ const replacement = after.slice(prefix, after.length - suffix).replaceAll("\n", insertedNewline);
48
+ return `${previous.slice(0, originalStart)}${replacement}${previous.slice(originalEnd)}`;
49
+ }
50
+ export function appendConfigDocument(left, right, newline = preferredConfigNewline(left)) {
51
+ if (!left)
52
+ return right;
53
+ if (!right)
54
+ return left;
55
+ let cursor = left.length;
56
+ let trailingNewlines = 0;
57
+ while (cursor > 0) {
58
+ if (cursor >= 2 && left.slice(cursor - 2, cursor) === "\r\n")
59
+ cursor -= 2;
60
+ else if (left[cursor - 1] === "\n" || left[cursor - 1] === "\r")
61
+ cursor -= 1;
62
+ else
63
+ break;
64
+ trailingNewlines += 1;
65
+ }
66
+ return `${left}${newline.repeat(Math.max(0, 2 - trailingNewlines))}${right}`;
67
+ }
68
+ function colorHex(color) {
69
+ return `#${color.map((component) => component.toString(16).padStart(2, "0")).join("")}`;
70
+ }
71
+ function finiteNumber(value, fallback, minimum = 0) {
72
+ return Number.isFinite(value) && value >= minimum ? value : fallback;
73
+ }
74
+ export function friendlyValuesFromConfig(config) {
75
+ const renderer = config.renderer;
76
+ return {
77
+ foreground: colorHex(renderer.foreground),
78
+ background: colorHex(renderer.background),
79
+ cursor: colorHex(renderer.cursor),
80
+ cursorText: colorHex(renderer.cursorText ?? renderer.background),
81
+ selectionBackground: colorHex(renderer.selectionBackground),
82
+ selectionForeground: colorHex(renderer.selectionForeground),
83
+ backgroundOpacity: renderer.backgroundOpacity ?? 1,
84
+ backgroundOpacityCells: renderer.backgroundOpacityCells ?? false,
85
+ scrollbackLimit: config.terminal.scrollbackBytes,
86
+ fontFamilies: [...renderer.fontFamilies],
87
+ fontSize: renderer.fontSize,
88
+ paddingX: [...renderer.paddingX],
89
+ paddingY: [...renderer.paddingY],
90
+ clearKeybindings: config.workspace.clearKeybindings,
91
+ keybindings: config.workspace.keybindings.map(({ trigger, action }) => `${trigger}=${action}`),
92
+ };
93
+ }
94
+ function sameValues(left, right) {
95
+ return left.length === right.length && left.every((value, index) => value === right[index]);
96
+ }
97
+ function colorBytes(value) {
98
+ if (!/^#[0-9a-f]{6}$/iu.test(value))
99
+ return undefined;
100
+ return [1, 3, 5].map((offset) => Number.parseInt(value.slice(offset, offset + 2), 16));
101
+ }
102
+ /** Fields whose generated override was shadowed by a later included layer. */
103
+ export function friendlyConfigMismatches(config, values, sections = ALL_FRIENDLY_CONFIG_SECTIONS) {
104
+ const mismatches = [];
105
+ const renderer = config.renderer;
106
+ const checkColor = (label, actual, requested) => {
107
+ if (!sameValues(actual, colorBytes(requested) ?? []))
108
+ mismatches.push(label);
109
+ };
110
+ if (sections.has("colors")) {
111
+ checkColor("foreground", renderer.foreground, values.foreground);
112
+ checkColor("background", renderer.background, values.background);
113
+ checkColor("cursor", renderer.cursor, values.cursor);
114
+ checkColor("cursor text", renderer.cursorText ?? renderer.background, values.cursorText);
115
+ checkColor("selection", renderer.selectionBackground, values.selectionBackground);
116
+ checkColor("selection text", renderer.selectionForeground, values.selectionForeground);
117
+ }
118
+ if (sections.has("opacity")) {
119
+ if (Math.abs((renderer.backgroundOpacity ?? 1) - Number(values.backgroundOpacity.toFixed(2))) > 0.0001) {
120
+ mismatches.push("background opacity");
121
+ }
122
+ if ((renderer.backgroundOpacityCells ?? false) !== values.backgroundOpacityCells) {
123
+ mismatches.push("cell background opacity");
124
+ }
125
+ }
126
+ if (sections.has("scrollback") && config.terminal.scrollbackBytes !== Math.round(values.scrollbackLimit)) {
127
+ mismatches.push("scrollback limit");
128
+ }
129
+ if (sections.has("typography")) {
130
+ if (!sameValues(renderer.fontFamilies, cleanFontFamilies(values.fontFamilies)))
131
+ mismatches.push("font families");
132
+ if (renderer.fontSize !== values.fontSize)
133
+ mismatches.push("font size");
134
+ }
135
+ if (sections.has("padding")) {
136
+ if (!sameValues(renderer.paddingX, values.paddingX))
137
+ mismatches.push("horizontal padding");
138
+ if (!sameValues(renderer.paddingY, values.paddingY))
139
+ mismatches.push("vertical padding");
140
+ }
141
+ if (sections.has("keybindings")) {
142
+ if (config.workspace.clearKeybindings !== values.clearKeybindings)
143
+ mismatches.push("default keybindings");
144
+ if (!sameValues(config.workspace.keybindings.map(({ trigger, action }) => `${trigger}=${action}`), cleanKeybindings(values.keybindings))) {
145
+ mismatches.push("keybindings");
146
+ }
147
+ }
148
+ return mismatches;
149
+ }
150
+ function safeColor(value, fallback) {
151
+ return /^#[0-9a-f]{6}$/iu.test(value) ? value.toLowerCase() : fallback;
152
+ }
153
+ function cleanLines(values) {
154
+ return values.map((value) => value.replaceAll(/[\r\n]/gu, "").trim()).filter(Boolean);
155
+ }
156
+ function cleanFontFamilies(values) {
157
+ return cleanLines(values).map((family) => family.length >= 2 && family.startsWith('"') && family.endsWith('"') ? family.slice(1, -1) : family);
158
+ }
159
+ function cleanKeybindings(values) {
160
+ return cleanLines(values).map((binding) => {
161
+ const separator = binding.indexOf("=");
162
+ return separator < 0 ? binding : `${binding.slice(0, separator).trim()}=${binding.slice(separator + 1).trim()}`;
163
+ });
164
+ }
165
+ function pair(value, fallback) {
166
+ return [finiteNumber(value[0], fallback[0]), finiteNumber(value[1], fallback[1])];
167
+ }
168
+ export function friendlyConfigBlock(values, sections = ALL_FRIENDLY_CONFIG_SECTIONS) {
169
+ const paddingX = pair(values.paddingX, [2, 2]);
170
+ const paddingY = pair(values.paddingY, [2, 2]);
171
+ const fontFamilies = cleanFontFamilies(values.fontFamilies);
172
+ const keybindings = cleanLines(values.keybindings);
173
+ return [
174
+ FRIENDLY_BLOCK_START,
175
+ "# Only groups changed in the friendly editor are overridden; raw edits elsewhere are preserved.",
176
+ ...(sections.has("colors")
177
+ ? [
178
+ `foreground = ${safeColor(values.foreground, "#ffffff")}`,
179
+ `background = ${safeColor(values.background, "#000000")}`,
180
+ `cursor-color = ${safeColor(values.cursor, values.foreground)}`,
181
+ `cursor-text = ${safeColor(values.cursorText, values.background)}`,
182
+ `selection-background = ${safeColor(values.selectionBackground, values.foreground)}`,
183
+ `selection-foreground = ${safeColor(values.selectionForeground, values.background)}`,
184
+ ]
185
+ : []),
186
+ ...(sections.has("opacity")
187
+ ? [
188
+ `background-opacity = ${Math.min(1, finiteNumber(values.backgroundOpacity, 1)).toFixed(2)}`,
189
+ `background-opacity-cells = ${values.backgroundOpacityCells}`,
190
+ ]
191
+ : []),
192
+ ...(sections.has("scrollback")
193
+ ? [`scrollback-limit = ${Math.round(finiteNumber(values.scrollbackLimit, 10_000_000))}`]
194
+ : []),
195
+ ...(sections.has("typography")
196
+ ? [
197
+ "font-family =",
198
+ ...fontFamilies.map((family) => `font-family = ${family}`),
199
+ `font-size = ${finiteNumber(values.fontSize, 13, Number.EPSILON)}`,
200
+ ]
201
+ : []),
202
+ ...(sections.has("padding")
203
+ ? [`window-padding-x = ${paddingX.join(",")}`, `window-padding-y = ${paddingY.join(",")}`]
204
+ : []),
205
+ ...(sections.has("keybindings")
206
+ ? [
207
+ values.clearKeybindings ? "keybind = clear" : "keybind =",
208
+ ...keybindings.map((binding) => `keybind = ${binding}`),
209
+ ]
210
+ : []),
211
+ FRIENDLY_BLOCK_END,
212
+ ].join("\n");
213
+ }
214
+ function managedBlockRange(contents) {
215
+ const start = contents.indexOf(FRIENDLY_BLOCK_START);
216
+ const end = contents.indexOf(FRIENDLY_BLOCK_END);
217
+ const duplicateStart = start >= 0 && contents.indexOf(FRIENDLY_BLOCK_START, start + FRIENDLY_BLOCK_START.length) >= 0;
218
+ const duplicateEnd = end >= 0 && contents.indexOf(FRIENDLY_BLOCK_END, end + FRIENDLY_BLOCK_END.length) >= 0;
219
+ if (start < 0 !== end < 0 || (start >= 0 && end < start) || duplicateStart || duplicateEnd) {
220
+ throw new Error("The managed common-settings block in config.ghostty is malformed");
221
+ }
222
+ return start < 0 ? undefined : { start, end: end + FRIENDLY_BLOCK_END.length };
223
+ }
224
+ export function friendlyConfigSections(contents) {
225
+ let range;
226
+ try {
227
+ range = managedBlockRange(contents);
228
+ }
229
+ catch {
230
+ return new Set();
231
+ }
232
+ if (!range)
233
+ return new Set();
234
+ const sections = new Set();
235
+ for (const line of contents.slice(range.start, range.end).split(/\r?\n/u)) {
236
+ const key = line.split("=", 1)[0]?.trim();
237
+ if ([
238
+ "foreground",
239
+ "background",
240
+ "cursor-color",
241
+ "cursor-text",
242
+ "selection-background",
243
+ "selection-foreground",
244
+ ].includes(key ?? "")) {
245
+ sections.add("colors");
246
+ }
247
+ else if (key === "background-opacity" || key === "background-opacity-cells") {
248
+ sections.add("opacity");
249
+ }
250
+ else if (key === "scrollback-limit") {
251
+ sections.add("scrollback");
252
+ }
253
+ else if (key === "font-family" || key === "font-size") {
254
+ sections.add("typography");
255
+ }
256
+ else if (key === "window-padding-x" || key === "window-padding-y") {
257
+ sections.add("padding");
258
+ }
259
+ else if (key === "keybind") {
260
+ sections.add("keybindings");
261
+ }
262
+ }
263
+ return sections;
264
+ }
265
+ export function patchFriendlyConfigBlock(contents, values, sections = ALL_FRIENDLY_CONFIG_SECTIONS) {
266
+ if (sections.size === 0)
267
+ return removeFriendlyConfigBlock(contents);
268
+ const newline = preferredConfigNewline(contents);
269
+ const range = managedBlockRange(contents);
270
+ const block = friendlyConfigBlock(values, sections).replaceAll("\n", newline);
271
+ if (range)
272
+ return `${contents.slice(0, range.start)}${block}${contents.slice(range.end)}`;
273
+ return `${appendConfigDocument(contents, block, newline)}${newline}`;
274
+ }
275
+ export function removeFriendlyConfigBlock(contents) {
276
+ const range = managedBlockRange(contents);
277
+ if (!range)
278
+ return contents;
279
+ return `${contents.slice(0, range.start)}${contents.slice(range.end)}`;
280
+ }
281
+ export function hasFriendlyConfigBlock(contents) {
282
+ try {
283
+ return managedBlockRange(contents) !== undefined;
284
+ }
285
+ catch {
286
+ return contents.includes(FRIENDLY_BLOCK_START) || contents.includes(FRIENDLY_BLOCK_END);
287
+ }
288
+ }
289
+ //# sourceMappingURL=config-draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-draft.js","sourceRoot":"","sources":["../../src/appearance/config-draft.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { TerminalShaderEffect } from "../renderers/types.js";
2
+ export interface GhostteaShaderOption {
3
+ id: TerminalShaderEffect;
4
+ name: string;
5
+ description: string;
6
+ license: string;
7
+ animated: boolean;
8
+ }
9
+ /** Ports whose upstream files carry terms compatible with distribution here. */
10
+ export declare const GHOSTTEA_SHADER_OPTIONS: readonly GhostteaShaderOption[];
11
+ export declare function isGhostteaShaderEffect(id: string): id is TerminalShaderEffect;
12
+ /** Upstream names intentionally not bundled until their redistribution terms are cleared. */
13
+ export declare const UNAVAILABLE_UPSTREAM_SHADERS: readonly ["animated-gradient-shader", "bloom", "cineShader-Lava", "cubes", "cursor_blaze", "cursor_lightning", "dither", "drunkard", "fireworks-rockets", "fireworks", "galaxy", "gears-and-belts", "glitchy", "glow-rgbsplit-twitchy", "gradient-background", "in-game-crt-cursor", "in-game-crt", "inside-the-matrix", "just-snow", "matrix-hallway", "mnoise", "negative", "retro-terminal", "sin-interference", "smear_cursor_blocks", "smoke-and-ghost", "spotlight", "starfield-colors", "starfield", "tft", "underwater", "water"];
14
+ //# sourceMappingURL=shaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaders.d.ts","sourceRoot":"","sources":["../../src/appearance/shaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,oBAAoB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EA6BlE,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,oBAAoB,CAE7E;AAED,6FAA6F;AAC7F,eAAO,MAAM,4BAA4B,YACvC,0BAA0B,EAC1B,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,CACC,CAAC"}
@@ -0,0 +1,71 @@
1
+ /** Ports whose upstream files carry terms compatible with distribution here. */
2
+ export const GHOSTTEA_SHADER_OPTIONS = [
3
+ {
4
+ id: "ghosttea:better-crt",
5
+ name: "Better CRT (legacy)",
6
+ description: "Curved display and scanlines; retained for compatibility with the existing bundled effect.",
7
+ license: "CC BY-NC-SA 3.0 upstream",
8
+ animated: false,
9
+ },
10
+ {
11
+ id: "ghosttea:crt",
12
+ name: "CRT",
13
+ description: "Public-domain Lottes-style scanline, mask, warp, and tone treatment.",
14
+ license: "Unlicense / public domain",
15
+ animated: false,
16
+ },
17
+ {
18
+ id: "ghosttea:vhs",
19
+ name: "VHS",
20
+ description: "Animated tape wobble, chroma bleed, tracking noise, grain, and vignette.",
21
+ license: "MIT",
22
+ animated: true,
23
+ },
24
+ {
25
+ id: "ghosttea:sparks-from-fire",
26
+ name: "Sparks from Fire",
27
+ description: "Animated ember overlay adapted from the attribution-licensed upstream shader.",
28
+ license: "CC BY 3.0",
29
+ animated: true,
30
+ },
31
+ ];
32
+ const GHOSTTEA_SHADER_IDS = new Set(GHOSTTEA_SHADER_OPTIONS.map((shader) => shader.id));
33
+ export function isGhostteaShaderEffect(id) {
34
+ return GHOSTTEA_SHADER_IDS.has(id);
35
+ }
36
+ /** Upstream names intentionally not bundled until their redistribution terms are cleared. */
37
+ export const UNAVAILABLE_UPSTREAM_SHADERS = [
38
+ "animated-gradient-shader",
39
+ "bloom",
40
+ "cineShader-Lava",
41
+ "cubes",
42
+ "cursor_blaze",
43
+ "cursor_lightning",
44
+ "dither",
45
+ "drunkard",
46
+ "fireworks-rockets",
47
+ "fireworks",
48
+ "galaxy",
49
+ "gears-and-belts",
50
+ "glitchy",
51
+ "glow-rgbsplit-twitchy",
52
+ "gradient-background",
53
+ "in-game-crt-cursor",
54
+ "in-game-crt",
55
+ "inside-the-matrix",
56
+ "just-snow",
57
+ "matrix-hallway",
58
+ "mnoise",
59
+ "negative",
60
+ "retro-terminal",
61
+ "sin-interference",
62
+ "smear_cursor_blocks",
63
+ "smoke-and-ghost",
64
+ "spotlight",
65
+ "starfield-colors",
66
+ "starfield",
67
+ "tft",
68
+ "underwater",
69
+ "water",
70
+ ];
71
+ //# sourceMappingURL=shaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaders.js","sourceRoot":"","sources":["../../src/appearance/shaders.ts"],"names":[],"mappings":"AAUA,gFAAgF;AAChF,MAAM,CAAC,MAAM,uBAAuB,GAAoC;IACtE;QACE,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,4FAA4F;QACzG,OAAO,EAAE,0BAA0B;QACnC,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,0EAA0E;QACvF,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACf;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+EAA+E;QAC5F,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAuB,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9G,MAAM,UAAU,sBAAsB,CAAC,EAAU;IAC/C,OAAO,mBAAmB,CAAC,GAAG,CAAC,EAA0B,CAAC,CAAC;AAC7D,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,0BAA0B;IAC1B,OAAO;IACP,iBAAiB;IACjB,OAAO;IACP,cAAc;IACd,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,mBAAmB;IACnB,WAAW;IACX,QAAQ;IACR,iBAAiB;IACjB,SAAS;IACT,uBAAuB;IACvB,qBAAqB;IACrB,oBAAoB;IACpB,aAAa;IACb,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,kBAAkB;IAClB,qBAAqB;IACrB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,KAAK;IACL,YAAY;IACZ,OAAO;CACC,CAAC"}