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