@sagmans/dsh-tui 0.4.0 → 0.5.1
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/LICENSE +1 -1
- package/README.md +270 -68
- package/lib/agent/present.js +1 -1
- package/lib/agent/present.js.map +1 -1
- package/lib/agent/prompt-history.d.ts.map +1 -1
- package/lib/agent/prompt-history.js +5 -3
- package/lib/agent/prompt-history.js.map +1 -1
- package/lib/agent/status.d.ts +1 -1
- package/lib/cards.d.ts +83 -13
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +96 -28
- package/lib/cards.js.map +1 -1
- package/lib/export.d.ts +3 -3
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +23 -13
- package/lib/export.js.map +1 -1
- package/lib/fold-cursor.d.ts +12 -5
- package/lib/fold-cursor.d.ts.map +1 -1
- package/lib/fold-cursor.js +16 -5
- package/lib/fold-cursor.js.map +1 -1
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +42 -9
- package/lib/gates.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +459 -72
- package/lib/index.js.map +1 -1
- package/lib/injection.d.ts +9 -0
- package/lib/injection.d.ts.map +1 -0
- package/lib/injection.js +128 -0
- package/lib/injection.js.map +1 -0
- package/lib/input/actions.d.ts +19 -2
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +57 -11
- package/lib/input/actions.js.map +1 -1
- package/lib/input/cancel.d.ts +55 -0
- package/lib/input/cancel.d.ts.map +1 -0
- package/lib/input/cancel.js +47 -0
- package/lib/input/cancel.js.map +1 -0
- package/lib/input/completion.d.ts +5 -2
- package/lib/input/completion.d.ts.map +1 -1
- package/lib/input/completion.js +79 -4
- package/lib/input/completion.js.map +1 -1
- package/lib/input/file-search.d.ts +105 -0
- package/lib/input/file-search.d.ts.map +1 -0
- package/lib/input/file-search.js +665 -0
- package/lib/input/file-search.js.map +1 -0
- package/lib/input/fuzzy.d.ts +42 -0
- package/lib/input/fuzzy.d.ts.map +1 -0
- package/lib/input/fuzzy.js +289 -0
- package/lib/input/fuzzy.js.map +1 -0
- package/lib/input/keymap.d.ts +3 -1
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +14 -3
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/match.d.ts +12 -4
- package/lib/input/match.d.ts.map +1 -1
- package/lib/input/match.js +50 -51
- package/lib/input/match.js.map +1 -1
- package/lib/input/submission.d.ts +10 -0
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +7 -6
- package/lib/input/submission.js.map +1 -1
- package/lib/keys-command.d.ts +19 -3
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/keys-command.js +34 -31
- package/lib/keys-command.js.map +1 -1
- package/lib/settings-notice.d.ts +5 -0
- package/lib/settings-notice.d.ts.map +1 -1
- package/lib/settings-notice.js +9 -7
- package/lib/settings-notice.js.map +1 -1
- package/lib/stash/paths.d.ts +8 -8
- package/lib/stash/paths.d.ts.map +1 -1
- package/lib/stash/paths.js +19 -18
- package/lib/stash/paths.js.map +1 -1
- package/lib/stash/schema.d.ts +11 -12
- package/lib/stash/schema.d.ts.map +1 -1
- package/lib/stash/schema.js +10 -29
- package/lib/stash/schema.js.map +1 -1
- package/lib/stash/store.js +10 -10
- package/lib/stash/store.js.map +1 -1
- package/lib/stash.d.ts +37 -6
- package/lib/stash.d.ts.map +1 -1
- package/lib/stash.js +93 -36
- package/lib/stash.js.map +1 -1
- package/lib/terminal/external-editor.d.ts +93 -0
- package/lib/terminal/external-editor.d.ts.map +1 -0
- package/lib/terminal/external-editor.js +263 -0
- package/lib/terminal/external-editor.js.map +1 -0
- package/lib/terminal/host-writes.d.ts +39 -0
- package/lib/terminal/host-writes.d.ts.map +1 -0
- package/lib/terminal/host-writes.js +136 -0
- package/lib/terminal/host-writes.js.map +1 -0
- package/lib/terminal/signals.d.ts +25 -0
- package/lib/terminal/signals.d.ts.map +1 -0
- package/lib/terminal/signals.js +39 -0
- package/lib/terminal/signals.js.map +1 -0
- package/lib/terminal/warning-screen.d.ts +19 -1
- package/lib/terminal/warning-screen.d.ts.map +1 -1
- package/lib/terminal/warning-screen.js +37 -1
- package/lib/terminal/warning-screen.js.map +1 -1
- package/lib/terminal-text.d.ts +72 -0
- package/lib/terminal-text.d.ts.map +1 -0
- package/lib/terminal-text.js +603 -0
- package/lib/terminal-text.js.map +1 -0
- package/lib/text.d.ts +45 -6
- package/lib/text.d.ts.map +1 -1
- package/lib/text.js +106 -46
- package/lib/text.js.map +1 -1
- package/lib/theme-command.d.ts +7 -4
- package/lib/theme-command.d.ts.map +1 -1
- package/lib/theme-command.js +32 -12
- package/lib/theme-command.js.map +1 -1
- package/lib/theme-files.d.ts +110 -0
- package/lib/theme-files.d.ts.map +1 -0
- package/lib/theme-files.js +352 -0
- package/lib/theme-files.js.map +1 -0
- package/lib/theme-schema.d.ts +121 -0
- package/lib/theme-schema.d.ts.map +1 -0
- package/lib/theme-schema.js +87 -0
- package/lib/theme-schema.js.map +1 -0
- package/lib/theme-settings.d.ts +43 -10
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +103 -43
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +39 -7
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +96 -13
- package/lib/theme-tokens.js.map +1 -1
- package/lib/theme.d.ts +24 -2
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +49 -6
- package/lib/theme.js.map +1 -1
- package/lib/tool-display.d.ts +57 -0
- package/lib/tool-display.d.ts.map +1 -0
- package/lib/tool-display.js +51 -0
- package/lib/tool-display.js.map +1 -0
- package/lib/transcript.d.ts +28 -0
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +126 -37
- package/lib/transcript.js.map +1 -1
- package/lib/ui/diff.d.ts +49 -0
- package/lib/ui/diff.d.ts.map +1 -0
- package/lib/ui/diff.js +208 -0
- package/lib/ui/diff.js.map +1 -0
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +9 -6
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +4 -2
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/frame.d.ts +16 -5
- package/lib/ui/frame.d.ts.map +1 -1
- package/lib/ui/frame.js +32 -13
- package/lib/ui/frame.js.map +1 -1
- package/lib/ui/keymap-picker.d.ts +16 -0
- package/lib/ui/keymap-picker.d.ts.map +1 -0
- package/lib/ui/keymap-picker.js +41 -0
- package/lib/ui/keymap-picker.js.map +1 -0
- package/lib/ui/layout.d.ts +33 -0
- package/lib/ui/layout.d.ts.map +1 -0
- package/lib/ui/layout.js +33 -0
- package/lib/ui/layout.js.map +1 -0
- package/lib/ui/markdown.d.ts +25 -3
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +12 -8
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/picker-card.d.ts +42 -0
- package/lib/ui/picker-card.d.ts.map +1 -0
- package/lib/ui/picker-card.js +148 -0
- package/lib/ui/picker-card.js.map +1 -0
- package/lib/ui/picker.d.ts +40 -2
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +50 -6
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/prompt.d.ts +10 -2
- package/lib/ui/prompt.d.ts.map +1 -1
- package/lib/ui/prompt.js +21 -2
- package/lib/ui/prompt.js.map +1 -1
- package/lib/ui/rows.d.ts +8 -6
- package/lib/ui/rows.d.ts.map +1 -1
- package/lib/ui/rows.js +10 -18
- package/lib/ui/rows.js.map +1 -1
- package/lib/ui/stash-picker.d.ts +2 -2
- package/lib/ui/stash-picker.d.ts.map +1 -1
- package/lib/ui/stash-picker.js +4 -4
- package/lib/ui/stash-picker.js.map +1 -1
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +18 -16
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/theme-picker.d.ts +18 -0
- package/lib/ui/theme-picker.d.ts.map +1 -0
- package/lib/ui/theme-picker.js +68 -0
- package/lib/ui/theme-picker.js.map +1 -0
- package/lib/ui/view.d.ts +146 -22
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +461 -154
- package/lib/ui/view.js.map +1 -1
- package/package.json +45 -11
- package/themes/deepseek-blue.yaml +183 -0
- package/themes/violet-orbit.yaml +178 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
|
|
2
|
+
import { canFrame, frameLines, FRAME_COLUMNS } from "./frame.js";
|
|
3
|
+
/** The columns a list's rows are indented by, and the ones a wrapped line under them uses. */
|
|
4
|
+
const ROW_INDENT = ' ';
|
|
5
|
+
const TEXT_INDENT = ' ';
|
|
6
|
+
/** The mark a cursor falls back to when the reader has not set one, so no literal lives in a template. */
|
|
7
|
+
const CURSOR_MARK = '❯';
|
|
8
|
+
/** An unselected row has no cursor, and a blank column is not a value to configure. */
|
|
9
|
+
const NO_CURSOR = ' ';
|
|
10
|
+
/** One wrapped block of plain text under a prefix, at the width the card has. */
|
|
11
|
+
function pushWrapped(lines, text, width, prefix, token, theme) {
|
|
12
|
+
const lead = visibleWidth(prefix);
|
|
13
|
+
const indent = ' '.repeat(lead);
|
|
14
|
+
const wrapped = wrapTextWithAnsi(theme.rich(text, { token, column: lead }), Math.max(1, width - lead));
|
|
15
|
+
wrapped.forEach((line, index) => {
|
|
16
|
+
lines.push(theme.cut(`${index === 0 ? prefix : indent}${line}`, width, ''));
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The rows a list draws, wherever it is drawn.
|
|
21
|
+
*
|
|
22
|
+
* One renderer for the card, so the list at the end of the transcript and the
|
|
23
|
+
* box over it cannot drift apart: a field added to a card reaches both at once.
|
|
24
|
+
* The width is the room the rows themselves have, which is what a frame around
|
|
25
|
+
* them narrows before it is asked for.
|
|
26
|
+
*/
|
|
27
|
+
export function pickerCardLines(picker, width, theme) {
|
|
28
|
+
const lines = [];
|
|
29
|
+
if (theme.visible('picker.title')) {
|
|
30
|
+
const glyph = theme.glyph('picker.glyph');
|
|
31
|
+
const lead = glyph === '' ? '' : `${glyph} `;
|
|
32
|
+
lines.push(theme.cut(theme.rich(`${lead}${picker.title}`, { token: 'picker.title', column: visibleWidth(lead) }), width, ''));
|
|
33
|
+
}
|
|
34
|
+
if (picker.note !== undefined && theme.visible('picker.note')) {
|
|
35
|
+
pushWrapped(lines, picker.note, width, TEXT_INDENT, 'picker.note', theme);
|
|
36
|
+
}
|
|
37
|
+
if (picker.filter !== '' && theme.visible('picker.filter')) {
|
|
38
|
+
lines.push(theme.cut(theme.rich(`${TEXT_INDENT}filter: ${picker.filter}`, { token: 'picker.filter', column: visibleWidth(TEXT_INDENT) }), width, ''));
|
|
39
|
+
}
|
|
40
|
+
if (picker.above > 0 && theme.visible('picker.scrollNewer')) {
|
|
41
|
+
lines.push(theme.style('picker.scrollNewer', theme.cut(`${ROW_INDENT}… ${picker.above} newer`, width, '')));
|
|
42
|
+
}
|
|
43
|
+
for (const row of picker.rows) {
|
|
44
|
+
const token = row.current ? 'picker.rowCurrent' : 'picker.row';
|
|
45
|
+
if (!theme.visible(token))
|
|
46
|
+
continue;
|
|
47
|
+
const cursor = row.current ? theme.glyph('picker.cursor') || CURSOR_MARK : NO_CURSOR;
|
|
48
|
+
const text = row.description === undefined
|
|
49
|
+
? `${cursor} ${row.label}`
|
|
50
|
+
: `${cursor} ${row.label} — ${row.description}`;
|
|
51
|
+
lines.push(theme.cut(theme.rich(`${ROW_INDENT}${text}`, { token, column: visibleWidth(ROW_INDENT) }), width, ''));
|
|
52
|
+
}
|
|
53
|
+
if (picker.below > 0 && theme.visible('picker.scrollOlder')) {
|
|
54
|
+
lines.push(theme.style('picker.scrollOlder', theme.cut(`${ROW_INDENT}… ${picker.below} older`, width, '')));
|
|
55
|
+
}
|
|
56
|
+
if (theme.visible('picker.hint')) {
|
|
57
|
+
// The hint names the keys that leave the list, so it folds rather than
|
|
58
|
+
// being cut: a narrow screen must still be told the way out.
|
|
59
|
+
pushWrapped(lines, picker.hint, width, ROW_INDENT, 'picker.hint', theme);
|
|
60
|
+
}
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Share of the terminal a popup may take.
|
|
65
|
+
*
|
|
66
|
+
* The box is an overlay on work the reader is in the middle of, so it never
|
|
67
|
+
* claims the screen: the rows behind it stay the context for what is being
|
|
68
|
+
* chosen, and the editor stays where the reader left it.
|
|
69
|
+
*/
|
|
70
|
+
const HEIGHT_PERCENT = 80;
|
|
71
|
+
/** Air between the box and the terminal's edge, so the frame never touches one. */
|
|
72
|
+
const MARGIN = 1;
|
|
73
|
+
/** A box narrower than this cannot name an action and its keys on one row. */
|
|
74
|
+
const MIN_WIDTH = 40;
|
|
75
|
+
/** Past this the rows are mostly empty, and a list reads better narrow than stretched. */
|
|
76
|
+
const MAX_WIDTH = 100;
|
|
77
|
+
/** Rows the box spends before the list itself: two rules, the heading, the filter line, and the hint. */
|
|
78
|
+
const CHROME_ROWS = 5;
|
|
79
|
+
/** Rows the two scroll counts may take when the list is longer than the window. */
|
|
80
|
+
const MARKER_ROWS = 2;
|
|
81
|
+
/** A list that can show a row and still say the map continues. */
|
|
82
|
+
const MIN_ROWS = 3;
|
|
83
|
+
/** The same share as the library resolves a percentage SizeValue, so the option and the row budget cannot disagree. */
|
|
84
|
+
export const POPUP_MAX_HEIGHT = `${HEIGHT_PERCENT}%`;
|
|
85
|
+
/** The columns the box may take on a terminal this wide. */
|
|
86
|
+
export function popupWidth(columns) {
|
|
87
|
+
return Math.min(MAX_WIDTH, Math.max(MIN_WIDTH, columns - MARGIN * 2));
|
|
88
|
+
}
|
|
89
|
+
/** The rows the box may occupy, resolved the way the library resolves a percentage. */
|
|
90
|
+
export function popupHeight(rows) {
|
|
91
|
+
return Math.floor((rows * HEIGHT_PERCENT) / 100);
|
|
92
|
+
}
|
|
93
|
+
/** How many list rows fit in that height, with the frame's own rows and the scroll counts reserved. */
|
|
94
|
+
export function popupRowBudget(rows) {
|
|
95
|
+
return Math.max(MIN_ROWS, popupHeight(rows) - CHROME_ROWS - MARKER_ROWS);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A list drawn as a box over the surface rather than at the end of it.
|
|
99
|
+
*
|
|
100
|
+
* The box is only a frame: the rows, the filter, and the counts are the card's,
|
|
101
|
+
* which the list builds to whatever budget this component can afford. A screen
|
|
102
|
+
* too short for the whole card shrinks the window rather than the box, because
|
|
103
|
+
* the hint naming the keys that close it is the last thing that may fall off.
|
|
104
|
+
*/
|
|
105
|
+
export class PickerPopup {
|
|
106
|
+
card;
|
|
107
|
+
rows;
|
|
108
|
+
theme;
|
|
109
|
+
constructor(card,
|
|
110
|
+
/** The terminal the box is drawn on, read per paint so a resize lands on the next frame. */
|
|
111
|
+
rows, theme) {
|
|
112
|
+
this.card = card;
|
|
113
|
+
this.rows = rows;
|
|
114
|
+
this.theme = theme;
|
|
115
|
+
}
|
|
116
|
+
invalidate() {
|
|
117
|
+
// Nothing is cached: the card is read fresh on every frame.
|
|
118
|
+
}
|
|
119
|
+
/** The card closed into a frame, or nothing when the list is already gone. */
|
|
120
|
+
box(picker, width) {
|
|
121
|
+
if (picker === undefined)
|
|
122
|
+
return [];
|
|
123
|
+
const framed = canFrame(width, this.theme.visible('picker.border'));
|
|
124
|
+
const inside = framed ? width - FRAME_COLUMNS : width;
|
|
125
|
+
return frameLines(pickerCardLines(picker, inside, this.theme), width, {
|
|
126
|
+
text: line => line,
|
|
127
|
+
border: rule => this.theme.style('picker.border', rule),
|
|
128
|
+
framed,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
render(width) {
|
|
132
|
+
if (width <= 0)
|
|
133
|
+
return [];
|
|
134
|
+
const rows = this.rows();
|
|
135
|
+
const room = popupHeight(rows);
|
|
136
|
+
let budget = popupRowBudget(rows);
|
|
137
|
+
for (;;) {
|
|
138
|
+
const lines = this.box(this.card(budget), width);
|
|
139
|
+
// A refusal note can spend rows the budget did not reserve, so a card that
|
|
140
|
+
// still overflows asks for a shorter window rather than lose its closing
|
|
141
|
+
// rule to the library's own clamp.
|
|
142
|
+
if (lines.length <= room || budget <= MIN_ROWS)
|
|
143
|
+
return lines;
|
|
144
|
+
budget = Math.max(MIN_ROWS, budget - (lines.length - room));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=picker-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker-card.js","sourceRoot":"","sources":["../../src/ui/picker-card.ts"],"names":[],"mappings":"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"}
|
package/lib/ui/picker.d.ts
CHANGED
|
@@ -76,6 +76,15 @@ export declare class ListPicker<Row> {
|
|
|
76
76
|
private readonly hints;
|
|
77
77
|
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
78
78
|
private readonly keys;
|
|
79
|
+
/**
|
|
80
|
+
* Told which row the cursor is on whenever it moves.
|
|
81
|
+
*
|
|
82
|
+
* A list whose rows can be shown as well as taken needs the row under the
|
|
83
|
+
* cursor before it is picked — a theme is judged by looking at the screen it
|
|
84
|
+
* paints — and only the list knows where the cursor landed once a filter has
|
|
85
|
+
* reordered the rows under it.
|
|
86
|
+
*/
|
|
87
|
+
private readonly onCursor?;
|
|
79
88
|
private cursor;
|
|
80
89
|
private filter;
|
|
81
90
|
private note;
|
|
@@ -87,7 +96,16 @@ export declare class ListPicker<Row> {
|
|
|
87
96
|
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
88
97
|
keys: () => Keymap,
|
|
89
98
|
/** A draft to open already filtered by, so a search can start where the reader is. */
|
|
90
|
-
initialFilter?: string
|
|
99
|
+
initialFilter?: string,
|
|
100
|
+
/**
|
|
101
|
+
* Told which row the cursor is on whenever it moves.
|
|
102
|
+
*
|
|
103
|
+
* A list whose rows can be shown as well as taken needs the row under the
|
|
104
|
+
* cursor before it is picked — a theme is judged by looking at the screen it
|
|
105
|
+
* paints — and only the list knows where the cursor landed once a filter has
|
|
106
|
+
* reordered the rows under it.
|
|
107
|
+
*/
|
|
108
|
+
onCursor?: ((row: Row | undefined) => void) | undefined);
|
|
91
109
|
/** Rows matching the typed filter, best match first. */
|
|
92
110
|
visible(): readonly Row[];
|
|
93
111
|
/**
|
|
@@ -100,7 +118,27 @@ export declare class ListPicker<Row> {
|
|
|
100
118
|
setNote(text: string | undefined): void;
|
|
101
119
|
/** Apply one key press; returns an action only when the picker settles. */
|
|
102
120
|
handleKey(data: string): PickerAction | undefined;
|
|
103
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Say which row the cursor is on now.
|
|
123
|
+
*
|
|
124
|
+
* Announced after every press rather than on the arrows alone: typing a filter
|
|
125
|
+
* moves the cursor to the best match, and a row the filter just hid must not
|
|
126
|
+
* stay on screen as the one being shown. A filter that matches nothing reports
|
|
127
|
+
* no row, which is the one answer that is not a row.
|
|
128
|
+
*/
|
|
129
|
+
private announce;
|
|
130
|
+
/** One key press, without the announcement every way out of it owes. */
|
|
131
|
+
private step;
|
|
132
|
+
/**
|
|
133
|
+
* The card as it draws right now, in the window the caller can afford.
|
|
134
|
+
*
|
|
135
|
+
* The window is a parameter because the caller is the one that knows how many
|
|
136
|
+
* rows it has to give: a list at the end of the transcript takes the usual
|
|
137
|
+
* window whatever the terminal, while a box over it has to leave room for its
|
|
138
|
+
* own frame on a short screen. The rule stays here, so both windows keep the
|
|
139
|
+
* cursor centred and the counts above and below honest.
|
|
140
|
+
*/
|
|
141
|
+
card(window?: number): PickerCard;
|
|
104
142
|
}
|
|
105
143
|
/**
|
|
106
144
|
* One stored session chosen by key press.
|
package/lib/ui/picker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../src/ui/picker.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAGpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAqC,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExE,wCAAwC;AACxC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,iDAAiD;AACjD,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAE/B;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,KAAK,CAAA;AAE/B;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAC9B;AAKD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU,CAAC,GAAG;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../src/ui/picker.ts"],"names":[],"mappings":"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"}
|
package/lib/ui/picker.js
CHANGED
|
@@ -55,6 +55,7 @@ export class ListPicker {
|
|
|
55
55
|
haystackOf;
|
|
56
56
|
hints;
|
|
57
57
|
keys;
|
|
58
|
+
onCursor;
|
|
58
59
|
cursor = 0;
|
|
59
60
|
filter = '';
|
|
60
61
|
note;
|
|
@@ -66,7 +67,16 @@ export class ListPicker {
|
|
|
66
67
|
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
67
68
|
keys,
|
|
68
69
|
/** A draft to open already filtered by, so a search can start where the reader is. */
|
|
69
|
-
initialFilter = ''
|
|
70
|
+
initialFilter = '',
|
|
71
|
+
/**
|
|
72
|
+
* Told which row the cursor is on whenever it moves.
|
|
73
|
+
*
|
|
74
|
+
* A list whose rows can be shown as well as taken needs the row under the
|
|
75
|
+
* cursor before it is picked — a theme is judged by looking at the screen it
|
|
76
|
+
* paints — and only the list knows where the cursor landed once a filter has
|
|
77
|
+
* reordered the rows under it.
|
|
78
|
+
*/
|
|
79
|
+
onCursor) {
|
|
70
80
|
this.source = source;
|
|
71
81
|
this.heading = heading;
|
|
72
82
|
this.idOf = idOf;
|
|
@@ -74,6 +84,7 @@ export class ListPicker {
|
|
|
74
84
|
this.haystackOf = haystackOf;
|
|
75
85
|
this.hints = hints;
|
|
76
86
|
this.keys = keys;
|
|
87
|
+
this.onCursor = onCursor;
|
|
77
88
|
this.filter = initialFilter;
|
|
78
89
|
}
|
|
79
90
|
/** Rows matching the typed filter, best match first. */
|
|
@@ -101,6 +112,29 @@ export class ListPicker {
|
|
|
101
112
|
}
|
|
102
113
|
/** Apply one key press; returns an action only when the picker settles. */
|
|
103
114
|
handleKey(data) {
|
|
115
|
+
const action = this.step(data);
|
|
116
|
+
// A press that settles the list needs no announcement: the row it settled on
|
|
117
|
+
// is the row already on screen.
|
|
118
|
+
if (action === undefined)
|
|
119
|
+
this.announce();
|
|
120
|
+
return action;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Say which row the cursor is on now.
|
|
124
|
+
*
|
|
125
|
+
* Announced after every press rather than on the arrows alone: typing a filter
|
|
126
|
+
* moves the cursor to the best match, and a row the filter just hid must not
|
|
127
|
+
* stay on screen as the one being shown. A filter that matches nothing reports
|
|
128
|
+
* no row, which is the one answer that is not a row.
|
|
129
|
+
*/
|
|
130
|
+
announce() {
|
|
131
|
+
if (this.onCursor === undefined)
|
|
132
|
+
return;
|
|
133
|
+
const rows = this.visible();
|
|
134
|
+
this.onCursor(rows[Math.min(this.cursor, Math.max(0, rows.length - 1))]);
|
|
135
|
+
}
|
|
136
|
+
/** One key press, without the announcement every way out of it owes. */
|
|
137
|
+
step(data) {
|
|
104
138
|
this.note = undefined;
|
|
105
139
|
const rows = this.visible();
|
|
106
140
|
// A picker owns the keyboard while it is open, so the interrupt key has to
|
|
@@ -137,20 +171,30 @@ export class ListPicker {
|
|
|
137
171
|
}
|
|
138
172
|
return undefined;
|
|
139
173
|
}
|
|
140
|
-
|
|
174
|
+
/**
|
|
175
|
+
* The card as it draws right now, in the window the caller can afford.
|
|
176
|
+
*
|
|
177
|
+
* The window is a parameter because the caller is the one that knows how many
|
|
178
|
+
* rows it has to give: a list at the end of the transcript takes the usual
|
|
179
|
+
* window whatever the terminal, while a box over it has to leave room for its
|
|
180
|
+
* own frame on a short screen. The rule stays here, so both windows keep the
|
|
181
|
+
* cursor centred and the counts above and below honest.
|
|
182
|
+
*/
|
|
183
|
+
card(window = PICKER_WINDOW) {
|
|
141
184
|
const rows = this.visible();
|
|
142
185
|
const cursor = Math.min(this.cursor, Math.max(0, rows.length - 1));
|
|
143
|
-
const
|
|
144
|
-
const
|
|
186
|
+
const size = Math.max(1, Math.min(window, rows.length));
|
|
187
|
+
const start = Math.max(0, Math.min(cursor - Math.floor(size / 2), rows.length - size));
|
|
188
|
+
const shown = rows.slice(start, start + size);
|
|
145
189
|
return {
|
|
146
190
|
title: this.heading(),
|
|
147
191
|
note: this.note,
|
|
148
|
-
rows:
|
|
192
|
+
rows: shown.map((row, index) => ({
|
|
149
193
|
...this.describe(row),
|
|
150
194
|
current: start + index === cursor,
|
|
151
195
|
})),
|
|
152
196
|
above: start,
|
|
153
|
-
below: Math.max(0, rows.length - start -
|
|
197
|
+
below: Math.max(0, rows.length - start - shown.length),
|
|
154
198
|
filter: singleLine(this.filter),
|
|
155
199
|
hint: rows.length === 0 ? this.hints.empty() : this.hints.listed(),
|
|
156
200
|
};
|
package/lib/ui/picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../src/ui/picker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker.js","sourceRoot":"","sources":["../../src/ui/picker.ts"],"names":[],"mappings":"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"}
|
package/lib/ui/prompt.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { VStack } from '@earendil-works/pi-tui';
|
|
2
2
|
import type { BoxedEditor } from './editor.ts';
|
|
3
3
|
/**
|
|
4
4
|
* The prompt bar, and the question that borrows it.
|
|
@@ -9,7 +9,7 @@ import type { BoxedEditor } from './editor.ts';
|
|
|
9
9
|
* The bar hides while the question is open, and the prompt nobody has sent yet
|
|
10
10
|
* is held aside and put back afterwards.
|
|
11
11
|
*/
|
|
12
|
-
export declare class PromptBar
|
|
12
|
+
export declare class PromptBar extends VStack {
|
|
13
13
|
private readonly editor;
|
|
14
14
|
private borrowed;
|
|
15
15
|
private held;
|
|
@@ -23,6 +23,14 @@ export declare class PromptBar implements Component {
|
|
|
23
23
|
borrow<T>(build: () => T): T;
|
|
24
24
|
/** Whether the editor is collecting an answer rather than a prompt. */
|
|
25
25
|
isBorrowed(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Replace the prompt waiting behind a borrowed bar.
|
|
28
|
+
*
|
|
29
|
+
* The bar holds someone else's prompt for as long as a gate answers in it, so
|
|
30
|
+
* a draft edited during that time belongs to the held prompt rather than to
|
|
31
|
+
* the answer it would otherwise be written into.
|
|
32
|
+
*/
|
|
33
|
+
replaceHeld(text: string): void;
|
|
26
34
|
/** Give the editor back, with the prompt that was in it. */
|
|
27
35
|
giveBack(): void;
|
|
28
36
|
/** The rows the bar occupies, which a borrowing question leaves empty. */
|
package/lib/ui/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,MAAM;IAIvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,IAAI,CAAK;gBAEY,MAAM,EAAE,WAAW;IAUhD;;;;;OAKG;IACH,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;IAO5B,uEAAuE;IACvE,UAAU,IAAI,OAAO;IAIrB;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,4DAA4D;IAC5D,QAAQ,IAAI,IAAI;IAOhB,0EAA0E;IACjE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAI/B,UAAU,IAAI,IAAI;CAG5B"}
|
package/lib/ui/prompt.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { VStack } from '@earendil-works/pi-tui';
|
|
1
2
|
/**
|
|
2
3
|
* The prompt bar, and the question that borrows it.
|
|
3
4
|
*
|
|
@@ -7,12 +8,19 @@
|
|
|
7
8
|
* The bar hides while the question is open, and the prompt nobody has sent yet
|
|
8
9
|
* is held aside and put back afterwards.
|
|
9
10
|
*/
|
|
10
|
-
export class PromptBar {
|
|
11
|
+
export class PromptBar extends VStack {
|
|
11
12
|
editor;
|
|
12
13
|
borrowed = false;
|
|
13
14
|
held = '';
|
|
14
15
|
constructor(editor) {
|
|
16
|
+
super([]);
|
|
15
17
|
this.editor = editor;
|
|
18
|
+
// The editor is the bar's layout child rather than a row this wrapper paints
|
|
19
|
+
// itself. A pointer is then dispatched to the editor, which is the component
|
|
20
|
+
// that drew the text and the only one that can take focus for it; a wrapper
|
|
21
|
+
// that merely forwarded the event would still be focused in its place, and
|
|
22
|
+
// the keyboard would go to a component with no input handling at all.
|
|
23
|
+
this.addChild(editor, { visible: () => !this.borrowed });
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
26
|
* Borrow the editor for a gate that collects answers in it.
|
|
@@ -30,6 +38,17 @@ export class PromptBar {
|
|
|
30
38
|
isBorrowed() {
|
|
31
39
|
return this.borrowed;
|
|
32
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Replace the prompt waiting behind a borrowed bar.
|
|
43
|
+
*
|
|
44
|
+
* The bar holds someone else's prompt for as long as a gate answers in it, so
|
|
45
|
+
* a draft edited during that time belongs to the held prompt rather than to
|
|
46
|
+
* the answer it would otherwise be written into.
|
|
47
|
+
*/
|
|
48
|
+
replaceHeld(text) {
|
|
49
|
+
if (this.borrowed)
|
|
50
|
+
this.held = text;
|
|
51
|
+
}
|
|
33
52
|
/** Give the editor back, with the prompt that was in it. */
|
|
34
53
|
giveBack() {
|
|
35
54
|
if (!this.borrowed)
|
|
@@ -40,7 +59,7 @@ export class PromptBar {
|
|
|
40
59
|
}
|
|
41
60
|
/** The rows the bar occupies, which a borrowing question leaves empty. */
|
|
42
61
|
render(width) {
|
|
43
|
-
return this.borrowed ? [] :
|
|
62
|
+
return this.borrowed ? [] : super.render(width);
|
|
44
63
|
}
|
|
45
64
|
invalidate() {
|
|
46
65
|
this.editor.invalidate();
|
package/lib/ui/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAG/C;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAU,SAAQ,MAAM;IAIN;IAHrB,QAAQ,GAAG,KAAK,CAAA;IAChB,IAAI,GAAG,EAAE,CAAA;IAEjB,YAA6B,MAAmB;QAC9C,KAAK,CAAC,EAAE,CAAC,CAAA;QADkB,WAAM,GAAN,MAAM,CAAa;QAE9C,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,sEAAsE;QACtE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAI,KAAc;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,OAAO,KAAK,EAAE,CAAA;IAChB,CAAC;IAED,uEAAuE;IACvE,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,IAAY;QACtB,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACrC,CAAC;IAED,4DAA4D;IAC5D,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;IAChB,CAAC;IAED,0EAA0E;IACjE,MAAM,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAEQ,UAAU;QACjB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
package/lib/ui/rows.d.ts
CHANGED
|
@@ -6,21 +6,23 @@
|
|
|
6
6
|
* all of them on every keystroke. Entries are stable objects, so their rows can
|
|
7
7
|
* be keyed by identity and only rebuilt when the width or the reader's
|
|
8
8
|
* expansion state changes.
|
|
9
|
+
*
|
|
10
|
+
* The store is weak because the transcript itself is the working set: a repaint
|
|
11
|
+
* measures every entry, so a fixed bound smaller than the entry count would
|
|
12
|
+
* evict exactly the row the next pass is about to need and turn every repaint
|
|
13
|
+
* into a full re-wrap. Tying cached rows to the entry's own lifetime keeps a
|
|
14
|
+
* settled row exactly as long as the entry exists, and releases it with the
|
|
15
|
+
* entry when a session is dropped or the model is reset.
|
|
9
16
|
*/
|
|
10
|
-
/** Entries kept before the oldest are re-rendered on demand. */
|
|
11
|
-
export declare const ROW_CACHE_LIMIT = 4000;
|
|
12
17
|
/** What the cache has done, so a test can assert the work was actually avoided. */
|
|
13
18
|
export interface RowCacheStats {
|
|
14
19
|
readonly hits: number;
|
|
15
20
|
readonly misses: number;
|
|
16
|
-
readonly size: number;
|
|
17
21
|
}
|
|
18
22
|
export declare class RowCache<K extends object = object> {
|
|
19
|
-
private
|
|
20
|
-
private readonly rows;
|
|
23
|
+
private rows;
|
|
21
24
|
private hits;
|
|
22
25
|
private misses;
|
|
23
|
-
constructor(limit?: number);
|
|
24
26
|
/** The rows for a key and tag, or nothing when they have to be rebuilt. */
|
|
25
27
|
lookup(key: K, tag: string): readonly string[] | undefined;
|
|
26
28
|
store(key: K, tag: string, lines: readonly string[]): void;
|
package/lib/ui/rows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/ui/rows.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/ui/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC7C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAElB,2EAA2E;IAC3E,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS;IAU1D,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAI1D,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,aAAa;CAGvB"}
|
package/lib/ui/rows.js
CHANGED
|
@@ -6,17 +6,18 @@
|
|
|
6
6
|
* all of them on every keystroke. Entries are stable objects, so their rows can
|
|
7
7
|
* be keyed by identity and only rebuilt when the width or the reader's
|
|
8
8
|
* expansion state changes.
|
|
9
|
+
*
|
|
10
|
+
* The store is weak because the transcript itself is the working set: a repaint
|
|
11
|
+
* measures every entry, so a fixed bound smaller than the entry count would
|
|
12
|
+
* evict exactly the row the next pass is about to need and turn every repaint
|
|
13
|
+
* into a full re-wrap. Tying cached rows to the entry's own lifetime keeps a
|
|
14
|
+
* settled row exactly as long as the entry exists, and releases it with the
|
|
15
|
+
* entry when a session is dropped or the model is reset.
|
|
9
16
|
*/
|
|
10
|
-
/** Entries kept before the oldest are re-rendered on demand. */
|
|
11
|
-
export const ROW_CACHE_LIMIT = 4_000;
|
|
12
17
|
export class RowCache {
|
|
13
|
-
|
|
14
|
-
rows = new Map();
|
|
18
|
+
rows = new WeakMap();
|
|
15
19
|
hits = 0;
|
|
16
20
|
misses = 0;
|
|
17
|
-
constructor(limit = ROW_CACHE_LIMIT) {
|
|
18
|
-
this.limit = limit;
|
|
19
|
-
}
|
|
20
21
|
/** The rows for a key and tag, or nothing when they have to be rebuilt. */
|
|
21
22
|
lookup(key, tag) {
|
|
22
23
|
const cached = this.rows.get(key);
|
|
@@ -25,25 +26,16 @@ export class RowCache {
|
|
|
25
26
|
return undefined;
|
|
26
27
|
}
|
|
27
28
|
this.hits += 1;
|
|
28
|
-
// Reinserting keeps a row that is still on screen from ageing out.
|
|
29
|
-
this.rows.delete(key);
|
|
30
|
-
this.rows.set(key, cached);
|
|
31
29
|
return cached.lines;
|
|
32
30
|
}
|
|
33
31
|
store(key, tag, lines) {
|
|
34
32
|
this.rows.set(key, { tag, lines });
|
|
35
|
-
while (this.rows.size > this.limit) {
|
|
36
|
-
const oldest = this.rows.keys().next();
|
|
37
|
-
if (oldest.done === true)
|
|
38
|
-
return;
|
|
39
|
-
this.rows.delete(oldest.value);
|
|
40
|
-
}
|
|
41
33
|
}
|
|
42
34
|
clear() {
|
|
43
|
-
this.rows
|
|
35
|
+
this.rows = new WeakMap();
|
|
44
36
|
}
|
|
45
37
|
stats() {
|
|
46
|
-
return { hits: this.hits, misses: this.misses
|
|
38
|
+
return { hits: this.hits, misses: this.misses };
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
41
|
//# sourceMappingURL=rows.js.map
|
package/lib/ui/rows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/ui/rows.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/ui/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,MAAM,OAAO,QAAQ;IACX,IAAI,GAAG,IAAI,OAAO,EAAiB,CAAA;IACnC,IAAI,GAAG,CAAC,CAAA;IACR,MAAM,GAAG,CAAC,CAAA;IAElB,2EAA2E;IAC3E,MAAM,CAAC,GAAM,EAAE,GAAW;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;YAChB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QACd,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,GAAM,EAAE,GAAW,EAAE,KAAwB;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACjD,CAAC;CACF"}
|
package/lib/ui/stash-picker.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { ListPicker } from './picker.ts';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function stashLabel(text: string): string;
|
|
11
11
|
/**
|
|
12
|
-
* The drafts of one
|
|
12
|
+
* The drafts of one session, chosen by key press.
|
|
13
13
|
*
|
|
14
14
|
* The id a pick settles on is the entry id, so a pop survives the list being
|
|
15
15
|
* re-read while it is open and can never take the wrong draft after a concurrent
|
|
@@ -18,7 +18,7 @@ export declare function stashLabel(text: string): string;
|
|
|
18
18
|
* it into something a reader could type and miss.
|
|
19
19
|
*/
|
|
20
20
|
export declare class StashPicker extends ListPicker<ResolvedEntry> {
|
|
21
|
-
constructor(entries: readonly ResolvedEntry[],
|
|
21
|
+
constructor(entries: readonly ResolvedEntry[], sessionLabel: string, keys: () => Keymap, now?: () => number);
|
|
22
22
|
}
|
|
23
23
|
/** The choice that clears the bank, as opposed to leaving it alone. */
|
|
24
24
|
export declare const STASH_CLEAR_CHOICE = "clear";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stash-picker.d.ts","sourceRoot":"","sources":["../../src/ui/stash-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAe,UAAU,EAAoC,MAAM,aAAa,CAAA;AAqBvF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,UAAU,CAAC,aAAa,CAAC;gBAEtD,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,
|
|
1
|
+
{"version":3,"file":"stash-picker.d.ts","sourceRoot":"","sources":["../../src/ui/stash-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAe,UAAU,EAAoC,MAAM,aAAa,CAAA;AAqBvF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,UAAU,CAAC,aAAa,CAAC;gBAEtD,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,MAAM,EAClB,GAAG,GAAE,MAAM,MAAyB;CAiBvC;AAED,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,UAAU,CAAA;AAGzC,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAElE;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,aAAa,CAAC;gBACnD,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM;CAmB9C"}
|