@task-mcp/shared 1.0.8 → 1.0.10

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.
@@ -0,0 +1,534 @@
1
+ /**
2
+ * Terminal UI utilities for task-mcp
3
+ * Zero-dependency ANSI colors, box drawing, and layout helpers
4
+ * Supports CJK (Korean, Chinese, Japanese) character width calculation
5
+ */
6
+ // =============================================================================
7
+ // ANSI Escape Codes
8
+ // =============================================================================
9
+ const ESC = "\x1b[";
10
+ const RESET = `${ESC}0m`;
11
+ // Foreground color codes
12
+ const FG = {
13
+ black: 30,
14
+ red: 31,
15
+ green: 32,
16
+ yellow: 33,
17
+ blue: 34,
18
+ magenta: 35,
19
+ cyan: 36,
20
+ white: 37,
21
+ gray: 90,
22
+ brightRed: 91,
23
+ brightGreen: 92,
24
+ brightYellow: 93,
25
+ brightBlue: 94,
26
+ brightMagenta: 95,
27
+ brightCyan: 96,
28
+ brightWhite: 97,
29
+ };
30
+ // Style codes
31
+ const STYLE = {
32
+ bold: 1,
33
+ dim: 2,
34
+ italic: 3,
35
+ underline: 4,
36
+ inverse: 7,
37
+ strikethrough: 9,
38
+ };
39
+ /**
40
+ * Apply color to text
41
+ */
42
+ export function color(text, colorName) {
43
+ return `${ESC}${FG[colorName]}m${text}${RESET}`;
44
+ }
45
+ /**
46
+ * Apply style to text
47
+ */
48
+ export function style(text, styleName) {
49
+ return `${ESC}${STYLE[styleName]}m${text}${RESET}`;
50
+ }
51
+ /**
52
+ * Combine color and style
53
+ */
54
+ export function styled(text, colorName, styleName) {
55
+ if (styleName) {
56
+ return `${ESC}${STYLE[styleName]};${FG[colorName]}m${text}${RESET}`;
57
+ }
58
+ return color(text, colorName);
59
+ }
60
+ // =============================================================================
61
+ // Color Helper Functions
62
+ // =============================================================================
63
+ export const c = {
64
+ // Basic styles
65
+ reset: (s) => `${s}${RESET}`,
66
+ bold: (s) => style(s, "bold"),
67
+ dim: (s) => style(s, "dim"),
68
+ italic: (s) => style(s, "italic"),
69
+ underline: (s) => style(s, "underline"),
70
+ // Colors
71
+ black: (s) => color(s, "black"),
72
+ red: (s) => color(s, "red"),
73
+ green: (s) => color(s, "green"),
74
+ yellow: (s) => color(s, "yellow"),
75
+ blue: (s) => color(s, "blue"),
76
+ magenta: (s) => color(s, "magenta"),
77
+ cyan: (s) => color(s, "cyan"),
78
+ white: (s) => color(s, "white"),
79
+ gray: (s) => color(s, "gray"),
80
+ // Bright colors
81
+ brightRed: (s) => color(s, "brightRed"),
82
+ brightGreen: (s) => color(s, "brightGreen"),
83
+ brightYellow: (s) => color(s, "brightYellow"),
84
+ brightBlue: (s) => color(s, "brightBlue"),
85
+ brightMagenta: (s) => color(s, "brightMagenta"),
86
+ brightCyan: (s) => color(s, "brightCyan"),
87
+ brightWhite: (s) => color(s, "brightWhite"),
88
+ // Semantic colors
89
+ success: (s) => color(s, "green"),
90
+ error: (s) => color(s, "red"),
91
+ warning: (s) => color(s, "yellow"),
92
+ info: (s) => color(s, "cyan"),
93
+ muted: (s) => color(s, "gray"),
94
+ highlight: (s) => color(s, "brightCyan"),
95
+ label: (s) => styled(s, "cyan", "bold"),
96
+ title: (s) => styled(s, "brightWhite", "bold"),
97
+ value: (s) => color(s, "white"),
98
+ };
99
+ // =============================================================================
100
+ // Box Drawing Characters
101
+ // =============================================================================
102
+ export const BOX = {
103
+ // Single line
104
+ topLeft: "┌",
105
+ topRight: "┐",
106
+ bottomLeft: "└",
107
+ bottomRight: "┘",
108
+ horizontal: "─",
109
+ vertical: "│",
110
+ teeRight: "├",
111
+ teeLeft: "┤",
112
+ teeDown: "┬",
113
+ teeUp: "┴",
114
+ cross: "┼",
115
+ // Double line
116
+ dblTopLeft: "╔",
117
+ dblTopRight: "╗",
118
+ dblBottomLeft: "╚",
119
+ dblBottomRight: "╝",
120
+ dblHorizontal: "═",
121
+ dblVertical: "║",
122
+ // Rounded corners
123
+ rTopLeft: "╭",
124
+ rTopRight: "╮",
125
+ rBottomLeft: "╰",
126
+ rBottomRight: "╯",
127
+ };
128
+ // =============================================================================
129
+ // String Utilities
130
+ // =============================================================================
131
+ /**
132
+ * Strip all ANSI escape codes from string
133
+ */
134
+ export function stripAnsi(str) {
135
+ return str.replace(/\x1b\[[0-9;]*m/g, "");
136
+ }
137
+ /**
138
+ * Check if a character is full-width (CJK, Korean, emoji, etc.)
139
+ * Full-width characters take 2 columns in terminal
140
+ */
141
+ function isFullWidth(char) {
142
+ const code = char.codePointAt(0);
143
+ if (code === undefined)
144
+ return false;
145
+ return ((code >= 0x1100 && code <= 0x115f) || // Hangul Jamo
146
+ (code >= 0x2e80 && code <= 0x9fff) || // CJK
147
+ (code >= 0xac00 && code <= 0xd7af) || // Hangul Syllables
148
+ (code >= 0xf900 && code <= 0xfaff) || // CJK Compatibility
149
+ (code >= 0xfe10 && code <= 0xfe1f) || // Vertical forms
150
+ (code >= 0xfe30 && code <= 0xfe6f) || // CJK Compatibility Forms
151
+ (code >= 0xff00 && code <= 0xff60) || // Fullwidth Forms
152
+ (code >= 0xffe0 && code <= 0xffe6) || // Fullwidth symbols
153
+ (code >= 0x1f300 && code <= 0x1f9ff) || // Emoji
154
+ (code >= 0x2600 && code <= 0x26ff) || // Misc Symbols
155
+ (code >= 0x2700 && code <= 0x27bf) || // Dingbats
156
+ (code >= 0x20000 && code <= 0x2ffff) // CJK Extension B+
157
+ );
158
+ }
159
+ /**
160
+ * Get display width of string (excluding ANSI codes, CJK = 2 columns)
161
+ */
162
+ export function displayWidth(str) {
163
+ const stripped = stripAnsi(str);
164
+ let width = 0;
165
+ for (const char of stripped) {
166
+ width += isFullWidth(char) ? 2 : 1;
167
+ }
168
+ return width;
169
+ }
170
+ // Alias for compatibility
171
+ export const visibleLength = displayWidth;
172
+ /**
173
+ * Pad string to width (accounting for display width)
174
+ */
175
+ export function pad(str, width, align = "left") {
176
+ const len = displayWidth(str);
177
+ const diff = width - len;
178
+ if (diff <= 0)
179
+ return str;
180
+ switch (align) {
181
+ case "right":
182
+ return " ".repeat(diff) + str;
183
+ case "center": {
184
+ const left = Math.floor(diff / 2);
185
+ return " ".repeat(left) + str + " ".repeat(diff - left);
186
+ }
187
+ default:
188
+ return str + " ".repeat(diff);
189
+ }
190
+ }
191
+ // Aliases for compatibility
192
+ export const padEnd = (str, width) => pad(str, width, "left");
193
+ export const padStart = (str, width) => pad(str, width, "right");
194
+ export const center = (str, width) => pad(str, width, "center");
195
+ /**
196
+ * Truncate string to max display width
197
+ */
198
+ export function truncateStr(str, maxLen, suffix = "...") {
199
+ const stripped = stripAnsi(str);
200
+ if (displayWidth(stripped) <= maxLen)
201
+ return str;
202
+ const suffixWidth = displayWidth(suffix);
203
+ let width = 0;
204
+ let result = "";
205
+ for (const char of stripped) {
206
+ const charWidth = isFullWidth(char) ? 2 : 1;
207
+ if (width + charWidth > maxLen - suffixWidth)
208
+ break;
209
+ result += char;
210
+ width += charWidth;
211
+ }
212
+ return result + suffix;
213
+ }
214
+ /**
215
+ * Create a horizontal line
216
+ */
217
+ export function hline(width, char = BOX.horizontal) {
218
+ return char.repeat(width);
219
+ }
220
+ export function progressBar(current, total, options = {}) {
221
+ const { width = 20, filled = "█", empty = "░", showPercent = true, filledColor = "green", emptyColor = "gray", } = options;
222
+ const percent = total > 0 ? Math.round((current / total) * 100) : 0;
223
+ const filledCount = Math.round((percent / 100) * width);
224
+ const emptyCount = width - filledCount;
225
+ const bar = color(filled.repeat(filledCount), filledColor) + color(empty.repeat(emptyCount), emptyColor);
226
+ return showPercent ? `${bar} ${percent}%` : bar;
227
+ }
228
+ /**
229
+ * Create a box around content (string input, string output)
230
+ */
231
+ export function box(content, options = {}) {
232
+ const { padding = 1, borderColor = "cyan", title, rounded = true } = options;
233
+ const lines = content.split("\n");
234
+ const maxLen = Math.max(...lines.map(l => displayWidth(stripAnsi(l))), title ? title.length + 2 : 0);
235
+ const innerWidth = options.width ? options.width - 2 - padding * 2 : maxLen + padding * 2;
236
+ const tl = rounded ? BOX.rTopLeft : BOX.topLeft;
237
+ const tr = rounded ? BOX.rTopRight : BOX.topRight;
238
+ const bl = rounded ? BOX.rBottomLeft : BOX.bottomLeft;
239
+ const br = rounded ? BOX.rBottomRight : BOX.bottomRight;
240
+ const h = BOX.horizontal;
241
+ const v = BOX.vertical;
242
+ const applyBorder = (s) => color(s, borderColor);
243
+ // Top border with optional title
244
+ let top;
245
+ if (title) {
246
+ const titlePart = ` ${title} `;
247
+ const remaining = innerWidth - titlePart.length;
248
+ const leftPad = Math.floor(remaining / 2);
249
+ const rightPad = remaining - leftPad;
250
+ top = applyBorder(tl + h.repeat(leftPad)) + c.bold(titlePart) + applyBorder(h.repeat(rightPad) + tr);
251
+ }
252
+ else {
253
+ top = applyBorder(tl + h.repeat(innerWidth) + tr);
254
+ }
255
+ // Padding lines
256
+ const padLine = applyBorder(v) + " ".repeat(innerWidth) + applyBorder(v);
257
+ const paddingLines = Array(padding).fill(padLine);
258
+ // Content lines
259
+ const contentLines = lines.map(line => {
260
+ const lineWidth = displayWidth(stripAnsi(line));
261
+ const padRight = innerWidth - lineWidth - padding;
262
+ return applyBorder(v) + " ".repeat(padding) + line + " ".repeat(Math.max(0, padRight)) + applyBorder(v);
263
+ });
264
+ // Bottom border
265
+ const bottom = applyBorder(bl + h.repeat(innerWidth) + br);
266
+ return [top, ...paddingLines, ...contentLines, ...paddingLines, bottom].join("\n");
267
+ }
268
+ /**
269
+ * Draw a box around content (array input, array output)
270
+ * For MCP server compatibility
271
+ */
272
+ export function drawBox(lines, options = {}) {
273
+ const { title, padding = 1, borderColor = "gray" } = options;
274
+ let maxContentWidth = 0;
275
+ for (const line of lines) {
276
+ maxContentWidth = Math.max(maxContentWidth, displayWidth(line));
277
+ }
278
+ const innerWidth = options.width ? options.width - 2 - padding * 2 : maxContentWidth;
279
+ const boxWidth = innerWidth + 2 + padding * 2;
280
+ const result = [];
281
+ const padStr = " ".repeat(padding);
282
+ const applyBorder = (s) => color(s, borderColor);
283
+ // Top border with optional title
284
+ if (title) {
285
+ const titleStr = ` ${title} `;
286
+ const remainingWidth = boxWidth - 2 - displayWidth(titleStr);
287
+ const leftBorder = Math.floor(remainingWidth / 2);
288
+ const rightBorder = remainingWidth - leftBorder;
289
+ result.push(applyBorder(BOX.topLeft) +
290
+ applyBorder(BOX.horizontal.repeat(leftBorder)) +
291
+ c.label(titleStr) +
292
+ applyBorder(BOX.horizontal.repeat(rightBorder)) +
293
+ applyBorder(BOX.topRight));
294
+ }
295
+ else {
296
+ result.push(applyBorder(BOX.topLeft) +
297
+ applyBorder(BOX.horizontal.repeat(boxWidth - 2)) +
298
+ applyBorder(BOX.topRight));
299
+ }
300
+ // Content lines
301
+ for (const line of lines) {
302
+ result.push(applyBorder(BOX.vertical) +
303
+ padStr +
304
+ padEnd(line, innerWidth) +
305
+ padStr +
306
+ applyBorder(BOX.vertical));
307
+ }
308
+ // Bottom border
309
+ result.push(applyBorder(BOX.bottomLeft) +
310
+ applyBorder(BOX.horizontal.repeat(boxWidth - 2)) +
311
+ applyBorder(BOX.bottomRight));
312
+ return result;
313
+ }
314
+ // =============================================================================
315
+ // Side-by-Side Layout
316
+ // =============================================================================
317
+ /**
318
+ * Place multiple boxes side by side (string input, string output)
319
+ */
320
+ export function sideBySide(boxes, gap = 2) {
321
+ const boxLines = boxes.map(b => b.split("\n"));
322
+ const maxHeight = Math.max(...boxLines.map(lines => lines.length));
323
+ const boxWidths = boxLines.map(lines => Math.max(...lines.map(l => displayWidth(l))));
324
+ // Pad each box to max height
325
+ const paddedBoxLines = boxLines.map((lines, i) => {
326
+ const width = boxWidths[i] ?? 0;
327
+ while (lines.length < maxHeight) {
328
+ lines.push(" ".repeat(width));
329
+ }
330
+ return lines.map(line => {
331
+ const lineWidth = displayWidth(line);
332
+ if (lineWidth < width) {
333
+ return line + " ".repeat(width - lineWidth);
334
+ }
335
+ return line;
336
+ });
337
+ });
338
+ // Combine lines horizontally
339
+ const result = [];
340
+ const gapStr = " ".repeat(gap);
341
+ for (let i = 0; i < maxHeight; i++) {
342
+ const lineParts = paddedBoxLines.map(lines => lines[i] ?? "");
343
+ result.push(lineParts.join(gapStr));
344
+ }
345
+ return result.join("\n");
346
+ }
347
+ /**
348
+ * Merge two boxes side by side (array input, array output)
349
+ * For MCP server compatibility
350
+ */
351
+ export function sideBySideArrays(leftLines, rightLines, gap = 2) {
352
+ const leftWidth = leftLines.length > 0
353
+ ? Math.max(...leftLines.map(displayWidth))
354
+ : 0;
355
+ const maxLines = Math.max(leftLines.length, rightLines.length);
356
+ const result = [];
357
+ const gapStr = " ".repeat(gap);
358
+ const emptyLeft = " ".repeat(leftWidth);
359
+ for (let i = 0; i < maxLines; i++) {
360
+ const left = leftLines[i];
361
+ const right = rightLines[i] ?? "";
362
+ if (left !== undefined) {
363
+ result.push(padEnd(left, leftWidth) + gapStr + right);
364
+ }
365
+ else {
366
+ result.push(emptyLeft + gapStr + right);
367
+ }
368
+ }
369
+ return result;
370
+ }
371
+ export function table(data, columns, options = {}) {
372
+ const { headerColor = "cyan", borderColor = "gray" } = options;
373
+ // Calculate column widths
374
+ const widths = columns.map(col => {
375
+ const headerWidth = displayWidth(col.header);
376
+ const maxDataWidth = Math.max(...data.map(row => {
377
+ const val = col.format ? col.format(row[col.key], row) : String(row[col.key] ?? "");
378
+ return displayWidth(val);
379
+ }), 0);
380
+ return col.width ?? Math.max(headerWidth, maxDataWidth);
381
+ });
382
+ const border = color(BOX.vertical, borderColor);
383
+ const hBorder = color(BOX.horizontal, borderColor);
384
+ // Header row
385
+ const headerRow = columns
386
+ .map((col, i) => color(pad(col.header, widths[i] ?? 0, col.align), headerColor))
387
+ .join(` ${border} `);
388
+ // Separator
389
+ const separator = widths.map(w => hBorder.repeat(w)).join(color(`─${BOX.cross}─`, borderColor));
390
+ // Data rows
391
+ const dataRows = data.map(row => columns
392
+ .map((col, i) => {
393
+ const w = widths[i] ?? 0;
394
+ const val = col.format ? col.format(row[col.key], row) : String(row[col.key] ?? "");
395
+ return pad(truncateStr(val, w), w, col.align);
396
+ })
397
+ .join(` ${border} `));
398
+ return [headerRow, separator, ...dataRows].join("\n");
399
+ }
400
+ /**
401
+ * Render table with full borders (array output)
402
+ * For MCP server compatibility
403
+ */
404
+ export function renderTable(columns, rows) {
405
+ const colWidths = columns.map((col) => {
406
+ const headerWidth = col.header.length;
407
+ const maxValueWidth = Math.max(...rows.map((row) => String(row[col.key] ?? "").length));
408
+ return col.width ?? Math.max(headerWidth, maxValueWidth);
409
+ });
410
+ const result = [];
411
+ // Header row
412
+ const headerCells = columns.map((col, i) => c.label(center(col.header, colWidths[i] ?? 0)));
413
+ result.push(c.muted(BOX.vertical) + headerCells.join(c.muted(BOX.vertical)) + c.muted(BOX.vertical));
414
+ // Separator
415
+ const separator = columns.map((_, i) => BOX.horizontal.repeat(colWidths[i] ?? 0));
416
+ result.push(c.muted(BOX.teeRight) +
417
+ c.muted(separator.join(BOX.cross)) +
418
+ c.muted(BOX.teeLeft));
419
+ // Data rows
420
+ for (const row of rows) {
421
+ const cells = columns.map((col, i) => {
422
+ const w = colWidths[i] ?? 0;
423
+ const value = String(row[col.key] ?? "");
424
+ const colorFn = col.format;
425
+ const colored = colorFn ? colorFn(value, row) : value;
426
+ switch (col.align) {
427
+ case "center":
428
+ return center(String(colored), w);
429
+ case "right":
430
+ return padStart(String(colored), w);
431
+ default:
432
+ return padEnd(String(colored), w);
433
+ }
434
+ });
435
+ result.push(c.muted(BOX.vertical) + cells.join(c.muted(BOX.vertical)) + c.muted(BOX.vertical));
436
+ }
437
+ // Top border
438
+ const topBorder = c.muted(BOX.topLeft) +
439
+ c.muted(colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeDown)) +
440
+ c.muted(BOX.topRight);
441
+ // Bottom border
442
+ const bottomBorder = c.muted(BOX.bottomLeft) +
443
+ c.muted(colWidths.map((w) => BOX.horizontal.repeat(w)).join(BOX.teeUp)) +
444
+ c.muted(BOX.bottomRight);
445
+ return [topBorder, ...result, bottomBorder];
446
+ }
447
+ // =============================================================================
448
+ // Status & Priority Formatters
449
+ // =============================================================================
450
+ export const statusColors = {
451
+ pending: c.yellow,
452
+ in_progress: c.cyan,
453
+ completed: c.green,
454
+ blocked: c.red,
455
+ deferred: c.muted,
456
+ cancelled: c.muted,
457
+ };
458
+ export const statusIcons = {
459
+ pending: "○",
460
+ in_progress: "◐",
461
+ completed: "●",
462
+ blocked: "⊘",
463
+ deferred: "◇",
464
+ cancelled: "✕",
465
+ };
466
+ export const icons = {
467
+ // Status
468
+ pending: c.yellow("○"),
469
+ in_progress: c.blue("◐"),
470
+ completed: c.green("✓"),
471
+ blocked: c.red("✗"),
472
+ cancelled: c.gray("⊘"),
473
+ // Priority
474
+ critical: c.red("!!!"),
475
+ high: c.yellow("!!"),
476
+ medium: c.blue("!"),
477
+ low: c.gray("·"),
478
+ // Misc
479
+ arrow: c.cyan("→"),
480
+ bullet: c.gray("•"),
481
+ check: c.green("✓"),
482
+ cross: c.red("✗"),
483
+ warning: c.yellow("⚠"),
484
+ info: c.cyan("ℹ"),
485
+ };
486
+ export function formatStatus(status) {
487
+ const icon = statusIcons[status] ?? "?";
488
+ const colorFn = statusColors[status] ?? c.white;
489
+ return colorFn(`${icon} ${status}`);
490
+ }
491
+ export const priorityColors = {
492
+ critical: c.brightRed,
493
+ high: c.yellow,
494
+ medium: c.cyan,
495
+ low: c.green,
496
+ };
497
+ export function formatPriority(priority) {
498
+ const colorFn = priorityColors[priority] ?? c.white;
499
+ return colorFn(priority);
500
+ }
501
+ export function formatDependencies(deps) {
502
+ if (deps.length === 0)
503
+ return c.muted("None");
504
+ return c.magenta(deps.join(", "));
505
+ }
506
+ // =============================================================================
507
+ // Banner
508
+ // =============================================================================
509
+ /**
510
+ * ASCII art text banner
511
+ */
512
+ export function banner(text) {
513
+ const letters = {
514
+ T: ["████", " ██ ", " ██ ", " ██ ", " ██ "],
515
+ A: [" ██ ", "████", "██ █", "████", "██ █"],
516
+ S: ["████", "██ ", "████", " ██", "████"],
517
+ K: ["██ █", "███ ", "██ ", "███ ", "██ █"],
518
+ M: ["█ █", "██ ██", "█ █ █", "█ █", "█ █"],
519
+ C: ["████", "██ ", "██ ", "██ ", "████"],
520
+ P: ["████", "██ █", "████", "██ ", "██ "],
521
+ " ": [" ", " ", " ", " ", " "],
522
+ };
523
+ const chars = text.toUpperCase().split("");
524
+ const lines = ["", "", "", "", ""];
525
+ const defaultLetter = [" ", " ", " ", " ", " "];
526
+ for (const char of chars) {
527
+ const letterLines = letters[char] ?? defaultLetter;
528
+ for (let i = 0; i < 5; i++) {
529
+ lines[i] += (letterLines[i] ?? "") + " ";
530
+ }
531
+ }
532
+ return lines.map(l => c.cyan(l)).join("\n");
533
+ }
534
+ //# sourceMappingURL=terminal-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-ui.js","sourceRoot":"","sources":["../../src/utils/terminal-ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@task-mcp/shared",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Shared utilities for task-mcp: types, algorithms, and natural language parsing",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -45,3 +45,47 @@ export {
45
45
  truncate,
46
46
  summarizeList,
47
47
  } from "./projection.js";
48
+
49
+ // Terminal UI utilities
50
+ export {
51
+ // Colors and styles
52
+ color,
53
+ style,
54
+ styled,
55
+ c,
56
+ // Box drawing
57
+ BOX,
58
+ box,
59
+ drawBox,
60
+ hline,
61
+ // String utilities
62
+ stripAnsi,
63
+ displayWidth,
64
+ visibleLength,
65
+ pad,
66
+ padEnd,
67
+ padStart,
68
+ center,
69
+ truncateStr,
70
+ // Progress bar
71
+ progressBar,
72
+ type ProgressBarOptions,
73
+ // Layout
74
+ sideBySide,
75
+ sideBySideArrays,
76
+ type BoxOptions,
77
+ // Tables
78
+ table,
79
+ renderTable,
80
+ type TableColumn,
81
+ // Formatters
82
+ statusColors,
83
+ statusIcons,
84
+ icons,
85
+ formatStatus,
86
+ priorityColors,
87
+ formatPriority,
88
+ formatDependencies,
89
+ // Banner
90
+ banner,
91
+ } from "./terminal-ui.js";