@elaraai/e3-ui-cli 1.0.71 → 1.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +46 -21
  2. package/dist/app/assets/{engine-BKZbmXkC-hslJZfFw.js → engine-Bm-cIDd_-DwUdGcTZ.js} +1 -1
  3. package/dist/app/assets/{index-8USNHP31.js → index-mj-YVVN1.js} +92 -92
  4. package/dist/app/index.html +1 -1
  5. package/dist/cli.js +36 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/tui.d.ts +84 -0
  8. package/dist/commands/tui.d.ts.map +1 -0
  9. package/dist/commands/tui.js +86 -0
  10. package/dist/commands/tui.js.map +1 -0
  11. package/dist/tui/api.d.ts +108 -0
  12. package/dist/tui/api.d.ts.map +1 -0
  13. package/dist/tui/api.js +130 -0
  14. package/dist/tui/api.js.map +1 -0
  15. package/dist/tui/app.d.ts +23 -0
  16. package/dist/tui/app.d.ts.map +1 -0
  17. package/dist/tui/app.js +241 -0
  18. package/dist/tui/app.js.map +1 -0
  19. package/dist/tui/controller.d.ts +116 -0
  20. package/dist/tui/controller.d.ts.map +1 -0
  21. package/dist/tui/controller.js +620 -0
  22. package/dist/tui/controller.js.map +1 -0
  23. package/dist/tui/data/dataflow.d.ts +68 -0
  24. package/dist/tui/data/dataflow.d.ts.map +1 -0
  25. package/dist/tui/data/dataflow.js +137 -0
  26. package/dist/tui/data/dataflow.js.map +1 -0
  27. package/dist/tui/data/dataset.d.ts +80 -0
  28. package/dist/tui/data/dataset.d.ts.map +1 -0
  29. package/dist/tui/data/dataset.js +297 -0
  30. package/dist/tui/data/dataset.js.map +1 -0
  31. package/dist/tui/data/edit-buffer.d.ts +74 -0
  32. package/dist/tui/data/edit-buffer.d.ts.map +1 -0
  33. package/dist/tui/data/edit-buffer.js +120 -0
  34. package/dist/tui/data/edit-buffer.js.map +1 -0
  35. package/dist/tui/data/feeds.d.ts +45 -0
  36. package/dist/tui/data/feeds.d.ts.map +1 -0
  37. package/dist/tui/data/feeds.js +318 -0
  38. package/dist/tui/data/feeds.js.map +1 -0
  39. package/dist/tui/data/logs.d.ts +68 -0
  40. package/dist/tui/data/logs.d.ts.map +1 -0
  41. package/dist/tui/data/logs.js +134 -0
  42. package/dist/tui/data/logs.js.map +1 -0
  43. package/dist/tui/input/commands.d.ts +159 -0
  44. package/dist/tui/input/commands.d.ts.map +1 -0
  45. package/dist/tui/input/commands.js +259 -0
  46. package/dist/tui/input/commands.js.map +1 -0
  47. package/dist/tui/input/completion.d.ts +63 -0
  48. package/dist/tui/input/completion.d.ts.map +1 -0
  49. package/dist/tui/input/completion.js +128 -0
  50. package/dist/tui/input/completion.js.map +1 -0
  51. package/dist/tui/input/keymap.d.ts +153 -0
  52. package/dist/tui/input/keymap.d.ts.map +1 -0
  53. package/dist/tui/input/keymap.js +206 -0
  54. package/dist/tui/input/keymap.js.map +1 -0
  55. package/dist/tui/input/mouse.d.ts +52 -0
  56. package/dist/tui/input/mouse.d.ts.map +1 -0
  57. package/dist/tui/input/mouse.js +55 -0
  58. package/dist/tui/input/mouse.js.map +1 -0
  59. package/dist/tui/lifecycle.d.ts +61 -0
  60. package/dist/tui/lifecycle.d.ts.map +1 -0
  61. package/dist/tui/lifecycle.js +99 -0
  62. package/dist/tui/lifecycle.js.map +1 -0
  63. package/dist/tui/model/catalogue.d.ts +28 -0
  64. package/dist/tui/model/catalogue.d.ts.map +1 -0
  65. package/dist/tui/model/catalogue.js +94 -0
  66. package/dist/tui/model/catalogue.js.map +1 -0
  67. package/dist/tui/model/help.d.ts +37 -0
  68. package/dist/tui/model/help.d.ts.map +1 -0
  69. package/dist/tui/model/help.js +210 -0
  70. package/dist/tui/model/help.js.map +1 -0
  71. package/dist/tui/model/index.d.ts +42 -0
  72. package/dist/tui/model/index.d.ts.map +1 -0
  73. package/dist/tui/model/index.js +50 -0
  74. package/dist/tui/model/index.js.map +1 -0
  75. package/dist/tui/model/status.d.ts +88 -0
  76. package/dist/tui/model/status.d.ts.map +1 -0
  77. package/dist/tui/model/status.js +137 -0
  78. package/dist/tui/model/status.js.map +1 -0
  79. package/dist/tui/model/tree.d.ts +112 -0
  80. package/dist/tui/model/tree.d.ts.map +1 -0
  81. package/dist/tui/model/tree.js +178 -0
  82. package/dist/tui/model/tree.js.map +1 -0
  83. package/dist/tui/model/types.d.ts +21 -0
  84. package/dist/tui/model/types.d.ts.map +1 -0
  85. package/dist/tui/model/types.js +46 -0
  86. package/dist/tui/model/types.js.map +1 -0
  87. package/dist/tui/render/glyphs.d.ts +122 -0
  88. package/dist/tui/render/glyphs.d.ts.map +1 -0
  89. package/dist/tui/render/glyphs.js +122 -0
  90. package/dist/tui/render/glyphs.js.map +1 -0
  91. package/dist/tui/render/layout.d.ts +145 -0
  92. package/dist/tui/render/layout.d.ts.map +1 -0
  93. package/dist/tui/render/layout.js +209 -0
  94. package/dist/tui/render/layout.js.map +1 -0
  95. package/dist/tui/render/text.d.ts +149 -0
  96. package/dist/tui/render/text.d.ts.map +1 -0
  97. package/dist/tui/render/text.js +288 -0
  98. package/dist/tui/render/text.js.map +1 -0
  99. package/dist/tui/render/theme.d.ts +88 -0
  100. package/dist/tui/render/theme.d.ts.map +1 -0
  101. package/dist/tui/render/theme.js +145 -0
  102. package/dist/tui/render/theme.js.map +1 -0
  103. package/dist/tui/session.d.ts +78 -0
  104. package/dist/tui/session.d.ts.map +1 -0
  105. package/dist/tui/session.js +237 -0
  106. package/dist/tui/session.js.map +1 -0
  107. package/dist/tui/state/actions.d.ts +584 -0
  108. package/dist/tui/state/actions.d.ts.map +1 -0
  109. package/dist/tui/state/actions.js +62 -0
  110. package/dist/tui/state/actions.js.map +1 -0
  111. package/dist/tui/state/persist.d.ts +114 -0
  112. package/dist/tui/state/persist.d.ts.map +1 -0
  113. package/dist/tui/state/persist.js +187 -0
  114. package/dist/tui/state/persist.js.map +1 -0
  115. package/dist/tui/state/poll.d.ts +99 -0
  116. package/dist/tui/state/poll.d.ts.map +1 -0
  117. package/dist/tui/state/poll.js +160 -0
  118. package/dist/tui/state/poll.js.map +1 -0
  119. package/dist/tui/state/reducer.d.ts +16 -0
  120. package/dist/tui/state/reducer.d.ts.map +1 -0
  121. package/dist/tui/state/reducer.js +363 -0
  122. package/dist/tui/state/reducer.js.map +1 -0
  123. package/dist/tui/state/store.d.ts +37 -0
  124. package/dist/tui/state/store.d.ts.map +1 -0
  125. package/dist/tui/state/store.js +84 -0
  126. package/dist/tui/state/store.js.map +1 -0
  127. package/dist/tui/suspend.d.ts +17 -0
  128. package/dist/tui/suspend.d.ts.map +1 -0
  129. package/dist/tui/suspend.js +33 -0
  130. package/dist/tui/suspend.js.map +1 -0
  131. package/dist/tui/ui/App.d.ts +41 -0
  132. package/dist/tui/ui/App.d.ts.map +1 -0
  133. package/dist/tui/ui/App.js +92 -0
  134. package/dist/tui/ui/App.js.map +1 -0
  135. package/dist/tui/ui/frame.d.ts +86 -0
  136. package/dist/tui/ui/frame.d.ts.map +1 -0
  137. package/dist/tui/ui/frame.js +42 -0
  138. package/dist/tui/ui/frame.js.map +1 -0
  139. package/dist/tui/ui/lines.d.ts +92 -0
  140. package/dist/tui/ui/lines.d.ts.map +1 -0
  141. package/dist/tui/ui/lines.js +94 -0
  142. package/dist/tui/ui/lines.js.map +1 -0
  143. package/dist/tui/ui/shell/chrome.d.ts +61 -0
  144. package/dist/tui/ui/shell/chrome.d.ts.map +1 -0
  145. package/dist/tui/ui/shell/chrome.js +272 -0
  146. package/dist/tui/ui/shell/chrome.js.map +1 -0
  147. package/dist/tui/ui/shell/widgets.d.ts +75 -0
  148. package/dist/tui/ui/shell/widgets.d.ts.map +1 -0
  149. package/dist/tui/ui/shell/widgets.js +160 -0
  150. package/dist/tui/ui/shell/widgets.js.map +1 -0
  151. package/dist/tui/ui/views/about.d.ts +20 -0
  152. package/dist/tui/ui/views/about.d.ts.map +1 -0
  153. package/dist/tui/ui/views/about.js +40 -0
  154. package/dist/tui/ui/views/about.js.map +1 -0
  155. package/dist/tui/ui/views/all.d.ts +17 -0
  156. package/dist/tui/ui/views/all.d.ts.map +1 -0
  157. package/dist/tui/ui/views/all.js +17 -0
  158. package/dist/tui/ui/views/all.js.map +1 -0
  159. package/dist/tui/ui/views/dashboard.d.ts +156 -0
  160. package/dist/tui/ui/views/dashboard.d.ts.map +1 -0
  161. package/dist/tui/ui/views/dashboard.js +599 -0
  162. package/dist/tui/ui/views/dashboard.js.map +1 -0
  163. package/dist/tui/ui/views/help.d.ts +17 -0
  164. package/dist/tui/ui/views/help.d.ts.map +1 -0
  165. package/dist/tui/ui/views/help.js +65 -0
  166. package/dist/tui/ui/views/help.js.map +1 -0
  167. package/dist/tui/ui/views/index.d.ts +42 -0
  168. package/dist/tui/ui/views/index.d.ts.map +1 -0
  169. package/dist/tui/ui/views/index.js +42 -0
  170. package/dist/tui/ui/views/index.js.map +1 -0
  171. package/dist/tui/ui/views/input.d.ts +6 -0
  172. package/dist/tui/ui/views/input.d.ts.map +1 -0
  173. package/dist/tui/ui/views/input.js +494 -0
  174. package/dist/tui/ui/views/input.js.map +1 -0
  175. package/dist/tui/ui/views/launch.d.ts +16 -0
  176. package/dist/tui/ui/views/launch.d.ts.map +1 -0
  177. package/dist/tui/ui/views/launch.js +43 -0
  178. package/dist/tui/ui/views/launch.js.map +1 -0
  179. package/dist/tui/ui/views/refusal.d.ts +20 -0
  180. package/dist/tui/ui/views/refusal.d.ts.map +1 -0
  181. package/dist/tui/ui/views/refusal.js +47 -0
  182. package/dist/tui/ui/views/refusal.js.map +1 -0
  183. package/dist/tui/ui/views/repos.d.ts +10 -0
  184. package/dist/tui/ui/views/repos.d.ts.map +1 -0
  185. package/dist/tui/ui/views/repos.js +93 -0
  186. package/dist/tui/ui/views/repos.js.map +1 -0
  187. package/dist/tui/ui/views/task.d.ts +17 -0
  188. package/dist/tui/ui/views/task.d.ts.map +1 -0
  189. package/dist/tui/ui/views/task.js +309 -0
  190. package/dist/tui/ui/views/task.js.map +1 -0
  191. package/dist/tui/ui/views/wordmark.d.ts +15 -0
  192. package/dist/tui/ui/views/wordmark.d.ts.map +1 -0
  193. package/dist/tui/ui/views/wordmark.js +50 -0
  194. package/dist/tui/ui/views/wordmark.js.map +1 -0
  195. package/dist/tui/ui/views/workspaces.d.ts +17 -0
  196. package/dist/tui/ui/views/workspaces.d.ts.map +1 -0
  197. package/dist/tui/ui/views/workspaces.js +127 -0
  198. package/dist/tui/ui/views/workspaces.js.map +1 -0
  199. package/dist/tui/ui/widgets/leaf-editor.d.ts +58 -0
  200. package/dist/tui/ui/widgets/leaf-editor.d.ts.map +1 -0
  201. package/dist/tui/ui/widgets/leaf-editor.js +119 -0
  202. package/dist/tui/ui/widgets/leaf-editor.js.map +1 -0
  203. package/dist/tui/ui/widgets/logs.d.ts +99 -0
  204. package/dist/tui/ui/widgets/logs.d.ts.map +1 -0
  205. package/dist/tui/ui/widgets/logs.js +291 -0
  206. package/dist/tui/ui/widgets/logs.js.map +1 -0
  207. package/dist/tui/ui/widgets/reads.d.ts +62 -0
  208. package/dist/tui/ui/widgets/reads.d.ts.map +1 -0
  209. package/dist/tui/ui/widgets/reads.js +122 -0
  210. package/dist/tui/ui/widgets/reads.js.map +1 -0
  211. package/dist/tui/ui/widgets/runs.d.ts +51 -0
  212. package/dist/tui/ui/widgets/runs.d.ts.map +1 -0
  213. package/dist/tui/ui/widgets/runs.js +86 -0
  214. package/dist/tui/ui/widgets/runs.js.map +1 -0
  215. package/dist/tui/ui/widgets/tree.d.ts +149 -0
  216. package/dist/tui/ui/widgets/tree.d.ts.map +1 -0
  217. package/dist/tui/ui/widgets/tree.js +584 -0
  218. package/dist/tui/ui/widgets/tree.js.map +1 -0
  219. package/package.json +22 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/tui/render/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Text measurement and formatting for one-line terminal rows.
7
+ *
8
+ * Every row the TUI renders is exactly one terminal line, so the layout
9
+ * math needs the CELL width of a string (not its code-unit length): the
10
+ * glyph set is single-width, but user data can carry wide (CJK, emoji) or
11
+ * zero-width (combining) characters. Byte sizes come from
12
+ * `formatSize` (`@elaraai/e3-cli/internal`) — one formatter across `e3`
13
+ * and `e3-ui`, not a third.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ export { formatSize } from '@elaraai/e3-cli/internal';
18
+ /**
19
+ * The number of terminal cells `text` occupies.
20
+ *
21
+ * @param text - The text (no ANSI escapes)
22
+ * @returns Its cell width
23
+ */
24
+ export declare function displayWidth(text: string): number;
25
+ /**
26
+ * Truncates `text` to at most `width` cells, ending in `ellipsis` when cut.
27
+ *
28
+ * @param text - The text
29
+ * @param width - The cell budget
30
+ * @param ellipsis - The marker appended when truncated (default `…`)
31
+ * @returns The text, or a prefix of it plus the ellipsis, within `width`
32
+ */
33
+ export declare function truncate(text: string, width: number, ellipsis?: string): string;
34
+ /**
35
+ * Pads `text` on the right to exactly `width` cells, truncating when longer.
36
+ *
37
+ * @param text - The text
38
+ * @param width - The cell width
39
+ * @returns The fitted text
40
+ */
41
+ export declare function padEnd(text: string, width: number): string;
42
+ /**
43
+ * Pads `text` on the left to exactly `width` cells, truncating when longer.
44
+ *
45
+ * @param text - The text
46
+ * @param width - The cell width
47
+ * @returns The fitted text
48
+ */
49
+ export declare function padStart(text: string, width: number): string;
50
+ /**
51
+ * Centres `text` in `width` cells (the extra cell of an odd remainder goes
52
+ * to the right).
53
+ *
54
+ * @param text - The text
55
+ * @param width - The cell width
56
+ * @returns The centred, fitted text
57
+ */
58
+ export declare function center(text: string, width: number): string;
59
+ /**
60
+ * Fits `text` to exactly `width` cells — padded on the right, or truncated
61
+ * with an ellipsis.
62
+ *
63
+ * @param text - The text
64
+ * @param width - The cell width
65
+ * @returns The fitted text
66
+ */
67
+ export declare function fit(text: string, width: number): string;
68
+ /**
69
+ * A row with `left` at the start and `right` flush against the end, in
70
+ * `width` cells; the left part yields to the right one.
71
+ *
72
+ * @param left - The left text
73
+ * @param right - The right text
74
+ * @param width - The cell width
75
+ * @param gap - Minimum cells between the two (default 1)
76
+ * @returns The composed row
77
+ */
78
+ export declare function lr(left: string, right: string, width: number, gap?: number): string;
79
+ /**
80
+ * Formats an integer with thousands grouping (`1,240,000`).
81
+ *
82
+ * @param n - The integer
83
+ * @returns The grouped text
84
+ */
85
+ export declare function formatInt(n: number | bigint): string;
86
+ /**
87
+ * Formats a duration in milliseconds the way the dashboard reads it:
88
+ * `0.8s`, `38.4s`, `2m 5s`, `1h 02m`, `3d 4h`.
89
+ *
90
+ * @param ms - The duration in milliseconds
91
+ * @returns The formatted duration
92
+ */
93
+ export declare function formatDuration(ms: number): string;
94
+ /**
95
+ * How long ago `then` was, at whole-unit precision: `just now`, `12s ago`,
96
+ * `2m ago`, `3h ago`, `3d ago`, `12d ago`.
97
+ *
98
+ * @param then - The instant (a `Date`, ISO text, or epoch milliseconds)
99
+ * @param now - The current epoch milliseconds
100
+ * @returns The relative text (`—` for an unparsable instant)
101
+ */
102
+ export declare function timeAgo(then: Date | string | number, now: number): string;
103
+ /**
104
+ * How long ago `then` was, with one decimal under ten seconds (`0.4s ago`,
105
+ * `7.1s ago`, `12s ago`, `2m ago`) — the "polled … ago" hint.
106
+ *
107
+ * @param then - The instant in epoch milliseconds
108
+ * @param now - The current epoch milliseconds
109
+ * @returns The relative text
110
+ */
111
+ export declare function agoShort(then: number, now: number): string;
112
+ /**
113
+ * The first `n` characters of a hash (`9f3c1a7e2b41`).
114
+ *
115
+ * @param hash - The hash
116
+ * @param n - Characters kept (default 12, e3-cli's display width)
117
+ * @returns The prefix
118
+ */
119
+ export declare function hashShort(hash: string, n?: number): string;
120
+ /**
121
+ * A hash abbreviated at both ends (`4be1…a9`).
122
+ *
123
+ * @param hash - The hash
124
+ * @returns The abbreviation (short hashes are returned as is)
125
+ */
126
+ export declare function hashMid(hash: string): string;
127
+ /**
128
+ * A hash abbreviated to its first four characters plus an ellipsis (`0a44…`).
129
+ *
130
+ * @param hash - The hash
131
+ * @returns The abbreviation
132
+ */
133
+ export declare function hashTiny(hash: string): string;
134
+ /**
135
+ * Formats a UTC instant as `YYYY-MM-DD HH:MM:SS`.
136
+ *
137
+ * @param when - The instant (a `Date`, ISO text, or epoch milliseconds)
138
+ * @returns The formatted text (`—` when unparsable)
139
+ */
140
+ export declare function formatStamp(when: Date | string | number): string;
141
+ /**
142
+ * A percentage with two decimals (`0.97%`), for the value-tree footer.
143
+ *
144
+ * @param part - The numerator
145
+ * @param whole - The denominator
146
+ * @returns The percentage text (`0%` when `whole` is 0)
147
+ */
148
+ export declare function percent(part: number, whole: number): string;
149
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/tui/render/text.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAoCtD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM,CAe5E;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,MAAM,CAM9E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWzE;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAK,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAIhE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG3D"}
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Text measurement and formatting for one-line terminal rows.
7
+ *
8
+ * Every row the TUI renders is exactly one terminal line, so the layout
9
+ * math needs the CELL width of a string (not its code-unit length): the
10
+ * glyph set is single-width, but user data can carry wide (CJK, emoji) or
11
+ * zero-width (combining) characters. Byte sizes come from
12
+ * `formatSize` (`@elaraai/e3-cli/internal`) — one formatter across `e3`
13
+ * and `e3-ui`, not a third.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ export { formatSize } from '@elaraai/e3-cli/internal';
18
+ const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
19
+ /** Whether a code point renders two cells wide (East Asian Wide / Fullwidth, emoji presentation). */
20
+ function isWide(cp) {
21
+ return ((cp >= 0x1100 && cp <= 0x115f) ||
22
+ (cp >= 0x2e80 && cp <= 0x303e) ||
23
+ (cp >= 0x3041 && cp <= 0x33ff) ||
24
+ (cp >= 0x3400 && cp <= 0x4dbf) ||
25
+ (cp >= 0x4e00 && cp <= 0x9fff) ||
26
+ (cp >= 0xa000 && cp <= 0xa4cf) ||
27
+ (cp >= 0xac00 && cp <= 0xd7a3) ||
28
+ (cp >= 0xf900 && cp <= 0xfaff) ||
29
+ (cp >= 0xfe30 && cp <= 0xfe4f) ||
30
+ (cp >= 0xff00 && cp <= 0xff60) ||
31
+ (cp >= 0xffe0 && cp <= 0xffe6) ||
32
+ (cp >= 0x1f300 && cp <= 0x1f64f) ||
33
+ (cp >= 0x1f900 && cp <= 0x1f9ff) ||
34
+ (cp >= 0x20000 && cp <= 0x3fffd));
35
+ }
36
+ /** Whether a code point occupies no cell (combining marks, ZWJ, variation selectors, controls). */
37
+ function isZeroWidth(cp) {
38
+ return (cp < 0x20 ||
39
+ (cp >= 0x7f && cp < 0xa0) ||
40
+ (cp >= 0x300 && cp <= 0x36f) ||
41
+ (cp >= 0x200b && cp <= 0x200f) ||
42
+ (cp >= 0xfe00 && cp <= 0xfe0f) ||
43
+ cp === 0xfeff);
44
+ }
45
+ /**
46
+ * The number of terminal cells `text` occupies.
47
+ *
48
+ * @param text - The text (no ANSI escapes)
49
+ * @returns Its cell width
50
+ */
51
+ export function displayWidth(text) {
52
+ let width = 0;
53
+ for (const { segment } of segmenter.segment(text)) {
54
+ const cp = segment.codePointAt(0);
55
+ if (cp === undefined || isZeroWidth(cp))
56
+ continue;
57
+ width += isWide(cp) ? 2 : 1;
58
+ }
59
+ return width;
60
+ }
61
+ /**
62
+ * Truncates `text` to at most `width` cells, ending in `ellipsis` when cut.
63
+ *
64
+ * @param text - The text
65
+ * @param width - The cell budget
66
+ * @param ellipsis - The marker appended when truncated (default `…`)
67
+ * @returns The text, or a prefix of it plus the ellipsis, within `width`
68
+ */
69
+ export function truncate(text, width, ellipsis = '…') {
70
+ if (width <= 0)
71
+ return '';
72
+ if (displayWidth(text) <= width)
73
+ return text;
74
+ const ellipsisWidth = displayWidth(ellipsis);
75
+ const budget = width - ellipsisWidth;
76
+ if (budget <= 0)
77
+ return ellipsis.slice(0, width);
78
+ let out = '';
79
+ let used = 0;
80
+ for (const { segment } of segmenter.segment(text)) {
81
+ const w = displayWidth(segment);
82
+ if (used + w > budget)
83
+ break;
84
+ out += segment;
85
+ used += w;
86
+ }
87
+ return out + ellipsis;
88
+ }
89
+ /**
90
+ * Pads `text` on the right to exactly `width` cells, truncating when longer.
91
+ *
92
+ * @param text - The text
93
+ * @param width - The cell width
94
+ * @returns The fitted text
95
+ */
96
+ export function padEnd(text, width) {
97
+ const w = displayWidth(text);
98
+ if (w > width)
99
+ return truncate(text, width, '');
100
+ return text + ' '.repeat(width - w);
101
+ }
102
+ /**
103
+ * Pads `text` on the left to exactly `width` cells, truncating when longer.
104
+ *
105
+ * @param text - The text
106
+ * @param width - The cell width
107
+ * @returns The fitted text
108
+ */
109
+ export function padStart(text, width) {
110
+ const w = displayWidth(text);
111
+ if (w > width)
112
+ return truncate(text, width, '');
113
+ return ' '.repeat(width - w) + text;
114
+ }
115
+ /**
116
+ * Centres `text` in `width` cells (the extra cell of an odd remainder goes
117
+ * to the right).
118
+ *
119
+ * @param text - The text
120
+ * @param width - The cell width
121
+ * @returns The centred, fitted text
122
+ */
123
+ export function center(text, width) {
124
+ const w = displayWidth(text);
125
+ if (w >= width)
126
+ return truncate(text, width, '');
127
+ const left = Math.floor((width - w) / 2);
128
+ return ' '.repeat(left) + text + ' '.repeat(width - w - left);
129
+ }
130
+ /**
131
+ * Fits `text` to exactly `width` cells — padded on the right, or truncated
132
+ * with an ellipsis.
133
+ *
134
+ * @param text - The text
135
+ * @param width - The cell width
136
+ * @returns The fitted text
137
+ */
138
+ export function fit(text, width) {
139
+ return padEnd(truncate(text, width), width);
140
+ }
141
+ /**
142
+ * A row with `left` at the start and `right` flush against the end, in
143
+ * `width` cells; the left part yields to the right one.
144
+ *
145
+ * @param left - The left text
146
+ * @param right - The right text
147
+ * @param width - The cell width
148
+ * @param gap - Minimum cells between the two (default 1)
149
+ * @returns The composed row
150
+ */
151
+ export function lr(left, right, width, gap = 1) {
152
+ const rightWidth = displayWidth(right);
153
+ if (rightWidth >= width)
154
+ return truncate(right, width, '');
155
+ const leftBudget = width - rightWidth - gap;
156
+ const l = leftBudget > 0 ? truncate(left, leftBudget) : '';
157
+ return l + ' '.repeat(width - displayWidth(l) - rightWidth) + right;
158
+ }
159
+ /**
160
+ * Formats an integer with thousands grouping (`1,240,000`).
161
+ *
162
+ * @param n - The integer
163
+ * @returns The grouped text
164
+ */
165
+ export function formatInt(n) {
166
+ const negative = typeof n === 'bigint' ? n < 0n : n < 0;
167
+ const digits = (typeof n === 'bigint' ? (negative ? -n : n) : Math.trunc(Math.abs(n))).toString();
168
+ const grouped = digits.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
169
+ return negative ? `-${grouped}` : grouped;
170
+ }
171
+ /**
172
+ * Formats a duration in milliseconds the way the dashboard reads it:
173
+ * `0.8s`, `38.4s`, `2m 5s`, `1h 02m`, `3d 4h`.
174
+ *
175
+ * @param ms - The duration in milliseconds
176
+ * @returns The formatted duration
177
+ */
178
+ export function formatDuration(ms) {
179
+ if (!Number.isFinite(ms) || ms < 0)
180
+ return '—';
181
+ const seconds = ms / 1000;
182
+ if (seconds < 60)
183
+ return `${seconds.toFixed(1)}s`;
184
+ const minutes = Math.floor(seconds / 60);
185
+ if (minutes < 60)
186
+ return `${minutes}m ${Math.round(seconds - minutes * 60)}s`;
187
+ const hours = Math.floor(minutes / 60);
188
+ if (hours < 24)
189
+ return `${hours}h ${String(minutes - hours * 60).padStart(2, '0')}m`;
190
+ const days = Math.floor(hours / 24);
191
+ return `${days}d ${hours - days * 24}h`;
192
+ }
193
+ /**
194
+ * How long ago `then` was, at whole-unit precision: `just now`, `12s ago`,
195
+ * `2m ago`, `3h ago`, `3d ago`, `12d ago`.
196
+ *
197
+ * @param then - The instant (a `Date`, ISO text, or epoch milliseconds)
198
+ * @param now - The current epoch milliseconds
199
+ * @returns The relative text (`—` for an unparsable instant)
200
+ */
201
+ export function timeAgo(then, now) {
202
+ const t = typeof then === 'number' ? then : new Date(then).getTime();
203
+ if (!Number.isFinite(t))
204
+ return '—';
205
+ const seconds = Math.max(0, Math.round((now - t) / 1000));
206
+ if (seconds < 1)
207
+ return 'just now';
208
+ if (seconds < 60)
209
+ return `${seconds}s ago`;
210
+ const minutes = Math.floor(seconds / 60);
211
+ if (minutes < 60)
212
+ return `${minutes}m ago`;
213
+ const hours = Math.floor(minutes / 60);
214
+ if (hours < 24)
215
+ return `${hours}h ago`;
216
+ return `${Math.floor(hours / 24)}d ago`;
217
+ }
218
+ /**
219
+ * How long ago `then` was, with one decimal under ten seconds (`0.4s ago`,
220
+ * `7.1s ago`, `12s ago`, `2m ago`) — the "polled … ago" hint.
221
+ *
222
+ * @param then - The instant in epoch milliseconds
223
+ * @param now - The current epoch milliseconds
224
+ * @returns The relative text
225
+ */
226
+ export function agoShort(then, now) {
227
+ const seconds = Math.max(0, (now - then) / 1000);
228
+ if (seconds < 10)
229
+ return `${seconds.toFixed(1)}s ago`;
230
+ return timeAgo(then, now);
231
+ }
232
+ /**
233
+ * The first `n` characters of a hash (`9f3c1a7e2b41`).
234
+ *
235
+ * @param hash - The hash
236
+ * @param n - Characters kept (default 12, e3-cli's display width)
237
+ * @returns The prefix
238
+ */
239
+ export function hashShort(hash, n = 12) {
240
+ return hash.slice(0, n);
241
+ }
242
+ /**
243
+ * A hash abbreviated at both ends (`4be1…a9`).
244
+ *
245
+ * @param hash - The hash
246
+ * @returns The abbreviation (short hashes are returned as is)
247
+ */
248
+ export function hashMid(hash) {
249
+ if (hash.length <= 8)
250
+ return hash;
251
+ return `${hash.slice(0, 4)}…${hash.slice(-2)}`;
252
+ }
253
+ /**
254
+ * A hash abbreviated to its first four characters plus an ellipsis (`0a44…`).
255
+ *
256
+ * @param hash - The hash
257
+ * @returns The abbreviation
258
+ */
259
+ export function hashTiny(hash) {
260
+ if (hash.length <= 4)
261
+ return hash;
262
+ return `${hash.slice(0, 4)}…`;
263
+ }
264
+ /**
265
+ * Formats a UTC instant as `YYYY-MM-DD HH:MM:SS`.
266
+ *
267
+ * @param when - The instant (a `Date`, ISO text, or epoch milliseconds)
268
+ * @returns The formatted text (`—` when unparsable)
269
+ */
270
+ export function formatStamp(when) {
271
+ const d = when instanceof Date ? when : new Date(when);
272
+ if (!Number.isFinite(d.getTime()))
273
+ return '—';
274
+ return d.toISOString().replace('T', ' ').slice(0, 19);
275
+ }
276
+ /**
277
+ * A percentage with two decimals (`0.97%`), for the value-tree footer.
278
+ *
279
+ * @param part - The numerator
280
+ * @param whole - The denominator
281
+ * @returns The percentage text (`0%` when `whole` is 0)
282
+ */
283
+ export function percent(part, whole) {
284
+ if (whole <= 0)
285
+ return '0%';
286
+ return `${((part / whole) * 100).toFixed(2)}%`;
287
+ }
288
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/tui/render/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Colour: the design system's semantic tokens mapped onto what the
7
+ * terminal can show.
8
+ *
9
+ * `process.stdout.getColorDepth()` selects truecolor / 256 / 16 colours;
10
+ * `NO_COLOR` forces monochrome (bold / dim / inverse only) and
11
+ * `FORCE_COLOR` overrides detection, the way chalk reads them. The tokens
12
+ * follow `libs/east-ui/app_design_system`: ink is the default foreground,
13
+ * ink-4 is dim, brand (`#488e97`) marks the selection bar and the active
14
+ * tab, pos / neg / warn / info colour status dots — "status is a dot + word,
15
+ * never a tinted badge".
16
+ *
17
+ * @packageDocumentation
18
+ */
19
+ /** The colour capability: 0 monochrome, 1 sixteen colours, 2 256 colours, 3 truecolor. */
20
+ export type ColorLevel = 0 | 1 | 2 | 3;
21
+ /** A stream that may report its colour depth (`process.stdout`). */
22
+ export interface ColorStream {
23
+ isTTY?: boolean | undefined;
24
+ getColorDepth?: ((env?: NodeJS.ProcessEnv) => number) | undefined;
25
+ }
26
+ /**
27
+ * Detects the colour level of `stream` under `env`.
28
+ *
29
+ * @param env - The environment (`NO_COLOR`, `FORCE_COLOR`, `TERM`, `COLORTERM`)
30
+ * @param stream - The output stream
31
+ * @returns The level — `NO_COLOR` (non-empty) wins, then `FORCE_COLOR`
32
+ * (`0`–`3`, or any other value meaning 16 colours), then the stream's
33
+ * `getColorDepth()` (1 → 0, 4 → 1, 8 → 2, 24 → 3), then `COLORTERM` /
34
+ * `TERM` hints, else monochrome
35
+ */
36
+ export declare function detectColorLevel(env: NodeJS.ProcessEnv, stream: ColorStream): ColorLevel;
37
+ /**
38
+ * The semantic colour tokens as Ink colour strings (`#hex`, `ansi256(n)`,
39
+ * or a chalk colour name), or `undefined` when a token falls back to the
40
+ * terminal default in the current level.
41
+ *
42
+ * @property level - The colour level the theme was built for
43
+ * @property ink - Primary text (always the terminal default)
44
+ * @property ink2 - Secondary text
45
+ * @property ink3 - Tertiary text
46
+ * @property ink4 - Muted text (rendered dim)
47
+ * @property brand - Selection bar, active tab, the prompt
48
+ * @property brandTint - The brand's tint, for a filled highlight
49
+ * @property pos - Positive status (complete, up-to-date, connected)
50
+ * @property neg - Negative status (failed, error, offline)
51
+ * @property warn - Warning status (waiting, stale, reconnecting)
52
+ * @property info - Informational status (running, in progress)
53
+ * @property rule - Rules and scrollbar tracks
54
+ */
55
+ export interface Theme {
56
+ level: ColorLevel;
57
+ ink: string | undefined;
58
+ ink2: string | undefined;
59
+ ink3: string | undefined;
60
+ ink4: string | undefined;
61
+ brand: string | undefined;
62
+ brandTint: string | undefined;
63
+ pos: string | undefined;
64
+ neg: string | undefined;
65
+ warn: string | undefined;
66
+ info: string | undefined;
67
+ rule: string | undefined;
68
+ }
69
+ /**
70
+ * Builds the theme for a colour level.
71
+ *
72
+ * @param level - The colour level
73
+ * @returns The theme — truecolor hex at 3, `ansi256(n)` at 2, the sixteen
74
+ * colour names at 1, and every token `undefined` at 0 (bold / dim /
75
+ * inverse carry the meaning)
76
+ */
77
+ export declare function createTheme(level: ColorLevel): Theme;
78
+ /** The tone a status word or dot carries. */
79
+ export type Tone = 'pos' | 'neg' | 'warn' | 'info' | 'muted' | 'brand' | 'plain';
80
+ /**
81
+ * The theme colour of a tone (`undefined` = the terminal default).
82
+ *
83
+ * @param theme - The theme
84
+ * @param tone - The tone
85
+ * @returns The Ink colour string, if any
86
+ */
87
+ export declare function toneColor(theme: Theme, tone: Tone): string | undefined;
88
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/tui/render/theme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvC,oEAAoE;AACpE,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CACrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,CA0BxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,KAAK;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CA+DpD;AAED,6CAA6C;AAC7C,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAUtE"}