@elaraai/e3-ui-cli 1.0.72 → 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-DmcCFcnb.js → engine-Bm-cIDd_-DwUdGcTZ.js} +1 -1
- package/dist/app/assets/{index-BJNWHnRv.js → index-mj-YVVN1.js} +91 -91
- 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,584 @@
|
|
|
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 widget — rows from the row model `@elaraai/east-ui`
|
|
7
|
+
* shares with the browser (`flattenRows` inline, `flattenPaged` paged), so
|
|
8
|
+
* a value reads identically in both: the same labels, summaries, row ids
|
|
9
|
+
* and expand semantics. This module renders a window of rows with the
|
|
10
|
+
* scrollbar and the footer, and drives the tree from the keyboard and the
|
|
11
|
+
* command box: move / expand-or-next / collapse-or-parent / toggle / deep
|
|
12
|
+
* collapse, `/find` (server-side for paged values, in memory inline) with
|
|
13
|
+
* `n` / `N` and a held highlight, `/goto <row|N%>`, `/save`, the paged
|
|
14
|
+
* window requests, and the expand-set + top row persisted per
|
|
15
|
+
* `${ws}:${path}`.
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from 'node:fs';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import { parseFor, printFor, StringType } from '@elaraai/east';
|
|
22
|
+
import { fmtLeaf, humanize, keySignature, pageOfFlat, parseKeyInput, } from '@elaraai/east-ui/internal';
|
|
23
|
+
import { layoutOf } from '../../model/index.js';
|
|
24
|
+
import { PAGE_SIZE, treeModel, viewDataset } from '../../model/tree.js';
|
|
25
|
+
import { labelWidth, scrollIntoView } from '../../render/layout.js';
|
|
26
|
+
import { formatInt, formatSize, padEnd, percent } from '../../render/text.js';
|
|
27
|
+
import { repoEntry } from '../../state/persist.js';
|
|
28
|
+
import { b, d, t } from '../lines.js';
|
|
29
|
+
import { withScrollbar } from '../shell/widgets.js';
|
|
30
|
+
export { treeModel };
|
|
31
|
+
/** Context rows kept above a jump target. */
|
|
32
|
+
const JUMP_CONTEXT_ROWS = 2;
|
|
33
|
+
/** Rows the header lines, the dashed rule and the footer take in a tree view. */
|
|
34
|
+
export const TREE_CHROME_ROWS = 4;
|
|
35
|
+
/** How long a jump waits for its page. */
|
|
36
|
+
const JUMP_WAIT_MS = 10_000;
|
|
37
|
+
/** A leaf's display text: strings quoted, the rest as the row model prints them. */
|
|
38
|
+
export function leafText(leaf) {
|
|
39
|
+
return leaf.type === 'string' ? JSON.stringify(leaf.value) : fmtLeaf(leaf);
|
|
40
|
+
}
|
|
41
|
+
/** The value cell of a row. */
|
|
42
|
+
export function valueText(row) {
|
|
43
|
+
const tag = row.variantCtl !== undefined ? humanize(row.variantCtl.tag) : null;
|
|
44
|
+
if (row.leaf !== undefined) {
|
|
45
|
+
if (tag !== null && row.leaf.type === 'null')
|
|
46
|
+
return tag;
|
|
47
|
+
const text = leafText(row.leaf);
|
|
48
|
+
return tag !== null ? `${tag} · ${text}` : text;
|
|
49
|
+
}
|
|
50
|
+
if (row.opaque !== undefined)
|
|
51
|
+
return row.opaque;
|
|
52
|
+
if (row.kind === 'appendArray' || row.kind === 'appendDict')
|
|
53
|
+
return '';
|
|
54
|
+
const summary = row.summary ?? '';
|
|
55
|
+
if (tag !== null && !summary.startsWith(tag))
|
|
56
|
+
return summary === '' ? tag : `${tag} · ${summary}`;
|
|
57
|
+
return summary;
|
|
58
|
+
}
|
|
59
|
+
/** Whether a root row is inside the held match. */
|
|
60
|
+
function inMatch(row, match) {
|
|
61
|
+
if (match === null || row.depth !== 0)
|
|
62
|
+
return false;
|
|
63
|
+
const root = row.posinset - 1;
|
|
64
|
+
return root >= match.row && root < match.row + match.count;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Renders the visible window of a tree with its scrollbar.
|
|
68
|
+
*
|
|
69
|
+
* @param model - The tree model
|
|
70
|
+
* @param tree - The tree UI (selection, top, held match)
|
|
71
|
+
* @param loading - Pages being loaded (the first placeholder of each says so)
|
|
72
|
+
* @param visible - Rows in the window
|
|
73
|
+
* @param width - The row width including the scrollbar column
|
|
74
|
+
* @param g - The glyph set
|
|
75
|
+
* @param changed - Row ids with pending edits (`┆` in the gutter)
|
|
76
|
+
* @returns The lines
|
|
77
|
+
*/
|
|
78
|
+
export function renderTreeRows(model, tree, loading, visible, width, g, changed, decor) {
|
|
79
|
+
const lw = labelWidth(width);
|
|
80
|
+
const vw = Math.max(1, width - lw - 2);
|
|
81
|
+
const top = Math.max(0, Math.min(tree.top, Math.max(0, model.total - visible)));
|
|
82
|
+
const lines = [];
|
|
83
|
+
const noted = new Set();
|
|
84
|
+
for (let i = top; i < top + visible; i++) {
|
|
85
|
+
const at = model.at(i);
|
|
86
|
+
if (at === null) {
|
|
87
|
+
lines.push([t(' '.repeat(width - 1))]);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const selected = i === tree.sel;
|
|
91
|
+
if (at.kind === 'placeholder') {
|
|
92
|
+
const page = Math.floor(at.globalRow / PAGE_SIZE);
|
|
93
|
+
let note = '';
|
|
94
|
+
if (loading.includes(page) && !noted.has(page)) {
|
|
95
|
+
noted.add(page);
|
|
96
|
+
note = ` loading p${page}`;
|
|
97
|
+
}
|
|
98
|
+
lines.push([
|
|
99
|
+
selected ? b(g.sel, 'brand') : t(' '),
|
|
100
|
+
d(padEnd(`${g.placeholder} ${g.placeholder.repeat(26)}`, lw)),
|
|
101
|
+
d(padEnd(`${g.placeholder.repeat(36)}${note}`, vw)),
|
|
102
|
+
]);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const row = at.row;
|
|
106
|
+
const twist = row.kind === 'appendArray' || row.kind === 'appendDict' ? g.add
|
|
107
|
+
: row.expandable ? (row.expanded ? g.expanded : g.collapsed)
|
|
108
|
+
: g.leaf;
|
|
109
|
+
const label = padEnd(`${' '.repeat(row.depth)}${twist} ${row.label}`, lw);
|
|
110
|
+
const deco = decor?.(row, selected) ?? null;
|
|
111
|
+
const hint = deco?.hint ?? '';
|
|
112
|
+
const valueWidth = hint === '' ? vw : Math.max(1, vw - hint.length - 4);
|
|
113
|
+
const value = padEnd(deco?.value ?? valueText(row), valueWidth);
|
|
114
|
+
const matched = inMatch(row, tree.match);
|
|
115
|
+
const marker = selected ? b(g.sel, 'brand') : changed?.has(row.id) === true ? b(g.edited, 'warn') : t(' ');
|
|
116
|
+
const labelSpan = selected ? b(label, matched ? 'brand' : undefined) : matched ? b(label, 'brand') : t(label);
|
|
117
|
+
const isValue = row.leaf !== undefined || deco?.value !== undefined;
|
|
118
|
+
const valueSpan = isValue ? (selected ? b(value) : t(value)) : d(value);
|
|
119
|
+
const line = [marker, labelSpan, valueSpan];
|
|
120
|
+
if (hint !== '')
|
|
121
|
+
line.push(t(padEnd('', vw - valueWidth - hint.length)), deco?.tone === 'muted' || deco?.tone === undefined ? d(hint) : b(hint, deco.tone));
|
|
122
|
+
lines.push(line);
|
|
123
|
+
}
|
|
124
|
+
return withScrollbar(lines, width, model.total, visible, top, g);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The footer line: `rows a–b of N · p% · pK ▒ loading · match held until esc`
|
|
128
|
+
* with the toolbar words flush right.
|
|
129
|
+
*
|
|
130
|
+
* @param model - The tree model
|
|
131
|
+
* @param tree - The tree UI
|
|
132
|
+
* @param loading - Pages being loaded
|
|
133
|
+
* @param visible - Rows in the window
|
|
134
|
+
* @param width - The row width
|
|
135
|
+
* @param g - The glyph set
|
|
136
|
+
* @param saveHint - The save word (`s save .beast2`), or empty
|
|
137
|
+
* @returns The line
|
|
138
|
+
*/
|
|
139
|
+
export function treeFooter(model, tree, loading, visible, width, g, saveHint) {
|
|
140
|
+
const total = model.total;
|
|
141
|
+
const top = Math.max(0, Math.min(tree.top, Math.max(0, total - visible)));
|
|
142
|
+
const first = total === 0 ? 0 : top + 1;
|
|
143
|
+
const last = Math.min(total, top + visible);
|
|
144
|
+
const parts = [`rows ${formatInt(first)}–${formatInt(last)} of ${formatInt(total)}`];
|
|
145
|
+
if (model.paged !== null && total > visible)
|
|
146
|
+
parts.push(percent(first, total));
|
|
147
|
+
if (loading.length > 0)
|
|
148
|
+
parts.push(`p${loading[0]} ${g.loading} loading`);
|
|
149
|
+
if (tree.match !== null)
|
|
150
|
+
parts.push('match held until esc');
|
|
151
|
+
const left = ` ${parts.join(` ${g.sep} `)}`;
|
|
152
|
+
const right = `${g.expanded} expand all ${g.collapsed} collapse all${saveHint === '' ? '' : ` ${saveHint}`} `;
|
|
153
|
+
const gap = Math.max(1, width - left.length - right.length);
|
|
154
|
+
return [d(left), t(' '.repeat(gap)), d(right)];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The tree context of the current view (the task view's Output tab or an
|
|
158
|
+
* input view).
|
|
159
|
+
*
|
|
160
|
+
* @param state - The store state
|
|
161
|
+
* @returns The context, or null
|
|
162
|
+
*/
|
|
163
|
+
export function treeContext(state) {
|
|
164
|
+
const shown = viewDataset(state);
|
|
165
|
+
const v = state.view;
|
|
166
|
+
if (shown === null || (v.kind !== 'task' && v.kind !== 'input'))
|
|
167
|
+
return null;
|
|
168
|
+
let data = state.data.dataset[shown.ws]?.[shown.path];
|
|
169
|
+
const edit = state.edit;
|
|
170
|
+
const editingHere = edit !== null && edit.ws === shown.ws && edit.path === shown.path;
|
|
171
|
+
// While editing, the tree shows the draft (the base plus the pending ops).
|
|
172
|
+
if (editingHere && data !== undefined)
|
|
173
|
+
data = { ...data, mode: { kind: 'inline', root: edit.root, value: edit.draft } };
|
|
174
|
+
const banner = editingHere && edit.conflict !== null ? 1 : 0;
|
|
175
|
+
const visible = Math.max(1, layoutOf(state).bodyRows - TREE_CHROME_ROWS - banner);
|
|
176
|
+
return {
|
|
177
|
+
ws: shown.ws,
|
|
178
|
+
path: shown.path,
|
|
179
|
+
editable: shown.editable,
|
|
180
|
+
tree: v.tree,
|
|
181
|
+
data,
|
|
182
|
+
visible,
|
|
183
|
+
setTree: (tree) => ({ ...v, tree }),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/** The persisted-state key of a tree. */
|
|
187
|
+
export function treeStorageKey(ws, path) {
|
|
188
|
+
return `${ws}:${path}`;
|
|
189
|
+
}
|
|
190
|
+
/** Remembers a tree's expand-set and top row. */
|
|
191
|
+
function persistTree(controller, ctx, tree) {
|
|
192
|
+
const persist = controller.deps.persist;
|
|
193
|
+
const session = controller.state().session;
|
|
194
|
+
if (persist === null || session === null)
|
|
195
|
+
return;
|
|
196
|
+
persist.update(s => {
|
|
197
|
+
repoEntry(s, session.stateKey).trees[treeStorageKey(ctx.ws, ctx.path)] = { open: tree.open, topRow: tree.top, baseDepth: tree.baseDepth, touched: controller.deps.now() };
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Restores a tree's remembered expand-set and top row into the current view.
|
|
202
|
+
*
|
|
203
|
+
* @param controller - The controller
|
|
204
|
+
* @param ws - The workspace
|
|
205
|
+
* @param dataset - The dataset path
|
|
206
|
+
*/
|
|
207
|
+
export function restoreTree(controller, ws, dataset) {
|
|
208
|
+
const persist = controller.deps.persist;
|
|
209
|
+
const session = controller.state().session;
|
|
210
|
+
if (persist === null || session === null)
|
|
211
|
+
return;
|
|
212
|
+
const remembered = persist.state.repos[session.stateKey]?.trees[treeStorageKey(ws, dataset)];
|
|
213
|
+
if (remembered === undefined)
|
|
214
|
+
return;
|
|
215
|
+
controller.dispatch({ type: 'tree/restore', open: remembered.open, top: remembered.topRow, baseDepth: remembered.baseDepth });
|
|
216
|
+
}
|
|
217
|
+
/** Requests the pages around the window (one page of margin each side). */
|
|
218
|
+
function requestWindow(controller, ctx, model, top) {
|
|
219
|
+
if (model.paged === null || model.total === 0)
|
|
220
|
+
return;
|
|
221
|
+
const { flat, paging } = model.paged;
|
|
222
|
+
const startFlat = Math.max(0, Math.min(top, model.total - 1));
|
|
223
|
+
const endFlat = Math.min(model.total - 1, startFlat + ctx.visible);
|
|
224
|
+
const firstPage = Math.max(0, pageOfFlat(flat.prefix, startFlat) - 1);
|
|
225
|
+
const lastPage = Math.min(flat.pageCount - 1, pageOfFlat(flat.prefix, endFlat) + 1);
|
|
226
|
+
controller.deps.feeds.datasets.needRows(ctx.ws, ctx.path, firstPage * paging.pageSize, Math.min(paging.totalRows, (lastPage + 1) * paging.pageSize));
|
|
227
|
+
}
|
|
228
|
+
/** Writes a tree UI back, persists it, and requests the window's pages. */
|
|
229
|
+
function commit(controller, ctx, model, tree) {
|
|
230
|
+
const total = model?.total ?? 0;
|
|
231
|
+
const top = Math.max(0, Math.min(tree.top, Math.max(0, total - ctx.visible)));
|
|
232
|
+
const sel = Math.max(0, Math.min(tree.sel, Math.max(0, total - 1)));
|
|
233
|
+
const next = { ...tree, sel, top };
|
|
234
|
+
controller.dispatch({ type: 'view/set', view: ctx.setTree(next) });
|
|
235
|
+
persistTree(controller, ctx, next);
|
|
236
|
+
if (model !== null)
|
|
237
|
+
requestWindow(controller, ctx, model, top);
|
|
238
|
+
}
|
|
239
|
+
/** Selects a flat row, scrolling minimally (or to `top` when given). */
|
|
240
|
+
function select(controller, ctx, model, sel, top) {
|
|
241
|
+
const clamped = Math.max(0, Math.min(sel, Math.max(0, model.total - 1)));
|
|
242
|
+
commit(controller, ctx, model, { ...ctx.tree, sel: clamped, top: top ?? scrollIntoView(ctx.tree.top, clamped, ctx.visible, model.total) });
|
|
243
|
+
}
|
|
244
|
+
/** Jumps to a root row: it lands two rows below the top of the window (the anchor keeps it there as pages arrive). */
|
|
245
|
+
function jumpToRoot(controller, ctx, model, root) {
|
|
246
|
+
const flat = model.flatOfRoot(root);
|
|
247
|
+
if (flat === undefined)
|
|
248
|
+
return false;
|
|
249
|
+
select(controller, ctx, model, flat, Math.max(0, flat - JUMP_CONTEXT_ROWS));
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
/** `G`: requests the last page, waits for it, then selects the very last row. */
|
|
253
|
+
async function jumpToEnd(controller, first, firstModel) {
|
|
254
|
+
if (firstModel.paged !== null) {
|
|
255
|
+
const lastRoot = Math.max(0, firstModel.rootCount - 1);
|
|
256
|
+
controller.deps.feeds.datasets.needRows(first.ws, first.path, Math.max(0, lastRoot - PAGE_SIZE), lastRoot + 1);
|
|
257
|
+
const deadline = Date.now() + JUMP_WAIT_MS;
|
|
258
|
+
for (;;) {
|
|
259
|
+
const ctx = treeContext(controller.state());
|
|
260
|
+
if (ctx === null || ctx.ws !== first.ws || ctx.path !== first.path)
|
|
261
|
+
return;
|
|
262
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
263
|
+
if (model === null)
|
|
264
|
+
return;
|
|
265
|
+
const flat = model.flatOfRoot(lastRoot);
|
|
266
|
+
if (flat === undefined || model.at(flat)?.kind === 'model' || Date.now() > deadline) {
|
|
267
|
+
select(controller, ctx, model, model.total - 1, Math.max(0, model.total - ctx.visible));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
await new Promise(resolve => setTimeout(resolve, 15));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
select(controller, first, firstModel, firstModel.total - 1, Math.max(0, firstModel.total - first.visible));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Scrolls the tree by rows (the wheel) or to a row (a thumb drag), keeping
|
|
277
|
+
* the selection inside the window.
|
|
278
|
+
*
|
|
279
|
+
* @param state - The store state
|
|
280
|
+
* @param controller - The controller
|
|
281
|
+
* @param to - `{ delta }` rows, or `{ top }` absolute
|
|
282
|
+
*/
|
|
283
|
+
export function scrollTree(state, controller, to) {
|
|
284
|
+
const ctx = treeContext(state);
|
|
285
|
+
if (ctx === null)
|
|
286
|
+
return;
|
|
287
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
288
|
+
if (model === null)
|
|
289
|
+
return;
|
|
290
|
+
const max = Math.max(0, model.total - ctx.visible);
|
|
291
|
+
if ('top' in to && to.top >= max && model.paged !== null) {
|
|
292
|
+
// The bottom of the track means the end of the collection, which is
|
|
293
|
+
// further than the placeholders suggest until the last page lands.
|
|
294
|
+
void jumpToEnd(controller, ctx, model);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const top = Math.max(0, Math.min('delta' in to ? ctx.tree.top + to.delta : to.top, max));
|
|
298
|
+
const sel = Math.max(top, Math.min(ctx.tree.sel, top + ctx.visible - 1, Math.max(0, model.total - 1)));
|
|
299
|
+
commit(controller, ctx, model, { ...ctx.tree, sel, top });
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* A click on a tree row: selects it; on its twist, toggles it.
|
|
303
|
+
*
|
|
304
|
+
* @param state - The store state
|
|
305
|
+
* @param controller - The controller
|
|
306
|
+
* @param flat - The flat row clicked
|
|
307
|
+
* @param onTwist - Whether the twist cell was clicked
|
|
308
|
+
*/
|
|
309
|
+
export function clickTree(state, controller, flat, onTwist) {
|
|
310
|
+
const ctx = treeContext(state);
|
|
311
|
+
if (ctx === null)
|
|
312
|
+
return;
|
|
313
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
314
|
+
if (model === null)
|
|
315
|
+
return;
|
|
316
|
+
const at = model.at(flat);
|
|
317
|
+
if (at === null)
|
|
318
|
+
return;
|
|
319
|
+
commit(controller, ctx, model, { ...ctx.tree, sel: flat });
|
|
320
|
+
if (onTwist && at.kind === 'model' && at.row.expandable) {
|
|
321
|
+
controller.dispatch({ type: 'tree/toggle', id: at.row.id, expanded: !at.row.expanded });
|
|
322
|
+
afterToggle(controller, ctx);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* The footer toolbar: expand all / collapse all.
|
|
327
|
+
*
|
|
328
|
+
* @param state - The store state
|
|
329
|
+
* @param controller - The controller
|
|
330
|
+
* @param action - Which word was clicked
|
|
331
|
+
*/
|
|
332
|
+
export function treeToolbar(state, controller, action) {
|
|
333
|
+
const ctx = treeContext(state);
|
|
334
|
+
if (ctx === null)
|
|
335
|
+
return;
|
|
336
|
+
controller.dispatch({ type: action === 'expandAll' ? 'tree/expandAll' : 'tree/collapseAll' });
|
|
337
|
+
afterToggle(controller, ctx);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Handles a key action on the tree.
|
|
341
|
+
*
|
|
342
|
+
* @param action - The action
|
|
343
|
+
* @param state - The store state
|
|
344
|
+
* @param controller - The controller
|
|
345
|
+
* @returns `true` when handled
|
|
346
|
+
*/
|
|
347
|
+
export function treeKey(action, state, controller) {
|
|
348
|
+
const ctx = treeContext(state);
|
|
349
|
+
if (ctx === null)
|
|
350
|
+
return false;
|
|
351
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
352
|
+
if (action.kind === 'back') {
|
|
353
|
+
if (ctx.tree.match === null)
|
|
354
|
+
return false;
|
|
355
|
+
controller.dispatch({ type: 'tree/match', match: null });
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
if (action.kind === 'save') {
|
|
359
|
+
void controller.execute('/save');
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
if (model === null)
|
|
363
|
+
return action.kind === 'move' || action.kind === 'expand' || action.kind === 'collapse' || action.kind === 'toggle' || action.kind === 'collapseDeep' || action.kind === 'next' || action.kind === 'prev';
|
|
364
|
+
const at = model.at(ctx.tree.sel);
|
|
365
|
+
const row = at?.kind === 'model' ? at.row : null;
|
|
366
|
+
switch (action.kind) {
|
|
367
|
+
case 'move': {
|
|
368
|
+
if (action.op === 'end') {
|
|
369
|
+
void jumpToEnd(controller, ctx, model);
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
const last = Math.max(0, model.total - 1);
|
|
373
|
+
const page = Math.max(1, ctx.visible - 1);
|
|
374
|
+
const sel = ctx.tree.sel;
|
|
375
|
+
const next = action.op === 'up' ? sel - 1 : action.op === 'down' ? sel + 1
|
|
376
|
+
: action.op === 'pageUp' ? sel - page : action.op === 'pageDown' ? sel + page
|
|
377
|
+
: 0;
|
|
378
|
+
select(controller, ctx, model, Math.max(0, Math.min(next, last)), action.op === 'home' ? 0 : undefined);
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
case 'expand': {
|
|
382
|
+
if (row !== null && row.expandable && !row.expanded) {
|
|
383
|
+
controller.dispatch({ type: 'tree/toggle', id: row.id, expanded: true });
|
|
384
|
+
afterToggle(controller, ctx);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
select(controller, ctx, model, ctx.tree.sel + 1);
|
|
388
|
+
}
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
case 'collapse': {
|
|
392
|
+
if (row !== null && row.expandable && row.expanded) {
|
|
393
|
+
controller.dispatch({ type: 'tree/toggle', id: row.id, expanded: false });
|
|
394
|
+
afterToggle(controller, ctx);
|
|
395
|
+
}
|
|
396
|
+
else if (row !== null && row.parentId !== undefined) {
|
|
397
|
+
const parent = model.flatOfId(row.parentId);
|
|
398
|
+
if (parent !== undefined)
|
|
399
|
+
select(controller, ctx, model, parent);
|
|
400
|
+
}
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
case 'toggle': {
|
|
404
|
+
if (row !== null && row.expandable) {
|
|
405
|
+
controller.dispatch({ type: 'tree/toggle', id: row.id, expanded: !row.expanded });
|
|
406
|
+
afterToggle(controller, ctx);
|
|
407
|
+
}
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
410
|
+
case 'collapseDeep': {
|
|
411
|
+
if (row !== null && row.expandable) {
|
|
412
|
+
const descendants = [];
|
|
413
|
+
for (let i = ctx.tree.sel + 1; i < model.total; i++) {
|
|
414
|
+
const next = model.at(i);
|
|
415
|
+
if (next === null || next.kind !== 'model' || next.row.depth <= row.depth)
|
|
416
|
+
break;
|
|
417
|
+
if (next.row.expandable)
|
|
418
|
+
descendants.push(next.row.id);
|
|
419
|
+
}
|
|
420
|
+
controller.dispatch({ type: 'tree/toggle', id: row.id, expanded: false, descendants });
|
|
421
|
+
afterToggle(controller, ctx);
|
|
422
|
+
}
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
case 'next':
|
|
426
|
+
case 'prev': {
|
|
427
|
+
const match = ctx.tree.match;
|
|
428
|
+
if (match === null || match.count === 0) {
|
|
429
|
+
controller.toast('no match held — /find <key> first', 'warn');
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
const index = ((match.index + (action.kind === 'next' ? 1 : -1)) % match.count + match.count) % match.count;
|
|
433
|
+
controller.dispatch({ type: 'tree/match', match: { ...match, index } });
|
|
434
|
+
const after = treeContext(controller.state());
|
|
435
|
+
if (after !== null)
|
|
436
|
+
jumpToRoot(controller, after, treeModel(after.data, after.tree, after.editable) ?? model, match.row + index);
|
|
437
|
+
return true;
|
|
438
|
+
}
|
|
439
|
+
default:
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/** After an expand-set change: persist and refresh the window's pages. */
|
|
444
|
+
function afterToggle(controller, before) {
|
|
445
|
+
const ctx = treeContext(controller.state());
|
|
446
|
+
if (ctx === null)
|
|
447
|
+
return;
|
|
448
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
449
|
+
commit(controller, ctx, model, ctx.tree);
|
|
450
|
+
void before;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Parses `/find` text for a key type: a quoted string is an exact key,
|
|
454
|
+
* `a|b` are struct-key fields, anything else goes to the shared grammar.
|
|
455
|
+
*
|
|
456
|
+
* @param keyType - The collection's key type
|
|
457
|
+
* @param text - The typed text
|
|
458
|
+
* @returns The wire query, or the hint to show
|
|
459
|
+
*/
|
|
460
|
+
export function parseFindText(keyType, text) {
|
|
461
|
+
const trimmed = text.trim();
|
|
462
|
+
if (keyType.type === 'String' && /^".*"$/.test(trimmed)) {
|
|
463
|
+
const parsed = parseFor(StringType)(trimmed);
|
|
464
|
+
if (parsed.success)
|
|
465
|
+
return { kind: 'query', query: { key: printFor(StringType)(parsed.value) } };
|
|
466
|
+
}
|
|
467
|
+
if (keyType.type === 'Struct')
|
|
468
|
+
return parseKeyInput(keyType, trimmed.replace(/\|/g, ','));
|
|
469
|
+
return parseKeyInput(keyType, trimmed);
|
|
470
|
+
}
|
|
471
|
+
/** The query's form word for the footer / toast. */
|
|
472
|
+
function formOf(query) {
|
|
473
|
+
return 'key' in query ? 'exact' : 'fields' in query ? 'fields' : 'prefix';
|
|
474
|
+
}
|
|
475
|
+
/** The `/save` target: `<ws>.<name>.beast2` in the working directory unless a file is given. */
|
|
476
|
+
export function saveTarget(ws, dataset, file) {
|
|
477
|
+
if (file !== undefined)
|
|
478
|
+
return path.resolve(file);
|
|
479
|
+
const name = dataset.replace(/^\.(inputs|tasks)\./, '').replace(/\.output$/, '');
|
|
480
|
+
return path.resolve(`${ws}.${name}.beast2`);
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Handles `/find`, `/goto` and `/save` on the tree.
|
|
484
|
+
*
|
|
485
|
+
* @param command - The parsed command
|
|
486
|
+
* @param state - The store state
|
|
487
|
+
* @param controller - The controller
|
|
488
|
+
* @returns `true` when handled
|
|
489
|
+
*/
|
|
490
|
+
export async function treeCommand(command, state, controller) {
|
|
491
|
+
const ctx = treeContext(state);
|
|
492
|
+
if (ctx === null)
|
|
493
|
+
return false;
|
|
494
|
+
const model = treeModel(ctx.data, ctx.tree, ctx.editable);
|
|
495
|
+
switch (command.name) {
|
|
496
|
+
case 'find': {
|
|
497
|
+
if (model === null || model.keyType === null) {
|
|
498
|
+
controller.toast('/find needs a Set or Dict value — /goto <row> moves by row', 'warn');
|
|
499
|
+
return true;
|
|
500
|
+
}
|
|
501
|
+
const parsed = parseFindText(model.keyType, command.query);
|
|
502
|
+
if (parsed.kind === 'hint') {
|
|
503
|
+
controller.toast(`${parsed.hint} — key is ${keySignature(model.keyType)}`, 'warn');
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
const result = await controller.deps.feeds.datasets.findKey(ctx.ws, ctx.path, parsed.query);
|
|
507
|
+
const form = formOf(parsed.query);
|
|
508
|
+
const after = treeContext(controller.state());
|
|
509
|
+
const afterModel = after === null ? null : treeModel(after.data, after.tree, after.editable);
|
|
510
|
+
if (after === null || afterModel === null)
|
|
511
|
+
return true;
|
|
512
|
+
if (!result.found) {
|
|
513
|
+
controller.toast(`no ${form} match for ${command.query} — nearest row ${formatInt(Math.min(result.row, Math.max(0, afterModel.rootCount - 1)) + 1)}`, 'warn');
|
|
514
|
+
controller.dispatch({ type: 'tree/match', match: null });
|
|
515
|
+
jumpToRoot(controller, after, afterModel, Math.min(result.row, Math.max(0, afterModel.rootCount - 1)));
|
|
516
|
+
return true;
|
|
517
|
+
}
|
|
518
|
+
controller.dispatch({ type: 'tree/match', match: { row: result.row, count: result.count, index: 0, text: command.query, form } });
|
|
519
|
+
const held = treeContext(controller.state());
|
|
520
|
+
if (held !== null)
|
|
521
|
+
jumpToRoot(controller, held, afterModel, result.row);
|
|
522
|
+
controller.toast(`${form} ${g(controller).sep} ${formatInt(result.count)} match${result.count === 1 ? '' : 'es'} from row ${formatInt(result.row + 1)} ${g(controller).sep} n N next/prev ${g(controller).sep} esc`, 'info');
|
|
523
|
+
return true;
|
|
524
|
+
}
|
|
525
|
+
case 'goto': {
|
|
526
|
+
if (model === null) {
|
|
527
|
+
controller.toast('nothing to go to yet', 'warn');
|
|
528
|
+
return true;
|
|
529
|
+
}
|
|
530
|
+
const roots = model.rootCount;
|
|
531
|
+
const root = command.target.kind === 'row'
|
|
532
|
+
? command.target.row - 1
|
|
533
|
+
: Math.round((command.target.percent / 100) * Math.max(0, roots - 1));
|
|
534
|
+
if (root < 0 || root >= roots) {
|
|
535
|
+
controller.toast(`row ${formatInt(root + 1)} is past the end — ${formatInt(roots)} rows`, 'warn');
|
|
536
|
+
return true;
|
|
537
|
+
}
|
|
538
|
+
if (!jumpToRoot(controller, ctx, model, root))
|
|
539
|
+
controller.toast('that row is not loaded yet', 'warn');
|
|
540
|
+
return true;
|
|
541
|
+
}
|
|
542
|
+
case 'save': {
|
|
543
|
+
const target = saveTarget(ctx.ws, ctx.path, command.file);
|
|
544
|
+
if (fs.existsSync(target) && !command.force) {
|
|
545
|
+
controller.dispatch({ type: 'command/confirm', confirm: { question: `overwrite ${target}?`, command: `/save "${target}" --force` } });
|
|
546
|
+
return true;
|
|
547
|
+
}
|
|
548
|
+
if (ctx.data === undefined || ctx.data.hash === null) {
|
|
549
|
+
controller.toast('nothing to save — the dataset has no value', 'warn');
|
|
550
|
+
return true;
|
|
551
|
+
}
|
|
552
|
+
const bytes = await controller.deps.feeds.datasets.bytes(ctx.ws, ctx.path);
|
|
553
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
554
|
+
fs.writeFileSync(target, bytes);
|
|
555
|
+
controller.toast(`saved ${formatSize(bytes.length)} to ${target}`, 'pos');
|
|
556
|
+
return true;
|
|
557
|
+
}
|
|
558
|
+
default:
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
/** The glyphs of a controller (a shorthand). */
|
|
563
|
+
function g(controller) {
|
|
564
|
+
return controller.deps.glyphs;
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* `⏎` on a not-indexed value loads it whole.
|
|
568
|
+
*
|
|
569
|
+
* @param state - The store state
|
|
570
|
+
* @param controller - The controller
|
|
571
|
+
* @returns `true` when a load was started
|
|
572
|
+
*/
|
|
573
|
+
export function treeOpen(state, controller) {
|
|
574
|
+
const ctx = treeContext(state);
|
|
575
|
+
if (ctx === null || ctx.data === undefined || ctx.data.mode.kind !== 'not-indexed')
|
|
576
|
+
return false;
|
|
577
|
+
if (!ctx.data.mode.loadable) {
|
|
578
|
+
controller.toast(`too large to load whole (${formatSize(ctx.data.size)}) — /save writes the bytes`, 'warn');
|
|
579
|
+
return true;
|
|
580
|
+
}
|
|
581
|
+
void controller.deps.feeds.datasets.loadWhole(ctx.ws, ctx.path);
|
|
582
|
+
return true;
|
|
583
|
+
}
|
|
584
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../../src/tui/ui/widgets/tree.ts"],"names":[],"mappings":"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"}
|