@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,50 @@
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
+ * View models — the pure selectors every view renders from and the
7
+ * controller navigates with. A view model is `{ rows, visible }` at
8
+ * minimum: the rows the primary list has and how many fit, so `list/move`
9
+ * is driven from one place.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { shellLayout } from '../render/layout.js';
14
+ /**
15
+ * The shell layout for the state (the commit bar shows while editing, the
16
+ * completion list while it has items).
17
+ *
18
+ * @param state - The store state
19
+ * @returns The layout
20
+ */
21
+ export function layoutOf(state) {
22
+ return shellLayout(state.size, {
23
+ commit: state.edit !== null && state.edit.ops.length > 0,
24
+ completion: state.command.completion?.items.length ?? 0,
25
+ });
26
+ }
27
+ /** Extension point: per-view list models registered by the view modules. */
28
+ const listModels = new Map();
29
+ /**
30
+ * Registers a view's list model (called by each view model module on load).
31
+ *
32
+ * @param kind - The view kind
33
+ * @param model - The selector
34
+ */
35
+ export function registerListModel(kind, model) {
36
+ listModels.set(kind, model);
37
+ }
38
+ /**
39
+ * The current view's primary list model.
40
+ *
41
+ * @param state - The store state
42
+ * @returns The rows and visible count (0 / 0 for views without a list)
43
+ */
44
+ export function listModel(state) {
45
+ const model = listModels.get(state.view.kind);
46
+ if (model === undefined)
47
+ return { count: 0, visible: 0 };
48
+ return model(state, layoutOf(state));
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/model/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,qBAAqB,CAAC;AASpE;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe;IACpC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QACxD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;KAC1D,CAAC,CAAC;AACP,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+D,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAA0D;IACtG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAe;IACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzD,OAAO,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -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
+ * Status words — the dot + word (+ inline detail) every table shows for
7
+ * a task, a dataset, a workspace, an execution or a connection: the cloud
8
+ * UI's `formatStatusDetail` cases made inline, and the same words
9
+ * `formatTaskStatus` (`e3 workspace status`) prints.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import type { DataflowExecutionState, ExecutionHistoryStatus, ExecutionStatus, TaskStatus, DataflowEvent } from '@elaraai/e3-api-client';
14
+ import type { Glyphs } from '../render/glyphs.js';
15
+ import type { Tone } from '../render/theme.js';
16
+ import type { ConnectionState } from '../state/poll.js';
17
+ /** A status cell: its glyph, its tone, the word and an inline detail. */
18
+ export interface StatusCell {
19
+ glyph: string;
20
+ tone: Tone;
21
+ word: string;
22
+ detail: string;
23
+ }
24
+ /** `● up-to-date`, `✗ failed · exit 2`, … */
25
+ export declare function statusText(cell: StatusCell, sep?: string): string;
26
+ /**
27
+ * A task's status cell.
28
+ *
29
+ * @param status - The task status variant
30
+ * @param g - The glyph set
31
+ * @returns The cell
32
+ */
33
+ export declare function taskStatusCell(status: TaskStatus, g: Glyphs): StatusCell;
34
+ /**
35
+ * A dataset's status cell.
36
+ *
37
+ * @param status - `unset` / `stale` / `up-to-date`
38
+ * @param g - The glyph set
39
+ * @returns The cell
40
+ */
41
+ export declare function datasetStatusCell(status: 'unset' | 'stale' | 'up-to-date', g: Glyphs): StatusCell;
42
+ /**
43
+ * An execution's status cell (`✗ FAILED`, `◔ RUNNING`, `● COMPLETED`, `■ ABORTED`).
44
+ *
45
+ * @param status - The execution status
46
+ * @param g - The glyph set
47
+ * @returns The cell
48
+ */
49
+ export declare function executionStatusCell(status: ExecutionStatus['type'], g: Glyphs): StatusCell;
50
+ /**
51
+ * A run-history item's status cell.
52
+ *
53
+ * @param status - The history status
54
+ * @param g - The glyph set
55
+ * @returns The cell
56
+ */
57
+ export declare function historyStatusCell(status: ExecutionHistoryStatus['type'], g: Glyphs): StatusCell;
58
+ /**
59
+ * The connection pill.
60
+ *
61
+ * @param connection - The connection state
62
+ * @param g - The glyph set
63
+ * @returns The cell (`● CONNECTED`, `◐ RECONNECTING 3/4`, `✗ OFFLINE`)
64
+ */
65
+ export declare function connectionCell(connection: ConnectionState, g: Glyphs): StatusCell | null;
66
+ /**
67
+ * An execution's wall-clock duration in milliseconds: the summary's, or
68
+ * `completedAt − startedAt` when the summary reports none (the server
69
+ * only times the runs it launched itself).
70
+ *
71
+ * @param state - The execution state
72
+ * @returns The duration, or `null` while it is still running
73
+ */
74
+ export declare function executionDuration(state: DataflowExecutionState): number | null;
75
+ /**
76
+ * One dataflow event as the feed shows it — the cloud UI's
77
+ * `formatEventMessage` cases: the dot + word, the task, and the detail
78
+ * (duration, exit code, message, reason).
79
+ *
80
+ * @param event - The event
81
+ * @param g - The glyph set
82
+ * @returns The cell plus the task name
83
+ */
84
+ export declare function eventCell(event: DataflowEvent, g: Glyphs): StatusCell & {
85
+ task: string;
86
+ timestamp: string;
87
+ };
88
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/tui/model/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACzI,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,SAAQ,GAAG,MAAM,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAiBxE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAMjG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAO1F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAO/F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOxF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAO9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAe3G"}
@@ -0,0 +1,137 @@
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
+ import { formatDuration } from '../render/text.js';
6
+ /** `● up-to-date`, `✗ failed · exit 2`, … */
7
+ export function statusText(cell, sep = ' · ') {
8
+ return `${cell.glyph} ${cell.word}${cell.detail !== '' ? `${sep}${cell.detail}` : ''}`;
9
+ }
10
+ /**
11
+ * A task's status cell.
12
+ *
13
+ * @param status - The task status variant
14
+ * @param g - The glyph set
15
+ * @returns The cell
16
+ */
17
+ export function taskStatusCell(status, g) {
18
+ switch (status.type) {
19
+ case 'up-to-date':
20
+ return { glyph: g.dot, tone: 'pos', word: 'up-to-date', detail: status.value.cached ? 'cached' : '' };
21
+ case 'ready':
22
+ return { glyph: g.empty, tone: 'muted', word: 'ready', detail: '' };
23
+ case 'waiting':
24
+ return { glyph: g.half, tone: 'warn', word: 'waiting', detail: status.value.reason };
25
+ case 'in-progress':
26
+ return { glyph: g.quarter, tone: 'info', word: 'in-progress', detail: status.value.pid.type === 'some' ? `pid ${status.value.pid.value}` : '' };
27
+ case 'failed':
28
+ return { glyph: g.cross, tone: 'neg', word: 'failed', detail: `exit ${status.value.exitCode}` };
29
+ case 'error':
30
+ return { glyph: g.cross, tone: 'neg', word: 'error', detail: status.value.message };
31
+ case 'stale-running':
32
+ return { glyph: g.half, tone: 'warn', word: 'stale-running', detail: status.value.pid.type === 'some' ? `pid ${status.value.pid.value} gone` : '' };
33
+ }
34
+ }
35
+ /**
36
+ * A dataset's status cell.
37
+ *
38
+ * @param status - `unset` / `stale` / `up-to-date`
39
+ * @param g - The glyph set
40
+ * @returns The cell
41
+ */
42
+ export function datasetStatusCell(status, g) {
43
+ switch (status) {
44
+ case 'up-to-date': return { glyph: g.dot, tone: 'pos', word: 'up-to-date', detail: '' };
45
+ case 'stale': return { glyph: g.half, tone: 'warn', word: 'stale', detail: '' };
46
+ default: return { glyph: g.empty, tone: 'muted', word: 'unset', detail: '' };
47
+ }
48
+ }
49
+ /**
50
+ * An execution's status cell (`✗ FAILED`, `◔ RUNNING`, `● COMPLETED`, `■ ABORTED`).
51
+ *
52
+ * @param status - The execution status
53
+ * @param g - The glyph set
54
+ * @returns The cell
55
+ */
56
+ export function executionStatusCell(status, g) {
57
+ switch (status) {
58
+ case 'running': return { glyph: g.quarter, tone: 'info', word: 'RUNNING', detail: '' };
59
+ case 'completed': return { glyph: g.dot, tone: 'pos', word: 'COMPLETED', detail: '' };
60
+ case 'failed': return { glyph: g.cross, tone: 'neg', word: 'FAILED', detail: '' };
61
+ case 'aborted': return { glyph: g.square, tone: 'warn', word: 'ABORTED', detail: '' };
62
+ }
63
+ }
64
+ /**
65
+ * A run-history item's status cell.
66
+ *
67
+ * @param status - The history status
68
+ * @param g - The glyph set
69
+ * @returns The cell
70
+ */
71
+ export function historyStatusCell(status, g) {
72
+ switch (status) {
73
+ case 'running': return { glyph: g.quarter, tone: 'info', word: 'running', detail: '' };
74
+ case 'success': return { glyph: g.dot, tone: 'pos', word: 'success', detail: '' };
75
+ case 'failed': return { glyph: g.cross, tone: 'neg', word: 'failed', detail: '' };
76
+ case 'error': return { glyph: g.half, tone: 'warn', word: 'error', detail: '' };
77
+ }
78
+ }
79
+ /**
80
+ * The connection pill.
81
+ *
82
+ * @param connection - The connection state
83
+ * @param g - The glyph set
84
+ * @returns The cell (`● CONNECTED`, `◐ RECONNECTING 3/4`, `✗ OFFLINE`)
85
+ */
86
+ export function connectionCell(connection, g) {
87
+ switch (connection.kind) {
88
+ case 'connected': return { glyph: g.dot, tone: 'pos', word: 'CONNECTED', detail: '' };
89
+ case 'reconnecting': return { glyph: g.half, tone: 'warn', word: `RECONNECTING ${connection.attempt}/${connection.of}`, detail: '' };
90
+ case 'offline': return { glyph: g.cross, tone: 'neg', word: 'OFFLINE', detail: '' };
91
+ default: return null;
92
+ }
93
+ }
94
+ /**
95
+ * An execution's wall-clock duration in milliseconds: the summary's, or
96
+ * `completedAt − startedAt` when the summary reports none (the server
97
+ * only times the runs it launched itself).
98
+ *
99
+ * @param state - The execution state
100
+ * @returns The duration, or `null` while it is still running
101
+ */
102
+ export function executionDuration(state) {
103
+ if (state.summary.type === 'some' && state.summary.value.duration > 0)
104
+ return state.summary.value.duration;
105
+ if (state.completedAt.type === 'some') {
106
+ const ms = Date.parse(state.completedAt.value) - Date.parse(state.startedAt);
107
+ if (Number.isFinite(ms) && ms >= 0)
108
+ return ms;
109
+ }
110
+ return state.summary.type === 'some' ? state.summary.value.duration : null;
111
+ }
112
+ /**
113
+ * One dataflow event as the feed shows it — the cloud UI's
114
+ * `formatEventMessage` cases: the dot + word, the task, and the detail
115
+ * (duration, exit code, message, reason).
116
+ *
117
+ * @param event - The event
118
+ * @param g - The glyph set
119
+ * @returns The cell plus the task name
120
+ */
121
+ export function eventCell(event, g) {
122
+ switch (event.type) {
123
+ case 'start':
124
+ return { glyph: g.quarter, tone: 'info', word: 'start', detail: '', task: event.value.task, timestamp: event.value.timestamp };
125
+ case 'complete':
126
+ return { glyph: g.dot, tone: 'pos', word: 'complete', detail: formatDuration(event.value.duration), task: event.value.task, timestamp: event.value.timestamp };
127
+ case 'cached':
128
+ return { glyph: g.dot, tone: 'pos', word: 'cached', detail: '', task: event.value.task, timestamp: event.value.timestamp };
129
+ case 'failed':
130
+ return { glyph: g.cross, tone: 'neg', word: 'failed', detail: `exit ${event.value.exitCode} · ${formatDuration(event.value.duration)}`, task: event.value.task, timestamp: event.value.timestamp };
131
+ case 'error':
132
+ return { glyph: g.cross, tone: 'neg', word: 'error', detail: event.value.message, task: event.value.task, timestamp: event.value.timestamp };
133
+ case 'input_unavailable':
134
+ return { glyph: g.half, tone: 'warn', word: 'waiting', detail: event.value.reason, task: event.value.task, timestamp: event.value.timestamp };
135
+ }
136
+ }
137
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/tui/model/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
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
+ * The value tree's model — the flat rows a dataset's content becomes
7
+ * (`flattenRows` inline, `flattenPaged` paged, from the row model
8
+ * `@elaraai/east-ui` shares with the browser), and the *anchor* that keeps
9
+ * the selection on the same logical row while pages arrive and leave: a
10
+ * paged tree's flat indices shift whenever a placeholder root becomes its
11
+ * expanded rows (or the reverse), so the selection is remembered as a
12
+ * global root row plus an offset into its subtree and re-applied after
13
+ * every page change.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import type { EastTypeValue } from '@elaraai/east';
18
+ import { type PagedFlat, type RowModel, type ValueTreePaging } from '@elaraai/east-ui/internal';
19
+ import type { DatasetData, TreeUi, TuiState, View } from '../state/actions.js';
20
+ /** Root rows fetched per page. */
21
+ export declare const PAGE_SIZE = 500;
22
+ /** Whether a dataset root type pages (Array / Set / Dict). */
23
+ export declare function isCollectionType(type: EastTypeValue): boolean;
24
+ /**
25
+ * The key type of a keyed collection (`/find` works over it).
26
+ *
27
+ * @param type - The dataset's root type
28
+ * @returns The Dict key type / Set element type, or null
29
+ */
30
+ export declare function keyTypeOf(type: EastTypeValue): EastTypeValue | null;
31
+ /**
32
+ * The keys of a decoded keyed collection in canonical order (the inline
33
+ * counterpart of the server's row space).
34
+ *
35
+ * @param type - The dataset's root type
36
+ * @param decoded - The decoded value
37
+ * @returns The keys, or null for a non-keyed root
38
+ */
39
+ export declare function collectionKeys(type: EastTypeValue, decoded: unknown): unknown[] | null;
40
+ /** The dataset a view shows, if any. */
41
+ export declare function viewDataset(state: TuiState): {
42
+ ws: string;
43
+ path: string;
44
+ editable: boolean;
45
+ } | null;
46
+ /** The tree's flat rows: inline (all loaded) or paged (loaded pages + placeholders). */
47
+ export interface TreeModel {
48
+ /** Flat rows in total. */
49
+ total: number;
50
+ /** The loaded rows in flat order (every row when inline). */
51
+ rows: RowModel[];
52
+ paged: {
53
+ flat: PagedFlat;
54
+ paging: ValueTreePaging;
55
+ } | null;
56
+ /** Root rows (depth 0) in total. */
57
+ rootCount: number;
58
+ /** The row at a flat index. */
59
+ at(index: number): {
60
+ kind: 'model';
61
+ row: RowModel;
62
+ } | {
63
+ kind: 'placeholder';
64
+ globalRow: number;
65
+ } | null;
66
+ /** The flat index of a root row ordinal. */
67
+ flatOfRoot(root: number): number | undefined;
68
+ /** The flat index of a row id, when loaded. */
69
+ flatOfId(id: string): number | undefined;
70
+ keyType: EastTypeValue | null;
71
+ }
72
+ /**
73
+ * Builds the tree model for a dataset's current content.
74
+ *
75
+ * @param data - The dataset data
76
+ * @param tree - The tree UI (expand-set, base depth)
77
+ * @param editable - Whether append / remove rows are offered
78
+ * @returns The model, or null when the content is not a tree
79
+ */
80
+ export declare function treeModel(data: DatasetData | undefined, tree: TreeUi, editable: boolean): TreeModel | null;
81
+ /** The selection of a paged tree as a logical position. */
82
+ export interface TreeAnchor {
83
+ ws: string;
84
+ path: string;
85
+ /** The global root row the selection sits under. */
86
+ root: number;
87
+ /** Flat rows from that root to the selection. */
88
+ offset: number;
89
+ /** Flat rows from the window's top to the selection. */
90
+ topOffset: number;
91
+ }
92
+ /**
93
+ * Captures where the selection of the shown paged tree sits, before its
94
+ * pages change.
95
+ *
96
+ * @param state - The store state
97
+ * @param ws - The dataset's workspace
98
+ * @param path - The dataset's path
99
+ * @returns The anchor, or null when the view shows something else
100
+ */
101
+ export declare function captureAnchor(state: TuiState, ws: string, path: string): TreeAnchor | null;
102
+ /**
103
+ * Re-applies an anchor after the pages changed: the selection lands on
104
+ * the same root (at the same offset into its subtree, clamped) and the
105
+ * window keeps it on the same screen line.
106
+ *
107
+ * @param state - The store state after the change
108
+ * @param anchor - The captured anchor
109
+ * @returns The view to set, or null when nothing moves
110
+ */
111
+ export declare function applyAnchor(state: TuiState, anchor: TreeAnchor): View | null;
112
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/tui/model/tree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAOH,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE/E,kCAAkC;AAClC,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI,CAInE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAItF;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAKnG;AAED,wFAAwF;AACxF,MAAM,WAAW,SAAS;IACtB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxG,4CAA4C;IAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAuC1G;AAED,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAoB1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAyB5E"}
@@ -0,0 +1,178 @@
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
+ import { DEFAULT_OPEN_DEPTH, flatIndexOfRoot, flattenPaged, flattenRows, pagedFlatIndexOfRoot, pagedRowAt, } from '@elaraai/east-ui/internal';
6
+ /** Root rows fetched per page. */
7
+ export const PAGE_SIZE = 500;
8
+ /** Whether a dataset root type pages (Array / Set / Dict). */
9
+ export function isCollectionType(type) {
10
+ return type.type === 'Array' || type.type === 'Set' || type.type === 'Dict';
11
+ }
12
+ /**
13
+ * The key type of a keyed collection (`/find` works over it).
14
+ *
15
+ * @param type - The dataset's root type
16
+ * @returns The Dict key type / Set element type, or null
17
+ */
18
+ export function keyTypeOf(type) {
19
+ if (type.type === 'Dict')
20
+ return type.value.key;
21
+ if (type.type === 'Set')
22
+ return type.value;
23
+ return null;
24
+ }
25
+ /**
26
+ * The keys of a decoded keyed collection in canonical order (the inline
27
+ * counterpart of the server's row space).
28
+ *
29
+ * @param type - The dataset's root type
30
+ * @param decoded - The decoded value
31
+ * @returns The keys, or null for a non-keyed root
32
+ */
33
+ export function collectionKeys(type, decoded) {
34
+ if (type.type === 'Dict')
35
+ return [...decoded.keys()];
36
+ if (type.type === 'Set')
37
+ return [...decoded.values()];
38
+ return null;
39
+ }
40
+ /** The dataset a view shows, if any. */
41
+ export function viewDataset(state) {
42
+ const v = state.view;
43
+ if (v.kind === 'task' && v.tab === 'output')
44
+ return { ws: v.ws, path: `.tasks.${v.task}.output`, editable: false };
45
+ if (v.kind === 'input')
46
+ return { ws: v.ws, path: `.inputs.${v.name}`, editable: true };
47
+ return null;
48
+ }
49
+ /**
50
+ * Builds the tree model for a dataset's current content.
51
+ *
52
+ * @param data - The dataset data
53
+ * @param tree - The tree UI (expand-set, base depth)
54
+ * @param editable - Whether append / remove rows are offered
55
+ * @returns The model, or null when the content is not a tree
56
+ */
57
+ export function treeModel(data, tree, editable) {
58
+ if (data === undefined || data.type === null)
59
+ return null;
60
+ const openDepth = tree.baseDepth ?? DEFAULT_OPEN_DEPTH;
61
+ const keyType = keyTypeOf(data.type);
62
+ if (data.mode.kind === 'inline') {
63
+ const rows = flattenRows(data.mode.root, tree.open, openDepth, editable, editable);
64
+ const roots = rows.filter(r => r.depth === 0).length;
65
+ return {
66
+ total: rows.length,
67
+ rows,
68
+ paged: null,
69
+ rootCount: roots,
70
+ at: (i) => (i >= 0 && i < rows.length ? { kind: 'model', row: rows[i] } : null),
71
+ flatOfRoot: (root) => flatIndexOfRoot(rows, root),
72
+ flatOfId: (id) => { const i = rows.findIndex(r => r.id === id); return i === -1 ? undefined : i; },
73
+ keyType,
74
+ };
75
+ }
76
+ if (data.mode.kind === 'paged') {
77
+ const paging = { totalRows: data.mode.totalRows, pageSize: PAGE_SIZE, pages: data.mode.pages, onNeedRows: () => undefined };
78
+ const flat = flattenPaged(paging, tree.open, openDepth);
79
+ return {
80
+ total: flat.totalFlat,
81
+ rows: flat.loadedRows,
82
+ paged: { flat, paging },
83
+ rootCount: data.mode.totalRows,
84
+ at: (i) => (i >= 0 && i < flat.totalFlat ? pagedRowAt(flat, paging, i) : null),
85
+ flatOfRoot: (root) => pagedFlatIndexOfRoot(flat, paging, root),
86
+ flatOfId: (id) => {
87
+ for (const [p, models] of flat.pageModels) {
88
+ const j = models.findIndex(r => r.id === id);
89
+ if (j !== -1)
90
+ return flat.prefix[p] + j;
91
+ }
92
+ return undefined;
93
+ },
94
+ keyType,
95
+ };
96
+ }
97
+ return null;
98
+ }
99
+ /**
100
+ * Captures where the selection of the shown paged tree sits, before its
101
+ * pages change.
102
+ *
103
+ * @param state - The store state
104
+ * @param ws - The dataset's workspace
105
+ * @param path - The dataset's path
106
+ * @returns The anchor, or null when the view shows something else
107
+ */
108
+ export function captureAnchor(state, ws, path) {
109
+ const shown = viewDataset(state);
110
+ const v = state.view;
111
+ if (shown === null || shown.ws !== ws || shown.path !== path || (v.kind !== 'task' && v.kind !== 'input'))
112
+ return null;
113
+ const data = state.data.dataset[ws]?.[path];
114
+ if (data?.mode.kind !== 'paged')
115
+ return null;
116
+ const model = treeModel(data, v.tree, shown.editable);
117
+ if (model === null || model.total === 0)
118
+ return null;
119
+ const sel = Math.max(0, Math.min(v.tree.sel, model.total - 1));
120
+ const at = model.at(sel);
121
+ if (at === null)
122
+ return null;
123
+ if (at.kind === 'placeholder')
124
+ return { ws, path, root: at.globalRow, offset: 0, topOffset: sel - v.tree.top };
125
+ // The nearest depth-0 row at or before the selection is its root.
126
+ for (let i = sel; i >= 0; i--) {
127
+ const row = model.at(i);
128
+ if (row === null)
129
+ break;
130
+ if (row.kind === 'placeholder')
131
+ return { ws, path, root: row.globalRow, offset: 0, topOffset: sel - v.tree.top };
132
+ if (row.row.depth === 0)
133
+ return { ws, path, root: row.row.posinset - 1, offset: sel - i, topOffset: sel - v.tree.top };
134
+ }
135
+ return null;
136
+ }
137
+ /**
138
+ * Re-applies an anchor after the pages changed: the selection lands on
139
+ * the same root (at the same offset into its subtree, clamped) and the
140
+ * window keeps it on the same screen line.
141
+ *
142
+ * @param state - The store state after the change
143
+ * @param anchor - The captured anchor
144
+ * @returns The view to set, or null when nothing moves
145
+ */
146
+ export function applyAnchor(state, anchor) {
147
+ const shown = viewDataset(state);
148
+ const v = state.view;
149
+ if (shown === null || shown.ws !== anchor.ws || shown.path !== anchor.path || (v.kind !== 'task' && v.kind !== 'input'))
150
+ return null;
151
+ const data = state.data.dataset[anchor.ws]?.[anchor.path];
152
+ if (data?.mode.kind !== 'paged')
153
+ return null;
154
+ const model = treeModel(data, v.tree, shown.editable);
155
+ if (model === null || model.total === 0)
156
+ return null;
157
+ const flat = model.flatOfRoot(anchor.root);
158
+ if (flat === undefined)
159
+ return null;
160
+ let sel = flat;
161
+ const at = model.at(flat);
162
+ if (at !== null && at.kind === 'model') {
163
+ // Stay inside the root's subtree.
164
+ let end = flat;
165
+ while (end + 1 < model.total) {
166
+ const next = model.at(end + 1);
167
+ if (next === null || next.kind === 'placeholder' || next.row.depth === 0)
168
+ break;
169
+ end++;
170
+ }
171
+ sel = Math.min(flat + anchor.offset, end);
172
+ }
173
+ const top = Math.max(0, Math.min(sel - anchor.topOffset, Math.max(0, model.total - 1)));
174
+ if (sel === v.tree.sel && top === v.tree.top)
175
+ return null;
176
+ return { ...v, tree: { ...v.tree, sel, top } };
177
+ }
178
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/tui/model/tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
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
+ * East type text for tables — `Array<Struct>`, `Dict<String, Struct>`,
7
+ * `UIComponentType`: the top-level kind with its generic arguments' kinds
8
+ * only, so a type fits a column.
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ import type { EastTypeValue } from '@elaraai/east';
13
+ /**
14
+ * The compact text of a type.
15
+ *
16
+ * @param tv - The type value
17
+ * @param ui - Whether the dataset is a `ui` task's output (printed `UIComponentType`)
18
+ * @returns The compact text
19
+ */
20
+ export declare function compactType(tv: EastTypeValue, ui?: boolean): string;
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tui/model/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAWnD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,UAAQ,GAAG,MAAM,CAuBjE"}