@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.
- package/README.md +46 -21
- package/dist/app/assets/{engine-BKZbmXkC-hslJZfFw.js → engine-Bm-cIDd_-DwUdGcTZ.js} +1 -1
- package/dist/app/assets/{index-8USNHP31.js → index-mj-YVVN1.js} +92 -92
- package/dist/app/index.html +1 -1
- package/dist/cli.js +36 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/tui.d.ts +84 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +86 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/tui/api.d.ts +108 -0
- package/dist/tui/api.d.ts.map +1 -0
- package/dist/tui/api.js +130 -0
- package/dist/tui/api.js.map +1 -0
- package/dist/tui/app.d.ts +23 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +241 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/controller.d.ts +116 -0
- package/dist/tui/controller.d.ts.map +1 -0
- package/dist/tui/controller.js +620 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/data/dataflow.d.ts +68 -0
- package/dist/tui/data/dataflow.d.ts.map +1 -0
- package/dist/tui/data/dataflow.js +137 -0
- package/dist/tui/data/dataflow.js.map +1 -0
- package/dist/tui/data/dataset.d.ts +80 -0
- package/dist/tui/data/dataset.d.ts.map +1 -0
- package/dist/tui/data/dataset.js +297 -0
- package/dist/tui/data/dataset.js.map +1 -0
- package/dist/tui/data/edit-buffer.d.ts +74 -0
- package/dist/tui/data/edit-buffer.d.ts.map +1 -0
- package/dist/tui/data/edit-buffer.js +120 -0
- package/dist/tui/data/edit-buffer.js.map +1 -0
- package/dist/tui/data/feeds.d.ts +45 -0
- package/dist/tui/data/feeds.d.ts.map +1 -0
- package/dist/tui/data/feeds.js +318 -0
- package/dist/tui/data/feeds.js.map +1 -0
- package/dist/tui/data/logs.d.ts +68 -0
- package/dist/tui/data/logs.d.ts.map +1 -0
- package/dist/tui/data/logs.js +134 -0
- package/dist/tui/data/logs.js.map +1 -0
- package/dist/tui/input/commands.d.ts +159 -0
- package/dist/tui/input/commands.d.ts.map +1 -0
- package/dist/tui/input/commands.js +259 -0
- package/dist/tui/input/commands.js.map +1 -0
- package/dist/tui/input/completion.d.ts +63 -0
- package/dist/tui/input/completion.d.ts.map +1 -0
- package/dist/tui/input/completion.js +128 -0
- package/dist/tui/input/completion.js.map +1 -0
- package/dist/tui/input/keymap.d.ts +153 -0
- package/dist/tui/input/keymap.d.ts.map +1 -0
- package/dist/tui/input/keymap.js +206 -0
- package/dist/tui/input/keymap.js.map +1 -0
- package/dist/tui/input/mouse.d.ts +52 -0
- package/dist/tui/input/mouse.d.ts.map +1 -0
- package/dist/tui/input/mouse.js +55 -0
- package/dist/tui/input/mouse.js.map +1 -0
- package/dist/tui/lifecycle.d.ts +61 -0
- package/dist/tui/lifecycle.d.ts.map +1 -0
- package/dist/tui/lifecycle.js +99 -0
- package/dist/tui/lifecycle.js.map +1 -0
- package/dist/tui/model/catalogue.d.ts +28 -0
- package/dist/tui/model/catalogue.d.ts.map +1 -0
- package/dist/tui/model/catalogue.js +94 -0
- package/dist/tui/model/catalogue.js.map +1 -0
- package/dist/tui/model/help.d.ts +37 -0
- package/dist/tui/model/help.d.ts.map +1 -0
- package/dist/tui/model/help.js +210 -0
- package/dist/tui/model/help.js.map +1 -0
- package/dist/tui/model/index.d.ts +42 -0
- package/dist/tui/model/index.d.ts.map +1 -0
- package/dist/tui/model/index.js +50 -0
- package/dist/tui/model/index.js.map +1 -0
- package/dist/tui/model/status.d.ts +88 -0
- package/dist/tui/model/status.d.ts.map +1 -0
- package/dist/tui/model/status.js +137 -0
- package/dist/tui/model/status.js.map +1 -0
- package/dist/tui/model/tree.d.ts +112 -0
- package/dist/tui/model/tree.d.ts.map +1 -0
- package/dist/tui/model/tree.js +178 -0
- package/dist/tui/model/tree.js.map +1 -0
- package/dist/tui/model/types.d.ts +21 -0
- package/dist/tui/model/types.d.ts.map +1 -0
- package/dist/tui/model/types.js +46 -0
- package/dist/tui/model/types.js.map +1 -0
- package/dist/tui/render/glyphs.d.ts +122 -0
- package/dist/tui/render/glyphs.d.ts.map +1 -0
- package/dist/tui/render/glyphs.js +122 -0
- package/dist/tui/render/glyphs.js.map +1 -0
- package/dist/tui/render/layout.d.ts +145 -0
- package/dist/tui/render/layout.d.ts.map +1 -0
- package/dist/tui/render/layout.js +209 -0
- package/dist/tui/render/layout.js.map +1 -0
- package/dist/tui/render/text.d.ts +149 -0
- package/dist/tui/render/text.d.ts.map +1 -0
- package/dist/tui/render/text.js +288 -0
- package/dist/tui/render/text.js.map +1 -0
- package/dist/tui/render/theme.d.ts +88 -0
- package/dist/tui/render/theme.d.ts.map +1 -0
- package/dist/tui/render/theme.js +145 -0
- package/dist/tui/render/theme.js.map +1 -0
- package/dist/tui/session.d.ts +78 -0
- package/dist/tui/session.d.ts.map +1 -0
- package/dist/tui/session.js +237 -0
- package/dist/tui/session.js.map +1 -0
- package/dist/tui/state/actions.d.ts +584 -0
- package/dist/tui/state/actions.d.ts.map +1 -0
- package/dist/tui/state/actions.js +62 -0
- package/dist/tui/state/actions.js.map +1 -0
- package/dist/tui/state/persist.d.ts +114 -0
- package/dist/tui/state/persist.d.ts.map +1 -0
- package/dist/tui/state/persist.js +187 -0
- package/dist/tui/state/persist.js.map +1 -0
- package/dist/tui/state/poll.d.ts +99 -0
- package/dist/tui/state/poll.d.ts.map +1 -0
- package/dist/tui/state/poll.js +160 -0
- package/dist/tui/state/poll.js.map +1 -0
- package/dist/tui/state/reducer.d.ts +16 -0
- package/dist/tui/state/reducer.d.ts.map +1 -0
- package/dist/tui/state/reducer.js +363 -0
- package/dist/tui/state/reducer.js.map +1 -0
- package/dist/tui/state/store.d.ts +37 -0
- package/dist/tui/state/store.d.ts.map +1 -0
- package/dist/tui/state/store.js +84 -0
- package/dist/tui/state/store.js.map +1 -0
- package/dist/tui/suspend.d.ts +17 -0
- package/dist/tui/suspend.d.ts.map +1 -0
- package/dist/tui/suspend.js +33 -0
- package/dist/tui/suspend.js.map +1 -0
- package/dist/tui/ui/App.d.ts +41 -0
- package/dist/tui/ui/App.d.ts.map +1 -0
- package/dist/tui/ui/App.js +92 -0
- package/dist/tui/ui/App.js.map +1 -0
- package/dist/tui/ui/frame.d.ts +86 -0
- package/dist/tui/ui/frame.d.ts.map +1 -0
- package/dist/tui/ui/frame.js +42 -0
- package/dist/tui/ui/frame.js.map +1 -0
- package/dist/tui/ui/lines.d.ts +92 -0
- package/dist/tui/ui/lines.d.ts.map +1 -0
- package/dist/tui/ui/lines.js +94 -0
- package/dist/tui/ui/lines.js.map +1 -0
- package/dist/tui/ui/shell/chrome.d.ts +61 -0
- package/dist/tui/ui/shell/chrome.d.ts.map +1 -0
- package/dist/tui/ui/shell/chrome.js +272 -0
- package/dist/tui/ui/shell/chrome.js.map +1 -0
- package/dist/tui/ui/shell/widgets.d.ts +75 -0
- package/dist/tui/ui/shell/widgets.d.ts.map +1 -0
- package/dist/tui/ui/shell/widgets.js +160 -0
- package/dist/tui/ui/shell/widgets.js.map +1 -0
- package/dist/tui/ui/views/about.d.ts +20 -0
- package/dist/tui/ui/views/about.d.ts.map +1 -0
- package/dist/tui/ui/views/about.js +40 -0
- package/dist/tui/ui/views/about.js.map +1 -0
- package/dist/tui/ui/views/all.d.ts +17 -0
- package/dist/tui/ui/views/all.d.ts.map +1 -0
- package/dist/tui/ui/views/all.js +17 -0
- package/dist/tui/ui/views/all.js.map +1 -0
- package/dist/tui/ui/views/dashboard.d.ts +156 -0
- package/dist/tui/ui/views/dashboard.d.ts.map +1 -0
- package/dist/tui/ui/views/dashboard.js +599 -0
- package/dist/tui/ui/views/dashboard.js.map +1 -0
- package/dist/tui/ui/views/help.d.ts +17 -0
- package/dist/tui/ui/views/help.d.ts.map +1 -0
- package/dist/tui/ui/views/help.js +65 -0
- package/dist/tui/ui/views/help.js.map +1 -0
- package/dist/tui/ui/views/index.d.ts +42 -0
- package/dist/tui/ui/views/index.d.ts.map +1 -0
- package/dist/tui/ui/views/index.js +42 -0
- package/dist/tui/ui/views/index.js.map +1 -0
- package/dist/tui/ui/views/input.d.ts +6 -0
- package/dist/tui/ui/views/input.d.ts.map +1 -0
- package/dist/tui/ui/views/input.js +494 -0
- package/dist/tui/ui/views/input.js.map +1 -0
- package/dist/tui/ui/views/launch.d.ts +16 -0
- package/dist/tui/ui/views/launch.d.ts.map +1 -0
- package/dist/tui/ui/views/launch.js +43 -0
- package/dist/tui/ui/views/launch.js.map +1 -0
- package/dist/tui/ui/views/refusal.d.ts +20 -0
- package/dist/tui/ui/views/refusal.d.ts.map +1 -0
- package/dist/tui/ui/views/refusal.js +47 -0
- package/dist/tui/ui/views/refusal.js.map +1 -0
- package/dist/tui/ui/views/repos.d.ts +10 -0
- package/dist/tui/ui/views/repos.d.ts.map +1 -0
- package/dist/tui/ui/views/repos.js +93 -0
- package/dist/tui/ui/views/repos.js.map +1 -0
- package/dist/tui/ui/views/task.d.ts +17 -0
- package/dist/tui/ui/views/task.d.ts.map +1 -0
- package/dist/tui/ui/views/task.js +309 -0
- package/dist/tui/ui/views/task.js.map +1 -0
- package/dist/tui/ui/views/wordmark.d.ts +15 -0
- package/dist/tui/ui/views/wordmark.d.ts.map +1 -0
- package/dist/tui/ui/views/wordmark.js +50 -0
- package/dist/tui/ui/views/wordmark.js.map +1 -0
- package/dist/tui/ui/views/workspaces.d.ts +17 -0
- package/dist/tui/ui/views/workspaces.d.ts.map +1 -0
- package/dist/tui/ui/views/workspaces.js +127 -0
- package/dist/tui/ui/views/workspaces.js.map +1 -0
- package/dist/tui/ui/widgets/leaf-editor.d.ts +58 -0
- package/dist/tui/ui/widgets/leaf-editor.d.ts.map +1 -0
- package/dist/tui/ui/widgets/leaf-editor.js +119 -0
- package/dist/tui/ui/widgets/leaf-editor.js.map +1 -0
- package/dist/tui/ui/widgets/logs.d.ts +99 -0
- package/dist/tui/ui/widgets/logs.d.ts.map +1 -0
- package/dist/tui/ui/widgets/logs.js +291 -0
- package/dist/tui/ui/widgets/logs.js.map +1 -0
- package/dist/tui/ui/widgets/reads.d.ts +62 -0
- package/dist/tui/ui/widgets/reads.d.ts.map +1 -0
- package/dist/tui/ui/widgets/reads.js +122 -0
- package/dist/tui/ui/widgets/reads.js.map +1 -0
- package/dist/tui/ui/widgets/runs.d.ts +51 -0
- package/dist/tui/ui/widgets/runs.d.ts.map +1 -0
- package/dist/tui/ui/widgets/runs.js +86 -0
- package/dist/tui/ui/widgets/runs.js.map +1 -0
- package/dist/tui/ui/widgets/tree.d.ts +149 -0
- package/dist/tui/ui/widgets/tree.d.ts.map +1 -0
- package/dist/tui/ui/widgets/tree.js +584 -0
- package/dist/tui/ui/widgets/tree.js.map +1 -0
- 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"}
|