@elaraai/east-ui 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 +1 -1
- package/dist/src/collections/value-tree/flatten.d.ts +354 -0
- package/dist/src/collections/value-tree/flatten.d.ts.map +1 -0
- package/dist/src/collections/value-tree/flatten.js +520 -0
- package/dist/src/collections/value-tree/flatten.js.map +1 -0
- package/dist/src/collections/value-tree/index.d.ts +84 -0
- package/dist/src/collections/value-tree/index.d.ts.map +1 -1
- package/dist/src/collections/value-tree/index.js +53 -0
- package/dist/src/collections/value-tree/index.js.map +1 -1
- package/dist/src/collections/value-tree/key-search.d.ts +112 -0
- package/dist/src/collections/value-tree/key-search.d.ts.map +1 -0
- package/dist/src/collections/value-tree/key-search.js +251 -0
- package/dist/src/collections/value-tree/key-search.js.map +1 -0
- package/dist/src/internal.d.ts +2 -0
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +2 -0
- package/dist/src/internal.js.map +1 -1
- package/dist/src/runtime/collections/value-tree.d.ts +17 -0
- package/dist/src/runtime/collections/value-tree.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,520 @@
|
|
|
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 ValueTree ROW MODEL — renderer-agnostic row math over the materialized
|
|
7
|
+
* node tree (#719).
|
|
8
|
+
*
|
|
9
|
+
* A `ValueTreeNodeValue` is a tree; every renderer shows it as a flat list of
|
|
10
|
+
* one-line rows: the expanded nodes depth-first, each with an end-user label
|
|
11
|
+
* (`humanize`d struct fields, content-derived array item titles, dict keys
|
|
12
|
+
* verbatim), a muted summary for branches (`Press · 2.5 · Running`,
|
|
13
|
+
* `3 items`, `Not set`), the typed path an edit reports, and the option /
|
|
14
|
+
* variant controls collapsed into the row. `flattenRows` produces that list
|
|
15
|
+
* for an inline value; `flattenPaged` produces it page by page for a
|
|
16
|
+
* collection root whose rows arrive in windows, with one placeholder row per
|
|
17
|
+
* unloaded root so the extent always spans the whole collection.
|
|
18
|
+
*
|
|
19
|
+
* This module has no DOM and no React: the browser renderer
|
|
20
|
+
* (`east-ui-components`) and the terminal (`e3-ui-cli`) both consume it, so a
|
|
21
|
+
* value reads identically in each — same labels, same summaries, same
|
|
22
|
+
* `pathKey` identities, same expand semantics.
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
import { some, variant } from "@elaraai/east";
|
|
27
|
+
/** Rows at depth < this start expanded when the host sets no `openDepth`
|
|
28
|
+
* (per-row toggles and the toolbar override it). */
|
|
29
|
+
export const DEFAULT_OPEN_DEPTH = 1;
|
|
30
|
+
/** Leaf preview parts a struct row's summary surfaces. */
|
|
31
|
+
export const PREVIEW_PARTS = 3;
|
|
32
|
+
/**
|
|
33
|
+
* The stable text identity of a node path — the row id.
|
|
34
|
+
*
|
|
35
|
+
* @param steps - The path steps
|
|
36
|
+
* @returns `.field`, `[index]`, `{key}`, `?` (some) and `!` (tag) joined; `$` for the root
|
|
37
|
+
*/
|
|
38
|
+
export function pathKey(steps) {
|
|
39
|
+
let out = "";
|
|
40
|
+
for (const s of steps) {
|
|
41
|
+
if (s.type === "field")
|
|
42
|
+
out += `.${s.value}`;
|
|
43
|
+
else if (s.type === "index")
|
|
44
|
+
out += `[${s.value}]`;
|
|
45
|
+
else if (s.type === "key")
|
|
46
|
+
out += `{${s.value}}`;
|
|
47
|
+
else if (s.type === "some")
|
|
48
|
+
out += "?";
|
|
49
|
+
else
|
|
50
|
+
out += "!";
|
|
51
|
+
}
|
|
52
|
+
return out === "" ? "$" : out;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* "flowRate" / "flow_rate" → "Flow rate" — end-user field labels. Dict keys
|
|
56
|
+
* are user data and stay verbatim.
|
|
57
|
+
*
|
|
58
|
+
* @param name - A struct field name
|
|
59
|
+
* @returns The humanized label
|
|
60
|
+
*/
|
|
61
|
+
export function humanize(name) {
|
|
62
|
+
const spaced = name
|
|
63
|
+
.replace(/[_-]+/g, " ")
|
|
64
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
65
|
+
.trim();
|
|
66
|
+
if (spaced === "")
|
|
67
|
+
return name;
|
|
68
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1).toLowerCase();
|
|
69
|
+
}
|
|
70
|
+
/** The payload of an option node's value, or undefined for `none`. */
|
|
71
|
+
function optionInner(node) {
|
|
72
|
+
const v = node.value.value;
|
|
73
|
+
return v.type === "some" ? v.value : undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Collapses option / variant wrappers into row controls, leaving the content
|
|
77
|
+
* node the row displays (or `emptyOption` for a none).
|
|
78
|
+
*
|
|
79
|
+
* @param raw - The node as materialized
|
|
80
|
+
* @param rawPath - The path to `raw`
|
|
81
|
+
* @returns The resolved node
|
|
82
|
+
*/
|
|
83
|
+
export function resolveNode(raw, rawPath) {
|
|
84
|
+
let node = raw;
|
|
85
|
+
let path = rawPath;
|
|
86
|
+
let variantCtl;
|
|
87
|
+
let optionCtl;
|
|
88
|
+
for (;;) {
|
|
89
|
+
if (node.type === "option") {
|
|
90
|
+
const inner = optionInner(node);
|
|
91
|
+
if (optionCtl === undefined)
|
|
92
|
+
optionCtl = { path, isSome: inner !== undefined };
|
|
93
|
+
if (inner === undefined) {
|
|
94
|
+
return { kind: "emptyOption", leaf: undefined, opaque: undefined, node, path, variantCtl, optionCtl };
|
|
95
|
+
}
|
|
96
|
+
path = [...path, some(null)];
|
|
97
|
+
node = inner;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (node.type === "variant") {
|
|
101
|
+
if (variantCtl === undefined) {
|
|
102
|
+
variantCtl = { path, tag: node.value.tag, tags: [...node.value.tags] };
|
|
103
|
+
}
|
|
104
|
+
path = [...path, variant("tag", null)];
|
|
105
|
+
node = node.value.value;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
const kind = node.type === "leaf" ? "leaf"
|
|
111
|
+
: node.type === "opaque" ? "opaque"
|
|
112
|
+
: node.type === "struct" ? "struct"
|
|
113
|
+
: node.type === "array" ? "array"
|
|
114
|
+
: "dict";
|
|
115
|
+
return {
|
|
116
|
+
kind,
|
|
117
|
+
leaf: node.type === "leaf" ? node.value : undefined,
|
|
118
|
+
opaque: node.type === "opaque" ? node.value : undefined,
|
|
119
|
+
node, path, variantCtl, optionCtl,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Unwraps option / variant wrappers to the content node (display only).
|
|
124
|
+
*
|
|
125
|
+
* @param node - A node
|
|
126
|
+
* @returns The innermost non-wrapper node (a `none` option stays as is)
|
|
127
|
+
*/
|
|
128
|
+
export function contentOf(node) {
|
|
129
|
+
for (;;) {
|
|
130
|
+
if (node.type === "option") {
|
|
131
|
+
const inner = optionInner(node);
|
|
132
|
+
if (inner === undefined)
|
|
133
|
+
return node;
|
|
134
|
+
node = inner;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (node.type === "variant") {
|
|
138
|
+
node = node.value.value;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
return node;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Formats a leaf for display.
|
|
146
|
+
*
|
|
147
|
+
* @param leaf - The leaf value
|
|
148
|
+
* @returns Strings verbatim, numbers as printed, booleans as `true` / `false`,
|
|
149
|
+
* datetimes as `YYYY-MM-DD HH:MM:SS`, null as `—`
|
|
150
|
+
*/
|
|
151
|
+
export function fmtLeaf(leaf) {
|
|
152
|
+
switch (leaf.type) {
|
|
153
|
+
case "string": return leaf.value;
|
|
154
|
+
case "integer": return String(leaf.value);
|
|
155
|
+
case "float": return String(leaf.value);
|
|
156
|
+
case "boolean": return leaf.value ? "true" : "false";
|
|
157
|
+
case "datetime": return leaf.value.toISOString().replace("T", " ").slice(0, 19);
|
|
158
|
+
default: return "—";
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* One short preview token for a struct field's value, or undefined.
|
|
163
|
+
*
|
|
164
|
+
* @param node - The field's node
|
|
165
|
+
* @returns The token (a variant's humanized tag, a non-empty leaf's text), or undefined
|
|
166
|
+
*/
|
|
167
|
+
export function previewPart(node) {
|
|
168
|
+
for (;;) {
|
|
169
|
+
if (node.type === "option") {
|
|
170
|
+
const inner = optionInner(node);
|
|
171
|
+
if (inner === undefined)
|
|
172
|
+
return undefined;
|
|
173
|
+
node = inner;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
if (node.type === "variant")
|
|
179
|
+
return humanize(node.value.tag);
|
|
180
|
+
if (node.type === "leaf") {
|
|
181
|
+
if (node.value.type === "null")
|
|
182
|
+
return undefined;
|
|
183
|
+
const text = fmtLeaf(node.value);
|
|
184
|
+
return text === "" ? undefined : text;
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The muted value-cell text for a resolved branch node.
|
|
190
|
+
*
|
|
191
|
+
* @param node - A resolved struct / array / dict node
|
|
192
|
+
* @returns A ` · `-joined preview of the first leaf parts for structs (else
|
|
193
|
+
* `N fields`), `N items` for arrays, `N entries` for dicts, `Empty` when empty
|
|
194
|
+
*/
|
|
195
|
+
export function summaryOf(node) {
|
|
196
|
+
if (node.type === "struct") {
|
|
197
|
+
const parts = [];
|
|
198
|
+
for (const f of node.value.fields) {
|
|
199
|
+
const part = previewPart(f.node);
|
|
200
|
+
if (part !== undefined)
|
|
201
|
+
parts.push(part);
|
|
202
|
+
if (parts.length >= PREVIEW_PARTS)
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (parts.length > 0)
|
|
206
|
+
return parts.join(" · ");
|
|
207
|
+
const n = node.value.fields.length;
|
|
208
|
+
return n === 0 ? "Empty" : n === 1 ? "1 field" : `${n} fields`;
|
|
209
|
+
}
|
|
210
|
+
if (node.type === "array") {
|
|
211
|
+
const n = node.value.items.length;
|
|
212
|
+
return n === 0 ? "Empty" : n === 1 ? "1 item" : `${n} items`;
|
|
213
|
+
}
|
|
214
|
+
if (node.type === "dict") {
|
|
215
|
+
const n = node.value.entries.length;
|
|
216
|
+
return n === 0 ? "Empty" : n === 1 ? "1 entry" : `${n} entries`;
|
|
217
|
+
}
|
|
218
|
+
return "";
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* A content-derived title for an array element — its first non-empty string
|
|
222
|
+
* leaf (fields searched in order), else "Item N".
|
|
223
|
+
*
|
|
224
|
+
* @param node - The element node
|
|
225
|
+
* @param index - The element's 0-based index
|
|
226
|
+
* @returns The title
|
|
227
|
+
*/
|
|
228
|
+
export function itemTitle(node, index) {
|
|
229
|
+
const content = contentOf(node);
|
|
230
|
+
if (content.type === "struct") {
|
|
231
|
+
for (const f of content.value.fields) {
|
|
232
|
+
const c = contentOf(f.node);
|
|
233
|
+
if (c.type === "leaf" && c.value.type === "string" && c.value.value !== "") {
|
|
234
|
+
return c.value.value;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return `Item ${index + 1}`;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* The children of a compound node with their labels and binding steps.
|
|
242
|
+
*
|
|
243
|
+
* @param node - A struct / array / dict node (anything else has no children)
|
|
244
|
+
* @returns The child entries in display order
|
|
245
|
+
*/
|
|
246
|
+
export function childrenOf(node) {
|
|
247
|
+
if (node.type === "struct") {
|
|
248
|
+
return node.value.fields.map(f => ({ label: humanize(f.name), node: f.node, step: variant("field", f.name) }));
|
|
249
|
+
}
|
|
250
|
+
if (node.type === "array") {
|
|
251
|
+
return node.value.items.map((n, i) => ({ label: itemTitle(n, i), node: n, step: variant("index", BigInt(i)) }));
|
|
252
|
+
}
|
|
253
|
+
if (node.type === "dict") {
|
|
254
|
+
// `label` is display, `key` the round-trippable step text; the
|
|
255
|
+
// fallback covers host-constructed node shapes that predate `label`.
|
|
256
|
+
return node.value.entries.map(e => ({
|
|
257
|
+
label: e.label ?? e.key,
|
|
258
|
+
node: e.node,
|
|
259
|
+
step: variant("key", e.key),
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
return [];
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* The "Add item" / "Add entry" ghost row an expanded editable collection
|
|
266
|
+
* ends in.
|
|
267
|
+
*
|
|
268
|
+
* @param parentId - The collection row's id (undefined for a root collection)
|
|
269
|
+
* @param containerPath - The collection's path — the insert target
|
|
270
|
+
* @param kind - Array or dict append
|
|
271
|
+
* @param depth - The ghost row's depth
|
|
272
|
+
* @param posinset - Its 1-based sibling position
|
|
273
|
+
* @param setsize - The sibling count
|
|
274
|
+
* @returns The ghost row
|
|
275
|
+
*/
|
|
276
|
+
export function appendRowModel(parentId, containerPath, kind, depth, posinset, setsize) {
|
|
277
|
+
return {
|
|
278
|
+
id: `${parentId ?? "$"}/$append`,
|
|
279
|
+
parentId, depth,
|
|
280
|
+
label: kind === "appendArray" ? "Add item" : "Add entry",
|
|
281
|
+
kind,
|
|
282
|
+
leaf: undefined, opaque: undefined, summary: undefined,
|
|
283
|
+
path: containerPath, ownPath: containerPath,
|
|
284
|
+
variantCtl: undefined, optionCtl: undefined,
|
|
285
|
+
removable: false, expandable: false, expanded: false,
|
|
286
|
+
posinset, setsize,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Flattens one node's visible subtree, depth-first, into `ctx.rows`.
|
|
291
|
+
*
|
|
292
|
+
* @param ctx - The flatten context (expansion state, capabilities, output)
|
|
293
|
+
* @param label - The row's label
|
|
294
|
+
* @param raw - The node as materialized
|
|
295
|
+
* @param rawPath - The path to `raw` (the row's own path)
|
|
296
|
+
* @param parentId - The parent row's id
|
|
297
|
+
* @param depth - The row's depth
|
|
298
|
+
* @param removable - Whether the row may be removed from its container
|
|
299
|
+
* @param posinset - Its 1-based sibling position
|
|
300
|
+
* @param setsize - The sibling count
|
|
301
|
+
*/
|
|
302
|
+
export function visitNode(ctx, label, raw, rawPath, parentId, depth, removable, posinset, setsize) {
|
|
303
|
+
const r = resolveNode(raw, rawPath);
|
|
304
|
+
const id = pathKey(rawPath);
|
|
305
|
+
const kids = childrenOf(r.node);
|
|
306
|
+
const insertable = ctx.canInsert && (r.kind === "array" ||
|
|
307
|
+
(r.kind === "dict" && r.node.type === "dict" && r.node.value.editable));
|
|
308
|
+
const expandable = kids.length > 0 || insertable;
|
|
309
|
+
const expanded = expandable && (ctx.open[id] ?? depth < ctx.openDepth);
|
|
310
|
+
let summary = r.kind === "emptyOption" ? "Not set"
|
|
311
|
+
: (r.kind === "struct" || r.kind === "array" || r.kind === "dict") ? summaryOf(r.node)
|
|
312
|
+
: undefined;
|
|
313
|
+
// A content-derived item title already IS the first preview part —
|
|
314
|
+
// don't repeat it beside itself.
|
|
315
|
+
if (summary !== undefined && summary !== label && summary.startsWith(`${label} · `)) {
|
|
316
|
+
summary = summary.slice(label.length + 3);
|
|
317
|
+
}
|
|
318
|
+
else if (summary === label) {
|
|
319
|
+
summary = undefined;
|
|
320
|
+
}
|
|
321
|
+
ctx.rows.push({
|
|
322
|
+
id, parentId, depth, label,
|
|
323
|
+
kind: r.kind, leaf: r.leaf, opaque: r.opaque, summary,
|
|
324
|
+
path: r.path, ownPath: rawPath,
|
|
325
|
+
variantCtl: r.variantCtl, optionCtl: r.optionCtl,
|
|
326
|
+
removable, expandable, expanded,
|
|
327
|
+
posinset, setsize,
|
|
328
|
+
});
|
|
329
|
+
if (expanded) {
|
|
330
|
+
const kidsRemovable = ctx.canRemove && (r.kind === "array" ||
|
|
331
|
+
(r.kind === "dict" && r.node.type === "dict" && r.node.value.editable));
|
|
332
|
+
const total = kids.length + (insertable ? 1 : 0);
|
|
333
|
+
kids.forEach((k, i) => {
|
|
334
|
+
visitNode(ctx, k.label, k.node, [...r.path, k.step], id, depth + 1, kidsRemovable, i + 1, total);
|
|
335
|
+
});
|
|
336
|
+
if (insertable) {
|
|
337
|
+
ctx.rows.push(appendRowModel(id, r.path, r.kind === "array" ? "appendArray" : "appendDict", depth + 1, total, total));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Flattens the visible (expanded) rows of an inline tree, depth-first. A
|
|
343
|
+
* compound root lists its children directly (no synthetic top row); anything
|
|
344
|
+
* else is a single `Value` row. Expanded editable collections end in an
|
|
345
|
+
* append ghost row.
|
|
346
|
+
*
|
|
347
|
+
* @param root - The materialized root node
|
|
348
|
+
* @param open - Per-row expansion overrides keyed by row id
|
|
349
|
+
* @param openDepth - Rows at depth < this start expanded
|
|
350
|
+
* @param canRemove - Whether the host can remove elements / entries
|
|
351
|
+
* @param canInsert - Whether the host can append elements / entries
|
|
352
|
+
* @returns The visible rows in order
|
|
353
|
+
*/
|
|
354
|
+
export function flattenRows(root, open, openDepth, canRemove, canInsert) {
|
|
355
|
+
const ctx = { open, openDepth, canRemove, canInsert, rows: [] };
|
|
356
|
+
const rows = ctx.rows;
|
|
357
|
+
if (root.type === "struct" || root.type === "array" || root.type === "dict") {
|
|
358
|
+
const rootInsertable = canInsert && (root.type === "array" || (root.type === "dict" && root.value.editable));
|
|
359
|
+
const kidsRemovable = canRemove && (root.type === "array" || (root.type === "dict" && root.value.editable));
|
|
360
|
+
const kids = childrenOf(root);
|
|
361
|
+
const total = kids.length + (rootInsertable ? 1 : 0);
|
|
362
|
+
kids.forEach((k, i) => {
|
|
363
|
+
visitNode(ctx, k.label, k.node, [k.step], undefined, 0, kidsRemovable, i + 1, total);
|
|
364
|
+
});
|
|
365
|
+
if (rootInsertable) {
|
|
366
|
+
rows.push(appendRowModel(undefined, [], root.type === "array" ? "appendArray" : "appendDict", 0, total, total));
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
visitNode(ctx, "Value", root, [], undefined, 0, false, 1, 1);
|
|
371
|
+
}
|
|
372
|
+
return rows;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Flattens the loaded pages of a paged collection root. Paged roots are
|
|
376
|
+
* read-only at the row level (no append ghost, no row removal) — leaf edits
|
|
377
|
+
* inside a loaded row still work through the ordinary callbacks, with global
|
|
378
|
+
* path steps.
|
|
379
|
+
*
|
|
380
|
+
* @param paging - The paging contract (totals, page size, loaded pages)
|
|
381
|
+
* @param open - Per-row expansion overrides keyed by row id
|
|
382
|
+
* @param openDepth - Rows at depth < this start expanded
|
|
383
|
+
* @returns The paged flat structure
|
|
384
|
+
*/
|
|
385
|
+
export function flattenPaged(paging, open, openDepth) {
|
|
386
|
+
const { totalRows, pageSize, pages } = paging;
|
|
387
|
+
const pageCount = Math.max(0, Math.ceil(totalRows / pageSize));
|
|
388
|
+
const rootRowsInPage = (p) => Math.max(0, Math.min(pageSize, totalRows - p * pageSize));
|
|
389
|
+
const pageModels = new Map();
|
|
390
|
+
const loadedRows = [];
|
|
391
|
+
const prefix = new Array(pageCount + 1);
|
|
392
|
+
prefix[0] = 0;
|
|
393
|
+
for (let p = 0; p < pageCount; p++) {
|
|
394
|
+
const loaded = pages.get(p);
|
|
395
|
+
if (loaded === undefined) {
|
|
396
|
+
prefix[p + 1] = prefix[p] + rootRowsInPage(p);
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const ctx = { open, openDepth, canRemove: false, canInsert: false, rows: [] };
|
|
400
|
+
loaded.forEach((r, i) => {
|
|
401
|
+
const globalRow = p * pageSize + i;
|
|
402
|
+
const label = r.label ?? itemTitle(r.node, globalRow);
|
|
403
|
+
visitNode(ctx, label, r.node, [r.step], undefined, 0, false, globalRow + 1, totalRows);
|
|
404
|
+
});
|
|
405
|
+
pageModels.set(p, ctx.rows);
|
|
406
|
+
loadedRows.push(...ctx.rows);
|
|
407
|
+
prefix[p + 1] = prefix[p] + ctx.rows.length;
|
|
408
|
+
}
|
|
409
|
+
return { totalFlat: prefix[pageCount] ?? 0, prefix, pageModels, loadedRows, pageCount, rootRowsInPage };
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Binary-searches the page whose flat range contains `flatIdx`.
|
|
413
|
+
*
|
|
414
|
+
* @param prefix - The prefix sums from {@link flattenPaged}
|
|
415
|
+
* @param flatIdx - A flat row index
|
|
416
|
+
* @returns The page index
|
|
417
|
+
*/
|
|
418
|
+
export function pageOfFlat(prefix, flatIdx) {
|
|
419
|
+
let lo = 0, hi = prefix.length - 2;
|
|
420
|
+
while (lo < hi) {
|
|
421
|
+
const mid = (lo + hi) >> 1;
|
|
422
|
+
if (prefix[mid + 1] <= flatIdx)
|
|
423
|
+
lo = mid + 1;
|
|
424
|
+
else
|
|
425
|
+
hi = mid;
|
|
426
|
+
}
|
|
427
|
+
return lo;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Flat index of global root row `globalRow`: through the loaded page's
|
|
431
|
+
* flattened models when present (expanded children shift later rows), else
|
|
432
|
+
* the one-placeholder-per-root arithmetic.
|
|
433
|
+
*
|
|
434
|
+
* @param flat - The paged flat structure
|
|
435
|
+
* @param paging - The paging contract
|
|
436
|
+
* @param globalRow - A global root row (clamped to the collection)
|
|
437
|
+
* @returns The flat index, or undefined for an empty collection
|
|
438
|
+
*/
|
|
439
|
+
export function pagedFlatIndexOfRoot(flat, paging, globalRow) {
|
|
440
|
+
if (paging.totalRows === 0)
|
|
441
|
+
return undefined;
|
|
442
|
+
const clamped = Math.max(0, Math.min(paging.totalRows - 1, globalRow));
|
|
443
|
+
const p = Math.floor(clamped / paging.pageSize);
|
|
444
|
+
const base = flat.prefix[p];
|
|
445
|
+
if (base === undefined)
|
|
446
|
+
return undefined;
|
|
447
|
+
const offsetInPage = clamped - p * paging.pageSize;
|
|
448
|
+
const models = flat.pageModels.get(p);
|
|
449
|
+
if (models === undefined)
|
|
450
|
+
return base + offsetInPage;
|
|
451
|
+
let roots = 0;
|
|
452
|
+
for (let i = 0; i < models.length; i++) {
|
|
453
|
+
if (models[i].depth === 0) {
|
|
454
|
+
if (roots === offsetInPage)
|
|
455
|
+
return base + i;
|
|
456
|
+
roots++;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return undefined;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Flat index of the `rootRow`-th depth-0 row of an inline tree.
|
|
463
|
+
*
|
|
464
|
+
* @param rows - The flattened rows
|
|
465
|
+
* @param rootRow - A 0-based root row ordinal
|
|
466
|
+
* @returns The flat index, or undefined when there are fewer roots
|
|
467
|
+
*/
|
|
468
|
+
export function flatIndexOfRoot(rows, rootRow) {
|
|
469
|
+
let roots = 0;
|
|
470
|
+
for (let i = 0; i < rows.length; i++) {
|
|
471
|
+
if (rows[i].depth === 0) {
|
|
472
|
+
if (roots === rootRow)
|
|
473
|
+
return i;
|
|
474
|
+
roots++;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return undefined;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Resolves a paged flat row: a loaded model, or the global root index of a
|
|
481
|
+
* placeholder.
|
|
482
|
+
*
|
|
483
|
+
* @param flat - The paged flat structure
|
|
484
|
+
* @param paging - The paging contract
|
|
485
|
+
* @param flatIdx - A flat row index
|
|
486
|
+
* @returns The row model, or the placeholder's global root row
|
|
487
|
+
*/
|
|
488
|
+
export function pagedRowAt(flat, paging, flatIdx) {
|
|
489
|
+
const p = pageOfFlat(flat.prefix, flatIdx);
|
|
490
|
+
const offsetInPage = flatIdx - flat.prefix[p];
|
|
491
|
+
const models = flat.pageModels.get(p);
|
|
492
|
+
if (models !== undefined) {
|
|
493
|
+
return { kind: "model", row: models[offsetInPage] };
|
|
494
|
+
}
|
|
495
|
+
return { kind: "placeholder", globalRow: p * paging.pageSize + offsetInPage };
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Drops loaded pages far from the window `[firstPage, lastPage]`, keeping
|
|
499
|
+
* the window itself and then the nearest pages up to the retention cap.
|
|
500
|
+
* Returns the SAME map (no re-render) while under the cap.
|
|
501
|
+
*
|
|
502
|
+
* @typeParam T - The page payload
|
|
503
|
+
* @param pages - The loaded pages by index
|
|
504
|
+
* @param firstPage - First page of the visible window
|
|
505
|
+
* @param lastPage - Last page of the visible window
|
|
506
|
+
* @param max - Retention cap
|
|
507
|
+
* @returns The retained pages (the input map when nothing was dropped)
|
|
508
|
+
*/
|
|
509
|
+
export function pruneRetainedPages(pages, firstPage, lastPage, max) {
|
|
510
|
+
if (pages.size <= max)
|
|
511
|
+
return pages;
|
|
512
|
+
const distance = (p) => (p < firstPage ? firstPage - p : p > lastPage ? p - lastPage : 0);
|
|
513
|
+
const keep = [...pages.keys()].sort((a, b) => distance(a) - distance(b) || a - b).slice(0, max);
|
|
514
|
+
const kept = new Map();
|
|
515
|
+
for (const p of keep.sort((a, b) => a - b)) {
|
|
516
|
+
kept.set(p, pages.get(p));
|
|
517
|
+
}
|
|
518
|
+
return kept;
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../../../src/collections/value-tree/flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,8 @@ import { ValueTreePathType, ValueTreeLeafType } from "./types.js";
|
|
|
36
36
|
export { ValueTreeStepType, ValueTreePathType, ValueTreeLeafType, ValueTreeNodeType, ValueTreeStyleType, ValueTreeRootType, } from "./types.js";
|
|
37
37
|
import { materialize, applyEdit, dictKeyLabel } from "./materialize.js";
|
|
38
38
|
export { materialize, applyEdit, dictKeyLabel, type ValueTreeNodeValue, type ValueTreeLeafValue, type ValueTreeStepValue, type ValueTreeEditOp, } from "./materialize.js";
|
|
39
|
+
import { flattenRows, flattenPaged, pageOfFlat, pagedRowAt, pagedFlatIndexOfRoot, flatIndexOfRoot, pruneRetainedPages, humanize, pathKey, itemTitle, summaryOf, childrenOf, fmtLeaf, type RowModel as FlattenRowModel, type RowKind as FlattenRowKind, type ChildEntry as FlattenChildEntry, type FlattenCtx as FlattenContext, type ValueTreePagedRow as FlattenPagedRow, type ValueTreePaging as FlattenPaging, type PagedFlat as FlattenPagedFlat, type ResolvedNode as FlattenResolvedNode } from "./flatten.js";
|
|
40
|
+
import { keyRangePredicates, parseKeyInput, findKeyInline, type DatasetKeyQuery as KeySearchQuery, type DatasetKeyMatchRange as KeySearchMatchRange, type ParsedKeyInput as KeySearchParsedInput } from "./key-search.js";
|
|
39
41
|
/** One recorded step of a scope path (host-side; mirrors the editable
|
|
40
42
|
* subset of {@link ValueTreeStepType}). */
|
|
41
43
|
export type ValueTreeScopeStep = {
|
|
@@ -236,6 +238,57 @@ export declare const ValueTree: {
|
|
|
236
238
|
* round-trippable text).
|
|
237
239
|
*/
|
|
238
240
|
readonly keyLabel: typeof dictKeyLabel;
|
|
241
|
+
/**
|
|
242
|
+
* The ROW MODEL of an inline tree — the visible (expanded) rows of a
|
|
243
|
+
* materialized node, depth-first, with end-user labels, branch
|
|
244
|
+
* summaries and typed edit paths. Every renderer (browser, terminal)
|
|
245
|
+
* lists a value through this so it reads identically everywhere.
|
|
246
|
+
*/
|
|
247
|
+
readonly flatten: typeof flattenRows;
|
|
248
|
+
/**
|
|
249
|
+
* The row model of a PAGED collection root — per-page flattened rows
|
|
250
|
+
* plus the prefix sums that place placeholder rows for unloaded pages,
|
|
251
|
+
* so the extent always spans the whole collection.
|
|
252
|
+
*/
|
|
253
|
+
readonly flattenPaged: typeof flattenPaged;
|
|
254
|
+
/** Binary-searches the page whose flat range contains a flat row index. */
|
|
255
|
+
readonly pageOfFlat: typeof pageOfFlat;
|
|
256
|
+
/** Resolves a paged flat row to a loaded model or a placeholder's global root row. */
|
|
257
|
+
readonly pagedRowAt: typeof pagedRowAt;
|
|
258
|
+
/** Flat index of a global root row of a paged tree (through loaded pages when present). */
|
|
259
|
+
readonly pagedFlatIndexOfRoot: typeof pagedFlatIndexOfRoot;
|
|
260
|
+
/** Flat index of the N-th depth-0 row of an inline tree. */
|
|
261
|
+
readonly flatIndexOfRoot: typeof flatIndexOfRoot;
|
|
262
|
+
/**
|
|
263
|
+
* Drops loaded pages far from the visible window, keeping the window
|
|
264
|
+
* and then the nearest pages up to a retention cap (the same map back
|
|
265
|
+
* while under the cap).
|
|
266
|
+
*/
|
|
267
|
+
readonly pruneRetainedPages: typeof pruneRetainedPages;
|
|
268
|
+
/** "flowRate" / "flow_rate" → "Flow rate" — the end-user field label. */
|
|
269
|
+
readonly humanize: typeof humanize;
|
|
270
|
+
/** The stable text identity of a node path — the row id. */
|
|
271
|
+
readonly pathKey: typeof pathKey;
|
|
272
|
+
/** A content-derived title for an array element, else "Item N". */
|
|
273
|
+
readonly itemTitle: typeof itemTitle;
|
|
274
|
+
/** The muted value-cell text of a branch node (preview / counts). */
|
|
275
|
+
readonly summaryOf: typeof summaryOf;
|
|
276
|
+
/** The children of a compound node with their labels and binding steps. */
|
|
277
|
+
readonly childrenOf: typeof childrenOf;
|
|
278
|
+
/** Formats a primitive leaf for display. */
|
|
279
|
+
readonly fmtLeaf: typeof fmtLeaf;
|
|
280
|
+
/** Rows at depth < this start expanded when the host sets no `openDepth`. */
|
|
281
|
+
readonly DEFAULT_OPEN_DEPTH: 1;
|
|
282
|
+
/**
|
|
283
|
+
* The monotone lower / upper row predicates of a RANGE key query over
|
|
284
|
+
* decoded keys in canonical order — the client-side mirror of the
|
|
285
|
+
* server's fence search, for inline values.
|
|
286
|
+
*/
|
|
287
|
+
readonly keyRangePredicates: typeof keyRangePredicates;
|
|
288
|
+
/** Turns typed key-search text into a wire query, or a hint when it cannot parse. */
|
|
289
|
+
readonly parseKeyInput: typeof parseKeyInput;
|
|
290
|
+
/** Locates a key query over decoded keys — the inline `datasetFindKey`. */
|
|
291
|
+
readonly findKeyInline: typeof findKeyInline;
|
|
239
292
|
readonly Types: {
|
|
240
293
|
/** The full ValueTree payload. */
|
|
241
294
|
readonly Root: StructType<{
|
|
@@ -394,4 +447,35 @@ export declare const ValueTree: {
|
|
|
394
447
|
}>;
|
|
395
448
|
};
|
|
396
449
|
};
|
|
450
|
+
/**
|
|
451
|
+
* Row-model types under the `ValueTree` namespace (declaration-merged onto
|
|
452
|
+
* the factory object; types only — nothing is emitted).
|
|
453
|
+
*/
|
|
454
|
+
export declare namespace ValueTree {
|
|
455
|
+
/** The types of the row model ({@link ValueTree.flatten} / {@link ValueTree.flattenPaged}). */
|
|
456
|
+
namespace Rows {
|
|
457
|
+
/** One flattened row. */
|
|
458
|
+
type RowModel = FlattenRowModel;
|
|
459
|
+
/** The kind of a flattened row. */
|
|
460
|
+
type RowKind = FlattenRowKind;
|
|
461
|
+
/** One child of a compound node with its label and binding step. */
|
|
462
|
+
type ChildEntry = FlattenChildEntry;
|
|
463
|
+
/** The shared flatten context. */
|
|
464
|
+
type FlattenCtx = FlattenContext;
|
|
465
|
+
/** A node with its option / variant wrappers collapsed into controls. */
|
|
466
|
+
type ResolvedNode = FlattenResolvedNode;
|
|
467
|
+
/** One pageable root row supplied by a paging host. */
|
|
468
|
+
type PagedRow = FlattenPagedRow;
|
|
469
|
+
/** The remote-paging contract for a collection-rooted tree. */
|
|
470
|
+
type Paging = FlattenPaging;
|
|
471
|
+
/** The paged-mode flat structure. */
|
|
472
|
+
type PagedFlat = FlattenPagedFlat;
|
|
473
|
+
/** A key query in wire form. */
|
|
474
|
+
type KeyQuery = KeySearchQuery;
|
|
475
|
+
/** Where a key query landed in the canonical key order. */
|
|
476
|
+
type KeyMatchRange = KeySearchMatchRange;
|
|
477
|
+
/** A parsed key-search input: a query, or the hint to show instead. */
|
|
478
|
+
type ParsedKeyInput = KeySearchParsedInput;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
397
481
|
//# sourceMappingURL=index.d.ts.map
|