@mudah-cli/ui 0.8.0 → 0.9.2

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mudah Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # @mudah-cli/ui
2
+
3
+ Terminal design system: tokens, themes, output primitives, tables, panels, and markdown
4
+ rendering.
5
+
6
+ Part of [Mudah](https://github.com/thesimonharms/mudah) — an ergonomic, animation-rich CLI
7
+ framework. Depends only on `@mudah-cli/terminal`.
8
+
9
+ ## Install
10
+
11
+ ```sh
12
+ npm install @mudah-cli/ui
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ts
18
+ import { paint, renderTable, themes } from '@mudah-cli/ui';
19
+
20
+ console.log(paint('#7dd3fc', 'deployed', 24));
21
+ console.log(
22
+ renderTable(
23
+ [{ header: 'service' }, { header: 'status' }],
24
+ [
25
+ ['api', 'up'],
26
+ ['worker', 'up'],
27
+ ],
28
+ ),
29
+ );
30
+ ```
31
+
32
+ `Output` renders styled, plain (no ANSI), or JSON-line output and is what Mudah commands write
33
+ through. The `sleek` theme and its tokens (`paintToken`) keep highlighting consistent across
34
+ widgets; `renderMarkdown`, `renderPanel`, and the bar/line chart primitives round out the set.
35
+
36
+ ## Links
37
+
38
+ - [Full documentation](https://github.com/thesimonharms/mudah#readme)
39
+ - [License: MIT](LICENSE)
@@ -0,0 +1,44 @@
1
+ import type { ColorLevel } from '@mudah-cli/terminal';
2
+ import type { Theme } from './theme.js';
3
+ export interface BarChartEntry {
4
+ label: string;
5
+ value: number;
6
+ }
7
+ export interface BarChartOptions {
8
+ level: ColorLevel;
9
+ theme?: Theme;
10
+ /** Bar width in cells. Default 24. */
11
+ width?: number;
12
+ /** Use unicode block characters for bars. Default true. */
13
+ unicode?: boolean;
14
+ /** Show the label column. Default true. */
15
+ labels?: boolean;
16
+ }
17
+ /**
18
+ * Render a horizontal bar chart scaled to the largest value. Pure and stream-free
19
+ * so it composes into any output path. Bars are painted with the theme accent.
20
+ */
21
+ export declare function renderBarChart(entries: BarChartEntry[], options: BarChartOptions): string;
22
+ export interface LineChartEntry {
23
+ label: string;
24
+ value: number;
25
+ }
26
+ export interface LineChartOptions {
27
+ level: ColorLevel;
28
+ theme?: Theme;
29
+ /** Sampled points across the plot. Default: min(entries.length, 24). */
30
+ width?: number;
31
+ /** Plot height in rows. Default 4. */
32
+ height?: number;
33
+ /** Use unicode point/axis glyphs. Default true. */
34
+ unicode?: boolean;
35
+ /** Show the max-axis line and sampled labels. Default true. */
36
+ labels?: boolean;
37
+ }
38
+ /**
39
+ * Render an ASCII/Unicode line chart scaled to the largest value. Pure and
40
+ * stream-free, like `renderBarChart`, so it composes into any output path.
41
+ * Each column is a sampled data point; consecutive points are joined with a
42
+ * vertical connector when they differ in height.
43
+ */
44
+ export declare function renderLineChart(entries: LineChartEntry[], options: LineChartOptions): string;
package/dist/charts.js ADDED
@@ -0,0 +1,86 @@
1
+ import { paint } from './colors.js';
2
+ import { sleekDark } from './theme.js';
3
+ /**
4
+ * Render a horizontal bar chart scaled to the largest value. Pure and stream-free
5
+ * so it composes into any output path. Bars are painted with the theme accent.
6
+ */
7
+ export function renderBarChart(entries, options) {
8
+ const theme = options.theme ?? sleekDark;
9
+ const width = options.width ?? 24;
10
+ const unicode = options.unicode ?? true;
11
+ const showLabels = options.labels ?? true;
12
+ const max = entries.length > 0 ? Math.max(0, ...entries.map((e) => e.value)) : 0;
13
+ const full = unicode ? '█' : '#';
14
+ const lines = entries.map((entry) => {
15
+ const len = max > 0 ? Math.min(width, Math.round((entry.value / max) * width)) : 0;
16
+ const bar = full.repeat(len) + ' '.repeat(width - len);
17
+ const label = showLabels ? `${entry.label.padEnd(10)} ` : '';
18
+ return `${label}${paint(theme.colors.accent, bar, options.level)} ${entry.value}`;
19
+ });
20
+ return lines.join('\n');
21
+ }
22
+ /**
23
+ * Render an ASCII/Unicode line chart scaled to the largest value. Pure and
24
+ * stream-free, like `renderBarChart`, so it composes into any output path.
25
+ * Each column is a sampled data point; consecutive points are joined with a
26
+ * vertical connector when they differ in height.
27
+ */
28
+ export function renderLineChart(entries, options) {
29
+ const level = options.level;
30
+ const theme = options.theme ?? sleekDark;
31
+ const unicode = options.unicode ?? true;
32
+ const showLabels = options.labels ?? true;
33
+ const width = Math.max(1, options.width ?? Math.min(entries.length, 24));
34
+ const height = Math.max(1, options.height ?? 4);
35
+ if (entries.length === 0) {
36
+ return unicode ? '┈ no data ┈' : ' no data ';
37
+ }
38
+ const max = Math.max(0, ...entries.map((e) => e.value));
39
+ // Sample `width` points across the entries via even interpolation.
40
+ const samples = [];
41
+ const labels = [];
42
+ for (let c = 0; c < width; c++) {
43
+ const frac = width <= 1 ? 0 : c / (width - 1);
44
+ const idx = Math.round(frac * (entries.length - 1));
45
+ const entry = entries[idx];
46
+ const value = entry ? entry.value : 0;
47
+ const label = entry ? entry.label : '';
48
+ samples.push(value);
49
+ labels.push(label);
50
+ }
51
+ const cap = max > 0 ? max : 1;
52
+ const rowOf = (v) => {
53
+ const r = Math.round(((max - v) / cap) * (height - 1));
54
+ return Math.min(height - 1, Math.max(0, r));
55
+ };
56
+ const point = unicode ? '●' : '*';
57
+ const vert = unicode ? '│' : '|';
58
+ const axis = unicode ? '─' : '-';
59
+ const grid = Array.from({ length: height }, () => new Array(width).fill(' '));
60
+ for (let c = 0; c < width; c++) {
61
+ const r = rowOf(samples[c] ?? 0);
62
+ const line = grid[r];
63
+ if (line)
64
+ line[c] = point;
65
+ }
66
+ for (let c = 0; c < width - 1; c++) {
67
+ const r1 = rowOf(samples[c] ?? 0);
68
+ const r2 = rowOf(samples[c + 1] ?? 0);
69
+ const lo = Math.min(r1, r2);
70
+ const hi = Math.max(r1, r2);
71
+ for (let r = lo; r <= hi; r++) {
72
+ const line = grid[r];
73
+ if (line && line[c + 1] === ' ')
74
+ line[c + 1] = vert;
75
+ }
76
+ }
77
+ const lines = grid.map((row) => row.join(''));
78
+ lines.unshift(`${axis.repeat(width)} max: ${max}`);
79
+ if (showLabels) {
80
+ const first = labels[0] ?? '';
81
+ const last = labels[labels.length - 1] ?? '';
82
+ lines.push(`${first.padEnd(width)} ${last}`);
83
+ }
84
+ return lines.map((line) => paint(theme.colors.accent, line, level)).join('\n');
85
+ }
86
+ //# sourceMappingURL=charts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.js","sourceRoot":"","sources":["../src/charts.ts"],"names":[],"mappings":"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"}
package/dist/colors.d.ts CHANGED
@@ -1,7 +1,36 @@
1
1
  import type { ColorLevel } from '@mudah-cli/terminal';
2
- /** Strip ANSI escape sequences (for width measurement). */
2
+ /**
3
+ * Strip ANSI escape sequences (for width measurement).
4
+ *
5
+ * Covers CSI (`ESC [ params/intermediates final`), including colon-form
6
+ * truecolor and non-letter finals like `~`, and OSC strings terminated by BEL
7
+ * or ST.
8
+ */
3
9
  export declare function stripAnsi(text: string): string;
10
+ /**
11
+ * Visible width in terminal cells. Combines grapheme-awareness (combining
12
+ * marks, ZWJ sequences, variation selectors, emoji modifiers) with an
13
+ * East-Asian-width table, so padding and clipping line up with what the
14
+ * terminal actually draws.
15
+ */
4
16
  export declare function visibleLength(text: string): number;
17
+ /**
18
+ * Read one grapheme cluster at `index`: a base code point plus any trailing
19
+ * combining marks, variation selectors, skin tones, and ZWJ continuations.
20
+ * Returns its text, its cell width, and the index just past it.
21
+ */
22
+ export declare function readGrapheme(text: string, index?: number): {
23
+ text: string;
24
+ width: number;
25
+ next: number;
26
+ };
27
+ /**
28
+ * Split `text` into exactly `width` terminal cells. A double-width glyph
29
+ * occupies its cell and leaves `''` in the next one (a continuation, not a
30
+ * space), so joining the cells reproduces the on-screen layout. ANSI escapes
31
+ * are copied through without consuming a cell.
32
+ */
33
+ export declare function toCells(text: string, width: number): string[];
5
34
  /**
6
35
  * Paint `text` with a hex foreground color, honoring the terminal's color
7
36
  * level (0 = no color, 1/8 = nearest 256-color, 24 = truecolor).
package/dist/colors.js CHANGED
@@ -1,18 +1,208 @@
1
- /** Strip ANSI escape sequences (for width measurement). */
1
+ /**
2
+ * Strip ANSI escape sequences (for width measurement).
3
+ *
4
+ * Covers CSI (`ESC [ params/intermediates final`), including colon-form
5
+ * truecolor and non-letter finals like `~`, and OSC strings terminated by BEL
6
+ * or ST.
7
+ */
2
8
  export function stripAnsi(text) {
3
- return text.replace(/\x1b\[[0-9;?]*[A-Za-z]/g, '').replace(/\x1b\][^\x07\x1b]*(\x07|\x1b\\)/g, '');
9
+ return text.replace(/\x1b\[[\x20-\x3f]*[\x40-\x7e]/g, '').replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '');
10
+ }
11
+ /** Code points that occupy no cell: combining marks, ZWJ, VS, controls. */
12
+ function isZeroWidth(cp) {
13
+ return cp < 0x20 || cp === 0x7f || inRanges(cp, ZERO_WIDTH_RANGES);
14
+ }
15
+ /** Code points that occupy two cells (East Asian Wide/Fullwidth + emoji). */
16
+ function isWide(cp) {
17
+ return inRanges(cp, WIDE_RANGES);
4
18
  }
19
+ function inRanges(cp, ranges) {
20
+ let low = 0;
21
+ let high = ranges.length - 1;
22
+ while (low <= high) {
23
+ const mid = (low + high) >> 1;
24
+ const range = ranges[mid];
25
+ if (cp < range[0])
26
+ high = mid - 1;
27
+ else if (cp > range[1])
28
+ low = mid + 1;
29
+ else
30
+ return true;
31
+ }
32
+ return false;
33
+ }
34
+ const ZERO_WIDTH_RANGES = [
35
+ [0x0300, 0x036f],
36
+ [0x0483, 0x0489],
37
+ [0x0591, 0x05bd],
38
+ [0x0610, 0x061a],
39
+ [0x064b, 0x065f],
40
+ [0x0670, 0x0670],
41
+ [0x06d6, 0x06dc],
42
+ [0x0e31, 0x0e31],
43
+ [0x0e34, 0x0e3a],
44
+ [0x0e47, 0x0e4e],
45
+ [0x200b, 0x200f],
46
+ [0x202a, 0x202e],
47
+ [0x2060, 0x2064],
48
+ [0x20d0, 0x20f0],
49
+ [0xfe00, 0xfe0f],
50
+ [0xfeff, 0xfeff],
51
+ [0x1f3fb, 0x1f3ff],
52
+ [0xe0100, 0xe01ef],
53
+ ];
54
+ const WIDE_RANGES = [
55
+ [0x1100, 0x115f],
56
+ [0x2e80, 0x303e],
57
+ [0x3041, 0x33ff],
58
+ [0x3400, 0x4dbf],
59
+ [0x4e00, 0x9fff],
60
+ [0xa000, 0xa4cf],
61
+ [0xac00, 0xd7a3],
62
+ [0xf900, 0xfaff],
63
+ [0xfe10, 0xfe19],
64
+ [0xfe30, 0xfe6f],
65
+ [0xff00, 0xff60],
66
+ [0xffe0, 0xffe6],
67
+ [0x1f000, 0x1f02f],
68
+ [0x1f0a0, 0x1f0ff],
69
+ [0x1f300, 0x1f64f],
70
+ [0x1f680, 0x1f6ff],
71
+ [0x1f900, 0x1f9ff],
72
+ [0x1fa70, 0x1faff],
73
+ [0x20000, 0x3fffd],
74
+ ];
75
+ /**
76
+ * Visible width in terminal cells. Combines grapheme-awareness (combining
77
+ * marks, ZWJ sequences, variation selectors, emoji modifiers) with an
78
+ * East-Asian-width table, so padding and clipping line up with what the
79
+ * terminal actually draws.
80
+ */
5
81
  export function visibleLength(text) {
6
- // Conservative: treat CJK/fullwidth as 2 cells.
7
82
  let width = 0;
83
+ let joinNext = false; // the code point follows a ZWJ — part of the same glyph
84
+ let lastBaseWidth = 0;
8
85
  for (const char of stripAnsi(text)) {
9
- width += /[\u1100-\u115f\u2e80-\u9fff\uac00-\ud7a3\uf900-\ufaff\uff00-\uff60]/.test(char) ? 2 : 1;
86
+ const cp = char.codePointAt(0);
87
+ if (cp === undefined)
88
+ continue;
89
+ if (cp === 0x200d) {
90
+ // Zero-width joiner: the next base is a continuation, not a new cell.
91
+ joinNext = true;
92
+ continue;
93
+ }
94
+ if (cp === 0xfe0f) {
95
+ // Emoji presentation selector: promote a narrow base to two cells.
96
+ if (lastBaseWidth === 1)
97
+ width += 1;
98
+ lastBaseWidth = 2;
99
+ continue;
100
+ }
101
+ if (isZeroWidth(cp))
102
+ continue;
103
+ // Regional indicators are deliberately not in WIDE_RANGES: a pair forms a
104
+ // flag that occupies two cells total (one each), not four.
105
+ const w = isWide(cp) ? 2 : 1;
106
+ if (joinNext) {
107
+ joinNext = false;
108
+ lastBaseWidth = Math.max(lastBaseWidth, w);
109
+ continue;
110
+ }
111
+ width += w;
112
+ lastBaseWidth = w;
10
113
  }
11
114
  return width;
12
115
  }
116
+ /** An ANSI escape sequence at the start of a string. */
117
+ const ANSI_AT_START = /^\x1b(?:\[[\x20-\x3f]*[\x40-\x7e]|\][^\x07\x1b]*(?:\x07|\x1b\\))/;
118
+ /**
119
+ * Read one grapheme cluster at `index`: a base code point plus any trailing
120
+ * combining marks, variation selectors, skin tones, and ZWJ continuations.
121
+ * Returns its text, its cell width, and the index just past it.
122
+ */
123
+ export function readGrapheme(text, index = 0) {
124
+ let i = index;
125
+ let out = '';
126
+ let width = 0;
127
+ let seenBase = false;
128
+ let joinNext = false;
129
+ while (i < text.length) {
130
+ const cp = text.codePointAt(i);
131
+ if (cp === undefined)
132
+ break;
133
+ const char = String.fromCodePoint(cp);
134
+ const zero = isZeroWidth(cp);
135
+ if (seenBase && !zero && !joinNext)
136
+ break; // a new glyph starts here
137
+ i += char.length;
138
+ out += char;
139
+ if (cp === 0x200d) {
140
+ joinNext = true;
141
+ continue;
142
+ }
143
+ if (cp === 0xfe0f) {
144
+ // Emoji presentation: the cluster is two cells wide.
145
+ width = Math.max(width, 2);
146
+ continue;
147
+ }
148
+ if (zero)
149
+ continue;
150
+ if (seenBase)
151
+ width = Math.max(width, isWide(cp) ? 2 : 1);
152
+ else {
153
+ seenBase = true;
154
+ width = isWide(cp) ? 2 : 1;
155
+ }
156
+ joinNext = false;
157
+ }
158
+ return { text: out, width: seenBase ? Math.max(width, 1) : 0, next: i };
159
+ }
160
+ /**
161
+ * Split `text` into exactly `width` terminal cells. A double-width glyph
162
+ * occupies its cell and leaves `''` in the next one (a continuation, not a
163
+ * space), so joining the cells reproduces the on-screen layout. ANSI escapes
164
+ * are copied through without consuming a cell.
165
+ */
166
+ export function toCells(text, width) {
167
+ if (width <= 0)
168
+ return [];
169
+ const cells = [];
170
+ let i = 0;
171
+ let pendingAnsi = '';
172
+ while (i < text.length && cells.length < width) {
173
+ const ansi = ANSI_AT_START.exec(text.slice(i));
174
+ if (ansi) {
175
+ pendingAnsi += ansi[0];
176
+ i += ansi[0].length;
177
+ continue;
178
+ }
179
+ const glyph = readGrapheme(text, i);
180
+ if (glyph.next === i)
181
+ break;
182
+ i = glyph.next;
183
+ if (glyph.width === 0) {
184
+ pendingAnsi += glyph.text;
185
+ continue;
186
+ }
187
+ if (cells.length + glyph.width > width)
188
+ break;
189
+ cells.push(pendingAnsi + glyph.text);
190
+ pendingAnsi = '';
191
+ for (let k = 1; k < glyph.width; k++)
192
+ cells.push('');
193
+ }
194
+ while (cells.length < width)
195
+ cells.push(' ');
196
+ return cells.slice(0, width);
197
+ }
13
198
  function parseHex(hex) {
14
199
  const value = hex.replace('#', '');
15
- const full = value.length === 3 ? value.split('').map((c) => c + c).join('') : value;
200
+ const full = value.length === 3
201
+ ? value
202
+ .split('')
203
+ .map((c) => c + c)
204
+ .join('')
205
+ : value;
16
206
  const n = parseInt(full, 16);
17
207
  return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];
18
208
  }
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,gDAAgD;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,qEAAqE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrF,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,SAAS,GAA+B,CAAC,GAAG,EAAE;IAClD,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,eAAe,CAAC,GAA6B;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,IAAY,EAAE,KAAiB;IAChE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;AACnE,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,KAAiB;IAClE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAiB;IACjD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAiB;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAiB;IACpD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAiB;IACvD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;AAC9G,CAAC;AAED,2EAA2E;AAC3E,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACrE,CAAC;AAED,6EAA6E;AAC7E,SAAS,MAAM,CAAC,EAAU;IACxB,OAAO,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,MAA8C;IAC1E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;QAC3B,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;aAC7B,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;;YACjC,OAAO,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,iBAAiB,GAA2C;IAChE,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,GAA2C;IAC1D,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,wDAAwD;IAC9E,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,SAAS;YAAE,SAAS;QAE/B,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,sEAAsE;YACtE,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,mEAAmE;YACnE,IAAI,aAAa,KAAK,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YACpC,aAAa,GAAG,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,WAAW,CAAC,EAAE,CAAC;YAAE,SAAS;QAE9B,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAC;YACjB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QAED,KAAK,IAAI,CAAC,CAAC;QACX,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wDAAwD;AACxD,MAAM,aAAa,GAAG,kEAAkE,CAAC;AAEzF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC;IAClD,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,SAAS;YAAE,MAAM;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,0BAA0B;QACrE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;QACjB,GAAG,IAAI,IAAI,CAAC;QAEZ,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,qDAAqD;YACrD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,IAAI;YAAE,SAAS;QAEnB,IAAI,QAAQ;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACrD,CAAC;YACJ,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,MAAM;QAC5B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACf,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACtB,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK;YAAE,MAAM;QAC9C,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,WAAW,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,KAAK;aACF,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACjB,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,SAAS,GAA+B,CAAC,GAAG,EAAE;IAClD,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,eAAe,CAAC,GAA6B;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,IAAY,EAAE,KAAiB;IAChE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;AACnE,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,KAAiB;IAClE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAiB;IACjD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAiB;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAiB;IACpD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAiB;IACvD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ColorLevel } from '@mudah-cli/terminal';
2
+ import type { Theme } from './theme.js';
3
+ export type DiffKind = 'added' | 'modified' | 'deleted' | 'renamed';
4
+ /** ASCII / default diff markers (`config:diff` uses the same set). */
5
+ export declare const diffGlyphs: {
6
+ readonly added: '+';
7
+ readonly modified: '~';
8
+ readonly deleted: '-';
9
+ readonly renamed: '→';
10
+ };
11
+ /** Unicode variants of {@link diffGlyphs}. */
12
+ export declare const diffGlyphsUnicode: {
13
+ readonly added: '✚';
14
+ readonly modified: '●';
15
+ readonly deleted: '✖';
16
+ readonly renamed: '→';
17
+ };
18
+ export interface FormatDiffLineOptions {
19
+ unicode?: boolean;
20
+ level?: ColorLevel;
21
+ theme?: Theme;
22
+ }
23
+ /**
24
+ * Prefix `text` with the glyph for `kind`. When `level` is above 0 the line
25
+ * is painted with the matching theme token (added→success, deleted→error).
26
+ */
27
+ export declare function formatDiffLine(kind: DiffKind, text: string, options?: FormatDiffLineOptions): string;
package/dist/glyphs.js ADDED
@@ -0,0 +1,36 @@
1
+ import { paint } from './colors.js';
2
+ import { sleekDark } from './theme.js';
3
+ /** ASCII / default diff markers (`config:diff` uses the same set). */
4
+ export const diffGlyphs = {
5
+ added: '+',
6
+ modified: '~',
7
+ deleted: '-',
8
+ renamed: '→',
9
+ };
10
+ /** Unicode variants of {@link diffGlyphs}. */
11
+ export const diffGlyphsUnicode = {
12
+ added: '✚',
13
+ modified: '●',
14
+ deleted: '✖',
15
+ renamed: '→',
16
+ };
17
+ const KIND_TOKEN = {
18
+ added: 'success',
19
+ modified: 'warn',
20
+ deleted: 'error',
21
+ renamed: 'info',
22
+ };
23
+ /**
24
+ * Prefix `text` with the glyph for `kind`. When `level` is above 0 the line
25
+ * is painted with the matching theme token (added→success, deleted→error).
26
+ */
27
+ export function formatDiffLine(kind, text, options = {}) {
28
+ const glyphs = options.unicode === true ? diffGlyphsUnicode : diffGlyphs;
29
+ const line = `${glyphs[kind]} ${text}`;
30
+ const level = options.level ?? 0;
31
+ if (level === 0)
32
+ return line;
33
+ const theme = options.theme ?? sleekDark;
34
+ return paint(theme.colors[KIND_TOKEN[kind]], line, level);
35
+ }
36
+ //# sourceMappingURL=glyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphs.js","sourceRoot":"","sources":["../src/glyphs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACJ,CAAC;AAEX,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACJ,CAAC;AAQX,MAAM,UAAU,GAA4C;IAC1D,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,IAAY,EAAE,OAAO,GAA0B,EAAE;IAC9F,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
- export { bold, dim, italic, paint, paintBg, stripAnsi, underline, visibleLength, } from './colors.js';
1
+ export { type BarChartEntry, type BarChartOptions, type LineChartEntry, type LineChartOptions, renderBarChart, renderLineChart, } from './charts.js';
2
+ export { bold, dim, italic, paint, paintBg, readGrapheme, stripAnsi, toCells, underline, visibleLength, } from './colors.js';
3
+ export { type DiffKind, diffGlyphs, diffGlyphsUnicode, type FormatDiffLineOptions, formatDiffLine, } from './glyphs.js';
4
+ export { type RenderMarkdownOptions, renderMarkdown } from './markdown.js';
2
5
  export { Output, type OutputEvent, type OutputMode, type OutputOptions } from './output.js';
3
- export { renderMarkdown, type RenderMarkdownOptions } from './markdown.js';
4
- export { renderPanel, type RenderPanelOptions } from './panel.js';
5
- export { renderTable, type RenderTableOptions, type TableColumn } from './table.js';
6
- export { detectTheme, resolveTheme, sleekDark, sleekLight, themes, type DetectThemeOptions, type Theme, type ThemeColors, } from './theme.js';
6
+ export { type RenderPanelOptions, renderPanel } from './panel.js';
7
+ export { type RenderTableOptions, renderTable, type TableColumn } from './table.js';
8
+ export { type DetectThemeOptions, detectTheme, resolveTheme, sleekDark, sleekLight, type Theme, type ThemeColors, themes, } from './theme.js';
9
+ export { PAINT_TOKENS, type PaintToken, type PaintTokenOptions, paintToken, } from './tokens.js';
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
- export { bold, dim, italic, paint, paintBg, stripAnsi, underline, visibleLength, } from './colors.js';
2
- export { Output } from './output.js';
1
+ export { renderBarChart, renderLineChart, } from './charts.js';
2
+ export { bold, dim, italic, paint, paintBg, readGrapheme, stripAnsi, toCells, underline, visibleLength, } from './colors.js';
3
+ export { diffGlyphs, diffGlyphsUnicode, formatDiffLine, } from './glyphs.js';
3
4
  export { renderMarkdown } from './markdown.js';
5
+ export { Output } from './output.js';
4
6
  export { renderPanel } from './panel.js';
5
7
  export { renderTable } from './table.js';
6
8
  export { detectTheme, resolveTheme, sleekDark, sleekLight, themes, } from './theme.js';
9
+ export { PAINT_TOKENS, paintToken, } from './tokens.js';
7
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAyD,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,WAAW,EAA2B,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AACpF,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,MAAM,GAIP,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,UAAU,EACV,iBAAiB,EAEjB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAA8B,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAyD,MAAM,aAAa,CAAC;AAC5F,OAAO,EAA2B,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAA2B,WAAW,EAAoB,MAAM,YAAY,CAAC;AACpF,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EAGV,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EAGZ,UAAU,GACX,MAAM,aAAa,CAAC"}
@@ -3,10 +3,13 @@ import type { Theme } from './theme.js';
3
3
  export interface RenderMarkdownOptions {
4
4
  level: ColorLevel;
5
5
  theme?: Theme;
6
+ /** Use unicode box characters in rendered blocks (code panels). Default true. */
7
+ unicode?: boolean;
6
8
  }
7
9
  /**
8
10
  * A lightweight markdown renderer for CLI output: headings, bullets,
9
- * numbered lists, blockquotes, hr, bold/italic/code, links. Not a full
10
- * CommonMark parser — just enough to read well in a terminal.
11
+ * numbered lists, task lists, pipe tables, blockquotes, hr, bold/italic/code,
12
+ * and fenced code blocks rendered as theme-aware panels. Not a full CommonMark
13
+ * parser — just enough to read well in a terminal.
11
14
  */
12
15
  export declare function renderMarkdown(source: string, options: RenderMarkdownOptions): string;
package/dist/markdown.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import { bold, dim, italic, paint, underline } from './colors.js';
2
+ import { renderPanel } from './panel.js';
3
+ import { renderTable } from './table.js';
2
4
  import { sleekDark } from './theme.js';
5
+ /** A fenced code block: 3+ backticks, an optional language tag, then content. */
6
+ const FENCE_RE = /^(`{3,})[ \t]*(\w+)?[ \t]*$/;
3
7
  function inline(text, level, theme) {
4
8
  let out = text;
5
9
  // Code spans first (protect from other rules by ordering).
@@ -8,22 +12,90 @@ function inline(text, level, theme) {
8
12
  out = out.replace(/\*\*([^*]+)\*\*/g, (_, strong) => bold(strong, level));
9
13
  // Italic (single *).
10
14
  out = out.replace(/(^|[^*])\*([^*]+)\*(?!\*)/g, (_m, pre, em) => `${pre}${italic(em, level)}`);
11
- // Links: [text](url) → dim url after text (OSC 8 hyperlinks in v0.2).
15
+ // Links: [text](url) -> dim url after text (OSC 8 hyperlinks in v0.2).
12
16
  out = out.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_m, label, url) => `${underline(label, level)} ${dim(`<${url}>`, level)}`);
13
17
  return out;
14
18
  }
19
+ /** A GFM pipe-table row: `| a | b |`. */
20
+ function isPipeTableRow(line) {
21
+ const t = line.trim();
22
+ return t.startsWith('|') && t.endsWith('|') && t.length >= 3;
23
+ }
24
+ /** Separator under a header: `| --- |` / `| :--- |` / `| ---: |`. */
25
+ function isPipeTableSeparator(line) {
26
+ if (!isPipeTableRow(line))
27
+ return false;
28
+ const cells = splitPipeRow(line);
29
+ return cells.length > 0 && cells.every((cell) => /^:?-{3,}:?$/.test(cell));
30
+ }
31
+ function splitPipeRow(line) {
32
+ const t = line.trim();
33
+ const inner = t.startsWith('|') ? t.slice(1) : t;
34
+ const body = inner.endsWith('|') ? inner.slice(0, -1) : inner;
35
+ return body.split('|').map((cell) => cell.trim());
36
+ }
37
+ function alignFromSeparator(cell) {
38
+ return cell.startsWith(':') === false && cell.endsWith(':') ? 'right' : 'left';
39
+ }
15
40
  /**
16
41
  * A lightweight markdown renderer for CLI output: headings, bullets,
17
- * numbered lists, blockquotes, hr, bold/italic/code, links. Not a full
18
- * CommonMark parser — just enough to read well in a terminal.
42
+ * numbered lists, task lists, pipe tables, blockquotes, hr, bold/italic/code,
43
+ * and fenced code blocks rendered as theme-aware panels. Not a full CommonMark
44
+ * parser — just enough to read well in a terminal.
19
45
  */
20
46
  export function renderMarkdown(source, options) {
21
47
  const theme = options.theme ?? sleekDark;
22
48
  const { level } = options;
49
+ const unicode = options.unicode ?? true;
23
50
  const lines = source.split('\n');
24
51
  const out = [];
25
- for (const rawLine of lines) {
52
+ let inFence = false;
53
+ let fenceLang;
54
+ let fenceInner = [];
55
+ for (let i = 0; i < lines.length; i++) {
56
+ const rawLine = lines[i];
26
57
  const line = rawLine.replace(/\s+$/, '');
58
+ const fence = FENCE_RE.exec(line);
59
+ if (fence) {
60
+ if (!inFence) {
61
+ inFence = true;
62
+ fenceLang = fence[2];
63
+ fenceInner = [];
64
+ }
65
+ else {
66
+ out.push(renderPanel(fenceLang, fenceInner, { level, unicode, theme }));
67
+ inFence = false;
68
+ fenceLang = undefined;
69
+ fenceInner = [];
70
+ }
71
+ continue;
72
+ }
73
+ if (inFence) {
74
+ // Preserve code lines verbatim, including blank and indented lines.
75
+ fenceInner.push(rawLine);
76
+ continue;
77
+ }
78
+ const next = (lines[i + 1] ?? '').replace(/\s+$/, '');
79
+ if (isPipeTableRow(line) && isPipeTableSeparator(next)) {
80
+ const headers = splitPipeRow(line);
81
+ const aligns = splitPipeRow(next).map(alignFromSeparator);
82
+ const rows = [];
83
+ i += 2;
84
+ while (i < lines.length) {
85
+ const body = lines[i].replace(/\s+$/, '');
86
+ if (!isPipeTableRow(body) || isPipeTableSeparator(body))
87
+ break;
88
+ rows.push(splitPipeRow(body));
89
+ i += 1;
90
+ }
91
+ i -= 1;
92
+ const columns = headers.map((header, idx) => ({
93
+ header,
94
+ align: aligns[idx] === 'right' ? 'right' : 'left',
95
+ }));
96
+ out.push(renderTable(columns, rows, { level, unicode, theme }));
97
+ continue;
98
+ }
27
99
  if (line.trim() === '') {
28
100
  out.push('');
29
101
  continue;
@@ -32,7 +104,9 @@ export function renderMarkdown(source, options) {
32
104
  if (heading) {
33
105
  const depth = heading[1].length;
34
106
  const text = inline(heading[2], level, theme);
35
- const styled = depth <= 2 ? underline(bold(paint(theme.colors.accent, text, level), level), level) : bold(text, level);
107
+ const styled = depth <= 2
108
+ ? underline(bold(paint(theme.colors.accent, text, level), level), level)
109
+ : bold(text, level);
36
110
  out.push(depth === 1 ? `\n${styled}\n` : ` ${' '.repeat((depth - 2) * 2)}${styled}`);
37
111
  continue;
38
112
  }
@@ -46,6 +120,13 @@ export function renderMarkdown(source, options) {
46
120
  out.push(dim(`│ ${inline(quote[1], level, theme)}`, level));
47
121
  continue;
48
122
  }
123
+ const task = /^[-*]\s+\[([ xX])\]\s+(.*)$/.exec(line);
124
+ if (task) {
125
+ const checked = task[1] !== ' ';
126
+ const mark = unicode ? (checked ? '☑' : '☐') : checked ? '[x]' : '[ ]';
127
+ out.push(` ${mark} ${inline(task[2], level, theme)}`);
128
+ continue;
129
+ }
49
130
  const bullet = /^[-*]\s+(.*)$/.exec(line);
50
131
  if (bullet) {
51
132
  out.push(` ${dim('•', level)} ${inline(bullet[1], level, theme)}`);
@@ -59,6 +140,10 @@ export function renderMarkdown(source, options) {
59
140
  }
60
141
  out.push(inline(line, level, theme));
61
142
  }
143
+ // Unterminated fence: emit what was collected so content isn't lost.
144
+ if (inFence) {
145
+ out.push(renderPanel(fenceLang, fenceInner, { level, unicode, theme }));
146
+ }
62
147
  return out.join('\n');
63
148
  }
64
149
  //# sourceMappingURL=markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
package/dist/output.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ColorLevel } from '@mudah-cli/terminal';
2
- import type { Theme } from './theme.js';
3
2
  import { type TableColumn } from './table.js';
3
+ import type { Theme } from './theme.js';
4
4
  export type OutputMode = 'styled' | 'plain' | 'json';
5
5
  export interface OutputOptions {
6
6
  stream?: {
@@ -78,6 +78,8 @@ export declare class Output {
78
78
  };
79
79
  } & Record<string, unknown>): string;
80
80
  raw(message: string): void;
81
+ /** Write bytes with no extra newline. Used when piping a child command. */
82
+ write(data: string): void;
81
83
  info(message: string): void;
82
84
  success(message: string): void;
83
85
  error(message: string): void;
package/dist/output.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { ansi } from '@mudah-cli/terminal';
2
2
  import { bold, dim, paint, underline, visibleLength } from './colors.js';
3
+ import { renderMarkdown } from './markdown.js';
3
4
  import { renderPanel } from './panel.js';
4
5
  import { renderTable } from './table.js';
5
- import { renderMarkdown } from './markdown.js';
6
6
  /**
7
7
  * The styled output surface. Every framework message flows through here so
8
8
  * theming, color level, unicode, stream selection — and output *mode* — stay
@@ -70,7 +70,7 @@ export class Output {
70
70
  const event = kind === 'data' && data !== undefined ? { kind, message, data } : { kind, message };
71
71
  this.events.push(event);
72
72
  if (this.isMachineReadable) {
73
- this.out.write(JSON.stringify(event) + '\n');
73
+ this.out.write(`${JSON.stringify(event)}\n`);
74
74
  }
75
75
  }
76
76
  /** All events recorded this run (for envelopes/tests). */
@@ -100,53 +100,57 @@ export class Output {
100
100
  });
101
101
  }
102
102
  raw(message) {
103
- this.out.write(message + '\n');
103
+ this.out.write(`${message}\n`);
104
+ }
105
+ /** Write bytes with no extra newline. Used when piping a child command. */
106
+ write(data) {
107
+ this.out.write(data);
104
108
  }
105
109
  info(message) {
106
110
  if (this.isMachineReadable) {
107
111
  this.writeJsonLine('info', message);
108
112
  return;
109
113
  }
110
- this.out.write(this.paint('info', message) + '\n');
114
+ this.out.write(`${this.paint('info', message)}\n`);
111
115
  }
112
116
  success(message) {
113
117
  if (this.isMachineReadable) {
114
118
  this.writeJsonLine('success', message);
115
119
  return;
116
120
  }
117
- this.out.write(this.mark('success') + ' ' + this.paint('success', message) + '\n');
121
+ this.out.write(`${this.mark('success')} ${this.paint('success', message)}\n`);
118
122
  }
119
123
  error(message) {
120
124
  if (this.isMachineReadable) {
121
- this.err.write(JSON.stringify({ kind: 'error', message }) + '\n');
125
+ this.err.write(`${JSON.stringify({ kind: 'error', message })}\n`);
122
126
  this.events.push({ kind: 'error', message });
123
127
  return;
124
128
  }
125
- this.err.write(this.mark('error') + ' ' + this.paint('error', message) + '\n');
129
+ this.err.write(`${this.mark('error')} ${this.paint('error', message)}\n`);
126
130
  }
127
131
  warn(message) {
128
132
  if (this.isMachineReadable) {
129
- this.err.write(JSON.stringify({ kind: 'warn', message }) + '\n');
133
+ this.err.write(`${JSON.stringify({ kind: 'warn', message })}\n`);
130
134
  this.events.push({ kind: 'warn', message });
131
135
  return;
132
136
  }
133
- this.err.write(this.mark('warn') + ' ' + this.paint('warn', message) + '\n');
137
+ this.err.write(`${this.mark('warn')} ${this.paint('warn', message)}\n`);
134
138
  }
135
139
  muted(message) {
136
140
  if (this.isMachineReadable)
137
141
  return; // human-only decoration
138
- this.out.write(dim(this.paint('muted', message), this.effectiveLevel()) + '\n');
142
+ this.out.write(`${dim(this.paint('muted', message), this.effectiveLevel())}\n`);
139
143
  }
140
144
  /** A muted hint line on the error stream (used alongside error output). */
141
145
  hint(message) {
142
146
  if (this.isMachineReadable)
143
147
  return;
144
- this.err.write(dim(this.paint('muted', `Hint: ${message}`), this.effectiveLevel()) + '\n');
148
+ this.err.write(`${dim(this.paint('muted', `Hint: ${message}`), this.effectiveLevel())}\n`);
145
149
  }
146
150
  section(title) {
147
151
  if (this.isMachineReadable)
148
152
  return;
149
- this.out.write('\n' + underline(bold(this.paint('accent', title), this.effectiveLevel()), this.effectiveLevel()) + '\n');
153
+ this.out.write(`\n${underline(bold(this.paint('accent', title), this.effectiveLevel()), this.effectiveLevel())}\n`);
150
154
  }
151
155
  bullet(message) {
152
156
  if (this.isMachineReadable)
@@ -165,7 +169,7 @@ export class Output {
165
169
  if (this.isMachineReadable)
166
170
  return;
167
171
  const ch = this.unicode ? '─' : '-';
168
- this.out.write(this.paint('border', ch.repeat(60)) + '\n');
172
+ this.out.write(`${this.paint('border', ch.repeat(60))}\n`);
169
173
  }
170
174
  table(columns, rows) {
171
175
  if (this.isMachineReadable) {
@@ -180,25 +184,25 @@ export class Output {
180
184
  }
181
185
  return;
182
186
  }
183
- this.out.write(renderTable(columns, rows, { level: this.effectiveLevel(), unicode: this.unicode }) + '\n');
187
+ this.out.write(`${renderTable(columns, rows, { level: this.effectiveLevel(), unicode: this.unicode })}\n`);
184
188
  }
185
189
  panel(title, body, width) {
186
190
  if (this.isMachineReadable)
187
191
  return;
188
- this.out.write(renderPanel(title, body, { level: this.effectiveLevel(), unicode: this.unicode, width }) + '\n');
192
+ this.out.write(`${renderPanel(title, body, { level: this.effectiveLevel(), unicode: this.unicode, width })}\n`);
189
193
  }
190
194
  markdown(text) {
191
195
  if (this.isMachineReadable) {
192
196
  this.emit('data', 'markdown', text);
193
197
  return;
194
198
  }
195
- this.out.write(renderMarkdown(text, { level: this.effectiveLevel(), theme: this.theme }) + '\n');
199
+ this.out.write(`${renderMarkdown(text, { level: this.effectiveLevel(), theme: this.theme, unicode: this.unicode })}\n`);
196
200
  }
197
201
  /** Record an event and stream it as a JSON line (json mode only). */
198
202
  writeJsonLine(kind, message, data) {
199
203
  const event = data !== undefined ? { kind, message, data } : { kind, message };
200
204
  this.events.push(event);
201
- this.out.write(JSON.stringify(event) + '\n');
205
+ this.out.write(`${JSON.stringify(event)}\n`);
202
206
  }
203
207
  /**
204
208
  * Desktop notification via OSC 9 (Ghostty/WezTerm). When unsupported,
@@ -215,10 +219,20 @@ export class Output {
215
219
  this.err.write(`\x1b]777;notify;${title};${message}\x07`);
216
220
  return;
217
221
  }
218
- this.err.write(this.paint('highlight', '●') + ' ' + bold(title, this.effectiveLevel()) + ' ' + dim(message, this.effectiveLevel()) + '\n');
222
+ this.err.write(`${this.paint('highlight', '●')} ${bold(title, this.effectiveLevel())} ${dim(message, this.effectiveLevel())}\n`);
219
223
  }
220
224
  mark(kind) {
221
- const glyph = kind === 'success' ? (this.unicode ? '✓' : 'v') : kind === 'error' ? (this.unicode ? '✗' : 'x') : this.unicode ? '⚠' : '!';
225
+ const glyph = kind === 'success'
226
+ ? this.unicode
227
+ ? '✓'
228
+ : 'v'
229
+ : kind === 'error'
230
+ ? this.unicode
231
+ ? '✗'
232
+ : 'x'
233
+ : this.unicode
234
+ ? '⚠'
235
+ : '!';
222
236
  return this.paint(kind, glyph);
223
237
  }
224
238
  paint(key, text) {
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
package/dist/panel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
package/dist/table.js CHANGED
@@ -26,10 +26,10 @@ export function renderTable(columns, rows, options) {
26
26
  });
27
27
  lines.push(rowBorder(header));
28
28
  if (sepUnicode) {
29
- lines.push('├' + widths.map((w) => '─'.repeat(w + 2)).join('┼') + '┤');
29
+ lines.push(`├${widths.map((w) => '─'.repeat(w + 2)).join('┼')}┤`);
30
30
  }
31
31
  else {
32
- lines.push('+' + widths.map((w) => '-'.repeat(w + 2)).join('+') + '+');
32
+ lines.push(`+${widths.map((w) => '-'.repeat(w + 2)).join('+')}+`);
33
33
  }
34
34
  for (const row of rows) {
35
35
  lines.push(rowBorder(row.map((cell, i) => pad(cell, widths[i], columns[i]?.align ?? 'left'))));
@@ -39,7 +39,9 @@ export function renderTable(columns, rows, options) {
39
39
  (sepUnicode ? '┘' : '+'));
40
40
  return lines.join('\n');
41
41
  function rowBorder(cells) {
42
- return (sepUnicode ? '│' : '|') + cells.map((c) => ` ${c} `).join(sepUnicode ? '│' : '|') + (sepUnicode ? '│' : '|');
42
+ return ((sepUnicode ? '│' : '|') +
43
+ cells.map((c) => ` ${c} `).join(sepUnicode ? '│' : '|') +
44
+ (sepUnicode ? '│' : '|'));
43
45
  }
44
46
  }
45
47
  //# sourceMappingURL=table.js.map
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwC,MAAM,qBAAqB,CAAC;AAqB/F,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE;QACN,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE;QACN,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAA0B;IAC3C,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,UAAU;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;AACnC,CAAC;AAqBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAuB,EAAE;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,kBAAkB,EAAwB,MAAM,qBAAqB,CAAC;AAqB/F,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE;QACN,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE;QACN,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAA0B;IAC3C,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,UAAU;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;AACnC,CAAC;AAqBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAuB,EAAE;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ColorLevel } from '@mudah-cli/terminal';
2
+ import type { Theme, ThemeColors } from './theme.js';
3
+ /** Semantic `paint()` token — every key of {@link ThemeColors}. */
4
+ export type PaintToken = keyof ThemeColors;
5
+ /**
6
+ * Semantic paint() token reference documented per theme. Descriptions are
7
+ * stable; hex values live on `theme.colors[token]`.
8
+ */
9
+ export declare const PAINT_TOKENS: Record<PaintToken, string>;
10
+ export interface PaintTokenOptions {
11
+ level?: ColorLevel;
12
+ theme?: Theme;
13
+ }
14
+ /**
15
+ * Paint `text` with the theme color for `token`. Same fallback as `paint()`:
16
+ * level 0 is plain text.
17
+ */
18
+ export declare function paintToken(token: PaintToken, text: string, options?: PaintTokenOptions): string;
package/dist/tokens.js ADDED
@@ -0,0 +1,27 @@
1
+ import { paint } from './colors.js';
2
+ import { sleekDark } from './theme.js';
3
+ /**
4
+ * Semantic paint() token reference documented per theme. Descriptions are
5
+ * stable; hex values live on `theme.colors[token]`.
6
+ */
7
+ export const PAINT_TOKENS = {
8
+ accent: 'Primary brand accent (headings, highlights).',
9
+ success: 'Positive status, added diffs, completed tasks.',
10
+ error: 'Failures, deleted diffs, destructive actions.',
11
+ warn: 'Warnings, modified diffs, caution states.',
12
+ info: 'Informational notes, renamed diffs, links.',
13
+ muted: 'De-emphasized secondary text.',
14
+ border: 'Panel and table chrome.',
15
+ highlight: 'Inline code, selected tokens.',
16
+ text: 'Body copy.',
17
+ };
18
+ /**
19
+ * Paint `text` with the theme color for `token`. Same fallback as `paint()`:
20
+ * level 0 is plain text.
21
+ */
22
+ export function paintToken(token, text, options = {}) {
23
+ const theme = options.theme ?? sleekDark;
24
+ const level = options.level ?? 0;
25
+ return paint(theme.colors[token], text, level);
26
+ }
27
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,MAAM,EAAE,8CAA8C;IACtD,OAAO,EAAE,gDAAgD;IACzD,KAAK,EAAE,+CAA+C;IACtD,IAAI,EAAE,2CAA2C;IACjD,IAAI,EAAE,4CAA4C;IAClD,KAAK,EAAE,+BAA+B;IACtC,MAAM,EAAE,yBAAyB;IACjC,SAAS,EAAE,+BAA+B;IAC1C,IAAI,EAAE,YAAY;CACnB,CAAC;AAOF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB,EAAE,IAAY,EAAE,OAAO,GAAsB,EAAE;IACzF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,25 @@
1
1
  {
2
2
  "name": "@mudah-cli/ui",
3
- "version": "0.8.0",
3
+ "version": "0.9.2",
4
4
  "description": "Terminal design system: tokens, themes, output primitives, tables, panels, and markdown rendering.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
+ "author": "Mudah Contributors",
8
+ "homepage": "https://github.com/thesimonharms/mudah#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/thesimonharms/mudah.git",
12
+ "directory": "packages/ui"
13
+ },
14
+ "keywords": [
15
+ "terminal",
16
+ "ui",
17
+ "theme",
18
+ "design-tokens",
19
+ "table",
20
+ "markdown",
21
+ "typescript"
22
+ ],
7
23
  "engines": {
8
24
  "node": ">=26"
9
25
  },
@@ -18,7 +34,7 @@
18
34
  ],
19
35
  "sideEffects": false,
20
36
  "dependencies": {
21
- "@mudah-cli/terminal": "^0.8.0"
37
+ "@mudah-cli/terminal": "^0.9.2"
22
38
  },
23
39
  "publishConfig": {
24
40
  "access": "public"