@mudah-cli/ui 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { bold, dim, italic, paint, paintBg, stripAnsi, underline, visibleLength, } from './colors.js';
2
- export { Output, type OutputOptions } from './output.js';
2
+ export { Output, type OutputEvent, type OutputMode, type OutputOptions } from './output.js';
3
3
  export { renderMarkdown, type RenderMarkdownOptions } from './markdown.js';
4
4
  export { renderPanel, type RenderPanelOptions } from './panel.js';
5
5
  export { renderTable, type RenderTableOptions, type TableColumn } from './table.js';
6
- export { resolveTheme, sleekDark, sleekLight, themes, type Theme, type ThemeColors } from './theme.js';
6
+ export { detectTheme, resolveTheme, sleekDark, sleekLight, themes, type DetectThemeOptions, type Theme, type ThemeColors, } from './theme.js';
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@ export { Output } from './output.js';
3
3
  export { renderMarkdown } from './markdown.js';
4
4
  export { renderPanel } from './panel.js';
5
5
  export { renderTable } from './table.js';
6
- export { resolveTheme, sleekDark, sleekLight, themes } from './theme.js';
6
+ export { detectTheme, resolveTheme, sleekDark, sleekLight, themes, } from './theme.js';
7
7
  //# 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,EAAsB,MAAM,aAAa,CAAC;AACzD,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,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAgC,MAAM,YAAY,CAAC"}
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"}
package/dist/output.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { ColorLevel } from '@mudah-cli/terminal';
2
2
  import type { Theme } from './theme.js';
3
3
  import { type TableColumn } from './table.js';
4
+ export type OutputMode = 'styled' | 'plain' | 'json';
4
5
  export interface OutputOptions {
5
6
  stream?: {
6
7
  write(data: string): unknown;
@@ -13,10 +14,26 @@ export interface OutputOptions {
13
14
  unicode: boolean;
14
15
  /** OSC 9 notifications supported? */
15
16
  osc9?: boolean;
17
+ /** Rendering mode. Default `styled` (colors when level > 0). */
18
+ mode?: OutputMode;
19
+ }
20
+ /** A structured result event (used by JSON mode and the result envelope). */
21
+ export interface OutputEvent {
22
+ readonly kind: 'info' | 'success' | 'error' | 'warn' | 'data';
23
+ readonly message: string;
24
+ readonly data?: unknown;
16
25
  }
17
26
  /**
18
27
  * The styled output surface. Every framework message flows through here so
19
- * theming, color level, unicode, and stream selection stay consistent.
28
+ * theming, color level, unicode, stream selection — and output *mode* — stay
29
+ * consistent.
30
+ *
31
+ * Modes:
32
+ * - `styled`: colors/glyphs when the terminal allows; default.
33
+ * - `plain`: no ANSI at all (still human-readable). Good for logs.
34
+ * - `json`: every primitive becomes one machine-readable JSON line on
35
+ * stdout; use {@link emit} for structured payloads and
36
+ * {@link jsonEnvelope} for a single `{ok, results|error}` document.
20
37
  */
21
38
  export declare class Output {
22
39
  private out;
@@ -25,6 +42,8 @@ export declare class Output {
25
42
  private readonly level;
26
43
  private readonly unicode;
27
44
  private readonly osc9;
45
+ private modeInternal;
46
+ private readonly events;
28
47
  constructor(options: OutputOptions);
29
48
  /** Replace the underlying streams (used by test harnesses). */
30
49
  redirect(stream: {
@@ -32,8 +51,32 @@ export declare class Output {
32
51
  }, errorStream: {
33
52
  write(data: string): unknown;
34
53
  }): void;
54
+ get mode(): OutputMode;
55
+ get isMachineReadable(): boolean;
56
+ /** Switch rendering mode mid-run (e.g. after parsing global flags). */
57
+ setMode(mode: OutputMode): void;
58
+ private levelForcedZero;
59
+ private effectiveLevel;
35
60
  get themeName(): string;
36
61
  get colorLevel(): ColorLevel;
62
+ /** Record + (in json mode) write a structured data payload. */
63
+ emit(kind: OutputEvent['kind'], message: string, data?: unknown): void;
64
+ /** All events recorded this run (for envelopes/tests). */
65
+ takeEvents(): OutputEvent[];
66
+ /**
67
+ * The full-run JSON envelope: `{ ok, results }` or
68
+ * `{ ok: false, error: {...} }`. Extra contextual fields (command, help,
69
+ * version, commands, duration) are merged at the top level.
70
+ */
71
+ jsonEnvelope(options: {
72
+ ok: boolean;
73
+ exitCode: number;
74
+ error?: {
75
+ message: string;
76
+ hint?: string;
77
+ usage?: string;
78
+ };
79
+ } & Record<string, unknown>): string;
37
80
  raw(message: string): void;
38
81
  info(message: string): void;
39
82
  success(message: string): void;
@@ -49,9 +92,12 @@ export declare class Output {
49
92
  table(columns: TableColumn[], rows: string[][]): void;
50
93
  panel(title: string | undefined, body: string[], width?: number): void;
51
94
  markdown(text: string): void;
95
+ /** Record an event and stream it as a JSON line (json mode only). */
96
+ private writeJsonLine;
52
97
  /**
53
98
  * Desktop notification via OSC 9 (Ghostty/WezTerm). When unsupported,
54
- * degrades to a styled status line on stderr.
99
+ * degrades to a styled status line on stderr. In json mode, becomes a
100
+ * data event.
55
101
  */
56
102
  notification(title: string, message: string): void;
57
103
  private mark;
package/dist/output.js CHANGED
@@ -5,7 +5,15 @@ import { renderTable } from './table.js';
5
5
  import { renderMarkdown } from './markdown.js';
6
6
  /**
7
7
  * The styled output surface. Every framework message flows through here so
8
- * theming, color level, unicode, and stream selection stay consistent.
8
+ * theming, color level, unicode, stream selection — and output *mode* — stay
9
+ * consistent.
10
+ *
11
+ * Modes:
12
+ * - `styled`: colors/glyphs when the terminal allows; default.
13
+ * - `plain`: no ANSI at all (still human-readable). Good for logs.
14
+ * - `json`: every primitive becomes one machine-readable JSON line on
15
+ * stdout; use {@link emit} for structured payloads and
16
+ * {@link jsonEnvelope} for a single `{ok, results|error}` document.
9
17
  */
10
18
  export class Output {
11
19
  out;
@@ -14,6 +22,8 @@ export class Output {
14
22
  level;
15
23
  unicode;
16
24
  osc9;
25
+ modeInternal;
26
+ events = [];
17
27
  constructor(options) {
18
28
  this.out = options.stream ?? process.stdout;
19
29
  this.err = options.errorStream ?? process.stderr;
@@ -21,81 +31,198 @@ export class Output {
21
31
  this.level = options.colorLevel;
22
32
  this.unicode = options.unicode;
23
33
  this.osc9 = options.osc9 ?? false;
34
+ this.modeInternal = options.mode ?? 'styled';
24
35
  }
25
36
  /** Replace the underlying streams (used by test harnesses). */
26
37
  redirect(stream, errorStream) {
27
38
  this.out = stream;
28
39
  this.err = errorStream;
29
40
  }
41
+ get mode() {
42
+ return this.modeInternal;
43
+ }
44
+ get isMachineReadable() {
45
+ return this.modeInternal === 'json';
46
+ }
47
+ /** Switch rendering mode mid-run (e.g. after parsing global flags). */
48
+ setMode(mode) {
49
+ this.modeInternal = mode;
50
+ if (mode !== 'styled') {
51
+ // Plain/json ignore color levels entirely.
52
+ this.levelForcedZero = true;
53
+ }
54
+ else {
55
+ this.levelForcedZero = false;
56
+ }
57
+ }
58
+ levelForcedZero = false;
59
+ effectiveLevel() {
60
+ return this.levelForcedZero ? 0 : this.level;
61
+ }
30
62
  get themeName() {
31
63
  return this.theme.name;
32
64
  }
33
65
  get colorLevel() {
34
- return this.level;
66
+ return this.effectiveLevel();
67
+ }
68
+ /** Record + (in json mode) write a structured data payload. */
69
+ emit(kind, message, data) {
70
+ const event = kind === 'data' && data !== undefined ? { kind, message, data } : { kind, message };
71
+ this.events.push(event);
72
+ if (this.isMachineReadable) {
73
+ this.out.write(JSON.stringify(event) + '\n');
74
+ }
75
+ }
76
+ /** All events recorded this run (for envelopes/tests). */
77
+ takeEvents() {
78
+ return this.events.splice(0);
79
+ }
80
+ /**
81
+ * The full-run JSON envelope: `{ ok, results }` or
82
+ * `{ ok: false, error: {...} }`. Extra contextual fields (command, help,
83
+ * version, commands, duration) are merged at the top level.
84
+ */
85
+ jsonEnvelope(options) {
86
+ const { ok, exitCode, error, ...extra } = options;
87
+ if (ok) {
88
+ return JSON.stringify({
89
+ ok: true,
90
+ exitCode,
91
+ ...extra,
92
+ ...(this.events.length > 0 ? { results: this.events } : {}),
93
+ });
94
+ }
95
+ return JSON.stringify({
96
+ ok: false,
97
+ exitCode,
98
+ ...extra,
99
+ error: error ?? { message: 'Unknown error' },
100
+ });
35
101
  }
36
102
  raw(message) {
37
103
  this.out.write(message + '\n');
38
104
  }
39
105
  info(message) {
106
+ if (this.isMachineReadable) {
107
+ this.writeJsonLine('info', message);
108
+ return;
109
+ }
40
110
  this.out.write(this.paint('info', message) + '\n');
41
111
  }
42
112
  success(message) {
113
+ if (this.isMachineReadable) {
114
+ this.writeJsonLine('success', message);
115
+ return;
116
+ }
43
117
  this.out.write(this.mark('success') + ' ' + this.paint('success', message) + '\n');
44
118
  }
45
119
  error(message) {
120
+ if (this.isMachineReadable) {
121
+ this.err.write(JSON.stringify({ kind: 'error', message }) + '\n');
122
+ this.events.push({ kind: 'error', message });
123
+ return;
124
+ }
46
125
  this.err.write(this.mark('error') + ' ' + this.paint('error', message) + '\n');
47
126
  }
48
127
  warn(message) {
128
+ if (this.isMachineReadable) {
129
+ this.err.write(JSON.stringify({ kind: 'warn', message }) + '\n');
130
+ this.events.push({ kind: 'warn', message });
131
+ return;
132
+ }
49
133
  this.err.write(this.mark('warn') + ' ' + this.paint('warn', message) + '\n');
50
134
  }
51
135
  muted(message) {
52
- this.out.write(dim(this.paint('muted', message), this.level) + '\n');
136
+ if (this.isMachineReadable)
137
+ return; // human-only decoration
138
+ this.out.write(dim(this.paint('muted', message), this.effectiveLevel()) + '\n');
53
139
  }
54
140
  /** A muted hint line on the error stream (used alongside error output). */
55
141
  hint(message) {
56
- this.err.write(dim(this.paint('muted', `Hint: ${message}`), this.level) + '\n');
142
+ if (this.isMachineReadable)
143
+ return;
144
+ this.err.write(dim(this.paint('muted', `Hint: ${message}`), this.effectiveLevel()) + '\n');
57
145
  }
58
146
  section(title) {
59
- this.out.write('\n' + underline(bold(this.paint('accent', title), this.level), this.level) + '\n');
147
+ if (this.isMachineReadable)
148
+ return;
149
+ this.out.write('\n' + underline(bold(this.paint('accent', title), this.effectiveLevel()), this.effectiveLevel()) + '\n');
60
150
  }
61
151
  bullet(message) {
152
+ if (this.isMachineReadable)
153
+ return;
62
154
  this.out.write(` ${this.paint('muted', this.unicode ? '•' : '*')} ${message}\n`);
63
155
  }
64
156
  keyValue(label, value) {
65
- const labelPart = bold(this.paint('muted', label), this.level);
157
+ if (this.isMachineReadable) {
158
+ this.emit('data', label, value);
159
+ return;
160
+ }
161
+ const labelPart = bold(this.paint('muted', label), this.effectiveLevel());
66
162
  this.out.write(` ${labelPart.padEnd(24)} ${value}\n`);
67
163
  }
68
164
  line() {
165
+ if (this.isMachineReadable)
166
+ return;
69
167
  const ch = this.unicode ? '─' : '-';
70
168
  this.out.write(this.paint('border', ch.repeat(60)) + '\n');
71
169
  }
72
170
  table(columns, rows) {
73
- this.out.write(renderTable(columns, rows, { level: this.level, unicode: this.unicode }) + '\n');
171
+ if (this.isMachineReadable) {
172
+ // Render rows as data events keyed by header.
173
+ const headers = columns.map((c) => c.header);
174
+ for (const row of rows) {
175
+ const record = {};
176
+ headers.forEach((header, i) => {
177
+ record[header] = row[i] ?? '';
178
+ });
179
+ this.emit('data', 'table-row', record);
180
+ }
181
+ return;
182
+ }
183
+ this.out.write(renderTable(columns, rows, { level: this.effectiveLevel(), unicode: this.unicode }) + '\n');
74
184
  }
75
185
  panel(title, body, width) {
76
- this.out.write(renderPanel(title, body, { level: this.level, unicode: this.unicode, width }) + '\n');
186
+ if (this.isMachineReadable)
187
+ return;
188
+ this.out.write(renderPanel(title, body, { level: this.effectiveLevel(), unicode: this.unicode, width }) + '\n');
77
189
  }
78
190
  markdown(text) {
79
- this.out.write(renderMarkdown(text, { level: this.level, theme: this.theme }) + '\n');
191
+ if (this.isMachineReadable) {
192
+ this.emit('data', 'markdown', text);
193
+ return;
194
+ }
195
+ this.out.write(renderMarkdown(text, { level: this.effectiveLevel(), theme: this.theme }) + '\n');
196
+ }
197
+ /** Record an event and stream it as a JSON line (json mode only). */
198
+ writeJsonLine(kind, message, data) {
199
+ const event = data !== undefined ? { kind, message, data } : { kind, message };
200
+ this.events.push(event);
201
+ this.out.write(JSON.stringify(event) + '\n');
80
202
  }
81
203
  /**
82
204
  * Desktop notification via OSC 9 (Ghostty/WezTerm). When unsupported,
83
- * degrades to a styled status line on stderr.
205
+ * degrades to a styled status line on stderr. In json mode, becomes a
206
+ * data event.
84
207
  */
85
208
  notification(title, message) {
209
+ if (this.isMachineReadable) {
210
+ this.emit('data', 'notification', { title, message });
211
+ return;
212
+ }
86
213
  if (this.osc9) {
87
214
  this.err.write(`\x1b]9;${title}\x1f${message}\x07`);
88
215
  this.err.write(`\x1b]777;notify;${title};${message}\x07`);
89
216
  return;
90
217
  }
91
- this.err.write(this.paint('highlight', '●') + ' ' + bold(title, this.level) + ' ' + dim(message, this.level) + '\n');
218
+ this.err.write(this.paint('highlight', '●') + ' ' + bold(title, this.effectiveLevel()) + ' ' + dim(message, this.effectiveLevel()) + '\n');
92
219
  }
93
220
  mark(kind) {
94
221
  const glyph = kind === 'success' ? (this.unicode ? '✓' : 'v') : kind === 'error' ? (this.unicode ? '✗' : 'x') : this.unicode ? '⚠' : '!';
95
222
  return this.paint(kind, glyph);
96
223
  }
97
224
  paint(key, text) {
98
- return paint(this.theme.colors[key], text, this.level);
225
+ return paint(this.theme.colors[key], text, this.effectiveLevel());
99
226
  }
100
227
  /** Visible width of the current terminal column, for wrapping decisions. */
101
228
  padTo(text, width) {
@@ -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/theme.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type OscWriter, type ThemeQueryInput } from '@mudah-cli/terminal';
1
2
  export interface ThemeColors {
2
3
  /** Primary brand accent (headings, highlights). */
3
4
  accent: string;
@@ -20,6 +21,32 @@ export declare const sleekLight: Theme;
20
21
  export declare const themes: Record<string, Theme>;
21
22
  /**
22
23
  * Resolve a theme by name. `'auto'` falls back to dark mode (the safe
23
- * default for CLI tools); a runtime OSC 10 query can refine this in v0.2.
24
+ * default for CLI tools) — use `detectTheme()` when you want the terminal's
25
+ * real colors to decide.
24
26
  */
25
27
  export declare function resolveTheme(name: string | undefined): Theme;
28
+ export interface DetectThemeOptions {
29
+ /**
30
+ * Theme name. Only `'auto'` triggers a terminal query — an explicit name
31
+ * (and `undefined`) resolve synchronously, keeping cold start untouched.
32
+ */
33
+ name?: string;
34
+ /**
35
+ * Skip the query entirely (non-interactive runs, tests). Defaults to
36
+ * `process.stdin.isTTY`.
37
+ */
38
+ allowQuery?: boolean;
39
+ /** How long to wait for the terminal's answer. */
40
+ timeoutMs?: number;
41
+ /** Stream the query is written to (default `process.stdout`). */
42
+ stdout?: OscWriter;
43
+ /** Stream the answer is read from (default `process.stdin`). */
44
+ stdin?: ThemeQueryInput;
45
+ }
46
+ /**
47
+ * Resolve the theme, asking the terminal for its colors when the manifest
48
+ * asks for `'auto'`. Every other name resolves synchronously, and any run
49
+ * that can't answer (no TTY, timeout, silent terminal) falls back to dark.
50
+ * Never throws.
51
+ */
52
+ export declare function detectTheme(options?: DetectThemeOptions): Promise<Theme>;
package/dist/theme.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { queryTerminalTheme } from '@mudah-cli/terminal';
1
2
  export const sleekDark = {
2
3
  name: 'sleek-dark',
3
4
  mode: 'dark',
@@ -35,11 +36,39 @@ export const themes = {
35
36
  };
36
37
  /**
37
38
  * Resolve a theme by name. `'auto'` falls back to dark mode (the safe
38
- * default for CLI tools); a runtime OSC 10 query can refine this in v0.2.
39
+ * default for CLI tools) — use `detectTheme()` when you want the terminal's
40
+ * real colors to decide.
39
41
  */
40
42
  export function resolveTheme(name) {
41
43
  if (name === undefined || name === 'auto')
42
44
  return sleekDark;
43
45
  return themes[name] ?? sleekDark;
44
46
  }
47
+ /**
48
+ * Resolve the theme, asking the terminal for its colors when the manifest
49
+ * asks for `'auto'`. Every other name resolves synchronously, and any run
50
+ * that can't answer (no TTY, timeout, silent terminal) falls back to dark.
51
+ * Never throws.
52
+ */
53
+ export async function detectTheme(options = {}) {
54
+ const name = options.name;
55
+ if (name !== 'auto')
56
+ return resolveTheme(name);
57
+ const allowQuery = options.allowQuery ?? process.stdin.isTTY === true;
58
+ if (!allowQuery)
59
+ return sleekDark;
60
+ try {
61
+ const result = await queryTerminalTheme({
62
+ timeoutMs: options.timeoutMs,
63
+ stdout: options.stdout,
64
+ stdin: options.stdin,
65
+ });
66
+ if (!result.ok)
67
+ return sleekDark;
68
+ return result.theme === 'light' ? sleekLight : sleekDark;
69
+ }
70
+ catch {
71
+ return sleekDark;
72
+ }
73
+ }
45
74
  //# sourceMappingURL=theme.js.map
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAmBA,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;;;GAGG;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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mudah-cli/ui",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Terminal design system: tokens, themes, output primitives, tables, panels, and markdown rendering.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "sideEffects": false,
20
20
  "dependencies": {
21
- "@mudah-cli/terminal": "^0.1.0"
21
+ "@mudah-cli/terminal": "^0.3.0"
22
22
  },
23
23
  "publishConfig": {
24
24
  "access": "public"