@profullstack/hqtui 0.1.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 (98) hide show
  1. package/README.md +144 -0
  2. package/dist/ansi.d.ts +42 -0
  3. package/dist/ansi.d.ts.map +1 -0
  4. package/dist/ansi.js +66 -0
  5. package/dist/ansi.js.map +1 -0
  6. package/dist/app.d.ts +128 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +296 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/buffer.d.ts +50 -0
  11. package/dist/buffer.d.ts.map +1 -0
  12. package/dist/buffer.js +184 -0
  13. package/dist/buffer.js.map +1 -0
  14. package/dist/capabilities.d.ts +36 -0
  15. package/dist/capabilities.d.ts.map +1 -0
  16. package/dist/capabilities.js +93 -0
  17. package/dist/capabilities.js.map +1 -0
  18. package/dist/color.d.ts +47 -0
  19. package/dist/color.d.ts.map +1 -0
  20. package/dist/color.js +176 -0
  21. package/dist/color.js.map +1 -0
  22. package/dist/diff.d.ts +39 -0
  23. package/dist/diff.d.ts.map +1 -0
  24. package/dist/diff.js +203 -0
  25. package/dist/diff.js.map +1 -0
  26. package/dist/graphics/blocks.d.ts +26 -0
  27. package/dist/graphics/blocks.d.ts.map +1 -0
  28. package/dist/graphics/blocks.js +49 -0
  29. package/dist/graphics/blocks.js.map +1 -0
  30. package/dist/graphics/braille.d.ts +33 -0
  31. package/dist/graphics/braille.d.ts.map +1 -0
  32. package/dist/graphics/braille.js +166 -0
  33. package/dist/graphics/braille.js.map +1 -0
  34. package/dist/graphics/index.d.ts +4 -0
  35. package/dist/graphics/index.d.ts.map +1 -0
  36. package/dist/graphics/index.js +4 -0
  37. package/dist/graphics/index.js.map +1 -0
  38. package/dist/graphics/plot.d.ts +91 -0
  39. package/dist/graphics/plot.d.ts.map +1 -0
  40. package/dist/graphics/plot.js +291 -0
  41. package/dist/graphics/plot.js.map +1 -0
  42. package/dist/index.d.ts +34 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +42 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/input.d.ts +62 -0
  47. package/dist/input.d.ts.map +1 -0
  48. package/dist/input.js +245 -0
  49. package/dist/input.js.map +1 -0
  50. package/dist/layout.d.ts +51 -0
  51. package/dist/layout.d.ts.map +1 -0
  52. package/dist/layout.js +163 -0
  53. package/dist/layout.js.map +1 -0
  54. package/dist/surface.d.ts +81 -0
  55. package/dist/surface.d.ts.map +1 -0
  56. package/dist/surface.js +181 -0
  57. package/dist/surface.js.map +1 -0
  58. package/dist/terminal.d.ts +63 -0
  59. package/dist/terminal.d.ts.map +1 -0
  60. package/dist/terminal.js +189 -0
  61. package/dist/terminal.js.map +1 -0
  62. package/dist/testing.d.ts +71 -0
  63. package/dist/testing.d.ts.map +1 -0
  64. package/dist/testing.js +171 -0
  65. package/dist/testing.js.map +1 -0
  66. package/dist/theme.d.ts +58 -0
  67. package/dist/theme.d.ts.map +1 -0
  68. package/dist/theme.js +238 -0
  69. package/dist/theme.js.map +1 -0
  70. package/dist/ui.d.ts +194 -0
  71. package/dist/ui.d.ts.map +1 -0
  72. package/dist/ui.js +439 -0
  73. package/dist/ui.js.map +1 -0
  74. package/dist/unicode.d.ts +36 -0
  75. package/dist/unicode.d.ts.map +1 -0
  76. package/dist/unicode.js +221 -0
  77. package/dist/unicode.js.map +1 -0
  78. package/dist/widgets/controls.d.ts +95 -0
  79. package/dist/widgets/controls.d.ts.map +1 -0
  80. package/dist/widgets/controls.js +231 -0
  81. package/dist/widgets/controls.js.map +1 -0
  82. package/dist/widgets/index.d.ts +5 -0
  83. package/dist/widgets/index.d.ts.map +1 -0
  84. package/dist/widgets/index.js +5 -0
  85. package/dist/widgets/index.js.map +1 -0
  86. package/dist/widgets/meters.d.ts +100 -0
  87. package/dist/widgets/meters.d.ts.map +1 -0
  88. package/dist/widgets/meters.js +209 -0
  89. package/dist/widgets/meters.js.map +1 -0
  90. package/dist/widgets/table.d.ts +92 -0
  91. package/dist/widgets/table.d.ts.map +1 -0
  92. package/dist/widgets/table.js +228 -0
  93. package/dist/widgets/table.js.map +1 -0
  94. package/dist/widgets/text.d.ts +64 -0
  95. package/dist/widgets/text.d.ts.map +1 -0
  96. package/dist/widgets/text.js +123 -0
  97. package/dist/widgets/text.js.map +1 -0
  98. package/package.json +56 -0
@@ -0,0 +1,171 @@
1
+ import { FrameBuffer } from "./buffer.js";
2
+ import { Encoder } from "./diff.js";
3
+ import { createSurface, Surface } from "./surface.js";
4
+ import { Container } from "./ui.js";
5
+ import { resolveTheme } from "./theme.js";
6
+ import { detectCapabilities } from "./capabilities.js";
7
+ import { CONTINUATION, cellText } from "./unicode.js";
8
+ import { DEFAULT_COLOR } from "./color.js";
9
+ function snapshot(buffer, x, y) {
10
+ const i = buffer.index(x, y);
11
+ const value = buffer.chars[i];
12
+ return {
13
+ char: value === CONTINUATION ? "" : value === 0 ? " " : cellText(value),
14
+ fg: buffer.fg[i] ?? DEFAULT_COLOR,
15
+ bg: buffer.bg[i] ?? DEFAULT_COLOR,
16
+ attrs: buffer.attrs[i] ?? 0,
17
+ };
18
+ }
19
+ /**
20
+ * Render a view to an in-memory screen. No TTY, no escape codes, no timers —
21
+ * which is what makes TUI code written with this library actually testable.
22
+ *
23
+ * const screen = renderToScreen(({ ui }) => ui.text("CPU 72%"));
24
+ * expect(screen.text()).toContain("CPU 72%");
25
+ */
26
+ export function renderToScreen(view, options = {}) {
27
+ const width = options.width ?? 80;
28
+ const height = options.height ?? 24;
29
+ const theme = resolveTheme(options.theme);
30
+ const capabilities = detectCapabilities({ tty: true, colors: "truecolor", unicode: true, braille: true, ...options.capabilities }, process.env, { isTTY: true });
31
+ const buffer = new FrameBuffer(width, height);
32
+ buffer.clear(theme.background, theme.foreground);
33
+ const overlays = [];
34
+ let focusCursor = 0;
35
+ const ctx = {
36
+ theme,
37
+ capabilities,
38
+ width,
39
+ height,
40
+ frame: options.frame ?? 0,
41
+ elapsed: options.elapsed ?? 0,
42
+ focusIndex: options.focus ?? 0,
43
+ registerFocus: () => {
44
+ const index = focusCursor++;
45
+ return { index, focused: index === (options.focus ?? 0) };
46
+ },
47
+ hit: () => { },
48
+ overlay: (draw) => overlays.push(draw),
49
+ invalidate: () => { },
50
+ };
51
+ const root = createSurface(buffer, theme);
52
+ const container = new Container(root, ctx, "column");
53
+ view({ ui: container, theme, width, height, capabilities });
54
+ container.flush();
55
+ for (const overlay of overlays)
56
+ overlay(root);
57
+ return {
58
+ width,
59
+ height,
60
+ buffer,
61
+ text: () => buffer.toText(),
62
+ line: (y) => buffer.rowText(y).replace(/\s+$/, ""),
63
+ ansi: () => {
64
+ const empty = new FrameBuffer(width, height);
65
+ return new Encoder({ colors: "truecolor" }).encode(empty, buffer, true).output;
66
+ },
67
+ cell: (x, y) => snapshot(buffer, x, y),
68
+ find: (needle) => {
69
+ for (let y = 0; y < height; y++) {
70
+ const x = buffer.rowText(y).indexOf(needle);
71
+ if (x !== -1)
72
+ return { x, y };
73
+ }
74
+ return null;
75
+ },
76
+ contains: (needle) => {
77
+ for (let y = 0; y < height; y++)
78
+ if (buffer.rowText(y).includes(needle))
79
+ return true;
80
+ return false;
81
+ },
82
+ toJSON: () => {
83
+ const grid = [];
84
+ for (let y = 0; y < height; y++) {
85
+ const row = [];
86
+ for (let x = 0; x < width; x++)
87
+ row.push(snapshot(buffer, x, y));
88
+ grid.push(row);
89
+ }
90
+ return grid;
91
+ },
92
+ };
93
+ }
94
+ /** Shorthand: render and return plain text. Ideal for snapshot tests. */
95
+ export function renderToText(view, options = {}) {
96
+ return renderToScreen(view, options).text();
97
+ }
98
+ /** Render with ANSI colors, e.g. to write a demo screenshot to a file. */
99
+ export function renderToAnsi(view, options = {}) {
100
+ return renderToScreen(view, options).ansi();
101
+ }
102
+ const HTML_ESCAPES = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
103
+ function escapeHtml(text) {
104
+ return text.replace(/[&<>]/g, (c) => HTML_ESCAPES[c]);
105
+ }
106
+ function cssColor(color, fallback) {
107
+ if (color === DEFAULT_COLOR)
108
+ return fallback;
109
+ return `#${((color & 0xffffff) >>> 0).toString(16).padStart(6, "0")}`;
110
+ }
111
+ /**
112
+ * Render to standalone HTML — a real screenshot of the UI, no terminal needed.
113
+ * This is how the marketing site and the docs show live examples.
114
+ */
115
+ export function renderToHtml(view, options = {}) {
116
+ const screen = renderToScreen(view, options);
117
+ const theme = resolveTheme(options.theme);
118
+ const buffer = screen.buffer;
119
+ const bgFallback = cssColor(theme.background, "#000");
120
+ const fgFallback = cssColor(theme.foreground, "#fff");
121
+ const rows = [];
122
+ for (let y = 0; y < screen.height; y++) {
123
+ let row = "";
124
+ let run = "";
125
+ let runFg = -1;
126
+ let runBg = -1;
127
+ let runAttrs = -1;
128
+ const flush = () => {
129
+ if (run === "")
130
+ return;
131
+ const style = `color:${cssColor(runFg, fgFallback)};background:${cssColor(runBg, bgFallback)}` +
132
+ (runAttrs & 1 ? ";font-weight:700" : "") +
133
+ (runAttrs & 2 ? ";opacity:.65" : "") +
134
+ (runAttrs & 4 ? ";font-style:italic" : "") +
135
+ (runAttrs & 8 ? ";text-decoration:underline" : "");
136
+ row += `<span style="${style}">${escapeHtml(run)}</span>`;
137
+ run = "";
138
+ };
139
+ for (let x = 0; x < screen.width; x++) {
140
+ const i = buffer.index(x, y);
141
+ if (buffer.chars[i] === CONTINUATION)
142
+ continue;
143
+ const fg = buffer.fg[i];
144
+ const bg = buffer.bg[i];
145
+ const attrs = buffer.attrs[i];
146
+ if (fg !== runFg || bg !== runBg || attrs !== runAttrs) {
147
+ flush();
148
+ runFg = fg;
149
+ runBg = bg;
150
+ runAttrs = attrs;
151
+ }
152
+ const value = buffer.chars[i];
153
+ run += value === 0 ? " " : cellText(value);
154
+ }
155
+ flush();
156
+ rows.push(`<div class="hqtui-row">${row || "&nbsp;"}</div>`);
157
+ }
158
+ const fontSize = options.fontSize ?? 14;
159
+ const padding = options.padding ?? 16;
160
+ return `<pre class="${options.className ?? "hqtui-screen"}" style="background:${bgFallback};color:${fgFallback};` +
161
+ `padding:${padding}px;font-size:${fontSize}px;line-height:1.2;font-family:ui-monospace,'SFMono-Regular',Menlo,Consolas,monospace;` +
162
+ `margin:0;overflow-x:auto;border-radius:8px">${rows.join("\n")}</pre>`;
163
+ }
164
+ /** Drive a view for N frames — for animation and performance assertions. */
165
+ export function renderFrames(view, count, options = {}) {
166
+ const out = [];
167
+ for (let i = 0; i < count; i++)
168
+ out.push(renderToScreen(view, { ...options, frame: i }));
169
+ return out;
170
+ }
171
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type Color } from "./color.ts";
2
+ /**
3
+ * A theme is flat and small on purpose: every token here is one a widget
4
+ * actually reaches for. Anything deeper is computed, not configured.
5
+ */
6
+ export interface Theme {
7
+ name: string;
8
+ /** True for palettes designed against a dark terminal background. */
9
+ dark: boolean;
10
+ background: Color;
11
+ /** Panel interiors, lifted slightly off the page. */
12
+ surface: Color;
13
+ foreground: Color;
14
+ muted: Color;
15
+ primary: Color;
16
+ secondary: Color;
17
+ accent: Color;
18
+ success: Color;
19
+ warning: Color;
20
+ danger: Color;
21
+ info: Color;
22
+ border: Color;
23
+ borderFocused: Color;
24
+ title: Color;
25
+ selection: Color;
26
+ selectionText: Color;
27
+ cursor: Color;
28
+ /** Series colors for multi-line graphs, in draw order. */
29
+ graph: Color[];
30
+ /** Low-to-high ramp for gauges, meters and heat bars. */
31
+ heat: Color[];
32
+ }
33
+ /** Built-in themes. `themes.dark` is the default and needs no configuration. */
34
+ export declare const themes: {
35
+ readonly dark: Theme;
36
+ readonly dracula: Theme;
37
+ readonly nord: Theme;
38
+ readonly tokyoNight: Theme;
39
+ readonly gruvbox: Theme;
40
+ readonly matrix: Theme;
41
+ readonly monochrome: Theme;
42
+ readonly highContrast: Theme;
43
+ readonly light: Theme;
44
+ };
45
+ export type ThemeName = keyof typeof themes;
46
+ export declare const themeList: Theme[];
47
+ /** Build a theme by overriding a base (dark unless you say otherwise). */
48
+ export declare function defineTheme(overrides: Partial<Theme> & {
49
+ name?: string;
50
+ }, base?: Theme): Theme;
51
+ export declare function resolveTheme(theme: Theme | ThemeName | string | undefined): Theme;
52
+ /** A slightly lifted or dropped shade of the surface, for zebra rows and tracks. */
53
+ export declare function elevate(theme: Theme, amount?: number): Color;
54
+ /** Color a 0-1 ratio along the theme's heat ramp: green when idle, red when hot. */
55
+ export declare function heatColor(theme: Theme, ratio: number): Color;
56
+ /** The nth series color, wrapping around. */
57
+ export declare function seriesColor(theme: Theme, index: number): Color;
58
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAsB,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,IAAI,EAAE,OAAO,CAAC;IAEd,UAAU,EAAE,KAAK,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IAEb,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;IAEd,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;IAEZ,MAAM,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,KAAK,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IAEb,SAAS,EAAE,KAAK,CAAC;IACjB,aAAa,EAAE,KAAK,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;IAEd,0DAA0D;IAC1D,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,yDAAyD;IACzD,IAAI,EAAE,KAAK,EAAE,CAAC;CACf;AAgND,gFAAgF;AAChF,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,KAAK,EAA0B,CAAC;AAExD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,KAAY,GAAG,KAAK,CAEpG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAOjF;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,SAAO,GAAG,KAAK,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAE5D;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAE9D"}
package/dist/theme.js ADDED
@@ -0,0 +1,238 @@
1
+ import { hex, mix, gradient } from "./color.js";
2
+ const DARK = {
3
+ name: "dark",
4
+ dark: true,
5
+ background: hex("#05070a"),
6
+ surface: hex("#0a0e14"),
7
+ foreground: hex("#c6d0db"),
8
+ muted: hex("#5a6b7d"),
9
+ primary: hex("#58a6ff"),
10
+ secondary: hex("#bd93f9"),
11
+ accent: hex("#56d4dd"),
12
+ success: hex("#5fff87"),
13
+ warning: hex("#ffd75f"),
14
+ danger: hex("#ff6b6b"),
15
+ info: hex("#56d4dd"),
16
+ border: hex("#243040"),
17
+ borderFocused: hex("#56d4dd"),
18
+ title: hex("#7ee2ff"),
19
+ selection: hex("#1d3a52"),
20
+ selectionText: hex("#e6f2ff"),
21
+ cursor: hex("#56d4dd"),
22
+ graph: [hex("#58a6ff"), hex("#5fff87"), hex("#ff79c6"), hex("#ffd75f"), hex("#56d4dd"), hex("#ffa657")],
23
+ heat: [hex("#5fff87"), hex("#a8ff60"), hex("#ffd75f"), hex("#ffa657"), hex("#ff6b6b")],
24
+ };
25
+ function variant(base, overrides) {
26
+ return { ...base, ...overrides };
27
+ }
28
+ const DRACULA = variant(DARK, {
29
+ name: "dracula",
30
+ background: hex("#191a21"),
31
+ surface: hex("#21222c"),
32
+ foreground: hex("#f8f8f2"),
33
+ muted: hex("#6272a4"),
34
+ primary: hex("#bd93f9"),
35
+ secondary: hex("#ff79c6"),
36
+ accent: hex("#8be9fd"),
37
+ success: hex("#50fa7b"),
38
+ warning: hex("#f1fa8c"),
39
+ danger: hex("#ff5555"),
40
+ info: hex("#8be9fd"),
41
+ border: hex("#44475a"),
42
+ borderFocused: hex("#bd93f9"),
43
+ title: hex("#ff79c6"),
44
+ selection: hex("#44475a"),
45
+ selectionText: hex("#f8f8f2"),
46
+ graph: [hex("#bd93f9"), hex("#50fa7b"), hex("#ff79c6"), hex("#f1fa8c"), hex("#8be9fd"), hex("#ffb86c")],
47
+ heat: [hex("#50fa7b"), hex("#f1fa8c"), hex("#ffb86c"), hex("#ff5555")],
48
+ });
49
+ const NORD = variant(DARK, {
50
+ name: "nord",
51
+ background: hex("#2e3440"),
52
+ surface: hex("#333b4a"),
53
+ foreground: hex("#e5e9f0"),
54
+ muted: hex("#7b88a1"),
55
+ primary: hex("#88c0d0"),
56
+ secondary: hex("#b48ead"),
57
+ accent: hex("#8fbcbb"),
58
+ success: hex("#a3be8c"),
59
+ warning: hex("#ebcb8b"),
60
+ danger: hex("#bf616a"),
61
+ info: hex("#81a1c1"),
62
+ border: hex("#434c5e"),
63
+ borderFocused: hex("#88c0d0"),
64
+ title: hex("#8fbcbb"),
65
+ selection: hex("#434c5e"),
66
+ selectionText: hex("#eceff4"),
67
+ graph: [hex("#88c0d0"), hex("#a3be8c"), hex("#b48ead"), hex("#ebcb8b"), hex("#81a1c1"), hex("#d08770")],
68
+ heat: [hex("#a3be8c"), hex("#ebcb8b"), hex("#d08770"), hex("#bf616a")],
69
+ });
70
+ const TOKYO_NIGHT = variant(DARK, {
71
+ name: "tokyo-night",
72
+ background: hex("#1a1b26"),
73
+ surface: hex("#1f2335"),
74
+ foreground: hex("#c0caf5"),
75
+ muted: hex("#565f89"),
76
+ primary: hex("#7aa2f7"),
77
+ secondary: hex("#bb9af7"),
78
+ accent: hex("#7dcfff"),
79
+ success: hex("#9ece6a"),
80
+ warning: hex("#e0af68"),
81
+ danger: hex("#f7768e"),
82
+ info: hex("#7dcfff"),
83
+ border: hex("#2f3549"),
84
+ borderFocused: hex("#7aa2f7"),
85
+ title: hex("#7dcfff"),
86
+ selection: hex("#283457"),
87
+ selectionText: hex("#c0caf5"),
88
+ graph: [hex("#7aa2f7"), hex("#9ece6a"), hex("#bb9af7"), hex("#e0af68"), hex("#7dcfff"), hex("#ff9e64")],
89
+ heat: [hex("#9ece6a"), hex("#e0af68"), hex("#ff9e64"), hex("#f7768e")],
90
+ });
91
+ const GRUVBOX = variant(DARK, {
92
+ name: "gruvbox",
93
+ background: hex("#1d2021"),
94
+ surface: hex("#282828"),
95
+ foreground: hex("#ebdbb2"),
96
+ muted: hex("#928374"),
97
+ primary: hex("#83a598"),
98
+ secondary: hex("#d3869b"),
99
+ accent: hex("#8ec07c"),
100
+ success: hex("#b8bb26"),
101
+ warning: hex("#fabd2f"),
102
+ danger: hex("#fb4934"),
103
+ info: hex("#83a598"),
104
+ border: hex("#3c3836"),
105
+ borderFocused: hex("#fabd2f"),
106
+ title: hex("#fabd2f"),
107
+ selection: hex("#3c3836"),
108
+ selectionText: hex("#fbf1c7"),
109
+ graph: [hex("#83a598"), hex("#b8bb26"), hex("#d3869b"), hex("#fabd2f"), hex("#8ec07c"), hex("#fe8019")],
110
+ heat: [hex("#b8bb26"), hex("#fabd2f"), hex("#fe8019"), hex("#fb4934")],
111
+ });
112
+ const MATRIX = variant(DARK, {
113
+ name: "matrix",
114
+ background: hex("#000000"),
115
+ surface: hex("#020a02"),
116
+ foreground: hex("#9dff9d"),
117
+ muted: hex("#2f6b2f"),
118
+ primary: hex("#00ff41"),
119
+ secondary: hex("#00c853"),
120
+ accent: hex("#7cff7c"),
121
+ success: hex("#00ff41"),
122
+ warning: hex("#d4ff00"),
123
+ danger: hex("#ff3b30"),
124
+ info: hex("#00e5b0"),
125
+ border: hex("#12401f"),
126
+ borderFocused: hex("#00ff41"),
127
+ title: hex("#00ff41"),
128
+ selection: hex("#0d2f14"),
129
+ selectionText: hex("#c9ffc9"),
130
+ graph: [hex("#00ff41"), hex("#00c853"), hex("#7cff7c"), hex("#00e5b0"), hex("#d4ff00"), hex("#2f9e44")],
131
+ heat: [hex("#0f7a2e"), hex("#00c853"), hex("#00ff41"), hex("#d4ff00")],
132
+ });
133
+ const MONOCHROME = variant(DARK, {
134
+ name: "monochrome",
135
+ background: hex("#000000"),
136
+ surface: hex("#0b0b0b"),
137
+ foreground: hex("#d0d0d0"),
138
+ muted: hex("#6e6e6e"),
139
+ primary: hex("#ffffff"),
140
+ secondary: hex("#c0c0c0"),
141
+ accent: hex("#e0e0e0"),
142
+ success: hex("#e8e8e8"),
143
+ warning: hex("#b8b8b8"),
144
+ danger: hex("#ffffff"),
145
+ info: hex("#a0a0a0"),
146
+ border: hex("#3a3a3a"),
147
+ borderFocused: hex("#d0d0d0"),
148
+ title: hex("#ffffff"),
149
+ selection: hex("#303030"),
150
+ selectionText: hex("#ffffff"),
151
+ graph: [hex("#ffffff"), hex("#c8c8c8"), hex("#909090"), hex("#686868"), hex("#b0b0b0"), hex("#808080")],
152
+ heat: [hex("#585858"), hex("#909090"), hex("#c8c8c8"), hex("#ffffff")],
153
+ });
154
+ const HIGH_CONTRAST = variant(DARK, {
155
+ name: "high-contrast",
156
+ background: hex("#000000"),
157
+ surface: hex("#000000"),
158
+ foreground: hex("#ffffff"),
159
+ muted: hex("#c0c0c0"),
160
+ primary: hex("#00ffff"),
161
+ secondary: hex("#ff00ff"),
162
+ accent: hex("#ffff00"),
163
+ success: hex("#00ff00"),
164
+ warning: hex("#ffff00"),
165
+ danger: hex("#ff0000"),
166
+ info: hex("#00ffff"),
167
+ border: hex("#ffffff"),
168
+ borderFocused: hex("#ffff00"),
169
+ title: hex("#ffffff"),
170
+ selection: hex("#ffffff"),
171
+ selectionText: hex("#000000"),
172
+ graph: [hex("#00ffff"), hex("#00ff00"), hex("#ff00ff"), hex("#ffff00"), hex("#ffffff"), hex("#ff8000")],
173
+ heat: [hex("#00ff00"), hex("#ffff00"), hex("#ff8000"), hex("#ff0000")],
174
+ });
175
+ const LIGHT = {
176
+ name: "light",
177
+ dark: false,
178
+ background: hex("#fbfcfd"),
179
+ surface: hex("#ffffff"),
180
+ foreground: hex("#1c2530"),
181
+ muted: hex("#6b7a8c"),
182
+ primary: hex("#0b62d0"),
183
+ secondary: hex("#7c3aed"),
184
+ accent: hex("#0e7490"),
185
+ success: hex("#128a3f"),
186
+ warning: hex("#a86a00"),
187
+ danger: hex("#c62828"),
188
+ info: hex("#0e7490"),
189
+ border: hex("#d3dbe4"),
190
+ borderFocused: hex("#0b62d0"),
191
+ title: hex("#0b3d78"),
192
+ selection: hex("#d6e6fb"),
193
+ selectionText: hex("#0b2545"),
194
+ cursor: hex("#0b62d0"),
195
+ graph: [hex("#0b62d0"), hex("#128a3f"), hex("#a3348a"), hex("#a86a00"), hex("#0e7490"), hex("#c2410c")],
196
+ heat: [hex("#128a3f"), hex("#7aa300"), hex("#a86a00"), hex("#c2410c"), hex("#c62828")],
197
+ };
198
+ /** Built-in themes. `themes.dark` is the default and needs no configuration. */
199
+ export const themes = {
200
+ dark: DARK,
201
+ dracula: DRACULA,
202
+ nord: NORD,
203
+ tokyoNight: TOKYO_NIGHT,
204
+ gruvbox: GRUVBOX,
205
+ matrix: MATRIX,
206
+ monochrome: MONOCHROME,
207
+ highContrast: HIGH_CONTRAST,
208
+ light: LIGHT,
209
+ };
210
+ export const themeList = Object.values(themes);
211
+ /** Build a theme by overriding a base (dark unless you say otherwise). */
212
+ export function defineTheme(overrides, base = DARK) {
213
+ return { ...base, ...overrides, name: overrides.name ?? `${base.name}-custom` };
214
+ }
215
+ export function resolveTheme(theme) {
216
+ if (!theme)
217
+ return DARK;
218
+ if (typeof theme !== "string")
219
+ return theme;
220
+ const direct = themes[theme];
221
+ if (direct)
222
+ return direct;
223
+ const found = themeList.find((t) => t.name === theme);
224
+ return found ?? DARK;
225
+ }
226
+ /** A slightly lifted or dropped shade of the surface, for zebra rows and tracks. */
227
+ export function elevate(theme, amount = 0.06) {
228
+ return mix(theme.surface, theme.dark ? hex("#ffffff") : hex("#000000"), amount);
229
+ }
230
+ /** Color a 0-1 ratio along the theme's heat ramp: green when idle, red when hot. */
231
+ export function heatColor(theme, ratio) {
232
+ return gradient(theme.heat)(ratio);
233
+ }
234
+ /** The nth series color, wrapping around. */
235
+ export function seriesColor(theme, index) {
236
+ return theme.graph[((index % theme.graph.length) + theme.graph.length) % theme.graph.length];
237
+ }
238
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}