@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 +21 -0
- package/README.md +39 -0
- package/dist/charts.d.ts +44 -0
- package/dist/charts.js +86 -0
- package/dist/charts.js.map +1 -0
- package/dist/colors.d.ts +30 -1
- package/dist/colors.js +195 -5
- package/dist/colors.js.map +1 -1
- package/dist/glyphs.d.ts +27 -0
- package/dist/glyphs.js +36 -0
- package/dist/glyphs.js.map +1 -0
- package/dist/index.d.ts +8 -5
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +5 -2
- package/dist/markdown.js +90 -5
- package/dist/markdown.js.map +1 -1
- package/dist/output.d.ts +3 -1
- package/dist/output.js +33 -19
- package/dist/output.js.map +1 -1
- package/dist/panel.js.map +1 -1
- package/dist/table.js +5 -3
- package/dist/table.js.map +1 -1
- package/dist/theme.js.map +1 -1
- package/dist/tokens.d.ts +18 -0
- package/dist/tokens.js +27 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +18 -2
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)
|
package/dist/charts.d.ts
ADDED
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
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\[[
|
|
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
|
-
|
|
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
|
|
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
|
}
|
package/dist/colors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}
|
package/dist/glyphs.d.ts
ADDED
|
@@ -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 {
|
|
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 {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
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 {
|
|
2
|
-
export {
|
|
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,
|
|
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"}
|
package/dist/markdown.d.ts
CHANGED
|
@@ -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,
|
|
10
|
-
*
|
|
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)
|
|
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,
|
|
18
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
package/dist/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
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)
|
|
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
|
|
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)
|
|
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')
|
|
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 })
|
|
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')
|
|
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 })
|
|
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')
|
|
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())
|
|
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())
|
|
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(
|
|
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))
|
|
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 })
|
|
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 })
|
|
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 })
|
|
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)
|
|
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', '●')
|
|
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'
|
|
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) {
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
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":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAUvC;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,
|
|
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(
|
|
29
|
+
lines.push(`├${widths.map((w) => '─'.repeat(w + 2)).join('┼')}┤`);
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
lines.push(
|
|
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 (
|
|
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":"AACA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgBvC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,KAAuB;IAC/D,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACvG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAsB,EAAE,IAAgB,EAAE,OAA2B;IAC/F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACpC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAC/E,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAEnC,MAAM,KAAK,GAAG,CAAC,MAAgB,EAAE,EAAE,CACjC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtF,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,
|
|
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,
|
|
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"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -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.
|
|
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.
|
|
37
|
+
"@mudah-cli/terminal": "^0.9.2"
|
|
22
38
|
},
|
|
23
39
|
"publishConfig": {
|
|
24
40
|
"access": "public"
|